考虑下面的代码。章节标题和以下文本基线之间的距离取决于字体。我假设章节标题和第一行顶部之间有粘合。当我\strut
在段落开头插入时,距离似乎是固定的(这是有道理的,因为无论当前字体如何,支柱始终相同。
我该如何解决章节标题和第一行文本基线之间的距离取决于字体的问题?
我可以在每段代码中插入 \strut 吗?我可以说“Xpt 到下一条基线的距离”?
\documentclass[11pt]{book}
\usepackage{lipsum,xcolor}
\usepackage{mathpazo}
% \usepackage{lua-visual-debug}
\usepackage[showframe]{geometry}
\usepackage{titlesec}
\titleformat{\chapter}[hang]{\fontsize{20bp}{20bp}\selectfont}{\thechapter}{1ex minus .1ex}{}
% without strut at the beginning of first paragraph
% \titlespacing*{\chapter}{0cm}{\dimexpr -\topskip }{6.5bp}[0pt] % mathpazo
% \titlespacing*{\chapter}{0cm}{\dimexpr -\topskip }{6.9bp}[0pt] % mathptmx
% with strut at the begining of the first paragraph
\titlespacing*{\chapter}{0cm}{\dimexpr -\topskip }{6bp}[0pt] % mathptmx + mathpazo
\renewcommand\normalsize{\fontsize{9bp}{10bp}\selectfont}
\parskip0pt
\usepackage{atbegshi,picture}
\makeatletter
\AtBeginShipout{%
\AtBeginShipoutUpperLeft{%
\put(\dimexpr
\ifodd\value{page}\oddsidemargin\else\evensidemargin\fi + 1in\relax,
-\dimexpr\topmargin + 1in + \headheight + \headsep\relax){%
\begin{picture}(0,0)%
\setlength{\unitlength}{10bp}%
\setlength{\dimen0 }{0pt}%
\@whiledim\dimen0<\dimexpr\textheight+1sp\relax\do{%
\put(0,-\dimen0){\color{green}\line(1,0){\textwidth}}%
\addtolength{\dimen0 }{\unitlength}%
}%
\end{picture}%
}%
}%
}
\makeatother
\begin{document}
\chapter{Chapter title}
%\strut
\lipsum[1-3]
\end{document}
答案1
如果章节标题后的第一行文本不是太高,这似乎适用于我尝试过的所有字体(并且你会发现被注释掉了)
\documentclass[11pt]{book}
\usepackage{lipsum,xcolor}
%\usepackage{tgschola}
\usepackage{tgtermes}
%\usepackage{mathptmx}
%\usepackage{mathpazo}
% \usepackage{lua-visual-debug}
\usepackage[showframe]{geometry}
\usepackage{titlesec}
\titleformat{\chapter}[hang]{\fontsize{20bp}{20bp}\selectfont}{\thechapter}{1ex minus .1ex}
{}[\prevdepth0pt]
\titlespacing*{\chapter}{0cm}{\dimexpr -\topskip }{4bp}%[0pt] % mathptmx + mathpazo
\renewcommand\normalsize{\fontsize{9bp}{10bp}\selectfont}
\parskip0pt
\lineskip=40pt % just for debugging
%\topskip=10bp
\usepackage{atbegshi,picture}
\makeatletter
\AtBeginShipout{%
\AtBeginShipoutUpperLeft{%
\put(\dimexpr
\ifodd\value{page}\oddsidemargin\else\evensidemargin\fi + 1in\relax,
-\dimexpr\topmargin + 1in + \headheight + \headsep\relax){%
\begin{picture}(0,0)%
\setlength{\unitlength}{10bp}%
\setlength{\dimen0 }{0pt}%
\@whiledim\dimen0<\dimexpr\textheight+1sp\relax\do{%
\put(0,-\dimen0){\color{green}\line(1,0){\textwidth}}%
\addtolength{\dimen0 }{\unitlength}%
}%
\end{picture}%
}%
}%
}
\makeatother
\begin{document}
\chapter{Chapter title}
\lipsum[1]
\end{document}
目的\prevdepth0pt
是切断标题行的深度。
但是,这并不总是适用于多行章节标题;它适用于 Times(或tgtermes
)mathptmx
,因为升序和降序不能相加以起作用\lineskip
。它不适用于mathpazo
Palatino,请尝试使用
\chapter{Chapter title\\on two lines}
它与 Times 配合良好,但与 Palatino 配合不佳。