LaTeX
chemfig 是一个用于绘制二维化学结构的包。它是 ochem 的替代方案。与 ochem 需要 Perl 来绘制化学结构不同,chemfig 使用 tikz 包来生成图形。chemfig 的使用方法是在导言部分添加以下内容:
\usepackage{chemfig}
基本用法
在该包中,主要使用的命令是 \chemfig{}
:
\chemfig{<atom1><bond type>[<angle>,<coeff>,<tikz code>]<atom2>}
-
<angle>
是两个原子(或节点)之间的键角。共有三种类型的角度:绝对角度、相对角度和预定义角度。绝对角度给出一个精确的角度(通常为 0 到 360,尽管也可以是负数),表示方法是[:<absolute angle>]
。相对角度使用语法::<relative angle>
,表示相对于前一个键的角度。预定义角度是从 0 到 7 的整数,表示 45 度的间隔,表示方法是[<predefined angle>]
。预定义角度及其对应的绝对角度在下图中显示。

\chemfig{(-[:0,1.5,,,draw=none]\scriptstyle\color{red}0)
(-[1]1)(-[:45,1.5,,,draw=none]\scriptstyle\color{red}45)
(-[2]2)(-[:90,1.5,,,draw=none]\scriptstyle\color{red}90)
(-[3]3)(-[:135,1.5,,,draw=none]\scriptstyle\color{red}135)
(-[4]4)(-[:180,1.5,,,draw=none]\scriptstyle\color{red}180)
(-[5]5)(-[:225,1.5,,,draw=none]\scriptstyle\color{red}225)
(-[6]6)(-[:270,1.5,,,draw=none]\scriptstyle\color{red}270)
(-[7]7)(-[:315,1.5,,,draw=none]\scriptstyle\color{red}315)
-0}
-
<bond type>
描述了连接<atom1>
和<atom2>
的键类型。共有 9 种不同的键类型:

\chemfig{A-B}\\
\chemfig{A=B}\\
\chemfig{A~B}\\
\chemfig{A>B}\\
\chemfig{A<B}\\
\chemfig{A>:B}\\
\chemfig{A<:B}\\
\chemfig{A>|B}\\
\chemfig{A<|B}\\

\chemfig{C(-[:0]H)(-[:90]H)(-[:180]H)(-[:270]H)}
例如,甲烷分子可以通过以下代码生成:
\chemfig{C(-[:0]H)(-[:90]H)(-[:180]H)(-[:270]H)}
线性分子(如甲烷)是一个简单的例子,但分子是在 chemfig 中通过嵌套形成的。
骨架图
骨架图可以通过以下方式生成:

\chemfig{-[:30]-[:-30]-[:30]}

\chemfig{-[:30]=[:-30]-[:30]}
环
环的语法是 <atom>*<n>(code)
,其中 "n" 表示环中侧面的数量,"code" 表示每个环的具体内容(键和原子)。

\chemfig{A*6(-B-C-D-E-F-)}

\chemfig{A*5(-B-C-D-E-)}

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

\chemfig{**5(------)}
路易斯结构(Lewis Structures)
路易斯结构使用语法 \charge{<position1>=<charge1>,<position2>=<charge2>...}{atom}
,其中 <position>
采用极坐标表示为 <angle>:<shift>
,不过如果不需要额外的位移,: <shift>
可以省略。在电荷字段中,\.
和 \:
分别表示单独的电子和成对电子。成对电子还可以通过一个条形表示,使用 \|
。

\charge{0=\.,90=\.,180=\.,270=\.}{C}
路易斯结构也可以通过 \chemfig{}
包含在内。

\chemfig{H-[:52.24]\charge{45=\:,135=\:}{O}-[::-104.48]H}
离子(Ions)
例如,考虑一个醋酸根离子:

\chemfig{-(-[1]O^{-})=[7]O}
由于 chemfig
命令进入数学模式,因此离子电荷可以作为上标添加(一个警告:负离子要求负号被括起来,如示例所示)。
离子的电荷可以通过使用 \oplus
和 \ominus
来圈出:

\chemfig{-(-[1]O^{\ominus})=[7]O}
或者,电荷可以使用 \chemabove{}
放置在离子上方:
\chemfig{-\chemabove{N}{\scriptstyle\oplus}(=[1]O)-[7]O^{\ominus}}

