使用 cleveref 引用的 ExPex 标签显示章节编号而不是示例编号

使用 cleveref 引用的 ExPex 标签显示章节编号而不是示例编号

平均能量损失

\documentclass{article}

\usepackage{cleveref}
\usepackage{expex}

\begin{document}
\section{Introduction}\label{sec:intro}
\verb|ExPex| labels referred using \verb|cleveref| shows section numbers instead of example numbers.\\

\ex\label{ExPex1}
  An \verb|ExPex| example
\xe
\ex\label{ExPex2}
  Another \verb|ExPex| example
\xe
Crossref \verb|ExPex| examples using \verb|\ref{<label>}|: \ref{ExPex1} and \ref{ExPex2}\\
Crossref \verb|ExPex| examples using \verb|\cref{<label>}|: {\bf \cref{ExPex1} and \cref{ExPex2}}\\

\begin{enumerate}
\item\label{enum1} An \verb|enumerate| example
\item\label{enum2} Another \verb|enumerate| example
\end{enumerate}
Crossref \verb|enumerate| examples using \verb|\ref{<label>}|: \ref{enum1} and \ref{enum2}\\
Crossref \verb|enumerate| examples using \verb|\cref{<label>}|: \cref{enum1} and \cref{enum2}\\

\end{document}

这产生了 在此处输入图片描述

.aux文件cleveref标签enumerate示例中使用enumi。但ExPex示例是使用 进行标记的section

\newlabel{ExPex1}{{1}{1}}
\newlabel{ExPex1@cref}{{[section][1][]1}{[1][1][]1}}
\newlabel{ExPex2}{{2}{1}}
\newlabel{ExPex2@cref}{{[section][1][]1}{[1][1][]1}}
\newlabel{enum1}{{1}{1}}
\newlabel{enum1@cref}{{[enumi][1][]1}{[1][1][]1}}
\newlabel{enum2}{{2}{1}}
\newlabel{enum2@cref}{{[enumi][2][]2}{[1][1][]1}}

这看起来类似于这个问题并且可能需要在 cleveref 中修复。否则,有没有办法修补或预先准备ExPex 宏,以便 cleveref 可以捕获它们的数字?

答案1

据我所知,cleveref它会查找最靠近标签的计数器。仅\newcounter检测到 LaTeX 样式的计数器,而不是 TeX 样式的\newcount计数器;ExPex 使用\newcount。因此,有效的解决方案是修补 ExPex\ex以增加一个额外的自定义计数器。

\usepackage{etoolbox}
\newcounter{myex}
\crefname{myex}{}{}
\creflabelformat{myex}{(#2#1#3)}
\apptocmd{\ex}{\refstepcounter{myex}}{}{}

相关内容