我怎样才能让所有引用都具有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
和。cheby
russian
此映射将根据字段中西里尔字符的出现情况对条目进行分类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 中的输出与上面相同。