我试图在 emulateapj 文档中使用 siunitx,但是它报告命令冲突:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! LaTeX error: "xparse/command-already-defined"
!
! Command '\tablenum' already defined!
!
! See the LaTeX3 documentation for further information.
!
! For immediate help type H <return>.
!...............................................
通过pdflatex生成以下文档:
\documentclass[apj]{emulateapj}
%\documentclass{aastex}
%\let\tablenum\relax
\usepackage{siunitx}
\begin{document}
\title{emulateapj with siunitx}
\author{Jerry Ma}
\begin{deluxetable}{rr}
\tabletypesize{\scriptsize}
\tablewidth{\the\columnwidth}
\tablecaption{\label{tab:test}
A dummy table}
\tablehead{\colhead{col1} &
\colhead{col2} \\
\colhead{\left(\si{\gram}\right)} &
\colhead{\left(\si{\milli\meter}\right)}
}
\startdata
80.76 & 50.4 \\
19.28 & 33.4 \\
\enddata
\tablecomments{siunitx doesn't work}
\end{deluxetable}
\end{document}
我天真地在加载 siunitx 之前输入了以下内容:
\let\tablenum\relax
解决了冲突。这次编译通过了(意味着我可以看到输出的 pdf 文件,其中包含预期的表格),但出现了如下错误:
! Package array Error: Illegal pream-token (\lt@expand@linewidth@): `c' used.
See the array package documentation for explanation.
Type H <return> for immediate help.
...
l.13 \begin{deluxetable}{rr}
?
! Missing $ inserted.
<inserted text>
$
l.22 }
?
所以,问题是,我怎样才能让 emulateapj 与 siunitx 一起工作?提前谢谢您!
答案1
我在使用 aastex documentclass 时遇到了同样的问题。我可以使用保存符号打包作为解决方法:
\usepackage{savesym}
\savesymbol{tablenum}
\usepackage{siunitx}
\restoresymbol{SIX}{tablenum}
savesym 包用于“重新定义名称冲突的符号”。在这种情况下,冲突与符号有关tablenum
。
请注意,这仅解决了 siunitx 尝试定义已存在的符号的问题。Joseph Wright 指出了另一个问题:deluxetable 环境与 array 包不兼容。只有在实际使用 deluxetable 环境时,这才会成为问题。
为了使用豪华环境,我需要对环境进行如下修改:
% redefine deluxetable for compatibility with the array package.
\let\oldenddeluxetable\enddeluxetable
\let\olddeluxetable\deluxetable
\makeatletter
\renewenvironment{deluxetable}[1]{
\olddeluxetable{[#1]}
\def\pt@format{#1}%
}{\oldenddeluxetable}
\makeatother
这可以在 之后立即完成。重新定义从 aastex.cls\restoresymbol{SIX}{tablenum}
更改为。\def\pt@format{\string#1}%
\def\pt@format{#1}%
可能还存在一些其他问题,但到目前为止,这些变化对我来说是有效的。