diff options
Diffstat (limited to 'Master/texmf-doc/doc/czechslovak/cstug/csfaq/sectS.html')
-rw-r--r-- | Master/texmf-doc/doc/czechslovak/cstug/csfaq/sectS.html | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/Master/texmf-doc/doc/czechslovak/cstug/csfaq/sectS.html b/Master/texmf-doc/doc/czechslovak/cstug/csfaq/sectS.html new file mode 100644 index 00000000000..7f743523a42 --- /dev/null +++ b/Master/texmf-doc/doc/czechslovak/cstug/csfaq/sectS.html @@ -0,0 +1,249 @@ +<HTML> +<HEAD> +<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-2"> +<TITLE>Chyby v TeXu</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>Chyby v TeXu</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> +Poněvadž TeX je makroprocesor, je často poměrně obtížné porozumět jeho +chybovým hláškám; to je bohužel vlastnost makroprocesorů. Knuth se +snažil vnést jasno do tohoto problému ve svém TeXbooku tím, že +uživatelům naznačil, aby získlali detektivní schopnosti moderního +Sherlocka Holmese; ačkoliv má tento přístup jakýsi romantický nádech, +není pro aktivní uživatele (La)TeXu příliš užitečný. Tato odpověď +(z části odvozená z článku Sebastiana Rathze z <I>TUGboatu</I> +Vol 16(4)) nabízí +obecnou radu, jak reagovat na chyby pomocí chybových zpráv a jiné +odpovědi v této sekci pojednávají o jiných bežných (ale matoucích) +chybách, se kterými se můžete v TeXu setkat. V Sebastianově článku se +objevuje obsáhlý seznam rad, v němž mimo jiné stojí: +<UL> + <LI> Podívejte se podrobně na chybu; některé chyby se nejprve mohou zdát +záhadné, ale často obsahují přímé vodítko k vyřešení problému. Pro další +detaily je dobré si pročíst následující otázku. + <LI> Přečtěte si soubor <CODE>.log</CODE>; obsahuje podrobnější informace o věcech, +kterým třeba nerozumíte, často nejsou předloženy jako chyby. + <LI> Buďte si vědomi množství souvislostí, které TeX obnáší. Chybové +hlášky vám dávají kousky TeXového kódu (nebo samotného dokumentu), +aby vám ukázal, kde se právě stala chyba, je možné zkontrolovat, kolik +těchto chyb se ve vašem dokumentu objevuje. Nyní LaTeX dává TeXu +pokyn, aby vám vypsal pouze jeden řádek z kontextu, avšak pokud chcete, +můžete mu říct, aby vypsal více řádků. To provedete umístěním příkazu +<CODE>\setcounter{errortextlines}{999}</CODE> v preambuli vašeho dokumentu. + <LI> Jako poslední východisko může být použítelným nástrojem trasování; +čtení celého dokumentu vás může velice rychle zavést ke zdroji vašeho +problému. Musíte si přečíst některé pasáže z TeXbooku +(viz Otázku <A HREF="sectC.html#Q-books">Knihy o TeXu a příbuzná literatura</A>), +abyste tomuto problému zcela porozuměli. Příkaz <CODE>\tracingall</CODE> nastavuje +maximální trasování; nastavuje také výstup přicházející na interaktivní +terminál. Běžně je nejjednodušší pročíst trasování použitím vašeho +oblíbeného textového editoru k prohlížení <CODE>.log</CODE> souborů. +</UL> + +<P> +<P><A NAME="Q-errstruct"><HR><H3>Struktura chybových hlášek v TeXu</H3></A> + +<P> +TeXové chybové hlášky připomínají dobu, kdy byl TeX vymyšlen +(70. léta minulého století): k uživatelům nejsou příliš přátelské, ačkoliv +obsahují veškeré informace, které může TeX nabídnout, obvykle jsou +vyloženy přehledně a stručně. Všechny chybové hlášky mají v TeX{}u +stejnou strukturu: +<UL> + <LI> chybová hláška + <LI> kontext + <LI> stručný návod na řešení problému +</UL> +Chybová hláška uvede stav TeXu, který způsobil daný problém. Bohužel, +v soustavě balíků maker jako je LaTeX však bývá odhalení konkrétního +problému v makrech vyšší úrovně poměrně obtížné. Mnohé chyby, které se +v LaTeXu objevují, se tváří jako generické chyby s chybným textem +vloženým LaTeXem nebo jeho balíky. + +<P> +Kontext chyby je stylizovaná reprezentace toho, co TeX udělal, když +detekoval chybu. Jak bylo poznamenáno v Otázce <A HREF="sectS.html#Q-jaknane">Jak na chyby v TeXu?</A>, +makrobalíček může TeXu říct, jak dlouhý kontext má zobrazit. Každá +řádka kontextu je rozdělena v bodě chyby; pokud chyba ve skutečnosti +nastane v makru volaném z aktuální řádky, zlom nastane v bodě volání. +Pokud má makro parametry, tak se řádka zlomí až za posledním z nich. Např. +<BR> +<CODE>\blah and so on</CODE><BR> vyvolá chybu +<PRE> +! Undefined control sequence. +1.4 \blah + and so on +</PRE> +zatímco +<PRE> +\newcommand{\blah}[1]{\bleah #1} +\blah{to you} +</PRE> +má za důsledek hlášku +<PRE> +! Undefined control sequence. +\blah #1->\bleah + #1 +1.5 \blah{\bleah}, folks +</PRE> +Pokud chyba nastane v argumentu, pak se nám mohou objevit věci jako +např. po zadání +<PRE> +\newcommand{\blah}[1]{#1 to you} +\blah{\bleah}, folks +</PRE> +si můžeme přečíst +<PRE> +! Undefined control sequence. +<argument> \bleah + +<P> +1.5 \blah{\bleah} + , folks +</PRE> +Příkazový řádek akceptuje jednoznakové příkazy, jejichž seznam si +můžete nechat vypsat zadáním znaku <CODE>?</CODE>. Jedním z bezprostředně +nejdůležitějších příkazů je říkaz <CODE>h</CODE>, který vám dá na výstup přesnější +zprávu občas doplněnou pokynem, jak chybu odstranit, případně jak se +jí vyhnout. Pokud stisknete <CODE>enter</CODE>, nebo jinou klávesu, kterou váš systém +používá k ukončení řádky, TeX se pokusí pokračovat (často s poněkud +menším úspěchem.) + +<P> +<P><A NAME="Q-extrapz"><HR><H3>Pravá složená závorka navíc</H3></A> + +<P> +Viděli jste ve vašem LaTeXovém zdroji znak +„<CODE>}</CODE>“ +navíc a přesto LaTeX, +v tomto místě nehlásil chybu? Toto je způsob, jak říci TeXu, že jste +vložili křehký příkaz s pohyblivým argumentem (viz +Otázku <A HREF="sectR.html#Q-protect">Proč se v LaTeXu užívá ochran (protection)</A>). Příkladem takovéhoto křehkého příkazu je +třeba <CODE>\footnote</CODE>; pokud ho vložíte jako argument příkazu <CODE>\section</CODE>, +pak vám sekvence +<PRE> +\section{Mumble\footnote{I couldn't think of anything better}} +</PRE> +dá na výstup: +<PRE> +! Argument of \@sect has an extra }. +</PRE> +Obvykle se tato situace řeší použitím robustního příkazu namísto toho, +který používáte nebo přeměnit váš příkaz na robustní pomocí prefixu +<CODE>\protect</CODE>, který ve výše zmíněném případě může vypadat takto: +<PRE> +\section{Mumble\protect\footnote{I couldn't think of anythimg better}}. +</PRE> +Na závěr ještě jedna poznámka: <CODE>\protect</CODE> vždy nemusí být řešením, +Otázka <A HREF="sectO.html#Q-pozntab">Poznámky pod čarou v tabulkách</A> popisuje jednotlivé případy. + +<P> +<P><A NAME="Q-nenimisto"><HR><H3>Není místo pro přidání nových věcí</H3></A> + +<P> +Technologie, která byla Knuthovi dostupná v době, kdy vytvářel TeX, +příliš neumožňovala spravovat dynamické paměti; většinou jsou místa +v paměti v TeXu alokována jako pole pevné délky. Mnoho těchto fixovaných +polí je v moderních implementacích TeXu rozšiřitelných, avšak velikost +polí těchto registrů je obecně omezena počtem 256; většinou nemůže být +změněna, pokud stále budete chtít zavolat výsledky TeXu (viz +Otázku <A HREF="sectB.html#Q-LaTeXwhat">Co je to LaTeX</A>). +Pokud naplníte jeden z těchto registrů, můžete dostat chybovou hlášku +<PRE> +! No room for a new \<thing>. +</PRE> +Zde se místo <CODE>\<thing></CODE> může objevit <CODE>\count</CODE> (objekt, který tvoří +základ příkazu <CODE>\newcounter</CODE>), <CODE>\skip</CODE> (objekt, který tvoří základ +příkazu <CODE>\newlength</CODE>), <CODE>\box</CODE> (objekt, který tvoří základ příkazu +<CODE>\newsavebox</CODE>), <CODE>\dimen</CODE>, <CODE>\muskip</CODE>, <CODE>\toks</CODE>, <CODE>\read</CODE>, +<CODE>\write</CODE> nebo <CODE>\language</CODE> (všechny typy balíků, které se zde +používají, jsou v LaTeXu skryté; limit počtu objektů +<CODE>\read</CODE> a <CODE>\write</CODE> je omezen číslem 16). + +<P> +Není zde žádná možnost, jak +tuto chybu přímo opravit, nemůžete totiž přímo zvětšit počet dostupných +registrů, aniž by to učinil přímo LaTeX. (Jistě, Omega +a e-TeX – viz Otázku <A HREF="sectT.html#Q-omega">Projekt Omega</A> respektive +Otázku <A HREF="sectT.html#Q-NTS">Projekt <I>NTS</I></A> – to umí, stejně jako VTeX firmy +MicroPress Inc – viz Otázku <A HREF="sectF.html#Q-commercial">Komerční implementace TeXu</A>). Nejobecnější +způsob, jak se setkat s jednou z těchto chyb, je použít nefunkční makro +nebo použít dobré makro na špatném místě (případy jsou diskutovány +v Otázce <A HREF="sectS.html#Q-epsfbit"><CODE>epsf</CODE> přestává po jisté době spolupracovat</A>). Nicméně občas potřebujete více, než vám +TeX může nabídnout, pokud se tak stane, +musíte použít jiný způsob vytvoření objektů. Příkladem je složitější +nahrávání PiCTeXu v LaTeXu (viz Otázku <A HREF="sectR.html#Q-picerror">Proč nemůžu nahrát PiCTeX</A>). + +<P> +<P><A NAME="Q-epsfbit"><HR><H3><CODE>epsf</CODE> přestává po jisté době spolupracovat</H3></A> + +<P> +Zdá se, že některé kopie dokumentace <CODE>epsf.tex</CODE> naznačují, že příkaz +<CODE>\input epsf</CODE> je potřebný pro každý vložený symbol. Pokud vezmete toto +doporučení příliš doslovně, pak se vám za chvíli objeví chyba +<PRE> +! No room for a new \read. +</PRE> +Je to protože pokaždé, když se <CODE>epsf.tex</CODE> nahrává, je alokován nový +handle pro soubor určený pouze pro čtení, který kontroluje tento soubor +a pak zde není dost místa pro další věci (viz +Otázku <A HREF="sectS.html#Q-nenimisto">Není místo pro přidání nových věcí</A>). Řešení je jednoduché – toto je totiž +případ nesprávného použití maker; každý +totiž potřebuje číst <CODE>epsf.tex</CODE> pouze jednou, změňte tedy +<PRE> +... +\input epsf +\epsffile{...} +... +\input epsf +\epsffile{...} +atd. +</PRE> +na +<PRE> +\input epsf +</PRE> +kdesi na začátku dokumentu a pak doplňte váš příkaz <CODE>\epsffile</CODE> +přizpůsobením velikosti pomocí příkazu <CODE>\epsfxsize</CODE>. + +<P> + +<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> |