講義第9回:LaTeX

LATEX による文書作成

今日とその次はコンピュータを使って印刷物に近い高品質な文書を書く方法を 勉強しよう。前回までの2回では、 HTML で計算機ネットワーク上に置くよう なものを扱ったが、今回と次回ではさらに本格的な、出版物なみのものを作る 方法(の一つ)を扱う。

今週はまず文書作成について。次週は絵を入れたり、もう少し気の効いたことを やってみる。「計算機による文書作成」といっても、ようするにワープロを 使うのと同じである。少し違うのは、ワープロに比べてかなり高度な処理がで きることくらいであろう。ただし、処理の仕方はワープロとはかなり違う。

ワープロを使う場合、パソコン上のワープロソフト(この計算機センターでも、 Microsoft Word といったものが使える)でも、あるいはオアシスのようなワー プロ専用機でも、まず立ちあげ、あとはその中で文書作成し、ファイルにしまっ たりプリントアウトしたりするのもそのワープロの中でメニューとかコマンド を使って実行するようになっている。これに対し、今日使ってみる LATEX (レイテックあるいはラテフというような発音をする。ラテックスとは読まな い方がいいと思う)では、文書作成自体はこれまで使ってきたエディタで行な い、それを別のプログラムで処理して結果を画面で見たりプリントしたりする。 このようなやり方には、なれれば使いやすい、書式変更が簡単である、自分用 にカスタマイズできる、多様な書式が使えるなどのメリットがあるが、逆にな れるまでは使いづらいかもしれない。

なお、数年前までは、 LaTeX というと高価な UNIX ワークステーション等で しか使えなくて、またプリンターも印刷できるものが少なかったりしたが、最 近では Windows のパソコンや Mac でも問題なく使える。また、基本的にはフリー ソフトであるというのも大きな特色である。

簡単な文書

まず、簡単な文書を作ってみよう。

以下のようなファイルをエディタ(mule)でつくって、適当な名前(例えば texsample.tex)でセーブしておこう。

\documentclass[12pt]{jarticle}

\begin{document}
\title{LATEXによる文書サンプル}
\author{牧野淳一郎}
\maketitle
\abstract
これはLATEX による文書サンプルである。
\section{序論}
ここは序論である。
\section{本論}
ここは本論である。
\section{結論}
ここは結論である。
\end{document}
さて、文書ができたらこれを処理するプログラムにかける。これには jlatex texsample というコマンドをターミナルウインドウで入力する。 コマンド名は jlatex で、その次にファイル名のうち .tex の前 までをつけてリターンするわけである。このため、ファイル名は .tex で終っている必要がある。別の名前で作った人は、 mv コマンドを使っ て名前を付け直そう。 うまくコマンドが動けば、おおむね以下のようなメッセージがでる。
makino@as301> jlatex texsample
This is JTeX, Version 1.8, based on TeX Version 3.14159 (Web2C 7.2)
(texsample.tex
LaTeX2e <1997/12/01> patch level 1
(/opt/NSUG98/share/texmf/tex/jlatex/base/jarticle.cls)
(/opt/NSUG98/share/texmf/tex/jlatex/base/j-article.cls
Document Class: j-article 1997/10/10 v1.3x Standard JLaTeX document class
(/opt/NSUG98/share/texmf/tex/jlatex/base/j-size12.clo
(/opt/NSUG98/share/texmf/tex/jlatex/base/jresize12.clo))) (texsample.aux)
[1] (texsample.aux) )
Output written on texsample.dvi (1 page, 1804 bytes).
Transcript written on texsample.log.
makino@as301> 

