Abaixo de um mwe:
\begin{filecontents}[overwrite]{\jobname.bib}
@customa{a,
author = {Author},
eventdate = {1000-01-01},
title = {Title},
journaltitle = {Journaltitle},
date = {3000},
}
@customa{b,
author = {Author},
eventdate = {2000-01-01},
title = {Title},
journaltitle = {Journaltitle},
date = {1000},
}
@customa{c,
author = {Author},
eventdate = {3000-01-01},
title = {Title},
journaltitle = {Journaltitle},
date = {2000},
}
@article{article,
author = {Author},
title = {Title},
journaltitle = {Journaltitle},
date = {2000},
}
\end{filecontents}
\documentclass{article}
\usepackage[style=authortitle]{biblatex}
\addbibresource{\jobname.bib}
\DeclareStyleSourcemap{
\maps{
\map{
\pertype{customa}
\step[fieldsource=eventdate, match=\regexp{\A(\d+)}]
\step[fieldset=sortyear, fieldvalue={$1}]
}
}
}
\DeclareBibliographyDriver{customa}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\printnames{author}%
\newunit
\printeventdate
\newunit
\usebibmacro{title}%
\newunit\newblock
\bibstring{in}%
\printunit{\intitlepunct}
\usebibmacro{journal+issuetitle}%
\usebibmacro{finentry}}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
O mwe funciona bem.
Pelo que entendi, if <datetype>date
está definido, biber/biblatex gera automaticamente os campos <datetype>year
, <datetype>month
e <datetype>day
.
Portanto, o código de mapeamento de origem também deve poder ser escrito da seguinte maneira.
\DeclareStyleSourcemap{
\maps{
\map{
\pertype{customa}
\step[fieldsource=eventyear]
\step[fieldset=sortyear, origfieldval]
}
}
}
Mas esta segunda solução não funciona. Por que? Qual é o erro? Obrigado.
Responder1
A etapa de mapeamento de origem, na qual Biber aplica suas alterações aos dados, acontece logo no início do processamento do .bib
arquivo. Em particular, isso acontece antes da etapa em que o Biber divide os campos de data em seus componentes.
Portanto, quando \DeclareStyleSourcemap
é executado, o campo de data ainda está eventdate
(conforme fornecido no .bib
arquivo) e eventyear
os amigos ainda não estão disponíveis.