文本与包含 \rule 的行之间的间距

文本与包含 \rule 的行之间的间距

如果将 a\rule放置在文本行下方,则会在行和规则之间插入一些空间。通常,无论是否实际插入文本(参见图,右列,第 1/2 行)或没有插入文本(左列),空间量似乎都会精确地增加当前字体大小的高度差。但是,如果规则的高度超出字体高度,则行之间会有一些额外的空间(第 3 行)。

这个空间有多大?

在此处输入图片描述

(最后一行的目的是为了快速证明第 1-3 行两列的间距相同结果是独立实现的。)

\documentclass{article}
\usepackage{calc}
\usepackage{array}
\usepackage{xparse}
\renewcommand{\arraystretch}{3.5}

\newlength{\mydepth}
\newlength{\myheight}
\newlength{\mywidth}
\newlength{\colwidth}

\newsavebox{\mybox}
\sbox{\mybox}{\Huge ipsum}
\settodepth{\mydepth}{\Huge ipsum}
\settowidth{\mywidth}{\Huge ipsum}

\setlength{\colwidth}{\mywidth+2em}


%typeset \mybox underlined with a rule of mandatory height #3,
%and place an optional text #2 either right or left of the rule,
%as indicated by a star (#1).
\DeclareDocumentCommand{\placebox}{s o m}{
    \begin{minipage}[b]{\mywidth+2em}%
    \IfBooleanTF{#1}{%
        \rule[-\mydepth]{2em}{\mydepth}%
        \usebox{\mybox}\\%
        \IfValueTF{#2}{#2}{}%
        \rule{\mywidth+1em}{#3}%
    }{%else invert left/right placement
        \usebox{\mybox}%
        \rule[-\mydepth]{2em}{\mydepth}\\%
        \rule{\mywidth+1em}{#3}%
        \IfValueTF{#2}{#2}{}%
    }%fi
    \end{minipage}%
}%

\begin{document}
\begin{tabular}{b{\colwidth}b{\colwidth}}
\placebox{1mm} & \placebox*[\Huge A]{1mm}\\[2em]
\placebox{1mm} & \placebox*[A]{1mm}\\
\placebox{2mm} & \placebox*[A]{2mm}\\
\placebox{4mm} & \placebox*[A]{4mm}\\
\end{tabular}
\end{document}

答案1

为了理解这种行为,有必要了解 TeX 基本规则。这些规则使用三个维度高度、宽度和深度来定义:

\vrule height1pt width 1pt depth0pt fjord\par
\hrule height1pt width 100pt depth0pt fjord

LaTeX 定义\rule使用这些伪装的原语如下:

\def\rule{\@ifnextchar[\@rule{\@rule[\z@]}} width height raised
\def\@rule[#1]#2#3{%
 \leavevmode
 \hbox{%
 \setlength\@tempdima{#1}%
 \setlength\@tempdimb{#2}%
 \setlength\@tempdimc{#3}%
 \advance\@tempdimc\@tempdima
 \vrule\@width\@tempdimb\@height\@tempdimc\@depth-\@tempdima}}

如果我们首先使用 TeX 基元构造一个示例,

 \vrule height1pt width 1pt depth0pt fjord
 \hrule height1pt width 100pt depth0pt fjord

我们得到

在此处输入图片描述

我们得到了与 LaTeX 规则不同的行为,因为它们是在水平模式下排版的,并且 TeX 根据需要添加了正常的 parskip。

\rule{1pt}{1pt}fjord fjord fjord fjord\par
\rule{30pt}{1pt}fjord fjord fjord fjord

在此处输入图片描述

完全最小

\documentclass{article}
\parindent0pt
\parskip0pt
\begin{document}
\vrule height0.4pt width 1pt depth0pt fjord\par
\hrule height0.4pt width 30pt depth0pt fjord

\rule{1pt}{1pt}fjord fjord fjord fjord\par
\rule{30pt}{1pt}fjord fjord fjord fjord
\end{document}

示例中的剩余空间量通常为 LaTeX plus 的 lineskip \parskip。改变 parskip 值以查看行如何移动。请注意,两者都从字母的基线开始规则。

相关内容