对于直接枚举和定义的新列表,不同的 enumitem \ref、\cref 结果为 item

对于直接枚举和定义的新列表,不同的 enumitem \ref、\cref 结果为 item

使用该enumitem包,我尝试交叉引用列表中的项目enumerate

  1. 当我使用\ref交叉引用某项时,无论我是enumerate直接在源正文中创建列表,还是在序言中使用\newlist/环境定义,我都会得到相同的令人满意的结果。但是为什么当我使用而不是\setlist时,在这两种情况下我得到的结果不一样呢?\cref\ref

  2. 为什么\cref在任何一种情况下结果都不起作用?

此示例展示了\ref、、\cref前导定义的枚举和直接定义的枚举的所有 4 种组合,仅使用了*命令的版本;但使用无星号版本也会出现类似的结果。

情况 —\newlist \setlist\ref*

\documentclass[12pt]{memoir}
\usepackage{enumitem}
\usepackage[colorlinks=true,linkcolor=red]{hyperref}
\usepackage[nameinlink,noabbrev,capitalize]{cleveref}

\newlist{romcases}{enumerate}{3}
\setlist[romcases,1]{%
    label=\sffamily{Case (\roman*):},
    ref=\normalfont{Case (\roman*)},
    wide,itemsep=0pt,topsep=0pt
}    
\crefname{romcases}{Case}{Case}
\Crefname{romcases}{Case}{Case}

\begin{document}

We distinguish two cases.

\begin{romcases}

\item \label{case:abequal} 
$a = b$. Now we see that\dots 

\item\label{case:abnotequal}
 $a \neq b$. In contrast to \ref*{case:abequal}, in this case \dots 

\end{romcases}

\bigskip

\textbf{\emph{NOTE:} Output as expected.}

\end{document}

新列表 & \ref*

情况 — 直接\enumerate\ref*

\documentclass[12pt]{memoir}
\usepackage{enumitem}   
\usepackage[colorlinks=true,linkcolor=red]{hyperref}
\usepackage[nameinlink,noabbrev,capitalize]{cleveref}

\begin{document}

We distinguish two cases.

\begin{enumerate}[%
  label=\textsf{Case (\alph*):},ref=\normalfont{Case (\roman*)},
  wide,itemsep=0pt,topsep=0pt]

\item \label{case:abequal} 
$a = b$.

Now we see that\dots 

\item\label{case:abnotequal}
 $a \neq b$. 
 In contrast to \ref*{case:abequal}, in this case \dots 

\end{enumerate}

\bigskip

\textbf{\emph{NOTE:} Output \emph{OK}.}

\end{document}

直接枚举 & \ref*

情况 —\newlist \setlist\cref*

\documentclass[12pt]{memoir}
\usepackage{enumitem
\usepackage[colorlinks=true,linkcolor=red]{hyperref}
\usepackage[nameinlink,noabbrev,capitalize]{cleveref}

\newlist{romcases}{enumerate}{3}
\setlist[romcases,1]{%
    label=\sffamily{Case (\roman*):},
    ref=\normalfont{Case (\roman*)},
    wide,itemsep=0pt,topsep=0pt
}    
\crefname{romcases}{Case}{Case}
\Crefname{romcases}{Case}{Case}

\begin{document}

We distinguish two cases.

\begin{romcases}

\item \label{case:abequal} 
$a = b$. Now we see that\dots 

\item\label{case:abnotequal}
 $a \neq b$.  In contrast to \cref*{case:abequal}, in this case \dots 

\end{romcases}

\bigskip

\textbf{\emph{NOTE:} Output \emph{NOT} as expected.}

\end{document}

新列表 & \cref*

情况 — 直接\enumerate\cref*

\documentclass[12pt]{memoir}
\usepackage{enumitem}
\usepackage[colorlinks=true,linkcolor=red]{hyperref}
\usepackage[nameinlink,noabbrev,capitalize]{cleveref}

\begin{document}

We distinguish two cases.

\begin{enumerate}[%
  label=\textsf{Case (\alph*):},ref=\normalfont{Case (\roman*)},
  wide,itemsep=0pt,topsep=0pt]

\item \label{case:abequal} 
$a = b$. Now we see that\dots 

\item\label{case:abnotequal}
 $a \neq b$.  In contrast to \cref*{case:abequal}, in this case \dots 

\end{enumerate}

\bigskip

\textbf{\emph{NOTE:} Output \emph{NOT} as expected.}

\end{document}

直接枚举 & \cref*

答案1

romcases当您通过指令调用定义新的枚举列表环境时\newlist,与 1 级项关联的计数器称为romcasesi。类似地,与 2 级 romcases 项关联的计数器称为romcasesii,等等。

如果您要使用cleveref包的宏来创建“巧妙”的交叉引用,我建议您只ref=\roman*在参数中指定\setlist[romcases,1];注意:没有字符串标签“Case”,也没有括号。然后,使用\creflabelformat\crefname\Crefname指令来指定和朋友应该如何格式化和排版交叉引用。这种方法将为您提供最大的灵活性——当您开始在单个语句中包含多个对象并希望自动处理参数排序\cref时,这将派上用场。\crefcleveref

在此处输入图片描述

\documentclass[12pt]{memoir}
\usepackage{enumitem}
\usepackage[colorlinks=true,linkcolor=red]{hyperref}
\usepackage[nameinlink,noabbrev,capitalize]{cleveref}
\newlist{romcases}{enumerate}{1}
\setlist[romcases,1]{
    label={\sffamily Case (\roman*):},
    ref=\roman*, % if to be used with \cref, don't provide label string or parentheses
    wide,itemsep=0pt,topsep=0pt} 
\creflabelformat{romcasesi}{#2\textup{(#1)}#3} % note presence of parentheses
\crefname{romcasesi}{Case}{Cases} % singular and plural forms of text labels
\Crefname{romcasesi}{Case}{Cases}

\begin{document}
We distinguish two cases:
\begin{romcases}
\item \label{case:abequal} $a = b$. Now we see that\dots 
\item\label{case:abnotequal} $a \neq b$.  In contrast to \cref{case:abequal}, \dots 
\end{romcases}
\end{document}

相关内容