chemfig 机理示例:多步机理、弯箭头和自由基鱼钩箭头

发布:2026年10月17日 · 作者:Scidart Academy · 阅读时间:约 11 分钟
深色代码面板中的 chemfig \chemmove 代码,旁边是氯自由基夺取甲烷氢原子的图,用三个鱼钩箭头绘制
带弯箭头和鱼钩箭头的多步机理和自由基机理,在 MolDraw 中绘制并导出为 chemfig。

简短回答:下面是五个用 chemfig 写成的完整机理:两个用单电子鱼钩箭头绘制的自由基链反应,三个用双电子弯箭头绘制的极性机理。每个都是可下载的 .tex 文件,可用 pdflatex 编译(运行两次)。想要修改,把文件粘贴到 MolDraw 画布上,用鼠标编辑,然后选择 Download → chemfig (.tex)。

五个示例

甲烷的自由基氯代链引发、两步链增长和链终止,每步都有标题。均裂,以及在新键处相遇的鱼钩箭头。radical-chlorination-of-methane.tex
HBr 的反马氏加成分四步表示的过氧化物效应:过氧化物均裂、溴原子生成、对丙烯的加成和夺氢。键线式碳上的自由基点。anti-markovnikov-hbr-addition.tex
碱催化的羟醛加成烯醇负离子的生成(平衡)、C–C 键的形成和质子化。从电荷和 π 键出发的箭头。base-catalysed-aldol-addition.tex
叔丁醇的 E1 脱水分四行排列的单个反应式,每个箭头上方标有条件,并含碳正离子。e1-dehydration-of-tert-butanol.tex
苯的溴代经 σ 络合物进行的芳香亲电取代,箭头上方标有催化剂。bromination-of-benzene.tex

下面每一步都包含三部分:chemfig 代码(使用 Copy 按钮复制)、pdflatex 由该代码生成的 PDF,以及把同一段代码粘贴后 MolDraw 画出的图形。两张图都完全由所示代码生成,你可以核对粘贴后的布局、间距和弯箭头是否与 PDF 一致。

如果想描述化学过程而不是图形,可以用 MolScript 书写机理:物种用 SMILES 表示,每个弯箭头写一行。MolDraw 会自动排版,并能给出相同的 chemfig 代码。

chemfig 中弯箭头的写法

chemfig 借助 TikZ 在原子之间画箭头,分三部分:

  1. 为两端命名。在原子前面加 @{a1},或写在键的选项中(-[@{b1}:0]),为其命名。
  2. 在 \chemmove 中绘制。在反应式之后,\chemmove{ \draw[…] (a1) to[bend left=50] (a2); } 从一个名称向另一个名称画箭头。
  3. 编译两次。chemfig 在第一次运行时保存命名原子的位置,第二次运行时使用这些位置。

示例遵循以下规则,与 MolDraw 画布上箭头的外观一致:

两个电子完整箭头:-{Stealth[length=4pt,inset=1.5pt]}。
一个电子鱼钩箭头,即半个箭头:-{Straight Barb[left,length=4pt]}。[left] 或 [right] 只保留曲线外侧的倒钩。
箭尾的起点位于提供电子的孤对电子、负电荷、自由基点或键的中点。[shift={(…em,…em)}] 把箭尾从原子中心移到该位置。
箭头的终点在接受电子的原子前稍稍停住;形成新键时则位于两个原子之间。
比例\setchemfig{atom sep=2.5em, …} 设定键长。所有以 em 为单位的 shift 都以它为基准,所以复制代码时请保留这一行。
弧度bend left / bend right 加上角度,深弧再加 looseness。角度是相对于两端连线的,所以即使 chemfig 对反应式的排布与画布不同,曲线也能保持形状。

五个文件都加载相同的两行;如果把代码复制到自己的文档中,也需要这两行:

\usepackage{chemfig}
\usetikzlibrary{arrows.meta,decorations.pathmorphing}

1. 甲烷的自由基氯代

自由基链反应的经典入门示例,分四步:

  • 链引发:光使 Cl–Cl 键均匀断裂(均裂)。两个鱼钩箭头从键出发,分别指向两个氯原子。
  • 链增长 1:氯原子从甲烷夺取一个氢。Cl• 的一个电子和 C–H 键的一个电子形成新的 H–Cl 键;C–H 的另一个电子留在碳上,成为甲基自由基。
  • 链增长 2:甲基自由基从 Cl2 夺取一个氯原子,并重新生成 Cl•,使循环再次开始。
  • 链终止:两个自由基结合,此处为 CH3• 和 Cl•。
