我需要计算从当前基线到下一个/当前段落底部的距离。(最终这将结束\everypar
。)有没有更简单的方法可以精确地做到这一点?
也可以看看如何在 minipage 中保留相同的 parskip
\documentclass{article}
\usepackage{lipsum}
\newlength\parsize
\newcommand{\testheight}[1]%
{\bgroup
\skip0=\parskip
\skip1=\parindent
\skip2=\leftskip
\skip3=\rightskip
\skip4=\parfillskip
\skip5=\baselineskip
\skip6=\lineskip
\ifdim\hfuzz<.4pt\relax\let\default=\fussy
\else\let\default=\sloppy
\fi
\sbox0{\parbox[t]{\columnwidth}{%
\parskip=\skip0
\parindent=\skip1
\leftskip=\skip2
\rightskip=\skip3
\parfillskip=\skip4
\baselineskip=\skip5
\lineskip=\skip6
\default #1}}%
\global\parsize=\dp0
\egroup}
\begin{document}
\rightskip=3in
\sloppy
\testheight{\lipsum[1]}
\noindent\llap{\smash{\rule[-\parsize]{1pt}{\parsize}} }
\hskip\parindent\lipsum[1]
\end{document}
目的不是画线。那只是一个测试,以确保它能正常工作。我的目标是使用 \pdfsavepos 修改 wrapfig 并添加一些新选项。
后记:
当我第一次从纯 TeX 切换到 LaTeX 时,我使用的所有旧代码都无法正常工作。早期的实验表明,和\vbox
之间没有区别\vbox
,所以我学会了用和来代替。直到最近我才发现仍然可以通过在它们之间插入和使用来堆叠es 。毫不奇怪,现在遵循标准的段落构建规则。\hbox
\mbox
\parbox
tabular
\vbox
\hbox
\\
\baselineskip=0pt
\vbox
答案1
LaTeX 不会发生任何变化。执行或时的\vbox
主要区别在于,在后一种情况下会进行一些初始化,您需要通过对临时寄存器的分配来处理这些初始化。\vbox
\parbox
另一个问题是脚注和其他“迁移”材料,但我认为你不会遇到它;否则它将需要一些重新定义。
和
\newdimen\lastdepth
\setbox0=\vtop{
\ifdim\hfuzz<.4pt
\let\default=\fussy
\else
\let\default=\sloppy
\fi
\default
<text>\par
\global\lastdepth=\prevdepth
}
您可以查询\ht0
,它给出第一行的高度,对于\dp0
,它给出剩余的总大小,并且对于\lastdepth
,它存储最后一行的深度。
由于没有进行初始化,例如\parbox
,的排版<text>
不应该相对于在外部垂直列表中设置的排版而改变。
如果你不需要第一行的高度,而只是需要总高度,\vbox
那么可能更好:使用
\setbox0=\vtop{
\ifdim\hfuzz<.4pt
\let\default=\fussy
\else
\let\default=\sloppy
\fi
\default
<text>
}
您拥有\ht0
文本的总高度和\dp0
最后一行的深度。