Anpassung Literaturverzeichnis an Vorgaben

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


studiHD

Anpassung Literaturverzeichnis an Vorgaben

Beitrag von studiHD »

Liebe TeX-Gemeinde,
zunächst vielen Dank für dieses tolle Forum!
Leider komme ich seit Tagen mit meinem/n Problem/n nicht weiter und brauche Hilfestellung bei den unten aufgeführten Punkten.

Für meine Abschlussarbeit muss ich das Literaturverzeichnis nach Vorgaben erstellen. Diese sind hier aufgezählt:
______________________________
-Buch:
Verfasser (Jahr): Haupt-Titel [: Untertitel] . [Bd. Band-Nr.,] [Aufl.] Ort, Verlag.

-Artikel:
Verfasser (Jahr): Haupt-Titel [: Untertitel][.] In: Zeitschrift, [Jahrgang], [Heft-Nr], S. Seiten.

-Tagungsband:
Verfasser (Jahr): Haupt-Titel [: Untertitel][.] In: Verfasser (Jahr): »Haupt-Titel [: Untertitel][.]« [Bd. Band-Nr.] [Aufl.] Ort [: Verlag], S. Seiten.

-Workingpaper/tech.Report
Verfasser (Jahr): Haupt-Titel [: Untertitel][.] [Art-des-Berichts [Nummer],] [Ort:] Organisation.
______________________________

Ich benutze TeXMaker mit Biblatex.
als citestyle und bibstyle habe ich "authoryear", für \cite ist das auch alles soweit perfekt, nur das Literaturverzeichnis will nicht so richtig.

Hier mein Minimalbeispiel:
\documentclass[%
draft=false,%
paper=a4,% 
fontsize=12pt,%
pagesize=auto,%pdftex,%
%twoside=true,%
twoside=false,%
%DIV=10,%
%BCOR=1.0cm,%
headings=small,openany,% 
chapterprefix=false,% 
version=last,%
titlepage=true,%
parskip=half+,%
mpinclude=false,%
headsepline=true,%
%headinclude=false,%
%footinclude=false,%
%footlines=1.0,%
toc=bibliography,%
toc=index,%
numbers=noendperiod%
]{scrbook}

\usepackage{scrlayer-scrpage} 
\pagestyle{scrheadings}
\ohead[]{\pagemark}
\chead{}
\ihead{\headmark}
\ofoot[]{}
\cfoot[]{}
\automark[chapter]{chapter}
\automark*[section]{}
\renewcommand*{\chapterpagestyle}{scrheadings}

\usepackage[left=2cm,right=4cm,top=2.5cm,bottom=2.5cm,includeheadfoot]{geometry}
\linespread{1.07} 
 
% deutsche Texte und Umlaute
\usepackage[utf8]{inputenc} 
\usepackage[T1]{fontenc}
\usepackage[full]{textcomp}
\usepackage{txfonts}
\usepackage{fixltx2e}
\usepackage[babel]{microtype}
\clubpenalty = 10000
\widowpenalty = 10000
\displaywidowpenalty = 10000
\usepackage[autostyle,babel,german=guillemets,style=german]{csquotes}
\usepackage[USenglish,ngerman]{babel} 
\selectlanguage{ngerman}


% Zitieren und Literaturverzeichnis

\usepackage[%
 backend=biber,%
 style=authoryear,%
 bibstyle=authoryear,%
 citestyle=authoryear,%
 natbib=false,%
 sorting=nyt,%
 sortcites=true,%
 hyperref=auto,%
 maxcitenames=2,%
 maxbibnames=3,%
 mincitenames=1,%
 minbibnames=1,%
 dashed=false,%
 firstinits=true,%
 doi=false,%
 isbn=false,%  
]{biblatex}

\bibliography{literatur}
\setlength{\bibitemsep}{1em}
\DefineBibliographyStrings{ngerman}{andothers = {et al.\ },}


%Anpassung des Literaturverzeichnisses
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\DeclareNameFormat{first-last}{ %anpassung der Autoren
{\namepartprefix}{\namepartfamily}{\namepartgiveni}
\usebibmacro{name:andothers}
}

