我正在使用 amsbook 包和 hyperref 包。假设在第 9 章第 3 节第 2 小节中陈述了一个定义,它被称为“定义 3.2”,而使用 hyperref 包时,它会被调用为“3.2”,而不会提及该章节。我该如何让包将其调用为“IX 3.2”?
添加如果这对我们所在的章节敏感,那就更好了:如果在同一章的第 5 节中调用定义 3.2,则不应进行区分,但如果在任何地方调用它不同的章节中,需要进行这样的区分。
平均能量损失
\documentclass[a4paper,11 pt]{amsbook}
\usepackage[utf8x]{inputenc}
\usepackage{amsfonts,amssymb,amsmath}
\usepackage{hyperref}
\newtheorem{theorem}{Theorem}[section]
\newtheorem{lema}[theorem]{Lemma}
\theoremstyle{definition}
\newtheorem{deff}[theorem]{Definition}
\begin{document}
\chapter{Preliminaries.}
\section{Examples.}
\begin{deff}\label{def::connectedfoo} Define a foo to be connected if...
\end{deff}
\chapter{Stuff.}
In ~\ref{def::connectedfoo} we defined what a connected foo is. This will be of great use in...
\end{document}
答案1
使用\p@theorem
,作为参考编号的“前缀”。
\documentclass[a4paper,11 pt]{amsbook}
\usepackage[utf8]{inputenc}
\usepackage{amssymb,amsmath}
\usepackage{hyperref}
\newtheorem{theorem}{Theorem}[section]
\newtheorem{lema}[theorem]{Lemma}
\theoremstyle{definition}
\newtheorem{deff}[theorem]{Definition}
\makeatletter
\renewcommand{\p@theorem}{\ref@chapter{\arabic{chapter}}}
\protected\def\ref@chapter#1{%
\ifnum#1=\value{chapter}%
\else
\@Roman{#1}\,%
\fi
}
\makeatother
\renewcommand{\thechapter}{\Roman{chapter}}
\begin{document}
\chapter{Preliminaries}
\section{Examples}
\begin{deff}\label{def::connectedfoo}
Define a foo to be connected if...
\end{deff}
Definition~\ref{def::connectedfoo} is nice.
\chapter{Stuff}
In~\ref{def::connectedfoo} we defined what a connected foo is. This will be of great use in...
\end{document}