Literaturverzeichnis, Custom Style

Erstellung eines Literaturverzeichnisses mit BibTeX, Biber, BibLaTeX und Co.
Sam85
Forum-Anfänger
Forum-Anfänger
Beiträge: 11
Registriert: Do 13. Feb 2020, 21:17

Beitrag von Sam85 »

Ja ist es auch. Komisch in unserem Leitfaden schreiben Sie für den Zitierstil Chicago, nur für den Literatur Stil nichts. Aber wenn es hier schon was zur FOM gibt, ist das wohl der beste Ansatz. Danke.

Sam85
Forum-Anfänger
Forum-Anfänger
Beiträge: 11
Registriert: Do 13. Feb 2020, 21:17

Beitrag von Sam85 »

So ich habe in einen Thread das hier gefunden und wollte nun folgendes wissen, kann ich den Zitierstil auch in eine separte .cbx packen? Und wenn ja, was davon muss alles in die .cbx.

Hier der Link zum Thread.
eigener-zitierstil-anpassung-authoryear ... rt,20.html

Code: Alles auswählen

\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=ext-authoryear, maxcitenames=2, maxbibnames=999, mergedate=false, innamebeforetitle, dashed=false, autocite=footnote]{biblatex}

\setlength\bibhang{1cm}

\renewcommand*{\finentrypunct}{}

\renewcommand*{\newunitpunct}{\addcomma\space}
\DeclareDelimFormat[bib,biblist]{nametitledelim}{\addcolon\space}
\DeclareDelimFormat{titleyeardelim}{\newunitpunct}
\renewcommand*{\mkbibnamefamily}{\mkbibemph}
\renewcommand*{\mkbibnamegiven}{\mkbibemph}
\renewcommand*{\mkbibnamesuffix}{\mkbibemph}
\renewcommand*{\mkbibnameprefix}{\mkbibemph}
\DeclareDelimAlias{finalnamedelim}{multinamedelim}

\DeclareNameAlias{default}{family-given}
\DeclareNameAlias{sortname}{default}
\DeclareNameAlias{labelname}{default}

