BibLatex: authoryear anpassen

Erstellung eines Literaturverzeichnisses mit BibTeX, Biber, BibLaTeX und Co.
baumbaron
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: Mi 26. Aug 2009, 17:26

BibLatex: authoryear anpassen

Beitrag von baumbaron »

Liebe Bilatex-Kundige,

Oftmals befinden sich in einem Literaturverzeichnis mehrere Einträge eines Autors zum gleichen Jahr.
Ist es moeglich durch einfache Anpassung der Standard-Stildateien die Jahreszitate derselben automatisch durchzunummerieren ?

Also z.B.
@BOOK{Ammer79Analyse,
title = {Grammatik und funktionale Analyse},
year = {1979},
author = {Ammer, Karl}
}
@BOOK{Ammer79Funktional,
title = {Funktionalgrammatik},
year = {1979},
author = {Ammer, Karl}
}
in Jahreszitaten als "1979a" bzw. "1979b" setzen zu lassen?


Für Antworten dankt

Martin

Benutzeravatar
domwass
TeX-Entwickler
TeX-Entwickler
Beiträge: 617
Registriert: Di 26. Aug 2008, 12:44
Kontaktdaten:

Beitrag von domwass »

Das ist eigentlich das Standardverhalten. Eventuell musst du einen zusätzlichen LaTeX-Lauf machen, damit das 'a' und 'b' auch wirklich angehängt werden. Mit folgendem Beispiel funktioniert es jedenfalls:

Code: Alles auswählen

\documentclass[ngerman]{scrartcl}
\listfiles
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{Ammer79Analyse, 
title = {Grammatik und funktionale Analyse}, 
year = {1979}, 
author = {Ammer, Karl} 
} 
@BOOK{Ammer79Funktional, 
title = {Funktionalgrammatik}, 
year = {1979}, 
author = {Ammer, Karl} 
}
\end{filecontents}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{babel,csquotes}

\usepackage[
  style=authoryear
]{biblatex}
\bibliography{\jobname}

\begin{document}
\cite{Ammer79Funktional}

\cite{Ammer79Analyse}

\printbibliography
\end{document}
Gruß,
Dominik.-

baumbaron
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: Mi 26. Aug 2009, 17:26

Beitrag von baumbaron »

Danke fuer die Antwort - du hast natuerlich recht und dein Beispiel mit dem Standardstil authoryear laeuft wie gewuenscht.

Ich selbst hatte mir allerdings aus dem authoryear schon einen eigenen Stil zusammengebaut (vornehmlich um die Jahreszahlklammern loszuwerden) und in der entsprechenden .cbx Datei ganz naiv u.a. die Zeile

Code: Alles auswählen

