babel 的多语言问题

babel 的多语言问题

.sty已经像这样将 Babel 加载到我的文件中:

\RequirePackage[乌克兰语,俄语,英语]{babel}

然后在.tex或在同一.sty文件中我尝试:

\选择语言(X)
\语言名称
\iflanguage{英语}{英语}{}
\iflanguage{俄语}{rus}{}
\iflanguage{乌克兰语}{ukr}{}

结果是:

X=>输出
russian => rus (\languagename 表示俄语) 好的!
ukrainian => rus (!!!)(语言名称为 ukrainian)错误!
english => eng (\languagename 表示 english) 好的!

多么神奇啊?注意:其他所有内容,如“内容”、“章节”等单词都正确地翻译成了指定的语言。

答案1

这是 中的一个错误babel,它出现在选择了西里尔语。我曾在文章发表于 ArsTeXnica 第 9 期,意大利 TeX 用户组 GuIT 的期刊。

您可以通过纠正以下行为来解决该错误babel

\documentclass{article}
\usepackage[T2A,T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ukrainian,russian,english]{babel}

\makeatletter
\newcommand{\@cyrillictext}{% 
  \fontencoding\cyrillicencoding 
  \selectfont 
  \let\encodingdefault\cyrillicencoding 
} 
\DeclareRobustCommand{\cyrillictext}{%
  \@cyrillictext} 
\let\cyr\cyrillictext 
\DeclareRobustCommand{\Bulgarian}{% 
  \@cyrillictext 
  \foreign@language{bulgarian}} 
\let\Bul\Bulgarian \let\Bg\Bulgarian 
\DeclareRobustCommand{\Russian}{% 
  \@cyrillictext 
  \foreign@language{russian}} 
\let\Rus\Russian 
\DeclareRobustCommand{\Ukrainian}{% 
  \@cyrillictext 
  \foreign@language{ukrainian}} 
\let\Ukr\Ukrainian 
\AtBeginDocument{ 
  \@ifundefined{defaultcyrlanguage} 
    {\let\defaultcyrlanguage\bbl@main@language}
    {}
}
\renewcommand{\textcyrillic}[2][\defaultcyrlanguage]{%
  \expandafter\foreignlanguage\expandafter{#1}{#2}}
\makeatother

\begin{document}
\selectlanguage{english}
\languagename --\the\language --%
\iflanguage{english}{eng}{}%
\iflanguage{russian}{rus}{}%
\iflanguage{ukrainian}{ukr}{}

\selectlanguage{ukrainian}
\languagename --\the\language --%
\iflanguage{english}{eng}{}%
\iflanguage{russian}{rus}{}%
\iflanguage{ukrainian}{ukr}{}%

\selectlanguage{russian}
\languagename --\the\language --%
\iflanguage{english}{eng}{}%
\iflanguage{russian}{rus}{}%
\iflanguage{ukrainian}{ukr}{}%

\end{document}

在此处输入图片描述

使用此代码,声明\Russian\Ukrainian不会改变固定词(它们的行为类似于otherlanguage*环境);如果您更喜欢(IMO错误的)行为babel,请将的出现更改\foreign@language\select@language


问题在于,在加载时,每种语言都定义\cyrillictext要使用该语言;因此最后加载的语言获胜。当\selectlanguage发出或类似的选择西里尔语言的命令时,\cyrillictext将作为 的一部分执行\extras<language>;因此语言名称设置正确,但语言编号设置为最后加载的西里尔语言babel,在本例中为俄语。

相关内容