MolScript:用于反应式和弯箭头机理的文本语言

发布:2026年10月17日 · 作者:Scidart Academy · 阅读时间:约 16 分钟
深色代码面板中的六行 MolScript,旁边是它画出的 SN2 步骤:氢氧根进攻溴甲烷,带两个弯箭头
六行 MolScript 就能画出完整的 SN2 步骤:结构、电荷、反应条件和两个弯箭头。

简答:MolScript 是一种用于反应式和电子转移机理的小型文本语言。每个物种写成 SMILES,物种之间用 +、->、<-> 或 <=> 连接,用原子映射编号标记箭头涉及的原子,每个弯箭头写一行 move。MolDraw 会画出结构、反应条件、孤对电子、电荷和每一个箭头,并在你看到之前按绘图规则校验每个箭头。结果是普通的、可编辑的画布内容,可以下载为图片,或下载为用于 LaTeX 的 chemfig 代码。

MolScript 一览

你要写的内容用 SMILES 表示物种,物种之间写运算符,反应条件写在箭头后的方括号里,电子转移写成 move 行。
功能一览排好版的反应式:结构、加号、反应箭头、平衡箭头或共振箭头、反应条件、说明文字、孤对电子、电荷、自由基圆点和弯箭头。
箭头类型双电子弯箭头(->)和单电子单钩箭头(~>),起点可以是孤对电子、电荷、自由基、原子或化学键,终点可以是原子、化学键或正在形成的化学键。
校验每个映射编号都必须存在且唯一;每个箭头都必须从有电子的地方出发;每个画出的箭头都会在间隙、指向、弯曲度和间距方面接受评判。问题会连同行号一起返回。
输出项可编辑的 MolDraw 画布对象;支持 MolDraw 的所有导出格式,包括用于 LaTeX 文档的 chemfig(.tex)。
目前的应用MolDraw AI 聊天通过编写 MolScript 来画机理,Templates 面板中的机理图也是用它构建的。
下一步面向画布应用的开放框架,以及任何助手都能加载的 AI 技能。参见路线图。

第一个脚本:SN2

氢氧根从背面进攻溴甲烷,溴离子在同一步离去。用 MolScript 写只需四行:

title: SN2 of bromomethane
[OH-:1] "hydroxide" + [CH3:2][Br:3] "bromomethane" ->[SN2][acetone] CO "methanol" + [Br-]
move :1 -> 1..2
move 2-3 -> 3
由 MolScript 绘制的溴甲烷 SN2 反应:一个弯箭头从氢氧根的电荷指向碳,另一个从 C–Br 键指向溴,反应箭头上方写 SN2,下方写 acetone
由 MolDraw 根据上面这四行绘制。

逐行解释:

  1. title: 在反应式上方添加标题。
  2. 反应式行列出各个物种。[OH-:1] 是氢氧根,其氧原子的映射编号为 1;[CH3:2][Br:3] 是溴甲烷,碳为 2,溴为 3。"hydroxide" 是画在结构下方的说明文字。->[SN2][acetone] 是上下带文字的反应箭头。
  3. move :1 -> 1..2:原子 1 上的孤对电子(这里是负电荷)移向 1 与 2 之间正在形成的键。
  4. move 2-3 -> 3:已有 C–Br 键的电子移向溴。

映射编号只是供你和箭头使用的标签。它们永远不会被画出来,也不会改变分子。

语言说明

物种与运算符

任何 SMILES 都可以作为物种。运算符两侧各留一个空格:

+共反应物或共产物之间的加号。用 + 连接的物种始终在同一行。
->反应箭头。
<=>平衡箭头(两个半箭头)。
<->共振箭头(双头箭头)。用于同一物种的共振式之间。
=>逆合成箭头。

箭头上方和下方的文字放在紧贴箭头的方括号里:->[NaBH4][MeOH, 0 °C]。如果只要下方文字,第一对方括号留空:->[][reflux]。物种后面用双引号括起的说明文字会画在该物种下方:CC(=O)O "acetic acid"。

多个步骤

以运算符开头的行会从上一个物种继续反应式,因此一个机理可以一行写一步,该步的箭头紧跟在下面:

title: SN1 of tert-butyl bromide
C[C:1](C)(C)[Br:2] ->[slow] C[C+:3](C)C + [Br-]
move 1-2 -> 2
-> C[C+:4](C)C + [OH2:5]
move :5 -> 5..4
->[fast] CC(C)(C)[OH2+]
由 MolScript 绘制的两步 SN1 机理:C–Br 键断裂、电子移向溴,电离生成叔丁基正离子,然后水进攻碳正离子
只在反应箭头处换行。把反应式带到下一行的箭头,是路线图中要改进的内容之一。

