如何返回标签的目标名称

如何返回标签的目标名称

我想获取章节中第一个标签的目标名称。例如,如果我的文档包含以下内容:

\chapter{Introduction} \label{intro}

我想要一个命令/宏,当在该章节内运行时,它会返回“intro”。最好在章节和子节中定义其他标签后,它也会返回“intro”。另一个宏需要此命令,该宏从与章节标签同名的子文件夹中获取特定资源。

我尝试使用 currentHref、currentlabel 和 currentlabelname 等宏,但无法得到我想要的结果。有什么建议可以帮助我吗?

答案1

一种方法是重新定义\chapter\label命令,使得第一的使用\label以下命令\chapter设置所需的值。

在此处输入图片描述

在调用 时,如果设置了切换开关\label,则参数 的值将\label存储在 中。第一次调用 时,此切换开关设置为 false ,以便后续使用不会覆盖 的值。\CurrentChapterLabelisFirstLabel\label\label\CurrentChapterLabel

在每个的开始处,设置\chaptertoggle的值,以便存储下一次的使用。isFirstLabel\label

笔记:

  • 我已经使用newtoggle包裹etoolbox因为我更喜欢那个语法而不是\newif语法。但如果你不想包含额外的包,那么调整它以使用\newif其他一些条件方法

  • 选项[openany]\usepackage[paperwidth=11.0cm]{geometry}仅用于获得更好的图像来说明结果。

  • 中定义的值是在使用宏之前\DefaultChapterLabel尝试使用时返回的值:\CurrentChapterLabel\label\chapter

    在此处输入图片描述

代码:

\documentclass[openany]{book}
\usepackage[paperwidth=11.0cm]{geometry}
\usepackage{etoolbox}

\newtoggle{isFirstLabel}
\toggletrue{isFirstLabel}

\newcommand*{\DefaultChapterLabel}{UNDEFINED}%
\newcommand*{\CurrentChapterLabel}{\DefaultChapterLabel}%

\let\OldChapter\chapter
\let\OldLabel\label

\def\chapter{%
    \renewcommand{\CurrentChapterLabel}{\DefaultChapterLabel}% reset
    % Set so that the next usf \label will store its 
    % value in \CurrentChapterLabel
    \global\toggletrue{isFirstLabel}% 
    \OldChapter% let \chapter do it's original job
}%
\renewcommand*{\label}[1]{%
    \iftoggle{isFirstLabel}{%
        % This is the first use of \label in this chapter
        % so store its value, and reset the toggle so we don't
        % store the next time \label is used.
        \renewcommand{\CurrentChapterLabel}{#1}%
        \global\togglefalse{isFirstLabel}%
    }{}%
    \OldLabel{#1}% let \label do it's original job
}%

\begin{document}
\chapter{Introduction} \label{intro}
\section{Intro Section One} \label{intro-section-one}
Current chapter label is: \CurrentChapterLabel

\chapter{Second Chapter} \label{second}
\section{Second Chapter Section One} \label{second-section-section-one}
Current chapter label is: \CurrentChapterLabel

% The following is to test what happens if we attempt to access
% the value of \CurrentChapterLabel prior to setting a \label
% within this chapter
\chapter{Third Chapter}
Current chapter label is: \CurrentChapterLabel

\end{document}

相关内容