在 BibLaTeX 中将字段格式添加到前面/后面

在 BibLaTeX 中将字段格式添加到前面/后面

考虑eprint:arxiv。它在 中的最初定义biblatex.def为:

\DeclareFieldFormat{eprint:arxiv}{%
  arXiv\addcolon\space
  \ifhyperref
    {\href{http://arxiv.org/\abx@arxivpath/#1}{%
       \nolinkurl{#1}%
       \iffieldundef{eprintclass}
         {}
         {\addspace\texttt{\mkbibbrackets{\thefield{eprintclass}}}}}}
    {\nolinkurl{#1}
     \iffieldundef{eprintclass}
       {}
       {\addspace\texttt{\mkbibbrackets{\thefield{eprintclass}}}}}}

但假设我希望所有 arXiv 链接都显示为红色,那么我需要:

\DeclareFieldFormat*{eprint:arxiv}{{% Note the extra brace
  \color{red}%
  arXiv\addcolon\space
  \ifhyperref
    {\href{http://arxiv.org/\abx@arxivpath/#1}{%
       \nolinkurl{#1}%
       \iffieldundef{eprintclass}
         {}
         {\addspace\texttt{\mkbibbrackets{\thefield{eprintclass}}}}}}
    {\nolinkurl{#1}
     \iffieldundef{eprintclass}
       {}
       {\addspace\texttt{\mkbibbrackets{\thefield{eprintclass}}}}}}}

然而,问题在于,这将覆盖eprint:arxiv由其他样式引入的对字段格式的任何修改。

有没有办法以与样式无关的方式修改字段格式?显然,这不会(也不应该)修改样式的现有输出,而只是将其包装起来(因此,我理解如果样式已经有用于{\color{blue}...}其 arXiv 链接的,那么用 包装它{\color{red}...}不会产生任何效果)

我认为\savefieldformat\restorefieldformat命令可能会有所帮助,但现在看来并非如此,而且我在文档中找不到任何其他可能有帮助的内容。

另外,如果有这样的功能,可以\AddToFieldFormat[<entrytype...>]{<field>}{<code>}修改eprint:arxiv

\AddToField{eprint:arxiv}{{\color{red}#1}}

并且其中#1是按先前的书目样式输出的。

答案1

埃格尔xpatch包似乎是可行的方法。除其他外,它还提供了\xpretofieldformat将代码添加到字段定义中

您只需

\xpretofieldformat{eprint:arxiv}{\color{red}}{}{}

平均能量损失

\documentclass{article}
\usepackage[style=verbose,backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\usepackage{xcolor}

\usepackage{xpatch}
\xpretofieldformat{eprint:arxiv}{\color{red}}{}{}

\begin{document}
\nocite{baez/article,itzhaki,wassenberg}
\printbibliography
\end{document}

相关内容