| |||
Vyhledávání podle slov v CS-FAQ
Původní verze LaTeXu poskytovala příkaz
V případě, že použijete
TeX při uspořádávání textu nepracuje tak, že by bral slovo za slovem, či řádku za řádkou. Nejmenší jednotkou, kterou TeX formátuje, jsou celé odstavce. Odstavec je načten celý do paměti a není dále zpracováván, dokud není načtena značka konce odstavce. Právě v ten okamžik se uplatní parametry odstavce. Chyby použití parametrů formátování odstavce často vznikají právě proto, že se zapomíná na to, v jaké posloupnosti se odstavec zpracovává. Předpokládejme následující větu v LaTeXu:
{\raggedright % zarovnávání textu vlevo Tento text by měl být na výstupu zarovnán pouze vlevo. Chceme, aby se tak stalo pouze v~tomto odstavci, a~ proto zde ukončíme skupinu.}
TeX otevře skupinu a nastaví parametry formátování odstavce tak,
aby byl text uvnitř této skupiny zarovnáván pouze vlevo, poté uloží
dvě věty textu, uzavře skupinu a nastaví původní parametry
odstavce.
Poté načte prázdný řádek, který je zpracován stejně jako
příkaz Aby nastavené parametry zůstaly v platnosti po celou dobu zpracovávání odstavce, je třeba ukončit odstavec uvnitř skupiny. Nahradíme-li poslední tři řádky v předchozím příkladě za: ukončíme skupinu.\par} Další text je zpracován normálně...ukončí se odstavec ve chvíli, kdy jsou parametry odstavce nastavené v uzavřené skupině stále v platnosti. Další alternativa spočívá v tom, že si můžete definovat nové prostředí, které udělá příslušnou práci za vás. Pro příklad, který byl zmiňován výše, je již v LaTeXu definováno takovéto prostředí: \begin{flushleft} Tento text by měl být... \end{flushleft}
LaTeX si ukládá některá data, jež bude zpracovávat až později. Těmito daty jsou zejména argumenty některých příkazů, takzvané pohyblivé argumenty. Pohyblivé proto, že s daty se nějakým způsobem manipuluje. Jedná se o argumenty těch příkazů, které zapisují do obsahu, seznamu tabulek atd., tj. data, která jsou zapisována do pomocného souboru, z něhož jsou později opět čtena. Jinými daty jsou ta, která se mohou objevit v záhlavích. Nejvýznamnějšími příkazy tohoto typu jsou popisy obrázků a tabulek (captions) a veškeré nadpisy. Úplný seznam lze najít v Lamportově manuálu (viz Knihy o TeXu a příbuzná literatura).
Co se za tím vším skutečně skrývá? Příkazy, jež se použijí
v pohyblivých argumentech, jsou v průběhu ukládání
plně expandovány.
Někdy je výsledkem takového rozvoje špatný
TeXovský kód, což se projeví až při jeho následném čtení.
Příkazem Co je to ,,křehký příkaz`` (fragile command)? To je příkaz, který je během ukládání rozvinut do chybného TeXovského kódu. Co je to ,,robustní příkaz`` (robust command)? To je příkaz, který je během ukládání rozvinut do správného TeXovského kódu. Nikdo se (samozřejmě) z takto nepřehledné situace neraduje. Skupina projektu LaTeX3 při práci na LaTeXu 2e odstranila potřebu některých ochran, avšak techniky, které jsou jim dostupné v současném LaTeXu, činí věc poměrně složitou. Dlouhodobým cílem této skupiny zůstává odstranění všech ochran.
Funkce příkazu LaTeXu pro sazbu textu v tom tvaru, v němž je uveden ve
zdrojovém souboru ( \verb+\error+bude fungovat (vysází se ,, \error ``), ale
\newcommand{\unbrace}[1]{#1} \unbrace{\verb+\error+}fungovat nebude (pokusí se spustit příkaz \error ). Další chyby, se
kterými se můžete setkat jsou ,,\verb ended by end of line`` nebo
,,\verb illegal in command argument``.
Proto se také v manuálu LaTeXu tolik naléhá na to, aby se příkaz verbatim neobjevil v argumentu žádného jiného příkazu. Tyto příkazy jsou nejen křehké (fragile), ale dokonce zcela nepoužitelné jako parametr jiných příkazů, bez ohledu na ochranu pomocí Proč se v LaTeXu užívá ochran (protection). Jsou zde dvě částečná řešení tohoto problému:
TeX poskytuje dva primitivní příkazy umožňující konverzi
textu do malých písmen,
Oba příkazy nerozvíjejí text, který je jejich parametrem --
výsledkem příkazu \uppercase{About $y=f(x)$}dává ABOUT $Y=F(X)$což zřejmě není to, co jsme původně zamýšleli.
Stejný problém může vzniknout s názvy prostředí v LaTeXu,
když LaTeX užívá implicitně
Při psaní makra je třeba mít na paměti, že
Definujeme-li a poté použijeme makro: \def\a#1{...#1...#1...#1...} \a{b}makro po expanzi dává ,,...b...b...b...``, což jsme očekávali. Avšak dosadíme-li nyní za ,,...``: \def\a#1{---#1---\def\x #1{xxx#1}} \a{b} se rozvine na ,,---b---\def\x b{xxxb} ``.
Definuje se zde makro \x , které je ohraničené znakem
b a které nemá žádný argument. Může se to zdát divné,
ačkoli jde jen o zvláštní případ předchozího příkladu.
Chceme-li, aby v \a
bylo definováno makro \x s jedním argumentem, musíme
upravit předchozí makro takto:
\def\a#1{---#1---\def\x ##1{xxx##1}} \a{b} se nyní rozvine do tvaru
,,---b---\def\x #1{xxx#1} ``, neboť #1 bude nahrazeno
znakem `b' a ## bude nahrazeno # .
Pro definici vnořenou uvnitř definice uvnitř definice se
použije
LaTeX dělí poznámky pod čarou na více stránek, pokud si myslí, že to je
to nejlepší, co může udělat. Typicky se tak stane, pokud poznámka pod
čarou vyjde na samotný konec stránky, a tím ji může přeplnit. Jako vždy je
nejlepším řešením problému změnit váš text tak, aby se v něm tento
problém nevyskytl. Uvažujte, zda by se poznámka ve vašem textu mohla
objevit na předchozí či další stránce. Pokud to není možné, můžete
docílit toho, že LaTeX začne jinak ,,pohlížet`` na tyto priority:
ty jsou ovládané příkazem
Alternativní technika spočívá v malém podvodu na
LaTeX, kdy pomocí parametrů příkazu
PiCTeX je poměrně náročný na systémové zdroje. Naštěstí většina
moderních TeXových distribucí nabízí poměrně dost prostoru a moderní
počítače již jsou oproti svým předchůdcům o mnoho rychlejší, takže
uživatele tato skutečnost nemusí znervózňovat. Nicméně PiCTeX má
jednu nešťastnou tendenci - rád zaplňuje pole s pevnou délkou alokovaná
TeXem - zvláště 256 ,,rozměrových`` registrů. To je problém zvláště,
pokud v LaTeXu používáte pictex a další balíky, které
potřebují stejné systémové zdroje. Pokud k tomu dojde, pak vám LaTeX
vypíše chybovou hlášku
| |||
|