LaTeX入门

LaTeX源文件的基本结构

每一个源文件基本结构如下:

\documentclass[字体大小,纸张大小,杂类参数]{文档类别}
导言区(preamble)
\begin{document}
文档正文区
\end{document}

LaTeX的文档类别

合法的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

有些命令支持后面带有一对方括号[ ] 括起来的可选参数.

制作书签

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平台的需要额外下载。

插入图片(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,也就是保持原来的高宽比。高度和宽度参数也可以用绝对长度单位来指定。

插入脚注

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还可以有以下参数:

断行

另起一行,而不另起一段:

\\ or \newline

在强行断行后,还禁止分页:

\\*

另起一新页:

\newpage

字符串排版

省略号:

\ldots

引号

不要像在打字机上那样,把" 用作引号。在印刷中有专门的左引号和右引号。在LATEX 中,用两个` (与波浪符号同一个键)产生左引号,用两个' (引号)产生右引号。一个` 和一个' 产生一个单引号。

插入链接

email链接

\href{mailto:michaelbibby@gmail.com}{给我电邮}}

URL链接

\href{http://www.ustc.edu.cn}{科大网站}
\url{http://www.ustc.edu.cn}
\nolinkurl{http://www.ustc.edu.cn}

插入表格

格式:

\begin{tabular}{table spec}
\end{tabular}

table spec定义了表格的样式。

比如:

\begin{tabular}{|l|c|c|}
...
\end{tabular}

这样产生的表格,第一列是左对齐的,第二、三列是居中的。

合并列

\begin{tabular}{|c|c|}
\hline
    test & test \\
\hline
    \multicolumn{2}{|c|}{text area} \\
\hline
\end{tabular}

其他

旁白或边注

\marginpar{}

列表

注意:列表中无法使用'\\'手动断行。

\begin{itemize}
\item The first item.
\item The second item.
...
\end{itemize}

特殊符号

符號   作用            文稿上使用   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}{}{}