Nicht-Standarddatum in Biblatex

Nicht-Standarddatum in Biblatex

Ich verwende biblatex und biber zum Zitieren von Werken, die in einer Geschichtsstunde gezeigt werden. Daten in Jahrhunderten (12. Jahrhundert oder12. Jahrhundertim Französischen) sind recht üblich. Ich habe solche Daten immer in das Feld „Jahr“ geschrieben, und seit dem letzten Upgrade hat es funktioniert:

Nachfolgende MWE-Kompilationen mit TexLive 2015 …

\documentclass{article}
\usepackage{biblatex}
\usepackage[utf8]{inputenc}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
    @Thesis{exemple_image,
    Title                    = {Title of the work},
    Author                   = {Artist Name},
    Location                 = {Switzerland},
    Year                     = {{\siecle{15}}},
    }
\end{filecontents}
\addbibresource{\jobname.bib}

\newcommand{\siecle}[1]{%
\textsc{\romannumeral #1}\textsuperscript{e}~siècle
}

\nocite{*}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

Referenz richtig gedruckt

…aber nicht mehr mit TexLive 2016, wo ich einen Fehler habe: ! Use of /sortlist doesn't match its definition.

Ich vermute, dass Biblatex 3.5 beim Feld „Jahr“ weniger freizügig ist. Ich habe erfolglos in der Dokumentation gesucht und bin für alle Vorschläge offen.

Antwort1

Mit den neuen ISO 8601 Datumsfunktionen von biblatex3.10 und höher können Sie ein Jahrhundert eingeben als

date = {19XX}

Leider berücksichtigen die Standard-Datumsformate dies nicht standardmäßig, indem sie „20. Jahrhundert“ oder eine ähnliche Ausgabe anzeigen, sondern einfach „1900-1999“. Wir können die Verarbeitung von Jahrhunderten jedoch wie folgt aktivieren

\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage{biblatex}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@thesis{exemple_image,
  title    = {Title of the work},
  author   = {Artist Name},
  location = {Switzerland},
  date     = {16XX},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\NewBibliographyString{century}
\DefineBibliographyStrings{french}{century = {siècle}}

\makeatletter
\renewcommand*{\RNfont}{\textsc}
\DeclareFieldFormat{datecentury}{\RN{#1}\textsuperscript{e}}
\renewrobustcmd*{\mkdaterangetrunc}[2]{%
  \begingroup
    \blx@metadateinfo{#2}%
    \iffieldundef{#2year}
      {}
      {\printtext[#2date]{%
         \datecircaprint
         % Such a season component can only come from an EDTF 5.1.5 season which replaces
         % a normal month so if it exists, we know that a normal date print is ruled out
         \iffieldequalstr{dateunspecified}{yearincentury}
           {\printtext[datecentury]{\number\numexpr\thefield{#2year}/100+1\relax}\setunit{\addnbspace}\bibstring{century}}
           {\iffieldundef{#2season}
              {\iffieldsequal{#2year}{#2endyear}
                 {\iffieldsequal{#2month}{#2endmonth}
                    {\csuse{mkbibdate#1}{}{}{#2day}}
                    {\csuse{mkbibdate#1}{}{#2month}{#2day}}}
                 {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
                  \iffieldsequal{#2dateera}{#2enddateera}{}
                   {\dateeraprint{#2year}}}}
              {\iffieldsequal{#2year}{#2endyear}
                {\csuse{mkbibseasondate#1}{}{#2season}}
                {\csuse{mkbibseasondate#1}{#2year}{#2season}%
                 \iffieldsequal{#2dateera}{#2enddateera}{}
                   {\dateeraprint{#2year}}}}%
            \dateuncertainprint
            \iffieldundef{#2endyear}
              {}
              {\iffieldequalstr{#2endyear}{}
                 {\mbox{\bibdaterangesep}}
                 {\bibdaterangesep
                  \enddatecircaprint
                  \iffieldundef{#2season}
                    {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}
                    {\csuse{mkbibseasondate#1}{#2endyear}{#2endseason}}%
                  \enddateuncertainprint
                  \dateeraprint{#2endyear}}}}}}%
  \endgroup}
\makeatother

\begin{document}
\nocite{*}
\printbibliography
\end{document}

Bei \iffieldequalstr{dateunspecified}{yearincentury}der Überprüfung auf ein Jahrhundert datecenturysteuert das Format die Ausgabe des Jahrhunderts und der Bibstring centurykann zur weiteren Lokalisierung der Ausgabe verwendet werden.

Beispielausgabe

Siehe auch96-dates.texsowie §2.3.8Datums- und Zeitangaben, §4.2.4.1Generische Feldervondie biblatexDokumentation.

Antwort2

Ändern Sie einfach die Art und Weise, wie Sie definieren \siecle:

\newrobustcmd{\siecle}[1]{%
  \textsc{\romannumeral #1}\textsuperscript{e}~siècle
}

Auf diese Weise wird das Makro nicht vorzeitig erweitert. Natürlich wird die Warnung

WARN - year field '{\siecle{15}}' in entry 'exemple_image' is not an integer - this will probably not sort properly.

wird sich trotzdem zeigen.

Bildbeschreibung hier eingeben

Antwort3

Eine andere Möglichkeit besteht darin, sich darauf zu verlassen, dass Biber das yearFeld einem anderen Feld zuordnet. (In diesem Beispiel wird verwendet addendum.) Aus dem Beispiel geht nicht hervor, ob Sie die Quellzuordnung auf eine bestimmte Teilmenge von Einträgen beschränken möchten oder müssen, aber es gibt mehrere Möglichkeiten, dies zu tun. (In diesem Beispiel wird die Zuordnung auf die bestimmte .bibDatei und den Eintragstyp beschränkt thesis, nur als Beispiel.)

Biber wird ohne Warnungen oder Fehler fertig.

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
    @Thesis{exemple_image,
    Title                    = {Title of the work},
    Author                   = {Artist Name},
    Location                 = {Switzerland},
    Year                     = {{\siecle{15}}},
    }
\end{filecontents}
\usepackage[backend=biber]{biblatex}
\addbibresource{\jobname.bib}

\newcommand{\siecle}[1]{%
  \textsc{\romannumeral #1}\textsuperscript{e}~siècle
}

\DeclareSourcemap{
  \maps[datatype=bibtex, overwrite]{
    \map{
      \perdatasource{\jobname.bib}% <-- If you have them in a special bib file
      \pertype{thesis}%             <-- If you want to limit by type
      \step[fieldsource=year]
      \step[fieldset=addendum, origfieldval]
      \step[fieldset=year, null]
    }
  }
}

\nocite{*}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

verwandte Informationen