ここで、「自力で何とかなるんじゃないか」と作業を始めたが運のつきで、 丸1日を費してしまうことになりました。 ひょっとしたら、どなたかのお役に立てるかと思い、 そんな苦労を記録しておきます。 なお、問題の解決に当ってはたくさんの方々のブログやWikiを参考にさせていただきました。 厚くお礼申し上げます。
参考までに、うちの作業環境は以下のとおりです。
- Ubuntu 10.04
- Emacs 23.2
- org-mode 7.7
- e-upTeX 3.141592-p3.1.11-100201-u0.30 (utf8.uptex) (Web2C 7.5.4)
- beamer 3.07
問題1:不要な\usepackageがたくさん出力される
問題の概要
org-modeで文書を作成し、それをbeamerで出力しようとするとエラーが出て
pdfが作成されない。「フォントがない」というエラーには、フォントをインストールすることで対処できたが、エラーの大きな原因はorg-modeがtexファイルに自動的に挿入する\usepackageにあるようであった。
このデフォルトの設定をキャンセルしたい。
対策
org-modeでbeamer exportを使用するためには、org-latex.el 内で定義されている org-export-latex-classes という変数値のリストに"beamer" とい
うクラスを設定してやる必要がある。org-export-latex-classesの定義のドキュメントの箇所を読むと、そのbeamerという設定値の中に[NO-DEFAULT-PACKAGES]と書いて
やれば、\usepackageの自動挿入を抑制することができるとのことであった。こ
こに到達するまでの試行錯誤にかなりの時間を費したのだが、「まずは素直 にドキュメントを読むべし」という教訓を得ることができた(笑)。
このように.emacs.elに書いてやることによって、platexもdvipdfmxもエラーを 出さなくなった。ちゃんとpdfファイルも出力されているようであった。だが! (つづく)
1: (add-to-list 'org-export-latex-classes 2: '("beamer" 3: "\\documentclass[uplatex]{beamer} 4: [NO-DEFAULT-PACKAGES]" ;; ← ここ 5: org-beamer-sectioning 6: ))
このように.emacs.elに書いてやることによって、platexもdvipdfmxもエラーを 出さなくなった。ちゃんとpdfファイルも出力されているようであった。だが! (つづく)
問題2:beamer export でpdf出力しても、pdfを上書きしてくれない
問題の概要
一難去ってまた一難。「おー、できとるできとる」と感動に浸ったのも束の間、
元のorgファイルをいくら更新しても、肝心のpdfファイルが更新されないこと
に気付いた。これでは全く意味がない。
diredモードで古いpdfをいちいち削除してやれば、org-beamer は新しいpdfを
作成し、それをプレビューアに渡してくれる。しかし、一旦pdfを作成してしま
うと、その後はそれを削除しないかぎりいくらorgファイルを更新してもpdfを
更新してくれないようだった。ひょっとしたら、pdfの作成にはpdflatexではな
くlatexmkを使用しているため、このような問題が起きているのかも知れないが、
よく分からない。
# 12月12日追記
この問題は、beamerではなく普通のLaTeXの jsarticle 形式にエクスポートする時には発生しません。ということはやっぱりorg-beamerの問題なのかな?分かりません。
# 追記ここまで
ちなみに、わたしはorg→tex→dvi→pdfという作業をlaexmkで行っている。 Org Export(Amrta様)を参考に、.emacs.elには以下のように書いた。
.latexmkrc の内容は以下の通りである。
# 12月12日追記
この問題は、beamerではなく普通のLaTeXの jsarticle 形式にエクスポートする時には発生しません。ということはやっぱりorg-beamerの問題なのかな?分かりません。
# 追記ここまで
ちなみに、わたしはorg→tex→dvi→pdfという作業をlaexmkで行っている。 Org Export(Amrta様)を参考に、.emacs.elには以下のように書いた。
(setq org-latex-to-pdf-process '("latexmk %f"))
.latexmkrc の内容は以下の通りである。
$latex = 'euplatex'; $latex_silent = 'uplatex -interaction=batchmode'; $bibtex = 'upjbibtex'; $dvips = 'dvips'; $dvi_previewer ='start dviout'; # -pv option; $dvipdf = 'dvipdfmx %O -o %D %S'; $pdf_mode = 3; $pdf_update_method = 0; $makeindex = 'mendex -r -c -g -s dot.ist -p any';
対策
どうやら更新されていないのはpdfだけで、orgファイルの変更を反映したtexファ
イルは出力され、それに基づくdviファイルも出力されていた。ということは、
dvipdfmxが何らかの理由で機能していないか何かなのだろう。
pdfファイルを削 除してやれば、dvipdfmxは新しいpdfを作成してくれるので、pdf削除を自動で 実行するようにしてやればよい。orgファイルをpdfに変換する仕事を担ってい るのは、org-latex.el内にあるorg-export-as-pdfという関数である。この関数 を実行する前に、何らかの形でpdfの自動削除を行えばよいことになる。
ステップ1:pdfファイルの削除
バッファで開いているファイル名と同名で、拡張子だけpdfにしたファイルを削 除する関数を作成する。
pdfファイルを削 除してやれば、dvipdfmxは新しいpdfを作成してくれるので、pdf削除を自動で 実行するようにしてやればよい。orgファイルをpdfに変換する仕事を担ってい るのは、org-latex.el内にあるorg-export-as-pdfという関数である。この関数 を実行する前に、何らかの形でpdfの自動削除を行えばよいことになる。
ステップ1:pdfファイルの削除
バッファで開いているファイル名と同名で、拡張子だけpdfにしたファイルを削 除する関数を作成する。
- バッファで開いているファイル名の取得は buffer-file-name
- そこから拡張子だけを削除するのは file-name-sans-extension
- concat を使用して、".pdf"という文字列を付加し、pdfファイル名を取得
- pdfファイルが存在するかどうかを調べる関数は file-exists-p
- pdfが存在する際に削除を行う関数は delete-file
- ミニバッファにメッセージを表示する関数は message
1: (defun my-delete-pdf-file() 2: "カレントバッファのファイル名を持つpdfを削除する" 3: (interactive) 4: (let((pdffile (concat (file-name-sans-extension (buffer-file-name)) ".pdf"))) 5: (if (file-exists-p pdffile) 6: (progn 7: (delete-file pdffile) 8: (message "deleted!")) 9: (message "no pdf file"))))
これを.emacs.elに書いておいた。
ステップ2:org-export-as-pdfとorg-export-as-pdf-open
上で作成した自作の関数を、今度は org-export-as-pdf (キーバインドは C-cC-ep)を実行する前に実行する必要がある。関数を部分加工すると言えば 「必殺マクロ」の defadvice を使用すると便利! (という話はどこかで読んで いたのだが、使用するのは今回が初めて)
このdefadviceを使用して、org-export-as-pdf を実行する前に、 pdf削除の自作関数を実行してくれるようにお願い(アドバイス?)する。 こんな↓のを、.emacs.elに書いておいた。
1: ; "org-export-as-pdfの挙動を変更、先にpdfファイルを削除する" 2: (defadvice org-export-as-pdf 3: (before org-export-as-pdf-before-advice) 4: (my-delete-pdf-file)) 5: (ad-activate 'org-export-as-pdf) 6: ;; (ad-deactivate 'org-export-as-pdf)
16. Emacs Lisp関数のアドバイス(GNU Emacs Lispリファレンスマニュアル)の 例がとても分かりやすかったので、参考にさせていただいた。 同様に、org-export-as-pdf-and-open (キーバインドはC-cC-ed)にも同じよう にdefadviceした。
問題3:pdfのプレビューアがxpdf
問題の概要
org-export-as-pdf-and-open を実行して起動するのはxpdf。表示がちょっと残
念な感じ。Adobeのacroreadはきれいだけど重いし、プレビューを終えemacsで
の編集に復帰しようとすると、emacsをしばらく気絶させてしまう。作業の効率
を考えて evince を使用したい。
対策
org-export-as-pdf-and-open の定義を見ると、pdfファイルを開くのは
org-open-file という関数で、この関数は org-file-apps というリストを参照 して仕事をしている。この org-file-apps はどのような拡張子のファイル
をどのプログラムで開くかという一覧表のリストである。このリストの要素を
変更してやればよい。というか、変更してやってね、とorg-file-appsのドキュ
メント部分に書かれている。いろいろ調べた結果、こうしたリストの一部の要
素だけを変更する customize-set-variable という便利な関数が存在する
(あたりまえか!)。これを使用してブレビューアを evince に変更してやる。
こんな↓感じ。
1: (customize-set-variable 'org-file-apps 2: '(("pdf" . "evince %s")))
一件落着
「実は何か見落していて、もっと簡単な解決方法があるんだろうなー」と思い
ながら、一日がかりで問題をやっつけました。時間はかかりましたが、収穫の
多い作業でした。これでやっと安心して、org-modeでスライドを作成すること
ができそうです。(実は急がないといけない!)
以下のサンプルはWriting Beamer presentations in org-mode(org-modeのオンラインマニュアル)にあったサンプルに、私が加工をほどこしたものです。
ご参考になれば幸いです。
#----------<ここから>-----------------
#+TITLE: ビーマーのサンプル
#+AUTHOR: Kikuk
#+EMAIL: hogehoge@gmail.com
#+DATE: \today
#+DESCRIPTION:
#+KEYWORDS:
#+LANGUAGE: jp
#+OPTIONS: H:3 num:t toc:t \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
#+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js
#+EXPORT_SELECT_TAGS: export
#+EXPORT_EXCLUDE_TAGS: noexport
#+LINK_UP:
#+LINK_HOME:
#+startup: oddeven
#+startup: beamer
#+LaTeX_CLASS: beamer
#+LaTeX_CLASS_OPTIONS: [uplatex,dvipdfm]
#+latex_header: \mode{\usetheme{Singapore}}
#+BEAMER_FRAME_LEVEL: 2
#+COLUMNS: %20ITEM %13BEAMER_env(Env) %6BEAMER_envargs(Args) %4BEAMER_col(Col) %7BEAMER_extra(Extra)
* Methodology
** A simple slide
This slide consists of some text with a number of bullet points:
- the first, very @important@, point!
- the previous point shows the use of the special markup which
translates to the Beamer specific /alert/ command for highlighting
text.
以下のサンプルはWriting Beamer presentations in org-mode(org-modeのオンラインマニュアル)にあったサンプルに、私が加工をほどこしたものです。
ご参考になれば幸いです。
#----------<ここから>-----------------
#+TITLE: ビーマーのサンプル
#+AUTHOR: Kikuk
#+EMAIL: hogehoge@gmail.com
#+DATE: \today
#+DESCRIPTION:
#+KEYWORDS:
#+LANGUAGE: jp
#+OPTIONS: H:3 num:t toc:t \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
#+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js
#+EXPORT_SELECT_TAGS: export
#+EXPORT_EXCLUDE_TAGS: noexport
#+LINK_UP:
#+LINK_HOME:
#+startup: oddeven
#+startup: beamer
#+LaTeX_CLASS: beamer
#+LaTeX_CLASS_OPTIONS: [uplatex,dvipdfm]
#+latex_header: \mode
#+BEAMER_FRAME_LEVEL: 2
#+COLUMNS: %20ITEM %13BEAMER_env(Env) %6BEAMER_envargs(Args) %4BEAMER_col(Col) %7BEAMER_extra(Extra)
* Methodology
** A simple slide
This slide consists of some text with a number of bullet points:
- the first, very @important@, point!
- the previous point shows the use of the special markup which
translates to the Beamer specific /alert/ command for highlighting
text.
The above list could be numbered or any other type of list and may
include sub-lists.
* 第1章
** frame 1 無意味つづり1
- ほにょほにょ
- めげめげ
- とぴとぴ
ここのところがそろそろめきめきに。
* 第2章
** frame 2 無意味つづり part 2
- れくれく
- ほちほち
- せけせけ
こんどはこちらもあなどれないことに。
しかしながら、こういうこともあながちないわけではない。
include sub-lists.
* 第1章
** frame 1 無意味つづり1
- ほにょほにょ
- めげめげ
- とぴとぴ
ここのところがそろそろめきめきに。
* 第2章
** frame 2 無意味つづり part 2
- れくれく
- ほちほち
- せけせけ
こんどはこちらもあなどれないことに。
しかしながら、こういうこともあながちないわけではない。
#----------<ここまで>-----------------
0 件のコメント:
コメントを投稿