我没有找到有关此问题的任何信息,但如果我遗漏了什么,请指出我。
ctan.org 网站上的文档通常是关于如何在 LaTeX 文档中使用包,但如果我想编辑包本身怎么办?有可用的文档吗?
相关说明:建议/可以编辑包吗,或者尝试第一的调整文档,并且只之后編輯包裹?
编辑包肯定会影响将来使用它的所有文档,所以我认为最好先尝试更改文档选项,而不是直接编辑包。
答案1
TeX 世界中所有或几乎所有软件包(例如 CTAN 上的软件包)都附有许可证。根据许可证,您可以修改软件包,但许可证可能会限制您修改的方式。
如果许可证低功率激光功率放大器(这是 LaTeX 世界及其他领域中许多软件包的情况)那么是的,允许修改软件包,但许可证要求您遵守以下重要点(除其他外):
§6a. 如果本衍生作品的某个组件在与基础解释器一起使用时可以直接替换作品的某个组件,则当作品的该组件与基础解释器交互使用时,无论该作品的该组件如何向用户表明自己,本衍生作品的替换组件在与基础解释器交互使用时,也应向用户清楚明确地表明自己是该组件的修改版本。
在过去的美好时光里,人们的普遍理解是(现在仍然是)“如果你改变了 TeX 使用的东西,那么就改变它的文件名”,因为这样它就可以与原始文件区分开来,并且不会造成任何交换问题,例如,如果你制作了一个变体,比如我的array
包,那么调用它,array-xyz
这样使用你的包的文档就会立即显示这一事实\usepackage{array-xyz}
,而不是\usepackage{array}
可能导致不同的格式。
现在,如果您查看当前 LPPL 中的上述引文,会发现此限制已被放宽,LPPL 现在仅要求变体包向用户清楚地表明其已更改,例如,可以通过\ProvidesPackage
可以声明的参数来完成[with additions by XYZ to fix ABC]
。但是,通常的做法(有充分理由)是坚持修改应在具有新名称的单独文件中提供的规则,因为这是确保不同安装之间文档兼容性和可处理性的最简单和最佳方法(因为如果文件不存在,则会立即显现出来,如果它的行为略有不同,那么可能不会被注意到,直到为时已晚。
我应该说,上述引述只与某人打算分发修改的情况直接相关。但分发的速度可能比你想象的要快,例如,如果你将文件发送给其他人来处理你的文档,那么即使只是在有限的意义上,你也已经分发了。
LPPL 在此列出了以下建议:
最好不要修改作品的组件,即使是为了个人使用,也不要同时满足上述分发修改组件的条件。虽然您可能希望永远不会分发此类修改,但这种情况经常会发生——您可能忘记了您修改了该组件;或者在允许其他人访问修改版本时,您可能没有意识到您正在分发它并违反本许可证的条件,这可能会产生法律影响,甚至更糟的是,会给社区带来问题。因此,通常最好将作品的副本与公开的副本保持一致。许多作品提供了控制作品行为的方法,而无需更改其任何许可组件。
最后,为了更多地了解 TeX 世界中许可证的背景以及 LPPL 为何有这些条款并限制修改,我建议阅读我的 TUG 论文:“LaTeX 项目公共许可证 (LPPL) 的历史回顾 - LaTeX 及更多软件的许可证“。
答案2
它是绝不直接编辑包是个好主意。如果你觉得必须编辑一个包,您应该复制一份并赋予它不同的名称,然后将其保存在您的本地texmf
文件夹中。
话虽如此,但很少需要制作软件包的新副本来更改它们。有各种工具可用于修补单个命令(例如,参见软件包etoolbox
),也可以将软件包的一小部分代码复制到文档前言中并在那里进行更改。
至于文档,一些软件包作者提供了单独的代码文档,一些将其包含在用户文档中,一些在软件包本身中添加注释,而其他人(不幸的是)没有留下任何痕迹。
答案3
尽管 LPPL 并不禁止修改软件包,但从实际角度来看,强烈不建议这样做:如果您修改了主分发树中的“原始”内容,那么以后的更新可能会破坏您的修改。
实际上我自己也做过类似的事情,但是为了修复几天后就要修复的错误。
当软件包出现问题时,首先要尝试在文档或个人.sty
文件中进行修补。有很多方法,选择哪种方法主要取决于要应用的补丁。
但是,有时无法通过这种方式进行修补。最好的办法是以另一个名称复制软件包并修改副本。这样你就可以在旧版本和新版本之间进行选择。
绝不将修改后的软件包放入主分发树中,因为更新可能会破坏新软件包。使用“个人”树(~/texmf
在 GNU/Linux 系统上以及~/Library/texmf
在使用 TeX Live 的 Mac OS X 上),或以 为根的“本地”树(对于 TeX Live)/usr/local/texlive/texmf-local
。
答案4
按优先顺序递减:
- 调整文件;
- 说服相关软件包的作者进行您希望的更改(您可以通过向他们发送补丁或至少发送测试用例和更改理由来提供帮助)。这样每个人都可以受益,您不必担心软件包的未来更新会破坏您的编辑。大多数软件包作者都非常乐意采纳您建议的更改;
- 更改包文件名并根据所做的更改进行编辑;
- 在文件副本上进行更改,但不更改文件名(有时,如果其他软件包专门按名称检查软件包以激活其兼容性代码,则这样做是必要的)。将文件副本放在本地树中(如果您将多次使用更改),或放在文档的目录中(如果更改特定于该文档)。将首先找到文件的本地版本,并且更改的版本不会被发行版的后续更新所覆盖。(这当然意味着您不会发现任何错误修复等)。
我唯一一次在不更改文件名的情况下进行更改是使用natbib
,由于其结构,很难从文档到其宏的深处进行更改,作者不接受我的错误报告,并且由于它完全改进了 latex 引用机制,许多软件包包含专门检查它的兼容性代码。正如 Frank Mittelbach 指出的那样,即使在那时,我也应该多花点精力,给我的修复版本起一个不同的名字,让它假装加载了原始的 natbib。