我有一份英文文档biblatex
,需要添加另一种语言的摘要,该语言支持babel
但不支持biblatex
。我认为这不会成为问题,因为摘要不包含任何引文,但当我更改语言时,我仍然收到警告。我该如何解决这个问题?
language=english
附言:当我将 传递给时也会发生这种情况biblatex
,但无论如何我不想这样做,因为我确实有一些非英语书目条目,其语言受 支持biblatex
。
一个工作示例
\documentclass{article}
\usepackage[english]{babel}
% Not including 'csquotes' fires an unrelated warning.
\usepackage{csquotes}
\usepackage{biblatex}
\begin{filecontents}{bibliography.bib}
@misc{SampleEntry,
author = {Author, Sample},
title = {Sample Title}
}
\end{filecontents}
\addbibresource{bibliography.bib}
\begin{document}
\selectlanguage{esperanto}
Saluton!
\selectlanguage{english}
Let us cite \cite{SampleEntry}.
\printbibliography
\end{document}
警告
包 biblatex 警告:不支持语言‘世界语’。
LaTeX 警告:存在未定义的引用。
包 biblatex 警告:请重新运行 LaTeX。
答案1
biblatex
的语言支持实现方式是
- 要求事先“了解”所有使用的语言(
babel
这意味着,您将要使用的所有语言都需要作为选项宣布babel
), - 尝试加载
biblatex
所有已公布语言的本地化版本,即使您的文档中该语言排版部分没有引文/参考书目。
这意味着,一旦您读取文档,编译时就会出现更少的警告
\documentclass{article}
\usepackage[esperanto, english]{babel}
\usepackage{csquotes}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\selectlanguage{esperanto}
Saluton!
\selectlanguage{english}
Let us cite \cite{sigfridsson}.
\printbibliography
\end{document}
您仍然会收到一条警告,指出esperanto
不受支持biblatex
,因为biblatex
没有esperanto.lbx
。
您可以选择忽略此警告,或者您可能需要研究编写合适的esperanto.lbx
(参见配置 biblatex 以用于不受支持的语言的最合适方法是什么?)。
有一些方法可以“消除”这个警告,但我不建议这样做,因为如果您真的想要世界语引用/参考书目条目,那么消除警告可能会给您带来麻烦。
古斯布斯建议一个简单的方法让biblatex
闭嘴在评论中:将世界语映射为英语
\DeclareLanguageMapping{esperanto}{english}
或者您可以发出
\makeatletter
\protected\def\blx@langsetup#1{%
\blx@lbxinput{#1}
{\edef\blx@languagename{#1}}
{}}
\makeatother
在序言中删除生成相关警告的代码。
如果您不传递选项并在稍后使用则babel
不会出错,但结果可能会有点偏差。esperanto
\selectlanguage{esperanto}
\documentclass{article}
\usepackage[english]{babel}
\begin{document}
\selectlanguage{esperanto}
\tableofcontents
\section{Foo}
Saluton!
\selectlanguage{english}
\tableofcontents
\section{Bar}
Lorem
\end{document}
给出
以及警告
Package babel Warning: \contentsname not set for 'esperanto'. Please, (babel) define it after the language has been loaded (babel) (typically in the preamble) with: (babel) \setlocalecaption{esperanto}{contents}{..} (babel) Reported on input line 6.
和
\documentclass{article}
\usepackage[esperanto, english]{babel}
\begin{document}
\selectlanguage{esperanto}
\tableofcontents
\section{Foo}
Saluton!
\selectlanguage{english}
\tableofcontents
\section{Bar}
Lorem
\end{document}
我明白了
我无法告诉您其他更重要的功能(例如连字符)是否在两种设置中都有效,但这种行为似乎向我表明,至少目前,您仍应将所有语言宣布为babel
包/类选项。