LaTeX小结
前言
有时我们需要出题,用什么好呢?
- MS Word?我从来不用,虽然是WYSIWYG
- 细节格式调整复杂,结构不清晰
- 商业格式,并且跨平台效果差
- 数学公式不太美观和方便
- 导出PDF不太完善
- Markdown?以前一直用,虽然方便快捷也有缺点(用Typora)
- 表格支持差,不能合并单元格
- 数学公式无法复制,显示为图片
- 无法显式分页,写博客没问题,但是出题就不太好了
- $\LaTeX{}$!
- 支持复杂的表格
- 美观的数学公式
- 结构清晰,能生成PDF书签
当然,缺点也很多:
- 安装、学习较为复杂
- 需要时间编译,Word和Typora都是WYSIWYG
- 中文需要一定的配置,虽然现在已经比较简单
- 写文章也需要debug……
如果你喜欢WYSIWYG,但又需要$\LaTeX{}$中的数学公式,可以试一下LyX。
安装
推荐使用跨平台的TeX Live,下载当年的版本,最好是ISO。
在Windows下,使用install-tl-advanced.bat
,更改安装位置,可以删除不需要的组件,比如空间巨大的字体。
然后就慢慢等好了。参考https://liam0205.me/texlive/
使用
工具
推荐使用TeXworks作为编辑器,当然Notepad++之类的通用编辑器也是可以的。如果使用TeX Live,很容易在安装目录下找到TeXworks。TeXworks与一般的Markdown编辑器一样,使用左右对照。
排版工具用XeLaTeX,其实pdfLaTeX也可以。在TeXworks中可以在首选项中修改默认排版工具。
hello,world
1 | \documentclass[UTF8]{ctexart} |
以上代码可以输出你好,世界!
到PDF文件,也可以试一下pdfLaTeX。
以\开始的行为命令,如果有begin,就要有对应的end,这样的命令称为环境。{}中是必要的参数,[]中是可选参数,用逗号分割。
上述代码第一行表示文档类为ctexart
,使用UTF8编码。使用ctexart
没有中文问题。接下来就是文章的主要部分了。
文档类选项
生成PDF书签
在文档类选项中加入hyperref
即可。但是需要注意,第一次生成*.out
时不会加入书签,必须再次编译。以前这样做是为了节省内存,于是一直保留至今。
改变文章字号
在文档类选项中加入如12pt
即可,默认为10pt
。
其他设置
在\documentclass
和\begin{document}
之间可以进行设置。\usepackage
类似于C的#include
,用于添加特定的功能。
标题
1 | \title{Title} |
注意,{}中不填将不会显示对应项目。
标题格式
1 | \usepackage{titling} |
页边距
1 | \usepackage{geometry} |
显式分页
1 | \newpage |
正文
注释
1 | % comment |
单行注释用%,注意如果要输入%应该用\%
。多行注释用comment
环境。
层次结构
与Markdown六级标题不同,各个层次有特定的名称:
1 | \section {...} % Level 1 |
数学公式
1 | $n!=\prod_{i=1}^n n\;\;\forall n\ge1$ |
使用amsmath
包。单行公式可以用Markdown的$...$
,多行注释用equation
环境。
至于内容,和在Markdown中的完全相同。
列表
1 | 注意事项: |
有序列表用enumerate
环境,无序列表用itemize
环境。每个项目用\item
开始。
原样输出
1 | 使用\verb|printf|函数。 |
单行用\verb|...|
,多行用verbatim
环境。
脚注和超链接
1 | WYSIWYG\footnote{参见\url{https://zh.wikipedia.org/zh-hans/\%E6\%89\%80\%E8\%A6\%8B\%E5\%8D\%B3\%E6\%89\%80\%E5\%BE\%97}} |
必须加入hyperref
选项,用\footnote{}
命令建立脚注,用\url{}
命令创建超链接,注意转义。
表格
1 | \begin{center} |
表格是相当复杂的,一般使用tabular
环境。表格通常居中显示,因此用center
环境。
设置
在tabular
开始处,需要设定宽度、居中等。|表示竖直线,p{...}
用于设置宽度。有时既需要居中有需要设置宽度,可以加入以下设置:
1 | \usepackage{array} |
这样用P{...}
即可。
横向分割线
用\hline
可以绘制完整的横向分割线,用\cline{l-r}
可以绘制$l\dots r$列的横向分割线。
使用makecell
包,用\Xhline{x\arrayrulewidth}
可以绘制宽度为普通分割线$x$倍的分割线,一般用于首行、次行和末行。我用的参数分别为$x=3,2,3$。最好不要用booktabs
包中的\toprule
,\midrule
和\bottomrule
,因为有一些问题,也可以试一下。
数据行
用&分割两个单元格,用\\
表示换行(在正文中也一样)。
合并单元格
一般常用的方式是多行单元格,用multirow
包中的\multirow{x}{*}{...}
。表示合并接下来的$x$行,内容为...
,*用于默认宽度。
注意,此时一定要用\cline
代替\hline
,可能要用多个。另外,在接下来$x$行内对应位置,不能输入任何内容,但仍要占位,如&&
。
强调
1 | \underline{\textbf{强调}} |
在题目中,一般常用的格式为强调,使用\underline{\textbf{...}}
。而\emph{...}
通常会换一种字体,适合用于定义词语。
伪代码
1 | \begin{algorithm} |
需要algorithm
和algpseudocode
包,依次用algorithm
和algorithmic
环境。其语法与Pascal
较为类似,命令首字母大写。