我正在尝试使用narrowfig
来自acmsmall
类。下面的操作没有问题:
\documentclass{acmsmall}
\begin{document}
\begin{narrowfig}{.5\linewidth}
Foo
\caption{Bar}
\end{narrowfig}
\end{document}
hyperref
但是,当包含时,这会因以下错误而中断:
!缺失数字,视为零。 { l.6 \caption{酒吧}
我认为hyperref
这是以一种不兼容的方式重新定义了一些图形机制,acmsmall
但是,遗憾的是,我没有必要的 LaTeX 知识来找出确切的问题。
答案1
acmsmall
期望\r@@nf<n>
(其中<n>
是图形的数字)扩展为
{<figure number>}{<page number>}
以便根据奇数或偶数页码设置条件。相反,使用ishyperref
的扩展\r@@nf<n>
,
{<figure number>}{<page number>}{...}{...}{...}
有五个支撑组,而不是两个。这打破了机制。
最简单的解决方法是使用refcount
包,它自己知道是否hyperref
已加载并且在每种情况下都执行正确的操作。
我们需要改变\@seteven
类中的宏:
\documentclass{acmsmall}
\usepackage{refcount}
\usepackage{hyperref}
\usepackage{lipsum} % just to fill with some mock text
\makeatletter
\def\@seteven{%
\@nfeventrue
\edef\@tmpnf{\getpagerefnumber{@nf\thefigure}}%
\ifodd\@tmpnf\relax
\@nfevenfalse
\fi
\label{@nf\thefigure}%
\edef\@tmpnfx{\if@nfeven e\else o\fi}%
\edef\@tmpnf{%
\write\@unused{%
\noexpand\ifodd \noexpand\c@page
\noexpand\if \@tmpnfx e%
\noexpand\@nfmsg{\thefigure}
\noexpand\fi
\noexpand\else
\noexpand\if \@tmpnfx o%
\noexpand\@nfmsg{\thefigure}%
\noexpand\fi
\noexpand\fi
}%
}%
\@tmpnf
}
\makeatother
\begin{document}
\lipsum[1-2]
\begin{narrowfig}{.5\linewidth}[htp]
Foo
\caption{Bar}
\end{narrowfig}
\lipsum
\begin{narrowfig}{.5\linewidth}[htp]
Foo
\caption{Bar}
\end{narrowfig}
\end{document}