我想获取章节中第一个标签的目标名称。例如,如果我的文档包含以下内容:
\chapter{Introduction} \label{intro}
我想要一个命令/宏,当在该章节内运行时,它会返回“intro”。最好在章节和子节中定义其他标签后,它也会返回“intro”。另一个宏需要此命令,该宏从与章节标签同名的子文件夹中获取特定资源。
我尝试使用 currentHref、currentlabel 和 currentlabelname 等宏,但无法得到我想要的结果。有什么建议可以帮助我吗?
答案1
一种方法是重新定义\chapter
和\label
命令,使得第一的使用\label
以下命令\chapter
设置所需的值。
在调用 时,如果设置了切换开关\label
,则参数 的值将\label
存储在 中。第一次调用 时,此切换开关设置为 false ,以便后续使用不会覆盖 的值。\CurrentChapterLabel
isFirstLabel
\label
\label
\CurrentChapterLabel
在每个的开始处,设置\chapter
toggle的值,以便存储下一次的使用。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}