以前の記事(beamerでスライド原稿用pdfを作成する(その1))で,Emacsでbeamerを用いてlatexのソースを書いてコンパイルし,スライド原稿としてpdfを出力する方法をまとめた.この際に,pdfの特定の箇所がlatexのソースでどこに当たるのかがわかったり,逆に,latexのソースの特定の箇所がpdf上のどこに当たるのかがわかったりすると便利である.今回はそれについてまとめる.なお,auctexの全般的な設定については,TeXWikiのmacOS での設定例 を参照していただきたい.
Table of Contents
backward search
-
こちらのほうが便利なので最初に説明する.
-
skimで表示されたpdf上の特定の箇所に該当するLaTeX文書の箇所を探して示してくれる.
-
この機能を可能にするには,skimの環境設定を開いて「同期する」の初期値を「カスタム」とし,コマンドのところに以下のように打ち込む.
$ /usr/local/Cellar/emacs-mac/emacs-26.1-z-mac-7.1/bin/emacsclient
-
defaultでは初期値に「Emacs」となっており,本来ならこれで動くはずだが,homebrewで最新のEmacsをinstallしたために,もともと入っているemacsとはversionが異なる.つまり,サーバーとして起動しているEmacsと、使用するEmacsClientのバージョンが異なることになり,このままでは動かない.そこで,homebrewでインストールした方をfull pathで明示的に指示する必要がある.
-
引数のところには,以下のように打ち込む.
$ --no-wait +%line "%file"
-
つまりこうなる.
-
一方,Emacsのinit.orgには以下のように記述して,Emacs serverを立ち上げておく.
#+begin_src emacs-lisp ;; Starts the Emacs server (server-start) #+end_src
-
これで,pdf上の任意の箇所で,Shift-Command-Clickすると,該当するlatex documentの箇所に飛ぶ.
もし,Emacsが立ち上がっていなければ,Emacsを立ち上げるところからやってくれる.素晴らしい!これは確かめてみると勘違いであった.Emacsは立ち上げておかないといけない. -
この機能は知ってしまうと,無くてはならないほど便利に感じる機能である.pdfで間違いを見つけたときに,それがlatexソースのどこに相当するかを同定するのは結構面倒であるが,この機能により一発で同定することができる.
-
該当箇所が少しずれることがあるのが欠点であるが,それでも十分に役に立つ.
forward search
-
こちらも,backward searchほどではないが,役に立つ.
-
Emacs上のlatex document上の特定の箇所に該当するpdfの箇所を探して示してくれる.
-
この機能を可能にするには,init.orgに以下のように記述する.
#+begin_src emacs-lisp (add-hook 'LaTeX-mode-hook (function (lambda () (add-to-list 'TeX-command-list '("displayline" "/Applications/Skim.app/Contents/SharedSupport/displayline %n %s.pdf \"%b\"" TeX-run-discard-or-function t t :help "Forward search with Skim")) ))) #+end_src
-
これで,C-c C-c displayline により,Emacsのlatex document上の特定の箇所に該当するpdfの箇所に飛んでくれる.pdfの該当するところが赤丸で示される(数秒で消える).
-
ただし,該当する箇所が結構ずれてしまうことが多い.最近は,beamerでしか使わないので,もしかすると,通常のlatex 文書だと狂いなく示すのかもしれない.まぁ,backward searchと違って, なくても困らない機能である.