BibLatex anpassen ... die X-te Frage

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


slowfox
Forum-Anfänger
Forum-Anfänger
Beiträge: 33
Registriert: Sa 28. Feb 2009, 15:56

BibLatex anpassen ... die X-te Frage

Beitrag von slowfox »

Ich kämpfe grad mit BibLatex, und weiß nicht mehr weiter. Es geht um die Formatierung der Article-Ausgabe, insbesondere die Ausgabe von Journal, Volume, Number und Pages. BibLatex liefert mir hierfür:

Journal 5.1, S. 42-84

Nach meiner Vorgabe muss es aber folgendermaßen aussehen, wobei ich zwei Alternativen habe:

Journal 5(1):42-84

oder

Journal, Vol. 5, No. 1, pp. 42-84

Ich bin noch unerfahren mit BibLatex, nutze es das erste Mal. Ich habe als erstes versucht, den Punkt durch Klammern zu ersetzen. Mein Ansatz sieht wie folgt aus:
\begin{filecontents}{demobib.bib}
@ARTICLE{article1,
  author = {FamilyName, Givenname},
  title = {ArticleTitle},
  journal = {Journal},
  year = {2010},
  volume = {5},
  number = {1},
  pages = {42-84},
}

@ARTICLE{article2,
  author = {FamilyName, Givenname},
  title = {ArticleTitle},
  journal = {Journal},
  year = {2010},
  volume = {5},
  pages = {42-84},
}
\end{filecontents}


\documentclass[ngerman]{scrartcl}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{babel}
\usepackage[babel]{csquotes}

\usepackage[style=authoryear,dashed=false]{biblatex}

\bibliography{demobib}

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


\begin{document}

\parencite{article1}

\parencite{article2}

\printbibliography

\end{document}
Damit liefert mit BibLatex folgendes

Journal 5 (1), S.42-84

Aber ich habe auch Artikel, die nur Volume haben und keine Number, und das sieht dann so aus:

Journal 5), S.42-84

Das ist nicht wirklich dass, was ich mir gewünscht habe.

Ich habe jetzt keine weitere Idee, wie ich mein Problem lösen kann.

Vielleicht kann mir jemand helfen: Wie bringe ich BibLatex dazu, den Eintrag so zu formatieren wqie in den beiden Alternativen oben dargestellt? DANKE!

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

Beitrag von domwass »

Dafür gibt es die Abfrage \iffieldundef, die überprüft, ob ein Feld
vorhanden ist oder nicht. Und mit dem Befehl \mkbibparens kannst du
die Nummer in Klammern setzen lassen. Mach deine Umdefinierung
also folgendermaßen:
\renewbibmacro*{journal+issuetitle}{% 
  \usebibmacro{journal}% 
  \setunit*{\addspace}% 
  \iffieldundef{series} 
    {} 
    {\newunit 
     \printfield{series}% 
     \setunit{\addspace}}% 
  \printfield{volume}% 
  \iffieldundef{number}
	  {}
		{\mkbibparens{\printfield{number}}}%
  \setunit{\addcomma\space}%
  \printfield{eid}%
  \setunit{\addspace}%
  \usebibmacro{issue+date}% 
  \setunit{\addcolon\space}% 
  \usebibmacro{issue}% 
  \newunit}
Gruß,
Dominik.-

slowfox
Forum-Anfänger
Forum-Anfänger
Beiträge: 33
Registriert: Sa 28. Feb 2009, 15:56

Re: BibLatex anpassen ... die X-te Frage

Beitrag von slowfox »

Ich danke Dir Dominik! Das ist ja recht simplen. Ich wühle mich durch die verschiedenen .bbx-Dateien, die .def und die .sty sowie durch das Manual, aber ich komme nicht wirklich voran. Hast Du vielleicht genauso schnell einen Lösungsvorschlag, wie ich jetzt noch Komma und Leerzeichen zwischen Number und Pages ersetze?

IST:

Journal 5(1), S. 42-84


SOLL:

Journal 5(1):42-84

