Biblatex "ohne Jahresangabe" Thema ist als GELÖST markiert

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


Franziska

Biblatex "ohne Jahresangabe"

Beitrag von Franziska »

Hallo,

wie bringe ich Biblatex dazu, bei Quellen, bei denen keine Jahresangabe vorliegt, statt der Jahreszahl "o.J." auszugeben?

LG

Franziska

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

Re: Biblatex "ohne Jahresangabe"

Beitrag von domwass »

Das lässt sich pauschal nicht beantworten. Welchen Stil benutzt du? Wo
genau soll 'o.J.' ausgegeben werden, in Zitaten oder im
Literaturverzeichnis oder in beiden Fällen? Bau am besten ein
Minimalbeispiel (siehe Signatur) und poste das hier.

[edit: 21.01.2010 08:45]
Einfache, aber unsaubere Alternative: du schreibst statt der Jahreszahl
einfach "o.\,J." in das year-Feld.
[/edit]

Gruß,
Dominik.-

Franziska

Beitrag von Franziska »

Hallo Dominik,

schönen Dank für Deine Antwort. Ich benutze den Bibliografiestil authoryear und den Zitierstil authoryear-ibid. "o.J." soll sowohl bei Zitaten im Text, als auch bei den Literaturangaben im Literaturverzeichnis ausgegeben werden. Im Text hätte ich gern die Form "Autor o.J.: Seite" und im Literaturverzeichnis "Autor, Vorname abgekürzt mit Punkt, o.J.: Titel. Auflage, Seitenzahl, Erscheinungsort: Verlag."(für ein Buch)

Ich habe leider noch niemals ein Minimalbeispiel erstellt. Vor allem ist mir nicht klar, wie ich die .bib und meine Anpassungen in der .cfg und der german.lbx posten soll. Kommt das alles in minimalbeispiel.tex oder soll ich das separat angeben?

LG

Franziska

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

Beitrag von domwass »

Franziska hat geschrieben:Ich habe leider noch niemals ein Minimalbeispiel erstellt. Vor allem ist mir nicht klar, wie ich die .bib und meine Anpassungen in der .cfg und der german.lbx posten soll. Kommt das alles in minimalbeispiel.tex oder soll ich das separat angeben?
Hinweise dazu findest du unter http://biblatex.dominik-wassenhoven.de/ ... ml?de&mini.

Gruß,
Dominik.-

Franziska

Beitrag von Franziska »

Hallo Dominik,

ich habe die .bib-Angaben mit filecontents eingefügt. Ein paar Anpassungen aus meiner biblatex.cfg habe ich in die Präambel gesetzt. Ist das richtig so? Habe ich die weiteren Angaben in der biblatex.cfg damit quasi ausgeschaltet?
Das Minimalbeispiel (bzw. was ich dafür halte) sieht dann so aus:
\documentclass[ngerman]{scrartcl}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@Book{mustermanna,
  author    = {Mustermann, Michel and Musterfrau,
               Martina},
  title     = {Mustertitel1},
  publisher = {Musterverlag},
  location  = {Musterstadt},
  year      = {2001},
  pagetotal = {123},
  edition={2}
}
@Book{mustermannb,
  author    = {Mustermann, Michel and Musterfrau,
               Martina},
  title     = {Mustertitel2},
  publisher = {Musterverlag},
  location  = {Musterstadt},
  year      = {2001},
  pagetotal = {234},
  edition={3},
}
@Book{mustermann,
  author    = {Mustermann, Michel and Musterfrau,
               Martina},
  title     = {MustertitelohneJahr1},
  publisher = {Musterverlag},
  location  = {Musterstadt},
  year      = {},
  pagetotal = {345},
  edition={4},
}
@Book{mustermanno,
  author    = {Mustermann, Michel and Musterfrau,
               Martina},
  title     = {MustertitelohneJahr2},
  publisher = {Musterverlag},
  location  = {Musterstadt},
  year      = {o.\,J.},
  pagetotal = {345},
  edition={4},
}


\end{filecontents}
\usepackage[latin9]{inputenc}
\usepackage{babel,csquotes}
\usepackage[bibstyle=authoryear, citestyle=authoryear-ibid, natbib=true]{biblatex}
\bibliography{\jobname}

