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