下载 radical-chlorination-of-methane.tex

每一步都是独立的 \schemestart … \schemestop。链终止步骤展示了最难手写的部分:两个鱼钩箭头在它们所形成的键的中点相遇。

链引发

\setchemfig{atom sep=2.5em, + sep left=0.7em, + sep right=0.7em, compound sep=4em, arrow offset=6pt}
\schemestart
  \chemfig{@{a1}Cl-[@{b1}:0]@{a2}Cl}
  \arrow{->[h$\nu$]}
  \chemfig{\charge{90=\.}{Cl}}
  \+
  \chemfig{\charge{90=\.}{Cl}}
\schemestop
\chemmove{
  \draw[-{Straight Barb[left,length=4pt]}]([shift={(0.25em,-0.27em)}]b1) to[bend left=77,looseness=1.4] ([shift={(0.23em,-0.63em)}]a1);
  \draw[-{Straight Barb[left,length=4pt]}]([shift={(-0.25em,0.27em)}]b1) to[bend left=77,looseness=1.4] ([shift={(-0.23em,0.63em)}]a2);
}
chemfig,用 pdflatex 编译
甲烷的自由基氯代,链引发:这段 chemfig 代码用 pdflatex 编译的结果
MolDraw,粘贴同一段代码后
甲烷的自由基氯代,链引发:同一段 chemfig 代码粘贴到 MolDraw 中,布局和弯箭头相同

链增长 1:夺氢

\setchemfig{atom sep=2.5em, + sep left=0.7em, + sep right=0.7em, compound sep=4em, arrow offset=6pt}
\schemestart
  \chemfig{@{a1}\charge{90=\.}{Cl}}
  \+
  \chemfig{@{a2}H-[@{b1}:0]@{a3}CH_3}
  \arrow{->}
  \chemfig{HCl}
  \+
  \chemfig{\charge{90=\.}{C}H_3}
\schemestop
\chemmove{
  \path (a2) -- (a1) coordinate[pos=0.5] (m1);
  \draw[-{Straight Barb[left,length=4pt]}]([shift={(0em,1.71em)}]a1) to[bend left=65,looseness=1.2] ([shift={(0em,1.64em)}]m1);
  \path (a2) -- (a1) coordinate[pos=0.5] (m2);
  \draw[-{Straight Barb[left,length=4pt]}]([shift={(0em,-0.33em)}]b1) to[bend left=57,looseness=1.1] ([shift={(0em,-1.64em)}]m2);
  \draw[-{Straight Barb[left,length=4pt]}]([shift={(-0.45em,0.33em)}]b1) to[bend left=65,looseness=1.2] ([shift={(-0.83em,0.78em)}]a3);
}
chemfig,用 pdflatex 编译
甲烷的自由基氯代,链增长 1:夺氢:这段 chemfig 代码用 pdflatex 编译的结果
MolDraw,粘贴同一段代码后
甲烷的自由基氯代,链增长 1:夺氢:同一段 chemfig 代码粘贴到 MolDraw 中,布局和弯箭头相同

链增长 2:氯转移

\setchemfig{atom sep=2.5em, + sep left=0.7em, + sep right=0.7em, compound sep=4em, arrow offset=6pt}
\schemestart
  \chemfig{@{a1}\charge{90=\.}{C}H_3}
  \+
  \chemfig{@{a2}Cl-[@{b1}:0]@{a3}Cl}
  \arrow{->}
  \chemfig{H_3C-[:0]Cl}
  \+
  \chemfig{\charge{90=\.}{Cl}}
\schemestop
\chemmove{
  \path (a2) -- (a1) coordinate[pos=0.5] (m1);
  \draw[-{Straight Barb[left,length=4pt]}]([shift={(-0.55em,1.36em)}]a1) to[bend left=57,looseness=1.1] ([shift={(0em,0.87em)}]m1);
  \path (a2) -- (a1) coordinate[pos=0.5] (m2);
  \draw[-{Straight Barb[left,length=4pt]}]([shift={(0em,-0.27em)}]b1) to[bend left=57,looseness=1.1] ([shift={(0em,-0.87em)}]m2);
  \draw[-{Straight Barb[left,length=4pt]}]([shift={(-0.45em,0.27em)}]b1) to[bend left=77,looseness=1.4] ([shift={(-0.23em,0.63em)}]a3);
}
chemfig,用 pdflatex 编译
甲烷的自由基氯代,链增长 2:氯转移:这段 chemfig 代码用 pdflatex 编译的结果
MolDraw,粘贴同一段代码后
甲烷的自由基氯代,链增长 2:氯转移:同一段 chemfig 代码粘贴到 MolDraw 中,布局和弯箭头相同

