상호 참조에 사용된 하위 섹션의 수를 변경하는 방법은 무엇입니까?

상호 참조에 사용된 하위 섹션의 수를 변경하는 방법은 무엇입니까?

내 "\labelcref"에 나타나는 숫자를 변경할 수 있는지 궁금합니다. (저는 hyperref, cleverefnameref패키지를 사용합니다.) 보다 정확하게는 몇 개의 하위 섹션으로 구성된 여러 섹션이 있는 문서를 작성하고 있습니다. 나는 코드를 작성했습니다 :

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

따라서 내 섹션은 I,II,III,...으로 이동하고 모든 하위 섹션은 1,2,3,..(I.1,I.2,..이 아닌)로 이동합니다.

그러나 나는 "see 1"(어떤 섹션에 있는지 명시하지 않기 때문에 독자에게 혼란을 줄 수 있음)이 아니라 "I.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가장 최근에 "재조정된" 카운터는 어디에 있습니까? 일반적으로 \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}

여기에 이미지 설명을 입력하세요

관련 정보