使用命令定义 newtheorem 的标题

使用命令定义 newtheorem 的标题

在下面的例子中,您可以看到两种环境都获得相同的标题。

如何防止这种情况?如果您使用其他包(如amsthmtheorem或 ) ,您将获得相同的结果thmtools

\setcounter{errorcontextlines}{999}
\documentclass{scrartcl}
\usepackage{ntheorem,xcolor}
\def\tempA{Game}
\newtheorem{game}{\color{red}\bfseries\tempA}
\def\tempA{Example}
\newtheorem{example}{\color{blue}\bfseries\tempA}
\begin{document}

\begin{example}
Test
\end{example}

\vspace*{2em}

\begin{game}
Test
\end{game}
\end{document}

在此处输入图片描述

答案1

当然:第二个\def覆盖了第一个的含义:仅当和时才\tempA展开\begin{game}\begin{example}用过的,在定义时不是。此时,\tempA扩展为Example

\def\tempA{Game}
\begingroup
\edef\x{\endgroup
  \noexpand\newtheorem{game}{\noexpand\color{red}\noexpand\bfseries\tempA}}
\x
\def\tempA{Example}
\begingroup
\edef\x{\endgroup
  \noexpand\newtheorem{example}{\noexpand\color{red}\noexpand\bfseries\tempA}}
\x

可以,但是比较麻烦

相关内容