好吧,我正在尝试写一个关于我的模板的简短摘要,但我遇到了一个难题。在我的类定义中,我重新定义了命令\section{}
以\section*{}
保持模板的某种风格,但现在我想独立引用这些部分,但保留以下属性:如果我写\section{A random title}
标题,则标题将保持未编号。
让我更详细地解释一下:
我
\section{}
使用以下代码行重新定义了命令:\let\oldsection\section \renewcommand{\section}[1]{% \oldsection*{#1} \phantomsection \addcontentsline{toc}{section}{#1} }
当我
\ref{A label given to the section}
在两个不同的部分使用时,我得到以下结果:
- 我不需要对
\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}