\ProvidesFile{german-legal-book.bbx}[2023/02/22 v003]
%%% license: LPPL 1.3c or later
%%% author-maintainer: Dominik Brodowski, dominik.brodowski@uni-saarland.de


%%%%%%%%%%%%%%%%
%%% Vorspann %%%
%%%%%%%%%%%%%%%%

%%% Dieser Zitierstil basiert auf ext-authortitle, verwendet aber kein
%%% ibidem (Geschmacksfrage!)
\RequireBibliographyStyle{ext-authortitle}%

%%% Um die Änderungen so klein wie möglich zu halten, wird das Paket
%%% xpatch verwendet, mit dem sich existierende Makros verändern lassen,
%%% ohne sie gänzlich neu definieren zu müssen.
\RequirePackage{xpatch}%

%%% Die nachfolgenden Optionen für ext-authortitle werden hier
%%% standardmäßig gesetzt, können aber beim Einbinden dieses Zitierstils
%%% überschrieben werden.
\ExecuteBibliographyOptions{%
  %%%
  %%% Sortierung nach Name, dann Jahr, dann Titel,
  sorting   = nyt,%
  %%%
  %%% Maximale Anzahl der in einer Fußnoten-Zitation wiedergegebenen Namen
  maxcitenames = 4,%
  %%%
  %%% Anzahl der Namen, die vor "u.a." angegeben werden
  mincitenames = 1,%
  %%%
  %%% Maximale Anzahl der im Literaturverzeichnis wiedergegebenen Namen
  maxbibnames  = 10,%
  %%%
  %%% Anzahl der Namen, die vor "u.a." angegeben werden
  minbibnames  = 1,%
  %%%
  %%% Sollen "klickbare" Querverweise gesetzt werden?
  hyperref = true,%
  %%%
  %%% Sollen für "Ausgabe" und "Herausgeber" Abkürzungen verwendet werden?
  abbreviate = true,%
  %%%
  %%% Siehe oben
  idemtracker = false,%
  %%%
  %%% Füge bei Sammelwerken u.ä. ein "in:" vor dem Buchtitel hinzu
  innamebeforetitle = true,%
  %%%
  %%% Bei Artikeln folgt die Zeitschrift unmittelbar und wird nicht durch
  %%% ein "in:" abgetrennt.
  articlein = false,%
  %%%
  %%% Im Literaturverzeichnis erfolgen vollständige Angaben, keine
  %%% Querverweise auf andere Einträge im Literaturverzeichnis.
  citexref = false,%
  %%%
  %%% Datumsangaben sollen möglichst kompakt ausgegeben werden.
  date = short,%
  %%%
  %%% "van Beethoven" soll unter "B" und nicht unter "v" einsortiert werden.
  useprefix = false,%
  %%%
  %%% im Literaturverzeichnis soll die ISBN nicht ausgegeben werden.
  isbn      = false,%
  %%%
  %%% im Literaturverzeichnis soll allerdings die DOI angegeben werden.
  doi       = true,%
  %%%
  %%% Finden sich im Literaturverzeichnis mehrere Werke desselben Autors
  %%% bzw. derselben Autorenkombination, wird die wiederholte Angabe des
  %%% Autors durch einen Gedankenstrich ersetzt.
  dashed    = true,%
  %%%
  %%% Sämtliche Autoren- bzw. Herausgebernamen sollen herangezogen werden,
  %%% um im Falle uneindeutiger Nachnamen zusätzlich die Initialen oder den
  %%% vollen Vornamen auszugeben. ACHTUNG: Dies erfordert es, bei Sammelbänden
  %%% usw. mit @crossref zu arbeiten und die Ausgabe des Sammelbandes im
  %%% Literaturverzeichnis mittels "options = {skipbib}" zu unterbinden.
  uniquename = allfull,%
  mincrossrefs = 1,%
}