链终止

\setchemfig{atom sep=2.5em, + sep left=0.7em, + sep right=0.7em, compound sep=4em, arrow offset=6pt}
\schemestart
  \chemfig{@{a1}\charge{90=\.}{C}H_3}
  \+
  \chemfig{@{a2}\charge{90=\.}{Cl}}
  \arrow{->}
  \chemfig{H_3C-[:0]Cl}
\schemestop
\chemmove{
  \path (a2) -- (a1) coordinate[pos=0.58] (m1);
  \draw[-{Straight Barb[left,length=4pt]}]([shift={(-0.55em,1.36em)}]a1) to[bend left=57,looseness=1.1] ([shift={(0em,0em)}]m1);
  \path (a1) -- (a2) coordinate[pos=0.5] (m2);
  \draw[-{Straight Barb[right,length=4pt]}]([shift={(0em,1.37em)}]a2) to[bend right=57,looseness=1.1] ([shift={(0em,1.31em)}]m2);
}
chemfig,用 pdflatex 编译
甲烷的自由基氯代,链终止:这段 chemfig 代码用 pdflatex 编译的结果
MolDraw,粘贴同一段代码后
甲烷的自由基氯代,链终止:同一段 chemfig 代码粘贴到 MolDraw 中,布局和弯箭头相同

在链终止的代码中,\path … coordinate 行在两个自由基之间设定一个点。由于它取的是两者距离的一个比例,即使你修改 + sep left 或键长,鱼钩箭头仍会在间隙中相遇。如果用相对于某个原子的固定偏移量,间距一变就会偏离间隙。

自由基点用 \charge{90=\.}{Cl} 书写:在 90° 方向、原子上方放一个单电子。对于 CH3•,点放在碳上,即 \charge{90=\.}{C}H_3,而不是放在整个基团上。

2. HBr 的反马氏加成(过氧化物效应)

有过氧化物存在时,HBr 以“相反”的方向加成到丙烯上:溴连在末端碳上。原因是链由 Br• 传递,它加成的位置会留下更稳定的仲自由基。

  • 链引发 1:二叔丁基过氧化物在较弱的 O–O 键处断裂。
  • 链引发 2:叔丁氧基自由基从 HBr 夺取 H,释放出 Br•。
  • 链增长 1:Br• 加成到 C=C 的 CH2 端。一个 π 电子进入新的 C–Br 键,另一个留在中间的碳上。
  • 链增长 2:该仲自由基从 HBr 夺取 H,生成 1-溴丙烷,并再次生成 Br•。
下载 anti-markovnikov-hbr-addition.tex

链引发:过氧化物均裂

\setchemfig{atom sep=2.5em, + sep left=0.7em, + sep right=0.7em, compound sep=4em, arrow offset=6pt}
\schemestart
  \chemfig{-[:23](-[:-69]@{a2}O-[@{b1}:-3]@{a1}O-[:-52](-[:43])(-[:-75])-[:-161])(-[:47])-[:133]}
  \arrow{->[h$\nu$ or $\Delta$]}[,1.3]
  \chemfig{\charge{90=\.}{O}-[:-12](-[:-36])(-[:82])-[:-122]}
  \+
  \chemfig{\charge{90=\.}{O}-[:-12](-[:-36])(-[:82])-[:-122]}
\schemestop
\chemmove{
  \draw[-{Straight Barb[left,length=4pt]}]([shift={(-0.24em,0.28em)}]b1) to[bend left=77,looseness=1.4] ([shift={(-0.23em,0.62em)}]a1);
  \draw[-{Straight Barb[left,length=4pt]}]([shift={(0.24em,-0.28em)}]b1) to[bend left=77,looseness=1.4] ([shift={(0.23em,-0.62em)}]a2);
}
chemfig,用 pdflatex 编译
HBr 的反马氏加成,链引发:过氧化物均裂:这段 chemfig 代码用 pdflatex 编译的结果
MolDraw,粘贴同一段代码后
HBr 的反马氏加成,链引发:过氧化物均裂:同一段 chemfig 代码粘贴到 MolDraw 中,布局和弯箭头相同

