CotEditor から AppleScript で latexmk を叩く

追記: Syncの適切な設定方法とか,より詳細で洗練された情報を書いてくださった方々


TeXShop のようにキーボードショートカット一発で typeset でき,かつプレビューが自動で更新されるような環境を CotEditor と latexmk,あと Skim でつくった。

まず .latexmkrc は以下のとおり。SyncTeX を効かせ,かつ Skim を勝手に開く。そして関連ファイルが更新されるたびに自動でタイプセットしてくれる。Skim は PDF が更新されると勝手に開き直してくれるので,プレビューも自動更新される。これをホームディレクトリに置いた。ちなみに Mac では「開く」ダイアログにおいて Cmd-Shift-. を叩くと不可視ファイルを見ることができる。

#!/usr/bin/env perl

= 'uplatex -synctex=1 -kanji=utf8'; bibtex = 'upbibtex';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex %O -o %D %S';
$max_repeat = 5;
$pdf_mode = 3;
$pvc_view_file_via_temporary = 0;
$pdf_previewer = "open -a Skim";
$preview_continuous_mode = 1;

satomacoto を参考に,以下の AppleScript を

~/Library/Application Scripts/com.coteditor.CotEditor/TeX2PDF.@t.applescript

などと配置した。なお CotEditor のスクリプト置き場はバージョンによって異なり,上記はバージョン 2.3.4 (95) の場合。

tell application "CotEditor"
 if exists front document then
  set thisfile to path of front document as Unicode text
 
  if (thisfile is not "") then 
   set thisbase to (do shell script "/usr/bin/basename " & thisfile)
   set thisdir to (do shell script "/usr/bin/dirname " & thisfile)
   set thisbase1 to (do shell script "/usr/bin/basename " & thisfile & " .tex") 
 
   tell application "Terminal"
    activate
    do script with command "cd " & thisdir & ";" & space & "latexmk " & thisbase & "; && exit"
   end tell
  end if
  activate
 end if
end tell

これにより, Cmd-t を叩くと latexmk が走る。

マスターファイルを指定するなどのマジックはよく知らないので使えないから,マスターファイルを開いた状態で叩く必要がある。僕の環境では .latexmkrc に必要なことをすべて書いてあるので特にオプションはつけていない。.latexmkrc には synctex オプションを書き入れ,Skim でも同期の設定を cot コマンドで指定したから SyncTeX が効くはず。現に Skim 上で Cmd-Shift 押下しながらクリックすると master ファイル以外の子ファイルもちゃんと呼び出してくれる。しかしなぜか line までは呼び出してくれない。

そういえば CotEditor のスニペットが編集できないのもなぜだろう。→Githubで報告したらバグでした。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中