脚注内的引文预注不起作用(Biblatex)

脚注内的引文预注不起作用(Biblatex)

我遇到了一个看似是一个错误的问题。

使用 BibLatex 以 MLA 格式在脚注内进行引用时\footnote{\cite[myPrenote][myPostnote]{ref}},预注无法正确显示。如果我包含预注,它会将“预注”打印为预注,而不是给定的输入。

此外,如果预注留空,它会打印“参见”作为预注,我无法将其删除,并且当使用英语以外的语言书写时会出现问题,因为它不会被翻译(使用 babel,法语)。

编辑:我已在 \biblatex-mla\mla.cbx 中搜索了 prenote,命令\cite{}定义在第 722 行和第 749 行,但我没有发现问题。不过,删除第 723 行至第 725 行似乎可以解决问题。

以下是第 722 行及后续行:

\DeclareCiteCommand{\cite}% 1.9 added support for smart switching when used in footnote
  {\iffootnote{\iffieldundef{prenote}
    {\global\undef\cbx@lastprenote
    \printtext{See\addspace}}}
    \usebibmacro{prenote}}%
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:mla}}%
  {}%
  {\usebibmacro{postnote}}

这是第一期的 MWE。

\documentclass{article}
\usepackage[style=mla,backend=biber]{biblatex}
\begin{filecontents}{sample.bib}
    @article{Art1,
        author = "Mike Wazowsky",
        title = "How to scare",
        date = "2020-12-03"
    }
\end{filecontents}
\addbibresource{sample.bib}

\begin{document}
Some text with a footnote\footnote{There should not be "prenote" here: \cite[Look at][p. 12]{Art1}}.
\end{document}

以下是获得的脚注: 1这里不应该有“prenote”:prenoteWazowsky p. 12

答案1

这确实看起来像是一个错误。请总是通过软件包文档中提到的渠道向软件包的开发人员报告错误。(特别是,TeX.SX 不是报告错误。

的公共错误跟踪器biblatex-mla位于https://github.com/jmclawson/biblatex-mla/issues,但该项目似乎处于停滞状态。自 2016 年底以来没有任何更新,而且一些较新的错误报告尚未得到回复。

目前,我会再三考虑是否使用它,biblatex-mla因为它似乎不再积极开发,并且存在一些已知问题(请参阅未解决问题列表https://github.com/jmclawson/biblatex-mla/issues)。

在这种情况下,问题确实是

\DeclareCiteCommand{\cite}% 1.9 added support for smart switching when used in footnote
  {\iffootnote{\iffieldundef{prenote}
    {\global\undef\cbx@lastprenote
    \printtext{See\addspace}}}
    \usebibmacro{prenote}}%
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:mla}}%
  {}%
  {\usebibmacro{postnote}}

如果我们稍微改变一下 prenote 代码的缩进,我们就能看到问题

\DeclareCiteCommand{\cite}% 1.9 added support for smart switching when used in footnote
  {\iffootnote{%
     \iffieldundef{prenote}
       {\global\undef\cbx@lastprenote
        \printtext{See\addspace}}}
       \usebibmacro{prenote}}%
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:mla}}%
  {}%
  {\usebibmacro{postnote}}

<false>条件分支缺少\iffootnote花括号。这意味着如果\iffootnote为真,则只\usebibmacro吞噬,而{prenote}留在输入流中并最终打印。此外,\iffieldundef条件缺少完整的<false>分支。

语法正确的版本是

\DeclareCiteCommand{\cite}% 1.9 added support for smart switching when used in footnote
  {\iffootnote
     {\iffieldundef{prenote}
        {\global\undef\cbx@lastprenote
         \printtext{See\addspace}}
        {\usebibmacro{prenote}}}
     {}}%
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:mla}}%
  {}%
  {\usebibmacro{postnote}}

其他几个\cite宏也有同样的问题。由于所有命令中都重复了相同的代码,我建议您使用 bibmacro 来减少重复次数。

\documentclass{article}
\usepackage[style=mla,backend=biber]{biblatex}

\makeatletter
\newbibmacro{mla:prenote:see}{%
  \iffootnote
    {\iffieldundef{prenote}
       {\global\undef\cbx@lastprenote
        \printtext{See\addspace}}
       {\usebibmacro{prenote}}}
    {}}

\DeclareCiteCommand{\cite}% 1.9 added support for smart switching when used in footnote
  {\usebibmacro{mla:prenote:see}}%
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:mla}}%
  {}%
  {\usebibmacro{postnote}}
  
\DeclareCiteCommand{\textcite}
  {\usebibmacro{mla:prenote:see}}%
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:mla}}%
  {}%
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\headlesscite}% 1.9 added alias to starred command for Chicago compatibility
  {\usebibmacro{mla:prenote:see}}%
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:mla:starred:title}}
  {}%
  {\usebibmacro{postnote}}

\DeclareCiteCommand*{\cite}% 1.9 added support for smart switching when used in footnote
  {\usebibmacro{mla:prenote:see}}%
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:mla:starred:title}}
  {}%
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\fullcite}%
  {\usebibmacro{mla:prenote:see}}%
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:mla:title}}
  {}%
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\headlessfullcite}
  {\usebibmacro{mla:prenote:see}}%
  {\usebibmacro{citeindex}%
   \usebibmacro{cite:mla:starred:title}}
  {}%
  {\usebibmacro{postnote}}
\makeatother


\addbibresource{biblatex-examples.bib}

\begin{document}
Some text with a footnote\footnote{There should not be "prenote" here: \cite[Look at][12]{sigfridsson}}.
\end{document}

这里不应该有“预注”:参见 Sigfridsson 和 Ryde 12

现在,如果您根本不想看到自动“查看”,您可以将其从 bibmacro 中删除。

\newbibmacro{mla:prenote:see}{%
  \usebibmacro{prenote}}

如果您想要查看,但希望将其本地化,请使用

\newbibmacro{mla:prenote:see}{%
  \iffootnote
    {\iffieldundef{prenote}
       {\global\undef\cbx@lastprenote
        \bibstring{see}}
       {\usebibmacro{prenote}}}
    {}}

如果您想看到后记中的“p.”前缀,最好不要在后记中包含“p.”,而是告诉您的样式自动包含“p.”。使用biblatex-mla,以下两行应该会有所帮助

\DeclareFieldAlias{ibidpostnote}{postnote}%
\DeclareFieldAlias{footpostnote}{postnote}%

相关内容