Cómo suprimir el campo de anotación del archivo .bbl en biblatex

Cómo suprimir el campo de anotación del archivo .bbl en biblatex

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 .bibarchivo contiene el campo annote, pero en el mapa de origen, el paso se especifica annotationcomo un campo. Por lo tanto, si en el mapa fuente reemplazamos annotationcon annoteel campo que contiene %será anulado y no aparecerá en el bblarchivo. En consecuencia, la \DeclareSourcemapinstrucción debería verse así:

\DeclareSourcemap{
  \maps[datatype=bibtex, overwrite]{
    \map{
      \step[fieldset=annote, null]
    }
  }
} 

Respuesta2

guidoya ha dado elrespuesta: Debe eliminar el annotecampo en su mapa fuente. Pero puede resultar interesante saber por qué.

biblatextiene algunos alias de campo y tipo configurados para compatibilidad con algunos estilos populares de BibTeX. Una de esas relaciones de alias convierte el annotecampo 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 annoteBiber que encuentre en annotation. De hecho, se podría decir que internamente biblatexsolo existe annotationy no hay annotecampo. Por lo tanto, es natural escribir todo el código mencionando únicamente annotationy 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 annotecampo, ya que así es como todavía se llama cuando se ejecuta su mapa fuente. Es posible que desee o no eliminar annotationtambién

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldset=annote,     null]
      \step[fieldset=annotation, null]
    }
  }
}

Otra forma de solucionar el problema es ejecutar el annote-> annotationmapeo que ya está en su mapa fuente: por lo tanto, primero asigna todos annotelos s annotationy 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 .bblarchivo y no cuando el campo está o podría imprimirse en la bibliografía. Es más, los biblatexestilos estándar (excepto reading) no se muestran annotationde todos modos, por lo que \clearfieldno harían nada útil en el MWE.

Respuesta3

Agregue annotation=falsea la configuración, por ejemplo:\usepackage[style=apa,annotation=false]{biblatex}

información relacionada