複数列出力における Plain TeX の図* 相当の定義

複数列出力における Plain TeX の図* 相当の定義

以前、figure*Plain TeX のようなものを定義しようとしました。その結果、列の高さが間違ってしまいました。

(見る:Plain TeX で 2 列に出力した幅の広い図

vsize を記憶するというヒントがあったので、これを試してみました。次の MWE を見てください。

% For Plain LuaTeX
\catcode`@=11
\raggedbottom

\newdimen\fullhsize
\newdimen\columnsep
\columnsep 1cm
\fullhsize\hsize
\advance\hsize-\columnsep
\divide\hsize\tw@

\newdimen\fullvsize
\fullvsize\vsize

\def\fullline{\hbox to\fullhsize}
\def\makeheadline{\vbox to\z@{\vskip-22.5\p@
    \fullline{\vbox to8.5\p@{}\the\headline}\vss}\nointerlineskip}
\def\makefootline{\baselineskip24\p@\lineskiplimit\z@
    \fullline{\the\footline}}

% Twocolumn output
\newif\if@firstcolumn \@firstcolumntrue
\newbox\firstcolumn

\output={\ifvoid\widetopins\else%%%%%%%% try to change vsize
    \global\advance\vsize-\ht\widetopins
    \global\advance\vsize-\dp\widetopins\fi
    \if@firstcolumn \global\setbox\firstcolumn=\columnbox
    \global\@firstcolumnfalse
    \else
    \doubleformat \global\@firstcolumntrue\fi
    \ifnum\outputpenalty>-20000 \else\dosupereject\fi}

\def\doubleformat{\shipout\vbox{
    \makeheadline
    \ifvoid\widetopins\else\fullline{\box\widetopins}\fi
    \fullline{\box\firstcolumn\hfil\columnbox} \makefootline}
    \advancepageno
    \global\vsize\fullvsize}% reset \vsize

\def\columnbox{\leftline{\pagebody}}

% like figure* in LaTeX
\newinsert\widetopins
\skip\widetopins\z@skip
\count\widetopins=0 %%%%%%%% to change vsize manually
\dimen\widetopins=.5\vsize

\def\widetopinsert{\p@gefalse\par\begingroup
    \setbox\z@\vbox\bgroup\hsize\fullhsize}
\def\endwideinsert{\egroup
    \insert\widetopins{\penalty100 % floating insertion
    \splittopskip\z@skip
    \splitmaxdepth\maxdimen \floatingpenalty\z@
    \ifp@ge \dimen@\dp\z@
    \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero
    \else \box\z@\nobreak\bigskip\fi}\endgroup}

\def\mypicture{\vrule height 100pt depth 40pt width300pt}

\def\text{Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.}

\text\text\text

\widetopinsert
\centerline{\mypicture}
\endwideinsert

\text\text\text\text\text

\bye

ここに画像の説明を入力してください

画像でわかるように、両方の列が間違っています。両方とも下の余白に入り、2 番目の列には上部に空白があります。何を間違えたのでしょうか? どうすれば\vsize適切に変更できますか?

関連情報