计算段落深度

计算段落深度

我需要计算从当前基线到下一个/当前段落底部的距离。(最终这将结束\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\parboxtabular\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最后一行的深度。

相关内容