弯箭头:move 行

箭头涉及的每个原子都要在 SMILES 中带有映射编号:[OH-:1]、[CH3:2][Br:3],普通的氧写成 [O:4]。编号在整个脚本中必须唯一。然后:

move <from> -> <to>     two-electron curly arrow
move <from> ~> <to>     one-electron fish-hook

两端的写法相同:

:n原子 n 上的孤对电子。对于阴离子,箭头从负号出发,与化学工作者的画法一致。
n原子 n。自由基的箭头从其圆点出发。
n-m原子 n 与 m 之间已有的化学键。作为起点时,电子离开该键;作为终点时,电子使该键变成双键。
n..mn 与 m 之间正在形成的键(只能作终点)。箭头头部停在原子 m 旁边、朝向 n 的一侧。

多个箭头可以写在同一行,用分号分隔:move :1 -> 1..4; 4-2 -> 2-3; 3-5 -> 5。被转移的氢要显式写出,如 [H:5][O:6]CC,这样箭头才能从它的键出发。带映射编号的自由基中心要写明氢原子数,以保留其圆点:CC(C)(C)[OH0:1] 是叔丁氧基自由基。

箭头会自动放置。如果你想要特定的弯曲方式,可以在花括号中添加覆盖设置:move 2-3 -> 3 {bow=0.3 side=left}。

指令和注释

title: …反应式上方的标题。
per-row: 2 至 8反应式换行前每行的结构数(默认 4)。
layout: row、cycle、branch反应式形状:从左到右、催化循环,或一个反应物生成多个产物。
# …注释,直到行尾。SMILES 中的 #(三键)不是注释。

错误

问题会连同所在行一起、用通俗的语言返回,这样人或 AI 助手都可以修正该行并重新绘制:

line 1: put +, -> or <-> between "[O:1]C" and "[O:1]C"
line 3: no atom is tagged :9 in the SMILES (write it as [X:9])
line 4: n..m (a bond being formed) can only be the destination
line 5: a move needs -> (curly arrow) or ~> (fish-hook) between its ends
C (map 2) has no lone pair

少打字、多画图:名称、高亮和编号

只有当原子有歧义时才需要映射编号。在某一步反应物中只出现一次的元素可以直接用元素符号指代;在键端点中,只计算与另一端相连的原子。下面是完整的 SN1 机理,没有映射编号,化合物和步骤都已编号,各行来回蛇形排列:

title: SN1 with element ends, numbered, snake rows
number: both
wrap: snake
per-row: 3
CC(C)(C)Br ->[slow] C[C+](C)C + [Br-]
move C-Br -> Br
-> C[C+](C)C + O
move :O -> O..C+
->[fast] CC(C)(C)[OH2+]

C-Br 是唯一与溴相连的碳,C+ 按电荷选中正离子,:O 是该步中唯一氧原子的孤对电子。如果某元素出现两次,MolScript 会提示并要求使用映射编号。

h2原子 2 上的一个氢,会自动为你显式化:move :1 -> 1..h2; h2-2 -> 2-3。
let base = [OH-:1] "hydroxide"定义一次物种,之后写 $base 即可。
[OH]~C([H])([H])([H])~[Br] {ts}过渡态:~ 表示部分(虚线)键,{ts} 画出带 ‡ 的方括号,并把正在形成和断裂的键拉直。
{δ+=2 δ-=3}原子旁的部分电荷。
{highlight=2/3-4:blue}给原子 2 和 3–4 键加上高亮填充。
{ox=1:II}、{dative=1-2}用于有机金属步骤的氧化态和金属–配体键。
[Ph] [R1] [Nu-:1]画成标签的缩写和 R 基团。
->[{CC(=O)Cl}][AlCl3]在箭头上方画成结构的试剂。
layout: cycle催化循环;以第一个物种结尾即可闭合循环,导出为 chemfig 时带有真正的圆弧。

脚本如何变成图

