如何更改交叉引用中使用的小节编号?

如何更改交叉引用中使用的小节编号?

我想知道我是否可以更改“\labelcref”中显示的数字?(我使用hyperrefcleverefnameref包)更准确地说,我正在编写一个文档,其中有几个部分由几个小节组成。我写了代码:

\renewcommand{\thesection}{\Roman{section}}
\renewcommand{\thesubsection}{\arabic{subsection}}

因此我的章节按 I、II、III、... 排序,每个小节按 1、2、3、.. 排序(而不是 I.1、I.2、..)。

但我希望有“see I.1”而不是“see 1”(这可能会让读者感到困惑,因为它没有说明它位于哪个部分)。我的代码如下所示:

\documentclass[10pt,a4paper]{article}

\usepackage[utf8]{inputenc}
\usepackage[francais]{babel}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsthm, thmtools}  
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{lmodern}
\usepackage{soul}  
\usepackage{mathrsfs} 
\usepackage{enumitem}  
\usepackage{xcolor}   
\usepackage{hyperref, nameref, cleveref}

\begin{document}

\section {First}
\subsection {one} \label{I.1}
blablabla
\subsection {two}
blablabla
\section {Second}
\subsection {one}
blablabla and see \labelcref{I.1}
\end{document}

谢谢您的回答!

答案1

LaTeX 内核已经提供了你想要的机制:每当\label被调用时,当前引用都是通过扩展

\p@foo\thefoo

其中foo是最近“refstepped”计数器。通常\p@foo(在您的例子中\p@subsection)被定义为扩展为零。因此,这里有一个您应该做的最小示例(我删除了所有不必要的包,以更好地显示代码的主要部分)。

\documentclass[10pt,a4paper]{article}
\usepackage{hyperref, nameref, cleveref}

\renewcommand{\thesection}{\Roman{section}}
\renewcommand{\thesubsection}{\arabic{subsection}}

\makeatletter
\renewcommand{\p@subsection}{\thesection.}
\makeatother

\begin{document}
\section {First}
\subsection {one} \label{I.1}
blablabla
\subsection {two}
blablabla
\section {Second}
\subsection {one}
blablabla and see \labelcref{I.1} (also known as \cref{I.1})
\end{document}

在此处输入图片描述

相关内容