将 emulateapj/aastex 与 siunitx 结合使用

将 emulateapj/aastex 与 siunitx 结合使用

我试图在 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}%

可能还存在一些其他问题,但到目前为止,这些变化对我来说是有效的。

相关内容