我正在使用 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)...
我尝试过但没有效果的方法:
- 引用 ("\hbar")
- 确保数学(\ensuremath{\hbar})
- 使用制表符代替逗号作为分隔符。
- 将 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
“等”更具描述性的内容。)