情報処理第 8 回 L^{A}TEX を用いた組版処理入門

2000 年 6 月 14 日

目次

1 本日の目標 1

2 御託宣を少々 1

3 本日の用語と参考書 1 3.1 L^{A}TEX(TEX) とは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3.2 用語説明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 3.3 参考書 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

4 TEX の長所と短所 3

5 L^{A}TEX による文書作成手順 4

6 実習 4 6.1 まずは準備 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 6.2 始めの一歩 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 6.3 うまくいかなかった人へ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6.4 xdvi でのプレヴィュー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 6.5 本日のテキストを画面でみる . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1 本日の目標

• 文書の内容の編集と, 文書の整形は異なる事であると知る.

• jL^{A}TEX を用いて, 数式を含む文章の書き方を知る.

• エディタ mule に親しむ.

2 御託宣を少々

• 今回は, コンピュータを用いて実際に文書を印刷するための処理の一つについて述べます. なお, 森林資源保護のため (?), 実際にプリンターで出力はしません. UNIX のそもそもの開発理由が, 文書処理でありました. そして印刷のためのソフトウェアとして roff, nroff, troff, eqn 等が開発されました. nroff は今でも Manual page を表示するために使われています. しかし, これらを Manual page の記述以外に使われる事は希になり, 現在ではこれから述べる, TEX や L^{A}TEX が多く使われています.

今回の内容は, UNIX で TEX(L^{A}TEX) の使い方というもので, UNIX の利用の仕方とは, ほとんど関係が有りません.

その他の UNIX の使い方については参考図書などを読んで自分で身につけて下さい.

3 本日の用語と参考書

3.1 L^{A}TEX(TEX) とは

L^{A}TEX とは,L. Ramport が作成した TEX 用のマクロパッケージです. TEX というのは, D. E. Knuth が印刷工がやっていた仕事をコンピュータに自動的にやらせるために開発した組版 (くみはん) のための処理系です. Knuth は, 自著 The art of computer programming の (特に数式部分の) 印刷の出来上がりに不満を持ち, 印刷工がやっている仕事をコンピュータにかわらせ, 自分が満足する印刷物の仕上りを得るために, TEX を開発しました. TEX そのものは, 印刷されるべき紙に文字とか図形を置いていく作業をするという, まさに印刷工がしている作業をするように作られています. また, 一つのプログラミング言語でもあります.

ただ, 生の TEX というのはあまりにも原始的でそのままでは使いづらいのでいろいろなマクロパッケージが作成されました. マクロというのは, ある一まとまりの命令をまとめた物です. よく使う命令群をまとめる事で自由度は減りますが, より使いやすい体系をつくり出します. TEX のマクロパッケージとしては, Knuth 本人による plain TEX,Lamport による L^{A}TEX, 米国数学会 (AMS) が開発した数学の論文用の AMS-TEX 他さまざまなものがあります. ちなみにこの文章も L^{A}TEX のパッケージを日本語化した jL^{A}TEX を用いて書いた物です.

これらの中で, L^{A}TEX は文章の論理構造にしたがって印刷レイアウトをして行くという側面を重視して, 開発された物です. 文章の内容とともに, その論理構造を書いていけば, 自然と美しいレイアウトを持った書類ができるように開発されています.

今日は, L^{A}TEX への招待です. 来週引続き数式の記述方法を講義します.

3.2 用語説明

TEX のソースファイル通常のテキストファイルであるが, その中に TEX に対するコマンドが埋め込まれている. ファイル名は, hogehoge.tex と“内容を表す文字列” .tex とする.

dvi ファイルdvi は device independent の略. TEX のソースファイルから TEX コマンドで, 作られるバイナリファイルで, その内容は文書中の文字の配置等が入っています. device independent という名が示す通り, このファイルは出力機器 (device 画面かプリンタが多い) に依存しない形になっている. このファイルを表示するには, そのためのソフトウェアが必要です. この演習では, xdvi を使います. プリントアウトするにも, 同様にソフトウェアが必要ですが, この演習では取り上げません.

