使用LaTeX输入化学方程式与结构式

引子

作为一款十分专业的排版软件,LaTeX能够支持使用者排版出具有出版物质量的文档,尤其在复杂表格和数学公式的排版上具有十分突出的处理能力。LaTeX宏集乃是当前全球范围内应用最广泛的TeX宏集,在Plain TeX的基础上加入了许多内置命令和功能以实现大量功能,具有易用和开源的优点。作为一款针对于数学公式的排版软件,尽管LaTeX本身并不能很好地支持化学方程式与结构式的排版,但得益于其开源性质和极强的可拓展性,有开发者基于LaTeX开发出了用于排版化学刊物的宏包,排版工作者只需应用宏包提供的命令,即可实现相应的排版需求。

使用mhchem宏包输入无机化学方程式

对于一般的无机化学方程式,推荐采用mhchem宏包进行输入即可。该宏包主要提供了\ce这一命令,该命令提供了一个类似数学公式的化学公式环境,在该命令的参数中,允许根据宏包的一些规则输入化学方程式。

mhchem宏包的功能主要包括:

  • 输入化合物分子式;
  • 输入

要调用mhchem宏包,只需在文档导言区使用如下命令:

1
\usepackage[version=4]{mhchem}

其中version=4事实上并不属于可选参数,这是因为宏包的开发者在开发过程中一直保留对早期版本的支持,如果不添加该参数则会导致报错,影响正常使用,故在一般情况下使用version=4即可。

然后,我们就可以在正文中使用\ce{}命令来输入化学方程式了。

分子式

对于一般的分子式,直接按对应的字母和数字进行输入即可。例如:

1
2
3
4
5
6
7
\ce{Al}

\ce{H2O}

\ce{Fe2(SO4)3}

\ce{K4[Fe(CN)6]}

输出结果为:
1

离子式

对于离子式,采用^表示将其后紧跟着的一个元素作为上标进行输入,这与数学公式中^的用法基本相同。例如:

1
2
3
4
5
6
7
8
9
\ce{H^+}

\ce{OH^-}

\ce{NH4^+}

\ce{SO4^{2-}}

\ce{[AgCl2]-}

输出结果为:
2

同位素

理解了LaTeX中上下标的用法之后,输入同位素的方法事实上也不难,只要在元素符号之前使用上下标输入其质量数和质子数即可。例如:

1
2
3
\ce{^{227}_{90}Th}

\ce{^{235}_{92}U^{6+}}

输出结果为:
3

物质状态

在化学方程式中,我们一般通过在分子式后加上括号来表示其物质状态,如g表示气态(gas),l表示液态(liquid),s表示固态(solid),aq表示溶液中的溶质。mhchem宏包也提供了这种支持,我们只需要在分子式后面简单加上括号和对应的字母表示其物质状态即可。例如:

1
2
3
4
5
6
7
\ce{H2O(l)}

\ce{BaSO4(s)}

\ce{H2S(g)}

\ce{NaOH(aq)}

输出结果为:
4

化学方程式

mhchem宏包中,可以采用->表示箭头,加号则直接使用+进行输入。如此一来,便可以使用其简单地输入化学方程式。例如:

1
2
3
\ce{2H2 + O2 ->[ignite] 2H2O}

\ce{CO2 + C ->[high temp] 2CO}

输出结果为:
5
这里反应条件或催化剂的输入方式为在箭头后使用方括号,在方括号中放置反应条件或催化剂的分子式即可,如同时有反应条件和催化剂,则使用两个方括号分别输入,第一个方括号中的内容会被输入到箭头上方,第二个方括号中的内容会被输入到箭头下方。

一些其他例子

在这一节中,我主要展示气体和沉淀符号、可逆反应箭头、化学平衡常数、性态标注等的输入方式。

1
2
3
4
5
6
7
8
9
\ce{2Na + 2H2O -> 2NaOH + H2 ^}

\ce{Ba^{2+} + SO4^{2-} -> BaSO4 v}

\ce{Zn^2+ <=>[+2OH-][+2H+] $\underset{\text{amphoteres Hydroxid}}{\ce{Zn(OH)2v}}$ <=>[+2OH-][+2H+] $\underset{\text{Hydroxozikat}}{\ce{[Zn(OH)4]^2-}}$}

