化学方程式的命令和计数器

化学方程式的命令和计数器

我想定义一个化学方程式命令,使用化学工程包。目标是获得:

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}

在此处输入图片描述

相关内容