我将论文分成了单独的 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
如果需要的话也是可能的。