根据所选语言(babel)构建分支

根据所选语言(babel)构建分支

我想将我的一个演示文稿保留为德语和英语,并定义了一个相应的布尔变量和ifthen一个命令来排版德语或英语文本。

有没有一种简单的方法来评估全局选项(\documentclass[恩格尔曼]{article}) 定义例如babel

\documentclass{minimal}

\usepackage{ifthen}
\newboolean{mothertongue}
\setboolean{mothertongue}{true}

\newcommand{\tr}[2]{\ifthenelse{\boolean{mothertongue}}{#1}{#2}}

\begin{document}

\tr{Deutsch}{English}


\end{document}

根据 egregs 的评论,我更新了我的示例,但我只得到了英文文本。

\documentclass[ngerman]{scrartcl}
\usepackage{ifthen,babel}
\newcommand{\tr}[2]{\ifthenelse{\equal{\languagename}{ngerman}}{#1}{#2}}

\begin{document}

\tr{deutsch}{english}

\languagename

\end{document}

答案1

测试\ifthenelse{\equal{\languagename}{ngerman}}{Deutsch}{English}无法运行有几个原因:首先,\languagename无法扩展;但即使我们添加了适当数量的\expandafter标记,它也无法再次运行,因为扩展\languagename由 12 个字符的类别代码组成。

与其使用复杂的技巧,不如加载 Heiko Oberdiek 提供的众多软件包之一,在这种情况下iflang,其文档中已经解释了该问题。

\documentclass{article}
\usepackage[english,ngerman]{babel}
\usepackage{iflang}

\newcommand{\tr}{\IfLanguageName{ngerman}{Deutsch}{English}}


\begin{document}
\tr

\selectlanguage{english}
\tr

\end{document}

这将打印

德文
英文

答案2

使用 pdfTeX 的\pdfstrcmp原语进行比较:

enter image description here

\documentclass[ngerman]{scrartcl}% http://ctan.org/pkg/KOMA-script
\usepackage{babel}%  http://ctan.org/pkg/babel
\newcommand{\tr}[2]{\ifnum\pdfstrcmp{\languagename}{ngerman}=0 #1\else #2\fi}

\begin{document}

\tr{deutsch}{english}

\languagename

\end{document}

相关内容