1.1 TEX的发展历程
- TEX评价
(1)Donald Knuth(高德纳): “TEX is a new typesetting system intended for the
creation of beautiful books—and especially for books that contain a lot of
mathematics.”(Dnould E. Knuth, TheTEXbook, Addison-Wisley, 1970).的确, 世界上排版最好的书是由TEX 编辑的;
(2)TEX是一款功能强大的排版系统;
(3)读音:/tϵx/(in Greek) or /tϵk/;
(4)它是由Stanford University 的Donald E. Knuth (高德纳) 教授开发的,第一版于1978 年面世(当时他对“The Art of ComputerProgramming”第二版十分不满意, 由此决定开发一个高质量的计算机排版系统);
(5)1982, TEX 已经是一个十分稳定的版本; 1993 年左右Knuth 宣布不再对TEX 进行更新;
(6)4 TEX 目前的版本是3.1415926.
- TEX优点
(1)功能强大的排版系统: TEX 提供了300 多条基本的排版命令, 用户可以在基本命令的基础上定义自己的命令;
(2)高质量的输出—公认的数学排版最好的排版系统, 世界上许多一流的出版社几乎都利用TEX 系统出版书籍和期刊—精美的期刊与书集;
(3)超常的稳定性—极少崩溃;
(4)可编程(用宏命令)—很少的命令实现复杂/重复的工作;
(5)占用空间小—纯文本文件;
(6)良好的通用/兼容性—支持多平台;
(7)免费!!!;
(8)丰富的资源.
- TEX的缺点
(1)TEX 的命令很多, 不便于记忆. 需要一本参考书, 要多用;
(2)TEX 编译出现错误时不容易解决, 需要经验;
(3)TEX 不是所见即所得系统;
(4)TEX 的宏包书写有一定难度.
- TEX 的拓展—排版引擎与语言
(1)TEX 是一个底层排版软件(引擎), 它最初使用Plain TEX 语言, 其后的发展路线大致为:
引擎层面:TEX -> e-TEX -> PDFTEX -> XƎTEX(2004) -> LuaTEX(2006)
语言层面:PlainTEX -> AMSTEX -> LATEX -> LATEX2:09(1992) -> LATEX2e(1994) ->
XƎLATEX -> ConTEXt -> LATEX3;
(2)LATEX: LATEX 是在Plain TEX 的基础上由美国计算机学家Leslie Lamport 开发了开发出的一种更为简单的语言, 它提供了一组生成复杂文档所需要的更高级的命令(或宏集合—宏包), 它在生成复杂表格和数学公式方面功能尤为突出. 它可以自动给出标题、章节、表格目录、交叉引用、公式编号、文献引用、浮动图表、浮动图形等等. LATEX 经过多年的发展与更新, 其版本号固定为2.09;
(3)LATEX2e: 在其后的发展过程中, 为了再次统一自LATEX2.09 版本以后所进行的各种改进并建立一个真正的、能满足较长时间内排版需要的LATEX 改进标准, 在Frank Mittelbach 的领导下, Leslie Lamport, Chris Rowley 和Rainer Schopf 创立了LATEX3 小组, 并于1994 年他们发行
了一个新的版本,并命名为LATEX2e, 其一个重要的特点是可以加载各种宏包, 通过加载amsmath 宏包整合AMS-TEX 的优点.
- LATEX 发行版本
(1)Windows: MikTeX, fpTeX, PCTeX 等. MiKTEX—它是目前广泛采用的TEX 系统, 更新扩充及时, 完全公开免费! 包含了几乎所有的工具:1200 多个宏包, 不同的TEX 排版引擎与语言, DVI 浏览器(YAP), pdf转换器(dvipdfm/dvipdfmx), 作图工具—Metapost 等;
(2)Unix/Linux: teTeX;
(3)Mac OS X: MacTeX;
(4)多平台: TEXLive (Since 1996);
(5)中文: CTEX, MTEX, MicTEX.
- 目前流行的中英文LATEX 排版的实现方式
(1)LATEX + CJK 宏包;
(2)LATEX + CTEX 宏包;
(3)ctex 文档类;
(4)XƎLATEX—从根本上解决中文的输入输出问题.
1.2 LATEX文稿的排版过程 (如需下载编辑软件链接请私信作者)
- 准备工作
(1)Windows:
(2)Mac OS X:
(3)TeXlive:
(4)选择适当的TEX 文件编辑器. 依次推荐: TeXstudio,WinEdt, Notepadd++, SciTE. 我们选择CTEX 套装缺省配置好的WinEdt 7.0;
(5)在线TEX 编辑器: sharelatex, overleaf, 两者已经合并;
(6)优秀的TEX 编辑器必须具备的特点:
正反向搜索 语法高亮显示 支持unicode UTF-8 编码
- LATEX排版的基本流程
(1)选择编译方式编译源文件;
(2)在WinEdt/TeXStudio 等编辑器中编写或修改源文件;
(3)若有错误, 则根据编译所生成的日志文件(log 文件) 进行语法上的改错, 并回到第一步; 若没有错误则转向下一步;
(4)预览编译生成的dvi 文件(或转换后的ps, pdf 文件) 或pdf 文件, 并检验文本的实际效果. 若有问题则转向第二步.
2.3 TEX源文件的组成
- TEX源文件的组成要素
TEX 源文件是纯文本文件, 根据对排版结果的影响, 其内容可分为注释、空白符、LATEX 命令和文本内容:
(1)注释: TEX 源文件中% 后面的内容视为注释内容, 在编译时将被忽略;
(2)空白符: LATEX 把诸如空格(一个或多个)、制表符、单个的换行都视为一个空白符. 一行开始处的空白符被忽略. 两段文本之间的空行(一个或多个) 被视为一段文字的结束标志;
(3)LATEX 命令: LATEX 命令是LATEX 的保留字, 其对大小写敏感. LATEX 的命令格式是以反斜线开始(“n”) 的字符串(命令名称);
(4)文本内容: 包括普通字符和特殊字符($, &, %, #, _, {, }, ,̂ ̃, n ).
- LATEX命令
命令名
命令名{必选参数}
命令名[可选参数]{必选参数}几个常用的命令:
设置文档类: documentclass[可选项]{参数}
调用宏包: 甥敳慰ckage[可选项]{宏包名}
组成环境: begin{环境名}......end{环境名}
定义新命令: ewcommand{...}{...}
修改已有的命令: enewcommand{...}{...}
- 自定义LATEX命令
形式1:
enewcommand{新命令}[参数个数]{命令内容}
enewcommand*{新命令}[参数个数]{命令内容}
例:
ewcommand{eps}{varepsilon}
ewcommand{mybf}[1]{{CJKfamily{hei}#1}}
ewcommand{mc}[3]{multicolumn{#1}{#2}{#3}}
mc{2}{c}{math} 等价于multicolumn{2}{c}{math}.
形式2:
enewcommand{新命令}[参数个数][缺省值]{命令内容}缺少值只能有一个, 且必须是第一个参数的.
例:
ewcommand{mycolor}[2][blue]{
extcolor{#1}{#2}}
mycolor{red}{math} 等价于extcolor{red}{math}.
- LATEX命令的作用范围
(1)有些命令只对其后的字符起作用. 例如:
extbf bold face -> bold face
extcolor{red} red color -> red color
(2)有些命令对其后所有文本起作用, 常称之为声明. 例如:
bfseries bold face -> bold face
color{red} red color -> red color
(3)利用大括号(分组) 分别对上面二种LATEX 命令的作用范围进行扩展和限制, 这是LATEX 排版时应该使用的方式. 例如:
extbf{bold} face -> bold face
{bfseries Bold} Face -> Bold Face
extcolor{red}{red} color -> red color
{color{red} Red} Color -> Red Color
LATEX 的环境的作用范围就是整个环境开始到结束, 主要用于表格、插图、数学公式、列表等.
1.4 TEX源文件的结构
documentclass[ 字体大小, 纸张大小, 杂类参数]{ 文档类别}
导言区(preamble)
begin{document}
文档区
end{document}
(1)文档类别
article(文章)(ctex 中使用ctexart)
book(书籍)(ctex 中使用ctexbook)
report(报告)(ctex 中使用ctexrep)
letter(信函)
其他基于article 与book 设计的非标准文件类(如slides, beamer)
(2)字体大小
10pt(缺省), 11pt, 12pt (1pt=1/72.27in);
(3)纸张大小: a4paper(29.721cm), a5paper(2114.8cm), ... ...(缺省为letter);
(4)杂类参数
landscape: 选择横向排版方式,缺省为纵向排版(portrait)
leqno: 公式的编号放在公式的左边,缺省时放在右边
fleqn: 公式显示左边对齐,缺省时中间对齐
draft, final: 标注/不标注带标尺的边框,缺省值为final
oneside, twoside: 选择单面还是双面打印. book 类缺省为双面,其
余缺省为单面
onecolumn, twocolumn: 通栏排还是分栏排,缺省为通栏
- 导言区的组成
(1)装入必要宏包. 格式为:
甥敳慰ckage[option]{package}
例:
甥敳慰ckage[dvipsnames]{xcolor} % 支持颜色
甥敳慰ckage[includeheadfoot]{geometry} % 页面设置
甥敳慰ckage{fancyhdr} % 支持自定义的页眉、页脚
甥敳慰ckage{fancyvrb} % 支持抄录
甥敳慰ckage{graphicx} % 支持图形插入
(2)进行页面全局性设置. 例如:
%% ===== 设置页面布局===========================
geometry{papersize={144mm,108mm},
hmargin={8mm},vmargin={3mm,3mm},headsep=5mm}
%% ===== 定义行间距=============================
enewcommand{baselinestretch}{1.3}
- 正文区的组成
LATEX 处理输入文件的三种模式:
Paragraph(段落模式)
Math(数学模式)
Left-to-right(从左到右模型,简称LR 模式)
正文的输入需要按选定的文档类型及加载的宏包文件进行, 由此得到相应的标题、章节、页码、页眉、页脚、脚注、边注、表格、图形以及各种类型复杂的数学公式等. 这些构成的正文的主要内容.
处理很大的文档, 应避免重复的编译, 明智的做法是将文件分成若干个部分分别进行编译. 例如一本由8 章组成的书, 其源文件可由一个主文件(mybook.tex)、导言区的文档设置文件(setup.tex)、目录与前言等(toc.tex)和每一章对应的子文件(chap1.tex, …, chap8.tex) 构成. 这时主文件mybook.tex 可用二种方式将子文件组合起来.
(1)采用input命令
documentclass{book}
input{setup}
begin{document}
frontmatter
input{toc}
mainmatter
input{chapt1}...input{chapt8}
backmatter printindex
end{document}
(2)采用include 命令(设置文件除外)
documentclass{book}
input{setup}
includeonly{......}
begin{document}
frontmatter
include{toc}
mainmatter
include{chapt1}
...
include{chapt8}
backmatter
printindex
end{document}
toc.tex 可包括
ableofcontents listofcontents listoffigures
input 命令可以嵌套, include 命令不可以嵌套;
input 命令方式在排版单个特定的文件时可能导致章节、页码、图表和公式等编码与交叉引用的混乱(使用setcounter 命令进行计数器重置可一定程度上避免这个问题).
使用include 和includeonly 命令好处是页面、章节和公式编号等的附加信息由includeonly 命令提供, 这既可以帮助我们省去很多宝贵的编译时间, 同时又可保证交叉引用这类命令生成正确的结果.
通过WinEdt 可以将大文档中各个文件有机地组合起来. 方法是将mybook.tex 设为主文件(点击常用按钮第二排第一个“Set Main File”或CTRL+F5), 并点击第三个“Tree...”按钮展开主文件与子文件的关系. 仅在includeonly 后文件清单中出现的文件才被编译且在WinEDT 左侧的目录中显示出来. 例如,includeonly{toc,chap8} 命令仅会编译toc.tex, 和chap8.tex.
Texstudio 有类似的功能,它是通过“Set Current Document as Explicit Root”来实现. 还可以自动判断“Detect Automatically”.
1.5 中英文LATEX 文稿简例
(1)未使用中文的例子
documentclass{article}
begin{document}
itle{Test}
author{My Name}
date{2012/10/20}
maketitle
section{First Section}
This is first paragraph.
This is second paragraph.
section{Second Section}
This is my first LaTeX article.
subsection{GOAL}
An introduction of LaTeX.
end{document}
(2)使用CJK 宏包处理中文的例子
documentclass[11pt]{article}
甥敳慰ckage{CJK}
begin{document}
begin{CJK*}{GBK}{song}
itle{ 测试}
author{ 姓名}
date{2012/10/20}
maketitle
section{ 第一节}
这是第一段.
CJKfamily{hei} 这是第二段.
section{ 第二节}
CJKfamily{li}这是我的内容.
subsection{ 目标}
CJKfamily{fs}LaTeX 介绍
end{CJK*}
end{document}
(3)使用CJK 宏包pdf 可产生自动书签例子
documentclass[11pt]{article}
甥敳慰ckage{CJK,indentfirst}
甥敳慰ckage[CJKbookmarks]{hyperref}
begin{document}
begin{CJK*}{GBK}{song}
itle{ 测试}
author{ 姓名}
date{2012/10/20}
maketitle
section{ 第一节}
CJKfamily{hei} 测试基于CJK的可以搜索、复制、有书签的中文PDF.
(4)使用ctex 宏包处理中文的二个例子
documentclass[12pt]{article}
甥敳慰ckage{ctex}
begin{document}
... ...
end{document}
documentclass[12pt]{ctexart}
begin{document}
... ...
end{document}
begin{tabular}{l}
documentclass[12pt,CCT]{ctexart}
begin{document}
... ...
end{document}
section{ 第二节}
CJKfamily{li}LaTeX 介绍.
end{CJK*}
end{document}
(5)使用XƎTEX 处理中文的两个例子
例子1:
% !Mode:: "TeX:UTF-8"
documentclass{ctexart}
begin{document}
section{ 中文字体}
section{ 小测试}
中文字体测试
end{document}
% !Mode:: "TeX:UTF-8"
documentclass{article}
甥敳慰ckage{xltxtra}
setmainfont[BoldFont= 黑体]{ 宋体}
begin{document}
section{ 中文字体}
section{ 小测试}
中文字体测试
end{document}
例子2:
%!TEX TS-program = xelatex
%!TEX encoding = UTF-8 Unicode
documentclass{article}
甥敳慰ckage{xeCJK}
setmainfont{Times New Roman}%设置英文默认字体,
setCJKmainfont{SimSun} %设置汉字默认字体,
begin{document}
section{ 中文字体}
section{ 小测试}
中文字体测试
end{document}
注: WinEdt 7.0 是一个unicode 编辑器, 支持UTF-8 编码. 对中文默认不是UTF8 编码的TEX 文档, 为了保证TEX 文档可正确地加载(打开) 和保存, 文档的开始须添加:
% !Mode:: ”TeX:UTF-8”
本文参考文献:
【1】(美) Barbara Gastel Barbara Gastel Barbara Gastel Barbara Gastel , Robert A. Day Robert A. Day Robert A. Day ,任治刚 (译) 《科技论文写 作与发表教程 》(第 八版, 2018 );
【2】《LaTeX科技论文写作简明教程》(2015第一版,2019年第二次印刷)清华大学出版社