新・初めての CotEditor(TeX を使う設定)

CotEditor で TeX を使う設定の続々をさらに改良しました。

新・TeX を使う設定

前回作成した「platex でタイプセットした後、dvips で PS ファイルを生成」するスクリプト(改々)には以下のような問題点がありました。

  • Terminal が起動していないときに実行すると、Terminal(のウィンドウ)が 2 重に開いてしまう(タイプセットと activate を実行するタイミングの問題だと思います)。
  • busy でない Terminal があっても最前面の Terminal が busy だと、別ウィンドウが起動してしまう。
  • 上記のいずれの場合も、一瞬 Terminal が最前面に出てしまう。
  • Terminal が起動しているにも関わらず全てのウィンドウが閉じられている場合にタイプセットしようとするとエラーになる。

今回はこれらを改良しました。

多くのサイトを参考にさせていただきましたが、とりわけ下記のサイトに busy でないウィンドウの探し方を見つけたことが改良版作成のきっかけになりました。ありがとうございました。

新・platex でタイプセットし、dvips で PostScript 化

tell application "CotEditor"
	if exists front document then
		set thisfile to path of front document as Unicode text
		set thisdir to (do shell script "/usr/bin/dirname \"" & thisfile & "\"")
		set thisbase to thisdir & "/" & (do shell script "/usr/bin/basename \"" & thisfile & "\" .tex")
		-- file name: tex
		set thistex to thisbase & ".tex"
		-- command with args: cd, platex, dvips
		set cd to " cd \"" & thisdir & "\""
		set tex2dvi to "platex -synctex=1 -interaction=nonstopmode \"" & thisbase & "\""
		set dvi2ps to "dvips \"" & thisbase & "\""
		-- typeset command: concatenate above
		set typeset to cd & " && " & tex2dvi & " && " & dvi2ps

		tell application "System Events"
			if exists file thistex then
				tell application "Terminal"
					launch
					if not (exists window 1) then
						reopen
						do script typeset in window 1
					else
						set targetWindow to window 0
						repeat with currentWindow in reverse of (get every windows)
							if currentWindow is not busy then
								set targetWindow to currentWindow
							end if
						end repeat
						if (targetWindow is window 0) then
							do script typeset
						else
							do script typeset in targetWindow
						end if
					end if
				end tell
			else
				display alert "TeX ファイルではないようです。"
			end if
		end tell
		activate
	end if
end tell

補足説明1

9 行目の cd コマンドの前に半角スペースを入れています。その理由はこちらに書きましたが、履歴を残さないためです。

補足説明2

18 行目の launch で Terminal を起動します(すでに起動済みの場合は効果はありません)。19 行目の if 文でウィンドウが開いているか否か調べ、開いていなければ開き(reopen)、そのウィンドウでタイプセットします。

新・platex でタイプセットし、dvips と ps2pdf で PDF 化し、Skim で表示

CotEditor で SyncTeX」に改良版の AppleScript を掲載しています。

新・PS ファイルを gv で開く

同じ方法で「PS ファイルを gv で開く」スクリプトも改良しました。

tell application "CotEditor"
	if exists front document then
		set thisfile to path of front document as Unicode text
		set thisdir to (do shell script "/usr/bin/dirname \"" & thisfile & "\"")
		set thisbase to thisdir & "/" & (do shell script "/usr/bin/basename \"" & thisfile & "\" .tex")
		-- file name: tex, ps
		set thistex to thisbase & ".tex"
		set thisps to thisbase & ".ps"
		-- command with args: gv
		set gv to " /Applications/Ghostscript.app/gv \"" & thisps & "\""
	end if
end tell
 
tell application "System Events"
	if exists file thistex then
		tell application "Terminal"
			launch
			if not (exists window 1) then
				reopen
				do script gv in window 1
			else
				set targetWindow to window 0
				repeat with currentWindow in reverse of (get every windows)
					if currentWindow is not busy then
						set targetWindow to currentWindow
					end if
				end repeat
				if (targetWindow is window 0) then
					do script gv
				else
					do script gv in targetWindow
				end if
			end if
		end tell
	else
		display alert "PostScript ファイルではないようです。"
	end if
end tell

補足説明1

利用される場合は、gv の在り処(10 行目)を適宜読み替えてください。