Herausgeberfeld ändern Thema ist als GELÖST markiert

Erstellung eines Literaturverzeichnisses mit BibTeX, Biber, BibLaTeX und Co.


\inftyjc
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Di 19. Mai 2020, 19:16

Herausgeberfeld ändern

Beitrag von \inftyjc »

Hallo liebe Community,

für eine Hausarbeit benötige ich einen bestimmten Stil in der Bibliographie. So schreibt unser Institut für die Angabe von Primärliteratur vor:
Name, Vorname [ggf. Erstpublikation] (Jahr der vorliegenden Ausgabe). Titel des Werks, ggf. Herausgeber (ggf. Reihentitel und -nummer). Ort: Verlag.

Bis jetzt habe ich folgendes:

\documentclass[a4paper, 12pt]{scrreprt}

\usepackage[utf8]{inputenc}
\usepackage[french, ngerman]{babel}
\usepackage[T1]{fontenc}

\usepackage[autostyle]{csquotes}
\usepackage[backend=biber, style=ext-authoryear, innamebeforetitle=true, innameidem=true, maxcitenames=2, dashed=false]{biblatex}

\DefineBibliographyExtras{french}{\restorecommand\mkbibnamefamily}

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

\DeclareDelimFormat[bib]{multinamedelim}{\addspace\slash\space}
\DeclareDelimAlias*[bib]{finalnamedelim}{multinamedelim}

