Para mi lista de publicaciones quiero generar varias bibliografías que se discriminen automáticamente por el estado de publicación. Para el estado de publicación utilizo el pubstate
campo y por keywords= {own}
campo las he marcado en mi base de datos de bibliografía como publicaciones propias (sorpresa, ¿eh?). Las bibliografías están restringidas a mis propias publicaciones por las keyword = own
opciones.
Como las funciones de filtro biblatex
solo funcionan en algunos campos específicos que pubstate
no están entre ellos, quiero asignar el contenido del pubstate
campo al keywords
campo mediante el \DeclareSourcemap
comando. Desde allí podría filtrar la bibliografía según ese campo. Desafortunadamente, no importa si uso la append
opción de \DeclareSourcemap
o no, parece que no hay nada escrito en un campo que no esté vacío. Si, en cambio, intento asignarlo a un campo vacío (comentar la línea que comienza fieldset=keywords
y descomentar la línea a continuación), entonces el campo contiene el valor deseado después.
\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}
Por supuesto, podría hacer esto manualmente de diferentes maneras, pero me gustaría entender por qué no funciona como esperaba.
Respuesta1
El problema es que hay que especificarlo overwrite
en el mapa. Prueba esto:
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=pubstate, match={inpress},
fieldset=keywords, fieldvalue={inpress}, append]
% fieldset=note, fieldvalue={inpress}, append]
}
}
}
PERO, también debe agregar las comma
que separan las palabras clave, porque el código anterior crea owninpress
.
Es posible que el siguiente código le resulte útil. Agrega todo lo que hay pubstate
en el keywords
campo.
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=pubstate,final]
\step[fieldset=keywords, fieldvalue={,}, append]
\step[fieldset=keywords, origfieldval, append]
}
}
}
El código anterior incluye las palabras clave: own, inpress
y own, submitted
.
Respuesta2
Ésta no es una solución a la pregunta, sino al problema. En lugar de agregar la inpress
palabra clave al keyword
campo biblatex, se puede definir un nuevo bibcheck y usar la check
opción de \printbibliography
.
\defbibcheck{inpress}{
\iffieldequalstr{pubstate}{inpress}{}{\skipentry}
}
y luego
\printbibliography[check=inpress]