`xr` Querverweis: Farbe nur für externe Referenzen ändern

`xr` Querverweis: Farbe nur für externe Referenzen ändern

Ich möchte zwischen zwei Dateien verweisen, beispielsweise Paper1 und Paper2. Ich verwende hyperrefin jedem der Dokumente interne Referenzen. Um deutlich zu machen, welche Referenzen intern und welche extern sind, möchte ich die Farbe der xrReferenzen ändern.

In hypersetuphabe ich gewählt linkcolor={blue}. Im Wesentlichen möchte ich sagen können

if reference is external, then set linkcolor={red}
if reference is internal, then set linkcolor={blue}

Ich habe ein Beispiel in Overleaf eingerichtet, das Sie hier finden:https://www.overleaf.com/4688282852jxtxcsdmnrhs. Unten finden Sie eine Kopie der Dateien (entschuldigen Sie, dass sie so lang sind!)

(Es gibt zusätzlichen „Hilfscode“ in Overleaf, der meines Erachtens nicht erforderlich ist, wenn lokal kompiliert wird; siehehttps://www.overleaf.com/learn/how-to/Cross_referencing_with_the_xr_package_in_Overleaf.)

%%File1.tex

\documentclass{article}

\usepackage{hyperref}
\hypersetup{
    colorlinks,
    linkcolor={blue},
    citecolor={blue},
    urlcolor={blue}
}

%%% HELPER CODE FOR DEALING WITH EXTERNAL REFERENCES
\usepackage{xr-hyper}
\makeatletter
\newcommand*{\addFileDependency}[1]{
  \typeout{(#1)}
  \@addtofilelist{#1}
  \IfFileExists{#1}{}{\typeout{No file #1.}}
}
\makeatother

\newcommand*{\myexternaldocument}[1]{
    \externaldocument{#1}
    \addFileDependency{#1.tex}
    \addFileDependency{#1.aux}
}
%%% END HELPER CODE

% put all the external documents here!
\myexternaldocument{File2}

\title{\texttt{xr} package example}
\author{Overleaf team}

\begin{document}
\maketitle
We would like to reference section \ref{label1} of file2.tex
\end{document}

%%%%%%%%%%%%%

%%File2.tex

\documentclass{article}
\usepackage{hyperref}
\begin{document}
\section{Label1}
\label{label1}
This section is referenced by File1.
\end{document}

%%%%%%%%%%%%%

%%latexmkrc

add_cus_dep( 'tex', 'aux', 0, 'makeexternaldocument' );

sub makeexternaldocument {
    # if the dependency isn't one of the files that this latexmk run will consider, process it
    # without this test, we would get an infinite loop!
    if (!($root_filename eq $_[0]))
    {   # PLEASE ENABLE ONLY ONE OF THE FOLLOWING
        # DEPENDING ON THE ENGINE YOU'RE USING

        # FOR PDFLATEX
        system( "latexmk -pdf \"$_[0]\"" );

        # FOR LATEX+DVIPDF
        # system( "latexmk \"$_[0]\"" );

        # FOR XELATEX
        # system( "latexmk -xelatex \"$_[0]\"" );

        # FOR LUALATEX
        # system( "latexmk -lualatex \"$_[0]\"" );
   }
}

Antwort1

Sie sollten xr-hyper vor hyperref laden. Außerdem: mit xr-hyper sind die Farben standardmäßig anders, Sie sehen es nur nicht, weil Sie in linkcolorBlau und damit in eine Farbe geändert haben, die ziemlich ähnlich ist filecolor.

\documentclass{article}

\usepackage{xr-hyper}
\usepackage[colorlinks]{hyperref}
\hypersetup{
    colorlinks,
    linkcolor={blue},
    filecolor={red}, %<----
    urlcolor={blue},
    citecolor={blue}
}


\externaldocument[ex:]{external}

\begin{document}

\section{My section}\label{sec:mysection}

Local ref: \ref{sec:mysection}, external ref:  \ref{ex:sec:mytitle} 

\end{document}

Bildbeschreibung hier eingeben

%external.tex
\documentclass{article}

\usepackage{xr-hyper}
\usepackage{hyperref}

\begin{document}

\section{MyTitle}\label{sec:mytitle}

\end{document}

verwandte Informationen