LoginSignup
9
8

More than 1 year has passed since last update.

EmacsのOrg-modeで論文を書く

Last updated at Posted at 2019-11-06

WIP

この文章は未完成ですが,少しずつ書き足していく予定です.

はじめに

Emacsの標準機能として備わっているOrg-modeですが,私はこれを「LaTeXを生成するためのソースコード」という位置づけでも頻繁に使っています.この文書では「LaTeXを生成するソースコードとしてOrg-modeを使うために知っておくと便利な技」を重点的に紹介します.

参考記事

  • チュートリアル的な例は「こちら
  • 網羅的な機能解説は「こちら

がおすすめです.

メリット:

  1. Org-modeの強力な編集機能の恩恵を受けられて捗る
  2. LaTeXにはない便利な記法が使えるようになる(Headingを丸ごとコメント化したり,文章内の任意の位置にpreambleを記述したり)
  3. プレーンテキストなので,いざというときにも中身は簡単に移植できる
  4. ほぼそのまま違うテンプレートを使ったりできるので再利用が容易
  5. 最悪の場合でも,部分的にLaTeXをそのまま記述してもよいので,LaTeXでできることは必ずできる

デメリット:

  1. 共同編集できない(プレーンLaTeXならOverleafで共同編集も容易)
  2. 学習コストが高い

こんな人におすすめ:

  • 他の人と共同編集をする必要がない
  • 文章の推敲のためにできればOrg-modeを使いたい

ここで説明すること:

  • Org-modeだけで論文を書き,コンパイルするために使えること

1. 汎用的に使える技

プレーンLaTeXを部分的に使う

Org-modeの表記で全てを賄うのは効率が悪いときがあるので,TeXのコードをそのまま書けると便利です.実際にはOrg-modeのマークアップの部分と混在したようなソースファイルを書いていくことになります.
(行頭が)#+LATEX: で始まる行は,LaTeXエクスポート時に文字通りそのまま書き込まれます.
つまり,最悪の場合でも,Org-modeの中で実現できないTeXコードは無い!ということです.

プレーンLaTeXをさらに部分的に使う

行の途中で、ごく部分的にプレーンLaTeXを挟む記法があります。
それには @@latex:@@ でLaTeXのコードを挟みます。例えば次のように:

Aiueo @@latex:\color{red}Test@@ kakikukeko

これが意外に重宝するのが、タイトルです。

#+TITLE: Title with a @@latex:\\@@ Cooooool Newline

プリアンブルに何かを追記する

Org-latex exportを使うと,ファイルの出力内容は原則として\begin{document}〜\end{document}の間の中身のコンテンツとして埋め込まれます.

ただし,#+LATEX_HEADER:で始めた行は,\begin{document}の前(つまりプリアンブル)に追加されます.この記法が使われるたびに,プリアンブルの最後に追記されていきます.
この記法は文書内のどのタイミングで使っても良いようです.

#+LATEX_HEADER: \usepackage{hyperref}
#+LATEX_HEADER: \def \E {\mathbb{E}}
#+LATEX_HEADER: \newcommand{\todo}[1]{{\color{red}#1}}

推敲途中の内容をまとめてコメント化する

新しくHeadingを作り,:noexport:をつける.

* これはコンテンツ
** ここは出力される

* これはコメント :noexport:
** ここはもう出力されない

特定のヘッダーだけ無視させる

ヘッダーのタイトル後に(1つ以上の半角スペースを入れて):ignore:と書けば,ヘッダーの行はスキップされて中身だけコンパイルされます.これを使うと,出力されるTeXコードに影響を与えずに,可読性を高める(ヘッダーを折りたためるだけでもかなり違いますよ)ことができます.

* このヘッダー行は無いものとして扱われる :ignore:
ここは出力される

* セクション
** 一パラ :ignore:
こうやって書いておけば,
** 二パラ :ignore:
LaTeX内でヘッダーだけ無視してくれるので,意味ごとのまとまりを整理したり移動したりするのに便利.

2. 時々使う技

\begin{hogehoge}〜\end{hogehoge}の間でorg-modeの記法が使えなくなる(のを防ぐ)

\beginから\endまでの間は,LaTeXのコードがベタ書きされているものとして解釈されてしまう.これを防ぐには

#+LATEX: \begin{hogehoge}
ここは *Org-mode* の _記法_ が使える!
#+LATEX: \end{hogehoge}

というふうに,環境コマンドを#+LATEX:行にしてしまえばいい.

3. ごくたまに使う技

行の途中で書いた「{}」がエスケープされてしまう(のを防ぐ)

原則として行頭に#+LATEX:を書けば,その行はエスケープされない.

Itemizeの途中でこれを使いたいときは「行頭に」の条件が満たされないため,出力すると単に文章として「#+LATEX」ごと表示されてしまう.
実はこれは,一行改行して2文字インデントした状態にすればよい.

# ダメな例
- #+LATEX: \hogehoge{}

# うまくいく例
-
  #+LATEX: \hogehoge{}

4. その他のトラブルシューティング

#+LATEX: 行が表示されない

#+LATEX:のあとにちゃんとスペースが必要な場合がある.:のあとに別の:があるとその間が全てオプションだと解釈されて(?)何も出力されないことがある.

iPadで編集したい

Org-modeを扱えるiPadのアプリは今のところ無さそうです(2020年1月現在).
ただし,TaskPaperというマークアップ言語はOrg-modeと少しだけ相性が良いので,それを利用すると多少は編集しやすくなります.
TaskPaperではコロン(:)を使ってヘッダーを作ります.
そこで,Org-modeで

#+OPTIONS: tags:nil

としておいて,Org-modeのヘッダーに意味のないタグをつけておく,例えば

* Aiueo :head:

としておけば,TaskPaperを扱えるエディタで開いたときにちゃんとヘッダーを畳んだりジャンプしたりできるようになります.

その他の概要

基本的には,上から下にかけて順番にOrg-modeのマークアップがTeXに変換されていくイメージです.
ただし,順序として,
1. #+LATEX_CLASS:で指定したクラスがまずプリアンブルに書き込まれる
2. #+LATEX_HEADER:が書かれている行が抽出されてプリアンブルに追加される
3. \begin{document}が自動的にプリアンブルの下に書き込まれる
4. エクスポートする内容の部分のOrg-modeのコードがTeXに変換される
5. \end{document}が書き込まれる
という順序で処理されていきます.

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8