補助ファイルhogehoge.aux や hogehoge.toc の名前が付くファイル. aux は auxuality の略で, 文章の中の定理や文献の相互引用関係を記述するためのファイル. toc は table of contents の略で, 目次の内容を持っている. ともに TEX コマンドで作られる.

log ファイル*.log の名前を持つファイル. TEX のタイプセット中のエラーメッセージ等を記録するためのファイル. TEX コマンドで作られる.

style ファイルTEX のマクロを記述したファイル. 例えば, 各章の表題は, 文字の大きさを 2 倍にして太文字にする等の TEX コマンドを統一的に記述してあるファイル. ユーザはこのスタイルファイルを利用する事により, 複雑な TEX コマンドを書く事無く, 上のような事が実現できるようになる.

プレヴィューアーTEX によって作られた dvi ファイルが実際にどのように印字されるかを, 画面で確かめるためのソフトウェア. この講義では, xdvi を使います.

ファイル名TEX においては, TEX のソースファイルは hogehoge.tex というファイル名です. さらに補助ファイルは, hogehoge.aux と hogehoge.toc, log ファイルは hogehoge.log というように, ファイルの内容を表す文字列にピリオドがついて, 次にそのファイルが持つ属性を表す文字列が付いています. この終わりの文字列を, ファイル名の識別子とか拡張子といいます. 識別子によりそのファイルの内容や, そのファイルを利用するプログラムが分かるようになっています. 識別子の付け方には, ある程度のルールと慣習があります.

3.3 参考書

• TEX そのものの参考書としては, D. E. Knuth による TEX ブックアスキー出版局 (日本語訳斎藤信男監修)

• L^{A}TEX の参考書としては, L^{A}TEX の開発者 L. Lamport による L^{A}TEX アスキー出版局 (日本語訳倉沢良一監訳) と L^{A}TEX_{2ϵ} ピアソン (阿瀬はる美訳)

どちらも優れた参考書です. 他にもいろいろ本が出版されていますが, これらの原典は外せません. その他の本としては,

• 楽々L^{A}TEX 野寺隆志著 共立出版

がいいでしょう.

4 TEX の長所と短所

この授業を受けている方は, 普段数式を相手にしています. ご存知のように, 数式というものはとても複雑な見た目をしています.

例 (Ramanujan 予想)

q ∏_{n=1}^{∞}(1 − q^{n})^{24} = ∑_{n=1}^{∞} τ(n)q^{n}

とする時, 任意の素数 p に対して, τ(p) < 2p^{\frac{11}{2}} が成立する.

上の例でも分かるように, 例えば ∏ と ∑ の上下に小さく字があったり, 冪乗は文字の肩の部分に小さく書いたり, 数式中の文字はイタリック体 (斜体) であったりします.

これらの事は, 今まで利用して来た mule のようなテキストエディタでは実現できません. テキストエディタは, 文字列の並びを変える事しかできず, ある文字が, イタリック体であるとか添字であるとかを指定するのは, 通常は, エディタというソフトウェアの仕様外の事です. 従って, 数式を記述するには, 上のような事を何らかの形でコンピュータなりプリンターなりに指示しなければなりません.

その方法で一般に広く普及しているものは, 次の二つです.

1. ワードプロセッサを用いる. いわゆるワープロソフトの多くには, 数式を記述するための機能が, 備わっています. また最近のパソコンのワープロソフトは WYSIWIG (What you see is what you get) に近い機能を備えておりますので, 数式を目で見たまま記述する事が可能です.

2. 文書整形ソフトウェアを用いる. この講義の主題でもありますが, TEX はそもそも複雑な数式を記述できるように開発されました. これ以外にも UNIX では, 数式を記述するためのソフトウェア (コマンド) として eqn というのが有ります. これらを使えば, 数式は記述できます.

それでは, 上の二つにはどのようなメリット, デメリットがあるのでしょうか.

• 最近のワープロソフトは, 上で述べたように WYSIWIG の機能をもっていますから, 数式等複雑なものを記述する際に, 目で見たままの直観的な作業をする事ができます. ところがこれから述べるように, TEX では, テキストファイルの中に, 数式や文書レイアウトのためのコマンドを記述していきます. そのため, そのテキストファイル (TEX のソースファイル) をコンパイルして, プレヴィユーするまで自分が思った通りの出来上がりになっているかどうかが, 判断できません.

