以下 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}
?
因此我的问题是:为什么\GetTranslation
fromtranslations
包不能用作(thmtools
)定理的名称?
答案1
您必须防止\GetTranslation
在定义点执行\declaretheorem
- 调用\GetTranslation
被推迟到使用定理本身的点,即在文档主体中:
\declaretheorem[name=\protect\GetTranslation{foo}]{baz}
也感谢 David Carlisle 的一些解释 ;-)