応用

各種パッケージ類はttex.macを経由しなくても,直接マクロから呼び出すことができます.これを使えば,メニューを表示せずに一発でコンパイルをするマクロを作ることもできます.

パッケージ類を呼び出すには,正しく呼び出し規約に基づいて呼び出せばよいです.fortex\doc\ttex.txtにその仕様があります.しかし,割と面倒ですので,既に設定されている項目に基づいてコマンド呼び出しを行うマクロexeccmd.macを用意しました.詳しい説明はfortex\doc\ttex.txtを見てもらうことにして,ここでは簡単な例を見てみます.(fortex\doc\ttex_execsample.macにあります.)

if(updated)save;
execmacro $RootDir + "sub\\execcmd.mac","init";
if(!val(getresultex(-1))){
	message "親ファイルの取得に失敗";
	call Exit;
}
execmacro $RootDir + "sub\\execcmd.mac","clearlog";
// ここまで準備

// 各コマンドの呼び出し.
execmacro $RootDir + "sub\\execcmd.mac","exec","sample","TeXToDVI","checktimestamp=dvi";
if(getresultex(-1)) != "0")call Exit;
execmacro $RootDir + "sub\\execcmd.mac","exec","sample","DVIToPDF";
if(getresultex(-1)) != "0")call Exit;
execmacro $RootDir + "sub\\execcmd.mac","exec","sample","SumatraPDF";
if(getresultex(-1)) != "0")call Exit;
//execmacro $RootDir + "sub\\execcmd.mac","execmenu","PDFに変換して表示(&P)";
call Exit;

// 終了処理.
Exit:
	execmacro $RootDir + "sub\\execcmd.mac","cleanup","sample";
	execmacro $RootDir + "sub\\execcmd.mac","uninit","sample";
	freedll;
	endmacro;

このマクロは,TeXToDVIコマンド,DVIToPDFコマンド,SumatraPDFコマンドを呼び出します.よって,DVIファイルを経由してPDFファイルが作成され,SumatraPDFで開かれます.TeXToDVIには引数として「checktimestamp=dvi」を渡しています.これにより,TeXファイルのコンパイル時にDVIファイルのタイムスタンプチェックが行われます.DVIToPDFコマンドとSumatraPDFコマンドには引数を渡していません(空文字列を渡している).

「//ここまで準備」までと「//終了処理」から始まる部分が定型処理です.実際の呼び出しはその間になります.例を見れば容易にわかるでしょう.与えている引数のうち,"sample"はパッケージを呼び出しているマクロの識別子です.一連の呼び出しは同じ識別子を与える必要があります*1.getresultex(-1)が"0"以外な時はエラーが発生したときです.その際はマクロは実行を中止するようにしてあります.

各コマンドを自分で呼び出す代わりに,特定のメニュー項目の実行を行うこともできます.たとえば次のようにします.

execmacro $RootDir + "sub\\execcmd.mac","execmenu","PDFに変換して表示(&P)";

もちろん準備と終了処理は必要です(省略しました).このようにすることで,祝鳥メインメニュー→タイプセット→PDFに変換して表示(P)と選んだのと同じことが実行されます.

このようにして作った秀丸マクロを適当な名前で保存し,適当なキーに割り当てるとよいでしょう.

*1
"cleanup"や"uninit"において,同じ識別子で呼び出されたパッケージ群に関する後処理を行います.