LaTeX 基础
LaTeX 简介
高德纳为了让他的巨著《计算机程序设计艺术》排版更精美发明了 TeX,与 Markdown 类似,有编程语言的味道。
LaTeX 是一种工具,基于 TeX 格式定义了很多更方便使用的控制命令,它将用户按照它的格式编写的文档解释成 TeX 引擎能理解的形式并交付给 TeX 引擎处理,再将最终结果返回给用户。
CTeX, MiKTeX, TeX Live 等都是 TeX 的发行,包含渲染引擎,宏包,编辑器等其他工具的集合。
TeX 引擎
TeX, pdfTeX, XeTeX, LuaTeX
都是 TeX 引擎,按照先进程度递增(LuaTeX 尚未完善)。
- TeX:仅支持最原始的 plain tex 格式,晦涩难懂。
- pdfTeX: pdfTeX 包含了 PDF 和 DVI 格式的输出,被许多 TeX 的发行版用作默认的 TeX 引擎。
- XeTeX: 之前的引擎只支持 ASCII 字符,即不支持中日韩字符。XeTeX 则原生支持 Unicode(需要使用 utf-8 编码)。
- LuaTeX: 基于 pdfTeX 并支持 Luau 脚本的 TeX 引擎,最初被作为 pdfTeX 的下一代版本但事实上形成了一个独立的分支。目前还不完善。
LaTeX 发行版
TeX 有许多种发行版,根据喜好选择即可。例如:
Windows/Linux 推荐使用 texlive,Mac 则推荐使用 mactex。虽然 texlive 也可以在 Mac 下用 Unix 的方式安装(这是因为 mactex 是一个基于 texlive 之上的封装),但是 mactex 采用 Mac 专用的方式打包,安装简便且不劳心配置。
LaTeX 中文环境的配置
最初 TeX 只支持 ASCII 编码,没有考虑中文的使用环境, 不过现在可以使用ctex
宏包来支持中文。
- 文档使用 utf-8 编码。
- 引入宏包
\usepackage{ctex}
,并且使用xelatex
编译。 - 另外 ctex 中内置了 6 种中文字体:
heiti, kaishu, songti, lishu, youyuan, fangsong
\documentclass[UTF8]{article}
% 若设置 ctexart,则是使用 ctex 的 article,后面就不需要再引用 ctex 宏包了
\usepackage{ctex}
\begin{document}
中文 && English
\end{document}
可能报错:
Package fontspec Warning: Font "FandolSong-Regular" does not contain requested (fontspec) Script "CJK".
,可以忽略的警告。主要原因是字体里面没有 GSUB 表,解决方法是复制 Windows 字体到 Ubutnu,并显示指定 Windows 字体,\usepackage[fontset=windows]{ctex}
LaTeX 源文件的基本结构
- LaTeX 源文件分为「导言区」和「正文区」两部分构成。
- 一个 LaTeX 源文件有且只有一个 document 环境。
$
符号内的为数学模式,外的为文本模式。且$**$
为行内模式,$$**$$
为行间模式。- 一个或多个空行都表示段落的分隔。
% 导言区
% 导言区用于全局的设置,引入宏包等
\documentclass{article} % 除了 article 外,还有 book, report, letter 等类型
\usepackage{ctex} % usepackage 用于导入宏包,这里导入了 ctex 宏包
\title{My first document}
\author{Zhigao Hong}
\date{\today}
% 正文区
% 正文区用于书写文章的正文部分
\begin{document} % begin 用于开始一个环境,一个文章有且只有一个 document 环境
\maketitle
Hello, \LaTeX.
Let $f(x)$ be defined by $f(x)=3x^2+1$.
\end{document}
LaTeX 的篇章结构
在 LaTeX 中,可以使用section{xx}, subsection{xx}, subsubsection{xx}
等命令来撰写文章的大致结构。
\documentclass{article}
\usepackage{ctex}
\title{My first document}
\author{Zhigao Hong}
\date{\today}
\begin{document}
\maketitle
\section{Introduction}
\label{sec::introduction}
\section{Proposed scheme}
\label{sec::proposed method}
\subsection{method1}
\label{subsec::method1}
\subsection{method2}
\label{subsec::method2}
\section{Experimental results and discussion}
\label{sec::experimental results and discussion}
\section{Conclusion}
\label{sec::conclusion}
\section{References}
\bibliography{mybibfile}
\end{document}
LaTeX 的字体设置
字体的设置可以使用字体命令和字体声明两种设置方式,同时可以使用{}
限定其作用范围,否则自设置起,后面一直有效至重新设置字体。
字体族
字体族有:罗马字体、无衬线字体、打字机字体。
- 罗马字体:
\textrm {xxx}
或者{\rmfamily xxx}
- 无衬线字体:
\textsf {xxx}
或者{\sffamily xxx}
- 打字机字体:
\texttt {xxx}
或者{\ttfamily xxx}
字体加粗
\textbf {xxx}
或者{\bfseries xxx}
字体斜体
\textit {xxx}
或者{\itshape xxx}
中文字体
设置中文字体必须引入ctex
宏包,其中内置了 6 种中文字体。
- 黑体:
{\heiti xxx}
- 其他类似:
kaishu, songti, lishu, youyuan, fangsong
字体大小
- 字体的大小也是通过一系列字体声明实现:
tiny, scriptsize, footnotesize, small, normalsize, large, Large, LARGE, huge, Huge
- 这些大小描述是相对于
normalsize
而言的,而normalsize
的大小是在导言区的documentclass[10pt]{article}
设置的,一般为 10,11,12 磅。 - 中文字体还可以使用
\zihao{字号值}
设置,如同 word 文档一样。
LaTeX 中的特殊字符
空白字符
- 空行分段,多个空行等同于 1 个。
- 英文中多个空格视为 1 个,中文中忽略空格。
- 当要输入多个空格时,要使用
\quad
命令。
控制符
由于许多符号有着特殊的含义,需要转义:\#, \$, \%, \{, \}, \~, \^, \_, \&
等。
排版符号和 LaTeX 的标志符号
引号
- 单引号:数字 1 左边的点号表示左单引号,
'
表示右单引号。 - 双引号:两个左单引号为左双引号,两个右单引号为右双引号。
连字符
- 短连字符:
-
- 中连字符:
--
- 长连字符:
---
LaTeX 中的图片
- 在 LaTeX 中使用
graphicx
这个宏包插入图片。- 导言区:
\usepackage{graphicx}
用于引入宏包;\graphicspath{{目录1/}, {目录2/}}
用于指定图片目录。 - 语法:
\includegraphics[可选参数]{文件名}
,其中文件名不加文件格式的后缀。 - 支持格式:
eps, pdf, png, jpg
等。
- 导言区:
- 可选参数,支持指定大小,缩放比例等。
scale=0.3
,缩放因子。height=2cm, width=0.15\textwidth
,指定长宽。angle=-45
,指定旋转角度。
LaTeX 中的表格
直接使用在线 LaTeX 表格编辑器,用命令做表格简直不能忍。
LaTeX 中的浮动体
使用浮动体,可以对图片和表格的位置进行灵活管理,需要使用begin
命令来创建浮动体环境。
- 在环境后,还可以加入允许位置参数:h(here)、t(top)、b(bottom)、p(page),默认为 tbp。
- 上述的参数相对于整个页面而言,比如 top 表示页面的顶部,page 表示一个允许浮动的页面等。
[!h]
这里加感叹号的意思是忽略美学标准强制图片的位置,但是如果页面剩下的部分放不下,还是会跑到下一页的。一般而言,用[!h]
选项通常会出现不能正确放置的问题,所以常用[ht], [htbp]
等。
- 使用
caption
用于标题的显示。 - 使用
subfigure
实现图片的混排。
figure 浮动体
\begin{figure}[htb]
\centering
\subfigure[]{
\includegraphics[width=0.15\textwidth]{Baboon}
}
\subfigure[]{
\includegraphics[width=0.15\textwidth]{Barbara}
}
\subfigure[]{
\includegraphics[width=0.15\textwidth]{Boat}
}
\caption{Three test images: (a) Baboon. (b) Barbara. (c) Boat.}
\label{fig1}
\end{figure}
table 浮动体
\begin{table}[htbp]
\centering
\caption{Comparison of four methods on test images in \ref{fig1} based on QF = 60}
\label{tab1}
\begin{tabular}{|c|c|}
\hline
a & b \\ \hline
c & d \\ \hline
\end{tabular}
\end{table}
LaTeX 中的公式
直接使用在线 LaTeX 公式编辑器,用命令直接写公式简直不能忍,简单公式还行,复杂公式。。。
行内公式
- 美元符号:
$f(x)=a^2x+bx+c$
- 小括号:
\(f(x)=a^2x+bx+c\)
行间公式
- 双美元符号:
$$f(x)=a^2x+bx+c$$
- 中括号:
\[f(x)=a^2x+bx+c\]
自动编号公式
使用equation
环境,该公式会单独一行。
\begin{equation}
y = x + 1
\end{equation}
参考文献 BibTeX
将参考文献单独处理,实现一次管理,多次使用。
- 新建文件
mybibifile.bib
- 在导言区:
\bibliographystyle{plain}
,此外还有alpha, abbrv
等排序规则。 - 在需要输出参考文献的地方使用:
\bibliography{mybibfile.bib}
- 默认下是不会出现未引用的文献,如果要强制加上为引用文献:在上一个命令前加
\nocite{*}
其他命令
texdoc ctex
:终端命令,查看 ctex 宏包手册。texdoc lshort-zh
:终端命令,查看 latex 使用教程。texcount demo.tex
:终端命令,统计文章字数。\label{xxx}
:设置标签名为 xxx,以用于交叉引用。\ref{xxx}
:引用标签名为 xxx 的内容。\cite{xxx}
:引用 bib 文件的文章。\newcommand{命令名}[参数个数]{具体定义}
:\newcommand{\PRC}{People's Republic of China}
\newcommand{\loves}[2]{#1 喜欢 #2}
,使用如\loves{猫}{鱼}
\newcommand{\myref}[1]{Eq.\ref{#1}}
\begin{enumerate} xxx \end{enumerate}
:有序列表环境。\begin{itemize} xxx \end{itemize}
:无序列表环境。\item xxx
:列表中的单个元素。\geometry{left=2cm, right=2cm, top=2cm, bottom=2.5cm}
:设置页边距。\\
:在文本中表示换行。