biblatex:\parencite 在注释字段中打印虚假的;带有 authoryear-icomp 样式

biblatex:\parencite 在注释字段中打印虚假的;带有 authoryear-icomp 样式

我的参考书目列表中有一本书和两本该书的译本。每本书都有一条注释,引用了另一本译本。为此,我使用了字段\parencite中的命令note

如果我使用该authoryear-icomp样式,注释中会出现杂散;;如图所示。使用该authoryear样式不会发生这种情况。

在此处输入图片描述

我该怎么做才能删除不需要的;

\documentclass{article}

% \usepackage[style=authoryear]{biblatex}
\usepackage[style=authoryear-icomp]{biblatex}


\usepackage{filecontents}
\addbibresource{biblio.bib}


\begin{filecontents}{biblio.bib}
@book {b11,
     MRKEY = {MR0113788},
    AUTHOR = {Bourbaki, Nicolas},
     TITLE = {Éléments d'histoire des mathématiques},
    SERIES = {Histoire de la Pensée, IV},
 PUBLISHER = {Hermann, Paris},
      YEAR = {1960},
     PAGES = {277},
   MRCLASS = {01.00},
  MRNUMBER = {0113788},
MRREVIEWER = {C. J. Scriba},
      note = {Também disponivel em Inglês em \parencite{b11en} e Espanhol em \parencite{b11es}},
}
%%%%
@book {b11en,
    AUTHOR = {Bourbaki, Nicolas},
     title = {Elements of the History of Mathematics},
      isbn = {9783540647676},
      lccn = {98039221},
       url = {http://dx.doi.org/10.1007/978-3-642-61693-8},
      year = {1998},
     PAGES = {301},
 publisher = {Springer-Verlag},
   address = {Berlin Heidelberg},
      note = {Traduzido por J. Meldrum do original em Francês \parencite{b11}, também disponivel em Espanhol em \parencite{b11es}},
}
%%%%

@book {b11es,
    AUTHOR = {Bourbaki, Nicolas},
     title = {Elementos de historia de las mathemáticas},
      isbn = {84-206-2018-1},
      year = {1972},
     PAGES = {401},
 publisher = {Alianza Editorial},
   address = {Madrid},
      note = {Traduzido por Jesús Hernández do original em Francês \parencite{b11}, também disponivel em Inglês em \parencite{b11en}},
}
%%%%
\end{filecontents}


\begin{document}
\pagestyle{empty}
\parencite{b11}
\nocite{*}

\printbibliography{}
\end{document}

答案1

biblatex的标点符号跟踪器被这种“嵌套”所困扰。您只会在 中看到这种情况authoryear-icomp,因为该样式比 更依赖于跟踪器authoryear

特别是authoryear-icomp命令\cite通常会使标点缓冲区保持非空状态,以便正确处理\multicitedelim\compcitedelim另请参阅我的回答biblatex:\DeclareCiteCommand 在 \printfield 和 \printnames 之间添加分号,但只是有时)。这在通常情况下不是问题,因为\cite在执行其工作之前会清除标点符号缓冲区。\cite但是,如果在参考书目上下文中调用,它不会清除缓冲区以避免干扰周围的标点符号。

\makeatletter
\protected\def\blx@citecmdinit{%
  \blx@leavevmode@cite
  \blx@initunit}
\makeatother

\cite您可以稍微改变参考书目中的命令的行为,以便它们不相信它们已经打印了一些内容。

如果你想更加小心,可以定义一个特殊的命令来为有问题的\parencite命令添加前缀

\makeatletter
\newcommand*{\mkbibcitesafe}{\blx@initunit}
\makeatother

并在note

note = {Traduzido por Jesús Hernández do original em Francês \parencite{b11},
        também disponivel em Inglês em \makebibcitesafe\parencite{b11en}},

您可能想看一下提供链接多个参考书目条目related的功能。这通常比在字段中使用命令更可取,因为在字段中使用命令可能会出错(如此处所示)。biblatex\cite.bib

相关内容