読者です 読者をやめる 読者になる 読者になる

org-mode による論文作成入門

理系の人はそろそろ卒論・修論を執筆する時期ですね。 LaTeX で記述する人も多いと思いますが、 LaTeX は人が書くのにあまり向いていないと思います。 Emacs を使っている人は org-mode で書いたテキストを LaTeX に変換して論文を完成させてみてはいかがでしょうか。

以下の文章は Org 8.0 以降向けです。 EmacsLaTeX の処理系などはインストールされているものとします。

インストール

org-mode は Emacs のパッケージ管理システムでインストールするのがおそらく一番簡単です。 Emacs24 以降であれば標準でパッケージ管理システムがついてると思います。.emacs に以下を記述してください。

(require 'package)
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)

その後 Emacs を再起動して M-x list-packages で org と org-plus-contrib をインストールしてください。 org-plus-contrib は bibtex を使用する際に必要になります。

設定

まずは LaTeX に変換する基本設定から。 Org 7.0 系のバージョンとは変数名などが微妙に異なるので注意してください。

(require 'ox-latex)
(require 'ox-bibtex)

;;; LaTeX 形式のファイル PDF に変換するためのコマンド
(setq org-latex-pdf-process
      '("platex %f"
        "platex %f"
        "bibtex %b"
        "platex %f"
        "platex %f"
        "dvipdfmx %b.dvi"))

;;; \hypersetup{...} を出力しない
(setq org-latex-with-hyperref nil)

ちなみに org-latex-pdf-process では下記のように置換されます。

置換前 置換後
%f 完全なファイル名
%b 拡張子を除いた名前
%o 出力ディレクトリ

次に、 org-mode のファイル変換時の LaTeX 出力フォーマットの設定です。出力フォーマットは以下の形式で設定します。

(add-to-list 'org-latex-classes
             '("出力フォーマット名"
               "プリアンブル"
               ("レベル 1" . "レベル 1*")
               ("レベル 2" . "レベル 2*")
               ...
               ))

プリアンブルの内容は org-mode の文書を LaTeX に変換したときに、そのファイルの先頭に挿入されます。ただし、 org-mode ではデフォルトで命令が挿入されるようになっていて、それを抑制するにはプリアンブル部分に [NO-PACKAGES] と [NO-DEFAULT-PACKAGES] を記述する必要があります。

具体的にはこんな感じの記述になります。

(add-to-list 'org-latex-classes
             '("thesis"
               "\\documentclass{jarticle}
                [NO-PACKAGES]
                [NO-DEFAULT-PACKAGES]
                \\usepackage[dvipdfmx]{graphicx}"
               ("\\section{%s}" . "\\section*{%s}")
               ("\\subsection{%s}" . "\\subsection*{%s}")
               ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
               ("\\paragraph{%s}" . "\\paragraph*{%s}")
               ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))

卒論や修論では独自のクラスファイルが与えられている場合も多いと思います。その際に特別なコマンドが必要であればこの設定のプリアンブル部分に書くといいでしょう。

org-mode ファイルの作成

具体的な org-mode ファイルの書き方は Org-mode による HTML 文書作成入門 などを参考にしてください。ここでは LaTeX に変換する際に必要な記述や例などを示します。

文書情報

org-mode ファイルの先頭に、タイトルや著者名、それと先ほど設定した出力フォーマットを記述します。

#+TITLE: 論文タイトル
#+AUTHOR: 名前
#+LATEX_CLASS: thesis
#+OPTIONS: toc:nil timestamp:nil

#+LATEX_CLASS が設定した出力フォーマットの名前です。また #+OPTIONS では様々なオプションを設定することができます。設定できるオプションは http://orgmode.org/manual/Export-settings.html を参考にしてください。

図・表

普通の org-mode の書式と同様、画像を埋め込むには 「 file: ファイルのパス」 の形式、表は | で始まる形式で記述します。また、キャプションやラベルを付けたり、図のサイズを指定するには、以下のように図・表の直前に記述します。

#+CAPTION: 図のキャプション
#+NAME: fig:label
#+ATTR_LaTeX: :width 10cm
file:hoge.eps

#+CAPTION: 表のキャプション
#+NAME: tb:label
#+ATTR_LaTeX: :align |l|l|
|---+---|
| A | B |
|---+---|
| 1 | 2 |
| 3 | 4 |
|---+---|

ATTR_LaTeX が図・表の出力設定です。詳しくは http://orgmode.org/org.html#LaTeX-specific-attributes を参考にしてください。

他の多くのサイトでは #+ATTR_LaTeX: width=10cm のように書かれていると思いますが、これは古いバージョンの org-mode の記述方法なので注意です。

引用

上の図・表を引用する場合は以下のように書きます。

   図 [[fig:label]] の結果を表にまとめたものが表 [[tb:label]] です。

また、章や節のタイトルも [[]] で囲って引用することが可能です。

[[背景]] 節では本研究の背景となった概念に関して述べる。

数式

LaTeX の数式は本文中にそのまま記述することができます。

文章中の数式は $a=+\sqrt{2}$ のように書け、数式ブロックは

\begin{equation}
x=\sqrt{b}
\end{equation}

のように書ける。

LaTeX コマンド

