如何删除 splittopskip 添加的垂直跳过?

如何删除 splittopskip 添加的垂直跳过?

以下示例使用设置拆分一个框\splittopskip=2cm。一切按预期工作。但是我想\splittopskip=2cm稍后通过一些步骤删除垂直跳过添加。

有没有简单的方法?

\documentclass{article}
\parindent0pt
\def\exampletext{Text Text Text Text Text Text Text Text Text Text Text Text 
Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text 
Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text }
\fboxsep=0pt
\fboxrule=1pt

\newbox\boxi
\newbox\boxii
\begin{document}
\begingroup
\setbox\boxi=\vbox%
 {%
    \hsize=8cm\sloppy
    \bfseries\huge\exampletext
 }

\splitmaxdepth0pt \splittopskip=2cm
\setbox\boxii\vsplit\boxi to2cm
\setbox\boxii=\vbox{\unvbox\boxii}

BOX \verb+\boxii+\hfill\fbox{\box\boxii}

\setbox\boxi=\vbox{\unvbox\boxi}

BOX \verb+\boxi+\hfill\fbox{\box\boxi}
\endgroup
\end{document}

编辑

David 提供的解决方案几乎按预期工作。但它吞噬了分割框的第一行。为了演示行为,我更改\exampletext并添加了TextA应该是分割框第一行的内容。

\documentclass{article}
\parindent0pt
\def\exampletext{Text Text Text Text Text Text Text Text TextA Text Text Text 
Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text 
Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text }
\fboxsep=0pt
\fboxrule=1pt

\newbox\boxi
\newbox\boxii
\begin{document}
\begingroup
\setbox\boxi=\vbox%
 {%
    \hsize=8cm\sloppy
    \bfseries\huge\exampletext
 }

\splitmaxdepth0pt \splittopskip=2cm
\setbox\boxii\vsplit\boxi to2cm
\setbox\boxii=\vbox{\unvbox\boxii}

BOX \verb+\boxii+\hfill\fbox{\box\boxii}

BOX \verb+\boxi+ unprepared\hfill\fbox{\copy\boxi}

\splittopskip0pt
\setbox0=\vsplit\boxi to 0pt

\setbox\boxi=\vbox{\unvbox\boxi}

BOX \verb+\boxi+ prepared\hfill\fbox{\box\boxi}
\endgroup
\end{document}

答案1

\splittopskip0pt
\setbox\boxi=\vbox{\break\unvbox\boxi}
\setbox0=\vsplit\boxi to 0pt
\setbox\boxi=\vbox{\unvbox\boxi}

在这种情况下,从 boxi 中删除 splitopskip 粘连(用 0pt 粘连替换它),尽管通常它会删除所有可丢弃物品。但是,如果盒子最初来自 vsplit,那么盒子顶部可能只有一个可丢弃物品。

第一个设置\boxi确保在框的开始处有一个断点,因此当您使用 vsplit 时,它会在那里分割并丢弃任何后续胶水,然后添加 0pt \splittopskip

相关内容