コンテンツへスキップ

モーレツ! Org mode 教室 その3: 文章の見た目を修飾する


もくじ

Org modeは、文字や文章の修飾機能も豊富である。Emacs上での見た目にもそれなりに反映されるが、特に威力を発揮するのは、HTMLなど他の形式へのエクスポート(変換)においてだろう。

ちなみにいきなり余談だが、見出しの文字を大きくしたりしてOrg modeのEmacs上での見た目を多少改善する、 org-beautify-theme というEmacs テーマがある。現在、Emacsの拡張機能はMELPAというレポジトリに多く集まっていて、このorg-beautify-theme もそこにあるので、~/.emacs.d/init.el に

(require 'package)
(add-to-list 'package-archives
         '("melpa" . "https://melpa.org/packages/"))
(package-initialize)

を入れて前々回出てきたpackage-elのパッケージ取得先にMELPAを追加し、Emacsを再起動するか init.el を開いて M-x eval-buffer した上で、 M-x package-install でorg-beautify-themeを指定すれば簡単にインストールすることができる(もちろんM-x list-packagesから選んでインストールすることも可能)。その上で、 M-x load-theme org-beautify で試してみるとよい。なお、 * などのブレット文字をUTF-8の記号に置き換える org-bullets という拡張もある。

エクスポート

ということで、先にOrg 形式から他フォーマットへのエクスポートのやり方を説明しておくと、ようは C-c C-e である。これを打つとメニューが表示されるので、それを見ながら、例えばHTMLなら h, Markdownなら m と打ち、さらにもう一度同じ文字を打って出力先を選ぶと変換される。これら以外の形式を指定するやり方や、変換範囲の設定などもメニューに書いてある。またはThe Org Manual: Exportingを読むとよい。また、ドキュメント変換ツール Pandocを使う手もある。

Markdownとの比較

Orgの記法(Org Syntaxと呼ばれる)もいわゆる軽量マークアップ言語の一つだが、今どき軽量マークアップ言語と言えばやはりMarkdownだと思う。ということで、Markdownとの対照表を作ってみた。

修飾内容 Orgの記法 Markdownの記法
見出し * 見出し # 見出し
コメント # コメント <!– コメント –>
強調(太字) **強調(太字)** **強調(太字)**
斜体(イタリック) /斜体(イタリック)/ *斜体(イタリック)*
下線 _下線_ <u>下線</u>
打ち消し +打ち消し+ ~~打ち消し~~
インラインコード ~インラインコード~ `インラインコード`
見た目そのまま(文字は等幅) =そのまま= `そのまま`

コメントにするとエクスポートで出力されなくなる。

なお、段落は前後の空行で分けられる。強制的に改行したければ文末に2つ半角スペースを入れる。このへんもMarkdownと同じである。水平線はダッシュを最低5つ、 すなわち ----- である。3つ以上で良いMarkdownとは若干違う。


また、 = のようなマークアップに使われる文字の前後には、半角スペースを一つ入れないとうまく解釈されないことがある。Emacs上で色が変わっているか確認すると良い。全角カンマやピリオドの後などが要注意である。

リスト

Org modeのリスト(箇条書き)の扱いはなかなか優秀だ。文中の好きなところで、とにかく行頭から始めるかインデントを合わせ、 -+ といったいかにもブレットになりそうな文字を書き並べてそれっぽくすれば、箇条書きとして扱ってくれる。

- 項目1
  - 子項目1
  - 子項目2
- 項目2
  1) その1
  2) その2
- 項目3
  • 項目1
    • 子項目1
    • 子項目2
  • 項目2
    1. その1
    2. その2
  • 項目3

といった具合で、 1.1) から始めれば、順序のある箇条書きとなる。インデントを下げれば入れ子も可能。箇条書きの行のどれかの上で C-c - を押すと箇条書きのブレットが次々と変わるのでやってみるとよい。また、箇条書きの上で C-c を打つと、番号が振り直されるので便利である。

見出しと定義、というタイプのリストは、 :: で分ける。

- ラーメン :: 醤油、塩、味噌など
- カレー :: アルー・ゴビー、バラック・サブジ、ラジマなど
  • ラーメン: 醤油、塩、味噌など
  • カレー: アルー・ゴビー、バラック・サブジ、ラジマなど

といった具合。

また、箇条書きの行の上で M-RET を押せば下に新しい行が挿入される。 M-上矢印M-下矢印 で項目の順序を入れ替えることもできる。大体順番を入れ替えるのはこのコマンドである。ちなみに普通は見出しとして使われる * も、行頭にせず適当にインデントすればブレットとして扱われる(が、混乱するのでやめたほうが無難)。

さらに、箇条書きの行の上で M-S-RET を押すとチェックボックスが挿入される。

- 人としてやるべきこと [/]
  - [X] 盆栽に水をやる
  - [ ] 子孫に美田を残す
  - [ ] 借金を返す 
  • 人としてやるべきこと [1/3]
    • [X] 盆栽に水をやる
    • [ ] 子孫に美田を残す
    • [ ] 借金を返す

チェックボックス行の上で C-c を押すとチェックされ、もう一度押すと元に戻る。

また、見れば大体見当が付くだろうが、 [/] を書いて C-c を打つと、その下の箇条書きのチェックボックスの数を数えて表示してくれる。 [%] と書くとパーセント表示になる。

他にも細かな操作が可能なので、The Org Manual: Plain listsを読むとよい。

リンク

厳密には見栄えの問題ではないが、Org modeではリンクも簡単に張ることができる。そもそも https://www.mhatta.org/wp/ といった具合で、ただURLを書けばすぐにリンクになる。最初は面食らうかもしれない。

説明をつけたければ C-c C-l である。まずリンクを入力し、次いで説明を入力する。するとリンクが挿入される。私のブログ といった具合である。リンク上でもう一度 C-c C-l を打つと編集できる。また、リンク上で C-c C-o を押すとWWWのURLならブラウザ、PDFファイルならPDFビューワといった具合で、適切な手段で開いてくれる。

もちろんOrg modeなので、すべてはプレーンテキストで表現されている。