\DeclareFieldFormat{editortype}{\mkbibparens{#1}}
\DeclareDelimFormat{editortypedelim}{\addspace}
\DeclareFieldAlias{translatortype}{editortype}
\DeclareDelimAlias{translatortypedelim}{editortypedelim}

\DeclareDelimFormat[bib]{nametitledelim}{\adddot\space}

\DeclareDelimFormat{multinamedelim}{\slash}
\DeclareDelimFormat{finalnamedelim}{\slash}

\renewbibmacro*{in:}{%
  \setunit{\addcomma\space}%
  \bibstring{in}%
  \printunit{\intitlepunct}}

\renewbibmacro*{volume+number+eid}{%
  \printfield{volume}%
  \setunit*{\addnbthinspace}%
  \printfield{number}%
  \setunit{\addcomma\space}%
  \printfield{eid}}
\DeclareFieldFormat[article]{number}{\mkbibparens{#1}}

\urlstyle{same}
\DeclareFieldFormat{url}{URL: <\url{#1}>}
\DeclareFieldFormat{urldate}{\mkbibbrackets{#1}}

\DefineBibliographyStrings{german}{
  editor  = {Hrsg\adddot},
  editors = {Hrsg\adddot},
}

\DeclareFieldFormat{superedition}{\textsuperscript{#1}}
\makeatletter
\renewbibmacro*{date+extradate}{%
  \iffieldundef{labelyear}
    {}
    {\printtext[\blx@delimcontext labeldate]{%
       \printfield[superedition]{edition}%
       \global\clearfield{edition}%
       \iflabeldateisdate
         {\printdateextra}
         {\printlabeldateextra}}}}
\makeatother

\renewbibmacro*{series+number}{%
  \setunit{\addspace}%
  \iffieldundef{series}
    {}
    {\printtext[parens]{%
       \printfield{series}%
       \setunit*{\sernumdelim}%
       \printfield{number}}}%
  \newunit}

\begin{filecontents}{literatur.bib}
@book{Flaubert2001,
author = {Laget, Thierry},
title = {Madame Bovary},
publisher = {Gallimard},
year = {2001},
editor = {Flaubert, Gustave},
}
\end{filecontents}
\bibliography{literatur}

\begin{document}

\cite{Flaubert2001}
\printbibliography

\end{document}

Nach der Institutsvorgabe sollte das dann so aussehen:
Laget, Thierry [1857] (2001). Madame Bovary, hrsg. von Gustave Flaubert. Paris: Gallimard.
Hat jemand eine Idee, wie ich "[Erstpublikation]" hinzufügen kann und das Feld um den Herausgeber korrekt abändere (mit dem Komma nach dem Titel und einem kleinen hrsg.)?
Letzteres habe ich schon mit DeclareFieldFormat versucht, leider vergebens.


MoeWe
Forum-Meister
Forum-Meister
Beiträge: 622
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Herausgeberfeld ändern

Beitrag von MoeWe »

Die Sache mit dem Jahr der Erstausgabe ist relativ unkompliziert, wenn man weiß, dass das Jahr zu Beginn des Eintrags mit date+extradate gedruckt wird (das hast Du ja eh schon angepasst) und es das Feld origdate gibt. Siehe z.B auch https://tex.stackexchange.com/q/142999/35864,

Die Sache mit dem Komma ist ungleich schwieriger. Das liegt daran, dass biblatex die Zeichensetzung asynchron mit einem Zwischenspeicher erledigt. Die Zeichen werden nicht sofort gesetzt, wenn sie im Code auftauchen, sondern erst in einem Zwischenspeicher abgelegt. Der Zwischenspeicher wird dann ausgegeben und geleert, wenn das nächste Mal echt Text ausgegeben wird. Das macht es sehr einfach, doppelte Zeichensetzung bei fehlenden Feldern zu vermeiden. Da aber nie sicher ist, ob ein bestimmtes Zeichen aus dem Code auch echt ausgegeben wird, kann es schwierig sein, exakt zu bestimmen, was wo gedruckt wird. Der Zwischenspeicher arbeitet so, dass es standardmäßig überschrieben wird. Das bedeutet, dass es recht einfach ist, die Zeichensetzung vor einer bestimmten Stelle exakt zu kontrollieren. Es kann aber schwierig sein, die Zeichensetzung danach zu bestimmen. Siehe auch die Ausführung in viewtopic.php?p=113336#p113336 und die dort verlinkten TeX.SX Fragen mit Beispielen und weiteren Erklärungen.

Eine Möglichkeit, im Beispiel das gewünschte Ergebnis zu bekommen, wäre es, das Standardtrennzeichen auf ein Komma umzustellen und nur vor dem Titel (nametitledelim) und vor dem Verlagsblock (pubinstorg+location+date) einen Punkt zu erzwingen. Ob das für Deinen Stil im Allgemeinen die beste Methodik ist, vermag ich mit nur einem Eintrag als Basis nicht zu sagen.

\documentclass[a4paper, 12pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[french, ngerman]{babel}
\usepackage[T1]{fontenc}

\usepackage[autostyle]{csquotes}
\usepackage[
  backend=biber,
  style=ext-authoryear,
  innamebeforetitle=true,
  innameidem=true,
  maxcitenames=2,
  dashed=false,
]{biblatex}

\DefineBibliographyExtras{french}{\restorecommand\mkbibnamefamily}

\renewcommand*{\newunitpunct}{\addcomma\space}

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

\DeclareDelimFormat[bib]{multinamedelim}{\addspace\slash\space}
\DeclareDelimFormat{multinamedelim}{\slash}
\DeclareDelimAlias*{finalnamedelim}{multinamedelim}

\DeclareFieldFormat{editortype}{\mkbibparens{#1}}
\DeclareDelimFormat{editortypedelim}{\addspace}
\DeclareFieldAlias{translatortype}{editortype}
\DeclareDelimAlias{translatortypedelim}{editortypedelim}

\DeclareDelimFormat[bib]{nametitledelim}{\addperiod\space}

\renewbibmacro*{in:}{%
  \setunit{\addcomma\space}%
  \bibstring{in}%
  \printunit{\intitlepunct}}

\renewbibmacro*{volume+number+eid}{%
  \printfield{volume}%
  \setunit*{\addnbthinspace}%
  \printfield{number}%
  \setunit{\addcomma\space}%
  \printfield{eid}}
\DeclareFieldFormat[article]{number}{\mkbibparens{#1}}

\urlstyle{same}
\DeclareFieldFormat{url}{URL: <\url{#1}>}
\DeclareFieldFormat{urldate}{\mkbibbrackets{#1}}

\DefineBibliographyStrings{german}{
  editor  = {Hrsg\adddot},
  editors = {Hrsg\adddot},
}

\DeclareLabeldate{%
  \field{date}
  \field{year}
  \field{eventdate}
  \field{urldate}
  \literal{nodate}
}

\DeclareFieldFormat{origdate}{\mkbibbrackets{#1}}

\DeclareFieldFormat{superedition}{\textsuperscript{#1}}

\makeatletter
\renewbibmacro*{date+extradate}{%
  \iffieldundef{labelyear}
    {}
    {\printorigdate
     \setunit*{\addspace}%
     \printtext[\blx@delimcontext labeldate]{%
       \printfield[superedition]{edition}%
       \global\clearfield{edition}%
       \iflabeldateisdate
         {\printdateextra}
         {\printlabeldateextra}}}}
\makeatother

\renewbibmacro*{series+number}{%
  \setunit{\addspace}%
  \iffieldundef{series}
    {}
    {\printtext[parens]{%
       \printfield{series}%
       \setunit*{\sernumdelim}%
       \printfield{number}}}%
  \newunit}

\renewbibmacro*{pubinstorg+location+date}[1]{%
  \setunit{\addperiod\space}%
  \printlist{location}%
  \iflistundef{#1}
    {\setunit*{\locdatedelim}}
    {\setunit*{\locpubdelim}}%
  \printlist{#1}%
  \setunit*{\pubdatedelim}%
  \usebibmacro{date}%
  \newunit}

\begin{filecontents}{\jobname.bib}
@book{Flaubert2001,
  author    = {Laget, Thierry},
  title     = {Madame Bovary},
  publisher = {Gallimard},
  year      = {2001},
  location  = {Paris},
  editor    = {Flaubert, Gustave},
  origdate  = {1857},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
Lorem \autocite{Flaubert2001}
\printbibliography
\end{document}

\inftyjc
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Di 19. Mai 2020, 19:16

Re: Herausgeberfeld ändern

Beitrag von \inftyjc »

Vielen Dank MoeWe, ich schätze deine Hilfsbereitschaft sehr!! Ich habe bewusst meine Frage diesmal hier gestellt, damit ich dir im anderen Latex Forum nicht immer solche Umstände machen muss :D

Ich habe vorhin noch etwas weiter recherchiert und auch eine Lösung gefunden, die zwar aufwendiger ist als das, was du vorschlägst, aber es hat ebenfalls geklappt:

\documentclass[a4paper, 12pt]{scrreprt}

\usepackage[utf8]{inputenc}
\usepackage[french, ngerman]{babel}
\usepackage[T1]{fontenc}

\usepackage[autostyle]{csquotes}
\usepackage[backend=biber, style=ext-authoryear, innamebeforetitle=true, innameidem=true, maxcitenames=2, dashed=false]{biblatex}

\DefineBibliographyExtras{french}{\restorecommand\mkbibnamefamily}

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

\DeclareDelimFormat[bib]{multinamedelim}{\addspace\slash\space}
\DeclareDelimAlias*[bib]{finalnamedelim}{multinamedelim}

\DeclareFieldFormat{editortype}{\mkbibparens{#1}}
\DeclareDelimFormat{editortypedelim}{\addspace}
\DeclareFieldAlias{translatortype}{editortype}
\DeclareDelimAlias{translatortypedelim}{editortypedelim}

\DeclareDelimFormat[bib]{nametitledelim}{\adddot\space}

\DeclareDelimFormat{multinamedelim}{\slash}
\DeclareDelimFormat{finalnamedelim}{\slash}

\renewbibmacro*{in:}{%
  \setunit{\addcomma\space}%
  \bibstring{in}%
  \printunit{\intitlepunct}}

\renewbibmacro*{volume+number+eid}{%
  \printfield{volume}%
  \setunit*{\addnbthinspace}%
  \printfield{number}%
  \setunit{\addcomma\space}%
  \printfield{eid}}
\DeclareFieldFormat[article]{number}{\mkbibparens{#1}}

\urlstyle{same}
\DeclareFieldFormat{url}{URL: <\url{#1}>}
\DeclareFieldFormat{urldate}{\mkbibbrackets{#1}}

\DefineBibliographyStrings{german}{
  editor  = {Hrsg\adddot},
  editors = {Hrsg\adddot},
}

\DeclareFieldFormat{superedition}{\textsuperscript{#1}}
\makeatletter
\renewbibmacro*{date+extradate}{%
  \iffieldundef{origyear}{%
  }{%
    \setunit*{\addspace}%
    \printtext{\mkbibbrackets{\printorigdate}}%
    \setunit*{\addspace}
  }%
  \iffieldundef{labelyear}
    {}
    {\printtext[\blx@delimcontext labeldate]{%
       \printfield[superedition]{edition}%
       \global\clearfield{edition}%
       \iflabeldateisdate
         {\printdateextra}
         {\printlabeldateextra}}}}
\makeatother

\renewbibmacro*{series+number}{%
  \setunit{\addspace}%
  \iffieldundef{series}
    {}
    {\printtext[parens]{%
       \printfield{series}%
       \setunit*{\sernumdelim}%
       \printfield{number}}}%
  \newunit}

\renewbibmacro*{byeditor+others}{%
  \ifnameundef{editor}
    {}
    {\setunit{\addcomma\addspace}%
     \usebibmacro{byeditor+othersstrg}%
     \setunit{\addspace}%
     \printnames[byeditor]{editor}%
     \clearname{editor}%
     \setunit{\addspace}%
     \newunit}%
  \usebibmacro{byeditorx}%
  \usebibmacro{bytranslator+others}}

\begin{filecontents}{literatur.bib}
@book{Flaubert2001,
author = {Laget, Thierry},
title = {Madame Bovary},
publisher = {Gallimard},
year = {2001},
editor = {Flaubert, Gustave},
}
\end{filecontents}
\bibliography{literatur}

\begin{document}

\cite{Flaubert2001}
\printbibliography

\end{document}

Deine Hinweise zur Zeichensetzung merke ich mir auf jeden Fall; diese werde ich sicher noch gebrauchen können!


Antworten