LaTeX标题控制

2022-03-18 16:15:17 浏览数 (1)

【注】笔记来自《LaTeX入门》——刘海洋。详细参数可参见 LaTeX 官方文档:

代码语言:javascript复制
texdoc caption

1. 简介

在设计文档时,我们经常需要修改浮动体标题的字体、间距、对齐方式等格式,然而 LaTeX 内核及标准文档并没有提供直接修改浮动标题格式的命令,这时就可以使用 caption 宏包来完成相关的设置。

2. 格式选项

使用 caption 宏包设置标题格式是通过一系列键值对形式的选项完成的,这些选项既可以作为宏包的可选项,也可以作为 captionsetup 命令的参数出现,修改整篇文档的浮动体标题格式:

代码语言:javascript复制
% 导言区
usepackage[font=small,labelfont=bf]{caption}
% 下面命令与之等价
usepackage{caption}
captionsetup{font=small,labelfont=bf}

也可以只修改某种浮动体环境的标题格式,以 figure 环境为例:

代码语言:javascript复制
% 导言区
usepackage{caption}
captionsetup[figure]{font=small,labelfont=bf}

此外,还可以修改某个浮动体环境的标题格式,以 figure 环境为例:

代码语言:javascript复制
begin{figure}
    % ……
    captionsetup{font=small,labelfont=bf}
end{figure}

caption 宏包提供了非常多的选项,限于篇幅,这里之选择其中常用的一些。为了叙述方便,我们假定 caption 放在了一个虚拟的 metafloat 浮动环境中。

2.1 format 选项

format 选项主要用来设置长标题格式:

  • plain 格式:如果标题很长,折成几行,就会像普通的正文段落一样显示。
  • hang 格式:如果标题很长,标题前面的数值标签会进行悬挂,就好像 LaTeX 列表环境一样。

2.2 labelformat 选项

labelformat 选项则用来设置标签编号的格式:

格式

说明

default

同 simple

empty

空格式,去除标签编号部分

simple

简单数字格式

brace

数字右括号格式

parens

带括号数字格式

2.3 labelsep 选项

labelsep 选项控制标签与后面标题之间的间隔:

格式

说明

default

同 colon

none

无间隔

colon

英文分号

period

英文句点

space

空格

quad

一个 em 的间隔

newline

标题另起一行

endash

英文 dash 连接符

2.4 justification 选项

justification 选项设置浮动标题的对齐方式:

格式

对应段落命令

对齐方式

justified

justifying

普通段落的均匀对齐(默认值)

centering

centering

每行居中对齐

centerlast

centerlast

每段的最后一行居中对齐,其他行均匀对齐

centerfirst

centerfist

仅标题第一行居中对齐,其他行均匀对齐

raggedright

raggedright

每行左对齐,段落右边界可以不对齐

RaggedRight

RaggedRight

改进的 raggedright

raggedleft

raggedleft

每行右对齐

【注】与标准文档一样,在默认情况下,caption 宏包在单行的短标题中会忽略 justification 选项,而将其居中排版,只有多行的标题才使用选项中的对齐方式。如果希望设置的对齐方式对单行的标题也有效,则可以使用 singlelinecheck=false 来关闭对单独一行标题的检测。

2.5 font 选项

font 选项用来设置浮动标题的字体,而 labelfonttextfont 选项则可以单独设置前面的标签和后面文字的字体:

多个不同的字体选项可以同时使用,只要把几个选项放在分组中:

代码语言:javascript复制
captinosetup{font={small,sf},labelfont=bf}
caption{小号加粗无衬线字体 Caption}

几个字体选项还支持 = 语法,用于在现有设置上增加新设置:

代码语言:javascript复制
captinosetup{font=small}
captionsetup{font =bf}
caption{小号加粗字体 Caption}

2.6 margin 选项和 width 选项

margin 选项用来设置标题距离页面左右边界的距离,width 则用来设置标题的最大宽度。这两个选项之间有制约关系,因而通常同时只使用其中一个:

代码语言:javascript复制
% 设定 margin
captionsetup{margin=4em}
caption{标题距离左右个 4,em 的距离}
% 或设定 width
captionsetup{widith=6em}
caption{标题最多只有 8,em 宽}

2.7 skip 选项

skip 选项控制标题与浮动环境内容的垂直间距,在标准文档类中默认值是 101010 pt。

代码语言:javascript复制
captionsetup{skip=0pt}
caption{与前面浮动体内容无额外间隔}

2.8 type 选项

type 选项可以设置标题所对应的浮动环境类型,这就允许在非浮动环境中直接使用浮动体的标题,或者是在同一个浮动体中显示不同的几个标签。但注意标题仍然应该倍放在一个环境中或盒子中,而不是直接写在正文里。比如,可以利用 type 选项在同一个浮动体中完成图表的混排:

代码语言:javascript复制
begin{figure}
    begin{minipage}[b]{.5textwidth}
        centering
        includegraphics[width=.4textwidth]{picture}
        caption{picture}
    end{minipage}
    begin{minipage}[b]{.5textwidth}
        centering
        begin{tabular}{|*{5}{c|}}
            hline
            1996 & 1998 & 1999 & 2000 & 2001 \
            hline
            2002 & 2003 & 2004 & 2005 & 2007 \
            hline
            2008 & 2009 & 2010 & dots & \
            hline
        end{tabular}
        captionsetup{type=table}
        caption{table}
    end{minipage}
end{figure}

2.9 *name 选项

在导言区使用 *name 选项可以用来设置标题标签的文字名称。在标准文档类中,figuretable 环境的名称是「Figure」和「Table」,而 ctex 文档类则分别是「图」和「表」。设置 figurenametablename 选项等价于修改宏 figurenametablename 的值,但更为方便:

