LaTeX形式のレポートをemacs+org-modeだけで書く

大学のレポートを書くときに、Emacs上で編集したorgファイルからのLaTeX化する方法が思った以上に使いやすかったので、環境設定と構築を覚え書き的に書いておきます。

環境構築

基本的には、デフォルトのemacs(22以上)にorg-modeはデフォルトで入っていますが、その上で図表化を行うditaaとGraphvizは別途入れる必要があります。
なお、今回作業した環境は、Ubuntu11.10 + Tex Live(20111121)です。それ以外の場合は適時aptとyum、設定等を読み替えてください。

ditaa

(参考サイトには、org-modeに含まれると書いていましたが、少なくともTeX Liveからインストールした私の環境には、なかったので)以下よりDL

http://sourceforge.net/projects/ditaa/

そして以下のコードを.emacs(.el)に追加して、ditaaファイルのパスを設定します。(パスは各自のインストール位置で読み替えてください。)

(setq org-ditaa-jar-path "~/.emacs.d/ditaa0_9/ditaa0_9.jar")

また、標準のditaaだと日本語の文字配置でうまくいかないので、以下のサイトの日本語調整を行います。

http://d.hatena.ne.jp/tamura70/20100317/org

さらにditaaで出力されるのは、pngですが、LaTeXでpngファイルを埋め込もうとした際に、画像のサイズ情報(BoudingBox)を格納する拡張子が.bbのファイルが必要ですが、TeX Liveだと標準では出力してくれません。

なので、/usr/local/texlive/2011/texmf/web2c/texmf.cnf 内にある以下の部分にハイライトされている1文(“extractbb,\”)を追加します。(+を除く)

shell_escape_commands = \
bibtex,bibtex8,\
kpsewhich,\
makeindex,\
repstopdf,\
+ extractbb,\

参考

http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?TeX%E5%85%A5%E9%96%80%2F%E5%9B%B3%E8%A1%A8#s7e8e2f8

Graphviz

こちらはaptで普通にインストール可能です。

apt-get install graphviz

文章作成

本文

本文は基本的にorg-modeの見出しに合わせて変換時にsection指定してくれるので、特に特別なことをせずにそのまま、org-modeの書き方で行えばOKです。また、COMMENT見出しの部分は章変換時は無視されますが、中の各種設定命令文は無視されないので、このように1つの章に分けておくと、分けて見やすくなったりします。

* COMMENT 初期設定
#+TITLE: LeTeX文章
#+AUTHOR: ik-fib
#+DATE: \today
#+LANGUAGE: ja
#+OPTIONS: 
#+LATEX_CLASS: jarticle
#+LATEX_CLASS_OPTIONS: [a4j,10pt]
#+LATEX_HEADER: \usepackage{org}
* 第一章の章名
章本文
* 第二章の章名
2章本文
** 2-1節
2-1節目
** 2-2節
2-2節目

なお、上のソースからTeX化→pdfしたらこうなります。

http://ik-fib.com/blog/wp-content/uploads/2012/01/web.pdf

図表

表はorg-mode標準の機能で作成すれば、自動的に変換されます。

org-mode標準の表は|でデータ区切り、-の横断で、横区切り線となっています。例えば、以下のようなコードであれば、LaTeX化したときには、下のような表になります。

| aa | aa |
|    | bb |
|    | cc |
|    |    |
|----+----|
| 12 | 33 |
| 11 | 33 |
|    |    |

surface

参考;http://d.hatena.ne.jp/tamura70/20100205/org

ditaa

ditaaは、AAで表記した図を画像に変換してくれるソフトウェアです。org-modeから以下のようにして、埋めこむと自動的に変換→変換先へ挿入してくれます。
なお、#+BIGIN_DITAA の次の部分はファイル名を示しており、ここで下の例のようにディレクトリ構造を指定すれば、現在のディレクトリ以外にもファイルを作成できます。

#+BEGIN_DITAA ditaa-test.png -s 2
+--+
|  |
+--+----+
|cRED x |
\-------/
#+END_DITAA
 
#+BEGIN_DITAA images/ditaa-image.png -s 2
/--\                 /-----\
\--/           /-----+ xyz |
+-------+      |     |{d}  |
|{s} ab |<-----+     \-----/
+-------+

ditta-sample1
ditaa-image
ただし、ここで問題になるのが、日本語を含む図を作成する場合、インデント調整の関係で、emacs上では表示が文字列によってはずれることもしばしば…
gitta-emacs1
ditaa-sample

この編集を行う時には、インデントが等幅になっている必要があるのですが、emacsのデフォルトサイズでは、縮尺の関係でうまく等倍間隔になっておらず、非常に合わせづらい状態でした。

そこで、フォントの設定を以下のように変更して調整しました。
まず、emacs上で以下の文を実行することで現在のフォントを確認できます。(scratchバッファで文を記載、C-jで実行)

