让 hyperref 与 biblatex 中的 \citeyear 和 \citeyearpar 协同工作

让 hyperref 与 biblatex 中的 \citeyear 和 \citeyearpar 协同工作

与包一起使用时hyperref,会自动为引文创建超链接,但如果使用或biblatex插入则不会创建。 是否可以为仅年份的引文添加超链接?\citeyear\citeyearpar

\documentclass{article}

\usepackage[backend=biber,natbib=true, style=authoryear-comp]{biblatex}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@article{ref1,
  author = {Doe, John D.},
  title = {Hyperrefs to citations},
  journaltitle = {Links Everywhere},
  volume = {1},
  date = {2000},
  pages = {1--2},
}

\end{filecontents}

\addbibresource{\jobname.bib}

\usepackage{hyperref}

\begin{document}

citet -- \citet{ref1}

citeyear -- \citeyear{ref1}

citeyearpar -- \citeyearpar{ref1}

\printbibliography

\end{document}

在此处输入图片描述

答案1

必须重新定义指示使用超链接的引用命令,即:

\DeclareCiteCommand{\citeyear}
    {}
    {\bibhyperref{\printdate}}
    {\multicitedelim}
    {}

\DeclareCiteCommand{\citeyearpar}
    {}
    {\mkbibparens{\bibhyperref{\printdate}}}
    {\multicitedelim}
    {}

答案2

另一种方法是使用\cite*所有作者年份和作者标题样式提供的命令。请参阅手动的,第 3.7.2 节“样式特定命令”。

答案3

改进 Guido 的答案,这些功能与他的类似,但有以下修改:1)使用\printfield{year}而不是\printdate仅打印年份,2)使用字段extrayear以便它们处理同一作者在同一年出版的多本出版物(例如 1997a、1997b、1997c),以及 3)他们可以使用 prenote 和 postnote,以便可以继续使用页码,例如\citeyearpar[3--4]{bib_reference_id}。功能如下:

\DeclareCiteCommand{\citeyear}
    {\usebibmacro{prenote}}
    {\bibhyperref{\printfield{year}}\bibhyperref{\printfield{extrayear}}}
    {\multicitedelim}
    {\usebibmacro{cite:postnote}}

\DeclareCiteCommand{\citeyearpar}[\mkbibparens]
    {\usebibmacro{prenote}}
    {\bibhyperref{\printfield{year}}\bibhyperref{\printfield{extrayear}}}
    {\multicitedelim}
    {\usebibmacro{cite:postnote}}

编辑:以上代码适用于style=authoryear-ibid。如果使用style=authoryear,请将 的两个实例都替换cite:postnotepostnote

相关内容