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里改变长度 ...
随机推荐
- Go语言为何说它优雅?-- Golang中的几个常用初始化设计
对象池化设计: 将池对象通过Channel方式进行借出与还入,利用Go本身的特性还能实现更多限定需求.比如利用select的分支可以进行优雅的限流.超时熔断等操作. 思路:将需要池化的对象通过Ch ...
- 解决Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-f8IeEI/MYSQL-python/
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-f8IeEI/MYS ...
- 分布式缓存技术redis系列(二)——详细讲解redis数据结构(内存模型)以及常用命令
https://www.cnblogs.com/hjwublog/p/5639990.html
- git 将主分支的提交合并到分支上(主分支同步到分支)
通常都会遇到将分支修改的内容合并到主分支中,但是在主分支中修改了内容怎么同步到分支上呢,这个时候需要将主分支上的提交操作在分支上再做一次: 1.首先在主分支上执行: git log 2.找到你想要同步 ...
- js获取form元素,不使用id
<form method="post" name="form"> <input type="text" name=&quo ...
- BZOJ.1535.[POI2005]SZA-Template(KMP DP)
BZOJ 洛谷 \(Description\) 给定一个字符串\(s\),求一个最短的字符串\(t\)满足,将\(t\)拼接多次后,可以得到\(s\).拼接是指,可以将\(t\)放在当前串的任意位置, ...
- 面试题fugui02
一.概念题 1.描述对super.pass.yield.lambda关键字修饰的理解 2.大致描述一下python GIL的机制,以及python中多线程和多进程的区别 GIL全局解释器锁,是pyth ...
- python网络编程(十一)
epoll版-TCP服务器 1. epoll的优点: 没有最大并发连接的限制,能打开的FD(指的是文件描述符,通俗的理解就是套接字对应的数字编号)的上限远大于1024 效率提升,不是轮询的方式,不会随 ...
- BZOJ3252攻略——长链剖分+贪心
题目描述 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏<XX 半岛>,这款游戏有n个场景(scene),某 ...
- 自定义simple_tag和filter在html中渲染出来的联系和区别
关于 simple_tag: 1,在app下创建一个(templatetags)目录,(被引用的模块必须放在该目录下,且目录名称不可更改): 2,创建任意py文件: 3,创建template对象: f ...