命令已定义 - 使用 mhchem 的 IOP 发布

命令已定义 - 使用 mhchem 的 IOP 发布

我正在使用iopart类进行 IOP 出版,我想使用该mhchem包来编写化学方程式。我遇到了与这里那里,老话题,没有答案。我在 Texmaker 中使用 pdflatex 编译了以下代码:

\documentclass[12pt]{iopart}
%Uncomment next line if AMS fonts required
%\usepackage{iopams} 
\usepackage[version=3]{mhchem}

\begin{document}
\title[mytitle]{mytitle}
\author{myauthor}

\begin{abstract}
A minimal non-working iopart + mhchem example
\end{abstract}

\ce{P ->[\sigma_{P}] T}

\end{document}

这会抛出错误

! LaTeX Error: Command \equation* already defined.
               Or name \end... illegal, see p.192 of the manual.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.2664 }

我添加了建议这里

\makeatletter
\@namedef{[email protected]}{}
\makeatother
\usepackage{amstext}

之前\usepackage[version=3]{mhchem}。我不知道这意味着什么。但它引发了很多错误:

! Undefined control sequence.
<argument> \rightarrowfill@ 
                            \displaystyle 
l.18 \ce{P ->[\sigma_{P}] T}

? 
! Missing $ inserted.
<inserted text> 
                $
l.18 \ce{P ->[\sigma_{P}] T}

? 
! Extra }, or forgotten $.
\@begin@tempboxa ...begingroup #2\color@endgroup }
                                                  \def \width {\wd \@tempbox...
l.18 \ce{P ->[\sigma_{P}] T}

? 
! Missing $ inserted.
<inserted text> 
                $
l.18 \ce{P ->[\sigma_{P}] T}

? 
! Missing } inserted.
<inserted text> 
                }
l.18 \ce{P ->[\sigma_{P}] T}

编辑:根据下面的评论我尝试了:

\documentclass[12pt]{iopart}
%Uncomment next line if AMS fonts required
%\usepackage{iopams} 

\makeatletter
\@namedef{[email protected]}{}
\makeatother
\usepackage{amstext}
\usepackage{chemformula}

\begin{document}
\title[mytitle]{mytitle}
\author{myauthor}

\begin{abstract}
A minimal working iopart + chemformula example
\end{abstract}

\ch{P ->[$\sigma$] T} \par

\end{document}

它确实完成了工作!

答案1

形成文件ioplatexguidelines.pdf

在此处输入图片描述

由于mhchem加载,更重要的是需要amsmath,您有两个选择:坚持使用iopart.cls而不是使用mhchem另一个提供类似功能的包,或者更改您的文档类并使用mhchem;正如指南所提到的,这不是问题,因为他们会接受使用任何其他文档类编写的文档。

答案2

下面两种方法对我很有效。它们真的有很大帮助。

(1)

\expandafter\let\csname equation*\endcsname\relax

\expandafter\let\csname endequation*\endcsname\relax

将这些放在 \usepackage{amsmath} 之前

(2)

或者,编辑 iopart.cls 并删除(或注释)这两行(我的副本中的第 788 行和第 789 行):

\@namedef{equation*}{\[}

\@namedef{endequation*}{\]}

最初是从

https://groups.google.com/g/comp.text.tex/c/mgzSLY8zCa8

答案3

我最近在 iopart 和 amsmath 之间遇到了同样的问题。我看到的警告是“命令 \equation* 已定义”。我通过注释掉以下两行来解决这个问题:

\@namedef{equation*}{\[}
\@namedef{endequation*}{\]}

在 iopart.cls 中(对我来说是第 788-789 行)。他们似乎想要

\begin{equation*}
F=ma
\end{equation*}

公正

\[F=ma\]

出于某种愚蠢的原因。我不认为注释掉这些行会破坏其他任何东西,但我不确定。

相关内容