LaTeX是基于TeX的文档排版系统。TeX是当初Knuth教授为了写作TAOCP而开发的个人排版软件,而LaTeX是Lamport博士为了编写自己的书籍而设计的。LaTeX实际上就是用TeX语言编写的一套宏代码,拥有比原来TeX格式(plain TeX)更为规范的命令和一整套预定义的格式,隐藏了不少排版上的细节。
搭建LaTeX环境
TeX/LaTex并不是单独的程序,而是复杂的软件包,里面包含了排版的专业引擎、编译脚本、格式转换工具、管理界面、支持工具、字体及数以千计的宏包和文档。一个TeX发行版就是把所有这些部件集合起来打包发布的软件。现在最为流行的发行版为CTeX套装和TeX Live。前者是Windows下面的软件,后者适用于各种操作系统。这里以TeX Live为例。
TeX Live是由TUG(TeX User Group)发布的一个发行版。
参考资料
安装前准备
下载TeX Live镜像
本机环境为64位Ubuntu 16.04,下载发型版为Tex Live 2016。
删除旧版
1 | sudo apt-get purge tex-common |
安装Perk-TK模块
install-tl是一个perl脚本,要在专家GUI模式安装,需要加入XFT支持的Perl-TK模块1
sudo apt-get install perl-tk
安装主程序
挂载ios镜像文件
1 | sudo mount -o loop path_to.iso /mnt |
启动安装程序
在加入了XFT支持的Perl-TK模块后,可以用以下方法启动GUI专家模式进行安装:1
sudo ./install-tl -gui
- 选择安装方案。初级用户推荐直接选择 scheme-full 全部安装。如果磁盘空间有限也可以选择small或者median模式。高级用户可以选择scheme-custom进一步定制。这里我选择了scheme-custom,并且在“进一步定制”里去掉了自己不会用到的一些语言包和ConTeXt相关组件。
- 由于这里是安装到系统里,因此portable setup选择了否,安装路径为默认。
- 选项里面选择默认为A4纸张大小,其它一些选项基本都选了是。其中要注意的是创建符号链接会在 /usr/local/bin里面创建指向可执行程序的软链接,从而可以直接使用latex,pdflatex等命令,此外还可以使用man latex等命令查看帮助。
- 建议在最后的get package updates一项选否,等安装好了之后手动安装更新。
配置环境变量
配置.bashrc
文件,在文件最后加上1
2
3
4export TEX_HOME=/usr/local/texlive/2016
export PATH=$PATH:$TEX_HOME/bin/x86_64-linux
export INFOPATH=$INFOPATH:$TEX_HOME/texmf-dist/doc/info
export MANPATH=$MANPATH:$TEX_HOME/texmf-dist/doc/man
进入home目录下输入命令使得修改的环境变量生效1
houmin@cosmos:~$ source .bashrc
测试安装是否成功
1 | houmin@cosmos:~$ tex --version |
安装完成1
2 cd /
sudo umount /mnt
配置字体
XeTeX 和 LuaTeX 可以直接使用系统字体。然而 texlive 自带的字体并不在系统的字体目录里面。为了让系统可以使用texlive所带的字体,需要进行如下配置。
- 将texlive的字体配置文件复制到系统内
1
sudo cp /usr/local/texlive/2016/texmf-var/fonts/conf/texlive-fontconfig.conf /etc/fonts/conf.d/09-texlive.conf
- 刷新系统字体缓存
1
sudo fc-cache -fsv
更新源配置
配置合适的CTAN源可以加快宏包更新的网速,以中科大的源为例:1
sudo tlmgr option repository http://mirrors.ustc.edu.cn/CTAN/systems/texlive/tlnet
之后可以利用tlmgr进行网络更新。CTAN 上的包更新很频繁,所以即便是最新版的texlive2016,其中也有大量的宏包需要更新(可能包括tlmgr程序本身)。1
sudo tlmgr update --self --all
dummy package 安装
texlive2016安装之后需要“告诉”系统texlive相关软件包都安装好了。这样在系统安装依赖于tex的软件(比如R)时就不必重新下载软件仓库中的旧版 texlive 相关软件。也不会造成不同版本 tex 命令的冲突。dummy package 就是解决这样的软件依赖问题的“虚包”。
测试LaTeX
这个时候,在testTeX文件夹下编写hello.tex1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29% hello.tex
\documentclass{beamer}%声明文档类型
\usetheme{default}%使用默认主题
\begin{document}
\begin{frame}{A sample slide}
A displayed formula:
\[
\int_{-\infty}^\infty e^{-x^2} \, dx = \sqrt{\pi}
\]
An itemized list:
\begin{itemize}
\item itemized item 1
\item itemized item 2
\item itemized item 3
\end{itemize}
\begin{theorem}
In a right triangle, the square of hypotenuse equals
the sum of squares of two other sides.
\end{theorem}
\end{frame}
\end{document}
编译即可生成beamer格式的slide1
houmin@cosmos:~/testTeX$ xelatex hello.tex
这个时候测试中文是否可行1
2
3
4\documentclass[UTF8]{ctexart}
\begin{document}
我爱中国!
\end{document}
编译可以看到输出
不过编译的时候会出现warning1
2
3
4
5
6
7
8
9
10
11*************************************************
* fontspec warning: "script-not-exist"
*
* Font 'FandolSong-Regular' does not contain script 'CJK'.
*************************************************
)) (/usr/local/texlive/2016/texmf-dist/tex/latex/ctex/config/ctex.cfg)
No file hello.aux.
(/usr/local/texlive/2016/texmf-dist/tex/latex/tipa/t3cmr.fd)
ABD: EverySelectfont initializing macros [1] (./hello.aux) )
Output written on hello.pdf (1 page).
Transcript written on hello.log.
其实貌似这个时候的中文字体已经好了?
编写test.tex1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16\documentclass{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK}{UTF8}{gkai}
这是一个楷体中文测试,处理简体字。
\end{CJK}
\begin{CJK}{UTF8}{gbsn}
这是一个宋体中文测试,处理简体字。
\end{CJK}
\begin{CJK}{UTF8}{bkai}
這是一個big5編碼的楷體中文測試,處理繁體文字。
\end{CJK}
\begin{CJK}{UTF8}{bsmi}
這是一個个big5編碼的明體中文測試,處理繁體文字。
\end{CJK}
\end{document}
使用命令pdflatex,不知道为什么用xelatex不行1
pdflatex test.tex
生成pdf文件
编辑器
Atom编辑器
参考
组织文本
参考
- 一份其实很短的LaTeX总结
- LaTeX数学公式
- LaTeX入门,刘海洋
作者、标题、日期
保存并用XeLaTeX编译以下文档1
2
3
4
5
6
7
8
9\documentclass[UTF8]{ctexart}
\title{你好,world!}
\author{Houmin}
\date{\today}
\begin{document}
\maketitle
你好,world!
\end{document}
在导言区
添加了有关作者、标题、日期,而在document
环境中,多了一个控制命令maketitle
。这个命令能够将导言区中定义的标题、作者和日期按照预定的格式显示出来。
章节和段落
保存并用XeLaTeX编译以下文档
数学公式
字体
\textrm{}
,可以在公式中插入正常文本(也可以直接在公式输入文本,但是会出现忽略空格分行等问题)\mathrm{}
,正常字体\mathit{}
,斜体\mathbf{}
,粗体符号boldfont\mathbb{}
,空心粗体blackboard\mathnormal{}
,正常字体
插入公式
- 在段落内插入公式:置于之间
- 在独立数学公式:置于
\[
和\]
之间 - 需要对行间公式进行编号,则
1
2
3\begin{equation}
...
\end{equation}
常用数学公式命令
项目 | 表示方法 | 示例 | 示例效果 |
---|---|---|---|
上标 | ^ | x^2 | $x^2$ |
下标 | _ | x_2 | $x_2$ |
上划线 | \overline | \overline{m+n} | $\overline{m+n}$ |
下划线 | \underline | \underline(m-n) | $\underline{m-n}$ |
向量 | \vec | \vec{AB} | $\vec{AB}$ |
导数 | ‘ | y’y’’ | $y’y’’$ |
平方根 | \sqrt | \sqrt{x} | $\sqrt{x}$ |
分数 | \frac{}{} | \frac{4}{a+b} | $\frac{4}{a+b}$ |
求和 | \sum | \sum_{i=1}{n}a_i | $\sum_{i=1}^{n}a_i$ |
乘积 | \prod | \prod_{i=1}(n)a_i | $\prod_{i=1}^{n}a_i$ |
积分 | \int \iint | \iint_a^b f(x)dx | $\iint_a^b f(x)dx$ |
极限 | \lim | \lim_{n\to\infty}\frac{1}{n} = 0 | $\lim_{n\to\infty}\frac{1}{n} = 0$ |
常用符号
常用函数
矩阵
不同分隔符
amsmath
的pmatrix
,bmatrix
,Bmatrix
,vmatrix
, Vmatrix
可以在矩阵两边加上各种分隔符。1
2
3
4
5\[ \begin{pmatrix} a&b\\c&d \end{pmatrix} \quad
\begin{bmatrix} a&b\\c&d \end{bmatrix} \quad
\begin{Bmatrix} a&b\\c&d \end{Bmatrix} \quad
\begin{vmatrix} a&b\\c&d \end{vmatrix} \quad
\begin{Vmatrix} a&b\\c&d \end{Vmatrix} \]
显示效果如下:
行内公式矩阵
使用smallmatrix
环境,可以生成行内公式的小矩阵1
Marry has a little matrix $ ( \begin{smallmatrix} a&b\\c&d \end{smallmatrix} ) $.
效果
Marry has a little matrix $ ( \begin{smallmatrix} a&b\\c&d \end{smallmatrix} ) $.
带点矩阵
1 | \[ A = \begin{bmatrix} |
效果
无括号矩阵
1 | \[ |
效果
配对括号
在数学公式中,如果直接使用括号,得到的公式会比较简陋,例如1
2
3\[
\lim_x(1+\frac{1}{x})^x = \mathrm{e}
\]
效果
我们可以用\left
和\right
命令来自动调整大小的括号,例如1
2
3\[
\lim_x \left (1+\frac{1}{x} \right)^x = \mathrm{e}
\]
效果
多行公式
有的公式特别长,我们需要手动为他们换行;有几个公式是一组,我们需要将他们放在一起;还有些类似分段函数,我们需要给它加上一个左边的花括号。
长公式
不对齐
无须对齐的长公式可以使用 multline
环境
1 | \begin{multline} |
效果
如果不需要编号,可以使用 multline*
环境代替
对齐
需要对齐的公式,可以使用 aligned
次环境来实现,它必须包含在数学环境之内。1
2
3
4\[\begin{aligned}
x ={}& a+b+c+{} \\
&d+e+f+g
\end{aligned}\]
效果
公式组
无需对齐的公式组可以使用 gather
环境,需要对齐的公式组可以使用 align
环境。他们都带有编号,如果不需要编号可以使用带星花的版本。
1 | \begin{gather} |
效果
分段函数
分段函数可以用cases
次环境来实现,它必须包含在数学环境之内。1
2
3
4
5
6\[
y=\begin{cases}
-x,\quad x\leq 0 \\
x,\quad x>0
\end{cases}
\]
效果