はじめに
論文を書きたいと考えた時Markdown + Latexを使いたくなるのは道理かと思いますが、なかなかまとまった記事がなかったのでエントリーです。
オーソドックスに日本語でpdf出力 + pandoc-crossrefで図表番号を自動採番 + citeprocで参考文献を引いてこよう、という構成で作っています。
Big surで使えない問題
どうやらmacOS最新の[Big surでは現状、pandoc-crossref@v0.3.9.0aで対応していないみたいです](https://github.com/lierdakil/pandoc-crossref/releases pandoc-crossref)。残念。
そこで今回はDockerを使います。
Docker構成
Dockerは[pandoc/latex](https://hub.docker.com/r/pandoc/latex pandoc/latex)を元に、日本語出力用にlualatex、pandoc-crossrefなどをinstallする必要があります。
実際のコードは[こちら](https://kcpoipoi.hatenablog.com/entry/2020/07/27/120438 日々是好日)の記事を参考させていただきましたので、確認ください。
日本語で出力する際はフォントが問題になります。実装法はいくつかあるみたいですが、簡単にはフォントファイル(ttf等)をそのままコピーする方法があります。
# 〜色々設定
RUN mkdir -p /usr/share/fonts
COPY fonts /usr/share/fonts
これで./fonts
に使いたいフォントを入れておくと参照されます。
ちなみに今回msフォントを使うため ms明朝とmsゴシックを/System/Library/Fonts
からコピーしてきました。
Pandocの設定
Pandoc 2.8からDefault fileにyaml形式で長ったらしいオプションをまとめることができる様になりました。そこでここではDefault fileを使って設定を書いていきます。
日本語出力
文書クラスにはBXjsclsを使っています。これで簡単に日本語の設定が書けるので便利です。ここではフォントにms系を設定しています。
pdf-engine: lualatex
variables:
documentclass: bxjsarticle
classoption:
- jafont=ms
図表番号、引用
pandoc-crossrefの使用はfiltersに追加するだけです。
pathはDockerでインストールした場所を参照してください。
filters:
- pandoc-crossref
参考文献
参考文献はciteprocを使ってBiBTeXから出力します。ここでは参考文献を書いたbibファイルと引用方法を書いたcslファイルを./bib
に入れてあります。
csl: bib/fogefoge
bibliography:
- bib/foge.bib
filters:
- citeproc
まとめ
全文を以下に書いておきました。趣味で欧文フォントをTimes New Romanに、その他もろもろ設定しています。詳しい設定値は[Pandoc User Guide](https://pandoc.org/MANUAL.html Pandoc)を見てください。
input-file: src.md
output-file: desc.pdf
pdf-engine: lualatex
epub-subdirectory: EPUB
epub-fonts:
- Times New Roman.ttf
- MS Mincho.ttf
variables:
fontsize: 11pt
documentclass: bxjsarticle
classoption:
- pandoc
- jafont=ms
mainfont: "Times New Roman"
sansfont: "Times New Roman"
indent: true
header-includes:
- \renewcommand{\thesection}{第\arabic{section}章}
- \renewcommand{\thesubsection}{\arabic{section}-\arabic{subsection}}
- \renewcommand{\thesubsubsection}{\arabic{section}-\arabic{subsection}-\arabic{subsubsection}}
chaptersDepth: 2
titlepage: true
papersize: a4
metadata:
figureTitle: "図 "
tableTitle: "表 "
listingTitle: "コード "
figPrefix: "図."
eqnPrefix: "式."
tblPrefix: "表."
lstPrefix: "コード."
chapDelim: "-"
table-of-contents: true
toc-depth: 3
number-sections: true
csl: bib/fogefoge
bibliography:
- bib/foge.bib
reference-links: true
reference-location: document
filters:
- pandoc-crossref
- citeproc
では出力してみましょう。コマンドラインで以下を実行してみるとpdfが生成されるはずです。
docker run --volume "$(pwd):/data" compiler -d defaults.yaml
もし、Latexまわりでエラーが出た場合はdefaults.yaml
内のoutput-file:desc.tex
に変え、standalone: true
を追加するとtexファイルが生成されるためエラー箇所が見つけやすいと思います。
図を入れ子にしたい場合
pandoc-crossrefにはSubfiguresという図を入れ子にできる機能がありますが、これは[pdf出力次には使えない?(Tex限定?)](https://github.com/lierdakil/pandoc-crossref/issues/20 issues)ようです。
地道に図を作るしかないみたいですね。
さいごに
論文締切直前に現実逃避で実装していましたが、案外Default fileを使っている記事を見なかったので投稿してみました。
Pandoc周りは初めて触ったのでお見苦しい箇所あるかもしれませんが、参考になれば幸いです。