xr 包不起作用“不完整的 \ifx”

xr 包不起作用“不完整的 \ifx”

我正在尝试使用 xr 在两个文档之间进行交叉引用。我之前在另一个项目中使用过它,没有任何问题。

这是我收到的错误消息:

(/usr/local/texlive/2018/texmf-dist/tex/latex/tools/xr.sty))
! Incomplete \ifx; all text was ignored after line 12.
<inserted text> 
            \fi 
<*> main

调用\externaldocument位于主文档的第 12 行。我找不到任何类似的问题。知道发生了什么吗?

谢谢

編輯:

如果 main.tex 中只有这几行,它仍然会失败并出现相同的错误:

\documentclass{article}
\usepackage{xr}
\externaldocument{supporting}
\begin{document}
Test
\end{document}

supporting.aux 文件包含:

\relax 
\providecommand\zref@newlabel[2]{}
\providecommand\hyper@newdestlabel[2]{}
\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
\global\let\oldcontentsline\contentsline
\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
\global\let\oldnewlabel\newlabel
\gdef\newlabel#1#2{\newlabelxx{#1}#2}
\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
\AtEndDocument{\ifx\hyper@anchor\@undefined
\let\contentsline\oldcontentsline
\let\newlabel\oldnewlabel
\fi}
\fi}
\global\let\hyper@last\relax 
\gdef\HyperFirstAtBeginDocument#1{#1}
\providecommand\HyField@AuxAddToFields[1]{}
\providecommand\HyField@AuxAddToCoFields[2]{}
\bibstyle{pnas-new}
\babel@aux{english}{}
\newlabel{LastPage}{{}{1}{}{page.1}{}}
\xdef\lastpage@lastpage{1}
\xdef\lastpage@lastpageHy{1}
\expandafter\ifx\csname c@section@totc\endcsname\relax\newcounter{section@totc}\fi\setcounter{section@totc}{0}
\expandafter\ifx\csname c@figure@totc\endcsname\relax\newcounter{figure@totc}\fi\setcounter{figure@totc}{0}
\expandafter\ifx\csname c@table@totc\endcsname\relax\newcounter{table@totc}\fi\setcounter{table@totc}{0}
\expandafter\ifx\csname c@NAT@ctr@totc\endcsname\relax\newcounter{NAT@ctr@totc}\fi\setcounter{NAT@ctr@totc}{0}
\expandafter\ifx\csname c@movie@totc\endcsname\relax\newcounter{movie@totc}\fi\setcounter{movie@totc}{0}
\expandafter\ifx\csname c@dataset@totc\endcsname\relax\newcounter{dataset@totc}\fi\setcounter{dataset@totc}{0}
\expandafter\ifx\csname c@SItext@totc\endcsname\relax\newcounter{SItext@totc}\fi\setcounter{SItext@totc}{0}

外部文档是PNAS 模板来自 overleaf

答案1

更新 xr已更新此修复版本

[2019/01/05 v5.04 eXternal References (DPC)]

似乎我最后一次编辑代码是xr在 1994 年。感觉就像昨天一样......

xr不接受文件\if中的测试aux。修复方法相对简单,如下所示,我将尝试在下一个版本中进行更新。

\documentclass{article}
\usepackage{xr}
\makeatletter
\long\def\XR@test#1#2#3#4\XR@{%
  \let\XR@next\@gobbletwo
  \ifx#1\newlabel
    \let\XR@next\@firstoftwo%
  \else\ifx#1\@input
     \let\XR@next\@secondoftwo
  \fi\fi
   \XR@next{\newlabel{\XR@prefix#2}{#3}}{\edef\XR@list{\XR@list#2\relax}}%
  \ifeof\@inputcheck\expandafter\XR@aux
  \else\expandafter\XR@read\fi}
\makeatother

\externaldocument{supporting}
\begin{document}
Test
\end{document}

原始答案

嗯,其实这就足够了

\expandafter\ifx\csname wibble\endcsname\relax\relax\fi

在引用的辅助文件中。

可能xr可以更好地防御辅助文件中的奇怪代码,我稍后会查看,但与此同时,如果您引用辅助文件的副本并在副本中删除该块,您就可以处理您的文档

\expandafter\ifx\csname c@section@totc\endcsname\relax\newcounter{section@totc}\fi\setcounter{section@totc}{0}
\expandafter\ifx\csname c@figure@totc\endcsname\relax\newcounter{figure@totc}\fi\setcounter{figure@totc}{0}
\expandafter\ifx\csname c@table@totc\endcsname\relax\newcounter{table@totc}\fi\setcounter{table@totc}{0}
\expandafter\ifx\csname c@NAT@ctr@totc\endcsname\relax\newcounter{NAT@ctr@totc}\fi\setcounter{NAT@ctr@totc}{0}
\expandafter\ifx\csname c@movie@totc\endcsname\relax\newcounter{movie@totc}\fi\setcounter{movie@totc}{0}
\expandafter\ifx\csname c@dataset@totc\endcsname\relax\newcounter{dataset@totc}\fi\setcounter{dataset@totc}{0}
\expandafter\ifx\csname c@SItext@totc\endcsname\relax\newcounter{SItext@totc}\fi\setcounter{SItext@totc}{0}

相关内容