
Gostaria de suprimir o campo de anotação do arquivo .bbl usando biblatex. Costumo usar o campo de anotação para fazer anotações sobre um determinado artigo, o que pode ser um problema se eu usar um comando LaTeX como % no campo de anotação. Ter algo como% no campo de anotação não causa problemas no arquivo .bib, mas tê-lo no arquivo .bbl causa falha na compilação. Tentei seguir as sugestões emÉ possível suprimir um campo específico do bibtex .bbl no biblatex?, mas isso não funcionou para mim.
Aqui está meu exemplo mínimo de trabalho:
\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}
Isso cria o seguinte arquivo .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 você pode ver, isso %
bagunça o colchete de fechamento em \field{annotation}{10 % strain}
.
Responder1
No MWE, o .bib
arquivo contém o campo annote
, mas no mapa de origem, a etapa especifica annotation
como um campo. Portanto, se no mapa de origem substituirmos annotation
pelo annote
campo que contém %
será anulado e não aparecerá no bbl
arquivo. Assim, a \DeclareSourcemap
instrução deve ser semelhante a:
\DeclareSourcemap{
\maps[datatype=bibtex, overwrite]{
\map{
\step[fieldset=annote, null]
}
}
}
Responder2
Guidojá deu oresponder: você precisa excluir o annote
campo em seu mapa de origem. Mas pode ser interessante saber porquê.
biblatex
tem alguns aliases de campo e tipo configurados para compatibilidade retroativa com alguns estilos populares do BibTeX. Uma dessas relações de alias transforma o annote
campo em annotation
. Com Biber esta relação de alias é implementada através de um especialmapa de origem do driverdefinido em biblatex.def
(tudo. 1305-1337 na 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]
}
}
Isso apenas diz para transformar todas annote
as descobertas de Biber em arquivos annotation
. Na verdade, você poderia dizer isso internamente, pois biblatex
existe apenas annotation
e nenhum annote
campo. Portanto, é natural escrever todo o código mencionando apenas annotation
e não annote
.
O problema que você encontrou foi o tempo: este mapa de origem do driver é executadodepoisseu nível de usuário simples \DeclareSourcemap
. Em particular, quando o seu mapa de origem é executado, nenhum nome de campo foi renomeado ainda e o campo ainda é chamado annote
.
Uma maneira de resolver o problema é mostrada na resposta do Guido: Exclua o annote
campo, pois é assim que ele ainda é chamado quando seu mapa de origem é executado. Você pode ou não querer excluir annotation
também
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldset=annote, null]
\step[fieldset=annotation, null]
}
}
}
Uma outra maneira de contornar o problema é executar o annote
-> annotation
mapeamento já em seu mapa de origem: então você primeiro mapeia todos annote
os s para annotation
e depois exclui o annotation
.
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=annote, fieldtarget=annotation]
\step[fieldset=annotation, null]
}
}
}
Observe que em qualquer caso \AtEveryBibitem{\clearfield{annotation}}
não vai ajudar porque o erro que você obtém %
já ocorre quando os dados de entrada são lidos do .bbl
arquivo e não quando o campo é/poderia ser impresso na bibliografia. Além do mais, os biblatex
estilos padrão (exceto reading
) não são exibidos annotation
de qualquer maneira, então \clearfield
não fariam nada de útil no MWE.
Responder3
Adicione annotation=false
às configurações, por exemplo:\usepackage[style=apa,annotation=false]{biblatex}