中日韓文排版指南
VMark 包含一套全面的中文、日文和韓文排版規則。這些工具有助於在混用中日韓文與拉丁字元時保持一致的版面。
韓文刻意不做處理
韓文使用原生的詞間空格,助詞直接接在前一個詞後面——寫作 VMark에는,絕不是 VMark 에는。在那裡插入空格是文法錯誤,而非排版偏好,因此諺文被排除在所有間距規則之外,也不參與全形標點轉換。韓文文字會原樣通過;只有其中的漢字會被格式化。
快速開始
使用格式 → 中日韓 → 格式化整個檔案,或按 Alt + Mod + Shift + F 格式化整份文件。
格式 → 中日韓 → 格式化選取範圍(Mod + Shift + F)會格式化選取範圍所跨越的區塊——游標或選取範圍觸及的整個段落、清單或表格,而不是選中的那幾個字元。中日韓間距是相鄰兩個字元之間邊界的屬性,半個詞的選取範圍不包含這樣的邊界,因此該命令指定的是要修正的區域,而不是要重寫的文字。沒有選取範圍時,它會格式化游標所在的區塊。
兩個命令保護的內容完全相同(見受保護的內容),因此先全選再按 Mod + Shift + F 是安全的。
格式化規則
1. 中日韓文與拉丁文間距
自動在中日韓文與拉丁字元/數字之間加入空格,包括帶正負號的數字(負號、正號、正負號)以及帶貨幣前綴的數字。
| 格式化前 | 格式化後 |
|---|---|
| 学习Python编程 | 学习 Python 编程 |
| 共100个 | 共 100 个 |
| 使用macOS系统 | 使用 macOS 系统 |
| 我有-1个 | 我有 -1 个 |
| 我有+1个 | 我有 +1 个 |
| 误差±5%范围 | 误差 ±5% 范围 |
| 中文-$100元 | 中文 -$100 元 |
| 范围-100到-200 | 范围 -100 到 -200 |
可辨識的正負號字元包括 ASCII 的 - +、全形的 - +、Unicode 減號 −,以及正負號 ±。只有後面緊接數字(或貨幣符號再接數字)時,正負號才會附著於該數字,因此中日韓文與拉丁文以連字號相連的識別字(例如 中文-Web)和中日韓文之間以連字號相連的詞組(例如 中文-我)都會保持原樣,5-10 這類範圍也會被保留。
什麼算中日韓文字、什麼算拉丁字元。 中日韓文字是指 Unicode 文字系統(script)屬於漢字、平假名、片假名或注音符號的字元。這包括較罕見的漢字區塊(擴充 A、輔助平面上的各個擴充區,以及相容表意文字)、疊字符號 々、表意數字零 〇、半形片假名,以及長音符號 ー。拉丁字元是指任何拉丁文字系統的字母,包括帶重音符號的字母,因此一個詞的兩側都會加上空格:
| 格式化前 | 格式化後 |
|---|---|
| 中文café中文 | 中文 café 中文 |
| 中文𠀀abc | 中文𠀀 abc |
| カタカナabc | カタカナ abc |
| 日本・東京 | 日本・東京 |
全形拉丁字母(A)自帶間距,因此永遠不會加上空格。片假名中點 ・ 是標點而非字母,因此不會在它旁邊加入空格。
連結。 只有當連結的可見文字以拉丁字母或數字結尾時,連結的右括號才會與其後的中日韓文字隔開——那正是讀者看到的間隙。参见[link](https://x.com)中文 會變成 参见[link](https://x.com) 中文;参见[中文](https://x.com)中文 則保持不變。
2. 全形標點
在中日韓文語境中將半形標點轉換為全形。
| 格式化前 | 格式化後 |
|---|---|
| 你好,世界 | 你好,世界 |
| 什么? | 什么? |
| 注意:重要 | 注意:重要 |
3. 全形字元轉換
將全形字母和數字轉換為半形。
| 格式化前 | 格式化後 |
|---|---|
| 1234 | 1234 |
| ABC | ABC |
4. 括號轉換
在包圍中日韓文內容時,將半形括號轉換為全形。兩個括號必須位於同一段落:中間隔著空行時,保持輸入時的樣子。
| 格式化前 | 格式化後 |
|---|---|
| (注意) | (注意) |
| [重点] | 【重点】 |
| (English) | (English) |
5. 破折號轉換
將雙連字號轉換為正確的中日韓文破折號。
| 格式化前 | 格式化後 |
|---|---|
| 原因--结果 | 原因 —— 结果 |
| 说明--这是 | 说明 —— 这是 |
6. 智慧引號轉換
VMark 使用堆疊式引號配對演算法,能正確處理:
- 撇號:如
don't、it's、l'amour等縮寫會被保留 - 所有格:
Xiaolai's保持不變 - 英呎英寸符號:如
5'10"(英呎/英寸)的測量值會被保留 - 年代:如
'90s等縮寫會被識別 - 中日韓文語境偵測:包圍中日韓文內容的引號使用彎引號/角括號
| 格式化前 | 格式化後 |
|---|---|
| 他说"hello" | 他说 “hello” |
| "don't worry" | “don't worry” |
| 5'10" tall | 5'10" tall |
彎引號緊鄰中日韓文字時會加空格:他说"hello" 會變成 他说 “hello”。直角引號(「 」、『 』)和句末標點旁不加空格。若要讓彎引號緊排,可在 設定 → 語言 → 中日韓格式化 中關閉 修正雙引號間距 或 修正單引號間距:“ ” 與 ‘ ’ 在中日韓語境中是全形字元,GB/T 15834 與 JLREQ 都把這個空隙視為字形的一部分——這兩個開關正是為此而設。
啟用角括號選項時:
| 格式化前 | 格式化後 |
|---|---|
| "中文内容" | 「中文内容」 |
| 「包含'嵌套'」 | 「包含『嵌套』」 |
7. 省略號標準化
統一省略號格式,並採用周圍文字系統所使用的形式。這裡沒有唯一的正確答案:中文(GB/T 15834)與日文(JIS X 4051)使用六點省略號 ……,且後面不加空格;韓文使用 …;只有拉丁文字使用 ... 並在後面加一個空格。
| 格式化前 | 格式化後 |
|---|---|
| 等等. . . | 等等…… |
| 然后...继续 | 然后……继续 |
| そして...続く | そして……続く |
| 그리고...계속 | 그리고…계속 |
| wait...ok | wait... ok |
文字系統是依據緊鄰這些點的字元來判斷,而不是依據整份文件,因此中文檔案裡英文引文中的 ... 會保留拉丁形式。
8. 重複標點
限制連續的標點符號數量(可設定上限)。
| 格式化前 | 格式化後(上限=1) |
|---|---|
| 太棒了!!! | 太棒了! |
| 真的吗??? | 真的吗? |
9. 其他清理
- 多個空格壓縮:
多个 空格→多个 空格 - 移除行尾空白
- 斜線間距:
A / B→A/B - 貨幣與單位結合:
$ 100→$100、100 %→100%。只會移除空格與 Tab:一行或一個段落結尾的數字,永遠不會與下一行的單位或貨幣接合,而你在數字與單位之間輸入的不換行空格會被保留
受保護的內容
以下內容不受格式化影響:
- 程式碼區塊(```)——包括未閉合的圍欄,依照 CommonMark 規範,它會占據文件的其餘部分
- 行內程式碼(`)
- 連結 URL
- 圖片路徑
- HTML 標籤
- 前置資料——包括 YAML(
---)與 TOML(+++) - 行內數學公式(
$…$),比對規則與 VMark 渲染器相同,因此像价格是 $100 和 $200 元這樣的貨幣數字組合不會被誤認為數學公式 - 區塊數學公式(
$$…$$) - 縮排程式碼區塊
- Wiki 連結(
[[target]]、[[target|display]]) - 註腳標記——如
[^1]的引用,以及定義中的[^1]:標籤(定義本身的文字仍會被格式化) - HTML 字元參照(
&、其) - 分隔線(
---、***) - 反斜線跳脫的標點(例如
\,保持為,)
技術結構
VMark 的拉丁文 Span 掃描器會自動偵測並保護技術結構,防止標點轉換:
| 類型 | 範例 | 保護 |
|---|---|---|
| URL | https://example.com | 所有標點保留 |
| 電子郵件 | user@example.com | @ 和 . 保留 |
| 版本號 | v1.2.3、1.2.3.4 | 句點保留 |
| 小數 | 3.14、0.5 | 小數點保留 |
| 時間 | 12:30、1:30:00 | 冒號保留 |
| 千位分隔 | 1,000、1,000,000 | 逗號保留 |
| 網域 | example.com | 句點保留 |
範例:
| 格式化前 | 格式化後 |
|---|---|
| 版本v1.2.3发布 | 版本 v1.2.3 发布 |
| 访问https://example.com获取 | 访问 https://example.com 获取 |
| 温度是3.14度 | 温度是 3.14 度 |
反斜線跳脫
在任何標點前加入 \ 可防止轉換:
| 輸入 | 輸出 |
|---|---|
价格\,很贵 | 价格,很贵(逗號保持半形) |
测试\.内容 | 测试.内容(句號保持半形) |
AI 輔助格式化
當 MCP 伺服器已連線時,AI 助理可以透過 document.transform 工具以程式方式套用中日韓文格式化,kind 參數可選下列三個值之一:
"cjk-format"——完整的中日韓文標準化(間距 + 標點 + 智慧引號),與選單命令執行的是同一個格式化器,並遵循你在設定 → 語言中的設定"cjk-spacing"——只在中日韓文字元與拉丁字母或數字相鄰之處插入一個空格,其他一概不動"cjk-punctuation"——將緊鄰中日韓文字元的半形,.!?;:()轉換為對應的全形形式;絕不會將全形轉回半形
只有 cjk-format 會讀取你的格式化設定。cjk-spacing 與 cjk-punctuation 是固定規則,會忽略這些設定;而且與格式化器不同,它們也會將韓文諺文視為中日韓文字。三者都作用於文件的 Markdown 原始碼,且不會更動受保護的內容。
完整的請求格式請參見 MCP 工具參考——document.transform 接收 tabId、kind 及用於樂觀並行控制的 expected_revision。
設定
中日韓文格式化選項可在設定 → 語言中設定:
- 啟用/停用特定規則
- 設定標點重複次數上限
- 選擇引號樣式(標準或角括號)
情境式引號
啟用情境引號時(預設):
- 包圍中日韓文內容的引號 → 彎引號
"" - 包圍純拉丁文內容的引號 → 直引號
""
這樣既能保留英文文字的自然外觀,又能正確格式化中日韓文內容。
中日韓文角括號 (預設關閉)
啟用中日韓書名號時,包圍中日韓文內容的彎引號會被轉換為角括號(主要層級為 「」,巢狀層級為 『』)——此為直排中日韓文排版上傳統的引號形式。無論此設定為何,拉丁文內容皆保留標準彎引號。
參考章節跳過
在設定 → 語言 → 章節處理中啟用略過參考章節時(預設關閉),中日韓文格式化器會偵測「References」/「Further Reading」/「参考文献」/「参考资料」/「Bibliography」等標題,並跳過這些章節中的格式化處理——引用格式的文字常依賴特定標點,而中日韓文規則原本會將其標準化。撰寫學術文件時請開啟此選項;若要格式化整個檔案,則保持關閉。
完整性驗證
每次中日韓文格式化之後,格式化器會比對文件前後的內容骨架:去掉空白與標點、並統一字元寬度之後的文字。所有格式化規則改動的只有空白、標點或英數字的寬度,因此這個骨架必須原樣返回——而且它是一個序列而非計數,所以內容被重新排序也會被發現。字母、數字、漢字、假名、諺文和表情符號都計入其中。
若檢查失敗,文件完全不會被修改,並會跳出通知告知。拒絕執行絕不會默默發生,也絕不會與「本來就沒有需要修改的地方」混為一談。
中日韓文字距
VMark 包含專用的中日韓文字距功能,透過在字元之間加入細微間距來提升可讀性。
設定
在設定 → 編輯器 → 字型排版 → 中日韓字距中設定:
| 選項 | 值 | 說明 |
|---|---|---|
| 關閉 | 0 | 無字距(預設) |
| 細微 | 0.02em | 幾乎不可察覺的間距 |
| 輕微 | 0.03em | 輕微間距 |
| 一般 | 0.05em | 大多數使用情境的建議值 |
| 寬鬆 | 0.08em | 較明顯的間距 |
| 更寬 | 0.10em | 再寬一些,適合大字級顯示 |
| 特寬 | 0.12em | 最寬的設定 |
運作原理
- 對中日韓文字元段落套用 letter-spacing CSS
- 排除程式碼區塊和行內程式碼
- 在所見即所得和匯出的 HTML 中均有效
- 對拉丁文字或數字無影響
範例
無字距:
这是一段中文文字,没有任何字间距。
0.05em 字距:
这 是 一 段 中 文 文 字 , 有 轻 微 的 字 间 距 。
差異雖然細微,但能提升可讀性,在較長的段落中尤其明顯。
智慧引號樣式
VMark 可以自動將直引號轉換為排版正確的智慧引號。此功能在中日韓文格式化時運作,並支援多種引號樣式。
引號樣式
| 樣式 | 雙引號 | 單引號 |
|---|---|---|
| 彎引號 | "text" | 'text' |
| 角括號 | 「text」 | 『text』 |
| 書名號引號 | «text» | ‹text› |
堆疊式配對演算法
VMark 使用精密的堆疊式演算法進行引號配對:
- 分詞:識別文字中所有的引號字元
- 分類:根據上下文判斷每個引號是左引號還是右引號
- 撇號偵測:識別縮寫(don't、it's)並保留
- 英呎英寸符號偵測:識別測量值(5'10")並保留
- 中日韓文語境偵測:檢查引號內容是否涉及中日韓文字元
- 孤立引號清理:妥善處理不成對的引號;段落結尾仍未閉合的引號保持不成對,因此引號絕不會跨越空行配對
範例
| 格式化前 | 格式化後(彎引號) |
|---|---|
| "hello" | "hello" |
| 'world' | 'world' |
| it's | it's |
| don't | don't |
| 5'10" | 5'10" |
| '90s | '90s |
縮寫中的撇號(如「it's」或「don't」)會被正確保留。
在游標處切換引號樣式
無需重新格式化整份文件,即可快速切換現有引號的樣式。將游標置於任意引號對內,按 Shift + Mod + ' 切換。此功能僅適用於所見即所得模式;原始碼模式沒有引號切換功能。
簡易模式(預設):在直引號與偏好的樣式之間切換。
| 切換前 | 切換後 | 再次切換 |
|---|---|---|
| "hello" | "hello" | "hello" |
| 'world' | 'world' | 'world' |
完整循環模式:依序循環四種樣式。
| 步驟 | 雙引號 | 單引號 |
|---|---|---|
| 1 | "text" | 'text' |
| 2 | "text" | 'text' |
| 3 | 「text」 | 『text』 |
| 4 | «text» | ‹text› |
| 5 | "text"(回到起始) | 'text' |
巢狀引號:當引號巢狀時,此命令會切換包圍游標的最內層引號對。
智慧偵測:撇號(don't)、英呎英寸符號(5'10")和年代縮寫('90s)永遠不會被視為引號對。
TIP
在設定 → 語言 → 中日韓格式化 → 引號切換行為中,可在簡易模式和完整循環模式之間切換。
設定
在設定 → 語言 → 中日韓格式化中啟用智慧引號轉換。你也可以從下拉選單中選擇偏好的引號樣式。
中日韓文角括號轉換
啟用中日韓書名號時,包圍中日韓文內容的彎引號會自動轉換為角括號。
支援的字元
當引號內的內容——或緊鄰其旁的文字——屬於漢字、平假名、片假名或注音符號時,就會觸發角括號轉換:
| 內容類型 | 範例 | 是否轉換? |
|---|---|---|
| 中文 | "中文" | ✓ 「中文」 |
| 含漢字的日文 | "日本語" | ✓ 「日本語」 |
| 純平假名 | "ひらがな" | ✓ 「ひらがな」 |
| 純片假名 | "カタカナ" | ✓ 「カタカナ」 |
| 韓文 | "한글" | ✗ 保持為 "한글" |
| 英文 | "hello" | ✗ 保持為 "hello" |
韓文被排除的理由與間距規則相同:韓文使用 “ ”,而非角括號。
測試段落
將此未格式化的文字複製到 VMark,並按 Alt + Mod + Shift + F 進行格式化:
最近我在学习TypeScript和React,感觉收获很大.作为一个developer,掌握这些modern前端技术是必须的.
目前已经完成了3个projects,代码量超过1000行.其中最复杂的是一个dashboard应用,包含了数据可视化,用户认证,还有API集成等功能.
学习过程中遇到的最大挑战是--状态管理.Redux的概念. . .说实话有点难理解.后来换成了Zustand,简单多了!
老师说"don't give up"然后继续讲"写代码要注重可读性",我觉得很有道理.
访问https://example.com/docs获取v2.0.0版本文档,价格$99.99,时间12:30开始.
项目使用的技术栈如下:
- **Frontend**--React + TypeScript
- **Backend**--Node.js + Express
- **Database**--PostgreSQL
总共花费大约$200美元购买了学习资源,包括书籍和online courses.虽然价格不便宜,但非常值得.預期結果
格式化後,文字將如下所示:
最近我在学习 TypeScript 和 React,感觉收获很大。作为一个 developer,掌握这些 modern 前端技术是必须的。
目前已经完成了 3 个 projects,代码量超过 1000 行。其中最复杂的是一个 dashboard 应用,包含了数据可视化,用户认证,还有 API 集成等功能。
学习过程中遇到的最大挑战是 —— 状态管理。Redux 的概念……说实话有点难理解。后来换成了 Zustand,简单多了!
老师说 “don't give up” 然后继续讲 “写代码要注重可读性”,我觉得很有道理。
访问 https://example.com/docs 获取 v2.0.0 版本文档,价格 $99.99,时间 12:30 开始。
项目使用的技术栈如下:
- Frontend--React + TypeScript
- Backend--Node.js + Express
- Database--PostgreSQL
总共花费大约 $200 美元购买了学习资源,包括书籍和 online courses。虽然价格不便宜,但非常值得。
套用的變更:
- 加入中日韓文與拉丁文間距(学习 TypeScript)
- 轉換為全形標點(,。!)
- 標準化全形數字(3→3、1000→1000、200→200)
- 雙連字號轉換為破折號(是--状态 → 是 —— 状态)
- 省略號標準化為中文形式,且後面不加空格(. . . → ……)
- 套用智慧引號,與中日韓文字之間加空格,並保留撇號(don't)
- 技術結構受保護(https://example.com/docs、v2.0.0、$99.99、12:30)
以及不會改變的部分: **Frontend**--React 中的 -- 會保持為雙連字號。破折號轉換需要破折號旁緊鄰中日韓文字或英數字,而 * 兩者都不是。若改為在強調標記旁也觸發,就會把中文文件裡每個純英文清單項目中的 -- 都轉換掉,這比放著這三個不動還糟。