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


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拡張アプリです。

politza/pdf-tools

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.png

pdf-occur

occurです。ふつーにoccurできます。

どうやらoccurバッファでもソートだの何だのいろいろできるみたいですが、あまりいろいろあって全て試せていません。 screenshot-04.png

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をじっくり見たいときは専らこのスタイルで見るようになりました。

screenshot-06.png

ワイドスクリーンが主流の昨今、縦長が圧倒的に多いPDFは@matuuさんが紹介されたように横にPDFを並べることで一覧性がかなり高まります。これだけでもインストールする価値があるのではないかと思います。

大きなディスプレイでPDFなどの文書を読むときは横スクロールが最強だと思うので実装してみた – Dマイナー志向

pdf-outline-minor-mode

imenu相当の機能ですが、バッファ内でサブツリーの表示をトグルできたり、imenuよりいろいろと便利です。outline-modeをベースに作られているようで、ツリー間のジャンプなど一部outline-modeの機能がそのまま使えます。

screenshot-05.png

pdf-sync-minor-mode

SyncTeXを使ってTexファイルとPDF間の場所の同期がとるためのマイナーモードのようです。GNOMEのサイトにあった以下の動画がとてもわかりやすかったです。

久しくTeXを使っていないので試していませんが、うまく動作するのであればかなり便利なのではないかと思います。

pdf-links-minor-mode

pdfのリンク機能のためのマイナーモードです。

pdf-annot-*の関数とかマイナーモード

PDFにアノテーションをつけたり、つけたアノテーションをリスト表示したり保存したりします。

日本語対応

デフォルトのpopplerでは日本語の検索等ができませんが、poppler-dataをインストールすれば、日本語も何の問題もなく使えます。以下のスクショでは「漢字」をoccurしているところです。ただしmigemoはうまく使えませんでした。もしかしたらmigemo.el側で対応すればどうにかなるかもしれません。

screenshot-07.png

やっとPDFビューワになれたEmacs

Emacsでこんなことまでできるのかーと久し振りにびっくりしました。今ではかなり快適にPDFを見ることができてます。

ほかにもいろいろ機能があるようで全然紹介しきれてません。今回紹介しなかった機能としてはhistoryをさかのぼる機能などもあります。 M-x pdf-tools-help して確認してみるのもいいかもしれません。

気になった点としては、大きなPDFを閲覧している時などでoccurしたりするとブロックしてしまう点です。deferredなどを使ってasynchronouslyにPDFを見れると、さらに素敵な生活が待っていそうです。

ウィンドウ管理がイマイチなのも気になりました。e2wmやpowin、direxなどで構造化してやると良さそうです。

いずれにしろまだ全然使いこなせてません。いろいろ触ってみてまた感想なぞ書くかもしれません。