脚本每次都经过相同的步骤,所以同一个脚本总是得到同样的图:

  1. 读取。脚本被拆分为反应式行、move 行和指令。每个物种、运算符、说明文字和反应条件都连同行号一起记录。
  2. 检查标签。move 中用到的每个映射编号都必须恰好出现在一个原子上,每个 n-m 都必须是真实存在的键,每个起点都必须有可给出的电子:孤对电子、电荷、自由基或化学键。
  3. 绘制物种。每个 SMILES 都变成键角规整的 2D 结构。箭头需要的显式氢会画成原子;电荷、孤对电子和自由基圆点按 SMILES 的描述添加。
  4. 排布反应式。结构、加号和箭头按实际宽度紧凑排列,在反应箭头处换行,反应条件和说明文字留出间距,确保文字不重叠。
  5. 放置弯箭头。每个箭头从化学工作者会画的位置离开其电子来源,并弯曲避开化学键、标签和其他箭头(详见下文)。
  6. 检查化学。每一步带弯箭头的反应都会按电子重新推演一遍:每个箭头从孤对电子、自由基或化学键取走两个电子(单钩箭头为一个),放到某个原子上或某个键中。得到的结构必须与箭头后面写出的结构一致。产物错误(附原子和电荷差异)、碳上有十个电子、从已无电子的原子出发的箭头、未成对的单钩箭头,或打断 σ 键的共振箭头,都会连同行号一起报告。
  7. 评判每个箭头。每个放置好的箭头都会按规则进行测量。在拥挤位置无法满足规则的箭头仍会画出,但会作为警告报告。
  8. 交付可编辑对象。结果是普通的画布内容:拖动结构,箭头会跟着走;可以重新设置任何样式并导出。

MolScript 遵循的箭头规则:

箭尾位于给出电子的孤对电子或负号、自由基圆点或化学键中点上,绝不压在原子标签上。
箭头停在接受电子的原子前一点,或停在正在形成的键的间隙中、朝向进攻原子的一侧。
弯曲向结构外侧弯曲,箭头角度保持一致;单钩箭头的单个倒钩始终位于曲线外侧。
间距与化学键、标签、电荷、圆点和其他箭头保持距离;指向同一目标的箭头呈扇形散开,而不是叠在一起。
长度过短难以辨认或过长难以追踪的箭头会被标记出来。

每当 MolDraw 更新时,MolScript 测试集中的每个参考机理都会被绘制出来,并按这些规则接受评判。目前共有 41 个机理、81 个弯箭头,全部通过了绘图规则和电子计数检查,Templates 中的图也同样如此。你可以在 MolScript 示例库中查看每一个。

例题

E2 消除:一步中的三个箭头

title: E2 elimination
[OH-:1] + [H:4][CH2:2][CH:3](C)[Br:5] ->[E2] C=CC + O + [Br-]
move :1 -> 1..4; 4-2 -> 2-3; 3-5 -> 5
由 MolScript 绘制的 E2 消除:氢氧根夺取氢,C–H 键变成 C=C π 键,C–Br 键断裂、电子移向溴
碱夺取氢,C–H 电子成为新的 π 键,溴离子离去。

迈克尔加成:贯穿共轭体系的一串箭头

title: Michael addition
[CH2-:1]C(C)=O + [CH2:2]=[CH:3][C:4](C)=[O:5] ->[1,4-addition] CC(=O)CCC=C(C)[O-]
move :1 -> 1..2; 2-3 -> 3-4; 4-5 -> 5
由 MolScript 绘制的迈克尔加成:烯醇负离子的碳进攻 β-碳,电子经 C=C 和 C=O 键移到氧上
2-3 -> 3-4 把 C=C 的 π 电子移入 C–C 键,使其成为双键。

Diels–Alder 反应:成环的箭头

title: Diels–Alder
[CH2:1]=[CH:2][CH:3]=[CH2:4] + [CH2:5]=[CH2:6] ->[Δ] C1CC=CCC1
move 1-2 -> 2-3; 3-4 -> 4..5; 5-6 -> 6..1
由 MolScript 绘制的 Diels–Alder 反应:丁二烯与乙烯经环状过渡态生成环己烯,周围有三个弯箭头
三个箭头中有两个终止于两分子之间正在形成的键上。

自由基加成:单钩箭头

title: Radical addition of Br• to propene
[Br:1] + [CH2:2]=[CH:3]C -> BrC[CH]C
move 1 ~> 1..2
move 2-3 ~> 1..2
move 2-3 ~> 3
由 MolScript 绘制的溴原子对丙烯的自由基加成,带三个单钩箭头:两个在新的 C–Br 键处相遇,一个指向将成为自由基的碳
~> 画出单钩箭头。终止于 1..2 的两个箭头在新键中点相遇。

共振:烯醇负离子

[CH2-:1][C:2](C)=[O:3] <-> C=C(C)[O-]
move :1 -> 1-2
move 2-3 -> 3
由 MolScript 绘制的烯醇负离子的两种共振式,带一个双头共振箭头和两个弯箭头
<-> 是共振箭头;弯箭头显示一种共振式如何变成另一种。

基于 MolScript:完整的图

