A5paper nefunguje

Petr Olsak petr at olsak.net
Wed Aug 3 17:12:47 CEST 2005



On Tue, 2 Aug 2005, Vit Zyka wrote:

> Marcel Svitalský wrote:
> > Vit Zyka wrote:
> >
> >> Marcel Svitalský wrote:
> >>
> >>> Mně funguje pro PDF toto v LaTeXu:
> >>>
> >>> \documentclass[a5paper]{article}
> >>> \ifx\pdfoutput\undefined\else
> >>
> >>
> >>
> >> Lepe:
> >> \newif\ifPDF
> >> \ifx\pdfoutput\undefined
> >> \else\ifnum\pdfoutput>0 \expandafter\PDFtrue\fi
> >> \fi
> >>
> >> \ifPDF
> >>
> >> Vit Zyka
> >>
> >>>   % PDF
> >>>   \setlength{\pdfpagewidth}{148.5mm}
> >>>   \setlength{\pdfpageheight}{210mm}
> >>> \fi
> >>>
> >
> > Ta výhoda je zřejmá, nerozumím ale tomu, proč je tam třeba ten
> > \expandafter, tedy za jakých okolností by to bez něj nemělo stejný
> > výsledek.

Dobry den,

ja taky nevim, proc tam je to \expandafter. Makro \PDFtrue nema parametry,
takze je zbytecne paranoidni odklizet za nim pripadna \fi (a navic ne
vsechna). Take vysvetleni uvedene nize je podle meho nazoru ponekud mimo.

Domnivam se, ze alokator \newif se pouziva prave proto, aby vznikla makra
\xxxtrue a \xxxfalse, ktera, na rozdil od tokenu ve vyznamu \if.., \else,
\fi jsou pri nesplneni podminky preskakovatelna. Takze se s vyhodou tato
makra pouzivaji prave uvnitr kosatych vetveni \if..\if..\fi\fi apod., kde
primy zapis \let\ifxxx=\iffalse vede samozrejme k chybe. Totiz: pri
preskakovani podminky se makra neexpanduji, takze TeX nepozna, ze uvnitr
makra \xxxtrue je skryty token typu \if.

Mozna nekdo nekdy napsal:

\else\ifnum\pdfoutput>0\PDFtrue\fi

(bez mezery za nulou) a divil se zahadnemu chovani (protoze nyni se makro
\PDFtrue v ramci vyhodnoceni \ifnum expanduje) a jal se problem
zachranovati nejakymi expandaftery a ty pak v kodu jako urcity druh
folkloru zustaly.

Zdravim

Petr Olsak


> Pravdou je, ze mne tam jedno \expandafter vypadlo:
> \newif\ifPDF
> \ifx\pdfoutput\undefined
> \else\ifnum\pdfoutput>0 \expandafter\PDFtrue\expandafter\fi
> \fi
>
> TeX pred vyhodnocenim podminky provadi plnou expanzi. Protoze
> \newif\ifPDF definuje \PDFtrue na \let\ifPDF=\iftrue, pak je-li
> \pdfoutput=1 bude TeX ve verzi bez expandafteru postupne zpracovavat
>
> \ifx\pdfoutput\undefined
> \else\ifnum\pdfoutput>0 \let\ifPDF\pdftrue\expandafter\fi
> \fi
>
> kde \pdftrue se provede v prikazu \let. Pak se ukonci obe podminky a vse
> bude v poradku. Kdyz vsak \pdfoutput=0, TeX zkouma ne jen, kde je konec
> podminky \ifnum, ale take, zda neni uvnitr nejaka jina vnorena podminka.
> A najde \iftrue. Ten pozere jedno \fi a to pak bude schazet k ukonceni
> predchozich podminek. A dojde k chybe.
>
> S expandafter expanze zpusobi, ze \PDFtrue se ocitne jakoby az za
> \fi\fi. Diky tomu se podminky uzavrou spravne, protoze vsak TeX
> nezapomnel, ze \PDFtrue pochazi z nepravdive vetve, neprovede jej.
>
> S pozdravem
> Vit Zyka
>
>
> =======================================================
> Ing. Vít Zýka, Ph.D.                         TYPOkvítek
>
> database publishing              databazove publikovani
> data maintaining and typesetting in typographic quality
> priprava dat a jejich sazba v typograficke kvalite
>
> tel.: (+420) 777 198 189     www: http://typokvitek.com
> =======================================================
>
>





More information about the csTeX mailing list