Cleveref 范围格式为 gb4e “(1a-c)”

Cleveref 范围格式为 gb4e “(1a-c)”

我设法使用 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}

代码输出

相关内容