类文件和样式文件结构

类文件和样式文件结构

我正在尝试清理我所教课程中生成的文档的文档类。它经过大约 15 年的发展,各种新手“只是添加一点点东西”,直到它变得一团糟。我想重组,但最好至少以一种类似于乳胶的方式来做。

我想知道 .cls 文件中应该包含什么、.sty 文件中应该包含什么以及 .tex 文件中应该包含什么(如果有的话)。

documentclass 位于一个latex目录中,与实际课程内容分开,存放所有 latex 内容,它派生自“article”;它执行了\ProvidesClass{courseclass}and操作\LoadClass[11pt]{article},然后“需要”各种包。其中一些不是我们部门的标准 latex 实现的一部分,因此它们也位于该 latex 目录中。我很确定到目前为止,一切都很好。

还有几件事要做:

  1. 自定义内容。我们使用listings包,并且必须通过 来定义我们想要排版代码的语言(例如 Ocaml)\lstdeginelanguage

    1. 定义新的环境,例如用于讲义的“qa”环境,我们用它来呈现讲座中的问题和答案。

    2. 做一些更花哨的事情,比如定义一堆宏,比如\hw和,以或的\lec形式用于单独的家庭作业或讲座文档。这些宏的作用是声明此文档是家庭作业 2 或讲座 7,并设置家庭作业或讲座的标题,\hw{02}{Syntax}\lec{07}{Recursion}查找讲座的演示日期或家庭作业的截止日期;这些日期都在一个地方指定(在 latex 目录内),查找使用\hwlec宏的第一个参数。

我的问题是,这些内容是否应该放在.tex文件中,还是应该全部放在主.cls文件中?如果全部放在主文件中,是否有办法使用includeimport或其他方法“正确”地将其分开,以便我们可以拥有一个文件来执行与日期相关的内容(每年都会变化),以及另一个文件来执行与文档外观相关的内容,例如“程序列表样式”,这是相当恒定的?

有什么推荐吗?有没有什么地方可以推荐我去阅读,而不用学习有关 Tex/Latex 的所有知识?:)

答案1

\input首先,\LoadClass、等的活动组件\RequirePackage只是\input这样,所以它对 TeX 来说实际上没有任何区别。(注意\include是不同的,永远不应该在 之前使用\begin{document})。区别实际上是如何构造代码的品味问题,也许更重要的是你想如何向用户记录它。

  • 因此,一个合理的选择是将所有内容放在一个类文件中。请注意,如果您使用的是 doc/docstrip 之类的系统,您仍然可以将源代码组织成多个文件,只要这在代码组织方面方便即可。(例如,主要的 latex 格式源文件latex.ltx是由 40 多个单独的“ .dtx”文档源文件构建的。

如果您想在“运行时”拥有单独的文件,则有几种可能性。

  • 在核心 latex 类和包中,我们倾向于使用扩展.clo来实现类选项的代码,因此[12pt]最终输入size12.clo.def对于其他包或类相关的定义,因此输入[dvips]中的选项,导致输入的选项等。字体设置是带有扩展的特殊情况。存在用户配置可能性的情况将成对处理,例如在格式创建时,如果存在输入的文件,如果(通常情况下)它不存在,则默认输入设置数学字体。graphicxdvips.def[utf8]inputencutf8enc.def.fd.cfg/.ltx\InputIfFileExistsfontmath.cfgfontmath.ltx

请注意,这些扩展都不是以这种方式“内置”的,.sty并且.cls与可以通过名称引用而不需要.def输入扩展文件的包不同,\input{xxx.def}您可以使用.def或特定于包的扩展。

  • 如果额外的代码可能有用外部您的类,那么将其作为类加载使用的包是有意义的,\RequirePackage例如,ocaml 列表配置通常很有用,您可以将其放在类ocaml-listings.sty文件中,以便在这种情况下自动加载。(您可以在需要和包\RequirePackage{ocaml-listings}的 AMS 文档类中看到这种样式,amsmathamsfonts

相关内容