用于存储段落最后一行的长度的宏

用于存储段落最后一行的长度的宏

根据此处的答案,我定义了一个宏,该宏应存储当前段落的最后一行而不产生任何输出。但下面的代码仅在第一次使用该宏时产生预期的结果。为什么?

\documentclass{article}
\usepackage{lipsum}

\makeatletter
\def\setindent{%
    {\abovedisplayshortskip\z@\abovedisplayskip\z@
    \belowdisplayshortskip\z@\belowdisplayskip\z@
$$\global\dimen\@ne\predisplaysize
 \xdef\tmp{%
      \predisplaysize\the\predisplaysize
      \prevgraf\the\prevgraf\relax}%
$$\vskip\dimexpr-\parskip-2\baselineskip\relax}\tmp
}

\begin{document}
\lipsum[1]
\setindent

\noindent \hskip\dimen\@ne
\lipsum[2]

\lipsum[3]
\setindent

\noindent \hskip\dimen\@ne
\lipsum[4]
\end{document}

在此处输入图片描述

答案1

\lipsum\par在文本末尾添加一个,如果在垂直模式下使用,那么 TeX 会生成一个只带有框和粘连$$的空段落行,因此最后一行的长度始终为。\indent\parfillskip\parindent

这就是为什么显示数学之前不应该有空行的原因。

如果你使用\lipsum*你得到

在此处输入图片描述

相关内容