[cstex] Je \vsplit opravdu globalni?
Jan Sustek
Jan.Sustek at seznam.cz
Mon Oct 17 08:42:51 CEST 2011
Dobry den,
dekuji za pekny ranni orisek. :-)
Koukal jsem do TeXbooku a TBN a nikde jsem nenasel, ze by melo byt prirazeni pomoci \vsplit globalni. Podle me by bylo logicke, kdyby prirazeni pomoci \vsplit poslouchalo skupiny stejne jako kazde jine prirazeni, napriklad jako \setbox.
Ale podle zdrojaku TeXu se \setbox a \vsplit chovaji jinak. Prikazy, ktere maji hodnotu cur_cmd<=70, nemohou mit prefix (napriklad \global) (sekce 1211). No a \vsplit ma hodnotu 20 (sekce 208, 1072) a \setbox ma 98 (sekce 209). To znamena, ze \setbox muzeme nastavit lokalne, nebo globalne, ale u \vsplitu si vybirat nemuzeme.
Hlubsi pohled do zdrojaku ukazuje nasledujici. WEBove makro box(#) je ukazatel (sekce 230, 221) do TeXove pameti (ta je globalni), kde je ulozen obsah boxu. Hodnota ukazatele se meni v zavislosti na skupinach. Ale primitiv \vsplit meni primo obsah pameti (sekce 977, treti radek od konce), na niz se ukazatel box(n) ukazuje. To znamena, ze by melo platit, ze se box \xxx meni na urovni skupiny, kde do nej byl prirazen obsah, nezavisle na urovni skupiny, kde byl pouzit \vsplit. To je videt i na nize uvedenem prikladu. Pokud byl box \xxx prirazen globalne, je potom i \vsplit\xxx globalni.
Prijemne TeXovani preje
Jan Sustek
\documentclass{article}
\begin{document}
\newcount\i
\newbox\xxx
\setbox\xxx\hbox{uvodni hbox}
{
\setbox\xxx\vbox{\hsize5cm \loop\ifnum\i<200 \advance\i1 \the\i\ \repeat}
{
Zkuste pred nasledujici setbox dat global
\setbox\xxx\vbox{\hsize3cm \i250 \loop\ifnum\i<400 \advance\i1 (\the\i) \repeat}
\vsplit\xxx to 3cm
tady je box se zavorkami \copy\xxx
}
\vsplit\xxx to 5cm
tady je box bez zavorek
\copy\xxx
}
A tady je \copy\xxx
\end{document}
> ------------ Původní zpráva ------------
> Od: Zdenek Wagner <zdenek.wagner na gmail.com>
> Předmět: [cstex] Je \vsplit opravdu globalni?
> Datum: 16.10.2011 15:44:30
> ----------------------------------------
> Vážení experti (a expertky),
> při psaní makra jsem narazil na to, že bych potřeboval větší \vbox
> rozlámat pomocí \vsplit, a kousky použít později. Protože makro bude
> dělat spoustu dalších věcí, budou určité činnosti probíhat uvnitř
> skupin. Nenašel jsem však, jak se chová \vsplit. Udělal jsem
> nednoduchý experiment:
>
> \newbox\xxx
> \setbox\xxx\vbox{\vskip 0pt plus 10pt \text}
>
> {\vsplit \xxx to 50pt \vskip 1cm \copy\xxx}\vskip 2cm \copy\xxx
>
> Z tohoto experimentu se zdá, že \vsplit přiřadí do \xxx zbytek
> globálně, tj. po uzavření skupiny není v \xxx původní obsah. Oba
> \copy\xxx totiž vysadí totéž. Je tato vlastnost dokumentována? Přesně
> tohle chování se mi v makru hodí, ale nevím, zda se na to mohu
> spolehnout. (Pozn: před vlastním pokusem si definujte \text)
>
> --
> Zdeněk Wagner
> http://hroch486.icpf.cas.cz/wagner/
> http://icebearsoft.euweb.cz
>
> _______________________________________________
> csTeX mailing list
> csTeX na cs.felk.cvut.cz
> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>
>
>
More information about the csTeX
mailing list