LaTeX2e类和包的设计(二)

简介: LaTeX2e类和包的设计 (二) 继续说明如何编写class和package。 二、类和包书写命令 1) 文件标识命令 /NeedsTeXFormat{format-name}[release-date] 此命令告诉TeX,本文件由format-name格式的TeX系统进行处理。

LaTeX2e类和包的设计 (二)

继续说明如何编写class和package。

二、类和包书写命令
1) 文件标识命令
/NeedsTeXFormat{format-name}[release-date]
此命令告诉TeX,本文件由format-name格式的TeX系统进行处理。
release-date用来指定使用格式的版本日期。

/ProvidesClass{class-name}[release-info]
/ProvidesPackage{package-name}[release-info]
表示本文件包含文档类class-name和包package-name的定义。
release-info表示类或包的说明信息。格式如下:
 (1)包版本日期yyyy/mm/dd;
 (2)说明文字,可包括版本号。
可通过/listfiles命令显示release-info的信息。

/ProvidesFile{file-name}[release-info]
file-name必须为文件全名,包括扩展名;此命令用来声明除主类和包文件以外的文件。
2)文件装入命令
在类或包文件中装入别的包:
/RequirePackage[options-list]{package-name}[release-info]
/RequirePackageWithOptions{package-name}[release-info]

/LoadClass[options-list]{class-name}[release-info]
/LoadClassWithOptions{class-name}[release-info]
每个类文件中最多只能使用一次,且只能在类文件中使用。

3)可选项声明命令
/DeclareOption{option-name}{code}
使option-name变成所在包或类的一个可选项;code参数是当用户使用了该可选项时要执行的代码,可包含任何合法的LaTeX2e结构。

/DeclareOption*{code}
设置“缺省可选项代码”,指当用户使用的可选项在类或包中没有显式声明时,系统执行该命令的code参数。code参数可以包含任何合法的LaTeX2e结构。

4)可选项代码中使用的命令
在code参数中使用的命令:
/CurrentOption
代表用户指定的当前可选项

/OptionNotUsed
将用户指定的当前可选项添加到“未使用可选项”列表。

/PassOptionsToPackage{options-list}{package-name}
将optons-list参数中列出的可选项(不止一个时用逗号隔开)传递给包package-name,即此后的/RequirePackage或/usepackage命令可以使用的可选项中包含了option-list中的可选项。

/PassOptionsToClass{options-list}{class-name}
注:
/RequirePackageWithOptions命令同/RequirePackage命令相似,但前者在装入指定的包时所使用的可选项列表总是同当前类或包打开时所使用的可选项列表完全相同,而不使用明确给出或由/PassOptionsToPackage命令传递来的可选项。
/LoadClassWithOptions的主要目的是允许一个类简单地继承别的类的特性,如命令/LoadClassWithOptions{article}同控制序列:
/DeclareOption*{/PassOptionsToClass{/CurrentOption}{article}}
/ProcessOptions/relax
/LoadClass{article}
的作用相同,但使用/LoadClassWithOptions命令要简单得多,执行也快些。如果类声明了自己的可选项,则两者的区别就大了。如:
 (1)
 /DeclareOption{landscape}{/@landscapetrue}
 /ProcessOptions/relax
 /LoadClassWithOptions{article}
 (2)
 /DeclareOption{landscape}{/@landscapetrue}
 /DeclareOption*{/PassOptionsToClass{/CurrentOption}{article}}
 /ProcessOptions/relax
 /LoadClass{article}
序列(1)很好;序列(2)中article被装入时根本接收不到landscape可选项,因为只有缺省的可选项传递给了article,而landscape是有显示声明的可选项,不在传递之列。

5)代码延迟执行命令
/AtEndOfClass{code}
/AtEndOfPackage{code}
主要用于/DeclareOption或/DeclareOption*命令的参数中间,将code代码暂时内部保存,等到当前类或包处理完毕后再执行code代码。命令可多次使用。