代码语言:javascript复制
% 导言区
usepackage{caption}
captionsetup{figurename=图片}

也可以在浮动体环境中直接使用 name 选项临时性修改标签名称:

代码语言:javascript复制
captionsetup{type=figure, name=空图片}
caption{标签名称可以修改}

3. 功能命令

caption 宏包除了定义了大量的格式选项,同时也提供了一些有用的命令。

3.1 caption 命令

caption 用于给浮动环境添加标题,其语法格式为:

代码语言:javascript复制
caption{<标题>}
caption{<短标题>}{<长标题>}

可选的参数短标题用于图表目录,而交叉引用的标题 label 需要放在 caption 后面,或者 <标题><长标题> 中。在 caption<长标题> 中可以进行长达多段的叙述,但 <短标题> 或单独的 <标题> 中不允许分段。

代码语言:javascript复制
begin{figure}
    centering
    includegraphics{picture}
    caption[图片]{这是一张图片}label{fig:picture}
    % 或者 caption[图片]{label{fig:picture}这是一张图片}
end{figure}

3.2 captionof 命令

caption{<类型>}{<标题>} 命令可以看作是先设置了 type 选项,然后使用普通的 caption

代码语言:javascript复制
captionof{figure}{空图片标题}

captionofcaption 一样,都有一个带星号的形式,表示不编号、不显示标签也不进入图表目录的标题:

代码语言:javascript复制
captionsetup{font=sf}
caption*{无编号的标题,只保留格式}

3.3 ContinuedFloat 命令

ContinuedFloat 命令则用来放在浮动体中,阻止标题的编号增加,从而可以用一个编号表示多个浮动体。如果要产生「续图」、「续表」的功能,就可以使用类似下面的代码:

代码语言:javascript复制
begin{figure}
    ContinuedFloat
    % ……
    caption{某图形}
end{figure}
begin{figure}
    ContinuedFloat
    % ……
    caption{某图形(续)}
end{figure}

3.4 其他命令

caption 宏包同时也提供了许多命令来为其格式选项增加新的取值。相关的命令很多,以 labelsep 选项为例,可以声明一个 fullcolon 的取值:

代码语言:javascript复制
% 导言区
DeclareCaptionLabelSeparator{fullcolon}{:}    % 声明中文的全角冒号分隔符
captionsetup{labelsep=fullcolon}               % 为中文的标题设置全角冒号分隔符

4. 其他宏包

4.1 bicaption 宏包

bicaption 宏包是 caption 宏包的附加宏包,它提供了双语标题的功能,其基本命令是 bicaption,语法格式如下:

代码语言:javascript复制
bicaption[<短标题一>]{<长标题一>}[<短标题二>]{<长标题二>}

此时可以同时使用 captionsetup[bi-first]captionsetup[bi-second]lang 选项分别设置两个标题不同的语言。bicaption 宏包原本使用 babel 宏包或 polyglossia 宏包提供的语言选择机制来设置不同语言的标题,不过中文等东亚语言不使用上述宏包的翻译机制,因此需要手工设置不同语言的标题。可以使用 DeclareCaptionOption 命令来声明一个新的选项,完成标签名的重定义,然后可以用 captionsetup 为每种语言分别调用。比如,设置中英文两种图表标题:

代码语言:javascript复制
% 中文文档类会设定好标题的第一种语言
documentclass{ctexart}
usepackage{bicaption}
% 声明 english 选项重定义第二种语言的标签名,选项没有参数
DeclareCaptionOption{english}[]{
    renewcommandfigurename{Figure}
    renewcommandtablename{Table}
}
captionsetup[bi-second]{english}
% ……
beign{figure}
    % ……
    bicaption{中文标题}{English Title}
end{figure}

4.2 subcaption 宏包

subcaption 宏包可以给整个浮动体加一个概括性的标题,同时对浮动体内的每个子图表也都有自己的编号和标题。需要注意的是,subcaption 宏包依赖于 caption 宏包。subcaption 宏包提供了一组命令来完成子图表的排版输出。

  • subcaption{<子标题>}:用来直接输出子标题。
  • subcaptionbox[<目录标题>]{<标题>}[<宽度>][<盒子内位置>]{<内容>}:生成一个带有子标题的子图表。其中,如果省略 <宽度> 则使用其 <内容> 的自然宽度;<盒子内位置> 确定 <内容> 在盒子中的水平对齐方式,可以是 lraggedright)、rraggedleft)、ccentering)或 s(无特别格式),默认为居中的 c
  • subcaptionbox*{<标题>}[<宽度>][<盒子内位置>]{<内容>}:与 subcaptionbox 语法相同,但不进行编号。

【注】使用 subcaptionbox 时,需要给子图加引用的 label 标签可以放在 <标题> 参数中。使用 ref 引用标签将得到「x.y(a)」,它是外层编号「x.y」和内层编号「(a)」的混合。若只引用子标题的内层编号,可以用 subcaption 提供的 subref 命令。

由于子图表几乎总是需要使用子段盒子来放置内容和子标题,所以 subcaption 宏包还同时提供了 subfiguresubtable 环境,它们的语法和功能与 minipage 完全相同。

4.3 其他宏包

除了以上宏包外,还可以使用 subfigfloatrow 宏包,它们都与 caption 宏包的功能兼容,同时提供额外的子图表排版功能。

  • subfig 宏包主要提供了 subfloatsubref 命令,功能和语法都和 subcaption 十分相近。
  • floatrow 宏包则预定义了许多更为复杂的子图表格式。

0 人点赞