获取对“当前”部分的引用

获取对“当前”部分的引用

我想编写一个命令来获取对所提供的“当前”部分的引用(该术语完全错误,但示例将会阐明)。

这个想法大致如下:

\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)chaptersection(4)chaptersectionsubsection

我希望我能解释清楚(这很棘手)。

PS:如果尝试获取对非“活动”部分的引用,命令应该返回??(这只是一种标准的优雅说法“没有这样的部分活着”)。

答案1

假设下属的“部分”被较大的部分重置为 0(因此\chapter重置\section等等),您只需查看计数器chaptersection等,并检查它们是否非零:

\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 的答案相同,但简化为基本内容。

相关内容