如何在 \setlength 中使用 \input?

如何在 \setlength 中使用 \input?

我正在尝试这个:

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

但我得到了:

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

如何解决这个问题?

答案1

LaTeX\input命令不可扩展:部分原因是它确实“安全”地检查文件是否存在,部分原因是它同时支持 TeX 原语 ( \input <file>) 和 LaTeX ( \input{<file>}) 语法。这意味着,如果您想通过扩展工作(如您在此处所做的那样),则需要使用原语

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

您需要确保您的输入文件中没有标记\par:我添加了一个使用注释字符的示例。

相关内容