.cls
我的文件中有几十行这样的行,用、、等等theorem
替换......lemma
proposition
definition
\NewDocumentEnvironment{theorem}{O{}}{%
\IfLanguageName{chinese}{\begin{theoremCN}[#1]}{}%
\IfLanguageName{french}{\begin{theoremFR}[#1]}{}%
\IfLanguageName{english}{\begin{theoremEN}[#1]}{}%
}{%
\IfLanguageName{chinese}{\end{theoremCN}}{}%
\IfLanguageName{french}{\end{theoremFR}}{}%
\IfLanguageName{english}{\end{theoremEN}}{}%
}
\NewDocumentEnvironment{theorem*}{O{}}{%
\IfLanguageName{chinese}{\begin{theoremCN*}[#1]}{}%
\IfLanguageName{french}{\begin{theoremFR*}[#1]}{}%
\IfLanguageName{english}{\begin{theoremEN*}[#1]}{}%
}{%
\IfLanguageName{chinese}{\end{theoremCN*}}{}%
\IfLanguageName{french}{\end{theoremFR*}}{}%
\IfLanguageName{english}{\end{theoremEN*}}{}%
}
这样的代码差不多有 400 行,有没有什么办法可以简化它?(我记得看到过其他人写过类似的东西\csname...
,但我无法弄清楚细节)
答案1
我要在这里冒险并假设你有类似的东西:
\newtheorem{theoremEN}{Theorem}
\newtheorem{theoremFR}{Théorème}
\newtheorem{theoremCN}{定理}
但事实上,你正在根据语言做某事,这暗示着我们想要利用 Babel 的多语言功能。
我们将通过类似以下方式定义我们的定理环境
\newtheorem{theorem}{\theoremname}
\newcommand{\theorem}{} % So we can redefine it with \renewcommand
然后我们就可以添加语言钩子来做类似这样的事情:
\addto\extrasenglish{%
\renewcommand{\theoremname}{Theorem}
}
\addto\extrasfrench{%
\renewcommand{\theoremname}{Théorème}
}
\addtoextraschinese{%
\renewcommand{\theoremname}{定理}
}
并根据语言获取适当的定理标签。
按语言进行不同的编号会更具挑战性:我们希望有计数器来保存每种语言的当前定理编号:
\newcounter{theoremEN}
\newcounter{theoremCN}
\newcounter{theoremFR}
然后我们在离开语言时保存该值
\addto\noextrasenglish{\setcounter{theoremEN}{\value{theorem}}}
etc.
并在我们选择语言时恢复它
\addto\extrasenglish{\setcounter{theorem}{\value{theoremEN}}}
etc.
通常的免责声明:这是我凭空想出来的。我没有测试过这些。