---
title: "chemfig 机理示例：多步机理、弯箭头与自由基鱼钩箭头 | MolDraw 博客"
url: https://www.moldraw.com/zh/blog/chemfig-mechanism-samples.html
description: "五个完整的 chemfig 示例，含 \\chemmove 弯箭头和鱼钩箭头：自由基氯代、反马氏 HBr 加成、羟醛加成、E1 和芳环溴代。可下载每个 .tex 文件，查看编译后的 PDF，并在 MolDraw 中编辑。"
lang: zh-CN
publisher: Scidart Academy
generated: 2026-10-26
---
# chemfig 机理示例：多步机理、弯箭头和自由基鱼钩箭头

发布：2026年10月17日 · 作者：Scidart Academy · 阅读时间：约 11 分钟

![深色代码面板中的 chemfig \chemmove 代码，旁边是氯自由基夺取甲烷氢原子的图，用三个鱼钩箭头绘制](https://www.moldraw.com/blog/thumbs/chemfig-mechanism-samples.webp)

带弯箭头和鱼钩箭头的多步机理和自由基机理，在 MolDraw 中绘制并导出为 chemfig。

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

## 五个示例

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

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

如果想描述化学过程而不是图形，可以用 [MolScript](https://www.moldraw.com/zh/blog/molscript-reaction-mechanism-language.html) 书写机理：物种用 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](https://www.moldraw.com/blog/chemfig-samples/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 编译的结果](https://www.moldraw.com/blog/images/chemfig-samples/radical-chlorination-of-methane-s1-latex.webp)

MolDraw，粘贴同一段代码后

![甲烷的自由基氯代，链引发：同一段 chemfig 代码粘贴到 MolDraw 中，布局和弯箭头相同](https://www.moldraw.com/blog/images/chemfig-samples/radical-chlorination-of-methane-s1-moldraw.webp)

### 链增长 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 编译的结果](https://www.moldraw.com/blog/images/chemfig-samples/radical-chlorination-of-methane-s2-latex.webp)

MolDraw，粘贴同一段代码后

![甲烷的自由基氯代，链增长 1：夺氢：同一段 chemfig 代码粘贴到 MolDraw 中，布局和弯箭头相同](https://www.moldraw.com/blog/images/chemfig-samples/radical-chlorination-of-methane-s2-moldraw.webp)

### 链增长 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 编译的结果](https://www.moldraw.com/blog/images/chemfig-samples/radical-chlorination-of-methane-s3-latex.webp)

MolDraw，粘贴同一段代码后

![甲烷的自由基氯代，链增长 2：氯转移：同一段 chemfig 代码粘贴到 MolDraw 中，布局和弯箭头相同](https://www.moldraw.com/blog/images/chemfig-samples/radical-chlorination-of-methane-s3-moldraw.webp)

### 链终止

```
\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 编译的结果](https://www.moldraw.com/blog/images/chemfig-samples/radical-chlorination-of-methane-s4-latex.webp)

MolDraw，粘贴同一段代码后

![甲烷的自由基氯代，链终止：同一段 chemfig 代码粘贴到 MolDraw 中，布局和弯箭头相同](https://www.moldraw.com/blog/images/chemfig-samples/radical-chlorination-of-methane-s4-moldraw.webp)

在链终止的代码中，`\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](https://www.moldraw.com/blog/chemfig-samples/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 编译的结果](https://www.moldraw.com/blog/images/chemfig-samples/anti-markovnikov-hbr-addition-s1-latex.webp)

MolDraw，粘贴同一段代码后

![HBr 的反马氏加成，链引发：过氧化物均裂：同一段 chemfig 代码粘贴到 MolDraw 中，布局和弯箭头相同](https://www.moldraw.com/blog/images/chemfig-samples/anti-markovnikov-hbr-addition-s1-moldraw.webp)

### 链引发：溴原子的生成

```
\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 编译的结果](https://www.moldraw.com/blog/images/chemfig-samples/anti-markovnikov-hbr-addition-s2-latex.webp)

MolDraw，粘贴同一段代码后

![HBr 的反马氏加成，链引发：溴原子的生成：同一段 chemfig 代码粘贴到 MolDraw 中，布局和弯箭头相同](https://www.moldraw.com/blog/images/chemfig-samples/anti-markovnikov-hbr-addition-s2-moldraw.webp)

### 链增长 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 编译的结果](https://www.moldraw.com/blog/images/chemfig-samples/anti-markovnikov-hbr-addition-s3-latex.webp)

MolDraw，粘贴同一段代码后

![HBr 的反马氏加成，链增长 1：Br• 加成到取代较少的碳上：同一段 chemfig 代码粘贴到 MolDraw 中，布局和弯箭头相同](https://www.moldraw.com/blog/images/chemfig-samples/anti-markovnikov-hbr-addition-s3-moldraw.webp)

### 链增长 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 编译的结果](https://www.moldraw.com/blog/images/chemfig-samples/anti-markovnikov-hbr-addition-s4-latex.webp)

MolDraw，粘贴同一段代码后

![HBr 的反马氏加成，链增长 2：从 HBr 夺氢：同一段 chemfig 代码粘贴到 MolDraw 中，布局和弯箭头相同](https://www.moldraw.com/blog/images/chemfig-samples/anti-markovnikov-hbr-addition-s4-moldraw.webp)

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

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

## 3. 碱催化的羟醛加成

使用双电子箭头的极性机理，分三步：

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

[下载 base-catalysed-aldol-addition.tex](https://www.moldraw.com/blog/chemfig-samples/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 编译的结果](https://www.moldraw.com/blog/images/chemfig-samples/base-catalysed-aldol-addition-s1-latex.webp)

MolDraw，粘贴同一段代码后

![碱催化的羟醛加成，1. 烯醇负离子的生成：同一段 chemfig 代码粘贴到 MolDraw 中，布局和弯箭头相同](https://www.moldraw.com/blog/images/chemfig-samples/base-catalysed-aldol-addition-s1-moldraw.webp)

### 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 编译的结果](https://www.moldraw.com/blog/images/chemfig-samples/base-catalysed-aldol-addition-s2-latex.webp)

MolDraw，粘贴同一段代码后

![碱催化的羟醛加成，2. 对醛的亲核加成：同一段 chemfig 代码粘贴到 MolDraw 中，布局和弯箭头相同](https://www.moldraw.com/blog/images/chemfig-samples/base-catalysed-aldol-addition-s2-moldraw.webp)

### 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 编译的结果](https://www.moldraw.com/blog/images/chemfig-samples/base-catalysed-aldol-addition-s3-latex.webp)

MolDraw，粘贴同一段代码后

![碱催化的羟醛加成，3. 烷氧负离子的质子化：同一段 chemfig 代码粘贴到 MolDraw 中，布局和弯箭头相同](https://www.moldraw.com/blog/images/chemfig-samples/base-catalysed-aldol-addition-s3-moldraw.webp)

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

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

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

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

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

[下载 e1-dehydration-of-tert-butanol.tex](https://www.moldraw.com/blog/chemfig-samples/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 编译的结果](https://www.moldraw.com/blog/images/chemfig-samples/e1-dehydration-of-tert-butanol-s1-latex.webp)

MolDraw，粘贴同一段代码后

![叔丁醇的 E1 脱水，完整反应式：同一段 chemfig 代码粘贴到 MolDraw 中，布局和弯箭头相同](https://www.moldraw.com/blog/images/chemfig-samples/e1-dehydration-of-tert-butanol-s1-moldraw.webp)

两个值得借鉴的细节：

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

## 5. 苯的亲电溴代

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

[下载 bromination-of-benzene.tex](https://www.moldraw.com/blog/chemfig-samples/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 编译的结果](https://www.moldraw.com/blog/images/chemfig-samples/bromination-of-benzene-s1-latex.webp)

MolDraw，粘贴同一段代码后

![苯的溴代，1. 进攻溴（σ 络合物）：同一段 chemfig 代码粘贴到 MolDraw 中，布局和弯箭头相同](https://www.moldraw.com/blog/images/chemfig-samples/bromination-of-benzene-s1-moldraw.webp)

### 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 编译的结果](https://www.moldraw.com/blog/images/chemfig-samples/bromination-of-benzene-s2-latex.webp)

MolDraw，粘贴同一段代码后

![苯的溴代，2. 失去 H⁺ 使环恢复：同一段 chemfig 代码粘贴到 MolDraw 中，布局和弯箭头相同](https://www.moldraw.com/blog/images/chemfig-samples/bromination-of-benzene-s2-moldraw.webp)

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

## 绘制你自己的机理

1. 在 [MolDraw 编辑器](https://www.moldraw.com/zh/)中画出各物种和反应箭头，或从其中一个文件开始：打开文件，全部复制，然后用 **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)。

### 这些示例可以免费使用吗？

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

## 相关指南

[chemfig 与 MolDraw：粘贴、编辑、导出](https://www.moldraw.com/zh/blog/chemfig-latex-moldraw-guide.html) [MolScript：用文本书写反应机理](https://www.moldraw.com/zh/blog/molscript-reaction-mechanism-language.html) [化学反应式绘制工具](https://www.moldraw.com/zh/tools/free-chem-tools/chemical-reaction-drawer.html) [添加孤对电子](https://www.moldraw.com/zh/blog/how-to-add-lone-pair-in-moldraw.html) [ChemDraw 与 MolDraw 对比](https://www.moldraw.com/zh/blog/chemdraw-vs-moldraw-free-alternative-guide.html) [全部文章](https://www.moldraw.com/zh/blog/)

最后更新：2026年10月17日