しかし、なかなかそうはいかず、途中でとまってしまうこともあろう
makino@as301> jlatex texsample
This is JTeX, Version 1.8, based on TeX Version 3.14159 (Web2C 7.2)
(texsample.tex
LaTeX2e <1997/12/01> patch level 1
(/opt/NSUG98/share/texmf/tex/jlatex/base/jarticle.cls)
(/opt/NSUG98/share/texmf/tex/jlatex/base/j-article.cls
Document Class: j-article 1997/10/10 v1.3x Standard JLaTeX document class
(/opt/NSUG98/share/texmf/tex/jlatex/base/j-size12.clo
(/opt/NSUG98/share/texmf/tex/jlatex/base/jresize12.clo)))
! Undefined control sequence.
l.3 \begen
          {document}
? 
このメッセージでは、 Undefined control sequence というところで、何かこ のプログラムが知らないコマンドがあったといっていて、その次の l.3 \begen というところで \begen がその知らないコマ ンドだといっている。ここでプリントと比べると begen ではなく begin になっ ていて、タイプミスが原因だったとわかる。これを直せばいいわけである。他 にもいろいろなエラーが出ると思うが、メッセージを頼りに直していってみよ う。

なお、エラーがあった時、基本的には ? が出 る。ここで x (とそのあとリターン)をいれれば LATEX から抜けるので、エ ラーのところを直してもう一回 LATEX を走らせればいい。ただし、場合によっ ては何だか良くわからない状態になることがある。その時は画面に出ているメッ セージを良く読んで、「常識」で判断すること。まあ、普通は作った ファイルがなくなるとかいったことはないはずである。どうしても LATEX か ら抜けない時は、 Ctrl-c を何回か押してみる。

また、 mule のなかで何だか良くわからない状態になった時はとりあえず Ctrl-g を何回か押してみる。依然として画面がおかしい(何だかわからない ものがでている)時は、ウインドウの左上のほうにある Buffers というメニュー をいろいろ操作してみる。

「いろいろ操作してみる」というと何だかいい加減に聞こえるが、まあ計算機 が壊れることはないので気楽にやってみること。(場合によっては作っている ファイルが消えてしまうことくらいはあるかもしれないが)なお、「使いやす いユーザーインターフェース」というのは、理屈では素人はメニューとかメッ セージをみながら使えるし、慣れた人はそういうのを見ないでも使えるもので あるべきなので、そういうやりかたでうまくつかえないのは使っている人では なくてプログラムのできのほうが悪いのである。とはいえ、文句をいってもしょ うがないので、なんだかわからなくなったらわかっていそうな友達、 TAの大 学院生や私に聞くこと。


なお、そういう意味では私の説明自体があまりよくな いかもしれない。説明のあいだになんだかわからなくなったら、手を上げて質 問とかして下さい。
latex コマンドがうまく動くと、 texsample.dvi という名前のファイルがで きる。このファイルには計算機が読める(人間には読めない)形で、レイアウ トされた文書が入っている。

処理結果の確認

さて、途中で止まらないようになったら、処理結果がどんなものかまず画面で 見てみよう。それには xdvi というコマンドを使う。ターミナルウインドウで xdvi texsample と入力する(後のファイル名は例によって自分が作っ たものを入れる。以下同様である)。すると、私が普段プリントを見せるのに 使っているのと同じようなウインドウが出てきて、そこに処理結果が表示され る。右側のメニューで拡大したり、あるいは複数のページがある文書ならペー ジをめくったり戻ったりできる。これは texsample.tex というファイルをみ ているのではなく、texsample.dvi の方を見ている。したがって、 .tex のファ イルを直しても、 jlatex コマンドを使って .dvi ファイルを作り直さないと 結果は変わらない。

なお、 xdvi texsample といれてウインドウが出ているあいだは、シェ ルウインドウで次のコマンドを入れても実行されない。次に進むためには xdvi のメニューで QUIT を選ぶ必要がある。

処理結果のプリント

処理結果をプリントするには、 dvi2ps texsample | lpr -Pprxxx というコマンドを 実行する。これは実は dvi2ps と lpr という2つのコマンドを組み合わせて、 順に実行している。 dvi2ps で texsample.dvi の中身をさらにプリンターが 理解できる形に翻訳する。その出力結果をlpr がプリンターに送るわけである。

このような、あるコマンドの出力結果を別のコマンドが受けとって処理するこ とをパイプ処理という。これには縦棒 「|」で区切ってコマンドを並べる。 例えば、 w | sort と入力すれば、 w の出力が sort で処理され、ア ルファベット順にならんで出力される。

なお、ここで書いた prxxx というのには、実際にあるプリンターの名前を指 定する。この部屋では pr004, pr005, pr006 の 3 台が使える。 いちいち指定するのが面倒なら、一度

setenv PRINTER pr004
というコマンドを実行しておけば、あとはそこに自動的に出ることになる。以 下、これを実行したものとして話をする。

さて、プリンターに送ったけれども出てこないとかいったことは良く起きる。 これにはいろいろな原因があるが、例えば

といったものがある。自分がプリンターに送った出力がどうなっているかを見 るには、 lpq (-Pprxxx) というコマンドを実行する。例えば以下のような出力が でる。
unable to print: cassette 1 paper empty (non fatal)
Rank   Owner      Job  Files                                 Total Size
active makino     400  standard input                        30117 bytes
これは、「プリントできません、というのは、紙がないからです」といってい るので、プリンタのところにいって紙を入れてやる。紙は一階の事務室でもら う( A4 のをもらってくること)その他いろんなメッセージがでるので、読ん で適切に判断して欲しい。すでに出力がおわっていれば no entries と いう答が返ってくる。

さて、プリンターにおくっちゃったけどやっぱり取り消したいという時には、 lprm (-Pprxxx) というコマンドを使う。これを使うには、まず出力の番号(ジョ ブ番号という)を調べる必要がある。これは lpq でできる。上の例で は 400 である。これを使って lprm 400 と入れれば、

prn04: dfA400xss01 dequeued
prn04: cfA400xss01 dequeued
といったメッセージがでて、出力は取消になる。なお、もしも間違って他の人 の出力の番号をいれてしまっても、それが消えることはない(自分の出したも のしか消せない)。

LATEX の仕組み

ここまでで、とりあえず簡単な文書を印刷するところまでたどり着いた。これ から、LATEX の様々な機能を使っていろいろなことをやってみよう、、、とい うわけだが、その前にまずLATEX の基本的な仕組みを説明する。 \ で始まるものはコマンドで、その後に[] や {}に囲まれてそのコマンド のパラメータ(細かい動作の指定)がつく。例えば最初の
\documentclass[12pt]{jarticle}
では、「この文書の形式は 12 ポイント(字の大きさ)の jarticle です」と いう指定を与えている。形式は他に jbook, jreport などがある。 \section は新しい節の始まりを示す。自動的に番号がふられる。

LATEX で作るもっとも簡単な文書は、以下のようなものだろう。

\documentclass[12pt]{jarticle}
\begin{document}

これはLATEX によるもっとも簡単な文書である。

\end{document}
つまり、文字、形式の指定をし、文書をはじめますというコマンドを書き、そ れから文書の本体を書く。で、そのあとはこれでおしまいというコマンドを書 いてやる。

段落わけをしたければ、改行を2回続ければいい。

\documentclass[12pt]{jarticle}
\begin{document}
これは最初の段落になる。

これは次の段落である。
\end{document}
段落での文字下げ、改行間隔などはコマンドでかえることもできる。

さて、上のようにただ書いていくだけでは、体裁があまり良くない。 LATEX では、体裁を整えるための仕組みがいろいろ準備されている。普通に使うのは、 前回の例でやったように、表題とか著者をコマンドで指定して、 \maketitle といったコマンドを使って LATEX に勝手にタイトル ページをつくってもらうといった方法である。これは、雑誌論文などで、体裁 を出版社が指定したい時に、細かい指定が入ったファイルを別につけておいて、 著者は体裁を気にしないで書けるといった便利な点がある。

もちろん、直接いろいろ指定することもできる。例えば、 \big というコマンドを入れればそこから先は字が大きくなる。 \normalsize でもとに戻る。この辺は教科書に詳しい。

応用

とういわけで、いろいろな機能を使ってみようというわけだが、機能は余りに たくさんあるのでとてもここですべてを紹介することはできない。基本的なも のは教科書にあるので、自分でいろいろ試して欲しい。また、もっと こったことをやってみたい人は、たくさん参考書がでているので適当なものを 買って見てみよう。

よくある間違い

Mule でファイルをセーブするには、ウインドウの左上の File と書かれ たところにマウスを持っていってボタンを押すとメニューがでるのでドラッグ (ボタンを押したままでマウスを動かすこと)して Save Buffer を選ぶ。

既にあるファイルを編集するには Open File 、また今編集中のファイルの名 前をつけかえるには Save Buffer As を選ぶ。

次週予告

LATEX についてもう少しいろいろやってみる。