交叉引用多个项目

交叉引用多个项目

我一直在寻找有关 LaTeX 问题的答案,但尽管有一些类似的答案,却没有一个能解决我的问题。我试图标记并交叉引用集合中的第一个和最后一个项目,以引用整个集合。例如,假设我们有以下情况:

(1)a. 这是第一句。

b. 这是第二句话。

c. 这是第三句话。

我试图在文字中写下类似这样的内容“......如果我们看一下例子(1a-c),我们会发现......”

我知道的在 LaTeX 中进行交叉引用的唯一方法是这样的:

\documentclass{article}
\begin{document}
    \begin{enumerate}
        \item \begin{enumerate}
            \item One \label{ex1}
            \item Two \label{ex2}
            \item Three \label{ex3}
            \end{enumerate}
    \end{enumerate}

    We can see in examples (\ref{ex1}-\ref{ex3}) that...

\end{document}

上述代码产生以下输出: enter image description here

我该如何更改代码,使其显示为“...在示例 (1a-c) 中我们发现...”我不希望数字 1 再次重复。我想要的输出方式是我所在领域的惯例,而它在 LaTeX 上的显示方式被认为是“尴尬的”。这就是为什么我想找到一种可行的方法,同时仍然能够交叉引用我的标记项目。

答案1

软件包的交叉引用命令cleveref-- 特别是\cref\crefrange-- 可能是您的好朋友。请注意,在下面显示的解决方案中,交叉引用的项目周围没有括号。我不认为这些括号是必要的或有用的。

enter image description here

\crefrange命令接受两个参数,用于对连续的项目范围进行交叉引用。该\cref命令接受一个参数,即以逗号分隔的标签列表。该\cref命令会自动对其参数的内容进行排序;无需按升序输入。

您也可以选择加载包。这样做会将和hyperref生成的交叉引用转换为指向相关“目标”的超链接。如果加载包,请确保在 之前立即加载它。基本上,和应该是序言中最后加载的两个包。\cref\crefrangehyperrefcleverefhyperrefcleveref

\documentclass{article}
\usepackage[inline]{enumitem} 
\usepackage[colorlinks]{hyperref} % optional
\prepackage{cleveref}
\crefname{enumi}{example}{examples}
\newcommand{\crefrangeconjunction}{--}
\newcommand{\creflastconjunction}{, and } % optional, for "Oxford comma"

\begin{document}
\begin{enumerate}
\item \begin{enumerate*}  % inline list saves space
  \item One   \label{ex1}    \item Two   \label{ex2}    \item Three \label{ex3}    
  \item Four  \label{ex4}    \item Five  \label{ex5}    \item Six   \label{ex6}
  \item Seven \label{ex7}    \item Eight \label{ex8}    \item Nine  \label{ex9}   
  \end{enumerate*}
\end{enumerate}

We can see in \crefrange{ex1}{ex5} that \dots

We can see in \cref{ex9,ex3,ex7,ex5,ex6,ex1,ex2} that \dots
\end{document}


附录:该cleveref软件包提供了一些非常强大的实用宏。例如,如软件包用户指南部分所述,可以从交叉引用范围中删除通用前缀(此处为“1”)。

enter image description here

\documentclass{article}
\usepackage[inline]{enumitem} 
\usepackage[colorlinks]{hyperref} 

\usepackage{cleveref}
\crefname{enumi}{example}{examples}
%\newcommand{\crefrangeconjunction}{--}
\newcommand{\creflastconjunction}{, and } % optional, for "Oxford comma"
\crefrangelabelformat{enumi}{#3#1#4--#5\crefstripprefix{#1}{#2}#6}

\begin{document}
\begin{enumerate}
\item \begin{enumerate*}  % inline list saves space
  \item One   \label{ex1}   \item Two   \label{ex2}   \item Three \label{ex3}   
  \item Four  \label{ex4}   \item Five  \label{ex5}   \item Six   \label{ex6}
  \item Seven \label{ex7}   \item Eight \label{ex8}   \item Nine  \label{ex9}
  \end{enumerate*}
\end{enumerate}

We can see in \crefrange{ex1}{ex5} that \dots

We can see in \cref{ex9,ex3,ex7,ex5,ex6,ex1,ex2} that \dots
\end{document}

答案2

enumitem您可以设置单独的label和值。下面我将其与更高级别的ref附加部分一起使用,以设置三个单独的元素:\labelenumerate\ref

enter image description here

\documentclass{article}

\usepackage{enumitem}

\begin{document}

\begin{enumerate}[label={\arabic*.},ref={\arabic*}]
  \item \label{ex0}
    \begin{enumerate}[label={(\alph*)},ref={\alph*}]
      \item One \label{ex1}
      \item Two \label{ex2}
      \item Three \label{ex3}
    \end{enumerate}
\end{enumerate}

We can see in examples (\ref{ex0}\ref{ex1}-\ref{ex3}) that...

\end{document}

相关内容