Newsgroup: it.comp.software.tex
Titolo: Registro "tokens" nell'output

Buon giorno,
                       qualcuno potrebbe spiegarmi l'enigma
(sicuramente banale) che il seguente semplice file compilato con pdfTeX
+plain non produce nessun pdf, invece di creare uno con la parola
"Testo"?
Grazie
Tomáš Kučera
\newbox\pagebox
\newtoks\pagetoks
\def\macro#1{\pagetoks{#1}}
\def\myoutput{%
  \setbox\pagebox\vbox{\the\pagetoks}%
  \shipout\vbox{\unvbox\pagebox}}
\output={\myoutput}
\macro{Testo}
\bye

 \bye
Perch� TeX non va mai in modo orizzontale, quindi non mette mai
nulla nella "main vertical list" e quindi la \box255 � vuota quando
\bye chiama \eject.
In pi� dimentichi che la routine di output /deve/ svuotare la \box255;
c'� un passaggio del tutto inutile attraverso \pagebox
=====
\newtoks\pagetoks
\def\macro#1{\pagetoks{#1}}
\def\myoutput{%
  \setbox0=\vbox{\box255 }% svuotiamo la \box255
  \shipout\vbox{\the\pagetoks}}
\output={\myoutput}
\null % mette qualcosa nella main vertical list
\macro{Testo}
\bye
=====
Ciao
Enrico

Ti ringrazio di nuovo, col tuo consiglio ho superato il problema dei
colori in presentazioni, 2 e 9 messaggi prima. (Almeno vale per il
file modello, nella mia presentation reale lo proverò domani.)
La soluzione è stata questa: La roba vecchia e nuova vanno tenute
separate non in due \vbox, ma in due registri \toks. Ogni \output la
\vbox della pagina non è composta dalla \vbox "vecchia" riutilizzata,
aggiungendo quella "nuova". Invece, la pagina  viene creata
riutilizzando il contenuto del \toks "vecchio" e aggiungendo quello
del \toks "nuovo". Così il materiale è tenuto non espanso, espande
solo durante l'output, quando si possono ridefinire le macro dei
colori.
Grazie ancora una volta
Tomáš
Ecco il file modello:
\font\esempio=cmbx10 at 20pt
\esempio
%%% le prossime due righe per mettere a posto le
%%% spaziature nell'output
\baselineskip=24pt
\setbox\strutbox=\hbox{\vrule height17pt depth7pt width0pt }
\def\item{\par\hang\textindent}
\long\def\puntoo#1{\item{--}#1}
\long\def\punto#1{\expandafter\newpagetoks\expandafter{\the\newpagetoks
\puntoo{#1}}}
\def\emph#1{\emphcolor #1\textcolor}
\newtoks\oldpagetoks
\newtoks\newpagetoks
\def\slidesoutput{%
\setbox0\vbox{\unvbox255 }
  \shipout\vbox{\oldcolors\the\oldpagetoks\newcolors\the\newpagetoks}%
  \global\expandafter\expandafter\expandafter\oldpagetoks\expandafter
\expandafter\expandafter{\expandafter\the\expandafter\oldpagetoks\the
\newpagetoks}\global\newpagetoks{}}%
\output={\slidesoutput}
\def\pause{\vfill\eject\null}
\def\startslide{\null}
\def\endslide{\vfill\eject\oldpagetoks{}\newpagetoks{}}
\def\red{\pdfliteral{1 0 0 rg 1 0 0 RG}}%
\def\blue{\pdfliteral{0 0 1 rg 0 0 1 RG}}%
\def\green{\pdfliteral{0 1 0 rg 0 1 0 RG}}%
\def\black{\pdfliteral{0 0 0 rg 0 0 0 RG}}%
\def\oldcolors{\let\textcolor\blue\let\emphcolor\black\textcolor}
\def\newcolors{\let\textcolor\red\let\emphcolor\green\textcolor}
%============ L'inizio del testo ==============================
\startslide
\punto{il \emph{primo} elemento (in rosso)}\pause
\punto{il \emph{secondo}}
\punto{e il \emph{terzo} appariscono insieme (in rosso, ma il primo
adesso in blu)}\pause
\punto{e il \emph{quarto} (in rosso, ma i primi tre ora in blu)}
\endslide
\startslide
\punto{il \emph{quinto} elemento (in rosso)}\pause
\punto{il \emph{sesto}}
\punto{e il \emph{settimo} appariscono insieme (in rosso, ma il quinto
adesso in blu)}\pause
\punto{e l'\emph{ultimo} (in rosso, ma i primi tre di questo slide ora
in blu)}
\endslide
%==========La fine del testo =================================
\bye