はじめに
AsciiDoc で日本語を含む PDF を生成するには、asciidoctor-pdf を使うのが王道ですが、asciidoctor-pdf v1.5.0 以降ではフォントのフォールバック設定が除外されており、文字化けが発生します。
フォントフォールバックオプション指定
アトリビュートオプション pdf-theme
で default-with-font-fallbacks
を指定します。
例えば以下のようになります。
= タイトル doctype: book :table-stripes: even :chapter-label: :pdf-theme: default-with-font-fallbacks :scripts: cjk
コマンドラインで指定することもできます。
asciidoctor-pdf -a pdf-theme=default-with-font-fallbacks -a scripts=cjk index.adoc
pdf-theme
は、旧来からの pdf-style
(非推奨) に取ってかわるものです。1.5以前を使う場合は、pdf-style
で指定します。
以上で完了です。
テーマファイル指定
直接テーマファイルを編集し、フォールバック指定を行うこともできます。
https://github.com/asciidoctor/asciidoctor-pdf/blob/main/data/themes/default-theme.yml からテーマファイルを取得して、以下のフォールバック設定を追加。
font: catalog: Noto Serif: ...略 M+ 1mn: ...略 # ---- ここから M+ 1p Fallback: GEM_FONTS_DIR/mplus1p-regular-fallback.ttf Noto Emoji: GEM_FONTS_DIR/notoemoji-subset.ttf fallbacks: [M+ 1p Fallback, Noto Emoji] # ---- ここまで
theme.yml
などとして保存して以下で変換。
docker run --rm -v $(pwd):/documents/ asciidoctor/docker-asciidoctor asciidoctor-pdf index.adoc -n -a toc -a pdf-theme=theme.yml -o out.pdf
以上で終了です。
先に見た default-with-font-fallbacks
では、default-with-font-fallbacks-theme.yml が使われます。
以下のような内容のテーマになっています。
extends: default font: catalog: merge: true # M+ 1p supports Latin, Latin-1 Supplement, Latin Extended, Greek, Cyrillic, Vietnamese, Japanese & an assortment of symbols # It also provides arrows for ->, <-, => and <= replacements in case these glyphs are missing from font M+ 1p Fallback: GEM_FONTS_DIR/mplus1p-regular-fallback.ttf Noto Emoji: GEM_FONTS_DIR/notoemoji-subset.ttf fallbacks: [M+ 1p Fallback, Noto Emoji]
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-theme=theme.yml
PDF生成用のテーマ指定
-a
は、attribute の置き換えオプションで、定義済みの attribute の内容をコマンドラインから上書きする際に指定します。
PDF生成時のテーマは、-a pdf-theme=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-theme=theme.yml -o out.pdf