我有一个几乎与此相同的问题其他旧问题。不同之处在于我使用的是 Zotero 和 IEEEtran bib 样式。
Zotero 基本上与 Mendeley 做同样的事情,即在值language
中生成字段等。所以这个差异对于这个问题来说并不重要,我在这里仅针对搜索引擎用户说明。.bib
en
IEEEtran bib 样式发出一些代码,显然会检查language
的值是否是已定义的 babel 语言。如果不是,则会发出警告:
** WARNING: IEEEtran.bst: No hyphenation pattern has been
** loaded for the language `en'. Using the pattern for
这来自以下代码:
\providecommand{\BIBforeignlanguage}[2]{{%
\expandafter\ifx\csname l@#1\endcsname\relax
\typeout{** WARNING: IEEEtran.bst: No hyphenation pattern has been}%
\typeout{** loaded for the language `#1'. Using the pattern for}%
\typeout{** the default language instead.}%
\else
\language=\csname l@#1\endcsname
\fi
#2}}
就像另一个问题一样,我想使用 bib 样式而不更改文件.bib
。但是,另一个问题的解决方法/解决方案不适用于 IEEEtran。
MWE(没有natbib的失效解决方法):
\begin{filecontents*}{\jobname.bib}
@inproceedings{Renyi1961,
author = {R\'{e}nyi, Alfr\'{e}d},
booktitle = {Proceedings of the Fourth Berkeley Symposium on Mathematical Statistics
and Probability, Volume 1: Contributions to the Theory of Statistics},
issn = {0097-0433},
language = {en},
publisher = {The Regents of the University of California},
title = {{On Measures of Entropy and Information}},
url = {http://projecteuclid.org/euclid.bsmsp/1200512181},
year = {1961}
}
\end{filecontents*}
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage{hyperref}
\bibliographystyle{IEEEtran}
\begin{document}
\cite{Renyi1961}
\bibliography{\jobname}
\end{document}
答案1
编辑。抱歉,我的回答没有解决问题。我假设选择是用 完成的babel
,但事实证明并非如此。不过,我不会删除它,因为它在其他情况下可能会有用。
原始答案
这是一个快速破解方法:
\documentclass{article}
\usepackage[danish,english]{babel}
% The hack:
\makeatletter
\let\old@fixname\bbl@fixname
\def\bbl@fixname#1{%
\@ifundefined{babelalias#1}%
{\old@fixname{#1}}%
{\edef\languagename{\csname babelalias#1\endcsname}}}
\makeatother
% The synonymous:
\newcommand{\babelaliasen}{english}
\newcommand{\babelaliasda}{danish}
\begin{document}
\selectlanguage{da}
\languagename --- \chaptername
\selectlanguage{en}
\languagename --- \chaptername
\end{document}
虽然不是很优雅,但似乎可以工作。BCP 47 代码的接口正在研究中,很可能几个月后就可以使用。
答案2
你可以做得更好,请参阅其他帖子。
\begin{filecontents*}{\jobname.bib}
@inproceedings{Renyi1961,
author = {R{\'{e}}nyi, Alfr{\'{e}}d},
booktitle = {Proceedings of the Fourth Berkeley Symposium on Mathematical Statistics
and Probability, Volume 1: Contributions to the Theory of Statistics},
issn = {0097-0433},
language = {en},
publisher = {The Regents of the University of California},
title = {{On Measures of Entropy and Information}},
url = {http://projecteuclid.org/euclid.bsmsp/1200512181},
year = {1961}
}
\end{filecontents*}
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage{doi}
\usepackage{hyperref}
\bibliographystyle{IEEEtran}
\makeatletter
\let\ORIbbl@fixname\bbl@fixname
\def\bbl@fixname#1{%
\@ifundefined{languagealias@\expandafter\string#1}
{\ORIbbl@fixname#1}
{\edef\languagename{\@nameuse{languagealias@#1}}}%
}
\newcommand{\definelanguagealias}[2]{%
\@namedef{languagealias@#1}{#2}%
}
\let\BIBforeignlanguage\foreignlanguage
\makeatother
\definelanguagealias{en}{english}
\begin{document}
\cite{Renyi1961}
\bibliography{\jobname}
\end{document}
诀窍是诱导IEEEtran
使用比更好的命令\language\l@<language>
,即\foreignlanguage{<language>}{...}
答案3
解决这个问题最简单的方法似乎是使用简单的 TeX 宏来定义别名,例如:
\makeatletter
\def\l@en{\l@english}
\makeatother
但是,我不确定这是否能完全解决问题,而无需回归。做但是加载正确的连字设置。另外,我无法为该\definelanguagealias
命令声明合适的替换(要么在使用 TeX 基元定义时产生错误,要么无法正确创建 babel/IEEEtran 可以获取的别名)。
我很乐意选择一个更优雅的建议作为正确答案......