概要

インターン先で進捗をレポートにまとめるよう言われたので、この機会を利用して、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秒近くかかってしまいました。 現在理由を調査中なのですが、いまいちよくわかりません。 誰か解決策をご存知の方がいらっしゃいましたら、何卒ご教授ください。