MolDraw Templates 面板(左侧工具栏底部的按钮)中的机理图都是用 MolScript 编写的。Fischer 酯化、羟醛加成和格氏加成的每一步都是一个简短的脚本;模板再在其周围加上面板、步骤标签、高亮圆圈和注释。由于这些步骤都是文本,每幅图中的每个箭头都会像上面的示例一样接受校验。

Fischer 酯化模板:带氧原子追踪的总反应、五步弯箭头机理、要点和 Dean–Stark 装置
Fischer 酯化模板:一幅四面板图中包含五个 MolScript 步骤。

MolScript 与 chemfig

chemfig 是大多数化学工作者用来排版结构和机理的 LaTeX 宏包。它在自己的用途上非常出色,MolScript 并不打算在 LaTeX 中取代它。两者描述的是不同的东西:

chemfigMolScript
你描述的是图本身:每个键的角度和长度,然后是每个箭头的锚点、偏移和弯曲。化学本身:用 SMILES 表示的物种,以及哪些电子移到哪里。
排版手动完成,逐个结构、逐个反应式调整。自动完成:结构、行、反应条件和说明文字。
弯箭头命名点之间的 TikZ 路径;位置在第二次 LaTeX 编译时确定。映射编号之间的一行 move;自动放置并按绘图规则评判。
错误表现为一份看起来不对的 PDF。连同行号一起报告:缺少映射编号、起点没有电子、化学键不存在。
结果文档中的排版输出。可编辑的画布对象,外加图片、矢量和 chemfig 导出。
最适合在 LaTeX 文档中进行精细的排版控制。快速得到正确、整洁的机理,无论是手写还是由 AI 助手生成。

两者可以配合使用:用 MolScript 绘图,然后选择 Download → chemfig (.tex),即可得到用于文档的 chemfig 代码。chemfig 机理示例展示了这些代码的样子。

为什么用文本:MolScript 与 AI 助手

MolScript 的设计目标是让语言模型无需处理坐标就能画出机理:

  • 模型本来就擅长写 SMILES,所以每个物种都使用它们熟悉的表示法。
  • 原子映射让箭头没有歧义。“从原子 1 的孤对电子指向 1 与 2 之间正在形成的键”不会像“从氧指向碳的箭头”那样被放错位置。
  • 错误信息可以直接据此修正。收到 line 3: no atom is tagged :9 的模型可以修改第 3 行再试一次。
  • 几何不是模型的工作。弯曲、间隙和间距由引擎决定和检查,而这恰恰是模型最薄弱的地方。

MolDraw AI 聊天已经这样工作了:让它画“羟醛加成的机理”,它会在后台编写 MolScript。MolScript 还被打包成一个 AI 技能:一个文件夹,包含语言参考、能发现大多数错误的规则、41 个经过校验的示例和一个小型独立校验器。它教给助手的工作流程是:规划中间体、编写脚本、运行校验器、修正报告的每个问题,然后才给出回答,这样你看到的机理已经逐个电子核对过了。

为了衡量效果,我们准备了一个包含 41 个机理请求的评测集(例如“展示叔丁基正离子的 E1 去质子”“画出带氧化态的 Pd 交叉偶联循环”),每个请求都有参考脚本。一个回答最多得四分:能编译、电子守恒、得到正确产物、每个弯箭头都通过绘图规则。参考脚本得分为 100%。

路线图:从 MolDraw 功能到开放框架

我们计划把 MolScript、它的编译器以及反应式和箭头引擎作为开源框架发布,任何画布应用都可以用它来绘制反应和机理,并具有编程语言般的可靠性:有书面规范、输出稳定、错误可据以修正。以下是在发布之前需要完成的工作。

语言说明

物种、运算符、反应条件、说明文字、续行已完成
从孤对电子、电荷、自由基和化学键出发的双电子箭头和单钩箭头已完成
带版本号的规范(MolScript 1,molscript: 1),附正式语法和一致性测试集已完成
可复用的命名物种:let A = …,之后在后续步骤中写 $A已完成
方向提示:{rotate=90}、{flip}、{align=3}已完成
过渡态({ts}、用 ~ 表示部分键)、δ+ / δ−、方括号已完成
高亮({highlight=2/3-4:blue})、化合物和步骤编号(number: both)已完成
在箭头上方画成结构的试剂;缩写(Ph、Ts、Boc)和 R 基团已完成
能自行闭合的催化循环,每段圆弧上都有清晰的标签已完成
循环内的弯箭头、金属–配体键({dative=1-2})和氧化态({ox=1:II})已完成

准确性

