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 電子成為新的 π 鍵,溴離子離去。

Michael 加成:貫穿共軛體系的一串箭頭

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 繪製的 Michael 加成:烯醇離子的碳進攻 β-碳,電子經 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 酯化、醛醇加成與 Grignard 加成的每一步都是一個簡短的腳本;範本再於周圍加上面板、步驟標籤、醒目標示圓圈與註解。由於這些步驟都是文字,每張圖中的每個箭頭都會像上面的範例一樣接受驗證。

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 酯化、醛醇反應或 Grignard 反應的圖,或在 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 會開源嗎?

這正是我們的計劃:語言、編譯器以及反應式與箭頭引擎將以開放框架的形式發布,讓其他畫布應用程式也能用來繪製反應與機構。路線圖列出了在那之前需要完成的工作。

相關指南

最後更新: