【特集】
普遍的な文書作成に最適なツールは何か、という1つの答えが「TeX」だ。TeXでの文書作成はプログラミング的な要素を含むため、万人向けとは言い難いが、プレーンテキストを使うためデータが使えなくなる可能性は低い。実際、筆者は数年前から年賀状にTeXとPerlを組み合わせた宛名印刷を利用しているが、一度安定運用が始まれば一年に一回宛名データを見直す程度でほとんど手間いらずだ。少々強引な理由付けではあるが、以降はTeXを利用した宛名印刷について説明したい。
今回年賀状の作成に利用する「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とLaTeXが文書作成においてどのような役割を果たすかは、「TeX文書がソースコードでTeX+LaTeXがコンパイラ」と言えばわかりやすいだろうか。
まず最初は、TeX文書を作成する。プレインテキストに文章(本文)を記述し、HTMLと同様のマークアップ方式で組版指定を行いつつ、必要に応じて命令(マクロ)を実行する、というスタイルで書き進めることが基本だ。作成に特別なツールは必要なく、適当なテキストエディタでOK。Windowsユーザならば「メモ帳」で作成しても構わない。Emacsユーザならば、YaTeX(やてふ)などの支援ツールを利用してもいいだろう。
次に、作成したTeX文書をタイプセット(コンパイル)する。現在もっとも普及している日本語TeX環境(pTeX+pLaTeX2e)の場合、platexコマンドにTeX文書を引数として与えればdviファイルが生成されるので、それをdvipdfmxコマンドでPDFファイルに変換するか、dviウェアを利用すれば内容を画面に表示(または印刷)できるようになる。
リスト1 : TeX文書のサンプル(SJISで保存すること)
\begin{document}
こんにちは。これはp\LaTeXe{}で書かれた文書です。
二次方程式($ax^2+bx+c=0$)の解の公式も、このとおり。
\[ x=\frac{-b\pm \sqrt{b^2-4ac}}{2a} \]
\end{document}
リスト1の説明
| マクロ(コマンド) | 機能の概要 |
|---|---|
| \documentclass{jarticle} | 横組みの日本語文書(プリアンブルに記述する) |
| \begin{document} ~\end{document} | 本文を記述する。本文以前は「プリアンブル」と呼ばれ、クラスファイルやパッケージファイルの読み込みなどに使用される |
| \LaTeXe | LaTeX2eのロゴを出力する |
| {} | 何も出力しない(LaTeXではコマンドの直後に空白を設けなければならないが、意図的に「{}」で代用している) |
| $ ~ $ | 数式をインテキストモードで記述する(平文中に出力) |
| ^2 | 直前の文字の右上に小さく「2」を出力する(累乗の表現) |
| \[ ~ \] | 数式をディスプレイモードで記述する(独立した行で出力) |
| \frac{分子}{分母} | 分数を出力する |
| \pm | 「±」を出力するためのコマンド |
| 上海問屋、スマホなどに貼り付けることでICカードを収納できる増設ポケット [13:14 2/23] |
| 【レビュー】複数のソフトウェアで強固なシステムを目指す! [10:38 2/23] |
| 【レポート】「驚きやわくわく感のある製品作りを」日本HP、新Ultrabook発表会 [23:16 2/22] |
| シマンテック、最上位バージョン「ノートン360 バージョン6.0」を発売 [22:36 2/22] |
| 新たなジェスチャー機能が追加された「Sleipnir 3 for Windows (3.0.10)」 [21:00 2/22] |
|
イメージナビ、プロの広告写真家による高品質な撮影代行サービスを開始 [14:43 2/23] クリエイティブ |
|
AppleやGoogleなどアプリストア6社、プライバシーポリシー明示に合意 [14:34 2/23] ネット |
|
【2月23日】今朝のエンタメニュース放映時間ランキングTOP10 [14:32 2/23] エンタメ |
|
FSL、全通信方式対応のマルチモード/マルチバンドRFトランシーバLSIを発売 [14:21 2/23] エンタープライズ |
|
シグマ、4,600万画素センサー搭載「SD1 Merrill」の発売日を正式決定 [14:21 2/23] 家電 |