情報系の手考ノート

数学とか情報系の技術とか調べたり勉強したりしてメモしていきます.

TeX って何という話

先日(一年前)に TeX のセットアップを手伝ったのですが,そもそも TeX をよく知らない状態だとどう使うのかわからないという問題があるなということを強く感じました. そこで私がわかる範囲で TeX について簡単にまとめておくことで,原因不明な自体への対処を簡単にしようという趣旨の記事です. 記事の趣旨上私の所属する大学の学科の学生に向けた内容になりますが,他の人が読めない記事になるわけではないと思うので自由に読んでいただければと思います.

TeX を使うメリットとデメリット

まずは TeX と呼ばれる物を使うことによるメリットとデメリットについて述べておきます. ここで述べるメリットとデメリットはあくまで私の主観です.

TeX を使うことのメリット

  • 文書作成が容易になる場合がある
    • 複雑な数式を容易に記述できる
    • 図番号や表番号,式番号等が自動で割り振られるためつまらないミスを気にする必要が減る

TeX を使うことのデメリット

  • 習熟にある程度の時間を要する
    • HTML 等を触れたことがある人には問題になりにくいだろうが,プログラミング言語に触れたことの無い人からすればかなり致命的と言える

TeX とは

そもそもの話,論文等は TeX で書け!と言われても TeX って何?という人は多いと思います. 工学系の大学では TeX の使い方くらいは教わるかもしれませんが,LaTeX とか upLaTeX とか出てくるときっとわけがわからなくなってしまうことでしょう. ということでちゃんと TeX って何だって話を考えていきます.

ところで,TeX と言った場合にはその文脈によって何を指しているのかが異なります. 非常におおざっぱに分類するなら言語を指すのかソフトウェアを指すのかという点で異なります. 実際のところ,TeX と言えばソフトウェアをイメージしていることが多いとは思いますが…

そして TeX と呼ばれるソフトウェアも複数存在し,それらは"TeX"というソフトウェアから派生したもの達のことを指します. TeX 系のソフトウェアというニュアンスですね. このソフトウェア達は組版処理システムなどと呼ばれており,PDF や本のデータを作るために作られています. この組版処理システムにどんな文字をどんな風に出力してほしいかを指定するために,TeX 言語等が使われています.

これらをまとめると

TeX と呼ばれているものは殆どの場合に組版処理システム群であり,そのシステムは TeX 言語等で書かれた TeX ファイルから PDF 等の文書を生成する.

という感じになります.

TeX 呼ばれる組版処理システム達

前述した通り TeX と呼ばれる組版処理システムは複数あります. これは開発された経緯上どうしようもないことかなとは思いますが,使う側からすると厄介この上ないですね. というわけで TeX と言ったときに考えられるソフトウェア達をいくつか列挙します.

  1. TeX
  2. LaTeX
  3. upLaTeX
  4. LuaLaTeX
  5. PDFLaTeX

とりあえず日本語利用者である我々はこの辺を知っておけば十分だと思います. 上から順に何ものなのかを見ていきましょう.

TeX の始祖 “TeX

一言で言うなら TeX は元祖 TeX です.

これは我らが Donald E. Knuth 先生が開発された TeX 系ソフトウェアの元祖です. しかし開発時期が非常に昔であるため,現在の標準的な使用に耐えられる設計とはとても言えず,ほとんどの人はこの "TeX" から派生したソフトウェアを使っていると思われます.

より現代的な TeXLaTeX

一言で言うなら LaTeX は使いやすくなった TeX です.

開発された経緯については,あまり把握できてないので述べません. ですが純粋な "TeX" と比べてより使いやすい形へと変化したとは思います.

日本語をを使える TeX が欲しい! “pTeX

一言で言うなら pTeX は日本語が使える TeX です.

もしかしたら既にご存知かも知れませんが,Knuth 先生は日本人ではありません. そのため Knuth 先生が開発された TeX というソフトウェアは日本語を書くことを想定して作られていません. これは日本人からすれば致命的な問題です. pTeX はその問題を解消するため TeX を拡張した物です. しかし,pTeXTeX の古い設計を多く持つ関係上現在使っている人はいないと言って良いでしょう.

Unicode と日本語を使う LaTeX “upLaTeX”

一言で言うなら Unicode と日本語を使うことができる LaTeX です. 日本語が使える uLaTeX とも言えます.

"TeX" を開発された Knuth 先生は日本人ではありません. つまり "TeX" は日本語を書くことを想定して作られたソフトウェアでは無いということになります. これは日本人からすれば致命的な問題です.

また "TeX" が開発されたのは 1970 年代から 1980 年代にかけてであり,Unicode なんてものは普及していません. 近年ほとんどのソフトウェアが Unicode を使えるというのに,組版処理で Unicode が使えないのは致命的な問題と言えるでしょう.

upLaTeX はその問題を解消するため LaTeX を拡張した物です. 2022 年現在,日本語の文書を作るのであれば upLaTeX がまず一つの選択肢にあがることとなるでしょう.

