はじめに
ObsidianのUIや本文のテキストを、「ひらがな・カタカナ・漢字はフォントA」「英数字はフォントB」など、文字種によって異なるフォントを割り当てて表示する方法の説明です。CSSスニペットを書くことで、デザイン用語でいう合成フォントのような表示ができます。
Obsidianで複数フォントを組み合わせた表示
私のObsidian環境ではメインの表示フォントとして、Windowsシステムフォントに含まれている 「UD デジタル教科書体 NK-B」(UD Digi Kyokasho NK-B) を使用しています。
デジタル教科書をはじめとした ICT教育の現場に効果的なユニバーサルデザイン書体です。筆書きの楷書ではなく硬筆やサインペンを意識し、手の動きを重視しています。書き方の方向や点・ハライの形状を保ちながら…
「UD デジタル教科書体 NK-B」 のひらがな・カタカナ・漢字は美しくて読みやすいのですが、以下のように困る点もあります。きちんとした思想のもとに作られた書体らしいので、私の用途に合っていないだけですが。
- 和文と欧文が混在していると間延びして見え、やや読みにくい。
0(ゼロ)とO(オー)、1(イチ)とl(エル)などが見分けにくい。特に1(イチ)がただの棒なのは看過できない。
これらをカバーするために、 「半角のスペース・英数字・記号 + 全角スペース」 の部分を、プログラミング向けに見やすく調整されたフォント 「UDEVGothic35-Bold」 に差し替えています。半角の 0 や 1 が見分けやすくなり、半角スペースと全角スペースの違いもひと目でわかるようになっています。
UDEV Gothic は、ユニバーサルデザインフォントのBIZ UDゴシックと、 開発者向けフォントの JetBrains Mono を合成した、プログラミング向けフォントです。 - yuru7/u…
このようなフォントの割り当てはObsidianの標準設定だけではできませんが、CSSスニペットを書くことで柔軟に指定できます。
CSSスニペットの内容
Obsidian CSS snippets. Contribute to technolonolo/obsidian-snippets development by creating an accou...
使用しているCSSスニペットから、フォント指定部分を切り出したものです。以下で各部分を説明します。
@font-face { /* この内容のフォントをこの名前で呼び出すぞ、という定義を作成 */
font-family: 'Ascii-Plus'; /* わかりやすい名前をつける */
src: local('UDEVGothic35-Bold'); /* 元になるフォント */
unicode-range: /* 使用する文字の範囲 */
U+0020,
U+0021-002F, U+0030-0039, U+003A-0040, U+0041-005A, U+005B-0060, U+0061-007A, U+007B-007E,
U+3000;
}
body {
--default-font: 'Ascii-Plus', 'UD Digi Kyokasho NK-B'; /* 和文用フォントを後に書く */
--font-monospace: 'UDEV Gothic 35';
--font-interface-theme: var(--default-font);
--font-text-theme: var(--default-font);
--font-reveal: var(--default-font);
--r-main-font: var(--font-reveal);
--r-heading-font: var(--font-reveal);
--font-mermaid: var(--font-monospace);
}
フォントの割り当て範囲を決める
- まず、それぞれのフォントで表示する範囲を決めます。わかりやすくするために和文用・英文用と呼びます(全角スペースのせいで厳密には違うのですが)。
- 英文用: 半角のスペース・英数字・記号 + 全角スペース
- UDEVGothic35-Bold
- 和文用: 上記以外のすべての文字
- UD デジタル教科書体 NK-B (UD Digi Kyokasho NK-B)
- 英文用: 半角のスペース・英数字・記号 + 全角スペース
- フォントを差し替えたい文字の範囲の Unicode をメモしておきます。私の利用例では以下の通りです。
U+0020 /* 半角スペース */ U+0021-002F /* 半角記号 */ U+0030-0039 /* 半角数字 */ U+003A-0040 /* 半角記号 */ U+0041-005A /* 半角英大文字 */ U+005B-0060 /* 半角記号 */ U+0061-007A /* 半角英小文字 */ U+007B-007E /* 半角記号 */ U+3000 /* 全角スペース */
@font-faceで指定範囲の文字だけをまとめる
VS CodeやテキストエディタなどでCSSスニペットを記述します。最初に、使用範囲が狭いほうの 英文用 について @font-face を書きます。
@font-face { /* この内容のフォントをこの名前で呼び出すぞ~という宣言 */
font-family: 'Ascii-Plus'; /* わかりやすい名前をつける */
src: local('UDEVGothic35-Bold'); /* 元になるフォント */
unicode-range: /* 使用する文字の範囲 */
U+0020,
U+0021-002F, U+0030-0039, U+003A-0040, U+0041-005A, U+005B-0060, U+0061-007A, U+007B-007E,
U+3000;
}
- font-family: このフォント定義を判別するためのわかりやすい名前。アスキー文字のほかに全角スペースを含んでいるので 「Ascii-Plus」 という名前にしました。
- src: ベースとして使用するフォント名。PCにインストールしてあるフォントなので
local()で指定しています。GoogleフォントなどのWebフォントを指定した場合はネットへのアクセスが発生します。 - unicode-range: 使う文字の範囲をUnicodeで指定します。
イメージ的には、 「UDEVGothic35-Bold」 というフォントに含まれているすべての文字データから、unicode-range に書いてある範囲の文字だけを集めて 「Ascii-Plus」 という名前の新しいフォントを作成したような感じです。
表示フォントを指定する
実際にテキストが表示されるときのフォント指定を書きます。 :root など色々試したのですが、私の環境では body 要素内に書くのが良いようです。以下に詳細を記します。
body {
--default-font: 'Ascii-Plus', 'UD Digi Kyokasho NK-B'; /* 和文用フォントを後に書く */
--font-monospace: 'UDEV Gothic 35';
--font-interface-theme: var(--default-font);
--font-text-theme: var(--default-font);
--font-reveal: var(--default-font);
--r-main-font: var(--font-reveal);
--r-heading-font: var(--font-reveal);
--font-mermaid: var(--font-monospace);
}
- デフォルトフォントの変数を指定
--default-font: 'Ascii-Plus', 'UD Digi Kyokasho NK-B'; /* 和文用フォントを後に書く */--default-fontという変数に、Obsidianの表示にデフォルトで使用するフォント名を書きます。- 以後は
--default-fontと書けばここで指定されたフォントが使われるので、各部分で使用フォントが統一でき、何度も同じ設定を書かずに済みます。Obsidianのテーマにはこのような変数がたくさん使われています。
@font-faceで定義しておいた英文用のAscii-Plusを先に、 和文用のUD Digi Kyokasho NK-Bを後に書きます。- Obsidianが文字を表示する際は、まず行の先頭に書いてあるフォントを使って表示を試みます。このフォントで表示できない文字があれば、後に書いてあるフォントで表示することを順番に試します。

