我想定义一个化学方程式命令,使用化学工程包。目标是获得:
A + B = C (R1)
C + D = E (R2)
按照 mhchem 手册的说法,这应该是这样的:
\newcommand\reaction[1]{\begin{equation}\ce{#1}\end{equation}}
\newcounter{reaction}
\renewcommand{\thereaction}{R\,\arabic{reaction}}
这与这里给出的解决方案类似 用独特的计数器创建新类型的对齐环境
命令有效(\reaction{A + B -> C}
),但计数器无效。看起来它一直在使用环境计数器equation
。我哪里做错了?
答案1
我认为您的问题分为两部分。首先是计数器,可通过在序言中添加以下内容来解决:
\newcounter{reactionCount}
接下来是界定反应的命令。
\newcommand{\reaction}[1]{
\refstepcounter{reactionCount} % Adds 1 to the counter
\[ \ce{#1} \tag{R\thereactionCount} \] % Using \[\] for simplicity.
}
以下是 MWE:
\documentclass[preview, border=.2cm]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[version=4]{mhchem}
\newcounter{reactionCount} %Setting up the counter
\newcommand{\reaction}[1]{
\refstepcounter{reactionCount} % Adds 1 to the counter
\[ \ce{#1} \tag{R\thereactionCount} \] % Using \[\] for simplicity.
}
\begin{document}
\reaction{A + B = C}
\reaction{C + D = E}
\end{document}
这是一个基于您展示的代码的快速解决方案。这个论坛里有更聪明的人可以编写更好的解决方案,甚至具有更多功能。如果这不是您想要的,请务必在您的问题中添加更多详细信息。
答案2
摘录自mhchem 手册,来自您在问题中引用的后续段落。
到目前为止一切顺利。所有反应都将与所有方程式完全一样标记。有几个人要求方程式和反应使用不同的数字集。可以使用以下代码:
\makeatletter
\newcounter{reaction}
%%% >> for article <<
%\renewcommand\thereaction{C\,\arabic{reaction}}
%%% << for article <<
%%% >> for report and book >>
\renewcommand\thereaction{C\,\thechapter.\arabic{reaction}}
\@addtoreset{reaction}{chapter}
%%% << for report and book <<
\newcommand\reactiontag%
{\refstepcounter{reaction}\tag{\thereaction}}
\newcommand\reaction@[2][]%
{\begin{equation}\ce{#2}%
\ifx\@empty#1\@empty\else\label{#1}\fi%
\reactiontag\end{equation}}
\newcommand\reaction@nonumber[1]%
{\begin{equation*}\ce{#1}\end{equation*}}
\newcommand\reaction%
{\@ifstar{\reaction@nonumber}{\reaction@}}
\makeatother
这样,所有反应都将独立于方程式进行标记。
\begin{equation}a+b\end{equation}
\reaction{CO2 + C}
\reaction*{CO2 + C}
\reaction[react:co]{CO2 + C}
\begin{equation}a+b\end{equation}
答案3
您可以equation
用不同的计数器来替换反应。
\documentclass{article}
\usepackage{amsmath}
\usepackage[version=4]{mhchem}
\makeatletter
\newcounter{reaction}
%\counterwithin*{reaction}{section}% adjust to suit
\renewcommand{\thereaction}{R\arabic{reaction}}
%\renewcommand{\thereaction}{R\thesection.\arabic{reaction}}
\newenvironment{reaction}
{%
\let\c@equation\c@reaction
\let\theequation\thereaction
\begin{equation}%
}
{\end{equation}}
\begin{document}
\begin{equation}
a+b=c
\end{equation}
\begin{reaction}
\ce{A + B -> C}
\end{reaction}
\begin{equation}
c+d=e
\end{equation}
\begin{reaction}
\ce{C + D -> E}
\end{reaction}
\end{document}
按部分编号也相同。
\documentclass{article}
\usepackage{amsmath}
\usepackage[version=4]{mhchem}
\makeatletter
\newcounter{reaction}
\counterwithin*{reaction}{section}% adjust to suit
%\renewcommand{\thereaction}{R\arabic{reaction}}
\renewcommand{\thereaction}{R\thesection.\arabic{reaction}}
\newenvironment{reaction}
{%
\let\c@equation\c@reaction
\let\theequation\thereaction
\begin{equation}%
}
{\end{equation}}
\begin{document}
\section{First}
\begin{equation}
a+b=c
\end{equation}
\begin{reaction}
\ce{A + B -> C}
\end{reaction}
\section{Second}
\begin{equation}
c+d=e
\end{equation}
\begin{reaction}
\ce{C + D -> E}
\end{reaction}
\end{document}