2011/12/27

LaTeX Beamer出力のPDFからレジュメを作成する方法

やっとbeamerでスライドができたのはいいけど、
発表の際の規定は、そのスライドを6枚1ページのハンドアウトにしろというもの。
PowerPointなら簡単にできるのだろうか。
あるいは Adobe の Distiller があれば簡単にできたかも。
でも、意地でもうちでもできる解を探す。
ちなみに我が家の環境はUbuntu10.04です。


beamer でスライドを作成する

省略!


Evince で1ページ6面の配置をファイルに出力する

作成したスライドがEvinceに表示されている状態で、
メユーから「印刷」を選ぶと、複数タブのある設定窓が出てくる。
  • 「全般」タブ:ファイルに出力する
    • 名前(N):適当(デフォルトはOutput.pdf)
    • フォルダの中に保存(S):適当
  • 「ページの設定」タブ
    • 段組印刷(S):6
    • ページの順番(D):左から右へ、上から下へ
    • 印刷の対象(O):全てのページ
    • 用紙サイズ(S):A4
    • 用紙の向き(I):横方向
  • Page Handling タブ
    • ページの拡大縮小:印刷可能エリアに合わせる
    • 「自動回転と中央揃え」にチェック
    • 「ドキュメントのページサイズを利用してページサイズを選択する」からチェックを外す ← これ大事
この状態で「印刷」を実行するとPDFが出力される。
だけど、なぜか全ページ上下逆になってしまう。

ちなみに、Adobe reader ではpdfにエクスポートはできず、
psにしか出力でき ない。
distiller は買いたくないので、全部フリーでやる!


PDF-shufflerでページをひっくり返す

Evinceで6面取のページをファイルに出力すると、
そのPDFのページは全て上下 逆さになっている。
これをいちいちひっくり返してやるのだが、
PDF Editor と いうソフトでやると、変なところが文字化けを起こした。
PDF-shufflerであれ ば問題なかった。 

ちなみに、PDF-shuffler は コマンド pdftk のGUIインターフェイスなので、
PDF-shufflerでできることは pdftk にもできる。


 $ pdftk in.pdf cat 1-endS output out.pdf 


flpsed PDF annotator でページ番号を入れる

残念ながら、自動では入れてくれないが、
このソフトを使用すればページ番号 を好きなところに入れることができる。
保存の際には必ずExportすること。
 8ページぐらいなら、大して時間もかからなかった。

2011/12/11

org-mode でbeamer export

「スライドで発表? 大丈夫大丈夫、こっちにゃ emacs+org-mode+platex+beamerっつー強い味方が付いてんだから、余裕っす よ、余裕!」と文字通り余裕をかましていたのですが、いざ作業に入ろうとする とbeamerが動いてくれません(涙)。

ここで、「自力で何とかなるんじゃないか」と作業を始めたが運のつきで、 丸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の自動挿入を抑制することができるとのことであった。こ こに到達するまでの試行錯誤にかなりの時間を費したのだが、「まずは素直 にドキュメントを読むべし」という教訓を得ることができた(笑)。

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には以下のように書いた。


(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にしたファイルを削 除する関数を作成する。
  • バッファで開いているファイル名の取得は 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.

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

- れくれく
- ほちほち
- せけせけ

こんどはこちらもあなどれないことに。
しかしながら、こういうこともあながちないわけではない。
#----------<ここまで>-----------------

2011/12/10

タコライス作成

妻も私もタコライス大好きなのですが、食べたくなる度に、沖縄在住の弟にオ キハムのレトルトタコライスを送ってもらうのも悪い気がします。そこで、台 湾でもあまりお金を掛けずに実現できないかと試行錯誤。 参考にしたページはここ↓。

  「スパイスで作るタコライス。」(SpiceMarket様)


実際に使った材料

  • 牛ひき肉350gぐらい
  • たまねぎ大1コ
  • ニンニク2粒
  • レタス
  • チーズ(ふつうのスライスチーズ)
  • プチトマト
  • ケチャップ(カゴメ) 
  • 塩少々
※スパイス類
  • クミン粉末 小さじ1/4
  • ナツメグ粉末 小さじ1/4
  • チリパウダー 小さじ1/4
  • パプリカ粉末 小さじ1/4
  • ふつうの胡椒 少々

手続
  1. たまねぎ、みじんぎり
  2. にんにく、みじんぎり
  3. たまねぎとにんにくを、少量のオリーブオイルで炒める(煮る?)
  4. 牛ひき肉投入。まぜながら炒める(煮る?)
  5. 煮えた所で、小皿でブレンドしておいたスパイス類を(よく分からないので)一気に投入。
  6. ケチャップを一捻り。味を見て、塩を加えて塩分調整
以上でタコミート完成! お皿に、 ご飯→タコミート→レタスのみじん切り→スライスチーズのみじん切り を載せ(積み?)、プチトマトを周りにゴロゴロ置いてできあがり。 写真は省略します(笑)。


検証

  • とりあえずおいしかった。妻も納得。大満足。
  • 肉の量の割にスパイス類が少なすぎた。倍ほど入れたほうがよかったか。
  • たまねぎを焦したために、一度フライパンを洗うという作業が発生し、時間をロスしてしまった。


備考

  • うちの近所(台湾高雄市)のスーパーには牛ひき肉がないところのほうが多い。少し離れたお店にオージービーフのひき肉が置いてあって助かった。
  • クミンとか、ナツメグとか、料理の好きな人のおうちにはそういうスパイス 類があるのだろうが、うちにはなかった。でも、台湾でも『小磨坊』という 会社が一般家庭用に販売している。ちなみに、パプリカパウダー→匈牙利紅 椒粉、クミンパウダー→孜然粉、ナツメグ→荳蔲粉という名前でそれぞれ売 られています。でも、近所の「全聯」という全国チェーンスーパーにはナツ メグがなかったので、比較的大きいスーパーへ行かないとスパイス類が揃わ ないかも。