« ^ »

Emacsでorg-modeの上付き文字と下付き文字の記法を切り替える

所要時間: 約 4分

TL;DR

  • Emacsのorg-modeの上付き/下付き文字の設定を確認した。
  • アンダースコアやキャレット文字を使用することで制御できる。


Emacsのorg-modeの上付き/下付き文字の設定を変更してHTMLに変換した時にどのように出力されるのかを確認します。また部分的に変換する方法についても確認します。

表示がおかしくなる?

次のOrgファイルをみてください。

base.org::

#+begin_example
- 10^24
- 10^-12
- x^2-y^3
- x_{i^2}
- snake_case_function_name() is a function.
#+end_example

このファイルをHTMLに変換します(base.orgを開いて M-x org-html-export-as-html )。

(一部抜粋)

ブラウザではこのように表示されます。

https://s3.qrunch.io/47d65c11bfe0e55a2ae0b5bc2808bd2f.jpg

5行目の snake_case_function_name() is a function. のところが下付き文字になってしまっていて期待通りとは言えない表示になっています。

^ は上付き文字、 _ は下付き文字の記法に使われる文字

Orgでは _^ はマークアップの為に使われる文字です。 ^ は続く文字列を上付き文字、 _ は続く文字列を下付き文字として扱います。

文字意味
^続く文字列を上付き文字にする
_続く文字列を下付き文字にする

特にunder score( _ )は関数名などで使われることも多いので、関数名を書く時に常にこのような表示になってしまうのは困ります。

上付き/下付き文字の記法を解釈させない

Orgファイルのヘッダーの設定でこの挙動を変更できます。Orgファイル内に #+OPTIONS: ^:nil を追加すると、この記法を解釈しないように設定できます。

disable.org::

#+OPTIONS: ^:nil
- 10^24
- 10^-12
- x^2-y^3
- x_{i^2}
- snake_case_function_name() is a function.

このファイルをHTMLに変換します。

(一部抜粋)

ブラウザではこのように表示されます。

https://s3.qrunch.io/65993b283d5146b3f173f1dbcdb0ca2e.jpg

最後の snake_case_function_name() is a function. は正しく表示されるようになりましたが、他の上付き/下付き文字にしたいところも無効になってしまいました。

上付き/下付き文字の記法を一部分だけ解釈させる

最後の snake_case_function_name() is a function. はそのまま出力して欲しいですが、他のものは上付き/下付き文字として解釈して欲しいところです。今度は #+OPTIONS: ^:{} のように {} を設定します。

sub.org::

#+OPTIONS: ^:{}
- 10^24
- 10^-12
- x^2-y^3
- x_{i^2}
- snake_case_function_name() is a function.

このファイルをHTMLに変換します。

(一部抜粋)

ブラウザではこのように表示されます。

https://s3.qrunch.io/7578a89e21ba966e1da8168eda1b6232.jpg

1〜3行目は記法が無視されました。4行目は部分的に記法が無視されたようです。5行目は記法が無視されて期待通りの表示になりました。この設定は ^ および _ の直後が {} で括られている時のみ解釈させられます。それに合うようにsub.orgを修正し、sub-fix.orgとして保存します。

sub_fix.org::

#+OPTIONS: ^:{}
- 10^{24}
- 10^{-12}
- x^{2-y^{3}}
- x_{i^{2}}
- snake_case_function_name() is a function.

このファイルをHTMLに変換します。

(一部抜粋)

ブラウザではこのように表示されます。

https://s3.qrunch.io/b8a3038d49df9cbcfbd7f205f050ccb3.jpg

1〜4行目は上付き/下付き文字が解釈されて、5行目は下付き文字ではなくなっています。全て期待通りの表示になっています。

org-export-with-sub-superscriptsを設定して全体的に設定を変更する

これまではOrgファイルのヘッダーに設定を記述していました。しかしこれでは全てのOrgファイルに設定を追加しなければなりません。Orgファイルがたくさんある場合はそんなことしたくありません。この設定はEmacs Lispの変数からも設定可能です。

記法を無効にする設定::

(custom-set-variables '(org-export-with-sub-superscripts nil))

{} で括られたところだけ記法を有効にする設定::

(custom-set-variables '(org-export-with-sub-superscripts '{}))

Emacs Lispで設定する場合 {} は評価できないので '{} のように ' を使ってシンボルを設定します。

記法を有効にする設定::

(custom-set-variables '(org-export-with-sub-superscripts t))

org-export-with-sub-superscriptsに設定できる値

org-export-with-sub-superscriptsにはnil, {}, それ以外が設定できます。

意味
nil解釈しない
'{}^ および _ の直後が {} で括られている時のみ解釈する
上記以外解釈する

文書の記述内容によって値の変更をすると良いでしょう。(デフォルト値には "'{}" が適切な気がしますが、なぜそうなっていないのでしょう…)

まとめ

Orgの上付き/下付き文字の設定を変更して挙動を確認しました。Orgファイル内で設定するには #+OPTIONS: ^:値 を使って設定しました。Emacs Lispの変数から設定する場合はorg-export-with-sub-superscriptsをcustom-set-variablesを使って設定しました。 設定値は nil , {} とそれ以外を設定できることを確認しました。