我遇到了两个可能相关的问题:
首先,我想知道是否有可能有一个更好/更干净的解决方案来更改 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*
。这实际上是自然的做法。
至于 和postnote
,multipostnote
您说的对,\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)
然而请注意,这个问题并不像看上去那么简单。PLK 在 Audrey 的一个回答中留下了评论说“嗯,我宁愿认为它应该是默认的。”但这个问题后来在 biblatex 的问题跟踪器中被讨论(https://github.com/plk/biblatex/issues/428),结论似乎是选择只链接年份是有充分理由的,因此该问题被关闭为“无法修复”。
当然,如果您愿意的话,您仍然可以在上面找到一些不错的替代方案。