lgrind title

はじめに

lgrind とは, LaTeX を用いて, プログラムソースを奇麗に組み版するソフトで す。このソフトは, Lawrence Berkeley Laboratory の Van Jacobson 氏によっ て作成されました。私のやった事は例の如く, 日本語対応を行った事とMS-DOS に於いて, PIPE が擬似的に動作するように対応しただけです。 lgrind はもともと 0x80 以上のコードはそのまま出力するように作成されてい ましたので, 入力コードが EUC の場合にはそのまま無改造で日本語に対応出来 そうに思いました。しかし, 実際に実行してみると, 不正なアドレスをアクセス して core ファイルを吐いてしまいました。詳しく調査してみた結果どうやら, char を符号無しとして処理しているようでしたが, 実際には最近のコンパイラ は 符号付きとして処理してしまうため, 0x80 を超えるコードをマイナスの値と して処理してしまいます。結果, 意図しないアドレスをアクセスしてエラーになっ ていました。 その処理を修正した結果, UNIX に於いては正常に動作するようになりました。 しかし, MS-DOS の場合は主に使用されるコードが SHIFT-JIS なので, もう少し 修正が必要です。SHIFT-JIS で厄介なのは, 2バイト目のコードが ASCII コード と重複している為, 既存の他の処理とうまく整合をとる事が難しい事です。 そこで, 私は, かなり手を抜いた方法ですが, 内部では全て EUC で処理する事 にしました。この方法ですと, 既存の処理に改造が入りませんので, 余計なバグ を作り込む可能性が少なくなります。 また, MS-DOS では PIPE 関係の処理はサポートしていませんが, PIPE もどきを サポートして, なるべく UNIX の環境と近い動作を行えるように工夫しました。 オリジナルとの混同をさける為に私が日本語に対応した lgrind を jlgrind と 呼ぶ事に致します。

lgrind の特徴

lgrind とは, LaTeX を用いて, プログラムソースを奇麗に組み版するソフトで す。対応しているプログラム言語は C, C++, PASCAL, Modula-2, Fortran, RATFOR, Yacc, PostScript, Prolog, MLisp, Icon, TeX, Metafont, Perl, CSH , Bourne Shell, assembler, 68000 assembler, asm68, VMS assembler, ISP, LDL, Linda, MODEL, Russell と多数対応しています。また, 言語定義ファイル を記述する事に よって, あらゆる言語を処理出来ます。

例えば, LaTeX の verbatim 環境を使用して C のソースファイルを記述 した例が以下の図です。


Verbatim
この画像は 360DPI の物をグレイスケールを使用して縮小してありますので, 16 色のディスプレイの場合は若干見にくいかもしれません。
同じファイルを jlgrind で処理させて LaTeX で処理させると以下のように なります。
lgrind
この画像は 360DPI の物をグレイスケールを使用して縮小してありま すので, 16色のディスプレイの場合は若干見にくいかもしれません。
このように C言語の予約語は Bold フォントで表示されたり, コメントが roman フォントで表示されたり, 文字列が typewriter で表示されてたりしているので 表現にメリハリが出ています。 (実際のプリンタでの印刷品質を見たい方はこちらを クリックして下さい。)

jlgrind --- grind nice program listings using LaTeX
j-version 1.00
古川正恵
1996 年 11 月 19 日

使い方

それでは jlgrind の詳しい使用方法を以下に記述します。jlgrind はオリジナ ルの lgrind に日本語を正しく処理出来るようにしただけですので, 使用方法は オリジナルと全く同じです。以下の記述は基本的には roff 形式のマニュアルを 翻訳しただけです。但し, 私の英語力は中学 2 年生程度で止まっていますので, そのままうのみにするのは大変危険です。オリジナルのマニュアルを nroff で 処理してテキストに変換したものが etc/lgrind.man にありますので, 私の英語 力に疑問をもっている(実は, 疑問をもっていなくても)方はオリジナルを御一読下さるよう, お願い致します。

名前

