Comment utiliser \ input inside \ setlength?
Aug 30 2020
J'essaye ceci:
\documentclass{article}
\usepackage{calc}
\newlength{\foo}
\newcommand{\zzz}{\input{size.txt}}
\setlength{\foo}{2in * \zzz}
\usepackage[paperwidth=\foo,paperheight=\foo]{geometry}
\begin{document}
\end{document}
Mais je reçois:
! Missing number, treated as zero.
<to be read again>
\let
l.5 \setlength{\foo}{2in * \zzz}
Comment régler ceci?
Réponses
3 JosephWright Aug 30 2020 at 15:13
La \inputcommande LaTeX n'est pas extensible: ceci est en partie dû au fait qu'elle vérifie «en toute sécurité» l'existence d'un fichier, et en partie à la prise en charge des syntaxes TeX primitive ( \input <file> ) et LaTeX ( \input{<file>}). Cela signifie que si vous voulez travailler par expansion, comme vous le faites ici, vous devez utiliser la primitive
\begin{filecontents*}[overwrite]{size.txt}
5%
\end{filecontents*}
\documentclass{article}
\usepackage{calc}
\newlength{\foo}
\makeatletter
\let\primitiveinput\@@input
\makeatother
\newcommand{\zzz}{\primitiveinput size.txt }
\setlength{\foo}{2in * \zzz}
\usepackage[paperwidth=\foo,paperheight=\foo]{geometry}
\begin{document}
\end{document}
Vous devrez vous assurer que votre fichier d'entrée ne contient pas de \parjeton: j'ai ajouté un exemple en utilisant un caractère de commentaire.