【教程】用LaTeX排版化学内容

用LaTeX排版化学内容核心就是两个宏包mhchemchemfig。前者上手容易,简单易懂,适合写无机化学或是简单的有机化学,而后者功能强大却学习成本异常的高,笔者蹑足网页之间,而经过大量理解与AI的帮助,终于倔起阡陌之中(雾)。总之,本文章力求简介明晰、通俗易懂,让大家理解透彻。另外,如果有什么不懂的地方可以在评论区提出。

mhchem(无机+简单有机)

在导言区使用如下命令来引入mhchem宏包:

\usepackage[version=4]{mhchem}

基本微粒的书写

不用考虑上下标,直接将其包裹在$\ce{}$中,如$\ce{Na+}$$\ce{Na2SO4}$等,上下标会自动标注。若该原子团中上下标连在一起,会默认全是下标,这个时候需要在上下标间隔部分用^隔开,如$\ce{SO4^2-}$
上面三个例子编译出来的结果分别为

用户只需要输入plain text就可以,而mhchem要考虑的就多了。

如果想书写只有一条单链的简单的有机结构简式,也可以用mhchem:用-=#分别表示单、双、三键,~表示氢键,键的前后不要有空格。如$\ce{CH2=CH2}$$\ce{CH3-CH2-OH}$$\ce{N#N}$
上面三个例子编译出来的结果分别为

化学(离子)方程式的书写

规范空格的使用

为了描述方便,定义化学(离子)方程式每一个不连续在一起的东西为一个单元,如每个参与反应的物质和其化学计量数、+、气体符号、沉淀符号、方程式中间的等号……值得注意的是,化学计量数和参与反应的物质为同一个单元。每一个单元之间要用空格隔开,这样mhchem才知道这两个单元是两个不同的东西,要分开渲染,如$\ce{2H2 ^ + O2 ^}$$\ce{2H2^+O2^}$会得到迥然不同的编译结果:。这提醒我们虽然在大部分LaTeX语境中空格都无关紧要,但是在使用mhchem时请一定规范空格的使用!

部分特殊单元的书写

气体符号:^,等价于$\uparrow$
沉淀符号:v,等价于$\downarrow$

提示
上面两个字符只有单独作为一个单元时才能表示气体(沉淀)符号,所以请一定记得在其前后加空格

可逆符号:<=>T[above][below]
单向箭头:->T[above][below]
长等号:需要使用extarrows中的:\xlongequal[below]{above}

提示
可逆符号和单向箭头是mhchem宏包提供的,其上下标是文本环境,可以直接输入中文;长等号是extarrows宏包提供的(在头文件中单独声明),其上下标是数学环境,不能直接输入中文。要输入中文,请使用amstext提供的\text{中文}

demo1: 使用mhchem书写方程式

\documentclass[UTF8, 10pt, a4paper, oneside]{ctexart}
\usepackage[version=4]{mhchem}
\usepackage{extarrows}
\usepackage{amstext}
\linespread{1.5}
\pagestyle{plain}

\begin{document}

$\ce{K2CO3 + 2HClO4 = 2KClO4 v + CO2 ^ + H2O}$

$\ce{CO + CuO \xlongequal{\text{高温}} CO2 + Cu}$

$\ce{N2 + 3H2 <=> 2NH3}$

$\ce{ Li_{x}C_{y} + Li_{1-x}CoO2 <=>T[放电][充电] C_{y} + LiCoO2}$

\end{document}

编译结果:

chemfig(有机)

理论上讲,mhchem能做到的chemfig也能做到,与此同时,chemfig还有许多其他的新功能。那我们为什么还要使用mhchem呢?答案是,mhchem简明易懂、简单容易上手、自动化程度高,而chemfig代码可读性差、不容易学、编译耗时久。比如,mhchem中可以自动上下标,但在chemfig中不行,需要显式地用^_来声明。还有诸如此类的许多问题,继续阅读你就知道了。

和mhchem一样,若非特殊声明,chemfig的所有指令都是包含在$\chemfig{}$中的。

结构式(键线式)

单链有机物

提示
若你在后文看到了花花绿绿的框框,就是为了方便理解而在\setchemfig{debug=true}模式(debug模式)下编译的结果。

我们把结构式中每一个基团叫做节点(对应键线式就是每一个起点、终点、拐点),中间的化学键被称为钩子。节点可以为任意符号、数字、字母、中文甚至为空(键线式);钩子连接了两个节点,把在代码中左边的节点称为父节点,右边的节点称为子节点。如下图中红色的方框就指示了节点:

