Tgif FAQ - メールの連結


注意:

このページは、 Tgif ホームページ にある FAQ のページ を、竹野研究室 (主に竹野) が日本語に翻訳したものです。 オリジナルサイトの作者 (Bill Cheng 氏) の許可の元、ここに公開します。

FAQ 以外のページへのリンクは、 ほとんどがオリジナルページへのリンクになっていますので、 日本語訳はされていません (ただし、そのうち主なものは今後日本語訳することも考えています)。 また、ここに書かれているリンク先やソフトウェアなどの情報は、 書かれてからかなり年月が経っていますので、 リンク切れになっていたり、 現在の状況には合わない情報である可能性もあります。

この日本語訳のページに関する意見や質問は、 オリジナルサイトの作者ではなく、 竹野 にお願いいたします。

(05/31 2017)

このページのオリジナルサイト: http://bourbon.usc.edu/tgif/faq/mailmerge.html

目次へ戻る


 
どうやってメールをラベルに関して連結できますか ?
tgif の ラベルの作成 のページを見てください (このリンクの上でのクリックは、 tgif がインストールされていて、かつ MIME 設定 が正しい場合のみ動作します)。 あなたが tgif 内で見るファイル名が "http://&quoot; で始まっていない場合は、 そのページの下の近くにある 自己参照 アイコン上でダブルクリックして確認してください。
どうやってメールを文字に関して連結できますか ?
これを説明する最良の方法は、多分例示でしょう。 あなたが以下のバイト探しの手紙の 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 つの手紙を作るかを紹介しましょう。

  1. その一時ファイルを作ります。 今とりあえずその名前は "template.tex" であると仮定します。どれくらいのフィールドのデータを 処理する必要があるかを決めます。 今とりあえず tgmmAddress, tgmmGreeting, tgmmPlace のフィールドの処理をすると仮定します。

  2. メール連結の処理をするためのデータファイルを準備します。 このファイルの名前を "data.txt" とします (このファイルは "txt" という ファイル拡張子を持つ必要があります)。 3 つのフィールドがあったので、 そのデータファイルには少なくとも 3 列必要です。 さらに、特定の手紙用に使用する PostScript ファイルの名前を指定する 1 つの列 (File) をデータファイルに追加します。 "data.txt" 内では、それらの列は ";" で区切ります。

    "data.txt" の最初の行は特別で、 その行の各列は、その列の名前です (それは後で一つの tgif オブジェクトの属性の名前に対応)。 各名前はただ一つの単語 (スペースなし) で、 引用符は使えません。例えば、 "data.txt" の最初の行は:

        File; Place; Greeting; Address
    のようになります。3 つのセミコロンで区切った 4 つの列があるだけであることに注意してください。

    "data.txt" の残りの各行は、データ行です。 各列のデータは、二重引用符で囲まなければいけません (そして再びセミコロンで区切ります)。

  3. tgif を起動し、tgif のラベルオブジェクトを ラベル作成 のページから選びます。 この例では、 Avery レターラベル集 から、5199-S - ビデオテープ ラベルを使います。

    このラベルを選択する理由は、tgmmAddress フィールドがかなり長い可能性があるので、 縦 1 列にラベルを配置するのがいいだろうからです。

  4. 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)

  5. 編集メニューから SelectAll() を選択し、 スペシャルメニューの属性 (Attribute) サブメニューから AttachAttrs() (属性をつける) を選択します。

  6. "5199-S Video Tape" と書かれた赤い文字列を削除します。 テキスト編集モードに入り、 キーボードの <Home> キーを押し、 テキストをハイライトする <Shift><End> を押し、 そして最後に <Delete> キーを押します。

  7. ファイルメニューから SaveNew() を選択し、 それを例えば "merge-test.obj" のような名前で保存します。

  8. さて、このオブジェクトを試してみましょう。 "data.txt" 内に何も問題はないことを 確認してください。 編集メニューから SelectAll() を選択し、 スペシャルメニューから MergeWithTable() (訳注: tgif-4 では 表 (Table) サブメニューの下の テーブルと統合 (Merge With Table)) を選択し、"data.txt" を選択します。 データファイルのある行で表の形がおかしい旨のメッセージが出た場合は、 データファイルを修正し、 "merge-test.obj" を再び開き、 そのデータファイルでエラーが出なくなるまで この作業を繰り返してください。

  9. さて、次は "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);" 行を削除できます。

  10. 何を追加する必要があるかを見ていきます。 まず、2 つの一時ファイルを作る必要がありますが、 それは以下を追加することで行えます (残っている "hide_attr(after_merge);" 行の丁度前に):
            mktemp("/tmp/Tgif1XXXXXX", "tmp_fname");
            mktemp("/tmp/Tgif2XXXXXX", "data_fname");

  11. そして、一時ファイルを整理するために 上で指定した "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" に置き換えます。

  12. 今度は、"/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");

  13. 次は LaTeX と dvips を実行し、 その結果の PostScript ファイルを作業ディレクトリ内に 指定した名前でコピーし、/tmp ディレクトリを整理します。 これは以下の文で行います:
            launch("cmd1");
            strcpy("data", "cp $(tmp_fname).ps $(File)");
            launch("data");
            launch("cmd2");

  14. 属性 "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");

  15. これらの文を挿入したら、ファイルを保存してください。以下が 私が作った "merge-test.obj" です。

  16. これで準備は終わりです。 "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)");
    に変更してください。