$K=\frac{[\ce{Hg^2+}][\ce{Hg}]}{[\ce{Hg2^2+}]}$

\ce{Hg^2+ ->[I-] $\underset{\mathrm{red}}{\ce{HgI2}}$ ->[I-] $\underset{\mathrm{red}}{\ce{[Hg^{II}I4]^2-}}$}

输出结果为:
6

一些高级用法

化学方程式也可以换行并可通过嵌套align*环境的方式进行对齐。例如:

1
2
3
4
5
6
7
8
9
\begin{align*}
\ce{
2C + O2 & ->T[high temp] 2CO \\
CO2 + C & ->T[high temp] 2CO \\
Fe2O3 + 3CO & ->T[high temp] 2Fe + 3CO2 \\
CaCO3 & ->T[high temp] CaO + CO2 \\
CaO + SiO2 & ->T[high temp] CaSiO3
}
\end{align*}

输出结果为:
7

如需对化学方程式进行编号,这里提供一种嵌套equation环境的方法。首先,在导演区中插入如下代码:

1
2
3
4
5
6
\makeatletter
\newcommand\reaction@[1]{\begin{equation}\ce{#1}\end{equation}}
\newcommand\reaction@nonumber[1]%
{\begin{equation*}\ce{#1}\end{equation*}}
\newcommand\reaction{\@ifstar{\reaction@nonumber}{\reaction@}}
\makeatother

上述代码定义了一对名为\reaction\reaction*的命令,其中\reaction命令除了会对本行进行编号外,其他用法均与\ce命令相同。例如:
1
2
\reaction{3NO2 + H2O -> 2HNO3 + NO}
\reaction*{Cl2 + H2O -> HCl + HClO}

输出结果为:
8
注意使用上述方式定义的命令\reaction会与数学公式的equation环境共用编号。

使用chemfig宏包输入有机化学方程式

对于较复杂的有机化学方程式(包含有机化合物结构式、反应机理等),LaTeX提供了另一个宏包chemfig以便进行处理。由于集成的功能较多,该宏包的使用方法亦较为繁琐,在此仅对一些比较简单的用法进行介绍,更多高阶用法请参阅宏包附带的帮助文档。

首先,在文档导言区中使用命令:

1
\usepackage{chemfig}

即可使用默认选项加载chemfig宏包,该宏包主要提供一个与其同名的命令\chemfig来输入复杂的化学方程式。以下是一些简单的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
\chemfig{CH_3-CH_3}

\chemfig{C_6H_{12}O_6}

\chemfig{CH_2=CH_2}

\chemfig{*6(-=-=-=)}

\chemfig{**6(---(-OH)---)}

\chemfig{*6(-N=-=-=)}

\chemfig{*6((-H_2N)=N-*5(-\chembelow{N}{H}-=N-)=-(=O)-HN-[,,2])}

输出结果为:
9

这里再举一个稍微复杂一点的例子:

1
2
\definesubmol{A}{*6(=-*5(-*6(-=-=-)--N(--[::-60])-)=-=-)}
\chemfig{([::+180]-!A)=[::+72]*5(-N=(-(-[::+54]!A)=[::-72]*5(-N(-[::-33,1.5,,,draw=none]Mn)-(=(-[::+72]!A)-[::-36]*5(=N-(=(-[::+54]!A)-[::-72]*5(-N-(-)=-=))-=-))-=-))-=-)}

输出结果为:
10
其中\definesubmol命令表示定义一个转义字符串,例如在上面的例子中字符A\chemfig命令中将被转义为后面的*6(=-*5(-*6(-=-=-)--N(--[::-60])-)=-=-)

总结

上文中介绍的两个宏包在当前版本的TeX Live中均有附带,有需求的工作者可直接在文档中进行调用。

此外,在输入化学反应方程式时,也可以把这两个宏包进行混合使用,即可以在mhchem提供的公式环境中,嵌套使用chemfig绘制复杂的化学结构式,这样一来可以绘制出复杂的化学结构式,二来可以避免使用chemfig中一些较为繁琐的命令,减少额外的工作量。