• TEX は, 多く流通しているコンピュータのほとんどで動きます. しかも TEX のソースファイルは, テキストファイルですから, 文字コードという規格がきちんとあり, コンピュータの機種にほとんど依存せずどのコンピュータでも使えます. しかしワープロで作ったファイルというのはワープロのソフトウェア毎に, ファイル形式が違います. したがって例えば, Microsoft word で作ったファイルは, Word Perfect ではそのままでは使えず, 何らかの変換作業が必要です. また, その変換作業をした時に元の情報が完全に回復できる保証は何もありません. つまり,TEX はコンピュータによる機種依存がほとんどなく, TEX のソースはどのコンピュータにも持って行けますが, ワープロは, そうは行かないのです.

• TEX は, ほとんどのコンピュータで無料の処理系が存在します. D. E. Knuth による TEX のプログラムコードは, Knuth によって完全に開放されており, それをどのように使っても (商売に利用しても) 良いことになっております. このためいろいろなコンピュータに TEX が移植されております. これに対して, ワープロソフトは通常お金 (ソフトウェアを購入する費用) がかかります.

なお, 本日は時間の都合で, L^{A}TEX の最初の一歩を述べるだけで, 数式の記述方法は, 来週解説します.

5 L^{A}TEX による文書作成手順

L^{A}TEX による文書作成は, 通常のワードプロセッサーとは違い, 幾つかの手順を踏む必要があります. それらは次のようになっています.

1. L^{A}TEX ソースファイルの作成.(*.tex ファイルの作成)

2. ソースファイルのタイプセット (コンパイル). (*.dvi *.aux *.log *.toc 等ファイルの作成)

3. ソースファイルが間違っていれば, 修正して再コンパイル. 間違っていなくとも,*.aux *.toc 等の内容を取り込む必要がある時は再コンパイル.

4. プレヴィユアーによる仕上りの確認.

5. プリンタに出力.

6 実習

6.1 まずは準備

一連の L^{A}TEX の授業において, いくつかのファイルを作ります. これらを整理するために以前述べた, ディレクトリというものがあるのです. ファイル整理の意味でまず, 次の二つを実行しましょう.

1. % mkdir texfiles として, texfiles というディレクトリを作る.

2. % cd texfiles として, ワーキングディレクトリを texfiles に移す.

6.2 始めの一歩

まず, 簡単な L^{A}TEX ソースファイルを作り, それをタイプセットしてプレヴィューしてみましょう. これは, 以前にやった事の復習です.

mule を起動して, 次のページ全体の内容を practice1.tex というファイル名で保存して下さい.

%%%%%%%%%% prcactice1.tex %%%%%%%%
\documentstyle[a4j,12pt]{jarticle}
\begin{document}
\title{\LaTeX の練習}
\author{ }
\maketitle

通常の文章は, 普通に書けばその内容がそのままタイプセットされます. 実際にプレヴィューして, 確かめればわかります. ただし, 本文中の改行は無視され, 文章が紙の右端まで詰め込まれます. 数式を書いて見ると,

$$ 素数定理 \quad  \lim_{n\to\infty} \frac{\pi(n)\log n}{n} = 1. $$

文章中の空行\footnote{正確には二つ以上続く改行}は, 段落の区切りとなります. 上に空行がありますから, この行は上の行とは違うパラグラフになるはずです. また, 一番下に脚注が付きますが, そのコマンドはそこに書いてある通りです \footnote{脚注番号も自動的につけられます}.

\section{最初の節}
$$\int \frac{dx}{\sin x} = \log \tan \frac{x}{2} + C $$ が成立します.
\subsection{部分節も作れます}
$$\det(a_{ij})=\sum_\pi sgn(\pi)a_{1,\pi(1)}\cdots a_{n\pi(n)}.$$
\subsubsection{これ以上の部分節は作れません}
\[f(z) が正則関数 \Leftrightarrow \frac{\partial f}{\partial\bar{z}}=0. \]
\section{2 番目の節}

