我正在尝试在一个中等大小的文档中排版两个不同的表格。表格的数据以逗号分隔的值形式写入两个不同的 .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
您的代码有三个问题:
您正在使用带数字的宏名称来存储表(
\loadeddata1
)。那不起作用,您必须使用字母(例如\loadeddataone
)。您的表格包含字母,但
\pgfplotstabletypeset
默认情况下假定表格包含数字。要排版包含文本的表格,请使用键string type
。第一个表中有一个宏。需要将其包装在以下位置以保护它免受解析器攻击
{...}
:
这是更正后的代码:
\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}