Emacs上のPDFでisearch,occur,imenuとかなんでもしてしまうpdf-toolsの紹介
- 2014.03.17
- Emacs

Emacsでなんでもしてしまいたい、という需要は今でも少なからずあるようで、Emacs23からはEmacs上でPDFを表示するためのdoc-view-modeが標準でバンドルされるようになりました。
Emacs 23でPDFを表示させる–新機能「DocView」を試す – builder by ZDNet Japan
Emacs で PDF/PS/DVI を閲覧する – とりあえず暇だったし何となく始めたブログ
TeXでの執筆作業やOrg-modeの文書をPDFでエクスポートする場合などなど、PDFのお世話になるEmacserは多いですが、世のEmacserは少なからずこう思ったはずです。
「これじゃない。」
要はこのdoc-view-mode、(ほぼ)見るだけしかできないというかなりのクソモードだったわけです。
せっかくEmacsを使っているのだからPDFをちゃんとisearchしたいし、occurもしたい。あわよくば、imenuとかも出してもらいたい、と世のEmacserは思うわけで、かくいう私も結局acrobat readerとかで見てました。
あー PDFをoccurとかisearchとかしてーなー そんなのどっかに落ちてないかなーと思ってたら本当に落ちてたので、紹介したいと思います。
pdf-toolsについて
pdf-toolsは、popplerを介してPDFをゴニョゴニョするためのEmacs拡張アプリです。
popplerについては、以下の記事が詳しいです。
Poppler – Wikipedia
Popplerについてちょっとだけ – なるひこの Linux Printing お勉強日記
動作環境ですがCがコンパイルできてdoc-view-modeが正しく動作してpopplerが動作すれば使えるのではないかと思います。手元のArchLinuxで元気に動いていますが、頑張ればWindowsとかでも動くかもしれません。Macは使ったことがないのでよくわかりません。
インストールについてはCのコンパイルなどの手順があるので多少面倒です。AURにPKGBUILDを置きましたので、ArchLinuxユーザの方はだいぶお手軽にインストールできると思います。
AUR (ja) – emacs-pdf-tools-git
インストール時のトラブルとしては、設定ファイルで package-user-dir
を変更しているとautoloadの設定がうまくいかないようです。その時は、次のようにことごとくrequireすれば良いかと思います。
(require 'pdf-tools) (require 'pdf-annot) (require 'pdf-history) (require 'pdf-info) (require 'pdf-isearch) (require 'pdf-links) (require 'pdf-misc) (require 'pdf-occur) (require 'pdf-outline) (require 'pdf-render) (require 'pdf-sync) (require 'tablist-filter) (require 'tablist)
使い方
pdf-toolsはdoc-view-mode上で動作するコマンドと複数のマイナーモードで構成されています。とにかくいろいろなマイナーモードが作られています。列挙すると以下のとおりとなります。
- pdf-misc-multipage-minor-mode
- pdf-misc-tool-bar-minor-mode
- pdf-isearch-minor-mode
- pdf-misc-minor-mode
- pdf-sync-minor-mode
- pdf-annot-minor-mode
- pdf-links-minor-mode
- pdf-history-minor-mode
- pdf-outline-minor-mode
- pdf-misc-auto-fit-minor-mode
- pdf-misc-menu-bar-minor-mode
- pdf-annot-update-minor-mode-map
- pdf-info-auto-revert-minor-mode
- pdf-annot-list-follow-minor-mode
- pdf-misc-context-menu-minor-mode
この他にもいろいろとコマンドもあり、全てを紹介するのは骨が折れそうなので、以降ではDDSKKのマニュアルPDFを題材にして、その中をいくつか紹介したいと思います。
pdf-isearch-minor-mode
名前からも想像できますが、PDF内部の文章をisearchするモードです。doc-view-modeでもisearchはできるのですが、本文に色がつかなかったりとてもisearchといえる代物ではありませんが、pdf-isearch-minor-modeではちゃんと色をつけることができますし、C-s、C-rで移動もできてインクリメンタルな検索もできる、本来のisearchができます
pdf-occur
occurです。ふつーにoccurできます。
どうやらoccurバッファでもソートだの何だのいろいろできるみたいですが、あまりいろいろあって全て試せていません。
pdf-misc-auto-fit-minor-mode
ウィンドウの大きさに合わせて、pdfのサイズを自動的に変えてくれるマイナーモードです。
pdf-misc-crop-margins
PDFの余白をカットします。
pdf-misc-multipage-minor-mode
一つのpdfで連続した複数のページを複数バッファに並べて表示するモードです。follow-modeのPDF版といえばわかりやすいかもしれません。
前述の pdf-misc-auto-fit-minor-mode
pdf-misc-crop-margins
との組合せがかなり強力で、PDFをじっくり見たいときは専らこのスタイルで見るようになりました。
ワイドスクリーンが主流の昨今、縦長が圧倒的に多いPDFは@matuuさんが紹介されたように横にPDFを並べることで一覧性がかなり高まります。これだけでもインストールする価値があるのではないかと思います。
pdf-outline-minor-mode
imenu相当の機能ですが、バッファ内でサブツリーの表示をトグルできたり、imenuよりいろいろと便利です。outline-modeをベースに作られているようで、ツリー間のジャンプなど一部outline-modeの機能がそのまま使えます。
pdf-sync-minor-mode
SyncTeXを使ってTexファイルとPDF間の場所の同期がとるためのマイナーモードのようです。GNOMEのサイトにあった以下の動画がとてもわかりやすかったです。
久しくTeXを使っていないので試していませんが、うまく動作するのであればかなり便利なのではないかと思います。
pdf-links-minor-mode
pdfのリンク機能のためのマイナーモードです。
pdf-annot-*の関数とかマイナーモード
PDFにアノテーションをつけたり、つけたアノテーションをリスト表示したり保存したりします。
日本語対応
デフォルトのpopplerでは日本語の検索等ができませんが、poppler-dataをインストールすれば、日本語も何の問題もなく使えます。以下のスクショでは「漢字」をoccurしているところです。ただしmigemoはうまく使えませんでした。もしかしたらmigemo.el側で対応すればどうにかなるかもしれません。
やっとPDFビューワになれたEmacs
Emacsでこんなことまでできるのかーと久し振りにびっくりしました。今ではかなり快適にPDFを見ることができてます。
ほかにもいろいろ機能があるようで全然紹介しきれてません。今回紹介しなかった機能としてはhistoryをさかのぼる機能などもあります。 M-x pdf-tools-help
して確認してみるのもいいかもしれません。
気になった点としては、大きなPDFを閲覧している時などでoccurしたりするとブロックしてしまう点です。deferredなどを使ってasynchronouslyにPDFを見れると、さらに素敵な生活が待っていそうです。
ウィンドウ管理がイマイチなのも気になりました。e2wmやpowin、direxなどで構造化してやると良さそうです。
いずれにしろまだ全然使いこなせてません。いろいろ触ってみてまた感想なぞ書くかもしれません。
-
前の記事
calfwとorg-gcalの連携 2014.03.15
-
次の記事
DiredやOrg-modeのテーブルをシマシマにするstripe-bufferの紹介 2014.04.08