在我的文档中,我引用了句子中的一串章节。一个有代表性的例子是:
I am referencing Sections \ref{A}, \ref{B}, \ref{C}.
然后会出现如下结果:
I am referencing Sections 6.1, 6.2, 6.3.
我怎样才能让它显示:
I am referencing Sections 6.1-3
无需进行硬编码?
答案1
使用cleveref
您可以压缩范围并使用\crefstripprefix
(该包的最新版本),您可以从参考范围中删除通用前缀:
\documentclass{book}
\usepackage{cleveref}
\crefrangelabelformat{section}{#3#1#4--#5\crefstripprefix{#1}{#2}#6}
\begin{document}
\setcounter{chapter}{5}
\chapter{Test chapter}
As we see in \cref{sec:testa,sec:testb,sec:testc}...
\section{Test section}
\label{sec:testa}
\section{Test section}
\label{sec:testc}
\section{Test section}
\label{sec:testb}
\end{document}
使用\crefrangelabelformat
您可以自定义一系列参考的格式。它的语法如下:
\crefrangelabelformat{<type>}{<format>}
第一个参数指定<type>
将定制的引用;对于第二个参数,cleveref
文档解释道:
该参数应包含六个参数:
#1
、#2
、#3
、#4
、#5
、#6
。前两个(#1
和#2
)是定义引用范围的两个标签计数器的格式化版本。接下来的两个(#3
和#4
)表示第一个引用的超链接的开始和结束,最后两个(#5
和#6
)表示第二个引用的超链接。超链接参数必须按顺序出现。
\crefstripprefix
只是从范围的第二部分删除前缀(在本例中是章节号)。
下面是一个增强的示例,其中前缀已被删除,以便交叉引用部分、小节和方程式的范围:
\documentclass{book}
\usepackage{cleveref}
\crefrangelabelformat{section}{#3#1#4--#5\crefstripprefix{#1}{#2}#6}
\crefrangelabelformat{subsection}{#3#1#4--#5\crefstripprefix{#1}{#2}#6}
\crefrangelabelformat{equation}{(#3#1#4--#5\crefstripprefix{#1}{#2}#6)}
\begin{document}
\setcounter{chapter}{5}
\chapter{Test chapter}
As we see in \cref{sec:testa,sec:testb,sec:testc}...
As we see in \cref{ssec:testa,ssec:testb,ssec:testc}...
As we see in \cref{equ:testa,equ:testb,equ:testc}...
\section{Test section}
\begin{equation}
\label{equ:testa}
a = b.
\end{equation}
\begin{equation}
\label{equ:testb}
a = b.
\end{equation}
\begin{equation}
\label{equ:testc}
a = b.
\end{equation}
\label{sec:testa}
\section{Test section}
\label{sec:testc}
\subsection{Test ssubection}
\label{ssec:testa}
\subsection{Test ssubection}
\label{ssec:testb}
\subsection{Test ssubection}
\label{ssec:testc}
\section{Test section}
\label{sec:testb}
\end{document}