标签存在、起点有电子、每个画出的箭头都通过几何规则已完成
电子计数:推算箭头所表示的产物,并与写出的产物进行比较已完成
每一步的电荷和原子守恒;八隅体、未成对单钩箭头和共振(σ 键)检查已完成
简化氢原子的写法:h2 表示原子 2 上的一个氢已完成
更少的映射编号:该步中唯一的元素即可直接使用(move C-Br -> Br)已完成

排版

按实际宽度紧凑排行;反应条件和说明文字永不重叠已完成
均衡换行(3 + 2,而不是 4 + 1),并按宽度换行(width:)已完成
行与行之间的连接更短:wrap: snake 让下一行反向排列,并用一个短的向下箭头连接已完成
网格布局(layout: grid),各行的列对齐已完成

框架

编译器和校验器作为独立软件包,不依赖 MolDraw 应用已完成
编译器与任意渲染器之间稳定、有文档的反应式格式已完成
输出到画布、SVG 和 PNG;chemfig 和 JSON 导出器已完成
用真正圆弧导出催化循环到 chemfig(并可导入回来)已完成
命令行工具:输入脚本,输出校验报告、图片或 chemfig 文件已完成
带版本的排版,升级后同一脚本的绘图保持不变已完成
编辑器支持:输入时即显示高亮和问题(Templates 中的 MolScript 标签页)已完成
编辑器中补全映射编号、选项和关键字(按 Tab 选第一个)已完成
公开的参考机理示例库,每个都自动校验已完成
示例库已有 41 个经过校验的机理;目标是扩充到数百个下一步
以开源方式发布软件包、技能和规范下一步

AI 技能

已用于 MolDraw AI 聊天,带行号的错误会反馈给模型已完成
打包好的技能:参考、规则、示例,以及助手在回答前可以运行的校验步骤已完成
包含 41 个机理提示的评测集,按化学正确性和箭头整洁度评分已完成
公布主流 AI 模型在评测集上的得分下一步

如果你从事教学、撰写论文或开发化学软件,并希望参与塑造这一项目,请通过 MolDraw 中的 Request feature 告诉我们。

试一试

  1. 打开 MolDraw 和 AI 聊天,请它画一个机理,例如“画出 2-溴丙烷与氢氧根的 E2 机理”。聊天会编写 MolScript 并画出来。
  2. 或者打开左侧工具栏底部的 Templates,添加 Fischer 酯化、羟醛反应或格氏反应的图,或者在 MolScript 标签页中编写自己的脚本:它会高亮脚本、在你输入时显示问题,并在画布上绘制出来。
  3. 像对待任何绘图一样拖动、修改样式或扩展结果,然后下载为图片或 chemfig。

问题与解答

什么是 MolScript?

MolScript 是一种用于反应式和弯箭头机理的简短文本语言。物种写成 SMILES,用 +、->、<-> 或 <=> 连接,每个弯箭头是原子映射编号之间的一行 move。MolDraw 会画出结构、反应条件、孤对电子、电荷和箭头,结果在画布上仍然可以编辑。

如何在 MolScript 中画弯箭头?

在 SMILES 中给箭头涉及的原子标上原子映射编号,例如 [OH-:1] 和 [CH3:2][Br:3],然后写 move :1 -> 1..2 表示原子 1 的孤对电子与原子 2 形成新键,再写 move 2-3 -> 3 表示 C–Br 键断裂、电子移向溴。

如何画单钩(单电子)箭头?

用 ~> 代替 ->:move 1-2 ~> 1 把原子 1 与原子 2 之间化学键的一个电子送到原子 1。两个终点在同一个正在形成的键(n..m)上的单钩箭头会在该键中点相遇。

MolScript 比 chemfig 更好吗?

它们解决的是不同的问题,并且可以配合使用。chemfig 是一个 LaTeX 宏包,你要在文档中亲手放置每一个键和箭头。MolScript 描述化学本身,排版和箭头几何交给 MolDraw,并由 MolDraw 校验每个箭头。任何 MolScript 绘图都可以下载为 chemfig 代码,用于 LaTeX 文档。

AI 助手能写 MolScript 吗?

能。MolDraw AI 聊天就是通过编写 MolScript 来画机理的,因为语言模型擅长写 SMILES,而原子映射让每个箭头端点都没有歧义。错误会连同行号一起返回,模型可以据此修正。我们还计划推出一个打包好的 AI 技能,供其他助手使用。

MolScript 会开源吗?

这是我们的计划:语言、编译器以及反应式和箭头引擎将作为开放框架发布,供其他画布应用用来绘制反应和机理。路线图列出了在此之前需要完成的工作。

相关指南

最后更新: