foreach 循环的动态上限

foreach 循环的动态上限

我想从文件中读取 foreach 循环的上限。我尝试了以下方法,但结果却出现了各种错误。

\documentclass{article}
\usepackage{tikz}

\begin{filecontents*}{foo}
42
\end{filecontents*}

\begin{document}
\foreach\x in {1,...,\input{foo}} {\x,}
\end{document}

我也尝试过将 保存\input{foo}到命令中,然后将该命令名称作为 foreach 的上限。但这似乎没有帮助。

答案1

您可以使用catchfile

\documentclass{article}
\usepackage{tikz,catchfile}

\begin{filecontents*}{\jobname.dat}
42
\end{filecontents*}

\begin{document}

\CatchFileDef\upperlimit{\jobname.dat}{}
\foreach\x in {1,...,\upperlimit} {\x, }
\end{document}

(我对文件使用了不同的名称,以免破坏我的任何文件。)

在此处输入图片描述

答案2

如果您愿意将 foo 的内容更改为 latex 代码:

\documentclass{article}
\usepackage{tikz}

\begin{filecontents*}{foo}
\def\limit{42}
\end{filecontents*}


\begin{document}
\input{foo}
\foreach\x in {1,...,\limit} {\x,}
\end{document}

如果你只想要“42”,你可以使用:

\documentclass{article}
\usepackage{tikz}

\begin{filecontents*}{foo}
42
\end{filecontents*}

\begin{document}
\newread\io%
\openin\io=foo%
\read\io to\limit%
\closein\io%

\foreach\x in {1,...,\limit} {\x,}
\end{document}

相关内容