Jak używać \ input inside \ setlength?
Aug 30 2020
Próbuję tego:
\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}
Ale dostaję:
! Missing number, treated as zero.
<to be read again>
\let
l.5 \setlength{\foo}{2in * \zzz}
Jak to naprawić?
Odpowiedzi
3 JosephWright Aug 30 2020 at 15:13
Polecenie LaTeX \inputnie jest rozwijalne: jest to częściowo spowodowane faktem, że wykonuje „bezpieczne” sprawdzenie istnienia pliku, a częściowo ze względu na obsługę zarówno składni prymitywnej ( \input <file> ), jak i LaTeX ( \input{<file>}) TeX- a . Oznacza to, że jeśli chcesz pracować przez ekspansję, tak jak tutaj, musisz użyć prymitywu
\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}
Musisz się upewnić, że twój plik wejściowy nie zawiera \partokena: dodałem przykład wykorzystujący znak komentarza.