编号 mhchem 反应并创建 \listofreactions

编号 mhchem 反应并创建 \listofreactions

有没有办法为用 mhchem 定义的反应创建一个环境,使其在编号反应方面与方程式的行为类似(包括 \nonumber 命令)?我可以获得这些反应的列表吗?

\documentclass{article}
\usepackage[version=3]{mhchem}

\newcounter{rxnum}

\newenvironment{reaction}{
\refstepcounter{rxnum}
\noindent
%???
}{
%???
\par\noindent
}

\begin{document}

\begin{reaction}
 \ce{X + Y -> XY}
\end{reaction}

\begin{reaction}
 \ce{XX + YY -> X2Y2} \\%<- newline just like in equation
 \ce{A + B -> C}
\end{reaction}  


\end{document}

这个问题分为两部分。第一部分是关于创建一个行为类似于方程的环境,但用于 mhchem 中定义的反应。我查看了 source2e 中方程的定义(source2e 中 l. 293 左右),但不太清楚如何将其转移到我的新环境中。

第二部分是关于如何创建包含反应编号、反应发生的页面以及仅打印在 \listofreactions 中的可选描述的反应列表。

例如:

在我写的代码中

\begin{reaction}
\ce{X + Y ->XY}\descriptionforlist{XY formation reaction}\\
\ce{A +B -> C}
\ce{G + H -> J}\nonumber
    \end{reaction}

然后在列表中它应该显示为

反应列表

R 1: XY formation reaction                6

R 2:                                      6

答案1

使用chemmacros包裹:

\documentclass{article}
\usepackage{chemmacros}
\chemsetup{
  modules = {reactions} ,
  formula = mhchem
}
\begin{document}

\listofreactions

\begin{reaction}[bla]
 $A$ ->[H2O] $B$
\end{reaction}

\begin{reaction}
 SO4^2- + Ba^2+ -> BaSO4 v
\end{reaction}

\end{document}

在此处输入图片描述

答案2

要开发环境,\begin{reaction}...\end{reaction}您可以使用以下代码:

\documentclass{article}
\usepackage{amsmath,mhchem}
\newenvironment{reaction}{\begin{equation}}{\end{equation}}
\newenvironment{reaction*}{\begin{equation*}}{\end{equation*}}
\begin{document}
\begin{reaction}
 \ce{$A$ ->[\ce{+H2O}] $B$}
\end{reaction}
\begin{reaction}
\ce{SO4^2- + Ba^2+ -> BaSO4 v}
 \end{reaction}
\end{document}

开发一个listofreactions使用该titletoc包。

答案3

这是我现在的解决方案,包括一个单独的反应计数器和一个新的反应列表。它尚未经过全面测试,但在我的简单测试文档中有效。

\documentclass{article}
\usepackage{amsmath,mhchem}
\usepackage{tocloft}
\newcommand{\reactionlistname}{List of reactions}
\newlistof{reactions}{rxs}{\reactionlistname}

\newcounter{reaction}
\newcounter{tmp}
\newenvironment{reaction}[1][\relax]{%
\setcounter{tmp}{\value{equation}}
\setcounter{equation}{\value{reaction}}
\renewcommand{\theequation}{\arabic{equation}}
\begin{equation}
\addcontentsline{rxs}{reactions}{\protect\numberline{\thereaction}#1}
}{%
\end{equation}
\setcounter{reaction}{\value{equation}}
\setcounter{equation}{\value{tmp}}
}


\begin{document}


\listofreactions

\begin{reaction}[bla]
 \ce{$A$ ->[\ce{+H2O}] $B$}
\end{reaction}

\begin{reaction}
\ce{SO4^2- + Ba^2+ -> BaSO4 v}
 \end{reaction}

\end{document}

在此处输入图片描述

答案4

正如@cgnieder 指出的那样,可以使用 chemmacros 包。

我的解决方案涉及更改参考括号并引入额外的字母来表示它们。

请注意,\usepackage{chemmacros}不要出现错误。

\usepackage[version=4]{mhchem}
\usepackage{chemfig}
\usepackage{chemmacros}
\usechemmodule{reactions}

\chemsetup[reactions]{
  before-tag = R ,
  tag-open = ( ,
  tag-close = )
}

\begin{document}

\listofreactions

\begin{reactions}
    CH4 + H2O <=> CO + 3 H2
\end{reactions}

\end{document}

如果有多个反应,可以通过添加 将它们与特定点对齐,&并引用每个方程,例如:

\begin{reactions}
    \label{her:Volmer}
    H3O+ + e- + $\ast$ &-> H$\ast$ + H2O \quad \text{(Volmer)} \\
    \label{her:Heyrovsky}
    H3O+ + H$\ast$ + e- &-> H2 + H2O \quad \text{(Heyrovsky)} \\
    \label{her:Tafel}
    2 H$\ast$ + e- &-> H2 \quad \text{(Tafel)}
\end{reactions}

输出

相关内容