链引发:溴原子的生成

\setchemfig{atom sep=2.5em, + sep left=0.7em, + sep right=0.7em, compound sep=4em, arrow offset=6pt}
\schemestart
  \chemfig{@{a1}\charge{90=\.}{O}-[:-12](-[:-36])(-[:82]@{a3})-[:-122]}
  \+
  \chemfig{@{a2}H-[@{b1}:0,0.8]@{a4}Br}
  \arrow{->}
  \chemfig{HO-[:-12](-[:-36])(-[:82])-[:-122]}
  \+
  \chemfig{\charge{90=\.}{Br}}
\schemestop
\chemmove{
  \path (a2) -- (a3) coordinate[pos=0.7] (m1);
  \draw[-{Straight Barb[left,length=4pt]}]([shift={(0em,1.36em)}]a1) to[bend left=65,looseness=1.2] ([shift={(-0.08em,-0.19em)}]m1);
  \path (a2) -- (a1) coordinate[pos=0.5] (m2);
  \draw[-{Straight Barb[right,length=4pt]}]([shift={(0em,0.27em)}]b1) to[bend right=57,looseness=1.1] ([shift={(0em,0em)}]m2);
  \draw[-{Straight Barb[right,length=4pt]}]([shift={(-0.36em,-0.27em)}]b1) to[bend right=77,looseness=1.4] ([shift={(-0.11em,-0.63em)}]a4);
}
chemfig,用 pdflatex 编译
HBr 的反马氏加成,链引发:溴原子的生成:这段 chemfig 代码用 pdflatex 编译的结果
MolDraw,粘贴同一段代码后
HBr 的反马氏加成,链引发:溴原子的生成:同一段 chemfig 代码粘贴到 MolDraw 中,布局和弯箭头相同

链增长 1:Br• 加成到取代较少的碳上

\setchemfig{atom sep=2.5em, + sep left=0.7em, + sep right=0.7em, compound sep=4em, arrow offset=6pt}
\schemestart
  \chemfig{@{a1}\charge{90=\.}{Br}}
  \+
  \chemfig{@{a2}=[@{b1}:0]@{a3}-[:-60]}
  \arrow{->}
  \chemfig{-[:0]\charge{90=\.}{}-[:-60]-[:0]Br}
\schemestop
\chemmove{
  \path (a2) -- (a1) coordinate[pos=0.5] (m1);
  \draw[-{Straight Barb[left,length=4pt]}]([shift={(0em,1.37em)}]a1) to[bend left=65,looseness=1.2] ([shift={(-0.12em,0.87em)}]m1);
  \path (a2) -- (a1) coordinate[pos=0.5] (m2);
  \draw[-{Straight Barb[right,length=4pt]}]([shift={(0em,0.48em)}]b1) to[bend right=57,looseness=1.1] ([shift={(-0.12em,0.87em)}]m2);
  \draw[-{Straight Barb[right,length=4pt]}]([shift={(-0.45em,-0.48em)}]b1) to[bend right=65,looseness=1.2] ([shift={(-0.44em,-0.53em)}]a3);
}
chemfig,用 pdflatex 编译
HBr 的反马氏加成,链增长 1:Br• 加成到取代较少的碳上:这段 chemfig 代码用 pdflatex 编译的结果
MolDraw,粘贴同一段代码后
HBr 的反马氏加成,链增长 1:Br• 加成到取代较少的碳上:同一段 chemfig 代码粘贴到 MolDraw 中,布局和弯箭头相同

链增长 2:从 HBr 夺氢

\setchemfig{atom sep=2.5em, + sep left=0.7em, + sep right=0.7em, compound sep=4em, arrow offset=6pt}
\schemestart
  \chemfig{-[:0]@{a1}\charge{90=\.}{}-[:-60]-[:0]Br}
  \+
  \chemfig{@{a2}H-[@{b1}:0,0.8]@{a3}Br}
  \arrow{->}
  \chemfig{-[:0]-[:-60]-[:0]Br}
  \+
  \chemfig{\charge{90=\.}{Br}}
