hyperref 和 xr-hyper 破坏了 memoir 的 \titleref

hyperref 和 xr-hyper 破坏了 memoir 的 \titleref

我有一个已加载的文档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-hyperzref\zexternaldocumenthyperref

\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\zexternaldocumentnameref

相关内容