PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Biblatex: Buchstabenüberschriften im Literaturverzeichnis



ApfelQ
21-07-2010, 15:33
Hallo zusammen,

ich verwende seit kurzem Biblatex mit dem Stil authoryear und komme damit ganz gut klar.

Nun möchte ich allerdings, dass im Literaturverzeichnis - sobald ein Eintrag mit einem neuen Buchstaben beginnt - eine kleine "Buchstabenüberschrift" gesetzt wird.

Zur Veranschaulichung ein kleines Beispiel:

F

Friedemann, Wilfried (2008): Titel, München.

Frohn, Doris (2009): Titel, Hamburg.


G

Günther, Manuel (1989): Titel, Frankfurt.


Ich habe es bereits geschafft, durch

\setlength{\bibitemsep}{6pt}
\setlength{\bibinitsep}{24pt}
einen kleinen Abstand zwischen den Einträgen und einen großen Abstand zwischen den einzelnen Buchstaben zu erhalten.

Nur bei den Überschriften bin ich absolut planlos. Hat jemand bereits einmal etwas ähnliches versucht? Bin für jeden Tipp dankbar.

lockstep
21-07-2010, 16:26
Derartige Buchstabenüberschriften - die eher in Stichwortverzeichnissen als in Literaturverzeichnissen vorkommen - sind in biblatex bislang nicht implementiert. Ich habe ein wenig mit der Funktion blx@initsep herumgespielt, die für das Setzen der zusätzlichen Abstände verantwortlich ist (und auf einen Featurewunsch von mir zurückgeht :)), aber die Ergebnisse waren nicht wirklich brauchbar. (Das Feld sortinit enthält zwar den jeweiligen Anfangsbuchstaben, aber es einfach auszugeben ergibt einen Konflikt mit den von manchen Bibliographiestilen erzeugten Labels.)

Tut mir leid, dass ich dir nicht helfen konnte. Falls nicht noch ein anderes Forumsmitglied eine Lösung findet, hilft eventuell das Absetzen eines Featurewunsches auf der biblatex-Homepage (http://sourceforge.net/projects/biblatex/).

lockstep

u_fischer
21-07-2010, 16:51
Also mir fehlt ein Minimalbeispiel zum Spielen ...

lockstep
21-07-2010, 17:06
Darf es auch eines von mir sein? :)



\documentclass{article}

\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\usepackage{biblatex}
\usepackage{csquotes}

\setlength{\bibinitsep}{\baselineskip}

% Unveränderter, ev. relevanter Code aus biblatex.sty
\makeatletter
\def\blx@initsep{%
\ifnum\c@instcount>\@ne
\blx@imc@iffieldequals{sortinit}\blx@previnit
{}
{\addvspace{\bibinitsep}}%
\fi
\global\let\blx@previnit\abx@field@sortinit}
\makeatother

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@article{Bli74,
hyphenation = {english},
author = {Blinder, Alan S.},
year = {1974},
title = {The economics of brushing teeth},
journaltitle = {Journal of Political Economy},
volume = {82},
number = {4},
pages = {887--891},
}

@book{Scl09,
hyphenation = {ngerman},
author = {Schlosser, Joachim},
year = {2009},
title = {Wissenschaftliche Arbeiten schreiben mit \LaTeX: Leitfaden für Einsteiger},
edition = {3},
location = {Heidelberg},
publisher = {mitp},
}
\end{filecontents}

\bibliography{\jobname}

\begin{document}

Ein bisschen Text \autocite{Bli74,Scl09}.

\printbibliography

\end{document}


lockstep

u_fischer
21-07-2010, 18:23
Sowas könnte gehen (aber nicht wirklich getestet):


\documentclass{scrartcl}

\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\usepackage{biblatex}
\usepackage{csquotes}

\setlength{\bibinitsep}{\baselineskip}


\makeatletter