Lua 言語によって開発した TeX “LuaLaTeX”

一言で言うなら Lua 言語を使って開発された新たな LaTeX です.

2022 年現在,日本語の文書を作るとき upLaTeX だけでなく LuaLaTeX も十分候補に入ることでしょう.

直接 PDF が欲しい! “PDFLaTeX”

一言で言うなら不便な点を排除した LaTeX です.

2022 年現在,日本語の文書を作ることを考えると,PDFLaTeX は若干怪しいところがあると言えるでしょう.

日本語文書を書くならどれを使えばいいの?

現状だと upLaTex か LuaLaTeX のどちらかを使うのが妥当でしょう. 日本語を使えるかどうかという点でほとんど上記の2ついづれかになります. そのうえでどちらにするかという問題になります.

ここまでくるとほとんど好みになるかと思いますが,個人的には upLaTeX がいいのではないかと思います. 理由は upLaTeX の方が古い,というより普及しているからです. なにか問題に衝突した時,普及していれば検索するだけで簡単に問題に対処できます. また upLaTeX と LuaLaTeX では完全に互換性があるわけではなく,LuaLaTeX でできても upLaTeX ではできない,upLaTeX ではできても LuaLaTeX ではできない,というようなことがあったりします(できないはちょっと言いすぎかもしれないけれども…). そして upLaTeX の情報が大量にある中から LuaLaTeX の情報を探すのはちょっと大変だったりします. 以上から,よくわからないなら upLaTeX を使っておくのが安牌だろうというのが個人的な見解です.

TeX を使う流れ

さて,ここまで TeX ってどんな物なんだという概要を説明してきました. ではどうやって使うのかということについて説明していきます. また前提として upLaTeX を使うことを想定とします(私が LuaLaTeX よくわかってないので…).

まず最初に開発された TeX は 30 年以上前のソフトウェアです. 当時は PDF なんてファイル形式は存在していませんでした. そのため TeX というソフトウェア達の多くは,DVI というファイルを出力します. ですが,現在の文書ファイルの主流は PDF ファイルであり,DVI ファイルではありません. そのため我々は DVI ファイルを PDF ファイルに変換しなければなりません. つまり TeX を使って PDF の文書を書く流れは以下の図のようになります.

flowchart TB
TeXファイルを書く --> DVIファイルを生成する --> PDFファイルに変換する

最近のソフトウェアと比べるとひどい流れになっていますが,仕方ないです. そしてさらに面倒な手順がまっています. TeX の利点である図表や式の番号を自動で扱えるようになる,というのが問題になります. この図番号等を適切に割り当て,そして適切に参照するために複数回 DVI ファイルを生成する手順を踏む必要があるのです. この理由については述べませんが,状況によって何回 DVI ファイルを生成すればいいかは断定できません. 不十分な状態の DVI ファイルから PDF を作ると,図番号等の参照部分が "??" になったりします. 非常にやっかいです.

これは latexmk 等の補助ツールを使って回避するくらいしか方法が無いです. latexmk は設定ファイルに応じて必要なくなるまで DVI ファイルの生成を行い,最後に DVI を PDF に変換するツールです. これを使えばかなり TeX を使った文書作成が楽になったと記憶しています.

といっても aux というファイルが更新されなくなったときが正しい DVI ファイルが生成されたときなので,そこを自分で監視しておけば自力で対処できます. 私は自作の Makefile で必要なくなるまで DVI の生成を繰り返すようにしています.

さて,上図で説明した PDF を作る手順ですが,実は TeX が担うのは DVI の生成までです. PDF への変換は大抵 dvipdfmx というような別のソフトにやってもらいます. 他にも DVI を PDF に変換するソフトはありますが,2023 年現在では dvipdfmx 以外を使う利点は特に無いと思うのでわざわざとりあげません.

flowchart TB
TeXファイルを書く -->|upLaTeX| DVIファイルを生成する
DVIファイルを生成する -->|upLaTeX| DVIファイルを生成する
DVIファイルを生成する -->|dvipdfmx| PDFファイルに変換する

まとめ

とりあえずここまでのことを知っておけば自力での問題解決等が楽になるんじゃないでしょうか. 他にもいろいろ TeX にはアレな部分が多く,よく知らない状態では簡単にタブーに触れてしまったりします. ですがそんなことを気にしていては TeX なんてとても使えないです. 逆にちゃんと知ろうとすると,他のことに手を付ける時間が大幅に削られて本末転倒です(アホみたいに時間が消えます,研究どころじゃない). しかし理系だと TeX を使うのが事実上の標準で,論文を投稿するならほぼ間違いなく使うはめになります.

SATySFi なんていう最近の組版処理システムもありますが,普及度合いの問題でしばらくは TeX を使う必要があるでしょう. 下手をすると SATySFi は普及せずにいつまでも TeX が使われるかもしれません. しばらくは自分に必要な知識を適宜身につけて TeX とつきあっていくしかないでしょう. そしてこの記事がその助けになることを願います.