文本后的水平线间距取决于超出基线的字母

文本后的水平线间距取决于超出基线的字母

在下面的代码中,hrule 与基线的距离不同。第一个 hrule 位于文本的基线处,第二个 hrule 位于 y 的底部。无论字母是否超出基线,我如何才能使它们相同?

Section x
\hrule height 0.5pt
\vspace*{1cm}   
Section y
\hrule height 0.5pt

另外,为什么会发生这种情况?即使我vspace{2pt}在每个 Section x/y 和 hrule 之间放置一个,文本和行之间的间距也会有所不同。我以为 vspace 从文本的基线开始创建了一个空间。

编辑:我发现在基线上获得 hrule 的一个解决方案是这样做

Section y
\\ \vspace{-\baselineskip}
\hrule height 0.5pt

但这有点太黑客了。

答案1

似乎\hrule垂直堆叠在前一个文本中。 有深度y,而x没有。我会添加一个\strut在两个文本的后面分别设置一个,以强制两个文本具有恒定的(和最大的)深度。

Section x\strut
\hrule height 0.5pt
\vspace*{1cm}   
Section y\strut
\hrule height 0.5pt

答案2

对您的评论的回答是使用宏:

\newcommand{\rulesection}[2][2pt]{% \rulesection[<len>]{<section title>}
  \hrule height 0.5pt% top rule
  \vspace*{#1}% top space
  {#2}% section title
  \vspace*{#1}% bottom space
  \hrule height 0.5pt% bottom rule
}%

使用这个,以下是最小示例

\documentclass{article}

\newcommand{\rulesection}[2][2pt]{% \rulesection[<len>]{<section title>}
  \hrule height 0.5pt% top rule
  \vspace*{#1}% top space
  {#2}% section title
  \vspace*{#1}% bottom space
  \hrule height 0.5pt% bottom rule
}%

\begin{document}
Section x
\vspace*{1cm}
\rulesection[0pt]{Section z}
\vspace*{1cm}
\rulesection{Section y}
\vspace*{1cm}
\rulesection[5pt]{Section p}
\end{document}​

生产

规则部分

修改\rulesection为使用{\strut #2}而不是{#2}会产生更一致的间距,正如马丁的回答中所提到的。

相关内容