
Некоторое время назад я пытался определить что-то вроде figure*
для Plain TeX. Это привело к неправильной высоте столбцов.
(Видеть:Широкий рисунок в двухколоночном формате вывода в формате Plain TeX)
Была подсказка запомнить 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
Как вы видите на картинке, обе колонки неправильные. Обе идут в нижнее поле, а у второй сверху есть пробел. Что я сделал не так? Как можно \vsize
правильно изменить?