本文以介绍 LaTeX 基本排版知识为目的。安装和配置请参考首页发行版。
目录[隐藏]
|
LaTeX 是一种标记语言,类似于 HTML。LaTeX 源文档是 plain ASII 文本文档。你可以使用任何编辑器创建、打开、修改它。一个最简单的文档如下
\documentclass[11pt]{article} \begin{document} Hello world! \end{document}
其中 \documentclass
声明文档类:article
,11pt
选项:使用 11pt 字体。\begin{document}
和 \end{document}
声明一个 document 环境,其间即是需要排版的内容。\documentclass
和 \begin{document}
之间为导言区。通常保存一些方便的全局配置。无数作者已经贡献了他们的配置,称为宏包。
文档名称必须简洁易懂,不能有空格或者其他特殊字符,最好只用小写字母加数字。
article | 期刊文章,由节 section 组成 |
proc | 会议论文集,基于多篇 article |
minimal | 最少设置的一种。只有基本字体和纸张大小设置。通常用于调试 |
report | 报告,有章 chapter,节 section 等 |
book | 书,有章 chapter,节 section 等 |
slides | 幻灯片,使用较大的无衬线字体 |
memoir | 一种非常灵活,可以基于此快速创建所需要的类型 参考手册 |
letter | 信件 |
10pt, 11pt, 12pt | 设定文档使用的字号。默认是 10pt。 |
a4paper, letterpaper,... | 定义纸张大小。除此之外,还有 a5paper, b5paper, executivepaper, legalpaper |
fleqn | 独行公式向左对齐 |
leqno | 公式编号列于左边 |
titlepage, notitlepage | 指示文档标题之后的内容是否新开一页。article 类型无此选项 |
onecolumn, twocolumn | 单栏,双栏 |
twoside, oneside | 双边,单边。article 和 report 默认使用 oneside ,book 默认为 twoside |
landscape | 页面横放 |
openright, openany | 与单双边设定和 \chapter 命令有关。report 默认 openany ,book 默认 openright |
draft | 以一个小黑块表明断行错误处,用于调试 |
连续的空格被认为是一个空格。行首的空格通常被忽略。按下回车产生的断行也被认为是空格。
一个空行意味着一段的结束。连续的空行被当作是一个空行。
如下的符号在 LaTeX 中有特别的用处,
# $ % ^ & _ { } ~ \
一般它们不会被打印出来,如果需要显示,就输入
\# \$ \% \^ \{ \} \& \_ \{ \} \~ \textbackslash
来替代。
\ 在 LaTeX 里有专门的作用,用来引导宏。所谓宏就是 LaTeX 里的命令、环境等。
\verb 命令被设计用来显示输入即输出的内容。所以上述字符也可以使用 \verb 来输出
\verb|#$^&| \verb+#$^&+
命令通常由 \ 开始,加上一串字母作为名字, 以空格,数字或者其他非字母字符结束。
一些命令需要参数,用 { } 引入。有时候需要选项,写在 [ ] 中。
\commandname[option1,option2,...]{argument1}{argument2}...
创建新的命令
\newcommand{name}[num]{definition}
name
是命令名称,definition
是定义,可选项 num
设定命令需要的参数 (最多为 9,默认是 0)。例子
\newcommand{\haha}{something are here \ldots{}} \haha
产生
something here ...
第一个参数通过 #1 引用,类似地,#2,#3 等代表第 2,3 个参数。例子
\newcommand{\haha}[1]{something #1 are here \ldots{}} \haha{I like}
产生
something I like are here ...
新建命令不能和现有命令同名,如果要覆盖现有命令,通过 \renewcommand
,用法跟 \newcommand
一致。另外还可以使用 \providecommand
,在覆盖原有命令时,将不会产生任何警告。
新建命令还可有默认参数
\newcommand{name}[num][default]{definition}
当 [default]
存在时,第一个参数将会使用它。比如
\newcommand{\haha}[2][very much]{something #2 #1 are here \ldots{}} \haha{I like} \haha[I do not like]{I like}
产生
something I like very much are here ... something I like I do not like are here ...
环境的作用和命令类似,但是作用于大段的文本。
\begin{environmentname} text to be influenced \end{environmentname}
在 \begin
和 \end
之间可以任意使用其他命令或者环境。
新建环境通过
\newenvironment{name}[num]{before}{after}
before
和 after
包含环境内文本被处理之前和之后的一些命令。例子
\newenvironment{dotted} {\ldots{}}% {\ldots{}}% \begin{dotted} I am here \end{dotted}
产生
... I am here...
注意上面第一组 ... 之后的空格。如果不想要,在 before
里加 \ignorespaces
。如果在第二组 ... 和之后的文本间也有不必要的空格,需要在 after
里加 \ignorespacesafterend
。
注释以 % 区分。注释内容不会被排版。因为行首的空格会被忽略,所以如果需要断行而且断行的地方不要空格,可以放一个 %。在宏定义当中会经常见到。
大块的注释内容需要很多 %,操作起来不太方便,这时候,就可以利用 TeX 的条件语句,在其前面和后面写
\iffalse what are commented out \fi
编译是通过命令行进行的。键入
latex foo.tex
回车,将会调用 latex 引擎编译 foo.tex 为 foo.dvi。接下来可以通过
dvips foo.dvi ps2pdf foo.ps
产生 pdf 文档。常用的编辑器会把这些命令集成为工具栏按钮,而不必在命令行键入它们。
编译引擎有很多种, pdflatex,xelatex 将会直接输出 pdf 文档,而不必使用 dvips, ps2pdf 等转换工具。
在 Unix 平台,编译可以通过更强大的 GNU Make 来完成。
编译时还可以从命令行读入一些参数,比如,源文档里有如下设置,
\usepackage{ifthen} \ifthenelse{\equal{\blackandwhite}{true}}{ % 黑白输出时,一些命令 }{ % 彩色输出时,一些命令 }
然后
latex '\newcommand{\blackandwhite}{true}\input{foo.tex}'
产生黑白输出。如果 \blackandwhite
设置成 false,就产生彩色输出。
扩展名 | 描述 |
---|---|
.tex | TeX 源文档 |
.sty | LaTeX 样式文件,使用 \usepackage 命令导入 |
.dtx | Documented TeX。LaTeX sty 文档的分发形式 |
.ins | .dtx 的安装文件,latex foo.ins 会生成所需的 sty 文档和帮助手册 |
.cls | 类文档,使用 \documentclass 命令导入 |
.fd | 字体描述文档 |
.dvi | 设备无关文件 latex 编译产生 |
pdf 文档 | |
.log | 编译日志 |
.toc | 存放章节名称,在下一次编译时读入以产生目录 |
.lof | 类似于 .toc 产生插图目录 |
.lot | 产生表格目录 |
.aux | 存放各种标签引用信息,下次编译时读入以产生交叉参考 |
.idx | 存放索引词,用 makeindex 处理 |
.ind | 处理过的 .idx 文档,下次编译时读入以产生索引 |
.ilg | makeindex 的日志 |
宏包是对现有文档类的各种修改、增补的集合。CTAN 是一个在线的宏包档案库。其中主要的宏包已经包含在各种发行版里,请看常用宏包。要创建自己的宏包,请参考类与宏包写作。
在文档导言区使用以下代码导入:
\usepackage[option]{package_name}
如果没有冲突,多个宏包也可以使用以下代码导入:
\usepackage{package1,package2,package3}
额外的宏包建议去 TeX Catalogue 查找,下载。
下载回来的宏包解压后,通常会有一个 readme.txt,其中记录安装配置方法。一般情况下需要这么几步
latex foo.ins
: 产生 .dtx 文档所需的文件 latex foo.dtx
或者 pdflatex foo.dtx
: 产生 .dvi 或 .pdf 的参考手册 .sty 格式文件。如果有 .idx 文件,还要照索引的步骤来生成索引。如果还有 .glo 文件,需要 makeindex -s gglo.ist -o foo.gls foo.glo
扩展名 | 目录 ($TEXMF_LOCAL/下) | 描述 |
---|---|---|
.cls | tex/latex/base | 文档类 |
.sty | tex/latex/packagename | 样式文件 |
.bst | bibtex/bst/packagename | 文献格式 |
.mf | fonts/source/public/typeface | METAFONT 轮廓字体 |
.fd | tex/latex/mfnfss | METAFONT 的字体定义文件 |
.fd | tex/latex/psnfss | PostScript Type 1 字体定义文件 |
.pfb | /fonts/type1/foundry/typeface | PostScript Type 1 轮廓字体 |
.afm | /fonts/afm/foundry/typeface | Type 1 字体的 Adobe Font Metrics |
.tfm | /fonts/tfm/foundry/typeface | METAFONT 和 Type 1 字体的 TeX Font Metrics |
.vf | /fonts/vf/foundry/typeface | TeX 虚拟字体 |
.dvi | /doc | 宏包帮助文档 |
/doc | 宏包帮助文档 | |
others | tex/latex/packagename | 其他未说明的文档 |
texhash
mktexlsr
initexmf --update-fndb
(或者使用 GUI 的 mo.exe) 如果只是临时使用额外的宏包而不想安装它们,也不想刷新文件名数据库,可以将产生的 .sty .tex 等文档复制到源文档所在目录;如果是在 Linux 下使用 texlive, 还可以直接将他们复制到 ~/.texlive/texmf-var/tex/latex/ 目录下。
处理较大的文件,一个有效的方法是把它分成几个部分,然后分别导入,
\input{filename1} \input{filename2}
另一个常用的导入命令是
\include{filename1} \include{filename2}
区别在于,\include
时总是开始新的一页, \input
连续不分页。所以\include
适合 book 类按 chapter 分割。
较大的文件通常会编译很长时间,为了快速调试,可以部分编译
%\include{filename1} \include{filename2} \include{filename3}
只会编译 filename2.tex,filename3.tex。或者直接声明
\includeonly{filename2,filename3}
注意:filename之间除了逗号,不能有空格。