答案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}
当然,您可能应该将其包装在宏中以使其更加自动化。