Biblatex 标点符号在作者@article后面

Biblatex 标点符号在作者@article后面

我已经对我的书目风格做了一些改进。但有一件事我搞不清楚。

我想在最后一位作者后面使用冒号@article而不是逗号。这似乎适用于所有其他条目类型。此外,作者后面没有冒号@online

它现在的样子是这样的: 在此处输入图片描述

梅威瑟:

\documentclass[11pt, a4paper]{scrbook}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[left=27.5mm,right=16mm,top=30mm,bottom=30mm]{geometry}

\usepackage{filecontents}
\begin{filecontents}{BA.bib}
@online{polymer2020,
  title = {Polymer},
  author = {{N. N.}},
  journaltitle = {Wikipedia},
  url = {https://de.wikipedia.org/wiki/Polymer},
  urldate = {2020-02-16},
  langid = {german}
}

@thesis{kaddar2010,
  title = {Die generative Fertigung mittels Laser-Sintern: Scanstrategien, Einfl\"usse verschiedener Prozessparameter auf die mechanischen und optischen Eigenschaften beim LS von Thermoplasten und deren  Nachbearbeitungsm\"oglichkeiten},
  author = {Kaddar, Wesam},
  date = {2010},
  institution = {{Universit\"at Duisburg-Essen}},
  location = {{Duisburg}},
  langid = {german},
  type = {Dissertation}
}

@incollection{hans2020,
  title = {Ein {{Qualit\"atsicherungskonzept}}},
  booktitle = {Additive {{Fertigung}} von {{Bauteilen}}},
  author = {Hans, Peter and Werner, Meier},
  editor = {Furman, Bernd and Eder, Max},
  date = {2020},
  publisher = {{Springer}},
  location = {{Berlin}}
}

@article{drummer2010,
  title = {Untersuchung der Materialalterung bei pulverbasierten Schichtbauverfahren},
  author = {Drummer, Dietmar and K\"uhnlein, Florian and Rietzel, Dom and H\"udler, Gerrit},
  date = {2010},
  journaltitle = {RTejournal - Forum f\"ur Rapid Technologie},
  volume = {7},
  langid = {german},
  number = {1}
}
\end{filecontents}

\usepackage[backend=biber, style=ieee, citestyle=numeric, sorting=nyt, autocite=inline, isbn=false, dashed=false, url=false]{biblatex}
\addbibresource{BA.bib}
\DeclareNameAlias{sortname}{family-given}
\DeclareNameAlias{default}{family-given}

\DeclareFieldFormat[book,inbook,incollection,inproceedings]{series}{#1}

\DeclareFieldFormat{editortype}{\mkbibparens{#1}}
\DeclareDelimFormat{editortypedelim}{\addspace}
\DeclareFieldFormat*[online]{title}{\textit{#1}}
\DeclareFieldFormat{url}{\url{#1}}
\DeclareFieldFormat{journaltitle}{#1}
\DeclareFieldFormat[article]{title}{\textit{#1}\addperiod}
\DeclareFieldFormat[thesis]{title}{\textit{#1}\addperiod}

\renewcommand{\mkbibnamefamily}[1]{\textsc{#1}}
\renewcommand{\multinamedelim}{\addsemicolon\space}
\renewcommand{\finalnamedelim}{\addsemicolon\space}
\renewcommand*{\labelnamepunct}{\addcolon\addspace}

\renewbibmacro*{publisher+location+date}{%
\printunit{\addperiod\space}%
\printlist{location}%
\iflistundef{publisher}
{\setunit*{\addcomma\space}}
{\setunit*{\addcolon\space}}%
\printlist{publisher}%
\setunit*{\addcomma\space}%
\usebibmacro{date}%
\newunit}
\DeclareFieldFormat[online]{date}{\mkbibparens{#1}}
\usepackage{xpatch}
\xpatchbibdriver{online}
{\printtext[parens]{\usebibmacro{date}}}
{\usebibmacro{date}}
{}{}

\xpatchbibdriver{online}
{\newunit\newblock
\usebibmacro{url+urldate}}
{\setunit{\addperiod\space}\newblock
\usebibmacro{url+urldate}}
{}{}


\begin{document}

\autocite{polymer2020} \autocite{hans2020} \autocite{kaddar2010} \autocite{drummer2010}

\printbibliography

\end{document}

答案1

biblatex-ieee这里的驱动程序代码有点不一致ieee.bbx

\setunit{\labelnamepunct}\newblock

作者和标题之间。(\labelnamepunct最近被弃用了,现在人们会说\setunit{\printdelim{nametitledelim}}\newblock改为。)但@article驱动程序只有\newunit,而@online驱动程序有\setunit{\adddot\addspace}%改为。我理解@online驱动程序需要有所不同,因为 IEEE 希望在线文档使用句号,而其他所有类型都使用逗号。但我不知道为什么@article不同。

您必须修补驱动程序@article@online在此处获取冒号。

\xpatchbibdriver{article}
  {\usebibmacro{author/translator+others}%
   \newunit}
  {\usebibmacro{author/translator+others}%
   \printunit{\labelnamepunct}\newblock}
  {}{}

补丁@online可以与已有的补丁结合使用

\xpatchbibdriver{online}
  {\printtext[parens]{\usebibmacro{date}}%
   \setunit{\adddot\addspace}}
  {\usebibmacro{date}%
   \printunit{\labelnamepunct}\newblock}
  {}{}

请注意,通常我不会使用\labelnamepunct。现代方法是\printdelim{nametitledelim},但由于ieee.bbx仍然使用\labelnamepunct弃用的命令,因此在这里更容易。

在全

\documentclass[11pt, a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}


\usepackage[backend=biber, bibstyle=ieee, citestyle=numeric, sorting=nyt,
  autocite=inline,
   dashed=false, isbn=false,url=false]{biblatex}

\DeclareNameAlias{default}{family-given}
\DeclareNameAlias{sortname}{default}

\renewcommand{\mkbibnamefamily}[1]{\textsc{#1}}

\DeclareDelimFormat{multinamedelim}{\addsemicolon\space}
\DeclareDelimAlias{finalnamedelim}{multinamedelim}

\renewcommand*{\labelnamepunct}{\addcolon\addspace}


\DeclareFieldFormat{editortype}{\mkbibparens{#1}}
\DeclareDelimFormat{editortypedelim}{\addspace}

\DeclareFieldFormat*[online]{title}{\textit{#1}}
\DeclareFieldFormat{url}{\url{#1}}
\DeclareFieldFormat{journaltitle}{#1}
\DeclareFieldFormat[article]{title}{\textit{#1}\addperiod}
\DeclareFieldFormat[thesis]{title}{\textit{#1}\addperiod}

\DeclareFieldFormat[book,inbook,incollection,inproceedings]{series}{#1}


\renewbibmacro*{publisher+location+date}{%
  \printunit{\addperiod\space}%
  \printlist{location}%
  \iflistundef{publisher}
    {\setunit*{\addcomma\space}}
    {\setunit*{\addcolon\space}}%
  \printlist{publisher}%
  \setunit*{\addcomma\space}%
  \usebibmacro{date}%
  \newunit}

\DeclareFieldFormat[online]{date}{\mkbibparens{#1}}

\usepackage{xpatch}
\xpatchbibdriver{article}
  {\usebibmacro{author/translator+others}%
   \newunit}
  {\usebibmacro{author/translator+others}%
   \printunit{\labelnamepunct}\newblock}
  {}{}

\xpatchbibdriver{online}
  {\printtext[parens]{\usebibmacro{date}}%
   \setunit{\adddot\addspace}}
  {\usebibmacro{date}%
   \printunit{\labelnamepunct}\newblock}
  {}{}

\xpatchbibdriver{online}
  {\newunit\newblock
   \usebibmacro{url+urldate}}
  {\setunit{\addperiod\space}\newblock
   \usebibmacro{url+urldate}}
  {}{}


\begin{filecontents}{\jobname.bib}
@online{polymer2020,
  title        = {Polymer},
  author       = {{N.\,N.}},
  journaltitle = {Wikipedia},
  url          = {https://de.wikipedia.org/wiki/Polymer},
  urldate      = {2020-02-16},
  langid       = {ngerman}
}
@thesis{kaddar2010,
  title       = {Die generative Fertigung mittels Laser-Sintern:
                 Scanstrategien, Einflüsse verschiedener Prozessparameter
                 auf die mechanischen und optischen Eigenschaften beim
                 LS von Thermoplasten und deren Nachbearbeitungsmöglichkeiten},
  author      = {Kaddar, Wesam},
  date        = {2010},
  institution = {Universität Duisburg-Essen},
  location    = {Duisburg},
  langid      = {ngerman},
  type        = {Dissertation},
}
@incollection{hans2020,
  title     = {Ein Qualitätsicherungskonzept},
  booktitle = {Additive Fertigung von Bauteilen},
  author    = {Hans, Peter and Werner, Meier},
  editor    = {Furman, Bernd and Eder, Max},
  date      = {2020},
  publisher = {Springer},
  location  = {Berlin},
}
@article{drummer2010,
  title        = {Untersuchung der Materialalterung bei pulverbasierten
                  Schichtbauverfahren},
  author       = {Drummer, Dietmar and Kühnlein, Florian and Rietzel, Dom and Hüdler, Gerrit},
  date         = {2010},
  journaltitle = {RTejournal - Forum für Rapid Technologie},
  volume       = {7},
  langid       = {ngerman},
  number       = {1},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\autocite{polymer2020,hans2020,kaddar2010,drummer2010}

\printbibliography
\end{document}

带冒号的参考书目。


我想重复一下评论中我的看法。

您正在申请很多IEEE 样式的修改,所以我想知道是否更容易从不同的样式开始,例如,numeric或者甚至ext-numericbiblatex-ieee是专门为复制 IEEE 样式而编写的,可定制性是次要的重点(最好)。另一方面,标准样式以及我的样式biblatex-ext编写捆绑包时充分考虑了可定制性。

相关内容