我正在尝试调整对嵌套枚举的引用的呈现。这是我的 MWE:
\documentclass[a4paper,14pt,openany]{memoir}
\usepackage{cleveref}
\renewcommand{\theenumi}{\arabic{enumi}}
\renewcommand{\theenumii}{\arabic{enumii}}
\renewcommand{\theenumiii}{\arabic{enumiii}}
\renewcommand{\labelenumi}{\arabic{enumi}}
\renewcommand{\labelenumii}{\arabic{enumii}}
\renewcommand{\labelenumiii}{\arabic{enumiii}}
\crefformat{enumi}{#2#1#3}
\crefformat{enumii}{#2#1#3}
\crefformat{enumiii}{#2#1#3}
\labelcrefformat{enumi}{#2#1#3}
\labelcrefformat{enumii}{#2#1#3}
\labelcrefformat{enumiii}{#2#1#3}
\begin{document}
\begin{enumerate}
\item\label{first} First level
\begin{enumerate}
\item\label{second} Second level
\begin{enumerate}
\item\label{third} Third level
\end{enumerate}
\end{enumerate}
\end{enumerate}
First level ref: \cref{first}.
% Expected result: 1
Second level ref: \cref{second}.
% Expected result: 1
Third level ref: \cref{third}.
\end{document}
正如你所看到的,我尽了一切努力,但仍然无法到达cleveref
“烹饪”标签的地方:
答案1
您描述的问题是不是与包装有关。如果您使用而不是 ,cleveref
这种情况会发生。能够“到达‘烹饪’标签的任何地方”在这里绝对没有用。\ref
\cref
cleveref
那么,发生了什么?对于mycounter
通过\newcounter
指令定义的每个计数器变量(例如),LaTeX 都会自动创建一个关联的宏(称为\p@mycounter
),用于在创建指向该计数器的交叉引用时创建“前缀”;满的\p@mycounter
交叉引用号是和宏的输出的组合\themycounter
。
这些前缀宏到底应该做什么,是文档类设计者的选择;默认情况下,这些前缀宏通常不执行任何操作。但是,前缀宏\p@enumii
和\p@enumiii
(以及\p@enumiv
)是不是空的当使用memoir
文档类时:它们分别执行\theenumi
和\theenumi(\theenumii)
。这就是您(重新)发现的。
如果您想重置这两个前缀宏以使它们“不执行任何操作”,您应该在序言中提供以下代码:
\makeatletter
\renewcommand\p@enumii{}
\renewcommand\p@enumiii{}
\makeatother
(该\makeatletter
指令将字符的类别代码更改为“字母”;如果没有它,则无法通过 修改@
名称包含一个或多个字符的宏。该指令恢复默认类别代码,@
\renewcommand
\makeatother
@
即, “其他”。)