当我加载从包hyperref
中包装的自己的类定义时,我的引用没有颜色。但所有使用的章节引用都有颜色。AtEndDocument
etoolbox
我可以弄清楚,当直接加载 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
\AtEndPreamble
hyperref
\AtEndPreamble
\AtEndPreamble
biblatex
\AtEndPreamble
hyperref
biblatex
一个解决方案是将你的移动\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}