它会伸展吗? 探究 Interline 胶水的深度

它会伸展吗? 探究 Interline 胶水的深度

我回到基础部分,以便更好地理解 TeX 的工作原理。我一直困惑的一件事是行间距的工作原理,以及为什么有时(取决于字体大小和行距)一些行会显得拥挤在一起。在整理示例来测试我的理解时,我遇到了一些意想不到的事情。

Eijkhout 写道:

TEX 试图保持添加到垂直列表中的框的参考点之间的一定距离;特别是,它试图保持普通文本的基线处于恒定距离,即\baselineskip。实际上,\baselineskip是一个胶水,因此行距可以拉伸或收缩。但是,所有行之间的自然大小以及拉伸和收缩都是相同的。<...> 如果此 [距离会使] <...> 两个框 [...] 靠得太近 [小于\lineskiplimit],则 TEX 会插入\lineskip粘连。

-”TeX 按主题分类“,第 155 页。”线间胶

很好,只要距离不要太小,行间空间是固定的,并且由可以根据需要拉伸的胶水组成。但是,为什么不呢?

\documentclass[12pt]{article}

\usepackage[paperwidth=6in,paperheight=6in,textwidth=4in]{geometry} 
\usepackage{lmodern}
\baselineskip=12pt  
\usepackage[OT1]{fontenc}

\begin{document}
{
    \vbox {
        \hrule
        \vfil
            \hbox{
                \vbox to 4in {
                \input tufte
                }
            }
        \vfil
        \hrule
        }
}
\end{document}

在此处输入图片描述

如果行间粘连可以拉伸和收缩,为什么间距不会增长以填充垂直框?相反,XeTeX 会抱怨垂直框未满。

答案1

默认情况下,在/tex/plain/base/plain.tex(或latex.ltx)中设置,粘合值(等效地)设置为\baselineskip=12pt。即,它没有拉伸或收缩, 也是如此\lineskip=1pt

因此,在默认设置下,基线内距离不能按照所述方式弯曲。间距可能看起来不均匀如果框之间的距离太近,\lineskiplimit违反了这一规则,在这种情况下,框之间的距离(而不是基线之间的距离)是恒定的。从视觉上看,当不同的行有或没有上升部/下降部时,这看起来像是不均匀的间距。无论如何,使用行间参数的默认值,它总是任何一个:

  • 基线距离等于\baselineskip-或-
  • 两个盒子的垂直空间(从一个盒子的底部到下一个盒子的顶部测量)等于\lineskip

也就是说,不能任意拉伸来填满盒子。

重新定义为具有一定的拉伸,在这种情况下,OP中的示例按预期工作,并且 vbox 被填充。以下是一些示例,显示了行间粘合如何操作,最后一个例子显示了手动设置 并对其进行一定拉伸的\baselineskip 结果。\baselineskip

\documentclass[12pt]{article}

\usepackage[paperwidth=6in,paperheight=5in,textheight=4.5in,textwidth=4in,top=0.1in]{geometry}
\usepackage{fontspec}
\usepackage{lmodern} 

\parindent=0.1in
\parskip=0pt 

\def\example{
    \bigskip
    \noindent{\bf Example:}
    \medskip\par
}

\def\verb#1{{\char`\\#1}}

\pagestyle{empty}
\begin{document}


Force all interline distances to adhere to \verb{lineskip}. Set at 0pt, the bottom 
of the upper line is at the same height as the topmost point of the line below. 
See for example the way the ``f'' in ``information" on line 1 touches the 
``d" in ``and" in line 2.

Visually, the text appears to have some lines ``crowded" together
while others are separated, but in fact it is simply that the inter-box 
distance which is kept constant instead of the intra-baseline distance.

\smallskip

{
    \baselineskip=12pt 
    \lineskiplimit=10000pt 
    \lineskip=0pt
    \example 
    {
        \hrule
        \vbox{ % Make the box explicit
            {\fontencoding{OT1}\selectfont
                \input tufte
                }
        }
        \hrule
    }
}
\vfil
\break 

Set text inside a sized vbox and Disable \verb{lineskiplimit}. 
All intra-baseline distances are equal to \verb{baselineskip}, and overlap is possible.
The \verb{vbox} size has no effect on line spacing because, as by default values,
he glue has no "flex" to it.

{
    \baselineskip=5pt 
    \lineskiplimit=-100pt  % Note: setting this to -1000pt triggers a bug in pdftex?
    \lineskip=1pt

    \example 
    \vbox {
        \hrule
        \vfil
        \hbox{
            \vbox to 2.5in{
                {\fontencoding{OT1}\selectfont
                    \input tufte
                    }
            }
        }
        \vfil
        \hrule
    }
}
\vfil
\break 

%  

As in the previous example, set text inside a sized vbox and Disable \verb{lineskiplimit}. 
All intra-baseline distances are equal to \verb{baselineskip}, and overlap is possible.
This time, we give a {\tiny \itshape tiny}\/ amount of stretch to the \verb{baselineskip}, which
grows as necessary to fill the vbox.

\example 
{
    \baselineskip=12pt plus 0.001pt
    \lineskiplimit=1pt 
    \lineskip=0pt plus 0.01pt

    \vbox {
        \hrule
        \vfil
        \hbox{
            \vbox to 2.5in {
                {\fontencoding{OT1}\selectfont
                    \input tufte
                    }
            }
        }
        \vfil
        \hrule
    }
}
\end{document}

在此处输入图片描述

相关内容