preamble
刘海洋大神视频浮光掠影式的入门笔记。
从哪解决疑难
组织文档结构
具有良好结构的文档才适合用latex来编写。论文或书籍的结构大概如下。
- 标题
- 前言/摘要
- 目录
- 正文
- 篇、章、节、小节、小段
- 文字、公式
- 列表:编号的、不编号的、带小标题的
- 定理、引理、命题、证明、结论
- 诗歌、引文、程序代码、算法伪码
- 制表
- 画图
- 篇、章、节、小节、小段
- 文献
- 索引、词汇表
latex文档基本结构
以document
环境为界,环境前是导言(preamble)部分,环境内部是正文部分,环境之后的部分被忽略。在导言区进行格式设置,正文部分套用格式。下面是一个简单文档的例子。
% 百分号是注释符。下面是导言,用于格式设置
\documentclass{ctexart} % 整个文档的类型, Chinese tex article
\usepackage[b5paper]{geometry} % 使用B5纸
% 下面是正文,用于填写内容
\begin{document}
这是正文。
\end{document}
文档部件
- 标题:
\title, \auther, \date
等,使用时\maketitle
命令即可生成标题 - 摘要/前言:
abstract
环境或\chapter*
- 目录:
\tableofcontents
- 章节:
\chapter, \section
等 - 附录:
\appendix
+\chapter
或\section
- 文献:
bibliography
- 索引:
\printindex
文档划分
- 大型文档:
\frontmatter, \mainmatter, \backmatter
分成三部分 - 一般文档:
\appendix
分成正文和附录两部分
层次 | 名称 | 命令 | 说明 |
---|---|---|---|
-1 | part | \part | 可选的最高层 |
0 | chapter | \chapter | report,book类的最高层 |
1 | section | \section | article类最高层 |
2 | subsection | \subsection | |
3 | subsubsection | \subsubsection | report,book类; 默认不编号、不编目录 |
4 | paragraph | \paragraph | 默认不编号、不编目录 |
5 | subparagraph | \subparagraph | 默认不编号、不编目录 |
磁盘文件组织
小文档将所有内容写在同一个目录中。对于比较大的文档,可以将文档分成多个文件,并划分文件目录结构:
- 主文档,给出文档框架结构
- 按内容章节划分不同的文件
- 使用单独的类文件和格式文件设置格式
- 用小文件隔离复杂的图表
相关命令
\documentclass
, 读入文档类文件(.cls)usepackage
, 读入一个格式文件——宏包(.sty)\include
, 分页并读入章节文件(.tex)\input
, 读入任意文件
文档框架示例(以一本书为例)
% language-main.tex
\documentclass{book}
\usepackage{makeidx}
\makeidx
\title{Languages} \auther{someone}
\begin{document}
\frontmatter % 标题和目录
\maketitle
\tableofcontents
\mainmatter % 两个章节,intro和class
\include{intro}
\include{class}
\backmatter % 附录和文献
\include{appendix}
\bibliograph{foo}
\printindex
\end{document}
% intro.tex
\part{Introduction}
\chapter{Background}
% class.tex
\part{Classification}
\chapter{Natural Language}
\chapter{Computer Languages}
\section{Machine Languages}
\section{High Level Languages}
\subsection{Compiled Language}
\subsection{Interpretative Language}
\subsubsection{Lisp}
\paragraph{Common Lisp}
\paragraph{Scheme}
\subsubsection{Perl}
% appendix.tex
\chapter{Appendix}
hello world
\documentclass{article} %文档类型,论文,要写中文的话,{ctexart} Chinese tex article
\documentclass{ctexart} %引擎是pdfLaTex的写中文需要\documentclass[UTF8]{ctexart}
\begin{document} %引擎是XeLaTex的不需要[UTF8]. 英文推荐pdfLaTex中文推荐XeLaTex
hello world
\end{document}
语法结构
相比原始的tex语言,latex的语法结构被限制为相对固定的形式。
- 命令:参数总在后面花括号表示,用中括号表示可选参数
\cmd[opt]{arg1}{arg2}
- 比如写分数二分之一,
\frac{1}{2}
,这个分式会压缩的比较小,更常用的是\dfrac{}{}
这个会比较大
- 环境,环境是特殊的命令,夹在中间的就是环境
\begin{env}
...
\end{env}
% 示例:矩阵
\begin{matrix} % 常用的是{bmatrix} b for bracket
...\\...\\... % \\是换行
\end{matrix}
正文文本
- 自然段分段需要空一行
- 一些符号被latex宏占用,需要以命令形式输入
\# \$ \% \{ \}
这些是需要转义的,\textbackslash
打印反斜杠本身靠命令
- 键盘上没有的符号用命令输入
\S \dag \ddag \P \copyright \textbullet \textregistered \texttrademark \pounds
数学模式
- 行内公式,用一对美元符号表示
- 显示公式
- 简单的不编号的公式用命令
\[
和\]
括起来 - 基本的编号公式用
equation
环境 - 更复杂的使用
amsmath
宏包提供的专门的数学环境
- 简单的不编号的公式用命令
- 上标和下标,
^
和_
,异或符号和下划线 - 分式,
\frac{分子}{分母}
- 根式,
\sqrt[次数]{根号下}
- 上下划线与上下花括号,
\overline, \underline, \overbrace, \underbrace
- 矩阵,使用
amsmath
宏包提供的专门的矩阵环境matrix, pmatrix, bmatrix
等。特别复杂的矩阵(如带线条)使用array
环境作为表格画出。 - 数学字母
$a,b,\alpha,\beta$
等;数学字体$\mathbb{R}$
这是实数集R的符号,另一种数学字体\mathcal{P}
- 普通符号,如
\infty
无穷符号,\angle
角的符号 - 二元运算符,加减直接打,
$\times,\div,\oplus$
乘除等 - 二元关系符,
$a=b,a\ge b$
,greater equal大于等于,同理$\gt,\lt,\le$
等 - 括号,小括号中括号直接打,大括号需要转义一下,尖括号需要加左右
$\left<a\right>$
;\left(\right)
可以匹配放大各种括号 - 标点,
\colon
冒号,直接打冒号表示比例运算符 - 一般需要写公式的都要用上面提到的宏包,在文档类型后
\usepackage{amsmath}
- 上面的增强包,
\usepackage{mathtools}
但是这个用的少 - 数字单位的一揽子解决方案,
siunitx
宏包,这个包的代码跟latex内核一样长 - 写化学式,
chemformula
包
列表
\begin{enumerate}
\item aaa
\item bbb
\end{enumerate}
- 这是有编号的列表
itemize
不编号description
有标题
定理类环境
\newtheorem{thm}{定理}[sectioin] %会按照section给定理编号
\section{某一节}
\begin{thm}
一个定理
\end{thm}
诗歌与引文(实际很少用)
- verse
- quote
- quotation
抄录代码
\verb|#inclde<iostream>|
开始和结束的符号是自定义的,不一定非得用竖线\begin{verbatim}...\end{verbatim}
多行的- 需要高亮的话可以用
listings
宏包
算法(伪代码)
clrscode
宏包,算法导论algorithm2e
宏包algorithmicx
宏包
画表格
使用tabular
环境。可以使用一些工具生成表格的代码,比如这个
\begin{tabular}{|rr|} %整数数字都建议右对齐
\hline
输入& 输出\\ \hline
-2 & 4
\end{tabular}
表格宏包
- 单元格处理,
multirow
,makecell
- 长表格,长表格不会自动分到下一页上,需要用宏包
longtable
或xtab
- 定宽表格
xtabular
- 表线控制
booktabs, diagbox, arydshln
- 表列格式
array
- 综合应用
tabu
插图
使用graphicx
包提供的\includegraphics
命令。
例\includegraphics[width=2cm]{acwinglogo.pdf}
,文件需要放在同一目录下。
代码画图
优先使用外部工具画图,特别是可视化工具,例如一般的矢量图用Inkscape
、Illustrator
甚至PowerPoint
(保存为pdf),数学图形用MATLAB
、matplotlib
之类。
如果有合适的宏包,某些特定类型的图形也可以用latex代码画图。现代latex绘图宏包很多基于TikZ
。
浮动体
figure
环境table
环境- 其他环境可以使用
float
包得到
浮动体的标题用\caption
命令得到,自动编号。
插入图片或表格,都需要再塞到一个环境中去使用,这个环境叫浮动体。插入的图或表在latex中默认按照一个字符来使用,其实就是一个大方块,而且会跟着文本走,我们不希望这样,就需要把图或表放到一个环境中,让图表浮起来。例子:
\begin{table}\centering
\begin{tabular}{|ccccc|}\hline
a&b&c&d&e\\
a&b&c&d&e\\
a&b&c&d&e\\\hline
\end{tabular}
\caption{标题}
\end{table}
自动化工具
- 目录
- 交叉引用
hyperref
包,PDF的链接与书签BibTex
参考文献,基本不用手打,从各大数据库导出即可
设计文档格式
基本原则
- 格式与内容分离,不要在意细节。如果格式不对或者需要一稿多投,那正文不需要动。
- 尽量只使用与内容相关的命令和环境
使用宏包
- 宏包将可重用的代码提取出来,相当于其他程序语言中的库。使用宏包可以用简单的接口实现非常复杂的功能,有些对于个人来说是“不可能的任务”。
- 第三方宏包可能破坏tex设计的向前兼容性;不同宏包之间如果出现兼容性问题更难解决。使用宏包会将兼容性问题从tex语言扩大到所有宏包代码。
字体
\rmfamily
,\textrm{...}
罗马字体\sffamily
,\textsf{...}
无衬线字体\ttfamily
,\texttt{...}
打字机字体
字号
\Huge, \LARGE, \Large, \large, \normasize, \small, \footnotesize, \scriptsize, \tiny
中文字号\zihao{5}, \zihao{-3}
借一张图,出处见水印。
对齐
centering
居中raggedleft
左对齐raggedright
右对齐
空白间距
\hspace{2cm}
水平间距\vspace{3mm}
垂直间距。一般只有在做模板的时候才用得到,平时用不到。
版面布局
- geometry包设置纸张等
- fancyhdr包设置页眉页脚等
分页断行
命令\linebreak
很少使用,\\
公式或图表使用,\pagebreak
很少使用,\newpage, \clearpage
另起一页,\cleardoublepage
写书可能用
盒子
- 只占一行的盒子
\mbox{内容}
- 占多行的盒子
\parbox{4em设置宽度}{内容}
,minipage
环境有类似作用
在导言区单独设置格式
如果预定义的格式不符合要求,需要修改设置。如果文档作者本人就是格式设计者,则此时更应该注意不要把格式和内容混在一起。
- 直接设置相关参数。如设置
\parindent
每段段首缩进,\parskip
两段之间的间距,\linespread
几倍行距,\pagestyle
总页眉页脚设置等。 - 修改部分命令定义。如修改
\thesection, \labelenumi, \descriptionlabel, \figurename
等。 - 利用工具宏包完成设置。如使用
ctex
宏包设置中文格式,使用tocloft
(toc list of figure table)设置目录格式等。
自定义命令和环境
对于latex没有提供的格式,可以使用自定义的命令和环境实现语义的接口。例如给程序名称定义一个命令。
\newcommand\prg[1]{\textsf{#1}}
这不仅提供了更具意义的名字,而且为未来的修改和扩充提供条件。
章节标题
ctex
包及文档类,用\ctexset
定制。西文用titlesec
等。
浮动标题
caption
包。
列表环境
enumitem
包。