我知道这个要求乍一听很荒谬,但出于技术原因我需要它。我想要一个自定义缩放命令,如\big
、\Big
、\bigg
、\Bigg
,但该命令对应于“正常大小”。我们可以叫它\normalscaling
或类似的名字。重要的是,它应该表现出与其他缩放命令相同的行为,因此 eg\normalscaling.
应该不产生任何结果,而\normalscaling<
应该产生\langle
。我知道 hte 样式命令的一般定义\big
,但我不完全确定如何修改它以获得“无缩放”,即插入什么数字而不是\@ne
。
(但究竟为什么呢?这是因为我正在创建一个插入缩放括号的宏系统,并且我希望“正常”缩放表现得像上述术语中的其他缩放。并且我希望它扩展并以与上述命令完全相同的方式运行。)
答案1
您可以使用amsmath
的方式创建\big
命令:
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand{\normalscaling}{\bBigg@{0.8}}
\newcommand{\normalscalingl}{\mathopen\normalscaling}
\newcommand{\normalscalingr}{\mathclose\normalscaling}
\newcommand{\normalscalingm}{\mathrel\normalscaling}
\makeatother
\begin{document}
\begin{equation*}
\Bigl( w + \bigl( x + \normalscalingl( y + z \normalscalingr) \bigr)
\Bigr)
\end{equation*}
\begin{equation*}
\bigl\langle \psi \bigm| \bigr.
\end{equation*}
\begin{equation*}
\normalscalingl\langle \psi \normalscalingm| \normalscalingr.
\end{equation*}
\end{document}
但是,您可能想选择一个更短的命令名称......
为什么0.8
要使用\bBigg@
?这个因数乘以 ,\big@size
即1.2
乘以 mathstrut 的高度。 1/1.2 = 0.83333...
但我只使用了0.8
。
编辑:如果您需要保留下标等的位置,那么您可以使用以下定义
\def\newnormalscaling#1{\bBigg@{0.8}#1{}}
\bBigg@
生成一个以 结尾的组,这会导致下\right.
标的位置低于标准位置。添加以下项\mathord
可解决此问题。我不能 100% 确定它不会产生不良副作用,但将其放置在、或\mathopen
变体中,它应该可以正常工作:\mathclose
\mathrel
l
r
m
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand{\normalscaling}{\bBigg@{0.8}}
\newcommand{\normalscalingl}{\mathopen\normalscaling}
\newcommand{\normalscalingr}{\mathclose\normalscaling}
\newcommand{\normalscalingm}{\mathrel\normalscaling}
\def\newnormalscaling#1{\bBigg@{0.8}#1{}}
\newcommand{\newnormalscalingl}{\mathopen\newnormalscaling}
\newcommand{\newnormalscalingr}{\mathclose\newnormalscaling}
\newcommand{\newnormalscalingm}{\mathrel\newnormalscaling}
\makeatother
\begin{document}
\begin{equation*}
\Bigl( w + \bigl( x + \normalscalingl( y + z \normalscalingr) \bigr)
\Bigr)
\end{equation*}
\begin{equation*}
\bigl\langle \psi \bigm| \bigr.
\end{equation*}
\begin{equation*}
\normalscalingl\langle \psi \normalscalingm| \normalscalingr.
\end{equation*}
\begin{equation*}
(a)_{b} \normalscalingl(a\normalscalingr)_{b}
\left.\right)_{b}
\end{equation*}
\begin{equation*}
\Bigl( w + \bigl( x + \newnormalscalingl( y + z \newnormalscalingr) \bigr)
\Bigr)
\end{equation*}
\begin{equation*}
\bigl\langle \psi \bigm| \bigr.
\end{equation*}
\begin{equation*}
\newnormalscalingl\langle \psi \newnormalscalingm| \newnormalscalingr.
\end{equation*}
\begin{equation*}
(a)_{b} \newnormalscalingl(a\newnormalscalingr)_{b}
\left.\right)_{b}
\end{equation*}
\end{document}
答案2
这里,我只是截取特殊参数,例如.
、<
、>
和|
,并替换适当的非缩放命令。否则,我只是传递参数。
从最后两行可以看出,\normalscalingl
和的\normalscalingr
实现按预期工作,即使\normalscaling
它本身必须通过\ifx
链工作(例如,将最后一行与的输出进行比较$\normalscaling)x\normalscaling( \rightarrow y$
,其中\mathopen
和\mathclose
未被调用……周围的间距\rightarrow
变得不正确)。
\documentclass{article}
\usepackage{newtxmath}
\newcommand\normalscaling[1]{%
\ifx.#1\else
\ifx<#1\langle\else
\ifx>#1\rangle\else
\ifx|#1\vert\else
#1
\fi\fi\fi\fi
}
\newcommand\normalscalingl{\mathopen\normalscaling}
\newcommand\normalscalingr{\mathclose\normalscaling}
\begin{document}
$< \langle \Big< \Big\langle \Big. \Big/ \Big|$
$< \langle \normalscaling< \normalscaling\langle \normalscaling.
\normalscaling/ \normalscaling|$
$\normalscalingl(x\normalscalingr) \rightarrow y$
$\normalscalingl)x\normalscalingr( \rightarrow y$
\end{document}