講義第4回:LaTeX

前回レポートについて

提出状況が TAの近藤さんの作ったリスト に出ているので、自分が出したものがある かどうか確認して、出したはずなのにないって人はとりあえず 近藤さんに申 し出て下さい。

レポートの内容について

多かった意見や、気になったものについて、思いつくままに書く:

LATEX による文書作成

今日とその次はコンピュータを使って文書を書く方法を勉強しよう。

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

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

簡単な文書

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

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

「ファイル」を「セーブ」するってのはどういうことかというのがわからない 人は、前回の資料をみること。

\documentstyle[12pt]{jarticle}

\begin{document}
\title{LATEXによる文書サンプル}
\author{牧野淳一郎}
\maketitle
\abstract
これはLATEX による文書サンプルである。
\section{序論}
ここは序論である。
\section{本論}
ここは本論である。
\section{結論}
ここは結論である。
\end{document}
さて、文書ができたらこれを処理するプログラムにかける。これには jlatex texsample というコマンドをシェルウインドウで入力する。 コマンド名は jlatex で、その次にファイル名のうち .tex の前 までをつけてリターンするわけである。このため、ファイル名は .tex で終っている必要がある。別の名前で作った人は、 mv コマンドを使っ て名前を付け直そう。 うまくコマンドが動けば、おおむね以下のようなメッセージがでる。
>jlatex texsample
This is JTeX, Version 1.6, based on TeX Version 3.1415 (C version 6.1)
(texsample.tex
LaTeX2e <1996/12/01> patch level 1
(/usr/local/lib/texmf/tex/jlatex2e/base/jlatex209.def
(/usr/local/lib/texmf/tex/latex2e/base/latex209.def
Entering LaTeX 2.09 compatibility mode.
(/usr/local/lib/texmf/tex/latex2e/base/tracefnt.sty)
(/usr/local/lib/texmf/tex/latex2e/base/latexsym.sty)))
(/usr/local/lib/texmf/tex/jlatex2e/base/tracejfnt.sty)
(/usr/local/lib/texmf/tex/jlatex2e/base/jarticle.cls)
(/usr/local/lib/texmf/tex/jlatex2e/base/j-article.cls
Document Class: j-article 1995/01/31 v1.2y Standard JLaTeX document class
(/usr/local/lib/texmf/tex/jlatex2e/base/j-size12.clo
(/usr/local/lib/texmf/tex/jlatex2e/base/jresize12.clo)))
No file texsample.aux.
(/usr/local/lib/texmf/tex/latex2e/base/Ulasy.fd) [1] (texsample.aux) )
Output written on texsample.dvi (1 page, 1812 bytes).
Transcript written on texsample.log.
>
しかし、なかなかそうはいかず、途中でとまってしまうこともあろう
jlatex texsample
This is JTeX, Version 1.6, based on TeX Version 3.1415 (C version 6.1)
(texsample.tex
LaTeX2e <1996/12/01> patch level 1
(/usr/local/lib/texmf/tex/jlatex2e/base/jlatex209.def
(/usr/local/lib/texmf/tex/latex2e/base/latex209.def
Entering LaTeX 2.09 compatibility mode.
(/usr/local/lib/texmf/tex/latex2e/base/tracefnt.sty)
(/usr/local/lib/texmf/tex/latex2e/base/latexsym.sty)))
(/usr/local/lib/texmf/tex/jlatex2e/base/tracejfnt.sty)
(/usr/local/lib/texmf/tex/jlatex2e/base/jarticle.cls)
(/usr/local/lib/texmf/tex/jlatex2e/base/j-article.cls
Document Class: j-article 1995/01/31 v1.2y Standard JLaTeX document class
(/usr/local/lib/texmf/tex/jlatex2e/base/j-size12.clo
(/usr/local/lib/texmf/tex/jlatex2e/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 というコマンドを 実行する。これは実は dvi2ps と lpr という2つのコマンドを組み合わせて、 順に実行している。 dvi2ps で texsample.dvi の中身をさらにプリンターが 理解できる形に翻訳する。その出力結果をlpr がプリンターに送るわけである。

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

あ、まず、その前に、「自分が送ったものがどのプリンターに出るか」を知っておく必要がある。これには

printenv PRINTER
または
env   | grep PRINTER
というコマンドをシェルウインドウで入力する。これらで返ってきた答が例えば PRINTER=lp13 とか lp13 とかであればそこにでる。

ディスプレイに張ってあるラベルに書いてあるところではない。

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

といったものがある。自分がプリンターに送った出力がどうなっているかを見 るには、 lpq というコマンドを実行する。例えば以下のような出力が でる。
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 というコマンドを使う。これを使うには、まず出力の番号(ジョ ブ番号という)を調べる必要がある。これは lpq でできる。上の例で は 400 である。これを使って lprm 400 と入れれば、

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

LATEX の仕組み

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

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

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

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

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

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

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

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

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

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

応用

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

よくある間違い

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

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

次週予告

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