名前: しっぽ愛好家 日時: 2003-07-16 02:43:30 IPアドレス: 210.234.40.*
>>20297 私も ``歴史的事情'' には詳しくありませんが,関係があるとすれば, 下に引用(1 箇所コメントを追加しました)した plcore.ltx における \@makecol の定義の (*) というコメントをつけた行の記述でしょう. %%% これは,2001/05/10 付の変更箇所のようです. %%% %%% web2c-7.3.3 がどの時期のものかは憶えていませんが… %%% %%% なお,後述するように,今回の問題は longtable パッケージ側の %%% %%% 問題とみなすべき性質のもののようです. \gdef\@makecol{% \setbox\@outputbox\box\@cclv% \xdef\@freelist{\@freelist\@midlist}% \global \let \@midlist \@empty \@combinefloats \ifvbox\@kludgeins \@makespecialcolbox \else \setbox\@outputbox \vbox to\@colht {% \@texttop \dimen@ \dp\@outputbox \unvbox \@outputbox \iftdir\hskip\z@%%% (*) \else\vskip -\dimen@\fi \@textbottom \ifvoid\footins\else % for pLaTeX \vskip \skip\footins \color@begingroup \normalcolor \footnoterule \unvbox \footins \color@endgroup \fi }% \fi \global \maxdepth \@maxdepth } %%% 以下は,分析です. 縦組みの際には,(*) の記述により,一度水平モードに移行し, さらに \@textbottom に含まれている \vskip(tarticle.cls などの デフォルトの設定では \raggedbottom が適用されていることに 注意してください)の際に \par が挿入されます. %%% 水平モードで \vskip を用いると,*\par によって* 段落を %%% 終了しようとします. しかし,longtable 環境の中のように \par が \@empty に 再定義されたままになっていると,\vskip の際に補われた \par によっても 段落は終了せず水平モードのままです.そこで再び \vskip の処理を行う前に \par を挿入し…という具合に無限ループが生じるのでしょう. %%% ということは… \LT@output の定義を変更しなくても,単に %%% ``\flushbottom'' 指定をプリアンブルに追加するだけでも %%% タイプセットはできるということになりそうです(実際,そうなります). %%% しかし,パッケージを用いるためだけに文書全体の体裁を変える, %%% というのも変な話なので,\LT@output を再定義した方がよいでしょう. ただ,今回の問題は pLaTeX の不具合というより,やはり longtable パッケージの不具合というべき性質のもののようです. 実際,LaTeX のデフォルトの出力ルーチンでは \output の先頭の \let\par\@@par という記述で \par を復元しているので, 出力ルーチンを書き換えない限り \@makecol の処理の際に (pLaTeX の縦組み処理時のように)\par が *発生* したとしても 問題はありません. しかし,longtable 環境内で一時的に用いられている出力ルーチン (\LT@output で与えられます)では,LaTeX のデフォルトの 出力ルーチンで行っている \let\par\@@par という復元処理を 何故か省略しています(この処理を追加しても問題なさそうなのですが…). %%% \par の復元処理を省略する理由については, %%% longtable.dtx には記載されていないようです.
この書き込みへの返事: