我在使用 cleveref 引用 memoir 中的 marginfigures 时遇到了问题。以下代码说明了这个问题(抱歉前言有点长,但我需要边距中的空间来说明这个问题):
\documentclass[a4paper,10pt]{memoir}
%%% formatting
\setstocksize{29.7cm}{21.0cm} % A4 stock
\settrimmedsize{27.94cm}{21.0cm}{*} % 27.94cm = 11in
\setlength{\trimtop}{0.0cm}
\setlength{\trimedge}{\stockwidth}
\addtolength{\trimedge}{-\paperwidth}
\settypeblocksize{23.94cm}{12.3cm}{*}
\setlrmargins{2.0cm}{*}{*}
\setulmargins{2.0cm}{*}{*}
\setmarginnotes{\onelineskip}{5.28cm}{\onelineskip}
\sidecapmargin{outer}
\setsidecaps{\onelineskip}{5.28cm}
\setsidecappos{t}
%%% clever referencing (should be loaded last)
\usepackage{cleveref}
\crefname{equation}{equation}{equations}
\Crefname{equation}{Equation}{Equations}
\crefname{figure}{figure}{figures}
\Crefname{figure}{Figure}{Figures}
%%%
\checkandfixthelayout
%%%
\begin{document}
\begin{equation}\label{eq:pyth}
a^2 + b^2 = c^2
\end{equation}
\Cref{eq:pyth} is known as Pythagoras' theorem.
\begin{marginfigure}
\rule{1.0cm}{1.0cm}
\label{fig:dummyfig}
\caption{dummyfig1}
\end{marginfigure}
This should be a reference to figure 1, but it comes out as
\cref{fig:dummyfig}.
\begin{equation}\label{eq:circ}
x^2 + y^2 = r^2
\end{equation}
\begin{equation}\label{eq:ell}
\left(\frac{x}{a}\right)^2 + \left(\frac{y}{b}\right)^2 = 1
\end{equation}
\Cref{eq:circ} describes a circle, \cref{eq:ell} an ellipse.
\begin{marginfigure}
\rule{2.0cm}{2.0cm}
\label{fig:dummyfig2}
\caption{dummyfig2}
\end{marginfigure}
This should be a reference to figure 2, but it comes out as
\cref{fig:dummyfig2}.
\end{document}
运行此程序时,对图形的引用变成了对方程式的引用。我是否需要以某种方式告诉 cleveref marginfigure 环境(我在最新手册中找不到任何信息)或者 cleveref 还不支持 marginfigure?
答案1
问题很简单,就是在\label
之前有\caption
。将\label
两者中的最后一个放上去,就可以正常工作了。参见例如,在图形环境中将 \label 放在哪里?