はじめに
AsciiDoc で日本語を含む PDF を生成するには、asciidoctor-pdf を使うのが王道ですが、asciidoctor-pdf v1.5.0 以降ではフォントのフォールバック設定が除外されており、文字化けが発生します。
そんな時には、以下の作業を行います。
https://github.com/asciidoctor/asciidoctor-pdf/blob/main/data/themes/default-theme.yml からテーマファイルを取得して、以下のフォールバック設定を追加。
font: catalog: Noto Serif: ...略 M+ 1mn: ...略 # ---- ここから M+ 1p Fallback: normal: GEM_FONTS_DIR/mplus1p-regular-fallback.ttf bold: GEM_FONTS_DIR/mplus1p-regular-fallback.ttf italic: GEM_FONTS_DIR/mplus1p-regular-fallback.ttf bold_italic: GEM_FONTS_DIR/mplus1p-regular-fallback.ttf fallbacks: - M+ 1p Fallback # ---- ここまで
theme.yml
などとして保存して以下で変換。
docker run --rm -v $(pwd):/documents/ asciidoctor/docker-asciidoctor asciidoctor-pdf index.adoc -n -a toc -a pdf-style=theme.yml -o out.pdf
以上で終了です。
少し詳細を以下に記載しておきます。
docker-asciidoctor によるPDF作成
index.adoc
が元ファイルだとすると、ファイルの存在するディレクトリに移動して、以下のコマンドでPDFが出力されます(Docker は導入済みの前提です)。
docker run --rm -v "$(pwd)":/documents/ asciidoctor/docker-asciidoctor asciidoctor-pdf index.adoc
Windows(PowerShell)の場合は、$(pwd)
を ${pwd}
に読み替えてください。
作成される PDF は、元ファイルと同じ名前の index.pdf
となります。
よく使う docker-asciidoctor のオプション
asciidoctor-pdf
でよく使うオプションは以下となります。
-o
で生成ファイルを指定(指定無し時はadocファイル名と同)-n
セクション番号の自動採番-a sectnums
でも同-a toc
で目次位置の属性設定(auto)-a pdf-style=theme.yml
PDF生成用のテーマ指定
-a
は、attribute の置き換えオプションで、定義済みの attribute の内容をコマンドラインから上書きする際に指定します。
PDF生成時のテーマは、-a pdf-style=theme.yml
のように指定します。
デフォルトのテーマは、docker-asciidoctor のインストールディレクトリ内の /data/theme/default-theme.yml
にありますが、https://github.com/asciidoctor/asciidoctor-pdf/blob/main/data/themes/default-theme.yml から取得するのが簡単でしょう。
多くの場合は、以下のように実行することになるでしょう。
asciidoctor-pdf index.adoc -n -a toc -a pdf-style=theme.yml -o out.pdf
docker-asciidoctor のテーマファイル
先程の例で指定した -a pdf-style=theme.yml
のテーマファイルの内容は、以下にガイドがあります。
まぁ、長くて読む気にはならないのですが、以下からデフォルトのテーマを取得して、
https://github.com/asciidoctor/asciidoctor-pdf/blob/main/data/themes/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: GEM_FONTS_DIR/notoserif-regular-subset.ttf bold: GEM_FONTS_DIR/notoserif-bold-subset.ttf italic: GEM_FONTS_DIR/notoserif-italic-subset.ttf bold_italic: GEM_FONTS_DIR/notoserif-bold_italic-subset.ttf # M+ 1mn supports ASCII and the circled numbers used for conums M+ 1mn: normal: GEM_FONTS_DIR/mplus1mn-regular-subset.ttf bold: GEM_FONTS_DIR/mplus1mn-bold-subset.ttf italic: GEM_FONTS_DIR/mplus1mn-italic-subset.ttf bold_italic: GEM_FONTS_DIR/mplus1mn-bold_italic-subset.ttf
以下のようにフォールバック設定を追加するだけで大抵は大丈夫です。
font: catalog: # Noto Serif supports Latin, Latin-1 Supplement, Latin Extended-A, Greek, Cyrillic, Vietnamese & an assortment of symbols Noto Serif: normal: GEM_FONTS_DIR/notoserif-regular-subset.ttf bold: GEM_FONTS_DIR/notoserif-bold-subset.ttf italic: GEM_FONTS_DIR/notoserif-italic-subset.ttf bold_italic: GEM_FONTS_DIR/notoserif-bold_italic-subset.ttf # M+ 1mn supports ASCII and the circled numbers used for conums M+ 1mn: normal: GEM_FONTS_DIR/mplus1mn-regular-subset.ttf bold: GEM_FONTS_DIR/mplus1mn-bold-subset.ttf italic: GEM_FONTS_DIR/mplus1mn-italic-subset.ttf bold_italic: GEM_FONTS_DIR/mplus1mn-bold_italic-subset.ttf M+ 1p Fallback: normal: GEM_FONTS_DIR/mplus1p-regular-fallback.ttf bold: GEM_FONTS_DIR/mplus1p-regular-fallback.ttf italic: GEM_FONTS_DIR/mplus1p-regular-fallback.ttf bold_italic: GEM_FONTS_DIR/mplus1p-regular-fallback.ttf fallbacks: - M+ 1p Fallback
これで日本語の文字化けは解消します(フォールバックは遅いのでデフォルトで外されたため、日本語を含むフォントファイルの指定が必要)。
なお、asciidoctor-pdf-cjk
の指定は、現在では必要ありません。
別のフォントを指定する場合には、例えば IPAフォントをダウンロードして以下のように直接指定するのも良いと思います。
font: catalog: IPA PGothic: normal: ipagp.ttf bold: ipagp.ttf italic: ipagp.ttf bold_italic: ipagp.ttf base: font_family: IPA PGothic
都度のテーマファイルの指定が面倒な場合は、AsciiDoc ファイル内に以下のように指定するのも良いでしょう。
:pdf-style: themes/default-theme.yml