Něco nefunguje tak, jak by mělo CSTUG

Pravděpodobně je problém v pomíchaných verzích TeXu. Systém dělení se totiž s přechodem od verze 2.9 na 3.0 změnil. Používá-li se (plain) TeX verze 3.0 nebo pozdější, je třeba se ujistit, že soubor plain.tex je alespoň verze 3.0. Používá-li se LaTeX 2.09 (poslední verze byla uvedena 25.března 1992), bylo by dobré přejít na LaTeX 2e, jelikož zdrojové soubory LaTeXu 2.09 již nejsou veřejně k dispozici. Pokud nemůžete upgradovat na verzi LaTeX 2e, pak si můžete z CTANu stáhnout poslední verzi LaTeXu 2.09 vydanou 25. března 1992. Tím měl být váš problém vyřešen.

Používá-li se LaTeX 2e, je příčina chybného dělení pravděpodobně v souboru hyphen.cfg, který musí být vytvořen, používáme-li více jazyků najednou.

Pro toho, koho to zajímá, problém spočívá v tomto: V TeXu do verze 3.0 neumožňoval algoritmus dělení slov rozdělit slovo, pokud první část rozděleného slova neobsahovala alespoň dva znaky a jeho druhá část alespoň znaky tři. Počínaje verzí 3.0 lze řídit minimální velikost těchto částí pomocí celočíselných parametrů \lefthyphenmin\righthyphenmin. V nových formátech plainlplain jsou nastaveny na hodnoty 2 a 3. Mohou být samozřejmě nastaveny na libovolnou hodnotu, s tím, že překročí-li součet \lefthyphenmin + \righthyphenmin hodnotu 62, nebude docházet k žádnému dělení slov.

Jiný zdroj této zvláštnosti může pocházet z corkovsky kódovaných fontů vydaných roku 1995 (viz Otázku Čo sú EC fonty?), které přišly s novým alternativním stylem dělení. V konfiguračním souboru LaTeXu 2e je možné u uvedených fontů povolit alternativní dělení, to může způsobit u některých slov zvláštní vedlejší efekt. Konfigurační soubory z LaTeXu 2e vydaného v prosinci 1995 však alternativní dělení nepoužívají.


cslatex ignoruje \hyphenation a \righthyphenmin

V českých a slovenských dokumentech cslatex tyto deklarace ignoruje, přestože v LaTeXu 2.09 to fungovalo. Příčina rozdílného chování tkví v tom, že styly czech.styslovak.sty, které cslatex používá, vkládají přepínací makro \czech resp. \slovak prostřednictvím \AtBeginDocument. Všechny změny nastavované v preambuli se tudíž týkají implicitního \language 0, jímž je americká angličtina. Toto chování má racionální důvod. Pokud při zavádění stylu pro češtinu (nadále budeme pro jednoduchost mluvit pouze o češtině, pro slovenštinu platí totéž) použijeme parametr split, aby se slova s rozdělovníkem dělila podle českých typografických pravidel, je znak minus aktivní a nebylo by tudíž možno zadávat záporná čísla a záporné rozměry. To by ovšem značně komplikovalo nastavování různých parametrů v preambuli dokumentu. Navíc by to způsoboovalo, že některé další styly by podle okolností někdy přestaly fungovat. Změny \righthyphenmin\lefthyphenmin i definici výjimek dělení \hyphenation tedy musíme umístit až za \begin{document}.

Často je žádoucí, aby tyto změny byly specifikovány ve stylovém souboru. Pak ovšem musíme zajistit, aby se provedly až po nastavení češtiny. Budeme-li např. celý dokument sázet do úzkých sloupců, můžeme použít

\RequirePackage[split]{czech}
\AtBeginDocument{\righthyphenmin 2\relax}
\end{document}

Primitiv \relax chrání před případnou následující chybnou definicí, která by při své expanzi vytvořila číslici. Příkazem \RequirePackage si zajistíme, že se czech.sty načte dříve než náš styl a nastavení se skutečně provede pro češtinu.

Pokud vytváříme vícejazyčný dokument, je situace o něco složitější. Příkaz \czech totiž vždy nastaví standardní hodnoty. Pokud chceme, aby se \righthyphenmin po přepnutí češtiny vždy nastavil na hodnotu 2, můžeme toho dosáhnout například následujícími definicemi:

\RequirePackage[split]{czech}
\let\OriginalCzech\czech
\def\czech{\OriginalCzech \righthyphenmin 2\relax}

Specifikace výjimek dělení je poněkud jednodušší. Příkaz \hyphenation je vždy prováděn globálně. Abychom nepoškodili další makra případnými aktivními znaky, můžeme definice výjimek dělení uzavřít do skupiny například takto:

{\czech \hyphenation{po-po-ka-te-pe-tl}}


Podivné dělení slov v angličtině