%Titel auf Standardformat setzen
\DeclareFieldFormat[article]{journaltitle}{#1}%
\DeclareFieldFormat[article]{title}{#1}%
\DeclareFieldFormat[book]{title}{#1}% 
\DeclareFieldFormat[inproceedings]{booktitle}{#1}% 
\DeclareFieldFormat[inproceedings]{title}{#1}%
\DeclareFieldFormat[report]{title}{#1}%

\renewcommand*{\finalnamedelim}{\addcomma\addspace}% Komma statt "und" vor dem letzten Namen
\renewcommand*{\labelnamepunct}{\addcolon\addspace}% Doppelpunkt zwischen Namen und Titel


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Ende der Anpassung des Literaturverzeichnisses

\begin{document}

Das ist ein Test für ein Tagungsband \parencite[vgl.][2-9]{Beispiel_Tagungsband}.\\
Das ist ein Test für ein Buch  \parencite[siehe][]{Beispiel_Buch}. \\
Das ist ein Test für ein Artikel  \parencite[vgl.][50-54]{Beispiel_artikel}. \\
Das ist ein Test für ein WorkingPaper  \parencite[vgl.][1-4]{Beispiel_WorkingPaper}.


%\nocite{*}
\printbibliography[heading=bibliography]

\end{document}
die zugehörige .bib -Datei hier:
@inproceedings{Beispiel_Tagungsband,
	location = {Stadt},
	title = {Titel des Beitrags -ein Beispiel},
	pages = {10-20},
	booktitle = {Titel des Tagungsbandes -als Beispiel},
	publisher = {Verlag-Name},
	author = {Nachname, Vorname and Nachname2, Vorname2},
	editor = {NachnameH, VornameH and NachnameH2, VornameH2},
	date = {2010},
	number = {2},
	Volume = {10},
}

@report{Beispiel_WorkingPaper,
	location = {Stadt},
	title = {Das ist der Name für ein Working-Paper},
	number = {4},
	institution = {Beispielfakultät, Beispieluniversität},
	type = {Art des Reports},
	author = {Nachname, Vorname},
	date = {2000}
}

@article{Beispiel_artikel,
	title = {Das ist der Artikeltitel - als Beispiel},
	volume = {13},
	pages = {10-20},
	number = {4},
	journaltitle = {Titel der Periodika},
	author = {Nachname1, Vorname1 and Nachname2, Vorname2},
	date = {2010}
}

@book{Beispiel_Buch,
	location = {Stadt},
	title = {Das ist der Buchtitel - ein Beispiel},
	publisher = {Verlag-Name},
	author = {Nachname, Vorname and Nachname2, Vorname2},
	date = {2020},
	Edition = {22},
	volume ={20},
}

_______________________________________________
Folgende Probleme habe ich noch nicht Lösen können:

1) Wie schaffe ich es, dass nicht nur der Erstgenannte, sondern alle Autoren und Herausgeber mit "Voller Nachname"+"komma"+"Vorname-initial"+"Punkt" angezeigt werden?

2) Bei einem Buch muss "Auflage" nach dem "Band" kommen, nicht davor.

3) Bei einem Buch muss hinter "Ort" ein Komma, kein Doppelpunkt.

4) Bei einem Artikel muss hinter dem "journaltitle" ein Komma

5) Bei einem Artikel muss hinter "Volume" ein Komma+Leerzeichen, kein Punkt

6) Bei einem Beitrag (@inproceedings) muss nach "In:" und vor "booktitle" der/die Herausgeber + (Jahr) + Doppelpunkt stehen

7) Bei einem Beitrag (@inproceedings) muss der "booktitle" mit "«" "»" versehen werden

8)Bei einem Beitrag (@inproceedings) muss hinter der Aufl.-Nr. ".Auflage" stehen

9) Hinter dem Working-Paper (@report) muss ein Komma hinter "number" kein Punkt

Es sind relativ viele(aber gleichartige ?!?) Probleme. Ich hoffe dies ist kein großes Problem :)

