caption+autonum+{特定结构}=freeze

caption+autonum+{特定结构}=freeze

PDFLaTeX 会导致冻结:

\documentclass[12pt]{book}

\usepackage{caption}
\usepackage{autonum}

\begin{document}

\begin{figure}[ht]
\begin{align}
x=y
\end{align}
\caption{Caption}
\label{fig1}
\end{figure}

%\subsection{Title}
%\label{sec:xyz}

\begin{figure}[ht]
\begin{align}
y=z
\end{align}
\caption{Caption}
\label{fig2}
\end{figure}

\end{document}

如果我取消注释这两行,它会抱怨未定义的控制序列。我是否错误地实现了这个结构,或者我应该报告其中一个包的错误?

PS MiKTeX 2014 年 1 月 31 日

答案1

我甚至不知道在浮点环境中可以有一个数学环境,这也许解释了为什么我从未测试过它。

将启用自动编号的数学环境放入其他非平凡环境内总是有点问题,因为外部环境有时需要支持自动编号才能获得正常工作的内部环境。

由于数学环境可以包含其他数学环境,autonum 包已经包含了该子问题的两个解决方案。

  • 您可以通过在使用环境名称作为参数\autonum@patchFullEnvironment后直接调用来使零参数环境了解 autonum 。\begin{document}
  • 对于具有强制参数的环境\autonum@patchParametrizedFullEnvironment应该使用。

满足您的需求

\makeatletter
\autonum@patchParametrizedFullEnvironment{figure}%
\makeatother

之后直接\begin{document}与您的示例一起工作,因为它编译时没有错误,并且输出似乎是正确的。

然而,在实现该功能时,我从未想过将其用于非数学环境。所以说实话,我甚至有点惊讶,这个功能开箱即用,我不确定它在极端情况下或在现实世界的文档中是否有用,因为在各种组合中过度使用了相关环境。

话虽如此,但更大的问题是,figure 的参数通常是可选的,现在却变成了必选的(这引发了关于[]和的使用{}以及参数是否正确使用的各种问题),所以如果你在代码中的某个地方省略了 figure 的可选参数,它将无法编译通过。整个文档

可能还可以添加一个能够处理带有可选参数的环境的 patch 命令,但我不知道这是否是最好的方法。由于所有 patch 命令都支持数学环境,因此它们包含一些开销,而在修补非数学环境时,这是不必要的。这可能不是一个性能问题,而是一个兼容性问题,因为现实生活中有各种各样的环境,需要的修补越少,autonum 不破坏任何东西的可能性就越大。

我必须深入研究代码,看看是否有可能实现一个只能处理非数学环境的简单补丁命令。但是,由于其他承诺,我不确定何时能抽出时间来做这件事,所以不要指望很快就能找到解决方案。

相关内容