
Me gustaría suprimir el campo de anotación del archivo .bbl usando biblatex. A menudo uso el campo de anotación para escribir notas sobre un artículo determinado, lo que puede ser un problema si uso un comando LaTeX como % en el campo de anotación. Tener algo como % en el campo de anotación no causa ningún problema en el archivo .bib, pero tenerlo en el archivo .bbl provoca una falla en la compilación. Intenté seguir las sugerencias en¿Es posible suprimir un campo específico de bibtex .bbl en biblatex?, pero estos no funcionaron para mí.
Aquí está mi ejemplo de trabajo mínimo:
\documentclass[12pt]{article}
\usepackage{biblatex}
\begin{filecontents*}{mwe.bib}
@article{Doe.J-1979a,
Annote = {10 % strain},
Author = {John Doe},
Date-Added = {2020-08-27 10:54:17 -0600},
Date-Modified = {2020-08-27 12:03:22 -0600},
Journal = {Journal of LaTeX Issues},
Title = {Problematic Reference Title},
Year = {1979}}
\end{filecontents*}
\addbibresource{mwe.bib}
\AtEveryBibitem{\clearfield{annotation}}
\DeclareSourcemap{
\maps[datatype=bibtex, overwrite]{
\map{
\step[fieldset=annotation, null]
}
}
}
\begin{document}
\textcite{Doe.J-1979a}
\printbibliography
\end{document}
Esto crea el siguiente archivo .bbl
\begingroup
\makeatletter
\@ifundefined{[email protected]}
{\@latex@error
{Missing 'biblatex' package}
{The bibliography requires the 'biblatex' package.}
\aftergroup\endinput}
{}
\endgroup
\refsection{0}
\datalist[entry]{nty/global//global/global}
\entry{Doe.J-1979a}{article}{}
\name{author}{1}{}{%
{{hash=bd051a2f7a5f377e3a62581b0e0f8577}{%
family={Doe},
familyi={D\bibinitperiod},
given={John},
giveni={J\bibinitperiod}}}%
}
\strng{namehash}{bd051a2f7a5f377e3a62581b0e0f8577}
\strng{fullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
\strng{bibnamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
\strng{authorbibnamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
\strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
\strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
\field{sortinit}{D}
\field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
\field{labelnamesource}{author}
\field{labeltitlesource}{title}
\field{annotation}{10 % strain}
\field{journaltitle}{Journal of LaTeX Issues}
\field{title}{Problematic Reference Title}
\field{year}{1979}
\endentry
\enddatalist
\endrefsection
\endinput
Como puede ver, el %
corchete de cierre en \field{annotation}{10 % strain}
.
Respuesta1
En MWE, el .bib
archivo contiene el campo annote
, pero en el mapa de origen, el paso se especifica annotation
como un campo. Por lo tanto, si en el mapa fuente reemplazamos annotation
con annote
el campo que contiene %
será anulado y no aparecerá en el bbl
archivo. En consecuencia, la \DeclareSourcemap
instrucción debería verse así:
\DeclareSourcemap{
\maps[datatype=bibtex, overwrite]{
\map{
\step[fieldset=annote, null]
}
}
}
Respuesta2
guidoya ha dado elrespuesta: Debe eliminar el annote
campo en su mapa fuente. Pero puede resultar interesante saber por qué.
biblatex
tiene algunos alias de campo y tipo configurados para compatibilidad con algunos estilos populares de BibTeX. Una de esas relaciones de alias convierte el annote
campo en annotation
. Con Biber esta relación de alias se implementa a través de un especialmapa fuente del controladordefinido en biblatex.def
(todos. 1305-1337 en v3.15a)
\DeclareDriverSourcemap[datatype=bibtex]{
<...>
\map{
\step[fieldsource=hyphenation, fieldtarget=langid]
\step[fieldsource=address, fieldtarget=location]
\step[fieldsource=school, fieldtarget=institution]
\step[fieldsource=annote, fieldtarget=annotation]
\step[fieldsource=archiveprefix, fieldtarget=eprinttype]
\step[fieldsource=journal, fieldtarget=journaltitle]
\step[fieldsource=primaryclass, fieldtarget=eprintclass]
\step[fieldsource=key, fieldtarget=sortkey]
\step[fieldsource=pdf, fieldtarget=file]
}
}
Esto solo dice que debemos convertir cada annote
Biber que encuentre en annotation
. De hecho, se podría decir que internamente biblatex
solo existe annotation
y no hay annote
campo. Por lo tanto, es natural escribir todo el código mencionando únicamente annotation
y no annote
.
El problema que encontró fue el tiempo: este mapa fuente del controlador se ejecutadespuéssu nivel de usuario simple \DeclareSourcemap
. En particular, cuando se ejecuta su mapa fuente, aún no se ha cambiado el nombre de ningún campo y el campo todavía se llama annote
.
Una forma de resolver el problema se muestra en la respuesta de Guido: elimine el annote
campo, ya que así es como todavía se llama cuando se ejecuta su mapa fuente. Es posible que desee o no eliminar annotation
también
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldset=annote, null]
\step[fieldset=annotation, null]
}
}
}
Otra forma de solucionar el problema es ejecutar el annote
-> annotation
mapeo que ya está en su mapa fuente: por lo tanto, primero asigna todos annote
los s annotation
y luego elimina el archivo annotation
.
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=annote, fieldtarget=annotation]
\step[fieldset=annotation, null]
}
}
}
Tenga en cuenta que, en cualquier caso, \AtEveryBibitem{\clearfield{annotation}}
no ayudará porque el error que obtiene %
ya ocurre cuando los datos de entrada se leen del .bbl
archivo y no cuando el campo está o podría imprimirse en la bibliografía. Es más, los biblatex
estilos estándar (excepto reading
) no se muestran annotation
de todos modos, por lo que \clearfield
no harían nada útil en el MWE.
Respuesta3
Agregue annotation=false
a la configuración, por ejemplo:\usepackage[style=apa,annotation=false]{biblatex}