Portál AbcLinuxu, 10. května 2025 04:18

Dotaz: plainTeX - jak spočítat řádky na stránkách

5.7.2007 15:27 Jiri Tomasek
plainTeX - jak spočítat řádky na stránkách
Přečteno: 492×
Odpovědět | Admin
Zdravím,

chci upravit tex soubor tak, aby spočítal řádky a znaky na stránce a nějak získaná data uchoval.

Napadlo mě, že bych mohl po vytisknutí každého tokenu testovat, zda za ním tex vytiskne nový řádek nebo novou stránku a takto jen inkrementovat příslušné hodnoty.

Takže můj dotaz zní: Jak otestuji, že tex na aktuální pozici vytiskne nový řádek/stránku? Nebo nešlo by to celé jednoduššeji?

Díky všem za odpovědi
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

5.7.2007 15:40 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: plainTeX - jak spočítat řádky na stránkách
Odpovědět | | Sbalit | Link | Blokovat | Admin

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

5.7.2007 17:14 robertK | skóre: 26 | blog: Klokanuv_blog | Brno
Rozbalit Rozbalit vše Re: plainTeX - jak spočítat řádky na stránkách
Odpovědět | | Sbalit | Link | Blokovat | Admin
ty řádky na stránce by se daly spočítat ve výstupní rutině. musel byste rozebrat box 255 na řádky pomocí unpenlaty, unskip a removelastbox (nebo tak nějak, možná si ty příkazy nepamatuju přesně, je to popsáno v Texbooku naruby při popisu úpravy sazby z levého na pravý praporek).
5.7.2007 20:51 Jiri Tomasek
Rozbalit Rozbalit vše Re: plainTeX - jak spočítat řádky na stránkách
Díval jsem se do Texbooku a mám zatím 2 nadějné postupy, zatím bohužel ani jeden nefunguje.

Zde je 1. pokus:

\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é.]
6.7.2007 12:35 robertK | skóre: 26 | blog: Klokanuv_blog | Brno
Rozbalit Rozbalit vše Re: plainTeX - jak spočítat řádky na stránkách
Je tam nejaky primitiv ifvoid, ktery testuje jestli je box prazdny

Fakt se mi to nechce zkouset, jenom bych se inspiroval makrem \toright, ktere je v Texbooku naruby na strane 265. Vzal bych ho tak jak je a pridal bych tam pocitani radku. Inkrementoval bych pro jistotu pomoci global a citac s poctem radku bych nuloval pri kazdem vyvolani output rutiny.
7.7.2007 12:20 Jiri Tomasek
Rozbalit Rozbalit vše Re: plainTeX - jak spočítat řádky na stránkách
Tak mám 1. funkční verzi. Pořádně ale nechápu, proč se tam tolik řeší glue, asi by to šlo i nějak lépe.

\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?
7.7.2007 23:50 robertK | skóre: 26 | blog: Klokanuv_blog | Brno
Rozbalit Rozbalit vše Re: plainTeX - jak spočítat řádky na stránkách
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.
8.7.2007 09:20 Jiri Tomasek
Rozbalit Rozbalit vše Re: plainTeX - jak spočítat řádky na stránkách
OK, díky za všechny informace

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.