我想使用包\crefname
中的宏cleveref
来设置环境的多个层上的标签名称enumerate
。以下代码运行良好:
\documentclass{article}
\usepackage{forloop}
\usepackage{cleveref}
\newcounter{ct}\forloop{ct}{1}%
{\value{ct}<10}
{\crefname{enum\roman{ct}}{case}{cases}}
\begin{document}
\begin{enumerate}
\item \label{l} test
\begin{enumerate}
\item test
\item \label{k} test
\end{enumerate}
\end{enumerate}
\cref{l,k}
\end{document}
enumitem
但是,当我使用该包时,它停止工作:
\documentclass{article}
\usepackage{forloop}
\usepackage{enumitem}
\usepackage{cleveref}
\newlist{test}{enumerate}{10}
\setlist[test]{label=\arabic*}
\newcounter{ct}\forloop{ct}{1}%
{\value{ct}<10}
{\crefname{test\roman{ct}}{case}{cases}}
\begin{document}
\begin{test}
\item \label{l} test
\begin{test}
\item test
\item \label{k} test
\end{test}
\end{test}
\cref{l,k}
\end{document}
您可以检查添加\crefname{testi}{case}{cases}
确实会正确生成第一个参考标签,所以我不知道为什么这不起作用。如果有人能告诉我出了什么问题以及如何修复它,那就太好了。
答案1
我真的不知道为什么这个东西对enumi
等等有用,但给他们一个\crefname
全球性的东西绝对是个坏主意。
您正在寻找“别名” testii
,,testiii
…反引用testi
,我相信:
\documentclass{article}
\usepackage{enumitem}
\usepackage{cleveref}
\newlist{test}{enumerate}{10}
\setlist[test]{label*=.\arabic*}
\setlist[test,1]{label=\arabic*}
\crefname{testi}{case}{cases}
% alias testii, testiii, ... to testi
\count255=1
\loop\ifnum\count255<10
\advance\count255 1
\crefalias{test\romannumeral\count255}{testi}
\repeat
\begin{document}
\begin{test}
\item \label{l} test
\begin{test}
\item test
\item \label{k} test
\end{test}
\end{test}
\cref{l,k}
\end{document}
随意使用不同的循环宏,我不熟悉forloop
。
我修改了列表计数器,因为不清楚您所指的是哪个级别。