读 <Latex入门> 的笔记
Contents
读
的笔记
安装
中文
\documentclass[UTF8,nofonts]{ctexart}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
\setCJKsansfont[BoldFont=STHeiti]{STXihei}
\setCJKmonofont{STFangsong}
\begin{document}
文章内容。
\end{document}
简单版
\documentclass[UTF8]{ctexart}
\begin{document}
中文
\end{document}
输入字母


这表示左边的字母, 可以用右边的 \X 来生成.

同时输入多种语言的字母
\usepackage[greek, english]{babel}
然后就可以这样子输出德国的abcdef了:
\textgreek{abcdef}
demo

取消连字写法
\documentclass[12pt]{article}
\usepackage[greek,english]{babel}
\begin{document}
shelfful shelf{}ful shelf\/ful
\end{document}

可以注意到上面红色下划线的区别
单引号与双引号连续的情况
\documentclass[12pt]{article}
\usepackage[greek,english]{babel}
\begin{document}
say:“\,‘hello’ world”
\end{document}
即在双引号与单引号之间加上 \,

西文省略号
\ldots
或
\dots

标点符号风格切换
好像Mac版本默认不支持这个宏, 要另外安装?
\punctstyle{quanjiao}
\punctstyle{banjiao}
\punctstyle{kaiming}
\punctstyle{hangmobanjiao}
\punctstyle{plain}
空行与空格
多个空格与一个空格的功能相同.
单个换行也被看做是一个空格.
以字母命名的宏, 后面空格会被忽略. 如果确实需要空格, 可以使用 \空格 来输入. 也可以使用空的分组 \xx宏命令{}空格
ties
禁止在这种空格之间分行. 用 ~ 表示. 如:
Question~1
西文正确换行
在逗号, 句号, 分号等标点后面应该加空格. 以保证正确的间距和正确的换行.
因为标点后如果没有空格, 就不能换行.
中文与西文混合
\documentclass[UTF8,nofonts]{ctexart}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
\setCJKsansfont[BoldFont=STHeiti]{STXihei}
\setCJKmonofont{STFangsong}
\begin{document}
中文和English混合
\end{document}
汉字和其他内容之间如果空格, xeCJK 宏包会自动添加.

局部禁止这种空格
可以使用 \mbox宏. 如
\mbox{中文和}English不同于中文和English这个

全局禁止这种自动添加空格
\CJKsetecglue{}

可以看到, 默认不添加空格了. 除非自己显式加上.
phantom 空格
这个宏产生与参数一样大小的空盒子, 没有内容.

- 水平方向 :
\hphantom{} - 垂直方向 :
\vphantom{}
分段
连续两个换行表示分段.
也可以用 \par 命令产生一次分段效果.
另起一行, 但不分段: \\ 命令, 上一行保持原来的样子, 然后另起一行. 它有一个可选参数, 表示换行后增加的额外垂直间距. 如 \\[2cm] 如果 \\ 后要输出 [] 则可以这样子: \\{} []
\linebreak 指定一行的断点, 上一行仍按完整一行散开对齐.(一般不会在行文中用到)

TeX 中不同的数字形式

