代码
\documentclass[11pt]{article}
\usepackage{hyperref}
\usepackage{enumitem}
\newlist{ilist}{enumerate}{3}
\setlist*[ilist]{leftmargin=*}
\setlist*[ilist,1]{label=\arabic*.}
\setlist*[ilist,2]{label=\arabic{ilisti}.,before=\refstepcounter{ilisti}}
\setlist*[ilist,3]{label=\arabic{ilisti}.,before=\refstepcounter{ilisti}}
\begin{document}
\begin{ilist}
\item A
\begin{ilist}
\item B
\begin{ilist}
\item C
\end{ilist}
\end{ilist}
\end{ilist}
\end{document}
以某种方式产生错误
如果我注释掉,错误就会解决\usepackage{hyperref}
。
有什么想法可以解释原因吗?
答案1
这是 中的一个错误hyperref
。hyperref
尝试\theH<counter>
为每个新计数器提供一个定义并用于此\arabic{#1}
。但这意味着 中的命令#1
不会直接展开,而这在这里则归结为 enumitem 用于\@definecounter{\enit@c\romannumeral\count@}
定义新的列表计数器,因此例如\theHilisti
看起来像这样:
> \theHilisti=macro:
->\arabic {\enit@c \romannumeral \count@ }.
我将更改 hyperref 定义。目前的解决方法是
\documentclass[11pt]{article}
\usepackage{hyperref}
\makeatletter
\def\@definecounter#1{%
\H@definecounter{#1}%
\expandafter
\gdef\csname theH#1\expandafter\endcsname\expandafter
{\expandafter\@arabic\csname c@#1\endcsname}}%
\makeatother
\usepackage{enumitem}
\newlist{ilist}{enumerate}{3}
\setlist*[ilist]{leftmargin=*}
\setlist*[ilist,1]{label=\arabic*.}
\setlist*[ilist,2]{label=\arabic{ilisti}.,before=\refstepcounter{ilisti}}
\setlist*[ilist,3]{label=\arabic{ilisti}.,before=\refstepcounter{ilisti}}
\begin{document}
\begin{ilist}
\item A
\begin{ilist}
\item B
\begin{ilist}
\item C
\end{ilist}
\end{ilist}
\end{ilist}
\end{document}