...ich bin für jede Hilfe dankbar !

Gruß[/m]

Gast

Beitrag von Gast »

Hier zunächst eine Lösung für Deine Probleme 1, 3, 4, 5 und 7. Die anderen brauchen etwas mehr Code.

(Achtung! Wegen [d]filecontents[/d] überschreibt das Beispiel eine eventuell vorhandene .bib-Datei desselben Namens. Probier es also lieber in einem leeren Order aus, oder zumindest in einem, in dem nichts lebenswichtiges liegt.)
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage[autostyle,babel,german=guillemets,style=german]{csquotes}
\usepackage[USenglish,ngerman]{babel}

\usepackage[%
 backend=biber,%
 style=authoryear,%
 sortcites=true,%
 hyperref=auto,%
 maxcitenames=2,%
 maxbibnames=3,%
 mincitenames=1,%
 minbibnames=1,%
 dashed=false,%
 doi=false,%
 isbn=false,%
 giveninits=true,  
 uniquename=init,
]{biblatex}


\usepackage{filecontents} 
\begin{filecontents}{\jobname.bib}
@incollection{Beispiel_Tagungsband,
   location = {Stadt},
   title = {Titel des Beitrags -ein Beispiel},
   pages = {10-20},
   booktitle = {Titel des Tagungsbandes -als Beispiel},
   publisher = {Verlag-Name},
   author = {Nachname, Vorname and Nachname2, Vorname2},
   editor = {NachnameH, VornameH and NachnameH2, VornameH2},
   date = {2010},
   edition = {2},
   Volume = {10},
}

@report{Beispiel_WorkingPaper,
   location = {Stadt},
   title = {Das ist der Name für ein Working-Paper},
   number = {4},
   institution = {Beispielfakultät, Beispieluniversität},
   type = {Art des Reports},
   author = {Nachname, Vorname},
   date = {2000}
}

@article{Beispiel_artikel,
   title = {Das ist der Artikeltitel - als Beispiel},
   volume = {13},
   pages = {10-20},
   number = {4},
   journaltitle = {Titel der Periodika},
   author = {Nachname1, Vorname1 and Nachname2, Vorname2},
   date = {2010}
}

@book{Beispiel_Buch,
   location = {Stadt},
   title = {Das ist der Buchtitel - ein Beispiel},
   publisher = {Verlag-Name},
   author = {Nachname, Vorname and Nachname2, Vorname2},
   date = {2020},
   Edition = {22},
   volume ={20},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\setlength{\bibitemsep}{1em}
\DefineBibliographyStrings{ngerman}{andothers = {et\addabbrvspace al\adddot},}

% 1) zusammen mit  giveninits=true, uniquename=init, (statt firstinits) in den Optionen oben
\DeclareNameAlias{sortname}{family-given}

% 3)
\newbibmacro*{puborginst+location+date}[1]{%
  \printlist{location}%
  \setunit*{\addcomma\space}%
  \printlist{#1}%
  \setunit*{\addcomma\space}%
  \usebibmacro{date}%
  \newunit}

\renewbibmacro*{publisher+location+date}{\usebibmacro{puborginst+location+date}{publisher}}
\renewbibmacro*{institution+location+date}{\usebibmacro{puborginst+location+date}{institution}}
\renewbibmacro*{organization+location+date}{\usebibmacro{puborginst+location+date}{organization}}

% 4)
\renewbibmacro*{journal+issuetitle}{%
  \usebibmacro{journal}%
  \setunit*{\addcomma\space}%<--- hier
  \iffieldundef{series}
    {}
    {\newunit
     \printfield{series}%
     \setunit{\addcomma\space}}%<--- hier
  \usebibmacro{volume+number+eid}%
  \setunit{\addspace}%
  \usebibmacro{issue+date}%
  \setunit{\addcolon\space}%
  \usebibmacro{issue}%
  \newunit}

% 5) 
\newbibmacro*{volume+number+eid}{%
  \printfield{volume}%
  \setunit*{\addcomma\space}%<--- hier
  \printfield{number}%
  \setunit{\addcomma\space}%
  \printfield{eid}}

