![获取对“当前”部分的引用](https://linux22.com/image/242597/%E8%8E%B7%E5%8F%96%E5%AF%B9%E2%80%9C%E5%BD%93%E5%89%8D%E2%80%9D%E9%83%A8%E5%88%86%E7%9A%84%E5%BC%95%E7%94%A8.png)
我想编写一个命令来获取对所提供的“当前”部分的引用(该术语完全错误,但示例将会阐明)。
这个想法大致如下:
\getcurrentref{chapter}
或者
\getcurrentref{subsubsection}
等等。
如果某一点位于某一节的“范围”内,则该节在某一给定点被视为“当前”。
例子:
\chapter{A}
% point (1)
\section{A.A}
% point (2)
\section{A.B}
% point (3)
\subsection{A.B.A}
% point (4)
点处唯一“存活”的部分(1)
为,点和chapter
处唯一“存活”的部分为和,点处唯一“存活”的部分为、和。(2)
(3)
chapter
section
(4)
chapter
section
subsection
我希望我能解释清楚(这很棘手)。
PS:如果尝试获取对非“活动”部分的引用,命令应该返回??
(这只是一种标准的优雅说法“没有这样的部分活着”)。
答案1
假设下属的“部分”被较大的部分重置为 0(因此\chapter
重置\section
等等),您只需查看计数器chapter
、section
等,并检查它们是否非零:
\documentclass{book} % For {chapter}
\usepackage{etoolbox}
\newcommand\getcurrentref[1]{%
\ifnumequal{\value{#1}}{0}
{??}
{\the\value{#1}}%
}
\begin{document}
Chapter: \getcurrentref{chapter}
\chapter{I}
\tracingmacros=1\tracingonline=1
Chapter: \getcurrentref{chapter}\\
\tracingmacros=0
Section: \getcurrentref{section}
\section{i}
Chapter: \getcurrentref{chapter}\\
Section: \getcurrentref{section}\\
Subsection: \getcurrentref{subsection}
\section{ii}
Section: \getcurrentref{section}
\subsection{a}
Subsection: \getcurrentref{subsection}
\end{document}
顺便说一句,这应该是可扩展的。我只etoolbox
在方便的条件中使用,在更复杂的情况下,它可能比 TeX 基元更简单(例如,就嵌套或扩展顺序而言)。在这里,它是可选的。
编辑:我现在使用\value{#1}
而不是\csname c@#1\endcsname
数字,正如人们所希望的那样。正如 egreg 所说,它是可扩展的(实际上,它只扩展到这个)。然而,它确实扩展得相当不可预测,因为它相当于一个计数登记,而不是实际数字,因此宏中实际打印值的部分需要一个,\the
以避免出现奇怪的错误。在我的例子中,我在 的扩展中看到了“插入了缺失数字” \\
,这(在跟踪时)似乎与 有关\protect
。
答案2
使用\thechapter
、\thesection
等:
\documentclass{report}
\pagestyle{empty}
\begin{document}
\chapter{First}
\label{chap:first}
\section{First}
\label{sec:first}
This is the chapter number~\thechapter, section~\thesection.
\section{Second}
\label{sec:second}
This is the chapter number~\thechapter, section~\thesection.
\end{document}
答案3
没有“当前”级别的概念,除非有人将其插入到分段命令中。最好的办法是查看相关计数器是否为零:
\newcommand{\getcurrentref}[1]{%
\ifnum\value{#1}=0 ??\else\csname the#1\endcsname\fi
}
没有包裹。这实际上与 Ryan 的答案相同,但简化为基本内容。