\schemestop
\chemmove{
  \path (a2) -- (a1) coordinate[pos=0.58] (m1);
  \draw[-{Straight Barb[left,length=4pt]}]([shift={(0em,1.36em)}]a1) to[bend left=57,looseness=1.1] ([shift={(0em,0em)}]m1);
  \path (a2) -- (a1) coordinate[pos=0.5] (m2);
  \draw[-{Straight Barb[right,length=4pt]}]([shift={(0em,0.27em)}]b1) to[bend right=57,looseness=1.1] ([shift={(0.05em,0.43em)}]m2);
  \draw[-{Straight Barb[right,length=4pt]}]([shift={(-0.36em,-0.27em)}]b1) to[bend right=77,looseness=1.4] ([shift={(-0.11em,-0.63em)}]a3);
}
chemfig,用 pdflatex 编译
HBr 的反马氏加成,链增长 2:从 HBr 夺氢:这段 chemfig 代码用 pdflatex 编译的结果
MolDraw,粘贴同一段代码后
HBr 的反马氏加成,链增长 2:从 HBr 夺氢:同一段 chemfig 代码粘贴到 MolDraw 中,布局和弯箭头相同

链增长 2 中的自由基位于键线式的碳上,没有可以挂点的字母。chemfig 用 \charge{90=\.}{} 处理这种情况:对空原子使用 \charge,键仍在顶点处相交。

鱼钩箭头既可以从点出发,也可以从键出发。在链增长 1 中,箭头从 C=C 键出发,该键用 =[@{b3}:0] 命名。

3. 碱催化的羟醛加成

使用双电子箭头的极性机理,分三步:

  1. 氢氧根夺取丙酮的 α-氢,生成烯醇负离子。这一步是平衡(\arrow{<=>})。
  2. 烯醇负离子的碳进攻乙醛的羰基碳,C=O 的 π 电子移到氧上。
  3. 烷氧负离子从水中夺取质子,生成 β-羟基酮并重新生成氢氧根。
下载 base-catalysed-aldol-addition.tex

1. 烯醇负离子的生成

\setchemfig{atom sep=2.5em, + sep left=0.7em, + sep right=0.7em, compound sep=4em, arrow offset=6pt}
\schemestart
  \chemfig{@{a1}HO^{-}}
  \+
  \chemfig{-[:0](-[:-60]@{a3}-[@{b1}:0,0.8]@{a2}H)=[:60]O}
  \arrow{<=>}
  \chemfig{-[:0](-[:-60]\charge{300:4pt=$\scriptstyle-$}{})=[:60]O}
  \+
  \chemfig{H_2O}
\schemestop
\chemmove{
  \draw[-{Stealth[length=4pt,inset=1.5pt]}]([shift={(1.88em,0em)}]a1) to[bend right=47] ([shift={(-0.69em,-0.4em)}]a2);
  \draw[-{Stealth[length=4pt,inset=1.5pt]}]([shift={(0.2em,0.27em)}]b1) to[bend right=65,looseness=1.2] ([shift={(0.17em,0.47em)}]a3);
}
chemfig,用 pdflatex 编译
碱催化的羟醛加成,1. 烯醇负离子的生成:这段 chemfig 代码用 pdflatex 编译的结果
MolDraw,粘贴同一段代码后
碱催化的羟醛加成,1. 烯醇负离子的生成:同一段 chemfig 代码粘贴到 MolDraw 中,布局和弯箭头相同

2. 对醛的亲核加成

\setchemfig{atom sep=2.5em, + sep left=0.7em, + sep right=0.7em, compound sep=4em, arrow offset=6pt}
\schemestart
  \chemfig{-[:0](-[:-60]@{a1}\charge{300:4pt=$\scriptstyle-$}{})=[:60]O}
  \+
  \chemfig{@{a3}O=[@{b1}:60]@{a2}-[:0]}
  \arrow{->}
  \chemfig{O=[:0](-[:-60])-[:60]-[:0](-[:60])-[:-60]O^{-}}
\schemestop
\chemmove{
  \draw[-{Stealth[length=4pt,inset=1.5pt]}]([shift={(0.39em,1.07em)}]a1) to[bend left=57,looseness=1.1] ([shift={(-0.65em,0.38em)}]a2);
  \draw[-{Stealth[length=4pt,inset=1.5pt]}]([shift={(0.64em,0.15em)}]b1) to[bend left=77,looseness=1.4] ([shift={(0.64em,0em)}]a3);
}
chemfig,用 pdflatex 编译
碱催化的羟醛加成,2. 对醛的亲核加成:这段 chemfig 代码用 pdflatex 编译的结果
MolDraw,粘贴同一段代码后
碱催化的羟醛加成,2. 对醛的亲核加成:同一段 chemfig 代码粘贴到 MolDraw 中,布局和弯箭头相同

