Cislovani kapitol do obsahu;

Stepan Kasal kasal at matsrv.math.cas.cz
Fri Jun 7 11:03:10 CEST 2002


Dobry den,

On Fri, 7 Jun 2002 06:25:35, Josef Polach <polach.j at pbsvb.cz> wrote:
> pro vytvareni obsahu pouzivam makro podobne jako to v TBN na strane 280-290.
> Vsechno by bylo v pohode, ale v pripade, ze mi vyjdou zacatky dvou kapitol
> na jednu stranku, objevi se v obsahu obe s tim vyssim cislem. V textu, kam
> vkladam to cislo taky, je spravne. Vypada to, ze ten radek do obsahu se
> vytvari teprve az zpracuje celou stranku a pamatuje si a tedy ulozi u obou
> az to druhe (obecne posledni) cislo.

i kdepak, ten radek se do obsahu zapise jeste pozdeji, az v momente, kdyz se
TeX rozhodl odeslat stranku do dvi souboru.  Tou dobou uz muze mit zpracovany
zacatek nasledujici stranky, protoze se driv nedalo urcit, ktery strankovy zlom
je nejvyhodnejsi -- TeX musi brat v uvahu spoustu vlivu: pruzne mezery, kladne
a zaporne penalty, ...

Makro, ktere pouzivate, je vhodne pouze pro *kapitoly*, tedy nadpisy casti,
ktere s prevahou zaberou tak aspon dve stranky.

> Jak se to da osetrit?

Viz nize.

> Jak prinutit TeX, aby ten radek dal do souboru s obsahem hned a ne
> az pote, co si to cislo znova zvetsi?

Ale tohle by problem nevyresilo.  V pripadech, kdy je potreba zpracovat
zacatek nasledujici stranky pred odeslanim rozdelane stranky, by se nadpis
ze zacatku nove stranky mohl objevit s cislem o jedno mensim.

Je spravne, ze se \write provede az v okamziku odeslani strany do dvi
souboru.  Chybou vsak je, ze se pamatuje jmeno cotace, ktery tenkrat
obsahoval spravne cislo a ne cislo samo.

Muzete si pomoci mechanismy pro rizeni expanze, napr. takto:
[makra jsem neodladil, takze Vam nezbyva, nez snazit se je pochopit a dodelat
podle Vasich potreb]

\edef\save{\write\toc{\string\tocline{\the\num{. }{#1}}{\string\dotfill}{\
\noexpand\the\noexpand\pageno}}}\save

pri vhodne definici makra tocline by melo stacit:

\edef\save{\string\tocline{\the\num}{#1}}%
\expandafter\write \expandafter\toc \expandafter{\save {\the\pageno}}

nebo treba:
\edef\save{\write\toc{\string\tocline{\the\num}{#1}\the\pagetoks}}\save
pokud provedete jednorazove
\newtoks\pagetoks \pagetoks={{\the\pageno}}

(Ten posledni zpusob jsem opsal od Karla Horaka.)

S pozdravem,
	Stepan Kasal





More information about the csTeX mailing list