タイプセットしてみるとわかりますが, 節番号が自動的にふられます. また, 節の題名の字の大きさなども自動的に設定してくれます. 一番下の部分には, ページ番号が中心に付きます.

\newtheorem{conj}{予想}
\begin{conj} リーマン予想
\[\zeta(s)= \sum_{n=1}^{\infty} \frac{1}{n^s} \]

を $s$ に付いて全復素平面に有理型関数に解析接続した時, その非自明な零点の

実部は $\frac{1}{2}$ である.
\end{conj}
\end{document}
%%%%%%%%%%practice1.tex 終了%%%%%%%%%

さてタイプセットしてみましょう. mule を終了して, コマンドプロンプトから次のようにタイプします.

% jlatex practice1.tex

うまくいくと, 次のようなメッセージがでて, タイプセットが終了します. そういう方は, 次を飛ばして先に進んで下さい.

LaTeX Version 2.09 <7 Dec 1989>
(/usr/local/share/texmf/tex/inputs/inputs/article.sty
Document Style `article' <16 Mar 88>.
(/usr/local/share/texmf/tex/inputs/inputs/art10.sty))
(practice1.aux) [1] [2](practice1.aux)
Output written on practice1.dvi (1 page, 1888 bytes).
Transcript written on practice1.log.

6.3 うまくいかなかった人へ

1. This is PTeX, C Version 2.09<7 Dec 1989>
! I can't find file `a.tex'.
<*> &jlatex a.tex
Please type another input file name:

この様なメッセージがでた時には, jL^{A}TEX の引数のファイル名を打ち間違えています. CTRL + d でコマンドプロンプトに戻りますので, 再度ファイル名に注意してタイプセットして下さい.

2. LaTeX Version 2.09 <7 Dec 1989>
(/usr/local/share/texmf/tex/inputs/inputs/article.sty
Document Style `article' <16 Mar 88>.
(/usr/local/share/texmf/tex/inputs/inputs/art10.sty))
(practice1.aux))
*

この様に, * でメッセージが終わっている場合は, \end{document} が無いと思われます. CTRL + d で終了して, この部分を確認して下さい.

3. LaTeX Version 2.09 <7 Dec 1989>
(/usr/local/share/texmf/tex/inputs/inputs/article.sty
Document Style `article' <16 Mar 88>.
(/usr/local/share/texmf/tex/inputs/inputs/art10.sty))
(practice1.aux)
! Missing \endcsname inserted.
<to be read again>
                   \par
\@startsection ...@noskipsec \leavevmode \fi \par
                                        \@tempskipa #4\relax \@aft...
\a #1->\csname a#1
                  \endcsname
l.38 \section
             {second section}
?

この様に, ? で終わった場合, L^{A}TEX コマンドを間違えています. x を入力したあと ENTER を押すと jL^{A}TEX から抜けられますので, mule でもう一度 practice1.tex の内容を確認して下さい. 上で, 38 という数字は, エラーが起こった行番号です.

6.4 xdvi でのプレヴィュー

タイプセットが成功すると, ls で dvi ファイル, aux ファイル, log ファイルができている事を, 確認して下さい.

% ls
practice1.aux      practice1.dvi    practice1.log     practice1.tex

さて, xdvi を用いて, dvi ファイルをプレヴィューしてみましょう.

% xdvi practice1.dvi

バックスラッシュ \ の部分がどうなっているか, 数式部分が L^{A}TEX ソースファイルではどうなっているかとか % 以降が無視されている等を, 確かめて下さい. また, xdvi でのプレヴィューでは, 次の操作をして

• マウスポインタを文章の所へ持っていって, h, j, k, l, n, p のキーを押す.

• マウスポインタを文章の所へ持っていって, 右ボタン, 左ボタン, を押す.

• マウスポインタを文章の所へ持っていって, 左右ボタンを同時に押す.

• Shrink 1 , ⋯, Shrink 5 を左ボタンで押す.

xdvi の終了は, quit を左ボタンで押すか, q キーを押します.

6.5 本日のテキストを画面でみる

今日の授業のテキストの内容の L^{A}TEX のファイルをホームページに張っておりますのでダウンロードしてください.

000614.tex をよく読むと, L^{A}TEX の使い方が少しはわかると思います.