/AtBeginDocument{code}
/AtEndDocument{code}
/AtBeginDocument命令将code代码暂时内部保存,等到LaTeX执行/begin{document}和/end{document}命令时再执行。
/AtEndDocument命令的code参数将在/end{document}命令开始执行、最终页面尚未完成、剩下的可浮动环境还没有处理的时候得到执行。如果code中的某些代码需要在页面和可浮动环境都已经完成排版任务之后才执行,那么这些代码之前必须插入一条/clearpage命令。

/AtBeginDvi{specials}
此命令将specials参数保存在一个注册盒子里并写入.dvi文件中文档首页输出开始处。参数中不能带任何排版内容进入.dvi文件。命令可多次使用。

6)可选项处理命令
/ProcessOptions
将执行每个使用的可选项在声明时设定的处理代码。在类文件和包文件中的执行过程和结果略有不同。
可选项分两种:局部可选项和全局可选项。
局部可选项:指那些在/PassOptionsToPackage{options}命令、/usepackage[options]命令或/RequirePackage[options]命令的options参数中明确指定的可选项。
全局可选项:指用户在/documentclass[options]命令的options参数中指定的,除了局部可选项之外的所有可选项。
 (1)在包文件中使用
 (2)在类文件中使用
在类文件中使用同在包文件中,只是所有的可选项都当作局部可选项,另外/DeclareOption*的缺省值是/OptionNotUsed而不是出错。

/ProcessOptions*/@options
执行过程同/ProcessOptions,但是可选项的处理顺序不是按照在类或包中的声明顺序进行,而是由命令调用时的options参数指定。

/ExceuteOptions{options-list}
options-list参数的每个可选项,按照顺序依次执行一下/ds@option命令。使用这条命令可在紧靠/ProcessOptions命令前面的地方提供一个“缺省可选项列表”。

7)文件操作命令
/IfFileExists{file-name}{true}{false}
检测一个文件是否存在。存在则执行true参数给出的代码;不存在则执行false参数给出的代码。

/InputIfFileExists{file-name}{true}{false}
如果file-name文件存在,将执行true参数给出的代码并马上装入该文件;如果不存在,则执行false参数给出的代码。

8)报告错误命令
/ClassError{class-name}{error-text}{help-text}
/PackageError{package-name}{error-text}{help-text}
用来产生错误信息,出错时将显示error-text参数给出的错误信息以及?提示符,如果用户敲击h键,系统将显示help-text参数指定的帮助文本。在errror-text和help-text参数中,可以使用/protect命令来终止当前出错命令的进一步展开;可以使用/MessageBreak命令使显示内容换行;使用/space命令输出空格。
如:
 /newcommand{/foo}{FOO}
 /PackageError{ethel}{%
 Your hovercraft is full of eels,/MessageBreak
 and /protect/foo/space is /foo
 }{%
 Oh dear! Someting's gone wrong. /MessageBreak
 /space /space Try typing /space
 /space to proceed, igoring /protect/foo.
 }
将产生如下的输出结果:
 !Package ethel Error: Your hovercraft is full of eels,
 (ethel) and /foo is FOO.
 See the ethel package documentation for explanation.
按下h键,再显示:
 Oh dear! something's gone wrong.
 Try typing to proceed, ignoring /foo.

/ClassWarning{class-name}{warning-text}
/PackageWarning{package-name}{warning-text}
/ClassWarningNoLine{class-name}{warning-text}
/PackageWarningNoLine{package-name}{warning-text}
在屏幕上显示warning-text参数所给的警告信息:其中,第1、2条将显示警告发生处的行号,而第3、4条命令不显示行号。
/ClassInfo{class-name}{info-text}
/PackageInfo{package-name}{info-text}
将info-text参数所给信息写进log文件(包括行号)。

在warning-text和info-text参数中,可使用/protect命令来终止当前出错命令的进一步展开,可使用/MessageBreak命令使显示内容换行,使用/space命令输出空格。

