
Ich möchte das Annotationsfeld aus der .bbl-Datei mithilfe von biblatex entfernen. Ich verwende das Annotationsfeld häufig, um Notizen zu einem bestimmten Dokument zu machen, was ein Problem sein kann, wenn ich zufällig einen LaTeX-Befehl wie % im Annotationsfeld verwende. Wenn etwas wie % im Annotationsfeld steht, verursacht das keine Probleme in der .bib-Datei, aber wenn es in der .bbl-Datei steht, schlägt die Kompilierung fehl. Ich habe versucht, den Vorschlägen in zu folgenIst es möglich, in Biblatex ein bestimmtes Feld aus Bibtex .bbl zu unterdrücken?, aber diese haben bei mir nicht funktioniert.
Hier ist mein minimales Arbeitsbeispiel:
\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}
Dadurch wird die folgende .bbl-Datei erstellt
\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
Wie Sie sehen, bringt das %
die schließende Klammer in durcheinander \field{annotation}{10 % strain}
.
Antwort1
Im MWE .bib
enthält die Datei das Feld annote
, aber in der Quellzuordnung wird der Schritt annotation
als Feld angegeben. Wenn wir daher in der Quellzuordnung annotation
durch annote
das Feld ersetzen, das enthält, %
wird es ungültig und erscheint nicht in der bbl
Datei. Dementsprechend \DeclareSourcemap
sollte die Anweisung folgendermaßen aussehen:
\DeclareSourcemap{
\maps[datatype=bibtex, overwrite]{
\map{
\step[fieldset=annote, null]
}
}
}
Antwort2
Guidohat bereits dieAntwort: Sie müssen das Feld in Ihrer Quellzuordnung löschen annote
. Aber es könnte interessant sein zu wissen, warum.
biblatex
hat einige Feld- und Typaliase eingerichtet, um die Abwärtskompatibilität mit einigen gängigen BibTeX-Stilen zu gewährleisten. Eine solche Alias-Relation macht das annote
Feld zu annotation
. Bei Biber wird diese Alias-Relation über eine spezielleTreiber-Quellkartedefiniert in biblatex.def
(Bd. 1305-1337 in 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]
}
}
Dies bedeutet lediglich, dass jeder annote
Biber-Fund in umgewandelt werden annotation
soll. Tatsächlich könnte man sagen, dass intern für nur und kein Feld biblatex
vorhanden ist . Daher ist es naheliegend, den gesamten Code so zu schreiben, dass nur und nicht erwähnt wird .annotation
annote
annotation
annote
Das Problem, auf das Sie gestoßen sind, war das Timing: Diese Treiber-Sourcemap wird ausgeführtnachIhre Benutzerebene ist einfach \DeclareSourcemap
. Insbesondere wenn Ihre Sourcemap ausgeführt wird, wurden noch keine Feldnamen umbenannt und das Feld wird immer noch aufgerufen annote
.
Eine Möglichkeit, das Problem zu lösen, wird in Guidos Antwort gezeigt: Löschen Sie das Feld, da es immer noch so genannt wird, wenn Ihre Quellzuordnung ausgeführt wird. Sie können auch annote
löschen oder auch nichtannotation
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldset=annote, null]
\step[fieldset=annotation, null]
}
}
}
Eine andere Möglichkeit, das Problem zu umgehen, besteht darin, die annote
->- annotation
Zuordnung auszuführen, die sich bereits in Ihrer Quellzuordnung befindet: Sie ordnen also zuerst alle annote
s zu annotation
und löschen dann die annotation
.
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=annote, fieldtarget=annotation]
\step[fieldset=annotation, null]
}
}
}
Beachten Sie, dass dies in keinem Fall \AtEveryBibitem{\clearfield{annotation}}
hilft, da der Fehler, den Sie erhalten, %
bereits auftritt, wenn die Eintragsdaten aus der .bbl
Datei gelesen werden und nicht, wenn das Feld in der Bibliographie gedruckt wird/werden könnte. Darüber hinaus werden die Standardstile biblatex
(außer reading
) sowieso nicht angezeigt annotation
, sodass dies \clearfield
im MWE nichts Nützliches bewirken würde.
Antwort3
Fügen Sie annotation=false
den Einstellungen beispielsweise Folgendes hinzu:\usepackage[style=apa,annotation=false]{biblatex}