共振结构和形式电荷(Resonance Structures and Formal Charges)
共振结构需要一些数学命令:
% see "Advanced Mathematics" for use of \left and \right
% add to preamble:
% \usepackage{mathtools} % \Longleftrightarrow
$\left\{\chemfig{O-N(=[:60]O)-[:300]O}\right\}
\Longleftrightarrow
\left\{\chemfig{O=N(-[:60]O)-[:300]O}\right\}
\Longleftrightarrow
\left\{\chemfig{O-N(-[:60]O)=[:300]O}\right\}$
化学反应(Chemical Reactions)
在 chemfig
包的最新版本中,chemrel
和 chemsign
命令已被移除,因此要绘制化学反应,必须使用 \arrow
和 \+
命令,并将它们放在 \schemestart
和 \schemestop
中。
可以使用 \arrow
命令绘制几种类型的箭头:
\schemestart A\arrow{->}B\schemestop\par % 默认
\schemestart A\arrow{-/>}B \schemestop\par
\schemestart A\arrow{<-}B \schemestop\par
\schemestart A\arrow{<->}B \schemestop\par
\schemestart A\arrow{<=>}B \schemestop\par
\schemestart A\arrow{<->>}B \schemestop\par
\schemestart A\arrow{<<->}B \schemestop\par
\schemestart A\arrow{0}B \schemestop\par
\schemestart A\arrow{-U>}B \schemestop\par
\schemestart
A\arrow[,,->] B\arrow[,,-{Triangle[slant=0.5,blue,width=10pt]}]
C\arrow[,,-{CF[sharp]}] D \+ E
\schemestop
有关 \arrow
命令和 chemfig
中化学反应的更多详细信息,请查阅 chemfig
文档中的第四部分 "Reaction schemes"。
旧版本
在旧版本中,可以使用以下命令创建化学反应:
\chemrel[<arg1>][<arg2>]{<arrow code>}
\chemsign+ % 产生一个加号
在 \chemrel{}
中,<arg1>
和 <arg2>
分别表示箭头上方和下方的文本。
有四种类型的箭头可以通过 \chemrel{}
生成:
A\chemrel{->}B\par
A\chemrel{<-}B\par
A\chemrel{<->}B\par
A\chemrel{<>}B
命名化学图形(Naming Chemical Graphics)
可以使用以下命令命名分子:
\chemname[<dim>]{\chemfig{<code of the molecule>}}{<name>}
其中 <dim>
插入在分子的底部和名称 <name>
顶部之间。默认情况下,<dim>
的大小为 1.5ex。
化学结构的命名
<name>
将相对于它所描述的分子居中。
\schemestart
\chemname{\chemfig{R-C(-[:-30]OH)=[:30]O}}{Carboxylic acid}
\+
\chemname{\chemfig{R’OH}}{Alcohol}
\arrow{->}
\chemname{\chemfig{R-C(-[:-30]OR’)=[:30]O}}{Ester}
\+
\chemname{\chemfig{H_2O}}{Water}
\schemestop
在上述反应中,\chemname{}
插入了 1.5ex 加上羧酸分子深度的间距,以此将每个分子和它们的名称分开。这是因为反应中第一个分子(羧酸)的图形比其他分子要深。将酒精分子放在第一个位置会得到不同的结果:
\schemestart
\chemname{\chemfig{R’OH}}{Alcohol}
\+
\chemname{\chemfig{R-C(-[:-30]OH)=[:30]O}}{Carboxylic acid}
\arrow{->}
\chemname{\chemfig{R-C(-[:-30]OR’)=[:30]O}}{Ester}
\+
\chemname{\chemfig{H_2O}}{Water}
\schemestop
通过在反应中第一个 \chemname{}
前面添加 \chemnameinit{<deepest molecule>}
和在反应结束后添加 \chemnameinit{}
,可以解决这个问题:
\schemestart
\chemnameinit{\chemfig{R-C(-[:-30]OH)=[:30]O}}
\chemname{\chemfig{R’OH}}{Alcohol}
\+
\chemname{\chemfig{R-C(-[:-30]OH)=[:30]O}}{Carboxylic acid}
\arrow{->}
\chemname{\chemfig{R-C(-[:-30]OR’)=[:30]O}}{Ester}
\+
\chemname{\chemfig{H_2O}}{Water}
\chemnameinit{}
\schemestop
最后,添加 \\
在 <name>
中将生成换行,使名称可以跨越多行。
高级图形
对于高级命令和示例,请参考 chemfig 手册,里面有更详细和完整的包介绍。
化学式(Chemical Formulae)
如果你需要排版化学式,你可以选择两个非常好的包:mhchem 和 chemmacros。
mhchem 包
mhchem 是一个用于排版化学公式和方程式的包,也用于排版基本的二维化学结构。要使用这个包,在导言部分添加以下内容:
\usepackage[version=4]{mhchem}
化学物种可以使用 \ce
命令进行插入。例如:
\ce{3H2O} \\
\ce{1/2H2O} \\
\ce{AgCl2-} \\
\ce{H2_{(aq)}}
渲染为:
$$\ce{3H2O} \\ \ce{1/2H2O} \\ \ce{AgCl2-} \\ \ce{H2_{(aq)}}$$有一些内容会自动排版;例如,\ce{H2O}
中的 2
会自动作为下标,不需要额外的命令。物种的数量在公式前面。1/2 和其他分数会自动排版,如 \ce{1/2H2O}
。AgCl2-
中的电荷会自动作为上标排版。如果电荷既不是 +1 也不是 -1,则会使用 ^
将其作为上标,例如 \ce{AgCl2-}
。相态不会自动作为下标排版,需要用括号括起来,并使用 _
,如 \ce{H2_{(aq)}}
。
自 2016 年 2 月起,mhchem 包也可在 TeX 的 MediaWiki 网站(如 Wikipedia)中使用,使用 <ce>...</ce>
标签。
chemmacros 包
chemformula 是一个更大化学包中的一部分,用于排版化学公式、方程式和基本的二维化学结构。该包使用的语法与 mhchem 略有不同。对于从事化学相关工作的用户,chemmacros
包将非常有用。
要使用此包,在导言部分添加以下内容:
\usepackage{chemformula}
化学物种可以使用 \ch
命令进行插入。例如:
\ch{3 H2O} \\
\ch{1/2 H2O} \\
\ch{AgCl2-} \\
\ch{H2_{(aq)}}
渲染为:
$$\ch{3 H2O} \\ \ch{1/2 H2O} \\ \ch{AgCl2-} \\ \ch{H2_{(aq)}}$$如你所见,语法几乎相同。
XyMTeX 包
以下代码生成了下图中的皮质醇分子。
\documentclass{letter}
\usepackage{epic,carom}
\pagestyle{empty}
\begin{document}
\begin{picture}(1000,500)
\put(0,0){\steroid[d]{3D==O;{{10}}==\lmoiety{H$_{3}$C};{{13}}==\lmoiety{H$_{3}$C};{{11}}==HO}}
\put(684,606){\sixunitv{}{2D==O;1==OH}{cdef}}
\end{picture}
\end{document}

皮质醇由 XyMTeX 渲染。