\defbibenvironment{bibliography}
{\list{}{%
\leftmargin\bibhang
\itemindent-\leftmargin
\itemsep\bibitemsep
\parsep\bibparsep}}
{\endlist}
{\blx@imc@iffieldequals{sortinit}\blx@previnit
{}%
{\endlist
\minisec{\printfield{sortinit}}%
\list{}{%
\leftmargin\bibhang
\itemindent-\leftmargin
\itemsep\bibitemsep
\parsep\bibparsep}}
\item}

\makeatother

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@article{Bli74,
hyphenation = {english},
author = {Blinder, Alan S.},
year = {1974},
title = {The economics of brushing teeth},
journaltitle = {Journal of Political Economy},
volume = {82},
number = {4},
pages = {887--891},
}

@article{Bli75,
hyphenation = {english},
author = {Blubb, Alan S.},
year = {1974},
title = {The economics of brushing teeth},
journaltitle = {Journal of Political Economy},
volume = {82},
number = {4},
pages = {887--891},
}

@book{Scl09,
hyphenation = {ngerman},
author = {Schlosser, Joachim},
year = {2009},
title = {Wissenschaftliche Arbeiten schreiben mit \LaTeX: Leitfaden für Einsteiger},
edition = {3},
location = {Heidelberg},
publisher = {mitp},
}
\end{filecontents}

\bibliography{\jobname}

\begin{document}

Ein bisschen Text \autocite{Bli74,Bli75,Scl09}.

\printbibliography

\end{document}

lockstep
21-07-2010, 18:31
Bei diesem Lösungsversuch fehlen leider die Labels ([1], [2], [3]) in der Bibliographie.

Zu meinem Beispiel: Mir fiel leider erst zu spät ein, dass ein dritter Eintrag mit identem Anfangsbuchstaben entweder zum ersten oder zum zweiten Eintrag sinnvoll gewesen wäre.

lockstep

ApfelQ
21-07-2010, 22:27
Hi ihr beiden!

Erstmal vielen Dank für eure Antworten, das ging ja super schnell.

Leider übersteigen diese Modifikationen meine aktuellen Latex-Kenntnisse. Das Beispiel von Ulrike funktioniert wunderbar - es werden aber in der Tat die [1], [2], [3] Labels nicht angezeigt. Allerdings verwende ich den style authoryear, da gibt es die Labels nicht :D Für mich funktioniert also folgender Code (Änderungen zum Beispiel von Ulrike in rot):



\documentclass{scrartcl}

\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\usepackage[style=authoryear]{biblatex}
\usepackage{csquotes}

\setlength{\bibinitsep}{\baselineskip}


\makeatletter

\defbibenvironment{bibliography}
{\list{}{%
\leftmargin\bibhang
\itemindent-\leftmargin
\itemsep\bibitemsep
\parsep\bibparsep}}
{\endlist}
{\blx@imc@iffieldequals{sortinit}\blx@previnit
{}%
{\endlist
\minisec{\printfield{sortinit}}%
\list{}{%
\leftmargin\bibhang
\itemindent-\leftmargin
\itemsep\bibitemsep
\parsep\bibparsep}}
\item}

\makeatother

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@article{Bli74,
hyphenation = {english},
author = {Blinder, Alan S.},
year = {1974},
title = {The economics of brushing teeth},
journaltitle = {Journal of Political Economy},
volume = {82},
number = {4},
pages = {887--891},
}

@article{Bli75,
hyphenation = {english},
author = {Blubb, Alan S.},
year = {1974},
title = {The economics of brushing teeth},
journaltitle = {Journal of Political Economy},
volume = {82},
number = {4},
pages = {887--891},
}

@book{Scl09,
hyphenation = {ngerman},
author = {Schlosser, Joachim},
year = {2009},
title = {Wissenschaftliche Arbeiten schreiben mit \LaTeX: Leitfaden für Einsteiger},
edition = {3},
location = {Heidelberg},
publisher = {mitp},
}
\end{filecontents}

\bibliography{\jobname}

\begin{document}

Ein bisschen Text \autocite{Bli74,Bli75,Scl09}.

\printbibliography

\end{document}


Natürlich wäre es besser, wenn eine solche Möglichkeit für alle Stile bestünde - nichtsdestotrotz hilft ja manch einem auch diese Lösung.

