Seite 1 von 2

biblatex: Datumsformat

Verfasst: Do 23. Sep 2010, 20:39
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?

Verfasst: Di 28. Sep 2010, 16:16
von LarsR
Hat niemand eine Idee? Ich dachte, dass das relativ leicht zu lösen wäre.

Re: biblatex: Datumsformat

Verfasst: Di 28. Sep 2010, 18:41
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

Verfasst: Di 28. Sep 2010, 19:17
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«.

Verfasst: Di 28. Sep 2010, 19:18
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«

Verfasst: Di 28. Sep 2010, 19:22
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

Re: biblatex: Datumsformat

Verfasst: Mi 29. Sep 2010, 09:48
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.-

Verfasst: Mi 29. Sep 2010, 19:36
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.

Verfasst: Mi 29. Sep 2010, 20:13
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 :-(

Verfasst: Mi 29. Sep 2010, 21:53
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