9)定义牢固命令
牢固命令:指该命令可以作为其它命令的参数使用,而前面无需使用/protect前缀命令。
/DeclareRobustCommand{cmd}[num][default][definition]
/DeclareRobustCommand*{cmd}[num][default][definition]
使用这两个命令既可以定义新命令,也可以重新定义已有的命令。
如:
 /DeclareRobustCommand{/seq}[2][n]{%
 /ifmmode
  #1_{1}/ldots#1_{#2}%
 /else
  /PackageWarning{fred}{You can't use /protect/seq/space in text}%
 /fi
 }

/CheckCommand {cmd}[num][default]{definition}
/CheckCommand*{cmd}[num][default]{definition}
检查cmd命令的当前定义是否未definition参数所给出的那样,如果不同,导致出错。

10)其它杂类命令
布局参量
/paperheight
/paperwidth
纸张的实际尺寸,而不象/textwidth和/textheight命令那样只是标注内部主文档区的大小。
大小写字符转换命令
/uppercase{text}
/lowercase{text}
实现字母的大小写转换。不能转换由某些命令(如/ae或/aa)产生的特殊字符。
解决这个问题,用以下命令:
/MakeUppercase{text}
/MakeLowercase{text}

目录
相关文章
|
4月前
|
API 开发工具 git
`black`是一个不受约束的Python代码格式化工具。它自动将Python代码格式化为PEP 8样式,但具有一些额外的规则,旨在使代码更加一致和易读。
`black`是一个不受约束的Python代码格式化工具。它自动将Python代码格式化为PEP 8样式,但具有一些额外的规则,旨在使代码更加一致和易读。
|
6月前
|
编解码 IDE 开发工具
QT案例IDE编写 -- 通过枚举实现编码切换
QT案例IDE编写 -- 通过枚举实现编码切换
55 0
|
6月前
|
数据可视化
esquisse包—不写代码生成ggplot图
esquisse包—不写代码生成ggplot图
76 5
|
自然语言处理 C#
你听我说-HandyControl多语言包处理
你听我说-HandyControl多语言包处理
184 0
|
JSON 数据格式 Python
24.从入门到精通:__name__属性 dir() 函数 标准模块 包 从一个包中导入*
24.从入门到精通:__name__属性 dir() 函数 标准模块 包 从一个包中导入*
|
Python
Python语法之模块和包
这一节,我将为大家介绍模块和包: 在开发大型软件时,随着代码写的越来越多,如果将所有的代码都放在一个文件里,势必为以后的维护带来很大的困难。正如仓颉造字一样,仓颉是黄帝的史官,用祖传结绳记事的老办法记载史实。时间一长,那些大大小小,奇形怪状的绳结都记了些什么,连他自己也没法辨认了。于是,仓颉开始想新的办法,用什么方式可以帮助大家分辨清不同的事物,在仓颉的努力下,他创造了文字,解决了这个问题。而在 Python 中,为了编写易于维护的代码,我们会将代码拆分放到不同的文件里,这样每个文件包含的代码相对就会减少。在 Python 中,一个 .py 文件称为一个模块(Module)。
111 0
|
存储 移动开发 前端开发
Qt开发技术:Qt富文本(三)Qt支持的HTML子集(查询手册)以及涉及的类
Qt开发技术:Qt富文本(三)Qt支持的HTML子集(查询手册)以及涉及的类
Qt开发技术:Qt富文本(三)Qt支持的HTML子集(查询手册)以及涉及的类
|
Ubuntu 安全 数据可视化
干货|教你使用Doxygen制作出漂亮程序文档
不知道大家有没有把自己的代码整理成文档的习惯,有没有给自己的代码一个非常漂亮的注释,就像下图这样。
1696 0
干货|教你使用Doxygen制作出漂亮程序文档
|
Python
python创建类导入(简化版纯代码)
python创建类导入(简化版纯代码)
121 0
|
Python
Python 技术篇 - 查看python库都包含什么方法,查看python模块某个方法的具体用法源码,查看python模块所在的物理位置,查看python库都包含哪些属性
Python 技术篇 - 查看python库都包含什么方法,查看python模块某个方法的具体用法源码,查看python模块所在的物理位置,查看python库都包含哪些属性
1047 0
Python 技术篇 - 查看python库都包含什么方法,查看python模块某个方法的具体用法源码,查看python模块所在的物理位置,查看python库都包含哪些属性