这段代码可以用 MiKTeX 2.9.6300 完美编译:
\documentclass{article}
\usepackage{pgffor}
\begin{document}
\input{forEachInput.tex}
{
test \fruit
}
\end{document}
文件 forEachInput.tex 只包含一行
\foreach \fruit in {apple,cherry,banana}
末尾没有空格。
现在,如果我尝试使用 MiKTeX 23.4 编译同一个文件,我会收到一个错误:段落在 \pgffor@next 完成之前结束。
另一方面,如果我在主文件中直接输入 forEachInput.tex 的内容(不再使用输入),MiKTeX 2.9.6300 和 MiKTeX 23.4 都可以完美运行。
似乎在 2.9.6300 和 23.4 之间有什么东西改变了它的行为?在这种情况下,我搞不清楚是 \input 还是 pgffor 包的问题,也不知道如何让我的代码再次工作……
答案1
这仅适用于(内部)低级宏\@input
:
\begin{filecontents*}{forEachInput.tex}
\foreach \fruit in {apple,cherry,banana}
\end{filecontents*}
\documentclass{article}
\usepackage{pgffor}
\begin{document}
\csname @input\endcsname{forEachInput.tex}
{
test \fruit
}
\end{document}
使用用户界面命令等\input
,\InputIfFileExists
在读取文件之前和之后都会执行代码。ltfilehook-doc.pdf
有关信息,请参阅。
答案2
您可以使用该catchfile
包在宏中加载文件的内容,并在需要时重复使用它。
代码
\begin{filecontents*}{\jobname-data.tex}
\foreach \fruit in {apple, cherry, banana}
\end{filecontents*}
\documentclass{article}
\usepackage{pgffor, catchfile}
\newcommand*\Input[2][\foreachFile]{\CatchFileDef{#1}{#2}{}#1}
\begin{document}
\Input{\jobname-data.tex}{test: \fruit \par}
\foreachFile{again: \fruit \par}
\end{document}