为什么翻译包中的 \GetTranslation 不能用于(thmtools)定理的名称?

为什么翻译包中的 \GetTranslation 不能用于(thmtools)定理的名称?

以下 MWE 按预期工作:

\documentclass[french,english]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{translations}
\usepackage{babel}

\DeclareTranslationFallback{foo}{Foo}%
\DeclareTranslation{English}{foo}{Foo (English)}%
\DeclareTranslation{French}{foo}{Foo (French)}%

\def\foo{\GetTranslation{foo}}
% \declaretheorem[name=\GetTranslation{foo}]{baz}

\begin{document}
\GetTranslation{foo} = \foo

\selectlanguage{french}

\GetTranslation{foo} = \foo
\end{document}

除非被\declaretheorem[name=\GetTranslation{foo}]{baz}注释掉:在这种情况下,编译会失败并出现错误:

! Undefined control sequence.
<argument> ...@language@\@trnslt@current@language 

l.15 ...aretheorem[name=\GetTranslation{foo}]{baz}

? 
! Undefined control sequence.
<argument> \@trnslt@current@language 

l.15 ...aretheorem[name=\GetTranslation{foo}]{baz}

?

因此我的问题是:为什么\GetTranslationfromtranslations包不能用作(thmtools)定理的名称?

答案1

您必须防止\GetTranslation在定义点执行\declaretheorem- 调用\GetTranslation被推迟到使用定理本身的点,即在文档主体中:

 \declaretheorem[name=\protect\GetTranslation{foo}]{baz}

也感谢 David Carlisle 的一些解释 ;-)

相关内容