WIP
この文章は未完成ですが,少しずつ書き足していく予定です.
はじめに
Emacsの標準機能として備わっているOrg-modeですが,私はこれを「LaTeXを生成するためのソースコード」という位置づけでも頻繁に使っています.この文書では「LaTeXを生成するソースコードとしてOrg-modeを使うために知っておくと便利な技」を重点的に紹介します.
参考記事
がおすすめです.
メリット:
- Org-modeの強力な編集機能の恩恵を受けられて捗る
- LaTeXにはない便利な記法が使えるようになる(Headingを丸ごとコメント化したり,文章内の任意の位置にpreambleを記述したり)
- プレーンテキストなので,いざというときにも中身は簡単に移植できる
- ほぼそのまま違うテンプレートを使ったりできるので再利用が容易
- 最悪の場合でも,部分的にLaTeXをそのまま記述してもよいので,LaTeXでできることは必ずできる
デメリット:
- 共同編集できない(プレーンLaTeXならOverleafで共同編集も容易)
- 学習コストが高い
こんな人におすすめ:
- 他の人と共同編集をする必要がない
- 文章の推敲のためにできれば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に変換されていくイメージです.
ただし,順序として,
-
#+LATEX_CLASS:
で指定したクラスがまずプリアンブルに書き込まれる -
#+LATEX_HEADER:
が書かれている行が抽出されてプリアンブルに追加される -
\begin{document}
が自動的にプリアンブルの下に書き込まれる - エクスポートする内容の部分のOrg-modeのコードがTeXに変換される
-
\end{document}
が書き込まれる
という順序で処理されていきます.