\documentclass[oneside,10pt]{book}
\usepackage{amsmath, amsfonts, amsthm, amssymb}
\usepackage{hyperref}
\usepackage{blindtext}
\begin{document}
\chapter{something}
\blindtext[1]
\chapter{something else}
\section{a section}
This is the most important equation in this chapter
\begin{equation}\label{important-equation}
1=1
\end{equation}
\chapter{chapter 3}
As we have seen in Equation \ref{important-equation} in Chapter (REF-chapter-of-equation) on page (REF-page-of-equation), we have something important
\end{document}
我想要实现的是能够自动替换(并链接)输出中的正确章节和正确的页面,而不是(REF-chapter-of-equation)
和(REF-page-of-equation)
。
figure
我显然也想在其他环境( s,theorem
s, s)中做到这一点definition
,而不仅仅是方程式。
最后显而易见的是,我想避免“手动链接章节”,因为如果我在开头添加一个章节,或者更糟糕的是,如果我将等式移动到另一个章节,那么我将不得不重新列举所有内容,这看起来是一个非常糟糕的举动。
我已经看过hyperref
手册,但没有取得太大的成功。
我不知道这是否相关,我在 Ubuntu 机器上使用 TeXLive 2015 上的 pdfLaTeX。解决方案必须与amsmath
。
任何有关如何实现这一目标的帮助,都将不胜感激:)
答案1
一种选择是更新\chapter
并插入常规\label
。当然,结构应该是您不会在文档其他地方使用的结构,因为\label
s 必须是唯一的。我选择插入\label{chapter-\thechapter}
,这类似于\label{chapter-2}
第 2 章中的 if \thechapter
is \arabic{chapter}
(默认值)。
为了插入这个标签,我们重新定义\chapter
并使用一些refcount
从默认方程编号中提取它 - ( \thechapter.\arabic{equation}
) 在\chapref
:
\documentclass[oneside]{book}
\usepackage{amsmath,hyperref,refcount}
\usepackage{blindtext}
\AtBeginDocument{
\let\oldchapter\chapter
\renewcommand{\chapter}[1]{%
\clearpage
\oldchapter{#1}% Regular chapter
\label{chapter-\thechapter}% \label this chapter
}
}
\makeatletter
\def\extract@chapter#1.#2\@nil{#1}%
\newcommand{\chapref}[1]{{%
\edef\x{\noexpand\edef\noexpand\chapnum{\noexpand\extract@chapter\getrefnumber{#1}\noexpand\@nil}}\x%
\ref{chapter-\chapnum}%
}}
\makeatother
\begin{document}
\chapter{something}
\blindtext[1]
\chapter{something else}
\section{a section}
This is the most important equation in this chapter
\begin{equation}
1=1 \label{eq:important-equation}
\end{equation}
\chapter{chapter 3}
As we have seen in Equation~\eqref{eq:important-equation} in Chapter~\chapref{eq:important-equation} on page~\pageref{eq:important-equation}, we have something important
\end{document}
上述解决方案假设您只使用编号章节。但是,如果您还使用未编号章节,则可以使用以下重新定义\chapter
:
\usepackage{xparse}
\AtBeginDocument{
\let\oldchapter\chapter
\RenewDocumentCommand{\chapter}{s o m}{%
\clearpage
\IfBooleanTF{#1}
{\oldchapter*{#3}}% \chapter*[..]{...}
{\IfValueTF{#2}
{\oldchapter[#2]{#3}}% \chapter[..]{...}
{\oldchapter{#3}}% \chapter{...}
\label{chapter-\thechapter}% \label this chapter
}%
}
}
唯一的区别在于是否使用\chapter
或\chapter*
以及有条件地放置\label
。
另一种解决方案与amsmath
:
zref
\ref
是一个简单的选项,因为它允许用户通过“属性”指定多个单个值。
下面我创建了一个新属性chapter
,用于存储\thechapter
。此外,每个\chapter
命令都已重新定义以插入一个,\label
以允许适当的超链接。最后,\label
还更新了用于存储其所用的当前章节。
如果您只是想要章节编号,而不是章节开头的超链接,那么就不需要重新定义\chapter
(...生活会更轻松)。
\documentclass[oneside]{book}
\usepackage{zref,hyperref}
\usepackage{blindtext}
\makeatletter
\zref@newprop{chapter}{\thechapter}% Chapter property holds \thechapter
\AtBeginDocument{%
\let\oldlabel\label
\renewcommand{\label}[1]{%
\zref@labelbyprops{#1}{chapter}% Special label
\oldlabel{#1}% Old label
}%
}
\let\oldchapter\chapter
\renewcommand{\chapter}[1]{%
\clearpage
\oldchapter{#1}% Regular chapter
\oldlabel{chapter-\thechapter}% \label this chapter
}
\newcommand{\chapref}[1]{%
\begingroup\edef\x{\endgroup\noexpand\hyperref[chapter-\zref@extract{#1}{chapter}]{%
\zref@extract{#1}{chapter}}}\x%
}
\makeatother
\begin{document}
\chapter{something}
\blindtext[1]
\chapter{something else}
\section{a section}
This is the most important equation in this chapter
\begin{equation}
1=1 \label{eq:important-equation}
\end{equation}
\chapter{chapter 3}
As we have seen in Equation~\ref{eq:important-equation} in Chapter~\chapref{eq:important-equation} on page~\pageref{eq:important-equation}, we have something important
\end{document}
一些相关参考资料: