資源
本文主要介紹了如何使用 titlesec 宏包設(shè)置各級標(biāo)題樣式游桩。這里 是其官方手冊,本文主要參考了該手冊耐朴。如果想了解更多詳情請直接查閱該手冊借卧。此外本文還對縮進(jìn)、段距筛峭、行距的內(nèi)容進(jìn)行的簡單的介紹铐刘。
設(shè)置標(biāo)題樣式
標(biāo)題樣式的設(shè)置分為三個部分,標(biāo)題之前影晓、標(biāo)題镰吵、標(biāo)題之后。其中標(biāo)題包括標(biāo)簽和標(biāo)題文字挂签。標(biāo)簽為標(biāo)題文字之前的內(nèi)容疤祭,包括標(biāo)題序號。
titlesec 宏包提供了 \titleformat
命令用來設(shè)置各級標(biāo)題的樣式饵婆,調(diào)用形式如下:
\titleformat{<command>}[<shape>]{<format>}{<label>}{<sep>}{<before-code>}{<after-code>}
-
<command> 為被定義的標(biāo)題命令勺馆。如:
\part, \chapter, \section, \subsection, \subsubsection, \paragraph
或者\subparagraph
。 -
<shape> 為標(biāo)題形式侨核。
-
hang
是默認(rèn)的標(biāo)題形式(和標(biāo)準(zhǔn)的\section
形式一樣)草穆。 -
display
將標(biāo)簽單獨(dú)作為一段(和標(biāo)準(zhǔn)的\chapter
形式一樣)。 -
runin
下方段落和標(biāo)題同行(和標(biāo)準(zhǔn)的\paragraph
形式一樣)搓译。 -
frame
和display
模式一樣悲柱,只不過內(nèi)容用一個盒子包裹。 -
block
將整個標(biāo)題排版在一個沒有附加形式的塊(段落)中些己。在居中標(biāo)題和特殊排版(包括圖片工具)時有用豌鸡。 -
leftmargin
,rightmargin
,drop
,wrap
用來將標(biāo)題垂直排版在左側(cè)或右側(cè)跑芳,可能會造成重疊。具體用法和注意事項(xiàng)請參考源手冊直颅。
-
-
<format> 指定一個用在整個標(biāo)題(包括標(biāo)題文字和標(biāo)簽)的格式博个。如我們正文的文字使用羅馬字體族,整個標(biāo)題使用無襯線字體族功偿,可以在這里輸入
\sffamily
進(jìn)行切換盆佣。這個地方可以添加一些垂直元素(對于某些垂直形式[shape
]的標(biāo)題為水平元素),這些元素會出現(xiàn)在標(biāo)題上方空白的下方械荷。 -
<label> 用來定義標(biāo)簽共耍。如默認(rèn) section 的 label 為
\thesection\quad
,你可以使用\thesection.\quad
在標(biāo)簽和文字之間加上一個點(diǎn)。如果你的標(biāo)題等級中不需要 label吨瞎。你可以將這個設(shè)置為空痹兜,但不建議這么做。因?yàn)檫@并不會抑制目錄及欄外標(biāo)題中的 label颤诀。 -
<sep> 定義標(biāo)簽和標(biāo)題文字之間的水平距離字旭。必須有一個值,不能為空(可以為
0pt
)崖叫。在display
shape 中為垂直距離遗淳。在frame
shape 中為標(biāo)題文字到框(frame)之間的距離。在帶星號的標(biāo)題命令中 <label> 和 <sep> 都會被忽略心傀。如果你使用圖片之類的元素屈暗,請將該參數(shù)設(shè)置為 0 pt。 -
<before-code> 出現(xiàn)在標(biāo)題文字之前的代碼脂男,標(biāo)題文字會作為參數(shù)自動的傳遞給最后一個命令养叛。然而,如果加載包的時候使用了
explicit
參數(shù)宰翅,必須顯示的使用#1
來替代標(biāo)題文字弃甥。這在標(biāo)題文字出現(xiàn)在命令中間時十分有用。 -
<after-code> 出現(xiàn)在標(biāo)題文字之后的代碼堕油。用于排版的元素在
hang,block
和display
形式時為垂直模式潘飘。在runin
和leftmargin
為水平模式。其他模式下被忽略掉缺。
下面是一個排版示例:
%% section
\titleformat{\section}
[hang]
{\sffamily \vbox{\titlerule}}
{\centering\zihao{-3}\bfseries \S\ \thesection\enspace}
{0pt}
{\zihao{-3}\bfseries}
[\vbox{\titlerule \vspace{1pt} \titlerule}]
我們在正文中使用 \section{軟件模塊總體介紹}
命令時就會得到如下的排版結(jié)果:
參照上面的說明卜录,這段代碼應(yīng)該不難理解。
設(shè)置標(biāo)題間距
我們可以像上面代碼在 <format> 和 <after-code> 中添加添加垂直排布元素(這里為橫線)一樣眶明。在這里添加一些元素來控制標(biāo)題之前的間距和標(biāo)題之后的間距艰毒。但更一般的做法是使用 \titlespacing
命令來控制標(biāo)題之間的間距,其命令形式如下:
\titlespacing{<command>}{<left>}{<before-sep>}{<after-sep>}[<right-sep>]
- <command> 同上搜囱。
-
<left> 增加左側(cè)的補(bǔ)白(margin)丑瞧。除了
...margin
和drop
形式下柑土,此時該參數(shù)用來設(shè)置標(biāo)題的寬度。在wrap
形式下绊汹,為最大寬度稽屏。在runin
形式下,為標(biāo)題左側(cè)的行內(nèi)縮進(jìn)西乖。如果是負(fù)數(shù)狐榔,會使標(biāo)題 overhangs。 - <before-sep> 標(biāo)題之前的垂直間距获雕。
-
<after-sep> 標(biāo)題和文字的間距薄腻。在
hang,block
和display
形式下為垂直間距(vertical),在runin,drop,wrap
和...margin
形式下為水平間距届案。如果為負(fù)數(shù)庵楷,你將會定義一個段間距小于\parskip
的空間。 -
<right-sep> 在
hang,block
和display
形式下楣颠。使用該參數(shù)允許你增加 <right-sep> 補(bǔ)白尽纽。
官方手冊中提到該命令有一個帶*的版本,可以禁止掉標(biāo)題后面的段落縮進(jìn)(除了
drop,wrap
和runin
形式)球碉。但如果之后同時使用了 indentfirst 包依然會產(chǎn)生縮進(jìn)蜓斧。另一個需要注意的問題是,有人提到該包會和 fancyhdr 包有部分沖突睁冬,我這里同時也使用了這個包且包含在 titlesec 之后,并沒有發(fā)現(xiàn)有什么沖突的地方看疙。
下面這個示例是用來設(shè)置上方圖片中的標(biāo)題前后間距:
\titlespacing{\section}{0pt}{2.5ex plus 1ex minus .2ex}{1.3ex plus .2ex}
關(guān)于 latex 中補(bǔ)白的延展性(plus
和 minus
)以及 latex 中使用的各種計量單位(ex
)豆拨,請參考相關(guān)手冊。這里不再進(jìn)行介紹能庆。
如果你不喜歡打印出整個補(bǔ)白命令施禾,包括 plus
和 minus
參數(shù),這里提供了一個 *n
縮寫搁胆。在 <before-sep> 參數(shù)中它相當(dāng)于帶有一些伸展性(strechability)和一點(diǎn)收縮性(shrinkability)的 n ex
弥搞。在 <after-sep> 中則帶有一些的伸展性而沒有收縮性。所以上面的命令也可以寫成:
\titlespacing{\section}{0pt}{*2.5}{*1.3}
\beforetitleunit
和 \aftertitleunit
命令用來控制 * 中的伸展性和收縮性渠旁,如果你不喜歡預(yù)定義的值可以修改它們攀例。
注意: \titlespacing
對 \chapter
和 \part
并不起作用,除非你使用 \titleformat
改變它們的格式顾腊。
官方手冊中還有更多的內(nèi)容和示例粤铭,如果你覺得上面的內(nèi)容并不覆蓋你所用的應(yīng)用,請查詢官方手冊獲取更多內(nèi)容杂靶。
行距梆惯、段距及其他內(nèi)容
在文檔的排版中酱鸭,行距、段距以及首行縮進(jìn)也是非常重要的內(nèi)容垛吗。下面我將對這些內(nèi)容做一些簡單的介紹凹髓。
\parindent
設(shè)置除新標(biāo)題后第一段之外的其他所有段的縮進(jìn)值。如果希望新標(biāo)題后首段也縮進(jìn)怯屉,請加載 indentfirst 宏包蔚舀。如果希望某一段去掉縮進(jìn)請在段前使用 \noindent
命令。
\parskip
在除新標(biāo)題后首段的其他段之間增加一個“彈力膠”蚀之,可以將其理解為一個自適應(yīng)的段間距蝗敢。該參數(shù)對頁面的首段和最后一段也不起作用。
baselineskip
兩行之間的行距足删。但通常我們不應(yīng)該直接設(shè)置這個值寿谴,具體原因請參考其他有關(guān)行距的介紹。文章的最后會給出一篇不錯的文章失受。
topskip
設(shè)置每頁第一行內(nèi)容到默認(rèn)位置的垂直間距讶泰。即實(shí)際書寫內(nèi)容到可書寫區(qū)域頂部的距離。
下面是一個關(guān)于上方內(nèi)容設(shè)置的完整示例:
%% 添加首行縮進(jìn)拂到,兩個字符
\RequirePackage{indentfirst}
\setlength{\parindent}{2em}
%% 行距
\linespread{1.5}
\selectfont
% 頁面頂行空白
\setlength{\topskip}{0ex}
% 段間距
\setlength{\parskip}{1ex}
參考資料: