自动管理包装选项和加载顺序

自动管理包装选项和加载顺序

这个问题导致了一个新的方案的出现:
pkgloader加拿大运输安全局Github

LaTeX 软件包冲突是造成困扰的常见原因:(1) (2) (3) (4) (5) (6)。 去引用弗里克·迪克斯特拉

LaTeX 中的包冲突非常严重。

我一直在寻找,但我认为没有人研究过对我来说似乎显而易见的解决方案:一个包自动化LateX 包的冲突解决。

碰巧的是,我的博士研究(增量建模) 与这个问题非常吻合,所以我快速启动了这个包,并希望对这个想法得到一些反馈。

当前版本暂时存储在另一个包的 SVN 分支。这取决于l3graph我正在开发的包,它还没有为 CTAN 做好准备。该l3graph包提供了一个图形数据结构,具有expl3用于检测循环和使用传递闭包/减少拓扑序的图表。

封装描述

pkgloader软件包提供了解决冲突的工具,并由已知解决方案的数据库支持。对于普通用户来说,一切都会只是工作。用户界面如下所示:

\documentclass{article}

\usepackage{pkgloader}

% List packages in any order you please
\usepackage{xltxtra}
\usepackage[xetex]{graphicx}

\LoadPackagesNow

\begin{document}
\end{document}

通过重新定义\usepackage(和朋友),pkgloader收集用户想要加载的软件包列表(带有选项),然后在命令中以正确的顺序加载它们\LoadPackagesNow。如果没有 ,上面的软件包顺序(需要 XeTeX)会立即导致错误pkgloader

它能够防止出现此问题,因为我已经包含了一份简单的包排序规则列表:

\Load {fancyhdr} before {hyperref}
\Load {fncychap} before {hyperref}
\Load {float}    before {hyperref}
\Load {hyperref} before {algorithm}
\Load {amssymb}  before {xunicode}
\Load {amssymb}  before {xltxtra}
\Load {graphicx} before {xltxtra}
\Load {graphicx} before {fontspec}
\Load {caption}  before {subfig}

这些也可以手动添加。

潜在功能

修复包加载顺序只是第一步(也是最简单的一步)。再做一些额外的工作,我们就可以添加如下功能:

  • 包裹排序规则如下:\Load {cleveref} late(或early
  • 为软件包作者提供以统一方式包含自己的解决方案的便利
  • 自动检测规则内的循环
  • 累积和组合套餐选项,每个套餐有具体规则
  • 添加额外的“粘合代码”以使其他两个包正常运行(如果它们都被加载)
  • 自动解决列出的几乎所有冲突Freek 的页面
  • 对于尚无法解决的冲突,至少要显示一条错误消息,而不是让事情在以后的阶段出错。

问:之前有什么工作吗?

具体来说:

  • 是否已经存在另一个可以执行(类似)此操作的包?
  • 我应该注意哪些具体的陷阱?
  • 以外Freek 的页面,是否有已知冲突和解决方案的综合列表?

我认为,如果我能正确处理,这样的软件包可能会对很多人有用。这样的软件包的应用范围非常广泛。我不想冒犯任何人,所以请帮助我正确处理。

我很乐意与社区就此进行合作 - 欢迎任何反馈,如果您有兴趣,请联系我。

答案1

该软件包的第一个版本pkgloader已经发布!根据以上所有有用的评论以及我自己的(重新)搜索,我可以放心地回答以下个人问题:

  • 是否已经存在另一个可以执行(类似)此操作的包?

不。最接近的假设是scrlfile,坦白说,它并不是那么接近。另外,其他的从那时起就要求这种包裹,就像我一样。

  • 我应该注意哪些具体的陷阱?

上述评论指出了几个需要考虑的重要问题。

  1. 每个包请求都需要跟踪选项和最低版本。
  2. 并不总是存在一种正确的包加载顺序。有时两种选择都是有效的,即使它们会产生不同的结果。这可能只是用户偏好的问题。
  3. 有时仅仅订购两个包是不够的,还需要运行一些“粘合代码”才能使两个包一起工作。

可能还有很多其他问题。但至于具体的陷阱,我还没有发现任何我无法解决的问题。和往常一样,我愿意接受新的信息(这些信息应该交给Github 问题追踪, 请)。

  • 除了 Freek 的页面之外,是否还有任何已知冲突和解决方案的综合列表?

似乎不是。要拥有pkgloader一套好的规则,应该做到以下几点:

  1. 将 Freek 页面上的问题和解决方案编码为pkgloader规则。
  2. 在 tex.SE 上搜索冲突报告并对其进行编码。
  3. 一旦pkgloader经过彻底测试并得到社区的信任,发布到 tex.SE 的新冲突(和解决方案)应报告给pkgloader问题追踪器

最终,pkgloader开发人员(现在只有我)将需要维护一份完整的列表。

正如发行说明中提到的,尽管我还没有发现任何错误,但我还不会盲目地相信该软件包能够满足我的软件包加载需求。需要编写一套单元测试,需要实现附加功能,并需要定义一组有用的规则。

请随意贡献!只需使用 Github 问题跟踪器,或亲自联系我。

相关内容