Re: Creazione ambienti simili a \exercise e \answer del TeXBook

#28668
Up
0
Down
::

Giusto, c’è anche a pag. 422.

Grazie per l’aiuto, la soluzione è perfetta.

Mi spieghi un paio di cose?

Cosa ci fa quel gruppo, cioè questo
`{\obeylines \gdef\copyans#1
{\def\next{#1}%
\ifx\next\empty\let\next=\endgroup %
\else\immediate\write\ans{\next} \let\next=\copyans\fi\next}} `

“sospeso a mezz’aria”? Non è all’interno di nessun comando!

Si sta definendo la macro \copyans con l’argomento delimitato da un carattere ^^M attivo, \obeylines serve a quello. La macro \setupcopy ridà poi \obeylines in modo che \copyans sia valutata nel modo corretto. Ciò che fa \copyans è raccogliere ciò che sta da lì alla fine della riga e scriverla sul file ausiliario. Per questo serve la riga vuota: se l’argomento è vuoto, infatti, si esegue \endgroup che fa finire tutta la faccenda.

La definizione di \copyans va dentro un gruppo per evitare che l’azione di \obeylines si propaghi senza rimedio e infatti è data tramite \gdef.

e poi perché il loop
`\@tempcnta=128
\loop\ifnum\@tempcnta<256
\catcode\@tempcnta=12
\advance\@tempcnta\@ne
\repeat`
dentro \setupcopy, o meglio \ex@sanitize?

Ma il loop non è sempre positivo? Non si rimane lì per sempre?o quel catcode risolve tutto? Non potevi scrivere come scritto in manmac.tex cioè \catcode`\|=\other?

No, il \loop cambia in 12 il codice di categoria di tutti i caratteri da 128 a 255. È importante perché il pacchetto inputenc li rende attivi e questo impedirebbe di scriverli sul file delle risposte. Facendoli diventare di categoria 12, saranno scritti tali e quali, ma quando \inputanswers causa la lettura del file delle risposte avranno la categoria giusta.

Ciao
Enrico

Go to top