我的序言中有以下内容:
\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[...]
因为它形成了一个本地组,因此永远不会超出范围,除非我们将其变为全局组,而这可能不是一个好主意。