以下帖子由三部分组成。第一部分进行了一项实验,证实了translator
只有满足某些先决条件时,翻译才能进行。第二部分beamer
创建了一个演示文稿,可自动生成翻译。第三部分证明了第二部分中证实的翻译先决条件(即第一部分中确定的先决条件)并未得到满足。然后提出了如何调和这一悖论的问题。附录揭示了谜团的关键,但没有解释“如何”和“为什么”。
第一部分:一个实验
以下实验表明,为了在没有明确命令translator
选项translate
的情况下将键翻译成非英语语言,必须满足以下两个条件之一:
- 该
translator
包必须加载非英语语言作为选项。 - 必须使用非英语语言调用该
translator
命令。\languagealias
实验分为三个阶段。第一阶段演示当上述两个条件都不满足时会发生什么。第二阶段展示当两个条件中的第一个满足时会发生什么。第三阶段展示当第二个条件满足时会发生什么。
在实验的第一阶段,以下 LaTeX 代码使用 进行编译。lualatex
代码首先创建一本名为 的德语词典Test-German.dict
。该词典包含一个键-翻译对:键phrase
应翻译为A German phrase
。然后创建一篇文章,通过 将其主要语言设置babel
为德语。translator
包在没有任何选项的情况下加载。然后translator
通知包在文档开头加载词典Test-German.dict
。然后文档开始,并包含一个命令,指示translator
包翻译键phrase
。
\begin{filecontents*}[overwrite]{Test-German.dict}
\providetranslation{phrase}{A phrase in German}
\end{filecontents*}
\documentclass{article}
\usepackage[german]{babel}
\usepackage{translator}
\usedictionary{Test}
\uselanguage{German}
\begin{document}
\translate{phrase}
\end{document}
上述代码编译生成的 PDF 文件显示单个单词“phrase”。结论:该\translate
命令没有使用词典来翻译关键内容。
在实验的第二阶段,通过将german
选项传递给包translator
:来修改上述代码\usepackage[german]{translator}
,然后重新编译代码。生成的 PDF 文件现在显示:“德语短语”。结论:该\translate
命令使用字典来翻译关键内容。
在实验的第三阶段,我们将上述原始代码修改为将该命令\languagealias{german}{German}
作为前导码的最后一条命令插入,然后重新编译代码。得到的PDF文件与第二阶段相同,因此可以得出与第二种情况相同的结论。
实验现已完成。重申这个三阶段实验的结论:为了使translator
软件包的translate
命令在没有明确命令选项的情况下将密钥翻译成非英语语言,必须满足以下两个条件之一:
- 该
translator
包必须加载非英语语言的选项。 - 必须使用非英语语言调用该
translator
命令。\languagealias
第二部分:Beamer 演示
现在考虑以下 LaTeX 代码。该代码创建了一个德语beamer
演示文稿。德语通过两种方式设置为演示文稿的语言:将其作为类选项传递,然后将其作为选项传递给包babel
。然后开始演示文稿的主体。演示文稿由一个包含theorem
环境的单个框架组成。
\documentclass[german]{beamer}
\usepackage[german]{babel}
\begin{document}
\begin{frame}
\begin{theorem}
A theorem.
\end{theorem}
\end{frame}
\end{document}
用此代码编译生成的 PDF 文件lualatex
由一张幻灯片组成,其中显示两行文本:第一行是“Satz”(德语中“定理”的意思),其下方是“定理”。显然,环境的标题theorem
已自动翻译为德语。
根据这篇文章开头描述的实验结果,我得出结论,该beamer
包要么translator
使用german
选项加载包,要么执行命令\languagealias{german}{German}
,要么to=German
作为选项传递给\translate
命令。
第三部分:在 Beamer 源代码中搜索先决条件
然而,通过搜索源beamer
代码证实这些替代方案均不成立:translator
包裹已装入这个文件没有任何选项,字符串“languagealias”beamer
在源代码中不存在以及命令\translate
从未传递任何选项。
那么,“Theorem”一词是如何翻译成德语单词“Satz”的呢?
附录
写完这篇文章后,我又进行了一个小实验,这揭示了这个问题。当实验第一阶段的代码通过german
作为类选项传递给article
文档类进行修改时,就会进行翻译。所以这是解开谜团的关键。但我想了解背后的机制。我认为这在手册中没有记录translator
。
答案1
我猜想发生的事情是,后台类选项会自动附加到序言中加载的所有包的选项列表中。因此,具体来说,如果german
作为类选项传递给article
或beamer
文档类,则\usepackage{translator}
命令会自动替换为\usepackage[german]{translator}
,因此满足了原始帖子中描述的两个先决条件中的第一个,谜团就解开了。