数式はそのまま直接記述できますが、 org-mode に対応していない LaTeX コマンドを本文中に記述する際、コマンド中の記号などが org-mode の文法と干渉して記述した通りに出力されないことがあります。そのような場合は以下のように記述することで、 org-mode による変換を行わずに出力することができます。特殊な表や、.emacs 側には記述したくないプリアンブルを書いたりするのに便利です。

#+BEGIN_LaTeX
ここに LaTeX のコマンドを記述します。
#+END_LaTeX

参考文献

LaTeX で論文を記述する人の多くは、参考文献を bibtex で管理すると思います。 reference.bib ファイルを plain スタイルで出力する際は、 org-mode では参考文献のページを挿入する場所に以下を記述してください。

#+BIBLIOGRAPHY: reference plain

また、本文中で文献を引用する場所には 「 cite: 引用キー」 を記述します。

PDF の作成

C-c C-e l o を入力すると org-latex-pdf-process で設定したコマンドで PDF を作成できます。

もし作成できなければコンパイルに失敗している可能性が高いです。そんな場合は C-c C-e l l で org-mode ファイルに対して LaTeX ファイルへの変換のみを行うので、そのファイルを読んだり、コンパイルしてみてエラー原因を調査しましょう。

生成される LaTeX ファイルの例

具体例として以下のような簡単な org-mode ファイルを作成してみました。

#+TITLE: 論文タイトル
#+AUTHOR: 名前
#+LATEX_CLASS: thesis
#+OPTIONS: toc:nil timestamp:nil


* 序論
  近年、○○が注目を集めている cite:abramowitz+stegun 。

* 評価実験
** 実験結果
   実験結果を図 [[fig:result]] に示す。

   #+CAPTION: 実験結果
   #+NAME: fig:result
   #+ATTR_LaTeX: :width 5cm
   file:hoge.eps

** アンケート結果
   また、アンケート結果を表 [[tb:questionnaire]] にまとめた。

   #+CAPTION: アンケート結果
   #+NAME: tb:questionnaire
   #+ATTR_LaTeX: :align |l|l|
   |---+---|
   | A | B |
   |---+---|
   | 1 | 2 |
   | 3 | 4 |
   |---+---|

* 結論
  [[実験結果]] 節の実験結果から

  \begin{equation}
  x=\sqrt{b}
  \end{equation}

  であるため、

  - A
  - B
  - C

  ということがわかった。

* 今後の課題
  がんばります。


#+BIBLIOGRAPHY: reference plain
@Book{abramowitz+stegun,
  author = "Milton Abramowitz and Irene A. Stegun",
  title = "Handbook of Mathematical Functions with
  Formulas, Graphs, and Mathematical Tables",
  publisher = "Dover",
  year = 1964,
  address = "New York",
  edition = "ninth Dover printing, tenth GPO printing"
}

これらを LaTeX ファイルに変換すると以下の .tex ファイルが出力されます。

\documentclass{jarticle}
\usepackage[dvipdfmx]{graphicx}
\author{名前}
\date{\today}
\title{論文タイトル}
\begin{document}

\maketitle


\section{序論}
\label{sec-1}
近年、○○が注目を集めている \cite{abramowitz+stegun}\section{評価実験}
\label{sec-2}
\subsection{実験結果}
\label{sec-2-1}
実験結果を図 \ref{fig:result} に示す。

\begin{figure}[htb]
\centering
\includegraphics[width=5cm]{hoge.eps}
\caption{\label{fig:result}実験結果}
\end{figure}
\subsection{アンケート結果}
\label{sec-2-2}
また、アンケート結果を表 \ref{tb:questionnaire} にまとめた。

\begin{table}[htb]
\caption{\label{tb:questionnaire}アンケート結果}
\centering
\begin{tabular}{|l|l|}
\hline
A & B\\
\hline
1 & 2\\
3 & 4\\
\hline
\end{tabular}
\end{table}
\section{結論}
\label{sec-3}
\ref{sec-2-1} 節の実験結果から

\begin{equation}
x=\sqrt{b}
\end{equation}

であるため、

\begin{itemize}
\item A
\item B
\item C
\end{itemize}

ということがわかった。
\section{今後の課題}
\label{sec-4}
がんばります。


\bibliographystyle{plain}
\bibliography{reference}
% Emacs 24.3.1 (Org mode 8.2.4)
\end{document}

作成した PDF は こんな感じ です。

まとめ

変換前の org-mode ファイルと変換後の LaTeX ファイルを見るとわかりますが、 org-mode の書式の方が圧倒的に覚えやすく、書くのが簡単です。

他にも LaTeX に変換できる書式はたくさんありますが、 org-mode は書式が簡単であること、現在も積極的に開発が行われていること、自分の思い通りに拡張できること、そしてなにより Emacs に標準でついていることが魅力です (本記事では最新版のインストールから説明しましたが) 。普段から Emacs を利用している人であれば、 org-mode の書式を覚えることは損ではないと思います。

org-mode にはもっと便利な機能がたくさんあります。普段のメモ書きにはもちろん、 TODO リストやスケジュール管理にも利用できます。是非この機会に org-mode で論文を書きながら使い方を覚えて、普段の生活に org-mode を取り込んでみてはいかがでしょうか。