考虑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}