我试图在 (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"
}
罪犯:
答案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
这可能会对以后稀疏条目中的其他标点符号产生不必要的连锁反应。