当交叉引用名称为空时,如何避免出现长空格?

当交叉引用名称为空时,如何避免出现长空格?

使用时cleveref你可能想用它的宏来制作全部交叉引用,即使交叉引用名称为空。交叉引用名称是附加到交叉引用以描述其类型的名称,例如,\cref图 1 输出“图 1”(而不是像\ref)。要为图定义一个空的交叉引用名称,可以按照手册在第 19 页上,执行以下操作:

\crefname{figure}{}{}

这样做的问题是,即使交叉引用名称确实为空,交叉引用之前的空间也比直接使用时要长\ref。如何避免这么长的空间?

以下示例可以说明该问题:

\documentclass{article}

\usepackage{cleveref}
\usepackage{enumitem}

\crefname{enumi}{}{}
\crefname{equation}{}{}

\begin{document}

\begin{enumerate}
\item foo\label{item:1}
\end{enumerate}
\begin{equation}
1+1=2\label{eq:1}      
\end{equation}

In \cref{item:1}.% Too long space after "In"

In \ref{item:1}.

In \cref{eq:1}.% Too long space after "In"

In \ref{eq:1}.

\end{document}

MWE 的输出

答案1

如果您想使用该cleveref包,但不想在交叉引用项(或多个项)的“名称”前加上前缀,则无需通过各种方式取消定义名称

\crefname{xyz}{}{}

说明。只需使用\labelcref命令而不是命令\cref。正如宏的名称所暗示的那样,它只对交叉引用项目的“标签”部分进行操作,但除此之外,它所做的与所做的完全相同\cref

\documentclass{article}
\usepackage{enumitem,amsmath,cleveref}
\begin{document}
\begin{enumerate}
\item foo\label{item:1}
\end{enumerate}
\begin{equation}
1+1=2\label{eq:1}      
\end{equation}

In \labelcref{item:1}.

In \ref{item:1}.

In \labelcref{eq:1}.

In \eqref{eq:1}. % \eqref inserts parentheses automatically
\end{document}

在此处输入图片描述

答案2

总的来说,\labelcref按照 Mico 的答案使用似乎是正确的解决方案。如果您想使用\cref没有交叉引用名称的构造,这里有一个解决方法:

\crefname{enumi}{\unskip}{\unskip}
\crefname{equation}{\unskip}{\unskip}

相关内容