OS X 上自動編譯 LaTeX 與自動更新

在 Windows 上如果用 Adobe Acorbat Reader,會因為預覽器把檔案鎖住,得先關掉再開。在 OS X 或是 Linux 則好一些,常見的預覽器如 OS X 上的 Preview 以及 Skim 或是 Linux 上的 Evince 都能夠自動更新檔案。配上 latexmk 這類自動編譯的 script 事情就變得複雜,要編譯一份略複雜的檔案,需要執行數次 latex 加上 bibtex,如果編譯失敗了,預覽器通常會停止更新。

而 latexmk 提供適當選項,除了編譯亦能夠掌管預覽流程。假設我們用 OS X 上的 Skim 來閱讀 pdf 檔案,在家目錄下的 .latexmkrc 中(也就是 ~/.latexmkrc)底下的設定:

$pdf_previewer = 'osascript -e "set theFile to POSIX file \"%S\" as alias" -e "set thePath to POSIX path of theFile" -e "tell application \"Skim\"" -e " set theDocs to get documents whose path is thePath" -e " if (count of theDocs) > 0 then revert theDocs" -e " if (count of theDocs) = 0 then open theDocs" -e "end tell"';
$pdf_update_method = 4;
$pdf_update_command = 'osascript -e "set theFile to POSIX file \"%S\" as alias" -e "set thePath to POSIX path of theFile" -e "tell application \"Skim\"" -e " set theDocs to get documents whose path is thePath" -e " if (count of theDocs) > 0 then revert theDocs" -e "end tell"';
    其中我們用到了 AppleScript 做條件判斷:

  1. 第一行設定要用什麼程式開啟 pdf 檔。一般在 OS X 可以用 open -a Skim 指定 Skim 為開啟的程式。但實務上 Skim 或許已經開啟檔案了,用 open -a Skim 並不會自動更新,所以加入檢查是否已開啟,若開啟則更新,若無則開啟。
  2. 第二行設定 latexmk 該如何更新檔案,選用 4 才能夠自設指令。
  3. 第三行說明用何指令更新檔案,此處若沒有開啟該檔案則無動作。

將相關設定寫入 .latexmkrc 後,之後用 latexmk 編譯則會使用這些設定,配合前幾篇提到的用 LaTeX Box 作為 vim 編輯的外掛,選用連續編譯模式(令 vim 的全域變數 g:LatexBox_latexmk_preview_continuously1)就可以在每次儲存檔案後,自動用 Skim 開啟及更新檔案囉。

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s