一旦 LaTeX 用户变得越来越熟练,并编写自己的代码,就可能会出现“我应该用它制作一个包(或一个类)吗?”的问题。
我的问题是(你抓住我了:我就是其中一个用户!):除了适用于类和包编写者的 LaTEX 2ε?
我的意思是,在我看来,编写类或包的能力只能通过经验获得。每个 LaTeX 包总是有很好的文档记录。有没有关于如何在对 LaTeX 知之甚少的情况下编写包的文档?
你知道,每种编程语言都有一个“Hello world”示例,从这个示例开始,会解释该语言的所有功能。但我还没有找到编写 LaTeX 包的类似方法。
答案1
我编写了我的第一个 LaTeX 包(idxlayout
大约半年前(2010 年 1 月)我写了这篇文章。当时我还不知道全面的类/包编写指南(现在也不知道),但我可以提供一些有用的提示:
- 您可能不需要高级的 TeX 编程技能,但您应该熟悉您感兴趣的主题领域的现有解决方案(及其缺点)。深入研究 LaTeX 内核的相应代码,研究可能已经存在的软件包。
- 在编写大量代码之前,请尝试理清软件包所需的功能及其相互依赖关系。为选项和用户命令想出直观的名称。
- 考虑为要提供的选项提供一个键值接口。有相当多的键值语法支持包;我用过
kvoptions
。 - 您已经提到了文档的重要性。我想补充一点,编写一份通俗易懂的用户手册是必要的,但您的首要任务应该是记录源代码的复杂性——忽视这一点会让您日后陷入困境。
- 要分发你的软件包,你可以使用 -format
dtx
,它将源代码和文档打包在一个文件中。一个很好的教程是斯科特·帕金斯的文章。
编辑:一年后,我的第二个包的版本为 0.1(quoting
) 发布后,我想强调其他几点。请注意,我只是一个 LaTeX“高级用户”,我的建议对程序员来说可能是不言而喻的。
在开发类/包时,请编写一份随附的测试文档,以便快速概览(主要)功能(仍然)按预期工作,或者最新版本是否破坏了某些功能。每当您偶然发现新的边缘用例时,请修改测试文档以将其包括在内。
考虑使用版本控制系统。我保留了软件包“主要”开发版本的副本,但没有使用像颠覆,现在有点后悔了。(我曾经为 编写了一个小功能
quoting
,然后在同一个“主要”软件包版本中放弃了它,现在非常想重新使用这段代码。)
答案2
我可能错了,但你的问题似乎是在问如何编写 LaTeX 包,而不是用 LaTeX 编程。对吗?在这种情况下,你可能会对dtxtut
指南和dtxgallery
例子集合。
答案3
我认为没有多少有趣的 LaTeX 软件包是只对 LaTeX 有一点了解就能编写的。大多数(但不是全部)软件包都需要对 TeX 有相当深入的了解。我强烈建议阅读 TeXbook 来了解 TeX。
有人可能会编写一个类,该类本质上加载了另一个类(如article
),使用了一些包(如geometry
),并向它们提供了必要的参数,而不需要大量的 LaTeX 知识。处理docstrip
文档又是另一个问题。
答案4
写作课的介绍是这里。