我正在尝试从 切换amsthm
到ntheorem
。(这是由于amsthm
与 babel+Hebrew 不兼容,请参阅这里和这里;似乎尚未解决。)
我想要某些环境有星号版本和无星号版本,星号版本没有编号。amsthm
我会这样做:
\newtheorem{theorem}{Theorem}
\newtheorem*{theorem*}{Theorem}
这正是我想要的。使用ntheorem
,这会导致错误 -theorem*
已经定义;删除第二个命令,两个环境都会被编号,不同之处在于theorem*
不会包含在定理列表中(反正我不使用)。我尝试了有和没有它的[amsthm]
选项ntheorem
。
我还能做什么,除了放弃,theorem*
转而选择类似
\newtheorem*{theoremstar}{Theorem}
?
答案1
查看ntheorem
文档,我看到\renewtheorem
提到;所以:
\renewtheorem*{theorem*}{Theorem}
newtheorem
是一个可行的技巧。现在,如果我能将和之间的选择宏化就好了renewtheorem
,这样我就可以为ntheorem
和都使用相同的前导码amsthm
。
答案2
回复楼主的回答:那
\providecommand{\renewtheorem}{\newtheorem}
因此,在使用时\renewtheorem
将其定义为,而使用时不会重新定义?这是一种肮脏的黑客行为,但无论使用或中的哪一个都应该有效。\newtheorem
amsthm
ntheorem
amsthm
ntheorem
更简洁的版本是
\makeatletter
\@ifpackageloaded{amsthm}{what if loaded}{what if not}
\@ifpackageloaded{ntheorem}{what if loaded}{what if not}
\makeatother
答案3
除了您提到的那个,我想不出任何其他可能性,即\newtheorem*{theoremstar}{Theorem}
。它看起来有点笨拙,但它有效!
附录2011 年 10 月 2 日:请参阅我的回答这个问题以便更完整地回答您的问题,关于如何创建定理样式,其中定理的“星号”版本没有编号。