![文本后的水平线间距取决于超出基线的字母](https://linux22.com/image/239398/%E6%96%87%E6%9C%AC%E5%90%8E%E7%9A%84%E6%B0%B4%E5%B9%B3%E7%BA%BF%E9%97%B4%E8%B7%9D%E5%8F%96%E5%86%B3%E4%BA%8E%E8%B6%85%E5%87%BA%E5%9F%BA%E7%BA%BF%E7%9A%84%E5%AD%97%E6%AF%8D.png)
在下面的代码中,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}
会产生更一致的间距,正如马丁的回答中所提到的。