\documentclass[UTF8,nofonts]{ctexart}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
\setCJKsansfont[BoldFont=STHeiti]{STXihei}
\setCJKmonofont{STFangsong}
\begin{document}
\symbol{90}
% 英文状态下的双引号. shift + (enter左边那个键)
\symbol{"5A}
% 英文状态下的单绰号, 即 enter 键左边那个健
\symbol{'132}
% 英文状态下的反单引号, 即 esc 下面那个键
\symbol{`Z}
\end{document}

字体
family
\documentclass[UTF8,nofonts]{ctexart}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
\setCJKsansfont[BoldFont=STHeiti]{STXihei}
\setCJKmonofont{STFangsong}
\begin{document}
% 声明式为 \rmfamily
\textrm{你好}
% 声明式为 \sffamily
\textsf{你好}
% 声明式为 \ttfamily
\texttt{你好}
\end{document}

shape
\documentclass[UTF8,nofonts]{ctexart}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
\setCJKsansfont[BoldFont=STHeiti]{STXihei}
\setCJKmonofont{STFangsong}
\begin{document}
% 声明式为 \upshape
\textup{hello world}
% 声明式为 \itshape
\textit{hello world}
% 声明式为 \slshape
\textsl{hello world}
% 声明式为 \scshape
\textsc{hello world}
\end{document}

series
\documentclass[UTF8,nofonts]{ctexart}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
\setCJKsansfont[BoldFont=STHeiti]{STXihei}
\setCJKmonofont{STFangsong}
\begin{document}
% 声明式为 \mdseries
\textmd{hello world}
% 声明式为 \bfseries
\textbf{hello world}
\end{document}

完整
\fontencoding{编码}
\fontfamily{family名字}
\fontseries{series名字}
\fontshape{形状}
\fontsize{大小}{基本行距}
% 使生效
\selectfont
或
\usefont{编码}{family}{series}{shape}
定义新字体family
\newfontfamily\your_new_family_command[可选项]{字体名}
如
\newfontfamily\lucidasans{Lucida Sans}
使用
\lucidasans{This is Lucida Sans.}
设置英文字体
\usepackage{fontspec}
% 对应 \rmfamily 时使用的字体
\setmainfont{Times New Roman}
% 对应 \sffamily 时使用的字体
\setsansfont{Verdana}
% 对应 \ttfamily 时使用的字体
\setmonofont{Courier New}
设置中文字体
\setCJKmainfont[可选项]{字体名}
\setCJKsansfont[可选项]{字体名}
\setCJKmonofont[可选项]{字体名}
\setCJKfamilyfont{中文字体family}[可选项]{字体名}
查找字体
只查找中文字体:
在Bash中直接输入:
fc-list :lang=zh
查找矢量字体:
fc-list :outline
输出字体的符号表
这对于使用 \symbol 命令时查找符号代码特别有用.
\usepackage{fonttable}
\fonttable{字体名}
\xfonttable{编码}{family}{series}{形状}
例子
\documentclass[UTF8]{ctexart}
\usepackage{fonttable}
\begin{document}
\fonttable{MnSymbolA5}
\xfonttable{OT1}{MnSymbolA5}{m}{n}
\end{document}
结果

样式
强调
\emph{要强调的内容}

下划线
\documentclass[UTF8,nofonts]{ctexart}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
\setCJKsansfont[BoldFont=STHeiti]{STXihei}
\setCJKmonofont{STFangsong}
\begin{document}
\underline{你好} 世界
\end{document}

注意, \underline 的下画线部分不能换行. 可以用 ulem 包替换处理
ulem 包
\usepakcage{ulem}
下划线 : \uline{内容}
强调 \emph{内容}
中文的类似处理
\usepackage{CJKfntef}
使用:
\CJKunderdot{下加点} \\
\CJKunderline{下划线} \\
\CJKunderdblline{双下划线} \\
\CJKunderwave{下波浪线} \\
\CJKsout{删除线} \\
\CJKxout{涂改删除线} \\

字号
\tiny{非常小号}
\scriptsize{脚本大小}
\footnotesize{脚注大小}
\small{小号}
\normalsize{普通大小}
\large{大号}
\Large{大大号}
\LARGE{大大大号}
\huge{巨大号}
\Huge{超巨大号}

明确使用字号大小, 可以使用 ctex 或 ctexart 包提供的 \zihao 命令设置. 如
% 使用 5 号大小
\zihao{5}
距离
一个完整的距离表示, 必须是 数字+单位 例如 1cm
行距
% 行距 = 因子 * 基本行距, 可以通过下面来设置因子大小. 默认为1, 即行距是字号大小的1.2倍.
\linespread{因子}
setspace 包

水平间距
不可换行水平间距
\thinspace 或 \,
\negthinspace 或 \!
\enspace
\nobreakspace 或 ~

可换行水平间距
\quad
\qquad
\enskip
\空格

指定距离的水平间距
\hspace{距离}
例如
\hspace{1cm}
\hspace 是可断行的. 作用是分隔左右的内容. 某些只有一边有内容的, 则默认会忽略. 这时可以用 \hspace*{距离} 来强制显示

弹性长度
\hspace{普通长度 plus <可伸长长度> minus <可缩短长度>}
填充长度
你好\hspace{\fill}世界\hfill 你好
上面的会将那些内容填充好一行
\hspace{\fill} 的缩写是 \hfill
\stretch{倍数} 表示弹性的力度. \stretch{2} 表示2倍的 \fill
填充样式
% 使用横线填充
\hrulefill
% 使用点填充
\dotfill
box 盒子
一个字符, 一行文字, 一个页面, 一张表格在TeX中都是一个盒子.
mbox
\mbox{内容}
产生一个盒子, 左右模式排列. 内容不允许断行.
makebox
\makebox[宽度][位置]{内容}
位置 : 可以为
- c : 居中
- l : 居左
- r : 居右
- s : 分散
重叠
\makebox[0pt][l]{word}文字
专门的重叠命令
% 向左侧重叠
\llap
% 向右侧重叠
\rlap
边框box
\fbox
\framebox
与 \mbox , \makebox 类似
设置边框与内容的距离
\setlength{\fboxsep}{0pt} \fbox{content here}
默认\fboxsep为 3pt
设置边框的粗细 \fboxrule{0.4pt}
保存为变量
% 定义 \mybox 命令
\newsavebox{\mybox}
% 设置样子和内容
\sbox{\mybox}{text text}
或
\savebox{\mybox}[宽度][对齐]{内容}
% 使用
\usebox{\mybox}
段落
% 分段命令
\par
中文环境中, 每个自然段有一个固定的缩进, 长度由变量 \parindent 控制.
在英文标准文档类 article 中, 每个章节第一段是不缩进的.(可以使用 indentfirst 宏包来开启 \usepackage{indentfirst})
在中文标准文档类 ctexart 中, 则每段缩进, 长度为两个汉字宽.
如果要临时禁用某一段的缩进, 可以在段前使用 \noindent 命令. 显式使用缩进, 可以用 \indent 命令(产生一个与 \parindent 长度的缩进).
段与段之间的垂直距离
这是由 \parskip 控制. 默认是弹性长度 0pt plus 1pt
\setlength{\parskip}{0pt}
段落对齐
默认是两端对齐.
% 左对齐. ragged right 意思为右边参差不齐, 即左对齐.
\raggedright
% 右对齐. 排版签名, 日期等
\raggedleft
% 居中
\centering
对齐环境
flushleft: 左对齐环境flushright: 右对齐环境center: 居中对齐\begin{center} \end{center}
复杂的段落排版
\parshape
悬挂缩进
\hangindent=5pc \hangafter=-2
内容...
\hangindent: 正数表示作用于左侧. 负数表示作用于右侧.\hangafter: 正数表示作用于N行之后. 负数表示作用于N行之前.
这两个命令, 只对当前段起作用.
首字下沉
\usepackage{lettrine}
\lettrine{T}{the} Linux System

段落形状
\usepackage{shapepar}
% 心形的段落形状
\heartpar{
綠草蒼蒼 白霧茫茫 有位佳人 在水一方
綠草萋萋 白霧迷離 有位佳人 靠水而居
我願逆流而上 依偎在她身旁 無奈前有險灘 道路又遠又長
我願順流而下 找尋她的方向 卻見依稀彷彿 她在水的中央
我願逆流而上 與她輕言細語 無奈前有險灘 道路曲折無已
我願順流而下 找尋她的蹤跡 卻見彷彿依稀 她在水中佇立
綠草蒼蒼 白霧茫茫 有位佳人 在水一方
}

文本环境
引用环境 :
% quote 环境在段前没有首行的缩进, 每段话的左右边距比正文大. 适用于小段内容的引用
\begin{quote}
引用内容
\end{quote}
% quotation , 每段首行缩进. 适用多段的文字引用
\begin{quotation}
\end{quotation}
诗歌环境 :
\begin{verse}
诗歌内容
\end{verse}
摘要环境 :
\begin{abstract}
文章摘要...
\end{abstract}
摘要的标题由 \abstractname 定义. 英文默认为 Abstract , 中文默认为 摘要
列表环境
编号 :
\begin{enumerate}
\item 选项1
\item 选项2
...
\end{enumerate}
不编号 :
\begin{itemize}
\item 选项1
\item 选项2
...
\end{itemize}
关键字 :
\begin{description}
\item[关键字1] 描述
\item[关键字2] 描述
...
\end{description}
可以嵌套使用. (至多4层)
定理类环境
它会产生一个标题, 编号和特定格式的文本.
\newtheorem{thm}{定理}
\begin{thm}
直角三角形斜边的平方等于两腰的平方和
\end{thm}
\begin{thm}[勾股定理]
直角三角形斜边的平方等于两腰的平方和
\end{thm}
\newtheorm{thm}{定理} 表示定义了一个名为 thm 的定理类环境, 标题为 定理 .
\begin{thm}[勾股定理] 使用的时候, 有一个可选的小标题, 这里为 勾股定理

计数器参数
\newtheorem{thm}{定理}[chapter]
上面的表示按章节来编号
自定义定理类环境格式
使用 theorem 包来设置各种参数
抄录和代码环境
抄录(原样输出):
\verb<符号>抄录内容<符号>
例如
\verb"\Latex"
使空格可见
\verb*<符号>内容<符号>
例如
\verb*"\Latex 你好"

大段摘抄
\begin{verbatim}
#!/bin/bash
xxxx
\end{verbatim}
空格可见:
\begin{verbatim*}
#!/bin/bash
xxxx
\end{verbatim*}
高亮程序代码
使用 listings 宏包. 其他的参数查看文档. 最常用的就是设置 language 语言了.
\usepackage{listings}
\begin{lstlisting}[language=C]
/** hello.c */
#include <stdio.h>
int main() {
printf("Hello world\n");
return 0;
}
\end{lstlisting}

tabbing 环境
排版制表位, 即让不同的行在指定的地方对齐.
这该环境中, 行与行之间用 \\ 分隔. 使用 \= 来设置制表位. 使用 \> 可以跳到下一个前面已经设置的制表位.
\begin{tabbing}
格式\hspace{3em} \= 作者 \\
Plain \Tex \> 高德纳
\LaTeX \> Leslie Lamport
\end{tabbing}

\kill 会忽略当前行的内容, 但保留制表的位置.
太复杂话, 可以用 clrscode 宏包 或 algorithm2e 或 algorithmicx宏包来处理
脚注与边注
例如\footnote{这是一个脚注}
它会出现在页面底部. 以 \footnotesize 的字号输出.

边注
例如\marginpar{这是一个边注}

垂直间距与垂直盒子
\vspace{长度}
\vspace*{长度}
垂直盒子
\parbox[位置][高度][内容 位置]{宽度}{盒子内容}
例如
你好\parbox{2em}{你好世界}

三个参数分别为
- 盒子的基线位置
- 盒子的高度
- 盒子内容在盒子内的位置
位置参数可以用
- c : 居中
- t : 顶
- b : 底
默认为居中.
内容位置可以为:
- c
- t
- b
- s : 垂直分散对齐
标尺 rule 盒子
它是一个矩形盒子, 通常使用一个细长的标尺盒子画线.
\rule[升高距离]{宽度}{高度}
升高距离默认为 0pt. 不同的大小效果如下:
\rule[-10pt]{5pt}{5pt}你好世界 \rule[-10pt]{5pt}{5pt}
\rule[0pt]{5pt}{5pt}你好世界 \rule[0pt]{5pt}{5pt}
\rule[10pt]{5pt}{5pt}你好世界\rule[10pt]{5pt}{5pt}

升降的盒子
\raisebox{距离}[高度][深度]{内容}
距离为正(例如 0.16em), 表示盒子里面的内容上升, 距离为负(例如 -0.16em)表示下降.
层次
标题和标题页
\title{标题 \\换行内容}
\author{作者\\工作单位及联系方式 \and 第二个作者\\工作单位有联系方式}
\date{日期}
% 表示今天, 英文为 April 28, 2013. 中文格式为 2013年4月28日
\date{\today}
使用 ctex 宏包可以用 \CTEXoptions 来设置 \today 的格式. 例如
% 2013年4月28日
\CTEXoptions[today=small]
% 二0一三年四月二十八日
\CTEXoptions[today=big]
% April 28, 2013
\CTEXoptions[today=old]
在声明标题和作者时, 可以使用一种特殊的脚注 \thanks{内容}
输出标题 \maketitle . 通常是 document 环境后面的第一个命令.
独立一张标题页:
\begin{titlepage}
这里可以自定义标题页的格式
\end{titlepage}
可以使用 titling 宏包来详细设置这些. 适合模板作者用.
划分章节
| 层次 | 名称 | 命令 | 说明 |
|---|---|---|---|
| -1 | part 部分 | \part | 可选最高层 |
| 0 | chapter 章节 | \chapter | report, book 之类的最高层 |
| 1 | section | \section | article 类高最层 |
| 2 | subsection | \subsection | 小节 |
| 3 | subsubsection | \subsubsection | 小小节, 默认不编号, 不编目录 |
| 4 | paragraph | \paragraph | 默认不编号, 不编目录 |
| 5 | subparagraph | \subparagraph | 默认不编号, 不编目录 |
命令后带 * 表示不编号, 不编目录. 例如 \chapter*
正文的标题与目录的标题不同的编排. 正文使用长标题, 目录使用短标题. 则可以:
\chapter[你好]{你好:这是我的世界}
控制编号的层次
它是由计数器 secumdepth 控制(除 part 外). 默认为 3.
附录
% 附录的开始
\appendix
\chapter{附录章节}
...
对于 book 类
% 正文前的资料, 这部分不编号
\frontmatter
\chapter{序}
% 正文的主要部分
\mainmatter
\chapter{第一章}
% 附加材料, 这部分不编号
\backmatter
chapter{进一步参考资料}
多文件编译
% 文件名不用带 .tex 扩展名. 通常是作为 chapter .
% 即文件中的内容是
%
% \chapter{第一章}
% .....
%
% 会在前后自动使用 \clearpage 或 \cleardoublepage 另起新页
\include{文件名}
% 或使用 input. 文件名可以带也可以不带扩展名.
% 这种是直接把文件的内容复制到当前位置
\input{文件名}
文档类
标准的英文文档类
- article
- report
- book
\documentclass 标准选项. 这是全局设置的. 不仅会影响document 的内容, 还会影响所使用的宏包.

ctex 宏包(中文环境)提供了三个对应标准文档类的
- ctexart
- ctexrep
- ctexbok
ctex 支持的选项


页面尺寸与 geometry
这个在详细设置页面时使用 geometry 宏包来处理. 可搜索下资料
自动化工具
生成章节目录 \tableofcontents 连续两次编译文档后即可生成…
交叉引用
它的使用分成两部分(也要至少编译两次)
- 定义标签 :
\label{标签名} - 引用标签 :
\ref{标签}或\pagere{标签}. 分别表示对象的编号和所在页码
nameref 宏包可以引用章节标题等.
电子文档与超链接
比如PDF中的文档目录标签和超链接功能. 这些可由 hyperref 宏包完成.
\usepackage{hyperref}
% 如果是 ctex 宏包的话, 可以直接加 hyperref 选项
\documentclass[hyperref,UTF8]{ctexart}
引入之后, 编译文档时, 会自动根据章节生成目录结构的PDF文档标签, 并且目录和交叉引用会自动生成超链接了.
注意, 至少要编译两次文档.
参考文献与BIBTEX
文献数据库是以 .bib 结尾的文本文件, 内容是许多文献条目.如
# tex.bib中的某一条条目数据
@BOOK{引用名字,
title={标题},
publisher={出版商, 如 人民出版社},
year={出版年份, 如 2004},
author={作者},
series={类别, 如计算机/编程},
address={地址},
edition={第几版}
}
在文档 *.tex 源文件中, 要做好下面三件事来引用文献
- 使用
\bibiographystyle命令设定参考文献的格式.- plain : 按作者, 日期, 标题排序
- unsrt : 不排序, 保持引用的次序
- alpha : 使用一种三字母缩写的方式编号并按作者排序
- abbrv : 与 plain 基本相同, 只是定义了一些缩写
- 在正方文中使用
\cite命令引用需要的文献, 或是使用\nocite命令指明不引用但仍需要列出的文献标签.\cite引用的位置会出现文献的编号, 同时提示Latex列出所引用的文献. 如果想列出数据库中所有的文献, 可以用\nocite{*}命令. (一般用于一篇文章编写的小型文献数据库) - 使用
\bibliography命令指明要使用的文献数据库. LaTeX 会在这条命令的位置, 插入参考文献列表. 指定的数据库文件时, 不带.bib后缀. 可以同时从多个文献数据库中引用, 如\bibliography{a,b,c}
要最终生成, 则要这样子
xelatex doc.tex
bibtex doc.aux
xelatex doc.tex
xelatex doc.tex
jabref
这是一个开源的, 专门用来处理 BIBTEX 文献数据库的管理软件
制作索引
- 导言里使用
\makeindex指令, 开启索引文件输出 - 导言里使用
makeidx宏包, 开启索引列表排版功能 - 正文中需要索引的关键字处使用
\index命令, 生成索引项 - 在需要生成索引的地方(通常是文档尾部), 使用
\printindex命令, 输出处理好的索引列表
一个示例内容
\documentclass[UTF8]{ctexart}
\usepackage{makeidx}
\makeindex
\begin{document}
\section{勾股定理}
勾股定理在西方称为毕达哥拉斯定理 (Pythagoras's theorem).
\index{Pythagoras}
在中国常称为商高定理 \index{商高}
\printindex
\end{document}

最终编译(foo.tex)
xelatex foo
makeindex foo
xelatex foo
可以像这样子 \index{编程!Java} 进行分层索引.
数学公式
有两种
- inline : 在行内显示. 也称为 intext. 使用
$....$表示. 或\(...\). 或\begin{math}....\end{math} - displayed : 单独占据整行显示出来的. 使用
$$...$$表示. 或\[....\]或\begin{displaymath}....\end{displaymath}
上面的是不显示编号的. 若想显示编号, 可以用 \begin{equation}.....\end{equation}
最常用 amsmath 宏包来排版数学公式.
上下标
^{上标内容}
_{下标内容}
角度
\circ
上下画线与花括号
\overline{a+b}
\underline{a}
上下花括号
\overbrace{a+b}
\underbrace{a+b+c}
分式
\frac{分子}{分母}
如
$$ \frac{1}{100} $$

根式
\sqrt[开方次数]{开方数}
图表
tabular 与 array 环境