hidao’s blog

IT系とか読書ログとか。

asciidoctor-pdf で日本語が化ける for Windows10

TL;DR

default-theme.yml にフォントフォールバックを設定するんだ!

font:
  catalog:
    # Noto Serif supports Latin, Latin-1 Supplement, Latin Extended-A, Greek, Cyrillic, Vietnamese & an assortment of symbols
    Noto Serif:
      normal: notoserif-regular-subset.ttf
      bold: notoserif-bold-subset.ttf
      italic: notoserif-italic-subset.ttf
      bold_italic: notoserif-bold_italic-subset.ttf
    # M+ 1mn supports ASCII and the circled numbers used for conums
    M+ 1mn:
      normal: mplus1mn-regular-subset.ttf
      bold: mplus1mn-bold-subset.ttf
      italic: mplus1mn-italic-subset.ttf
      bold_italic: mplus1mn-bold_italic-subset.ttf
### 以下を追記
    M+ 1p Fallback:
      normal: mplus1p-regular-fallback.ttf
      bold: mplus1p-regular-fallback.ttf
      italic: mplus1p-regular-fallback.ttf
      bold_italic: mplus1p-regular-fallback.ttf
  fallbacks:
  - M+ 1p Fallback
### ここまで
page:
(略)

解説

2019_09_Asciidocを使っていてせっかくAsciidoctor-PDF環境を構築したのに出力したPDFの日本語が表示されなくて困っている人へより引用:

結論から書くと、 「デフォルトスタイルのフォントに日本語字体が含まれていないこと」と「デフォルトスタイ ルのフォントフォールバックについての仕様変更」が原因で「Asciidoctor-PDFで出力したPDFを開くと日本語が表示されない」問題が発生する。

なお、「フォントフォールバック」とはフォントに存在しない字体を他のフォントで補うことである。

中略

Asciidoctor-PDFのdefault-theme.yml上で前述の日本語の字体を含む「mplus1p-regular-fallback」に「フォントフォールバック」する設定が残っていた最後のバージョンが2019年4月18日にリポジトリに上がっている「v1.5.0.alpha.18」である。

そしてその次のバージョンであり2019年7月8日にリポジトリ上に上がっている「v1.5.0.beta.1」で削除されている。

とあるので、削除された分を補ってやるのが今回の手法です。

環境

OS: Windows10 バージョン 1909
RubyGems Environment:

  • RUBYGEMS VERSION: 2.7.6.2
  • RUBY VERSION: 2.5.5 (2019-03-15 patchlevel 157) [x64-mingw32]

asciidoctor:2.0.10
asciidoctor-pdf:1.5.0.beta.7
asciidoctor-pdf-cjk:0.1.3

手順

私の環境では、default-theme.yml がC:\Ruby25-x64\lib\ruby\gems\2.5.0\gems\asciidoctor-pdf-1.5.0.beta.7\data\themes内にあるので、default-theme.yml をエディタで開き、記事先頭で書いた追記を行いました。

ハマリポイント

当たり前かもしれませんが、default-theme.yml を変更したら asciidoctor-pdf コマンドを実行しているターミナルソフトを再起動すると良いようです。

再起動しないと設定が反映されない? ことがあります。