BibLaTeX - 无需语言键的本地化

BibLaTeX - 无需语言键的本地化

一般来说,我们可以通过设置语言输入每个 .bib 条目并使用\DeclareBibliographyStrings(BibLaTeX 文档,第 204 页)。

门德利可以生成 .bib 资源,但无法包含语言在每个条目中键入。

我的问题是如何在没有语言钥匙。

我知道 BibTeX 可以获取多个 .bib 资源。BibLaTeX 可以在每个 .bib 资源中使用不同的格式设置吗?或者,有没有建议可以在没有语言钥匙?

答案1

显然,Mendeley 最好只允许添加该langid字段以方便语言切换。

如果你无法做到这一点,你可以.bib按语言在文件中组织你的参考书目。然后你可以langid像这样为每个条目添加字段

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \perdatasource{\jobname-en.bib}
      \step[fieldset=langid, fieldvalue={english}]
    }
    \map{
      \perdatasource{\jobname-de.bib}
      \step[fieldset=langid, fieldvalue={ngerman}]
    }
    \map{
      \perdatasource{\jobname-fr.bib}
      \step[fieldset=langid, fieldvalue={french}]
    }
  }
}

我们用它\perdatasource来限制到适当文件的映射.bib

平均能量损失

\documentclass[ngerman,french,english,british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage[style=authoryear, backend=biber, abbreviate=false, autolang=other]{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{\jobname-en.bib}
@book{abook,
  author     = {Ann Uthor},
  editor     = {Emily Ditor},
  translator = {Tracy R. Anslator},
  title      = {A Fancy Title},
  date       = {2015},
}
\end{filecontents*}
\begin{filecontents*}{\jobname-de.bib}
@book{einbuch,
  author     = {Andrea Torin},
  editor     = {Herbert R. Ausgeber},
  title      = {Ein Titel},
  date       = {2014},
}
\end{filecontents*}
\begin{filecontents*}{\jobname-fr.bib}
@book{livre,
  author     = {Amelie Uteur},
  editor     = {R. Édactrice},
  title      = {Titre},
  date       = {2014},
}
\end{filecontents*}

\addbibresource{\jobname-en.bib}
\addbibresource{\jobname-de.bib}
\addbibresource{\jobname-fr.bib}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \perdatasource{\jobname-en.bib}
      \step[fieldset=langid, fieldvalue={english}]
    }
    \map{
      \perdatasource{\jobname-de.bib}
      \step[fieldset=langid, fieldvalue={ngerman}]
    }
    \map{
      \perdatasource{\jobname-fr.bib}
      \step[fieldset=langid, fieldvalue={french}]
    }
  }
}

\nocite{*}

\begin{document}
\printbibliography
\end{document}

在此处输入图片描述

请注意,所有条目的语言都不同。


或者 - 感谢 @jon 的想法 - 您还可以向可以导出到的字段添加唯一字符串。在我们的示例中,我们添加[[<langid>]]title字段(其中<langid>应该扩展为语言标识符biblatex或更确切地说babel/polyglossia可以应对)。然后将语言字符串添加到字段langid并从中删除title

这里的映射如下所示

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=title, match=\regexp{\s*\[\[(.+)\]\]}, final]
      \step[fieldset=langid, fieldvalue=\regexp{$1}]
      \step[fieldsource=title, match=\regexp{\s*\[\[(.+)\]\]}, replace={}]
    }
  }
}

.bib然后像这样将语言添加到条目中

@book{einbuch,
  author     = {Andrea Torin},
  editor     = {Herbert R. Ausgeber},
  title      = {Ein Titel[[ngerman]]},
  date       = {2014},
}

平均能量损失

\documentclass[ngerman,french,english,british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage[style=authoryear, backend=biber, abbreviate=false, autolang=other]{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@book{abook,
  author     = {Ann Uthor},
  editor     = {Emily Ditor},
  translator = {Tracy R. Anslator},
  title      = {A Fancy Title [[english]]},
  date       = {2015},
}
@book{einbuch,
  author     = {Andrea Torin},
  editor     = {Herbert R. Ausgeber},
  title      = {Ein Titel[[ngerman]]},
  date       = {2014},
}
@book{livre,
  author     = {Amelie Uteur},
  editor     = {R. Édactrice},
  title      = {Titre [[french]]},
  date       = {2014},
}
\end{filecontents*}
\addbibresource{\jobname.bib}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=title, match=\regexp{\s*\[\[(.+)\]\]}, final]
      \step[fieldset=langid, fieldvalue=\regexp{$1}]
      \step[fieldsource=title, match=\regexp{\s*\[\[(.+)\]\]}, replace={}]
    }
  }
}

\nocite{*}

\begin{document}
\printbibliography
\end{document}

相关内容