pgfplotstableread 无法读取输入文件

pgfplotstableread 无法读取输入文件

我正在尝试在一个中等大小的文档中排版两个不同的表格。表格的数据以逗号分隔的值形式写入两个不同的 .csv 文件中。我使用 将文档的不同部分包含到一个主文件中\include{section-n}。在每个要包含的文件中,我使用 读取表格数据,\pgfplotstableread{table-n}{\data-n}然后将其排版为MWE

我可以毫无问题地排版第一个表格,但是一旦尝试读取第二个表格,它就会失败,进入无限循环。一旦我中断该过程,它就会吐出以下错误:

错误: \pgfplotstableread@checkspecial@line@@ 的使用与其定义不符。

--- TeX 说 --- \pgfplotstable@LINE ->$S igma$,15,,,,1057 l.315 \pgfplotstableread{predevCN2.csv}{\CNPre2} ^^M

--- 帮助 --- 这可能是一个绘图命令,而您使用了错误的语法来指定参数。如果 \@array 与其定义不匹配,则数组或表格环境的参数中的 @ 表达式存在问题---也许是未受 \protect 保护的脆弱命令。

现在,发生了什么事?

这是我尽力尝试的,MWE它捕捉到了我的意图,但它失败的方式与我的主要文件完全不同。我也不确定它失败的原因,但它似乎是相关的。

\documentclass{article}

\usepackage{lipsum}
\usepackage{filecontents}
\usepackage{booktabs}
\usepackage{array}
 \usepackage{pgfplots}
 \pgfplotsset{compat=1.7}
\usepackage{pgfplotstable}
\pgfplotstableset{
  col sep=comma,
  every head row/.style={%
    before row=\toprule,%
    after row=\midrule},%
  every last row/.style={%
    after row=\bottomrule}%
}

\begin{filecontents}{firstTable.csv}
A,B,C,D,E
1,2,3,4,5
$\Sigma$i,ii,iii,iv,v
\end{filecontents}

\begin{filecontents}{secondTable.csv}
a,b,c,d,e
1,2,3,4,5
I,II,III,IV,V
\end{filecontents}

\begin{filecontents}{section1.tex}
  Here's a nice table:

  \pgfplotstableread{firstTable.csv}{\loadeddata1}

  \begin{table}
    \centering
    \pgfplotstabletypeset[%
       columns={A,B,C,D,E}%
       ]{\loadeddata1}
    \caption{Simple caption for a simpler table.}
    \label{tab:table1}
  \end{table}
\end{filecontents}


\begin{document}
\section{Here goes section 1}
\lipsum[1]
\include{section1}


\section{Section 2}
And here we put another table.
 \pgfplotstableread{secondTable.csv}{\loadeddata2}

 \begin{table}
   \centering
   \pgfplotstabletypeset[%
     columns={a,b,c,d,e}%
     ]{\loadeddata2}
     \caption{Fancy caption for a simple table.}
     \label{tab:table2}
 \end{table}



\end{document}


%%%% Local Variables: 
%%%% mode: latex
%%%% TeX-engine: xetex
%%%% End:

答案1

您的代码有三个问题:

  1. 您正在使用带数字的宏名称来存储表(\loadeddata1)。那不起作用,您必须使用字母(例如\loadeddataone)。

  2. 您的表格包含字母,但\pgfplotstabletypeset默认情况下假定表格包含数字。要排版包含文本的表格,请使用键string type

  3. 第一个表中有一个宏。需要将其包装在以下位置以保护它免受解析器攻击{...}

这是更正后的代码:

\documentclass{article}

\usepackage{lipsum}
\usepackage{filecontents}
\usepackage{booktabs}
\usepackage{array}
 \usepackage{pgfplots}
 \pgfplotsset{compat=1.7}
\usepackage{pgfplotstable}
\pgfplotstableset{
  col sep=comma,
  every head row/.style={%
    before row=\toprule,%
    after row=\midrule},%
  every last row/.style={%
    after row=\bottomrule}%
}

\begin{filecontents}{firstTable.csv}
A,B,C,D,E
1,2,3,4,5
{$\Sigma$i},ii,iii,iv,v
\end{filecontents}

\begin{filecontents}{secondTable.csv}
a,b,c,d,e
1,2,3,4,5
I,II,III,IV,V
\end{filecontents}

\begin{filecontents}{section1.tex}
  Here's a nice table:

  \pgfplotstableread{firstTable.csv}{\loadeddataone}

  \begin{table}
    \centering
    \pgfplotstabletypeset[%
       columns={A,B,C,D,E},
       string type
       ]{\loadeddataone}
    \caption{Simple caption for a simpler table.}
    \label{tab:table1}
  \end{table}
\end{filecontents}


\begin{document}
\section{Here goes section 1}
\lipsum[1]
\include{section1}


\section{Section 2}
And here we put another table.
 \pgfplotstableread{secondTable.csv}{\loadeddatatwo}

 \begin{table}
   \centering
   \pgfplotstabletypeset[%
     columns={a,b,c,d,e},
     string type
     ]{\loadeddatatwo}
     \caption{Fancy caption for a simple table.}
     \label{tab:table2}
 \end{table}



\end{document}

相关内容