引用由 \addcontentsline 创建的条目

引用由 \addcontentsline 创建的条目

我如何引用用 创建的目录条目\addcontentsline

在此处输入图片描述

\documentclass{l3doc}
\usepackage{hyperref}

\begin{document}

\tableofcontents

\addcontentsline{toc}{section}{\protect\numberline{\thesection}Foo}\label{opt:foo}
\DescribeOption{Foo}

Section~\ref{opt:foo} % Expect: % Section~0

\end{document}

答案1

\label需要 中的参考信息\@currentlabel,但\addcontentsline对 不做任何操作\@currentlabel。例如,您可以这样做:

\makeatletter
\def\@currentlabel{\p@section\thesection}%
\makeatother

或者更明确地,\makeatletter\def\@currentlabel{0}\makeatother(或另一个值)在使用之前\label来定义该信息,但通常的设置方式\@currentlabel是使用\refstepcounter

由于您似乎希望 0 作为部分编号并\refstepcounter增加计数器\protected@edef将的扩展存储\p@<counter>\the<counter>在中\@currentlabel,我在\setcounter{section}{-1}第一次\refstepcounter{section}调用之前使用。

\documentclass{l3doc}
\usepackage{hyperref}

\makeatletter
\newcommand*{\mySetNameref}{\def\@currentlabelname}
\makeatother

\begin{document}

\tableofcontents
\bigskip

% First option
\leavevmode
% The next “section” will be numbered 0
\setcounter{section}{-1}\refstepcounter{section}%
\mySetNameref{Option \texttt{Foo}}%
\label{opt:foo}%
\addcontentsline{toc}{section}{\protect\numberline{\thesection}Foo}%
\DescribeOption{Foo} Description of \texttt{Foo}

% Second option
\leavevmode
\refstepcounter{section}%
\mySetNameref{Option \texttt{Bar}}%
\label{opt:bar}%
\addcontentsline{toc}{section}{\protect\numberline{\thesection}Bar}%
\DescribeOption{Bar} Description of \texttt{Bar}

\medskip
Section~\ref{opt:foo} is named \nameref{opt:foo}. Section~\ref{opt:bar} is
named \nameref{opt:bar}.

\end{document}

在此处输入图片描述

当然,您可能应该将其包装在宏中以使其更加自动化。

相关内容