开始
要使用本文中的例子, 你需要标题和子标题工具包(如果你要用subfigures 或subtables环境的话):
\usepackage{caption} \usepackage{subcaption}
上一节中插图格式的代码如下:
\begin{figure} \centering \begin{subfigure}[t]{1in} \centering \includegraphics[width=1in]{placeholder} \caption{Caption 1}\label{fig:1a} \end{subfigure} \quad \begin{subfigure}[t]{1in} \centering \includegraphics[width=1in]{placeholder} \caption{Caption 2}\label{fig:1b} \end{subfigure} \caption{Main figure caption}\label{fig:1} \end{figure}
命令``label"让你在文章中产生一个对该图的交叉引用。 它分配了一个你可以引用的字段, 当你引用该图时,会自动在引用处产生图或子图的数字或字母。 详细可以参考交叉引用章节。 如果要建立一个包含两个子表的表格, 我们可以写出类似的代码。只不过,你需要将 figure(subfigure) 环境替换成 table(subtable) 环境。
\begin{table} \centering \begin{subtable}[t]{2in} \centering \begin{tabular}{|l|l|l|} \hline 100 & 200 & 300\\ \hline 400 & 500 & 600\\ \hline \end{tabular} \caption{标题1}\label{table:1a} \end{subtable} \quad \begin{subtable}[t]{2in} \centering \begin{tabular}{|l|l|l|} \hline 100 & 200 & 300\\ \hline 400 & 500 & 600\\ \hline \end{tabular} \caption{标题2}\label{table:1b} \end{subtable} \caption{主表标题}\label{table:1} \end{table}
subfiure 和 subtable 环境都能允许你设置宽度。 它可以根据表格的内容来预留相应的空间。 你可以用 columnwidth 代替 width 来调整文章的宽度。 设置数字型的标题标签 你可以列改标题标签的数字格式或字母格式,通过使用下列命令:
% change the style of the caption numbering. \renewcommand{\thetable}{\alph{table}} \renewcommand{\thefigure}{\Alph{table}} \renewcommand{\thesubtable}{\Roman{subtable}} \renewcommand{\thesubfigure}{\arabic{subfigure}}
每个命令指定了一个你要更改的标签(如: \thetable )以及你希望显示的标签类型(如:alph{table} ), 也就是说要将表格的序列号显示为小写字母,如a, b, c等). 每种浮体的有属于自己的标签(\thetable )和序列变量(表格). 当你使用这些命令后, 显示的任何东西将有新的标签数字或字母样式。 以下总共有五种显示序号的方式(用实际你要显示的数字代替序号)
计数器类型 | 实现代码 | 示例 |
---|---|---|
阿拉伯数字 | \arabic{counter} | 1, 2 |
小写字母 | \alph{counter} | a, b |
大写字母 | \Alph{counter} | A, B |
小写罗马数字 | \roman{counter} | i, ii |
大写罗马数字 | \Roman{counter} | I, II |
下面是一个改变图和子图标题的标签样式:
\renewcommand{\thefigure}{\Roman{figure}} \renewcommand{\thesubfigure}{\arabic{subfigure}} \begin{figure} \centering \begin{subfigure}[t]{1in} \centering \includegraphics[width=1in]{placeholder} \caption{阿拉伯数字}\label{fig:1a} \end{subfigure} \quad \begin{subfigure}[t]{1in} \centering \includegraphics[width=1in]{placeholder} \caption{阿拉伯数字}\label{fig:1b} \end{subfigure} \caption{大写罗马数字}\label{fig:1} \end{figure}
上面的子图标题中是阿拉伯数字,图标题用的是大写罗马数字。如果文章中有章节,那么标题标签将是1.1, 1.2, 2.1等。 你可以设置数字和字母的样式。
\renewcommand{\thefigure}{\thechapter.\Alph{figure}} % set caption label style to 1.A \renewcommand{\thesubfigure}{\arabic{subfigure}} \begin{figure} \centering \begin{subfigure}[t]{1in} \centering \includegraphics[width=1in]{placeholder} \caption{阿拉伯数字}\label{fig:1a} \end{subfigure} \quad \begin{subfigure}[t]{1in} \centering \includegraphics[width=1in]{placeholder} \caption{阿拉伯数字}\label{fig:1b} \end{subfigure} \caption{章节序号.图字母序号}\label{fig:1} \end{figure}
代码效果如下:与标准标题样式不同,标签是小写字母而不是数字。子图标题也使用了阿拉伯数字。thechapter 命令设定章节编号,就像 thefigure 设定图的编号。 在命令 thefigure 中加入 thechapter , 就可以在图中引入章节编号。 如果你要更改章节编号的样式,你可以覆盖 thechapter 命令,就如同覆盖命令 thefigure 一样。如果你只想改变章节标号的样式,你可以参考下面例子“
\renewcommand{\thefigure}{\Alph{chapter}.\Alph{figure}}
上例是设置所有的图和子图, 类似地也能用于表和子表。 只是使用 thetable 和 thesubtable 而不是 thefigure 和thesubfigure 。
Caption 工具包选项和设置
caption 工具包可以修改标题的很多方面。既可以通过 captionsetup 命令也可以在工具包选项中修改。 这些选项包括了编号分离 (如: ``图1: 标题" 的颜色), 编号的格式 (是数字还是字母,是否有括号等), 编号和标题的字体、样式,等。 要使用这些选项, 你可以在引用工具包的时候先设置它们。
% options apply to all captions \usepackage[OPTIONS]{caption} % applies to all subfigure and subtable captions \usepackage[OPTIONS]{subcaption}
一旦你在命令usepackage 中设定了选项, 它们将适用于所有的标题和子标题。 或者,你也可以使用命令captionsetup 以至于所有后来的标题都具有设置的样式:
\captionsetup[FLOAT_TYPE]{OPTIONS}
FLOAT_TYPE 可以是表、图、子表和子图。它指定了标题的类型,尤其可以使用命令\captionsetup 。 你可对每个图、表、子图和子表设置不同的选项。 当你使用命令\captionsetup,所有后面的标题将使用你设置的选项。或者,你可以把命令\captionsetup放在图、表、子图和子表环境中。那么该设置只在该图有效。 以下是几个例子,在这些例子中既在工具包选项中设置样式,也可以在命令\captionsetup中设置。 类似的例子还有很多, 详情可以参阅工具包文档。
标题调整和字体
下面几个例子展示了命令\captionsetup的用法。它可以设置图(子图)标题编号的字体和标题文本的字体。同时,它也展示了如何 对应子标题。
% for figures: caption label is italic, the caption text is bold / italic \captionsetup[figure]{labelfont=it,textfont={bf,it}} % for subfigures: caption label is bold, the caption text normal. % justification is raggedright (i.e. left aligned) % singlelinecheck=off means that the justification setting is used even when the caption is only a single line long. % if singlelinecheck=on, then caption is always centered when the caption is only one line. \captionsetup[subfigure]{labelfont=bf,textfont=normalfont,singlelinecheck=off,justification=raggedright} \begin{figure} \centering \begin{subfigure}[t]{1in} \centering \includegraphics[width=1in]{placeholder} \caption{标题}\label{fig:1a} \end{subfigure} \quad \begin{subfigure}[t]{1in} \centering \includegraphics[width=1in]{placeholder} \caption{标题}\label{fig:1b} \end{subfigure} \caption{主图标题.}\label{fig:1} \end{figure}
排版效果如下图所示:注意, 子标题是左对齐,字体样式都改变了。 图标题编号是斜体。子图编号是粗体,文本是正体且左对齐。 如代码注释解释, singlelinecheck 设置关闭,使得单行标题使用校正设置。否则,它将居中。 当你使用caption 和 subcaption 工具包, 你也可以所有的标题和子标题设置选项,通过使用合适的选项。
% will apply to all captions \usepackage[labelfont=it,textfont={bf,it}]{caption} % will apply to all subcaptions \usepackage[labelfont=bf,textfont=normalfont,singlelinecheck=off, justification=raggedright]{subcaption}
标签格式和标签分离
如果你看标题,你将看到子图的编号在括号中,它与``Figure 1"用冒号分开。编号格式和编号分离都是可以通过设置caption工具包里的选项来设置。编号格式控制编号如何显示: 是否完全可见, 是否加括号。 编号分离则是编号后面文字样式。 这是命令\captionsetup 中labelformat 和 labelsep 的选项
\captionsetup[FLOAT_TYPE]{labelformat=simple, labelsep=colon}
FLOAT_TYPE 可以是表、图、子表和子图。 labelformat 选项可以设置为:
标签格式 | 结果 |
---|---|
labelformat = empty | 没有标签,即没有数字或字母 |
labelformat = simple | 标题中显示数字或字母 |
labelformat = parens | 数字或字母在括号中,即(1), (A) |
labelsep 选项可以被设置成:
标签分隔 |
---|
labelsep = none |
labelsep = colon |
labelsep = period |
labelsep = space |
labelsep = quad |
labelsep = newline |
在下面例子中,labelformat 和 labelsep用于单独设置图和子图标题样式:
% set up labelformat and labelsep for figure \captionsetup[figure]{labelformat=parens, labelsep=newline} % set up labelformat and labelsep for subfigure \captionsetup[subfigure]{labelformat=simple, labelsep=colon} \begin{figure} \centering \begin{subfigure}[t]{1in} \centering \includegraphics[width=1in]{placeholder} \caption{简易}\label{fig:1a} \end{subfigure} \quad \begin{subfigure}[t]{1in} \centering \includegraphics[width=1in]{placeholder} \caption{简易}\label{fig:1b} \end{subfigure} \caption{括号,新行分离器.}\label{fig:1} \end{figure}
排版效果如下:子图的labelformat被设置为simple, 则标题的字母没有括号。 labelsep对应子图标题的冒号和图中的newline样式。
无数字和字母的子图子表标题
在命令 \captionsetup 或者在\subcaption 工具包中,通过设置labelformat 选项为``empty ", 你将不显示浮体编号。这里有一个例子,其中标题没有编号。
% no subfigure caption label. \captionsetup[subfigure]{labelformat=empty} \begin{figure} \centering \begin{subfigure}[t]{1in} \centering \includegraphics[width=1in]{placeholder} \caption{无标签}\label{fig:1a} \end{subfigure} \quad \begin{subfigure}[t]{1in} \centering \includegraphics[width=1in]{placeholder} \caption{无标签}\label{fig:1b} \end{subfigure} \caption{主图标题}\label{fig:1} \end{figure}
排版效果如下:如上所示,没有 A, B, C 或 D! 同样的命令可以用于子表,表和图(对 命令\captionsetup 做相应的替换)。 对于那些显示在图表列表中的图和表,设置编号格式为空将不显示图或表标题中的编号。字母 或数字将出现在列表中。
无序号的标题和表格
你可以不显示标题的序号通过使用命令\caption*
\begin{figure}[tbp] \centering \includegraphics[width=1in]{placeholder} \caption*{Unnumbered figure caption.} \end{figure}
排版效果如下:命令\caption* 使得标题不带编号也不在图清单中显示。
设置子图和子表标题的位置
对于正规的浮体,如图和表, 标题的位置可以设置在浮体上方或下方。 通过简单的将命令\caption 置于图或表的上方或下方即可。
\begin{figure} \centering \begin{subfigure}[t]{1in} \centering \caption{Caption 1}\label{fig:2a} \includegraphics[width=1in]{placeholder} \end{subfigure} \quad \begin{subfigure}[t]{1in} \centering \caption{Caption 2}\label{fig:2b} \includegraphics[width=1in]{placeholder} \end{subfigure} \caption{Main figure caption.}\label{fig:2} \end{figure}
表和子表的例子
这是关于表和子表的例子。
% set numbering style \renewcommand{\thetable}{\Roman{table}} \renewcommand{\thesubtable}{\arabic{subtable}} % set up labelformat and labelsep for table \captionsetup[table]{labelformat=simple, labelsep=period} % set up labelformat and labelsep for subtable \captionsetup[subtable]{labelformat=simple, labelsep=colon} \begin{table} \centering \begin{subtable}[t]{1in} \centering \begin{tabular}{|l|l|} \hline 100 & 200\\ \hline \end{tabular} \caption{Caption 1}\label{table:1a} \end{subtable} \quad \begin{subtable}[t]{1in} \centering \begin{tabular}{|l|l|} \hline 100 & 200\\ \hline \end{tabular} \caption{Caption 2}\label{table:1b} \end{subtable} \caption{Table caption text}\label{table:1} \end{table}
交叉引用
你可以通过使用\ref{LABEL} 来引用标题的编号,其中 LABEL是你用命令\label
给一个图或表分配的字段名。这将会产生编号对应的数字或字母。子标题相应的可以参考\subref{LABEL} 。例如要在文中产生``Figure 1(a)":
Figure \ref{fig:1}(\subref{fig:1a})
注意,使用命令 \label 分配的名字是任意的, 因此你不必按照图的顺序是否为图1. 我可以通过调用fig:1 and fig:1a 来达到引用的目的。 你也可以直接引用一个子图,无需要将它分成ref和subref。
\ref{fig:1a})
但是,这将产生1a, 如果你要产生1(a), 你需要使用:
% put these at the beginning of your document. \captionsetup[subfigure]{labelformat=simple} \renewcommand\thesubfigure{(\alph{subfigure})} \begin{figure} \centering \begin{subfigure}[t]{1in} \includegraphics[width=1in]{placeholder} \caption{Caption 1}\label{fig:1a} \end{subfigure} \quad \begin{subfigure}[t]{1in} \includegraphics[width=1in]{placeholder} \caption{Caption 2}\label{fig:1b} \end{subfigure} \caption{Main figure caption}\label{fig:1} \end{figure} Figure \ref{fig:1a}
第一个\captionsetup[subfigure]{labelformat=simple} 将防止图中出现双括号。如前所述,类似方法可以用于表,子图,子表。
重置标题记数器
如果你需要重置标题序号,(下图从1开始), 你可以使用下面的方法
\setcounter{figure}{0} % reset figure counter to 0.
你也可以使用其它的名字,而不是只是figure.
改变标题名
如果你要改变图和表的名字,比如将``Fig." 改成 ``Figure" 或 ``Table" 改成 ``Tab." 或其它你希望的名字,你可以使用\renewcommand 以及 \figurename 或 \tablename :
\renewcommand{\tablename}{Tbl} \renewcommand{\figurename}{Image}
以上将改变所有表的标题,引用为``Tbl [表的序号]" 或 ``Image [图序号]". 另外 ,在使用\figurename 或\tablename 还有一个问题。 例如, 论文类文档中使用\figureshortname 或 \tableshortname 。 在这些情况下,更新对应的命令。 找到命令是什么,你可以查询.cls文件或你的文档类。你可以找到具体的字符串(如:``Fig") 以及找到定义它的命令。 你可以覆盖它。你也可以在原来.cls文件 建立一个新的文档类。 选自:http://www.peteryu.ca/tutorials/publishing/latex_captions
发表评论 取消回复