2009年12月4日金曜日

AutoHotkeyを使ったTexのコンパイル

このエントリーをはてなブックマークに追加
私は,普段エディタにはEmEditorを使用しています.
論文等書く際にTexを使う必要がありますが,WinShellなどは使わず,EmEditorで編集してから,バッチファイルを実行することにより,.texを.dviや.ps, .pdfにしていました.

ここで,AutoHotkeyを利用して,EmEditorがアクティブな状態で,ホットキーを押すと,texファイルのコンパイルを行ってくれるようにしました.
(EmEditorのTexプラグインもあるのですが,どうも使いづらい)

AutoHotkeyのスクリプトは下記のようになります.
プログラム内部では,platex, dviout, dvipdfmのコマンドを使用しています.
これらのコマンドがお使いの環境で使用できることを確認してください.

このスクリプトでは,EmEditorで,texファイルを編集している時,F5を押すと,texファイルをコンパイルし,dvioutからdviファイルを閲覧することができます.
また,Ctrl+F5を押すと,tex=>dvi=>pdfの変換を行った後,pdfファイルを開いてくれます.

/*
platex,dviout,dvipdfmが使用できる必要あり
*/

#NoEnv

; EmEditorか判断
#IfWinActive, ahk_class EmEditorMainFrame3
 *F5::             ; 任意キーとF5 or F5が押された場合
  GetKeyState, ctrlFg, Ctrl    ; Ctrlが押されているか?

  WinGet, window,, ahk_class EmEditorMainFrame3
  WinGetTitle, title, ahk_id %window%  ; title=>C:\aaa\bbb\ccc.tex -EmEditor

  StringSplit, array, title, " "   ; array=>{C:\aaa\bbb\ccc.tex,-EmEditor}
  filePath = %array1%       ; filePath=>C:\aaa\bbb\ccc.tex
  StringRight, extension, filePath, 4  ; extension=>.txt

  If extension = .tex
  {
   StringGetPos, pos, filePath, \, 1
   StringLeft, dir, filePath, pos  ; path=>C:\aaa\bbb

   RunWait, platex %filePath%, %dir% ; tex=>dvi

   StringGetPos, pos, filePath, ., 1
   StringLeft, name, filePath, pos  ; name=>C:\aaa\bbb\ccc
   
   If ctrlFg = D       ; Ctrlが押されている場合
   {
    IfWinExist ahk_class dviout  ; dvioutが開いていたら閉じる
     WinClose
    RunWait, dvipdfm %name%.dvi, %dir% ; dvi=>pdf
    If ErrorLevel = 1
     Msgbox, "pdfを閉じてください"
    Run, %name%.pdf
   } Else {
    IfWinNotExist ahk_class dviout
     Run %name%.dvi
    Else
     WinActivate, ahk_class dviout
   }
  }
 return
#IfWinActive