如何创建一个接受数学参数的新命令?

如何创建一个接受数学参数的新命令?

因此,我一直在尝试制作一个命令来显示我对限制的非常特殊的符号,但我相信其中的部分涉及文本命令,而其他部分涉及数学命令,我认为我已经正确考虑了每一个,但我仍然收到有关参数不在数学模式的错误:

命令:

\usepackage{amssymb}
\usepackage{graphics}
\DeclareRobustCommand{\rest}[1]{\text{\raisebox{-5.8pt}{\scalebox{1}[2.6]{$\upharpoonright$}_{\ensuremath{#1}}}\hspace{-7pt}}}

可以工作,但我仍然收到有关参数中缺少 $ $ 的错误消息(即使我把它们放在那里)。

我希望从该命令获得的结果与我编写的结果相同:

$$\pi\raisebox{-5.8pt}{\scalebox{1}[2.6]{$\upharpoonright$}}_{H}\hspace{-7pt}(a)$$

当我写作时

$$\pi\rest{H}(a)$$

它看起来应该是这样的:

在此处输入图片描述

答案1

您不应使用明确的尺寸,因此命令可以在不同的大小和不同的字体下工作。

我还添加了一个*版本来处理“深层”函数参数的问题。

\documentclass{article}
\usepackage{mathtools,amssymb}
\usepackage{graphicx}

\NewDocumentCommand{\rest}{sm}{%
  \vcenter{\hbox{\scalebox{1}[2.6]{$\upharpoonright$}}}%
  \IfBooleanTF{#1}{%
    _{\!#2}%
  }{%
    _{\mathrlap{\!#2}}\,%
  }%
}

\begin{document}

\[
\pi\rest{H}(a)
\qquad
\pi\rest*{H}\biggl(\,\sum_{k=1}^n a_k\biggr)
\]

\end{document}

解释:\vcenter将使对象相对于公式轴居中。下\mathrlap标被认为具有零宽度,但不会这样\rest*

在此处输入图片描述

答案2

您根本不需要$命令中的任何内容:

\documentclass{article}

\usepackage{amssymb}
\usepackage{graphics}

\DeclareRobustCommand{\rest}[1]{\raisebox{-5.8pt}{\scalebox{1}[2.6]{$\upharpoonright$}}_{#1}\hspace{-7pt}}

\begin{document}
    $\pi\raisebox{-5.8pt}{\scalebox{1}[2.6]{$\upharpoonright$}}_{H}\hspace{-7pt}(a)$
    
    $\pi\rest{H}(a)$
    
\end{document}

我还从命令中删除了\pi和,(a)因为看起来您希望它们完全可变,并在您在问题中的示例使用它时将它们放在命令之前和之后。

相关内容