- その結果、 「半角のスペース・英数字・記号 + 全角スペース」 は先頭に書いてある
Ascii-Plusで表示され、Ascii-Plusに含まれていない 「その他のすべての文字」 は、次に書いてあるUD Digi Kyokasho NK-Bで表示されるというわけです。
- フォント設定に変数を書く
- 合成フォント風の表示とは直接関係ないですが、モノスペースフォントの変数も一緒に書いています。
--font-monospace: 'UDEV Gothic 35'; /* モノスペースフォント */ - 続けて、フォント関係の変数に、指定した変数を代入します。
--font-interface-theme: var(--default-font); /* UI表示用フォント */ --font-text-theme: var(--default-font); /* ノート表示用フォント */ --font-reveal: var(--default-font); /* スライドショー用フォントの変数に代入 */ --r-main-font: var(--font-reveal); /* スライドショー用メインフォント */ --r-heading-font: var(--font-reveal); /* スライドショー用見出しフォント */ --font-mermaid: var(--font-monospace); /* mermaid記法用フォント */
- 合成フォント風の表示とは直接関係ないですが、モノスペースフォントの変数も一緒に書いています。
- スニペットファイルに
.css拡張子をつけて、Obsidian保管庫内のスニペット用フォルダに保存します。デフォルトの場所は.obsidian/snippetsになっていると思います。
CSSスニペットの適用
Obsidian本体のフォント設定を削除する
CSSスニペットはObsidian本体のフォント設定よりも後に読み込まれるため、フォントの指定が競合した場合、スニペット側の指定が優先されるようです。しかし、本体のフォント設定のほうがスニペットよりセレクタの詳細度が上回っていたりして意図通りの表示にならない経験がありました。干渉を防ぎ、詳細度について悩む必要をなくすため、本体側のフォント設定は削除してあります。
スニペットを有効にする
- Obsidianの設定から 「外観 > CSSスニペット」 を開きます。
- 更新ボタンを押します。

- 目的のCSSスニペットが一覧に表示されたら、トグルスイッチをオンにします。

- CSSスニペットの記述がノートの表示に反映されます。
おわりに
使用テーマや他のスニペットの記述によっては書き方を変更する必要があるかもしれません。表示がおかしくなった場合は、スニペットをオフにすれば元通りになります。