TeX中的长度

在TeX中,长度可以有以下几种形式:

  1. 一个浮动的数值后面跟着单位,单位后可选跟随一个拉伸值; 例如:3.5pt plus 1pt minus 2pt

  2. 一个浮动的因子后跟着一个宏,这个宏展开为长度; 例如:1.7\textwidth

单位

首先,我们介绍LaTeX中的度量单位。所有的LaTeX单位都是两个字母的缩写。你可以从多种单位中选择。以下是最常用的一些单位:

缩写 定义 值(点数pt) 值(微米µm)
pt 一个点是1/72.27英寸,约0.0138英寸 1 351.46
mm 毫米 2.84 = 7227/2540 1000
cm 厘米 28.4 = 7227/254 10000
in 英寸 72.27 25400
ex 约为当前字体中'x'的高度 未定义,取决于字体
em 约为当前字体中'M'(大写)的宽度 未定义,取决于字体

点(pt)是默认单位,1pt是默认长度。所有其他单位都会通过一个固定的比率转换为点。

以下是一些较少使用的单位:

缩写 定义 值(点数pt) 值(微米µm)
bp 大点,是1/72英寸,约0.0139英寸 1.00375 = 803/800 352 7/9
pc pica 12 4218
dd didot 1.070 = 1238/1157 376
cc cicero(12 didot) 12.84 = 14856/1157 4512
nd 新didot 1.067 = 685/642 375
nc 新cicero(12新didot) 12.80 = 1370/107 4500
sp 缩放点 0.000015 = 1/65536 0.00536

盒子长度

在TeX中,一个盒子有三个特征:

  • 深度(depth)

  • 高度(height)

  • 宽度(width)

有关盒子的更多息,请参见盒子部分。

长度操作

你可以通过以下两个命令更改定义页面布局的变量值:

  1. 使用此命令为现有长度变量设置新值:

    \setlength{\mylength}{length}
    
  2. 使用另一个命令将值添加到现有长度:

    \addtolength{\mylength}{length}
    

你还可以创建自己的长度变量,必须先创建新长度,然后再尝试设置它:

\newlength{\mylength}

你还可以使用以下命令根据文本大小设置长度:

\settowidth{\mylength}{some text}
\settoheight{\mylength}{some text}
\settodepth{\mylength}{some text}

calc包也提供了函数\settototalheight{\mylength}{some text}

使用这些命令时,如果你计划展示文本,你可以复制你希望作为参考的文本。但LaTeX也提供了\savebox来避免文本的重复。请参见盒子部分了解更多细节。

拉伸值

你还可以定义拉伸值。拉伸值是一个长度值,前面有加号或减号,表示TeX可以在多大程度上改变该长度。例如:

\setlength{\parskip}{10pt plus 5pt minus 3pt}

这意味着TeX会尝试使用10pt的长度;如果长度不足,它将增加到最大15pt;如果长度过长,它将减少到最小7pt。

注意,不强制要求同时指定加号和减号的值,但如果指定了,它们必须按顺序排列,加号必须在减号之前。

打印长度

你可以使用\the命令打印一个长度:

\the\textwidth

纯TeX

要创建新的长度:

\newdimen\mylength

设置长度:

\mylength=1.5in

查看长度的方式与LaTeX相同,使用\the命令。

LaTeX默认长度

常见的长度宏如下:

  • \baselineskip
    段落中行与行之间的正常垂直距离。

  • \baselinestretch
    一个乘以\baselineskip的因子。必须使用 \renewcommand{\baselinestretch}{factor} 来设置。

  • \columnsep
    列与列之间的距离。

  • \columnwidth
    列的宽度。

  • \evensidemargin
    ‘偶数’页的页边距(比如印刷的小册子)。

  • \linewidth
    当前环境中的行宽。

  • \oddsidemargin
    ‘奇数’页的页边距(比如印刷的小册子)。

  • \paperwidth
    页面的宽度。

  • \paperheight
    页面的高度。

  • \parindent
    正常的段落缩进。

  • \parskip
    段落之间的额外垂直间距。

  • \tabcolsep
    表格环境中列与列之间的默认间隔。

  • \textheight
    页面上的文本高度。

  • \textwidth
    页面上的文本宽度。

  • \topmargin
    顶部页边距的大小。

  • \unitlength
    图形环境中的长度单位。

固定长度空间

要插入固定长度的空间,可以使用:

\hspace{length}
\vspace{length}

其中,\hspace 代表水平空间,\vspace 代表垂直空间。

如果这种空间应该在行的开始或结束时仍然存在,请使用 \hspace*\vspace* 来强制保留空间,即使它位于行的开始或结束。

如果要在文档开始时添加空间,且不在此之前写任何内容,则可以使用:

{ \vspace*{length} }

使用 \vspace* 命令比 \vspace 更为重要,否则 LaTeX 可能会默默忽略额外的空间。

TeX提供的一些固定长度空间宏:

  • \smallskip
    在垂直模式下插入一个小间距(两个段落之间)。

  • \medskip
    在垂直模式下插入一个中等间距(两个段落之间)。

  • \bigskip
    在垂直模式下插入一个大间距(两个段落之间)。

垂直模式发生在构建“垂直”盒子(如段落)时;水平模式发生在构建“水平”盒子(如字母或单词)时。

由于它们是垂直模式命令,因此它们会在水平模式中被忽略(或失败),例如在段落中间。

拉伸/橡胶长度

命令:

\stretch{factor}

生成一个特殊的橡胶空间,其中 factor 是一个数字(可以是浮动数值)。它会拉伸,直到一行的剩余空间被填满。如果在同一行上发出两个 \hspace{\stretch{factor}} 命令,它们会根据拉伸因子增长。

x \hspace{\stretch{1}} x \hspace{\stretch{3}} x

你也可以进行垂直拉伸:

\maketitle
\vspace{\stretch{1}}
Some comments.
\vspace{\stretch{1}}
\tableofcontents

你还可以使用 \fill 代替 \stretch{1}

\stretch 命令与 \pagebreak 配合使用时,可以用于将文本排版到页面的最后一行,或将文本垂直居中于页面。

有一些“快捷命令”可以用于拉伸因子为1的情况(即 \stretch{1}\fill):\hfill\vfill

示例

  • 图片大小调整为文本宽度的一半:

\includegraphics[width=0.5\textwidth]{mygraphic}
  • 增加项目之间的距离(在 itemize 环境中):

\addtolength{\itemsep}{0.5\baselineskip}
  • 使用 \savebox图片的高度调整为文本的高度:

% 创建我们需要的占位符
\newlength{\mytitleheight}
\newsavebox{\mytitletext}
% 创建参考文本
\savebox{\mytitletext}{%
  \Large\bfseries This is our title%
}
\settoheight{\mytitleheight}{ \usebox{\mytitletext} }
% 创建实际对象
\framebox[\textwidth][l]{%
  \includegraphics[height=\mytitleheight]{my_image}%
  \hspace{2mm}%
  \usebox{\mytitletext}%
}

参考资料


Last modified: Monday, 21 April 2025, 10:00 AM