catchfile を pgffor の foreach で動作させる

catchfile を pgffor の foreach で動作させる

私の解答から抜粋した次の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}

それは生み出す

プレビュー

最初のリストの最後の要素に余分なスペースがあり、2 番目のリストの最後の要素が折りたたまれていることに注意してください。

各リストの最後の要素が異なる方法で扱われる理由が理解できません。

これを修正する方法をご存知ですか?

答え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}

ここに画像の説明を入力してください

関連情報