我想写两个半电池方程式(还原和氧化),每个方程式都在自己的行上,每个方程式都有自己的label
类型reactions
和条目和 RxnDesc
(反应描述)在反应列表中(由chemmacros
反应模块提供,
关注通过一条求和线(仅一条水平线)和总和反应,它也应该有自己的标签和条目listofreactions
。
我可以使用 实现所需的“外观” aligned
,但这并没有给我反应列表中的任何条目reaction
也不是类型的标签:
\documentclass{article}
\usepackage{amsmath}
\usepackage{chemformula}
\begin{equation}
\begin{aligned}
\ch{1/2 O2\aq{} + H2O + 2 e- &<=> 2 OH-} \\
\ch{Zn^{2+}\aq{} + 2 OH- &-> ZnO\sld{} + H2O}\\
\midrule
\ch{Zn^{2+}\aq{} + 1/2 O2\aq{} + 2 e- &-> ZnO\sld{}}
\end{aligned}
\end{equation}
\end{document}
我一直试图在环境中实现这种外观(除了每个反应都应该有自己的标签)reactions
,但总是失败。我能实现的最好结果是反应块排列整齐,反应和标签列表中的条目带有描述,但缺少水平规则:
\documentclass{article}
\usepackage{amsmath}
\usepackage[minimal=true, modules={reactions}]{chemmacros}
\usepackage{chemformula}
\usepackage{booktabs}
\usepackage{array}
\listofreactions
\begin{reactions}
1/2 O2\aq{} + H2O + 2 e- &<=> 2 OH- \AddRxnDesc{Oxygen~reduction~in~water} \\
Zn^{2+}\aq{} + 2 OH- &-> ZnO\sld{} + H2O \AddRxnDesc{Zinc~hydroxide~to~oxide} \\
Zn^{2+}\aq{} + 1/2 O2\aq{} + 2 e- &-> ZnO\sld{} \AddRxnDesc{Zinc~deposition}
\end{reactions}
我曾尝试\NewChemReaction{rxntab}[1]{tabular}
过在先前的回答中建议,但我无法获得\hline
或midrule
工作,无论是反应标签还是反应描述,此外从视觉上看它看起来也不太好看。
我也尝试过使用常规align
环境和按照上一个答案中的建议重置标签编号但是那个答案显示了如何对单个方程式进行此操作,我想我的复制粘贴技能不足以对多个编号方程式实现相同的操作;-)
如果有办法的话,我很想学习如何去做。
Ubuntu 22.04 上的 TeXLive 2023、chemmacros v6.2a、chemformula v4.17。
其他相关问题及解答:
答案1
好吧,结果有点像是在玩定位,但这是我得到的最好结果。所以我会与你分享。
\documentclass{article}
\usepackage[minimal=true, modules={reactions}]{chemmacros}
\chemsetup{formula=chemformula}
\chemsetup[chemformula]{format={\sffamily}}
\chemsetup[reactions]{before-tag = \textbf, tag-open = \textbf{[} , tag-close = \textbf{]}}
%----- defining subreactions in reaction ----
\makeatletter
\newenvironment{subreactions}{%
\refstepcounter{reaction}%
\protected@edef\theparentequation{\thereaction}%
\setcounter{parentequation}{\value{reaction}}%
\setcounter{reaction}{0}%
\def\thereaction{\theparentequation\alph{reaction}}%
\ignorespaces
}{%
\setcounter{reaction}{\value{parentequation}}%
\ignorespacesafterend
}
\makeatother
\begin{document}
\listofreactions
\raisebox{-39pt}{\hspace{20mm} \rule{70mm}{1pt}}
\vspace{-51pt}
\begin{subreactions}
\begin{reactions}
1/2 O2 + H2O + 2 \el &<=> 2 OH\mch[] \AddRxnDesc{Oxygen~reduction~in~water} \\
Zn\pch[2] + 2 OH\mch[] &-> ZnO + H2O \AddRxnDesc{Zinc~hydroxide~to~oxide}
\end{reactions}
\end{subreactions}
\vspace{-12pt}
\addtocounter{reaction}{-1}
\begin{reaction}
Zn\pch[2]\aq{} + 1/2 O2\aq{} -> ZnO\sld{} \quad \quad \quad \AddRxnDesc{Zinc~deposition}
\end{reaction}
\end{document}
导致:
笔记:
- 如您所见,将总反应置于环境之外
subreactions/reactions
不会自动使反应箭头与先前的箭头对齐。您可以\quad
在 前添加几次 来调整总反应的箭头位置\AddRxnDesc
。 - 我将您的反应改为常规表示。半反应中不使用相,因为涉及电子。它们没有相,只有起源。传统上,当在反应中使用相时,所有化合物都应分配其相。可以将相添加到总反应中。
- 我改变了使用定义向离子添加电荷的方式
chemmacros
。 array
使用的环境禁止reactions
在该环境内使用线条。它看起来像一张表格,但行为却不像表格。因此,您需要将规则放在开始之前,subreactions
并调整这两个规则的垂直和水平间距。- 为了获得正确的反应数,您需要
\thereaction
在添加总反应之前调整计数器。 - 这个
subreactions
宏不是我的主意。几年前,我从 Clemens Niederberger 对类似问题的回答中复制了它。我现在没找到它。