So unterdrücken Sie das Annotation-Feld aus einer .bbl-Datei in Biblatex

So unterdrücken Sie das Annotation-Feld aus einer .bbl-Datei in Biblatex

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 .bibenthält die Datei das Feld annote, aber in der Quellzuordnung wird der Schritt annotationals Feld angegeben. Wenn wir daher in der Quellzuordnung annotationdurch annotedas Feld ersetzen, das enthält, %wird es ungültig und erscheint nicht in der bblDatei. Dementsprechend \DeclareSourcemapsollte 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.

biblatexhat 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 annoteFeld 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 annoteBiber-Fund in umgewandelt werden annotationsoll. Tatsächlich könnte man sagen, dass intern für nur und kein Feld biblatexvorhanden ist . Daher ist es naheliegend, den gesamten Code so zu schreiben, dass nur und nicht erwähnt wird .annotationannoteannotationannote

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 annotelö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->- annotationZuordnung auszuführen, die sich bereits in Ihrer Quellzuordnung befindet: Sie ordnen also zuerst alle annotes zu annotationund 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 .bblDatei 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 \clearfieldim MWE nichts Nützliches bewirken würde.

Antwort3

Fügen Sie annotation=falseden Einstellungen beispielsweise Folgendes hinzu:\usepackage[style=apa,annotation=false]{biblatex}

verwandte Informationen