von MoeWe » Fr 20. Nov 2020, 09:20
Gemischte Zeichensetzung ist mit biblatex nicht immer ganz einfach. Die beste Lösung hängt von den genauen Vorstellungen ab, gerade wenn noch zusätzliche Felder eine Rolle spielen können.
Normalerweise fügt biblatex zwischen den meisten Feldern einfach ein \newunit ein, das letztendlich \newunitpunct als Interpunktion ausgibt. Standardmäßig ist \newunitpunct \addperiod\space deswegen bekommst Du zwischen den meisten Elementen im Literaturverzeichnis einen Punkt. Wenn Du \newunitpunct mit \renewcommand*{\newunitpunct}{\addcomma\space} zu einem Komma umdefinierst, bekommst Du an den meisten Stellen jetzt Kommas.
Um Doppelzeichensetzung zu vermeiden, arbeitet biblatex mit einem punctuation buffer. Dabei wird die Zeichensetzung nicht direkt vorgenommen, sondern das gewünschte Zeichen wird mit \setunit in einem Puffer zwischengespeichert, der erst ausgegeben wird, wenn das nächste Feld ausgegeben wird. Der Puffer kann immer nur ein Zeichen beinhalten und wird von nachfolgenden Zeichensetzungsbefehlen überschrieben. Das führt dazu, dass biblatex ein natürliches Konzept von Zeichensetzung vor einem Feld hat, aber kein so natürliches Konzept von Zeichensetzung nach einem Feld (wenn zwischendurch Felder fehlen können). Es gibt ein paar Befehle wie \setunit* und \priuntunit, die dabei behilflich sein können, lokal so etwas wie Zeichensetzung nach einem Feld nachzubilden. Aufgrund der modularen Struktur der biblatex-Ausgabe ist es nicht ganz trivial, mit diesen Mitteln über weitere Strecken hinweg denselben Effekt zu erreichen.
Unter der Annahme, dass Du wirklich nur ein Komma nach der Auflage möchtest, auch wenn noch viel mehr Informationen in einem Eintrag vorhanden sind, könnte z.B. das Folgende funktionieren. Mit biblatex-ext können wir die Auflage direkt vor dem Verlag positionieren. Dann können wir \setunit* nutzen, um lokal Zeichensetzung nach einem Feld zu approximieren (neben den entsprechenden Abschnitten in der Dokumentation gibt es auch bei TeX.SX einige Beiträge zu \setunit und Co. https://tex.stackexchange.com/q/538920/35864, https://tex.stackexchange.com/q/409148/35864).
\documentclass[12pt,ngerman]{scrartcl}
\usepackage{babel}
\usepackage[style=ext-authoryear, firstinits=true, uniquename=false]{biblatex}
\renewbibmacro*{edition}{}
\renewbibmacro*{pubinstorg+location+date}[1]{%
\printfield{edition}%
\setunit*{\addcomma\space}%
\printlist{location}%
\iflistundef{#1}
{\setunit*{\locdatedelim}}
{\setunit*{\locpubdelim}}%
\printlist{#1}%
\setunit*{\pubdatedelim}%
\usebibmacro{date}%
\newunit}
\begin{filecontents}{\jobname.bib}
@book{Nachname1,
author = {Vorname1 Nachname1},
date = {2016},
title = {Ein interessanter Titel},
edition = {6},
publisher = {Sonnenverlag},
address = {Freiburg},
}
@book{Nachname2,
author = {Vorname2 Nachname2},
date = {2020},
title = {Ein noch interessanterer Titel},
edition = {5th edition},
publisher = {Mondverlag},
address = {Stockholm},
}
@book{elk,
author = {Anne Elk},
editor = {Annie Hacker},
title = {A Theory on Brontosauruses},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
url = {https://example.edu/~elk/bronto.pdf},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
Zitat 1: \cite{Nachname1}
Zitat 2: \cite{Nachname2}
\cite{elk}
\printbibliography
\end{document}
Wenn Dein eigentliches Ziel aber gar nicht ist, nur nach edition ein Komma zu bekommen, sondern die Idee eigentlich war, überall Kommas zu haben, außer nach Name und Jahr und nach dem Titel, dann müsste das anders aussehen. Den Unterschied kann man beispielsweise sehen, wenn man Werke zitiert, die außer einer Autorin noch eine Herausgeberin haben. Oder eine URL.
Gemischte Zeichensetzung ist mit `biblatex` nicht immer ganz einfach. Die beste Lösung hängt von den genauen Vorstellungen ab, gerade wenn noch zusätzliche Felder eine Rolle spielen können.
Normalerweise fügt `biblatex` zwischen den meisten Feldern einfach ein `\newunit` ein, das letztendlich `\newunitpunct` als Interpunktion ausgibt. Standardmäßig ist `\newunitpunct` `\addperiod\space` deswegen bekommst Du zwischen den meisten Elementen im Literaturverzeichnis einen Punkt. Wenn Du `\newunitpunct` mit `\renewcommand*{\newunitpunct}{\addcomma\space}` zu einem Komma umdefinierst, bekommst Du an den meisten Stellen jetzt Kommas.
Um Doppelzeichensetzung zu vermeiden, arbeitet `biblatex` mit einem *punctuation buffer*. Dabei wird die Zeichensetzung nicht direkt vorgenommen, sondern das gewünschte Zeichen wird mit `\setunit` in einem Puffer zwischengespeichert, der erst ausgegeben wird, wenn das nächste Feld ausgegeben wird. Der Puffer kann immer nur ein Zeichen beinhalten und wird von nachfolgenden Zeichensetzungsbefehlen überschrieben. Das führt dazu, dass `biblatex` ein natürliches Konzept von Zeichensetzung *vor* einem Feld hat, aber kein so natürliches Konzept von Zeichensetzung *nach* einem Feld (wenn zwischendurch Felder fehlen können). Es gibt ein paar Befehle wie `\setunit*` und `\priuntunit`, die dabei behilflich sein können, lokal so etwas wie Zeichensetzung nach einem Feld nachzubilden. Aufgrund der modularen Struktur der `biblatex`-Ausgabe ist es nicht ganz trivial, mit diesen Mitteln über weitere Strecken hinweg denselben Effekt zu erreichen.
Unter der Annahme, dass Du wirklich nur ein Komma nach der Auflage möchtest, auch wenn noch viel mehr Informationen in einem Eintrag vorhanden sind, könnte z.B. das Folgende funktionieren. Mit `biblatex-ext` können wir die Auflage direkt vor dem Verlag positionieren. Dann können wir `\setunit*` nutzen, um lokal Zeichensetzung *nach* einem Feld zu approximieren (neben den entsprechenden Abschnitten in der Dokumentation gibt es auch bei TeX.SX einige Beiträge zu `\setunit` und Co. https://tex.stackexchange.com/q/538920/35864, https://tex.stackexchange.com/q/409148/35864).
```latex
\documentclass[12pt,ngerman]{scrartcl}
\usepackage{babel}
\usepackage[style=ext-authoryear, firstinits=true, uniquename=false]{biblatex}
\renewbibmacro*{edition}{}
\renewbibmacro*{pubinstorg+location+date}[1]{%
\printfield{edition}%
\setunit*{\addcomma\space}%
\printlist{location}%
\iflistundef{#1}
{\setunit*{\locdatedelim}}
{\setunit*{\locpubdelim}}%
\printlist{#1}%
\setunit*{\pubdatedelim}%
\usebibmacro{date}%
\newunit}
\begin{filecontents}{\jobname.bib}
@book{Nachname1,
author = {Vorname1 Nachname1},
date = {2016},
title = {Ein interessanter Titel},
edition = {6},
publisher = {Sonnenverlag},
address = {Freiburg},
}
@book{Nachname2,
author = {Vorname2 Nachname2},
date = {2020},
title = {Ein noch interessanterer Titel},
edition = {5th edition},
publisher = {Mondverlag},
address = {Stockholm},
}
@book{elk,
author = {Anne Elk},
editor = {Annie Hacker},
title = {A Theory on Brontosauruses},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
url = {https://example.edu/~elk/bronto.pdf},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
Zitat 1: \cite{Nachname1}
Zitat 2: \cite{Nachname2}
\cite{elk}
\printbibliography
\end{document}
```
Wenn Dein eigentliches Ziel aber gar nicht ist, nur nach `edition` ein Komma zu bekommen, sondern die Idee eigentlich war, überall Kommas zu haben, außer nach Name und Jahr und nach dem Titel, dann müsste das anders aussehen. Den Unterschied kann man beispielsweise sehen, wenn man Werke zitiert, die außer einer Autorin noch eine Herausgeberin haben. Oder eine URL.