LaTeX2e类和包的设计(一)

简介: LaTeX2e类和包的设计(一)一、类和包版本介绍LaTeX2.09对用户书写class和package提供的支持很少,用户不得不使用底层命令。LaTeX2e提供了许多用于组织package文件的高级命令,同时在已有class和package的基础上建立另一个class或package也容易多了。
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@定义选项,用/@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、其它工作:还需定义文章作者、页面风格等指令。 
目录
相关文章
|
Docker Python 容器
解决ModuleNotFoundError: No module named ‘distutils.util‘
解决ModuleNotFoundError: No module named ‘distutils.util‘
1278 0
|
Shell 开发工具 开发者
mac出现无法打开“*“,因为无法验证开发者 问题解决
mac出现无法打开“*“,因为无法验证开发者 问题解决
6270 0
mac出现无法打开“*“,因为无法验证开发者 问题解决
overleaf 插入图片,引用图片,图标标题Fig与文章引用Figure不一致解决
overleaf 插入图片,引用图片,图标标题Fig与文章引用Figure不一致解决
9941 0
|
机器学习/深度学习 监控 物联网
函数计算操作报错合集之调用接口提示Cannot copy out of meta tensor; no data! 是什么原因
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
791 0
|
存储 运维 数据库
ADBPG&Greenplum成本优化问题之优化Greenplum的性能和磁盘使用如何解决
ADBPG&Greenplum成本优化问题之优化Greenplum的性能和磁盘使用如何解决
105 1
|
机器学习/深度学习
大模型中的Scaling Law是什么?
【2月更文挑战第9天】大模型中的Scaling Law是什么?
17640 3
大模型中的Scaling Law是什么?
|
C# vr&ar 图形学
【Unity3D 灵巧小知识点】 ☀️ | GetType和typeof的使用
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
【Unity3D 灵巧小知识点】 ☀️ | GetType和typeof的使用
|
监控 Kubernetes 容器
Kubernets日志采集配置模式介绍与对比
为提供更优的扩展性、灵活性,Logtail采集的配置与K8S中的Deploy/Pod配置完全解耦,两者可以一起部署也可以独立部署,具体取决于您的实际应用和业务需求。下面我们介绍几种典型的配置方式,以便于您在实际应用中进行参考。
3850 0
Kubernets日志采集配置模式介绍与对比
|
Linux
LINUX 如何实现多线程进行cp复制
关于这个问题,意义虽然有限因为一般来说在复制文件的时候,实际的瓶颈来自于I/O,不管开启多少个线程实际上速度并不会快多少,但是为了练习多线程编程, 这里给出了一种C++代码实现的方式,代码附在最后。
4298 0
|
2天前
|
云安全 人工智能 自然语言处理
AI说的每一句话,都靠谱吗?
阿里云提供AI全栈安全能力,其中针对AI输入与输出环节的安全合规挑战,我们构建了“开箱即用”与“按需增强”相结合的多层次、可配置的内容安全机制。