宏用于打印包含特定参考键的章节编号

宏用于打印包含特定参考键的章节编号

我正在用该类编写文档amsbook。我定义了一个宏

\newcommand{\thmref}[1]{Theorem~\ref{#1}}

我希望包含以下章节编号:“(4,定理 2.7.6)”,而不仅仅是“定理 2.7.6”。

所以我需要一些宏

\newcommand{\thmref}[1]{(\chapterNumber{#1}, Theorem~\ref{#1})}

带有 的一些定义\chapterNumber。此命令应接受类似 的参考键thm:very impportant theorem并打印出包含它的章节的编号。我相信这一定非常简单,但我不知道。你能帮忙吗?谢谢!

--

这是一个有效的例子:

\documentclass{amsbook}

\newtheorem{thm}[subsubsection]{Theorem}
\newcommand{\thmref}[1]{Theorem~\ref{#1}}

\begin{document}

\chapter{First}
\section{Alpha}
\subsection{Beta}

\begin{thm} \label{thm:important theorem}
Blah blah
\end{thm}

\chapter{Second}

\section{Gamma}
\subsection{Phi}

\begin{thm}
Foo bar
\end{thm}

This follows from \thmref{thm:important theorem}.

\end{document}

答案1

以下使用的功能zrefchapter每次调用 时存储计数器值\label。它是作为 调用的一部分提取的\thmref,将章节号与本地引用一起设置:

在此处输入图片描述

\documentclass{amsbook}

\usepackage[user]{zref}

\newtheorem{thm}[subsubsection]{Theorem}
\newcommand{\thmref}[1]{(\chapterNumber{#1}, Theorem~\ref{#1})}

% https://tex.stackexchange.com/a/57831/5764
\makeatletter
\let\oldlabel\label
\renewcommand{\label}[1]{%
  \zref@labelbylist{#1}{special}% Special label
  \oldlabel{#1}% Old label
}
\zref@newlist{special}% Create a new property list called special
\zref@newprop{chapter}{\arabic{chapter}}% Section property holds \arabic{chapter}
\zref@addprop{special}{chapter}% Add a chapter property to special

% Extract chapter number; defaults to -1 if it doesn't exist (or on first compile)
\newcommand{\chapterNumber}[1]{\zref@extractdefault{#1}{chapter}{-1}}
\makeatother

\begin{document}

\chapter{First}
\section{Alpha}
\subsection{Beta}

\begin{thm} \label{thm:important theorem}
Blah blah
\end{thm}

\chapter{Second}
\section{Gamma}
\subsection{Phi}

\begin{thm}
Foo bar
\end{thm}

This follows from \thmref{thm:important theorem}.

\end{document}

上述细节的构建源于参考上一章的定理如果引用与标签位于同一章节内,还可以决定是否将当前章节编号添加到引用中。

相关内容