MolScript:用於反應式和彎箭頭機構的文字語言
簡答: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
逐行解釋:
title:在反應式上方加上標題。- 反應式行列出各個物種。
[OH-:1]是氫氧根,其氧原子的映射編號為 1;[CH3:2][Br:3]是溴甲烷,碳為 2,溴為 3。"hydroxide"是畫在結構下方的說明文字。->[SN2][acetone]是上下附文字的反應箭頭。 move :1 -> 1..2:原子 1 上的孤對電子(這裡是負電荷)移向 1 與 2 之間正在形成的鍵。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+]
彎箭頭: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..m | n 與 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 時會有真正的圓弧。 |
腳本如何變成圖
腳本每次都經過相同的步驟,所以同一個腳本總會得到同樣的圖:
- 讀取。腳本被拆成反應式行、move 行與指令。每個物種、運算子、說明文字與反應條件都會連同行號一起記錄。
- 檢查標籤。move 中用到的每個映射編號都必須恰好出現在一個原子上,每個
n-m都必須是真實存在的鍵,每個起點都必須有可提供的電子:孤對電子、電荷、自由基或化學鍵。 - 繪製物種。每個 SMILES 都會變成鍵角整齊的 2D 結構。箭頭需要的明確氫會畫成原子;電荷、孤對電子與自由基圓點則依 SMILES 的描述加上。
- 排版反應式。結構、加號與箭頭依實際寬度緊密排列,在反應箭頭處換行,反應條件與說明文字留有間距,確保文字不重疊。
- 放置彎箭頭。每個箭頭都從化學家會畫的位置離開其電子來源,並彎曲繞開化學鍵、標籤與其他箭頭(詳見下文)。
- 檢查化學。每一步含彎箭頭的反應都會依電子重新推演一遍:每個箭頭從孤對電子、自由基或化學鍵取走兩個電子(單鉤箭頭為一個),放到某個原子上或某個鍵中。得到的結構必須與箭頭後寫出的結構一致。產物錯誤(附原子與電荷差異)、碳上有十個電子、從已無電子的原子出發的箭頭、未成對的單鉤箭頭,或打斷 σ 鍵的共振箭頭,都會連同行號一起回報。
- 評分每個箭頭。每個放置好的箭頭都會依規則測量。在擁擠位置無法符合規則的箭頭仍會畫出,但會以警告回報。
- 交付可編輯物件。結果是一般的畫布內容:拖曳結構,箭頭會跟著移動;任何樣式都能重新設定並匯出。
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
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
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
自由基加成:單鉤箭頭
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
~> 畫出單鉤箭頭。終止於 1..2 的兩個箭頭在新鍵中點相遇。共振:烯醇離子
[CH2-:1][C:2](C)=[O:3] <-> C=C(C)[O-] move :1 -> 1-2 move 2-3 -> 3
<-> 是共振箭頭;彎箭頭顯示一種共振式如何變成另一種。以 MolScript 打造:完整的圖
MolDraw Templates 面板(左側工具列底部的按鈕)中的機構圖都是用 MolScript 撰寫的。Fischer 酯化、醛醇加成與 Grignard 加成的每一步都是一個簡短的腳本;範本再於周圍加上面板、步驟標籤、醒目標示圓圈與註解。由於這些步驟都是文字,每張圖中的每個箭頭都會像上面的範例一樣接受驗證。
MolScript 與 chemfig
chemfig 是大多數化學家用來排版結構與機構的 LaTeX 巨集套件。它在自己的用途上非常出色,MolScript 並不打算在 LaTeX 中取代它。兩者描述的是不同的東西:
| chemfig | MolScript | |
| 你描述的是 | 圖本身:每個鍵的角度和長度,然後是每個箭頭的錨點、偏移和彎曲。 | 化學本身:用 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 告訴我們。
試一試
- 開啟 MolDraw 與 AI 聊天,請它畫一個機構,例如「畫出 2-溴丙烷與氫氧根的 E2 機構」。聊天會撰寫 MolScript 並畫出來。
- 或者開啟左側工具列底部的 Templates,加入 Fischer 酯化、醛醇反應或 Grignard 反應的圖,或在 MolScript 分頁中撰寫自己的腳本:它會標示腳本語法、在你輸入時顯示問題,並在畫布上繪製出來。
- 像對待任何繪圖一樣拖曳、修改樣式或擴充結果,再下載為圖片或 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 會開源嗎?
這正是我們的計劃:語言、編譯器以及反應式與箭頭引擎將以開放框架的形式發布,讓其他畫布應用程式也能用來繪製反應與機構。路線圖列出了在那之前需要完成的工作。