引言
家里的小孩正在讀初中。由於遠隔兩地,只能周末偶爾聯系對其進行輔導。而隨着方程和函數的引入,語音和白板已經無法滿足需要,要么辭不達意,要么不便整理和復習,所以我嘗試着自學了LaTeX,制作成PDF文檔發給小孩后,再進行語音輔導,效果提升明顯。
本文就LaTeX最常用的功能,按照文檔-段落-字體-表格-圖片-數學應用的順序,簡要整理如下,方便隨時查閱。
參考書目與鏈接
LaTeX in 24 Hours: A Practical Guide for Scientific Writing
一份其實很短的LaTeX入門文檔
文檔
基本結構
LaTeX文檔的基本結構類似HTML,有頭部和體部。命令以\開始,選項用[]包裹,命令作用到的參數用{}包裹,注釋用%引導,其結構大致如下:
注意:LaTeX對大小寫敏感
%以下是頭部
\documentclass[a4paper紙型, portrait紙張方向, openright每章首頁都在奇數頁上, onecolunm單欄, oneside單面打印, UTF8字符編碼, 10pt默認字符大小, 等等]{article/letter/report/book/ctexart/ctexrep/ctexbook等不同的文檔類型}
\usepackage{amsmath, color}
%以下是體部
\begin{document}
%此處放置正文
\end{document}
環境
LaTeX使用一對begin{ename}-end{ename}標記一個環境,類似於BASIC或者其他一些編程語言的語法。對環境里的內容,LaTeX會單獨進行解析,比如\begin{equation}指示環境里是一個數學公式,\begin{itemize}指示環境里是一個無序的項目符號列表。環境可以嵌套,只要兩兩配對且不交叉即可。
環境除了名稱,還可以帶上選項
\begin{ename}[options]
... ...
\end{ename}
命令
命令的常見格式如下:
\command[options]{argument1}{argument2}
或者下面這樣的,常見於文本格式設置,比如以下命令引導的文本將使用粗體:
{\bf argument}
還有聲明式的,表示后續的內容將一直受此命令作用影響,比如以下命令表示后續文本全是粗體,直到用/normalize恢復默認字體:
\bfseries
... ...
\normalize
單位
LaTeX里可使用的單位包括:毫米mm,厘米cm,英寸in(inch),點pt(point),基礎文本尺寸的寬度em,基礎文本尺寸的高度ex,以及0.2\textwidth這樣的字符寬(高)度或行寬(高)度的百分比值。
1 point是1 inch(2.54cm)的\(\frac{1}{72}\),約等於0.35mm。按DPI的話,Windows默認是72 DPI,Mac默認是96 DPI,所以在Windows下,12pt=16px。
按16px=12pt,1em=16px計算,中文字號-pt-px-em對照表如下:
| 字號 | pt | px | em |
|---|---|---|---|
| 八號 | 5pt | 6px | 0.375em |
| 七號 | 5.5pt | 7px | 0.4375em |
| 7pt | 9px | 0.55em | |
| 小六 | 6.5pt | 8px | 0.5em |
| 六號 | 7.5pt | 10px | 0.625em |
| 小五 | 9pt | 12px | 0.75em |
| 8pt | 11px | 0.7em | |
| 五號 | 10.5pt | 14px | 0.875em |
| 10pt | 13px | 0.8em | |
| 11pt | 15px | 0.95em | |
| 13pt | 17px | 1.05em | |
| 13.5pt | 18px | 1.125em | |
| 14.5pt | 20px | 1.25em | |
| 四號 | 14pt | 19px | 1.2em |
| 小三 | 15pt | 21px | 1.3em |
| 17pt | 23px | 1.45em | |
| 三號 | 16pt | 22px | 1.4em |
| 小二 | 18pt | 24px | 1.5em |
| 20pt | 26px | 1.6em | |
| 二號 | 22pt | 29px | 1.8em |
| 小二 | 12pt | 16px | 1em |
| 25pt | 34px | 2.125em | |
| 27pt | 36px | 2.25em | |
| 一號 | 26pt | 35px | 2.2em |
| 29pt | 38px | 2.35em | |
| 28pt | 37px | 2.3em | |
| 30pt | 40px | 2.45em | |
| 32pt | 42px | 2.55em | |
| 34pt | 45px | 2.75em | |
| 小一 | 24pt | 32px | 2em |
| 初號 | 42pt | 56px | 3.5em |
| 小初 | 36pt | 48px | 3em |
頁面設置
LaTeX的頁面相關參數及含義如下圖:

