我想定义一个引用\begin{enumerate}[resume] ... \end{enumerate}
环境中的第一项和最后一项的命令。
以下是我目前所做的工作:
\documentclass{book}
\usepackage{enumitem}
\newcounter{groupcounter}
\newenvironment{enumgroup}{
\stepcounter{groupcounter}
\enumerate[resume]
\refstepcounter{enumi}
\label{groupstart:\thegroupcounter}
\addtocounter{enumi}{-1}
\addtocounter{groupcounter}{-1}
\refstepcounter{groupcounter}
}{
\label{groupend:\thegroupcounter}
\endenumerate
}
\newcommand{\grouplabel}[1]{\label{group:#1}}
\newcommand{\groupref}[1]{\ref{groupstart:\ref{group:#1}}~--~\ref{groupend:\ref{group:#1}}}
\begin{document}
\begin{enumgroup} \grouplabel{A}
\item lorem
\item ipsum
\item dolor
\item sit
\end{enumgroup}
\begin{enumgroup} \grouplabel{B}
\item amet
\item etc.
\end{enumgroup}
% Uncomment to switch from MWE to MNWE
%First group : \groupref{A} % Should print First group : 1 -- 4
%Second group : \groupref{B} % 5 -- 6
\end{document}
实际上唯一有趣的行是定义\groupref
宏的那一行。我相信其他一切都没问题,因为生成的 aux 文件:
\relax
\newlabel{groupstart:1}{{1}{1}}
\newlabel{group:A}{{1}{1}}
\newlabel{groupend:1}{{4}{1}}
\newlabel{groupstart:2}{{5}{1}}
\newlabel{group:B}{{2}{1}}
\newlabel{groupend:2}{{6}{1}}
所以我唯一的问题是似乎我无法在 \ref 中使用 \ref。我想我必须以某种方式保护内部调用,但我没有这方面的经验...有人能告诉我如何修复这个宏吗?
答案1
我认为您不需要通过编号组进行间接寻址,这会导致您的nested
\ref` 问题。
\documentclass{book}
\usepackage{enumitem}
\newenvironment{enumgroup}[1]{%
\enumerate[resume]%
\refstepcounter{enumi}%
\def\thisgroup{#1}%
\label{groupstart:\thisgroup}%
\addtocounter{enumi}{-1}%
}{%
\label{groupend:\thisgroup}%
\endenumerate
}
\newcommand{\groupref}[1]{\ref{groupstart:#1}~--~\ref{groupend:#1}}
\begin{document}
\begin{enumgroup}{A}
\item lorem
\item ipsum
\item dolor
\item sit
\end{enumgroup}
\begin{enumgroup}{B}
\item amet
\item etc.
\end{enumgroup}
% Uncomment to switch from MWE to MNWE
First group : \groupref{A} % Should print First group : 1 -- 4
Second group : \groupref{B} % 5 -- 6
\end{document}