3. 烷氧负离子的质子化

\setchemfig{atom sep=2.5em, + sep left=0.7em, + sep right=0.7em, compound sep=4em, arrow offset=6pt}
\schemestart
  \chemfig{O=[:0](-[:-60])-[:60]-[:0](-[:60])-[:-60]@{a1}O^{-}}
  \+
  \chemfig{@{a3}HO-[@{b1}:90,0.8,2]@{a2}H}
  \arrow{->}
  \chemfig{O=[:0](-[:-60])-[:60]-[:0](-[:60])-[:-60]OH}
  \+
  \chemfig{HO^{-}}
\schemestop
\chemmove{
  \draw[-{Stealth[length=4pt,inset=1.5pt]}]([shift={(0.62em,1.07em)}]a1) to[bend left=40] ([shift={(-0.72em,0.26em)}]a2);
  \draw[-{Stealth[length=4pt,inset=1.5pt]}]([shift={(0.27em,0.36em)}]b1) to[bend left=77,looseness=1.4] ([shift={(1.01em,0.11em)}]a3);
}
chemfig,用 pdflatex 编译
碱催化的羟醛加成,3. 烷氧负离子的质子化:这段 chemfig 代码用 pdflatex 编译的结果
MolDraw,粘贴同一段代码后
碱催化的羟醛加成,3. 烷氧负离子的质子化:同一段 chemfig 代码粘贴到 MolDraw 中,布局和弯箭头相同

这里每个箭头都是完整箭头。每一步有两个箭头:一个形成键,另一个断裂键并把电子带到原子上。第二种箭头从键(b1)出发,终止于原子。

烯醇负离子的负电荷位于键线式的碳上。它的写法与示例 2 中的自由基相同,即对空原子使用 \charge,这样键就不会因为“−”标签而被截短。

4. 叔丁醇的 E1 脱水:分多行排列的单个反应式

前三个示例把每一步放在各自的标题下。你也可以像许多教材那样,把整个机理画成一个连续的反应式,并自动换行:

  1. OH 基团从 H3O+ 获得一个质子。
  2. 水离去,生成叔丁基碳正离子。这是慢步骤。
  3. 水从与 C+ 相邻的碳上夺取一个质子,C–H 的电子形成 2-甲基丙烯的 C=C 键。
下载 e1-dehydration-of-tert-butanol.tex

在 chemfig 中,每一行都是以箭头开头的独立反应式,因此条件始终和所属的箭头在一起:

完整反应式

\setchemfig{atom sep=2.5em, + sep left=0.7em, + sep right=0.7em, compound sep=4em, arrow offset=6pt}
{\centering \textbf{Acid-catalysed dehydration of tert-butanol (E1)}\par}
\par\bigskip
\vspace{0.9em}
\schemestart
  \chemfig{@{a1}H\charge{90=\:,-90=\:}{O}-[:-12](-[:-36])(-[:82])-[:-122]}
  \+
  \chemfig{@{a3}H_2O^{+}-[@{b1}:90,0.8,2]@{a2}H}
\schemestop
\par\bigskip
\schemestart
  \arrow{->[protonation]}[,1.6]
  \chemfig{@{a4}H_2O^{+}-[@{b2}:-12](-[:-36])(-[:82])-[:-122]}
  \+
  \chemfig{H_2O}
\schemestop
\par\bigskip
\schemestart
  \arrow{->[$-$H$_{2}$O][slow]}
  \chemfig{-[:0]\charge{120:4pt=$\scriptstyle+$}{}(-[@{b4}:-60]-[@{b3}:0,0.8]@{a6}H)-[:60]}
  \+
  \chemfig{@{a5}H_2\charge{90=\:,-90=\:}{O}}
\schemestop
\par\vspace{1.2em}
\par\bigskip
\schemestart
  \arrow{->[$-$H$^{+}$]}
  \chemfig{-[:0](=[:-60])-[:60]}
  \+
  \chemfig{H_3O^{+}}
