コンパイルエラー"\begin{document}"の改善方法について

Re: コンパイルエラー"\begin{document}"の改善方法について

- ut の投稿
返信数: 7
> Runaway argument?

というのは、「引数逃げ出しちゃってます?」という意味で、引数
を囲む対のブレースの閉じ側を書き忘れたり、誤って削除してしま
ったりした場合に出るものです。

> 私もこのエラーについて調べたところ,.auxファイルの削除でコ
> ンパイルできるようになるとの情報を得て,実際に試したところ
> 確かに上手くいきました.

とのことですが、それは、「Runaway argument?」に対する一般的な
対処法ではないと思います。今回はたまたま、

> {\contentsline {figure}{\numberline {13}{\ignorespaces XXX\ETC.

となっていることから、.lof への書き込みに絡む部分(\caption
でしょうか?)でのミスだと思われるので、それで、.aux ファイル
の削除で一時的にうまくいってしまっているように見えます。

というわけで、(根本的な)「改善策」は、「Runaway argument」
を引き起こしている、ブレースの閉じ忘れ箇所を探し出して、閉じ
ブレースを追加することだと思われます。
ut への返信

Re: コンパイルエラー"\begin{document}"の改善方法について

- 帯田 木偶太 の投稿
Runaway argument のエラーは、TeX ソースそのものにブレースの閉じ忘れがなくても
*.aux 中では起こりえると思います。
今回の場合、\caption の引数に fragile なコマンドが入っている可能性が
高いかと。

figure 環境中の \caption として 13 番目のものの引数(“\ignorespaces XXX”で
始まっているはず)をチェックして、fragile なコマンドがあれば
\protect を前置してみてください。
その上で、一旦 aux ファイルを削除し、タイプセットを 2 回(1回では不十分です)
繰り返してみてください。
帯田 木偶太 への返信

Re: コンパイルエラー"\begin{document}"の改善方法について

- 前田 一貴 の投稿
なるほど,根本的な対処法…….今度自分も起きたら試してみよう…….ありがとうございます.
帯田 木偶太 への返信

Re: コンパイルエラー"\begin{document}"の改善方法について

- しょうない がーーーる の投稿
返信ありがとうございます.

>figure 環境中の \caption として 13 番目のものの引数(“\ignorespaces XXX”で
始まっているはず)をチェックして、fragile なコマンドがあれば
\protect を前置してみてください。
その上で、一旦 aux ファイルを削除し、タイプセットを 2 回(1回では不十分です)
繰り返してみてください。

13番目のキャプションは,ちょっとした数式を含んだただの文章でした.とりあえず\protectを前置し,仰せの通り行なったところ,症状が解決しました.ありがとうございます.
大変恐縮なのですが,『fragile なコマンド』とはどういうことのなのか,そして\protectの役割を簡単でいいのでご教授頂けるでしょうか.調べてみたのですがどうも理解できず,今回の学びにさせていただきたいです.
しょうない がーーーる への返信

Re: コンパイルエラー"\begin{document}"の改善方法について

- 帯田 木偶太 の投稿
》 『fragile なコマンド』とはどういうことのなのか,そして\protectの役割を

以下、非常にざっくりとした説明になります。
※  私自身のあやふやにしか理解できていないので…。

LaTeX のコマンドの引き数には「動く引き数(moving argument)」と呼ばれる
種類のものがあり、動く引き数の中で記述することにより不都合を生じるような
コマンドのことを「fragile な(脆弱な)コマンド」と呼んでいます。
※  ちなみに、fragile でないコマンドは「robust な(堅牢な)コマンド」と
    呼ばれます。

動く引き数というのは、コマンドが記述されたのとは異なる場所に出力される
可能性のある引き数のことで、\chapter、\section 等のセクショニング・コマンドや
\caption の引き数(オプション引き数を指定した場合はオプション引き数の方)が
これに該当する主なものです。つまり、セクショニングそのものの見出しや
キャプションとして出力される以外に、ページ・ヘッダや目次にも出力されると
いうことが「動く」と形容されるのです。
※  ということで、特定の引き数が動く引き数に該当するかどうかは、そのコマンドの
    基本的な使い方を把握していれば概ね判別できるでしょう。実際のところは、
    セクショニング・コマンドと \caption に注意しておけばそこそこ大丈夫。

さて、「動く引き数」は、多くの場合、一旦補助ファイル(大概の場合は *.aux)に
書き出されたうえで、特定の場所でその補助ファイルが LaTeX によって
読込まれることで、「動き」ます。そして TeX は、コントロール・シーケンスを
外部ファイルに書き出す場合、原則として展開可能な限り展開しきってから
書き出します。fragile なコマンドは、この「展開可能な限り展開しきる」と
いうのが問題となって、エラーを引き起こすのです。\protect というのは、
「補助ファイルに書き出すにあたって、後続のコマンドを展開するな」という
意味のある種の目印として働きます。

ただ、特定のコマンドについて、fragile か robust かを見分ける簡便な方法は
残念ながらありません。
※  LaTeX のフォーマット・レベルで定義されている文書著作者向けの(つまり
    マクロ作者向け以外の)コマンドについては、ランポート本(「文書処理システム
    LaTeX2e」――原著は“LaTeX: A Document Preparation System System LaTeX2e”
    だったでしょうか)にはすべて書かれているので、覚えしまうことは可能でしょう。
    ※  同書(少なくとも日本語版)はとうに絶版になっているようですが、
        古書としては入手可能でしょう。
    パッケージ類で定義されているコマンドについては、ドキュメントに明記されている
    ものもあれば、そうでないものもあります。
あまり深く考えずに「動く引き数中のコマンドには常に \protect を前置する」という
方針をとる人もいるようですが、不必要な \protect が不都合を起こすケースも
稀にあるようですので、悩ましいところです。
帯田 木偶太 への返信

Re: コンパイルエラー"\begin{document}"の改善方法について

- しょうない がーーーる の投稿
詳細に,かつ明快に解説いただきまして,ありがとうございます.『動く』とは,そういう意味だったのですね.よく理解できました.
やはり繊細な問題なのですね.どのコマンドがfragileかrobustかを覚えるのは今のところ難しいので,今後問題が起きたら\protectを置き,先述の対処をしてみることにします.勉強になりました.ありがとうございます.
ut への返信

Re: コンパイルエラー"\begin{document}"の改善方法について

- しょうない がーーーる の投稿
返信ありがとうございます.
> というわけで、(根本的な)「改善策」は、「Runaway argument」
を引き起こしている、ブレースの閉じ忘れ箇所を探し出して、閉じ
ブレースを追加することだと思われます。

血眼に探してみましたが,どうも見つかりませんでした.素朴な疑問なのですが,ブレースの閉じ忘れがあるときでも,コンパイルされることがあるのですか?私の中のTexのイメージは,何か1つでもミスがあると絶対に上手くいくことはないと思っていました.
しょうない がーーーる への返信

Re: コンパイルエラー"\begin{document}"の改善方法について

- ut の投稿
ありゃ…。

すいません、帯田さんのおっしゃる可能性が高そうです…。