为什么 `revtex4-1` 类与 `subcaption` 包不兼容?

为什么 `revtex4-1` 类与 `subcaption` 包不兼容?

这个答案指出该caption包与不兼容revtex4-1

另一个答案提供了一种解决方法,以通过使用包来实现caption兼容。revtex4-1ragged2e

我觉得这是\caption由提供的命令revtex4-1造成的。这个不兼容问题可以轻松修复吗?

答案1

caption软件包需要修补命令\caption\@caption\@makecaption,前者由 LaTeX 内核定义(但有时会被像这样的文档类覆盖revtex4-1),后者由文档类定义。

不幸的是,没有关于如何修补内部 LaTeX 命令的指南,而“LaTeX 包”的概念仅适用于无需修补内部 LaTeX 代码即可扩展 LaTeX 的包。因此,像这样的包caption无法以干净且兼容的方式实现,这简直是不可能完成的任务。

基本上,修补现有命令有四种不同的方法:

  1. 保存旧定义,并让新定义也使用旧定义。
  2. \patchcmd使用软件包提供的命令(或其他命令)修补该命令etoolbox
  3. 重新定义定义而不保存并使用旧定义。但尽量内置文档类和/或其他包提供的定义。
  4. 只需重新定义,而无需保存和使用旧定义。

所选方法会极大地影响您的定义与其他软件包的兼容性,这些软件包要么也重新定义该命令,要么依赖于该命令的特定行为。这是不同 LaTeX 软件包(或 LaTeX 文档类和软件包)之间存在如此多不兼容性的众多原因之一。

直到版本 3.0,该caption包都使用方法 1。但是由于许多文档类和包重新定义了\caption\@caption本身,这种方法已导致无法维护。因此,从版本 3.1 开始,该caption包使用方法 3。为了确保它不会覆盖任何功能\caption,它会在重新定义之前检查\@caption、 和\@makecaption是否已知。如果发现未知定义,它会拒绝重新定义\caption\@caption,以确保caption包按预期工作或incompatible向用户发送消息,然后返回“兼容模式”,仅提供未修补 的包版本 1.0 已提供的功能\caption。(由于该subcaption包依赖于 的修补版本,\caption因此\@caption它根本无法工作。)

顺便说一句:幸运的是,该软件包适配的大多数 LaTeX 软件包caption都已停用/无人维护,否则跟踪这些软件包内部的变化将花费大量时间。这基本上意味着,这样的软件包caption之所以能够实现,是因为大多数其他 LaTeX 软件包已经停用!

因此,任何文档类(或重新定义\caption或的包\@caption)只要包caption不适应它,就会被视为“不兼容”。

现在回到你的问题:

为什么该类revtex4-1与包不兼容subcaption?因为该caption包尚未适配 revtex4-1 文档类。

这种不兼容性能轻易修复吗?我不知道。为了回答这个问题,我不得不仔细研究一下 的来源revtex4-1

然而,目前将caption包改编为文档类意味着要增强caption包本身。这种情况将随着即将推出的 3.4 版caption包而改变,该版本将为这些改编提供文档化的接口,因此更多的人(或文档类的作者本人)可以提供这些改编。

相关内容