概要
インターン先で進捗をレポートにまとめるよう言われたので、この機会を利用して、Markdownで全部書いてみようと思い至りました。 Markdownはとても便利な記法ですが、引用や相互参照については少し手が届かないところがあります。 そこで今回、pandocとその拡張ツールであるpandoc-citeproc及びpandoc-cross-refを用いて、論文(っぽく見える文章)をMarkdownで書く環境を整えてみました。 あわよくば修論をこれで書きたい。
僕の環境
- OS X El Capitan
- MacTeX 2015
cabalのインストール
今回使うツールであるpandocをインストールするために、cabalを導入します。 cabalとはHaskellのライブラリ管理ツールです(Pythonでいうpipみたいなもの)。 cabalはbrewからインストール可能です。
brew install cabal
ついで
cabal update
で最新の状態にアップデートします。 またこのままでは、cabalで管理するパッケージをターミナルが認識できないので、パスを追加します。 .bash_profileに
export PATH="/Users/user_name/.cabal/bin:$PATH"
を追加します。
ちなみにホームディレクトリに.bash_profileがあるかは
ls -la
コマンドで確認できます。なかった場合は
touch .bash_profile
で作成してください。
pandocのインストール
つぎに、今回の主役であるpandocをインストールします。
cabal install pandoc
その後 which pandoc
でパスが表示されれば成功です。
これでひとまず
pandoc main.md -o main.pdf
とすることでpdf出力できます。
pandoc-citeprocのインストール
このままでもそれっぽいレポートが書けるのですが、参考文献に.bibファイルを使えるとさらに便利になるので、そのための環境を整えます。
cabal install pandoc-citeproc
とタイプし、pandoc-citeprocという環境を用意します。
念のためここでもwhich pandoc-citeproc
でパスを確認しときましょう。
pandoc-citeprocの使い方を説明します。
いつも使っている.bibファイルの名前を references.bib
とします。
中身はよくある文献リストで、次のような感じだとします。
@book{stevens2003aircraft,
title={Aircraft control and simulation},
author={Stevens, Brian L and Lewis, Frank L},
year={2003},
publisher={John Wiley \& Sons}
}
これを.mdファイルの方では[@stevens2003aircraft]というふうに@をつけて参照します。 また、.mdファイルの最終行には#Referencesと記入しておくと、その下に文献リストが表示されます。
pandoc-citeprocを経由してコンパイルする方法は
pandoc main.md --bibliography references.bib -o main.pdf
という感じです。
pandoc-crossrefのインストール
つぎに、相互参照をするための拡張機能である、pandoc-crossrefを導入します。 ターミナルで
cabal install pandoc-crossref
とタイプし、which pandoc-crossref
でパスが表示されれば成功です。
使い方については、例えば図にラベリングしたい時は
![sample.jpg](sample.jpeg){#fig:label}
と{#fig:~}を書き足します。 そして、参照するときは
[@fig:label]
と[@fig:~]とすれば、自動で参照してくれます。 他にも、@sec、@eq、@tblなどに対応しています。 詳しいことは公式に書いてあります。
コンパイル方法は
pandoc main.md --filter pandoc-crossref -o main.pdf
という感じです。
豆知識
.mdファイルを
% title
% author's name
% date
という記述で書き始めると、コンパイル時に自動的に論文っぽいタイトルが出力されます。 さらに、dateの欄には\todayコマンドが使えます。
また、デフォルトの余白が狭すぎる場合
-V geometry:margin=30mm
などのコマンドを追加すると変更できます。
章番号をつけたい場合
-N
を追加すると追加できます。
さて、全てのコマンドをまとめてみましょう。
pandoc main.md --filter pandoc-crossref --bibliography references.bib -o main.pdf -V geometry:margin=30mm -N"
こんな感じですね。
日本語化においての問題点
pandocで日本語文書を扱う方法として、lualatexでltjsarticleのクラスを指定してコンパイルする方法があります。 具体的には
-V documentclass=ltjsarticle --latex-engine=lualatex"
を上のコマンドに追加すればよいのですが、僕の環境では信じられないくらいコンパイルに時間がかかります。 試しに、ltjsarticleを追加せずにコンパイルして3-4秒時間のかかったファイルに対して、ltjsarticleを指定してコンパイルすると、40秒近くかかってしまいました。 現在理由を調査中なのですが、いまいちよくわかりません。 誰か解決策をご存知の方がいらっしゃいましたら、何卒ご教授ください。