Para minha lista de publicações quero gerar diversas bibliografias que sejam automaticamente discriminadas pelo estado de publicação. Para o estado da publicação utilizo o pubstate
campo e pelo keywords= {own}
campo marquei-os na minha base de dados bibliográficos como publicações próprias (surpresa, né?). As bibliografias ficam restritas às minhas próprias publicações pelas keyword = own
opções.
Como as funções de filtro biblatex
funcionam apenas em alguns campos específicos onde pubstate
não está entre elas, quero mapear o conteúdo do pubstate
campo para o keywords
campo por meio do \DeclareSourcemap
comando. A partir daí pude filtrar a bibliografia de acordo com esse campo. Infelizmente, não importa se eu uso ou não a append
opção \DeclareSourcemap
, parece que não há nada escrito em um campo que não esteja vazio. Se, em vez disso, eu tentar mapear para um campo vazio (comente a linha que começa fieldset=keywords
e descomente a linha abaixo), o campo conterá o valor desejado posteriormente.
\begin{filecontents}{\jobname.bib}
@article{inpress,
author = {A. Uthor},
title = {Yay, they accepted my article},
keywords = {own},
pubstate = {inpress},
year = {2014},
journal = {Journal of Universal Acceptance}
}
@article{submitted,
author = {A. Uthor},
title = {Look, I've written a nice manuscript, would you publish it? Pleeease?},
keywords = {own},
pubstate = {submitted},
year = {2014},
journal = {Journal of Doubtful Acceptance}
}
\end{filecontents}
\documentclass{article}
\usepackage[backend=biber]{biblatex}
\addbibresource{\jobname.bib}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=pubstate, match={inpress},
fieldset=keywords, fieldvalue={inpress}, append]
% fieldset=note, fieldvalue={inpress}, append]
}
}
}
\listfiles
\begin{document}
\nocite{*}
\printbibliography[keyword=inpress, title = {Articles in press}]
\printbibliography[keyword=own, title = {Submitted articles}]
\end{document}
É claro que eu poderia fazer isso manualmente de diferentes maneiras, mas gostaria de entender por que não funciona como espero.
Responder1
O problema é que você precisa especificar overwrite
no mapa. Experimente isto:
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=pubstate, match={inpress},
fieldset=keywords, fieldvalue={inpress}, append]
% fieldset=note, fieldvalue={inpress}, append]
}
}
}
MAS, você também precisa adicionar o comma
que separa as palavras-chave, porque o código acima faz owninpress
.
É possível que o código abaixo seja útil para você. Ele anexa tudo pubstate
no keywords
campo.
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=pubstate,final]
\step[fieldset=keywords, fieldvalue={,}, append]
\step[fieldset=keywords, origfieldval, append]
}
}
}
O código acima é composto pelas palavras-chave: own, inpress
e own, submitted
.
Responder2
Esta não é uma solução para a questão, mas para o problema. Em vez de adicionar a inpress
palavra-chave ao keyword
campo biblatex, pode-se definir um novo bibcheck e usar a check
opção \printbibliography
.
\defbibcheck{inpress}{
\iffieldequalstr{pubstate}{inpress}{}{\skipentry}
}
e então
\printbibliography[check=inpress]