按照另一个问题的答案我删除了书名末尾的标点符号,如下所示:
\DeclareFieldFormat[article]{title}{#1\addcomma}
\DeclareFieldFormat[book]{title}{\textit{#1}\nopunct}
这也会删除书名和版本之间的逗号,但我需要书名和版本之间的逗号。有没有办法在特定情况下恢复逗号?
梅威瑟:
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\addbibresource{\jobname.bib}
\begin{filecontents}{\jobname.bib}
@book{crut1997,
Address = {Cambridge},
Author = {Alan Cruttenden},
Edition = {2},
Publisher = {Cambridge University Press},
Title = {Intonation},
Year = 1997}
\end{filecontents}
\DeclareFieldFormat[article]{title}{#1\addcomma}
\DeclareFieldFormat[book]{title}{\textit{#1}\nopunct}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
答案1
在我看来,你只需要在出版商、地点和日期周围的括号前删除标点符号即可。可以使用
\renewbibmacro*{publisher+location+date}{%
\setunit{\addspace}%
\printtext[parens]{%
\printlist{location}%
\iflistundef{publisher}
{\setunit*{\addcomma\space}}
{\setunit*{\addcolon\space}}%
\printlist{publisher}%
\setunit*{\addcomma\space}%
\usebibmacro{date}}%
\newunit}
其中\setunit{\addspace}
和\printtext[parens]{
是该宏标准版本的补充。
由于biblatex
标点符号跟踪器的工作方式,它\setunit{\addspace}
会覆盖它之前的任何其他标点符号,并且我们在括号前留下一个很好的单个空格。
答案2
我将书目信息移至单独的文件。我编辑了我的答案。基本上添加了一个测试来查看版本字段是否已定义。基于此,我们使用句号或逗号。现在它可以在有和没有版本字段的情况下工作。
PS. 当然,如果您在标题和版本之间添加其他字段,则可能会失败。此更改会影响书籍、合集和论文集类型。可以仅限于书籍。
\documentclass{article}
\usepackage[style=authoryear,backend=biber]{biblatex}
\addbibresource{input.bib}
\DeclareFieldFormat[article]{title}{#1\addcomma}
\renewbibmacro*{maintitle+title}{%
\iffieldsequal{maintitle}{title}
{\clearfield{maintitle}%
\clearfield{mainsubtitle}%
\clearfield{maintitleaddon}}
{\iffieldundef{maintitle}
{}
{\usebibmacro{maintitle}%
\newunit\newblock
\iffieldundef{volume}
{}
{\printfield{volume}%
\printfield{part}%
\setunit{\addcolon\space}}}}%
\usebibmacro{title}%
\iffieldundef{edition}% <----- Added this test and next 2 lines
{\nopunct}%
{\addcomma}%
\newunit}
\begin{document}
\cite{crut1997}
\printbibliography
\end{document}