添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
\documentclass{article} %指定文档使用的文档类
%导言区一般会使用\usepackage 调用宏包,以及会进行对文档的全局设置。
\begin{document}        %document 环境当中的内容是文档正文
``Hello world!'' from \LaTeX.
\end{document}
  
  • LaTeX 中命令以反斜线\ 开头,字母形式的LATEX 命令忽略其后的所有连续空格。如果要人为引入空格,需要在命令后面加一对花括号阻止其忽略空格, 比如\Tex\TeX{}
  • LATEX 中还包括环境,用以令一些效果在局部生效,或是生成特殊的文档元素。LATEX 环境的用法为一对命令\begin 和\end
  • 1.文档类

    \documentclass[⟨options⟩]{⟨class-name⟩}
    

    其中⟨class-name⟩ 为文档类的名称,如LaTeX 提供的article, book, report,在其基础上派生的一些文档类如支持中文排版的ctexart / ctexbook / ctexrep,或者有其它功能的一些文档类,如moderncv / beamer 等。

    可选参数⟨options⟩ 为文档类指定选项,以全局地规定一些排版的参数,如字号、纸张大小、单双面等等。比如调用article 文档类排版文章,指定纸张为A4 大小,基本字号为11pt,双面排版:\documentclass[11pt,twoside,a4paper]{article}

  • 10pt, 11pt, 12pt 指定文档的基本字号。默认为10pt
  • a4paper, letterpaper, … 指定纸张大小,默认为美式信纸letterpaper ($8:5\times 11$ 英寸)。可指定选项还包括a5paperb5paperexecutivepaper legalpaper
  • twoside, oneside 指定单面/双面排版。双面排版时,奇偶页的页眉页脚、页边距不同。article和report 默认为oneside,book 默认为twoside。
  • onecolumn, twocolumn 指定单栏/双栏排版。默认为onecolumn。
  • openright, openany 指定新的一章\chapter 是在奇数页(右侧)开始,还是直接紧跟着上一页开始。report 默认为openany,book 默认为openright。对article 无效。
  • landscape 指定横向排版。默认为纵向。
  • titlepage, notitlepage 指定标题命令\maketitle 是否生成单独的标题页。article 默认为notitlepage,report 和book 默认为titlepage。 fleqn 令行间公式左对齐。默认为居中对齐。 leqno 将公式编号放在左边。默认为右边。 draft, final 指定草稿/终稿模式。草稿模式下,断行不良的地方会在行尾添加一个黑色方块。默认为final。
  • 2. 宏包

    \usepackage[⟨options⟩]{⟨package-name⟩}
      
  • \usepackage 可以一次性调用多个宏包,在⟨package-name⟩ 中用逗号隔开。这种用法一般不要指定选项:
  • 宏包(包括前面所说的文档类)可能定义了许多命令和环境,或者修改了LATEX 已有的命令和环境。它们的用法说明记在相应宏包和文档类的帮助文档。在Windows 命令提示符或者Linux 终端下输入命令可查阅相应文档:texdoc ⟨pkg-name⟩
  • 3. LaTeX用到的文件

  • .sty 宏包文件。宏包的名称与文件名一致。
  • .cls 文档类文件。文档类名称与文件名一致。
  • .bib BIBTEX 参考文献数据库文件。
  • .bst BIBTEX 用到的参考文献格式模板。
  • 辅助文件和日志

  • .log 排版引擎生成的日志文件,供排查错误使用。
  • .aux LATEX 生成的主辅助文件,记录交叉引用、目录、参考文献的引用等。
  • .toc LATEX 生成的目录记录文件。
  • .lof LATEX 生成的图片目录记录文件。
  • .lot LATEX 生成的表格目录记录文件。
  • .bbl BIBTEX 生成的参考文献记录文件。
  • .blg BIBTEX 生成的日志文件。
  • .idx LATEX 生成的供makeindex 处理的索引记录文件。
  • .ind makeindex 处理.idx 生成的用于排版的格式化索引文件。
  • .ilg makeindex 生成的日志文件。
  • .out hyperref 宏包生成的PDF 书签记录文件。
  • 4.文件的组织方式

    LaTeX 提供了命令\include用来在源代码里插入文件:

    \include{⟨filename⟩}
    

    5 .只编译排查错误, 不生成文件

    介绍一个实用的工具宏包syntonly。加载这个宏包后,在导言区使用\syntaxonly命令,可令LATEX 编译后不生成DVI 或者PDF 文档,只排查错误,编译速度会快不少:

    \usepackage{syntonly}
    \syntaxonly
      
  • 如果想生成文档,则用% 注释掉\syntaxonly命令即可。
  • 6.澄清几个概念

    引擎 全称为排版引擎,是编译源代码并生成文档的程序,如pdfTeX、XeTeX 等。有时也称为编译器。

    格式 是定义了一组命令的代码集。LaTeX 就是最广泛应用的一个格式,高德纳本人还编写了一个简单的plain TeX 格式,没有定义诸如\documentclass 和\section 等等命令。

    编译命令 是实际调用的、结合了引擎和格式的命令。如xelatex 命令是结合XeTeX 引擎和LaTeX 格式的一个编译命令。

    TEX 引擎、格式及其对应的编译命令

  • **latex **虽然名为latex 命令,底层调用的引擎其实是pdfTEX。该命令生成dvi(Device Independent格式的文档,用dvipdfmx 命令可以将其转为pdf。
  • **pdflatex **底层调用的引擎也是pdfTeX,可以直接生成pdf 格式的文档。
  • xelatex 底层调用的引擎是XeTeX,支持UTF-8 编码和TrueType / OpenType 字体。当前较为方便的中文排版解决方案基于xelatex。
  • **lualatex **底层调用的引擎是LuaTEX,这个引擎在pdfTEX 引擎基础上发展而来,除了支持UTF-8 编码和TrueType / OpenType 字体外,还支持通过Lua 语言扩展TEX 的功能。lualatex 编译命令下的中文排版支持需要借助luatex-ja 宏包。
  • ASCII 编码 每个字节为八位(8-bit)
  • 扩展编码 在ASCII 之后,各种语言文字都发展了自己的编码,比如西欧语言的Latin-1,日本的Shift- JIS,中国大陆的GB2312-80 和GBK 等
  • UTF-8 编码 Unicode 是一个多国字符的集合,覆盖了几乎全球范围内的语言文字。UTF-8 是Unicode 的一套编码方案,一个字符可以由一个到四个字节编码,其中单字节字符兼容ASCII 编码。
  • latex 命令及pdflatex 命令下可以使用inputenc 宏包支持UTF-8 编码:\usepackage[utf8]{inputenc}
  • xelatex 和lualatex 命令原生支持UTF-8 编码将.tex源代码保存为UTF-8 编码,并借助fontspec 宏包调用适当的字体,就可以在源代码中输入任意语言的文字
  • ctex宏包和文档类, ctex宏包和文档类是对CJK xeCJK等宏包的进一步封装。ctex文档类包括ctexart / ctexrep/ ctexbook,是对LaTeX 的三个标准文档类的封装

    \documentclass{ctexart}
    \begin{document}
    中文\LaTeX{}排版。
    \end{document}
        

    特殊字符 # $ % & { } _ ^ ~ \ 这些字符在LaTeX 里有特殊用途, 如果想要输入以上符号,需要使用以下带反斜线的形式输入:\# \$ \% \& \{ \} \_ \^ \^{} \~{} \textbackslash

    反斜杠 \\ 被直接定义成了手动换行的命令,输入反斜杠就只好用\textbackslash

    连字 西文排版中经常会出现连字(Ligatures),常见的有ff / fi / fl / ffi / ffl

    It's difficult to find \ldots .\\
    It's dif{}f{}icult to f{}ind \ldots .
        

    标点符号 中文的标点符号(绝大多数为非ASCII 字符)使用中文输入法输入即可,一般不需要过多留意。而在英文标点符号上,有许多需要留意的地方。

    引号LaTeX 的单引号‘ ’ 和‘ 输入;双引号“ ” ` 和’’ 输入

    连字号和破折号连字号(hyphen)、短破折号(en-dash)和长破折号(em-dash)。它们分别有不同的用途:连字号- 用来组成复合词;短破折号– 用来连接数字表示范围;长破折号— 用来连接单词,与中文语境中的破折号用法类似。

  • 下划线,一个单词的话\underline{underlined}, 多个单词或需要换行的话用ulem宏包的\uline命令。
  • 斜体\emph 命令用来将文字变为斜体以示强调。如果在本身已经用\emph 命令强调的文字内部嵌套使用\emph 命令,内部则使用直立体文字
  • 5.断行和断页

    单词间距和断行, 断行的位置尽可能选取在两个单词之间,也就是用户在源文件中输入的“空格”, 我们可以使用字符~ 在合适的位置插入一个不会断行的空格(高德纳称之为tie,“带子”),通常用在英文人名、图表名称等场景

    手动断行和断页

    \\[⟨length⟩]
    \newline
          
  • \\ 可以带可选参数⟨length⟩,用于在换行处向下增加垂直间距, 而\newline不带可选参数
  • \\ 也在表格、公式等地方用于分行,而\newline只用于文本段落中。
  • \newpage
    \clearpage
          
  • 在双栏排版中\newpage只起到另起一栏的作用
  • 涉及到浮动体的排版上行为不同
  • \linebreak[⟨n⟩] \nolinebreak[⟨n⟩]
    \pagebreak[⟨n⟩] \nopagebreak[⟨n⟩]
        

    以上命令都带一个可选参数,用数字⟨n⟩ 代表适合/不适合的程度,取值范围为0-4,不带 可选参数时,缺省为4。比如\linebreak[3] 意味着此处在断行时优先考虑;\nopagebreak\nopagebreak[4] 意味着禁止在此处断页。以上命令适合给出优先考虑断行断页/禁止断行断页的位置,但不适合直接拿来断行或断页,使用\newline 或\newpage 等是更好的选择>

    断词 对于绝大部分单词,LaTeX 能够找到合适的断词位置,在断开的行尾加上连字符-。如果一些单词没能自动断词,我们可以在单词内手动使用\- 命令指定断词的位置

    三、文档元素

    1. 章节和目录

    1.1 章节标题

    \chapter{⟨title⟩} \section{⟨title⟩} \subsection{⟨title⟩}
    \subsubsection{⟨title⟩} \paragraph{⟨title⟩} \subparagraph{⟨title⟩}
      
  • \chapter 只在book 和report 文档类有定义
  • \part 命令,用来将整个文档分割为大的分块,但不影响\chapter \section 等的编号。
  • 带可选参数的变体:\section[⟨short title⟩]{⟨title⟩} 标题使用⟨title⟩ 参数,在目录和页眉页脚中使用⟨short title⟩ 参数;
  • 带星号的变体:\section*{⟨title⟩} 标题不带编号,也不生成目录项和页眉页脚。
  • article 文档类默认带编号的层级为\section / \subsection / \subsubsection 三级;
  • report/book 文档类默认带编号的层级为\chapter / \section / \subsection 三级
  • 标准文档类并未提供为\section 等章节命令定制格式的功能,这一功能由titlesec宏包提供
  • 1.2 目录

    \tableofcontents
      
  • \tableofcontents 生成的章节默认不写入目录(\section*\chapter*),可使用tocbibind 等宏包修改设置。
  • 正确生成目录项,一般需要编译两次源代码。
  • 有时我们使用了\chapter* 或\section* 这样不生成目录项的章节标题命令,而又想手动生成该章节的目录项,可以在标题命令后面使用\addcontentsline{toc}{⟨level⟩}{⟨title⟩}
  • titletoctocloft 等宏包提供了具体定制目录项格式的功能
  • 1.3 文档结构的划分

    \appendix 命令将正文和附录分开,使用\appendix后,最高一级章节改为使用拉丁字母编号,从A 开始。

    \frontmatter 前言部分,页码为小写罗马字母格式;其后的\chapter 不编号。

    \mainmatter 正文部分,页码为阿拉伯数字格式,从1 开始计数;其后的章节编号正常。

    \backmatter 后记部分,页码格式不变,继续正常计数;其后的\chapter 不编号。

    book 文档类的文档结构示例。

    \documentclass[...]{book}
    % 导言区,加载宏包和各项设置,包括参考文献、索引等
    \usepackage{...}
    \usepackage{makeidx}
    \makeindex
    \bibliographystyle{...}
    \begin{document}
    \frontmatter
    \maketitle % 标题页
    \include{preface} % 前言章节preface.tex
    \tableofcontents
    \mainmatter
    \include{chapter1} % 第一章chapter1.tex
    \include{chapter2} % 第二章chapter2.tex
    \appendix
    \include{appendixA} % 附录A appendixA.tex
    \backmatter
    \include{prologue} % 后记prologue.tex
    \bibliography{...} % 利用BibTeX 工具生成参考文献
    \printindex % 利用makeindex 工具生成索引
    \end{document}
        
    \title{Test title}
    \author{ Mary\thanks{E-mail:*****@***.com}
    \and Ted\thanks{Corresponding author}
    \and Louis}
    \date{\today}
      
  • article 文档类的标题默认不单独成页,而report 和book 默认单独成页。可在\documentclass 命令调用文档类时指定titlepage / notitlepage 选项以修改默认的行为。
  • 3. 交叉引用

    在能够被交叉引用的地方,如章节、公式、图表、定理等位置使用\label命令:

    \label{⟨label-name⟩}
    

    之后可以在别处使用\ref \pageref 命令,分别生成交叉引用的编号和页码

    \ref{⟨label-name⟩} \pageref{⟨label-name⟩}
      
  • 为了生成正确的交叉引用,一般也需要多次编译源代码。
  • \label 命令可用于记录各种类型的交叉引用,使用位置分别为:
  • 章节标题 在章节标题命令\section 等之后紧接着使用。 行间公式 单行公式在公式内任意位置使用;多行公式在每一行公式的任意位置使用。 有序列表 在enumerate 环境的每个\item 命令之后、下一个\item 命令之前任意位置使用。 图表标题 在图表标题命令\caption 之后紧接着使用。 定理环境 在定理环境内部任意位置使用。
  • 在使用不记编号的命令形式(\section*\caption*、带可选参数的\item 命令等)时不 要使用\label 命令,否则生成的引用编号不正确。
  • 4. 脚注和边注

    使用\footnote 命令可以在页面底部生成一个脚注

    \footnote{⟨footnote⟩}
      
  • 有些情况下(比如在表格环境、各种盒子内)使用\footnote 并不能正确生成脚注。我们可以分两步进行,先使用\footnotemark 为脚注计数,再在合适的位置用\footnotetext 生成脚注。比如:
  • 使用\marginpar 命令可在边栏位置生成边注

    \marginpar[⟨left-margin⟩]{⟨right-margin⟩}
      
  • 如果只给定了⟨right-margin⟩,那么边注在奇偶数页文字相同;如果同时给定了⟨left-margin⟩,则偶数页使用⟨left-margin⟩ 的文字。
  • \marginpar{\footnotesize 边注较窄,不要写过多文字,最好设置较小的字号。}
    

    5. 特殊环境

    5.1 列表

    了基本的有序和无序列表环境enumerate itemize,两者的用法很类似,都用\item 标明每个列表项。enumerate 环境会自动对列表项编号。

    \begin{enumerate}
    \item\end{enumerate}
    \renewcommand{\labelitemi}{\ddag}
    \renewcommand{\labelitemii}{\dag}
    \begin{itemize}
        \item First item
        \begin{itemize}
            \item Subitem
            \item Subitem
        \end{itemize}
        \item Second item
    \end{itemize}
        

    默认的列表间距比较宽,LaTeX 本身也未提供方便的定制功能,可用enumitem宏包定制各 种列表间距。enumitem宏包还提供了对列表标签、引用等的定制。有兴趣的读者可参考其帮助

    5.2对齐环境

    center、flushleft 和flushright 环境分别用于生成居中、左对齐和右对齐的文本环境。

    \begin{center}\end{center}
    \begin{flushleft}\end{flushleft}
    \begin{flushright}\end{flushright}
    
    %示例代码
    \begin{center}
    Centered text using a
    \verb|center| environment.
    \end{center}
    \begin{flushleft}
    Left-aligned text using a
    \verb|flushleft| environment.
    \end{flushleft}
    \begin{flushright}
    Right-aligned text using a
    \verb|flushright| environment.
    \end{flushright}
    

    除此之外,还可以用以下命令直接改变文字的对齐方式:

    \centering \raggedright \raggedleft
    
    %示例代码
    \centering
    Centered text paragraph.
    \raggedright
    Left-aligned text paragraph.
    \raggedleft
    Right-aligned text paragraph.
      
  • center 等环境会在上下文产生一个额外间距,而\centering 等命令不产生,只是改变对齐方式。比如在浮动体环境table 或figure 内实现居中对齐,用\centering 命令即可,没必要再用center 环境。
  • 5.3 引用环境

  • quote用于引用较短的文字,首行不缩进;quotation用于引用若干段文字,首行缩进。
  • 引用环境较一般文字有额外的左右缩进。
  • verse 用于排版诗歌,与quotation 恰好相反,verse 是首行悬挂缩进的。
  • 5.4 代码环境

    代码环境verbatim,它以等宽字体排版代码,回车和空格也分别起到换行和空位的作用;带星号的版本更进一步将空格显示成␣。

    要排版简短的代码或关键字,可使用\verb 命令:

    \verbdelim⟩code⟩⟨delim⟩
      
  • \verb 命令对符号的处理比较复杂,一般不能用在其它命令的参数里,否则多半会出错。
  • verbatim 宏包优化了verbatim 环境的内部命令,并提供了\verbatiminput 命令用来直接 读入文件生成代码环境。fancyvrb 宏包提供了可定制格式的Verbatim 环境;listings 宏包更进一 步,可生成关键字高亮的代码环境,支持各种程序设计语言的语法和关键字。详情请参考各自的 帮助文档。
  • 6. 表格

    \begin{tabular}{⟨column-spec⟩}
    ⟨item1⟩ & ⟨item2⟩ & … \\
    \hline
    ⟨item1⟩ & ⟨item2⟩ & … \\
    \end{tabular}
    

    ⟨column-spec⟩ 是列格式标记,在接下来的内容将仔细介绍;& 用来分隔单元格;\\用来换行;\hline 用来在行与行之间绘制横线。

    直接使用tabular 环境的话,会和周围的文字混排, 通常情况下我们不这么用,tabular 环境一般会放置在table 浮动体环境中,并用\caption 命令加标题。

    array 宏包提供了辅助格式> 和<,用于给列格式前后加上修饰命令

    \begin{tabular}{>{\itshape}r<{*}l}%示例将某行意大利斜体。并在后面加上*号
    \begin{tabular}{>{\centering\arraybackslash}p{9em}} %示例在p环境中居中对齐
            

    array 宏包还提供了类似p 格式的m 格式和b格式,三者分别在垂直方向上靠顶端对齐、居 中以及底端对齐。

    %示例代码
    \newcommand\txt
    {a b c d e f g h i}
    \begin{tabular}{cp{2em}m{2em}b{2em}}
    \hline
    pos & \txt & \txt & \txt \\
    \hline
    \end{tabular}
            

    在科技论文排版中广泛应用的表格形式是三线表,形式干净简明。三线表由booktabs 宏包 支持,它提供了\toprule\midrule\bottomrule 命令用以排版三线表的三条线,以及和 \cline 对应的\cmidrule。除此之外,最好不要用其它横线以及竖线

    %示例代码
    \begin{tabular}{cccc}
        \toprule
            & \multicolumn{3}{c}{Numbers} \\
            \cmidrule{2-4}
            & 1 & 2 & 3 \\
            \midrule
            Alphabet & A & B & C \\
            Roman & I & II& III \\
        \bottomrule
    \end{tabular}
        

    ⟨n⟩ 为要合并的列数,⟨column-spec⟩ 为合并单元格后的列格式,只允许出现一个l/c/rp 格式。如果合并前的单元格前后带表格线|,合并后的列格式也要带| 以使得表格的竖线一致。

    %示例代码
    \begin{tabular}{|c|c|c|}
    \hline
    1 & 2 & Center \\ \hline
    \multicolumn{2}{|c|}{3} &
    \multicolumn{1}{r|}{Right} \\ \hline
    4 & \multicolumn{2}{c|}{C} \\ \hline
    \end{tabular}
            

    如果不需要为“拆分的单元格”画线,并且只在垂直方向“拆分”的话,makecell 宏包提供的\makecell 命令是一个简单的解决方案:

    \begin{tabular}{|c|c|}
        \hline
        a & \makecell{d1 \\ d2} \\
        \hline
        b & c \\
        \hline
    \end{tabular}
        

    另外graphicx 宏包还提供了\graphicspath 命令,用于声明一个或多个图片文件存放的目录,使用这些目录里的图片时可不用写路径:

    % 假设主要的图片放在figures 子目录下,标志放在logo 子目录下
    \graphicspath{ {figures/} {logo/} }
        

    \includegraphics 命令的可选参数⟨options⟩ 支持⟨key⟩=⟨value⟩ 形式赋值

    8. 盒子

    ​ 盒子是LATEX 排版的基础单元,虽然解释上去有些抽象:每一行是一个盒子,里面的文字从左到右依次排列;每一页也是一个盒子,各行文字从上到下依次排布……颇有一些活字印刷术的味道。不管如何,LATEX 提供了一些命令让我们生成一些有特定用途的盒子。

    8.1 水平盒子

    \mbox{}
    \makebox[⟨width⟩][⟨align⟩]{}
        

    \mbox生成一个基本的水平盒子,内容只有一行,不允许分段(除非嵌套其它盒子,比如后文的垂直盒子)。外表看上去,\mbox 的内容与正常的文本无二,不过断行时文字不会从盒子里断开。

    \makebox 更进一步,可以加上可选参数用于控制盒子的宽度⟨width⟩,以及内容的对齐方式⟨align⟩,可选居中c(默认值)、左对齐l、右对齐r 和分散对齐s

    %示例代码
    |\mbox{Test some words.}|\\
    |\makebox[10em]{Test some words.}|\\
    |\makebox[10em][l]{Test some words.}|\\
    |\makebox[10em][r]{Test some words.}|\\
    |\makebox[10em][s]{Test some words.}|
    \framebox[10em][r]{Test box}\\[1ex]
    \setlength{\fboxrule}{1.6pt}
    \setlength{\fboxsep}{1em}
    \framebox[10em][r]{Test box}
    

    8.3 垂直盒子

    \parbox[⟨align⟩][⟨height⟩][⟨inner-align⟩]{⟨width⟩}{}
    \begin{minipage}[⟨align⟩][⟨height⟩][⟨inner-align⟩]{⟨width⟩}
    \end{minipage}
    

    其中⟨align⟩ 为盒子和周围文字的对齐情况(类似tabular 环境);⟨height⟩ ⟨inner-align⟩设置盒子的高度和内容的对齐方式,类似水平盒子\makebox 的设置,不过⟨inner-align⟩ 接受的参数是顶部t、底部b、居中c 和分散对齐s

    %示例代码
    三字经:\parbox[t]{3em}%
    {人之初性本善性相近习相远}
    \quad
    \begin{minipage}[b][8ex][t]{4em}
    天地玄黄宇宙洪荒
    \end{minipage}
      
  • 如果在minipage 里使用\footnote 命令,生成的脚注会出现在盒子底部,编号是独立的,并且使用小写字母编号。而在\parbox 里无法正常使用\footnote 命令,只能在盒子里使用\footnotemark,在盒子外使用\footnotetext。
  • 8.4 标尺盒子

    \rule 命令用来画一个实心的矩形盒子,也可适当调整以用来画线(标尺)

    \rule[⟨raise⟩]{⟨width⟩}{⟨height⟩}
    
    %示例代码
    Black \rule{12pt}{4pt} box.
    Upper \rule[4pt]{6pt}{8pt} and
    lower \rule[-4pt]{6pt}{8pt} box.
    A \rule[-.4pt]{3em}{.4pt} line.
    

    9. 浮动体

    LaTeX 预定义了两类浮动体环境figure 和table,令大块的内容可以脱离上下文,放置在合适的位置。

    \begin{table}[⟨placement⟩]
    \end{table}
    

    ⟨placement⟩ 参数提供了一些符号用来表示浮动体允许排版的位置,如hbp 允许浮动体排版在当前位置、底部或者单独成页。table figure 浮动体的默认设置为tbp

  • 排版位置的选取与参数里符号的顺序无关,LATEX 总是以h-t-b-p 的优先级顺序决定浮动体位置。也就是说[!htp] 和[ph!t] 没有区别
  • 限制包括浮动体个数(除单独成页外,默认每页不超过3 个浮动体,其中顶部不超过2 个,底部不超过1 个)以及浮动体空间占页面的百分比(默认顶部不超过70%,底部不超过30%)
  • 双栏排版环境下,LATEX 提供了table* figure* 环境用来排版跨栏的浮动体, 用法与table figure 一样,不同之处为双栏的⟨placement⟩ 参数只能用tp 两个位置。
  • \clearpage 命令会在另起一页之前,先将所有推迟处理的浮动体排版成页,此时htbp 等位置限制被完全忽略。
  • float 宏包为浮动体提供了H 位置参数,不与htbp 及! 混用。使用H 位置参数时,会取消浮动机制,将浮动体视为一般的盒子插入当前位置。这在一些特殊情况下很有用(如使用multicol宏包排版分栏内容的时候),但尺寸过大的浮动体可能使得分页比较困难。
  • 9.1 浮动体的标题

    图表等浮动体提供了\caption 命令加标题,并且自动给浮动体编号

    \caption{}%带编号
    \caption*{}%不带编号
    \caption[…]{}%在目录里使用短标题
      
  • \caption命令之后还可以紧跟\label 命令标记交叉引用。
  • \caption 生成的标题形如“Figure 1: …”(figure 环境)或“Table 1: …”(table 环境)。可通过修改\figurename \tablename 的内容来修改标题的前缀。标题样式的定制功能由caption 宏包提供,
  • table 和figure 两种浮动体分别有各自的生成目录的命令:\listoftables\listoffigures 它们类似\tableofcontents 生成单独的章节。
  • 9.2 并排和子图表

    %一个标题
    \begin{figure}[htbp]
        \centering
        \includegraphics[width=...]{...}
        \qquad
        \includegraphics[width=...]{...} \\[..pt]
        \includegraphics[width=...]{...}
        \caption{...}
    \end{figure}
    %多个标题
    \begin{figure}[htbp]
        \centering
        \begin{minipage}{...}
            \centering
            \includegraphics[width=...]{...}
            \caption{...}
        \end{minipage}
        \qquad
        \begin{minipage}{...}
            \centering
            \includegraphics[width=...]{...}
            \caption{...}
        \end{minipage}
    \end{figure}
    %小标题,用到subfig 宏包的功能
    \begin{figure}[htbp]
        \centering
        \subfloat[...]{\label{sub-fig-1}% 为子图加交叉引用
            \begin{minipage}{...}
                \centering
                \includegraphics[width=...]{...}
            \end{minipage}
        \qquad
        \subfloat[...]{ %
            \begin{minipage}{...}
                \centering
                \includegraphics[width=...]{...}
            \end{minipage}
        \caption{...}
    \end{figure}
    

    四、排版数学公式

    1. AMS宏集

    AMS 宏集合是美国数学学会(AmericanMathematical Society) 提供的对LaTeX 原生的数学公式排版的扩展,其核心是amsmath 宏包,对多行公式的排版提供了有力的支持。此外,amsfonts 宏包以及基于它的amssymb 宏包提供了丰富的数学符号;amsthm 宏包扩展了LATEX 定理证明格式。

    2.公式排版基础

  • 行内公式由一对$符号包裹
  • 单独成行的行间公式在LaTeX 里由equation 环境包裹, equation 环境为公式自动生成一个编号,这个编号可以用\label 和\ref 生成交叉引用。
  • amsmath\eqref 命令甚至为引用自动加上圆括号;还可以用\tag 命令手动修改公式的编号,或者用\notag 命令取消为公式编号(与之基本等效的命令是\nonumber)。
  • 需要直接使用不带编号的行间公式,则将公式用命令\[\] 包裹1,与之等效的是displaymath 环境。有的人更喜欢equation* 环境.
  • 行间公式的对齐、编号位置等性质由文档类选项控制,文档类的fleqn 选项令行间公式左对齐;leqno 选项令编号放在公式左边。
  • 数学模式中输入的空格被忽略。数学符号的间距默认由符号的性质(关系符号、运算符等)决定。需要人为引入间距时,使用\quad\qquad 等命令。
  • 不允许有空行(分段)。行间公式中也无法用\\ 命令手动换行。
  • 所有的字母被当作数学公式中的变量处理,字母间距与文本模式不一致,也无法生成单词之间的空格。如果想在数学公式中输入正体的文本,简单情况下可用\mathrm命令。或者用amsmath 提供的\text 命令.
  • 一般符号 $\alpha$(\alpha)、$\beta$ (\beta) 、$\Gamma$ (\Gamma)、$\Delta$ (\Delta) 、$\infty$ (\infty),$\dots$ (\dots) 、$\cdots$ (\cdots)、$\vdots$(\vdots)、$\ddots$(\ddots)

  • \ldots 和\dots 是完全等效的,它们既能用在公式中,也用来在文本里作为省略号
  • 指数、上下标和导数

  • ^_ 标明上下标。注意上下标的内容(子公式)一般需要用花括号包裹,否则上下标只对后面的一个符号起作用。
  • 导数符号’() 是一类特殊的上标
  • 分式和根式

  • 分式使用\frac{分子}{分母} 来书写
  • amsmath 提供了方便的命令\dfrac\tfrac,令用户能够在行内使用正常大小的分式,或是反过来。
  • 一般的根式使用\sqrt{...};表示n 次方根时写成\sqrt[n]{...}
  • 特殊的分式形式,如二项式结构,由amsmath 宏包的\binom 命令生成:$\binom{n}{k} =\binom{n-1}{k}-\binom{n-1}{k-1}$
  • 直接输入的=,>,<
  • 不等号$\ne$ (\ne)、大于等于号$\ge$ (\ge) 和小于等于号$\le$ (\le)、约等号$\approx$ (\approx)、等价$\equiv$(\equiv)、正比$\propto$ (\propto)、相似$\sim$(\sim) 等等
  • 自定义二元关系符的命令\stackrel,用于将一个符号叠加在原有的二元关系符之上:$f_n(x) \stackrel{*}{\approx} 1$
  • +、-、*、=直接键盘输入

    乘号$\times$ (\times)、除号$\div$ (\div)、点乘$\cdot$(\cdot)、加减号$\pm$(\pm) / $\mp$ (\mp)

    $\nabla$ (\nabla) 、$\partial$ (\partial)

    算符的函数名称一览。

    amsmath 允许用户用\DeclareMathOperator 定义自己的算符,其中带星号的命令定义带上下限的算符:

    \DeclareMathOperator{\argh}{argh}
    \DeclareMathOperator*{\nut}{Nut}
            

    巨算符的上下标位置可由\limits\nolimits 控制,前者令巨算符类似lim 或求和算符$\sum$,上下标位于上下方;后者令巨算符类似积分号,上下标位于右上方和右下方。$\sum \limits_{x=1}^n$、$\sum \nolimits_{x=1}^n$

    amsmath 宏包还提供了\substack,能够在下限位置书写多行表达式;subarray 环境更进 一步,令多行表达式可选择居中(c) 或左对齐(l):

    %示例代码
    \sum_{\substack{0\le i\le n \\
    j\in \mathbb{R}}}
    P(i,j) = Q(n)
    \sum_{\begin{subarray}{l}
        0\le i\le n \\
        j\in \mathbb{R}
    \end{subarray}}
    P(i,j) = Q(n)
            

    $\dot{r}$(\dot{r})、$\ddot{r}$ (\ddot{r})、$\vec{r}$ (\vec{r}) 、$\hat{\mathbf{e}}$ (\hat{\mathbf{e}})

  • 使用时要注意重音符号的作用区域,一般应当对某个符号而不是“符号加下标”使用重音
  • 包括直接画线的\overline \underline 命令,宽重音符号\widehat、表示向量的箭头\overrightarrow
  • \overbrace \underbrace 命令用来生成上/下括号,各自可带一个上/下标公式。
  • $\rightarrow$ \rightarrow (或\to)、$\leftarrow$ \leftarrow( 或\gets)
  • amsmath 的\xleftarrow\xrightarrow 命令提供了长度可以伸展的箭头,并且可以为 箭头增加上下标:$c\xrightarrow[x<y]{abc}d $ ( c\xrightarrow[x<y]{a*b*c}d )
  • 括号和定界符

  • 小括号()、中括号[]、大括号{}(\{\})、尖括号⟨⟩ (\langle \rangle
  • \left\right 命令可令括号(定界符)的大小可变,在行间公式中常用。
  • \left\right 必须成对使用。需要使用单个定界符时,另一个定界符写成\left. \right.
  • 我们还可以用\big\Big\bigg\Bigg等命令生成固定大小的定界符。更常用的形式是类似\left\bigl\biggl 等,以及类似\right \bigr\biggr 等(\bigl\bigr 不必成对出现)。
  • \left \right 分界符包裹的公式块是不允许断行的,也不允许在多行公式里跨行使用 ,而\big\bigg 等命令不受限制。
  • amsmath 宏包的multline 环境提供了书写折行长公式的方便环境。它允许用\\ 折行,将公式编号放在最后一行。多行公式的首行左对齐,末行右对齐,其余行居中。

    \begin{multline}
    a + b + c + d + e + f
    + g + h + i \\
    = j + k + l + m + n\\
    = o + p + q + r + s\\
    = t + u + v + x + z
    \end{multline}
            

    multline* 环境排版不带编号的折行长公式。

    5. 数组和矩阵

    为了排版二维数组,LATEX 提供了array 环境,用法与tabular 环境极为类似,也需要定义列格式,并用\\ 换行。数组可作为一个公式块,在外套用\left\right 等定界符:

  • amsmath 提供的cases 环境比array环境更轻松地完成下面的效果。
  • %使用array
    \[ |x| = \left\{
    \begin{array}{rl}
    -x & \text{if } x < 0,\\
    0 & \text{if } x = 0,\\
    x & \text{if } x > 0.
    \end{array} \right. \]
    %使用case
    \[ |x| =
    \begin{cases}
    -x & \text{if } x < 0,\\
    0 & \text{if } x = 0,\\
    x & \text{if } x > 0.
    \end{cases} \]
              amsmath 宏包还直接提供了多种排版矩阵的环境,包括不带定界符的matrix,以及带各种定界符的矩阵pmatrix(()、bmatrix([)、Bmatrix({)、vmatrix($
              $)、Vmatrix($|$)
    \begin{bmatrix}
    x_{11} & x_{12} & \ldots & x_{1n}\\
    x_{21} & x_{22} & \ldots & x_{2n}\\
    \vdots & \vdots & \ddots & \vdots\\
    x_{n1} & x_{n2} & \ldots & x_{nn}\\
    \end{bmatrix}
      
  • 注意微元里的d 用的是直立体:$\int_a^b f(x)\mathrm{d}x \qquad \int_a^b f(x)\,\mathrm{d}x$( \int_a^b f(x)\mathrm{d}x \qquad \int_a^b f(x)\,\mathrm{d}x)
  • amsmath 提供二重积分\iint、三重积分\iiint
  • 7. 数学符号的字体控制

    数学字母字体 $\mathcal{R} \quad \mathfrak{R} \quad \mathbb{R}$ (\mathcal{R} \quad \mathfrak{R} \quad \mathbb{R})

    {\sum_{i=1}^n (x_i- x)(y_i- y)} {\displaystyle \left[ \sum_{i=1}^n (x_i-x)^2 \sum_{i=1}^n (y_i-y)^2 \right]^{1/2} }
  • ⟨theorem environment⟩ 为定理环境的名称。原始的LaTeX 里没有现成的定理环境,不加定义而直接使用很可能会出错。⟨title⟩ 是定理环境的标题(“定理”,“公理”等)。
  • ⟨section level⟩ 为章节级别,如chapter、section 等,定理序号成为章节的下一级序号;
  • ⟨counter⟩ 为用\newcounter 自定义的计数器名称,定理序号由这个计数器管理。
  • %示例代码
    \newtheorem{mythm}{My Theorem}[section]
    \begin{mythm}\label{thm:light}
    The light speed in vacuum
    is $299,792,458\,\mathrm{m/s}$.
    \end{mythm}
    \begin{mythm}[Energy-momentum relation]
    The relationship of energy,
    momentum and mass is
    \[E^2 = m_0^2 c^4 + p^2 c^2\]
    where $c$ is the light speed
    described in theorem \ref{thm:light}.
    \end{mythm}
    

    默认的定理环境格式为粗体标签、斜体正文、定理名用小括号包裹,如果需要修改格式,则要依赖其它的宏包,如amsthm、ntheorem 等等。

  • amsthm 提供了\theoremstyle 命令支持定理格式的切换,在用\newtheorem 命令定义定理环境之前使用。amsthm 预定义了三种格式用于\theoremstyleplain 和LaTeX 原始的格式一致;definition 使用粗体标签、正体内容;remark 使用斜体标签、正体内容。
  • %定义的jury 环境与law 环境共用编号,mar 环境不编号:
    \theoremstyle{definition} \newtheorem{law}{Law}
    \theoremstyle{plain} \newtheorem{jury}[law]{Jury}
    \theoremstyle{remark} \newtheorem*{mar}{Margaret}
      
  • amsthm 还支持使用\newtheoremstyle 命令自定义定理格式,更为方便使用的是ntheorem 宏包。感兴趣的读者可参阅它们的帮助文档。
  • amsthm 还提供了一个proof 环境用于排版定理的证明过程。proof 环境末尾自动加上一个证毕符号

    如果行末是一个不带编号的公式, 符号会另起一行,这时可使用\qedhere 命令将符号放在公式末尾:

    证毕符号本身被定义在命令\qedsymbol 中,如果有使用实心符号作为证毕符号的需求,需要自行用\renewcommand 命令修改

    %示例代码
    \renewcommand{\qedsymbol}{\rule{1ex}{1.5ex}}
    \begin{proof}
    For simplicity, we use
    E=mc^2 \qedhere
    \end{proof}
        
    \setmainfont[⟨font features⟩]{⟨font name⟩}
    \setsansfont[⟨font features⟩]{⟨font name⟩}
    \setmonofont[⟨font features⟩]{⟨font name⟩}
            

    ⟨font name⟩ 使用字体的文件名(带扩展名)或者字体的英文名称。⟨font features⟩ 用来手动配置对应的粗体或斜体,比如为Windows 下的无衬线字体Arial 配置粗体和斜体

    \setsansfont[BoldFont={Arial Bold}, ItalicFont={Arial Italic}]{Arial}
        
    \setCJKmainfont[⟨font features⟩]{⟨font name⟩}
    \setCJKsansfont[⟨font features⟩]{⟨font name⟩}
    \setCJKmonofont[⟨font features⟩]{⟨font name⟩}
        

    LaTeX 预定义了大量的长度变量用于控制版面格式。如页面宽度和高度、首行缩进、段落间距等。如果需要自定义长度变量,需使用\newlength命令,长度变量可以用\setlength 赋值,或用\addtolength 增加长度:

    \newlength{\⟨length command⟩}
    \setlength{\⟨length command⟩}{⟨length⟩}
    \addtolength{\⟨length command⟩}{⟨length⟩}
    {\linespread{2.0}\selectfont
    The baseline skip is set to be
    twice the normal baseline skip.
    Pay attention to the \verb|\par|
    command at the end. \par}
        

    字号的改变是即时生效的,而行距的改变直到文字分段时才生效。

    2.3 段落格式

    以下长度分别为段落的左缩进、右缩进和首行缩进:

    \setlength{\leftskip}{⟨length⟩}
    \setlength{\rightskip}{⟨length⟩}
    \setlength{\parindent}{⟨length⟩}
      
  • \hspace 命令生成的水平间距如果位于一行的开头或末尾,则有可能因为断行而被“吞掉”。可使用\hspace* 命令代替\hspace 命令得到不会因断行而消失的水平间距。
  • 命令\stretch{⟨n⟩} 生成一个特殊弹性长度,参数⟨n⟩ 为权重。它的基础长度为0pt,但可以无限延伸,直到占满可用的空间。如果同一行内出现多个\stretch{⟨n⟩},这一行的所有可用空间将按每个\stretch 命令给定的权重⟨n⟩ 进行分配。
  • \quad\qquad 命令, 分别相当于\hspace{1em} \hspace{2em}
  • 2.5 垂直间距

    A paragraph.
    \vspace{2ex}
    Another paragraph.
      
  • `vspace 命令生成的垂直间距在一页的顶端或底端可能被“吞掉”,类似\hspace 在一行的开头和末尾那样。对应地,\vspace* 命令产生不会因断页而消失的垂直间距。\vspace 也可用\stretch `设置无限延伸的垂直长度。
  • 在段落内的两行之间增加垂直间距,一般通过给断行命令\\ 加可选参数,如\\[6pt]\\*[6pt]\vspace 也可以在段落内使用,区别在于\vspace 只引入垂直间距而不断行:

  • LaTeX 还提供了\bigskip, \medskip, \smallskip 来增加预定义长度的垂直间距。
  • 3. 页面和分栏

    geometry 宏包的调用方式类似于graphicx,在latex + dvipdfmx 命令下需要指定选项 dvipdfm (注意这里不是dvipdfmx);pdflatex 和xelatex 编译命令下不需要。

    \usepackage{geometry}
    \geometry{⟨geometry-settings⟩}
    \usepackage[⟨geometry-settings⟩]{geometry}
      
  • \twocolumn 支持带一个可选参数,用于排版双栏之上的一部分单栏内容。
  • 切换单/双栏排版时总是会另起一页(\clearpage)
  • 在双栏模式下使用\newpage 会换栏而不是换页;\clearpage 则能够换页。
  • 双栏排版时每一栏的宽度为\columnwidth,它由\textwidth 减去\columnsep 的差除以2 得到。两栏之间还有一道竖线,宽度为\columnseprule,默认为零,也就是看不到竖线。
  • 一个比较好用的分栏解决方案是multicol,它提供了简单的multicols 环境(注意不要写成multicol 环境)自动产生分栏,如以下环境将内容分为3 栏:

    \begin{multicols}{3}
    \end{multicols}
      
  • multicol 宏包能够在一页之中切换单栏/多栏,也能处理跨页的分栏且各栏的高度分布平
  • 在multicols 环境中无法正常使用table figure 等浮动体环境,它会直接让浮动体丢失。multicols 环境中只能用跨栏的table*figure* 环境,或者用float 宏包提供的H 参数固定浮动体的位置。
  • 4. 页眉和页脚

    命令\pagestyle 来修改页眉页脚的样式\pagestyle{⟨page-style⟩}

    命令\thispagestyle 只影响当页的页眉页脚样式:\thispagestyle{⟨page-style⟩}

    ⟨page-style⟩ 参数为样式的名称

  • article 文档类,twoside 选项偶数页为页码和节标题,奇数页为小节标题和页码;
  • article 文档类,oneside 选项页眉为节标题和页码;
  • book/report 文档类,twoside 选项偶数页为页码和章标题,奇数页为节标题和页码;
  • book/report 文档类,oneside 选项页眉为章标题和页码。
  • \pagenumbering 命令令我们能够改变页眉页脚中的页码样式:

    \pagenumbering{⟨style⟩}

  • ⟨style⟩ 为页码样式,默认为arabic(阿拉伯数字),还可修改为roman(小写罗马数字)、Roman(大写罗马数字)等。注意使用\pagenumbering 命令后会将页码重置为1。
  • 对于headings 或者myheadings 样式,LATEX 允许用户使用命令手动修改页眉上面的内容,

    \markright{⟨right-mark⟩}
    \markboth{⟨left-mark⟩}{⟨right-mark⟩}
          
  • ⟨left-mark⟩ ⟨right-mark⟩ 的内容分别预期出现在左页(偶数页)和右页(奇数页)
  • 默认将页眉的内容都转为大写字母。如果你不喜欢这样,可以尝试以下代码

    \renewcommand\chaptermark[1]{\markboth{Chapter \thechapter\quad #1}{}}
    \renewcommand\sectionmark[1]{\markright{\thesection\quad #1}}
          
  • 以上代码适用于report/book 文档类。对于article 文档类,与两个页眉相关的命令分别为\sectionmark \subsectionmark
  • fancyhdr 宏包

    \pagestyle{fancy}
        
    \fancyhf[⟨position⟩]{}
    \fancyhead[⟨position⟩]{}
    \fancyfoot[⟨position⟩]{}
            
    %fancyhdr 基础用法的一个示例,效果为将章节标题放在和headings 一致的位置,但使用加粗格式;页码都放在页脚正中;修改横线宽度,“去掉”页脚的横线。
    % 在导言区使用此代码
    \usepackage{fancyhdr}
    \pagestyle{fancy}
    \renewcommand{\chaptermark}[1]{\markboth{#1}{}}
    \renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
    \fancyhf{}
    \fancyfoot[C]{\bfseries\thepage}
    \fancyhead[LO]{\bfseries\rightmark}
    \fancyhead[RE]{\bfseries\leftmark}
    \renewcommand{\headrulewidth}{0.4pt} % 注意不用\setlength
    \renewcommand{\footrulewidth}{0pt}
      
  • ⟨citation⟩ 为引用的参考文献的标签,类似\ref 里的参数;
  • \cite 带一个可选参数,为引用的编号后加上额外的内容,如\cite[page 22]{Paper2013} 可能得到形如[13, page 22] 这样的引用。
  • ⟨item number⟩ 自定义参考文献的序号,如果省略,则按自然排序给定序号。
  • ⟨widest label⟩ 用以限制参考文献序号的宽度,如99 意味着不超过两位数字。
  • BiBTeX 数据库手册链接

  • BiBTeX 数据库以.bib 作为扩展名,其内容是若干个文献条目
  • **article **学术论文,必需字段有author, title, journal, year; 可选字段包括volume, number,pages, doi 等;
  • **book **书籍,必需字段有author/editor, title, publisher, year; 可选字段包括volume/number,series, address 等;
  • **incollection **论文集中的一篇,必需字段有author, title, booktitle, publisher, year; 可选字段包括editor, volume/number, chapter, pages, address 等;
  • **inbook **书中的一章,必需字段有author/editor, title, chapter/pages, publisher, year; 可选字段包括volume/number, series, address 等。
  • **inproceedings ** An article in a conference proceedings. Required fields:author, title, booktitle, year. Optional fields: editor, volume or number, series, pages, address, month, organization, publisher,note.
  • **manual ** Technical documentation. Required field: title. Optional fields:author, organization, address, edition, month, year, note.
  • **mastersthesis ** A Master’s thesis. Required fields: author, title, school,year. Optional fields: type, address, month, note.
  • **misc **Use this type when nothing else fits. Required fields: none. Optional fields: author, title, howpublished, month, year, note.
  • **phdthesis **A PhD thesis. Required fields: author, title, school, year. Optional fields: type, address, month, note.
  • **proceedings ** The proceedings of a conference. Required fields: title, year.Optional fields: editor, volume or number, series, address, month, organization, publisher, note.
  • **techreport ** A report published by a school or other institution, usually numbered within a series. Required fields: author, title, institution, year. Optional fields: type, number, address, month, note.
  • **unpublished ** A document having an author and title, but not formally published. Required fields: author, title, note. Optional fields: month, year.
  • ⟨bst-name⟩ 为.bst 样式文件的名称,不要带.bst 扩展名。
  • \nocite{⟨citation⟩} 命令列出未被\cite引用的文献, 而\nocite{*} 则让所有未被引用的文献都列出。
  • 在需要列出参考文献的位置\bibliography{⟨bib-name⟩}
  • 其中⟨bib-name⟩ 是BiBTeX 数据库的文件名,不要带.bib 扩展名。
  • 分别生成 (Axford et al., 2013) 和Axford et al. (2013)
  • natbib 提供了与LATEX 预定义样式相对应的几个样式,包括plainnat、abbrvnat 和unsrtnat
  • natbib 宏包同样也支持数字引用,并且支持将引用的序号压缩,例如\usepackage[numbers,sort&compress]{natbib},连续引用多篇文献时,会生成形如(3-7) 的引用而不是(3,4, 5, 6, 7)。
  • biblatex 宏包

    biblatex 宏包是一套基于LaTeX 宏命令的参考文献解决方案,提供了便捷的格式控制和强大的排序、分类、筛选、多文献表等功能

    2. 索引和makeindex 工具

    第一步,在LATEX 源代码的导言区调用makeidx 宏包,并使用\makeindex 命令开启索引的收集:

    \usepackage{makeidx}
    \makeindex
        

    第二步,在正文中需要索引的地方使用\index 命令。\index 命令的参数写法详见下一小节;并在需要输出索引的地方(如所有章节之后)使用\printindex 命令。