%%% Mit der Option "switchprefix" wird angegeben, ob Namenspräfixe wie
%%% "von" in den Fußnoten *vor* dem Nachnamen (z.B. "von Liszt"), im
%%% Literaturverzeichnis aber -- der Standardsortierung entsprechend --
%%% nachgestellt erscheinen sollen (z.B. "Liszt, Franz von"). Der
%%% Standard ist "true", d.h. um dies zu unterbinden, muss
%%% "switchprefix=false" als Option gesetzt werden.
\newbool{prefix:switch}
\setboolean{prefix:switch}{true}
\DeclareBibliographyOption[boolean]{switchprefix}[true]{%
  \setboolean{prefix:switch}{#1}%
}
\AtEveryCite{%
  \ifbool{prefix:switch}{%
    \toggletrue{blx@useprefix}%
  }{}%
}
\AtBeginBibliography{%
  \ifbool{prefix:switch}{%
    \togglefalse{blx@useprefix}%
  }{}%
}


%%%%%%%%%%%%%%%%%%%%%%%%
%%% Allgemeiner Teil %%%
%%%%%%%%%%%%%%%%%%%%%%%%

%%% Autorennamen werden kursiv gesetzt
\renewcommand*{\mkbibnamefamily}[1]{\mkbibemph{#1}}
\renewcommand*{\mkbibnamegiven}[1]{\mkbibemph{#1}}
\renewcommand*{\mkbibnameprefix}[1]{\mkbibemph{#1}}
\renewcommand*{\mkbibnamesuffix}[1]{\mkbibemph{#1}}

%%% Mehrere Autorennamen werden durch einen Schrägstrich getrennt. Dieser
%%% ist -- anders als die Autorennamen (siehe soeben) -- recte zu setzen.
\AtBeginBibliography{
  \renewcommand*{\multinamedelim}{{\normalfont{\addslash}}}%
  \renewcommand*{\finalnamedelim}{{\normalfont{\addslash}}}%
}

%%% Autorennamen sollen in der Reihenfolge "Nachname, Vorname" ausgegeben
%%% werden, weitere Namen (z.B. der Herausgeber) in der Reihenfolge
%%% "Vorname Nachname"
\DeclareNameAlias{sortname}{family-given}
\DeclareNameAlias{default}{given-family}

%%% Buch- und Beitragstitel usw. sind aufrecht zu setzen
\DeclareFieldFormat{title}{\normalfont{#1}}
\DeclareFieldFormat{citetitle}{\normalfont{#1}}

%%% Einzelne Blöcke werden mit Kommata (und nicht mit Punkt) abgetrennt,
%%% nur Titel und Untertitel mit Punkt.
\renewcommand*{\newunitpunct}{\addcomma\addspace}
\renewcommand*{\subtitlepunct}{\addperiod\addspace}

%%% Einige Felder sollen standardmäßig nicht abgedruckt werden
\AtEveryBibitem{%
  \clearlist{publisher}%
  \clearfield{note}%
}

%%% "u.a." soll ohne Trenner und nicht kursiv ausgegeben werden
\DefineBibliographyStrings{german}{%
  andothers = {u.a.}
}
\xpatchbibmacro{name:andothers}{%
  \bibstring{andothers}%
}{%
  {\normalfont{\bibstring{andothers}}}%
}{}{}


%%% "Hrsg." soll in Klammern abgedruckt werden. Hierzu wird der Texttrenner
%%% entfernt und das Makro, dass "Hrsg." ausgibt, durch die Befehle
%%% \bibopenparen und \bibopenclose umrandet.
\DeclareDelimFormat[bib]{editortypedelim}{}
\xpretobibmacro{editorstrg}{\addspace\bibopenparen}{}{}
\xapptobibmacro{editorstrg}{\bibcloseparen}{}{}

%%% ... gleiches für "Hrsg. u.a."
\xpretobibmacro{editor+othersstrg}{\addspace\bibopenparen}{}{}
\xapptobibmacro{editor+othersstrg}{\bibcloseparen}{}{}

%%% ... gleiches für "Übers."
\DeclareDelimFormat[bib]{translatortypedelim}{}
\xpretobibmacro{translatorstrg}{\addspace\bibopenparen}{}{}
\xapptobibmacro{translatorstrg}{\bibcloseparen}{}{}

%%% .. gleiches für "Übers. u.a."
\xpretobibmacro{translator+othersstrg}{\addspace\bibopenparen}{}{}
\xapptobibmacro{translator+othersstrg}{\bibcloseparen}{}{}

%%% in manchen Versionen wird der Doppelpunkt nicht aufrecht gesetzt...
%%% daher wird dieser Befehl hier entsprechend re-implementiert
\renewbibmacro*{in:}{%
  \bibstring{in}%
  \addcolon%
  \newunit\newblock%
}

%%% Bei @article und @periodical soll bevorzugt das Feld "shortjournal"
%%% statt "journaltitle" oder "journal" verwendet werden.
\renewbibmacro*{journal}{%
  \iffieldundef{shortjournal}%
   {\printtext[journaltitle]{%
     \printfield[titlecase]{journaltitle}%
     \setunit{\subtitlepunct}%
        \printfield[titlecase]{journalsubtitle}%
     }%
   }%
   {\printfield[journaltitle]{shortjournal}}%
}

%%% Eine URL kann als solche angegeben werden
\DeclareFieldFormat{url}{\url{#1}}


%%% In "kurzen" Datumsangaben date=short soll kein thinspace zwischen
%%% Tag, Monat und Jahr ausgegeben werden.
\DefineBibliographyExtras{german}{%
   \protected\def\mkbibdateshort#1#2#3{%
    \iffieldundef{#3}%
      {}%
      {\mkdayzeros{\thefield{#3}}\adddot%
       \iffieldundef{#2}{}{}}%
    \iffieldundef{#2}%
      {}%
      {\mkmonthzeros{\thefield{#2}}%
       \iffieldundef{#1}%
         {}%
         {\iffieldundef{#3}{/}{\adddot}}}%
    \iffieldbibstring{#1}%
      {\bibstring{\thefield{#1}}}%
      {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
}

%%%%%%%%%%%%%%%
%%% article %%%
%%%%%%%%%%%%%%%

%%% Der Zeitschriftentitel soll aufrecht gesetzt werden
\DeclareFieldFormat[article]{journaltitle}{\normalfont{#1}}

%%% Die Seitenspanne soll (im Literaturverzeichnis) komplett und ohne
%%% führendes "S." ausgegeben werden.
\DeclareFieldFormat[article]{pages}{#1}

%%% Der Aufsatztitel soll ohne Anführungszeichen gesetzt werden
\DeclareFieldFormat[article]{title}{#1}

%%% Das Jahr soll nicht in Klammern gesetzt werden 
\DeclareFieldFormat[article]{issuedate}{#1}

%%% Bei Angabe einer Heftnummer ist diese mit einem Schrägstrich abzutrennen
\renewbibmacro*{issue+date}{%
  % Gibt nach der Ausgabennummer noch einen Slash dazu...  
  \iffieldundef{issue}{}{\printfield{issue}\slash}%
  % Setze das Datum
  \iffieldundef{volume}{\printdate}{%
    \printtext[parens]{\printdate}%
  }%
}


%%%%%%%%%%%%%%%%%%
%%% periodical %%%
%%%%%%%%%%%%%%%%%%

%%% Der Zeitschriftentitel soll aufrecht gesetzt werden
\DeclareFieldFormat[periodical]{journaltitle}{\normalfont{#1}}

%%% Die Seitenspanne soll (im Literaturverzeichnis) komplett und ohne
%%% führendes "S." ausgegeben werden.
\DeclareFieldFormat[periodical]{pages}{#1}

%%% Das Jahr soll in Klammern gesetzt werden 
\DeclareFieldFormat[periodical]{issuedate}{\mkbibparens{#1}}

%%% Wird wie article definiert; keine Änderungen!
\DeclareBibliographyAlias{periodical}{article}


%%%%%%%%%%%%
%%% book %%%
%%%%%%%%%%%%

%%% Der Buchtitel soll aufrecht gesetzt werden
\DeclareFieldFormat[book]{citetitle}{\normalfont{#1}}

%%% Zwischen Ort und Jahr stehe kein Trenner
\renewcommand*{\locdatedelim}{\addspace}


%%%%%%%%%%%%%%
%%% inbook %%%
%%%%%%%%%%%%%%

%%% Der Beitrags- und Buchtitel soll aufrecht gesetzt werden
\DeclareFieldFormat[inbook]{title}{\normalfont{#1}}
\DeclareFieldFormat[inbook]{booktitle}{\normalfont{#1}}
\DeclareFieldFormat[inbook]{shorttitle}{\normalfont{#1}}

%%% Der shortitle des Buchs soll übernommen werden
\DeclareDataInheritance{book}{inbook}{
  \inherit{shorttitle}{shorttitle}
}

%%% Anders als beim Standardmakro "byeditor+others" soll der Herausgebername
%%% zuerst (und mit der Kursivsetzung wieder rückgängig gemacht), die Angabe
%%% "Hrsg." erst danach ausgegeben werden
\xpatchbibmacro{byeditor+others}{%
  \usebibmacro{byeditor+othersstrg}%
  \setunit{\addspace}%
  \printnames[byeditor]{editor}%
}{%
  \setunit{\addspace}%
  \mkbibemph{\printnames[byeditor]{editor}}%
  \addspace%
  \usebibmacro{editor+othersstrg}%
}{}{}

%%% Anders als beim Standardmakro "inbook:parent" aus "ext-standard.bbx"
%%% sollen der Buchtitel ("maintitle") und die Herausgeberangabe
%%% ("byeditor+others") umgekehrt gereiht ausgegeben werden
\xpatchbibmacro{inbook:parent}{%
  \usebibmacro{maintitle+booktitle}%
  \newunit\newblock%
  \usebibmacro{byeditor+others}%
}{%
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \usebibmacro{maintitle+booktitle}%
}{}{}


%%%%%%%%%%%%%%%%%%%%
%%% incollection %%%
%%%%%%%%%%%%%%%%%%%%

%%% Der Beitrags- und Buchtitel soll aufrecht gesetzt werden
\DeclareFieldFormat[incollection]{title}{\normalfont{#1}}
\DeclareFieldFormat[incollection]{booktitle}{\normalfont{#1}}

%%% Die Festschrift soll sowohl als "book" oder als "collection" definiert
%%% werden können, wobei neben title,subtitle und titeladdon auch shorttitle
%%% als ebensolcher übernommen werden soll
\DeclareDataInheritance{book,collection}{incollection}{
  \inherit{title}{booktitle}
  \inherit{subtitle}{booksubtitle}
  \inherit{titleaddon}{booktitleaddon}
  \inherit{shorttitle}{shorttitle}
}

%%% Wird wie inbook definiert; keine Änderungen!
\DeclareBibliographyAlias{incollection}{inbook}


%%%%%%%%%%%%%%%%%%
%%% commentary %%%
%%%%%%%%%%%%%%%%%%

%%% Der Titel und Untertitel soll aufrecht gesetzt werden
\DeclareFieldFormat[commentary]{subtitle}{\normalfont{#1}}

%%% Wird wie book definiert; keine Änderungen!
\DeclareBibliographyAlias{commentary}{book}

%%% Für Kommentatoren
\DeclareBibliographyAlias{commentator}{misc}
\ExecuteBibliographyOptions[commentator]{skipbib=true}

\endinput