\DeclareFieldFormat{editortype}{\mkbibparens{#1}}
\DeclareDelimFormat{editortypedelim}{\addspace}
\DeclareFieldFormat{translatortype}{\mkbibparens{#1}}
\DeclareDelimFormat{translatortypedelim}{\addspace}
\DeclareDelimFormat[bib,biblist]{innametitledelim}{\addcomma\space}

\DeclareFieldFormat*{citetitle}{#1}
\DeclareFieldFormat*{title}{#1}
\DeclareFieldFormat*{booktitle}{#1}
\DeclareFieldFormat*{journaltitle}{#1}


\usepackage{xpatch}
\xpatchbibdriver{online}
  {\usebibmacro{organization+location+date}\newunit\newblock}
  {}
  {}{}

\DeclareFieldFormat[online]{date}{\mkbibparens{#1}}
\renewbibmacro*{url+urldate}{%
  \usebibmacro{url}%
  \ifentrytype{online}
    {\setunit*{\addspace}%
     \iffieldundef{year}
       {\printtext[date]{keine Datumsangabe}}
       {\usebibmacro{date}}}%
    {}%
  \setunit*{\addspace}%
  \iffieldundef{urlyear}
    {}
    {\usebibmacro{urldate}}}


\renewbibmacro*{date+extradate}{%
  \printtext[parens]{%
    \printfield{usera}%
    \setunit{\printdelim{titleyeardelim}}%
    \printlabeldateextra}}

\DefineBibliographyStrings{german}{
  nodate    = {{}o.\adddot J\adddot},
  andothers = {et\addabbrvspace al\adddot}
}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[notfield=translator, final]
      \step[notfield=editor, final]
      \step[fieldset=author, fieldvalue={{{o\noexpand\adddot V\noexpand\adddot}}}]
    }
    \map{
      \pernottype{online}
      \step[fieldset=location, fieldvalue={o\noexpand\adddot O\noexpand\adddot}]
    }
  }
}

\renewbibmacro*{cite}{%
  \iffieldundef{shorthand}
    {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
       {\usebibmacro{cite:label}%
        \setunit{\printdelim{nonametitledelim}}}
       {\printnames{labelname}%
        \setunit{\printdelim{nametitledelim}}}%
     \printfield{usera}%
     \setunit{\printdelim{titleyeardelim}}%
     \usebibmacro{cite:labeldate+extradate}}
    {\usebibmacro{cite:shorthand}}}

\renewbibmacro*{postnote}{%
  \setunit{\postnotedelim}%
  \iffieldundef{postnote}
    {\printtext{o.S\adddot}}
    {\printfield{postnote}}}

\begin{document}
Lorem\autocite[201]{seiter2017business}
ipsum\autocite{gluchowski2016business}
dolor\autocite[201]{becker2016data}
sit\autocite{nucleus2014analyticspays}
amet\autocite{ctan,aksin,vizedom:related,sigfridsson,markey,elk}.
\printbibliography[nottype=online]
\printbibliography[type=online, title={Internetquellen}]
\end{document}
Das hier stand da noch separat und soll zum "cite" Befehl hinzugefügt werden. Wo genau befindet sich denn diese Zeile?

Code: Alles auswählen

\toggletrue{abx@bool@giveninits}
Freue mich über antworten.
Grüße
Sam

Sam85
Forum-Anfänger
Forum-Anfänger
Beiträge: 11
Registriert: Do 13. Feb 2020, 21:17

Beitrag von Sam85 »

Und das hier zum Literaturverzeichnis. Gleiche Frage wie zuvor, kann ich das in eine separte .bbx Datei einfügen und wenn ja was alles davon ist notwendig? Also gemeint ist, was alles vor \begin{document} und begin{filecontents}.

Code: Alles auswählen

\documentclass[12pt, a4paper, ngerman,
  toc=chapterentrydotfill, bibliography=totoc,
  listof=nochaptergap, listof=totoc,
  captions=figureheading, hidelinks,  fleqn]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[onehalfspacing]{setspace}
\usepackage{lipsum}
\usepackage[a4paper,
  left=4cm, right=2cm, top=1.5cm, bottom=2cm,
  headsep=2cm, headheight=0.5cm, includehead=true,
  footskip=0cm, includefoot=true,]{geometry}

\usepackage[autostyle, german=guillemets]{csquotes}
\usepackage[backend=biber, style=ext-authoryear,
  isbn=false,
  maxcitenames=2, maxbibnames=999,
  mergedate=false,
  innamebeforetitle, dashed=false,
  autocite=footnote, mincrossrefs=1,
  alldates=ymd, labeldate=year,]{biblatex}

 

\renewcommand*{\bibfont}{\normalfont\normalsize\singlespacing}

\setlength{\bibinitsep}{.5\baselineskip}

\setlength\bibhang{1cm}

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

\renewcommand*{\finentrypunct}{}

\renewcommand*{\newunitpunct}{\addcomma\space}
\DeclareDelimFormat[bib,biblist]{nametitledelim}{\addcolon\space}
\DeclareDelimFormat{titleyeardelim}{\newunitpunct}

\renewcommand*{\mkbibcompletename}{\mkbibemph}

\DeclareDelimAlias{finalnamedelim}{multinamedelim}

\DeclareNameFormat{family-given:init}{%
  \usebibmacro{name:family-given}
    {\namepartfamily}
    {\namepartgiveni}
    {\namepartprefix}
    {\namepartsuffix}%
  \usebibmacro{name:andothers}}

\DeclareNameAlias{default}{family-given}
\DeclareNameAlias{sortname}{default}
\DeclareNameAlias{labelname}{family-given:init}

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

\DeclareDelimFormat[bib,biblist]{innametitledelim}{\addcomma\space}

\DeclareFieldFormat*{citetitle}{#1}
\DeclareFieldFormat*{title}{#1}
\DeclareFieldFormat*{booktitle}{#1}
\DeclareFieldFormat*{journaltitle}{#1}

\newbibmacro*{organization+location}[1]{%
  \printlist{location}%
  \setunit*{\locdatedelim}%
  \printlist{organization}%
  \newunit}

\usepackage{xpatch}
\xpatchbibdriver{online}
  {\usebibmacro{organization+location+date}}
  {\usebibmacro{organization+location}}
  {}{}

\DeclareFieldFormat[online]{date}{\mkbibparens{#1}}

\DeclareFieldFormat{url}{<\url{#1}>}% oder {$\langle$\url{#1}$\rangle$} oder \textlangle/\textrangle
\DeclareFieldFormat{urldate}{\mkbibbrackets{\bibstring{urlseen}\addcolon\space#1}}
\renewbibmacro*{url+urldate}{%
  \usebibmacro{url}%
  \ifentrytype{online}
    {\setunit{\addspace}%
     \usebibmacro{date}}
    {}%
  \iffieldundef{urlyear}
    {}
    {\setunit*{\addspace}%
     \usebibmacro{urldate}}}

\renewbibmacro*{date+extradate}{%
  \printtext[parens]{%
    \printfield{usera}%
    \setunit{\printdelim{titleyeardelim}}%
    \printlabeldateextra}}

\renewbibmacro*{date}{%
  \usebibmacro{bbx:ifmergeddate}
    {}
    {\iffieldundef{year}
       {\printtext[date]{\bibstring{nodate}}}
       {\printdate}}}

\DefineBibliographyStrings{german}{
  nodate    = {{}o.\adddot \addabbrvspace J\adddot},
  andothers = {et\addabbrvspace al\adddot},
  urlseen   = {Zugriff},
}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \pernottype{set}
      \step[notfield=translator, final]
      \step[notfield=editor, final]
      \step[fieldset=author, fieldvalue={\string{o.\noexpand\,V\noexpand\adddot\string}}, final]
      \step[fieldset=sortname, fieldvalue={zzzzzzzzz}]
    }
    \map{
      \pernottype{online}
      \step[fieldset=location, fieldvalue={o.\noexpand\,O\noexpand\adddot}]
    }
  }
}

\renewbibmacro*{cite}{%
  \iffieldundef{shorthand}
    {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
       {\usebibmacro{cite:label}%
        \setunit{\printdelim{nonametitledelim}}}
       {\printnames{labelname}%
        \setunit{\printdelim{nametitledelim}}}%
     \printfield{usera}%
     \setunit{\printdelim{titleyeardelim}}%
     \usebibmacro{cite:labeldate+extradate}}
    {\usebibmacro{cite:shorthand}}}

\renewbibmacro*{postnote}{%
  \setunit{\postnotedelim}%
  \iffieldundef{postnote}
    {\printtext{o\adddot\addabbrvspace S\adddot}}
    {\printfield{postnote}}}


\begin{filecontents*}{\jobname.bib}
@online{test1Mit,
  author  = {Artur Autor},
  title   = {Internetquelle mit Datum},
  url     = {http://example.edu/~elk/bronto.pdf},
  urldate = {2018-03-26},
  date      = {2000-06-09},
  usera   = {Test Stichwort1} ,
}
@online{test1Ohne,
  author  = {Artur Autor},
  title   = {Internetquelle ohne Datum},
  url     = {http://example.edu/~elk/bronto.pdf},
  urldate = {2018-03-26},
  usera   = {Test Stichwort2},
}
@book{test2Mit,
  author    = {Artur Autor},
  title     = {Buch mit Datum},
  edition   = {1},
  usera     = {Test Stichwort3},
  publisher = {FOMVerlag},
  location  = {Essen},
  date      = {2000}
}
@book{test2Ohne,
  author    = {Artur Autor},
  title     = {Buch ohne Datum},
  edition   = {1},
  usera     = {Test Stichwort4},
  publisher = {FOMVerlag},
  location  = {Essen},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
 
\begin{document}
\cite{test1Mit}
\cite{test1Ohne}
\cite{test2Mit}
\cite{test2Ohne}
\printbibliography[nottype=online]
\printbibliography[type=online,title={Internetquellen}]
\end{document}

Sam85
Forum-Anfänger
Forum-Anfänger
Beiträge: 11
Registriert: Do 13. Feb 2020, 21:17

Beitrag von Sam85 »

Kurze Zwischenfrage: Kann man das so umsetzen oder laufe ich in die falsche Richtung bezüglich der Anwendung? Sind die Felder in der Bibliothek eigentlich fix oder kann ich die Umbenennen?

Code: Alles auswählen

\DeclareBibliographyDriver{monographie}
	{%
		\usebibmacro{bibindex}%
			\usebibmacro{begentry}%
				\mkbibitalic{\usebibmacro{nachname/institution}}%
					\setunit{\addcomma\space}%
				\mkbibitalic{\usebibmacro{vorname}}%
					\setunit{\space\bibopenparen}%
				\usebibmacro{stichwort}%	
					\setunit{\addcomma\space}%
				\usebibmacro{erscheinungsjahr}%	
					\setunit{\bibcloseparen\addcolon\space}%
				\usebibmacro{titel}%
					\setunit{\addcomma\space}%
				\usebibmacro{auflage}%
					\setunit{\addcomma\space}%
				\usebibmacro{verlagsort}%
					\setunit{\addcolon\space}%
				\usebibmacro{verlag}%
					\setunit{\addcomma\space}%
				\usebibmacro{erscheinungsjahr}%
			\usebibmacro{finentry}%
	}

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

Beitrag von MoeWe »

Du hast zwei Minimalbeispiele gepostet, die sowohl Code für die Anpassung des Literaturverzeichnisses als auch Code für die Anpassung der Zitate beinhalten. Es wäre nicht sinnvoll, den Code des einen Beispiels in die .cbx und den des anderen in die .bbx zu schreiben. Zunächst musst Du aus den beiden (oder noch mehr) Vorschlägen eine Komplettlösung für Zitate und Literaturverzeichnis aussuchen oder zusammensetzen. Dann kannst Du darüber nachdenken, daraus .bbx und .cbx zu machen.

Meiner Meinung nach ist es nicht immer notwendig oder gar zielführend, gleich alle Modifikationen in .bbx- und .cbx-Dateien auszulagern. Der Code funktioniert genauso gut, wenn er in der Präambel steht. Gut, es mag einen Punkt geben, ab dem der Code in der Präambel so lang wird, dass es etwas unübersichtlich wird, je nach Geschmack, kann dieser Punkt recht schnell erreicht sein, wenn man darauf bedacht ist, dass man seine Präambel frei von viel Code halten möchte (eigentlich gar keine schlechte Einstellung: hier im Forum sieht man zu häufig Präambeln, die sich über Jahre entwickelt haben und dann in einem furchtbaren Zustand verkrustet sind, es ist immer eine gute Idee, all den Code, den man nicht braucht, wegzulassen). Wenn es also zu lang wird, kann man den Code auch in eine separate .tex-Datei auslagern und dann einfach mit \input einbinden. Dann ist es auch weg aus der Präambel, aber immer noch in einer Datei, die man schnell ansehen und ändern kann. .bbx und .cbx-Dateien sind nach meiner Erfahrung erst sinnvoll, wenn man wirklich einen wohldefinierten Stil implementieren möchte, den man plant, in der Zukunft häufiger zu benutzen.

Aber OK, gehen wir davon aus, dass eine ausgelagerte .tex-Datei nicht genug ist, und es .bbx- und .cbx-Dateien sein müssen. Dann musst Du als erstes identifizieren, welcher Code zu den Zitaten gehört und welcher zum Literaturverzeichnis. Das ist nicht immer ganz eindeutig, im Großen und Ganzen kann man sich aber an die Aufteilungen der Standardstile halten (wobei bei biblatex.def sowohl .bbx-Code als auch .cbx-Code enthält). Bei manchen Stilen ist es sehr schwer, genau zu separieren, was wohin gehört. Hier sollte es weitestgehend noch machbar sein: \renewbibmacro*{cite}, \renewbibmacro*{postnote}, \DeclareFieldFormat*{citetitle}, \DeclareLabeldate, \DeclareNameFormat{family-given:init}, \DeclareNameAlias{labelname} gehören in die .cbx, der Rest eher in die .bbx. Wobei ein paar Dinge (\renewcommand*{\mkbibcompletename}, \DeclareDelimAlias{finalnamedelim}) sowohl für Zitate als auch für das Literaturverzeichnis relevant sind. Wenn Du die .bbx und .cbx immer zusammen nutzt, dann ist es eigentlich eh wurscht, was Du wohin schreibst, aber es ist schon sinnvoll, sich zu bemühen, die Aufteilung sinnvoll zu gestalten. Außerdem ist es sinnvoll, die biblatex-Optionen auf die zwei Dateien zu verteilen und dort mit \ExecuteBibliographOptions auszuführen. Wenn die Dateien keine vollständigen Neuentwicklungen sind, sondern auf bestehenden Stilen aufbauen, dann sollten sie das mit \RequireBibliographyStyle (.bbx) bzw. \RequireCitationStyle (.cbx) anmelden. Die erste Codezeile der .bbx- oder .cbx-Datei sollte die Datei identifizieren und ein Änderungsdatum sowie, wenn gewünscht, eine Versionsnummer und kurze Beschreibung beinhalten.

sam.bbx

Code: Alles auswählen

\ProvidesFile{sam.bbx}[2020/02/16 v0.1 bibliography style for sam85]

\RequireBibliographyStyle{ext-authoryear}

\ExecuteBibliographyOptions{
  maxbibnames=999,
  mincrossrefs=1,
  mergedate=false,
  innamebeforetitle, dashed=false,
  isbn=false,
  alldates=ymd,}

\setlength{\bibinitsep}{.5\baselineskip}

\setlength\bibhang{1cm}

\renewcommand*{\finentrypunct}{}

\renewcommand*{\newunitpunct}{\addcomma\space}
\DeclareDelimFormat[bib,biblist]{nametitledelim}{\addcolon\space}
\DeclareDelimFormat{titleyeardelim}{\newunitpunct}

\renewcommand*{\mkbibcompletename}{\mkbibemph}

\DeclareDelimAlias{finalnamedelim}{multinamedelim}

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


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

\DeclareDelimFormat[bib,biblist]{innametitledelim}{\addcomma\space}


\DeclareFieldFormat*{title}{#1}
\DeclareFieldFormat*{booktitle}{#1}
\DeclareFieldFormat*{journaltitle}{#1}

\newbibmacro*{organization+location}[1]{%
  \printlist{location}%
  \setunit*{\locdatedelim}%
  \printlist{organization}%
  \newunit}

\usepackage{xpatch}
\xpatchbibdriver{online}
  {\usebibmacro{organization+location+date}}
  {\usebibmacro{organization+location}}
  {}{}

\DeclareFieldFormat[online]{date}{\mkbibparens{#1}}

\DeclareFieldFormat{url}{<\url{#1}>}% oder {$\langle$\url{#1}$\rangle$} oder \textlangle/\textrangle
\DeclareFieldFormat{urldate}{\mkbibbrackets{\bibstring{urlseen}\addcolon\space#1}}
\renewbibmacro*{url+urldate}{%
  \usebibmacro{url}%
  \ifentrytype{online}
    {\setunit{\addspace}%
     \usebibmacro{date}}
    {}%
  \iffieldundef{urlyear}
    {}
    {\setunit*{\addspace}%
     \usebibmacro{urldate}}}

\renewbibmacro*{date+extradate}{%
  \printtext[parens]{%
    \printfield{usera}%
    \setunit{\printdelim{titleyeardelim}}%
    \printlabeldateextra}}

\renewbibmacro*{date}{%
  \usebibmacro{bbx:ifmergeddate}
    {}
    {\iffieldundef{year}
       {\printtext[date]{\bibstring{nodate}}}
       {\printdate}}}

\DefineBibliographyStrings{german}{
  nodate    = {{}o.\adddot \addabbrvspace J\adddot},
  andothers = {et\addabbrvspace al\adddot},
  urlseen   = {Zugriff},
}

\DeclareStyleSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \pernottype{set}
      \step[notfield=translator, final]
      \step[notfield=editor, final]
      \step[fieldset=author, fieldvalue={\string{o.\noexpand\,V\noexpand\adddot\string}}, final]
      \step[fieldset=sortname, fieldvalue={zzzzzzzzz}]
    }
    \map{
      \pernottype{online}
      \step[fieldset=location, fieldvalue={o.\noexpand\,O\noexpand\adddot}]
    }
  }
}
sam.cbx

Code: Alles auswählen

\ProvidesFile{sam.cbx}[2020/02/16 v0.1 citation style for sam85]

\RequireCitationStyle{ext-authoryear}

\ExecuteBibliographyOptions{maxcitenames=2, labeldate=year,
  autocite=footnote}

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

\DeclareNameFormat{family-given:init}{%
  \usebibmacro{name:family-given}
    {\namepartfamily}
    {\namepartgiveni}
    {\namepartprefix}
    {\namepartsuffix}%
  \usebibmacro{name:andothers}}
  
\DeclareNameAlias{labelname}{family-given:init}

\DeclareFieldFormat*{citetitle}{#1}

\renewbibmacro*{cite}{%
  \iffieldundef{shorthand}
    {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
       {\usebibmacro{cite:label}%
        \setunit{\printdelim{nonametitledelim}}}
       {\printnames{labelname}%
        \setunit{\printdelim{nametitledelim}}}%
     \printfield{usera}%
     \setunit{\printdelim{titleyeardelim}}%
     \usebibmacro{cite:labeldate+extradate}}
    {\usebibmacro{cite:shorthand}}}

\renewbibmacro*{postnote}{%
  \setunit{\postnotedelim}%
  \iffieldundef{postnote}
    {\printtext{o\adddot\addabbrvspace S\adddot}}
    {\printfield{postnote}}}
Testdatei

Code: Alles auswählen

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[onehalfspacing]{setspace}
\usepackage[autostyle, german=guillemets]{csquotes}
\usepackage[backend=biber, style=sam]{biblatex}

\renewcommand*{\bibfont}{\normalfont\normalsize\singlespacing}

\begin{filecontents*}{\jobname.bib}
@online{test1Mit,
  author  = {Artur Autor},
  title   = {Internetquelle mit Datum},
  url     = {http://example.edu/~elk/bronto.pdf},
  urldate = {2018-03-26},
  date    = {2000-06-09},
  usera   = {Test Stichwort1},
}
@online{test1Ohne,
  author  = {Artur Autor},
  title   = {Internetquelle ohne Datum},
  url     = {http://example.edu/~elk/bronto.pdf},
  urldate = {2018-03-26},
  usera   = {Test Stichwort2},
}
@book{test2Mit,
  author    = {Artur Autor},
  title     = {Buch mit Datum},
  edition   = {1},
  usera     = {Test Stichwort3},
  publisher = {FOMVerlag},
  location  = {Essen},
  date      = {2000}
}
@book{test2Ohne,
  author    = {Artur Autor},
  title     = {Buch ohne Datum},
  edition   = {1},
  usera     = {Test Stichwort4},
  publisher = {FOMVerlag},
  location  = {Essen},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
 
\begin{document}
Lorem\autocite{test1Mit,test1Ohne}
ipsum\autocite{test2Mit}
dolor\autocite{test2Ohne}
\printbibliography[nottype=online]
\printbibliography[type=online,title={Internetquellen}]
\end{document}

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

Beitrag von MoeWe »

Sam85 hat geschrieben:Kurze Zwischenfrage: Kann man das so umsetzen oder laufe ich in die falsche Richtung bezüglich der Anwendung? Sind die Felder in der Bibliothek eigentlich fix oder kann ich die Umbenennen?

Code: Alles auswählen

\DeclareBibliographyDriver{monographie}
	{%
		\usebibmacro{bibindex}%
			\usebibmacro{begentry}%
				\mkbibitalic{\usebibmacro{nachname/institution}}%
					\setunit{\addcomma\space}%
				\mkbibitalic{\usebibmacro{vorname}}%
					\setunit{\space\bibopenparen}%
				\usebibmacro{stichwort}%	
					\setunit{\addcomma\space}%
				\usebibmacro{erscheinungsjahr}%	
					\setunit{\bibcloseparen\addcolon\space}%
				\usebibmacro{titel}%
					\setunit{\addcomma\space}%
				\usebibmacro{auflage}%
					\setunit{\addcomma\space}%
				\usebibmacro{verlagsort}%
					\setunit{\addcolon\space}%
				\usebibmacro{verlag}%
					\setunit{\addcomma\space}%
				\usebibmacro{erscheinungsjahr}%
			\usebibmacro{finentry}%
	}
In diesem Code gibt es einige Problemchen.

Zunächst gibt es im Standard-Data-Model von biblatex keinen Typen @monographie. Der passende Standardtyp wäre wohl @book. Du kannst eigene Typen, die im Standard-Data-Model nicht enthalten sind, definieren, aber dafür brauchst Du eine .dbx-Datei. Siehe https://tex.stackexchange.com/q/175776/35864. Hier sehe ich aber den Bedarf nicht, da es ja schon @book gibt.

Der gezeigte Code referenziert Makros, die Standardmäßig nicht definiert sind, z.B. \usebibmacro{nachname/institution}: Es gibt kein Bibmakro namens nachname/institution, ebenso stichwort etc. etc. Wenn man undefinierte Makros ausführt, dann gibt es Fehler der Art

Code: Alles auswählen

! Package biblatex Error: Bibliography macro 'nachname/institution' undefined.
Es kann natürlich sein, dass Du die Makros alle definiert hast. Dann hast Du aber wahrscheinlich schon existenten Code mehr oder weniger gedoppelt. Das Standard-Bibmakro für den Verlag, Ort und das Datum sieht z.B. so aus

Code: Alles auswählen

\newbibmacro*{publisher+location+date}{%
  \printlist{location}%
  \iflistundef{publisher}
    {\setunit*{\addcomma\space}}
    {\setunit*{\addcolon\space}}%
  \printlist{publisher}%
  \setunit*{\addcomma\space}%
  \usebibmacro{date}%
  \newunit}
und sorgt schon für die Ausgabe von Verlagsort, Verlag und Erscheinungsjahr (der andere Code, den Du gezeigt hast, basiert auf ext-authoryear, da ist das Makro etwas anders definiert, standardmäßig tut es aber das gleiche). Die echte Ausgabe der Felder wird nicht von \usebibmacro{...} besorgt, sondern von \printfield-, \printlist-, \printnames-Befehlen in einem Bibmakro.

Der letzte Problempunkt ist das \mkbibitalic um das \usebibmacro. Zum Formatieren der Ausgabe von Feldern sollte \DeclareFieldFormat genutzt werden. Befehle wie \mkbibitalic sollten in einem Driver und auch in einem Bibmakro nie direkt eingesetzt werden. Das liegt daran, dass biblatex dann verhindern kann, dass leere Formatbefehle überbleiben, wenn ein Feld leer ist. Das ist nicht möglich, wenn man diese Formatbefehle selbst außerhalb von \DeclareFieldFormat einsetzt. Außerdem kann so der punctuation tracker von biblatex nicht richtig arbeiten (mehr dazu in Abschnitt §4.11.7 Using the Punctuation Tracker der biblatex-Anleitung).

Vergleiche mal die beiden Codeblöcke in

Code: Alles auswählen

\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=ext-authoryear, backend=biber]{biblatex}

% nicht so gut
%
\DeclareFieldFormat{edition}{%
  \ifinteger{#1}
    {\mkbibordedition{#1}~\bibstring{edition}}
    {#1\isdot}}
\renewbibmacro{edition}{%
  \mkbibparens{\printfield{edition}}%
}

% besser
%
%\DeclareFieldFormat{edition}{%
%  \mkbibparens{%
%    \ifinteger{#1}
%      {\mkbibordedition{#1}~\bibstring{edition}}
%      {#1\isdot}}}
%\renewbibmacro{edition}{%
%  \printfield{edition}%
%}

\begin{filecontents}{\jobname.bib}
@book{appleby11,
  author  = {Humphrey Appleby},
  title   = {On the Importance of the Civil Service},
  edition = {14},
  date    = {2011},
}
@book{appleby80,
  author  = {Humphrey Appleby},
  title   = {On the Importance of the Civil Service},
  date    = {1980},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\cite{appleby11,appleby80}
\printbibliography
\end{document}
Prinzipiell ist es zwar möglich, vorhandene Felder umzubenennen (bzw. neue zu definieren). Das ist sowohl in https://tex.stackexchange.com/q/175776/35864 als auch https://tex.stackexchange.com/q/163303/35864 ausführlich erklärt, aber es ist meiner Meinung nach wenig sinnvoll, das zu tun, da durch die Nutzung eigener Feldnamen die Kompatibilität mit anderen Stilen sinkt. Gerade wenn es für diese Felder schon Entsprechungen im Standard-Data-Model gibt ist das wenig zielführend. Es ist mit der Sourcemap aber sehr einfach möglich, eigene Namen auf vorhandene Felder umzubiegen. Auch das finde ich nicht sonderlich sinnvoll, aber es geht.

Code: Alles auswählen

\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=ext-authoryear, backend=biber]{biblatex}

\DeclareStyleSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=auflage, fieldtarget=edition]
    }
  }
}

\begin{filecontents}{\jobname.bib}
@book{appleby11,
  author  = {Humphrey Appleby},
  title   = {On the Importance of the Civil Service},
  auflage = {14},
  date    = {2011},
}
@book{appleby81,
  author  = {Humphrey Appleby},
  title   = {On the Importance of the Civil Service},
  auflage = {2},
  date    = {1981},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\cite{appleby11,appleby81}
\printbibliography
\end{document}

Antworten