我可以在我的 .bib 文件中使用缩短的“语言”条目(语言代码)吗?

我可以在我的 .bib 文件中使用缩短的“语言”条目(语言代码)吗?

我正在使用BiblaTeX并且有一个问题:正如我在我的.bib文件中的几乎所有类型的源中看到的那样,我可以使用条目language

但是我输入的只是参考文献中显示的文学作品。所以我不能使用 ISO-639-1 或其他ISO 代码

例如:

@online{SOTexBibLangIso,
    author = {Stackoverflow Tex Community},
    title = {Can I use a shortened "language" entry (language code) in my .bib file?},
    url = {https://tex.stackexchange.com/questions/294703/can-i-use-a-shortened-language-entry-language-code-in-my-bib-file},
    language = {en},
    urldate = {2016-02-18},
}

答案1

biblatex区分了两个语言领域:(1)language和(2)langid。根据biblatex文档,第 20 页,

[该language字段包含]作品的语言。语言可以按字面指定,也可以作为本地化键指定。如果使用本地化键,则前缀lang可以省略。

在第 25 页我们有

[ langid] 参考书目条目的语言 ID。[...] 标识符必须是babel/polyglossia包已知的语言名称。此信息可用于切换连字符模式和本地化参考书目中的字符串。请注意,语言名称区分大小写。

因此,language字段是作为作品语言打印在参考书目中的,而 是langid内部用于 的biblatex语言切换行为(它可用于切换参考书目中的连字符,因此单词被正确连字符,或者它也可能更改语言相关的字符串;这由选项控制autolang)。请注意,如果那里给出的语言与文档的主要语言一致,则默认情况下language不会打印信息;这由选项clearlang和控制\DeclareRedundantLanguages

例如,你可能有

@online{elk,
  author   = {Anne Elk},
  title    = {Über die Anatomie der Donnerechse},
  url      = {http://www.example.edu/~elk/bronto.pdf},
  date     = {2016-01-01},
  language = {german},
  langid   = {ngerman},
}

对于遵循新正字法规则的德语文本(languageis germanlanggerman也可以)。langidngerman


langid字段只能使用babel/已知的语言标识符polyglossia,但根据 PLK 上述评论,Biber 也可以处理 BCP47 语言代码并将它们映射到各自的对应项。事实上,Biber 很乐意接受诸如 之类的无意义输入,但如果您使用 以外的任何内容,langid = {flobbel}这将导致babel或出现问题,并且语言包会尝试加载未知语言。polyglossiaautolang=noneflobbel


language字段接受任何输入,但知道的语言标识符biblatex将受到不同的处理,它们将被翻译。更准确地说,这适用于当前使用的.lbx文件中定义为的语言lang<language>,您可以将它们指定为<language>lang<language>。如果 bibstring 未在中定义.lbx,则字段的内容language将按原样打印。english.lbx您可以在此处查看支持的语言荷兰语列表在此处)。您可以为语言标识符指定前缀lang或不指定前缀,langgreek结果greek相同。如果您使用

language = {english},

在荷兰语文档中,您会得到输出“Engels”,如果文档语言是英语,我们会得到“English”。

该字符串en不在可识别的语言标识符列表中,因此按原样打印。

langid你可以使用 sourcemap来模拟 Biber 对该字段的操作

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=language,
            match=\regexp{\Aen\Z},
            replace=\regexp{english}]
      \step[fieldsource=language,
            match=\regexp{\Ade\Z},
            replace=\regexp{german}]
    }
  }
}

相关内容