名前: しっぽ愛好家 日時: 2003-09-06 07:48:16 IPアドレス: 219.108.37.*
>>21557 ちょっと考えてみたのですが,既製品があるようですね. ほとんど蛇足ですが,ご参考までに… \documentclass{jarticle} \textheight.5\textheight \usepackage{longtable} \makeatletter %%% longtable 環境の動作の調整 \def\longtable{% \par \begingroup \def\@tempa{multicols}% \def\@elt##1{% \def\@tempb{##1}% \ifx\@tempa\@tempb \LT@err{longtable in multicols environment}\@ehc \fi}% \@envirstack \endgroup \begingroup \@ifnextchar[\LT@array{\LT@array[x]}} \def\LT@output{% \ifnum\outputpenalty <-\@Mi \ifnum\outputpenalty > -\LT@end@pen \LT@err{floats and marginpars not allowed in a longtable}\@ehc \else \setbox\z@\vbox{\unvbox\@cclv}% \ifdim \ht\LT@lastfoot>\ht\LT@foot \dimen@\pagegoal \advance\dimen@-\ht\LT@lastfoot \ifdim\dimen@<\ht\z@ \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vfil}%%% \vss -> \vfil \@makecol \@opcol%%% \@outputpage%%% changed \setbox\z@\vbox{\box\LT@head}% \fi \fi \global\@colroom\@colht \global\vsize\@colht \vbox{% \unvbox\z@ \box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}% \fi \else \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vfil}%%% \vss -> \vfil \@makecol \@opcol%%% \@outputpage%%% changed \global\vsize\@colroom \copy\LT@head \fi} \makeatother \makeatletter %%% 環境の処理の拡張 \def\begin#1{% \toks@\expandafter{\expandafter\@elt\expandafter{\@currenvir}}% \@temptokena\expandafter{\@envirstack}% \edef\@envirstack{\the\toks@\the\@temptokena}% \@ifundefined{#1}% {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}% {\def\reserved@a{\def\@currenvir{#1}% \edef\@currenvline{\on@line}% \csname #1\endcsname}}% \@ignorefalse \begingroup\@endpefalse\reserved@a} \let\@envirstack\@empty % %%% LaTeX 自身の 2 段組アルゴリズムをそのまま拡張した多段組 \newcount\@curr@column \def\onecolumn{% \clearpage \global\columnwidth\textwidth \global\hsize\columnwidth \global\linewidth\columnwidth \global\@twocolumnfalse \col@number\@ne \global\@curr@column\z@ \@floatplacement} \def\changecolumns#1{% \clearpage \col@number#1\relax \count@\col@number \advance\count@\m@ne \global\columnwidth\textwidth \global\advance\columnwidth-\count@\columnsep \global\divide\columnwidth\col@number \global\hsize\columnwidth \global\linewidth\columnwidth \global\@twocolumntrue \global\@firstcolumntrue \global\@curr@column\z@ \@ifnextchar[\@topnewpage\@floatplacement} \def\twocolumn{\changecolumns{2}} \newbox\@outputpage@tempbox \def\@outputdblcol{% \if@firstcolumn \global\@firstcolumnfalse \toks@\expandafter{\topmark}% \xdef\@firstcoltopmark{\the\toks@}% \global\let\@setfirstmark\relax \fi \global\advance\@curr@column\@ne \ifnum\@curr@column<\col@number \global\setbox\@leftcolumn\hbox{% \unhbox\@leftcolumn \copy\@outputbox}% \splitmaxdepth\maxdimen \vbadness\maxdimen \setbox\@outputbox\vsplit\@outputbox to\maxdimen \toks@\expandafter{\splitfirstmark}% \edef\@firstmark@in@curr@column{\the\toks@}% \ifx\@firstmark@in@curr@column\@empty\else \ifx\@setfirstmark\relax\else \global\let\@firstmark@in@curr@page\@firstmark@in@curr@column \gdef\@setfirstmark{\let\firstmark\@firstmark@in@curr@page}% \fi \fi \else \global\@firstcolumntrue \global\@curr@column\z@ \global\setbox\@leftcolumn\hbox{% \unhbox\@leftcolumn \box\@outputbox}% \global\setbox\@outputpage@tempbox\box\voidb@x \setbox\z@\hbox{% \unhbox\@leftcolumn \@outputpage@reconstructbox}% \setbox\@outputbox\vbox{% \hb@xt@\textwidth{\unhbox\@outputpage@tempbox}}% \@combinedblfloats \@setfirstmark \let\topmark\@firstcoltopmark \@outputpage \begingroup \@dblfloatplacement \@startdblcolumn \@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}% \endgroup \fi} \def\@outputpage@reconstructbox{% \setbox\z@\lastbox \ifvoid\z@\else \global\setbox\@outputpage@tempbox\hbox{% \hb@xt@\columnwidth{\box\z@\hss}% \ifvoid\@outputpage@tempbox\else \hfil \vrule\@width\columnseprule \hfil \fi \unhbox\@outputpage@tempbox}% \expandafter\@outputpage@reconstructbox \fi} \makeatother \begin{document} \def\text{% patapata oyoyo are\-re tohoho ottotto patapata oyoyo are\-re tohoho ottotto patapata oyoyo are\-re tohoho ottotto patapata oyoyo are\-re tohoho ottotto patapata oyoyo are\-re tohoho ottotto!\par} \def\test{% arere & oyoyo \\ arere & oyoyo \\ arere & oyoyo \\ arere & oyoyo \\ arere & oyoyo \\} \changecolumns{3}%%% 3 段組に変更 %%% 4 段組にするには \changecolumns{4} とします(5 段組以上でも同様です). \text\text\text\text\text \begin{longtable}{|c|c|} \hline \textbf{Lhead} & \textbf{Rhead} \\ \hline \endhead \hline \textbf{Lfoot} & \textbf{Rfoot} \\ \hline \endfoot \test\test\test\test\test \test\test\test\test\test \end{longtable} \text\text\text\text\text \end{document} %%% なお,supertabular パッケージは,何も変更しなくても上記の %%% \changecolumns による多段組と併用できます. %%% %%% ただし,\changecolumns は LaTeX のオリジナルの 2 段組アルゴリズムを %%% %%% そのまま拡張しただけなので,カラム数の変更の際には \clearpage を %%% %%% 伴いますし,また,多段組部分の最終ページの各カラムの高さも %%% %%% 揃えません. [余談] multicol パッケージによる多段組では,1ページ分のテキストをあらかじめ 読み込んでから,個々のカラムに分割します.そのため,表のヘッダ・フッタ (\endhead/\endfoot で指定される部分)を挿入すべき箇所が事前には 判明しません.これが,longtable パッケージが multicol パッケージとの併用を 忌避する理由(の一部)でしょう. %%% 実装上の問題を言えば,longtable,multicol の両パッケージは %%% 出力ルーチンを書き換えるので,処理が衝突しています. %%% 一方,supertablar パッケージの方は,内部処理で不用意(?)に \newpage を %%% 用いています(multicols 環境内の \newpage は改カラムではなく本当に %%% 改ページしてしまいます).ただ,それ以外の点も multicols 環境の中で %%% supertabular 環境を用いた場合に問題になっているようです. %%% なお,表全体を一度読み込んでしまう,という負担を TeX にかけない限り, %%% (多段組部分の最終ページでの)各カラムの高さを揃えつつ %%% 表のヘッダ・フッタを(自動的に)追加するのは困難でしょう.
この書き込みへの返事: