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 とは, 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 のソースファイルを記述
した例が以下の図です。
この画像は 360DPI の物をグレイスケールを使用して縮小してありますので, 16
色のディスプレイの場合は若干見にくいかもしれません。
同じファイルを jlgrind で処理させて LaTeX で処理させると以下のように
なります。
この画像は 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 LaTeX ファイル中の埋め込みテキストを処理します。
- -i LaTeX ドキュメントにインクルード出来るように処理します。
- - 標準入力から読み込みます。
- -n キーワードにボールドフォントを使用しません。
- -h ヘッダ文字列を指定します。
- -d 指定された文字列を言語定義ファイルとして使用します。(デフォ
ルトは lgrindefs です。)
- -l 使用する言語を指定します。デフォルトではC (-lc この
引数はデフォルトです), C++ (-lc++ または
-lCC), PASCAL (-lp), Modula-2 (-lm2),
Fortran (-lf), RATFOR (-lr), Yacc
(-ly), PostScript (-lps), Prolog
(-lprolog), MLisp (-lmlisp), Icon
(-lI), TeX (-ltex), Metafont (-lmf),
Perl (-lperl), CSH (-lcsh), Bourne Shell
(-lsh) assembler (-lasm), 68000 assembler
(-la68), asm68 (-lasm68), VMS assembler
(-lvmsasm), ISP (-lisp), LDL (-lldl),
Linda (-llinda), MODEL (-lm), and Russell
(-lrussell)が用意されています。
もし, -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
を参照して下さい。
以下のプラットフォーム版を用意致しましたが, WIN32版は動作しないかも知れ
ませんので, あらかじめご了承下さい。事実, 私の EPSON PC-586RV+Windows95
では正常に動作しませんでした。但し,DELL や DEC 等の他の機種では問題なく
動作していますので, 現在のところ, 原因がいまいち不明です。他のプラット
フォームに関しては, 私の知る限りでは正常に動作しています。また、ソース
も入っていますので,御自分でコンパイルする方は何れのプラットフォームを
ダウンロードしてもかまいません。アーカイブは全て lha + tar の変則的な
方法をとっています。これはアーカイブがロングファイル名を含んでいる為です。
ですから, tar はなるべくロングファイル名に対応したものを御用意下さい。
但し、ロングファイル名に対応していないシステムに於いても正常に動作可能で
す。
ダウンロードしようとしてクリックしたところ, 意味の無い文字がずらずらと表
示された方は, ブラウザの設定をご確認下さい。例えばNetscape の場合は
「オプション」→「全般の設定」→「ヘルパー」。
戻る