家里的小孩正在读初中。由于远隔两地,只能周末偶尔联系对其进行辅导。而随着方程和函数的引入,语音和白板已经无法满足需要,要么辞不达意,要么不便整理和复习,所以我尝试着自学了LaTeX,制作成PDF文档发给小孩后,再进行语音辅导,效果提升明显。
本文就LaTeX最常用的功能,按照文档-段落-字体-表格-图片-数学应用的顺序,简要整理如下,方便随时查阅。
参考书目:LaTeX in 24 Hours: A Practical Guide for Scientific Writing
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{}等章节命令之后)的参数即可启用:
| 打印模式 | 奇偶页 | Article | Book | Report |
|---|---|---|---|---|
| 单面 | 奇 | Section + 页码 | Section + 页码 | Chapter + 页码 |
| 偶 | Section + 页码 | Chapter + 页码 | Chapter + 页码 | |
| 双面 | 奇 | SubSection + 页码 | Section + 页码 | Section + 页码 |
| 偶 | 页码 + Section | 页码 + Chapter | 页码 + Chapter |
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的字体属性包括:
\textrm,无衬线体\textsf,打字机体\texttt\textup、意大利体\textit、斜体\textsl、小型大写体\textsc、着重体\emph\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定义之。
表格整体布局的垂直对齐包括三种方式,可组合使用之。
使用!表示忽略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里的两条命令是实现单元格合并的主要工具:
象\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{file=myfig.eps, width=30mm, height=40mm, angle=30}:指定文件名、宽度、高度和逆时针旋转角度,将保持等比缩放\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}^{2k} | \(x_{ij}^{2k}\) |
| 求和 | \sum_{i=1}^{20} | \(\sum_{i=1}^{20}\) |
| 求积 | \prod_{i=1}^{i=20} | \(\prod_{i=1}^{i=20}\) |
| 积分 | \int_a^b xy,dx (多层积分就多个i) | \(\int_a^b xy\,dx\) |
| 围道积分 | \oint | \(\oint\) |
| 分式 | \frac{x}{y} | \(\frac{x}{y}\) |
| 导数 | \nabla{f}, \frac{dx}{dy} | \(\nabla{f}, \frac{dx}{dy}\) |
| 偏导数 | \frac{\partial{y}}{\partial{x}} | \(\frac{\partial{y}}{\partial{x}}\) |
| 根 | \sqrt{x}, \sqrt[5]{xyz} | \(\sqrt{x}, \sqrt[5]{xyz}\) |
| 极限 | \lim_{x\to 0}, \underset{x\to 0}{\lim} | \(\lim_{x\to 0}, \underset{x\to 0}{\lim}\) |
| 存在 | \exists, \nexists | \(\exists, \nexists\) |
| 求模 | \mod{n^2}, \bmod{n^2}, \pmod{n^2}, \pod{n^2} | \(\mod{n^2}, \bmod{n^2}, \pmod{n^2}, \pod{n^2}\) |
| 二项式 | \binom{n}{k} | \(\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,那又需要单独开一篇了,所以也未一并整理在此,见谅。
原文:https://www.cnblogs.com/Abbey/p/14812439.html