Org-Mode で日本語 PDF を出力できるようにする

提供: MoreslowlyWiki

Emacs の Org-Mode で日本語 PDF を出力できるようにする方法について。

Hgwr 2010年10月10日 (日) 02:53 (UTC)

試した環境: Debian squeeze と Mac OS X

目次

platex を使える環境にする

Debian の場合

次のページを参考にして、インストールをする。

各ページとも 2010-10-10 ごろ閲覧

$ sudo aptitude install ptex-jtex yatex xdvik-ja cmap-adobe-cns1 cmap-adobe-gb1 cmap-adobe-japan1 cmap-adobe-japan2 gs-cjk-resource ttf-ipafont poppler-utils poppler-data texlive-latex-extra

新規に /etc/texmf/texmf.d/50dvipdfmx.cnf を作成する。

CMAPINPUTS=.;/usr/share/fonts/cmap/adobe-japan1//;/usr/share/fonts/cmap/adobe-japan2//;/usr/share/fonts/cmap/adobe-gb1//;/usr/share/fonts/cmap/gs-cjk-resorce//

CMAPFONTS の設定も変える。

$ diff -u texmf.d/85Misc.cnf.orig_20080728 texmf.d/85Misc.cnf
--- texmf.d/85Misc.cnf.orig_20080728    2008-07-28 07:53:54.000000000 +0900
+++ texmf.d/85Misc.cnf  2010-10-10 04:51:18.000000000 +0900
@@ -5,7 +5,7 @@
 ENCFONTS = .;$TEXMF/fonts/enc//

 % CMap files.
-CMAPFONTS = .;$TEXMF/fonts/cmap//
+CMAPFONTS = .;/var/lib/defoma/gs.d/dirs/CMap//;$TEXMF/fonts/cmap//

 % Subfont definition files.
 SFDFONTS = .;$TEXMF/fonts/sfd//
$ sudo update-texmf

dvipdfmx で PDF ファイルに IPA フォントを埋め込むようにする。

/usr/share/texmf-texlive/fonts/map/dvipdfmx/cid-x.map を次のようにする。

rml  H ipam
gbm  H ipag
rmlv V ipam
gbmv V ipag

ためしに次のファイルを euc-jp で保存して platex と dvipdfmx をつかって pdf ファイルにする。

\documentclass{jarticle}
\begin{document}
こんにちは、世界。
Hello, World.
\end{document}

Max OS X の場合

奥村 晴彦 著 改訂第5版 LaTeX2e 美文書作成入門 に付属の CD-ROM からインストールする。

mypdflatex

org-mode で utf-8 でテキストを書いて org-export-as-latex をしたら utf-8 の LaTeX コードが生成される。

Max OS X の platex (/usr/local/texlive/p2009/bin/i386-apple-darwin10.3.0/platex) は、実行前に nkf してくれるみたい。

Debian の場合は platex にかける前に自分で nkf で euc-jp にする必要がある。

nkf じゃなくて Emacs の set-buffer-file-coding-system で euc-jp に変換しようとしたら、うまくいかなかった。

nkf で euc-jp に変換して、 platex にかけて、 dvipdfmx まで実行するシェルスクリプト mypdflatex をパスの通ったところに置いておく。

#!/bin/bash

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 "$basename" && platex "$basename" && dvipdfmx "$basename"

Mac の場合は、 上のスクリプトの TMP=... より上あたりで PATH の設定をしておく必要があった。

PATH="/usr/local/bibunsho/bin/i386-darwin:\
/usr/local/texlive/p2009/bin/i386-apple-darwin10.3.0:\
/usr/local/texlive/2009/bin/universal-darwin:\
$PATH"

.emacs で org-mode 用の設定をする

次のような設定をする。

  • documentclass で article じゃなく jarticle を使うようにする。
  • hyperref では divpdfmx オプションを付ける Re: hyperref error
  • pdflatex のかわりに mypdflatex を使うようにする。
  • Mac の場合は mypdflatex はフルパスで書く必要があった。
  • デフォルトだと org-export-as-latex の最中に ^ を上付き文字へ、 _ を下付き文字に変えるような変換をしてくれるけど、好みで無効にする。 Disabling underscore-to-subscript in Emacs Org-Mode export - Stack Overflow

そうすると、 C-c C-e p で PDF ファイルが生成され、 C-c C-e d で PDF ビューワ起動までしてくれるようになる。

あとは aptitude install emacs23-el などして、 org-latex.el のソースを読む。

  • 場合によっては \documentclass[a4j]{jarticle} でなくて \documentclass[a4paper]{jsarticle} など。
  • \\usepackage[draft,dvipdfmx]{hyperref} のなかの draft をとると、しおりが PDF に入るようになる。
  • PDF のしおりの部分が文字化けする場合は [1] にある通り、\usepackage[dvipdfmx]{hyperref}の前に、下を書いておくといいみたい。
\usepackage{atbegshi}
\ifnum 42146=\euc"A4A2 \AtBeginShipoutFirst{\special{pdf:tounicode EUC-UCS2}}\else
\AtBeginShipoutFirst{\special{pdf:tounicode 90ms-RKSJ-UCS2}}\fi
(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
(define-key global-map "\C-cl" 'org-store-link)
(define-key global-map "\C-ca" 'org-agenda)
(define-key global-map "\C-ct" 'org-todo)
(setq org-log-done '(state))
(add-hook 'org-mode-hook
          '(lambda ()
             (flyspell-mode t)
             (auto-fill-mode 0)
             (local-set-key [(control return)] 'newline-and-indent)))

(setq org-export-latex-classes
        '(("article"
     "\\documentclass[a4j]{jarticle}
\\usepackage{graphicx}
\\usepackage{longtable}
\\usepackage{float}
\\usepackage{wrapfig}
\\usepackage{soul}
\\usepackage{atbegshi}
\\ifnum 42146=\\euc\"A4A2 \\AtBeginShipoutFirst{\\special{pdf:tounicode EUC-UCS2}}\\else
\\AtBeginShipoutFirst{\\special{pdf:tounicode 90ms-RKSJ-UCS2}}\\fi
\\usepackage{url}
\\usepackage[draft,dvipdfmx]{hyperref}
\\usepackage{amssymb}"
     ("\\section{%s}" . "\\section*{%s}")
     ("\\subsection{%s}" . "\\subsection*{%s}")
     ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
     ("\\paragraph{%s}" . "\\paragraph*{%s}")
     ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))))

(setq org-latex-to-pdf-process
      '("mypdflatex %b" "mypdflatex %b"))
(setq org-export-with-sub-superscripts nil)

2014-11-15 追記

Emacs 24.4.1 になって Org 8.0 になったら、下記の変数名を直す必要がありました。

  • org-export-latex-classes -> org-latex-classes
  • org-latex-to-pdf-process -> org-latex-pdf-process

参考: http://orgmode.org/worg/org-8.0.html

画像ファイルを含める

参考にしたページ

ATTR_LaTeX: のところに width=5cm のほかに、bb=0 0 527 400, clip, として画像の実際のピクセルサイズを指定してやったら、うまくいった。

#+CAPTION: くつろぐゴン
#+LABEL: fig:gon
#+ATTR_LaTeX: bb=0 0 527 400, clip, width=5cm
[[file:20101012_130026_527x400.jpg]]
個人用ツール