Risolto!!
Il problema era che il loop leggeva una volta in più del necessario, ho risolto inserendo un if che controlla se ci sono righe vuote nel file.
Il codice, che adesso definisce un nuovo comando \Variabile leggendo dal file esterno è il seguente:
`\makeatletter
\def\Var@ParseLine#1=#2\@nil{%
\@namedef{#1}{#2}%
}
\newread\Var@InputStream
\edef\Restore@Endlinechar{\endlinechar=\the\endlinechar\relax}
\endlinechar\m@ne
\openin\Var@InputStream=Variables.tex
\count@=\z@
\loop\unless\ifeof\Var@InputStream
\read\Var@InputStream to \Var@Line
\if\Var@Line\par
\else
\expandafter\Var@ParseLine\Var@Line\@nil
\fi
\repeat
\closein\Var@InputStream
\Restore@Endlinechar
\makeatother`
Buon 2010 a tutti!!!
Auguri a te. Hai scoperto che ogni file che viene letto con \read ha una riga vuota implicita alla fine. Purtroppo il tuo trucco non funziona: infatti se per caso una riga è del tipo
`XXX=21`
il test \if\Var@Line\par risulterà vero. 🙁 Infatti \if espande ciò che segue; la macro \Var@Line, in quel caso, si espande a “XXX=21” e il test diventa
`\if XXX=21\par`
che è effettivamente vero, perché i primi due token non espandibili sono due X. Il test corretto è
`\ifx\Var@Line\@empty`
Ciao
Enrico