0%

Latex语法

Latex基本语法的快速入门(Updating),为自己快速查找回想指令


一. 组织文档结构

只有具有良好结构的文档,才适合使用Latex编写,因此在写之前需要将文档的组成部分分隔清晰。

1.文档基本结构

document环境为界,document环境之前的是导言部分(格式设置),环境内部是正文部分(套用格式)。

1
2
3
4
5
6
7
% 导言: 格式设置
\documentclass{ctexart}
\usepackage[b5paper]{geometry}
% 正文: 套用格式
\begin{document}
使用\Latex
\end{document}

2.文档部件

文档常见基本组成要素的命令格式:

  • 标题:\title\author\date——\maketitle
  • 摘要|前言:abstract环境| \chapter*
  • 目录:\tableofcontents
  • 章节:\chapter\section
  • 附录:\appendix+\chapter\section
  • 文献:\bibliography
  • 索引:\printindex

文档正文文本部分有不同的层级划分,类似于Word中的一级标题,二级标题,段落正文等等,层级格式的设定包含在导言区导入的宏包中(相应的标题格式可以在类或宏包中修改),实际在正文部分中只使用一些层级命令来实现文档划分。

层次 名称 命令 备注
-1 part(部分) \part 可选最高层
0 chapter(章) \chapter report,book类最高层
1 section(节) \section article类最高层
2 subsection(子节) \subsection report,book类
3 subsubsection(子子节) \subsubsection 默认不编号不编目录
4 paragraph(段落) \paragraph 默认不编号不编目录
5 subparagraph(子段落) \subparagraph 默认不编号不编目录

一般的科技论文模板中,较多的使用层次0-4这几个命令。

3.大型文件组织

在编写大型程序时,为了便于维护,可以将复杂的实现逻辑隔离出来,放在一个单独的模块中;也可以按程序逻辑将其划分为不同的模块,只在主函数中调用各模块接口。

使用Latex组织文件也是类似的,我们在主文档中给出文档的总体框架,按照内容划分不同的子文件,在子文件中使用单独的类文件和格式文件设置格式,为了便于维护,常将复杂的图片或者文本用小文件隔离。

在各文件中,使用\documentclass读入文档类文件(.cls),使用 \usepackage读入格式文件——宏包.sty),使用 \include读入章节文件|独立子文件(.tex并分页,使用 \input读入任意文件,例如:.pdf.jpg.png等格式文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
% language-main.tex
\documentclass{book}
\usepackage{makeidx}
\makeindex
\title{Languages}
\author{someone}

\begin{document}
\frontmatter % Divided into frontmatter,mainmatter and backmatter in a large file
\maketitle % show title,author,date
\tableofcontents
\mainmatter
\include{intro} % include subfile
\include{class}
\backmatter
\include{appendix}
\bibliography{foo}
\printindex
\end{document}
1
2
3
% intro.tex
\part{Introduction}
\chapter{Background}
1
2
3
4
5
6
7
8
9
10
11
% class.tex
\part{Classification}
\chapter{Natural Language}
\chapter{Computer Languages}
\section{Machine Languages}
\section{High Level Languages}
\subsection{Interpretative Language}
\subsubsection{Lisp}
\paragraph{Common Lisp}
\paragraph{Scheme}
\subsubsection{Perl}
1
2
% appendix.tex
\chapter{Appendix}

二. 填写文档内容

1.语法结构

Latex的语法有命令环境两种格式

  1. 命令

    命令字在反斜杠后,必选参数在其后用花括号包裹,可选参数用中括号放在二者之间: \[ \cmd[opt]\{arg1\}\{arg2\} \]

  2. 环境

    1
    2
    3
    \begin{env}
    ...
    \end{env}

2.正文文本语法

自然段的分段是在 .tex文件中空一行。被占用的符号,例如:%,{},[],$等需要在前面加反斜杠 \进行转义。键盘上没有的特殊符号用命令行输入,详查 symbols文档。

查询文档的方式是在cmd命令行(Win)/ 终端(Mac|Linux)中输入:

1
texdoc docname

3.公式

数学模式下的字体、符号、间距都与正文不同,一切数学公式都需要在数学模式下输入

  • 行内(inline)公式:使用一对美元符号$...$表示

  • 行间(display)公式:

    • 无编号行间公式:使用\[ ... \]表示

    • 带编号行间公式:使用equation环境,更复杂的结构,使用amsmath宏包提供的专门数学环境

编写公式时一些简单的数学结构列举如下:

  • 上标与下标:用^_表示
  • 上下划线与花括号:\overline, \underline, \overbrace,\underbrace
  • 分式:\frac{分子}{分母}
  • 根式:\sqrt[次数]{根号下内容}

实际中编写数学公式有如下几种方法

  1. 可以先在Word中使用其自带的MathType可视化编写公式后,再转换成Tex格式:

    方法一:在word 中选中公式,通过快捷键Alt+\键实现转换。

    方法二:选中我们需要转换的公式之后,直接点击MathType选项卡中的切换TEX即可来回切换。

    方法三:在MathType选项卡中有一个转换公式按钮,可以将MathType公式转换成很多其他的公式格式,当然我们常用的还是LaTeX 2.09 and later

  2. 使用AxMath编辑器进行转换

  3. 使用在线网站:

    Latex在线公式编辑器:中文版1中文版2英文版

    截图提取公式,需要安装一个小软件:https://mathpix.com/

Note:上述工具都是辅助,准确的公式显示还需在实际环境下调试

数学公式使用的众多宏包中:

  • amsmath 是基本的数学工具包,在包含数学公式的文档中几乎无处不在。mathtools 则对 amsmath 做了一些补充和增强。
  • siunitx:数学单位的一揽子解决方案
  • mhchem:编写化学式

4.列表和文本块

  • 列表环境:带编号列表enumerate、不带编号的列表itemize、有标题的列表:description

  • 定理类环境:\newtheorem定义定理类环境,如: \[ \newtheorem\{thm\}\{定理\}[section] \] 使用定理类环境:

    1
    2
    3
    \begin{thm}
    一个定理
    \end{thm}
  • 代码抄录:

    由于Latex语法中的关键字和多数程序中的代码语法相冲突,因此直接呈现代码需要特殊环境verbatim\verb命令。前者针对大段程序抄录(display模式),后者针对小部分程序(inline模式)。

    需要注意的是:\verb命令的语法规定,其使用格式是:\verb|programs|,需要用|或其他符号分隔开来。

    实际中,为了实现语法高亮以及排版更加美观,通常使用listings宏包,配合lstlisting环境:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    \documentclass{article}

    \usepackage{listings}

    \begin{document}
    \lstset{flexiblecolumns,numbers=left,numberstyle=\footnotesize}
    % flexiblecolums用来修改字符间距,numbers=left用于给左边加行号,numberstyle顾名思义修改数字大小。
    \begin{lstlisting}[language=C++]
    #include <stdio.h>
    int main () {
    printf("Hello world!\n");
    }
    \end{lstlisting}
    \end{document}

    要是从文件中添加代码,可以使用:

    1
    \lstinputlisting[language=Python]{helloworld.py}

    当然代码高亮还可以通过引入minted宏包来定制

    (以下先暂时省略,日后再补充)

  • 算法

5.图表和浮动环境

  • 画表格:使用tabular环境,具体定制格式时,使用在线网站

  • 插图:使用graphicx宏包提供的\includegraphics命令:

    1
    \includegraphics[width=15cm]{foo.pdf}
  • 浮动体:图片环境——figure环境;表格环境——table环境;浮动体的标题用 \caption 命令得到,自动编号。

三. 参考文档

参考自刘海洋老师的LaTex讲座 tex_intro_talk.pdf