CJK フォーマットガイド
VMark には中国語、日本語、韓国語テキストの包括的なフォーマットルールセットが含まれています。これらのツールは、CJK とラテン文字を混在させる際に一貫したタイポグラフィを維持するのに役立ちます。
韓国語は意図的に対象外です
韓国語はネイティブの分かち書きを使い、助詞は直前の語に直接付きます——VMark에는 であり、VMark 에는 ではありません。そこにスペースを入れるのはタイポグラフィの好みではなく文法の誤りなので、ハングルはすべてのスペースルールと全角句読点の変換から除外されています。韓国語のテキストはそのまま通過し、その中の漢字だけがフォーマットされます。
クイックスタート
書式 → CJK → ファイル全体を書式設定 を使用するか、Alt + Mod + Shift + F を押してドキュメント全体をフォーマットします。
書式 → CJK → 選択範囲を書式設定(Mod + Shift + F)は選択範囲がまたぐブロック全体をフォーマットします——カーソルや選択範囲が触れている段落、リスト、表の全体であり、選択した文字だけではありません。CJK の字間は隣り合う 2 文字のあいだの境界に属する性質で、単語の一部を選んでもその境界は含まれません。そのためこのコマンドは、書き換える文字列ではなく修正する領域を指定します。選択範囲がない場合はカーソル位置のブロックをフォーマットします。
両方のコマンドが保護する対象は同一です(保護されるコンテンツを参照)。したがって全選択してから Mod + Shift + F を押しても安全です。
フォーマットルール
1. CJK-ラテン間のスペース
CJK 文字とラテン文字/数字の間に自動的にスペースを追加します。符号付きの数値(負、正、プラスマイナス)や、通貨記号が前に付いた数値も対象です。
| 変換前 | 変換後 |
|---|---|
| 学习Python编程 | 学习 Python 编程 |
| 共100个 | 共 100 个 |
| 使用macOS系统 | 使用 macOS 系统 |
| 我有-1个 | 我有 -1 个 |
| 我有+1个 | 我有 +1 个 |
| 误差±5%范围 | 误差 ±5% 范围 |
| 中文-$100元 | 中文 -$100 元 |
| 范围-100到-200 | 范围 -100 到 -200 |
認識される符号文字は、ASCII の - +、全角の - +、Unicode のマイナス −、プラスマイナス ± です。符号が数値に付くのは、直後に数字(または数字が続く通貨記号)がある場合だけです。そのため、CJK とラテン文字をハイフンでつないだ識別子(例:中文-Web)や CJK 同士をハイフンでつないだ語句(例:中文-我)はそのまま残り、5-10 のような範囲も保持されます。
何が CJK で、何がラテン文字か。 CJK 文字とは、Unicode のスクリプトで漢字、ひらがな、カタカナ、注音符号に分類される文字です。これには、まれな漢字ブロック(拡張 A、補助面の拡張、互換漢字)、踊り字 々、漢数字のゼロ 〇、半角カタカナ、長音符 ー も含まれます。ラテン文字とは、アクセント付きの文字を含む、ラテン文字のスクリプトに属するあらゆる文字です。そのため、単語の両側にスペースが入ります。
| 変換前 | 変換後 |
|---|---|
| 中文café中文 | 中文 café 中文 |
| 中文𠀀abc | 中文𠀀 abc |
| カタカナabc | カタカナ abc |
| 日本・東京 | 日本・東京 |
全角のラテン文字(A)はそれ自体に余白を持つため、スペースは入りません。カタカナの中点 ・ は文字ではなく句読点なので、その横にもスペースは追加されません。
リンク。 リンクの閉じ括弧と、それに続く CJK テキストの間にスペースが入るのは、リンクの表示テキストがラテン文字または数字で終わる場合だけです——それが読者に見える隙間だからです。参见[link](https://x.com)中文 は 参见[link](https://x.com) 中文 になり、参见[中文](https://x.com)中文 は変わりません。
2. 全角句読点
CJK コンテキストで半角句読点を全角に変換します。
| 変換前 | 変換後 |
|---|---|
| 你好,世界 | 你好,世界 |
| 什么? | 什么? |
| 注意:重要 | 注意:重要 |
3. 全角文字の変換
全角の文字と数字を半角に変換します。
| 変換前 | 変換後 |
|---|---|
| 1234 | 1234 |
| ABC | ABC |
4. 括弧の変換
CJK コンテンツを囲む半角括弧を全角に変換します。両方の括弧が同じ段落にある場合に限ります。空行をはさむ場合は入力したままになります。
| 変換前 | 変換後 |
|---|---|
| (注意) | (注意) |
| [重点] | 【重点】 |
| (English) | (English) |
5. ダッシュの変換
二重ハイフンを適切な CJK ダッシュに変換します。
| 変換前 | 変換後 |
|---|---|
| 原因--结果 | 原因 —— 结果 |
| 说明--这是 | 说明 —— 这是 |
6. スマート引用符の変換
VMark は スタックベースの引用符ペアリングアルゴリズム を使い、以下を正しく処理します:
- アポストロフィ:
don't、it's、l'amourなどの短縮形は保持されます - 所有格:
Xiaolai'sはそのまま保持されます - プライム:
5'10"(フィート/インチ)などの測定値は保持されます - 年代:
'90sなどの略語が認識されます - CJK コンテキスト検出: CJK コンテンツを囲む引用符はカーリー/角括弧引用符になります
| 変換前 | 変換後 |
|---|---|
| 他说"hello" | 他说 “hello” |
| "don't worry" | “don't worry” |
| 5'10" tall | 5'10" tall |
波括弧の引用符は、CJK 文字の隣でスペースが入ります:他说"hello" は 他说 “hello” になります。かぎ括弧(「 」、『 』)と終止句読点の隣には入りません。引用符を詰めて組む場合は、設定 → 言語 → CJK書式設定で 二重引用符のスペースを修正 または 一重引用符のスペースを修正 をオフにしてください。“ ” と ‘ ’ は CJK コンテキストでは全角で、GB/T 15834 も JLREQ もその隙間を字形の一部とみなします——これらのスイッチはそのためにあります。
角括弧オプションを有効にした場合:
| 変換前 | 変換後 |
|---|---|
| "中文内容" | 「中文内容」 |
| 「包含'嵌套'」 | 「包含『嵌套』」 |
7. 省略記号の正規化
省略記号の書式を、周囲のスクリプトが使う形に標準化します。唯一の正解はありません。中国語(GB/T 15834)と日本語(JIS X 4051)は 6 点の省略記号 …… を使い、その後にスペースを入れません。韓国語は … を使い、ラテン文字のテキストだけが ... の後にスペースを入れます。
| 変換前 | 変換後 |
|---|---|
| 等等. . . | 等等…… |
| 然后...继续 | 然后……继续 |
| そして...続く | そして……続く |
| 그리고...계속 | 그리고…계속 |
| wait...ok | wait... ok |
スクリプトはドキュメント全体ではなく、点のすぐ隣の文字から判断されます。そのため、中国語のファイル内の英語の引用にある ... はラテン文字の形のまま残ります。
8. 繰り返し句読点
連続する句読点の数を制限します(設定可能な制限)。
| 変換前 | 変換後(制限=1) |
|---|---|
| 太棒了!!! | 太棒了! |
| 真的吗??? | 真的吗? |
9. その他のクリーンアップ
- 複数のスペースを圧縮:
多个 空格→多个 空格 - 末尾の空白を削除
- スラッシュのスペース:
A / B→A/B - 通貨と単位の結合:
$ 100→$100、100 %→100%。削除されるのはスペースとタブだけです。ある行や段落の末尾にある数値が、次の行の単位や通貨と結合されることはなく、数値と単位の間に入力したノーブレークスペースは保持されます
保護されるコンテンツ
以下のコンテンツはフォーマットの影響を 受けません:
- コードブロック(```)— CommonMark の仕様どおりドキュメントの残り全体を占める、閉じられていないフェンスも含む
- インラインコード(`)
- リンク URL
- 画像パス
- HTML タグ
- フロントマター——YAML(
---)と TOML(+++)の両方 - インライン数式(
$…$)。VMark のレンダラーと同じルールで判定するため、价格是 $100 和 $200 元のような金額の組み合わせが数式と誤認されることはありません - ディスプレイ数式(
$$…$$) - インデントされたコードブロック
- Wiki リンク(
[[target]]、[[target|display]]) - 脚注マーカー——
[^1]のような参照と、定義の[^1]:ラベル(定義の本文自体はフォーマットされます) - HTML 文字参照(
&、其) - 区切り線(
---、***) - バックスラッシュでエスケープされた句読点(例:
\,は,のまま)
技術的な構文
VMark の ラテンスパンスキャナー は、句読点変換から技術的な構文を自動的に検出して保護します:
| タイプ | 例 | 保護 |
|---|---|---|
| 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 ツールに次の 3 つの kind 値のいずれかを指定して、CJK フォーマットをプログラム的に適用できます:
"cjk-format"——完全な CJK 正規化(スペース+句読点+スマート引用符)。メニューコマンドが実行するのと同じフォーマッターで、設定 → 言語 の設定に従います"cjk-spacing"——CJK 文字がラテン文字や数字と接する箇所にスペースを 1 つ挿入し、それ以外は何もしません"cjk-punctuation"——CJK 文字に隣接する半角の,.!?;:()を全角に変換します。全角を半角に戻すことはありません
フォーマット設定を読み取るのは cjk-format だけです。cjk-spacing と cjk-punctuation は設定を無視する固定ルールで、フォーマッターとは異なり、韓国語のハングルも CJK として扱います。3 つとも、ドキュメントの Markdown ソースに対して動作し、保護されるコンテンツ には手を加えません。
リクエストの完全な形については MCP ツールリファレンス を参照してください——document.transform は tabId、kind、楽観的な並行制御のための expected_revision を受け付けます。
設定
CJK フォーマットオプションは設定 → 言語で設定できます:
- 特定のルールの有効化/無効化
- 句読点の繰り返し制限の設定
- 引用符スタイルの選択(標準または角括弧)
コンテキスト引用符
コンテキストに応じた引用符 が有効(デフォルト)の場合:
- CJK コンテンツを囲む引用符 → カーリー引用符
"" - 純粋なラテンコンテンツを囲む引用符 → ストレート引用符
""
これにより、英語テキストの自然な外観を保ちながら、CJK コンテンツを適切にフォーマットします。
CJK 角括弧引用符 (デフォルトでオフ)
CJK隅括弧 が有効の場合、CJK コンテンツを囲むカーリー引用符は角括弧(プライマリは 「」、ネストは 『』)に変換されます——これは縦組み CJK 組版のタイポグラフィ的に伝統的な引用形式です。ラテンコンテンツは、この設定に関係なく標準のカーリー引用符のままです。
参考文献セクションのスキップ
設定 → 言語 → セクションの処理 で 参考文献セクションをスキップ を有効にすると(デフォルトはオフ)、CJK フォーマッターは「References」「Further Reading」「参考文献」「参考资料」「Bibliography」といった見出しを検出し、それらのセクションでは再フォーマットをスキップします——引用形式のテキストは、CJK ルールが正規化してしまう特定の句読点に依存していることが多いためです。学術文書ではオンにし、ファイル全体をフォーマットしたい場合はオフのままにしてください。
整合性検証
CJK フォーマットのたびに、フォーマッターは文書のコンテンツ・スケルトンを前後で比較します。空白と句読点を取り除き、文字幅を正規化したテキストです。すべての整形ルールが変更するのは空白・句読点・英数字の幅だけなので、このスケルトンは必ず一致して戻ってこなければなりません。しかも個数ではなく並びなので、内容の入れ替わりも検出できます。英字、数字、漢字、かな、ハングル、絵文字がすべて対象です。
チェックに失敗した場合、文書はまったく変更されず、その旨が通知されます。拒否が黙って起きることはなく、「変更すべき箇所がなかった」と混同されることもありません。
CJK 文字間隔
VMark には CJK テキスト専用の文字間隔機能が含まれており、文字間に微妙な間隔を追加することで可読性を向上させます。
設定
設定 → エディター → タイポグラフィ → CJK文字間隔 で設定します:
| オプション | 値 | 説明 |
|---|---|---|
| Off | 0 | 文字間隔なし(デフォルト) |
| Subtle | 0.02em | ほとんど気にならない間隔 |
| Light | 0.03em | 軽い間隔 |
| Normal | 0.05em | ほとんどの用途に推奨 |
| Wide | 0.08em | より顕著な間隔 |
| Wider | 0.10em | さらに広く、大きな表示サイズ向け |
| Extra | 0.12em | 最も広い設定 |
仕組み
- CJK 文字列に letter-spacing CSS を適用
- コードブロックとインラインコードは除外
- WYSIWYG モードとエクスポートされた HTML の両方で動作
- ラテン文字や数字には効果なし
例
文字間隔なし:
这是一段中文文字,没有任何字间距。
0.05em の文字間隔あり:
这 是 一 段 中 文 文 字 , 有 轻 微 的 字 间 距 。
違いは微妙ですが、特に長い文章では可読性が向上します。
スマート引用符スタイル
VMark は CJK フォーマット中にストレート引用符を正しいスマート引用符に自動変換できます。この機能は複数の引用符スタイルをサポートします。
引用符スタイル
| スタイル | ダブル引用符 | シングル引用符 |
|---|---|---|
| カーリー | "text" | 'text' |
| 角括弧 | 「text」 | 『text』 |
| ギュメ | «text» | ‹text› |
スタックベースのペアリングアルゴリズム
VMark は引用符のペアリングに洗練されたスタックベースのアルゴリズムを使用します:
- トークン化: テキスト内のすべての引用符文字を識別
- 分類: コンテキストに基づいて各引用符が開き引用符か閉じ引用符かを判断
- アポストロフィ検出: 短縮形(don't、it's)を認識して保持
- プライム検出: 測定値(5'10")を認識して保持
- CJK コンテキスト検出: 引用されたコンテンツに CJK 文字が含まれているか確認
- 孤立した引用符の処理: 対応する引用符がない場合を適切に処理。段落の終わりで開いたままの引用符は対になりません。そのため、空行をまたいで引用符が対になることはありません
例
| 変換前 | 変換後(カーリー) |
|---|---|
| "hello" | "hello" |
| 'world' | 'world' |
| it's | it's |
| don't | don't |
| 5'10" | 5'10" |
| '90s | '90s |
短縮形のアポストロフィ(「it's」や「don't」など)は正しく保持されます。
カーソル位置での引用符スタイルの切り替え
ドキュメント全体を再フォーマットせずに既存の引用符のスタイルをすばやく切り替えられます。任意の引用符ペア内にカーソルを置いて Shift + Mod + ' を押して切り替えます。これは WYSIWYG モードでのみ動作し、ソースモードには引用符の切り替えはありません。
シンプルモード(デフォルト):ストレート引用符と優先スタイルを切り替えます。
| 変換前 | 変換後 | 再変換後 |
|---|---|---|
| "hello" | "hello" | "hello" |
| 'world' | 'world' | 'world' |
フルサイクルモード: 4 つのスタイルをすべて循環します。
| ステップ | ダブル | シングル |
|---|---|---|
| 1 | "text" | 'text' |
| 2 | "text" | 'text' |
| 3 | 「text」 | 『text』 |
| 4 | «text» | ‹text› |
| 5 | "text"(最初に戻る) | 'text' |
ネストした引用符: 引用符がネストしている場合、コマンドはカーソルを囲む 最も内側の ペアを切り替えます。
スマート検出: アポストロフィ(don't)、プライム(5'10")、年代略語('90s)は引用符ペアとして処理されません。
TIP
シンプルモードとフルサイクルモードの切り替えは、設定 → 言語 → CJK書式設定 → クォート切り替えの動作で行います。
設定
設定 → 言語 → CJK書式設定でスマート引用符変換を有効にします。ドロップダウンメニューから好みの引用符スタイルも選択できます。
CJK 角括弧変換
CJK隅括弧 が有効の場合、CJK コンテンツを囲むカーリー引用符は自動的に角括弧に変換されます。
サポートされる文字
角括弧変換は、引用されたコンテンツ——またはそのすぐ隣のテキスト——が漢字、ひらがな、カタカナ、注音符号である場合にトリガーされます:
| コンテンツタイプ | 例 | 変換? |
|---|---|---|
| 中国語 | "中文" | ✓ 「中文」 |
| 漢字を含む日本語 | "日本語" | ✓ 「日本語」 |
| ひらがなのみ | "ひらがな" | ✓ 「ひらがな」 |
| カタカナのみ | "カタカナ" | ✓ 「カタカナ」 |
| 韓国語 | "한글" | ✗ "한글" のまま |
| 英語 | "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。虽然价格不便宜,但非常值得。
適用された変更:
- CJK-ラテン間のスペースを追加(学习 TypeScript)
- 全角句読点に変換(,。!)
- 全角数字を正規化(3→3、1000→1000、200→200)
- 二重ハイフンを全角ダッシュに変換(是--状态 → 是 —— 状态)
- 省略記号を中国語の形に正規化し、その後にスペースを入れない(. . . → ……)
- CJK テキストの横にスペースを入れてスマート引用符を適用、アポストロフィを保持(don't)
- 技術的な構文を保護(https://example.com/docs、v2.0.0、$99.99、12:30)
そして、変わらないもの: **Frontend**--React の -- は二重ハイフンのまま残ります。ダッシュの変換には、ダッシュのすぐ隣に CJK 文字か英数字が必要ですが、* はそのどちらでもありません。代わりに強調記号でも変換を発動させると、中国語ドキュメント内の純粋な英語のリスト項目すべての -- が変換されてしまい、この 3 つをそのままにしておくより悪い結果になります。