
biblatex を使用して .bbl ファイルから注釈フィールドを抑制したいと思います。私は、特定の論文に関するメモを書き留めるために注釈フィールドをよく使用しますが、注釈フィールドで % などの LaTeX コマンドを使用すると問題が発生することがあります。注釈フィールドに % のようなものがあっても、.bib ファイルでは問題は発生しませんが、.bbl ファイルではコンパイルに失敗します。biblatex の bibtex .bbl から特定のフィールドを抑制することは可能ですか?しかし、これらは私には効果がありませんでした。
以下に私の最小限の動作例を示します。
\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}
これにより、次の.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
ご覧のとおり、 は の%
閉じ括弧を台無しにします\field{annotation}{10 % strain}
。
答え1
MWE では、.bib
ファイルにフィールドが含まれていますannote
が、ソース マップでは、ステップがannotation
フィールドとして指定されています。したがって、ソース マップでを含むフィールドannotation
に置き換えると、 は無効化され、ファイルには表示されません。したがって、命令は次のようになります。annote
%
bbl
\DeclareSourcemap
\DeclareSourcemap{
\maps[datatype=bibtex, overwrite]{
\map{
\step[fieldset=annote, null]
}
}
}
答え2
グイドすでに答え: ソースマップ内のフィールドを削除する必要がありますannote
。しかし、その理由を知ることは興味深いかもしれません。
biblatex
には、いくつかの一般的なBibTeXスタイルとの下位互換性のために、フィールドと型のエイリアスが設定されています。そのようなエイリアス関係の1つは、フィールドannote
を に変換しますannotation
。Biberでは、このエイリアス関係は特別なドライバーソースマップbiblatex.def
(で定義されるv3.15a の ll. 1305-1337)
\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]
}
}
annote
これは、すべてのBiber が を見つける を に変換することを意味しています。実際、 の内部ではのみが存在し、フィールドは存在しないannotation
と言えます。したがって、 のみに言及し、 は言及しないすべてのコードを記述するのが自然です。biblatex
annotation
annote
annotation
annote
遭遇した問題はタイミングでした: このドライバーソースマップは実行されます後ユーザーレベルの単純な\DeclareSourcemap
。特に、ソースマップが実行されると、フィールド名はまだ変更されておらず、フィールドは と呼ばれ続けますannote
。
問題を解決する方法の1つは、Guidoの回答に示されています。ソースマップが実行されたときにまだ呼び出されているフィールドを削除します。削除することもannote
、削除しないこともできます。annotation
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldset=annote, null]
\step[fieldset=annotation, null]
}
}
}
この問題を回避するもう 1 つの方法は、ソースマップ内にすでにあるannote
->マッピングを実行することです。つまり、最初にすべての を にマッピングし、次に を削除します。annotation
annote
annotation
annotation
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=annote, fieldtarget=annotation]
\step[fieldset=annotation, null]
}
}
}
いずれの場合も は\AtEveryBibitem{\clearfield{annotation}}
役に立たないことに注意してください。 から取得するエラーは、%
エントリ データがファイルから読み取られるときに既に発生しており.bbl
、フィールドが参考文献に印刷されるときや印刷される可能性があるときには発生していないためです。 さらに、標準biblatex
スタイル ( を除くreading
) はいずれにしても表示されないannotation
ため、 は\clearfield
MWE で何の役にも立ちません。
答え3
annotation=false
設定に追加します。例:\usepackage[style=apa,annotation=false]{biblatex}