LaTeX2e类和包的设计(一)

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、其它工作:还需定义文章作者、页面风格等指令。 

转载于:https://www.cnblogs.com/yangjin-55/archive/2006/09/29/2787112.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++学习之路 | PTA乙级—— 1005 继续(3n+1)猜想 (25分)(精简)

1005 继续(3n1)猜想 (25分) 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里&#xff0c;情况稍微有些复杂。 当我们验证卡拉兹猜想的时候&#xff0c;为了避免重复计算&#xff0c;可以记录下递推过程中遇到的每一个数。例如对 n3 进行验证的时候&#xff0c;我们需…

python实现地牢迷宫生成

python实现地牢迷宫生成基本属性生成房间生成墙壁生成门口生成通道基本属性 定义当前地牢的等级&#xff0c;地图长宽&#xff0c;房间数量&#xff0c;房间的最小最大长度&#xff0c;如下 class Map:def __init__(self):self.width 30self.heigh 30self.level 1self.roo…

Parameterize Method(令函数携带参数)

若干函数做了类似的工作&#xff0c;但在函数体中却包含了不同的值 重构&#xff1a;建立单一函数&#xff0c;以参数表达那些不同的值。

「谷歌大脑」提出通过对长序列进行摘要提取,AI可自动生成「维基百科」

原文来源&#xff1a;arXiv作者&#xff1a;Peter J. Liu、Mohammad Saleh、Etienne Pot、Ben Goodrich、Ryan Sepassi、Łukasz Kaiser、Noam Shazeer「雷克世界」编译&#xff1a;嗯~阿童木呀最近&#xff0c;经过研究证明&#xff0c;生成英文维基百科&#xff08;English W…

