LaTeX 簡明指南


引言

家里的小孩正在讀初中。由於遠隔兩地,只能周末偶爾聯系對其進行輔導。而隨着方程和函數的引入,語音和白板已經無法滿足需要,要么辭不達意,要么不便整理和復習,所以我嘗試着自學了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的頁面相關參數及含義如下圖:

page_layout

其中的大多數參數都可以使用\setlength{參數命令}{新的值}來進行修改,比如\setlength{\textheight}{210mm},各參數的具體含義請參閱本文后續說明。

oddsidemarginevensidemargin是在啟用雙面印刷的選項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:欄的寬度,將根據textwidthcolumnsep計算得出

或者啟用包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定義,編號值本身則分別對應enumienumiienumiiienumiv

以下代碼將形成“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加上字母lr,可以分別替換\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}\)

常用運算符

  • 二目運算符
    binary_operator
  • 關系運算符
    relation_operator

參考鏈接

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,那又需要單獨開一篇了,所以也未一並整理在此,見諒。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM