LaTeX標題控制

【注】筆記來自《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 選項用來設置浮動標題的字體,而 labelfonttextfont 選項則可以單獨設置前面的標籤和後面文字的字體:

類別 格式 等價字體命令 說明
字體 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 選項控制標題與浮動環境內容的垂直間距,在標準文檔類中默認值是 10 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 選項可以用來設置標題標籤的文字名稱。在標準文檔類中,figuretable 環境的名稱是「Figure」和「Table」,而 ctex 文檔類則分別是「圖」和「表」。設置 figurenametablename 選項等價於修改宏 \figurenametablename 的值,但更爲方便:

% 導言區
\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 宏包還同時提供了 subfiguresubtable 環境,它們的語法和功能與 minipage 完全相同。

4.3 其他宏包

除了以上宏包外,還可以使用 subfigfloatrow 宏包,它們都與 caption 宏包的功能兼容,同時提供額外的子圖表排版功能。

  • subfig 宏包主要提供了 \subfloat\subref 命令,功能和語法都和 subcaption 十分相近。
  • floatrow 宏包則預定義了許多更爲複雜的子圖表格式。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章