参考上一章的定理

参考上一章的定理

我将论文分成了单独的 LaTeX 文件,这些文件代表了我论文的章节。当我引用前几章中的定理时,我只能得到定理的确切编号,因此不知道它属于哪一章。是否可以在定理编号之前以罗马格式获取章节编号?希望仍然使用命令\ref{...}

例如,在第 1 章第 2 节中,我有一个定理,标签为 X,编号为 2.1(2 代表节号,1 代表该节中的定理编号)。我在第 5 章中引用它,例如“根据定理\ref{X},我们得到...”。结果是“根据定理 2.1,我们得到...”。

答案1

以下最小工作示例创建具有以下结构的文档:

Chapter 1
  Section 5
    Theorem 5.4
Chapter 7
  Section 10
    Theorem 10.2

包含一些来自lipsum。章节/部分/定理计数器已明确设置为该示例。

使用 return 5.4 和 10.2 引用\ref{<label>},无论调用位置如何,如果目标不在本章内,则\thmref{<label>}有条件地在引用前加上。整个功能都依赖于 Heiko Oberdiek 的(太棒了)<chapter>.zref包裹并且与从公式参考中提取节号。 为了每一个使用 制作的标签\label,会创建一个“特殊”标签来存储该标签的章节,因为传统的\label-\ref系统只允许存储两个元素:当前标签/默认和页面。因此,如果没有一些帮助,章节编号作为附加组件很难适合这个领域。

\documentclass{report}
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\usepackage{amsthm}% http://ctan.org/pkg/amsthm
\usepackage{zref}% http://ctan.org/pkg/zref

\makeatletter
\let\oldlabel\label
\renewcommand{\label}[1]{%
  \zref@labelbylist{#1}{special}% Special label
  \oldlabel{#1}% Old label
}
\newcounter{splabel}
\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
\newcommand*{\thmref}[1]{%
  \stepcounter{splabel}% Increment local "special label" counter
  \zref@labelbylist{#1-\thesplabel}{special}% Create label
  \edef\targetchap{\zref@extractdefault{#1}{chapter}{-1}}% Extract target chapter
  \edef\sourcechap{\zref@extractdefault{#1-\thesplabel}{chapter}{-1}}% Extract source chapter
  \ifnum\targetchap=\sourcechap\else\targetchap.\fi%
  \ref{#1}%
}
\newtheorem{theorem}{Theorem}
\renewcommand{\thetheorem}{\arabic{section}.\arabic{theorem}}% Theorem <section>.<theorem>
\@addtoreset{theorem}{chapter}% Theorems reset at start of \chapter
\makeatother

\begin{document}

\chapter{First chapter}\lipsum[1]% Chapter 1
See Theorem~\ref{thm:first} or~\ref{thm:second}.
See Theorem~\thmref{thm:first} or~\thmref{thm:second}.
\setcounter{section}{4}% Just for this example
\section{A section}% Section 5
\setcounter{theorem}{3}% Just for this example
\begin{theorem}\label{thm:first}\lipsum[2]\end{theorem}% Theorem 5.4

\setcounter{chapter}{6}% Just for this example
\chapter{Second chapter}\lipsum[3]% Chapter 7
\setcounter{section}{9}% Just for this example
\section{A section}% Section 10
\setcounter{theorem}{1}% Just for this example
\begin{theorem}\label{thm:second}\lipsum[4]\end{theorem}% Theorem 10.2

\end{document}

在此处输入图片描述

基本思想如下:每当您调用 时\thmref{<label>},都会出现一个附加的“源”标签<label>-#(其中#是计数器)。比较“源”和“目标”标签的章节编号,如果“源”不等于“目标”,则有条件地打印目标章节。

功能兼容hyperref如果需要的话也是可能的。

相关内容