Besten Dank!

ApfelQ
21-07-2010, 22:52
Eine kurze Frage hätte ich allerdings noch. Vor den minisecs ist jeweils eine horizontale Lücke, die so groß ist wie der hängende Einzug der Einträge. Ich bekomm den nicht raus. Könnt ihr mir bitte nochmal helfen?

u_fischer
22-07-2010, 09:45
Also

1. Die labels fehlten beim numeric-Stil, weil ich die Standard-\defbibenvironment aus biblatex.sty als Ausgangspunkt genommen hatte. Wer labels möchte, muss sich die Definition aus numeric.bbx vornehmen. Das heißt auch, dass man sich ev. für jeden Stil die Arbeit machen muss.

2. Ich empfehle nicht die Standard-Umgebung neu zu definieren, sondern eigene Umgebungen zu machen. Das macht das Testen verschiedener Varianten leichter. Also
\defbibenvironment{mybibenvI} .... und
\printbibliography[env=mybibenvI]

3. Derzeit funktioniert es nur, wenn bei \setlength{\bibinitsep} irgendein Wert ungleich 0pt steht. Wenn man das nicht möchte, muss man selbst dafür sorgen, dass der vorherige Wert von sortinit gespeichert wird (am besten in einer eigenen Variable, dann tritt man biblatex nicht auf die Füße:


{\blx@imc@iffieldequals{sortinit}\myblx@previnit
{Ja-CODE}%
{Nein-Code (z.B. \minisec + Listendefinition)}
\global\let\myblx@previnit\abx@field@sortinit
\item}


4. Den Einzug bei minisec bekommt man weg, indem man den Absatz ausdrücklich beendet (mit \endgraf, weil \par nicht erlaubt ist) also:


....\endlist\endgraf
\minisec{\printfield{sortinit}...


5. Ein Variante wäre Kategorien, dabei kann man sie nicht Kategorisierten mit notcategory am Ende ausgeben, wenn man vermeiden will, welche zu vergessen:



\documentclass{scrartcl}

\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\usepackage[style=authoryear]{biblatex}
\usepackage{csquotes}


\DeclareBibliographyCategory{A}
\DeclareBibliographyCategory{B}
\DeclareBibliographyCategory{S}

\addtocategory{B}{Bli74}
\addtocategory{B}{Bli75}
\addtocategory{S}{Scl09}

\defbibheading{A}{\minisec{A}}
\defbibheading{B}{\minisec{B}}
\defbibheading{S}{\minisec{S-Z}}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@article{Bli74,
hyphenation = {english},
author = {Blinder, Alan S.},
year = {1974},
title = {The economics of brushing teeth},
journaltitle = {Journal of Political Economy},
volume = {82},
number = {4},
pages = {887--891},
}

@article{Bli75,
hyphenation = {english},
author = {Blubb, Alan S.},
year = {1974},
title = {The economics of brushing teeth},
journaltitle = {Journal of Political Economy},
volume = {82},
number = {4},
pages = {887--891},
}

@book{Scl09,
hyphenation = {ngerman},
author = {Schlosser, Joachim},
year = {2009},
title = {Wissenschaftliche Arbeiten schreiben mit \LaTeX: Leitfaden für Einsteiger},
edition = {3},
location = {Heidelberg},
publisher = {mitp},
}

@book{lost,
hyphenation = {ngerman},
author = {Abel, Eva},
year = {2009},
title = {blubb},
edition = {3},
location = {Heidelberg},
publisher = {mitp},
}
\end{filecontents}

\bibliography{\jobname}

\begin{document}
\nocite{*}

\bibbycategory

\section{Vergessene Literatur}
\printbibliography[notcategory=A,
notcategory=B,
notcategory=S]
\end{document}

ApfelQ
23-07-2010, 10:54
Hallo Ulrike,

super - vielen Dank!

Das mit \endgraf wusste ich nicht. Ich hab ständig \par verwendet und mich über die Fehlermeldung gewundert :rolleyes: