向前窥视 \vbox:\vsplit 然后重新组装?

向前窥视 \vbox:\vsplit 然后重新组装?

我想知道是否有可能实现窥视方法检查 a 的头部\vbox而不改变 的内容\vbox。可以使用\copy原始 的a 进行暴力破解\vbox,但我正在寻找一种不那么暴力的方法。

使用以下代码,\bigbox构造 a ,将其头部拆分为\partbox,最后将所有内容重新组合为\bigbox\testmybox用于显示盒子。

\documentclass{article}
\usepackage{blindtext}

\def\testmybox#1{%
  \par%
  {\fboxsep0pt\fbox{\copy#1}}\par%
  \edef\myboxheight{\the\dimexpr\ht#1+\dp#1\relax}%
  Total height: \myboxheight%
}

\begin{document}

\newbox\bigbox
\newbox\partbox

\setbox\bigbox=\vbox{\hsize 11cm%
  \footnotesize\blindtext[1]}

\textbf{Original box}\par
\testmybox\bigbox

%\splittopskip=0pt
%\splitmaxdepth=0pt

\setbox\partbox=\vsplit\bigbox to 45pt%

\textbf{Splitted box:}\par
\testmybox\partbox

\textbf{Rest:}\par
\testmybox\bigbox

\setbox\bigbox=\vbox%
{%
  \unvbox\partbox
  \unvbox\bigbox
}

\textbf{Reassembled box:}
\testmybox\bigbox

\end{document}

在此处输入图片描述

问题在于重新组装的盒子与原始盒子并不完全相同。这里,两个部分之间的空间太大。这个空间取决于值\splittopskip,但我不知道如何设置这个值以使其适用于所有可以想到的情况。

是否可以重新组装原盒子而不产生偏差?

答案1

由于没有人回答或评论这个问题,我认为没有答案。但后来我在 e-TeX 中找到了\splitdiscards\savingvdiscards,它们似乎正是缺少的命令。有了它,答案似乎非常简单 - 如果我之前知道这一点,就可以节省我很多时间:

\documentclass{article}
\usepackage{blindtext}

\def\testmybox#1{%
  \par%
  {\fboxsep0pt\fbox{\copy#1}}\par%
  \edef\myboxheight{\the\dimexpr\ht#1+\dp#1\relax}%
  Total height: \myboxheight%
}

\begin{document}

\newbox\bigbox
\newbox\partbox

\setbox\bigbox=\vbox{\hsize 11cm%
  \footnotesize\blindtext[1]}

\textbf{Original box}\par
\testmybox\bigbox

\splittopskip=0pt
%\splitmaxdepth=0pt
\savingvdiscards=1
\setbox\partbox=\vsplit\bigbox to 45pt%

\textbf{Splitted box:}\par
\testmybox\partbox

\textbf{Rest:}\par
\testmybox\bigbox

\setbox\bigbox=\vbox%
{%
  \unvbox\partbox%
  \splitdiscards%
  \unvbox\bigbox%
}

\textbf{Reassembled box:}
\testmybox\bigbox

\end{document}

在此处输入图片描述

相关内容