版权声明:本文为博主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、其它工作:还需定义文章作者、页面风格等指令。
一、类和包版本介绍
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、其它工作:还需定义文章作者、页面风格等指令。