为什么在这里添加“\par”会在不同的地方添加垂直空间?

为什么在这里添加“\par”会在不同的地方添加垂直空间?

我一直在尝试使用 LaTeX,试图真正深入了解间距的工作原理。以下是我一直在尝试的一段愚蠢的代码:

\documentclass[]{article}

% Draw a raised \hrulefill
\newcommand{\hmidrule}[1]
    {\leavevmode \leaders
     \hbox{\rule[#1]{1pt}{.4pt}}
     \hfill \kern0pt }

% Draw a divider with a given ornament in the middle
\newcommand\divider[2][0.33em]
    {\par\noindent\hmidrule{#1}{#2}\hmidrule{#1}\par}

\begin{document}
\divider{\large\ A\ }
%%
{\hspace*{\fill}
    \huge {This is the First and Last Line.}
\hspace*{\fill}}  % <--- Keep this line in mind!
%%
\divider{\large\ $\Omega$\ }
\end{document}

这产生了我所期望的结果:居中文本顶部和底部的间距最小。

第一个文件的输出

然后我输入了\par这一行:

% ...
    \huge {This is the First and Last Line.}
\hspace*{\fill}\par}  % <--- Added `\par` here.
%%
% ...

我预计不会发生任何变化,因为结束这个段落不会造成任何变化;该段落已经在那里结束了,但我还认为它可以在居中文本下方切实地添加一些垂直空间。

然而,结果是这样的:垂直空间居中文本!

第二个文件的意外输出

我真的不明白为什么会发生这种情况。为什么在文本后添加此命令会导致文本前出现空格?是不是因为 LaTeX 试图将其格式化为段落文本?如果是这样,为什么在我添加之前它没有在那里添加空格\par

如果有任何其他反馈,我们将非常感激。

我正在使用 pdfLaTeX 在 Overleaf 上编译我的代码。使用 XeTeX 也会出现同样的结果。

答案1

区别在于,带有 的\par段落设置了相对于 的baselineskip \huge,而没有则不设置。

如果您想要精确控制装饰规则和标题之间的间距,最好的方法是使用 禁用过渡时的行间距\nointerlineskip

我提供了一个不同的定义\divider,避免猜测维度的需要。

\documentclass[]{article}

% Draw a divider with a given ornament in the middle
\newlength{\dividerht}
\newcommand{\hmidrule}{%
  \leaders\hrule
    height \dimexpr0.5\dividerht+0.2pt 
    depth  \dimexpr-0.5\dividerht+0.2pt
  \hfill\kern0pt
}
\newcommand\divider[1]{%
  \par\noindent
  \settoheight{\dividerht}{#1}%
  \par\noindent\hmidrule{#1}\hmidrule\par
}

\begin{document}

\divider{\large A}\nointerlineskip\vspace{6pt}
{\centering\huge This is the First and Last Line.\par}
\nointerlineskip\vspace{6pt}
\divider{\large $\Omega$}

\bigskip

\divider{\large A}\nointerlineskip\vspace{6pt}
{\centering\huge This is the First line and this title is so long that 
  it splits across lines.\par}
\nointerlineskip\vspace{6pt}
\divider{\large $\Omega$}

\end{document}

在此处输入图片描述

如果您希望底部规则相对于标题底线的基线有间距,则需要删除深度:

\divider{\large A}\nointerlineskip\vspace{6pt}
{\centering\huge This is the First line and this title is so long that 
  it splits across lines.\par}
\vspace{-\prevdepth}\nointerlineskip\vspace{6pt}
\divider{\large $\Omega$}

在此处输入图片描述

相关内容