Může se stát, že slavné automatické dělění slov TeXu nedělí v místech, která jsou doporučena ve slovníku. Dochází k tomu zřejmě proto, že TeX používá americkou angličtinu, jejíž pravidla pro dělení slov (tak jak jsou uvedena, například, ve Webster's Dictionary) jsou zcela odlišná od pravidel angličtiny britské (tak jak jsou uvedena, například, v Oxford Dictionaries). Na řešení tohoto problému se podílí především Sdružení uživatelů TeXu Spojeného Království (UK TeX User community) (viz jejich časopis Baskerville{}, vydání 4.4), avšak naprosto uspokojivé řešení je náročné na čas.


Akcentovaná slova se nedělí

TeXovský algoritmus dělení slov neuvažuje jako jedno slovo takové, které má v sobě zahrnutý příkaz \accent. Jsou pro to dobré důvody, ale znamená to, že kvalitní sazba neanglických jazyků je obtížná.

Aby se TeX vyhnul těmto těžkostem, bylo přijaté corkovské kódování (viz Otázku Čo sú EC fonty?), které obsahuje akcentované znaky jako samostatné znaky. Uživatelé LaTeXu mohou dosáhnout tohoto řešení vložením příkazu

  \usepackage[T1]{fontenc}
do preambule dokumentu. Jiná kódování (např. LY1 podporované Y&Y — viz Otázku Komerční implementace TeXu) mohou být použita místo T1. Většina současných 8-bitových kódování by měla pracovat s většinou současných sad dělících šablon.

Snad v budoucnosti Omega (viz Otázku Projekt Omega) poskytne celkem nové řešení.


Rozšíření kapacity TeXu

Občas se stane, že se objeví na terminálu zpráva: „memory capacity exceeded“ (překročení kapacity paměti). Za chybovou hláškou se pak v závorce objeví, co bylo vyčerpáno. Např.:

   ! TeX capacity exceeded, sorry
                  [main memory size=263001].
Většinu takovýchto chyb lze vyřešit bez jakéhokoli rozšiřování kapacity TeXu. Nejběžnějšími příčinami jsou nepárové závorky, velmi dlouhé řádky a špatně napsaná makra. Velmi dlouhé řádky (extra-long lines) vznikají často při chybném přenosu souborů mezi rozdílnými operačními systémy a zvláště tehdy, když znaky označující konec řádky nejsou převedeny vhodným způsobem (příznakem chyby zapříčiněné velmi dlouhými řádky je chybová zpráva o překročení velikosti bufferu buf_size).

Pokud je skutečně třeba rozšířit kapacitu TeXu, volba vhodné metody závisí na použité instalaci. Nejčistší formou jak rozšíření provést, je změnit parametry přímo v modulu 11 zdrojového WEB souboru. Pak musíte znovu překompilovat váš TeX a vygenerovat všechny formátové soubory.

Moderní implementace umožňují změnit velikost některé části paměti TeXu semi-dymanicky. Některé (třeba em-TeX) umožňují nastavit kritéria pro velikost přidělené paměti přímo z příkazové řádky, když program spouštíte. Poměrně často čte TeX při spouštění konfigurační soubor, v němž je specifikována velikost paměti. V systémech založených na web2c je tento soubor pojmenovaný texmf.cnf: podívejte se do dokumentace vaší implementace. Opět tento soubor musí být v mnoha případech po změně parametrů paměti znovu generován.


Plovoucí tabulky a obrázky LaTeXu

Tabulky a obrázky (figures) mají sklon k tomu, aby nás udivovaly svým odplouváním z místa, kde měly být původně vysázeny. Děje se tak proto, aby bylo dosaženo dokonalého vzhledu dokumentu. Každý profesionální systém určený pro sazbu nechává „odplouvat“ tabulky a obrázky na taková místa, kde jejich umístění nevede k narušení typografických pravidel. Dokonce užijeme-li parametru h ve zdrojovém textu, abychom dosáhli umístění „zde“ (here), obrázek či tabulka nebude vytištěna „zde“ v případě, že by to tato pravidla narušilo. Pravidla samotná jsou poměrně jednoduchá a jsou popsána na str. 198, v kapitole C.9 manuálu LaTeXu. V horším případě pravidla LaTeXu mohou vést k nakupení plovoucích objektů takového rozsahu, jež vede k chybové zprávě „Too many unprocessed floats“ (Přespříliš nezpracovaných plovoucích objektů). To znamená, že omezený počet registrů, ve kterých LaTeX uchovává plovoucí objekty, je naplněn. Následuje jednoduchý přehled toho, co je třeba udělat, abychom takové problémy vyřešili (v přehledu se hovoří o obrázcích, ale totéž platí i o tabulkách).

  • Musí vaše obrázky být vůbec plovoucí? Když ne, zvažte volbu umístění [H] poskytovanou balíkem float: obrázky s takovýmto umístěním jsou poskládány tak, aby vypadaly, že jsou plovoucí, i když ve skutečnosti nejsou. Mějte se však na pozoru před „vytékajícími“ floaty: příkazy csx{caption} jsou číslovány v pořadí, v jakém se objevují v dokumentu a [H] float může „převzít“ float, který ještě nebyl umístěn, takže čísla obrázků se popletou.
  • Zvolili jsme správné parametry umístění obrázku? Předdefinované (default) parametry (tbp) většinou dostačují a můžete je také rozumně změniť (třeba přidat h). Cokoli uděláte, nikdy nezapomeňte h, poněvadž tím je řečeno: „jestliže to nemohu umístit zde (here), nemohu to umístit ani někde jinde“.
  • Můžeme ochránit naše obrázky od odplutí nastavením parametru LaTeXu pro umístění plovoucích objektů? I zde lze říci, že přednastavené hodnoty jsou přiměřené, avšak mohou být v případě problémů přepsány. Blíže jsou popsány na str. 199 – 200, v kapitole C.9 manuálu LaTeXu.
  • Najde se v našem dokumentu místo, kam by bylo možné přirozeně vložit příkaz \clearpage? Jestliže ano, pak je dobré tak učinit. Nahromaděné plovoucí objekty se příkazem \clearpage uvolní. (Pozn.: Příkaz \chapter používá \clearpage, a proto obrázky nemohou odplout za konec stávající kapitoly.)
  • Skuste balík placeins: definuje příkaz csx{FloatBarrier}, za který floaty nemůžou přejít. Volba balíku vám dovoluje deklarovat, že se floaty nemůžou dostat za příkaz csx{section}, csx{FloatBarrier} ale můžete umístit kamkoliv se rozhodnete.
  • Jestliže jse obtěžováni floaty objevujícími se na začátku stránky (předtím, jak jsou specifikovány ve vašem textu), vyskoušejte balík flafter, který se tomuto problému vyhýbá tím, že trvá na objevení se floatů vždy až po jejich definici.
  • Lze použít balíku afterpage pro LaTeX 2e (adresář CTAN2etools). V dokumentaci k tomuto balíku je na jednom příkladě uvedena myšlenka vložení \clearpage po aktuální stránce (tam, kde se uvolněním nakupených plovoucích objektů nevytvoří nevzhledná mezera v textu), avšak je tam uvedeno i to, že tento balík je poněkud křehký. Tuhle možnost využívejte jenom jako poslední útočiště, když další dvě problém neřeší.
  • Poslední možností, jak uvedené problémy obejít, je použití balíku morefloats, jenž jednoduše zvětší počet možných plovoucích objektů, se kterými může LaTeX pracovat najednou (z 18 na 36), což by mělo ve většině případů dostačovat.
  • Jestliže nastane nutnost toho, že všechny obrázky mají být umístěny na konci dokumentu (například, při zasílání článku), nelze spoléhat na to, že to LaTeX učiní za nás. Lépe je použít balíku endfloat, který je k takovému účelu určen (najdeme ho na CTANu v CTANendfloat).
morefloats: CTANmorefloats


Užití \pagestyle{empty} na první stránce v LaTeXu

Použije-li se \pagestyle{empty}, a přesto je první stránka označena číslem, pak je pravděpodobně užit i příkaz \maketitle. To není chyba, ale správná vlastnost LaTeXu! Standardní styly LaTeXu jsou psány tak, že u úvodní strany (strany obsahující příkazy \maketitle, \part, či \chapter) se použije styl strany (pagestyle) jiný než ve zbytku dokumentu. Uvedené příkazy spouští \thispagestyle{plain}. Tato vlastnost však není příliš vhodná v případě, že veškerý okolní text má nečíslované stránky (\pagestyle{empty}).

Změny této vlastnosti dosáhneme:

  • Když vložíme \thispagestyle{empty} bezprostředně za příkaz \maketitle ; tj. mezi příkazy se nesmí vložit prázdný řádek.
  • Použijeme-li fancyhdr nebo scrpage2, který umožňuje měnit styl úvodní stránky nezávisle na stylu stránek ostatních. Lze je nalézt v adresáři CTANfancyhdr a jako součást balíku CTANkoma-script
  • Když použijete buď třidu memoir (CTANmemoir) nebo nejakou třídu z KOMA-script, užívejte technik doporučených v otázce Ako sa zbaviť čísel strán.


Ako vytvoriť orezové značky

Ak tlačíte niečo, čo bude nakoniec reprodukované v nezanedbateľných množstvách a zviazané, je obvyklé tlačiť na papier väčší než výsledný produkt a mimo tlačovú oblasť umiestniť orezové značky. Tieto orezové značky sú dostupné vydavateľstvu na nastavenie reprodukčných a rezacích strojov.

Môžete si ušetriť (značné) problémy programovania týchto značiek vlastnoručne použitím balíku crop, ktorý obsahuje nástroje na uspokojenie akéhokoľvek mysliteľného vydavateľstva. Používatelia triedy memoir balík nepotrebujú, kedže memoir má vlastné prostriedky na programovanie orezových značiek.
crop.sty: CTANcrop
memoir.cls: CTANmemoir


Podtržený text nejde rozdělit

Knuth nevytvořil žádnou podporu pro podtržený text: zastával názor, že podtržení není sázecí technika, ale pouze sloužilo ke zdůraznění části textu na psacích strojích. Odpovídající techniky v sazbě textů je přepnutí z antikvy do kurzívy (nebo naopak). Toto umí se svým argumentem provést příkaz \emph.

Přesto však typograficky negramotní lidé (např. ti, kteří používají dvojité řádkování (viz Otázku Dvojité riadkovanie v dokumentoch LaTeXu), nadále požadující psát podtrženě, mohou použít příkaz \underline, který používá matematické podtrhávání. Tato technika není zcela uspokojivá, nicméně text drží pohromadě a nechce se na konci řádku rozdělit. Řešením mohou být dále uvedené balíky. Balík ulem, který předefinuje příkaz \emph tak, že svůj argument podtrhne. Text se pak chová jako normální zvýrazněný text a láme se i na koncích řádků. (Balík je schopen i jiných efektů, čtěte dokumentaci uvedenou v souboru balíku samotném.) Balík soul definuje příkaz csx{ul} (po kterém je balík částečně pojmenován) podtrhující text.

Dejte si pozor na standardní chování balíku ulem, které konvertuje příkaz csx{emph} na podtrhovací; tomuto lze předejít nahráním balíku:

  \usepackage[normalem]{ulem}
Dokumentace ulem je v balíku samotném.
ulem.sty: CTANulem
soul.sty: CTANsoul


Podivné chování \rm, \bf, atd.

Jestliže příkazy jako \rm\bf v LaTeXu přestaly náhle fungovat tak, jak se od nich očekávalo, je to zřejmě proto, že administrátor systému nainstaloval verzi LaTeXu 2.09 spolu Makro NFSS (The New Font Selection Scheme). V takovém případě je dobré si mu nahlas postěžovat a požádat jej, aby tuto verzi zaměnil za LaTeX 2e (nový standard LaTeXu), v němž příkazy \rm, \bf apod., jsou-li užity ve standardních třídách — article, reportbook aj. — fungují stejně jako předtím. Než k záměně dojde, lze použít oldlfont.sty. Tento styl by měl být instalován zároveň s NFSS.


Odkazy na příkazy typu \tenrm ve starém LaTeXu

V LaTeXu 2.09 byla definována rozsáhlá množina příkazů, jež zpřístupňovaly vestavěné fonty. Například pro různé velikosti fontu cmr se v něm dalo použít příkazů: \fivrm, \sixrm, \sevrm, \egtrm, \ninrm, \tenrm, \elvrm, \twlrm, \frtnrm, \svtnrm, \twtyrm\twfvrm.

Tyto příkazy nebyly nikde dokumentovány, avšak mnohé balíky jich užívaly k dosažení požadovaných efektů.

Protože však tyto příkazy nebyly veřejné, nestaly se součástí nového LaTeXu 2e. Chceme-li použít neupravené balíky původně určené pro LaTeX 2.09 v LaTeXu 2e, je potřeba použít zároveň balíku rawfonts.sty, který je součástí distribuce LaTeXu 2e.


Chybějící symboly

Nemůžeme-li se dostat k některým symbolům, jako například \Box and \lhd, pak zřejmě správce systému aktualizoval stávající verzi LaTeXu buď na Makro NFSS (The New Font Selection Scheme) či LaTeX 2e (nový standard LaTeXu). V případě, že máme NSFS, užijeme oldlfont.sty (viz Podivné chování \rm, \bf, atd.). V LaTeXu 2e užijeme balík latexsym, jenž je součástí standardní distribuce LaTeXu 2e, anebo balík amsfonts, je-li instalován.


Chybné křížové odkazy v LaTeXu

Někdy, i když necháme zdrojový text proběhnout LaTeXem několikrát, dostáváme stále nesprávné křížové odkazy. Zapamatujme si, že příkaz \label musí následovat po příkazu \caption, případně musí být jeho součástí. Například,

\begin{figure}           \begin{figure}
\caption{Obrázek}  nebo  \caption{Obrázek%
\label{fig}                   \label{fig}}
\end{figure}             \end{figure}

Stejně efektivně můžete příkaz csx{caption} ochránit před jeho sdruženým příkazem csx{label} uzavřením popisku do vlastního prostředí. Lidé například často hledají pomoc potom, co

\begin{center}
  \caption{Obrázek}
\end{center}
\label{fig}

neoznačuje správně. Když skutečně potřebujete toto centrování (zasvěcení ho obyčejně odmítají), použijte:

\begin{center}
  \caption{Obrázek}
  \label{fig}
\end{center}


\@ a @ ve jménech maker

Častým zdrojem problémů v dokumentech psaných v LaTeXu je výskyt příkazu \@, či jiných příkazů obsahujících znak @ (at). Nejobvyklejším chybovým hlášením je: „You can't use “\spacefactor” in vertical mode“ ( „Nelze použít `\spacefactor' ve vertikálním módu“), ale mohou se objevit i jiná obdobná hlášení.

Podobné problémy jsou obvykle způsobeny vložením souboru třídy (class file) či některého stylového souboru (package file) do dokumentu LaTeXu 2e nevhodným způsobem, tj. bez použití příkazů \documentclass či \usepackage.

V LaTeXu se jména vnitřních maker definují obvykle tak, že obsahují znak @. Tímto způsobem se autoři stylů snaží vyhnout kolizi mezi názvy příkazů použitými uvnitř stylu a příkazů běžně užívanými v dokumentu. Aby však příkazy tohoto typu mohly vůbec fungovat, musí makra \documentclass\usepackage měnit význam znaku @.

Problém s chybovým hlášením se jednoduše vyřeší tím, že se styly a třídy do dokumentu vkládají prostřednictvím příkazů \usepackage a \documentclass.

Je však možné namítnout: „V The LaTeX Companion se říká, že příkazy obsahující @ lze použít!“

Ovšem. Například je tam dlouhý oddíl o příkazu \@startsection a  o tom, jak jej používat k úpravě vzhledu nadpisů oddílů. Je o tom psáno na straně 15 The LaTeX Companion, ale je tam rovněž navrženo provádět obdobné změny v preambuli dokumentu (tj. před \begin{document}) mezi příkazy \makeatletter\makeatother. Definice \subsection na straně 26 by mohla vypadat takto:

  \makeatletter
  \renewcommand{\subsection}{\@startsection
    {subsection}%                    % name
    ...
    {\normalfont\normalsize\itshape}}% style
  \makeatother


Kde jsou fonty msx a msy

Fonty msxmsy byly navrženy Americkou matematickou společností (AMS) pro sazbu odborných článků v matematických časopisech již v prvopočátcích existence TeXu. Byly navrženy pro „starý“ METAFONT, který nebyl přenositelný a již se nepoužívá. Velmi dlouhou dobu byly tyto fonty dostupné pouze v rozlišení 300dpi, které se ovšem stěží hodí pro moderní tiskárny. AMS nyní předělala fonty pro soudobou verzi METAFONTu. Nové rodiny fontů byly pojmenovány msamsb. Lze je získat v CTANamsfonts-symbols

Přesto nás fonty msxmsy nepřestávají sužovat. Jsou doposud lidé, kteří se nerozhodli k aktualizaci fontů. Avšak, i když nakonec každý bude používat nové fonty, zůstanou problémy se starými dokumenty, které se na msxmsy odkazují.

Máme-li zdrojový .tex soubor, který vyžaduje užití msxmsy, nejlepším způsobem, jak se zbavit problému se starými fonty, je taková úprava souboru, aby se používaly msamsb namísto msxmsy (stačí změnit pouze jedno písmeno ve jménech fontů).

Máme-li dvi-soubor, který se odkazuje na msxmsy fonty, můžeme k přesměrování starých fontů na nové použít balík Virtuální fonty CTANmsx2msa


Kde jsou fonty am

Příležitostně se stále objevuje požadavek na soubor písem am; am je zkratka „Almost [Computer] Modern“ (téměř [Computer] Modern). Tyto fonty jsou předchůdci fontů Computer Modern, které všichni známe a máme (nebo nemáme) rádi [6]. Není toho mnoho, co by se s těmito fonty dalo ještě dělat. Jsou, jak ostatně jejich název napovídá, téměř (ale ne úplně) shodné se souborem fontů cm. Máme-li před sebou dokument, jenž požaduje am fonty, jediná rozumná věc, kterou můžeme udělat, je nahradit v dokumentu am za cm. Dvi soubory, které by požadovaly am fonty, se vyskytují tak zřídka, že se nikdo neujal náročného úkolu vytvoření transformace pomocí virtuálních fontů. Můžeme však využít toho, že většina ovladačů umožňuje použít konfigurační soubor, v němž lze zadat substituci fontů. Zadáme-li, že veškeré fonty am mají být nahrazeny odpovídajícími fonty cm, výstup by měl být téměř správný.


„Příliš dlouhý řetězec“ v BibTeXu

Upozornění BibTeXu „Warning—you've exceeded 1000, the global-string-size, for entry foo“ (Celková velikost řetězce v položce foo je větší než 1000) není toho druhu, jehož se lze vyvarovat jednoduchým pozměněním stylu BibTeXu. Ke zvětšení přípustné délky řetězců je třeba znovu překompilovat BibTeX, což není praktické a příliš žádoucí. Proto je třeba problém řešit změnou databáze bibliografických citací.

Problém je obvykle v tom, že databáze obsahuje velmi rozsáhlý abstrakt či anotaci. Jedinou možností nápravy je vynětí tohoto záznamu z databáze tak, aby nebyl překročen limit BibTeXu. Avšak většinou je potřeba záznam v databázi nějakým způsobem zachovat, jelikož bude užit v sazbě. V takovém případě se záznam vloží do zvláštního souboru:

  @article{long.boring,
    author =    "Fred Verbose",
    ...
    abstract =  "{\input{abstracts/long.tex}}"
  }
Tímto způsobem se zařídí, že BibTeX pracuje pouze se jmény souborů, ale v případě potřeby TeX zařídí vložení celého vlastního textu do dokumentu.


MikTeX nevytváří LaTeXový

formát}

