使用时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}
答案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}