无法在 pgfplotstable 表头中排版 LaTeX 数学字符

无法在 pgfplotstable 表头中排版 LaTeX 数学字符

我正在使用 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}

相关内容