![Как использовать \input внутри \setlength?](https://rvso.com/image/420026/%D0%9A%D0%B0%D0%BA%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%5Cinput%20%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B8%20%5Csetlength%3F.png)
Я пробую это:
\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
в вашем входном файле нет токена: я добавил пример с использованием символа комментария.