\DeclareFieldFormat[book]{year}{#1}
eingefuegt, womit die Klammerformatierung glueckte.

Allerdings verschwindet die Zusatzmarkierung (1979a) dann, welche selbst scheinbar als Parameter fuer printfield[year] uebergeben wird da

Code: Alles auswählen

\DeclareFieldFormat[book]{year}{#1 #2}
fuer derartige Eintraege das gewuenschte Resultat ergibt, allerdings fuer alle uebrigen Eintraege einen Fehler verursacht (denn #2 gibt es natuerlich nicht).

Leider habe ich in der biblatex doku (die sonst ganz wunderbar ist) keinen Eintrag fuer den Bezeichner der Zusatzmarkierung gefunden, welche man mit Code alla

Code: Alles auswählen

\iffieldundef{zusatzmarkierung}{}{\printfield{zusatzmarkierung}}
kontrolliert explizit einfuegen koennte.
Ueberhaupt: sollte nicht \printfield eigentlich ein Befehl sein, der nur genau ein Argument akzeptierte?


Fuer Ideen dankbar gruesst

Martin

Benutzeravatar
domwass
TeX-Entwickler
TeX-Entwickler
Beiträge: 617
Registriert: Di 26. Aug 2008, 12:44
Kontaktdaten:

Beitrag von domwass »

baumbaron hat geschrieben:Danke fuer die Antwort - du hast natuerlich recht und dein Beispiel mit dem Standardstil authoryear laeuft wie gewuenscht.
Deshalb ist es sinnvoll, ein Minimalbeispiel mitzuliefern.
Ich selbst hatte mir allerdings aus dem authoryear schon einen eigenen Stil zusammengebaut (vornehmlich um die Jahreszahlklammern loszuwerden) und in der entsprechenden .cbx Datei ganz naiv u.a. die Zeile

Code: Alles auswählen

\DeclareFieldFormat[book]{year}{#1}
eingefuegt, womit die Klammerformatierung glueckte.
Welche Klammern meinst du? Bei den Zitaten im Text steht keine Klammer, und bei den Literaturangaben in der Bibliographie fällt die Klammer auch mit deinem Code nicht weg. Auch hier wäre ein Minimalbeispiel nötig, um zu sehen, was du eigentlich machst.

Vielleicht suchst du ja so etwas:

Code: Alles auswählen

\renewbibmacro*{year+labelyear}{%
  \iffieldundef{year}
    {}
    {\printfield{year}%
     \printfield{labelyear}}}
Damit werden die Klammern um die Jahreszahl in der Bibliographie nicht ausgegeben. Die Originaldefinition, die in authoryear.bbx steht, sieht übrigens so aus:

Code: Alles auswählen

\newbibmacro*{year+labelyear}{%
  \iffieldundef{year}
    {}
    {\printtext[parens]{%
       \printfield{year}%
       \printfield{labelyear}}}}
Der Befehl

Code: Alles auswählen

\printtext[parens]
sorgt dafür, dass year und labelyear ('a', 'b' etc.) in Klammern gesetzt werden.

Gruß,
Dominik.-

baumbaron
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: Mi 26. Aug 2009, 17:26

Beitrag von baumbaron »

domwass hat geschrieben:Deshalb ist es sinnvoll, ein Minimalbeispiel mitzuliefern.
Gut, seufzend gebe ich Dir dessen Sinnhaftigkeit zu :)

Also, heruntergekocht auf das Wesentliche versuche ich folgendes Verhalten zu erzeugen:

Zitate im Literaturverzeichnis: Autor (Jahr) Title ....
Zitate im Text: Autor Jahr

Dazu die bisherigen bbx/cbx-Versuche

Code: Alles auswählen

\begin{filecontents}{test.bib}
@BOOK{Ammer1,
title = {Grammatik und funktionale Analyse},
year = {1979},
author = {Ammer, Karl}
}
@BOOK{Ammer2,
title = {Funktionalgrammatik},
year = {1979},
author = {Ammer, Karl}
}
\end{filecontents}
\begin{filecontents}{test.bbx}
\ProvidesFile{test.bbx}
\RequireBibliographyStyle{standard}
\DeclareBibliographyDriver{book}{
  \usebibmacro{author}
  \printfield{year}%   
  \finentry
}
\DeclareFieldFormat[book]{year}{\mkbibparens{#1}} 
\endinput
\end{filecontents}

\begin{filecontents}{test.cbx}
\ProvidesFile{test.cbx}
\RequireCitationStyle{authoryear}
\renewbibmacro*{cite:year+labelyear}{
  \iffieldundef{year}
    {}
    {\printfield{year}%
     \printfield{labelyear}}
}
\endinput
\end{filecontents}

\documentclass[ngerman]{scrartcl}
\usepackage{filecontents}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage[style=test]{biblatex}
\bibliography{test.bib}

\begin{document}
\cite{Ammer1}
\cite{Ammer2}

\printbibliography

\end{document}

Wie befreie ich jetzt das Jahresfeld in Textzitaten aus der selbstverschuldeteten Umklammerung ?

Dank fuer eine Antwort,

M

Benutzeravatar
domwass
TeX-Entwickler
TeX-Entwickler
Beiträge: 617
Registriert: Di 26. Aug 2008, 12:44
Kontaktdaten:

Beitrag von domwass »

Gut, danke für das Minimalbeispiel. Bevor ich da jetzt in die Einzelheiten gehe, eine Frage: Warum baust du in deinem bibliography style (bbx) auf standard auf und nicht auf authoryear? Sprich: welches Aussehen willst du in der Bibliographie erreichen?

Gruß,
Dominik.-

baumbaron
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: Mi 26. Aug 2009, 17:26

Beitrag von baumbaron »

domwass hat geschrieben:Bevor ich da jetzt in die Einzelheiten gehe, eine Frage: Warum baust du in deinem bibliography style (bbx) auf standard auf und nicht auf authoryear?
Das hatte keinen tieferen Grund als das Minimalbeispiel hinzubiegen. Meine eigentliche bbx laedt keine der Standardstile. (Das sollte fuer das beobachtbare Verhalten egal sein)
Sprich: welches Aussehen willst du in der Bibliographie erreichen?
Wie oben geschrieben:

Literaturverzeichnis (bbx): Autor (Jahr), Titel. Ort: Verlag
Zitate im Text (cbx): Autor Jahr, S.234


In der bbx lasse ich das Jahr explizit in Klammern schreiben, haette dies aber gerne in der cbx wieder unwirksam gemacht.

Gruss,
Martin

Benutzeravatar
domwass
TeX-Entwickler
TeX-Entwickler
Beiträge: 617
Registriert: Di 26. Aug 2008, 12:44
Kontaktdaten:

Beitrag von domwass »

Dann schau dir an, wie das in den authoryear-Stilen gelöst ist. In der bbx wird das Makro 'year+labelyear' verwendet um die Jahreszahl in Klammern hinter dem Autoren-/Herausgebernamen aufzuführen. Außerdem werden die bibmacros, die ansonsten das Jahr ausgeben (z.B. 'location+year') so abgeändert, dass sie eben kein Jahr ausgeben. Daneben wird noch die Option 'labelyear' auf 'true' gesetzt.

In der cbx-Datei wird das bibmacro 'cite:year+labelyear' definiert, dass eben nicht in Klammern ausgegeben wird.

Vielleicht hilft dir das, damit du deine Dateien entsprechend anpassen kannst.

Gruß,
Dominik.-

baumbaron
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: Mi 26. Aug 2009, 17:26

Beitrag von baumbaron »

Vielen Dank,

ich habe jetzt wie vorgeschlagen die Klammersetzung im Literaturverzeichnis via

Code: Alles auswählen

\DeclareBibliographyDriver{book}
...
  \printtext[parens]{\printfield{year}\printfield{labelyear}}
...
und als Zitationstil authoryear verwandt - so funktioniert es reibungslos.

Mir war nur die ganze Zeit unklar, dass Veraenderungen in der .bbx via DeclareFieldFormat

Code: Alles auswählen

<***.bbx>
...
\DeclareFieldFormat[book]{year}{\mkbibparens{#1}} 
...
auch auf die Ausgabe der Textzitate (d.h. aud die .cbx) Einfluss haben.

Aber so geht es nun ganz wunderbar.

Vielen Dank!

Eine schoene Woche,
Martin

Antworten