更改/清理 biber citestyle 并扩展 hyperref 框

更改/清理 biber citestyle 并扩展 hyperref 框

我遇到了两个可能相关的问题:

首先,我想知道是否有可能有一个更好/更干净的解决方案来更改 biber 的文本内引用样式。我需要的格式是:(LAST_NAME YEAR)(LAST_NAME YEAR: PAGENUMBER)。我通过以下命令(使用\parencite)实现了这一点:

\DeclareFieldFormat{postnote}{#1} %remove p
\DeclareFieldFormat{multipostnote}{#1} %remove pp
\renewcommand*{\nameyeardelim}{\addspace} %just space between name and year
\renewcommand*{\postnotedelim}{\addcolon\space} %colon after year

有没有更简洁/更好的方法来改变 biber 中的引用样式 (可能我的解决方案必然会产生问题?)?natbib 中有\setcitestyle{notesep={: }}\setcitestyle{aysep={}}但我在 biber 中需要它。

其次我想将超链接框更改为整个引用,但目前它只扩展到年份:

在此处输入图片描述

是否有可能(尽管对于多作者引用可能没用)将超链接框扩展到括号​​内的所有内容?

这里是 MWE:

\documentclass{scrartcl}
\usepackage[style=authoryear]{biblatex}
\usepackage{hyperref}

\DeclareFieldFormat{postnote}{#1} %remove p
\DeclareFieldFormat{multipostnote}{#1} %remove pp
\renewcommand*{\nameyeardelim}{\addspace} %just space between name and year
\renewcommand*{\postnotedelim}{\addcolon\space} %colon after year

\addbibresource{biblatex-examples.bib}

\begin{document}

\parencite[1--2]{aristotle:poetics}

\parencite{aristotle:poetics}

\newpage

\printbibliography

\end{document}

干杯!

答案1

由于您有两个问题,我将针对每个问题为您提供不同的建议。

对于第一个,重新定义分隔符。biblatex有两种“类型”的分隔符,一些是上下文相关的,其他则不是。nameyeardelim是那些上下文相关的分隔符之一。biblatex.def你会发现它的定义如下:

\DeclareDelimFormat{nameyeardelim}{\addspace}
\DeclareDelimFormat[textcite]{nameyeardelim}{\addspace}
\DeclareDelimFormat[bib,biblist]{nameyeardelim}{\addspace}

您会注意到,针对每种不同类型的上下文都进行了定义。当然,在这种情况下,定义是相同的。但内置了单独定义的可能性。因此,如果您这样做:

\renewcommand*{\nameyeardelim}{\addspace}

它可以工作,但是分隔符的上下文敏感特性消失了,你可能得到的比你要求的更多。因此,你应该使用适合上下文敏感分隔符的接口biblatex。例如,如果你想要将更改应用于括号:

\DeclareDelimFormat[parencite]{nameyeardelim}{\addspace}

根据具体情况提供上下文。

\postnotedelim相反,是一个“普通”分隔符,定义为biblatex.def

\newcommand*{\postnotedelim}{\addcomma\space}

因此,在这里,用 重新定义它显然没有什么坏处\renewcommand*。这实际上是自然的做法。

至于 和postnotemultipostnote您说的对,\DeclareFieldFormat是完成这项工作的正确工具。但可以做一些改进。它们的原始定义是(在 的最新版本中biblatex):

\DeclareFieldFormat{postnote}{\mkpageprefix[pagination][\mknormrange]{#1}}
\DeclareFieldFormat{multipostnote}{\mkpageprefix[pagination][\mknormrange]{#1}}

\mkpageprefix顾名思义, 确实负责添加“p。”/“pp。”或类似内容,视情况而定。因此,删除它是您想要的。但上述字段格式指令还执行了第二项工作,即\mknormrange,它解析 postnote 参数以获取页面范围并对其进行规范化。因此,使用以下方法可以获得更好的结果:

\DeclareFieldFormat{postnote}{\mknormrange{#1}}
\DeclareFieldFormat{multipostnote}{\mknormrange{#1}}

关于你的第二个问题,即超链接整个引文,而不仅仅是年份,网站上有很多问题和相应的解决方案。例如:

超链接名称与 biblatex 作者年份 (biblatex 1.4b)

超链接名称与 biblatex 作者年份

Biblatex、authoryear-comp 和超链接

然而请注意,这个问题并不像看上去那么简单。PLK 在 Audrey 的一个回答中留下了评论说“嗯,我宁愿认为它应该是默认的。”但这个问题后来在 biblatex 的问题跟踪器中被讨论(https://github.com/plk/biblatex/issues/428),结论似乎是选择只链接年份是有充分理由的,因此该问题被关闭为“无法修复”。

当然,如果您愿意的话,您仍然可以在上面找到一些不错的替代方案。

相关内容