\ref 将范围放入枚举环境中

\ref 将范围放入枚举环境中

我想引用列表中的项目并获得压缩(不太重要)和排序的输出:

\documentclass{article}
\begin{document}
\begin{enumerate}
\item \label{a} Was.
\item \label{b} It.
\item \label{c} A.
\item \label{d} Cat.
\item \label{e} I.
\item \label{f} Saw.
\end{enumerate}

See points \ref{a, b, c, e, f}.
\end{document}

显然,这不会产生所需的结果,即“查看要点 1、2、3、5、6”。压缩版本“1-3”对我来说并不那么重要;但 hyperref 工作会很好。与 cite 包进行比较。它甚至允许/删除参数中的空格,非常好。

我知道 cleveref,但我不确定它是否可以在这里提供帮助,因为我不(想)定义一个新的环境 - 而且我不确定如何告诉 cleveref 它应该跟踪这个新环境,无论如何......

我想在另一个命令中使用它,所以“查看点 \ref{a}, \ref{b}”不是一个选项。而且无论如何都很糟糕。

搜索了互联网,没有找到。非常感谢。

答案1

Cleveref 提供了一种开箱即用的良好格式,并允许进行定制以满足您的要求。

\documentclass{article}
\usepackage{cleveref}
\crefname{enumi}{point}{points} % default is "item"
\crefrangelabelformat{enumi}{#3#1#4--#5#2#6} % default uses "to" instead of "--"
\begin{document}
\begin{enumerate}
\item \label{a} Was.
\item \label{b} It.
\item \label{c} A.
\item \label{d} Cat.
\item \label{e} I.
\item \label{f} Saw.
\end{enumerate}

See \cref{a,b,c,e,f}.
\end{document}

请注意,逗号后不允许有空格(标签中可以使用空格!)。

答案2

你可以使用 LaTeX3 处理 CSV 列表

在此处输入图片描述

\documentclass{article}

\usepackage{xparse,hyperref}

\ExplSyntaxOn
\AtBeginDocument{
  \let\oldref\ref
  \RenewDocumentCommand{\ref}{ m }{
    \def\@csvsep{\def\@csvsep{, ~}}% https://tex.stackexchange.com/a/89187/5764
    \clist_map_inline:nn { #1 } { \@csvsep \oldref{##1}}% https://tex.stackexchange.com/a/159132/5764
  }
}
\ExplSyntaxOff

\begin{document}

\begin{enumerate}
  \item \label{a} Was.
  \item \label{b} It.
  \item \label{c} A.
  \item \label{d} Cat.
  \item \label{e} I.
  \item \label{f} Saw.
\end{enumerate}

See points \ref{a, b, c, e, f} or~\ref{d}.

\end{document}

相关内容