考虑以下 MWE,摘自我的解决方案这个问题:
\begin{filecontents*}{demolist1.dat}
1,2,3
\end{filecontents*}
\begin{filecontents*}{demolist2.dat}
{1,0,2},{0,3},{1,1}
\end{filecontents*}
\documentclass{article}
\usepackage{catchfile}
\usepackage{pgffor}
\CatchFileDef{\mylist}{demolist1.dat}{}
\CatchFileDef{\mynestedlist}{demolist2.dat}{}
\begin{document}
\foreach \x in \mylist {
``\x'' \quad
}
\hrulefill
\foreach \x in \mynestedlist {
\foreach \y in \x {
``\y'' \quad
}
\par
}
\end{document}
它产生
注意第一个列表的最后一个元素中的额外空间以及第二个列表的最后一个元素的折叠。
我不明白为什么每个列表的最后一个元素被区别对待。
有什么办法可以修复这个问题吗?
答案1
问题在于输入文件末尾自动隐含的结束行。
我删除了所有不必要的空格以使输出更清晰。
\begin{filecontents*}{\jobname1.dat}
1,2,3
\end{filecontents*}
\begin{filecontents*}{\jobname2.dat}
{1,0,2},{0,3},{1,1}
\end{filecontents*}
\documentclass{article}
\usepackage{catchfile}
\usepackage{pgffor}
\CatchFileDef{\mylist}{\jobname1.dat}{\endlinechar=-1 }
\CatchFileDef{\mynestedlist}{\jobname2.dat}{\endlinechar=-1 }
\begin{document}
\foreach \x in \mylist {``\x''\quad}
\hrulefill
\foreach \x in \mynestedlist {\foreach \y in \x {``\y''\quad}\par}
\end{document}