%7)
\DeclareFieldFormat[article]{journaltitle}{#1}%
\DeclareFieldFormat[article]{title}{#1}%
\DeclareFieldFormat[book]{title}{#1}%
\DeclareFieldFormat[inbook,incollection,inproceedings]{booktitle}{\mkbibquote{#1}}%
\DeclareFieldFormat[inbook,incollection,inproceedings]{title}{#1}%
\DeclareFieldFormat[report]{title}{#1}%

\renewcommand*{\finalnamedelim}{\addcomma\addspace}% Komma statt "und" vor dem letzten Namen
\renewcommand*{\labelnamepunct}{\addcolon\addspace}% Doppelpunkt zwischen Namen und Titel


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Ende der Anpassung des Literaturverzeichnisses

\begin{document}

Das ist ein Test für ein Tagungsband \parencite[vgl.][2-9]{Beispiel_Tagungsband}.\\
Das ist ein Test für ein Buch  \parencite[siehe][]{Beispiel_Buch}. \\
Das ist ein Test für ein Artikel  \parencite[vgl.][50-54]{Beispiel_artikel}. \\
Das ist ein Test für ein WorkingPaper  \parencite[vgl.][1-4]{Beispiel_WorkingPaper}.


%\nocite{*}
\printbibliography[heading=bibliography]
\end{document}
Ich habe auch ein paar Deiner Code-Zeilen angepasst (firstinits->giveninits; \DefineBibliographyStrings, \DeclareNameFormat{first-last}, ...)

2) Erfordert kleinere Umbaumaßnahmen am Driver, die einiges an Code verursachen.

6) Ist ein häufiger Wunsch, erfordert aber besonders mit Deinem Stil etwas Umbau am Driver und die Erstellung neuer Makros.

8) Tatsächlich ist es standardmäßig so, dass @(in)proceedings kein Auflagenfeld haben, edition wird einfach ignoriert. Die Idee ist wohl, dass Tagungsbände nur einmal herausgegeben werden. Man kann das ändern, wenn es sein muss. Auch das erfordert etwas mehr Code.

9) Dafür muss man den Driver direkt manipulieren.

Vielleicht schaffe ich es noch, mich der verbliebenen Punkte anzunehmen.

Gast

Beitrag von Gast »

Mithilfe von xpatch kann man die Anpassungen in Grenzen halten. Hier sollte jetzt jeder Punkt angesprochen sein.
Anonymous hat geschrieben:Achtung! Wegen [d]filecontents[/d] überschreibt das Beispiel eine eventuell vorhandene .bib-Datei desselben Namens. Probier es also lieber in einem leeren Order aus, oder zumindest in einem, in dem nichts lebenswichtiges liegt.
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage[autostyle,babel,german=guillemets,style=german]{csquotes}
\usepackage[USenglish,ngerman]{babel}

\usepackage[%
 backend=biber,%
 style=authoryear,%
 sortcites=true,%
 hyperref=auto,%
 maxcitenames=2,%
 maxbibnames=3,%
 mincitenames=1,%
 minbibnames=1,%
 dashed=false,%
 doi=false,%
 isbn=false,%
 giveninits=true,  
 uniquename=init,
]{biblatex}


\usepackage{filecontents} 
\begin{filecontents}{\jobname.bib}
@inproceedings{Beispiel_Tagungsband,
   location = {Stadt},
   title = {Titel des Beitrags -- ein Beispiel},
   pages = {10-20},
   booktitle = {Titel des Tagungsbandes -- als Beispiel},
   publisher = {Verlag-Name},
   author = {Nachname, Vorname and Nachname2, Vorname2},
   editor = {NachnameH, VornameH and NachnameH2, VornameH2},
   date = {2010},
   edition = {2},
   Volume = {10},
}

@report{Beispiel_WorkingPaper,
   location = {Stadt},
   title = {Das ist der Name für ein Working-Paper},
   number = {4},
   institution = {Beispielfakultät, Beispieluniversität},
   type = {Art des Reports},
   author = {Nachname, Vorname},
   date = {2000}
}

@article{Beispiel_artikel,
   title = {Das ist der Artikeltitel -- als Beispiel},
   volume = {13},
   pages = {10-20},
   number = {4},
   journaltitle = {Titel der Periodika},
   author = {Nachname1, Vorname1 and Nachname2, Vorname2},
   date = {2010}
}

@book{Beispiel_Buch,
   location = {Stadt},
   title = {Das ist der Buchtitel -- ein Beispiel},
   publisher = {Verlag-Name},
   author = {Nachname, Vorname and Nachname2, Vorname2},
   date = {2020},
   Edition = {22},
   volume ={20},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\setlength{\bibitemsep}{1em}
\DefineBibliographyStrings{ngerman}{andothers = {et\addabbrvspace al\adddot},}

% 1) zusammen mit  giveninits=true, uniquename=init, (statt firstinits) in den Optionen oben
\DeclareNameAlias{sortname}{family-given}

% 3)
\newbibmacro*{puborginst+location+date}[1]{%
  \printlist{location}%
  \setunit*{\addcomma\space}%
  \printlist{#1}%
  \setunit*{\addcomma\space}%
  \usebibmacro{date}%
  \newunit}

\renewbibmacro*{publisher+location+date}{\usebibmacro{puborginst+location+date}{publisher}}
\renewbibmacro*{institution+location+date}{\usebibmacro{puborginst+location+date}{institution}}
\renewbibmacro*{organization+location+date}{\usebibmacro{puborginst+location+date}{organization}}

% 4)
\renewbibmacro*{journal+issuetitle}{%
  \usebibmacro{journal}%
  \setunit*{\addcomma\space}%<--- hier
  \iffieldundef{series}
    {}
    {\newunit
     \printfield{series}%
     \setunit{\addcomma\space}}%<--- hier
  \usebibmacro{volume+number+eid}%
  \setunit{\addspace}%
  \usebibmacro{issue+date}%
  \setunit{\addcolon\space}%
  \usebibmacro{issue}%
  \newunit}

% 5) 
\renewbibmacro*{volume+number+eid}{%
  \printfield{volume}%
  \setunit*{\addcomma\space}%<--- hier
  \printfield{number}%
  \setunit{\addcomma\space}%
  \printfield{eid}}

% 7)
\DeclareFieldFormat[article]{journaltitle}{#1}%
\DeclareFieldFormat[article]{title}{#1}%
\DeclareFieldFormat[book]{title}{#1}%
\DeclareFieldFormat[inbook,incollection,inproceedings]{booktitle}{\mkbibquote{#1}}%
\DeclareFieldFormat[inbook,incollection,inproceedings]{title}{#1}%
\DeclareFieldFormat[report]{title}{#1}%

\renewcommand*{\finalnamedelim}{\addcomma\addspace}% Komma statt "und" vor dem letzten Namen
\renewcommand*{\labelnamepunct}{\addcolon\addspace}% Doppelpunkt zwischen Namen und Titel

\usepackage{xpatch}

% 6)
\xpatchbibdriver{inbook}
  {\usebibmacro{bybookauthor}\newunit\newblock}
  {\usebibmacro{bybookauthor}\setunit{\printdelim{nametitledelim}}\newblock}
  {}{\typeout{failed to patch in: for @inbook}}

\xpatchbibdriver{incollection}
  {\usebibmacro{in:}}
  {\usebibmacro{in:}\usebibmacro{in:editor+others}\setunit{\printdelim{nametitledelim}}\newblock}
  {}{\typeout{failed to patch in: for @incollection}}

\xpatchbibdriver{inproceedings}
  {\usebibmacro{in:}}
  {\usebibmacro{in:}\usebibmacro{in:editor+others}\setunit{\printdelim{nametitledelim}}\newblock}
  {}{\typeout{failed to patch in: for @inproceedings}}

\newbibmacro*{in:editor+others}{%
  \ifboolexpr{
    test \ifuseeditor
    and
    not test {\ifnameundef{editor}}
  }
    {\printnames{editor}%
     \setunit{\addcomma\space}%
     \usebibmacro{editor+othersstrg}%
     \clearname{editor}%
     \setunit{\addspace}%
     \printtext[parens]{\printdate}}
    {}}

% 2) & 8)
\def\do#1{%
  \xpatchbibdriver{#1}
    {\printfield{edition}\newunit}
    {}
    {}{\typeout{failed to remove edition in #1}}}
\docsvlist{book,collection,inbook,incollection}

\def\do#1{%
  \xpatchbibdriver{#1}
    {\printfield{volumes}\newunit\newblock}
    {\printfield{volumes}\newunit\newblock\printfield{edition}\newunit\newblock}
    {}{\typeout{failed to add edition in #1}}}
\docsvlist{book,collection,inbook,incollection,proceedings,inproceedings}

% 9)
\xpatchbibdriver{report}
  {\printfield{number}\newunit\newblock}
  {\printfield{number}\printunit*{\addcomma\space}\newblock}
  {}{\typeout{failed to add comma after number in @report}}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Ende der Anpassung des Literaturverzeichnisses

\begin{document}

Das ist ein Test für ein Tagungsband \parencite[vgl.][2-9]{Beispiel_Tagungsband}.\\
Das ist ein Test für ein Buch  \parencite[siehe][]{Beispiel_Buch}. \\
Das ist ein Test für ein Artikel  \parencite[vgl.][50-54]{Beispiel_artikel}. \\
Das ist ein Test für ein WorkingPaper  \parencite[vgl.][1-4]{Beispiel_WorkingPaper}.


%\nocite{*}
\printbibliography[heading=bibliography]

\end{document}

studiHD

Danke!

Beitrag von studiHD »

Ach, Mensch! Dass ging aber schnell :-)

Hab es gerade getestet und alle deine Lösungen funktionieren in dem konstruierten Beispiel perfekt! Also dafür schon einmal Daumen hoch !

Also es wäre super wenn sich die anderen Probleme auch noch irgendwie Lösen lassen. Dazu habe ich leider nix im Internet gefunden was ich auch anwenden könnte...bin erst 2 Wochen in der TeX-Welt!

Frage: Hat das @incollection anstatt @inproceedings eine Bedeutung, oder ist es "egal". Zumindest funktioniert es soweit mit @inproceedings wunderbar!

studiHD

Beitrag von studiHD »

Da warst Du zu schnell!

Probiere deine 2. Lösung auch gleich aus. Besten dank!

Gast

Beitrag von Gast »

Es gibt einen Unterschied zwischen @incollection und @inproceedings. Für Tagungen ist @inproceedings die Bessere Wahl, für generelle Sammelbände @incollection. Mit meiner zweiten Antwort, die es jetzt auch erlaubt edition mit @inproceedings zu verwenden, ist dieser Trick hinfällig.

Untersuche bei Deinen echten Referenzen aber ruhig, ob es Tagungsbände oder generelle Sammelbände sind und klassifiziere sie korrekt.

studiHD

Beitrag von studiHD »

Leider klappen die Lösungen nicht. Ich werde es ggf. morgen Stück für Stück testen können.

Es wird der Fehler angezeigt:
! Undifined control sequence \blx@unitpunct -> \printdelim{nametitledelim} \printbib..[heading=bibl...]

Gast

Beitrag von Gast »

Dein biblatex ist wahrscheinlich nicht auf dem aktuellen Stand.Der Code hier benötigt mindestens Version 3.4 von biblatex. Aktuell ist 3.7. Mach ein Update von biblatex und Biber.

StudiHD

Beitrag von StudiHD »

Liebe unbekannte Person!
Nach langer "update"-Aktion :roll: habe ich deine Lösung nun mit aktuellem biber und biblatex duchlaufen lassen und es funktioniert einwandfrei!

Ich müsste noch 2-3 Anpassungen bezüglich der Darstellung machen(punkt statt komma etc.) aber das werde ich hoffentlich von deiner Lösung ableiten können. Falls nicht, werde ich mich nochmal melden.

Also vielen vielen Dank nochmal :!:

Gruß

Antworten