MODO "VERBATIM" IN TEX Per listare inalterato un file esterno vedi punto a) Per listare inalterato un brano inserito in un file TEX vedi punto b) a) ========================================================================== Il seguente insieme di macro permette di listare inalterato un file esterno richiamabile da un file TEX. Interpreta correttamente i TAB (a intervalli fissi di 8 caratteri), le linee vuote, i blanks, ANCHE SE ALL'INIZIO DELLA RIGA, e tutti i caratteri printabili (compresi quelli particolari del Tex). ------------------------------------------------------------------- \def\uncatcodespecials{\def\do##1{\catcode`##1=12 }\dospecials} \def\listing#1{\par\begingroup\setupverbatim\input#1 \endgroup} \def\setupverbatim{\tt \def\par{\leavevmode\egroup\box0\endgraf} \uncatcodespecials\obeylines\obeyspaces \catcode`\`=\active \catcode`\^^I=\active \everypar{\startbox}} {\obeyspaces\global\let =\ } {\catcode`\`=\active \gdef`{\relax\lq}} \newdimen\w \setbox0=\hbox{\tt\space} \w=8\wd0 \def\startbox{\setbox0=\hbox\bgroup} {\catcode`\^^I=\active \gdef^^I{\leavevmode\egroup \dimen0=\wd0 \divide\dimen0 by \w \multiply\dimen0 by \w \advance\dimen0 by \w \wd0=\dimen0 \box0 \startbox}} ------------------------------------------------------------------- USO : \listing{nome del file} ========================================================================== b) ========================================================================== Il seguente insieme di macro permette di listare inalterato un brano inserito in un file TEX. Interpreta correttamente i TAB, (a intervalli fissi di 8 caratteri), le linee vuote, i blanks, ANCHE SE ALL'INIZIO DELLA RIGA, e tutti i caratteri printabili (compreso quelli particolari del Tex). Unica precauzione: le parentesi graffe sono accettate a patto che siano bilanciate, cioe' che per ogni par. aperta esista anche una (sola e successiva) par. chiusa. ------------------------------------------------------------------- \def\uncatcodespecials{\def\do##1{\catcode`##1=12 }\dospecials} \def\sic{\begingroup\tt\uncatcodespecials \def\par{\egroup\box0\endgraf\leavevmode\startbox} \obeylines \obeyspaces \catcode`\`=\active \catcode`\^^I=\active \doverbatim} {\obeyspaces\global\let =\ } {\catcode`\`=\active \gdef`{\relax\lq}} \newdimen\w \setbox0=\hbox{\tt\space} \w=8\wd0 \newcount\balance {\catcode`<=1 \catcode`>=2 \catcode`\{=12 \catcode`\}=12 \gdef\doverbatim{<\balance=1\startbox\verbatimloop> \gdef\verbatimloop#1<\def\dopo<#1\verbatimloop>% \if#1{\advance\balance by1 % \else\if#1}\advance\balance by-1 % \ifnum\balance=0\let\dopo=\lafine\fi\fi\fi \dopo> \gdef\startbox<\setbox0=\hbox\bgroup> \gdef\lafine<\egroup\box0\endgroup> <\catcode`\^^I=\active \gdef^^I<\egroup \dimen0=\wd0 \divide\dimen0 by \w \multiply\dimen0 by \w \advance\dimen0 by \w \wd0=\dimen0 \box0 \startbox>>> ------------------------------------------------------------------- USO : \sic{.... brano inserito.....} ========================================================================== T. Ficarra