我.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
,在本例中为俄语。