\schemestop
\chemmove{
  \draw[-{Stealth[length=4pt,inset=1.5pt]}]([shift={(0.37em,1.21em)}]a1) to[bend left=40] ([shift={(-0.67em,0.56em)}]a2);
  \draw[-{Stealth[length=4pt,inset=1.5pt]}]([shift={(0.27em,0.36em)}]b1) to[bend left=77,looseness=1.4] ([shift={(1.19em,0.11em)}]a3);
  \draw[-{Stealth[length=4pt,inset=1.5pt]}]([shift={(0.19em,-0.31em)}]b2) to[bend left=77,looseness=1.4] ([shift={(0.66em,-0.63em)}]a4);
  \draw[-{Stealth[length=4pt,inset=1.5pt]}]([shift={(0.55em,-1.21em)}]a5) to[bend left=47] ([shift={(0.69em,-0.4em)}]a6);
  \draw[-{Stealth[length=4pt,inset=1.5pt]}]([shift={(0em,0.27em)}]b3) to[bend right=77,looseness=1.4] ([shift={(0.08em,0.33em)}]b4);
}
chemfig,用 pdflatex 编译
叔丁醇的 E1 脱水,完整反应式:这段 chemfig 代码用 pdflatex 编译的结果
MolDraw,粘贴同一段代码后
叔丁醇的 E1 脱水,完整反应式:同一段 chemfig 代码粘贴到 MolDraw 中,布局和弯箭头相同

两个值得借鉴的细节:

  • [,1.6] 使箭头长度变为正常的 1.6 倍,这样 protonation 一词能放在箭头上方,而不会碰到下一个结构。
  • 碳正离子写作 \charge{120:4pt=$\scriptstyle+$}{}:在距顶点 4 pt、键之间最宽的空隙处放一个小“+”。

5. 苯的亲电溴代

苯的 π 电子进攻(被 FeBr3 活化的)溴,生成 σ 络合物。随后溴离子夺取 sp3 碳上的质子,C–H 的电子使芳环恢复。

下载 bromination-of-benzene.tex

1. 进攻溴(σ 络合物)

\setchemfig{atom sep=2.5em, + sep left=0.7em, + sep right=0.7em, compound sep=4em, arrow offset=6pt}
\schemestart
  \chemfig{?[a]-[:90]=_[@{b1}:30]-[:-30]=_[:-90]-[:-150]?[a,{=_}]}
  \+
  \chemfig{@{a1}Br-[@{b2}:0]@{a2}Br}
  \arrow{->[FeBr$_{3}$]}[,1.1]
  \chemfig{?[a]=_[:90]-[:30](-[:90]Br)-[:-30]\charge{30:4pt=$\scriptstyle+$}{}-[:-90]=_[:-150]?[a]}
  \+
  \chemfig{Br^{-}}
\schemestop
\chemmove{
  \draw[-{Stealth[length=4pt,inset=1.5pt]}]([shift={(-0.13em,0.23em)}]b1) to[bend left=74,looseness=1.34] ([shift={(-0.13em,0.73em)}]a1);
  \draw[-{Stealth[length=4pt,inset=1.5pt]}]([shift={(-0.25em,-0.27em)}]b2) to[bend right=77,looseness=1.4] ([shift={(-0.23em,-0.63em)}]a2);
}
chemfig,用 pdflatex 编译
苯的溴代,1. 进攻溴(σ 络合物):这段 chemfig 代码用 pdflatex 编译的结果
MolDraw,粘贴同一段代码后
苯的溴代,1. 进攻溴(σ 络合物):同一段 chemfig 代码粘贴到 MolDraw 中,布局和弯箭头相同

2. 失去 H⁺ 使环恢复

\setchemfig{atom sep=2.5em, + sep left=0.7em, + sep right=0.7em, compound sep=4em, arrow offset=6pt}
\schemestart
  \chemfig{?[a]=_[:90]-[:30](-[:90]Br)(-[@{b2}:-30]\charge{30:4pt=$\scriptstyle+$}{}-[:-90]=_[:-150]?[a])-[@{b1}:30,0.8]@{a2}H}
  \+
  \chemfig{@{a1}Br^{-}}
  \arrow{->}
  \chemfig{?[a]-[:90]=_[:30](-[:90]Br)-[:-30]=_[:-90]-[:-150]?[a,{=_}]}
  \+
  \chemfig{HBr}
