\write 和 pgfplotstable:将 \pgfplotstableread 添加到 \loop 中会出错

\write 和 pgfplotstable:将 \pgfplotstableread 添加到 \loop 中会出错

我从@DavidCarlisle 那里得到了一个代码,它可以生成输出 txt 文件,我想将所有输出文件放在一个 pgfplotstable 中。
所以我尝试添加
\ifnum\the\filecount=1 \pgfplotstableread[col sep=comma]{data1.txt}{\main} \else {.........} \fi

但这只会产生一些奇怪的 Omega,并且\pgfplotstabletypeset[col sep=comma]{\main}不起作用。

我该怎么办?

在此处输入图片描述

\documentclass[a4paper]{article}
\usepackage{pgfplotstable}

\newcount\filecount
\newwrite\cisout
\begin{document}

{
\endlinechar=\newlinechar%
\filecount=1 %
\def\aaa{file number \the\filecount}%
\loop%
\immediate\openout\cisout=data\the\filecount.txt %
\immediate\write\cisout{%
111, 222,   \aaa 
}%
\immediate\closeout\cisout %
\advance\filecount by 1 %
\ifnum\filecount<5 %
\ifnum\the\filecount=1 \pgfplotstableread[col sep=comma]{data1.txt}{\main} \else\fi
\repeat %
}%

\section{pgfplotstable Test - bad}
%\pgfplotstabletypeset[col sep=comma]{\main}
\dots and some bad Omegas above\dots

\section{input Test - good}
\input{data1.txt}
\input{data3.txt}
\end{document}

答案1

\ifnum\filecount=1当计数器已经前进时您正在执行此操作,因此代码\pgfplotstableread永远不会执行。

此外,即使你设法执行了它,整体\loop也在一个组中,因此\main在组结束时就会被遗忘。

生产 Omega 是因为\fi没有遵循%

这是一个有效的代码,尽管不清楚你的目标是什么。

\documentclass[a4paper]{article}
\usepackage{pgfplotstable}

\newcount\filecount
\newwrite\cisout

\begin{document}

\filecount=1
\def\aaa{file number \the\filecount}%
\loop
\immediate\openout\cisout=data\the\filecount.txt
\immediate\write\cisout{%
111, 222,   \aaa
}
\immediate\closeout\cisout
\ifnum\the\filecount=1 \pgfplotstableread[col sep=comma]{data1.txt}{\main}\fi
\advance\filecount by 1
\ifnum\filecount<5
\repeat

\section{pgfplotstable Test - bad}

\pgfplotstabletypeset[col sep=comma]{\main}

\section{input Test - good}
\input{data1.txt}
\input{data3.txt}
\end{document}

在此处输入图片描述

答案2

归根结底,这是您想要实现的目标吗?

\documentclass[a4paper]{article}
\usepackage{pgfplotstable}

\newcount\filecount
\newwrite\cisout
\begin{document}

{
\filecount=0
\immediate\openout\cisout=data1.txt
\immediate\write\cisout{a, b, c}% write header
\loop\ifnum\filecount<5
  \advance\filecount by 1
  \immediate\write\cisout{111, 222, \the\filecount }%
\repeat% no \fi needed
\immediate\closeout\cisout

\pgfplotstableread[col sep=comma]{data1.txt}{\main}%

\pgfplotstabletypeset\main
\end{document}

演示


此版本使用\foreach

\documentclass[a4paper]{article}
\usepackage{pgfplotstable}

\newwrite\cisout

\begin{document}
\immediate\openout\cisout=data1.txt
\immediate\write\cisout{a, b, c}% write header
\foreach \i in {1,..., 5}%
  {\immediate\write\cisout{111, 222, \i }}%
\immediate\closeout\cisout

\pgfplotstableread[col sep=comma]{data1.txt}{\main}%

\pgfplotstabletypeset\main
\end{document}

相关内容