Org Export

紹介

Emacs Org-Mode は本当に便利で、ブログを書く際も org2blog.el の使用感には文句のつけようがない。Org-Mode で書いた文章はその他の様々な形式にエクスポートできる。 Org-mode で執筆中の文書内で C-c C-e (org-export) を行うと、

[t]   insert the export option template
[v]   limit export to visible part of outline tree
[1]   only export the current subtree
[SPC] publish enclosing subtree (with LaTeX_CLASS or EXPORT_FILE_NAME prop)

[a/n/u] export as ASCII/Latin-1/UTF-8         [A/N/U] to temporary buffer

[h] export as HTML      [H] to temporary buffer   [R] export region
[b] export as HTML and open in browser

[l] export as LaTeX     [L] to temporary buffer
[p] export as LaTeX and process to PDF            [d] ... and open PDF file

[D] export as DocBook   [V] export as DocBook, process to PDF, and open

[j] export as TaskJuggler                         [J] ... and open

[m] export as Freemind mind map
[x] export as XOXO
[g] export using Wes Hardaker's generic exporter

[i] export current file as iCalendar file
[I] export all agenda files as iCalendar files   [c] ...as one combined file

[F] publish current file          [P] publish current project
[X] publish a project...          [E] publish every projects

と記述されたバッファが分割されたウインドウに出てきて、この状態で例えば h を押すと HTML の文書で保存され、 u を押すと UTF-8 のテキストファイルで保存され… と各種文書へのエクスポート形式が選択できる。

Export as LaTeX

私は普段論文その他の文章を LaTeX を利用して執筆することが多いのだが、その作業もこの org-export を利用すれば実にシンプルになる。Emacs の設定ファイルに、

(require 'org-latex)
(setq org-export-latex-coding-system 'utf-8-unix)
(setq org-export-latex-date-format "%Y-%m-%d")
(unless (boundp 'org-export-latex-classes)
  (setq org-export-latex-classes nil))
(add-to-list 'org-export-latex-classes
             '("jsarticle"
               "documentclass[11pt,a4paper]{jsarticle}
                [NO-DEFAULT-PACKAGES] [PACKAGES] [EXTRA]"
               ("section{%s}" . "section*{%s}")
               ("subsection{%s}" . "subsection*{%s}")
               ("subsubsection{%s}" . "subsubsection*{%s}")
               ("paragraph{%s}" . "paragraph*{%s}")
               ("subparagraph{%s}" . "subparagraph*{%s}")
               ))
(setq org-export-latex-packages-alist
  '(("AUTO" "inputenc"  t)
    ("T1"   "fontenc"   t)
    ("deluxe,expert,multi"     "otf"   nil)
    (""     "txfonts"   nil)
    ...                                     ; 使用するパッケージを適宜追加
    ))

等と書いておいて、例えば、

#+AUTHOR: skalldan
#+TITLE: Org Export
#+LANGUAGE: ja
#+LATEX_CLASS: jsarticle
#+LATEX_CLASS_OPTIONS:[a4j,11pt]
#+LaTeX: tableofcontents
* section
  test
** subsection
   sample
*** subsubsection
    test
**** paragraph
     sample
***** subparagraph
      test

といった org ファイルを用意して C-c C-e d (org export as LaTeX and open PDF file ) を実行すると、

https://skalldan.files.wordpress.com/2011/06/wpid-org-export.png

このように LaTeX ファイルにエクスポートした上で PDF にまで変換し表示してくれる(環境は Emacs 22, org 7.4, pTeX は Macports から)。ただし org-latex.el の org-latex-to-pdf-process のデフォルトは pdflatex が使用されているので、日本語まじりの文章ではうまくいかない。そこで こちら で紹介されているような mypdflatex というシェルスクリプトを作成して(ほぼそのまま拝借、TeX コマンドにはパスが通っているものとする)、

#!/bin/bash

myname="mypdflatex"
TMP="/tmp/mypdflatex$$.out"

if [ "${1##*.}" = 'tex' ]; then
    echo "A"
    src="$1"
    basename="${1%%.tex}"
elif [ -r "${1}.tex" ]; then
    echo "B"
    src="${1}.tex"
    basename="${1}"
else
    echo "file not found: $1" 1>&2
    exit 8
fi

nkf -e "$src" > "$TMP"
cp -p "$src" "$src".bak
mv "$TMP" "$src"
platex -kanji=euc "$basename" && 
platex -kanji=euc "$basename" && 
dvipdfmx "$basename"

このスクリプトに実行権を与え、

$ sudo chmod +x mypdflatex

以下をさきほどの Emacs 設定ファイルに追加しておく。

(setq org-latex-to-pdf-process
       '("mypdflatex %f"))

Org-mode の LaTeX Export については 屯遁さんの記事 を参照させていただいた。

【追記】

kanji=utf8 オプションがあれば上記のスクリプトの nkf の作業は冗長かもしれない。よくみるとリンク先のスクリプトは Debian での使用が想定されていた… ついでに Mac OS X だと最後は Growl で通知してみる。

#!/bin/sh

if [ "${1##*.}" = 'tex' ]; then
    echo "A"
    src="$1"
    basename="${1%%.tex}"
elif [ -r "${1}.tex" ]; then
    echo "B"
    src="${1}.tex"
    basename="${1}"
else
    echo "file not found: $1" 1>&2
    exit 8
fi

platex -kanji=utf8 "$basename" && 
platex -kanji=utf8 "$basename" && 
dvipdfmx "$basename" &&
growlnotify -m "PDF Created."

latexmk を使えばもっとシンプルになる。.latexmkrc に、

$latex  = 'platex -kanji=utf8';
$bibtex = 'jbibtex -kanji=utf8';
$dvipdf  = 'dvipdfmx %O -o %D %S';
$pdf_previewer = 'open %O %S';
$pdf_mode = 3;
$pdf_update_method = 0;

と書いて、Emacs の init.el には、

(setq org-latex-to-pdf-process '("latexmk %f"))

などなど色々可能性はある。

関連記事

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s