LaTeX 文档是==文本==和==命令==的混合体。
命令以反斜线开始,有时在大括号里有参数(或有时在方括号中有可选参数)
基础
文档导言区、主体
每个 LaTeX 文档都有一个 \begin{document} 和一个匹配的 \end{document}
%% 文档导言区 %%
\begin{document}
%% 主体 %%
\end{document}
环境
环境:其他 \begin{...} 和\end{...}
\begin{x}
\begin{y}
%% 可以嵌套但需一一匹配 %%
\end{y}
\end{x}
注释
% xxx or %% xxxx %%
空格、不换行空格(硬空格)
latex多个空格被当作一个空格处理,用 ~ 来创建不换行空格,把两段文字「绑」在一起
特殊字符
以 \ 起始是 LaTeX 指令表示一个「命令」
大括号字符 { 和 } 用于显示强制性参数即命令需要的信息。
逻辑结构
斜体
\emph和\textit
\emph{aaa\emph{aaa}} %% \emph可以嵌套使用 %%
\textit{aa\textit{bb}} %% \textit不可以嵌套使用 %%
加粗
\textbf
目次命令
LaTeX 可以将文档分成好几个层级:
\chapter(启用它需要\documentclass{book}或者\documentclass{report})\section\subsection\subsubsection\paragraph\subparagraph
列表
参数不同分有序(参数:enumerate)无序(参数:itemize)
可以嵌套,至多可以在标准的 LaTeX 中嵌套四层
Ordered
\begin{enumerate}
\item
\begin{enumerate}
\item An entry
\item Another One
\item Wow! Three entries
\end{enumerate}
\item Another One
\item Wow! Three entries
\end{enumerate}
Unordered
\begin{itemize}
\item An entry
\item Another One
\item Wow! Three entries
\end{itemize}
效果如下:
1. (a) An entry
(b) Another One
(c) Wow! Three entries
1. Another One
2. Wow! Three entries
Unordered
• An entry
• Another One
• Wow! Three entries
文档类
文档类用于设置文档的一般布局,比如:
- 边距、字体、间隔……
- 是否有章
\chapter - 标题是否另起一页
文档类也可以添加新的命令:比如创建幻灯片时
文档类这一行也可以设置一些全局选项——对整个文档起作用的选项
这些选项在方括号中给出:\documentclass[<选项>]{<文档类>}
基本文档类
\documentclass{文档类}
article
不包含章的短文档report
含有章的长文档,单面印刷book
含有章的长文档,双面印刷,包含正文前材料(front-matter)和正文后材料(back-matter,比如索引)letter
不包含目次信息slides
幻灯片(详见后文)
标准的article,report,book文档类接受10pt,11pt,12pt选项用于更改字体大小,使用twocolumn选项用于制作双栏文档
例:\documentclass[10pt,twocolumn]{article}
富功能文档类
先给基本的玩明白再说吧doge🤣
拓展Latex
声明文档类后,
在导言区中可以添加一个或多个「宏包(package)」来修改相关功能。
宏包可以:
- 改变 LaTeX 某些部分的功能
- 向 LaTeX 添加新的命令
- 更改文档的设计
改变排版方式(断字、标点符号、引文、本地化……)
通过 babel 宏包
\usepackage[语言]{babel}
例:\usepackage[french]{babel}
改变设计
使用 geometry 宏包
\usepackage[样式]{geometry}
例:\usepackage[margin=1in]{geometry}
添加新功能
要啥功能就加啥包呗
自定义命令
\newcommand\自定义命令[参数个数]{命令内容 #参数n}
最多可以设置 9 个参数
例:\newcommand\kw[1]{\textbf{\itshape #1}}
图片
使用 graphicx 宏包
\usepackage{graphicx}
%% `\includegraphics` 命令 %%
\includegraphics[height=2cm]{example-image}
更改图片外观
图片的宽度和高度,通常被设定为 \textwidth(或 \linewidth) 和 \textheight 的相对值
\textwidth是一整页的文本区域宽度,而\linewidth是当前行的宽度
例:\includegraphics[width = 0.5\textwidth]{example-image}
scale 命令缩放图片,或者指定 angle 角度以旋转图片,亦可通过 clip 和 trim 裁切图片
例:\includegraphics[scale = 0.5,clip, trim = 0 0 50 50]{example-image}
浮动图片
Test location.
\begin{figure}[ht]
\centering
\includegraphics[width=0.5\textwidth]{example-image-a.png}
\caption{An example image}
\end{figure}
这里 LaTeX 将图片和题注从 Test location 处移动
ht 选项影响了 LaTeX 在何处放置浮动体
这两个字母的意思是,浮动体可以在原来的地方(Test location 旁边),或者是一页的顶部。
最多可以使用四种位置描述符:
hHere 这里(如果可以的话)tTop 页面顶部bBottom 页面底部pPage 浮动体专页
使用 \centering 而不是 center 环境来水平居中图片
避免浮动环境和 center 环境都会增加纵向间隔的局面
表格
使用 tabular 环境构建表格,
使用array 宏包添加更多功能
基础
可选的列格式如下:
| 类型 | 描述 |
|---|---|
l | 列左对齐 |
c | 列居中对齐 |
r | 列右对齐 |
p{width} | 固定列宽;文字会被自动折行并两端对齐 |
m{width} | 和 p 类似,但垂直居中对齐 |
b{width} | 和 p 类似,但垂直底部对齐 |
w{align}{width} | 固定列宽,如果太长会稍稍出界。你可以选择水平对齐(align)选项 l, c 或 r |
W{align}{width} | 和 w 类似, 但是如果出界的话会收到警告 |
| 其他的导言符 |
| 类型 | 描述 |
|---|---|
*{num}{string} | 在表格导言中重复 string 引导符 num 次。你可以通过这种方式定义相同的列 |
>{decl} | 在当前列的每个单元格前都添加 decl(很有用,比如需要对整列设定一个不同的字体时) |
<{decl} | 会在前一列的每个单元格后添加 decl |
| ` | ` |
@{decl} | 将两列之间的空隙替换为 decl |
!{decl} | 在两列之间的空隙中央添加 decl |
被 l, c, r 标识的列将会根据最宽的单元格自动决定列宽。 | |
| 每一列都需要被声明。 | |
如果需要三个居中列,你可以在表格导言使用 ccc | |
表格主体中,列都是通过 & 和号来分隔的,行是通过 \\ 来另起的。 | |
| 例: |
\begin{tabular}{lll}
Animal & Food & Size \\
dog & meat & medium \\
horse & hay & large \\
frog & flies & small \\
\end{tabular}
行分割线
使用booktabs包\usepackage{booktabs}
几种分割线:\toprule, \midrule, \bottomrule,\cmidrule(参数){列号-列号}(绘制仅占用指定列、而不占整行的分割线)参数用来缩短分割线的任意一端( r 、l、rl 是分别缩短分割线右端和左端。)
\addlinespace 来插入一个小的间隙
合并单元格
\multicolumn 命令接受三个参数:(默认合并两个单元格)
- 需要合并多少个单元格
- 合并后单元格的对齐方式
- 合并后单元格的内容
例:\multicolumn{2}{c}{unknown}
LaTeX 不支持纵向单元格的合并。
通常通过将单元格留空的方式,来告诉读者单元格是跨行的。
交叉引用
\label{key}和\ref{key}
例:
\begin{document}
Hey world! This is a first document.
\section{Title of the first section} Text of material for the first section.
\subsection{Subsection of the first section}
\label{subsec:labelone} Text of material for the first subsection.
\begin{equation}
e^{i\pi}+1 = 0
\label{eq:labeltwo}
\end{equation}
In subsection~
\ref{subsec:labelone} is equation~
\ref{eq:labeltwo}.
\end{document}
这里的subsec: 和 eq:只是为了记下来在这个标签之前最近的位置在处理什么内容。并没什么特殊含义
label 添加在想引用的东西后面。
特别注意浮动体\label 应该跟在 \caption 命令后面(或者更好的方式是在里面)并处于浮动体环境内部。
字体和间距
段间距
段落首行没有缩进,但要在段落之间插入空行
使用 parskip 宏包\usepackage[parfill]{parskip}
强制断行(很少用)
下述情况使用 \\ 来另起一行而不另起一段:
- 在表行的结尾处
- 在
center环境中 - 诗歌(
verse环境)
如果不属于这些情况,那就别用!😒
添加间距
使用 \, 添加一个小的间距(大概半个空格宽度)
在数学模式中,还可以使用:\.,\:,\;,以及用于添加负间隙的 \!。
极少情况下,比如在做一个标题页的时候,需要显式地添加水平间距或垂直间距。对于这种情形使用 \hspace 和 \vspace
例:
\documentclass{article}
\usepackage[T1]{fontenc}
\begin{document}
Some text \hspace{1cm} more text.
\vspace{10cm}
Even more text.
\end{document}
设置文本样式
对字体做加粗、斜体、等宽等等的处理。
有两种命令可用:一种用于小段,一种用于大段。
对于小段而言,可以使用 \textbf, \textit, \textrm, \textsf, \texttt 以及 \textsc。
例:
Let's have some font fun: \textbf{bold}, \textit{italic}, \textrm{roman}, \textsf{sans serif}, \texttt{monospaced} and \textsc{small caps}.
对于大段来说,使用能够更改字体设置的命令:
比如说 \bfseries 和 \itshape。
这些命令设置完毕后不会复原,所以需要定义一个「组(group)」防止这些设置作用于整个文档。LaTeX 环境是一个组,表格单元格也是一个组,使用 {...} 来显式地定义一个组。
{\itshape
This text is italic.
So it this: the effect is not limited to a paragraph.
}
字体大小
采用类似方式设置字体大小——这些命令也会影响其他设置
常见的有 \huge, \large, \normalsize, \small 以及 \footnotesize。
注意要在改回字体大小之前添加 \par结束该段。
例:
{\itshape\large Some text\par}
Normal text
{\bfseries\small Much smaller text\par}
设置字体
使用 fontspec 宏包
例:
\usepackage{fontspec}
\setmainfont{texgyretermes-regular.otf}
字体目录:The LaTeX Font Catalogue – Front Page
引用和参考文献
引用数据库
引用数据库「BibTeX 文件」扩展名 .bib
包含一条或多条记录,每条记录对应一个引用,每条记录中都会有一系列的域(field)。
@article{Thomas2008,
author = {Thomas, Christine M. and Liu, Tianbiao and Hall, Michael B.
and Darensbourg, Marcetta Y.},
title = {Series of Mixed Valent {Fe(II)Fe(I)} Complexes That Model the
{H(OX)} State of [{FeFe}]Hydrogenase: Redox Properties,
Density-Functional Theory Investigation, and Reactivity with
Extrinsic {CO}},
journal = {Inorg. Chem.},
year = {2008},
volume = {47},
number = {15},
pages = {7009-7024},
doi = {10.1021/ic800654a},
}
@book{Graham1995,
author = {Ronald L. Graham and Donald E. Knuth and Oren Patashnik},
title = {Concrete Mathematics},
publisher = {Addison-Wesley},
year = {1995},
}
大部分域都以键值对的格式给出
但与「主键」(key)相区别:「主键」是引用名。可以用任意一个名字
上面的例子使用「作者名+年份」的格式(通常都是这么做的)。
在 author 域,每一个作者都以 and 分开。这很重要:输出格式需要了解哪一块是这个作者。
文章标题中有些部分还会被大括号包裹——以避免被作用任何大小写更正规则。
从引用数据库获取信息(两种方法)
使用 natbib 宏包
\usepackage[numbers]{natbib}
\begin{document}
The mathematics showcase is from \citet{Graham1995}, whereas
there is some chemistry in \citet{Thomas2008}.
Some parenthetical citations: \citep{Graham1995}
and then \citep[p.~56]{Thomas2008}.
\citep[See][pp.~45--48]{Graham1995}
Together \citep{Graham1995,Thomas2008}
\bibliographystyle{plainnat}
\bibliography{learnlatex}
\end{document}
natbib 宏包提供了文本和括号的引用样式:分别是 \citet 和 \citep。
参考文献样式是通过 \bibliographystyle 选择的,这里使用了 plainnat 样式。
参考文献通过 \bibliography 插入的同时也选择了使用的数据库(多个数据库采用逗号分隔数据库名)。
页码引用可以通过一个可选参数添加。
如果提供了两个可选参数,第一个可选参数就被当作引用前的小标记,第二个可选参数就被当作引用标签后的页码引用。
上述设定使用了作者—年份(author-year)样式。但是也可以采用数字编码的引用方式。这可以通过向 natbib 行添加 numbers 选项来实现。
使用biblatex 宏包
biblatex 宏包和 natbib 运作方式稍有不同,主要体现在导言区内选择数据库和文档正文内的排印上。
\usepackage[style=authoryear]{biblatex}
\addbibresource{learnlatex.bib} % 引用文件
\begin{document}
The mathematics showcase is from \autocite{Graham1995}.
Some more complex citations: \parencite{Graham1995} or
\textcite{Thomas2008} or possibly \citetitle{Graham1995}.
\autocite[56]{Thomas2008}
\autocite[See][45-48]{Graham1995}
Together \autocite{Thomas2008,Graham1995}
\printbibliography
\end{document}
\addbibresource 需要数据库文件名的全称
引用前后的文字通过可选参数插入。注意,这里的页码不需要添加 p.~ 或者 pp.~ 前缀,biblatex 可以自动添加合适的前缀。
在 biblatex 里,加载宏包时文献样式就被选择了。这里\usepackage[style=authoryear]{biblatex}使用了 authoryear,当然也可以用 numeric 数字编码和其他许多样式。
选哪个
一般来讲,biblatex 被称为是比 BibTeX 工作流更容易定制化的一种方案。
biblatex 可以更加容易地实现许多精心设计的引用样式。
大致来讲,许多理工科(STEM)科目不太需要关注这种样式设定,但是对于一些人文学科领域的许多复杂样式来讲,这就变得非常重要。
BibTeX 只能对美式 ASCII 字符正确排序
而 biblatex 提供了完整的 Unicode 排序能力。
实际上,BibTeX 工作流比 biblatex 更容易建立
许多出版社和期刊都希望通过 BibTeX 工作流生成参考文献,一般不期望 biblatex 的提交。
简单来说:
- 看出版社要求
- 看你要简单的还要复杂的