我正在使用 pgfplotstable 排版一个简单的表格,并尝试在标题中包含单位。我注意到某些数学宏(例如\circ
或\gamma
(2 个随机测试用例))无法排版。当这些包含在后续非标题行中时,不会出现任何问题!故障模式是Missing \endcsname inserted.
无论是否在标题中,在直表格环境中包含数学都没有问题。关于如何在 pgfplotstable 标题行中包含数学有什么想法吗?
MWE:(作品)
\documentclass{article}
\usepackage{pgfplotstable}
%set global options for pgfplotstables
\pgfplotstableset{
string type,col sep=&,row sep=\\,
every head row/.style={after row=\hline},
column type={c}
}
\begin{document}
\pgfplotstabletypeset{
header 1 & header 2 & header 3 \\
col1 & NECL (ppm-m-$^{\circ}$ C) & 10\\
col1 & $\frac{\gamma}{1-\gamma}$ & col3 \\
}
\end{document}
MWE:(失败)
\documentclass{article}
\usepackage{pgfplotstable}
%set global options for pgfplotstables
\pgfplotstableset{
string type,col sep=&,row sep=\\,
every head row/.style={after row=\hline},
column type={c}
}
\begin{document}
\pgfplotstabletypeset{
header 1 & header 2 $\gamma$ & header 3 \\
col1 & NECL (ppm-m-$^{\circ}$ C) & 10\\
col1 & $\frac{\gamma}{1-\gamma}$ & col3 \\
}
\end{document}
答案1
为了简单起见,并为了获得胜利,最常见的用例我将我的编辑复制在这里作为答案。
根据pgfplotstable 如何读取数据文件中的 LaTeX 代码?无法在标题中插入可扩展材料以供 pgfplotstable 格式化。因此,与 percusse 注释中一样,使用列名键来访问和格式化任何列标题以用于显示目的。
如果不需要访问列标题名称,只需使用 header=false,并以标题行样式输出空行。这会导致排版将顶行视为通用行,从而允许标题行中存在可扩展材料(即符号等)。(感谢这个答案提示)
MWE:(作品)
%set global options for pgfplotstables
\pgfplotstableset{
string type,header=false,col sep=&,row sep=\\,
every first row/.style={after row=\hline}, % move h rule to first row
every head row/.style={
output empty row}, % suppress printing head row
column type={p{.25\textwidth}}
}
\begin{document}
\pgfplotstabletypeset{
header 1 & header 2 $a^2\gamma$ & header 3 \\
col1 & NECL (ppm-m-$^{\circ}$ C) & 10\\
col1 & $\frac{\gamma}{1-\gamma}$ & col3 \\
}
答案2
我不擅长纯 TeX。(尤其是这些\expandafter
东西。)但这可能是一个开始。(回想一下语法\section[short]{long long title}
。)
\documentclass{article}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableset{string type,col sep=&,row sep=\\}
\makeatletter
\gdef\pgfplotstabletypeset@fancy@column@name{}
\def\pgfplotstableread@impl@collectcolnames@NEXT@help@@#1#2{
\g@addto@macro\pgfplotstabletypeset@fancy@column@name{
\pgfplotstableset{columns/#1/.style={column name=#2}}
}
}
\def\pgfplotstableread@impl@collectcolnames@NEXT@help@#1[]{
\expandafter\pgfplotstableread@impl@collectcolnames@NEXT@help@@\expandafter{\pgfplotstable@loc@TMPa}{#1}
}
\def\pgfplotstableread@impl@collectcolnames@NEXT@help#1[#2]{
\edef\pgfplotstable@loc@TMPb{#1}
\ifx\pgfplotstable@loc@TMPb\pgfutil@empty
\edef\pgfplotstable@loc@TMPa{#2}
\expandafter\pgfplotstableread@impl@collectcolnames@NEXT@help@
\fi
}
\long\def\pgfplotstableread@impl@collectcolnames@NEXT#1{%
\edef\pgfplotstable@loc@TMPa{#1}%
\expandafter\pgfplotstableread@impl@collectcolnames@NEXT@help\pgfplotstable@loc@TMPa[]
\ifx\pgfplotstable@loc@TMPa\pgfutil@empty
\edef\pgfplotstable@loc@TMPa{\thepgfplotstableread@curcol}%
\pgfplotswarning{empty column name}{\pgfplotstableread@filename}{\pgfplotstable@loc@TMPa'}\pgfeov%
\fi
\expandafter\pgfplotstableread@impl@collectcolnames@NEXT@\expandafter{\pgfplotstable@loc@TMPa}%
}
\let\pgfplotstabletypeset@opt@@old\pgfplotstabletypeset@opt@@
\def\pgfplotstabletypeset@opt@@{\pgfplotstabletypeset@fancy@column@name\pgfplotstabletypeset@opt@@old}
\pgfplotstableread{
[X]$\xi$ & [Y]$\eta$ & [Z]$\zeta$ \\
0 & 1 & 2\\
}\loadedtable
\pgfplotstabletypeset\loadedtable
\hrule
\pgfplotstabletypeset[columns={X,Y,X,Z,X,Y,X}]\loadedtable
\end{document}