Latex中cls和sty文件有何区别?
Latex中cls和sty文件有何区别?
资源
本文对 LaTeX 中 .cls 和 .sty 文件进行介绍,主要参考了 What are .cls and .sty files?How are they different? 以及 LaTeX2e for class and package writers 。
什么是 .cls 和 .sty 文件?
一般来说,.cls 和 .sty 文件都是增加 LaTeX 功能的补足文件。它们在我们排版文章是时对应的使用 \documentclass{} 和 \usepackage{} 加载,在包内部则对应的使用 \LoadClass,\LoadClassWithOptions 和 \RequirePackage,\RequirePackageWithOptions 加载。我们通常将 .cls 文件称之为类(classes)文件,将 .sty 文件称之为风格(style)文件或者包(package)。
不同点
虽然它们都可以包含任意的 TeX 和 LaTeX 代码,但是它们的使用方式不同。我们必须通过 \documentclass 加载一个类文件,并且在一个 LaTeX 文件中只能出现一次,通常也是第一个出现的命令。而另一方面,包是一个可选项,它可以根据我们的需求加载任意多个(在开始文档之前)。
编写原则
什么时候编写一个类文件?什么时候编写一个风格文件?或者说什么命令应该放到 .cls 文件?什么命令应该放到 .sty 文件中呢?一个经验法则是:
如果一个命令是用来控制文档结构的,则应该放到类文件中;否则应该放到包文件中。
如果一个命令可以被其他所有的文档使用,那么将这个命令放置到一个包中;如果不是,则将它放到一个类文件中。
当一个命令使上述两条规则冲突的时候,优先考虑第一条规则。如
\section命令几乎在所有的文档中都使用,但因为其是用来控制文档结构的,我们将其放置到类文件中。
一般情况下,类文件主要分为两个部分:一种是标准类文件,如:article,report 或者 letter;另一种是基于标准类文件的扩展文件,如基于 article 的 proc 文件类。当然我们也可以不基于任何标准类编写全新的类文件,通常这比较复杂,需要我们重新定义大量常用的命令,因此不建议这么做。
额外说明:如果我们要自己定义一个不基于标准类的类文件,应确保至少包含以下四个部分:定义 \normalsize 命令,设置 \textwidth,\textheight 的值以及设置页编码方式.下面给出一个最小类文件的例子,当然对于大部分类其包含的命令是远远多于以下类文件的:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{minimal}[// Standard LaTeX minimal class]
\renewcommand{\normalsize}{\fontsize{10pt}{12pt}\selectfont}
\setlength{\textwidth}{.5in}
\setlength{\textheight}{8in}
\pagenumbering{arabic} % needed even though this class will
% not show page numbers
对于包,或者说是风格文件,它用来提供所有其他类文件不提供的命令。它们广义上被分为两类:对类文件进行修正,或者添加额外功能。
例如 graphicx 包提供包含图像的方法和将所有图形效果应用到文档元素中。这个包本质上可以应用到所有类文件上。另一个例子——sectsty 包。该包提供了方法用来自定义标准类文件(article,report,book)中的段落开头(section headers)。所以,如果试图将它和 memoir 包一起使用,将导致它重写 memoir 的创建段落开头的方法,进而导致出现严重错误。
总结
.cls 和 .sty 文件都可以使用 LaTeX 中的任意代码以提供一些功能和命令。类文件一般用来控制文档的结构并提供该类特有的命令,如段落命令、字体命令、特定的页眉页脚设置等。包文件用来提供其他的所有的功能和命令。
大部分情况下我们应该考虑将我们的命令放置到包中,这样我们可以根据需求任意的选择是否加载这些包。如果我们真的需要编写类文件,应该基于现有的标准类文件进行编写,这样可以节省我们很多命令的定义(如上面提到的 section命令以及其他常用的字体选择命令)。同时类文件的内容不宜过多,当我们类文件的内容过多时,我们应该考虑是否将其中部分命令单独提取出来作为一个包。
参考:https://www.jianshu.com/p/12b4a4b3afce
Latex中cls和sty文件有何区别?的更多相关文章
- Latex中画出函数文件的调用关系拓扑图
流程图,思维导图,拓扑图通常能把我们遇到的一些复杂的关系结构用图形的方式展现出来.在Latex中要想画这样的拓扑图,有一个很好用的绘图工具包 pgf/tikz . 1.pgf/tikz的安装:pgf/ ...
- 在Latex中插入Python代码
这里指的插入是指最终能在生成的pdf中显示高亮的Python代码. 在Latex中插入Python代码,需要一个第三发的宏包pythonhighlight: https://github.com/ol ...
- latex之在windows环境下能够在latex中使用中文
今天要把前段时间的实验用英语先记录下来,自己就想根据原来会议的模版弄一个简易的页面(英语),突然想到之前用英文模板时是不能输入中文的,于是想着怎么在latex中输入中文,折腾了许久,终于成功了,现在分 ...
- 如何在latex 中插入EPS格式图片
如何在latex 中插入EPS格式图片 第一步:生成.eps格式的图片 1.利用visio画图,另存为pdf格式的图片 利用Adobe Acrobat裁边,使图片大小合适 另存为.eps格式,如下图所 ...
- paper 48: Latex中如何制作参考文献
文章写到现在,最后一步就要大功告成了!reference,let's go! 一.用Google来做Latex的bib文件 1. 打开scholar.google.com 2. 定制 Schola ...
- The usage method of reference with bibtex in Latex【latex中参考文献的使用方法】
如何在latex中以Bibtex文件方式引用参考文献? 以IEEEtran模板为例: 1.制作bibtex参考文献库.方法如下: ①建立myreference.bib文件: ②在Google scho ...
- 读书笔记-详解C程序开发中 .c和.h文件的区别
一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼: 子程序不要定 ...
- latex中pdflatex与xelatex的区别
1. PDFTeX程序:Tex语言的一个实现,也就是把Tex语言转换为排版的一个程序.它会把TeX 语言写的代码直接编译成 PDF文件. 2. PDFLaTeX命令:PDFTeX程序中的命令,用来编译 ...
- LaTeX中的各种距离设置总结
LaTeX中的各种距离设置总结 1. 页面设置 A4 会给你一个较小的页面,为了使用更多的控制,可用 geometry宏包 和 命令 \layout . 2. 改变长度 在latex里改变长度 ...
随机推荐
- Shell学习之条件测试(四)
Shell学习之条件测试 目录 逻辑测试 文件测试 数值比较 字符串比较 逻辑测试 格式: [ 表达式 ] 操作符 [ 表达式2 ] …… 命令1 操作符 命令2 …… 常用的操作符 ( 注意:-a和 ...
- SpringMvc接口中转设计(策略+模板方法)
一.前言 最近带着两个兄弟做支付宝小程序后端相关的开发,小程序首页涉及到很多查询的服务.小程序后端服务在我司属于互联网域,相关的查询服务已经在核心域存在了,查询这块所要做的工作就是做接口中转.参考了微 ...
- P3812 【模板】线性基
P3812 [模板]线性基 理解 :线性基 类似于 向量的极大无关组,就是保持原来所有数的异或值的最小集合, 求解过程也类似,可以 O( 60 * n )的复杂度求出线性基,线性基有许多性质,例如 线 ...
- JAVA中handleEvent和action的区别
看代码中用到了handleEvent和action,都是对事件进行处理的,觉得这两个方法可以直接合并,于是尝试合并后,发现功能还是有问题,说明两者还是有区别了,查了很久的资料,才基本了解这两者的区别. ...
- 踩坑记:Tensorflow环境搭建
自从上一篇论文投出去,之后就各种事就来了……处理那些乱七八糟的事就是让人心累,在加上师哥们毕业,能帮我的人越来越少了,而要指望你的人呢,越来越多.一想到那些用搜索引擎都搜不到资料的人,蓦地想起邓爷爷说 ...
- Vue+elementUI开发中 Cannot read property 'resetFields' of undefined 问题解决以及原因分析
本人开发的系统中有个添加数据与编辑数据的功能.为了减少代码量,两者使用了同一个dialog,通过不同按钮点击使用对应的方案进行显示. 对了方便,本人在添加数据的按钮的click事件中直接写入了rese ...
- ICPC Asia Regional 2015 Japan.Routing a Marathon Race(DFS)
vjudge \(Description\) 给定一张\(n\)个点\(m\)条边的无向图,每个点有一个权值.求一条从\(1\)到\(n\)的路径,使得代价最小,输出最小代价. 一条路径的代价定义为, ...
- Android应用程序结构
综述:Android应用程序包含哪些部分? assets 可以出发一些随程序打包的文件,应用程序运行时可以动态读取到这些文件的内容. 如果使用到webview加载本地网页的功能,所有网页相关的文件都存 ...
- WebStorm中使用npm包管理器
1.首先安装Node.js,安装之后添加NodeJs的安装路径到系统Path环境变量,在控制台之中测试node,与npm命令是否工作正常. 2.配置npm的源为国内的淘宝镜像,这里不推荐使用cnpm ...
- Little Pony and Alohomora Part 3 [HihoCoder 1075]
描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它.初始时,崔克茜将会随机地选择 k 个盒子用魔法将它 ...