我试图在文档中单独编号“资源”部分memoir
,但产生的cleveref
错误却引用“当前”资源计数器值而不是引用的资源的计数器值。
我不认为这是因为不兼容性memoir
和之间titlesec
(请参阅下面的编辑)。
我对非解决方案持开放态度titlesec
,但我确实需要memoir
整个文档。这是 MWE。
\documentclass[11pt]{memoir}
\usepackage{titlesec}
\newcounter{resourcecounter}
\setcounter{resourcecounter}{0}
\newcommand{\resource}[2]{
\stepcounter{resourcecounter}
\titleformat{\section}{\Large\sffamily\bfseries}{Resource \arabic{resourcecounter}}{1ex}{}
\section[Resource \arabic{resourcecounter}: #1]{#2}
\renewcommand*\thesubsection{\arabic{resourcecounter}.\arabic{subsection}}
\titleformat{\subsection}{\sffamily}{Resource \thesubsection}{1ex}{}
}
\usepackage[noabbrev,capitalise,nameinlink]{cleveref}
\crefname{resource}{Resource}{Resources}
\creflabelformat{resource}{#2\arabic{resourcecounter}#3}
\crefname{resource:sub}{Resource}{Resources}
\begin{document}
\section{Baz}
Foo \cref{res:bar}.
\resource{Bar}{Bar}
\label[resource]{res:bar}
Bar \cref{res:bar}.
\end{document}
请注意,我发现了几个相关问题,据我所知,没有一个是完全相同的。
编辑
titlesec
我已确认,删除和后仍存在相同的编号问题。这似乎与在宏中使用自定义标签声明\titleformat
有关。cleveref
\section
\resource
答案1
在将问题隔离到各节的引用之后(注意:这也适用于使用nameref
标题中有计数器的情况),我发现这个聪明的答案一个非常相关的问题。我改编了这个解决方案(没有使用部分宏)并开发了以下更简单、实际可行的例子。
\documentclass[11pt]{memoir}
\newcounter{resourcecounter}
\newcommand{\resourcer}[1]{% this is the magic
\refstepcounter{resourcecounter}\label[resource]{#1}%
}
\newcommand{\resource}[3]{
\resourcer{#3} % using the magic
\section[Resource \theresourcecounter: #1]{Resource \theresourcecounter: #2}
}
\usepackage{cleveref}
\crefname{resource}{Resource}{Resources}
\creflabelformat{resource}{#2#1#3}
\begin{document}
\section{Foo}
See \cref{res:bar}.
\resource{Bar}{Bar}{res:bar} % note how labeled in macro
See \cref{res:bar}.
\section{Foo}
See \cref{res:bar}.
\resource{Baz}{Baz}{res:baz}
See \cref{res:bar}.
\end{document}