Portál AbcLinuxu, 10. května 2025 04:18
TeX funguje trochu jinak, než si představujete, tedy úplně jinak, než když píšete na stroji. V okamžiku, kdy se řeší stránkový zlom, už nepracujete s jednotlivými znaky, ale s nalámanými řádky. Teoreticky byste úpravou zdrojáku TeXu mohl nějaké počítání znaků a řádků zavést, ale bylo potřeba ošetřit tolik výjimek a speciálních případů, že by to stejně nemělo valný smysl. Spíš by možná stála za úvahu dodatečná analýza DVI souboru - pro začátek zkuste dvi2tty
a wc
.
P.S.: jednoduše - jednodušeji
\newcount\tempnum
\output={%
\global\tempnum=0
\loop \unskip \unpenalty \setbox2=\lastbox \the\box2
\advance\tempnum by1
\if ?? \repeat
}
Pokouším se vždycky přečíst řádek, vypsat ho a inkrementovat \tempnum.
Ale zasekl jsem se... Jak mám ukončit ten cyklus, když už nemám odkud brát boxy?
[2. postup by využíval \prevgraf, kde, jak jsem zjistil, je po přečtení každého odstavce počet jeho řádků, ale nastal podobný problém jako u 1. řešení. Ale toto řešení je možná zbytečně složité.]
\newcount\linenum
\global\linenum=0
\output={%
\setbox1=\vbox{%
\unvbox255
\skip0=\lastskip
\unskip
\global\setbox255=\vbox{\vskip\skip0}
\loop \setbox0=\lastbox \skip0=\lastskip \unskip
\advance\skip0 by\lastskip \unskip
\advance\skip0 by\lastskip \unskip \unpenalty
\ifhbox0 \setbox0=\hbox to\hsize{\unhbox0}
\global\setbox255=\vbox{\vskip\skip0 \box0 \unvbox255}
\global\advance\linenum by1
\repeat
}%
\wlog{RADKU:\the\linenum}
\global\linenum=0
\plainoutput
}
Ještě bych se rád zeptal na tyto úseky:
\global\setbox255=\vbox{\vskip\skip0} - proč to zaručí, že bude ve výsledku všude správně glue?
\setbox1=\vbox{...} - box1 nikde nepoužívám, k čemu je tohle dobré?
A ještě nechápu, proč to tiskne vždycky o řádek víc, než má stránka ve skutečnosti. Je to proto, že to počítá i číslo stránky?
A ještě nechápu, proč to tiskne vždycky o řádek víc, než má stránka ve skutečnosti. Je to proto, že to počítá i číslo stránky?Asi to tak bude, v tom boxuje i zahlavi a zapati. Na ostatni otazky doporucuji cz.comp.cstex.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.