LaTeX技巧884:如何用caption宏包格式化图表标题和子标题

Latex中的图、表、子图以及子表的标题可以通过标题和副标题工具包设计成各种样式你可以改变字体,序号的样式, 对应方式和标题的格式和标签。在一个一般的文章类文档中,图和子图的标题如下图所示:

(``a",``b", ``1")是字母和数字的序号,它们标题的标签。 在上图中,子图标题的标签在括号中,而图标题的标签与图标题用一个冒号隔开。 在下文中,我们将给出一些例子来说明如何改变标题的样式, 包括数字, 字母的样式(阿拉伯数字序号, 字母序号以及罗马数字序号), 标题的位置。 以及如何生成无标签的标题(即无数字和字母序号)。 本文中的例子使用 \caption  和 \subcaption工具包。 同时,我也有一篇文章,里面有一些使用subfig工具包的例子。 但是我还是推荐使用本文中的例子,那篇文章可以作为参考。

开始

要使用本文中的例子, 你需要标题和子标题工具包(如果你要用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

分享到:
未经允许不得转载:LaTeX技巧884:如何用caption宏包格式化图表标题和子标题
已有 条意见

    最新文章

    加载中...
      本站提供专业LaTeX排版、咨询、定制服务,请点击下图咨询详情


      全国首个精品的LaTeX视频教程,大牛带着你入门,让LaTeX学习不再纠结,请点击下图咨询详情

      热门评论

        联系我们

        交流QQ群:91940767
        本站QQ号:343083553
        邮箱联系latexstudio@qq.com
        淘宝店铺latexstudio.taobao.com 提供排版,模板定制,培训,图片处理,视频教程等LaTeX服务。

        关注微信公众号: latex2015

        如果您投稿或者希望加入我们团队,请发送您的简历到latexstudio@qq.com。

        科技艺术的完美融合,专业精致的排版体验

        联系我们联系我们