Diese Zitierweise soll ich verwenden, wenn ich einen kurzen Aufsatz schreibe. Schreibe ich einen umfangreicheren Aufsatz, darf auch das Literaturverzeichnis umfangreicher werden, dann soll der Stil folgerndermaßen aussehen:

Journal, Vol. 5, No. 1, pp. 42-84

Für Vorschläge bin ich dankbar.

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

Re: BibLatex anpassen ... die X-te Frage

Beitrag von domwass »

slowfox hat geschrieben:Hast Du vielleicht genauso schnell einen Lösungsvorschlag, wie ich jetzt noch Komma und Leerzeichen zwischen Number und Pages ersetze?

IST:

Journal 5(1), S. 42-84


SOLL:

Journal 5(1):42-84
Ja, habe ich:
\renewcommand*{\bibpagespunct}{\addcolon}
\DeclareFieldFormat{pages}{#1}
Diese Zitierweise soll ich verwenden, wenn ich einen kurzen Aufsatz schreibe. Schreibe ich einen umfangreicheren Aufsatz, darf auch das Literaturverzeichnis umfangreicher werden, dann soll der Stil folgerndermaßen aussehen:

Journal, Vol. 5, No. 1, pp. 42-84
Dafür müsste dann das bibmacro „journal+issuetitle“ entsprechend umgebaut werden.

Gruß,
Dominik.-

slowfox
Forum-Anfänger
Forum-Anfänger
Beiträge: 33
Registriert: Sa 28. Feb 2009, 15:56

Beitrag von slowfox »

Moin Dominik! Danke für deinen Code-Schnipsel.

Für die zweite Alternative habe ich jetzt das Makro wie folgt umgebaut, wobei ich im Makro selbst nur ein paar Kommas ersetzt habe, der Rest erfolgt über DeclareFieldFormat:
\begin{filecontents}{demobib.bib}
@ARTICLE{article1,
  author = {FamilyName, Givenname},
  title = {ArticleTitle},
  journal = {Journal},
  year = {2010},
  volume = {5},
  number = {1},
  pages = {42-84},
}

@ARTICLE{article2,
  author = {FamilyName, Givenname},
  title = {ArticleTitle},
  journal = {Journal},
  year = {2010},
  volume = {5},
  pages = {42-84},
}
\end{filecontents}


\documentclass[english]{scrartcl}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{babel}
\usepackage[babel]{csquotes}

\usepackage[style=authoryear,dashed=false]{biblatex}

\bibliography{demobib}

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

\DeclareFieldFormat[article]{volume}{\bibstring{jourvol}~#1}

\DeclareFieldFormat[article]{number}{\bibstring{number}~#1}

\begin{document}

\parencite{article1}

\parencite{article2}

\printbibliography

\end{document}
Das liefert mir das gewünschte Ergebnis. Aber ist der Code so auch sauber, oder sollte ich etwas anders umsetzen?

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

Beitrag von domwass »

Sieht für mich auf den ersten Blick okay aus.

Gruß,
Dominik.-

Gunnar

Beitrag von Gunnar »

ich habe da noch folgendes Problem, der code funktioniert soweit.
Nur bei mir hat nicht jeder article unbedingt eine Nr.
heißt leider, dass wenn nur ein Jg. vorhanden ist die schließende Klammer unnötigerweise noch mit aufgeführt wird.
\printfield{volume}%
  \setunit*{\addspace(}% 
\printfield{number})% 
Wie kann man es schreiben, dass sie ebenfalls nur aufgeführt wird, wenn die Nr. enthalten ist? Bei der einleitenden klammer klappt es ja automatisch...
Bin blutiger Anfänger was LaTex angeht und rumprobieren hat leider noch zu keinem Ergebnis geführt. Also schon mal Dankeschön für eine Antwort!

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

Beitrag von domwass »

Wie bereits geschrieben: mit \iffieldundef kann man überprüfen, ob das Feld
leer ist oder nicht, also z.B.
\printfield{volume}% 
\iffieldundef{number}
  {}
  {\setunit{\addspace}%
   \printfield[parens]{number}}
Die Formatierungsanweisung [parens] sorgt dafür, dass die Nummer in
Klammern ausgegeben wird.

Gruß,
Dominik.-

Antworten