名前: しっぽ愛好家 日時: 2003-11-15 21:51:56 IPアドレス: 211.4.43.*
>>23601 comment パッケージが提供する comment 環境(*)の使用法を確認しましょう. %%% (*) 実は,comment 環境はデフォルトのコメントアウト用環境,というだけで, %%% ユーザ自身がコメントアウト用環境を新設することもできますし, %%% また,comment 環境にしても \includecomment{comment} という指定を行うと %%% コメントにするのを取り止めることができます. %%% %%% これは余談です. comment 環境では \begin{comment} と \end{comment} の間の部分を コメントアウトするようになってはいますが,その際環境の終端は ``\end{comment}'' という文字列からなる行でなければならないように 実装されています. %%% e.g. \begin{comment} comment \end{comment} と 1 行に書いた場合や, %%% \end{comment} だけの行を作ったつもりであっても %%% ``\end{comment}'' の前あるいは ``\end と {comment} の間'' に %%% 空白文字を入れると,やはり(今回のご質問にあるエラーと同じ) %%% エラーが生じます. というわけで,この問題は comment パッケージの ``仕様'' ということに なるのでしょう. %%% 以下では,\includecomment{comment} は適用していない %%% (\excludecomment{comment} の設定のままである)場合について説明します. なお,``コメントアウト'' をどのようにして行っているか,というと まず,改行コード(文字コードが \endlinechar であるような文字)の カテゴリーコードを一時的に 12 に変更して,``カテゴリーコードが 12 である 改行コード''(以下,[改行~] と書きます)を comment 環境の中身の個々の行の 区切りとして用います. さらに,*文字 % を含む* TeX の特殊文字のカテゴリーコードを 12 に変更して, 環境の中身をただの文字列として扱うようにしています. そして,ちょうど文字列 \end{comment} からなる行を見つけたとき, そこを comment 環境の終端と判定します(環境の終端に到達するまでは, 個々の行を単に捨ててから次の行を読み取るわけです). %%% [改行~] をマクロの引数の書式指定文字列として,``1 行分のテキスト'' を %%% 取得しています. そのため,``\end{comment}%'' のように % をつけると, この文字列は(comment 環境が環境の終端として想定している)``\end{comment}'' とは異なり,環境の終端を判定し損ねる,ということになります. %%% comment 環境が終了するまでは,文字 % もただの文字であることに %%% 注意してください. ``\end{comment}%'' という記述を行っても構わないようにするには, ``環境の終端の判定'' を verbatim パッケージにおける verbatim 環境の 処理と同様に行えばよいでしょう. %%% 簡単に言えば,読み取った行が文字列 \end{comment} そのものであるか否かを %%% 調べるのではなく,読み取った行に %%% \end + 存在するかもしれない空白文字 + {comment} %%% が含まれるか否かを調べます.
この書き込みへの返事: