我一直在寻找有关 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}
我该如何更改代码,使其显示为“...在示例 (1a-c) 中我们发现...”我不希望数字 1 再次重复。我想要的输出方式是我所在领域的惯例,而它在 LaTeX 上的显示方式被认为是“尴尬的”。这就是为什么我想找到一种可行的方法,同时仍然能够交叉引用我的标记项目。
答案1
软件包的交叉引用命令cleveref
-- 特别是\cref
和\crefrange
-- 可能是您的好朋友。请注意,在下面显示的解决方案中,交叉引用的项目周围没有括号。我不认为这些括号是必要的或有用的。
该\crefrange
命令接受两个参数,用于对连续的项目范围进行交叉引用。该\cref
命令接受一个参数,即以逗号分隔的标签列表。该\cref
命令会自动对其参数的内容进行排序;无需按升序输入。
您也可以选择加载包。这样做会将和hyperref
生成的交叉引用转换为指向相关“目标”的超链接。如果加载包,请确保在 之前立即加载它。基本上,和应该是序言中最后加载的两个包。\cref
\crefrange
hyperref
cleveref
hyperref
cleveref
\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”)。
\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
附加部分一起使用,以设置三个单独的元素:\label
enumerate
\ref
\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}