cref 的短版本和长版本

cref 的短版本和长版本

有没有办法让 有短版和长版,\cref就像 有大写和小写版本一样?我想在大多数文档中使用长版(如图 1)。但在某些 tikz 图中,我想以短格式添加参考资料(如图 1)以节省空间。

强制性 MWE

\documentclass{article}
\usepackage{amsthm}
\usepackage{cleveref}

\newtheorem{theorem}{Theorem}[section]
\newtheorem{lemma}{Lemma}

\Crefname{lemma}{Lemma}{Lemmas}
\Crefname{theorem}{Theorem}{Theorem}
\Crefname{figure}{Figure}{Figures}
% Short refs
% \crefname{lemma}{Lem.}{Lems.}
% \crefname{theorem}{Thm.}{Thms.}
% \crefname{figure}{Fig.}{Figs.}

\def\shortcref#1{\cref{#1}}

\begin{document}
\begin{figure}
  \centering
  \caption{Test}
  \label{fig:myfig}
\end{figure}

\begin{theorem}\label{thm:my}
  My result
\end{theorem}
\begin{lemma}\label{lem:my}
  My Lemma
\end{lemma}

This is my long format \Cref{fig:myfig}, \Cref{thm:my} and \Cref{lem:my}.

This is my short format \shortcref{fig:myfig}, \shortcref{thm:my} and \shortcref{lem:my}.
\end{document}

答案1

管理缩写的方式cleveref是在初始加载时设置它们,因此没有内置的方法来管理它。但是,\crefname在本地定义其效果,因此

{\crefname{figure}{fig.}{figs.}\cref{foo}} \cref{foo}

将输出

图 3 图 3

所以我们可以做这样的事情来获得你想要的结果:

\NewDocumentCommand{\CrefAbbrevNames}{}
  {%
    \crefname{figure}{fig.}{figs.}%
    \crefname{theorem}{thm.}{thms.}%
    etc.
  }
\NewDocumentCommand{\shortcref}{ s m }
  {{% ❶
    \CrefAbbrevNames
    \cref
      \IfBooleanT{#1}{*}% ❷
      {#2}%
  }}

请注意使用了一组额外的括号 ❶,以便重新定义可以成组出现。此外,由于\cref可能采用*-form(用于hyperref抑制超链接),我添加了对 a 的检查*,以\shortcref将其添加到对 的调用中\cref。❷

对于多语言文档来说, 的定义\CrefAbbrevNames会更加复杂。

我原本计划制作\cref*相当于的,\shortcref直到我记起*已经存在的潜在形式。

相关内容