redis基本用法学习(C#调用CSRedisCore操作redis)

除了NRedisStack包&#xff0c;csredis也是常用的redis操作模块&#xff08;从EasyCaching提供的常用redis操作包来看&#xff0c;CSRedis、freeredis、StackExchange.Redis应该都属于常用redis操作模块&#xff09;&#xff0c;本文学习使用C#调用CSRedis包操作redis的基本方式…

简明Python教程学习笔记_3_模块

模块 如果你想要在其他程序中重用很多函数&#xff0c;那么你该如何编写程序呢&#xff1f;你可能已经猜到了&#xff0c;答案是使用模块。模块基本上就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块&#xff0c;模块的文件名必须以.py为扩展名。 pyt…

年轻的程序员该如何规划自己的未来

下面是网友良少给我的回信,觉得其中一些内容具有警世作用,征得良少本人同意后,特公开其回信-------------------------------------------------------------------------------------------------------------------------- 孝祥&#xff1a;您好&#xff01;非常感谢您的邀请…

C++学习之路 | PTA乙级—— 1006 换个格式输出整数 (15分)(精简)

1006 换个格式输出整数 (15分) 让我们用字母 B 来表示“百”、字母 S 表示“十”&#xff0c;用 12…n 来表示不为零的个位数字 n&#xff08;<10&#xff09;&#xff0c;换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234&#xff0c;因为它有 …

python: 使用socket实现局域网不同主机通信。解决ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

目录1 socket的使用1.1 TCP方法1.2 UDP方法2 局域网内连接2.1总结1 socket的使用 1.1 TCP方法 在socket中使用socket.socket建立会话&#xff0c;如果是服务器&#xff0c;需要绑定服务器地址和端口号&#xff0c;然后进行循环监听&#xff0c;当有客户端连接时再接收数据。 …

Replace Parameter with Explicit Methods(以明确函数取代参数)

函数的行为&#xff0c;完全取决于参数值 public void setValue(final String name, final int value) {if ("height".equals(name)) {this.height value;return;}if ("width".equals(name)) {this.width value;return;}Assert.shouldNeverReachHere();…

德勤:2018年科技、传媒和电信行业未来趋势预测

来源&#xff1a;亿欧近日&#xff0c;德勤发布了《2018科技、传媒和电信行业预测》报告&#xff0c;对世界与中国的科技、传媒和电信行业在未来1-5年的趋势进行了预测。该报告通过与世界各国行业主管和评论家的数百场访谈及对世界各地数万名消费者进行的调查&#xff0c;分析了…

简明Python教程学习笔记_4_数据结构

在Python中有三种内建的数据结构——列表、元组和字典。 列表 list是处理一组有序项目的数据结构&#xff0c;即你可以在一个列表中存储一个 序列 的项目。假想你有一个购物列表&#xff0c;上面记载着你要买的东西&#xff0c;你就容易理解列表了。只不过在你的购物表上&…

動態修改SiteMapPath路徑

http://www.purecs.net/Threads/t376.aspx在網頁上放置一個SiteMapPath可以提供使用者一個清楚的瀏覽路標指示&#xff0c;如果你的SiteMap是靜態不會變動的倒是很簡單&#xff0c;只要編寫好一個XML檔放上去&#xff0c;其它的事就可以不用管了&#xff0c;但是在動態網頁中Si…

C++学习之路 | PTA乙级—— 1007 素数对猜想 (20分)(精简)

1007 素数对猜想 (20分) 让我们定义d ​n ​​ 为&#xff1a;d ​n ​​ p ​n1 ​​ −p ​n ​​ &#xff0c;其中p ​i ​​ 是第i个素数。显然有d ​1 ​​ 1&#xff0c;且对于n>1有d ​n ​​ 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给…

python: SHA256算法的实现和消息的哈希散列值计算

目录1 SHA2562 实现原理2.1 消息预处理2.2 使用的常量和循环移位函数2.3 主循环3 结果4 对中文编码1 SHA256 SHA256是SHA-2下的一个子算法&#xff0c;与之类似的还有SHA224、SHA384、SHA512&#xff0c;算法原理基本一致。 哈希算法通过对消息进行计算&#xff0c;生成一定长…

财报上的云计算战场: 巨头们垄断加剧

来源&#xff1a; 第一财经一周之内&#xff0c;四大云业务巨头公司前后脚发布财报。亚马逊的云业务&#xff08;AWS&#xff09;依然跑在了最前面&#xff0c;以174亿美元排在首位。微软、谷歌、阿里巴巴也没有放慢步伐。阿里云去年累计的营收超过了百亿&#xff1b;微软的Azu…

Preserve Whole Object(保持对象完整)

从某个对象中取出若干值&#xff0c;将它们作为某一次函数调用的参数 int low daysTempRange().getLow(); int height daysTempRange().getHigh(); withinPlan plan.withinRange(low, high); 重构&#xff1a;改为传递整个对象 withinPlan plan.withinRange(daysTempRan…

简明Python教程学习笔记_5_解决问题

问题 我提出的问题是&#xff1a; 我想要一个可以为我的所有重要文件创建备份的程序。 尽管这是一个简单的问题&#xff0c;但是问题本身并没有给我们足够的信息来解决它。进一步的分析是必需的。例如&#xff0c;我们如何确定该备份哪些文件&#xff1f;备份保存在哪里&#…

【开始研究Community Server,转贴一点东西】Community Server资料收集

Community Server学习资料 uGoer 系列文章 Community Server专题一&#xff1a;概述Community ServerCommunity Server专题二&#xff1a;体系结构Community Server专题&#xff1a;附件(DOC&PPT)--2005年10月10日更新Community Server专题三&#xff1a;HttpModuleCommuni…

python实现RSA算法,对数据进行加密认证

RSA算法RSA一、数学原理二、实现代码1 生成素数2 生成秘钥3 对数据进行加密、解密总结RSA RSA是一种非对称加密体制&#xff0c;由公钥和私钥组成&#xff0c;数学原理是实数域的模余法。在使用私钥对数据进行加密后&#xff0c;可用公钥对数据进行解密。 在RSA算法中&#xf…