我目前正在自定义 authoryear biblatex 样式,但似乎还有一些事情我搞不清楚:我希望打印出编辑者列表,然后在括号中显示“eds”。因此我创建了一个自定义宏\usebibmacro{editors+parens}
:
\newbibmacro*{editors+parens}{%
\ifnameundef{editor}
{}
{\newunit\newblock%
\printnames{editor}%
\setunit{\addspace}%
\mkbibparens{\bibstring{editors}}}}
我调整了驱动程序以incollection
使用该宏:
\DeclareBibliographyDriver{incollection}{%
...
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{in:}%
\usebibmacro{editors+parens}
\setunit{\addspace}\newblock
\usebibmacro{maintitle+booktitle}%
\newunit\newblock
\printfield{edition}%
...
\usebibmacro{finentry}}
但最终的结果是这样的:
因此,一方面mkbibparens
似乎插入了一个额外的空格,其次,编辑器和第一个左括号之间缺少一个空格。
有人能帮我解决这个问题吗?最后应该是这样的<List of Editors><space>(eds.)<space><Title>
祝一切顺利,David Becher
答案1
biblatex
有一个非常奇特的机制来正确使用标点符号。由于这种机制,您几乎无法在宏中直接使用标点符号命令。标点符号只能通过\setunit
、\printunit
和 朋友\DeclareFieldFormat
或 来添加\printtext
。另请参阅 §4.11.7使用标点符号追踪器的biblatex
文档,尤其是第 4.11.7.2 条常见错误,第 243-244 页。
在你的情况下
\DeclareFieldFormat{editortype}{\mkbibparens{#1}}
应该足够了。如果您使用标准宏editor+others
而不是您的editors+parens
.