-
これを説明する最良の方法は、多分例示でしょう。
あなたが以下のバイト探しの手紙の LaTeX ソース
("template.tex"
-- これはあなたが準備する必要があります)
を持っているとします:
\documentstyle[11pt]{letter}
\pagestyle{empty}
\signature{Job Hunter}
%
%%TGIF_HOOK
%
\begin{document}
\begin{letter}{\tgmmAddress}
\opening{\tgmmGreeting}
I would like to apply for a summer position at
\tgmmPlace.
Could you send me a copy of your application form?
\closing{Regards,}
\end{letter}
\end{document}
2, 3 の注意を。ここで使われているいくつかのコマンドがありますが、
いずれも tgmm で始まっていて、
通常の文書には含まれてはなさそうなものです。
コマンド tgmmAddress は実際のアドレスに置き換えられ、
コマンド tgmmGreeting は実際の挨拶に置き換えられ、
コマンド tgmmPlace は、
あなたがあなたの手紙を送りたい実際の会社の名前に、
それぞれ置き換えられます。
これらのコマンドは、Microsoft Word 文書内の、
<<address>>, <<greeting>>,
<<place>> とほぼ同様です。
これらのコマンドは、上の
%%TGIF_HOOK
で指定されるファイルで定義されます。
このファイルは、tgif が生成する一時ファイルで、
以下の $(data_fname) で参照されます)。
以下は、このファイルがどのようになるかの一例です:
\newcommand{\tgmmAddress}{
Mr. Bill Gates \\
Microsoft Corporation \\
One Microsoft Way \\
Redmond, WA 98052}
\newcommand{\tgmmGreeting}{Dear Bill,}
\newcommand{\tgmmPlace}{Microsoft Corporation}
さて、あなたが tgif と上の一時ファイルを使って
どのように 6 つの手紙を作るかを紹介しましょう。
- その一時ファイルを作ります。
今とりあえずその名前は "template.tex"
であると仮定します。どれくらいのフィールドのデータを
処理する必要があるかを決めます。
今とりあえず tgmmAddress, tgmmGreeting,
tgmmPlace のフィールドの処理をすると仮定します。
- メール連結の処理をするためのデータファイルを準備します。
このファイルの名前を "data.txt" とします
(このファイルは "txt" という
ファイル拡張子を持つ必要があります)。
3 つのフィールドがあったので、
そのデータファイルには少なくとも 3 列必要です。
さらに、特定の手紙用に使用する PostScript
ファイルの名前を指定する 1 つの列 (File)
をデータファイルに追加します。
"data.txt" 内では、それらの列は
";" で区切ります。
"data.txt" の最初の行は特別で、
その行の各列は、その列の名前です
(それは後で一つの tgif オブジェクトの属性の名前に対応)。
各名前はただ一つの単語 (スペースなし) で、
引用符は使えません。例えば、
"data.txt"
の最初の行は:
File; Place; Greeting; Address
のようになります。3 つのセミコロンで区切った
4 つの列があるだけであることに注意してください。
"data.txt" の残りの各行は、データ行です。
各列のデータは、二重引用符で囲まなければいけません
(そして再びセミコロンで区切ります)。
- tgif を起動し、tgif のラベルオブジェクトを
ラベル作成 のページから選びます。
この例では、
Avery
レターラベル集
から、5199-S - ビデオテープ ラベルを使います。
このラベルを選択する理由は、tgmmAddress
フィールドがかなり長い可能性があるので、
縦 1 列にラベルを配置するのがいいだろうからです。
- 4 つの別のテキストオブジェクトを作ります。
それらは、それぞれ "="
を後ろにつけた列の名前に対応します。
それらをラベルオブジェクト内に上手く配置します。
一時的な変数として使われる 3 つのテキストオブジェクトを作り、
そのテキストオブジェクトに "tmp_fname=",
"data_fname=", "data=" を入力します。
さらに、シェルスクリプトを持つ属性用の
3 つのテキストオブジェクトを作り、
このテキストオブジェクトに以下を入力します:
cmd0=rm -f $(tmp_fname) $(data_fname);
cmd1=
cd /tmp;
xterm -geom 40x8+200+400 -e latex $(tmp_fname);
xterm -geom 40x8+200+400 -e dvips -t letter -o $(tmp_fname).ps $(tmp_fname);
cmd2=
rm -f $(tmp_fname) $(tmp_fname).aux $(tmp_fname).dvi;
rm -f $(tmp_fname).log $(tmp_fname).ps $(data_fname)
- 編集メニューから SelectAll() を選択し、
スペシャルメニューの属性 (Attribute) サブメニューから
AttachAttrs() (属性をつける) を選択します。
- "5199-S Video Tape" と書かれた赤い文字列を削除します。
テキスト編集モードに入り、
キーボードの <Home> キーを押し、
テキストをハイライトする <Shift><End> を押し、
そして最後に <Delete> キーを押します。
- ファイルメニューから SaveNew() を選択し、
それを例えば "merge-test.obj" のような名前で保存します。
- さて、このオブジェクトを試してみましょう。
"data.txt" 内に何も問題はないことを
確認してください。
編集メニューから SelectAll() を選択し、
スペシャルメニューから MergeWithTable()
(訳注: tgif-4 では 表 (Table) サブメニューの下の
テーブルと統合 (Merge With Table))
を選択し、"data.txt" を選択します。
データファイルのある行で表の形がおかしい旨のメッセージが出た場合は、
データファイルを修正し、
"merge-test.obj" を再び開き、
そのデータファイルでエラーが出なくなるまで
この作業を繰り返してください。
- さて、次は "merge-test.obj" の
"after_merge" 属性で指定したスクリプト
(内部コマンド) を修正する番です。
再び "merge-test.obj" を開きます。
現在の "after_merge" 属性は以下の通りです:
select_obj_by_name(THIS);
disable_undo();
begin_animate();
unmake_selected_obj_iconic();
set_selected_obj_pen(0);
hide_attr(label_type);
hide_attr(after_merge);
end_animate();
enable_undo();
unselect_all_obj()
このオブジェクトの赤い外枠を隠す必要はないので、
"set_selected_obj_pen(0);" 行を削除できます。
- 何を追加する必要があるかを見ていきます。
まず、2 つの一時ファイルを作る必要がありますが、
それは以下を追加することで行えます
(残っている "hide_attr(after_merge);" 行の丁度前に):
mktemp("/tmp/Tgif1XXXXXX", "tmp_fname");
mktemp("/tmp/Tgif2XXXXXX", "data_fname");
- そして、一時ファイルを整理するために
上で指定した "cmd0" を呼び出します。
そしてその一時ファイルを一時ディレクトリに
コピーしなくてはいけません。
これは以下のようにします。
launch("cmd0");
strcpy("data", "\\input{$(data_fname)}");
create_file_using_simple_template("template.tex",
"$(tmp_fname)", "%%TGIF_HOOK", "data");
上のコマンド create_file_using_simple_template() は、
"%%TGIF_HOOK" 行を、
"\input{/tmp/Tgif2XXXXXX}" 行により、
"template.tex"
に置き換えます。
- 今度は、"/tmp/Tgif2XXXXXX.tex" ファイル
("$(data_fname).tex" と参照されている) 用に
データを提供する必要があります。
これは以下で行います:
strcpy("data", "\\newcommand{\\tgmmPlace}{$(Place)}");
append_attr_into_file("data", "$(data_fname).tex");
strcpy("data", "\\newcommand{\\tgmmGreeting}{$(Greeting)}");
append_attr_into_file("data", "$(data_fname).tex");
strcpy("data", "\\newcommand{\\tgmmAddress}{$(Address)}");
append_attr_into_file("data", "$(data_fname).tex");
- 次は LaTeX と dvips を実行し、
その結果の PostScript ファイルを作業ディレクトリ内に
指定した名前でコピーし、/tmp ディレクトリを整理します。
これは以下の文で行います:
launch("cmd1");
strcpy("data", "cp $(tmp_fname).ps $(File)");
launch("data");
launch("cmd2");
- 属性 "cmd0", "cmd1", "cmd2",
"data", "tmp_fname", "data_fname"
を、以下の文で隠します:
hide_attr("cmd0");
hide_attr("cmd1");
hide_attr("cmd2");
hide_attr("data");
hide_attr("tmp_fname");
hide_attr("data_fname");
- これらの文を挿入したら、ファイルを保存してください。以下が
私が作った
"merge-test.obj" です。
- これで準備は終わりです。
"merge-test.obj" を再び開き、
編集メニューから SelectAll() を選択し、
スペシャルメニューから MergeWithTable()
(訳注: tgif-4 では 表 (Table) サブメニューの下の
テーブルと統合 (Merge With Table)) を選択し、
"data.txt" を選択します。
あなたが結合を行った通りの PostScript ファイルを
プレビューしたい場合は、
strcpy("data", "cp $(tmp_fname).ps $(File)");
の行を、
strcpy("data", "cp $(tmp_fname).ps $(File); ghostview $(File)");
に変更してください。
|