我想知道是否可以更改“\labelcref”中顯示的數字? (我使用hyperref
,cleveref
和nameref
包)更準確地說,我正在編寫一個文檔,其中有幾個部分由幾個小節組成。我寫了程式碼:
\renewcommand{\thesection}{\Roman{section}}
\renewcommand{\thesubsection}{\arabic{subsection}}
這樣我的部分就由 I、II、III... 組成,每個小節由 1、2、3、..(而不是 I.1、I.2、...)組成。
但我希望「參見 I.1」而不是「參見 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}