Datatool 无法在 csv 文件的表格标题中使用数学宏

Datatool 无法在 csv 文件的表格标题中使用数学宏

我正在使用 CSV 文件和包制作 LaTeX 表datatools

这是一个最小的工作示例:

\documentclass{minimal}
\usepackage{datatool}
\usepackage{filecontents}

\begin{filecontents*}{data.csv}
,$x$,$p_x$,
$x$,$0$,$i \hbar$
\end{filecontents*}

\begin{document}

\DTLloaddb{mytable}{data.csv}
\DTLdisplaydb{mytable}

\end{document}

这将顺利编译。但是,如果我将第一行(将成为标题)更改为包含宏(例如,$x$,$\hbar$,),我会在该行上收到一大堆错误\DTLloaddb{mytable}{data.csv}

! Missing \endcsname inserted.
<to be read again>
\mathchar
l.12 \DTLloaddb{mytable}{data.csv}
The control sequence marked <to be read again> should
not appear between \csname and \endcsname.
....(and so forth)...

我尝试过但没有效果的方法:

  1. 引用 ("\hbar")
  2. 确保数学(\ensuremath{\hbar})
  3. 使用制表符代替逗号作为分隔符。
  4. 将 csv 文件展开为等效datatool命令。

这些是等效的命令:

\DTLnewdb{mydata}
\DTLnewrow{mydata}%
\DTLnewdbentry{mydata}{}{$x$}%
\DTLnewdbentry{mydata}{$x$}{$0$}%
\DTLnewdbentry{mydata}{$p_x$}{$i \hbar$}%
\DTLdisplaydb{mydata}

它们给出与 csv 文件相同的错误。

但是,手动指定标题可以正常工作:

\documentclass{minimal}
\usepackage{datatool}
\usepackage{filecontents}

\begin{filecontents*}{data.csv}
$x$,$0$,$i \hbar$
\end{filecontents*}

\begin{document}

\DTLloaddb[noheader,headers={,$x$,$\hbar$}]{mytable}{data.csv}

\DTLdisplaydb{mytable}

\end{document}

但是,如果可能的话,我想避免手动指定标题。

答案1

问题在于您使用了一些不可扩展的东西作为标识标签。如果您尝试执行类似操作,也会出现同样的问题\label{\hbar}。如果标题包含命令或特殊字符,则需要明确将键设置为简单标签。例如:

\documentclass{article}
\usepackage{datatool}
\usepackage{filecontents}

\begin{filecontents*}{data.csv}
$x$,$0$,$i \hbar$
,$x$,$p_x$
\end{filecontents*}

\begin{document}

\DTLloaddb[keys={column1,column2,column3}]{mytable}{data.csv}
\DTLdisplaydb{mytable}

\end{document}

(您可能需要比column1“等”更具描述性的内容。)

相关内容