其中的大多數參數都可以使用\setlength{參數命令}{新的值}來進行修改,比如\setlength{\textheight}{210mm},各參數的具體含義請參閱本文后續說明。
oddsidemargin與evensidemargin是在啟用雙面印刷的選項twoside后才發生作用的,用於定義奇偶頁的不同邊距。
臨時需要當前頁適當增加頁高時,使用\enlargethispage{asize}或加*的\enlargethispage*{asize}命令,LaTeX會盡量滿足所需額外增加的高度asize。
頁眉與頁腳
LaTeX內置了數種頁眉頁腳的樣式,作為\pagestyle{}或\thispagestyle{}(通常放在\chapter{}等章節命令之后)的參數即可啟用:
- empty:無
- plain:無頁眉,僅頁腳里頁碼居中
- headings:無頁腳,僅由章節名+頁碼自動構成頁眉,且雙面打印時奇偶頁對稱、頁碼靠外
- myheadings:類似headings,只是頁眉信息需要用戶設定,而非自動產生
- fancy:完全由用戶自定義頁眉頁腳
headings 樣式
| 打印模式 | 奇偶頁 | Article | Book | Report |
|---|---|---|---|---|
| 單面 | 奇 | Section + 頁碼 | Section + 頁碼 | Chapter + 頁碼 |
| 偶 | Section + 頁碼 | Chapter + 頁碼 | Chapter + 頁碼 | |
| 雙面 | 奇 | SubSection + 頁碼 | Section + 頁碼 | Section + 頁碼 |
| 偶 | 頁碼 + Section | 頁碼 + Chapter | 頁碼 + Chapter |
myheadings 樣式
myheadings區別於headings,是使用命令\chaptermark、\sectionmark、\subsectionmark引用章節,再根據單面或雙面打印相應使用\markright{}和\markboth{偶數頁}{奇數頁}進行設置。
由於對奇偶頁引用不同的章節,所以通常搭配使用\markboth{偶數頁}{}和\markright{奇數頁}使奇偶頁對稱,得到\leftmark(對應偶數頁)和\rightmark(對應奇數頁)。比如下面這樣,將得到偶數頁“Chapter前綴 Chapter編號. Chapter名稱”,奇數頁“Section編號. Section名稱”的頁眉,其中的[1]是新的chaptermark命令的參數個數,#1是該參數的占位符,此處用的章節名稱:
\renewcommand{\chaptermark}[1]{\markboth{\chaptername∼\thechapter. #1}{}}
\renewcommand{\sectionmark}[1]{\markright{\thesection. #1}}
自定義頁眉頁腳
啟用包fancyheadings之后,用戶便可以自定義頁眉頁腳。
對應頁眉head和頁腳foot,以及不同的對齊方式l(eft)/c(enter)/r(ight),使用諸如\lhead[peven]{podd}的命令進行定義。而且,這些頁眉頁腳均支持多行,所以還應注意調整頁眉頁腳的高度以適應內容。
fancy還提供了頁眉頁腳分隔線\headrulewidth和\footrulewidth,其默認值分別為0.4pt和0pt。可以使用\addtolength{\headwidth}{\marginparsep}接\addtolength{\headwidth}{\marginparwidth}把旁注的寬度也加進去。
至於頁眉頁腳的寬度,默認等於\textwidth,可以使用\headwidth和\footwidth改變之。
與包fancyheadings類似的還有包fancyhdr。其命令稍異於fancyheadings,但效果是一樣的,比如\fancyhead[le,ro]{頁眉內容},其中le表示left、even,ro表示right、odd,即頁眉頁腳對應head-foot,對齊的可選項為l(eft)-c(enter)-r(ight),奇偶選項為o(dd)-e(ven)。
分頁
LaTeX提供了一組命令控制正文的分頁。
\nopagebreak:強制不許分布\newpage:在當前位置新分一頁,若是分欄時則表示新開一欄\pagebreak:同\newpage\clearpage:在分欄情況下替代\newpage新分一頁\cleardoublepage:在奇偶頁情況下從奇數頁開始新一頁的內容\raggedbottom:頁面內容頂部對齊(這是默認對齊方式)\flushbottom:頁面內容散列於整個頁面對齊,相當於拉開行距
頁碼
LaTeX在頭部使用\pagenumbering{樣式}定義頁碼樣式,默認的有5種
arabic:數字roman:小寫羅馬數字Roman:大寫羅馬數字alph:小寫英文字母Alph:大寫英文字母
若要在局部改用其他樣式,則需要在\newpage、\clearpage和\cleardoublepage等命令后跟上\pagenumbering命令。
默認情況下頁碼都是連續編號的,可以在頭部使用\setcounter{page}{n}定義起始編號。要在每個章節重新從1開始編號時,要在章節起始位置使用\setcounter{page}{1}命令重置。需要注意的是,在章節首頁不需要顯示頁碼時,使用\thispagestyle{empty}跳過顯示,但頁碼仍是計數了的,除非用setcounter修改之。
章節
LaTeX根據文檔類型不同,按范圍大小依次提供了\part{}、\chapter{}、\section{}、\subsection{}、\subsubsection{}、\paragraph{}和\subparagraph{}進行划分。
默認情況下,LaTeX只對該文檔類型中的前3種章節范圍進行自動編號。其中,book與report都是從chapter起至subsection止,article從section起至subsubsection止。如果需要跳過某個編號,則在命令名稱后加個*即可,比如\chapter*{Preface}。
在編號的層級方面,對book和report而言,part-chapter-section-subsection依次對應[-1,0,1,2];對article而言,part-section-subsection-subsubsection依次對應[0,1,2,3]。要調整層級數,可使用\setcounter{secnumdepth}{5}或\addcounter{secnumdepth}{1}對系統變量secnumdepth進行修改,從而向右擴展編號的層級。
在編號名稱方面,chapter默認名為Chapter,可使用\renewcommand{\chaptername}{Unit}修改為Unit,然后用下面3條命令修改chapter樣式為大寫字母,section和subsection的樣式為帶分節符號§加空格、以句點.分級的級聯數字:
\renewcommand{\thechapter}{\Alph{chapter}}
\renewcommand{\thesection}{\S∼\thechapter.\arabic{section}}
\renewcommand{\thesubsection}{\thesection.\arabic{subsection}}
要改變章節編號的初始值,則使用命令\setcounter{asec}{n},其中asec是要設置的章節,比如chapter,n是初始值(默認為0),編號值將從\((n+1)\)開始。
標簽
LaTeX使用\label{rkey}在被引用對象之后定義一個類似於HTML中錨點的標簽,方便之后使用\ref{rkey}進行引用。
對文檔中的不同類型的對象,在引用時通常使用其縮寫加冒號作為前綴,方便分辨(當然也可以不遵循這樣約定俗成的規范)。
| 對象 | 前綴 |
|---|---|
| Chapter | ch |
| Section | sec |
| Subsection | ssec |
| Figure | fig |
| Equation | eqn |
| List item | itm |
| Appendix | app |
對諸如chapter/section之類的對象,LaTeX將會為之自動編號,\ref將使用該編號作為引用值。
類似的,還可以使用\pageref{rkey}引用標簽所在的頁碼,\vref{rkey}和\vpageref{rkey}引用標簽與當前頁面的前后關系,它相當於\ref和\pageref的合體,當前后超過1頁時相當於\ref,否則相當於\pageref。
分欄
默認情況下,book、report、article都是單列。
通過\documentclass[twocolumn]{article}設置twocolumn選項,使全篇都變為兩欄。之后如果其中某一部分需要單欄時(比如標題后的摘要),則使用命令\twocolumn[]將內容放入[]即可實現之。
與之相關的幾個參數包括:
\columnsep:設置欄間距\columnseprule = 1mm:設置欄間分隔線的寬度\columnwidth:欄的寬度,將根據textwidth和columnsep計算得出
或者啟用包multicol后使用\begin{multicols}{2}啟用多欄,此時增加一個參數\multicolsep用於定義環境與分欄塊前后的垂直距離。默認情況下,columnsep與multicolsep分別為3.5mm與4.5mm。
迷你頁
LaTeX支持象文本框一樣的MiniPage,使用\begin{minipage}[垂直對齊方式c(enter)/t(op)/b(ottom)]{水平寬度}啟用之。垂直對齊方式默認是Center。
迷你頁通常與插圖、表格搭配使用,實現圖片的浮動顯示等效果。與之類似的,還有一個boxedminipage,區別就是帶了個外框盒子box。
腳注
LaTeX提供了\footnote{}命令用於創建腳注。
腳注編號樣式可以使用\renewcommand{\thefootnote}{\fnsymbol{footnote}}修改之,其中的\fnsymbol即不同樣式對應的命令(類似章節編號中的大寫字母、數字等等)。
由於腳注也是編號的,所以可以在\footnote內部使用\label創建標簽,方便之后使用\ref進行引用。要注意的是,普通頁與迷你頁的腳注相互是獨立的,所以放在minipage環境塊里的footnote都將會重新編號。
若要使迷你頁里的腳注也與普通頁里的一起連續編號,則在minipage環境塊里需要腳注的地方使用\footnotemark標記,然后在環境塊結束end后緊跟\footnotetext{腳注文本}進行配對。
除了每行一條腳注的樣式,使用包fnpara可以使所有腳注都在一個段落里,使用包ftnright可以使腳注呈兩欄呈現。
與footnote類似地,可以使用\endnote{}在章節或文章末尾添加尾注,或者直接重定義命令\renewcommand{\footnote}{\endnote},使二者等價。
旁注
LaTeX使用\marginpar{ }在段落至頁邊的空白處創建旁注。
與之相關的幾個參數包括:
\marginparwidth:旁注的寬度\marginparsep:旁注與段落的間距\marginparpush:兩個連續旁注之間的間距
在對稱頁邊距的情況下(雙面印刷),使用\marginpar[$\Longrightarrow$]{$\Longleftarrow$}可以使旁注的箭頭都始終指向段落。
段落
新行
類似Markdown,LaTeX可以使用一個空行開始一個新行。除此以外,還有以下一些方式:
- 在行末尾使用
\newline或者\\開始一個新行。 - 在行末尾使用
\linebreak開始一個新行,並且使當前行兩端松散對齊到頁的右邊界。 - 在行末尾使用
\\\\將會新增加一個空行。 - 可以使用
\\[2mm]在段后增加2mm的行距。 - 可以使用
\\*和\\*[]分行且不允許行間分頁。
新段落
段落是略不同於行的單位。默認情況下,段落會進行首行縮進,距離是當前文字大小的1.5倍,段落之間也不會有空白的行。
而另起一行默認不會有首行縮進,若干個連續行將被視作同一個段落。比如在若干行之間若有公式、圖片等插入的,則公式、圖片之后的那一行將會不會有縮進。
- 使用
\par開始一個新的帶首行縮進的段落,之后緊跟段落文本。 - 在
\par后緊接使用\parindent = 8mm,\noindent和\parskip 2mm調整首行縮進以及段前距,要注意\noindent只影響當前段落。 - 使用
\paragraph{title}或者\subparagraph{title}這種帶參數的命令創建帶標題的段落,之后緊跟段落文本。
對齊
LaTeX默認為兩端對齊,還可以使用環境帶上選項flushleft/center/flushright,或者使用命令\raggedleft、\centering、\raggedright進行左、中、右對齊。
行間距
LaTeX使用\begin{spacing}{1.5}設置行間距倍數,單倍行間距可以直接使用\begin{singlespace}。
具體的行間距數值,需要使用\setspace進行設置。
\bigskip \\:按預定義值拉開行間距\vskip 8mm:在兩行之間拉開8mm\vspace{8mm} \\:在兩行之間拉開8mm,要注意在此命令后需要用\\顯式地換行
對應Word里的固定行距28磅,使用\setlength{\baselineskip}{28pt}設置即可。
空白
LaTeX默認會忽略多於一個的空格和制表符,這和HTML是類似的。需要空格或改變字符間的間距時,建議使用以下命令:
\quad:占一個字符的空格,以下thin/medium/thick只是間隙\qquad:兩個空格\thinspace或\,:拉開一個窄一些的間隙\medspace或\::拉開中等寬度的間隙\thickspace或\;:拉開寬一些的間隙\!:緊縮一個窄一些的間隙\!\!:緊縮一個中等寬度的間隙\!\!\!:緊縮一個更緊密一些的間隙\hspace{5mm}:使命令前后的文本相距5mm\hfill:使命令后的文件右對齊至頁右邊距
如果要在頁首行和頁末行添加空白,就應在命令前面添加~,或者命令后加*,比如\vspace*{}。同樣地,相對於直接使用\hfill和\vfill,更建議使用\hspace*{\fill}和\vspace*{\fill}。
此外,還可以用\/增加其前后兩個字符的間隙(我感覺和一個普通空格差不多)。
單詞換行
在單詞之間加~或\可以強制將這兩個詞保留在同一行且沒有任何空格。還可以使用以下命令:
\nolinebreak:作用類似於~或\,但文本之間不保留空格。\mbox{}:比上述方式更好的選擇,允許文本之間留有空格。
英文句號的間隙
英文的句號.與之后的字母之間默認會有比較大的間隙,可以使用~、\,或者\空格適當縮小。
如果句末是.),最好加上\變成.)\,避免LaTeX把它當作另一個命令。
如果句末是大字字母結尾,則可以使用字母\@.來適當增加句號與下一個字母間的間隙。
引用
LaTeX里對左右引號進行了區別,左引號均使用`,右引號才使用'。
對小段文本,使用環境\begin{quote}構建引用,將按左右縮進方式對齊引用文本;對大篇的多段文本,使用環境\begin{quotation},將在quote基礎上附帶首行縮進效果。
帶編號列表
帶編號的列表采取如下方式,且enumerate環境塊可多層嵌套,形成級聯列表,並且可以在項的正文之后使用\label創建引用標簽:
\begin{enumerate}
\item 項一\label{item:one}
\item 項二
\end{enumerate}
編號的樣式按第一至第四層,分別使用\labelenumi、\labelenumii、\labelenumiii和\labelenumiv進行修改,而與之對應的引用的樣式分別使用 \theenumi、\theenumii、\theenumiii和\theenumiv定義,編號值本身則分別對應enumi、enumii、enumiii和enumiv。
以下代碼將形成“1-A-a-i”樣式的編號:
\renewcommand{\labelenumi}{\arabic{enumi}.}
\renewcommand{\labelenumii}{(\Alph{enumii})}
\renewcommand{\labelenumiii}{(\alph{enumiii})}
\renewcommand{\labelenumiv}{(\roman{enumiv})}
\renewcommand{\theenumi}{\arabic{enumi}}
\renewcommand{\theenumii}{(\Alph{enumii})}
\renewcommand{\theenumiii}{(\alph{enumiii})}
\renewcommand{\theenumiv}{(\roman{enumiv})}
當編號里需要一些固定文本時,可以象下面這樣定義編號樣式:
\renewcommand{\labelenumi}{Q.\theenumi}
這些命令既可以放在頭部影響全文,也可以放在每個列表開頭,只影響當前列表。但這也帶來一個低效的問題,所以另一種可行的方式是在enumerate之后加入選項,使用\begin{enumerate}[Note 1]的方式定義編號樣式。其中的1即表示使用數字,其他可用的還有a、A、i和I。若有固定文本中有字母a的,則需要使用{a}把該文本保護起來。
無編號列表
無編號列表類似有編號列表,只是將enumerate換作itemize,但是無編號列表不能用\label建立標簽,因為它無編號可供\ref引用。
\begin{itemize}
\item 項一
\item 項二
\end{itemize}
默認無編號列表的符號依次為:實心圓點•,連字符-,星號*,句號.。它們可以象有編號列表一樣,采用類似的方式修改為\(\bigstar\):
\renewcommand{\labelitemi}{$\bigstar$}
描述
包括有編號列表與無編號列表在內,加上環境塊description,還有一種方式逐項定義符號,即使用\item[固定編號] 文本。此時,若文本中有中括號[],則需要使用{}進行保護,比如:\item[Q.1] {[Delhi/Mumbai]} is the capital。
列表的縮進
使用\begin{enumerate/itemize}[leftmargin=4mm]定義列表的左縮進,使用\begin{enumerate}[\hspace{0mm}1.]定義編號與文本的間距,並使用數字樣式(參見前文用於局部的編號列表樣式)。
制表符對齊
使用tabbing環境塊進行制表符對齊,首行用\=間隔,其他行用\>間隔,每行用\\換行。
\begin{tabbing}
Potato \= 12.00\\
Rice \> 20.00\\
Oil \> 60.00\\
\end{tabbing}
在首行使用\hspace{0.5mm}或\hspace*{}可以調整間距。在首行末尾使用\kill可以不顯示該行,而只用該行來影響之后其他行的間距。
制表符默認是左對齊文本,可以使用>text1'text2使text1右對齊,使用>`text使最后一列右對齊。
\begin{tabbing}
Longest \= Longest \= Longest\kill
a \> b \> c\\
a \> b \>\`c\\
\>a\'b \> c\\
\end{tabbing}
字體
字體屬性
LaTeX的字體屬性包括:
- 字體族(Family):有襯線體
\textrm,無襯線體\textsf,打字機體\texttt - 字體形狀(Shape):直立體
\textup、意大利體\textit、斜體\textsl、小型大寫體\textsc、着重體\emph - 字體系列(Series):中等
\textmd、加粗\textbf
其中最常用的是斜體、加粗、着重,以及不同的字體大小。用\normalfont可以恢復默認字體。
字體大小
LaTeX的字體大小(Size)從tiny、scriptsize、footnotesize、small、normalize、large、Large、LARGE、huge到Huge,既可以用命令式的\large{something}包裹要改變大小的文本,也可以使用begin{large}構造一個環境進行包裹。
在頭部documentclass的選項里設置的默認字體大小,對應normalize的大小。
中文字體與英文字體的大小對照表如下:
| size | 10pt | 11pt | 12pt | c5size | cs4size |
|---|---|---|---|---|---|
| tiny | 5 | 6 | 6 | 七號 | 小六號 |
| scriptsize | 7 | 8 | 8 | 小六號 | 六號 |
| footnotesize | 8 | 9 | 10 | 六號 | 小五號 |
| small | 9 | 10 | 10.95 | 小五號 | 五號 |
| normalize | 10 | 10.95 | 12 | 五號 | 小四號 |
| large | 12 | 12 | 14.4 | 小四號 | 小三號 |
| Large | 14.4 | 14.4 | 17.28 | 小三號 | 小二號 |
| LARGE | 17.28 | 17.28 | 20.74 | 小二 | 二號 |
| huge | 20.74 | 20.74 | 24.88 | 二號 | 小一號 |
| Huge | 24.88 | 24.88 | 24.88 | 一號 | 一號 |
在設置文本為12pt后,對缺少的常用三號中文字體,可以使用\renewcommand{\LARGE}{\fontsize}{16pt}{\baselineskip}\selectfont}重定義\LARGE命令,或者使用\newcommand{\sanhao}{\fontsize{16pt}{\baselineskip}{\selectfont}新增三號字體命令\sanhao。
下划線
可以使用\underline{}將文本設置為下划線的。但\underline{}有一個缺點,即其修飾的文本不會自動換行。為此可以通過引入包ulem,使用重新定義過的\emph或者該包提供的\uline實現下划線效果。
短橫線
LaTeX里有短橫線有3種作用:
-:這是連字符--:這是上下界范圍---:這是破折號
字符顏色
要使用顏色,可以使用預定義的顏色:black、white、red、green、blue、cyan、magenta以及yellow,或者在頭部自定義顏色,gray/rgb/cmyk對應不同的顏色系統,w, x, y, z均取0到1之間的小數:
\definecolor{cname}{gray}{w}
\definecolor{cname}{rgb}{w, x, y}
\definecolor{cname}{cmyk}{w, x, y, z}
然后\textcolor{color_name}{... ...}使用之。
表格
以下是帶表頭、標簽的表格典型示例:
\begin{table}[!hbt] % 表格在文中的垂直對齊方式,包括here/bottom/top
\centering
\caption{Obtained marks.}
\label{tab-marks} % 標簽通常放在caption之后
\begin{tabular}{|l|c|c|c|c|} % 每列對齊方式
\hline Name & Math & Phy & Chem & English\\
\hline Robin & 80 & 68 & 60 & 57\\
\hline Julie & 72 & 62 & 66 & 63\\
\hline Robert & 75 & 70 & 71 & 69\\
\hline % 底端橫線
\end{tabular}
\end{table}
默認的圖片索引前綴為“Table”,可以在頭部使用\def\tablename{新前綴}來修改之,其字體字號可以使用\captionsetup{margin=10pt, font=it, labelfont={large, bf, sf}}這樣的命令修改之,與前后文本的間距可以使用\abovecaptionskip和\belowcaptionskip定義之。
表格的對齊方式
表格整體布局的垂直對齊包括三種方式,可組合使用之。
- h(ere):當前位置,若當前位置放不下表格,則會自動對齊到下一頁的頂端,並且將后續文本前移到當前頁填充
- b(ottom):頁的底端
- t(op):頁的頂端
使用!表示忽略hbt的組合,總是將表格放到指定的對齊位置。
記用包float里的H方式,表明強制將表格放於當前位置,當前頁無法容納表格時,會將本頁留空,將表格和后續的文本調整到下一頁的頂端。
單元格寬度與對齊
相較於tabular中列寬由列中長度最大的值決定,啟用包tabularx則可使用\begin{tabularx}{整個表寬}{列的數目}自定義列的寬度。同時在對齊方式上,除了l(eft)/c(enter)/r(ight)仍是根據最長的值決定寬度,還增加了X提供更復雜的自動計算列寬的方式,與X配合的還有>{\raggedright\arraybackslash}、>{\centering\arraybackslash}及>{\raggedleft\arraybackslash}等左、中、右3種對齊方式,其中的\arraybackslash是為避免行末的\\出現Bug。比如以下就定義了一個占到頁寬80%的表格,其中第2列是固定寬度,第3列右對齊,第1列則占據剩余的寬度:
\begin{tabularx}{0.8\linewidth}{|X|c|>{\raggedleft\arraybackslash}X|}
還有一種方式是啟用包array里的(to)p/m(iddle)/b(ottom){列寬}決定單元格的垂直對方方式,並定義列寬。array包里還有其他一些命令,不過實在太復雜,平時也難得一見。
\begin{tabular}{|p{1.7cm}|m{1.5cm}|b{1.6cm}|}
\hline This is the first and the & A medium size entry & This is another long entry\\
\hline
\end{tabular}
此外,使用\setlength{\tabcolsep}{2mm}設置單元格列與列之間的間距,默認是6pt。
表格文本方向
表格中的文本默認是橫排,可以啟用包rotating里的sideways環境塊包裹需要改變方向的文字,就可以使之變為縱排。
合並單元格
啟用包multirow里的兩條命令是實現單元格合並的主要工具:
- \multirow{該單元格占的行數}{行寬}[內容以垂直居中位置上移的高度]
- \multicolumn{該單元格占的列數}
象\multicolumn{2}{c|}{\multirow{2}{*}{1234}}一樣,把multirow作為multicolumn的單元格內容,即可實現多行多列合並單元格的效果。最后用\cline{起始列-終止列}划出未被合並列所需要的橫線。
文字環繞表格
table與其前后的文本默認是上下環繞的方式,而對於寬度較小的表格,可以啟用包wraptable里的環境wraptable{l(eft)/r(ight)}[表格寬度]替換table,以實現緊密環繞。
表格背景色
啟用包colortbl里的命令\rowcolor[顏色方案]{顏色}(放在一行起首)、>{\columncolor{顏色}}(放在環境塊begin的選項里、對齊方式之前)和\cellcolor{顏色}(放在單元格內容前)分別定義行、列和單元格的背景色。其中,cellcolor可替換rowcolor、columncolor,而rowcolor替換columncolor。
但是,由於背景色可能會覆蓋掉單元格的網格線,所以需要使用\rowcolor{顏色}[lhang][rhang]和\columncolor{}[lhang][rhang]適當縮小背景色覆蓋單元格列間隙的寬度,而且當只有lhang參數時,rhang默認將與lhang相等。所以,一般將hang值設定為\tabcolsep的比例值。
以千分號、小數點等對齊單元格
啟用包dcolumn里為表格環境塊的列對齊選項添加的D{對齊符號}{替換對齊符號的顯示用符號}{符號后預留占位的位數},可以指定按其中的對齊符號進行對齊。比如D{.}{,}{4}將會用,替換掉.並且在.之后預留4位,如果小數位數超過4位,則有可能超出單元格。
“分欄”的表格
分欄的表格叫作“Side-By-Side”,就象分欄后的正文一樣,左右對稱中有間隙。對表格而言,要達到這樣的效果,在table環境塊里嵌入2個tabular環境塊,在tabular之間用一個\hfill或\hspace{}間隔即可。但這樣的方式存在一個問題,即2個表格將共用一個索引編號。如果要各自編號,那么就需要在tabular之外套上一層minipage,即可在minipage內各自定義caption,並獲得獨立的索引編號了。
橫轉豎的表格
表格的方向通常都是從左到右、從上到下,要改變表格及其單元格內文本的方向,啟用包rotating里的\begin{sideways}環境塊分別包裹整個tabular或者某個單元格即可,其中單元格旋轉的角度,將在表格旋轉角度上累加。
另一種方法,則是直接使用sidewaytable環境塊替換掉table塊。
跨多頁的表格
啟用longtable包里的longtable環境塊,可以定義一張跨越多頁的長表格。在使用時有以下一些注意事項:
- 表格標題
caption{}須用\\顯式地換行 - 在首頁表頭后使用命令
\endfirsthead作為結束,注意這不是成對使用的,沒有beginfirsthead - 在每頁表頭后使用命令
\endhead作為結束,同樣地沒有beginhead - 除首頁外,后續每頁的首行其實也是表格的一行,所以通常在
\endhead前使用\multicolumn{欄數}{c}{\tablename\ \thetable: xxxxxxx \ldots}的方式做一個續頁的標題頭
在表格中使用腳注
在tabular環境塊內不能直接使用\footnote創建腳注,而只能使用\footnotemark和\footnotetext{}。
另一種討巧的辦法,是使用minipage包裹tabular,即可在后者內部使用\footnote了,但要注意minipage的腳注位置是在minipage下方,而不是頁腳。
圖片
LaTeX支持在文檔中嵌入JPEG、PNG、TIFF、PS及EPS等常見的圖片文件。以下先以EPS文件為例(注意:EPS是矢量圖形格式,所以可以用LaTeX進行標記),其插入方法有兩種:
- 包epsfig里的
\epsfig{file=myfig.eps, width=30mm, height=40mm, angle=30}:指定文件名、寬度、高度和逆時針旋轉角度,將保持等比縮放 - 包graphicx里的
\includegraphics[width=2cm, height=2cm, width=2cm, angle=30]{girl}:
為了給圖片加索引編號,可使用類似table的\begin{figure}環境塊包裹上述圖片插入命令,可以的把命令等效於tabular環境塊,從而實現更復雜的排版效果。
要對一組圖片進行編號,可以在figure環境塊內部使用\subfigure[說明性文字]包裹圖片插入命令,其序號樣式可以象\renewcommand{\thesubfigure}{(\roman{subfigure})∼}一樣修改之。
默認的圖片索引前綴為“Figure”,可以在頭部使用\def\figurename{新前綴}來修改之,其字體字號可以使用\captionsetup{margin=10pt, font=it, labelfont={large, bf, sf}}這樣的命令修改之,與前后文本的間距可以使用\abovecaptionskip和\belowcaptionskip定義之。這和表格是完全一樣的。
圖片與文本混排
使用包wrapfig里的\begin{wrapfigure}[垂直對齊的文本行數]{左側l/右側r}{與文本的水平間距}實現混排。
類似表格里的sideways環境塊,使用\begin{sidewaysfigure}旋轉圖片。
圖形標注
因為EPS是矢量圖形,所以可以啟用包psfrag里的\psfrag{圖形片段名}{新標注},放在實際的圖片插入命令前,給圖形打上數學符號。
將圖片插入表格
盡管figure環境塊不能嵌入到table環境塊中使用,但是插入圖形命令是可以當作一個單元格的內容插入到tabular中的。
數學應用
數學字體
數學字體類似普通字體,只是它只作用於LaTeX里的數學公式,而且通常要把字體命令放在定義公式的一對$...$里發生作用。
$\mathbf{abc}$
不過\boldmath是例外,而\mathcal{}、\mathbb{}和\Bbb{}只接受大寫字母:
\boldmath{$abc$}
繪制幾何圖形
目前更常用的在LaTeX中繪制圖形的方法是使用TikZ
LaTeX使用\begin{picture}(x坐標最大值,y坐標最大值)(左下角x坐標,左下角y坐標)環境塊定義幾何圖形的繪制區域大小。
每個單位unit的對應實際長度在頭部使用\setlength{\unitlength}{5mm}定義之。
使用\linethickness{0.5mm}定義線的寬度,或直接使用\thinlines或\thicklines 隨時切換線的粗細。
在picture里維護着一個當前坐標,所有的繪圖命令默認會從當前坐標開始繪制,可以使用命令\put(x,y){繪圖命令}強制從(x, y)處開始繪圖命令,或者使用命令\multiput(起始點x, 起始點y)(x遞增量, y遞增量){重復次數}{繪圖命令},后者常用於繪制平行線。
picuture環境塊可以嵌入到figure環境塊中,從而獲得標題、索引編號等。
\circle{直徑}繪制空心圓,\circle*{直徑}繪制實心圓。\bigcircle[線條樣式]{直徑}同上,區別只是可以定義線條樣式。\arc[線條樣式](圓弧起點偏移x′, 圓弧起點偏移y′){弧度},圓弧的圓心為\((x_c, y_c)\),則圓弧將從\((x′ + x_c, y′ + y_c)\)處開始繪制,逆時針方向為正弧度。- 可以使用
\put(x, y){圓或圓弧命令}指定圓心。 \line(l_x, l_y){f}繪制直線,其中\((l_x, l_y)\)決定直線的斜率,因此\(l_x\)與\(l_y\)兩數不能有公因數,長度值f與\((l_x, l_y)\)的運算結果決定直線的終點。\vector(l_x, l_y){f}繪制帶箭頭的向量線。- 可以使用
\put(x, y){線命令}為直線指定起始點。 \curve[p](x1,y1, …, xn,yn)兩個點即為直線,三個點拋物線,N個點就是連續曲線。\closecurve[p](x1,y1, …, xn,yn)至少需要3個點,然后繪制一條連結所有點的閉合曲線。\qbezier[N](x1,y1)(x2,y2)(x3,y3)繪制二次貝塞爾曲線。\oval(lx維度,ly維度)[t(op)/b(ottom)/l(eft)/r(ight)]繪制長\(l_x\)、高\(l_y\)的圓角矩形邊框,tblr及其組合決定繪出哪個部分。- 可以使用
\put(x,y){\oval(lx, ly)[part]}決定邊框的中心位置。 \put(x,y){atext}可以直接標記文本。\makebox(lx,ly)[pos]{atext}、\framebox(lx,ly)[pos]{atext}和\dashbox{dsize}(lx,ly)[pos]{atext}可以繪制\(l_x\)、高\(l_y\)的文本塊,pos是文本在框內的對齊方式t(op)/b(ottom)/l(eft)/r(ight)及其組合(未給出另一方向時,該方向默認居中)、c(enter)垂直且水平居中、s水平松散對齊且垂直居中。makebox無邊框,framebox實線框,dashbox是虛線框(dsize是虛線粗細)。\parbox[pos]{lx}{atext}類似makebox,也無邊框,但這個會根據lx確定的寬度將文本自動換行。\rotatebox{角度}{atext}將文本逆時針旋轉一定角度。- 可以使用
\put(x,y){邊框命令}定義邊框左下角坐標。
數學公式
數學公式可以采用行內公式方式嵌入文本當中,使用$amath$、\(amath\)或者環境塊\begin{math}amath\end{math}均可。
數學公式可以采用行間公式方式獨立成行,使用環境塊equation:
\begin{equation}
xˆ2 + yˆ2 = rˆ2
\label{eq:circ}
\end{equation}
若要公式不編號,可以使用以下方式之一:
- 使用
equation*環境塊 - 在公式后用
\nonumber或\notag結尾 - 使用
displaymath環境塊 - 用
\[amath\]包裹公式
若要更改公式編號樣式,則在公式后使用\tag{新樣式}
括號
\left和\right分別對應左右括號位置,之后跟具體括號樣式。(、)、[、]、\{、\}、|分別對應小、中、大括號和豎括號的樣式。\big、\Big、\bigg、\Bigg加上字母l或r,可以分別替換\left和\right,以形成更大尺寸的括號。
常用符號與函數
| 函數 | LaTeX語法 | 顯示 |
|---|---|---|
| 素數 | P' | \(P'\) |
| 標注 | \dot{x}, \ddot{x} (多個點就多個d) | \(\dot{x}, \ddot{x}\) |
| 上下標 | x_{ij}^ | \(x_{ij}^{2k}\) |
| 求和 | \sum_{i=1}^ | \(\sum_{i=1}^{20}\) |
| 求積 | \prod_{i=1}^ | \(\prod_{i=1}^{i=20}\) |
| 積分 | \int_a^b xy,dx (多層積分就多個i) | \(\int_a^b xy\,dx\) |
| 圍道積分 | \oint | \(\oint\) |
| 分式 | \frac{x} | \(\frac{x}{y}\) |
| 導數 | \nabla{f}, \frac{dx} | \(\nabla{f}, \frac{dx}{dy}\) |
| 偏導數 | \frac{\partial{y}}{\partial{x}} | \(\frac{\partial{y}}{\partial{x}}\) |
| 根 | \sqrt{x}, \sqrt[5] | \(\sqrt{x}, \sqrt[5]{xyz}\) |
| 極限 | \lim_{x\to 0}, \underset{x\to 0} | \(\lim_{x\to 0}, \underset{x\to 0}{\lim}\) |
| 存在 | \exists, \nexists | \(\exists, \nexists\) |
| 求模 | \mod{n^2}, \bmod{n^2}, \pmod{n^2}, \pod | \(\mod{n^2}, \bmod{n^2}, \pmod{n^2}, \pod{n^2}\) |
| 二項式 | \binom{n} | \(\binom{n}{k}\) |
常用運算符
- 二目運算符

- 關系運算符

參考鏈接
https://www.bilibili.com/read/cv7029088/
https://www.caam.rice.edu/~heinken/latex/symbols.pdf
公式組
使用多行表達式array、對齊表達式align、條件表達式cases等一些環境塊可以對多行公式進行修飾(對齊方式left/center/right),並在每行用&前綴對齊(eqnarray使用&&左右包裹對齊),在行末使用\label對每個公式獨立編號。它們既可以獨立使用,也可以嵌入equation當中使用。
公式默認是在行居中顯示的,可以使用環境塊flalign實現公式左對齊,換行時直接使用\\即可。
矩陣
矩陣使用環境塊matrix/pmatrix/bmatrix/vmatrix或者array包裹,元素間使用&分隔。
\begin{equation*}
\begin{matrix}
3a & b \\
c & 5d
\end{matrix}
\end{equation*}
\begin{equation*}
\left[\begin{array}{cccc}
k_{11} & k_{12} & \ldots & k_{1n}\\
k_{21} & k_{22} & \ldots & k_{2n}\\
\hdotsfor{4}\\
k_{n1} & k_{n2} & \ldots & k_{nn}
\end{array}\right]
\left\{\begin{array}{c}
x_1\\x_2\\
\hdotsfor{1}\\
x_n
\end{array}\right\}
=
\left\{\begin{array}{l}
f_1 + a\\
f_2\\
\hdotsfor{1}\\
f_n + c
\end{array}\right\}
\end{equation*}
其他
除以上內容外,還有制作目錄和索引、制作文獻引用、自定義環境塊和命令、制作幻燈片等一些功能,由於對我不常用,故未整理於此,有需要時再去翻翻書了,哈哈。
在LaTeX中繪制圖形更常用的方法是使用TikZ,那又需要單獨開一篇了,所以也未一並整理在此,見諒。
