【特集】

今年の年賀状はフリーで行こう - Perl + TeXでこだわりの宛名印刷

6 普遍的な宛名印刷に必要なツール(1)

    海上忍  [2004/11/01]

    普遍的な文書作成に最適なツールは何か、という1つの答えが「TeX」だ。TeXでの文書作成はプログラミング的な要素を含むため、万人向けとは言い難いが、プレーンテキストを使うためデータが使えなくなる可能性は低い。実際、筆者は数年前から年賀状にTeXとPerlを組み合わせた宛名印刷を利用しているが、一度安定運用が始まれば一年に一回宛名データを見直す程度でほとんど手間いらずだ。少々強引な理由付けではあるが、以降はTeXを利用した宛名印刷について説明したい。

    TeX? LaTeX?

    今回年賀状の作成に利用する「TeX」は、1970年代当時米スタンフォード大学で教鞭をとっていたDonald E. Knuth博士により開発された組版ソフトの一種。博士が著書「The Art of Computer Programming」をコンピュータを利用して組版したところ、その出来が自分の納得できないレベルだったため、自ら古今東西の印刷技術を調べて完成させたという話は有名だ。

    やがてTeXはアスキーの手により日本語処理のための機能が追加され、「アスキー日本語TeX」として80年代前半に公開。その後縦組機能が追加され「pTeX」となり、現在ではteTeX(1バイト語圏ユーザ向けTeX配布物)に対するパッチの形でBSDライセンスのもと配布されている。pTeXとは異なるアプローチで日本語対応を実現した「NTT jTeX」、Unicodeの採用により多言語対応を果たした「Omega」といった異なるTeX実装系も存在するが、諸事情から現在ではpTeXが主流だ。歴史的な経緯からUNIX系OSで利用されることが多いものの、今ではWindowsやMac OSなど多数のプラットフォームでも動作する。

    TeX本体は組版に必要な基本的な命令(プリミティブ)しか対応しないが、プリミティブを組み合わせて新しい命令(マクロ)を定義できる。そのマクロのコレクションの1つがLeslie Lamport氏が開発した「LaTeX」だ。プリミティブは一朝一夕には使いこなせない難解な代物だが、LaTeXに含まれる機能を利用すれば記述はかなり平易になる。実際、プリミティブだけでTeX文書を作成することは希で、独自のマクロを記述するときに使われる程度だ。今やTeX文書といえばLaTeXで書かれた文書と解釈していいほど普及している。日本語を扱う場合には、LaTeXの最新版(LaTeX2e)に縦組など日本語独自の機能を追加した「pLaTeX2e」を利用することになるだろう。

    TeXを利用した文書作成の流れ

    TeXとLaTeXが文書作成においてどのような役割を果たすかは、「TeX文書がソースコードでTeX+LaTeXがコンパイラ」と言えばわかりやすいだろうか。

    まず最初は、TeX文書を作成する。プレインテキストに文章(本文)を記述し、HTMLと同様のマークアップ方式で組版指定を行いつつ、必要に応じて命令(マクロ)を実行する、というスタイルで書き進めることが基本だ。作成に特別なツールは必要なく、適当なテキストエディタでOK。Windowsユーザならば「メモ帳」で作成しても構わない。Emacsユーザならば、YaTeX(やてふ)などの支援ツールを利用してもいいだろう。

    次に、作成したTeX文書をタイプセット(コンパイル)する。現在もっとも普及している日本語TeX環境(pTeX+pLaTeX2e)の場合、platexコマンドにTeX文書を引数として与えればdviファイルが生成されるので、それをdvipdfmxコマンドでPDFファイルに変換するか、dviウェアを利用すれば内容を画面に表示(または印刷)できるようになる。

    リスト1 : TeX文書のサンプル(SJISで保存すること)

    \documentclass{jarticle}

    \begin{document}
    こんにちは。これはp\LaTeXe{}で書かれた文書です。
    二次方程式($ax^2+bx+c=0$)の解の公式も、このとおり。
    \[ x=\frac{-b\pm \sqrt{b^2-4ac}}{2a} \]
    \end{document}

    リスト1の出力結果(アンチエイリアス処理済)

    TeXの文書作成の流れ

    リスト1の説明

    マクロ(コマンド) 機能の概要
    \documentclass{jarticle} 横組みの日本語文書(プリアンブルに記述する)
    \begin{document} ~\end{document} 本文を記述する。本文以前は「プリアンブル」と呼ばれ、クラスファイルやパッケージファイルの読み込みなどに使用される
    \LaTeXe LaTeX2eのロゴを出力する
    {} 何も出力しない(LaTeXではコマンドの直後に空白を設けなければならないが、意図的に「{}」で代用している)
    $ ~ $ 数式をインテキストモードで記述する(平文中に出力)
    ^2 直前の文字の右上に小さく「2」を出力する(累乗の表現)
    \[ ~ \] 数式をディスプレイモードで記述する(独立した行で出力)
    \frac{分子}{分母} 分数を出力する
    \pm 「±」を出力するためのコマンド

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン