如何在参考文献中将 (year) 后面的冒号改为“.”?@misc 无法做到这一点

如何在参考文献中将 (year) 后面的冒号改为“.”?@misc 无法做到这一点

我试图在 (year) 后面添加一个冒号。这个:\renewcommand{\labelnamepunct}{\addcolon\space}有效,但对@misc我的 bib 文件中的条目无效。我尝试了所有方法,但 (year) 后面的这个点@misc仍然存在。我希望有人能帮助我。

\documentclass[a4paper, 12pt]{article}
\usepackage[a4paper, top=2cm, bottom=3cm, left=3cm, right=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{csquotes}
\usepackage[german]{babel}
\usepackage{mathptmx}
\usepackage[T1]{fontenc}
\usepackage[onehalfspacing]{setspace}
\usepackage[style=authoryear, backend=biber, maxcitenames=3, maxbibnames=10, sortcites = true, sorting=nty]{biblatex}
\usepackage{xpatch}
\renewcommand{\labelnamepunct}{\addcolon\space}
\DefineBibliographyStrings{german}{andothers = {{et\,al\adddot}}, urlseen = { letzte \"Uberpr\"ufung am}}
\DeclareNameAlias{sortname}{family-given}
\DeclareNameAlias{default}{family-given}
\DeclareFieldFormat[article]{volume}{Vol. #1,\space}
\DeclareFieldFormat[article]{number}{Issue #1}
\DeclareFieldFormat[article]{title}{{\textit{#1},}}
\DeclareFieldFormat[misc]{url}{{\textit{#1}}}
\DeclareFieldFormat[misc]{urldate}{\addcomma\space\bibstring{urlseen}\space#1}
\addbibresource{literatur.bib}
\begin{document}
    \title{ICOs}
    \author{Constantin Budin}
    \maketitle
    \tableofcontents
    \input{Einleitung.tex}
    \printbibliography
\end{document}

我的.bib:

@article{NowWit,
    author = "Nowiński, Witold and Kozma, Miklós",
    title = "How Can Blockchain Technology Disrupt the Existing Business Models?",
    journal = "Entrepreneurial Business and Economics Review",
    year = "2017",
    pages = "173--188",
    volume = "5",
    number = "3",
}

@misc{DeloitteBlock,
    author = "Deloitte",
    year = "2016",
    url = "https://www2.deloitte.com/content/dam/Deloitte/ch/Documents/innovation/ch-en-innovation-deloitte-what-is-blockchain-2016.pdf",
    urldate = "2017-12-26",
    entrysubtype = "inet"
}

罪犯:

the offender

答案1

\renewcommand{\labelnamepunct}{\addcolon\space}

是在年份后获取冒号的正确代码。对于较新版本的biblatex我建议

\DeclareDelimFormat[bib,biblist]{nametitledelim}{\addcolon\space}

但两个版本都做同样的事情。

这里的问题不在于您有一个@misc条目,问题在于您的条目填充稀疏。

biblatex要理解这里发生了什么,我们需要了解标点符号跟踪器的概念。请参阅§4.11.7使用标点符号追踪器在里面biblatex文档

其要点是biblatex不直接打印标点符号(在 中\setunit)。而是将标点符号添加到标点符号缓冲区。然后,只有当 打印下一个文本时,才会打印缓冲区的内容biblatex。这可以避免在缺少字段时出现虚假的双重标点符号。标点符号缓冲区将被后续对 的调用覆盖\setunit。因此,\setunit{\addcomma\space}\setunit{\addperiod\space}标点符号缓冲区将包含\addperiod\space。大多数标点符号是在 中设置的\setunit。还有\printunit该命令将标点符号添加到缓冲区中,以后无法覆盖,因此\printunit{\addcomma\space}\setunit{\addperiod\space}将留\addcomma\space在标点符号缓冲区中。

bibdriver 大致包含以下命令序列来打印作者和标题。

\usebibmacro{author}%
\setunit{\printdelim{nametitledelim}}\newblock
\usebibmacro{title}%
\newunit

在您的示例中DeloitteBlock没有标题。所以会发生以下情况。作者被打印(连同年份),然后\printdelim{nametitledelim}添加到标点符号缓冲区。然后biblatex尝试打印标题,但没有什么可做的,所以什么都没有打印,特别是标点符号缓冲区保持原样,没有打印。然后\newunit,除其他事项外\setunit{\newunitpunct},覆盖标点符号缓冲区:它现在包含\newunitpunct\printdelim{nametitledelim}消失了。

因此,如果使用不同的标点符号,就会在稀疏的条目中出现一个已知问题。另请参阅https://github.com/plk/biblatex/issues/554

最简单的方法是提供DeloitteBlock标题。几乎所有条目都应该有一个标题,在大多数情况下应该很容易确定。What is a blockchain?在这种情况下似乎有效。

更复杂的技术方案是设置\printdelim{nametitledelim}使得\printunit标点符号缓冲区不能被覆盖。

\usepackage{xpatch}
\makeatletter
\def\do#1{%
  \xpatchbibdriver{#1}
    {\setunit{\printdelim{nametitledelim}}}
    {\printunit{\printdelim{nametitledelim}}}
    {}{}}
\abx@doentrytypes
\makeatother

这可能会对以后稀疏条目中的其他标点符号产生不必要的连锁反应。

相关内容