jlgrind --- grind nice program listings using LaTeX

形式

jlgrind [-e] [-i] [-] [-n] [-h header] [-d description file] [-l language] names...

説明

Lgrind は LaTeX を使用してプログラムソースを素晴らしいスタイルでフォーマッ トします。コメントは Roman体フォントで, キーワードは bold,変数は italic, そして文字列は typewriter フォントを使用します。ソースファイルの行番号は 右端に表示します。(10 行毎)

Lgrind はその入力ファイル(複数可)を処理してそしてその結果を標準出力に書 き込みます。この出力は後で編集したり, より大きなドキュメントにインクルー ド出来るように保存されます。

オプションは次の通りです。

もし, -e も -i オプションも指定しなかった場合は完 全な LaTeX ファイルが生成されます。

使用例

例えば, あなたの LaTeX ドキュメントに foo.c と名前を付けられた C ファイルをインクルードさせる為には, 最初に以下のようにコマンドを実行して 下さい。
lgrind -i -lc foo.c > foo.tex
たくさんの LaTeX コマンドを含んだ foo.c の奇麗な印刷バー ジョン foo.tex が生成されます。そして, LaTeX ドキュメントで任意の スタイルファイルをインクルードするときに, lgrind.styも一緒にインク ルードして下さい。すなわちあなたの LaTeX ドキュメントの最初の行は以下の ようになります。
\documentstyle[...,lgrind,...]{...}
但し, 最近は LaTeX2εを使用されている方も数多くいらっ しゃると思います。LaTeX2ε の場合は, \usepackage を使用 して指定して下さい。 LaTeX のドキュメント中で, 次のコマンドの何れかを使用して foo.tex をインクルードする事が出来ます。
\lgrindfile{foo.tex}
テキストの場所に単純にインクルードします。そして, リスティングの前 後に横幅一杯に線を描きます。
\lgrind[htbp]{foo.tex}{caption}{label}
figure 環境としてリスティングします。figure 環境の float オプショ ンと, caption 及び labelを指定する事が出来ます。
Yacc のソースファイルからスタンドアローンの LaTeX ファイルを 生成する場合は以下の例のように実行して下さい。
lgrind bary.y > bary.tex
これはヘッダとフッダを使用する為に Piet van Oostrum の fancyheadings.sty を使用します。ここで, 出力されるスタンドアローンの LaTeX ファイルは用紙サイズは欧文で使用されるレターサイズになっています ので, 用紙サイズ等を変更する為に出力されたファイルを編集する必要が生じる 場合もあると思います。 これらのコマンドに関するより詳細な説明を知りたい場合には lgrind.doc を参照して下さい。 本当のマニュアルファイルはこの後に, \LaTeX ファイルの埋め込みコマンドに ついての記述がありますが, 私の英語力不足を考慮してこのあたりで打ち切りたい と思います。これから先は原文の etc/lgrind.man を参照して下さい。

Down load

以下のプラットフォーム版を用意致しましたが, WIN32版は動作しないかも知れ ませんので, あらかじめご了承下さい。事実, 私の EPSON PC-586RV+Windows95 では正常に動作しませんでした。但し,DELL や DEC 等の他の機種では問題なく 動作していますので, 現在のところ, 原因がいまいち不明です。他のプラット フォームに関しては, 私の知る限りでは正常に動作しています。また、ソース も入っていますので,御自分でコンパイルする方は何れのプラットフォームを ダウンロードしてもかまいません。アーカイブは全て lha + tar の変則的な 方法をとっています。これはアーカイブがロングファイル名を含んでいる為です。 ですから, tar はなるべくロングファイル名に対応したものを御用意下さい。 但し、ロングファイル名に対応していないシステムに於いても正常に動作可能で す。 ダウンロードしようとしてクリックしたところ, 意味の無い文字がずらずらと表 示された方は, ブラウザの設定をご確認下さい。例えばNetscape の場合は 「オプション」→「全般の設定」→「ヘルパー」。
戻る