如何写出带有分支的化学式以及每个分支的标签

如何写出带有分支的化学式以及每个分支的标签

我想表达一种化学反应,它可以产生多种产物(有多个分支)。这通常使用分叉箭头来表示,如下面的示例方程 (1) 所示。我编写了一个 hacky 解决方案来使用 tikz 实现此目的:

\documentclass{report}
\usepackage{amsmath}
\usepackage{txfonts}
\usepackage{hyperref}
\usepackage{chemfig}
\usetikzlibrary{positioning,calc}
\begin{document} 
\begin{subequations}
\label{eq1}
\noindent
\begin{tikzpicture}[node distance=0cm and 1.2cm]
\node (A) 
    {$\text{NH}^+ + \text{H}_2$};
\node[above right=of A] (B) 
    {$\text{NH}_2^+ + \text{H} \qquad \Delta{H}^0 = -1.9~ \text{eV}$\qquad\hypertarget{eq1a}{(\text{1a})}
    };
\node[below right=of A] (C)    
    {$\text{H}_3^+ + \text{N} ~~\qquad \Delta{H}^0 = -0.8~ \text{eV}$\qquad\hypertarget{eq1b}{(\text{1b})}};
    \draw[-stealth] (A) -- ( $ (A.0)!0.3!(B.west|-A.0) $ ) |- (B.west) node[auto,pos=0.7] {${\scriptstyle k^\text{a}_{\text{NH}^+}}$};
    \draw[-stealth] (A) -- ( $ (A.0)!0.3!(C.west|-A.0) $ ) |- (C.west) node[auto,pos=0.7] {${\scriptstyle k^\text{b}_{\text{NH}^+}}$};
\end{tikzpicture}
\end{subequations}
where equation \eqref{eq1} has branches (\hyperlink{eq1a}{1a}) and (\hyperlink{eq1b}{1b}).

\begin{subequations}
\label{eq2}
\begin{align}
\label{eq2a}
    \text{NH}^+ + \text{H}_2& \xrightarrow{k^\text{a}_{\text{NH}^+}} \text{NH}_2^+ + \text{H} &\Delta{H}^0 &= -1.9~ \text{eV} \\
\label{eq2b}
       & \xrightarrow{k^\text{b}_{\text{NH}^+}} \text{H}_3^+ + \text{N}  &\Delta{H}^0 &= -0.8~ \text{eV} 
\end{align}
\end{subequations}
where equation \eqref{eq2} has branches \eqref{eq2a} and \eqref{eq2b}.
\end{document}

在此处输入图片描述

但它存在一些问题:

我不知道如何标记分支以便引用它们eqref(如示例中的公式 (2))。我正在手动对标签进行编号,但这在实践中是不可行的。

我不知道如何使分支标签像公式 (2) 中那样右对齐。

有人知道更好的解决方案吗?我想这肯定是一个常见问题。

答案1

这是使用的建议empheq。 (我也在加载,siunitx但请保持距离。)

\documentclass{report}
\usepackage{amsmath}
\usepackage{empheq}
\usepackage{txfonts}
\usepackage{hyperref}
\usepackage{chemfig}
\usepackage{siunitx}
\usetikzlibrary{positioning,calc}
\begin{document} 
\begin{subequations}\label{eq1}
\begin{empheq}[left={\begin{tikzpicture}[baseline=(A)]
\node (A) 
    {$\text{NH}^+ + \text{H}_2$};
    \draw[-stealth] (A.east) -- ++(0.3,0) |- ++(2,0.3) node[auto,pos=0.7] {${\scriptstyle k^\text{a}_{\text{NH}^+}}$};
    \draw[-stealth] (A.east) -- ++(0.3,0) |- ++(2,-0.3) node[auto,pos=0.7] {${\scriptstyle k^\text{b}_{\text{NH}^+}}$};
\end{tikzpicture}}]{align}
    ~\Delta{H}^0 &= -1.9~\si{\eV}\label{eq1a}\\
    ~\Delta{H}^0 &= -0.8~\si{\eV}\label{eq1b}
\end{empheq}
\end{subequations}
where equation \eqref{eq1} has branches \eqref{eq1a} and \eqref{eq1b}.

\begin{subequations}
\label{eq2}
\begin{align}
\label{eq2a}
    \text{NH}^+ + \text{H}_2& \xrightarrow{k^\text{a}_{\text{NH}^+}} \text{NH}_2^+ + \text{H} &\Delta{H}^0 &= -1.9~\si{\eV} \\
\label{eq2b}
       & \xrightarrow{k^\text{b}_{\text{NH}^+}} \text{H}_3^+ + \text{N}  &\Delta{H}^0 &= -0.8~\si{\eV} 
\end{align}
\end{subequations}
where equation \eqref{eq2} has branches \eqref{eq2a} and \eqref{eq2b}.
\end{document}

在此处输入图片描述

另一个建议是,不添加任何内容,empheq但添加一个简单的覆盖层tikzpicture,这样你就可以保留大部分原始的 TiZ 代码。

