我有一个已加载的文档hyperref
,并且运行良好。
我有第二个文档,用于xr-hyper
引用第一个文档。如果我hyperref
从第一个文档中删除,则\titleref{}
(from memoir
) 命令将按预期工作。如果我使用,hyperref
则会得到“参见第 1 章”而不是“参见章节示例”。
以下两个文件显示了这种行为:
\documentclass[12pt]{memoir}
\usepackage{xr-hyper}
\usepackage{hyperref}
\begin{document}
\chapter{Example}\label{chap:example}
Examples
\end{document}
调用那个文件example.tex
,运行pdflatex
它,然后第二个文件引用它:
\documentclass[12pt]{memoir}
\usepackage{xr-hyper}
\usepackage{hyperref}
\externaldocument{example}
\begin{document}
See Chapter~\ref{chap:example} on page~\pageref{chap:example} which is called~\titleref{chap:example}.
\end{document}
编译第二个文件,问题就会出现。删除或注释掉\usepackage{hyperref}
第一个文件并重新运行这两个pdflatex
命令,\titleref
命令就会起作用,但第一个文档将没有任何超引用。
我怀疑问题在于该example.aux
文件有
\newlabel{chap:example}{{\M@TitleReference {1}{Example}}{1}}
在工作情况下,
\newlabel{chap:example}{{1}{1}{Example}{chapter.1}{}}
在这种情况下,这不起作用。我想我可以先编译第一个文件,hyperref
然后再编译第二个文件,然后hyperref
再次打开并重新编译第一个文件。
答案1
为了实现这一目标,完全依靠hyperref
管理目标/外部文档中的标题。为什么?因为它不是在memoir
类,因此没有引用要求\titleref
。改用\nameref
。
这是一个简单的例子:
\documentclass{memoir}% http://ctan.org/pkg/memoir
\usepackage{xr-hyper,hyperref}% http://ctan.org/pkg/{xr-hyper,hyperref}
\externaldocument{example}
\begin{document}
\chapter{Some chapter}\label{chap:current}
See Chapter~\ref{chap:example} on page~\pageref{chap:example} which is called~\nameref{chap:example}.
See Chapter~\ref{chap:current} on page~\pageref{chap:current} which is called~\titleref{chap:current}.
\end{document}
答案2
即使不使用标签,也可以使用包zref-xref
来代替,因为也可以从带有或不带有的 LaTeX 标签导入和导出:xr-hyper
zref
\zexternaldocument
hyperref
\documentclass[12pt]{memoir}
\usepackage[colorlinks]{hyperref}
\usepackage{nameref}
\usepackage{zref-xr}
\zxrsetup{
tozreflabel=false,
toltxlabel=true,
}
\zexternaldocument*{example}
\begin{document}
See Chapter~\ref{chap:example} on page~\pageref{chap:example} which is
called~\titleref{chap:example}.
\end{document}
评论:
- 包
nameref
会更改内部标签格式。它稍后会通过包加载。但是hyperref
应该知道这一点,因此示例确保在之前加载。\AtBeginDocument
\zexternaldocument
nameref