demo2: 初识chemfig

上图的chemfig代码是:

\chemfig{CH_3-CH_2-[2]CH_3}

试着在代码中找一找,哪些是节点,哪些是钩子。[2]是钩子参数,将在后文介绍。

钩子的类别、参数

所有钩子的类别如下表:

alt text

在键线式中,其他键与双键连接时,会默认接在两条线段之间(如下左图所示)而不是我们熟悉的接在其中一条线段上,解决方案是用=^代替=,如下右图所示:(未使用debug模式编译!)

        

在钩子的后面紧跟一个[]即可配置其参数,顺序为[角度,键长,父节点碳序数,子节点碳序数,tikz代码]
具体解释如下:

  • 角度

    • 绝对角度

绝对角度是以父节点为参考点,钩子与x轴正方向向正方向旋转的角度值。就是如下图的θ\theta角(用F代表父节点,S代表子节点):

\chemfig{F-[:60]S}

像上面一样,[:绝对角度]就可以来指示键的角度。

    • 预定义角度

每次算绝对角度太麻烦啦,你这样抱怨道。由于结构式中多为横平竖直式的,90、180、270等角度值广泛使用,chemfig也为我们预定义了许多角度值,如下图:

步长是4545^\circ。用[预定义角度]来表示键的角度。

chemfig中还有一种表示角度的方法:相对角度,要考虑的东西太多了,不建议你使用。与其“想了半天,转了八圈,还是终于转错了“,不如老老实实算绝对角度。

  • 键长

相对值,推荐是0.6~0.8。在最开始设置就可以统一更改本括号内所有的键长:

\chemfig{[,0.7] CH_3-CH_2-CH_2}
\chemfig{CH_3-CH_2-CH_2}
  • 父节点碳序数、子节点碳序数

若父节点/子节点有多个可以成键的原子(字母),会默认使用第一个来成键,可以在这里填入父、子的从左到右的序号,来实现诸如父节点第二个碳连接子节点第三碳之类的操作,如:

\chemfig{CH_3CH_2CHCH3-[2]CH_3CH_2CHCH3}

在未指定父子节点碳序数的情况下,编译出来的结果为:

用上述方式指定父子节点碳序数:

\chemfig{CH_3CH_2CHCH3-[2,,5,5]CH_3CH_2CHCH3}

编译出来的结果为:

  • tikz代码

可以用此来自定义键的样式,这里不做展开。tikz是个无底洞,要是详细介绍的话就是另一篇文章了。

简单举个例子,在这个位置填颜色的英文名(white、blue…)就可以改变键的颜色。

全部加起来

综合以上内容,我们现在已经可以写出单链有机物了!随着代码编译,上一个子节点又会变成下一个父节点,依此类推,如下图:

所以只需要一直用A-B-C...的形式就可以写出单链有机物了,如:

\chemfig{[,0.7] CH_3-CH_2-[2]CH_2-[2]CH_2-CH_3 }

多链有机物

像写结构简式一样,在chemfig中,如果用A(-B)-C将子节点括起来,那么子节点-B就成了支链。当你在括号外再接其他节点-C时,就会以括号外的A作为父节点,如:

\chemfig{[,0.8] C-C(-[2]C)-C(-[2]C)(-[6]C)-C-C}

要讲环结构,我们先来看一个demo:

demo3: 苯环

苯的结构简式:

\chemfig{[,0.5]*6(-=-=-=)}
\qquad
\chemfig{[,0.5]**6(------)}

不难看出,想要几元环,就在*后放几个数字,并在后面括号内补几根键就行了。

环的编号与取代

\chemfig{[,0.5]*6(0(-0-0)-1(-1-1)-2(-2-2)-3(-3-3)-4(-4-4)-5(-5-5)-)}

如下图所示,和链一样,打一个括号就可以把支链支出去,并且通常不用考虑角度。

飞线

“主播,主播,你的钩子确实很强,但还是太吃操作了,有没有更加简单又强势、能将任意两个节点连接起来的钩子推荐一下吗?”

有的兄弟,有的。像这样能把无论有多远的节点连起来的钩子甚至所有键型都能用:
在要飞线的两个节点后紧邻着的加一个?就可以将它们连接,如:

\chemfig{[,0.8] C(-[2]C?)-C-C-C-C(-[2]C?)}

如果你想飞很多根线,可以给每一对?命一个名(仅接受a~zA~Z0~9):?[名字,{键型},tikz代码]

键型遵循上文提到的那张表,和其他的钩子保持一致:

demo4: 飞线大师

\chemfig{A?[a]-B(-[1]W?[a,{=},red]-X?[b])(-[7]YZ?[b,{-},{line width=2pt}])-C?[b,{~},blue]}

聚合物(链节符号)

通过自定义宏,可以在钩子上加上一个分隔符:

\chemfig{-[@{left,0.5},0.6]CH_2-[,0.7]CH_2-[@{right,0.5},0.6]}
\polymerdelim[delimiters={[]},height=5pt, depth=5pt, indice=n]{left}{right}

(由于定义了宏,需要编译两次)

解释一下:在第二行polymerdelim中定义了一个宏,其中delimiters就是你的分隔符,这里是[]heightdepth是你分隔符的大小,建议先别调,编译出来后再凭感觉调;indice是聚合度,填n。第一行\chemfig@{left,0.5}调用了这个宏,left就是左边的框框,right就是右边的框框,0.5是分隔符在钩子上的比例,填0.5就是使分隔符在钩子的中间。

如果键需要调整键角,那么请看下面的这个demo:

demo5: 复杂的聚合物

\left[\chemfig{[,0.6] W(-[:120]M)(-[4]M)(-[:-120]M)-[@{left,0.5}:-30,0.8]W(-[2]M)(-[6]M)-[@{right,0.5}:30,0.8]X-[2]Y(=[0]X)(=[4]X)-[2]X}\right]^-
\polymerdelim[delimiters={()},height=2pt, depth=5pt, indice=n]{left}{right}

只看其中的聚合物chemfig,你应该填@{left,0.5}:绝对角度。请不要尝试其他的角度表示方法,你会很崩溃的。

电子式

以前的\Lewis已经不再适用,我们需要新的charge

\setcharge{shortcuts=true}
\charge{[circle]<Angle>:<Radius>=<EdgeItems>}{Centre}

其中

参数 含义
Angle 边缘文本的绝对角度(单位是度)
Radius 边缘文本距离中心的半径,建议单位使用mm
EdgeItems 边缘文本的内容,可以是各种东西
Centre 中心文本

例如:

\setcharge{shortcuts=true}
\setcharge{debug=true} %请注释掉这一行,这一行是那些花花绿绿的debug框框
\Charge{[circle]30=\:,120=$\ominus$,210=$\delta^+$}{Fe}

但是实测发现,当我们想输入化合物的电子式时,会发现这种解决方案排出来特别丑,我们就需要迂回一下,改用\chemfig中嵌套使用\charge的办法。即用\chemfig来将分子的结构确定,再在中心原子上加电子的小点点。

需要注意的是,键需要改成白色,很多间距需要自己调整。这里有一个例子:

\setcharge{shortcuts=true}
\chemfig{[,0.4]\charge{0:1mm=\:\hspace{0.2em}\:,90=\:,180=\:}{C}(-[2,,,,white]H)(-[4,,,,white]H)-[,0.5,,,white]\charge{90=\:,0=\:}{C}(-[2,,,,white]H)(-[0,,,,white]H)}

代码几乎很难看懂,对吧。编译出来的效果是这样的:

轨道表示式

直接看示例:

$\mathop{\boxed{\uparrow \downarrow}\boxed{\uparrow \downarrow}\boxed{\uparrow \downarrow}\boxed{\hspace{0.25em} \uparrow \hspace{0.25em}}\boxed{\hspace{0.25em} \uparrow \hspace{0.25em}}}\limits^{3d}$

其中:

函数 解释
\boxed{abc} 将括号中的abc用方框包起来
\mathop 加括号中的内容当作一个整体(一坨)来处理
\limits 可以将跟在后面的^_悬浮到前面一整坨的头顶/脚底

原子结构示意图

这是用tikz画的,不想讲,直接依葫芦画瓢吧:

\begin{tikzpicture}
    \draw[black] (0,0) circle (4mm)node{+11};%核电荷数
    \draw[red](-45:8mm) arc (-45:45:8mm)node[midway]{\colorbox{white}{2}}; %第一层电子数
    \draw[red](-48:12mm) arc (-48:48:12mm)node[midway]{\colorbox{white}{8}};%第二层电子数
    \draw[red](-51:16mm) arc (-51:51:16mm)node[midway]{\colorbox{white}{1}};  %第三层电子数
\end{tikzpicture}


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