Referencia cruzada `xr`: cambiar el color solo para referencias externas

Referencia cruzada `xr`: cambiar el color solo para referencias externas

Quiero hacer referencia entre dos archivos, digamos Paper1 y Paper2. Estoy usando hyperrefen cada uno de los documentos como referencias internas. Para dejar claro qué referencias son internas y cuáles son externas, me gustaría cambiar el color de las xrreferencias.

En hypersetup, he elegido linkcolor={blue}. En esencia, me gustaría poder decir

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

He configurado un ejemplo en el dorso, que se puede encontrar aquí:https://www.overleaf.com/4688282852jxtxcsdmnrhs. A continuación se proporciona una copia de los archivos (¡disculpas por ser tan largos!)

(Hay un 'código auxiliar' adicional en el dorso que, creo, no es necesario si se está compilando localmente; consultehttps://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]\"" );
   }
}

Respuesta1

Debes cargar xr-hyper antes de hyperref. Además de esto: con xr-hyper los colores son diferentes de forma predeterminada, solo que no lo ves cuando cambiaste a linkcolorazul y, por lo tanto, a un color bastante similar a 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}

ingrese la descripción de la imagen aquí

%external.tex
\documentclass{article}

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

\begin{document}

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

\end{document}

información relacionada