0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Typstで英数字・日本語文字と見出し・本文の組み合わせごとにフォントを変える

Posted at

やりたいこと

  • 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. Typstで日本語文字と英数字のフォントを別々に指定する
  2. 【Typst】レポート用テンプレート

しかし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とうまく使い分けていくことになりそうです。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?