【注】筆記來自《LaTeX入門》——劉海洋。詳細參數可參見 LaTeX 官方文檔:
texdoc caption
1. 簡介
在設計文檔時,我們經常需要修改浮動體標題的字體、間距、對齊方式等格式,然而 LaTeX 內核及標準文檔並沒有提供直接修改浮動標題格式的命令,這時就可以使用 caption
宏包來完成相關的設置。
2. 格式選項
使用 caption
宏包設置標題格式是通過一系列鍵值對形式的選項完成的,這些選項既可以作爲宏包的可選項,也可以作爲 \captionsetup
命令的參數出現,修改整篇文檔的浮動體標題格式:
% 導言區
\usepackage[font=small,labelfont=bf]{caption}
% 下面命令與之等價
\usepackage{caption}
\captionsetup{font=small,labelfont=bf}
也可以只修改某種浮動體環境的標題格式,以 figure
環境爲例:
% 導言區
\usepackage{caption}
\captionsetup[figure]{font=small,labelfont=bf}
此外,還可以修改某個浮動體環境的標題格式,以 figure
環境爲例:
\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
選項用來設置浮動標題的字體,而 labelfont
和 textfont
選項則可以單獨設置前面的標籤和後面文字的字體:
類別 | 格式 | 等價字體命令 | 說明 |
---|---|---|---|
字體 |
scriptsize footnotesize small normalsize large Large
|
\scriptsize \footnotesize \small normalsize \large \Large
|
非常小 很小 較小 正文文字大小 較大 很大 |
字體族 |
rm sf tt
|
\rmfamily \sffamily \ttfamily
|
羅馬體 Roman family 無襯線體 Sans Serif family 打字機體 Typewriter family |
字體系列 |
md bf
|
\mdseries bfseries
|
中等粗細 Medium series 粗體 Bold series |
字體形狀 |
up it sl sc
|
\upshape \itshape \slshape \scshape
|
值直立體 Upright shape 意大利體 Italic shape 傾斜體 Slanted shape 小型大寫字母 SMALL CAPS SHAPE |
行距 |
singlespacing onehalfspacing doublespacing stretch=<倍數>
|
\singlespacing \onehalfspacing \doublespacing \setstretch{<倍數>}
|
單倍行距 「1.5」倍行距 「雙倍」行距 多倍行距 |
顏色 |
normalcolor color=<顏色>
|
\normalcolor \color{<顏色>}
|
默認顏色 指定彩色 |
選項集合 |
normalfont normal
|
\normalfont |
恢復默認字體 恢復默認字體、行距、顏色 |
多個不同的字體選項可以同時使用,只要把幾個選項放在分組中:
\captinosetup{font={small,sf},labelfont=bf}
\caption{小號加粗無襯線字體 Caption}
幾個字體選項還支持 +=
語法,用於在現有設置上增加新設置:
\captinosetup{font=small}
\captionsetup{font+=bf}
\caption{小號加粗字體 Caption}
2.6 margin
選項和 width
選項
margin
選項用來設置標題距離頁面左右邊界的距離,width
則用來設置標題的最大寬度。這兩個選項之間有制約關係,因而通常同時只使用其中一個:
% 設定 margin
\captionsetup{margin=4em}
\caption{標題距離左右個 4\,em 的距離}
% 或設定 width
\captionsetup{widith=6em}
\caption{標題最多隻有 8\,em 寬}
2.7 skip
選項
skip
選項控制標題與浮動環境內容的垂直間距,在標準文檔類中默認值是 pt。
\captionsetup{skip=0pt}
\caption{與前面浮動體內容無額外間隔}
2.8 type
選項
type
選項可以設置標題所對應的浮動環境類型,這就允許在非浮動環境中直接使用浮動體的標題,或者是在同一個浮動體中顯示不同的幾個標籤。但注意標題仍然應該倍放在一個環境中或盒子中,而不是直接寫在正文裏。比如,可以利用 type
選項在同一個浮動體中完成圖表的混排:
\begin{figure}
\begin{minipage}[b]{.5\textwidth}
\centering
\includegraphics[width=.4\textwidth]{picture}
\caption{picture}
\end{minipage}
\begin{minipage}[b]{.5\textwidth}
\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
選項可以用來設置標題標籤的文字名稱。在標準文檔類中,figure
和 table
環境的名稱是「Figure」和「Table」,而 ctex
文檔類則分別是「圖」和「表」。設置 figurename
和 tablename
選項等價於修改宏 \figurename
和 tablename
的值,但更爲方便:
% 導言區
\usepackage{caption}
\captionsetup{figurename=圖片}
也可以在浮動體環境中直接使用 name
選項臨時性修改標籤名稱:
\captionsetup{type=figure, name=空圖片}
\caption{標籤名稱可以修改}
3. 功能命令
caption
宏包除了定義了大量的格式選項,同時也提供了一些有用的命令。
3.1 \caption
命令
\caption
用於給浮動環境添加標題,其語法格式爲:
\caption{<標題>}
\caption{<短標題>}{<長標題>}
可選的參數短標題用於圖表目錄,而交叉引用的標題 \label
需要放在 \caption
後面,或者 <標題>
、<長標題>
中。在 \caption
的 <長標題>
中可以進行長達多段的敘述,但 <短標題>
或單獨的 <標題>
中不允許分段。
\begin{figure}
\centering
\includegraphics{picture}
\caption[圖片]{這是一張圖片}\label{fig:picture}
% 或者 \caption[圖片]{\label{fig:picture}這是一張圖片}
\end{figure}
3.2 \captionof
命令
\caption{<類型>}{<標題>}
命令可以看作是先設置了 type
選項,然後使用普通的 \caption
:
\captionof{figure}{空圖片標題}
\captionof
和 \caption
一樣,都有一個帶星號的形式,表示不編號、不顯示標籤也不進入圖表目錄的標題:
\captionsetup{font=sf}
\caption*{無編號的標題,只保留格式}
3.3 \ContinuedFloat
命令
\ContinuedFloat
命令則用來放在浮動體中,阻止標題的編號增加,從而可以用一個編號表示多個浮動體。如果要產生「續圖」、「續表」的功能,就可以使用類似下面的代碼:
\begin{figure}
\ContinuedFloat
% ……
\caption{某圖形}
\end{figure}
\begin{figure}
\ContinuedFloat
% ……
\caption{某圖形(續)}
\end{figure}
3.4 其他命令
caption
宏包同時也提供了許多命令來爲其格式選項增加新的取值。相關的命令很多,以 labelsep
選項爲例,可以聲明一個 fullcolon
的取值:
% 導言區
\DeclareCaptionLabelSeparator{fullcolon}{:} % 聲明中文的全角冒號分隔符
\captionsetup{labelsep=fullcolon} % 爲中文的標題設置全角冒號分隔符
4. 其他宏包
4.1 bicaption
宏包
bicaption
宏包是 caption
宏包的附加宏包,它提供了雙語標題的功能,其基本命令是 \bicaption
,語法格式如下:
\bicaption[<短標題一>]{<長標題一>}[<短標題二>]{<長標題二>}
此時可以同時使用 \captionsetup[bi-first]
和 \captionsetup[bi-second]
的 lang
選項分別設置兩個標題不同的語言。bicaption
宏包原本使用 babel
宏包或 polyglossia
宏包提供的語言選擇機制來設置不同語言的標題,不過中文等東亞語言不使用上述宏包的翻譯機制,因此需要手工設置不同語言的標題。可以使用 \DeclareCaptionOption
命令來聲明一個新的選項,完成標籤名的重定義,然後可以用 \captionsetup
爲每種語言分別調用。比如,設置中英文兩種圖表標題:
% 中文文檔類會設定好標題的第一種語言
\documentclass{ctexart}
\usepackage{bicaption}
% 聲明 english 選項重定義第二種語言的標籤名,選項沒有參數
\DeclareCaptionOption{english}[]{
\renewcommand\figurename{Figure}
\renewcommand\tablename{Table}
}
\captionsetup[bi-second]{english}
% ……
\beign{figure}
% ……
\bicaption{中文標題}{English Title}
\end{figure}
4.2 subcaption
宏包
subcaption
宏包可以給整個浮動體加一個概括性的標題,同時對浮動體內的每個子圖表也都有自己的編號和標題。需要注意的是,subcaption
宏包依賴於 caption
宏包。subcaption
宏包提供了一組命令來完成子圖表的排版輸出。
-
\subcaption{<子標題>}
:用來直接輸出子標題。 -
\subcaptionbox[<目錄標題>]{<標題>}[<寬度>][<盒子內位置>]{<內容>}
:生成一個帶有子標題的子圖表。其中,如果省略<寬度>
則使用其<內容>
的自然寬度;<盒子內位置>
確定<內容>
在盒子中的水平對齊方式,可以是l
(\raggedright
)、r
(\raggedleft
)、c
(\centering
)或s
(無特別格式),默認爲居中的c
。 -
\subcaptionbox*{<標題>}[<寬度>][<盒子內位置>]{<內容>}
:與\subcaptionbox
語法相同,但不進行編號。
【注】使用 \subcaptionbox
時,需要給子圖加引用的 \label
標籤可以放在 <標題>
參數中。使用 \ref
引用標籤將得到「x.y(a)」,它是外層編號「x.y」和內層編號「(a)」的混合。若只引用子標題的內層編號,可以用 subcaption
提供的 \subref
命令。
由於子圖表幾乎總是需要使用子段盒子來放置內容和子標題,所以 subcaption
宏包還同時提供了 subfigure
和 subtable
環境,它們的語法和功能與 minipage
完全相同。
4.3 其他宏包
除了以上宏包外,還可以使用 subfig
和 floatrow
宏包,它們都與 caption
宏包的功能兼容,同時提供額外的子圖表排版功能。
-
subfig
宏包主要提供了\subfloat
和\subref
命令,功能和語法都和subcaption
十分相近。 -
floatrow
宏包則預定義了許多更爲複雜的子圖表格式。