如何通过“\ref”交叉引用未编号的部分?

如何通过“\ref”交叉引用未编号的部分?

好吧,我正在尝试写一个关于我的模板的简短摘要,但我遇到了一个难题。在我的类定义中,我重新定义了命令\section{}\section*{}保持模板的某种风格,但现在我想独立引用这些部分,但保留以下属性:如果我写\section{A random title}标题,则标题将保持未编号。

让我更详细地解释一下:

  1. \section{}使用以下代码行重新定义了命令:

    \let\oldsection\section                             
    \renewcommand{\section}[1]{%                        
       \oldsection*{#1}                                
       \phantomsection                                
       \addcontentsline{toc}{section}{#1}              
    }
    
  2. 当我\ref{A label given to the section}在两个不同的部分使用时,我得到以下结果:

在此处输入图片描述

  1. 我不需要对\section{}命令进行编号,因为我已经创建了一个包含章节内每个部分名称的迷你摘要,如下所示:

在此处输入图片描述

我认为没有必要包含这个小摘要的代码,以免帖子信息量过大。

本质上,我只是想得到帮助来弄清楚如何实现这\ref{}一点。

答案1

有可能\ref{}按照您的意愿进行工作。您需要\@currentlabel在下一个之前重新定义\label。在您的例子中,这将在重新定义的内部\section

由于您加载了hyperref,因此您不需要,\phantomsection因为每个带星号的部分已经添加了锚点。还建议使用 ,\NewCommandCopy而不是\let

以下示例生成:

在此处输入图片描述

我稍微扩展了您的宏,以便\ref{} 使用较短的章节标题(如果指定)。我还假设冒号后面是页码,因为在这种情况下章节编号毫无意义。

\documentclass{report}
\usepackage[colorlinks]{hyperref}
\usepackage{blindtext}

\title{The Title}
\author{First Last}
\date{}

\makeatletter
\NewCommandCopy\oldsection\section
\RenewDocumentCommand\section{O{#2}m}{%
  \oldsection*{#2}\addcontentsline{toc}{section}{\numberline{}#2}%
  \edef\@currentlabel{(titled as "#1")}}
\makeatother


\begin{document}
\maketitle
\tableofcontents

\chapter{Chapter one}
\section{Section: Aaa}\label{sec:aaa}
\Blindtext

\chapter{Chapter two}
\section[Bbb]{Section: Bbb}\label{sec:bbb}
\Blindtext

\chapter{Chapter three}
Referring to the section 1 \ref{sec:aaa}: \pageref{sec:aaa}.\\*
Referring to the section 2 \ref{sec:bbb}: \pageref{sec:bbb}.
\end{document}

相关内容