Hyperref 不突出显示引用

Hyperref 不突出显示引用

当我加载从包hyperref中包装的自己的类定义时,我的引用没有颜色。但所有使用的章节引用都有颜色。AtEndDocumentetoolbox

我可以弄清楚,当直接加载 hyperref 时,所有引用都会被着色。

\begin{filecontents}{testclass.cls}
    \ProvidesClass{testclass}[2018-02-27 v0.1 Test class]
    \RequirePackage{etoolbox}
    \LoadClass{scrartcl}

    \RequirePackage[%
     backend = biber
    ]{biblatex}
    \addbibresource{biblatex-examples.bib}

    % Working for ref
    % But not for cite
    \AtEndPreamble{%
        \RequirePackage{hyperref}
        \hypersetup{colorlinks}
    }

    \AtEndDocument{%
        \printbibliography[heading=bibintoc]
    }%

    \endinput
\end{filecontents}

\documentclass{testclass}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

% Working both for ref and cite
%\usepackage{hyperref}
%\hypersetup{colorlinks}

\begin{document}
    \section{Hello world}\label{sec:hello}
        Hello world \cite{doody}
    \section{What ever}
        If've no idea~\ref{sec:hello}
\end{document}

hyperref我现在的问题是,当加载到自定义类中时,如何对引用进行颜色标注?感谢您的建议。

答案1

在 中存在“竞争条件” \AtEndPreamble。在 中设置biblatex,并且仅在 中加载。由于您的代码晚于代码,因此在进行设置时不会加载。hyperref\AtEndPreamblehyperref\AtEndPreamble\AtEndPreamblebiblatex\AtEndPreamblehyperrefbiblatex

一个解决方案是将你的移动\AtEndPreamble到加载之前biblatex

\ProvidesClass{testclass}[2018-02-27 v0.1 Test class]
\RequirePackage{etoolbox}
\LoadClass{scrartcl}

% Working for ref
% But not for cite
\AtEndPreamble{%
    \RequirePackage{hyperref}
    \hypersetup{colorlinks}
}

\RequirePackage[%
 backend = biber
]{biblatex}
\addbibresource{biblatex-examples.bib}

\AtEndDocument{%
    \printbibliography[heading=bibintoc]
}%

\endinput

这类似于https://github.com/plk/biblatex/issues/585. 如果你必须有\AtEndPreamble加载hyperref 加载biblatex,您可以使用hyperref=manual,但是您必须在手动\BiblatexManualHyperrefOn加载后发出。hyperref

答案2

至少我不是一个人。请参阅此处的讨论https://github.com/plk/biblatex/issues/585

您可以使用讨论中提到的命令:

\begin{filecontents}{testclass.cls}
    \ProvidesClass{testclass}[2018-02-27 v0.1 Test class]
    \RequirePackage{etoolbox}
    \LoadClass{scrartcl}

    \RequirePackage[%
     backend = biber,
     hyperref=manual
    ]{biblatex}

    \addbibresource{biblatex-examples.bib}

    % Working for ref
    % But not for cite
    \AtEndPreamble{%
        \RequirePackage{hyperref}
        \BiblatexManualHyperrefOn
        \hypersetup{colorlinks}
    }

    \AtEndDocument{%
        \printbibliography[heading=bibintoc]
    }%

    \endinput
\end{filecontents}

\documentclass{testclass}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

% Working both for ref and cite
%\usepackage{hyperref}
%\hypersetup{colorlinks}

\begin{document}
    \section{Hello world}\label{sec:hello}
        Hello world \cite{doody}
    \section{What ever}
        If've no idea~\ref{sec:hello}
\end{document}

在此处输入图片描述

相关内容