Fare in modo che i collegamenti hyperref vengano visualizzati solo se sono collegamenti esterni?

Aug 23 2020

Sto cercando di creare un documento, ma non ho bisogno di hyperref per etichettare i link interni (poiché il documento è lungo solo poche pagine). Tuttavia, vorrei che i link mostrassero quel punto al di fuori del documento, ad esempio URL e file esterni. Non voglio che vengano visualizzate equazioni, riferimenti a numeri di pagina, note a piè di pagina, ecc.

Mi riferisco in particolare ai bordi colorati che appaiono intorno ai collegamenti (ma non vengono stampati).

\documentclass{article}
\usepackage{hyperref}

\begin{document}
    Here's some test text with a footnote\footnote{Some text, but the footnote shouldn't show up as a link.}.

    \url{http://www.google.com} %this should show up as a link.

    \href{http://www.google.com}{Go to Google} %this should also show up as a link.
\end{document}

Non riesco a impostare hidelinksle opzioni e quindi impostare urlbordercolorsembra, e non ho idea di come impostare un colore del bordo per essere trasparente (altrimenti potrei provare a impostare ogni tipo di colore del bordo su trasparente). Inoltre, non so di che colore sia il blu per urlbordercolorimpostazione predefinita, e mi piace molto, quindi preferirei non cambiarlo se possibile. Ho scoperto da questo post che urlbordercolorè {0 1 1}di default; Inizialmente l'ho digitato male, quindi ho pensato di averlo sbagliato.

Non riesco a cambiare i bordi del collegamento in tutto bianco perché causa alcuni problemi di ritaglio:

Quindi penso che se volessi cambiare la situazione, i collegamenti dovrebbero essere resi trasparenti.

Grazie!

Risposte

3 Marijn Aug 23 2020 at 19:26

Nel hyperrefbundle c'è un pacchetto aggiuntivo chiamato nohyperrefche definisce tutti i comandi di hyperrefma non fa fare loro nulla. Questo pacchetto ha lo scopo di disabilitare completamente i collegamenti ipertestuali senza causare errori se i documenti utilizzano uno dei comandi definiti da hyperref(ad esempio \hyperrefo \phantomsectiono uno qualsiasi dei comandi dei segnalibri).

Dopo il caricamento hyperrefnormale, è possibile utilizzare parte del codice di questo pacchetto per disabilitare selettivamente solo le parti che non si desidera, ovvero i collegamenti interni, e lasciare inalterati gli altri comandi.

Modifica: come indicato nei commenti, potresti voler mantenere gli ancoraggi nel pdf per consentire il collegamento esterno. Questo vale solo per i collegamenti nel pdf (ad esempiohttp://mirrors.ctan.org/macros/latex/contrib/hyperref/doc/manual.pdf#subsection.3.8che si collega direttamente alla sottosezione 3.8 del manuale hyperref pdf), mentre i riferimenti 'esterni' all'interno di LaTeX (come con \inputo \includeo il xr-hyperpacchetto) non sono influenzati da questo codice.

MWE per questo approccio:

\documentclass{article}
\usepackage{hyperref}
\makeatletter
% first six lines of nohyperref.sty
% keep anchors
%\let\hyper@@anchor\@gobble
\def\hyper@link#1#2#3{#3}%
%\let\hyper@anchorstart\@gobble
%\let\hyper@anchorend\@empty
\let\hyper@linkstart\@gobbletwo
\let\hyper@linkend\@empty
\makeatother

\begin{document}
\section{A section}
\label{mysec}
    Here's some test text with a footnote\footnote{Some text, but the 
    footnote shouldn't show up as a link.} 
    in Section~\ref{mysec} on page~\pageref{mysec}.

    \url{http://www.google.com} %this should show up as a link.

    \href{http://www.google.com}{Go to Google} %this should also show up as a link.
\end{document}

Risultato:

Si noti che il codice inserito potrebbe disabilitare troppe o troppo poche funzionalità, controllare attentamente se si osservano effetti indesiderati.

2 UlrichDiez Aug 23 2020 at 19:55

Il seguente grezzo hack sembra funzionare con

  • pdflatex - This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=pdflatex)...LaTeX2e <2018-12-01>
  • xelatex - This is XeTeX, Version 3.14159265-2.6-0.99999 (TeX Live 2019/dev/Debian) (preloaded format=xelatex)...LaTeX2e <2018-12-01>
  • lualatex - This is LuaTeX, Version 1.07.0 (TeX Live 2019/dev/Debian)...LaTeX2e <2018-12-01>

Ma non do garanzie come

  • Non ho approfondito lo studio dei file hyperref-driver.

  • valutare cose come pdfborder e pdfborderstyle non è solo una questione di versione e specifica pdf, ma è anche una questione di come funziona il programma utilizzato per visualizzare / visualizzare il file pdf in questione:

    Tabella 164 - Voci comuni a tutti i dizionari di annotazione della specifica Portable Document Format (PDF) 1.7 dicono che la specifica del bordo (il pdfborder=...-thingie con hyperref) è di pattern

    [⟨horizontal corner radius⟩ ⟨vertical corner radius⟩ ⟨border width⟩[⟨length of dashes⟩ ⟨length of gap between dashes⟩]]
    ; le specifiche per i trattini sono opzionali; tutto quanto specificato in "unità di spazio utente predefinite"; la sezione 8.3.2.3 Spazio utente della specifica PDF (Portable Document Format) 1.7 dice che per impostazione predefinita un'unità di spazio utente è (1/72) pollice, cioè è 1bp (= 1 punto grande) secondo quanto detto nel Capitolo 10 : Dimensioni del TeXbook. (1bp = 1 punto grande = (1/72) pollice; 1pt = 1 punto stampante = (1 / 72,27) pollice.)

    Se specifico pdfborder={5 5 1 [3 2]}, questo significa linee tratteggiate; trattini di lunghezza 3bp; gap tra trattini di lunghezza 2bp; spessore dei trattini 1bp; angoli arrotondati di raggio d'angolo 5bp sia verticale che orizzontale.

    Quando si visualizza il file pdf risultante con la versione Chromium 76.0.3809.100 (Developer-Build), non viene visualizzato alcun bordo.

    Quando si visualizza il file pdf risultante con Firefox Quantum 69.0.2, vengono mostrate linee continue con angoli arrotondati.

    Quando si visualizza il file pdf risultante con Okular 1.3.2 e Adobe Acrobat Reader DC versione 2020.012.20043, vengono visualizzate linee tratteggiate, non vengono visualizzati angoli arrotondati ma angoli squadrati.

Tieni presente che la nota a piè di pagina è ancora un collegamento, ma non è circondata da bordi colorati.

\documentclass{article}
\usepackage{iftex}
\usepackage[colorlinks=false,
            %allbordercolors={},
            %citebordercolor={0 1 0},
            %filebordercolor={0 .5 .5},
            %linkbordercolor={1 0 0},
            %menubordercolor={1 0 0},
            %urlbordercolor={0 1 1},
            %runbordercolor={0 .7 .7},
            %pdfborder={0 0 1},
            %pdfborderstyle={/S/S/W 1}
           ]{hyperref}
\makeatletter
\Hy@AtBeginDocument{%
  \ifxetex
    \edef\@innerlinkbordercolor#1]{\@linkbordercolor]/BS<</S/S/W 0>>}%
    \def\@linkbordercolor{\@innerlinkbordercolor}%
  \fi
  \ifluatex\ifpdf
    \edef\@innerlinkbordercolor#1]{\@linkbordercolor]/BS<</S/S/W 0>>}%
    \def\@linkbordercolor{\noexpand\@innerlinkbordercolor}%
  \fi\fi
  \ifPDFTeX\ifpdf
    \edef\@innerlinkbordercolor#1]{\@linkbordercolor]/BS<</S/S/W 0>>}%
    \def\@linkbordercolor{\noexpand\@innerlinkbordercolor}%
  \fi\fi
}%
\makeatother

\begin{document}

    Here's some test text with a footnote\footnote{Some text, but the footnote shouldn't show up as a link.}.

    \url{http://www.google.com} %this should show up as a link.

    \href{http://www.google.com}{Go to Google} %this should also show up as a link.

\end{document}