AsciiDoc から 日本語 PDF の作成手順


はじめに

AsciiDoc で日本語を含む PDF を生成するには、asciidoctor-pdf を使うのが王道ですが、asciidoctor-pdf v1.5.0 以降ではフォントのフォールバック設定が除外されており、文字化けが発生します。


フォントフォールバックオプション指定

アトリビュートオプション pdf-themedefault-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