やりたいこと
- Typstで日本語と英数字の両方を含む文書を作成している
- 日本語(ひらがな・カタカナ・漢字)とそれ以外の文字に別のフォントを適用したい
- 見出しはゴシック体(Sans Serif)、本文は明朝体(Serif)にしたい
環境
- Windows 11
-
typst 0.11.0 (2bf9f95d)
- 注意:Typstの仕様の変化が速く見えるので,バージョンにあわせて修正が必要かもしれません
結論
次のコードを使う:
// for main text
#set text(
lang: "ja", // 英語しか使わない文書では"en"とする(もしくは指定しない)
font: ("Linux Libertine", "BIZ UDPMincho"),
// font: (日本語文字を含まないフォント, 日本語文字を含むフォント), となっている
)
// for headings
#let heading_font(body) = {
set text(font: ("Arial", "BIZ UDPGothic")) // weightの指定は反映されないらしい
// font: (日本語文字を含まないフォント, 日本語文字を含むフォント), となっている
body
}
#show heading: heading_font // heading_fontを適用する
ポイントは、font-family
を指定する(font: (FONT1, FONT2)
とする)方法を選んだこと。理由は次の「注意点」を参照。
フォントは自分の環境(Windows)の中で選んだので、環境や好みに応じて修正が必要。
メインのファイルに直接書ける形(コードに#
をつけてある)になっているが、もちろんテンプレートとして使ってもよい。
コードブロックの中に書く場合には、#set
や#let
の#
を削除すればよい。
注意点
Google検索していると、正規表現を使ってひらがな・カタカナ・漢字を抽出し、それらに日本語フォントを適用する方法が出てくる。
しかし1.の著者がGitHubのissueで議論しているように(リンク)、正規表現を使うルール(#show regex(...): set text(~~~)
)の優先度がかなり高いらしく、上のようにheading
に別のフォントを適用することができなかった。
例えば本文を明朝、見出しをゴシックにしたくても、本文を明朝にする
#show regex(...): set text(font: "BIZ UDPMincho")
が常に適用されて、見出しまで明朝になってしまう。
この問題を回避するために、font-family
を指定することにした。
font: (FONT1, FONT2, ...)
のFONT1から順番に適用されて、そこに含まれない文字にはFONT2が使われる、という振舞いのはずなので、FONT1に日本語対応のフォントを指定した場合は何も起こらない。
最近Typstを使い始めました。面白いし便利な反面、開発が進んでいる途中だからか、ここに書いたようなトリッキーな部分もあるな、という感想です。当面はLaTeXとうまく使い分けていくことになりそうです。