%Nachnamen Verfasser in Kapitälchen:
\renewcommand*{\mkbibnamelast}[1]{\textsc{#1}}

%Jahr und label nicht in Klammern
\renewbibmacro*{year+labelyear}{%
  \iffieldundef{year}
    {}
    {\printtext{
       \printfield{year}%
       \printfield{labelyear}}}}

%labelyear normal
\DeclareFieldFormat{labelyear}{{\mknumalph{#1}}}

%kein Komma Autor (
\renewcommand*{\nameyeardelim}{\addspace}

%Doppelpunkt nach Jahreszahl
\renewcommand{\postnotedelim}{\addcolon\addspace}

%S. vor Seitenangabe entfernen
\DeclareFieldFormat{postnote}{#1}
\DeclareFieldFormat{multipostnote}{#1}

\renewbibmacro*{chapter+pages}{%
  \printfield{chapter}%
  \setunit{\bibpagespunct}%
  \printfield{pages}%
  \newunit}

%Angaben bei BÜCHERN:
\DeclareBibliographyDriver{book}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/editor+others/translator+others}%
  \usebibmacro{year+labelyear}%NEU
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{maintitle+title}%
  \nopunct
  \newunit\newblock
  \printfield{edition}%
  \newunit\newblock
  \printfield{volumes}%
  \newunit\newblock
  \usebibmacro{series+number}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \printfield{pagetotal}
  \newunit
  \usebibmacro{publisher+location+year}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \usebibmacro{finentry}}


\begin{document}
Dies ist nur ein kleines Testdokument.
\citep[12]{mustermanna}
\citep[34]{mustermannb}
\citep[56]{mustermann}
\citep[67]{mustermanno}
\printbibliography
\end{document}
Die Ausgabe mit angegebener Jahreszahl ist bei mir damit in der gewünschten Form, d.h. im Text "Autor Jahreszahl: Seitenzahl" und im Verzeichnis "Autor, Vorname abgekürzt mit Punkt, Jahreszahl: Titel. Auflage, Seitenzahl, Erscheinungsort: Verlag."
Ohne angegebene Jahreszahl gibt es aber im Text nur "Titel: Seitenzahl" und im Verzeichnis "Autor, Vorname abgekürzt mit Punkt: Titel. Auflage, Seitenzahl, Erscheinungsort: Verlag."
Mit "o.\,J." im year-Feld erhalte ich im Text "Autor o. J. Seitenzahl" und im Verzeichnis "Autor, Vorname abgekürzt mit Punkt, o. J. Titel. Auflage, Seitenzahl, Erscheinungsort: Verlag."
Ich hätte die Angaben in Text und Verzeichnis bei fehlender Jahreszahl aber gern analog zur o.g. Form, also mit der Angabe "o.J." statt der Jahreszahl.

LG

Franziska

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

Beitrag von domwass »

Franziska hat geschrieben:ich habe die .bib-Angaben mit filecontents eingefügt. Ein paar Anpassungen aus meiner biblatex.cfg habe ich in die Präambel gesetzt. Ist das richtig so? Habe ich die weiteren Angaben in der biblatex.cfg damit quasi ausgeschaltet?
Das ist richtig so. Die biblatex.cfg ist aber nicht ausgeschaltet. Wenn du
sichergehen willst, das keine Angaben von biblatex.cfg verwendet werden,
lege eine leere biblatex.cfg in das Verzeichnis mit dem Testdokument.

Danke für das sehr schöne Minimalbeispiel. Ich habe es entsprechend
deiner Wünsche angepasst (s.u.).

Kurze Erläuterung: Das bibmacro 'cite' muss geändert werden, weil es
überprüft, ob ein Jahr vorhanden ist, und wenn nicht, überhaupt keine
Jahresangabe ausgibt (also das entsprechende bibmacro
'cite:year+labelyear' gar nicht aufruft). Dieses bibmacro
(cite:year+labelyear) habe ich dann so umdefiniert, dass der bibstring
'noyear' verwendet wird, falls kein Jahr angegeben ist. Diesen bibstring
habe ich vorher definiert (damit kann man das leichter ändern, wenn statt
'o.J.' etwas anderes stehen soll).

Außerdem habe ich noch das bibmacro 'year+labelyear' angepasst, das für
die Darstellung im Literaturverzeichnis zuständig ist.

Der Doppelpunkt nach 'o.J.' wird übrigens verschluckt, weil biblatex den
Punkt als Satzendepunkt interpretiert. Schreibt man stattdessen
'o.J\adddot', bleibt der Punkt erhalten (siehe Minimalbeispiel).
Das hat auch mit der Einstellung der Option 'autopunct' (bzw. dem Befehl
\DeclareAutoPunctuation) zu tun.

Übrigens: Der bibstyle 'authoryear-ibid' entspricht dem bibstyle
'authoryear', so dass du einfach style=authoryear-ibid verwenden kannst.

Hier das Minimalbeispiel:
\documentclass[ngerman]{scrartcl} 
\usepackage{filecontents} 
\begin{filecontents}{\jobname.bib} 
@Book{mustermanna, 
  author    = {Mustermann, Michel and Musterfrau, 
               Martina}, 
  title     = {Mustertitel1}, 
  publisher = {Musterverlag}, 
  location  = {Musterstadt}, 
  year      = {2001}, 
  pagetotal = {123}, 
  edition={2} 
} 
@Book{mustermannb, 
  author    = {Mustermann, Michel and Musterfrau, 
               Martina}, 
  title     = {Mustertitel2}, 
  publisher = {Musterverlag}, 
  location  = {Musterstadt}, 
  year      = {2001}, 
  pagetotal = {234}, 
  edition={3}, 
} 
@Book{mustermann, 
  author    = {Mustermann, Michel and Musterfrau, 
               Martina}, 
  title     = {MustertitelohneJahr1}, 
  publisher = {Musterverlag}, 
  location  = {Musterstadt},
  pagetotal = {345}, 
  edition={4}, 
} 
@Book{mustermanno, 
  author    = {Mustermann, Michel and Musterfrau, 
               Martina}, 
  title     = {MustertitelohneJahr2}, 
  publisher = {Musterverlag}, 
  location  = {Musterstadt}, 
  year      = {o.\,J\adddot}, 
  pagetotal = {345}, 
  edition={4}, 
} 
\end{filecontents} 
\usepackage[latin9]{inputenc} 
\usepackage{babel,csquotes} 
\usepackage[
  style=authoryear-ibid,
  natbib=true
]{biblatex} 
\bibliography{\jobname} 

%Nachnamen Verfasser in Kapitälchen: 
\renewcommand*{\mkbibnamelast}[1]{\textsc{#1}} 

\NewBibliographyString{noyear}
\DefineBibliographyStrings{ngerman}{%
  noyear = {o\adddot\,J\adddot\space}}
	
% Jahr und label nicht in Klammern (Zitate)
\renewbibmacro*{cite}{%
  \global\boolfalse{cbx:loccit}%
  \iffieldundef{shorthand}
    {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
       {\usebibmacro{cite:ibid}}
       {\ifthenelse{\ifnameundef{labelname}}%\OR\iffieldundef{year}}
	  {\usebibmacro{cite:label}%
           \setunit{\addspace}}
	  {\printnames{labelname}%
           \setunit{\nameyeardelim}}%
	\usebibmacro{cite:year+labelyear}}}
    {\usebibmacro{cite:shorthand}}}
		
\renewbibmacro*{cite:year+labelyear}{%
  \iffieldundef{year}
    {\printtext{\bibstring{noyear}}}
    {\printtext[bibhyperref]{%
       \printfield{year}%
       \printfield{labelyear}}}}

% o.J. in Bibliographie, wenn kein year angegeben
\renewbibmacro*{year+labelyear}{%
  \iffieldundef{year}
    {\printtext{\bibstring{noyear}}}
    {\printfield{year}%
     \printfield{labelyear}}}
						
%labelyear normal 
\DeclareFieldFormat{labelyear}{{\mknumalph{#1}}} 

%kein Komma Autor ( 
\renewcommand*{\nameyeardelim}{\addspace} 

%Doppelpunkt nach Jahreszahl 
\renewcommand{\postnotedelim}{\addcolon\addspace} 

%S. vor Seitenangabe entfernen 
\DeclareFieldFormat{postnote}{#1} 
\DeclareFieldFormat{multipostnote}{#1} 

\renewbibmacro*{chapter+pages}{% 
  \printfield{chapter}% 
  \setunit{\bibpagespunct}% 
  \printfield{pages}% 
  \newunit} 

\begin{document} 
Dies ist nur ein kleines Testdokument. 
\citep[12]{mustermanna} 
\citep[34]{mustermannb} 
\citep[56]{mustermann} 
\citep[67]{mustermanno} 
\printbibliography 
\end{document}

Franziska

Beitrag von Franziska »

Hallo Domink,

ich bin erst heute wieder zum Latexen gekommen. Deshalb erst jetzt: Schönen Dank für Deinen Code, klappt prima! Macht es übrigens Sinn, mit labelyear zu erweitern, falls von einem Autor mehrere Werke ohne Jahresangabe verarbeitet werden? Also z.B. so:
\NewBibliographyString{noyear}
\DefineBibliographyStrings{ngerman}{%
  noyear = {o\adddot\,J\adddot}\printfield{labelyear}}
Beim Eingeben meiner Literatur bin ich noch auf einen anderen Fall gestoßen:
Ich habe einige Werke ohne Autor. Gibt es dafür eine Lösung analog zu noyear?

LG

Franziska

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

Beitrag von domwass »

Franziska hat geschrieben:Macht es übrigens Sinn, mit labelyear zu erweitern, falls von einem Autor mehrere Werke ohne Jahresangabe verarbeitet werden?
Prinzipiell schon, probiere einfach aus, ob dein Lösungsansatz funktioniert.
Beim Eingeben meiner Literatur bin ich noch auf einen anderen Fall gestoßen:
Ich habe einige Werke ohne Autor. Gibt es dafür eine Lösung analog zu noyear?
Nun, authoryear greift auf den Titel zurück, wenn es keinen Autor gibt
(bzw. auf den shorttitle, falls der definiert ist). Das ist auch
aussagekräftiger als 'ohne Autor' oder so etwas.

Gruß,
Dominik.-

Franziska

Beitrag von Franziska »

Hallo Dominik,
Nun, authoryear greift auf den Titel zurück, wenn es keinen Autor gibt
(bzw. auf den shorttitle, falls der definiert ist). Das ist auch
aussagekräftiger als 'ohne Autor' oder so etwas.
Ich habe nachgefragt: Leider ist, wenn es keinen Autor gibt, die Angabe "o.A." sowohl im Text als auch im Literaturverzeichnis obligatorisch (und nicht verhandelbar :(


Das heißt für mich, dass ich die Stelle(n) finden muss, wo auf title bzw. shorttitle zurückgegriffen wird, um dort eine Anweisung "o.A." zu setzen.

Nur wo sind diese?

LG

Franziska

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

Beitrag von domwass »

Franziska hat geschrieben:Ich habe nachgefragt: Leider ist, wenn es keinen Autor gibt, die Angabe "o.A." sowohl im Text als auch im Literaturverzeichnis obligatorisch (und nicht verhandelbar :(


Das heißt für mich, dass ich die Stelle(n) finden muss, wo auf title bzw. shorttitle zurückgegriffen wird, um dort eine Anweisung "o.A." zu setzen.

Nur wo sind diese?
Probier mal folgendes für die Literaturverweise im Text:
\renewbibmacro*{cite:label}{%
  \iffieldundef{label}
    {\printtext[bibhyperref]{\printtext{o\adddot\,A\adddot}}}
    {\printtext[bibhyperref]{\printfield{label}}}}
Für das Literaturverzeichnis:
\renewbibmacro*{author}{%
  \ifnameundef{author}
    {\printtext{o\adddot\,A\adddot}
    {}%
  \ifthenelse{\ifuseauthor\AND\NOT\ifnameundef{author}}
    {\ifthenelse{\iffieldequals{fullhash}{\bbx@lasthash}\AND
                 \NOT\iffirstonpage}
       {\bibnamedash}
       {\savefield{fullhash}{\bbx@lasthash}%
        \printnames{author}%
	\iffieldundef{authortype}
	  {\setunit{\addspace}}
	  {\setunit{\addcomma\space}}}%
     \iffieldundef{authortype}
       {}
       {\usebibmacro{authorstrg}%
	\setunit{\addspace}}}%
    {\global\undef\bbx@lasthash
     \usebibmacro{labeltitle}%
     \setunit*{\addspace}}%
  \usebibmacro{year+labelyear}}
Ich hab das allerdings nicht ausprobiert, gebe also keine Gewähr.

Gruß,
Dominik.-

Antworten