Cleveref 引用名称取决于标签而不是计数器?

Cleveref 引用名称取决于标签而不是计数器?

假设我有这个:

\documentclass{article}
\usepackage{cleveref}
\begin{document}
\section{Section One}
\label{a:sec1}
\cref{a:sec1}

\section{Section Two}
\label{b:sec2}
\cref{b:sec2}
\end{document}

Cleveref 现在将引用“第 1 节”和“第 2 节”,因为标签位于节之后。但我需要的是它根据a:和引用标签b:,其中我定义了显示的名称。例如:所有带有 的标签a:都应引用为“Car X”,所有带有 的标签b:都应引用为“Truck X”,即使它们都是一个节。

注意:我不是想要改变计数器,只需要根据标签的“命名空间”引用时显示的单词!

cleveref能独自完成这项工作吗?还是必须构建一些自定义解决方案(可能使用prettyref)?

答案1

我不会根据标签的“前缀”(a:,,b:...)赋予项目特殊含义,而是使用包中已经提供的功能cleveref使用可选参数\label命令可以覆盖项目的默认交叉引用名称。

在下面的例子中,我首先告知cleveref“car”和“truck”项目的单数和复数形式,然后使用命令的可选参数\label告知cleveref相应部分的“名称”是“car”和“truck”而不是“section”。 (hyperref加载包并指定选项nameinlink只是为了使输出cleveref立即可见。)

在此处输入图片描述

\documentclass{article}
\usepackage[colorlinks=true]{hyperref}
\usepackage[nameinlink]{cleveref}    
% provide singular and plural names of the categories "car" and "truck"
\crefname{truck}{truck}{trucks}
\crefname{car}{car}{cars}

\begin{document}
\section{Section One}\label[car]{sec:1}
\section{Section Two}\label[truck]{sec:2}
\section{Section Three}
Cross-references to \cref{sec:1,sec:2}.
\end{document}

答案2

根据我的回答将自定义字符串包含到 \cref 中的新命令,可以更改的标签cleveref(也可以使用hyperref)。在这个答案中,我将其扩展为查看标签的第一个字符,以帮助确定引用应该是什么样子。在这里,我创建了一个新宏\crefX来完成这项工作,但如果真的想要的话,可以用它来替换默认的\cref(但我不建议这样做):

\documentclass{article}
\usepackage{hyperref}
\usepackage{cleveref}

\newcommand{\crefX}[1]{\crefformat{section}{%
  \crefXhelper#1\relax~##2##1##3}%
  \cref{#1}\crefformat{section}{section~##2##1##3}}

\def\crefXhelper#1#2\relax{\if#1aCar\else\if#1bTruck\else Section\fi\fi}

\begin{document}


\section{Section One (a label)}
\label{a:sec1}
This section \crefX{a:sec1}

\section{Section Two (b label)}
\label{b:sec2}
This section \crefX{b:sec2} and prior section, \crefX{a:sec1}.

\section{Section Three (c label)}
\label{c:sec3}
This section \crefX{c:sec3} and prior section, \crefX{b:sec2}
and first section, \crefX{a:sec1}.
\end{document}

在此处输入图片描述

如果你真的想让它说“汽车 X”,而不说实际的数字,那么

\newcommand{\crefX}[1]{\crefformat{section}{%
  \crefXhelper#1\relax~##2X##3}%
  \cref{#1}\crefformat{section}{section~##2##1##3}}

可以工作。

相关内容