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的页面相关参数及含义如下图:
其中的大多数参数都可以使用\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,那又需要单独开一篇了,所以也未一并整理在此,见谅。