在空样式环境中使用与公式相同的括号或圆括号

在空样式环境中使用与公式相同的括号或圆括号

我的序言中有以下内容:

\usepackage[overload, ntheorem]{empheq}
\usepackage[amsmath, thmmarks]{ntheorem}
\usepackage{mathtools}
\mathtoolsset{showonlyrefs,showmanualtags}
\newtagform{brackets}{[}{]}
\usetagform{brackets}

此外,我还有

\theoremheaderfont{\upshape}\theorembodyfont{\upshape}
\theoremstyle{nonumberplain}
\theoremseparator{}
\theoremsymbol{}
\newtheorem{optional}{}

所以现在我可以创建一个空环境,它接受一个可选参数,如\begin{optional}[$H_2$]。这有效,但我可以看到 (H_2),而我希望看到 [H_2]。我该如何改变这种情况?如果我可以访问mathtools提供左括号和右括号的命令,那就太完美了,这样如果我想更改它,就不必在多个地方更改它(我当然可以为左括号和右括号定义一个新命令,但这感觉像一个丑陋的黑客!)。

我忘了说,如果我给它一个标签,那么引用它应该给出可选参数。也许这个问题有更好的解决方案。我也试过一个方程,\tag\text没有自动换行。

谢谢你的建议。我是这样修复的,但我不知道这是否是个好方法:

\makeatletter
\newenvironment{optional}[1][Hypothesis]{
  \par\noindent \text{[#1]}
  \def\@currentlabel{[#1]}
}{\\}

答案1

如果您提供一个完整的最小示例,这可能是一个更好的主意,对于那些不知道的人来说,使用并不明显ntheorem。至于你的问题。您将需要定义一个替代的定理样式,因为括号是硬连线的。

这是默认的nonumberplain

\newtheoremstyle{nonumberplain}%
  {\item[\theorem@headerfont\hskip\labelsep ##1\theorem@separator]}%
  {\item[\theorem@headerfont\hskip \labelsep ##1\ (##3)\theorem@separator]}

为了使它工作,你需要类似

\makeatletter
\newtheoremstyle{mynonumberplain}%
 {\item[\theorem@headerfont\hskip\labelsep ##1\theorem@separator]}%
 {\item[\theorem@headerfont\hskip \labelsep ##1\ {[##3]}\theorem@separator]}
\makeatother

(因为我们已经在一对[]' 里面了,所以我们需要用一对{}' 来保护它)

对于第二个问题:

\documentclass[a4paper]{memoir}
\usepackage{mathtools}
\newtagform{brackets}{[}{]}
\usetagform{brackets}
\makeatletter
\let\xxx\tagform@
\makeatother
\begin{document}
\xxx{4}
\end{document}

\tagform@您可以在定义中使用mynonumberplain,但必须带有after\usetagform{brackets}只是xxx为了摆脱 @

至于最后一个问题

\makeatletter
\newtheoremstyle{mynonumberplain}%
 {\item[\theorem@headerfont\hskip\labelsep ##1\theorem@separator]}%
 {\item[\theorem@headerfont\hskip \labelsep ##1\ {[##3]}\theorem@separator]
 \def\@currentlabel{##3}}
\makeatother

这里的诀窍是我们需要外部\@currentlabel\item[...]因为它形成了一个本地组,因此永远不会超出范围,除非我们将其变为全局组,而这可能不是一个好主意。

相关内容