介绍LaTeX
LaTeX 排版系统简介
- TeX系统:
TeX是由Donald E. Knuth书写的一个计算机程序,目的是对文本和数学公式进行排版。最基本的TeX程序是由一些很基本的命令组成,以完成简单的排版和程序设计功能。 TeX 也允许使用这些基本的命令定义一些更复杂的高级命令,由此利用低级的结构快形成一个用户界面相当友好的环境。Knuth还设计了一个名叫Plain Tex的基本格式,以便与低层次的TeX 呼应。Plain TeX格式依然是TeX 字处理相当基本的部分,实际上我们很分清TeX与Plain TeX.
- LaTeX系统:
Plain TeX的重点只是停留在如何排版的层次上,对TeX的深层功能的进一步发掘需要相当高级的编程技巧。美国计算机学家Leslie Lamport开发了LaTeX格式,这种格式提供了一组生成复杂文档所需要的更高级的命令,它在生成复杂表格和数学公式方面功能尤为突出。它可以自动给 出标题、章节、表格目录、交叉引用、公式编号、文献引用、浮动图表、浮动图形等等。LaTeX 经过多年的更新其版本号固定为2.09.
- LaTeX2e系统:
由于LaTeX的普及及其许多领域的扩展,使得相当广泛的一类排版格式都冠以LaTeX的标签。为了再次统一自LaTeX2.09版本以后所进行的 各种修补工作并建立一个真正的、能满足较长时间内排版需要的LaTeX改进标准,在Frank Mittelbach的领导下,Leslie Lamport, Chris Rowley和Rainer Schopf创立了LaTeX项目组,旨在得到LaTeX的一个新版本3,在该版本中建立一个最优的、有效的命令集合。1994年他们发行了一个新的版 本,并命名为LaTeX2e。
LaTeX 排版的主要特点
LaTeX 排版的主要特点:
- 国际权威学术机构及会议指定排版格式
- 符号公式随心所欲
- 文档易于网上传输
- 支持多种 操作系统
- 易于转换成ps文档、pdf文档或HTML文档
- 便于扩充并形成个性化的排版环境(用LaTeX的宏包实现)
LaTeX源文件的组织结构
基本结构
每一个源文件基本结构如下:
/documentclass[字体大小,纸张大小,杂类参数]{文档类别}
导言区(preamble)
/begin{document}
文档正文区
/end{document}
LaTeX的文档类别(/documentclass{})
合法的LaTeX文档类别包括下面的5种:
- article(文章)(注:CCT中可使用cctart)
- book(书籍)
- report(报告)
- letter(信函)
- slides(幻灯片)
除幻灯片类别,标准的文档类别接受下面的可选参数确定字体大小(1pt=1/72.27英尺)
- 10pt(缺省)
- 11pt
- 12pt
所有的文档类别都接受下面形式的可选参数确定纸张大小(缺省为letter)
- a4paper (29.7£21cm)
- a5paper (21£14.8cm)
- b5paper (25£17.6cm)
- letterpaper (11£8.5 in)
- legalpaper (14£8.5 in)
- executivepaper (10.5£7.25 in)
还有一些杂类可选参数
- landscape:选择横向排版方式,缺省为纵向排版(portrait)
- leqno:公式的编号放在公式的左边,缺省时放在右边
- fleqn:公式显示左边对齐,缺省时中间对齐
- draft,final:标注/不标注带标尺的边框,缺省值为final
- oneside,twoside:选择单面还是双面打印。书籍类缺省为双面,其余缺省为单面
- onecolumn,twocolumn:通栏排还是分栏排,缺省为通栏
导言区的组成
装入必要的类和包文件
为了便于用户定制或扩充排版系统,LaTeX将许多功能并存放在不同的类或包文件中。使用某个类或包文件的功能,需要在导言区中声明(激活):
/usepackage[option]{package}
其中package为要激活的包的名称,option是一组关键字列表,用以说明包中特定的功能或特性. 例如在从例子测试_CJK.tex中使用的
/usepackage[dvips,usenames]{color} % 支持颜色
/usepackage{CJK} % 用CJK支持汉字
/usepackage{fancyhdr} % 支持自定义的页眉、页脚
/usepackage{fancyvrb} % 支持抄录
/usepackage{fancybox} % 支持文本加框
进行文档全局性设置
有时你会对标准的设置不满意,这时可将一些设置命令放在导言区以影响整修文档。例如:
/setlength{/textwidth}{16cm} /setlength{/textheight}{22cm}
/setlength{/oddsidemargin}{0pt} /setlength{/parindent}{0em}
/setlength{/parskip}{3mm}
/renewcommand{/baselinestretch}{1.3}
/color{black}
文档正文区的组成
定义文章的一些信息:
/title{书名}
/author{作者名}
/date{日期} % /today
/maketitle
LATEX在处理输入文件时总是牌下面三种模式中的一种:
- Paragraph(段落模式)
- Math(数学模式)
- Left-to-right(从左到右模型,简称LR模式)
正文的输入需要按选定的文档类型及加载的宏包文件进行,由此得到相应的标题、章节、页码、页眉、页脚、脚注、边注、表格、图形以及各种类型复杂的数学公式。
当处理很大的文档时,经常将文件分成若干个部分分别进行编译,这时我们可以使用LATEX所提供的命令
- /input
- /include
- /includeonly
/input{texfile}
文件名只需指定基本名,不需加扩展名.tex,它等价于直接将文件“文件名.tex”中的内容输入到命令/input所处的位置.
此命令可以放在文档的任何地方(导言区或正文区),而且可以相互嵌套。
您可以将经常使用的导言放在单独的一个文件中,使用时置于源文件之首。
在/begin{document}..../end{document}之间加入多个/input命令.导言区加入/listfiles可以得到读入文件的清单.
/include{texfile}
使用/input命令的缺点是,通过/input命令合并起来的文章(不管那部分) 每经过一次修改,所有的文件都要被重新读入和处理。若用/input命令仅加载那个特定的文件,那么所有的页码、章节、插图和公式等的自动编号都从1开 始,这会使交叉引用产生混乱。更好的办法是采用/include命令。
它只能放在文档的正文区,不能嵌套,且与命令/includeonly{文件清单}结合使用。
文件清单列出当前正在处理的文件(其中的文件名不需要加后缀.tex,各文件名用逗号隔开)。若/input命令后的文件名在文件清单中,则此命令等价于
/clearpage/input{文件名}/clearpage,
否则相当于换页。因此文档应该在新页开始(如章与章之间)分割。/include命令可以帮助我们省去很多宝贵的编译时间。它的主要好处是页面、章 节和公式编号的附加信息可以由/includeonly命令提供,因此交叉引这类命令,如/ref和pageref命令等能生成正确的结果。此命令可多次 使用,所需的导言区仅有一个。
样例:编辑一本由8章组成的书籍
/documentclass{book}
导言区
/includeonly{.....}
/begin{document}
/frontmatter
/include{toc}
/mainmatter
/include{chapt1}
...
/include{chapt8}
/backmatter /printindex
/end{document}
其中toc.tex文件由如下的文本组成
/setcounter{page}{7}
/tableofcontents
/listofcontents
/listoffigures
通过在/includeonly命令中添加适当的项,如/includeonly{toc,chapt8} 就可以选择性地处理各章(这里为第8章)。
/includeonly
有些命令支持后面带有一对方括号[ ] 括起来的可选参数.
导言区
bookmarks
pdf 格式的文档有一个特性— bookmarks,让用户可以打开一个树状的索引浏览文章的各个章节,这在阅读较大的文档时非常方便。TEX 中可以使用hyperref 宏包实现这一功能。
/usepackage[dvipdfm,CJKbookmarks,bookmarks=true,bookmarksnumbered=true]{hyperref}
中文bookmarks
pdf 的bookmarks 对文字的编码要求比较特殊,它可以使用两种编码:ISO Latin 1 或Unicode UTF16 Big Endian。TEX 处理像中文这种多字节语言,即使文档采用UTF8 编码保存,仍然无法得到正确的bookmarks,这需要在文档中使用特殊的命令。
对于GB2312 编码的文件,我们可以在其后加上一行特殊指令(加在/begin{document}之后):
/AtBeginDvi{/special{pdf:tounicode GBpc-EUC-UCS2}}
而UTF8 编码的文件,则使用:
/AtBeginDvi{/special{pdf:tounicode UTF8-UCS2}}
加在/begin{document}之后
其中UTF8-UCS2 的CMap,需要到 http://project.ktug.or.kr/dvipdfmx/sample/omega/lambda-example2.zip 下载一个文件包,然后将UTF8-UCS2 文件复制到TEXMFHOME/dvipdfm/CMap 目录下2。
对bookmarks做一些定义:
/hypersetup{colorlinks, linkcolor=blue, citecolor=blue, urlcolor=blue,%定义链接的样式
bookmarksopen=true,%打开PDF文件的同时打开书签
pdfhighlight=/P, %/I(inverse) /N(no effect) /O(outline) /P(inset)
pdfauthor={MichaelBibby <michaelbibby@gmail.com>},%该PDF文件的制作者
pdfcreator=tex,%制作该PDF文档的工具
pdftitle={teTeX Chinese},%该PDF文档的标题。不是指PDF文件的文件名,任意取。
pdfsubject={teTeX},%
pdfkeywords={项目方案},%该文档的关键字
pdfstartview=FitH, %FitBH, FitB
pdfpagemode=UseOutlines,%UseOutlines, %None, FullScreen, UseThumbs
}
gbk2uni
这个工具很有用。有时候 bookmark 出不来,可能就需要它来帮忙。 ctex套件已经带有这个工具,UNIX平台的需要额外下载。
usepackage
indentifirst
indentfirst # 每个中文段落都在第一行空两个中文字符的宽度。
由于indentfirst不能准确地使用两个汉字的位置,所以需要在/begin{document}之后加一个TEX指令:
/CJKindent
hyperref
hyperref宏有许多选项,比如,可以这样使用:
/usepackage[dvipdfm,CJKbookmarks,bookmarks=true,bookmarksnumbered=true]{hyperref}
另外更多的常用选项:
/hypersetup{colorlinks, linkcolor=blue, citecolor=blue,
urlcolor=blue,
plainpages=flase,
pdfcreator=tex,
bookmarksopen=true,
pdfhighlight=/P,
pdfauthor={MichaelBibby <michaelbibby@gmail.com>},
pdfcreator={cTeX},
pdftitle={/LaTeX Beamer 入门},
pdfkeywords={/LaTeX Beamer 入门 MichaelBibby},
pdfstartview=FitH,
pdfpagemode=UseOutlines,%UseOutlines, %None, FullScreen, UseThumbs
}
正文
文章标题
/title{OpenBSD入门} % 设定文章的标题。书名。
/author{张煌彬} % 文章作者
/date{/today} % 文章的日期
%/newpage
/maketitle % 使用该命令生成标题信息。只有加了该命令才能生成文章标题信息。
章和节
对article风格的文档,有下列分节命令:
/section{...}
/subsection{...}
/subsubsection{...}
/paragraph{...}
/subparagraph{...}
对report 和book 风格的文档,还有其他两个分节命令(part比chapter要大):
/part{...}
/chapter{...}
因为article 风格的文档不划分为章,所以很容易把它作为一章插入书籍文档中。节之间的间隔,节的序号和标题的字号由LATEX 自动设置。分节的两个命令有些特殊性:
- 命令/part 不影响章的序号。
- 命令/appendix 不带参量,只把章的序号改用为字母标记。
/chapter还有另外一种使用方式:
/chapter[显示在目录索引中的内容]{显示在正文中的标题}
LATEX 在文档编译的最后一个循环中,提取节的标题和页码以生成目录。命令
/tableofcontents
在其出现的位置插入目录。为了得到正确的目录内容,一个新文档必须编译两次。有时还要编译三次。届时LATEX 会通知你。
字体与尺寸(Todo)
字体
字体尺寸
插入图片(eps)
LATEX 通过figure 和table 环境提供了处理图像或者图形等浮动对象的基本能力。
有几种办法可以通过使用基本LATEX 命令或者LATEX 扩展宏包来产生实际的图形。但是大多数用户发现这些命令相当难以理解。因此我们不打算在这个手册里深入介绍这些内容。如果需要这方面的详细信息,请参阅 The LaTeX Companion和LaTeX Manual。
一个比较简单的在文档中加入图形的办法就是使用特定的软件包1 生成图形文件,然后将最终的图形文件包含到文档中。LATEX 的宏包提供了许多方法来完成这个工作。在这个手册里,我们只讨论Encapsulated PostScript(EPS) 图形文件的使用。因为它比较简单而且被广泛地使用。
为了使用EPS 格式的图片,你必须有一个PostScript 打印机来输出结果。由D. P. Carlisle 制作的graphicx 宏包包含了一套很好的命令来包含图形。它是一个叫作“graphics” 的宏包集中的一部分。假设你使用的系统安装了PostScript 打印机和graphicx 宏包,那么你就可以通过下面的步骤一步步地把一幅图片加入你的文档中:
1. 用你的图像软件输出EPS 格式的图形文件。
2. 在输入文件的导言中加上下面的命令来装入graphicx 宏包。
/usepackage[driver]{graphicx}
这里driver 是你使用的“dvi 到postscript”的转换程序。最常用的是 dvips。因为TEX 中没有规定包含图形的标准,所以程序的名字是必需的。知道了driver 的名字,graphicx 宏包就可以选择合适的方法在 .dvi 文件中插入关于图形的信息。这样打印机才能理解这些信息并正确的包含这些.eps 文件。
3. 使用命令
/includegraphics[key=value, . . . ]{file}
来把文件file 加入你的文档。可选的参数是一系列由逗号隔开的关键词keys 和相应的值values。关键词keys 可以用来改变包含的图形的宽度、高度以及旋转角度等等。以下是最主要的几个关键词。
# graphicx 宏包使用的关键词:
width 把图形缩放到指定的宽度
height 把图形缩放到指定的高度
angle 逆时针旋转图形
scale 缩放图形
下面这个例子可以帮助我们理解整个过程:
/begin{figure}
/begin{center}
/includegraphics[angle=90, width=0.5/textwidth]{test}
/end{center}
/end{figure}
这段代码把存储在文件test.eps 中的图形包含到文档里。首先图形被旋转90 度,然后进行缩放使得图形的宽度等于标准页面宽度的0:5 倍。因为没有指定图形的高度,图形的高宽变化的比例是1:0,也就是保持原来的高宽比。高度和宽度参数也可以用绝对长度单位来指定。
脚注(footnote)
Bibby/footnote{这是对"Bibby"做的脚注}
这时候在字符串Bibby的右上角会出现一个数字,表示这是该页的第几个脚注。如果要达到点击该数字即可跳转到对应的脚注,需要使用hyperref包:
# 在导言区中加入:
/usepackage{hyperref}
/pagestyle{headings} # 写在导言区。页眉由当前的章节标题和页码组成,页脚为空。
引用
/begin{quote}
...
/end{quote}
自动生成索引
在/begin{document}后加上此句即可:
/tableofcontents
为了美观,可以这样使用:
/newpage % start a new page
/tableofcontents % create table of contents automatically
/newpage % start a new page
/pagenumbering{arabic} % Arabic page numbers from now on(使用阿拉伯数字排序索引页面)
pagenumbering还可以有以下参数:
- arabic Arabic numerals
- roman Lowercase roman numerals
- Roman Uppercase roman numerals
- alph Lowercase letters
- Alph Uppercase letters
断行
另起一行,而不另起一段:
// or /newline
在强行断行后,还禁止分页:
//*
另起一新页:
/newpage
字符串排版
省略号:
/ldots
引号
不要像在打字机上那样,把" 用作引号。在印刷中有专门的左引号和右引号。在LATEX 中,用两个` (与波浪符号同一个键)产生左引号,用两个' (引号)产生右引号。一个` 和一个' 产生一个单引号。
参考文献(Todo)
页眉、页脚(Todo)
使用fancyhdr宏包
在用 LaTeX 排版文章、书籍时,缺省定义了四种页眉页脚的格式:
empty 没有页眉和页脚
plain 没有页眉,页脚中部放置页码。
headings 没有页脚,页眉包含章节的标题和页码。
myheadings 没有页脚,页眉页码和使用者所定义的信息。
article 缺省使用 plain 格式,而 book 则使用headings 格式。 也可用 /pagestyle 命令在你的文档中设定所用的格式,例如在文档中使用 /pagestyle{empty} 则使得此后的页面没有页眉和页脚。 一般情况下,这四种格式基本可满足排版的要求。但在某些情况下,特别是 使用者想定义自己的页眉和页脚格式时,就会遇到很多限制和麻烦。这时, 使用 fancyhdr 宏包可以很容易地达到目的。
利用 fancyhdr 宏包提供的命令,可以方便的作到:
- 自定义页眉和页脚。
- 为页眉和页脚加上装饰性的横线。
- 页眉和页脚的宽度可以超过正文文本的宽度。
- 多行的页眉和页脚。
- 奇偶页使用不同格式的页眉和页脚。
- 每章的首页使用不同格式的页眉和页脚。
- 浮动对象页使用不同格式的页眉和页脚。
- 控制页眉和页脚的字体,包括字形,字族,大小写等。
现在的大多数 TeX 软件如 MikTeX,fpTeX,teTeX等,都包括 fancyhdr 宏包。如果你的 TeX 软件是较旧的 emTeX 等,则需要自己安装。安装的方法很简单, 只要将 fancyhdr.sty 放到 LaTeX 能够找到的目录下就行了。
导言区中加入:
/usepckage{fancyhdr}
/pagestyle{fancy}
% 基本用法:
/lhead{}
/chead{}
/rhead{}
/lfoot{}
/cfoot{}
/rfoot{}
Image:Fancyhdr1.gif} /bfseries /leftmark} /fancyfoot[LE,RO]{/thepage} /fancyfoot[LO,RE]{/CJKfamily{kai} 公元二零零零年七月} /renewcommand{/headrulewidth}{0.4pt} /renewcommand{/footrulewidth}{0.4pt} ...... /end{CJK} /end{document}
章节(section)
/section*{section title}
/section{section title} # 在section title前生产数字序列号
杂项
email链接
/href{mailto:michaelbibby@gmail.com}{给我电邮}}
URL链接
- 链接的颜色:
- 显示为“OpenBSD官方网站”,链接到'http://www.openbsd.org':
/href{http://www.openbsd.org}{OpenBSD官方网站}
- 只显示URL:
/url{http://www.openbsd.org}
- 显示URL,但是不做链接和跳转:
/nolinkurl{http://www.openbsd.org}
子目录级数
/setcounter{tocdepth}{5} % 生成最多5级子目录。结合/tableofcontents使用
旁白或边注
/marginpar{}
列表
注意:列表中无法使用'//'手动断行。
/begin{itemize}
/item The first item.
/item The second item.
...
/end{itemize}
表格(Todo)
格式:
/begin{tabular}{table spec}
/end{tabular}
table spec定义了表格的样式。
- 'l' 产生左对齐的列;
- 'r' 产生右对齐的列;
- 'c' 产生居中的列;
- 'p{宽度值width}' 产生相应宽度、包含自动断行文本的列;
- '|' 产生铅直线;
- '&' 跳入下一列。也可由@{}中指定的符号来决定。比如/begin{tabular}{@{.}},以'.'列的为分隔符号。;
- '//' 开始新的一行;
- '/hline' 生成一条水平线;
- '/cline{j-i}' 添加部分表格线。j和i分别表示表格线的起始列和终止列的序号;
比如:
/begin{tabular}{|l|c|c|}
...
/end{tabular}
这样产生的表格,第一列是左对齐的,第二、三列是居中的。
合并列
/begin{tabular}{|c|c|}
/hline
test & test //
/hline
/multicolumn{2}{|c|}{text area} //
/hline
/end{tabular}
特殊符号
符號 作用 文稿上使用 LaTeX 的替代指令
/ 下排版命令 $/backslash$ /textbackslash
% 註解 /% NA
# 定義巨集 /# NA
~ 產生一個空白 /~{} /textasciitilde
$ 進入(離開)數學模式 /$ /textdollar
_ 數學模式中產生下標字 /_{} /textunderscore
^ 數學模式中產生上標字 /^{} /textasciicircum
{ 標示命令的作用範圍 /{ /textbraceleft
} 標示命令的作用範圍 /} /textbraceright
< 數學模式中的小於符號 ___FCKpd___48lt;$ /textless
> 數學模式中的大於符號 ___FCKpd___48gt;$ /textgreater
| OT1 編碼,數學模式中才能正確顯示 $|$ /textbar
& 表格中的分隔符號 /& NA
水印
加在导言区:
/usepackage[all,bottom]{draftcopy}
/draftcopyName{Copyright by MichaelBibby, 2006}{50}
/draftcopySetGrey{0.8} /draftcopyPageTransform{55 rotate}
/draftcopyPageX{80}/draftcopyPageY{-25}
生成文件时的步骤是:
latex --> dvi --> ps --> pdf
设置边界
试用anysize包
/usepackage{anysize}
以下语句放在/begin{document}之后
papersize{width}{height}
设置页面的大小。这个命令可以不用,因为缺省可在 /documentclass 选项中设定标准得页面大小。一般为 a4paper。
/marginsize{left}{right}{top}{bottom}
设定页边空白的大小,这才是 anysize 宏包的价值所在。对于像 book 等双面版式来说,这里的 left 和 right 再奇偶页会互换。例如:
/marginsize{1}{1}{}{}
Tips
PDF合并
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=out.pdf f1.pdf f2.pdf f3.pdf
Tools
PDF<-->Word
http://www.grindeq.com/index.htm