相对于基线定位水平线

相对于基线定位水平线

我正在实施文档设计,我注意到我很难在规则和两个测试段落之间找到正确的距离。我根据article类创建了一个文档类,但更改了标题页等。下图应该可以解释我想要实现的目标:

在此处输入图片描述

我的幼稚做法是执行以下操作

\documentclass{article}
\usepackage{lipsum}

\begin{document}
\noindent \lipsum[1]
\vskip 10pt
\hrule height 1pt \relax
\vskip 10pt
\noindent \lipsum[2]

\end{document}

在上面的例子中,我希望看到标题基线和规则之间的 10pt 差异以及规则和作者行基线之间的 10pt 差异。但实际数字更大。我认为vskip是从出现在相应行上的字形的顶部或底部测量,而不是从基线测量。是否可以相对于基线设置这些距离?

答案1

在盒子和 之间\hrule,TeX 不会插入来自 计算的粘连\baselineskip。但会考虑上部盒子的深度。

您可以用 将其删除\vskip-\prevdepth,无需猜测。

同样,规则后不会插入任何来自\baselineskip计算的胶水。如果您确定下面的行不包含异常高的项目,则可以在那里插入一个支柱。

\documentclass{article}

\begin{document}

\noindent Abcdefg\smash{\vrule depth 9.4pt}% just a bit shorter

\vspace{\dimexpr 9.5pt-\prevdepth\relax}

\hrule height 0pt depth 1pt\relax

\vspace{\dimexpr 9.5pt-\ht\strutbox\relax}

\noindent \strut Abcdefg\smash{\vrule height 9.4pt}% just a bit shorter

\end{document}

我在中间插入了 1pt 规则,因此上方有 9.5pt 的空间(相对于上基线),下方有 9.5pt 的空间(相对于下基线)。垂直规则略短一些,以显示微小的间隙,这证明了其正确性。

在此处输入图片描述

答案2

将距离 x 和 y 固定为 10pt,并将规则的深度固定为 1pt,我想出了以下内容,这似乎解决了我的问题:

\documentclass{article}
\usepackage{lipsum}
\newlength{\Hheight}
\settoheight{\Hheight}{H}
\newlength{\qdepth}
\settodepth{\qdepth}{g}


\begin{document}
\noindent\lipsum[1]
\vspace{\dimexpr 10pt-\qdepth\relax}
\hrule height 0pt depth 1pt\relax
\vspace{\dimexpr 10pt-\Hheight-1pt\relax}
\noindent \lipsum[2]
\end{document}

我仍然希望得到更好的答案或更专业的解释。

vspace我发现的用于计算字体高度和深度的使用和建议这里,第一个偏移只是减去深度以获得基线,然后将所需距离添加到规则。对于第二个偏移,我减去字体的高度和规则的深度。

相关内容