读 <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
环境