biblatex: Datumsformat

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


LarsR
Forum-Anfänger
Forum-Anfänger
Beiträge: 35
Registriert: Mi 18. Aug 2010, 21:47

biblatex: Datumsformat

Beitrag von LarsR »

Hallo,

ich habe ein Problem mit dem Datumsformat bei biblatex. Ich habe das mit Hilfe des Forums Format anders formatiert, da ich es an einer Stelle im Format yyyy-mm-dd benötige. Bei Einträgen des Typs online brauche ich es aber wieder im Format dd.mm.yyyy und habe daher folgenden Code geschrieben.
\documentclass[ngerman]{scrartcl} 
\listfiles 
\usepackage{filecontents} 
\begin{filecontents}{\jobname.bib} 

@ONLINE{SpOn,
  author = {N.N.},
  title = {Artikel auf Spiegel Online},
  date = {2010-09-23},
  url = {http://www.spiegel.de/},
  urldate = {2010-09-23},}

\end{filecontents} 
\usepackage[T1]{fontenc} 
\usepackage[latin1]{inputenc} 
\usepackage{babel,csquotes} 

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

\AtBeginDocument{% 
  \protected\def\mkbibdateshort#1#2#3{% 
    \thefield{#1}% 
      \iffieldundef{#2} 
        {} 
        {-\thefield{#2}% 
         \iffieldundef{#3} 
          {} 
          {-\thefield{#3}}}} 
}

\renewbibmacro*{url+urldate}{%
  \printfield{url}%
  \iffieldundef{urlyear}
    {}
    {\setunit*{\addspace}%
     \printtext[urldate]{\printfield{urlday}\setunit*{\adddot}%
     			\printfield{urlmonth}\setunit*{\adddot}%
    			\printfield{urlyear}%\setunit*{\adddot}
}}}%
    			    
\DeclareBibliographyDriver{online}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/editor+others/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit%
  {	\printfield{day}\setunit*{\adddot}%
     	\printfield{month}\setunit*{\adddot}%
    	\printfield{year}\setunit*{\adddot}}%
  \newunit\newblock
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \printfield{version}%
  \newunit
  \printfield{note}%
  \newunit\newblock
  \printlist{organization}%
  \newunit\newblock
  \usebibmacro{date}%
  \newunit\newblock
  \iftoggle{bbx:eprint}
    {\usebibmacro{eprint}}
    {}%
  \newunit\newblock
  \usebibmacro{url+urldate}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \newunit\newblock
  \usebibmacro{pageref}%
  \usebibmacro{finentry}}    
    
\begin{document}  
\cite{SpOn}
\printbibliography 
\end{document}
N.N. (2010-09-23). Artikel auf Spiegel Online. 23.Sep.2010. url: http://www.spiegel.
de/ (besucht am 23.09.2010).
Am Ergebnis verwundern mich gleich drei Dinge:

1. Das erste Datum in Klammern (verschwindet, wenn ich \usebibmacro{author/editor+others/translator+others}% auskommentiere)

2. Das Format des zweiten Datums, da ich date=short verwende und das ansonsten aufgebaut ist wie der Eintrag für das URL-Datum, sollte es doch auch im gleichen Format vorliegen (also 23.01.2010 und nicht 23.Sep.2010).

Weiß jemand, wie ich das eleganter lösen kann oder aus dem Sep. eine 09. mache?

LarsR
Forum-Anfänger
Forum-Anfänger
Beiträge: 35
Registriert: Mi 18. Aug 2010, 21:47

Beitrag von LarsR »

Hat niemand eine Idee? Ich dachte, dass das relativ leicht zu lösen wäre.

Mechanicus
Forum-Guru
Forum-Guru
Beiträge: 322
Registriert: Mi 8. Okt 2008, 18:41
Wohnort: Hamburg

Re: biblatex: Datumsformat

Beitrag von Mechanicus »

LarsR hat geschrieben: 1. Das erste Datum in Klammern (verschwindet, wenn ich \usebibmacro{author/editor+others/translator+others}% auskommentiere)
Das Makro ruft das Makro \usebibmacro{author} auf, welches wiederum in der durch den authoryear-Stil redefiniert wird:
\renewbibmacro*{author}{%
  \ifboolexpr{
    test \ifuseauthor
    and
    not test {\ifnameundef{author}}
  }
    {\usebibmacro{bbx:dashcheck}
       {\bibnamedash}
       {\usebibmacro{bbx:savehash}%
        \printnames{author}%
	\iffieldundef{authortype}
	  {\setunit{\addspace}}
	  {\setunit{\addcomma\space}}}%
     \iffieldundef{authortype}
       {}
       {\usebibmacro{authorstrg}%
	\setunit{\addspace}}}%
    {\global\undef\bbx@lasthash
     \usebibmacro{labeltitle}%
     \setunit*{\addspace}}%
  \usebibmacro{date+extrayear}}
Hier findest du das Makro \usebibmacro{date+extrayear}. Der Stil authoryear hat ja kein key vor den Literatureinträgen.
LarsR hat geschrieben: 2. Das Format des zweiten Datums, da ich date=short verwende und das ansonsten aufgebaut ist wie der Eintrag für das URL-Datum, sollte es doch auch im gleichen Format vorliegen (also 23.01.2010 und nicht 23.Sep.2010).
Hier eine Möglichkeit. Dabei fiel mir auf, dass der Eintragstyp day gar nicht funktioniert:
\documentclass[ngerman]{scrartcl}
\listfiles
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}

@ONLINE{SpOn,
  author = {N. N.},
  title = {Artikel auf Spiegel Online},
  date={2010-9-23},
  url = {http://www.spiegel.de/},
  urldate = {2010-9-25},}

@ONLINE{SpOnI,
  author = {O. O.},
  title = {Artikel auf Spiegel Online},
  year = {2010},
  month={9},
  day={23},
  url = {http://www.spiegel.de/},
  urldate = {2010-9-25},}

\end{filecontents}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{babel,csquotes}

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

\renewbibmacro*{author}{%
  \ifboolexpr{
    test \ifuseauthor
    and
    not test {\ifnameundef{author}}
  }
    {\usebibmacro{bbx:dashcheck}
       {\bibnamedash}
       {\usebibmacro{bbx:savehash}%
        \printnames{author}%
    \iffieldundef{authortype}
      {\setunit{\addspace}}
      {\setunit{\addcomma\space}}}%
     \iffieldundef{authortype}
       {}
       {\usebibmacro{authorstrg}%
    \setunit{\addspace}}}%
    {\global\undef\bbx@lasthash
     \usebibmacro{labeltitle}%
     \setunit*{\addspace}}%
     \printtext[date]{%
      \thefield{year}-\thefield{month}-\thefield{day}%
      }
  }

\renewbibmacro*{url+urldate}{%
  \printfield{url}%
  \iffieldundef{urlyear}
    {}
    {\setunit*{\addspace}%
     \printtext[urldate]{\printfield{urlday}\setunit*{\adddot}%
              \printfield{urlmonth}\setunit*{\adddot}%
             \printfield{urlyear}%\setunit*{\adddot}
}}}%
                 
\DeclareBibliographyDriver{online}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/editor+others/translator+others}
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit%
  {\iffieldundef{year}
      {}
      {\printtext{\printdateextra}}}%
  \newunit\newblock
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \printfield{version}%
  \newunit
  \printfield{note}%
  \newunit\newblock
  \printlist{organization}%
  \newunit\newblock
  \usebibmacro{date}%
  \newunit\newblock
  \iftoggle{bbx:eprint}
    {\usebibmacro{eprint}}
    {}%
  \newunit\newblock
  \usebibmacro{url+urldate}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \newunit\newblock
  \usebibmacro{pageref}%
  \usebibmacro{finentry}}    
   
\begin{document}  
\cite{SpOn}\par\cite{SpOnI}
\printbibliography
\end{document}
Gruß
Marco
Zuletzt geändert von Mechanicus am Mi 29. Sep 2010, 21:40, insgesamt 1-mal geändert.
Personalführung ist die Kunst der Vorgesetzten den Untergebenen so schnell über den Tisch zu ziehen, dass er die Reibungshitze als Nestwärme empfindet.

Nerd 032f

Beitrag von Nerd 032f »

Nur mal so als Hinweis: Im Deutschen Satz setzt man nach den Punkten im Datum noch eine kleine Lücke, also nicht »28.09.2010«, sondern »28.\,09\,2010«.

Nerd 032f

Beitrag von Nerd 032f »

Nerd 032f hat geschrieben:Nur mal so als Hinweis: Im Deutschen Satz setzt man nach den Punkten im Datum noch eine kleine Lücke, also nicht »28.09.2010«, sondern »28.\,09\,2010«.
Ich meinte natürlich: »28.\,09\.,2010«

Mechanicus
Forum-Guru
Forum-Guru
Beiträge: 322
Registriert: Mi 8. Okt 2008, 18:41
Wohnort: Hamburg

Beitrag von Mechanicus »

Nerd 032f hat geschrieben:
Nerd 032f hat geschrieben:Nur mal so als Hinweis: Im Deutschen Satz setzt man nach den Punkten im Datum noch eine kleine Lücke, also nicht »28.09.2010«, sondern »28.\,09\,2010«.
Ich meinte natürlich: »28.\,09\.,2010«
stimmt natürlich, entsprechend müsste oben noch geändert werden:
\renewbibmacro*{url+urldate}{%
  \printfield{url}%
  \iffieldundef{urlyear}
    {}
    {\setunit*{\addspace}%
     \printtext[urldate]{\printfield{urlday}\setunit*{\adddot\addthinspace}%
              \printfield{urlmonth}\setunit*{\adddot\addthinspace}%
             \printfield{urlyear}%\setunit*{\adddot}
}}}%
Gruß
Marco
Personalführung ist die Kunst der Vorgesetzten den Untergebenen so schnell über den Tisch zu ziehen, dass er die Reibungshitze als Nestwärme empfindet.

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

Re: biblatex: Datumsformat

Beitrag von domwass »

Mechanicus hat geschrieben:Dabei fiel mir auf, dass der Eintragstyp day gar nicht funktioniert
Seit biblatex 0.9 gibt es das Feld »day« nicht mehr. Stattdessen wird einfach
in »date« das gesamte Datum angegeben (z.B. »2010-09-29«), biblatex
splittet das dann in year, month und day auf.

Gruß,
Dominik.-

LarsR
Forum-Anfänger
Forum-Anfänger
Beiträge: 35
Registriert: Mi 18. Aug 2010, 21:47

Beitrag von LarsR »

Danke für die Hinweise, ich habe im Moment keine Zeit, das umzusetzen und auszuprobieren, werde mich in den kommenden Tagen damit beschäftigen.

LarsR
Forum-Anfänger
Forum-Anfänger
Beiträge: 35
Registriert: Mi 18. Aug 2010, 21:47

Beitrag von LarsR »

Gerade auf die Schnelle ausprobiert, ich bin mir mit der VErwendung von \thefield nicht so sicher, wieso führt
\printtext[date]{\thefield{year}-\thefield{day}-\thefield{month}}%
zu 2008-01-24 und
\printtext[date]{\thefield{day}\setunit*{\adddot\addthinspace}% 
           \thefield{month}\setunit*{\adddot\addthinspace}% 
             \thefield{year}%
 }
zu 24012008? Irgendwas mache ich wohl falsch :-(

Mechanicus
Forum-Guru
Forum-Guru
Beiträge: 322
Registriert: Mi 8. Okt 2008, 18:41
Wohnort: Hamburg

Beitrag von Mechanicus »

LarsR hat geschrieben:Gerade auf die Schnelle ausprobiert,
stimmt das Ergebnis?


LarsR hat geschrieben: ich bin mir mit der VErwendung von \thefield nicht so sicher,
\thefield gibt einfach nur die Eingabe des Feldes date ohne weitere Formatierung aus.

LarsR hat geschrieben: zu 24012008? Irgendwas mache ich wohl falsch :-(
schreibe einfach
\printdate

Gruß
Marco
Personalführung ist die Kunst der Vorgesetzten den Untergebenen so schnell über den Tisch zu ziehen, dass er die Reibungshitze als Nestwärme empfindet.

Antworten