LaTeX2e类和包的设计(一)

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1305558 LaTeX2e类和包的设计(一)一、类和包版本介绍LaTeX2.09对用户书写class和package提供的支持很少,用户不得不使用底层命令。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1305558
LaTeX2e类和包的设计(一)
一、类和包版本介绍
LaTeX2.09对用户书写class和package提供的支持很少,用户不得不使用底层命令。
LaTeX2e提供了许多用于组织package文件的高级命令,同时在已有class和package的基础上建立另一个class或package也容易多了。
二、类和包的书写
1)使用doc和docstrip工具
如果要书写的LaTeX类或包比较大,可考虑使用随LaTeX发布的doc软件。
可由docstrip软件加以处理,产生.cls和.sty文件。
doc软件可自动产生定义和命令使用索引以及更新目录列表。-->对大规模TeX资源维护的文档建立有用。
2)文档类和包
确定class和package的原则:如果这些命令可以用于所有的文档类,则把它处理成一个package,否则处理成一个class。
文档class分类:1)独立存在,如:article、report;2)不能独立存在,是别的文档类的扩展或变种。
3)LaTeX命令:
 1、author命令:文档作者使用,由小写字母组成。如:/section、/emph、/times等;
 2、类和包书写命令:大写开头,大小写混合。如:/InputIfFileExists;
 3、内部命令:实现LaTeX系统时用;命令中带@符号。如:/tempcnta。
4)盒子的命令与颜色
永远使用LaTeX的盒子命令而不要使用TeX盒子的原语,尽量用/sbox、/mbox、/parbox、minpage环境等命令。
5)定义文本和数学字符
这一部分LaTeX2e尚在建设中,定义这类编码独立的命令时应当使用/DeclareRobustCommand命令。
6)基本命令
6.1)装入其它命令:
 /LoadClass, /LoadClassWithOptions,
 /RequirePackage,  /RequirePackageWithOptions
这些命令用以在一个class或package中使用别的类或包。
6.2)优化自己的类或包文件:
尽量多使用LaTeX命令;使用/PackageError, /PackageWarning, /PackageInfo等。
如:/ds@<option>定义选项,用/@options引用它-->最好用/DeclareOption和/ProcessOptions命令来代替。
6.3)增强class或package文件的兼容性:
文档中应当只包含可见的7位编码文档,文件名也采用了8.3格式;
7)class和package的结构
 1、文件标识:说明是LaTeX2e的包或类文件,另外包含对自己的简单介绍;
 2、预声明:部分声明一些命令,这些命令通常只在可选项声明和处理时用到,也可装入其它文件;
 3、可选项:声明和处理可选项;
 4、进一步声明:文件的大部分内容,如声明新的变量、命令和字体等,另外装入所有其它必要的文件。
