有没有办法为用 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}