动态方法(相对字体大小)

动态方法(相对字体大小)

如何修复文本和行之间的垂直间距?在下面的 MWE 中,文本与其下方行之间的垂直间距远大于文本与其上方行之间的垂直间距。我希望这两个垂直间距相等,并且我希望能够为这个垂直间距赋值。

\documentclass[12pt]{report}

\begin{document}

\rule{6cm}{0.4pt}\par
\textbf{\large TITLE}\par
\rule{8cm}{0.4pt}

\end{document}

答案1

规则是在文本的基线处绘制的。因此,下一行位于下一行文本的基线处。

在此处输入图片描述

因此,您必须适当地提升下线。这可以通过\vspace或增加深度来实现\rule

\documentclass[12pt]{report}

\begin{document}

\rule{6cm}{0.4pt}Some\par
\textbf{\large TITLE}\par%\vspace{-0.66\baselineskip}
\rule[0.66\baselineskip]{8cm}{0.4pt}Some

\end{document}

在此处输入图片描述

答案2

我已经理解了这个概念,并且有一个很好地说明这一点的解决方案:

动态方法(相对字体大小)

意识到每行新线之后,线条的绘制都从字母所在的位置(字形的基线)开始,因此您将线条提升到文本下方。多少?user11232 使用 60% 的基线跳跃。另一种方法是直接使用某个大写字母的高度,例如,\fontcharht\font"004D将导致 M 的高度(以磅为单位)。\baselineskip由类设置\@setfontsize,请参阅\baselineskip 是自动定义的吗?

例如,如果您对字母宽度深度造成的光学效果不满意,您甚至可以将其设为大写字母高度的 70%(只需.7在前面添加\fontcharht)。

在此处输入图片描述

初步方法

在文本上方和下方画线,看看会发生什么。结果并不美观。

在此处输入图片描述

完整代码

\documentclass{article}
\usepackage{fontspec}% xelatex

% Note that you can remove all the \noindent occurrences
% with \setlength\parindent{0pt} which sets empty indent box
% to 0pt globally

\newcommand\linedatWRONG[1]{% comment out this line-ending
  \leavevmode\par\noindent\rule{4cm}{0.4pt}gello\par\noindent%
  #1\rule{1cm}{0.4pt}\par\noindent%
  \rule{4cm}{0.4pt}gello\par%
}

\newcommand\linedatRIGHT[1]{% comment out this line-ending
  \leavevmode\par\noindent\rule{4cm}{0.4pt}gello\par\noindent%
  #1\rule{1cm}{0.4pt}\par\noindent%
  \rule[\fontcharht\font`M]{4cm}{0.4pt}gello\par% raise line up by the height of M in the current font
}

\newdimen\Mheight % for demo only
\Mheight=\fontcharht\font`M% for demo only

\begin{document}
\noindent The \texttt{\textbackslash linedatWRONG} version does indeed have the correct
alignment according to TeX's rules of baseline skips. I used the word
{\char"201C}gello{\char"201D} to demonstrate that the lines are at the baselines.
\linedatWRONG{Hello gello}% purposely used glyph with depth "g"
\vspace{2\baselineskip}
\noindent In the \texttt{\textbackslash linedatRIGHT}, we raise the bottom line up by the height of an upper case {\char"201C}M{\char"201D}
in the current font, which happens to be \the\Mheight. Programming this dynamically ensures
that the value of M will be ajusted to the current scope's font.
\linedatRIGHT{Hello gello}% purposely used glyph with depth "g"
\end{document}

笔记

  • 警告当基线跳跃略大于字符的深度+高度时,这种方法有效。如果基线跳跃特别大,那么与基线跳跃相比,将底线提升一个字符的深度+高度可能看起来微不足道。
  • 文章类别指定字体大小 10pt ( \@xpt) 具有关联的 12pt ( \@xiipt) 基线跳过。
  • 另一个选择是使用线的深度

相关内容