\schemestop
\chemmove{
  \draw[-{Stealth[length=4pt,inset=1.5pt]}]([shift={(-1.55em,0em)}]a1) to[bend right=51] ([shift={(0.73em,0.13em)}]a2);
  \draw[-{Stealth[length=4pt,inset=1.5pt]}]([shift={(-0.04em,-0.33em)}]b1) to[bend left=51] ([shift={(0.51em,-0.02em)}]b2);
}
chemfig,用 pdflatex 编译
苯的溴代,2. 失去 H⁺ 使环恢复:这段 chemfig 代码用 pdflatex 编译的结果
MolDraw,粘贴同一段代码后
苯的溴代,2. 失去 H⁺ 使环恢复:同一段 chemfig 代码粘贴到 MolDraw 中,布局和弯箭头相同

环使用绝对键角和钩子(?[a])书写,而不是 *6(…),因此每个环的朝向与画布上完全一致,每根环键都可以带一个 @{…} 名称供箭头使用。FeBr3 中的下标在 MolDraw 中输入为 FeBr₃,导出为 FeBr$_{3}$。

绘制你自己的机理

  1. 在 MolDraw 编辑器中画出各物种和反应箭头,或从其中一个文件开始:打开文件,全部复制,然后用 Ctrl+V 粘贴到画布上。
  2. 选择弯箭头工具。从孤对电子、电荷、自由基点或键拖动到接受电子的原子或键。对于单电子步骤,在箭头选项中选择 Fishhook (1e⁻)。
  3. 用文本工具在每一行上方添加步骤标题。
  4. 选择 Download → chemfig (.tex),或选择 Copy as chemfig (LaTeX),把代码粘贴到你自己的文档中。
  5. 编译两次。

你也可以询问编辑器中的 AI 助手,例如:“用鱼钩箭头画出甲苯苄位的自由基溴代,链引发、链增长和链终止分别放在标题下。”它会在画布上画出各步骤,你可以用同样的方式导出。

当你把 chemfig 粘贴回来时,MolDraw 会读取每个 \chemmove 箭头起止于哪个原子或键、是完整箭头还是鱼钩箭头、bend 弯向哪一侧以及弧度有多深。终止于两个原子之间 \path … coordinate 点的箭头会变成成键箭头,因此鱼钩箭头仍会在间隙中相遇。间距取自 \setchemfig(atom sep、compound sep、+ sep left/right、arrow offset),文字和线条以类似 LaTeX 的衬线字体和 chemfig 的细线宽绘制。MolDraw 仍会按自己的规则调整每个箭头,所以手写的 \draw 不必完美。

手动调整导出的代码

  • 弧度更平或更深:修改弯曲角度(用 bend left=40 代替 57),或删除 looseness。
  • 曲线弯向另一侧:交换 bend left 和 bend right。对于鱼钩箭头,还要同时交换箭头中的 [left] 和 [right],使倒钩保持在外侧。
  • 移动箭尾或箭头:编辑以 em 为单位的 shift。(0em,1em) 表示原子中心上方 1 em。
  • 鱼钩箭头的相遇点:修改 pos=0.58。0.5 正好位于两个原子的中点。
  • 行上方的空间:每个反应式前的 \vspace{…em} 为向上弯曲的箭头留出空间。如果箭头碰到标题,请把它调大。

常见问题

如何在 chemfig 中画鱼钩箭头?

用 @{…} 为两端命名,然后在 \chemmove 中用半箭头画出箭头:\draw[-{Straight Barb[left,length=4pt]}] (a1) to[bend left=50] (a2); 使用 [left] 或 [right],让倒钩位于曲线外侧。需要加载 TikZ 库 arrows.meta。

如何让两个鱼钩箭头在新键的中点相遇?

在 \chemmove 中用 \path (a1) -- (a2) coordinate[pos=0.5] (m1); 在两个原子之间设一个点,然后让两个鱼钩箭头都终止于 (m1)。无论 chemfig 如何排布反应式,这个点都会随原子移动。

在 chemfig 中如何在键线式的碳上加自由基点?

对空原子使用 \charge:\charge{90=\.}{}。键仍在顶点处相交,点位于顶点上方。对于有标签的原子,写成 \charge{90=\.}{Cl}。

为什么 PDF 中弯箭头的位置不对?

\chemmove 使用第一次 LaTeX 运行时保存的位置。请再编译一次。

我可以编辑这些示例吗?

可以。打开 .tex 文件,复制其内容并粘贴到 MolDraw 画布上。用鼠标修改结构或箭头,然后再次下载 chemfig (.tex)。

这些示例可以免费使用吗?

可以。可用于笔记、习题、学位论文和期刊论文。

相关指南

最后更新: