diff options
Diffstat (limited to 'Master/texmf-doc/doc/czechslovak/cstug/csfaq/sectR.html')
-rw-r--r-- | Master/texmf-doc/doc/czechslovak/cstug/csfaq/sectR.html | 1869 |
1 files changed, 1869 insertions, 0 deletions
diff --git a/Master/texmf-doc/doc/czechslovak/cstug/csfaq/sectR.html b/Master/texmf-doc/doc/czechslovak/cstug/csfaq/sectR.html new file mode 100644 index 00000000000..e5faf6eb948 --- /dev/null +++ b/Master/texmf-doc/doc/czechslovak/cstug/csfaq/sectR.html @@ -0,0 +1,1869 @@ +<HTML> +<HEAD> +<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-2"> +<TITLE>Proč to dělá tohle?</TITLE> +<STYLE TYPE="text/css"> +<!-- + ol.section li { font-size:large;font-weight:bold;margin-top:1em; } + ul.question li { font-size:medium;font-weight:normal;margin-top:.2em; } +--> +</STYLE> +</HEAD> +<BODY BACKGROUND="images/back_narrow.gif" +BGCOLOR="#ffffff" +TEXT="#000000" +LINK="#900000" +ALINK="#C14242" +VLINK="#D30000"> +<TABLE BORDER=0> +<TR><TD width=30> </TD> +<TD><TABLE width="100%" BORDER=0> +<TR><TD valign="middle" align="center"><FONT SIZE="+2"><B>Proč to dělá tohle?</FONT></TD><TD align="right"> +<a href="http://www.cstug.cz/"><IMG BORDER=0 SRC="images/logo.gif" ALT="CSTUG" HEIGHT=51 WIDTH=165 ALIGN="right"></a><BR> +</TD></TR></TABLE></TD></TR> +<TR><TD></TD><TD></TD></TR> +<TR><TD></TD><TD><HR></TD></TR> + <TR><TD></TD><TD> + <P> + +<P> +Původní verze LaTeXu poskytovala příkaz <CODE>\include</CODE>, který pouze řešil +problém dlouhých dokumentů: na relativně pomalých počítačích se +používal příkaz <CODE>\includeonly</CODE>. S obrovským +nárůstem rychlosti počítačů příkaz <CODE>\includeonly</CODE> ztratil na ceně (i když +stále má svůj význam ve velmi rozsáhlých projektech). Proto je tento +zjednodušený příkaz zahrnut i v současných verzích LaTeXu a plete +lidi, kteří toto nepochopili. + +<P> +V případě, že použijete +<CODE>\includeonly</CODE>, tak <CODE>\include</CODE> vytváří zvláštní <CODE>.aux</CODE> soubory pro +každý vložený soubor a vytváří checkpointy na důležité parametry (jako +číslo stránky, obrázku, tabulky nebo poznámky pod čarou). Jako přímý +důsledek musí vymazat stránku před i po příkazu <CODE>\include</CODE>. Tento +mechanismus nepracuje, pokud se příkaz <CODE>\include</CODE> objeví v souboru, +který byl sám vložen do jiného. Toto LaTeX ohlásí jako chybu. Nyní +tedy můžeme odpovědět na dvě nejzákladnější otázky: +<UL> + <LI> Proč LaTeX vsouvá na začátek a konec stránky příkaz <CODE>\include</CODE>? +<BR>Odpověď: Protože musí. Pokud se vám to nelíbí, nahraďte příkaz +<CODE>\include</CODE> příkazem <CODE>\input</CODE> – nebudete moct víckrát použít příkaz +<CODE>\includeonly</CODE>, ale pravděpodobně to stejně nebudete potřebovat, takže +žádné obavy. + <LI> Proč nemůžu vnořovat vložené soubory? Ve verzi LaTeXu 2.09 to vždy +fungovalo. <BR> +Odpověď: Ve skutečnosti to nefungovalo (ani ve verzi 2.09), chyba však nebyla +diagnostikována. Když jste ale byl v té době spokojený s chováním pod +LaTeXem verze 2.09, nahraďte příkaz <CODE>\include</CODE> příkazem <CODE>\input</CODE> +(s přidaným příkazem <CODE>\clearpage</CODE>). +</UL> + +<P> + +<P> +<P><A NAME="Q-parparams"><HR><H3>Proč jsou ignorovány parametry odstavce</H3></A> + +<P> +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> +Předpokládejme následující větu v LaTeXu: + +<P> +<PRE> + {\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.} + +<P> + Další text je zpracován normálně... +</PRE> + +<P> +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 <CODE>\par</CODE>; 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. + +<P> +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: +<PRE> + ukončíme skupinu.\par} + Další text je zpracován normálně... +</PRE> +ukončí se odstavec ve chvíli, kdy jsou +parametry odstavce nastavené v uzavřené skupině stále v platnosti. + +<P> +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í: +<PRE> +\begin{flushleft} + Tento text by měl být... +\end{flushleft} +</PRE> + +<P> +<P><A NAME="Q-protect"><HR><H3>Proč se v LaTeXu užívá ochran (protection)</H3></A> + +<P> +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 se s daty 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 <A HREF="sectC.html#Q-books">Knihy o TeXu a příbuzná literatura</A>). + +<P> +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 <CODE>\protect</CODE><CODE>\cmd</CODE> je LaTeXu řečeno, aby uložil +<CODE>\cmd</CODE> bez expanze, jako <CODE>\cmd</CODE>. + +<P> +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. + +<P> +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. + +<P> +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. + +<P> + +<P> +<P><A NAME="Q-verb"><HR><H3>Proč <CODE>\verb</CODE> nefunguje uvnitř ...</H3></A> + +<P> +Funkce příkazu LaTeXu pro sazbu textu v tom tvaru, v němž je uveden ve +zdrojovém souboru (<CODE>verbatim</CODE>), 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 <CODE>\verb</CODE> 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 <CODE>\verb</CODE> již nemá šanci +kategorii měnit. Například: +<PRE> + \verb+\error+ +</PRE> +bude fungovat (vysází se „<CODE>\error</CODE>“), ale +<PRE> + \newcommand{\unbrace}[1]{#1} + \unbrace{\verb+\error+} +</PRE> +fungovat nebude (pokusí se spustit příkaz <CODE>\error</CODE>). Další chyby, se +kterými se můžete setkat jsou „<CODE>\verb</CODE> ended by end of line“ nebo +„<CODE>\verb</CODE> illegal in command argument“. + +<P> +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í + <A HREF="sectR.html#Q-protect">Proč se v LaTeXu užívá ochran (protection)</A>. + +<P> +Jako první by jste si měli položit otázku, jestli je +csx{verb} skutečně nezbytné. +<UL> + <LI> Když <CODE>\texttt{\emph{váš text}}</CODE> produkuje stejné výsledky jako + csx{verb}<CODE>+<EM>váš text</EM>+</CODE>, pak csx{verb} není zapotřebí. + <LI> Když používáte csx{verb} k vysázení URL, emailové adresy nebo + něčeho podobného, pomůže příkaz csx{url} z balíku <CODE>url</CODE> + (<A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/misc/url.sty">url</A>): netrpí problémy csx{verb}. + <LI> Když vkládáte csx{verb} do parametru boxovacího příkazu + (jako je csx{fbox}), zvažte použití prostředí <CODE>lrbox</CODE>: +<P> +<PRE> +\newsavebox{\mybox} +... +\begin{lrbox}{\mybox} + \verb!VerbatimStuff! +\end{lrbox} +\fbox{\usebox{\mybox}} +</PRE> +</P> +</UL> + +<P> +Jinak jsou zde tři částečná řešení tohoto problému: +<UL> + <LI> Balík <EM>fancyvrb</EM> (<A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/fancyvrb">fancyvrb</A>) + definuje příkaz <CODE>\VerbatimFootnotes</CODE>, který předefinovává + příkaz <CODE>\footnotetext</CODE> (a odtud i <CODE>\footnote</CODE>) tak, že můžete + vkládat příkaz <CODE>\verb</CODE> jako jeho argument. Tento přístup by mohl být + v podstatě rozšířen i na argumenty ostatních příkazů, ale, bohužel, může + kolidovat s jinými balíky: například <CODE>\VerbatimFotenotes</CODE> ovlivňuje + volbu <CODE>para</CODE> z balíku <CODE>footmisc</CODE>. + <LI> Balík <CODE>fancyvrb</CODE> definuje příkaz <CODE>\SaveVerb</CODE> s odpovídajícím + příkazem <CODE>\UseVerb</CODE>, který vám umožňuje uložit a pak znovu použít + obsah jeho argumentů. Detaily týkající se použití tohoto + extrémně silného násroje hledejte v dokumentaci k tomuto balíku. + +<P> + Poněkud jednodušší je balík <CODE>verbdef</CODE> + (<A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/misc/verbdef.sty">verbdef</A>), který definuje + robustní příkaz, který expanduje do zadaného argumentu. + <LI> Pokud vám dělá problémy jediný znak (v jeho nepřítomnosti by jste klidně + mohly použít csx{texttt}), zvažte použití csx{string}. + <CODE>\texttt{my\string_name}</CODE> vysází to samé jako <CODE>\verb+my_name+</CODE> a bude + fungovat v parametru příkazu. Nebude ale fungovat v posuvném + parametru, žádná + dávka ochran (csx{protect} — viz <A HREF="sectR.html#Q-protect">Proč se v LaTeXu užívá ochran (protection)</A>) jej k tomu v tomhle + případě nedonutí. +</UL> + +<P> +<P><A NAME="Q-noline"><HR><H3>Žiaden riadok na ukončenie</H3></A> + +<P> +Chyba +<P> +<PRE> +! LaTeX Error: There's no line here to end. + +<P> +See the LaTeX manual or LaTeX Companion +... for explanation. +</PRE> +</P> +je reakciou LaTeXu na príkaz <CODE>\</CODE>{}<CODE>\</CODE> tam, kde to nečaká. Najčastejším +prípadom je, keď chcete mať návestie položky zoznamu na samostatnom riadku: +<P> +<PRE> +\begin{description} +\item[Veľmi dlhý popisok] \\ + Text... +\end{description} +</PRE> +</P> +<CODE>\</CODE>{}<CODE>\</CODE> je vlastne v tomto prípade dosť zlý príkaz (aj keby fungoval), pretože +by donútil odstavec tvorený textom položky, aby ukončíl riadok, na ktorom +nie je nič okrem návestia. Toto by viedlo k varovnej hláške +„<CODE>Underfull \hbox</CODE>“ (obvykle s „nekonečnou“ nevhodnosťou hodnoty 10000); +táto správa síce okrem spomalenia behu LaTeXu neškodí, ale každá správa, +ktorá neprináša žiadnu informáciu, zbytočne odvracia pozornosť uzívateľa. + +<P> +Správnym riešením je napísanie nového druhu prostredia <CODE>description</CODE>, ktoré +robí to, čo chcete. (The <EM>LaTeX Companion</EM> — viď +Otázku <A HREF="sectC.html#Q-books">Knihy o TeXu a příbuzná literatura</A> — poskytuje poskytuje v týchto veciach celkom široký +výber.) + +<P> +Jednoduchým a rýchlym riešením, ktoré sa vyhne varovaniam, je napísať: +<P> +<PRE> +\begin{description} +\item[Veľmi dlhý popisok] \hspace*{\fill} \\ + Text... +\end{description} +</PRE> +</P> +čo vyplní podtečený (under-full) riadok predtým, než si vynúti jeho uzavretie. +Balík <CODE>expdlist</CODE> poskytuje rovnakú funkčnosť svojím príkazom +csx{breaklabel}, <CODE>mdwlist</CODE> ju poskytuje príkazom csx{desclabelstyle}. + +<P> +Ďalším častým prípadom správy je používanie prostredia <CODE>center</CODE> (alebo +<CODE>flushleft</CODE>, prípadne <CODE>flushright</CODE>) a rozhodnutie, že potrebujete zvlášť +oddeliť riadky prostredia: +<P> +<PRE> +\begin{center} + Prvý riadok (nadpisu)\\ + \\ + telo centrovaného textu... +\end{center} +</PRE> +</P> +Riešenie je prosté: použite príkaz <CODE>\</CODE>{}<CODE>\</CODE> spôsobom, akým sa používať má, aby +poskytol viac priestoru než jeden riadkový zlom. <CODE>\</CODE>{}<CODE>\</CODE> akceptuje voliteľný +parameter špecifikujúci, koľko priestoru naviac pridať; požadovaný efekt +v hore uvedenom príklade docielite takto: +<P> +<PRE> +\begin{center} + Prvý riadok (nadpis)\\[\baselineskip] + telo centrovaného textu... +\end{center} +</PRE> +</P> +<CODE>expdlist.sty</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/expdlist">expdlist</A><BR> +<CODE>mdwlist.sty</CODE>: distribuované ako súčasť <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/mdwtools">mdwtools</A> + +<P> +<P><A NAME="Q-lettercase"><HR><H3>Chyby související se změnou velikosti písmen</H3></A> + +<P> +TeX poskytuje dva primitivní příkazy umožňující konverzi +textu do malých písmen, <CODE>\lowercase</CODE>, a velkých písmen, +<CODE>\uppercase</CODE>. Tyto příkazy se nepoužívají příliš často, ale +dokáží nadělat v dokumentu zmatek. + +<P> +Oba příkazy nerozvíjejí text, který je jejich parametrem — +výsledkem příkazu <CODE>\uppercase{abc}</CODE> je „<CODE>ABC</CODE>“, avšak výsledek +příkazu <CODE>\uppercase{\abc}</CODE> je <CODE>\abc</CODE> ať už + <CODE>\abc</CODE> 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 +<PRE> + \uppercase{About $y=f(x)$} +</PRE> +dává +<PRE> + ABOUT $Y=F(X)$ +</PRE> +což zřejmě není to, co jsme původně zamýšleli. + +<P> +csx{uppercase} a csx{lowercase} navíc špatně pracují s neamerickými znaky, +např. csx{uppercase{csx{ae}}} je to samé jako csx{ae}. + +<P> +LaTeX poskytuje příkazy csx{MakeUppercase} a csx{MakeLowercase}, +které opravují posledně zmíněný problém. Tyto příkazy jsou používány +ve standardních třídach k vytvoření verzálkových hlaviček kapitol a sekcí. + +<P> +csx{MakeUppercase} a csx{MakeLowercase} bohužel neřeší další problémy +csx{uppercase}, takže například titulek sekce obsahující <CODE>\begin{tabular}</CODE> +... <CODE>\end{tabular}</CODE> vytvoří hlavičku obsahující <CODE>\begin{TABULAR}</CODE>, +což je však prostředí, které vůbec neexistuje. Nejjednodušším řešením je +použití uživatelem definovaného, např.: +<P> +<PRE> +\newcommand{\mytable}{\begin{tabular}... + \end{tabular}} +\section{Titulek sekce \protect\mytable{} + s~tabulkou} +</PRE> +</P> +Všimněte si, že csx{mytable} musí být chráněno, jinak bude expandováno +a přepsáno do verzálek; stejný výsledek dosáhnete deklarováním +s csx{DeclareRobustCommand} (csx{protect} již nebude potřeba). + +<P> +Balík <CODE>textcase</CODE> Davida Carlisla adresuje množství z těchto problémů +transparentním spůsobem. Definuje příkazy csx{MakeTextUppercase} +a csx{MakeTextLowercase}, které mění velikost písmen, se skvělými vlastnostmi +standardních LaTeXovských csx{Make*} příkazů, ale bez uvedených problémů. +Balík nahrajete pomocí <CODE>\usepackage[overload]{textcase}</CODE> a on redefinuje +LaTeXovské příkazy (<EM>ne</EM> TeXovské primitívní příkazy! csx{uppercase} +a csx{lowercase}) tak, aby nadpisy sekcí a podobné věci neprodukovaly +špatné nadpisy stránek.<BR> +<CODE>textcase.sty</CODE>: distribuováno jako součást <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/carlisle">carlisle</A> + +<P> +<P><A NAME="Q-hashsymbol"><HR><H3>Proč je znak <CODE>#</CODE> v makrech uveden dvakrát</H3></A> + +<P> +Při psaní makra je třeba mít na paměti, že +<CODE>##</CODE> zastupuje <CODE>#</CODE> obdobně jako +<CODE>#1</CODE> zastupuje cokoli, co je prvním argumentem makra. + +<P> +Definujeme-li a poté použijeme makro: +<PRE> + \def\a#1{+++#1+++#1+++#1+++} \a{b} +</PRE> +makro po expanzi dává „+++b+++b+++b+++“, +což jsme očekávali. Avšak změníme-li nyní část makra: +<PRE> + \def\a#1{+++#1+++\def\x #1{xxx#1}} +</PRE> +<CODE>\a{b}</CODE> se rozvine na „+++b+++<CODE>\def\x b{xxxb}</CODE>“. +Definuje se zde makro <CODE>\x</CODE>, které je <EM>ohraničené</EM> znakem +<CODE>b</CODE> 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 <CODE>\a</CODE> +bylo definováno makro <CODE>\x</CODE> s jedním argumentem, musíme +upravit předchozí makro takto: +<PRE> + \def\a#1{+++#1+++\def\x ##1{xxx##1}} +</PRE> +<CODE>\a{b}</CODE> se nyní rozvine do tvaru +„+++b+++<CODE>\def\x #1{xxx#1}</CODE>“, neboť <CODE>#1</CODE> bude nahrazeno +znakem `b' a <CODE>##</CODE> bude nahrazeno <CODE>#</CODE>. + +<P> +Pro definici vnořenou uvnitř definice se +použije <CODE>####1</CODE>, jelikož v každé úrovni je <CODE>##</CODE> nahrazeno <CODE>#</CODE>. +V další úrovni je nutné použít osm <CODE>#</CODE>, atd. + +<P> +<P><A NAME="Q-spinmacro"><HR><H3>Medzery v makrách</H3></A> + +<P> +Je jednoduché napísať makrá produkujúce medzeru v sádzanom výstupe tam, kde to +nie je želané ani očakávané. Medzery vytvorené makrami sú zradné, pretože sa +nezdružujú s medzerami okolo makra (na rozdiel od následných medzier, ktoré +píšete), takže váš výstup môže mať jednu nafúknutú medzeru zloženú z jednej +alebo viacerých medzier, ktoré neboli združené. Výstup môže mať medzeru aj tam, +kde ju vôbec nikto nečaká. + +<P> +Medzery vznikajú (vo vnútri makra ako aj inde), znakmi medzery, tabulátoru +alebo konca riadku. Pri písaní makier by ste si mali pamätať dve jednoduché +pravidlá: pravidlá ignorovania prázdneho miesta (medzier) pri písaní makier +sú rovnaké ako pri písaní obyčajného textu a pravidlá ignorovania medzier +<EM>neplatia</EM> na medzery vzniknuté počas expanzie makra. + +<P> +Medzery sú ignorované vo vertikálnom móde (medzi odstavcami), na začiatku +riadku a po názve príkazu. Kedže postupnosti medzier splývajú do jednej +medzery, vyzerá to, že medzery sú ignorované aj vtedy, ak nasledujú inú +medzeru. Medzery môžu mať po niektorých druhoch nezátvorkovaných parametrov +(napr. priradenie premenným <EM>count</EM> a <EM>dimen</EM> v Plain TeXu) a po +určitých kontrolných slovách (napr. v csx{hbox} <CODE>to</CODE>) syntaktický význam, +takže znova máme prípady, kde to „vyzerá“, ako by medzery boli ignorované +keď pracujú potichu samy pre seba. + +<P> +Všimnite si nasledujúce makro celkom verne adaptované z makra, ktoré sa +objavilo na <A HREF="news://comp.text.tex/"><CODE>comp.text.tex</CODE></A>: +<P> +<PRE> +\newcommand{\stline}[1] + { \bigskip \makebox[2cm]{ \textbf{#1} } } +</PRE> +</P> +(originál bol na jeden riadok). + +<P> +Definícia makra obsahuje päť medzier: +<UL> + <LI> po symbole <CODE>{</CODE> otvárajúcom telo makra; táto medzera bude ignorovaná + nie z dôvodu, že sa makro objavuje na začiatku riadku, ale pretože makro bolo + navrhnuté na operovanie medzi odstavcami + <LI> za csx{bigskip}; táto medzera bude ignorovaná (počas definície makra), + pretože nasleduje názov príkazu + <LI> za symbolom <CODE>{</CODE> povinného parametru csx{makebox}; hoci sa táto medzera + nevyhnutne objaví na začaitku výstupného riadku, <EM>nebude</EM> ignorovaná + <LI> za symbolom <CODE>}</CODE> uzatvárajúcim parameter csx{textbf}; táto medzera nebude + ignorovaná, ale môže byť prehliadnutá, ak je parameter do povolených <CODE>2cm</CODE> + <LI> za symbolom <CODE>}</CODE> uzatvárajúcim povinný parameter csx{makebox}; táto + medzera nebude ignorovaná +</UL> +Pôvodný autor makra sa obával, že začiatky riadkov s týmto makrom nebudú +pri ľavom okraji a text za makrom nebude vždy správne zarovnaný. Tieto +problémy vznikli z medzery na začaitku povinného parametru csx{makebox} +a medzery bezprostredne za tým istým parametrom. Autor napísal svoje makro +týmto spôsobom, na zdôraznenie významu rozličných častí. Význam sa bohužiaľ +srtatil v problémoch spôsobených makrom. + +<P> +Hlavná technika potlačenia medzier je použitie znakov <CODE>%</CODE>: +všetko za <CODE>%</CODE> je ignorované, dokonca aj samotný koniec riadku +(takže ani koniec riadku neprispeje nechcenou medzerou). Druhou technikou +je zabezpečenie toho, že koncu riadku predchádza názov príkazu (kedže sa +koniec riadku správa ako medzra, bude po názve príkazu ignorovaný). Hore +uvedený príkaz by sme teda napísali (ako skúsený programátor s rovnakým dôrazom +na štruktúru): +<P> +<PRE> +\newcommand{\stline}[1]{% + \bigskip + \makebox[2cm]{% + \textbf{#1}\relax + }% +} +</PRE> +</P> +Uistili sme sa, že každá medzera v upravenej definícii je ignorovaná, takže sa +žiadna neobjaví vo výstupe. Upravená definícia sa explicitne vysporiada +s každým koncom riadku (hoci, ako sme uviedli vyššie, medzera na konci prvého +riadku makra by bola pri použití makra ignorovaná). Toto je v skutočnosti +najlepšia technika — je jednoduchšie slepo potlačiť medzery, než v každom +bode analyzovať, či to vlastne potrebujete. Na potlačenie medzier boli použité +tri techniky: +<UL> + <LI> umiestnenie znaku <CODE>%</CODE> na koniec riadku (na riadkoch + 1, 3 a 5), + <LI> „prirodzené“ ukončenie riadku riadiacou sekvenciou (riadok 2) a + <LI> ukončenie riadku „umelou“ riadiacou sekvenciou (riadok 4); riadiaca + sekvencia v tomto prípade (csx{relax}) nemá za mnohých okolností žiadny + účinok (aku tu), ale toto použitie je zastaralé — znak + <CODE>%</CODE> by bol lepší. +</UL> +Dávajte si pozor na (obvyklé) pokušenie umiestniť medzeru <EM>pred</EM> +znak <CODE>%</CODE>: ak to spravíte, môžete úplne vynechať aj +<CODE>%</CODE>. + +<P> +V „skutočnom živote“ sú medzery objavujúce sa v makrách samozrejme +záhadnejšie ako v našom príklade. najbežnejšie medzery vznikajú z nechránených +koncov riadkov a toto je chyba, ktorá sa občas vyskytne aj v makrách písaných +skúsenými programátormi. + +<P> +<P><A NAME="Q-activechars"><HR><H3>Definícia aktívnych znakov</H3></A> + +<P> +Jednotlivé znaky sa môžu správať ako makrá (definované príkazy) a Plain TeX +aj LaTeX definujú znak „<CODE>textasciitilde</CODE>“ ako nezlomiteľnú +medzeru. Znak sa spraví definovateľným, alebo „aktívnym“, nastavením jeho +<EM>kódu kategórie</EM> (catcode) na csx{active} (13): +<CODE>\catcode`_=\active</CODE>. + +<P> +Ľubovolný znak v princípe môže byť týmto spôsobom aktivovaný a definovaný ako makro +(<CODE>\def_{</CODE>csx{_}<CODE>}</CODE> – odpoveď na Otázku <A HREF="sectO.html#Q-underscore">Ako používať znak podčiarknutia</A>), +ale musíte sa mať na pozore: kým ľudia čakajú aktívnu vlnku, iné aktívne znaky +môžu byť nečakané a môžu zle interagovať s inými makrami. Definovaním +aktívneho znaku naviac znemožníte použitie znaku na iné účely a existuje iba +málo voľných znakov, ktoré by mohli byť týmto spôsobom zmenené. + +<P> +Pre definovanie znaku `<CODE>z</CODE>' ako príkazu je potrebné napísať niečo ako: +<P> +<PRE> +\catcode`\z=\active +\def z{Ahoj}% +</PRE> +</P> +a každé následné „<CODE>z</CODE>“ v texte sa stane pozdravom. Toto by bolo pre väčšinu +dokumentov zlým nápadom, ale mohlo by to mať špeciálne využitia. (V <CODE>\def z</CODE>, +už „<CODE>z</CODE>“ nie je interpretované ako písmeno; medzera teda nie je potrebná — +<CODE>\defz</CODE> postačuje; rozhodli sme sa ponechať medzeru aspoň pre malé +zprehľadnenie.) Niektoré balíky LaTeX obsahujú takéto definície. Napríklad +balík <CODE>shortvrb</CODE> a jeho príkaz csx{MakeShortVerb}. + +<P> +TeX Používa kódy kategórií na interpretáciu znakov pri tom, ako sú čítané +zo vstupu. +<EM>Zmena hodnoty catcode neovplyvní znaky, čo boli už prečítané</EM>. +Z tochto dôvodu je vhodné, ak majú znaky pevný kód kategórie v celom dokumente. +Ak je hodnota catcode zmenená za určitým účelom (toto robí príkaz csx{verb}), +potom upravené znaky nebudú pri výskyte v parametri iného príkazu správne +interpretované (ako napríklad v Otázke <A HREF="sectR.html#Q-verb">Proč <CODE>\verb</CODE> nefunguje uvnitř ...</A>). Exemplárny prípad +je balík <CODE>doc</CODE>, ktorý spracúva .dtx súbory používajúc balík +<CODE>shortvrb</CODE> pre definíciu <CODE>textbar...textbar</CODE> ako skratky +pre csx{verb}<CODE>textbar...textbar</CODE>. <CODE>textbar</CODE> je ale +používané tiež v preambuliach tabuľkových prostredí, takže tabuľky v <CODE>.dtx</CODE> +súboroch môžu mať vertikálne oddelenie riadkov medzi stĺpcami iba pomocou +určitých špeciálnych opatrení. + +<P> +Ďalším dôsledkom je, že priradenia catcode uskutočnené v makrách často +nefungujú, ako by sa čakalo (viď Otázku <A HREF="sectR.html#Q-actinarg">Aktívne znaky v parametroch príkazov</A>). +Napríklad definícia +<P> +<PRE> +\def\mistake{% +\catcode`_=\active +\def_{\textunderscore\-}% +} +</PRE> +</P> +nefunguje, pretože sa pokúša definovať bežný znak <CODE>_</CODE>: +Keď je makro použité, zmena kategórie neplatí pre znak podčiarknutia +v definícii makra. Namiesto toho môžete použiť: +<P> +<PRE> +\begingroup +\catcode`_=\active +\gdef\works{% všimnite si globálne \gdef + \catcode`_=\active + \def_{\textunderscore\-}% +} +\endgroup +</PRE> +</P> +Alternatívny spôsob vytvorenia takejto izolovanej definície záleží na +zvláštnych vlastnostiach csx{lowercase}, ktorý zmení znaky bez zmeny ich +hodnoty catcode. Kedže vždy existuje <EM>jeden</EM> aktívny znak +(„<CODE>textasciitilde</CODE>“), môžeme oklamať csx{lowercase}, aby zaplátalo +definíciu bez toho, aby sme explicitne zmenili catcode: +<P> +<PRE> +\begingroup + \lccode`\~=`\_ + \lowercase{\endgroup + \def~{\textunderscore\-}% + }% +</PRE> +</P> +Tieto dve definície majú rovnaký celkový efekt (znak je definovaný ako príkaz, +ale znak nezostáva aktívny) až na to, že prvá definuje príkaz csx{global}. + +<P> +Pre použitie aktívnych znakov v matematickom móde je lepšie nechať znaku bežný +catcode a prideliť mu špeciálny aktívny <EM>matematický kód</EM>: +<P> +<PRE> +\begingroup + \lccode`~=`x + \lowercase{\endgroup + \def~{\times}% + }% +\mathcode`x="8000 +</PRE> +</P> +Špeciálny znak nemusí byť predefinovaný kedykoľvek sa stane aktívnym — +definícia príkazu pretrvá aj po návratu catcode na pôvodnú hodnotu; definícia +sa stane znova dostupnou, keď sa znak opäť stane aktívnym.<BR> +<CODE>doc.sty</CODE>: distribuované ako súčasť zdrojových súborov <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/base">latex</A><BR> +<CODE>shortvrb.sty</CODE>: distribuované ako súčasť <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/required/tools">2etools</A> + +<P> + +<P> +<P><A NAME="Q-actinarg"><HR><H3>Aktívne znaky v parametroch príkazov</H3></A> + +<P> +Občas je celkom príjemné spraviť jeden alebo dva znaky aktívnymi v parametri +príkazu, aby sme uľahčili autorom písanie parametrov. + +<P> +Aktívne znaky <EM>môžu</EM> byť v takýchto situáciach bezpečne použité, je však +treba opatrnosti. + +<P> +Pri zvažovaní tejto odpovede vyvstal príklad: ašpirujúci programátor makier +na <A HREF="news://comp.text.tex/"><CODE>comp.text.tex</CODE></A> žiadal o pomoc pri snahe donútiť <CODE>#</CODE> a <CODE>b</CODE> +produkovať hudobné symboly krížiku a béčka +v makre pre špecifikáciu akordov. + +<P> +Prvým problémom je, že <CODE>#</CODE> aj <CODE>b</CODE> majú dôležité využitie na inom mieste +v TeXu (mierne povedané!), takže znaky sa môžu stať aktívnymi iba počas +vykonávania príkazu. + +<P> +Použitím techník diskutovaných v Otázke <A HREF="sectR.html#Q-activechars">Definícia aktívnych znakov</A> môžeme +definovať: +<P> +<PRE> +\begingroup + \catcode`\#=\active + \gdef#{$\sharp$} +\endgroup +</PRE> +</P> +a: +<P> +<PRE> +\begingroup + \lccode`\~=`\b + \lowercase{\endgroup + \def~{$\flat$}% + } +</PRE> +</P> +Druhým problémom je časovanie: príkaz musí spraviť každý zo znakov aktívnym +<EM>predtým</EM>, než sú načítané jeho parametre. Toto znamená, že príkaz +samotný nemôže mať parametre, ale musí byť rozdelený na dve časti. +Píšeme teda: +<P> +<PRE> +\def\chord{% + \begingroup + \catcode`\#=\active + \catcode`\b=\active + \Xchord +} +\def\Xchord#1{% + \chordfont#1% + \endgroup +} +</PRE> +</P> +a príkaz môžeme použiť ako <CODE>\chord{F\#}</CODE> alebo <CODE>\chord{Bb minor}</CODE>. + +<P> +Dôležité sú dve vlastnosti: +<UL> + <LI> csx{begingroup} v csx{chord} otvára skupinu, ktorá je uzavretá pomocou + csx{endgroup} v csx{Xchord}; táto skupina obmedzuje zmenu kódov kategórie, + čo je dôvodom existencie celého cvičenia. + <LI> Hoci <CODE>#</CODE> je aktívny počas vykonávania csx{Xchord}, <EM>nie je</EM> + aktívny, keď je práve definovaný, takže použitie <CODE>#1</CODE> nepotrebuje špeciálnu + pozornosť. +</UL> + +<P> +Zapamätajte si, že technika použitá v makrách ako csx{chord} je analogická +technike použitej v príkazoch ako csx{verb}; a rovnako ako csx{verb} (viď +Otázku <A HREF="sectR.html#Q-verb">Proč <CODE>\verb</CODE> nefunguje uvnitř ...</A>), csx{chord} nebude fungovať vo vnútri parametru iného +príkazu (chybové správy, ak sa vôbec objavia, budú pravdepodobne dosť +zvláštne). + +<P> + +<P> +<P><A NAME="Q-csname"><HR><H3>Definícia makra z parametru</H3></A> + +<P> +Je bežné chcieť príkaz na vytvorenie iného príkazu, často je požadované, aby +bol názov nového príkazu odvodený z parametru. LaTeX to robí celý čas, +napríklad csx{newenvironment} vytvára start- a end-environment príkazy, +ktorých názvy sú odvodené z názvu environment príkazu. + +<P> +Zjavný prístup: +<P> +<PRE> +\def\relay#1#2{\def\#1{#2}} +</PRE> +</P> +nefunguje (TeX ho interpretuje ako divnú redefiníciu <CODE>\#</CODE>). Trik spočíva +v použití csx{csname}, čo je TeXovské primitívum na generovanie názvov +príkazov z náhodného textu, spolu s csx{expandafter}. Uvedená definícia by +mala vyzerať: +<P> +<PRE> +\def\relay#1#2{% + \expandafter\def\csname #1\endcsname{#2}% +} +</PRE> +</P> +S touto definíciou je <CODE>\relay{blah}{bleah}</CODE> ekvivalentné +csx{def}<CODE>\blah{bleah}</CODE>. + +<P> +Všimnite si, že definícia csx{relay} vynecháva zátvorky okolo názvu príkazu +v spúšťanom csx{newcommand}. Toto je z dôvodu, že nie sú potrebné (to sú +v skutočnosti zriedvo) a za týchto okolností robia kód makra mirne nudnejším. + +<P> +Vytvorený názov nemusí byť (samozrejme) <EM>iba</EM> parameter: +<P> +<PRE> +\def\newrace#1#2#3{\expandafter\def + \csname start#1\endcsname{% + #2% + }% + \expandafter\def + \csname finish#1\endcsname{% + #3% + }% +} +</PRE> +</P> +S príkazmi +<P> +<PRE> +\def\start#1{\csname start#1\endcsname} +\def\finish#1{\csname finish#1\endcsname} +</PRE> +</P> +by sa tieto mohli správať trochu ako LaTeXovské prostredia (environments). + +<P> +<P><A NAME="Q-empty"><HR><H3>Zistenie, že je niečo prázdne</H3></A> + +<P> +Predpokladajme, že potrebujete vediet, či je parameter vášho príkazu prázdny, +teda rozoznať medzi <CODE>\cmd{}</CODE> a <CODE>\cmd{blah}</CODE>. Toto je celkom jednoduché: +<P> +<PRE> +\def\cmd#1{% + \def\tempa{}% + \def\tempb{#1}% + \ifx\tempa\tempb + <prázdny> + \else + <neprázdny> + \fi +} +</PRE> +</P> +Prípad, keď chcete ignorovať parameter pozostávajúci iba z medzier (nemusí byť +teda úplne prázdny), je komplikovanejší. Tento prípad je vyriešený vo fragmente +kódu <CODE>ifmtarg</CODE> definujúcom príkazy csx{@ifmtarg} a csx{@ifnotmtarg}, +ktoré rozoznajú (v opačných smeroch) medzi druhým a tretím parametrom. Kód +balíku sa objavuje aj v LaTeXovskej triede <CODE>memoir</CODE>. + +<P> +<CODE>Ifmtarg</CODE> tvorí vyzývavé čítanie, existuje aj diskusia tochto problému +v čísle dva série článkov „Around the bend“ Mika Downesa.<BR> +<CODE>Around the bend</CODE>: séria článkov — <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/info/aro-bend">aro-bend</A><BR> +<CODE>ifmtarg.sty</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/misc/ifmtarg.sty">ifmtarg</A><BR> +<CODE>memoir.cls</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/memoir">memoir</A> + +<P> +<P><A NAME="Q-running-nos"><HR><H3>Číslovanie rovníc, obrázkov a tabuliek</H3></A> + +<P> +Mnoho LaTeXovských tried (vrátane štandardnej triedy <CODE>book</CODE>) čísluje veci +po kapitolách, takže obrázky v kapitole 1 sú číslované 1.1, 1.2 a tak ďalej. +Toto niekedy nie je pre požiadavky používateľa vhodné. + +<P> +Namiesto prepísanie celej triedy je možné použiť balíky <CODE>removefr</CODE> +a <CODE>remreset</CODE>. Oba definujú príkaz csx{@removefromreset}, po vložení +balíku teda môžete napísať niečo ako: +<PRE> + \makeatletter + \@removefromreset{figure}{chapter} +</PRE> +a automatické prečíslovávanie sa zastaví. Potom musíte znovu definovať spôsob, +akým sú čísla obrázkov (v tomto prípade) tlačené: +<PRE> + \renewcommand{\thefigure}{\@arabic\c@figure} + \makeatother +</PRE> +(nezabudnite pre každé počítadlo, s ktorým chcete manipulovať, uskutočniť +všetky kroky uvedené v csx{makeatletter} ...@ csx{makeatother}). + +<P> +Technika môže byť použitá aj na zmenu pri resetovaní počítadla +vo viacúrovňovej štruktúre. Predpokladajme, že vaša trieda čísluje stránky ako +<I><kapitola>.<sekcia>.<obrázok></I> a vy ich chcete číslovať po kapitolách. +Skúste: +<P> +<PRE> +\@removefromreset{figure}{section} +\@addtoreset{figure}{chapter} +\renewcommand{\thefigure}% + {\thechapter.\@arabic\c@figure} +</PRE> +</P> +(príkaz csx{@addtoreset} je súčasť LaTeXu samotného). + +<P> +Balík <CODE>chngcntr</CODE> poskytuje jednoduché prostriedky sprístupnenia dvoch +diskutovaných druhov zmien definujúc príkazy csx{counterwithin} +a csx{counterwithout}. Trieda <CODE>memoir</CODE> tieto funkcie poskytuje tiež.<BR> +<CODE>chngcntr.sty</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/misc/chngcntr.sty">chngcntr</A><BR> +<CODE>memoir.cls</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/memoir">memoir</A><BR> +<CODE>removefr.tex</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/fragments/removefr.tex">removefr</A> (toto je konštruované ako „fragment“ + pre použitie v iných balíkoch: nahrajte pomocou <CODE>\input{removefr}</CODE>)<BR> +<CODE>remreset.sty</CODE>: distribuované ako súčasť <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/carlisle">carlisle</A> + +<P> + +<P> +<P><A NAME="Q-edef"><HR><H3>csx{edef} nefunguje s csx{protect}</H3></A> + +<P> +Robustné príkazy LaTeXu sú buď „prirodzene robustné“ — nikdy +nepotrebujú csx{protect}, alebo „self-protected“ (chránia sa samy) — +majú csx{protect} nejakým spôsobom zabudované do svojej definície. +„Self-protected“ príkazy sú robustné iba v kontexte, kde je mechanizmus +csx{protect} správne spracovaný. Kedže csx{edef} je TeXovské primitívum +a nie príkaz LaTeXu, telo definície csx{edef} nespracúva csx{protect} +správne. + +<P> +Tento problém je riešený interným príkazom LaTeXu csx{protected@edef}, +ktorý robí prácu csx{edef}, zatiaľ čo udržuje mechanizmus csx{protect} +funkčný. Existuje zodpovedajúci príkaz csx{protected@xdef}, ktorý robí to, +čo csx{xdef}. + +<P> +Kedže sú tieto príkazy interné, musia byť samozrejme pozorne sledované (viď +Otázku <A HREF="sectQ.html#Q-atsigns"><CODE>\@</CODE> a <CODE>@</CODE> ve jménech maker</A>). + +<P> +<P><A NAME="Q-oarglikesect"><HR><H3>Voliteľné parametre ako csx{section}</H3></A> + +<P> +Voliteľné parametre v makrách definovaných pomocou csx{newcommand} nepracujú +úplne rovnakým spôsobom ako voliteľný parameter csx{section}. Štandardná +hodnota voliteľného parametru csx{section} je hodnota povinného parametru, +ale csx{newcommand} vyžaduje, aby ste štandardné hodnoty vedeli dopredu. + +<P> +Potrebný trik je použitie makra v štandardnom parametri: +<PRE> +\newcommand\thing[2][\DefaultOpt]{% + \def\DefaultOpt{#2}% + ...% +} +</PRE> + +<P> +<P><A NAME="Q-labelctr"><HR><H3>Tvorenie návestí z počítadiel</H3></A> + +<P> +Predpokladajme, že máme LaTeXovské počítadlo, ktoré sme definovali pomocou +<CODE>\newcounter{foo}</CODE>. Hodnotu počítadla môžeme zvýšiť pomocou +<CODE>\addtocounter{foo}{1}</CODE>, ale je to ťažkopádne na operáciu, ktorá nastáva tak +často, takže existuje príkaz <CODE>\stepcounter{foo}</CODE>, ktorý vykonáva tento +špeciálny prípad zväčšenia o jednotku. + +<P> +Existuje interná premenná LaTeXu „aktuálne návestie“, ktorá si pamätá +poslednú vec s možnosťou návestia, ktorú LaTeX spracoval. Mohli by ste +(ak by ste na tom trvali) tú hodnotu nastaviť relevantným príkazom TeXu +(zabezpečiac potrebné opatrenia, aby interný príkaz fungoval) — ale nie je +to potrebné. Ak namiesto hore uvedených metód použijete +<CODE>\refstepcounter{foo}</CODE>, interná premenná bude nastavená na novú hodnotu +a (kým nepríde niečo iné) csx{label} bude odkazovať na počítadlo. + +<P> +<P><A NAME="Q-oddpage"><HR><H3>Zistenie, či ste na párnej alebo nepárnej strane</H3></A> + +<P> +Otázka <A HREF="sectR.html#Q-marginright">Jak dostat <CODE>\marginpar</CODE> na správnou stranu?</A> diskutuje problém, ako donútiť +príkazy csx{marginpar}, aby svoj výstup umiestnili na správny okraj +dvojstranových dokumentov. Toto je obecný problém znalosti, kde leží určitý +kus textu: výstupná rutina je asynchrónna a TeX/LaTeX obvykle spracuje +dobrý kus ďalšej strany, než sa vôbec rozhodne akúkoľvek stranu vyprodukovať. +Dôsledkom je, že počítadlo <CODE>page</CODE> (interne známe v LaTeXu ako csx{c@page}) +je obvykle spoľahlivé, iba ak ste vo výstupnej rutine. + +<P> +Riešením je použitie nejakej verzie csx{label} mechanizmu na zistenie, na +ktorom konci stránky ste. Hodnota počítadla strán objavujúca sa v príkaze +csx{pageref} bola vložená do behu výstupnej rutiny a je teda bezpečná. + +<P> +csx{pageref} samotný však bezpečný nie je: môžete dúfať, že +<PRE> +\ifthenelse{\isodd{\pageref{foo}}}{odd}{even} +</PRE> +spraví potrebné, ale o balíkoch <CODE>babel</CODE> aj <CODE>hyperref</CODE> sa vie, +že zasahujú do výstupu csx{pageref}; buďte opatrní! + +<P> +Balík <CODE>chngpage</CODE> musí túto funkcionalitu poskytovať pre vlastné +využitie, a preto poskytuje príkaz csx{checkoddpage}. Tento nastavuje +návestie na privátne použitie a časť návestia s odkazom na stranu je potom +preskúmaná (<CODE>hyperref</CODE> bezpečným spôsobom) na nastavenie platnosti +csx{ifcpoddpage}, ak bol príkaz zavolaný na nepárnej strane. Trieda <CODE>memoir</CODE> +obsahuje rovnaký príkaz nastavujúci platnosť csx{ifoddpage}. csx{label} +samozrejme prispieva k LaTeXovským chybovým hláškam +„Rerun to get cross-references right“ ...<BR> +<CODE>chngpage.sty</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/misc/chngpage.sty">chngpage</A><BR> +<CODE>memoir.cls</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/memoir">memoir</A> + +<P> +<P><A NAME="Q-labelformat"><HR><H3>Ako zmeniť formát návestí</H3></A> + +<P> +Štandardne pri vytvorení návestia toto preberie vzhľad označeného počítadla: +konkrétne je nastavené na csx{the}<CODE><counter></CODE> — čo by bolo použité, +ak by ste chceli vysádzať počítadlo do vášho textu. Toto nie je vždy to, čo +potrebujete: ak napríklad máte vnorené číslované zoznamy s vonkajškom +číslovaným a vnútrom označeným písmenami, očakávalo by sa, že sa chcete +na položky vnútorného zoznamu odkazovať ako „2(c)“. (Zapamätajte si, že +môžete zmeniť štruktúru položiek zoznamov — viď Otázku <A HREF="sectO.html#Q-enumerate">Pekne číslované zoznamy</A>.) +Zmena je samozrejme možná explicitným označením rodiča a použitím tohto +návestia na skonštruovanie vysádzaného výsledku — niečo ako +<P> +<PRE> +\ref{parent-item}(\ref{child-item}) +</PRE> +</P> +by bolo nudné a náchylné k chybám. Bolo by naviac nevhodné, kedže by ste +konštruovali vizuálnu reprezentáciu, ktorá je neflexibilná (nemohli by ste +vôbec zmeniť všetky odkazy na prvky zoznamu jedným ťahom). + +<P> +LaTeX má v skutočnosti príkaz formátujúci návestia zabudovaný do každej +definície návestia; štandardne je neplatný, ale je užívateľovi dostupný na +programovanie. Pre ľubovolné návestie <I><counter></I> existuje interný +príkaz LaTeXu csx{p@}<I><CODE><counter></I></CODE>; napríklad definícia +návestia na vnútornej položke zoznamu je pravdepodobne uskutočnená príkazom +<CODE>\p@enumii{\csx{theenumii}}</CODE>. Interné fungovanie tu bohužiaľ nie je úplne +správne, musíte teda upraviť príkaz csx{refstepcounter}: +<P> +<PRE> +\renewcommand*\refstepcounter[1]{% + \stepcounter{#1}% + \protected@edef\@currentlabel{% + \csname p@#1\expandafter\endcsname + \csname the#1\endcsname + }% +} +</PRE> +</P> +So zmenou na správnom mieste teraz môžete napríklad zmeniť návestia +na všetkých vnútorných zoznamoch pridaním nasledujúceho kódu do preambuly: +<P> +<PRE> +\makeatletter +\renewcommand{\p@enumii}[1]{\theenumi(#1)} +\makeatother +</PRE> +</P> +Toto zabezpečí, že návestia číslovaných zoznamov druhej úrovne vyzerajú ako +„1(a)“ (a tak ďalej). Analogická zmena funguje pre ľubovolné počítadlo +používané v príkaze csx{label}. + +<P> +Balík <CODE>fncylab</CODE> v skutočnosti spraví všetko uvedené (vrátane úpravy +LaTeXu samotného). S týmto balíkom je uvedený kód (celkom efektívne) +vykonaný príkazom: +<P> +<PRE> +\labelformat{enumii}{\theenumii(#1)} +</PRE> +</P> +Uvedený príklad, ktorý môžeme uskutočniť viacerými rozličnými spôsobmi, +bol označený zastaralým objavením sa balíku <CODE>enumitem</CODE>, ktorý je +diskutovaný v odpovedi o dekorovaní číslovaných zoznamov +(Otázka <A HREF="sectO.html#Q-enumerate">Pekne číslované zoznamy</A>).<BR> +<CODE>enumitem.sty</CODE>: distribuované ako súčasť <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/bezos">bezos</A><BR> +<CODE>fncylab.sty</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/misc/fncylab.sty">fncylab</A> + +<P> +<P><A NAME="Q-moren9"><HR><H3>Ako prekročiť limit 9 parametrov</H3></A> + +<P> +Ak sa nad tým zamyslíte, zistíte, že Knuthova syntax definície príkazov: +<P> +<PRE> +\def\blah#1#2 ... #9{<macro body>} +</PRE> +</P> +je limitovaná na 9 parametrov. Neexistuje priamy spôsob ako toto obísť. +Ako by ste vyjadrili desiaty parameter a zaistili, že syntax nepohltí iné +správne použitie? + +<P> +Ak skutočne potrebujete viac než 9 parametrov, správny postup je: +<P> +<PRE> +\def\blah#1#2 ... #9{% + \def\ArgI{{#1}}% + \def\ArgII{{#2}}% + ... + \def\ArgIX{{#9}}% + \BlahRelay +} +\def\BlahRelay#1#2#3{% + % parametre 1-9 sú teraz + % \ArgI-\ArgIX + % parametre 10-12 sú + % #1-#3 + <macro body>% +} +</PRE> +</P> +Táto technika je ľahko rozšíriteľná TeXovskými virtuózmi, ale zle sa odporúča. + +<P> +Používatelia LaTeXu sa majú o niečo lepšie, kedže im stačí iba zadať počet +parametrov v príkaze csx{newcommand}, ktorý definuje každú časť prevodného +mechanizmu: Knuthove reštrikcie platia pre csx{newcommand} ako aj pre +csx{def}. Používatelia LaTeXu však tiež majú cestu von z takejto +barbarskej syntaxe príkazov – balík <CODE>keyval</CODE>. S <CODE>keyval</CODE> +a trochou programovania môžete písať celkom sofistikované príkazy, ktorých +vyvolanie môže vyzerať takto: +<P> +<PRE> +\flowerinstance{species=Primula veris, + family=Primulaceae, + location=Coldham's Common, + locationtype=Common grazing land, + date=1995/04/24, + numplants=50, + soiltype=alkaline +} +</PRE> +</P> +Výhoda takejto „ukecanosti“ je automatická zrozumiteľnosť. Sádzač si nemusí +pamätať, že parameter 12 je <CODE>soiltype</CODE> atď. Príkazy môžu byť kopírované +z poznámok k políčkam rýchlo a presne.<BR> +<CODE>keyval.sty</CODE>: distribuované ako súčasť <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/required/graphics">graphics</A> + +<P> +<P><A NAME="Q-twooptarg"><HR><H3>Príkaz s dvomi voliteľnými parametrami</H3></A> + +<P> +Ak ste si už prečítali Otázku <A HREF="sectR.html#Q-moren9">Ako prekročiť limit 9 parametrov</A>, môžete zrejme riešenie +problému uhádnuť: predávanie príkazov. + +<P> +LaTeX povoľuje príkazy s jediným voliteľným parametrom takto: +<PRE> + \newcommand{\blah}[1][Default]{...} +</PRE> + +<P> +Správne môžete buď s prítomným voliteľným parametrom (<CODE>\blah[nonDefault]</CODE>) +alebo bez neho (csx{blah}). V druhom prípade bude mať csx{blah} parameter +<CODE>Default</CODE>. + +<P> +Pre definovanie príkazu s dvoma voliteľnými parametrami použijeme techniku +predávania nasledovne: +<PRE> + \newcommand{\blah}[1][Default1]{% + \def\ArgI{{#1}}% + \BlahRelay + } + \newcommand\BlahRelay[1][Default2]{% + % prvý voliteľný parameter je teraz + % v \ArgI + % druhý je v #1 + ...% + } +</PRE> +csx{BlahRelay} môže mať samozrejme toľko povinných parametrov, koľko je +povolených po zabratí jedného „miesta“ vlastným voliteľným parametrom, +teda 8. + +<P> +Varianty csx{newcommand} (a priateľov) s názvami ako csx{newcommandtwoopt} +sú dostupné v balíku <CODE>twoopt</CODE>. +Je však pravdepodobne lepšie, ak sa môžete písať príkazy sami, aby ste videli, +prečo nie sú z programátorského hľadiska dobrým nápadom. + +<P> +Príkaz s dvomi voliteľnými parametrami sa približuje hranici toho, čo je +ešte rozumné: techniku môžete zjavne rozšíriť tak, aby poskytovala toľko +volteľných parametrov, koľko si viete predstaviť. Pozrite si však poznámky +k použitiu balíku <CODE>keyval</CODE> (znova v Otázke <A HREF="sectR.html#Q-moren9">Ako prekročiť limit 9 parametrov</A>), ktoré +poskytujú alternatívny spôsob postupu. + +<P> +Alternatívnym prístupom je poskytovaný programom <EM>newcommand</EM> od +Scotta Pakina, ktorý vezme názov príkazu a definíciu množiny parametrov +príkazu (v celkom zrozumiteľnom jazyku) a ako výstup poskytne +TeXovské/LaTeXovské makrá umožňujúce definíciu príkazu. Príkaz vyžaduje, +aby bol na vašom systéme nainštalovaný <EM>python</EM>. + +<P> +Distribúcia <CODE>twoopt</CODE> obsahuje dokumentačný súbor <CODE>twoopt.pdf</CODE>. +Podobne distribúcia <EM>newcommand</EM> obsahuje súbor +<CODE>newcommand.pdf</CODE>.<BR> +<CODE>newcommand.pdf</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/support/newcommand">newcommand</A><BR> +<CODE>twoopt.sty</CODE>: distribuované ako súčasť <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/oberdiek">oberdiek</A> + +<P> +<P><A NAME="Q-seccntfmt"><HR><H3>Úprava prezentácie čísel sekcií</H3></A> + +<P> +Obecné problémy úpravy vzhľadu nadpisov sekcií sú dosť komplexné a sú pokryté +odpoveďou na Otázku <A HREF="sectO.html#Q-titles">Vzhled nadpisů</A>. + +<P> +Ľudia však často chcú zmeniť iba vzhľad čísla sekcie v nadpise a niektorým +z nich nevadí písanie pár makier. Táto odpoveď je pre nich. + +<P> +Spôsob sadzby čísla sekcie určuje príkaz csx{@seccntformat}, ktorý dostane +„názov“ (section, subsection, ...) nadpisu ako parameter. Obvykle +dá na výstup iba číslo sekcie, a potom csx{quad} medzeru. Predpokladajme, že +chcete dať za každé číslo sekcie (subsekcie, subsubsekcie, ...) bodku. +Triviálna zmena môže byť implementovanáa jednoduchou modifikáciou príkazu: +<P> +<PRE> +\renewcommand*{\@seccntformat}[1]{% + \csname the#1\endcsname.\quad +} +</PRE> +</P> + +<P> +Veľa ľudí (z určitého dôvodu) chce bodku iba za číslo sekcie. Pre dosiahnutie +tochto cielu musíme zmeniť chovanie csx{@seccntformat} podľa jeho parametru. +Nasledujúca technika je tak trochu plýtvaním, ale stále je dostačujúco +efektívna: +<P> +<PRE> +\let\@@seccntformat\@seccntformat +\renewcommand*{\@seccntformat}[1]{% + \expandafter\let\expandafter\@tempa + \csname @seccntformat@#1\endcsname + \ifx\@tempa\relax + \expandafter\@@seccntformat + \else + \expandafter\@tempa + \fi + {#1}% +} +</PRE> +</P> +Kód sa pozrie či bol definovaný príkaz druhej úrovne. Ak áno, použije ho, inak +použije pôvodný. Príkaz druhej úrovne na zavedenie bodiek (iba) za čísla +sekcií má rovnakú definíciu ako pôvodná verzia „všetky úrovne zhodne“: +<P> +<PRE> +\newcommand*{\@seccntformat@section}[1]{% + \csname the#1\endcsname.\quad +} +</PRE> +</P> +Všimnite si, že všetky definície príkazov v tejto odpovedi sa týkajú interných +príkazov LaTeXu (viď Otázku <A HREF="sectQ.html#Q-atsigns"><CODE>\@</CODE> a <CODE>@</CODE> ve jménech maker</A>), takže uvedený kód by mal +byť radšej v súbore balíku. + +<P> +Triedy <CODE>koma-script</CODE> majú na zmenu prezentácie čísel sekcií odlišné príkazy: +csx{partformat}, csx{chapterformat} a csx{othersectionlevelsformat}, +ale inak sú ich možnosti podobné čistému LaTeXu.<BR> +<CODE>sada KOMA script</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/koma-script">koma-script</A> + +<P> +<P><A NAME="Q-spaftend"><HR><H3>Za moje prostredie je pridaná medzera</H3></A> + +<P> +Napísali ste si vlastné prostredie <CODE>env</CODE>, ktoré aj funguje, až na to, že +na začiatku prvého riadku textu za <CODE>\end{env}</CODE> je vysádzaná medzera. Toto sa +s podobnými prostrediami dodávanými LaTeXom nestáva. + +<P> +Mohli by ste vydať obmedzenie, že vaši užívatelia musia vždy umiestniť znak +„<CODE>%</CODE>“ za prostredie, prostredia LaTeXu to nepotrebujú. + +<P> +Tajomstvom prostredí LaTeXu je interný príznak spôsobujúci ignorovanie +nechcených medzier. Našťastie internú formu používať nemusíte: od roku 1996 +obsahuje LaTeX používateľský príkaz csx{ignorespacesafterend}, ktorý +interný príznak nastavuje. + +<P> +<P><A NAME="Q-ltxcmds"><HR><H3>Definície LaTeXovských príkazov</H3></A> + +<P> +Existuje viacero dôvodov, prečo by ste mohli chcieť vedieť definície príkazov +LaTeXu: od najjednoduchšej obyčajnej zvedavosti, až po potrebu opraviť +niečo, aby to fungovalo tak, ako chcete vy. Nič z uvedeného nie je +<EM>čistým</EM> motívom, ale vedomosť a skúsenosť zriedkakedy prichádzajú +prostredníctvom najčistejších motívov. + +<P> +Najjednoduchšou odpoveďou je skúsiť csx{show} v LaTeXovskom behu berúcom +príkazy z terminálu: +<P> +<PRE> +*\show\protected@edef +> \protected@edef=macro: +->\let \@@protect \protect + \let \protect \@unexpandable@protect + \afterassignment \restore@protect \edef . +</PRE> +</P> +(Výstup je preusporiadaný z dosť mätúcej verzie, ktorú TeX produkuje.) +Teraz sa môžeme zamyslieť nad csx{@unexpandable@protect}: +<P> +<PRE> +*\show\@unexpandable@protect +> \@unexpandable@protect=macro: +->\noexpand \protect \noexpand . +</PRE> +</P> +a začíname pozorovať, ako funguje jedna časť mechanizmu csx{protect} (môžeme +asi celkom bezpečne uhádnuť, čo robí csx{restore@protect}). + +<P> +Mnoho príkazov jadra je deklarovaných robustne: +<P> +<PRE> +*\show\texttt +> \texttt=macro: +->\protect \texttt . +</PRE> +</P> +takže csx{show} veľmi nepomôže. Definujte príkaz csx{pshow} podľa +nasledujúcej ukážky a použite ten: +<P> +<PRE> +*\def\pshow#1{{\let\protect\show #1}} +*\pshow\texttt +> \texttt =\long macro: +#1->\ifmmode \nfss@text {\ttfamily #1}% + \else \hmode@bgroup \text@command {#1}% + \ttfamily \check@icl #1\check@icr + \expandafter \egroup \fi . +</PRE> +</P> +Všimnite si, že názov chráneného príkazu je „základný“ príkaz s pripojenou +medzerou. Toto je trochu obtiažne viditeľné na pár miestach vyššie. (Výstup +bol znova upravený.) + +<P> +Ak máte flexibilný textový editor, rovnaké zistenie môžete komfortnejšie +uskutočniť prezrením súboru <CODE>latex.ltx</CODE> (ktorý sa dá zvyčajne v TDS +systéme nájsť v adresári <CODE>tex/latex/base</CODE>). + +<P> +Súbor <CODE>latex.ltx</CODE> je vlastne výstupom <EM>docstrip</EM> procesu +na veľkom množstve <CODE>.dtx</CODE> súborov (viď Otázku <A HREF="sectD.html#Q-dtx">Dokumentované LaTeXovské zdroje (<CODE>.dtx</CODE> soubory)</A>), môžete sa teda +odkazovať na ne. Distribúcia LaTeXu obsahuje súbor <CODE>source2e.tex</CODE>, +väčšina systémov ju zachováva v <CODE>tex/latex/base</CODE>. <CODE>Source2e.tex</CODE> +môže byť spracovaný, aby poskytol kompletný výpis jadra LaTeXu (proces +nie je úplne priamočiary, ale súbor produkuje správy radiace, čo treba +spraviť). Výsledkom je obrovský dokument s indexom čísiel riadkov riadiacich +sekvencií celého jadra a oddelený index zmien zaznamenaných v každom súbore +odvtedy, čo ho prevzal LaTeX tím. + +<P> +Vytlačené jadro je dobrá vec, ale ťažko sa s ním manipuluje a často iba sedí na +polici zriedkavo využívaný. Jedným problémom je rozdielna dokumentácia: +obsiahnuté sú moduly od veľmi dobre zdokumentovaných, cez moduly obsahujúce +iba automatickú dokumentáciu, až po moduly bez akejkoľvek užitočnej +dokumentácie. + +<P> +Každý <CODE>.dtx</CODE> súbor jaderného modulu bude v LaTeXu spracovaný oddelene, takže +nemusíte pracovať s celým súborom <CODE>source2e</CODE>. Ľahko môžete zistiť, ktorý +modul definuje makro, ktoré vás zaujíma: použite svoj +„flexibilný textový editor“ aby ste zistili definíciu v <CODE>latex.ltx</CODE>, +potom z toho bodu hľadajte spätne riadok začínajúci <CODE>%%% From File:</CODE> — tento +riadok vám povie, ktorý <CODE>.dtx</CODE> súbor obsahuje definíciu, ktorá vás zaujíma. +Pre csx{protected@edef} týmto postupom nájdeme: +<PRE> +%%% From File: ltdefns.dtx +</PRE> +Ak sa na súbor pozrieme, <CODE>ltdefns.dtx</CODE> obsahuje obsiahlu rozpravu +o metódach spracovania ochrán (csx{protect}) a obsahuje tiež určitú +automaticky skonvertovanú LaTeX 2.09 dokumentáciu. + +<P> +Jadro samozrejme nie je celý LaTeX: váš príkaz môže byť definovaný v jednom +zo súborov LaTeXovských tried alebo balíkov. Definíciu +csx{thebibliography} napríklad nájdeme v triede <CODE>article</CODE>, ale súbor +<CODE>article.dtx</CODE> neexistuje. Niektoré takéto súbory sú generované z častí +jadra, niektoré z iných súborov distribúcie. Zdroj zistíte pri pohľade na +začiatok súboru: v <CODE>article.cls</CODE> nájdeme: +<PRE> +%% This is file `article.cls', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% classes.dtx (with options: `article') +</PRE> +takže potrebujeme formátovať súbor <CODE>classes.dtx</CODE>, aby sme videli definíciu +v kontexte. + +<P> +Všetky tieto .dtx súbory sú na CTANe ako súčasť hlavnej distribúcie +LaTeXu.<BR> +<CODE>\LaTeX{} distribúcia</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/base">latex</A> + +<P> + +<P> +<P><A NAME="Q-addtoreset"><HR><H3>„Master“ a „slave“ počítadlá</H3></A> + +<P> +Je bežné mať veci číslované po kapitolách (napríklad v štandardných triedach +<CODE>book</CODE> a <CODE>report</CODE> sú takto číslované obrázky, tabuľky a poznámky pod čiarou). +Resetovanie sa uskutočňuje automaticky, keď sa zvýši hlavné („master“) +počítadlo (keď je vykonaný príkaz csx{chapter} začínajúci kapitolu +<I><n></I>, počítadlo <CODE>chapter</CODE> sa zvýši a všetky závislé počítadlá sú +nastavené na nulu). + +<P> +Ako by ste to spravili sami? Môžete chcieť číslovať napríklad algoritmy po +sekciách. Ak tieto veci definujete ručne, vzťah deklarujete pri definícii +počítadla: +<P> +<PRE> +\newcounter{new-name}[master] +</PRE> +</P> +Uvedený kód nám hovorí, že pri každom zvýšení počítadle <I><master></I> bude +resetované počítadlo <I><new-name></I>. + +<P> +Čo ale v prípade, že máte nespolupracujúci balík definujúci veci za vás, ale +tento neposkytuje programátorovi rozhranie na prinútenie počítadiel správať sa +tak, ako chce? + +<P> +Príkaz csx{newcounter} používa interný príkaz LaTeXu a vy ho môžete využiť +tiež: +<P> +<PRE> +\@addtoreset{new-name}{master} +</PRE> +</P> +(pamätajte si však, že to musí byť medzi csx{makeatletter} +a csx{makeatother} alebo vo vašom vlastnom balíku). + +<P> +Balík <CODE>chngcntr</CODE> zapuzdruje príkaz csx{@addtoreset} do príkazu +csx{counterwithin}. Takže: +<P> +<PRE> +\counterwithin*{corollary}{theorem} +</PRE> +</P> +spraví z počítadla corollary podriadené počítadlo (slave) počítadla theorem. +Príkaz bez hviezdy: +<P> +<PRE> +\counterwithin{corollary}{theorem} +</PRE> +</P> +spraví to isté a zároveň redefinuje csx{thecorollary} ako +<I><číslo teorémy></I>.<I><číslo dôsledku></I>, čo je dobrou schémou, +ak sa niekedy chcete odkazovať na dôsledky — môže existovať veľa +„dôsledkov 1“ v každom dokumente, takže je dobré zviazať jeho číslo +s počítadlom theorem, ku ktorému patrí. Toto platí asi pri každom počítadle +vo vnútri iného. Ak nepoužívate <CODE>chngcntr</CODE>, pre potrebné techniky si +pozrite Otázku <A HREF="sectO.html#Q-the-commands">Predefinovanie csx{the-}príkazov počítadiel</A>. + +<P> +Všimnite si, že postup nefunguje, ak je nadriadené (master) počítadlo <CODE>page</CODE>, +číslo aktuálnej strany. Počítadlo <CODE>page</CODE> je zväčšované hlboko vo vnútri +výstupnej rutiny, ktorá je volaná chvíľku po tom, čo sa začal objavovať text +pre novú stranu: na vysporiadanie sa s týmto sú potrebné špeciálne postupy. +S jedným špeciálnym prípadom sme sa vysporiadali na inom mieste: +Otázka <A HREF="sectO.html#Q-footnpp">Číslovanie poznámok „po stránkach“</A>. Jeden z opísaných postupov v spomenutej otázke, +použitie balíku <CODE>perpage</CODE>, môže byť aplikovaný na akékoľvek počítadlo. +Príkaz: +<P> +<CODE>\MakePerPage{counter}</CODE> +</P> +prinúti <I><counter></I> resetovať sa na každej strane. Balík používa +mechanizmus podobný návestiam a môže vyžadovať viac než jeden beh LaTeXu +na stabilizovanie hodnôt počítadiel — LaTeX vygeneruje obvyklé varovania +o zmene návestí.<BR> +<CODE>chngcntr.sty</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/misc/chngcntr.sty">chngcntr</A><BR> +<CODE>perpage.sty</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/misc/perpage.sty">perpage</A> + +<P> +<P><A NAME="Q-widows"><HR><H3>Ovládanie vdov a sirôt</H3></A> + +<P> +Vdovy (posledné riadky odstavcov na začiatku strany) a siroty (prvé riadky +odstavcov na konci strany) prerušujú čitateľa a obecne sú považované za zlú +formu; TeX/LaTeX vykonáva určité opatrenia, aby sa im vyhol, úplne +automatická prevencia je často nemožná. Ak sádzate vlastný text, zvážte miernu +zmenu slov tak, aby zlom dopadol inak. +Rutina pre vytváranie stránky pri jej formovaní berie na vedomie +csx{widowpenalty} +a csx{clubpenalty} (vzťahuje sa k sirotám!). Tieto pokuty (penalties) sú +obvykle nastavené na strednú hodnotu <CODE>150</CODE>; toto mierne odradzuje od +zlých zlomov. Hodnoty môžete zvýšiť výrazom (napríklad) +csx{widowpenalty}<CODE>=500</CODE>; vertikálne zoznamy (z ktorých sú zhotovené +stránky) sa typicky dajú veľmi slabo roztiahnuť alebo stlačiť, takže rutina +musí zvážiť efekt roztiahnutia neroztiahnuteľného a pokuty, pokuta málokedy +vyhraje. Tomuto rozporu sa dá predísť povolením +rutine skrátiť stránku +použitím direktívy csx{raggedbottom}; mnoho vydavateľov však trvá na +štandardnom csx{flushbottom}; je málokedy akceptovateľné priviesť do +vertikálneho zoznamu roztiahnuteľnosť, okrem bodov (ako nadpisy sekcií), kde +to dizajn dokumentu explicitne povoľuje. + +<P> +Keď ste už vyčerpali automatické opatrenia a máte konečný návrh, ktorý chcete +„vypilovať“, musíte použiť ručné opatrenia. Zbaviť sa siroty je jednoduché: +pred odstavec uveďte csx{clearpage} a odstavec nemôže začať na zlom mieste. + +<P> +Zbaviť sa vdovy je komplikovanejšie. Ak je odstavec dlhý, mohlo by sa dať +vysádzať ho „tesne“: vložte csx{looseness}<CODE>=-1</CODE> bezprostredne za +posledné slovo odstavca. Ak to nefunguje, skúste zmeniť veľkosť stránky: +csx{enlargethispage}<CODE>\{baselineskip}</CODE> by mohlo pomôcť a dostať celý +odstavec na jednu stranu. Zmenšením veľkosti stránky pomocou +<P> +<PRE> + \enlargethispage{-\baselineskip} +</PRE> +</P> +môže vytvoriť (viac-menej) +akceptovateľnú „dvojriadkovú vdovu“. (Všimnite si: +csx{looseness}<CODE>=1</CODE> zvyšujúc dĺžku strany o jednotku málokedy +funguje — dotyčný odstavec má zvyčajne jednoslovný posledný riadok, ktorý +nevyzerá oveľa lepšie ako priamo vdova.) + +<P> +<P><A NAME="Q-poznstr"><HR><H3>Proč LaTeX dělí poznámky pod čarou na</H3></A> + více stránek?} + +<P> +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. LaTeX +by se mohl pokusit problém vyřešit ochuzením stránky o poznámku a taky +řádek obsahující značku poznámky, ale jeho priority mu poradí, že rozdělení +rozdélení poznámky je preferováno. + +<P> +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 <CODE>\interfootnotelinepenalty</CODE> — čím má větší +parametr, tím méně LaTeX rozděluje poznámky. Nastavením +<CODE>\interfootnotelinepenalty=10000</CODE> (základní hodnota je 100) zcela +zabráníte zabráníte rozdělování poznámek pod čarou. To ale vyvolá hlášku +„Underfull <CODE>\</CODE>vbox“ pokud nezadáte <CODE>\raggedbottom</CODE>. + +<P> +Alternativní technika spočívá v malém podvodu na +LaTeX, kdy pomocí parametrů příkazu <CODE>\enlargethispage</CODE> změníte +velikost aktuální stránky (např. mu můžete dát na vstup +<CODE>\enlargethispage{\baselineskip}</CODE> pro přidání jednoho řádku na tuto +stránku, můžete však použít jakoukoliv běžnou TeXovou jednotku délky, +třeba 15mm nebo -20pt). Zmenšení velikosti běžné stránky si může vynutit +useknutí textu a jeho přesunutí na další stránku; zvětšení stránky může +způsobit, že se poznámky spojí do jednoho celku. To může být +nevyhnutelné, pokud chcete změnit velikost více než jedné stránky.<BR> +<CODE>fnbreak.sty</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/fnbreak">fnbreak</A> + +<P> +<P><A NAME="Q-marginright"><HR><H3>Jak dostat <CODE>\marginpar</CODE> na správnou stranu?</H3></A> +V ideálním světé by okrajové poznámky byly na analogických místech na každé +stránce: na sudých stránkách v levém okraji, na lichých v pravém. Hned vidíme, +že poznámka vlevo musí být vysázena jinak než poznámka napravo. LaTeXovský +příkaz csx{marginpar} proto v oboustraných (<CODE>twoside</CODE>) dokumentech +akceptuje dva parametry: +<P> +<CODE>\marginpar[left text]{right text}</CODE> +</P> +LaTeX používá „zjevný“ test, aby dostal csx{marginpar} na správný okraj, +ale úskalí je v tom, že vytváří stránky asynchronně. Když je csx{marginpar} +spracován, zatímco je budována stránka ensuremath{n}, ale není použit až do +stránky ensuremath{n}+1, pak se csx{marginpar} objeví na špatném okraji +stránky. Toto je instance obecnějšího problému: viz <A HREF="sectR.html#Q-oddpage">Zistenie, či ste na párnej alebo nepárnej strane</A>. + +<P> +Řešením tohoto problému by mohlo být zapamatování si, na kterou +stranu stránky má být použit <CODE>\marginpar</CODE>. Toto umí balík +<A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/contrib/mparhack">mparhack</A>, který využívá značky +uložené v <CODE>.aux</CODE> souboru. + +<P> +<P><A NAME="Q-misschar"><HR><H3>Kam zmizli moje písmená?</H3></A> + +<P> +Napísali a spracovali ste zjavne zmysluplný text, ale výsledok neobsahuje ani +stopu po niektorých písmenách, ktoré ste napísali. Pravdepodobným dôvodom je, +že vybraný font neobsahuje reprezentáciu dotyčných znakov. + +<P> +Ak napríklad napíšem „that will be GBP{}44.00“ do obyčajného +TeXovského/LaTeXovského dokumentu alebo si vyberiem font <CODE>rsfs10</CODE> +(obsahujúci iba veľké písmená) a napíšete takmer čokoľvek, znak libry +(GBP{}) alebo akékoľvek malé písmená alebo číslice budú vo výstupe chýbať. +Chybové hlásenie neexistuje, musíte si prečítať log súbor, kde nájdete záhadné +malé správy ako +<P> +<PRE> +Missing character: + There is no ^^a3 in font cmr10! +Missing character: + There is no 3 in font rsfs10! +</PRE> +</P> +(prvá demonštruje neochotu môjho TeXu vysporiadať sa so znakmi s osembitovou +znakovou sadou, zatiaľ čo príklad <CODE>rsfs10</CODE> ukazuje, že TeX +zaznamenáva dotyčný chybný znak, ak si myslí, že je to možné). + +<P> +Trochu lepšie pochopiteľné sú diagnostiky, ktoré dostanete z <CODE>dvips</CODE>, +keď používate OT1 a T1 verzie fontov dodávaných v štandardnom +kódovaní Adobe: +<P> +<PRE> +dvips: Warning: missing glyph `Delta' +</PRE> +</P> +Proces generujúci metriky pre používanie fontu generuje inštrukciu pre +<CODE>dvips</CODE>, aby produkovalo tieto diagnostiky, aby ich neprítomnosť +v tlačenom výstupe bola menej prekvapujúca, než by mohla byť. Dosť glyfov +poskytnutých v Knuthovych textových kódovaniach a v Corkovskom kódovaní nie je +v Adobe fontoch dostupných. V týchto prípadoch <EM>existuje</EM> vysádzaný symbol +týchto znakov: <EM>dvips</EM> vytvára čierny obdĺžnik veľkosti fontu. + +<P> +<P><A NAME="Q-xspace"><HR><H3>Príkazy požierajú nasledujúce medzery</H3></A> + +<P> +Ľudia sú stále prekvapení, že jednoduché príkazy požierajú medzeru, ktorá za +nimi nasleduje: je to jednoducho tak. Efekt vzniká pre spôsob práce TeXu, +Lamport popisuje riešenie (umiestnite jedny zložené zátvorky za vyvolanie +príkazu) v popise syntaxe LaTeXu. Takže požiadavka je vlastne súčasťou +definície LaTeXu. + +<P> +Anglické FAQ je napríklad napísané s definíciami <EM>vyžadujúcimi</EM> +písanie csx{fred{relax}} +pre takmer všetky vyvolania makier bez ohľadu na to, či je nasledujúca medzera +potrebná: anglické FAQ je však písané veľmi oddanými (a podľa niekoho +zvláštnymi) ľuďmi. Mnoho používateľov si myslí, že písanie tých všetkých +zložených zátvoriek sa veľmi rýchlo stane veľmi únavným, a radšej by ich vôbec +nepísali. + +<P> +Alternatívnou štruktúrou, ktorá neporušuje návrh LaTeXu, je napísať +csx{fred}csx{ } — príkaz csx{ } je „samoukončovací“ (ako <CODE>\</CODE>{}<CODE>\</CODE>) +zložené zátvorky za neho už písať nemusíte. Znížite teda počet extra znakov +na jeden. + +<P> +Ak je aj ten jeden znak priveľa, balík <CODE>xspace</CODE> definuje príkaz +csx{xspace}, ktorý háda, či by za ním mala byť medzera, a ak si myslí, že +mala, vloží ju. Takže +„<CODE>fredcsx{xspace</CODE> jim}“ vytvorí „fred jim“, zataiľ čo +„<CODE>fredcsx{xspace</CODE>.@ jim}“ vytvorí „fred. jim“. Jeho použitie by +samozrejme bolo úplne nezmyselné, csx{xspace} ale môžete zabudovať do +vlastných makier: +<P> +<PRE> +\usepackage{xspace} +... +\newcommand{\restenergy}% + {\ensuremath{mc^2}\xspace} +... +and we find \restenergy available to us... +</PRE> +</P> +Príkaz csx{xspace} musí byť poslednou vecou v definícii vášho makra +(ako v príklade); nie je to úplne bezchybné, ale poradí si s väčšinou situácii +v texte. + +<P> +Balík <CODE>xspace</CODE> vám nič neušetrí, ak modifikované makro použijete raz +alebo dvakrát v dokumente. V každom prípade buďte pri použití csx{xspace} +opatrní — zmení vašu vstupnú syntax, čo môže byť mätúce, hlavne pre +spolupracujúceho autora (predovšetkým ak vytvoríte nejaké príkazy, ktoré to +používajú, a nejaké, ktoré nie). Žiadny príkaz zabudovaný do LaTeXu alebo +akejkoľvek triedy, prípadne balíku, samozrejme csx{xspace} používať nebude.<BR> +<CODE>xspace.sty</CODE>: distribuované ako súčasť <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/required/tools">2etools</A> + +<P> +<P><A NAME="Q-exscale"><HR><H3>Matematické symboly sa nezvetšujú</H3></A> + +<P> +„Veľké“ matematické symboly štandardne zostávajú rovnakej veľkosti nezávisle +na veľkosť fontu textu dokumentu. Existuje pre to dobrý dôvod: fonty +<CODE>cmex</CODE> nie sú navrhnuté na zmenu veľkosti, takže TeXovský +algoritmus umiestňovania matematiky nepracuje tak dobre, ako by mohol, ak +by boli fonty zväčšovateľné. + +<P> +Toto správanie však mätie očakávania používateľov a môže viesť k trochu +zvláštne vyzerajúcim dokumentom. Ak napriek varovanie chcete, aby sa fonty +dali zväčšovať, použite balík <CODE>exscale</CODE> — stačí ho iba nahrať.<BR> +<CODE>exscale.sty</CODE>: súčasť distribúcie LaTeXu. + +<P> +<P><A NAME="Q-t1enc"><HR><H3>Prečo používať <CODE>fontenc</CODE> namiesto <CODE>t1enc</CODE>?</H3></A> + +<P> +V raných časoch LaTeX 2e bol jediním spôsobom používania T1 kódovania +balík <CODE>t1enc</CODE>. S vydaním z leta 1994 sa objavil balík <CODE>fontenc</CODE> +a poskytol vyčerpávajúcu podporu použitia kódovania. + +<P> +Napriek tomu tu balík <CODE>t1enc</CODE> zostáva (ako súčasť kódu kompatibility +LaTeX 2.09), ale robí veľmi málo: iba vyberie kódovanie fontov T1 +a na používateľovi nechá záležitosti generovania potrebných kódov znakov. + +<P> +Generovanie takýchto kódov znakov by mohla byť jednoduchá záležitosť, keby +T1 kódovanie zodpovedalo ľubovolnému široko podporovanému kódovaciemu +štandardu, pretože v takomto prípade by ste mohli očakávať generovanie kódov +znakov klávesnicou. T1 kódovanie je však zmesou rôznych štandardných +kódovaní a zahŕňa kódové miesta v oblastiach tabuľky, ktoré štandardné +kódovanie špecificky vylučujú, takže žiadne T1 klávesnice neboli +(a nikdy nebudú) vyrobené. + +<P> +Balík <CODE>fontenc</CODE> naproti tomu generuje kódové miesta T1 z bežných +LaTeX príkazov (generuje napríklad kódové miesto znaku <CODE>'e</CODE> +z príkazu <CODE>\'</CODE>{}<CODE>e</CODE>). Pokiaľ teda nemáte programovo generovaný T1 +vstup, použite <CODE>\usepackage[T1]{fontenc}</CODE> namiesto <CODE>\usepackage{t1enc}</CODE>. + +<P> +<P><A NAME="Q-why-inp-font"><HR><H3>Prečo sa trápiť s <CODE>inputenc</CODE> a <CODE>fontenc</CODE>?</H3></A> + +<P> +Štandardné vstupné kódovanie pre západnú Európu (čakajúc príchod Unicode) je +ISO 8859–1 (bežne známe podtitulom štandardu „Latin-1“). Latin-1 je +v pokrytí kódových miest pozoruhodne blízko TeXovskému T1 kódovaniu. + +<P> +Prečo by sme sa mali za týchto okolností trápiť s <CODE>inputenc</CODE> +a <CODE>fontenc</CODE>? Kedže sa v podstate kopírujú, mohli by sme ich odstrániť +a použiť <CODE>t1enc</CODE> (napriek jeho nedostatkom — viď +Otázku <A HREF="sectR.html#Q-t1enc">Prečo používať <CODE>fontenc</CODE> namiesto <CODE>t1enc</CODE>?</A>). + +<P> +Nerobí sa to ale pre množstvo drobných dôvodov: +<UL> + <LI><B>Zmätenie</B> + Spokojne ste v tomto móde písali a z nejakého dôvodu prepnete + na písanie v nemčine: efekt použitia „<CODE>ss</CODE>“ je tak trochu + prekvapivý, kedže T1 a Latin-1 s kódovým miestom zaobchádzajú inak. + <LI><B>Kompatibilita</B> + Zistíte, že potrebujete pracovať s kolegom vo východnej + Európe: ich klávesnice bude zrejme nastavená tak, aby produkovala Latin-2, + takže jednoduché mapovanie nefunguje. + <LI><B>Tradičný LaTeX</B> + Napíšete niečo ako <CODE>\'</CODE>{}<CODE>e</CODE> namiesto <CODE>'e</CODE>; + iba <CODE>fontenc</CODE> má prostriedky pre konverziu tejto LaTeXovskej + sekvencie do T1 znaku, takže primitívum csx{accent} prekĺzne do + výstupu a rozdeľovanie je ohrozené. +</UL> +Kombinácia <CODE>inputenc</CODE>–<CODE>fontenc</CODE> vyzerá pomalá a ťažkopádna, +je však bezpečná. + +<P> +<P><A NAME="Q-eqnarray"><HR><H3>Prečo nepoužiť <CODE>eqnarray</CODE>?</H3></A> + +<P> +Prostredie <CODE>eqnarray</CODE> je pre príležitostného používateľa matematiky +v LaTeXovských dokumentoch atraktívne: vyzerá, že povoľuje zarovnané systémy +rovníc. Skutočne, tieto veci prostredie poskytuje, ale v rozostupoch znakov +urobí pekný neporiadok. V systéme: +<P> +<PRE> +\begin{eqnarray} + a & = & b + c \\ + x & = & y - z +\end{eqnarray} +</PRE> +</P> +<EM>nie sú</EM> rozostupy okolo znakov `=' tie definované v metrike fontu, +z ktorého pochádza glyf — sú to csx{arraycolsep}, čo môže byť nastavené na +veľmi divnú hodnotu z dôvodov spojených so skutočnými poliami na inom mieste +dokumentu. + +<P> +Používateľa oveľa lepšie obslúži sada AMSLaTeX, ktorá poskytuje prostredie +<CODE>align</CODE> navrhnuté rešpektujúc potreby matematikov (oproti pohodliu +LaTeXovských programátorov). Pre tento jednoduchý dôvod (align je schopné +oveľa lepších vecí) použite: +<P> +<PRE> +\begin{align} + a & = b + c \\ + x & = y - z +\end{align} +</PRE> +</P> +<CODE>AMSLaTeX</CODE>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/latex/required/amslatex">amslatex</A> + +<P> + +<P> +<P><A NAME="Q-dolldoll"><HR><H3>Prečo používať csx{[} ...csx{]} namiesto <CODE>$$</CODE>...<CODE>$$</CODE>?</H3></A> + +<P> +LaTeX definuje príkazy „inline“ a „display“ matematiky, zjavne +analogické k tým, čo sú odvodené z TeXovských príkazov na zátvorkovanie +matematických sekvencií so znakmi doláru (alebo dvojicami znakov doláru). + +<P> +Ako sa ukázalo, LaTeXovské inline zoskupovanie matematiky +csx{(}<CODE> ... </CODE>csx{)} má presne rovnaký účinok ako TeXovská +primitívna verzia <CODE>$ ... $</CODE>. (Jediný rozdiel je, že LaTeXovská +verzia kontroluje, či ste nepoužili csx{(} a csx{)} zle.) + +<P> +Za týchto okolností sa často nájdu používatelia LaTeXu majúci nejaké +skúsenosti s používaním Plain TeXu, ktorí jednoducho predpokladajú, že +LaTeXovské zoskupovanie display matematiky csx{[}<CODE> ... </CODE>csx{]} +môže byť vymenené TeXovským primitívnou display matematikou +<CODE>$$ ... $$</CODE>. + +<P> +Bohužiaľ sa mýlia: ak LaTeXovský kód bude upravovať display matematiku, +môže tak učiniť iba úpravou csx{[} a csx{]}. Najzjavnejším spôsobom, ako sa +to prejaví, je, že voľba triedy <CODE>fleqn</CODE> jednoducho nefunguje pre rovnice +napísané pomocou <CODE>$$ ... $$</CODE>, či už používate iba štandardné triedy, +alebo balík <CODE>amsmath</CODE>. + +<P> +Existujú aj zákernejšie efekty (hlavne s balíkom <CODE>amsmath</CODE>), +jednoduché pravidlo je csx{[}<CODE> ... </CODE>csx{]}, kedykoľvek +je v LaTeXu potrebná neozdobená display matematika. + +<P> +<P><A NAME="Q-picerror"><HR><H3>Proč nemůžu nahrát PiCTeX</H3></A> + +<P> +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 <EM>pictex</EM> a další balíky, které +potřebují stejné systémové zdroje. Pokud k tomu dojde, pak vám LaTeX +vypíše chybovou hlášku <BR> +<CODE> ! No room for new \dimen.</CODE><BR> +S touto chybou nelze nic udělat: nemůžete totiž zvýšit počet dostupných +rozměrových registrů, aniž by to udělal sám TeX (toto umí automaticky +e-TeX a Omega – viz Otázku <A HREF="sectT.html#Q-omega">Projekt Omega</A> +a Otázku <A HREF="sectT.html#Q-NTS">Projekt <I>NTS</I></A> a VTeX od firmy MicroPress Inc. – viz +Otázku <A HREF="sectF.html#Q-commercial">Komerční implementace TeXu</A>). +Je celkem praktické (u většiny moderních distribucí) použít rozšířenou +sadu registrů e-TeXu: použijte balík <CODE>etex</CODE> (kterí se dodává +s distribucemi e-TeXu) a alokační mechanismus je pozměněn, aby se vyspořádal +s vétšími sadami registrů: PiCTeX se teď nahraje. + +<P> +Když nemůžete použít e-TeX, musíte změnit PiCTeX; bohužel +jeho autor není již delší dobu v TeXovém světě aktivní, proto se +musíte uchýlit k „patchování“. Dostupná jsou dvě řešení: +<UL> + <LI> CONTeXtové moduly <CODE>m-pictex.tex</CODE> (pro Plain-TeX a jeho +varianty) a <CODE>m-pictex.sty</CODE> (pro LaTeX; oba soubory jsou dostupné +v souboru <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/macros/context/cont-tmf.zip">cont-tmf.zip</A>). Soubor +<CODE>m-pictex.tex</CODE> nabízí důmyslné řešení založené na úpravě kódu +příkazu <CODE>\newdimen</CODE>. + <LI> Alternativně <CODE>pictexwd</CODE> Andrease Schella +(<A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/graphics/pictex/addon">addon</A>) nahrazuje PiCTeX verzí, které používá +o 33 „rozměrových“ registrů méně. Takže místo souborů <CODE>pictex</CODE> +používejte <CODE>pictexwd</CODE>. +</UL> +A jak může někdo použít PiCTeX, +když je těžké sehnat manuál (viz Otázku <A HREF="sectC.html#Q-PiCTeXman">Manuál k programu PiCTeX</A>)? Naštěstí +pro uživatele +MSDOSu a Windows, může být <EM>MathsPic</EM> +(<A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/">CTAN</A>: <A HREF="ftp://ftp.cstug.cz/pub/tex/CTAN/graphics/pictex/mathspic">mathspic</A>) použit pro přeložení z jiného jazyka +do instrukcí PiCTeXu a manuál k MathsPicu +je přímo součástí distribuce. <EM>MathsPic</EM> je napsán +v Basicu; Perlová +verze by měla být dostupná během roku 2001. + +<P> + +<P><HR></TD></TR> +<TR><TD></TD><TD><TABLE BORDER=0><TR> +<TD valign=middle align=left> +<a href="http://www.cstug.cz/"> +<IMG BORDER=0 SRC="images/logo.gif" + ALT="CSTUG" HEIGHT=51 WIDTH=165 ALIGN="right"><BR> +</TD><TD valign=top align=left><FONT SIZE="-1"> +(c) 1997, 1998, 2003 +Tomáš Hudec, Libor Škarvada +<BR> +Poslední aktualizace: 13.11.2004 23:15 +</FONT></TD></TR></TABLE></TD></TR></TABLE> + +</BODY> +</HTML> |