Next: , Previous: Debugging with Info, Up: Catching Mistakes


F.2 TeX書式化でエラーを捕らえる

TeXでファイルを書式化しているときにミスを捕らえることも可能です.

通常,texinfo-format-bufferは,TeXより有意義なエラーメッセージ を表示するときもあるので,同じファイルでtexinfo-format-buffer(や, それより良いmakeinfo-buffer)を実行後にこうしたいと思うことでしょ う.(See Debugging with Info, for more information.)

例えば,TexinfoファイルでTeXを実行した時の一部を以下に示します.

     ---------- Buffer: texinfo.texi ----------
     name of the Texinfo file as an extension.  The
     @samp{??} are `wildcards' that cause the shell to
     substitute all the raw index files.  (@xref{sorting
     indices, for more information about sorting
     indices.)@refill
     ---------- Buffer: texinfo.texi ----------

(相互参照に閉じカッコがありません.)TeXは停止した後,以下の出力を生成 します.

     ---------- Buffer: *tex-shell* ----------
     Runaway argument?
     {sorting indices, for more information about sorting
     indices.) @refill @ETC.
     ! Paragraph ended before @xref was complete.
     <to be read again>
                       @par
     l.27
     
     ?
     ---------- Buffer: *tex-shell* ----------

この状況では,TeXは正確で理解可能なエラーメッセージを生成しました.

     Paragraph ended before @xref was complete.

@par’は,Texinfoと関係が無いTeXの内部コマンドです.‘l.27’ は,TeXが問題をTexinfoファイルの27行で検出したという意味です. ‘?’は,この状況でTeXが使用するプロンプトです.

残念ながらTeXは常に役に立つ訳ではなく,間違ったものを発見するために, 本当にシャーロック ホームズになる必要があります.

いずれにせよ,このような問題に遭遇した場合,三つのことを行うことが可能で す.

  1. ?’プロンプトで<RET>を入力することで,実行を続けこのエラーを無 視するようTeXに伝えることが可能です.
  2. ?’プロンプトでr <RET>を入力することで,実行を続け,最善 の方法として全てのエラーを無視するようTeXに伝えることが可能です.

    これは最善のことが多くなっています.しかし,用心してください.その結果が ファイルの残り全体となるように考え,一つのエラーが更なるエラーメッセージ として連続して生成される可能性が有ります.そのようなエラーメッセージの雪 崩を生成している時にTeXを止めるため,C-c(または,Emacsの内部シェ ルで実行している場合はC-c C-c)を入力してください.

  3. ?’プロンプトでx <RET>を入力することで,この実行を停止す るようTeXに伝えることが可能です.

Emacs内部でTeXを実行している場合,シェルバッファとTeXが‘?’プ ロンプトを出している行を切替える必要があります.

TeXは,問題があってもエラーメッセージを生成せずにファイルを書式化する ときもあります.これは通常,コマンドが終っていないがTeXは処理を続けら れる場合に生じます.例えば,@end itemizeコマンドで項目分けリスト を終了するのに失敗した場合,TeXは印刷出力可能なDVIファイルを書き出し ます.TeXが与えるエラーメッセージは幾分不可思議な以下のようなコメント だけです.

     (@end occurred inside a group at level 1)

しかし,DVIファイルを印刷した場合,項目分けリストに続くファイルのテキス トが,項目分けリストの最後の項目の部分であるかのように全部字下げされてい ることが分かります.エラーメッセージは,TeXがファイルで@end コマンドを見つかることを期待していたが,必要とされる場所を特定できなかっ たということです.

エラーが見つけにくいと悪名高いもう一つのソースは,@end groupコマ ンドが無いことです.理解できないエラーで困惑している場合,最初に @end groupコマンドが無いものを探してください.

Texinfoファイルにヘッダが足りない場合,TeXは実行の最初で停止し,以下 のような出力を表示します.‘*’はTeXが入力を待っていることを示して います.

     This is TeX, Version 3.14159 (Web2c 7.0)
     (test.texinfo [1])
     *

この状況では,アスタリスクの後で\end <RET>を単純に入力してくだ さい.そして,Texinfoファイルのヘッダ行を書き,もう一度TeXコマンドを 実行してください.(バックスラッシュ‘\’の使用に注意してください. TeXは‘@’の代わりに‘\’を使用します.そしてこの状況では, Texinfoではなく直接TeXで作業しているのです.)