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

Emacs に不満があるわけではありませんが、以前から気になっていた CotEditor に non-AppStore 版があることを知り、試してみました。

TeX を使う設定

私の場合は、常に platex でタイプセットし、dvips で PostScript 化したものを gv で開くという伝統的な(古式ゆかしい?)スタイルのためか、既製品のスクリプトは用意されていないようですので、自分で作ってみました。なお、SyncTeX には対応させていませんので悪しからず。

今回作成するスクリプトは以下の通りです。

  1. platex でタイプセットした後、dvips で PS ファイルを生成
  2. 更に、ps2pdf で PDF ファイルを生成
  3. PS ファイルを gv で開く
  4. PDF ファイルを(プレビューで)開く

参考にさせていただいたサイトは下記の通りです。ありがとうございました。

PDF ファイルを(プレビューで)開く

まずはじめに、一番簡単な、PDF ファイルを開くスクリプトから。

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")
		set thispdf to thisbase & ".pdf"
	end if
end tell

tell application "System Events"
	if exists file thispdf then 
		do shell script "/usr/bin/open \"" & thispdf &"\""
	else
		display alert "PDF ファイルが存在しないようです。"
	end if
end tell

PDF ファイルが存在するか否か調べ(11 行目)、存在する場合は、open コマンドでそのファイルを開くようにしています(12 行目)。

上記を「ファイルを開く|PDF.^@w.applescript」のようなファイル名で、~/Library/Application\ Scripts/com.coteditor.CotEditor/ に保存しておくと、CotEditor が勝手に認識してくれます。ドット間の「^@w」により、このスクリプトにショートカット「control + command + w」が割り当てられます。

なお、「com.coteditor.CotEditor」の中に「TeX」のようなサブフォルダを作ってそこにスクリプトを入れておくと、CotEditor のメニューでもサブメニューになります。粋な設計です。

※ 残念ながら以降のスクリプトはいずれも失敗作でしたので、改良版及び更なる改良版を作りました。


PS ファイルを gv で開く

先の PDF ファイルを開くスクリプトと同じようにはできなかったので、Terminal の中で、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")
		set thisps to thisbase & ".ps"
	end if
end tell

tell application "System Events"
	if exists file thisps then 
		tell application "Terminal"
			activate
			if window 0 exists then
				set visible of window 0 to true
				do script "/Applications/Ghostscript.app/gv \"" & thisps & "\"" in window 0
			else
				do script "/Applications/Ghostscript.app/gv \"" & thisps & "\""
			end if 
		end tell
	else
		display alert "PostScript ファイルが存在しないようです。"
	end if
end tell

Terminal が起動しているか否か調べ(14 行目)、起動している場合は、その中で実行し(15、16 行目)、起動していない場合は、新規に Terminal を起動して実行する設計です。

上記のファイル名を「ファイルを開く|PS.^@v.applescript」としておけば、ショートカット「control + command + w」で呼び出すことができます。

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

上記の「PS ファイルを gv で開く」スクリプトと同様の設計ですが、最後に CotEditor を前面に出したいので(23 行目)、全て「tell application "CotEditor"」の内側に書いています。タイプセットの度に、一瞬 Terminal が前面に出てきてしまうのが煩わしいですが、背面に起動する方法を見つけることができませんでした。

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")
		set thistex to thisbase & ".tex"

		tell application "System Events"
			if exists file thistex then
				tell application "Terminal"
					activate
					if window 0 exists then
						set visible of window 0 to true
						do script "cd \"" & thisdir & "\" && platex \"" & thisbase & "\" && dvips \"" & thisbase & "\"" in window 0
					else
						do script "cd \"" & thisdir & "\" && platex \"" & thisbase & "\" && dvips \"" & thisbase & "\""
					end if 
				end tell
			else
				display alert "TeX ファイルではないようです。"
			end if
		end tell
		activate
	end if
end tell

現在開いているファイルが TeX ファイルか否かを調べて(9 行目)からタイプセットするようにしています。

ファイル名(フルパス、拡張子無し)を二重引用符でくくるために、タイプセットの部分(14、16 行目)が長くなってしまっていますが、単に、ファイルのあるフォルダに移動後、「platex hoge && dvips hoge」を実行しているだけです。

私はこのスクリプトは頻繁に使うので、ファイル名を「タイプセット|platex && dvips.@t.applescript」とし、ショートカット「command + t」に割り当てています。

ただし、「command + t」は「新規タブ」に割り当てられていますので、システム環境設定で CotEditor の「新規タブ」を「shift + control + command + t」などに変更しておかないと機能してくれません。ユーザーによる設定を優先してくれると嬉しいのですが。

platex でタイプセットし、dvips で PostScript 化し、更に ps2pdf で PDF 化

「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")
		set thistex to thisbase & ".tex"
		set thisps to thisbase & ".ps"

		tell application "System Events"
			if exists file thistex then
				tell application "Terminal"
					activate
					if window 0 exists then
						set visible of window 0 to true
						do script "cd \"" & thisdir & "\" && platex \"" & thisbase & "\" && dvips \"" & thisbase & "\"" & "&& ps2pdf \"" & thisps & "\"" in window 0
					else
						do script "cd \"" & thisdir & "\" && platex \"" & thisbase & "\" && dvips \"" & thisbase & "\"" & "&& ps2pdf \"" & thisps & "\""
					end if 
				end tell
			else
				display alert "TeX ファイルではないようです。"
			end if
		end tell
		activate
	end if
end tell

これを「タイプセット|platex && dvips && ps2pdf.^@t.applescript」というファイル名で保存しておけば、ショートカット「contron + command + t」で呼び出すことができます。

まとめ

以上 4 つのスクリプト

  • ファイルを開く|PDF.^@w.applescript
  • ファイルを開く|PS.^@v.applescript
  • タイプセット|platex && dvips && ps2pdf.^@t.applescript
  • タイプセット|platex && dvips.@t.applescript

~/Library/Application\ Scripts/com.coteditor.CotEditor/TeX/

に入れておくと、CotEditor のスクリプトメニューに下図のように登録されます。