[[https://www.mhatta.org/wp/]]
または
[[https://www.mhatta.org/wp/][私のブログ]]

といった具合に書かれているわけで、これを手で書いても構わない。Markdownとはリンクと説明の順序が逆ですね。

実はウェブのリンク以外にも、ファイルやメール、学術論文のdoiへのリンクなども簡単に張ることができる。 C-c C-l の補完内容をチェックしてみてほしい。また、何かのファイルを開いて C-c l を打つと、行番号など位置情報も含めて適切なリンクを勝手に考えて保存してくれるので、それを C-c C-l で挿入できる。こんな具合でリンクも実は奥が深いというか泥沼なのだが、より詳しくは The Org Manual: Hyperlinks を見るとよい。

上付き文字、下付き文字、LaTeX

Org modeの愛用者には科学者が多いせいか、数式を記述するのに便利な機能も多い。いわゆる上付き文字、下付き文字はネイティヴにサポートされていて、たとえば x^{上付き}y_{下付き} といった具合に記述できる。科学で多用されるギリシャ文字も、 \alpha\beta のように記述できる。Emacs上ではただのプレーンテキストだが、HTML等にエクスポートすればそれなりの見た目になる。なおEmacs上でも、運が良ければ C-c C-x \ (最後は円マーク)を押すとがんばってレンダリングされるかもしれない。

もう少し複雑な数式となると、 \begin{}\end{} で囲ったり、 $ でくくったりすればLaTeXの記法がそのまま使える。例えば $y=\sqrt{x}$ といった具合である。例えばHTMLエクスポートだと、デフォルトではMathJaxでレンダリングされるので、LaTeX一式は必要ない。もちろんLaTeXにレンダリングを任せることもできる。

表のサポートはOrg mode最大のダークサイドで、といっても出来が悪いのではなくむしろ意味不明に高機能であって、表計算やプロット、果ては高度な科学計算まで出来て頭がおかしい感じなのだが、機会があれば別途もう少し詳しく説明したい。そんなわけで、ここでは最低限に留めるが、より詳しくは The Org Manual: Tables を見てもらいたい。

といっても書き方自体としてはあまり説明することはなく、ASCII文字を駆使して表っぽく書けば表として扱ってくれるのである。基本としては、 | で区切ってデータを入力していけばよい。また、行の最初で |- などと入力して TAB を打つと、グラフの横幅まで横線が引かれる(一番下の横線は、 C-c - で引ける)。例によって表の要素は M-矢印 で移動できる。

とにかくわからなくなったら TABC-c を押せば適当に整形してくれるはずである。Org mode上での見た目はしょぼいが、HTML等にエクスポートすればそれなりに見栄えのする表にしてくれる。

|--------+------+------+------+------|
| 氏名   | 数学 | 英語 | 国語 | 合計 |
|--------+------+------+------+------|
| 野比   |    5 |   20 |   50 |      |
|--------+------+------+------+------|
| 出来杉 |   80 |   80 |   80 |      |
|--------+------+------+------+------|
氏名 数学 英語 国語 合計
野比 5 20 50  
出来杉 80 80 80  

さらに、野比の合計欄(2行目・5列目)で C-c = を打つと、 Column formula for $5 と聞いてくるので、 vsum($2..$4) などと入力してやると、野比の合計が計算される。また、下に追加される #+TBLFM の行の上で C-c を打つと表全体が再計算され、出来杉の合計も計算される。いわゆる表計算が出来るのである。

|--------+------+------+------+------|
| 氏名   | 数学 | 英語 | 国語 | 合計 |
|--------+------+------+------+------|
| 野比   |    5 |   20 |   50 |   75 |
|--------+------+------+------+------|
| 出来杉 |   80 |   80 |   80 |  240 |
|--------+------+------+------+------|
#+TBLFM: $5=vsum($2..$4)
氏名 数学 英語 国語 合計
野比 5 20 50 75
出来杉 80 80 80 240

すでにお察しの通り、行が @ 、列が $ で表現されていて、ピリオド2つで範囲を指定する。 vsum() はEmacsの知られざる黒魔術の一つである Emacs Calc (名前は Calc だが実際の機能は Mathematica 並み)の関数だ。ということで、ここから先は魅惑の泥沼が広がっている。

なお、あらかじめヨコ5×タテ2などとサイズが決まっている場合は、 C-c | を打ってそう指定すればそのサイズの表を用意してくれる。さらに、CSVで

氏名,数学,英語,国語,合計
野比,5,20,50,75
出来杉,80,80,80,240

などと書いて、リージョンとして選択した上で C-c | を押すと、表にしてくれたりもするのである。 M-x org-table-import を使うとファイルからインポートすることもできる。

引用やコード等の挿入

まず、行頭に : を書くと、マークアップを無視してそのまま表示される。Markdownで言うところの4文字スペースインデントに相当。

: いわゆる verbatim 表示。
: **強調** などのマークアップが無視される。
: 改行は無視されない。
いわゆる verbatim 表示。
**強調** などのマークアップが無視される。
改行は無視されない。

また、Org にはブロックという概念があり、 #+BEGIN_ブロックの種類#+END_ブロックの種類 で囲うと、そこがひとまとまりとして扱われる。例えば引用は、

#+BEGIN_QUOTE
鳴かぬなら殺してしまえホトトギス -- 織田信長
#+END_QUOTE

鳴かぬなら殺してしまえホトトギス – 織田信長

といった具合で、左と右にマージンが設定される。Markdownで言えば>である。

シャープ、プラス、ビギンなどといちいち入力するのは面倒だという人もいるだろうが、実は Easy Templates という機能のおかげで <q と入力して TAB を押すと補完入力されるので、そうでもない。QUOTEのqですね。

例は #+BEGIN_EXAMPLE から #+END_EXAMPLE である。これも、 <e と入力して TAB で補完される。EXAMPLEのeですね。

#+BEGIN_EXAMPLE
例の例の例。**お元気**ですか。
#+END_EXAMPLE
例の例の例。**お元気**ですか。

これは実質的には verbatim 表示と同じで、ブロック内のマークアップが無効となる。

ソースコードを引用したければ、 #+BEGIN_SRC から #+END_SRC である。これも、 <s と入力して TAB で補完される。SRCのsである。さらに、 #+BEGIN_SRC のうしろに言語名を書くと、言語の文法に従って適切にハイライト表示されるし、エクスポートでも考慮される。このあたりもMarkdownの ``` と同じだ。

#+BEGIN_SRC emacs-lisp
(defun xor (a b)
     "Exclusive or."
     (if a (not b) b))
#+END_SRC
(defun xor (a b)
     "Exclusive or."
     (if a (not b) b))

ちなみに、 #+BEGIN_SRC の後ろで C-M-i を押すと、Org modeが対応している言語の一覧が出てくるので簡単に指定できる。

さらに、Org modeには Org-babel という機能があり、コードブロック内のコードをOrg modeの中から実行できるのだが(PythonやらC++やらGNU Rはもとより、シェルスクリプトも書けるし、SSH経由で遠隔操作できたりもする)、それはまたそのうち。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください