EmacsのOrg-modeで論文を書く

## WIP
この文章は未完成ですが，少しずつ書き足していく予定です．

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

#### 参考記事
- チュートリアル的な例は「[こちら](http://akisute3.hatenablog.com/entry/2013/12/28/144918)」
- 網羅的な機能解説は「[こちら](https://tamura70.hatenadiary.org/entry/20100217/org)」

がおすすめです．

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

#### デメリット：
1. 共同編集できない（プレーンLaTeXならOverleafで共同編集も容易）
2. 学習コストが高い

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

#### ここで説明すること：
- Org-modeだけで論文を書き，コンパイルするために使えること

<!--
#### 関連記事：
- EmacsのOrg-modeでプレゼンを作る
- EmacsのOrg-modeでPDF書類を埋める
-->

<!--
## 0. 環境整備
- LaTeXテンプレートの作成
-->

## 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:`をつける．

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

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

## 特定のヘッダーだけ無視させる
<!--Org-modeからLaTeXに出力するとき，ヘッダーの存在を無視させることができます．-->
ヘッダーのタイトル後に(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で

```org-mode
#+OPTIONS: tags:nil
```
としておいて，Org-modeのヘッダーに意味のないタグをつけておく，例えば

```org-mode
* Aiueo :head:
```
としておけば，TaskPaperを扱えるエディタで開いたときにちゃんとヘッダーを畳んだりジャンプしたりできるようになります．


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