
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}
…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 biblatex
3.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 datecentury
steuert das Format die Ausgabe des Jahrhunderts und der Bibstring century
kann zur weiteren Lokalisierung der Ausgabe verwendet werden.
Siehe auch96-dates.tex
sowie §2.3.8Datums- und Zeitangaben, §4.2.4.1Generische Feldervondie biblatex
Dokumentation.
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.
Antwort3
Eine andere Möglichkeit besteht darin, sich darauf zu verlassen, dass Biber das year
Feld 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 .bib
Datei 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}