Pandoc

PandocとPDFのレイアウトの話

More than 3 years have passed since last update.

私はだいたいMarkdownで書いてPandocでPDFを出力することが多いです(Pandocは内部でLaTeXに変換しています)。

この方法のメリットは、


  • LaTeXを書くのはつらい。Markdownは読みやすく書きやすい

  • PandocならリアルタイムにHTMLに変換しつつ確認できる

  • Pandoc+Markdownで数式も注もテーブルも書ける

  • Markdownの入力をサポートするツールもたくさんある

ただし、設定など結構くせがあるので普段使っているやり方を書いておきます。

おそらく日本語でLaTeXを書く人はpLaTeX2eを使っている人が多いように思います。ただ、Pandocはplatexには対応していません。

PandocでPDFを出力しようとすると、デフォルトはpdfTeXが使用されます。しかしこれは日本語に対応していませんので、日本語のPDFを出力するには以下のいずれかを使う必要があります。


  • 1. Pandocが対応しているLuaLaTeXを使用する

  • 2. 一度LaTeXに変換し、dvipdfmxなどを使用してDVIに変換してからPDFに変換する

この方法から移行するには2のやり方がなじみやすいでしょう。また論文などでレイアウトの指定がある場合は2の選択肢しかないかもしれません。


1. LuaLaTeXを使う

日本語でよく使われている文書クラスjsarticle、jarticleはLuaLateXでは使えないため、ltjarticle、ltjsarticleを使用します。

また、ltjsarticleはmicrotypeパッケージと相性が悪く、パッチをあててやる必要があります。

これについてはPandocを使ってMarkdownからPDFを生成するに解説があります。

わたしはだいたい以下のようなコマンドで変換しています。パッチをあてたltjsarticleを指定し、geometryパッケージで余白を1インチに設定しています。-Nは節に数字をふるオプション、--tocは目次をつけるオプションです。

デフォルト設定は余白が大きすぎるような気がするので何となく1インチにしてます。



$ pandoc -f markdown -o file.pdf -V documentclass=myltjsarticle --latex-engine=lualatex -V geometry:margin=1in -N --toc

これは以下のようなtexと等価です。


\documentclass{ltjsarticle}

\usepackage[margin=1in]{geometry}


2. dvipdfmxを使う

こっちは結構めんどくさいです。ただ、最初にテンプレートだけ用意してやればあとは使い回せると思います。

以下を変換します。


myarticle.txt

# 今日の日記

今日のご飯。

ゴハン メニュー
------ ---------
朝御飯 パン
昼御飯 カレー
夜御飯 焼き肉


$ pandoc -f markdown -t latex myarticle.txt -o myarticle.tex

以下のようなtexに変換されます。これは原稿のbodyの部分だけなので自分でドキュメントの外形を用意してやる必要があります。


myarticle.tex

\section{今日の日記}\label{ux4ecaux65e5ux306eux65e5ux8a18}

今日のご飯。

\begin{longtable}[c]{@{}lc@{}}
\toprule
ゴハン & メニュー\tabularnewline
\midrule
\endhead
朝御飯 & パン\tabularnewline
昼御飯 & カレー\tabularnewline
夜御飯 & 焼き肉\tabularnewline
\bottomrule
\end{longtable}


以下のようなガワを用意し、変換します。


article.tex

\documentclass[11pt,a4paper]{jarticle}

%
\usepackage{amsmath,amssymb}
\usepackage{bm}
\usepackage{booktabs}
\usepackage{graphicx}
\usepackage{longtable}

\title {今日のご飯}
\author {takada-at}

\begin {document}
\maketitle
\input {myarticle}
\end{document}


$ pandoc -f markdown -t latex myarticle.txt -o myarticle.tex

$ platex article.tex
$ dvipdfmx article.dvi

無事PDFができました。こちらの場合レイアウトはガワで指定するので、LaTeX側で好きな設定を選ぶことができます。