![不同页面上的章节标题未垂直对齐(取决于字体)](https://linux22.com/image/398499/%E4%B8%8D%E5%90%8C%E9%A1%B5%E9%9D%A2%E4%B8%8A%E7%9A%84%E7%AB%A0%E8%8A%82%E6%A0%87%E9%A2%98%E6%9C%AA%E5%9E%82%E7%9B%B4%E5%AF%B9%E9%BD%90%EF%BC%88%E5%8F%96%E5%86%B3%E4%BA%8E%E5%AD%97%E4%BD%93%EF%BC%89.png)
考虑以下 MWE,其中第一节标题包含带上升部的字母,而第二节标题不包含:
\documentclass{article}
\usepackage{fontspec}
% https://github.com/adobe-fonts/source-serif-pro or
% https://ctan.org/pkg/sourceserifpro
\setmainfont{Source Serif Pro}
\begin{document}
\section*{\rlap{\rule{8.5in}{0.04pt}}bbbbb}
\leavevmode\rlap{\rule{8.5in}{0.04pt}}bbbbb
\newpage
\section*{nnnnn\llap{\rule{8.5in}{0.04pt}}}
nnnnn\llap{\rule{8.5in}{0.04pt}}
\end{document}
为什么两个部分标题的基线不对齐?我尝试了以下测试:
- 基线进行对齐:当在 Computer Modern(没有
fontspec
pdfLaTeX 且在 pdfLaTeX 下)、Latin Modern、TeX Gyre Termes 等中设置时。 - 基线不对齐:当我设置一些我拥有的商业字体时。
- 基线进行对齐:仅包含正文
bbbbb
和nnnnn
(即注释掉两个\section*
),适用于所有上述字体,包括 Source Serif Pro 和其他商业字体。
第三个观察结果确实让我大吃一惊……
答案1
Source Serif Pro 中的 b 比 latin modern 中的 b 大。更重要的是,在章节标题中,它的高度大于 \topskip。这意味着它的基线将在页面开头向下移动 0.45pt。如果您想避免这种效果,请使用此类字体放大 \topskip。
\documentclass{article}
\usepackage{fontspec}
\begin{document}
\section*{\the\fontcharht\font`\b bbbb}
\setmainfont{Source Serif Pro}
\section*{\the\fontcharht\font`\b bbbb}
\the\topskip
\end{document}