![\setlength 内で \input を使用するにはどうすればよいでしょうか?](https://rvso.com/image/420026/%5Csetlength%20%E5%86%85%E3%81%A7%20%5Cinput%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%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
。コメント文字を使用した例を追加しました。