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}