我想知道我是否可以更改“\labelcref”中显示的数字?(我使用hyperref
、cleveref
和nameref
包)更准确地说,我正在编写一个文档,其中有几个部分由几个小节组成。我写了代码:
\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}