¿Cómo utilizar \input dentro de \setlength?

¿Cómo utilizar \input dentro de \setlength?

Estoy intentando esto:

\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}

Pero estoy obteniendo:

! Missing number, treated as zero.
<to be read again>
                   \let
l.5 \setlength{\foo}{2in * \zzz}

¿Cómo arreglar esto?

Respuesta1

El comando LaTeX \inputno es expandible: esto se debe en parte al hecho de que realiza una verificación "segura" de la existencia de un archivo, y en parte a que admite las sintaxis TeX primitiva ( \input <file>) y LaTeX ( \input{<file>}). Esto significa que si quieres trabajar por expansión, como lo haces aquí, necesitas usar 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}

Deberá asegurarse de que su archivo de entrada no tenga un \partoken: agregué un ejemplo usando un carácter de comentario.

información relacionada