如何使 memoir + cleveref 中的子图引用起作用?

如何使 memoir + cleveref 中的子图引用起作用?

在以下示例中:

\documentclass{memoir}
\usepackage{cleveref}
\newsubfloat{figure}
\begin{document}

\chapter{Example}
\begin{figure}
  \centering
  \subtop[apple]{fig 100a\label{fig:100a}}\\
  \subtop[orange]{fig 100b\label{fig:100b}}
  \caption{Can you handle subfigures?}
  \label{fig:100}
\end{figure}

\cref{fig:100a} and \namecref{fig:100b}.
\Cref{fig:100}
\end{document}

两者\cref{fig:100a}\namecref{fig:100b}生产??

所用软件包的版本是:cleveref.sty 0.17.2 和 memoir.cls v3.6。

答案1

您应该联系 cleveref 的作者 Toby Cubitt。他对错误报告反应非常迅速,cleveref 的回忆录支持非常新,而且很少经过测试。

问题是回忆录\label在子图中重新定义,因此 cleveref 版本未被使用......

与此同时,它并不漂亮,但至少对你的例子有用:

\documentclass{memoir}
\usepackage{cleveref}
\crefname{subfigure}{fig.}{figs.}
\Crefname{subfigure}{Figure}{Figures}


\newsubfloat{figure}
\begin{document}

\makeatletter
\let\old@sf@@memsub@label=\sf@@memsub@label
\renewcommand*{\sf@@memsub@label}[1]{%
    \@bsphack%
    \old@sf@@memsub@label{#1}%
    \protected@write\@auxout{}%
    {\string\newlabel{cref@#1}{{\cref@currentlabel}{\thepage}}}%
    \@esphack}
\makeatother


\chapter{Example}
\begin{figure}
  \centering
  \subtop[apple]{fig 100a\label{fig:100a}}\\
  \subtop[orange]{fig 100b\label{fig:100b}}
  \caption{Can you handle subfigures?}
  \label{fig:100}
\end{figure}

\cref{fig:100a} and \namecref{fig:100a}.
\Cref{fig:100}
\end{document}

相关内容