\documentclass{report}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{txfonts}
\usepackage{hyperref}
\usepackage{chemfig}
\usepackage{siunitx}
\usetikzlibrary{positioning,calc}
\newcommand{\tikznode}[2]{\relax
\ifmmode%
  \tikz[remember picture,baseline=(#1.base),inner sep=0pt] \node (#1) {$#2$};
\else
  \tikz[remember picture,baseline=(#1.base),inner sep=0pt] \node (#1) {#2};%
\fi}
\begin{document} 
\begin{subequations}\label{eq1}
\begin{align}
    \hspace*{5cm}\tikznode{DH1}{\Delta{H}^0} &= -1.9~\si{\eV}\label{eq1a}\\
    \tikznode{DH2}{\Delta{H}^0} &= -0.8~\si{\eV}\label{eq1b}
\end{align}
\end{subequations}
where equation \eqref{eq1} has branches \eqref{eq1a} and \eqref{eq1b}.

\begin{tikzpicture}[overlay,remember picture]
\node (A) at ($(DH1.west)!0.5!(DH2.west)+(-4,0)$) {$\text{NH}^+ + \text{H}_2$};
\draw[-stealth] (A.east) -- ++(0.3,0) |- ([xshift=-1mm]DH1.west) node[auto,pos=0.7] {${\scriptstyle k^\text{a}_{\text{NH}^+}}$};
\draw[-stealth] (A.east) -- ++(0.3,0) |- ([xshift=-1mm]DH2.west) node[auto,pos=0.7] {${\scriptstyle k^\text{b}_{\text{NH}^+}}$};
\end{tikzpicture}


\begin{subequations}
\label{eq2}
\begin{align}
\label{eq2a}
    \text{NH}^+ + \text{H}_2& \xrightarrow{k^\text{a}_{\text{NH}^+}} \text{NH}_2^+ + \text{H} &\Delta{H}^0 &= -1.9~\si{\eV} \\
\label{eq2b}
       & \xrightarrow{k^\text{b}_{\text{NH}^+}} \text{H}_3^+ + \text{N}  &\Delta{H}^0 &= -0.8~\si{\eV} 
\end{align}
\end{subequations}
where equation \eqref{eq2} has branches \eqref{eq2a} and \eqref{eq2b}.
\end{document}

在此处输入图片描述

答案2

这是与您为 tikz 图表添加方程式样式标签的方法类似的解决方案。它eqn-label为节点定义了一个选项,该选项将方程式编号放在页面右侧与当前节点相同的级别。这会使用该current page节点,因此您需要remember picture在选项中包含该选项tikzpicture

我通过修改密钥的定义来实现这一点labellabel密钥在核心 tikz 文件的第 762 行上定义tikz.code.tex,但实际执行工作的命令是\tikz@@parse@label@nonactive在 830 行上定义的。

\documentclass{report}
\usepackage{amsmath}
\usepackage{txfonts}
\usepackage{hyperref}
\usepackage{chemfig}
\usepackage{tikzpagenodes}
\usetikzlibrary{positioning,calc}

\makeatletter
\tikzset{
    eqn-label/.style={
      append after command = {%
        \bgroup
          [current point is local=true]
          \pgfextra{\let\tikz@save@last@fig@name=\tikz@last@fig@name\tikz@node@is@a@labelfalse
            \pgfpointanchor{current page text area}{east}
            \pgf@xa=\pgf@x
            \pgfpointanchor{\tikz@last@fig@name}{center}
            \pgf@ya=\pgf@y
          }
          node [every label,
                left
                ] at (\pgf@xa,\pgf@ya) {\refstepcounter{equation}\label{#1}\hypertarget{#1}{(\@currentlabel)}\!\!}
          \pgfextra{\global\let\tikz@last@fig@name=\tikz@save@last@fig@name}
        \egroup}
    }
}
\makeatother
\begin{document}
\begin{subequations}
\label{eq1}
\noindent
\begin{tikzpicture}[node distance=0cm and 1.2cm, remember picture]
\node (A)
    {$\text{NH}^+ + \text{H}_2$};
\node[above right=of A, eqn-label=eq1a] (B)
    {$\text{NH}_2^+ + \text{H} \qquad \Delta{H}^0 = -1.9~ \text{eV}$};
\node[below right=of A, eqn-label=eq1b] (C)
    {$\text{H}_3^+ + \text{N} ~~\qquad \Delta{H}^0 = -0.8~ \text{eV}$};
    \draw[-stealth] (A) -- ( $ (A.0)!0.3!(B.west|-A.0) $ ) |- (B.west) node[auto,pos=0.7] {${\scriptstyle k^\text{a}_{\text{NH}^+}}$};
    \draw[-stealth] (A) -- ( $ (A.0)!0.3!(C.west|-A.0) $ ) |- (C.west) node[auto,pos=0.7] {${\scriptstyle k^\text{b}_{\text{NH}^+}}$};
\end{tikzpicture}
\end{subequations}
where equation \eqref{eq1} has branches \eqref{eq1a} and \eqref{eq1b}.

\begin{subequations}
\label{eq2}
\begin{align}
\label{eq2a}
    \text{NH}^+ + \text{H}_2& \xrightarrow{k^\text{a}_{\text{NH}^+}} \text{NH}_2^+ + \text{H} &\Delta{H}^0 &= -1.9~ \text{eV} \\
\label{eq2b}
       & \xrightarrow{k^\text{b}_{\text{NH}^+}} \text{H}_3^+ + \text{N}  &\Delta{H}^0 &= -0.8~ \text{eV}
\end{align}
\end{subequations}
where equation \eqref{eq2} has branches \eqref{eq2a} and \eqref{eq2b}.
\end{document} 

以下是输出的图片:

在此处输入图片描述

相关内容