まえがき
以前こういった記事がありました。Ochiailab Tips: Emacs と Skim の連携
Skim という PDF ビューアは使ったことなかったのと、導入コストに比べて作業効率の向上は微々たるものなんじゃないかと思ってずっとやっていなかったのですが、先日該当記事を書いてくれた著者のデモを見て、「これこそ風だ」と思ったので導入を決意しました。
ただ、該当記事に Xtexshop というのが出てくるのですが、僕の Mac にはそんなもの入っておらず何それという感じなので少しだけ違う方法を取ることにしました。
latexmk
というコマンドを使います。
latexmk
について
LaTeX のコンパイル方法にはいくつかありますが、恐らく一番メジャーなのが platex
して dvipdfmx
するというやり方だと思います。ただ、BibTeX なんかも使うと 5 回くらいコマンド打つことになるのでめんどくさくなりがちです。 LaTeX あるあるです。
過去にはこんな記事もあります。
もしくはこういう便利スクリプトを用意してくれている人もいます。
fjyuu/platexpdf
実はこんなことしなくても、最近の LaTeX のパッケージには
platex
や bibtex
や dvipdfmx
など一連のコンパイル作業を自動で行ってくれるコマンドが用意されています。それが
latexmk
です。latexmk
にどういう処理を行わせるかというのは ~/.latexmkrc
で設定できます。僕のは参考サイト丸パクリですがこのようになっています。
$latex = 'platex -synctex=1 -halt-on-error'; $latex_silent = 'platex -synctex=1 -halt-on-error -interaction=batchmode'; $bibtex = 'pbibtex'; $dvipdf = 'dvipdfmx %O -o %D %S'; $makeindex = 'mendex %O -o %D %S'; $max_repeat = 5; $pdf_mode = 3; # generates pdf via dvipdfmx $clean_ext = 'bbl rel %R-blx.bib %R.synctex.gz'; # Prevent latexmk from removing PDF after typeset. # This enables Skim to chase the update in PDF automatically. $pvc_view_file_via_temporary = 0; # Use Skim as a previewer $pdf_previewer = "open -ga /Applications/Skim.app";詳しくは以下の参考サイトを。
latexmk で楽々 TeX タイプセットの薦め(& biblatex+biber で先進的な参考文献処理) - konn-san.com
重要なのは
-synctex=1
というオプションで SyncTeX によって Skim と連携できるようになることです。
$pdf_mode
を 3 にすることで、platex
bibtex
platex
platex
1dvipdfmx
latexmk <tex ファイル名>
というコマンドだけでやってくれます。Skim の設定
Skim をダウンロードしたら環境設定の「同期する」の「PDF-TeX 同期サポート」の「初期値」を Emacs にします。。。が、僕の環境(Yosemite & Homebrew 版 Emacs)だとうまくいかなかったので「初期値」を「カスタム」としてコマンドを "/usr/local/bin/emacsclient" にします。
これは Homebrew 版の Emacs の場合なので他の版の Emacs を使っている場合は適宜修正してください。
あと「ファイルの変更をチェック」もチェックしておけばファイルの変更を監視してくれます。
Emacs の設定
latexmk を Emacs で使えるようにして、カーソルのある行が PDF 上のどこに該当するかを表示する設定です。(server-force-delete) (server-start); start emacs in server mode so that skim can talk to it (add-hook 'LaTeX-mode-hook (function (lambda () ;; Use Skim as viewer, enable source <-> PDF sync ;; make latexmk available via C-c C-c ;; Note: SyncTeX is setup via ~/.latexmkrc (add-to-list 'TeX-command-list '("latexmk" "latexmk %s" TeX-run-TeX nil t :help "Run latexmk on file")) ;; Open PDF via Skim.app (add-to-list 'TeX-command-list '("Skim" "open -a Skim.app '%s.pdf'" TeX-run-command t nil)) ;; Open PDF via Skim.app in the background. (add-to-list 'TeX-command-list '("SkimBG" "open -g -a Skim.app '%s.pdf'" TeX-run-command t nil)) ))) (setq japanese-TeX-command-default "latexmk") (setq TeX-command-default "latexmk") ;; use Skim as default pdf viewer ;; Skim's displayline is used for forward search (from .tex to .pdf) ;; option -b highlights the current line; option -g opens Skim in the background (setq TeX-view-program-list '(("Skim" "displayline -b -g %n %o %b"))) ;; displayline must be available. (setq TeX-view-program-selection '((output-pdf "Skim")))こちらの記事と若干被る設定もあるので適宜修正してください。
Ochiailab Tips: AUCTex + RefTex で快適論文作成
あと
displayline
というコマンドがある場所にパスを通す必要がありますが、通さなくても代わりに
/Applications/Skim.app/Contents/SharedSupport/displayline
と書き換えると大丈夫です。使い方
Emacs 側
- C-c C-c latexmk
latexmk
を実行して、- C-c C-c Skim
- C-c C-v
latexmk
し直してから C-c C-v やると "No matching viewer found." と言われてしまいます。
その時のために- C-c C-c SkimBG
Skim 側
PDF を「Cmd+Shift+クリック」で Emacs 上の該当場所に飛べます。これで LaTeX でも WYSIWYG ライクな編集が可能になりますよ! 使え。
その他参考サイト
latex - Emacs + Synctex + Skim: How to correctly set up syncronization? - Stack OverflowFootnotes:
1 検証が不十分なので 4 がちゃんと行われているかは定かではないけど、イニシャルコンパイルでちゃんと参照できている pdf が生成されていたので行われているはず。
latexmkの解説ありがたいです!
返信削除ကိစ္စမရှိပါဘူး
返信削除고마워요~
返信削除