|
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.}
Dal╣φ text je zpracovßn normßln∞...
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 \par ; vysßzφ dv∞ v∞ty textu.
Jeliko╛ v╣ak skupina byla ukonΦena p°ed naΦtenφm konce odstavce, nastavenφ
parametr∙ uvnit° skupiny ztratilo v²znam a odstavec bude vysßzen
s b∞╛n²mi parametry.
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.
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 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 \protect \cmd je LaTeXu °eΦeno, aby ulo╛il
\cmd bez expanze, jako \cmd .
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 (verbatim ), je zalo╛ena na vyu╛itφ zm∞ny
kategorie (category codes) jednotliv²ch znak∙. Knuth v tΘto
souvislosti °φkß:
,,Je pot°eba v∞novat jistou pΘΦi tomu, aby v╣e
prob∞hlo ve sprßvnΘm sledu...``.
Kategorie znaku se od okam╛iku, kdy je mu p°i°azena, nem∞nφ.
Proto \verb p°edpoklßdß, ╛e je prvnφm p°φkazem, kter²
se dφvß na sv∙j textov² parametr. Nenφ-li tomu tak, TeX ji╛ p°i°adil
kategorie jednotliv²m znak∙m a \verb ji╛ nemß ╣anci
kategorii m∞nit. Nap°φklad:
\verb+\error+
bude fungovat (vysßzφ se ,,\error ``), ale
\newcommand{\unbrace}[1]{#1}
\unbrace{\verb+\error+}
fungovat nebude (pokusφ se spustit p°φkaz \error ).
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).
TeX poskytuje dva primitivnφ p°φkazy umo╛≥ujφcφ konverzi
textu do mal²ch pφsmen, \lowercase , a velk²ch pφsmen,
\uppercase . Tyto p°φkazy se nepou╛φvajφ p°φli╣ Φasto, ale
dokß╛φ nad∞lat v dokumentu zmatek.
Oba p°φkazy nerozvφjejφ text, kter² je jejich parametrem --
v²sledkem p°φkazu \uppercase{abc} je ,,ABC ``, av╣ak v²sledek
p°φkazu \uppercase{\abc} je \abc a╗ u╛
\abc znamenß cokoli. P°φkazy jednodu╣e interpretujφ tabulku
ekvivalent∙ mezi velk²mi a mal²mi formami znak∙.
Nemajφ nap°φklad smysl pro matematiku, a tak
\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∞
\uppercase . Nap°φklad standardnφ t°φdy u╛φvajφ
\uppercase k nastavenφ zßhlavφ podle argumentu p°φkaz∙
\chapter a \section , tak╛e kapitola, jejφ╛ nadpis
obsahuje
malou tabulku vyjßd°enou pomocφ \begin{tabular}
... \end{tabular} , nastavφ obsah zßhlavφ na
\begin{TABULAR} , atd., co╛ je v╣ak prost°edφ, kterΘ v∙bec
neexistuje.
P°i psanφ makra je t°eba mφt na pam∞ti, ╛e
## zastupuje # obdobn∞ jako
#1 zastupuje cokoli, co je prvnφm argumentem makra.
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 ####1 , jeliko╛ v ka╛dΘ ·rovni je ## nahrazeno # .
V dal╣φ ·rovni je nutnΘ pou╛φt osm # , atd.
|