\pageref 在包含子文件包和 xr 包的主文档中无法正常工作

\pageref 在包含子文件包和 xr 包的主文档中无法正常工作

subfiles我有一个包含包和包的主文件设置xr。我正在尝试制作\pageref命令在主文件中正确交叉引用,但它在主文件中显示的页码不正确,尽管它在子文件中正确。我的设置如下main.tex

 \documentclass[12pt,a4paper,twoside,openright,final]{memoir}
 \usepackage{kpfonts}
 \usepackage[T1]{fontenc}
 \usepackage[utf8]{inputenc}
 \usepackage[english]{babel}
 \usepackage{subfiles}
 %
 \providecommand{\main}{.}
 %
 \usepackage{xr}
    \externaldocument[ch1-]{\main/chap/chapter1/ch1}
    \externaldocument[ch2-]{\main/chap/chapter2/ch2}
%
\begin{document}
%... some other subfiles
\subfile{chap/chapter1/ch1.tex}
\subfile{chap/chapter2/ch2.tex}
\end{document}

现在在文件中ch1.tex我有以下设置:

\providecommand{\main}{../../}
\documentclass[../../main.tex]{subfiles}
\begin{document}
\chapter{1}
Some text.... \newpage
\begin{figure}[h]
    \centering
    \includegraphics[width=0.7\textwidth]{picture}
    \caption{Some picture}
    \label{fig:picture}
\end{figure}
\end{document}

然后在文件中ch2.tex我有以下内容:

\providecommand{\main}{../../}
\documentclass[../../main.tex]{subfiles}
\begin{document}
\chapter{2}
As shown in figure~\ref{ch1-fig:picture} on page~\pageref{ch1-fig:picture} the labelling works.
\end{document}

现在,当我编译子文件ch1.tex和时ch2.tex,与 关联的页码\pageref{ch1-fig:picture}会给出 中的正确页面ch2.tex,即子文件 中的第 2 页ch1.tex,但当我编译主文件时,页码由于某种原因不会更新,因为它应该在主文件的第 4 页。我真的不明白为什么主文件会这样,因为如果图片移动到子文件的其他页面,子文件能够相应地更新。我的设置部分受到构造的启发这里这里。 任何帮助深表感谢。

编辑:似乎对标签的引用也不能正常工作,因为在主文档中,标签确实更新为正确的数字,但是当尝试在稍后或之前引用它们时,引用中的数字是错误的。

答案1

好的,我找到了一个解决这个问题的小方法,只需让所有标签引用主文档,即基本上注释掉部分内容\externaldocument[ch1-]{\main/chap/chapter1/ch1}等,但保留\externaldocument[t-]{\main/main}现有内容,以便子文件可以在主文档中找到正确的标签。这样,当在子文件之间交叉引用内容时,我只需通过编译主文档几次来确保标签存在于主文档中。

答案2

我还发现 hyperref 与 section 和 subsection 结合使用。这意味着如果您省略 section 或 subsection,那么您不太可能转到另一个页面。

\documentclass{article}

\usepackage{lipsum}
\usepackage{geometry}
\usepackage[hidelinks]{hyperref}

\hypersetup{colorlinks=true, pdftex}

\begin{document}

%\section{something}
whatever insteresting

something \hyperref[a]{hyperref link}

\newpage
%\section{something}
whatever boring

something else \label{a} 

\end{document}

如果你不注释掉该部分,那么它就可以正常工作

答案3

使用

\usepackage{nameref}
\usepackage{zref-xr}
\zxrsetup{
  tozreflabel=false,
  toltxlabel=true,  
}
\zexternaldocument*{example}

而不是

 \usepackage{xr}
    \externaldocument[ch1-]{\main/chap/chapter1/ch1}
    \externaldocument[ch2-]{\main/chap/chapter2/ch2}

来源:https://tex.stackexchange.com/a/163953/110064

相关内容