egreg9″ post=64468
…
ho inserito il seguente controllo sul motore in uso:`
\expandafter\ifx\csname XeTeXrevision\endcsname\relax%
\let\@@endinput\endinput%
\errmessage{Ahi ahi, nothing to do.}\fi%
\csname @@endinput\endcsname%
…
`
Dove cavolo sbaglio?Se prima non dichiari “\catcode`@=11”, stai semplicemende dicendo “\let\@=@”, che non è molto utile …
\catode’@ l’ho settato prima di quel chunk di codice, lo davo per scontato.
egreg9″ post=64468
Il metodo corretto è
`\expandafter\ifx\csname XeTeXrevision\endcsname\relax
\errmessage{Ahi ahi, nothing to do.}%
\expandafter\endinput\fi`
Quello è esattamente il codice che avevo scritto prima di quello copiato nel primo post, con il \fi sullo steso rigo. Ma siccome dava problemi (lo stesso problema, il motore non ferma la lettura, arriva all’istruzione successiva e restituisce un errore) avevo pensato di evitare l’expandafter con il meccanismo del \let … e \csname.
Per maggiore chiarezza riporto un pezzo un pò più ampio del codice e il messaggio di errore che restituisce:
`
\chardef\atcatcode=\the\catcode`@%
\catcode`@=11\relax%
% …
% a me i messaggi servono sempre su una nuova riga
\def\@errmessage#1{\immediate\write16{!! ERR !! >>>\space#1}}
% …
\expandafter\ifx\csname XeTeXrevision\endcsname\relax%
\@errmessage{Why are you here again?}%
\let\@@endinput\endinput\fi
\csname @@endinput\endcsname%
%
\XeTeXinputencoding bytes%
% …
`
`
This is pdfTeX, Version 3.1415926-2.3-1.40.12 (TeX Live 2011)
restricted \write18 enabled.
entering extended mode
(./09semantics.tex (./modernb.tex
!! ERR !! >>> Why are you here again?
) (./lipsum.tex
! Undefined control sequence.
l.2 \XeTeXinputencoding
bytes
?
Processo interrotto dall'utente
`
Il lipsum.tex presente nel messaggio di errore è una mia versione del pacchetto lipsum, lo uso da molto tempo e sono sicuro che lì dentro errori non ce ne sono.
Grazie per ogni aiuto, ciao.