新的数学命令,具有内联模式的替代定义

新的数学命令,具有内联模式的替代定义

我感兴趣的是编写一个命令,该命令在标签内调用时以及在环境$...$中调用时产生的输出会有所不同。displaymath

例如,假设我想定义\xnorm如下命令

\newcommand{\xnorm}[1]{\|#1\|}

在内联模式下调用时,其工作原理为

\newcommand{\xnorm}[1]{\Big\|#1\Big\|}

在“通常”数学模式下调用时。如何实现这一点?

我知道存在像这样的控制序列ifmmode,但它会测试我是否处于任何类型的数学模式。有没有更具体的控制序列?或者,还有其他解决方案吗?


问题已回答。目标可以通过\mathchoice命令实现。示例代码片段可在下面找到,在本帖的答案中。非常感谢大家。


尽管如此,对于与我有类似想法的人,还是值得警告的是,生成的数学布局\mathchoice可能与原始布局不同。

例如,尝试以下两个函数:

\newcommand{\xnorma}[1]{\Big\|#1\Big\|}

\newcommand{\xnormb}[1]{\mathchoice{\Big\|#1\Big\|}{}{}{}}

(第一个参数\mathchoice为“通常”数学模式提供了定义,其他参数在此示例中不起作用)。

现在,只需尝试

\begin{document}
\begin{displaymath}
\xnorma{x^2}^2 \xnormb{x^2}^2
\end{displaymath}
\end{document}

差异是显而易见的。

答案1

我不认为你真的想要这个。不过,它在这里:

\documentclass{article}
\usepackage{amsmath}

\newcommand{\xnorm}[1]{%
  \mathchoice{\Bigl\|#1\Bigr\|}{\lVert#1\rVert}{\lVert#1\rVert}{\lVert#1\rVert}%
}

\begin{document}
A norm in text mode is $\xnorm{v}$, while in display math it is
\[
\xnorm{v}=\sum_{i=1}^n\lvert v_i\rvert
\]
\end{document}

结果确实很糟糕(并且是错误的):

在此处输入图片描述

如果您改变\Bigl\Bigr\bigl\bigr会得到更可接受的结果,但我看不出增加栅栏尺寸的意义。

在此处输入图片描述

相关内容