Come usare \ input all'interno di \ setlength?
Aug 30 2020
Sto provando questo:
\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}
Ma sto ottenendo:
! Missing number, treated as zero.
<to be read again>
\let
l.5 \setlength{\foo}{2in * \zzz}
Come risolvere questo problema?
Risposte
3 JosephWright Aug 30 2020 at 15:13
Il \inputcomando LaTeX non è espandibile: ciò è in parte dovuto al fatto che controlla in modo "sicuro" l'esistenza di un file, e in parte perché supporta sia la sintassi TeX primitive ( \input <file> ) che LaTeX ( \input{<file>}). Ciò significa che se vuoi lavorare per espansione, come fai qui, devi usare la primitiva
\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}
Dovrai assicurarti che il tuo file di input non \parcontenga un token: ho aggiunto un esempio utilizzando un carattere di commento.