我设法使用 cleveref 交叉引用格式为“示例(1a-1c)”的示例
\crefrangeformat{xnumi}{examples~(#3#1#4--#5#2#6)}
但是我怎样才能得到“例子(1a-c)”?
我找到了这个问题,但在这种情况下,我担心解决方案依赖于正在使用的包gb4e
,所以我决定无论如何都要发布我的答案。
这是我的 MWE:
\documentclass[a4paper]{article}
\usepackage{gb4e}
\usepackage{cleveref}
\newcommand{\crefrangeconjunction}{--}
\crefname{xnumi}{example}{examples}
\creflabelformat{xnumi}{(#2#1#3)}
\crefname{xnumii}{example}{examples}
\creflabelformat{xnumii}{(#2#1#3)}
\crefname{xnumiii}{example}{examples}
\creflabelformat{xnumiii}{(#2#1#3)}
\crefname{xnumiv}{example}{examples}
\creflabelformat{xnumiv}{(#2#1#3)}
\crefrangeformat{xnumi}{examples~(#3#1#4--#5#2#6)}
\crefrangeformat{xnumii}{examples~(#3#1#4--#5#2#6)}
\crefrangemultiformat{xnumii}{examples~(#3#1#4--#5#2#6)}{ and~(#3#1#4--#5#2#6)}{, (#3#1#4--#5#2#6)}{ and~(#3#1#4--#5#2#6)}
\begin{document}
\section{Prova}
\begin{exe}
\ex\label{e:pro} uno due tre
\begin{xlist}
\ex\label{e:1} uno
\ex\label{e:2} due
\ex\label{e:3} tre
\ex\label{e:4} quattro
\end{xlist}
\end{exe}
In \cref{e:pro}, in \crefrange{e:1}{e:3}.
\end{document}
答案1
这有点像 hack,目前还不太管用,因为它只在文本中引用的示例之间没有其他示例的情况下才有效。这显然不能作为一般解决方案。
\documentclass[a4paper]{article}
\usepackage{gb4e}
\makeatletter
\renewcommand\p@xnumii{}
\makeatother
\usepackage[sort&compress]{cleveref}
\newcommand{\crefrangeconjunction}{--}
\crefname{xnumi}{example}{examples}
\creflabelformat{xnumi}{(#2#1#3)}
\crefname{xnumii}{example}{examples}
\creflabelformat{xnumii}{(#2#1#3)}
\crefname{xnumiii}{example}{examples}
\creflabelformat{xnumiii}{(#2#1#3)}
\crefname{xnumiv}{example}{examples}
\creflabelformat{xnumiv}{(#2#1#3)}
\crefrangeformat{xnumi}{examples~(#3#1#4--#5#2#6)}
\crefrangeformat{xnumii}{examples~(#3\arabic{xnumi}#1#4--#5#2#6)}
\crefrangemultiformat{xnumii}{examples~(#3\arabic{xnumi}#1#4--#5#2#6)}
{ and~(#3\arabic{xnumi}#1#4--#5#2#6)}{, (#3\arabic{xnumi}#1#4--#5#2#6)}
{ and~(#3\arabic{xnumi}#1#4--#5#2#6)}
\begin{document}
\section{Prova}
\begin{exe}
\ex\label{e:pro} uno due tre
\begin{xlist}
\ex\label{e:1} uno
\ex\label{e:2} due
\ex\label{e:3} tre
\ex\label{e:4} quattro
\end{xlist}
\end{exe}
In \cref{e:pro}, in \crefrange{e:1}{e:3}.
\end{document}