以下两篇文章中概述的解决方案似乎与 hyperref 包相冲突。
这是 MWE。示例的期望输出是
1. Outer
2.1. This is line 2.1, in block 2.
2.2. Inner again
3. Outer again
4. Let’s end here
该输出确实是由下面的 LaTeX 源生成的,但是如果我取消注释标题中的 \usepackage{hyperref} 行,则 LaTeX 会在 \skipitem 命令之后立即给我一个错误,如下面的内联注释所述:
\documentclass{article}
% \usepackage{hyperref}
% if we uncomment the above line, we get an error as described below
\usepackage{enumitem}
\newlist{steps}{enumerate}{9}
\setlist[steps]{itemindent=0pt}
\setlist[steps,1]{label=\arabic*.,ref=\arabic*}
\setlist[steps,2]{label=\arabic{stepsi}.\arabic*.,ref=\arabic{stepsi}.\arabic*}
\makeatletter
\newcommand{\skipitem}{\refstepcounter{\@enumctr}}
\makeatother
\begin{document}
\begin{steps}
\item Outer
\skipitem
% If we uncomment the \usepackage{hyperref} line in the header,
% we get the following error after the \skipitem above
%
% ./tmp.tex:20: Missing number, treated as zero.
% <to be read again>
% \[email protected]
% l.20 \skipitem
% \item[] \label{blockA}
\label{blockA}\item[]
\begin{steps}
\item\label{lineB} This is line~\ref{lineB}, in block~\ref{blockA}.
\item Inner again
\end{steps}
\item Outer again
\item Let's end here
\end{steps}
\end{document}
有人能帮我解决这个冲突吗,这样我就可以使用 hyperref 和 enumitems 和 refstepcounter 吗?谢谢。
(注意:可以使用较小的工作示例,但它们会给出不同的错误消息。我希望使当前示例能够正常工作。)
答案1
最后加载即可hyperref
。除了已公布的例外情况(例如),它应该是最后一个cleveref
。
\documentclass{article}
\usepackage{enumitem}
\newlist{steps}{enumerate}{9}
\setlist[steps]{itemindent=0pt}
\setlist[steps,1]{label=\arabic*.,ref=\arabic*}
\setlist[steps,2]{label=\arabic{stepsi}.\arabic*.,ref=\arabic{stepsi}.\arabic*}
\makeatletter
\newcommand{\skipitem}{\refstepcounter{\@enumctr}}
\makeatother
\usepackage{hyperref}
\begin{document}
\begin{steps}
\item Outer
\skipitem
\label{blockA}\item[]
\begin{steps}
\item\label{lineB} This is line~\ref{lineB}, in block~\ref{blockA}.
\item Inner again
\end{steps}
\item Outer again
\item Let's end here
\end{steps}
\end{document}
请注意,您可能需要删除生成的文件并干净地编译,以避免在更正代码后首次运行时出现错误。