如何使选项 langid={english} 成为条件?

如何使选项 langid={english} 成为条件?

我怎样才能让所有引用都具有langid={english}选项,除非引用中有西里尔字母,否则应该是langid={russian}? 可选问题:我怎样才能让所有引用都具有除非引用内langid={english}另有说明?langid={russian}

答案1

这确实是一个有趣的问题。我总是对自动解决方案非常谨慎,它们完全按照指令执行,并不智能。而且无论如何,人们总是必须手动检查一切是否完全按照计划进行。

使用 Biber,我们可以对字段进行正则表达式检查。正则表达式允许检查西里尔字符。

在这里,我们检查title字段(我认为,这是作品语言的最佳指标)中是否有西里尔字母。 包含西里尔字符的条目被归类为russian,所有其他条目被归类为english。 也就是说,如果不langid存在任何字段;现有langid字段永远不会被覆盖,因此自然优先于此过程。

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=title,
            match=\regexp{\p{cyrillic}},
            final]
      \step[fieldset=langid, fieldvalue=russian]
    }
    \map{\step[fieldset=langid, fieldvalue=english]}
  }
}

请注意,采用这种方法,您将得到“俄语-英语”二分法;法语、荷兰语、德语、乌克兰语、保加利亚语的作品均被忽略。

在下面的 MWE 中我已将finentry宏更改为显示langid

平均能量损失

\documentclass[german,russian,english]{article}
\usepackage[T2A,T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber,style=authortitle,autolang=other]{biblatex}
\usepackage{filecontents}

\begin{filecontents*}{\jobname.bib}
@article{cheby,
  author   = {Б. В. Гнеденко},
  title    = {П. Л. Чебышев, \enquote{Полное собрание сочинений} тт.~I--V (рецензия)},
  journal  = {УМН},
  year     = {1954},
  volume   = {9},
  number   = {4(62)},
  pages    = {263--266},
}
@article{lewis,
  author  = {Lewis, David},
  year    = {1970}, 
  title   = {How to Define Theoretical Terms},
  journal = {Journal of Philosophy},
  volume  = {67},
  pages   = {427–446},
}
@article{hilbert:trans,
  author    = {David Hilbert},
  title     = {Ueber die Transcendenz der Zahlen $e$ und $\pi$},
  journal   = {Mathematische Annalen},
  date      = {1893},
  volume    = {43},
  pages     = {216-219},
  langid    = {german},
  url       = {http://resolver.sub.uni-goettingen.de/purl?PPN235181684_0043},
}
\end{filecontents*}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=title,
            match=\regexp{\p{cyrillic}},
            final]
      \step[fieldset=langid, fieldvalue=russian]
    }
    \map{\step[fieldset=langid, fieldvalue=english]}
  }
}

\renewbibmacro*{finentry}{\printfield{langid}\finentry}

\addbibresource{\jobname.bib}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

在此处输入图片描述

请注意,hilbert:trans保留其german langid,而lewis归类为english和。chebyrussian


此映射将根据字段中西里尔字符的出现情况对条目进行分类title:如果不包含西里尔字符,则langid设置为english;如果包含,则设置为russian

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=title,
            notmatch=\regexp{\p{cyrillic}},
            final]
      \step[fieldset=langid, fieldvalue=english]
    }
    \map{
      \step[fieldsource=title,
            match=\regexp{\p{cyrillic}},
            final]
      \step[fieldset=langid, fieldvalue=russian]
    }
  }
}

MWE 中的输出与上面相同。

相关内容