0.7\baselineskip
默认情况下,TeX 会在线条中插入高度和深度分别为和 的支柱0.3\baselineskip
。这些是线条的最小高度和深度。
我的问题:有没有办法修改这些\strut
行的默认设置?假设我想让每行的最小高度等于\f@baselineskp
(单行空间的当前高度)并且最小深度为 0。我不确定这是否是好的排版;我只是在测试它。
我尝试更改默认\strut
高度和深度,但没有成功。请参阅我的 MWE:
\documentclass{article}
\makeatletter
%Attempt 1: I attempt to redefine \set@fontsize from the latex2e kernel. This fails to compile.
%\def\set@fontsize#1#2#3{%
% \@defaultunits\@tempdimb#2pt\relax\@nnil
% \edef\f@size{\strip@pt\@tempdimb}%
% \@defaultunits\@tempskipa#3pt\relax\@nnil
% \edef\f@baselineskip{\the\@tempskipa}%
% \edef\f@linespread{#1}%
% \let\baselinestretch\f@linespread
% \def\size@update{%
% \baselineskip\f@baselineskip\relax
% \baselineskip\f@linespread\baselineskip
% \normalbaselineskip\baselineskip
% \setbox\strutbox\hbox{%
% \vrule\@height.7\baselineskip
% \@depth.3\baselineskip
% \@width\z@}%
%% \setbox\strutbox\hbox{%
%% \vrule\@height\baselineskip
%% \@depth.0001\baselineskip
%% \@width\z@}%
% \ifnum \tracingfonts>\tw@
% \ifx\f@linespread\@empty
% \let\reserved@a\@empty
% \else
% \def\reserved@a{\f@linespread x}%
% \fi
% \@font@info{Changing size to \f@size/\reserved@a
% \f@baselineskip}%
% \aftergroup\type@restoreinfo \fi
% \let\size@update\relax}%
%}
%
%Attempt 2: Doesn't work for some reason.
\setbox\strutbox\hbox{%
\vrule\@height\f@baselineskip
\@depth\z@\@width\z@
}
%\maxdepth\z@
\makeatletter
\usepackage{blindtext}
\begin{document}
\Blinddocument
\end{document}
编辑:如果有人觉得有用,我会留下这个问题。我查看了source2e.pdf
,特别是ltpara.dtx
,并找到了以下解决方案:
只需在每个段落的开头添加一个支柱,以确保其具有最小高度。例如,\AddToHook{para/begin}{\rule{\z@}{\f@baselineskip}}
将最小高度设置为等于当前行高,\AddToHook{para/begin}{\rule{\z@}{\f@size\p@}}
将最小高度设置为等于当前字体大小。
答案1
我已经通过在每个段落开头添加钩子来回答我的问题。
这可确保每行都有最小高度。例如,\AddToHook{para/begin}{\rule{\z@}{\f@baselineskip}}
设置最小高度等于当前行高,并\AddToHook{para/begin}{\rule{\z@}{\f@size\p@}}
设置最小高度等于当前字体大小。如果段落触及页面顶部,则更改值\topskip
以确保该行与其他行具有相同的最小高度。