(frame-parameter nil 'font)
"-unknown-Takaoゴシック-normal-normal-normal-*-13-*-*-*-d-0-iso10646-1"

その後、調べたフォントのサイズを14に変更します。
.emacs(.el)に以下の文を記載します。

(set-default-font "-unknown-Takaoゴシック-normal-normal-normal-*-14-*-*-*-d-0-iso10646-1")
;;(set-default-font "調べたフォント名(文字サイズを14に変更)")

こうすることでサイズが調整されて、うまく表示されるようになります。
after

参考;

http://d.hatena.ne.jp/n314/20080228/1204180907
http://stickydiary.blog88.fc2.com/blog-entry-107.html

Graphviz

Ditaa同様、テキストベースで図を記載でき、orgから直接変換できるソフトウェアです。
Ditaaとの違いは、DitaaがAAで表記するのに対して、Graphvizは要素毎の関係を表記して図化できることです。
例としては、以下のようなコードで下の図が作成できます。

  #+begin_dot example.png -Tpng
  digraph sample {
    node [shape=box];
    a [label="A"];
    b [label="B"];
    c [label="C"];
 
    node [shape=ellipse];
    x [label="X"];
    y [label="Y"];
    z [label="Z"];
    a -> b [label=" A-B "];
    b -> c [label=" B-C ",dir=back];
    c -> a [label=" C-a ", style=dashed];
    x -> y;
    z -> y;
  }
  #+end_dot

Graphxiz_example

LaTeX形式に変換

上記のルールで作成したorgファイルをLaTeX形式に変換するには、emacs上で”C-c C-e l”を入力します。
正しく記載されていれば、同ファイル名.texでtexファイルが出力されています。(問題があれば、emacsのエコーエリア(一番下の部分/エコー領域とも)にエラー出力されているので訂正してください。)
後は通常のLaTeX文章と同様にコンパイルすれば、作成完了です。

また、このとき”C-c C-e h”とすれば、HTMLとして出力したりと、他の形式にも変換できます。詳しい変換先、及びキーバインドは、”C-C C-e”を入力したときに表示されるので、そちらを確認してください。

Tips

基本的にここに書いてあることは、変換後のLaTeXソースを直接いじれば、簡単に実現できるのですが、そうした場合それ以降はLaTeXの方だけをいじるようにしないと整合性がとれなくなってしまうので、今回の目標からずれてくるのでorgに記述する方法を模索しています。

表紙無し,目次なしのLeTexを作成

大学のレポートや提出物の場合、表紙が指定のものでないと駄目だったりするので、LaTeX側の表紙が邪魔だったりします。その時は以下の文を初期設定に加えます。

#+LATEX_HEADER: \renewcommand\maketitle{}

実際、ただ単に\maketitleを空白に置き換えてるだけですが、一応これで目的としては達成できます。
同様に目次をなくすときにも以下のようにすれば実現可能です。

#+LATEX_HEADER: \renewcommand\tableofcontents{}

課題

Ditaaの画像挿入時のCaption追加

上にあげた様に#BEGIN_GITAAでGITAAの画像を自動挿入できますが、その時LaTeXでは次のように変換されます。

\includegraphics[width=10em]{images/outline_0af598dd9c2f8bcac3a3889f028ddd496224d457.png}

これで画像自体は表示されますが、私がLaTeXで作る文章は図番号やCaptionを書式として入れて置かなければならないのですが、この場合それができないのです…

最終的には、今回はLaTeXのソースを直接最後に編集しましたが、途中でも言ったように文章間の整合性がとれなくなるので、改善方法を探したいところです。

参考文献の挿入

上記と同様に参考文献を挿入したい時も、書式がわからずorg-modeからの変換は今回諦めました。

最悪、LaTeXのコードをorg内に直接埋め込んでも、大体はそのまま表示してくれるのでそれでも何とかはなるのですが、やり方としてかなり乱暴なので、違う方法を見つけたいところです。(それを言ったらTipsのもかなり強引ですが…)

まとめ

今回は、私がレポートを書くときにたまたま見つけた下の参考サイト様方の記事を読んで面白そうだったので、概要や単純に入れるだけでは動かなかったところを書き連ねました。

org-modeは基本的に、慣れさえすれば文章をある程度体裁を整えつつ、時間をかけずにかけると思っているので、うまく課題さえ解決できれば、かなり効率を上げれそうなので、ひとまずこの先は前の課題解決を少しずつ模索してみます。

参考サイト

http://d.hatena.ne.jp/tamura70/searchdiary?word=%2A%5Borg-mode%5D
http://d.hatena.ne.jp/r_takaishi/20100116
http://oku.edu.mie-u.ac.jp/~okumura/texwiki/

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>