Могу ли я использовать сокращенную запись «языка» (код языка) в моем файле .bib?

Могу ли я использовать сокращенную запись «языка» (код языка) в моем файле .bib?

Я использую BiblaTeXи у меня возник вопрос: поскольку я вижу, что почти во всех типах источников в моем .bibфайле я могу использовать запись language.

Однако все, что я вставляю в них, литературно отображается в моих ссылках. Так что не могу ли я, например, также использовать ISO-639-1 или другойИСО-код?

Например:

@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] Идентификатор языка библиографической записи. [...] Идентификатор должен быть названием языка, известным пакетам 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 german, langgermanтакже подойдет) в соответствии с новыми правилами орфографии ( langidis ngerman).


Поле langidможет работать только с языковыми идентификаторами, известными babel/ polyglossia, но согласно комментарию PLK выше Biber может работать и с языковыми кодами BCP47 и сопоставлять их с соответствующими им аналогами. Фактически Biber с радостью примет бессмысленный ввод, такой как langid = {flobbel}, но это приведет к проблемам с babelили polyglossiaесли вы используете что-либо иное, чем autolang=noneи языковой пакет попытается загрузить неизвестный язык flobbel.


Поле languageпринимает любые входные данные, но идентификаторы языка, которые biblatexзнают, обрабатываются по-другому, они переводятся. Чтобы быть немного точнее, это работает для языков, определенных в текущем используемом .lbxфайле как lang<language>, вы можете указать их как <language>или lang<language>. Если bibstring не определен в .lbx, содержимое поля languageвыводится как есть.Поддерживаемые языки можно посмотреть english.lbxздесь.,для голландского список здесь). Вы можете указать идентификатор языка как с префиксом, langтак и без него, langgreekи greekполучить те же результаты. Если вы используете

language = {english},

в голландском документе вы получите вывод «Engels», а если язык документа английский, мы получим «English».

Строка enотсутствует в списке распознаваемых идентификаторов языка и выводится как есть.

Вы можете эмулировать то, что Бибер делает с langidполем, используя sourcemap

\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}]
    }
  }
}

Связанный контент