BibLaTeX: Wie kann ich das Komma nach "Schule" im @ These-Eintrag entfernen?

Aug 15 2020

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 numericStil 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

3 AlanMunn Aug 15 2020 at 22:37

Sie können \nopunctkurz vor dem \newunitvon Ihrem neu definierten institution+location+dateMakro hinzufügen . Ich habe die Dokumentklasse Ihres Beispiels in geändert article. Trotz ihres Namens sollte die minimalDokumentklasse nicht für MWEs verwendet werden, da sie tatsächlich zu minimal ist. Ich habe auch das filecontentsPaket 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}

2 moewe Aug 16 2020 at 10:45

Die Antwort auf Ändern der Reihenfolge der Seiten und des Jahres in Biblatex , dessen Code Sie verwenden, verwendet ziemlich stumpfe Instrumente, um den dateDruck 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+datedas Datum nicht tatsächlich druckt, \setunitsteuert das Vorher nicht die Interpunktion vor dem Datum. Das Datum wird nur von date:printin gedruckt. Zu chapter+pagesdiesem Zeitpunkt haben andere \setunitBefehle dem Puffer andere Interpunktion hinzugefügt.

\nopunctSetzt 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 \nopunctes 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.