如何抑制 Biblatex 中仅使用英语的参考文献的语言字段?

如何抑制 Biblatex 中仅使用英语的参考文献的语言字段?

我知道你可以AtEveryBibItem像这样使用:

\AtEveryBibitem{
  \clearlist{language}
}

但这会从每个参考文献中删除语言字段;您可以只对英语(或任何其他特定语言)抑制它,而不对其他语言抑制它吗?

编辑:应该说清楚我正在使用该beamer包 - 所以也许这会影响到一些东西?

还:


最小示例:

\documentclass[english, aspectratio = 169, notes]{beamer}
\usepackage[english]{babel}
\usepackage[none]{hyphenat}
\usepackage[style=authoryear, doi=false]{biblatex}
\bibliography{references}
%\AtEveryBibitem{
%  \clearlist{language}
%}

\usepackage{nameref}
\makeatletter
\newcommand*{\currentname}{\@currentlabelname}
\makeatother

\usepackage{pgfpages}
\setbeameroption{show notes on second screen}

\begin{document}

\section{Blah blah blah}
\begin{frame}{Blah 1}

blah blah blah \cite{cited_reference}

\end{frame}


\section{References and further reading}

\begin{frame}[allowframebreaks]{References and further reading}
    \setbeamertemplate{bibliography item}[text]
    \printbibliography
\end{frame}

\end{document}



输出:

屏幕截图显示了带有语言代码的示例参考。


编辑2:

@moewe 这是来源cited_reference

@article{cited_reference,
    title = {The frame/content theory of evolution of speech production},
    volume = {21},
    issn = {0140-525X, 1469-1825},
    url = {https://www.cambridge.org/core/product/identifier/S0140525X98001265/type/journal_article},
    doi = {10.1017/S0140525X98001265},
    abstract = {ABSTRACT REMOVED AS IS TOO LONG},
    language = {en},
    number = {4},
    urldate = {2021-11-17},
    journal = {Behavioral and Brain Sciences},
    author = {MacNeilage, Peter F.},
    month = aug,
    year = {1998},
    pages = {499--511},
}

好像要en改为english会删除语言字段。但是我有不少条目 en由于它们是从 Zotero 自动传输的,因此手动更改会很麻烦。

那么有没有什么办法可以排除这些en字段而不影响其他字段?

答案1

biblatexlanguage如果字段值与当前文档语言一致,则具有抑制字段输出的功能。此功能( clearlang)默认启用。

为了使此功能正常工作,language必须用可以理解的值填充该字段biblatexbiblatex文档

作品的语言。语言可以按字面意思指定,也可以作为本地化关键字指定。如果使用本地化关键字,前缀lang可以省略。

clearlang功能基本上只有当作品的语言通过本地化键给出时才有效(可能没有lang)提供时才有效。所有已知的本地化关键字均列于 §4.9.2.18语言名称biblatex文件。

因此,对于英语作品,您需要language = {english},language = {langenglish},代替language = {en},它才能工作。

\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=authoryear]{biblatex}

\begin{filecontents}{\jobname.bib}
@article{cited_reference,
  title    = {The frame/content theory of evolution of speech production},
  volume   = {21},
  doi      = {10.1017/S0140525X98001265},
  language = {english},
  number   = {4},
  journal  = {Behavioral and Brain Sciences},
  author   = {MacNeilage, Peter F.},
  month    = aug,
  year     = {1998},
  pages    = {499--511},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\begin{document}
Lorem \autocite{sigfridsson,cited_reference}

\printbibliography
\end{document}

MacNeilage, Peter F. (1998 年 8 月)。“言语生成进化的框架/内容理论”。《行为与脑科学》21.4,第 499-511 页。doi:10.1017/S0140525X98001265。

如果必须继续使用,language = {en},可以尝试以下解决方法之一。

  1. 使用源映射映射enenglish

    \DeclareSourcemap{
      \maps[datatype=bibtex]{
        \map{
          \step[fieldsource=language,
                match=\regexp{\Aen\Z},
                replace={english}]
        }
      }
    }
    
  2. 用来\DeclareRedundantLanguages告诉biblatexen对于英语来说是多余的。

    \DeclareRedundantLanguages{en}{english,american,british,
      canadian,australian,newzealand,USenglish,UKenglish}
    

相关内容