7.1)文件标识
包的标识形式:
/NeedsTeXFormat{LaTeX2e}[date other-information]
/ProvidesPackage{package}[date other-information]
类的标识形式:
/NeedsTeXFormat{LaTeX2e}
/ProvidesClass{class-name}[date other-information]
类的描述信息在使用时显示出来,包的描述信息则存入log文件中,这些信息可用/listfiles命令来显示。
7.2)其它类和包的使用
LaTeX2e的类和包中支持模块化设计,那文件中可以使用更小的模块入别的类或包文件,而不用将所有功能都在一个大文件中定义。
在LaTeX类和包文件中使用另一个包文件:
/RequirePackage[options]{package}[date]
在LaTeX类和包文件中使用另一个类文件:
/LoadClass[options]{date-name}[date]
如果想在使用别的类或包时采用当前类所采用的可选项,通常可以使用下面这两条命令:
/LoadClassWithOptions{class-name}[date]
/RequrePackageWithOptions{package}[date]
7.3)可选项声明和处理
/DeclareOption{option}{code}
注:在装入类或包文件中,有时用户提供的可选项在类或包文件中并没有定义,这时如使用的是类,系统将产生警告;如使用的是包,系统将出错。
/DeclareOption*{code} 表示用户使用了未定义的可选项时要执行的code。
所有的可选项声明过之后,未执行相应代码,使用命令:/ProcessOptions/relax
例:
/DeclareOption{foo}{/typeout{saw foo.}}
/DeclareOption{baz}{/typeout{saw baz.}}
/DeclareOption*{/typeout{What's /CurrentOption ?}}
/ProcessOptions/relax
用户在文档中书写了/usepackage[foo,bar]{jame}命令,将看到如下信息:
saw foo. What's bar ?
使用命令:可选项从一个类或包文件中传递搞另一个类或包文件:
/PassOptionsToPackage{option}{package}
/PassOptionsToClass{option}{class}
如:在article上定义一新类,其所有未定义的可选项都交给article处理:
/DeclareOption*{%
/PassOptionsToClass{/CurrentOption}{article}%
}
注:采用上述方法,则目的类或包必须在此后才能装入;因为类或包文件只有在被装入时才处理可选项。
7.4)最小的类文件
写class或package文件,最大的工作量在于定义新的命令或改变文档的外观,用/newcommand, /setlength等命令实现。
最小类文件如下:
/NeedsTeXFormat{LaTeX2e}
/ProvidesClass{minimal}[1995/10/30 Standard LaTeX minimal class]
/renewcommand{/normalsize}{/fontsize{10pt}{12pt}/selectfont}
/setlength{/textwidth}{6.5in}
/setlength{/textheight}{8in}
7.5)类文件实例
7.5.1)公司内部信件类,名未neplet.cls
 1、进行类文件标识
 /NeedsTeXFormat{LaTeX2e}
 /ProvidesClass{neplet}[1995/04/01 NonExistent Press Letter Class]
 2、向letter类传递可选项,并以A4纸张装入letter类
 /DeclareOption*{/PassOptionsToClass{/CurrentOption{letter}}
 /ProcessOptions/relax
 /LoadClass[a4paper]{letter}
 3、重新定义firstpage页面类型,使用自己的标题和脚注
 /renewcommand{/ps@firstpage}{%
 /renewcommand{/@oddhead}{newletterhead}%
 /renewcommand{/@oddfoot}{newletterfoot}%
 }
7.5.2)时势通讯类,名为smphnews.cls
 1、进行类文件标识
 /NeedsTeXFormat{LaTeX2e}
 /ProvidesClass{smplnews}[2005/05/22 The Simple News newsletter class]
 /newcommand{/headlinecolor}{/normalcolor}
 2、可选项传递与处理:自己处理onecolumn可选项,其它交给article处理,自定义可选项green,标题设为绿色
 /DeclareOption{onecolumn}{/OptionNotUsed}
 /DeclareOption{green}{/renewcommand{/headlinecolor}{/color{green}}}
 /DeclareOption*{/PassOptionsToClass{/CurrentOption}{article}}
 /ProcessOptions/relax
 3、装入必要的类和包文件:用twocolumn可选项装入article类
 /LoadClass[twocolumn]{article}
 /RequirePackage{color}
 4、重新定义/maketitle及分节命令,设置标题字体及颜色
 /renewcommand{/maketitle}{%
 /twocolumn{%
 /fontsize{72}{80}/fontfamily{pho}/fontseries{b}%
 /fontshape{sl}/selectfont/headlinecolor
 /@title
 }%
 }
 5、将section命令重新定义分节格式并关掉分节编号功能
 /renewcommand{/section}{%
 /@startsection{section}{1}{0pt}{-1.5ex plus -1ex minus -.2ex}%
 {1ex plus .2ex}{/large/sffamily/slshape/headlinecolor}%
 }
 6、进行三项基本设置工作
 /renewcommand{/normalsize}{/fontsize{9}{10}/selectfont}
 /setlength{/textwidth}{17.5cm}
 /setlength{/textheight}{25cm}
 7、其它工作:还需定义文章作者、页面风格等指令。 
目录
相关文章
|
7月前
|
自然语言处理 算法 前端开发
C++与Doxygen:精通代码文档化之道
C++与Doxygen:精通代码文档化之道
587 0
|
6月前
|
Python
Python reStructuredText风格注释详解
reStructuredText风格注释是Python代码注释的一种标准化格式,它提供了一种规范的注释格式,使得代码更加易读、易于维护。reStructuredText风格注释使用两个等号来包围注释标题,并按照一定规范编写。通过使用reStructuredText风格注释,我们可以为代码提供清晰的文档和说明,使得代码更加易读、易于维护。
136 2
|
5月前
|
API 开发工具 git
`black`是一个不受约束的Python代码格式化工具。它自动将Python代码格式化为PEP 8样式,但具有一些额外的规则,旨在使代码更加一致和易读。
`black`是一个不受约束的Python代码格式化工具。它自动将Python代码格式化为PEP 8样式,但具有一些额外的规则,旨在使代码更加一致和易读。
|
7月前
|
算法 开发者
【CMake 设计命名思路】自定义命令命名规范与风格指南
【CMake 设计命名思路】自定义命令命名规范与风格指南
101 0
|
7月前
|
数据可视化
esquisse包—不写代码生成ggplot图
esquisse包—不写代码生成ggplot图
81 5
|
7月前
|
Java
提高代码质量的秘诀:类、方法、字段和包注释
提高代码质量的秘诀:类、方法、字段和包注释
69 0
|
Python
【Python零基础入门篇 · 17】:模块、模块的使用、过滤执行代码写法、包的使用
【Python零基础入门篇 · 17】:模块、模块的使用、过滤执行代码写法、包的使用
107 0
【Python零基础入门篇 · 17】:模块、模块的使用、过滤执行代码写法、包的使用
|
Python
【Python零基础入门篇 · 13】:模块、模块的使用、过滤执行代码写法、包的使用
【Python零基础入门篇 · 13】:模块、模块的使用、过滤执行代码写法、包的使用
702 0
【Python零基础入门篇 · 13】:模块、模块的使用、过滤执行代码写法、包的使用
|
Python
Python编程:模块与包
Python编程:模块与包
108 0
|
监控 Oracle 关系型数据库