BibLaTeX: Wie kann ich das Komma nach "Schule" im @ These-Eintrag entfernen?
Ich möchte das Komma zwischen dem Feld "Schule" und dem Datum (Jahr) in einem @ These-Bibliographieeintrag entfernen:
Hier ist mein minimaler Beispielcode:
\documentclass{minimal}
\usepackage{ngerman}
\usepackage[backend = biber, style = numeric]{biblatex}
%%%%%%%% https://tex.stackexchange.com/a/492917
\newtoggle{bbx:datemissing}
\renewbibmacro*{date}{\toggletrue{bbx:datemissing}%}
\renewbibmacro{volume+number+eid}{%
\printfield{volume}%
\setunit{\addcomma\space}%
\printfield{eid}}
\renewbibmacro*{issue+date}{%
\toggletrue{bbx:datemissing}%
\iffieldundef{issue}{}{
\printtext[parens]{%
\printfield{issue}}}%
\newunit}
\newbibmacro*{date:print}{%
\togglefalse{bbx:datemissing}%
\printdate}
\renewbibmacro*{chapter+pages}{%
\printfield{chapter}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\newunit
\usebibmacro{date:print}%
\newunit}
\renewbibmacro*{note+pages}{%
\printfield{note}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\newunit
\usebibmacro{date:print}%
\newunit}
%%%%%%%%
%%% This is what I came up with
\renewbibmacro{institution+location+date}{%
\printlist{location}%
\iflistundef{institution}{%
\setunit*{\space}%
}{%
\setunit*{\addcolon\space}%
}%
\printlist{institution}%
\setunit*{\space}%
\usebibmacro{date}%
\newunit%
}
\usepackage{filecontents}
\begin{filecontents*}{lit.bib}
@thesis {mythesis,
author = {Me, I.},
school = {University},
title = {Sometitle},
type = {Phd thesis},
year = {123}
}
\end{filecontents*}
\addbibresource{lit.bib}
\begin{document}
\printbibliography
\end{document}
\nocite{*}
Ich habe es bereits versucht \renewbibmacro{institution+location+date}{...}
, aber das hat nicht funktioniert. Ich bin ziemlich neu bei BibLaTeX.
Mein Gedanke war, dass der numeric
Stil die Eintragstypen von verwendet standard
, von wo aus ich das Makro kopiert und alle Kommas entfernt habe. Dies funktionierte jedoch eindeutig nicht. Wie kann ich dieses Komma entfernen?
Antworten
Sie können \nopunct
kurz vor dem \newunit
von Ihrem neu definierten institution+location+date
Makro hinzufügen . Ich habe die Dokumentklasse Ihres Beispiels in geändert article
. Trotz ihres Namens sollte die minimal
Dokumentklasse nicht für MWEs verwendet werden, da sie tatsächlich zu minimal ist. Ich habe auch das filecontents
Paket entfernt, das jetzt Teil des LaTeX-Kernels ist.
\documentclass{article}
\usepackage{ngerman}
\usepackage[backend = biber, style = numeric]{biblatex}
\newtoggle{bbx:datemissing}
\renewbibmacro*{date}{\toggletrue{bbx:datemissing}}
\renewbibmacro{volume+number+eid}{%
\printfield{volume}%
\setunit{\addcomma\space}%
\printfield{eid}}
\renewbibmacro*{issue+date}{%
\toggletrue{bbx:datemissing}%
\iffieldundef{issue}{}{
\printtext[parens]{%
\printfield{issue}}}%
\newunit}
\newbibmacro*{date:print}{%
\togglefalse{bbx:datemissing}%
\printdate}
\renewbibmacro*{chapter+pages}{%
\printfield{chapter}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\newunit
\usebibmacro{date:print}%
\newunit}
\renewbibmacro*{note+pages}{%
\printfield{note}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\newunit
\usebibmacro{date:print}%
\newunit}
%%% This is what I came up with
\renewbibmacro{institution+location+date}{%
\printlist{location}%
\iflistundef{institution}{%
\setunit*{\space}%
}{%
\setunit*{\space}%
}%
\printlist{institution}%
\setunit*{\space}%
\usebibmacro{date}%
\nopunct\newunit%
}
\begin{filecontents*}[overwrite]{\jobname.bib}
@thesis {mythesis,
author = {Me, I.},
school = {University of Somewhere},
title = {Sometitle},
type = {Phd thesis},
year = {1980}
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
Die Antwort auf Ändern der Reihenfolge der Seiten und des Jahres in Biblatex , dessen Code Sie verwenden, verwendet ziemlich stumpfe Instrumente, um den date
Druck nach zu verschieben pages
. Dies ist möglicherweise nicht in allen Situationen genau das, was Sie wollen oder brauchen.
Hier ist ein etwas komplexeres Setup, bei dem das Datum nur verschoben wird, wenn es pages
(oder ein chapter
) gibt. Dies kann in einigen Situationen zu einer Ausgabe führen, die für Sie etwas besser funktioniert.
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[backend=biber, style=numeric]{biblatex}
\newtoggle{bbx:datesuppressed}
\renewbibmacro*{date}{%
\ifboolexpr{
test {\iffieldundef{pages}}
and test {\iffieldundef{chapter}}}
{\printdate}
{\toggletrue{bbx:datesuppressed}}}
\renewbibmacro{volume+number+eid}{%
\printfield{volume}%
\setunit{\addcomma\space}%
\printfield{eid}}
\renewbibmacro*{issue+date}{%
\toggletrue{bbx:datesuppressed}%
\iffieldundef{issue}
{}
{\printtext[parens]{%
\printfield{issue}}}%
\newunit}
\newbibmacro*{date:print}{%
\iftoggle{bbx:datesuppressed}
{\togglefalse{bbx:datesuppressed}%
\printdate}
{}}
\renewbibmacro*{chapter+pages}{%
\printfield{chapter}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\newunit
\usebibmacro{date:print}%
\newunit}
\renewbibmacro*{note+pages}{%
\printfield{note}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\newunit
\usebibmacro{date:print}%
\newunit}
\renewbibmacro{institution+location+date}{%
\printlist{location}%
\iflistundef{institution}
{\setunit*{\space}}
{\setunit*{\addcolon\space}}%
\printlist{institution}%
\setunit*{\space}%
\usebibmacro{date}%
\newunit
}
\begin{filecontents*}{\jobname.bib}
@phdthesis{mythesis,
author = {Me, I.},
school = {University},
title = {Sometitle},
year = {123},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
\nocite{mythesis,sigfridsson,westfahl:space}
\printbibliography
\end{document}
Wie Alan in den Kommentaren unter seiner Antwort erklärte biblatex
, ist die Interpunktionsbehandlung asynchron: Die Interpunktion wird in einem Puffer gespeichert und nur gedruckt, wenn sie benötigt wird (dh wenn der nächste \print...
Befehl tatsächlich etwas druckt). Da im Code in der Frage das \usebibmacro{date}
In institution+location+date
das Datum nicht tatsächlich druckt, \setunit
steuert das Vorher nicht die Interpunktion vor dem Datum. Das Datum wird nur von date:print
in gedruckt. Zu chapter+pages
diesem Zeitpunkt haben andere \setunit
Befehle dem Puffer andere Interpunktion hinzugefügt.
\nopunct
Setzt eine permanente Markierung, um keine Interpunktion zu drucken, bis neuer Inhalt / Text durch einen \print...
Befehl gedruckt wird . In diesem Fall hilft es, die unerwünschte Zeit zu unterdrücken. Da \nopunct
es innerhalb und außerhalb des Interpunktions-Trackers verwendet werden kann, ist es ein praktisches Werkzeug, um die Interpunktion zu optimieren, aber ich versuche im Allgemeinen, sie zu vermeiden und bevorzuge Lösungen, die sie nicht verwenden, da sie Effekte haben können, die über das Gewünschte hinausgehen.