我正在尝试使用 ZeroRoman 风格第 0 章/罗马数字。我还有一种列表,在引用时应在章节下编号。我收到错误Missing number, treated as zero
。
以下是一个 mwe:
\documentclass{book}
\usepackage{enumitem}
\newcommand{\ZeroRoman}[1]{% 0 + \Roman
\ifcase\value{#1}\relax 0\else% Chapter 0
\Roman{#1}\fi}% All other chapters
\renewcommand{\thechapter}{\ZeroRoman{chapter}}
\newlist{test}{enumerate}{2}
\setlist[test]{label=\arabic*., ref=\thechapter.\arabic*}
\begin{document}
\chapter{}
\begin{test}
\item Blah \label{label}
\end{test}
\ref{label}
\end{document}
我该如何避免这种情况?我猜\thechapter
是在序言中以某种方式调用的,而计数器chapter
尚未定义?
答案1
您可以使用 传递\thechapter
未扩展的标记(即不访问值)\noexpand
。扩展将由接收标记的下一个宏执行。这可以防止出现尚不可用的值的问题。
此案例的 MWE:
\documentclass{book}
\usepackage{enumitem}
\newcommand{\ZeroRoman}[1]{% 0 + \Roman
\ifcase\value{#1}\relax 0\else% Chapter 0
\Roman{#1}\fi}% All other chapters
\renewcommand{\thechapter}{\ZeroRoman{chapter}}
\newlist{test}{enumerate}{2}
\setlist[test]{label=\arabic*., ref=\noexpand\thechapter.\arabic*}
\setcounter{chapter}{-1}
\begin{document}
\chapter{}
\begin{test}
\item Blah \label{label}
\end{test}
\ref{label}
\end{document}