使用 BibLaTeX(不是 BibTeX),我想在整个参考文献上放置一个链接,而不是单独放置各个部分。此外,我想删除日期和页面之间的句号。
一个最小的例子如下:
\documentclass{article}
\usepackage[backend=biber, doi=false, hyperref=true]{biblatex}
\bibliography{references}
\usepackage{hyperref}
\usepackage{filecontents}
\begin{filecontents}{references.bib}
@article{ref,
author = {Surname, Initials},
title = {Title},
doi = {11.1111/111111},
journal = {Journal Name},
pages = {11},
volume = {1},
year = {2018}
}
\end{filecontents}
\begin{document}
Reference~\cite{ref}.
\printbibliography
\end{document}
这应该给出相当于
Initials Surname. "Title". In: \href{http://dx.doi.org/11.1111/111111}{Journal Name \textbf{1} (2018) 11}.
我目前能够使用以下方式分别将链接放在期刊、卷、年份和日期上
\newbibmacro{string+doi}[1]{\iffieldundef{doi}{#1}{\href{http://dx.doi.org/\thefield{doi}}{#1}}}
\DeclareFieldFormat[article]{volume}{\usebibmacro{string+doi}{\textbf{#1}}\space}
\DeclareFieldFormat[article]{journaltitle}{\usebibmacro{string+doi}{#1}}
\DeclareFieldFormat[article]{date}{\usebibmacro{string+doi}{#1}}
\DeclareFieldFormat[article]{pages}{\usebibmacro{string+doi}{#1}}
正如我所说,我希望它出现在整个参考资料中,如上所示。此外,我无法成功删除日期和页面之间的逗号,就像其他此类情况一样(此处进行了广泛讨论)——可能我只是缺少适当的 bibmacro?
答案1
这里使用字段格式是不够的,因为这些格式仅限于一个字段的输出。如果您想要一个长超链接,则必须在链接宏中包装多个 bibmacros。不幸的是,这必须在书目驱动程序级别上完成,因为宏journal+issuetitle
不包括页码。在下面的 MWE 中,我们用来xpatch
修改驱动程序。
\documentclass{article}
\usepackage[backend=biber, doi=false, hyperref=true]{biblatex}
\addbibresource{biblatex-examples.bib}
\usepackage{hyperref}
\DeclareFieldFormat{doilink}{\iffieldundef{doi}{#1}{\href{https://doi.org/\thefield{doi}}{#1}}}
\DeclareFieldFormat[article,periodical]{volume}{\mkbibbold{#1}}
\DeclareFieldFormat[article,periodical]{journaltitle}{#1}
\DeclareFieldFormat[article,periodical]{pages}{#1}
\usepackage{xpatch}
\xpatchbibdriver{article}
{\usebibmacro{journal+issuetitle}%
\newunit
\usebibmacro{byeditor+others}%
\newunit
\usebibmacro{note+pages}}
{\printtext[doilink]{%
\usebibmacro{journal+issuetitle}%
\newunit
\usebibmacro{byeditor+others}%
\newunit
\usebibmacro{note+pages}}}
{}{}
\begin{document}
Reference~\cite{sigfridsson}.
\printbibliography
\end{document}