Práce na MikTeXu 1.20e přestaly 1. prosince 2000. Od této verze již nebyl aktivně vyvíjen. Vydání LaTeXu z 1. června 2000 již nebylo do této distribuce integrováno. Skripty v MikTeXu neumějí vytvořit formátový soubor novějších verzí LaTeXu. Řešení tohoto problému je přístupné na adrese http://www.miktex.org/1.20/important.html; zde je link na náhradu souboru latex.zip a návod, jak jej nainstalovat. Tento problém byl již dán do pořádku ve verzi MikTeXu vydané 23. ledna 2001.


Začátek řádku není rovný

Tato odpověď se dotýká dvou tříd problémů: chyby formy

! Missing number, treated as zero.

                    g
<*> [grump]
a toho, že na začátku řádku byla jedna hvězdička, která se záhadně neobjevila na výstupu. Oba problémy vznikly, protože „\\“ bere pouze nepovinné argumenty. Příkaz „\\*“ znamená „zlom řádek zde a zabraň stránce, aby se zde zlomila“. Příkaz „\\[<dimen>]“ znamená „zde zlom řádek a pak přidej vertikální mezeru o <dimen> řádcích“. Tak proč si tedy „\\“ plete při použití těchto parametrů začátek řádku? Čeká na první nebílý znak a v testu, který používá, ignoruje konec řádku ve vašem vstupním souboru. Řešením je uzavření tohoto textu na začátku řádku do složených závorek:
{\ttfamily
  /* C-language comment\\
  {[grump]} I don't like this format\\
  {*}/
}
Výše zmíněný text pochází z aktuálního příspěvku do konference comp.text.tex; tento případ může být také vyřešen pomocí prostředí verbatim.

Problém se objevuje také v matematickém módu, v polých atd. V tomhle případě není závorkování věcí ve velkém dobrý nápad; může být použité TeXovské primitivum csx{relax} (které nedělá nic kromě blokování hledání tohoto druhu). Z jiného příkladu z Newsgroup{comp.text.tex}:

\begin{eqnarry}
  [a] &=& b \\
  \relax[a] &=& b
\end{eqnarry}

co je použití, které toto FAQ nedoporučuje: prostudujte si odpověď na Otázku Prečo nepoužiť eqnarray?.


Balík hlási „command already defined“

Nahráte pár balíkov a druhý z nich hlási, že jeden z príkazov, ktoré definuje, je už prítomný. Napríklad oba balíky txfontsamsmath definujú príkaz csx{iint} (a csx{iiint} atď.); takže

...
\usepackage{txfonts}
\usepackage{amsmath}

vytvorí reťazec chybových hlásení formy:

! LaTeX Error: Command \iint already
   defined.  Or name \end... illegal,
   see p.192 of the manual.

Obecne platí, že veci, ktoré amsmath definuje, definuje dobre; existuje však dobrý prípad pre použitie txfonts verzie príkazu csx{iint} — asociované tx fonty majú dvojitý symbol integrálu, ktorý nemusí byť robený spôsobom ako pri amsmath. V prípade, že nahrávate viaceré balíky symbolov, z ktorých každý definuje rovnaký symbol, pravdepodobne budete tento problém silno pociťovať (csx{euro} je bežnou obeťou).

Existujú podobné prípady, keď jeden balík redefinuje príkaz iného balíku, ale neobjavia sa žiadne chyby, pretože redefinujúci balík nepoužíva csx{newcommand}. V takomto prípade si zmenu často všimnete iba z dôvodu, že predpokladáte definíciu prvým balíkom. Balíky amsmathtxfonts sú práve takouto dvojicou; txfonts nevyvoláva chyby.

S problémom sa môžete vysporiadať uložením a obnovením príkazu. Macro programátori sa o toto môžu postarať sami; pre ostatných z nás existuje balík savesym. Postupnosť:

\usepackage{savesym}
\usepackage{amsmath}
\savesymbol{iint}
\usepackage{txfonts}
\restoresymbol{AMS}{iint}

spraví, čo chceme; zachovajúc amsmath verziu príkazu ako csx{AMSiint} a sprístupňujúc txfonts verziu.

Dokumentácia savesym veľa neobsahuje: jedinými príkazmi sú csx{savesymbol} a csx{restoresymbol}, ktoré boli spomenuté vyššie.
amsmath.sty: Súčasť CTANamslatex
savesym.sty: CTANsavesym
txfonts.sty: Súčasť CTANtxfonts


Prečo nefunguje csx{linespread}?

Príkaz \linespread{factor} má vynásobiť aktuálny csx{baselineskip} číslom <factor>; podľa všetkého to však nerobí.

Príkaz je v skutočnosti ekvivalentný \renewcommand{\baselinestretch}{factor}: napísané týmto spôsobom nás už tak neprekvapí, že efekt nie je okamžitý. Činiteľ csx{baselinestretch} je použitý, keď je vybraný font; iba zmena csx{baselinestretch} nezmení font viac ako príkaz \fontsize{size}{baselineskip} — za každý z príkazov musíte doplniť csx{selectfont}. Takže:

\fontsize{10}{12}%
\selectfont

alebo:

\linespread{1.2}%
\selectfont

Balíky ako setspace, ktorého prácou je správa účiaria, si samozrejme s týmto poradia — viď Otázku Dvojité riadkovanie v dokumentoch LaTeXu. Ak sa chcete vyhnúť balíku setspace, dajte si pozor na správanie zmien rozostupu riadkov v odstavci: prečítajte si Otázku Iba jeden csx{baselineskip} na odstavec.
setspace.sty: CTANsetspace


Iba jeden csx{baselineskip} na odstavec

csx{baselineskip} nie je (ako by ste dúfali) vlastnosť riadku, ale odstavcu. Výsledkom je, že v 10pt (nominálne) dokumente (so štandardnou csx{baselineskip} hodnotou 12pt) bude jediný väčší znak ako:

{\Huge A}

bude do odstavca natlačený: TeX sa postará o to, že si s horným riadkom nebudú vadiť, ale nedá mu „priestor na dýchanie“, ako to robí pri texte štandardnej veľkosti; jeho veľkost (24.88pt) je teda zobraná do úvahy, ale jeho csx{baselineskip} (30pt) nie je. Podobne

Text odstavca ...
{\footnotesize Rozšírená vsuvka ...
   ... do odstavca.}
      ... odstavec pokračuje ...

bude vyzerať zle, kedže 8pt vsuvka skončí vysádzaná na 12pt csx{baselineskip} odstavca, namiesto preferovaných 8.5pt.

Ako sa teda s týmito problémami vysporiadať? Sekcie (mierne) väčších rozmerov sú typicky opravené pomocou podpery (strut): toto slovo pochádza z klasickej typografie využívajúcej premiestňovateľné kovové časti a označuje oddeľovač boxov (obsahujúcich kovové znaky). Vždy, keď zmeníte veľkosť fontu, LaTeX redefinuje príkaz csx{strut} aby poskytoval ekvivalent kovovej podpery zvolenej veľkosti. Takže pre horný príklad napíšeme

Text odstavca ...
   {\Huge A\strut}
   ... odstavec pokračuje ...

Rozširené vloženia (či už väčšieho alebo menšieho textu) však budú vždy pôsobiť problémy; môžete použit podperu pre väčší text, používanie pre každý riadok ale bude únavné a neexistuje nič, čo by sme mohli nazvať „zápornou podperou“, ktorá by riadky pritiahla k sebe pre menší text.

Jediným uspokojujúcim spôsobom na zaobchádzanie s rozšírením vložením pri rozličnej veľkosti je vysádzanie do oddeleného odstavca. Postačujúcou cestou, ako toto dosiahnuť, je prostredie quote, ktoré vysádza svoj text mierne odsadený voči zvyšku odstavca:

Text odstavca ...
\begin{quote}
  \footnotesize This is an inset account
  of something relevant to the enclosing
  paragraph...
\end{quote}
... odstavec pokračuje ...


Čo je s csx{bf}, csx{it}, ldots?

Príkazy výberu fontu systému LaTeX 2.09 boli csx{rm}, csx{sf}, csx{tt}, csx{it}, csx{sl}, csx{em} a csx{bf}; boli modálnymi príkazmi, takže ste ich mohli použiť nasledovne:

{\bf Fred} was {\it here\/}.

Zmena fontu bola vložená do skupiny, aby bol obmedzený jej efekt; všimnite si príkaz úpravy kurzívy csx{/}, ktorý bol potrebný na konci sekcie v kurzíve.

Pri vydaní LaTeX 2e v lete 1994 boli tieto jednoduché príkazy zastaralé, ale kedže ich používanie je hlboko zaryté v mozgoch používateľov LaTeXu, príkazy samotné zostali v LaTeXu s LaTeX 2.09 sémantikou. Táto sémantika bola čiastočným dôvodom ich označenia za zastaralé: každý z \xx príkazov potlačuje akékoľvek iné nastavenie fontu, zachovávajúc iba veľkosť. Takže napríklad

{\bf\it Here we are again\/}

ignoruje csx{bf} a vytvára text v kurzíve, strednej hrúbky (a korekcia kurzívy má skutočný efekt), zatiaľ čo

{\it\bf happy as can be\/}

ignoruje csx{it} a vytvára rovný tučný text (a korekcia kurzívy nemá čo robiť). To isté platí, ak zmiešate LaTeX 2e výbery fontu s príkazmi strého štýlu:

\textbf{\tt all good friends}

ignoruje csx{textbf}, ktorý obsahuje text a vytvára text písacieho stroja strednej hrúbky.

Prečo sú teda tieto príkazy zastaralé? — je to pre zmätok ako v poslednom príklade. Alternatívne (LaTeX 2e) príkazy sú diskutované v zbytku tejto odpovede.

Fontové príkazy systému LaTeX 2e sú v dvoch formách: modálne príkazy a príkazy textových blokov. Štandardná sada modálnych príkazov poskytuje hrúbky csx{mdseries} a csx{bfseries}, sklon csx{upshape}, csx{itshape}, csx{scshape} a csx{slshape} a rodiny csx{rmfamily}, csx{sffamily} a csx{ttfamily}. Výber fontu požaduje rodinu, sklon a sériu (ako aj, samozrejme, veľkosť). Pár príkladov:

{\bfseries\ttfamily
    and jolly good company!}

vytvára tučný text písacieho stroja (všimnite si však neprítomnosť tučného strojopisného fontu (viď Otázku Ako spraviť bold-tt alebo bold-sc) v štandardných fontoch Computer Modern), alebo

{\slshape\sffamily
    Never mind the weather\/}

(všimnite si korekciu kurzívy potrebnú tiež pri sklonených fontoch).

Príkazy textových blokov systému LaTeX 2e vezmú prvé dve písmená modálnych príkazov a vytvoria z nich príkaz csx{text}xx. Takto sa csx{bfseries} stane \textbf{text}, csx{itshape} sa stane \textit{text} a csx{ttfamily} sa stane \texttt{text}. Blokové príkazy môžu byť vnárané ako:

\textit{\textbf{Never mind the rain}}

na vytvorenie tučného textu v kurzíve (zapamätajte si, že blokové príkazy poskytujú korekciu kurzívy tam, kde je to potrebné), môžu byť tiež vzájomne vnárané s LaTeX 2e modálnymi príkazmi:

\texttt{\bfseries
    So long as we're together}

pre tučný text písacieho stroja, alebo

{\slshape\textbf{%
    Whoops!  she goes again}\/}

pre tučnú naklonenú inštanciu aktuálnej rodiny (všimnite si znova aplikovanú korekciu kurzívy na konci skupiny modálneho príkazu).

Nové príkazy (ako je uvedené vyššie) potlačujú príkazy rovnakého typu. Toto takmer vo všetkých prípadoch vylučuje smiešne nápady ako „rovný sklonený“ font alebo „teletype roman“ fonty. Existuje však pár bezprostredných zvláštností. Prvou je konflikt medzi csx{itshape} (alebo csx{slshape}) a csx{scshape}: kým mnohí tvrdia, že „small-caps“ font v kurzíve je typograficky nevhodné, takéto fonty existujú. Balík smallcap Daniela Taupina povoľuje použitie inštancií v EC fontoch (viď Otázku Čo sú EC fonty?) a podobné techniky by mohli byť prenesené na iné sady fontov. Druhou zvláštnosťou je konflikt medzi csx{upshape} a csx{itshape}: Knuth vlastne poskytuje font rovnej kurzívy, ktorý LaTeX používa pre symbol „GBP{}“ v štandardnej sade fontov. Kombinácia je dostatočne zvláštna na to, že zatiaľ čo existuje definovaný sklon fontu, neexistuje žiaden štandardný príkaz LaTeXu; pre použitie tochto sklonu potrebuje (excentrický) používateľ najjednoduchšie LaTeXovské príkazy výberu fontu:

{\fontshape{ui}\selectfont
    Tra la la, di dee}

smallcap.sty: CTANsmallcap


[6]
Fonty získaly přívlastek „Almost“ (téměř) po tom, co jejich první implementace v METAFONTu79 nedopadla tak úplně dobře. Knuthův původní záměr byl, že tyto fonty budou konečným řešením.


CSTUG
(c) 1997, 1998, 2003 Tomáš Hudec, Libor Škarvada
Poslední aktualizace: 13.11.2004 23:15