search
LoginSignup
23

posted at

updated at

Markdown原稿からPandocしてLaTeX組版する本作りの事例

これは「TeX & LaTeX Advent Caleandar 2020」の23日目の記事です。
22日目は、MusicDumpさんでした。24日目は、7danmoroboshiさんです。

みなさん、#テフライブ! していますか?

ここ最近、「Markdown原稿からPandocしてLaTeX組版する」一連の処理で、書籍製作することが増えてきました。

例えば、某弊社で製作させていただきました事例をいくつかあげます。

この記事では、この一連の処理による書籍製作を簡単にした形で紹介したい1と思います。

よくある「Markdown原稿からPandocしてLaTeX組版する」例は……、

各章ごとにMarkdown原稿ファイルch01.md, ch02.md, ch03.md, …などを用意して、Pandoc対応しているbxjsclassesのクラスファイルを用いて、必要なオプションをどかっと付けてpandocコマンドを実行する感じだと思います。

さらに、Markdown原稿ファイルのヘッダに header-includes: 〈実質的に、親LaTeX文章ファイルのプリアンブル部分〉 を書いて、いろいろと拡張している例も見かけます。

GistにTeX & LaTeX Advent Caleandar 2020 23日目の例 として、簡単な例を上げました。
Unix系のコマンドラインからbuild1.shを実行します。つまり、

$ pandoc -o book.pdf --pdf-engine=lualatex \
    -V papersize=a5 -V documentclass=bxjsbook -V classoption=pandoc \
    -V indent=1zw \
    --number-sections \
    --from=markdown+ignore_line_breaks --to=latex \
    --toc --strip-comments \
    --top-level-division=chapter --standalone \
    chpre.md ch01.md ch02.md ch03.md chpost.md

この方法の長所は、LaTeXによるマークアップやLaTeX組版ごとをあまり知らなくても、ある程度いい感じでMarkdown形式からPDFへしてくれます。
(最終的に、LaTeXでいろいろと行うにしても、)Markdown形式でサクッと原稿を草稿するのに、十分に使えますね。

一方、この方法の短所は、文章構成や組版などの制御などなど、アレコレ細かい組版をやるとすると、結局LaTeX事がいろいろと必要になります。前述の header-includes: にアレコレ書いているのは、LaTeX事のアレコレですので。

2. 「Markdown原稿からPandocしてLaTeX組版する」一連の処理

「Markdown原稿からPandoc経由してLaTeX形式へ変換して、そのままLaTeXで自動組版してPDFを生成する」処理で、最終的にLaTeX組版でアレコレやる前提だったら、はじめからLaTeX組版を前提としたデータ構成にしてしまえばよいと思います。
そこで、某弊社では、以下のようにして「Markdown原稿からPandocしてLaTeX組版する」一連の処理をしています。

  1. Pandocは、各章ごとのMarkdown原稿(Pandocで変換可能な変換元文章)をシンプルなLaTeX形式へ変換するだけの変換器としてのみ利用する。
  2. 親LaTeX文章ファイルを用意して、Pandocで変換した各章ごとLaTeX文章ファイルを子ファイルとして\includeする。
  3. LaTeX事をプリアンブル(通例書籍専用のクラスファイル)にまとめて、使いたい組版エンジンでタイプセットし、PDFを生成する。

前節と同じ例 TeX & LaTeX Advent Caleandar 2020 23日目の例ですが、親LaTeX文章ファイルmain.texを用意しています。

Unix系のコマンドラインからbuild2.shを実行します。つまり、

  1. 各Markdown原稿ファイルchXXXX.mdに対して、以下のPandocコマンドを実行します。
$ pandoc --from=markdown+ignore_line_breaks --to=latex --strip-comments \
  --number-sections --top-level-division=chapter \
  chXXXXX.md
  1. lualatexコマンドで、親LaTeX文章ファイルをタイプセットします。
$ lualatex main

この方法の嬉しいところは、前述のとおり、LaTeX事を親LaTeX文章ファイル下で完結していることです。これにより、Pandocは、Markdown(もどき)形式からLaTeX形式への変換器としての役割のみで完結します。また、Pandocへの独自フィルタや前処理、後処理を自由にできるので、自由度の高いLaTeX組版を行えます。

この方法の嬉しくないところは、LaTeX事のアレコレならびに、Pandocが行っているLaTeX事のアレコレの挙動(少なくともpandoc --standalonepandoc -D latex、独自に拡張したLaTeX事など)を把握していないと、制御しきれないことです。

執筆や編集する方がLaTeXをあまり知らなくても、LaTeXによる自動組版で連続的な製作を進められる

冒頭で紹介させていただきました事例は、いずれも執筆、編集ともに、Markdown形式で1次原稿を進められました。原稿がリポジトリに上がったら、自動的にプレビュー用PDFをビルドしていたおかげで、通常の初校、再校、念校の区切りを大まかにもうけていたとしても、各区切りの段階で、内容の質を高められていたと思います。

また、編集者さんがTeXやPandocなどの環境構築が不慣れだったとしても、Dockerで共通の制作環境を利用することで、編集者さんのお手元でもPDFをビルドできるので、用語統一などの編集をすぐに原稿に取り込むことができていました2

Markdown原稿からPandocしてテフライブ!しませんか?

以上、ものすごく簡単に、Markdown原稿からPandocしてLaTeX組版する事例を紹介いたしました。

本当は、ソースコードなどのリスト、各種ブロック要素、図表などがひと通りはいった例を取り上げたほうがよいかもしれませんが、LaTeX事の解説が多くなってしまうので、また何かの機会で、この話の続きができればと思います。

最後までお読みくださいまして、ありがとうございました。

Happy TeXing!

  1. 「えっ、今年の重点テーマは**『このパッケージもスゴイ!』**なのに、どこにスゴイパッケージを紹介しているの?」って思われるかもしれませんが、Pandoc自体がスゴイパッケージのような機能を内包していると言っても過言じゃないですね。例えば、プログラミング言語などのsyntax highlightingなんか、なかなか良いと思いますね。表組みはなかなかツライところがありますが。

  2. 営業ネタをかねて、PandocやRe:VIEW、AsciiDoc、XMLなどによる製作フローをわかりやすくまとめたい。

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
What you can do with signing up
23