![带有 [amsthm] 选项的 ntheorem 忽略了定理环境的样式](https://linux22.com/image/241160/%E5%B8%A6%E6%9C%89%20%5Bamsthm%5D%20%E9%80%89%E9%A1%B9%E7%9A%84%20ntheorem%20%E5%BF%BD%E7%95%A5%E4%BA%86%E5%AE%9A%E7%90%86%E7%8E%AF%E5%A2%83%E7%9A%84%E6%A0%B7%E5%BC%8F.png)
我正在使用ntheorem
该amsthm
选项来定义一个类似定理的环境来陈述注释:
\documentclass{article}
\usepackage[amsthm]{ntheorem}
\theoremstyle{plain}
\theoremheaderfont{\normalfont\itshape}
\theorembodyfont{\normalfont}
\newtheorem*{myenv}{Note}
\begin{document}
\begin{myenv}
The quick brown fox jumps over the lazy dog.
\end{myenv}
\end{document}
我应该得到一个以斜体字样的“Note”开头的环境,后面是普通罗马字体的内容。但我得到的是粗体罗马字体的“Note”,正文是斜体:
尝试定义一种新的定理风格似乎也不起作用:
\newtheoremstyle{nonumberabc}%
{\item[\normalfont\itshape \hskip\labelsep ##1\theorem@separator]\normalfont}%
{\item[{\normalfont\itshape \hskip \labelsep ##3}\theorem@separator]\normalfont}
\theoremstyle{abc}
\newtheorem*{myenv}{Note}
这与上述文档给出了相同的结果。
我究竟做错了什么?
如果我放弃该选项,问题就不会发生amsthm
- 但这样我就得不到我期望的一些很好的 amsthm 定义......(经过多年使用后,放弃 ntheorem 的 amsthm 在心理上已经够难的了!)最重要的是,我喜欢amsthm
证明环境。所以,对于那些建议我放弃的人amsthm
- 我怎样才能用 重现具有完全相同行为(包括 QED 框大小等)的证明ntheorem
?我不能直接将代码从 中提取出来ntheorem
,因为它似乎没有使用自己的 theoremstyle 命令来获取证明环境。相反,它做了其他事情。
答案1
我正在使用带有 amsthm 选项的 ntheorem。我应该得到一个环境,其中“Note”为斜体,内容为普通罗马字体。相反,我得到的是粗体罗马字体的“Note”,正文为斜体。我做错了什么?
我认为您需要提供几个\newtheoremstyle
命令才能发出命令\newtheorem{myenv}{Note}
。根据软件包的文档ntheorem
,如果软件包加载了该amsthm
选项,则必须明确定义编号和未编号“定理”环境的定理样式。根据您对“note”环境样式的描述,我建议您在序言中执行以下操作:
\usepackage[amsthm]{ntheorem}
\theorembodyfont{\upshape}
\newtheoremstyle{notes} % for numbered notes
{\item[\hskip\labelsep \itshape ##1\ ##2.]}%
{\item[\hskip\labelsep \itshape ##1\ ##2, ##3.]}
\newtheoremstyle{nonumbernotes} % for unnumbered notes
{\item[\hskip\labelsep \itshape ##1.]}%
{\item[\hskip\labelsep \itshape ##1, ##3.]}
\theoremstyle{notes} % switch to newly defined theorem style
\newtheorem*{myenv}{Note}
此后,您的myenv
环境就不应该再出现任何问题。
答案2
可以将proof
环境代码从ntheorem
:
\documentclass{article}
\usepackage[thmmarks]{ntheorem}% http://ctan.org/pkg/ntheorem
\makeatletter
\newcommand{\openbox}{\leavevmode
\hbox to.77778em{%
\hfil\vrule
\vbox to.675em{\hrule width.6em\vfil\hrule}%
\vrule\hfil}}
\gdef\proofSymbol{\openbox}
\newcommand{\proofname}{Proof.}
\newcounter{proof}\newcounter{currproofctr}\newcounter{endproofctr}%
\newenvironment{proof}[1][\proofname]{
\th@nonumberplain
\def\theorem@headerfont{\itshape}%
\normalfont
%\theoremsymbol{\ensuremath{_\blacksquare}}
\@thm{proof}{proof}{#1}}%
{\@endtheorem}
\makeatother
\theoremstyle{plain}
\theoremheaderfont{\normalfont\itshape}
\theorembodyfont{\normalfont}
\newtheorem*{myenv}{Note}
\begin{document}
\begin{myenv}
The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.
\begin{proof}
This statement is true, because the fox did jump over the lazy dog.
\end{proof}
\end{myenv}
\end{document}
thmmarks
使用的包选项时会显示 QED 符号ntheorem
。在 中,ntheorem
这是手动定义的\openbox
,随后用作\proofSymbol
。
答案3
这包装文档答复如下:
3.2.2 安斯泰姆
这里,用户必须通过
\newtheoremstyle
提供的命令来表达他的定义ntheorem.sty
,包括使用\theoremheaderfont
和\theorembodyfont
。选项[amsthm]
和[standard]
是冲突的,因为它们都定义了一个环境proof
。因此,我们建议不要使用amsthm
ntheorem.sty
,因为在——以下 ——中定义类定理环境的特征theorem.sty
似乎更加直观和用户友好。
要获得类似的证明环境(没有选项),amsthm
请执行以下操作:
\documentclass[english]{article}
\usepackage{babel}
\usepackage{amsmath,amssymb}
\usepackage[thmmarks,amsmath]{ntheorem}
\newcommand{\openbox}{\leavevmode
\hbox to.77778em{%
\hfil\vrule
\vbox to.675em{\hrule width.6em\vfil\hrule}%
\vrule\hfil}}
\theoremstyle{nonumberplain}
\theoremsymbol{\openbox}
\newtheorem{proof}{Proof}
\theoremsymbol{}
\theoremstyle{plain}
\theoremheaderfont{\normalfont\itshape}
\theorembodyfont{\normalfont}
\newtheorem*{myenv}{Note}
\begin{document}
\begin{myenv}
The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.
\end{myenv}
\begin{proof}[Alternative Text]
The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.
\end{proof}
\end{document}
答案4
下列的沃纳的回答这是我的评论,这是一个用于证明环境的代码,其中修复了最终句号问题;这是 Werner 从 `ntheorem' 源代码中提取的代码的轻微调整:
\makeatletter
\newcommand{\openbox}{\leavevmode
\hbox to.77778em{%
\hfil\vrule
\vbox to.675em{\hrule width.6em\vfil\hrule}%
\vrule\hfil}}
\gdef\proofSymbol{\openbox}
\newcommand{\proofname}{Proof}
\newcounter{proof}\newcounter{currproofctr}\newcounter{endproofctr}%
\newenvironment{proof}[1][\proofname]{
\th@nonumberplain
\def\theorem@headerfont{\itshape}%
\normalfont
%\theoremsymbol{\ensuremath{_\blacksquare}}
\@thm{proof}{proof}{{#1}.}}%
{\@endtheorem}
\makeatother