我正在用类编写文档amsbook
。我有几个章节,但只有章节内部(没有子章节)。我使用过
\swapnumbers
\theoremstyle{theorem}
\newtheorem{corollary}{Corollary}[section]
\newtheorem{teo}[corollary]{Théorème}
\newtheorem{lem}[corollary]{Lemme}
等等。
现在,在第 1 章第 2 节中我有“2.2 定理:......”此外,在第 2 章第 2 节中我有“2.2. 引理:......”每个都有其标签,当我在其他章节中引用其中一个时,我只会得到“参见 2.2”,因此读者不知道我在谈论 I.2.2 还是 II.2.2。
有什么建议么?
答案1
您可以重新定义\p@corollary
(控制交叉引用中使用的前缀)并添加章节编号的罗马表示形式:
\documentclass{amsbook}
\usepackage[frenchb]{babel}
\swapnumbers
\theoremstyle{theorem}
\newtheorem{corollary}{Corollary}[section]
\newtheorem{teo}[corollary]{Théorème}
\newtheorem{lem}[corollary]{Lemme}
\makeatletter
\renewcommand\p@corollary{\Roman{chapter}.}
\makeatother
\begin{document}
\chapter{Test Chapter One}
\ref{cortest} and \ref{lemtest}
\section{Test Section One One}
\section{Test Section One Two}
\begin{corollary}
\label{cortest}
test
\end{corollary}
\chapter{Test Chapter Two}
\ref{cortest}
\section{Test Section Two One}
\section{Test Section Two Two}
\begin{lem}
\label{lemtest}
test
\end{lem}
\end{document}
评论中提出了一个新要求:仅当引用的对象出现在与\ref
使用章节不同的章节中时才添加章节编号;这可以通过一些字符串操作来完成:
\documentclass{amsbook}
\usepackage[frenchb]{babel}
\usepackage{refcount}
\usepackage{xstring}
\newcommand\currentchapter{}
\newcommand\thmref{}
\newcommand\Thmref[1]{%
\renewcommand\currentchapter{\thechapter}
\StrBefore{\getrefnumber{#1}}{.}[\thmrefbefore]%\thmrefbefore\currentchapter%
\StrBehind{\getrefnumber{#1}}{.}[\thmrefbehind]%\thmrefbehind\currentchapter%
\IfStrEq{\currentchapter}{\thmrefbefore}{\thmrefbehind}{\uppercase\expandafter{\romannumeral 0\thmrefbefore\relax}.\thmrefbehind}
}
\swapnumbers
\newtheorem{corollary}{Corollary}[section]
\newtheorem{teo}[corollary]{Théorème}
\newtheorem{lem}[corollary]{Lemme}
\makeatletter
\renewcommand\p@corollary{\arabic{chapter}.}
\makeatother
\begin{document}
\chapter{Test Chapter One}
\section{Test Section One One}
\section{Test Section One Two}
Corollary~\Thmref{cortesta} and Lemme~\Thmref{lemtestb}... On the other hand, Corollary~\Thmref{cortestb} and Lemme~\Thmref{lemtesta}...
\begin{corollary}
\label{cortesta}
test
\end{corollary}
\begin{lem}
\label{lemtesta}
test
\end{lem}
\chapter{Test Chapter Two}
\section{Test Section Two One}
\section{Test Section Two Two}
Corollary~\Thmref{cortesta} and Lemme~\Thmref{lemtestb}... On the other hand, Corollary~\Thmref{cortestb} and Lemme~\Thmref{lemtesta}...
\begin{corollary}
\label{cortestb}
test
\end{corollary}
\begin{lem}
\label{lemtestb}
test
\end{lem}
\end{document}
第一章的图片:
第二章的图片:
第二种方法没有与合作hyperref
。