![根据所选语言(babel)构建分支](https://linux22.com/image/274945/%E6%A0%B9%E6%8D%AE%E6%89%80%E9%80%89%E8%AF%AD%E8%A8%80%EF%BC%88babel%EF%BC%89%E6%9E%84%E5%BB%BA%E5%88%86%E6%94%AF.png)
我想将我的一个演示文稿保留为德语和英语,并定义了一个相应的布尔变量和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
原语进行比较:
\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}