数学模式下的宏参数会丢失其数学模式排​​版

数学模式下的宏参数会丢失其数学模式排​​版

我正在用 Latex 编写一个小型语义包(我知道已经存在一些很好的包)来帮助我和我的朋友完成作业。

但我遇到一个问题,传递给宏的参数会丢失数学模式格式,即使宏是从数学模式环境中调用的,并且宏的主体具有\ensuremath

这是一个例子。

我有一个定义如下的宏:

\newcommand{\wAssign}[3]{
    \ensuremath{
        \operatorname{
        {#3}[{#1} \mapsto \mathcal{A}\llbracket {#2} \rrbracket {#3}] 
        }
    }
}

像这样调用这个宏:

\subsection{Subtitle}
     \begin{equation}
     \wAssign{\mathtt{x}}{a+b}{s'}
\end{equation}

运用输出:

输出错误

但我想要的是这个:

期望输出

这是我使用时得到的:

\begin{equation}
   s'[\mathtt{x} \mapsto \mathcal{A}\llbracket a+b \rrbracket s'] 
\end{equation}

它可能不是很明显,但'呈现方式完全不同,并且a + b字体也不正确。

如何修复这个问题?

答案1

\operatorname用于排版正弦、余弦和对数等函数的名称。在您的宏中,这正是出错的部分,因此请将其删除:

\newcommand{\wAssign}[3]{%
   {#3}[{#1} \mapsto \mathcal{A}\llbracket {#2} \rrbracket {#3}]%
}

我建议不是在我看来,使用\ensuremath和输入$\wAssign{A}{B}{C}$会更清晰,尽管需要多按两次键。

如果您确实要使用\ensuremath,请注意虚假空格:

\newcommand{\wAssign}[3]{%
   \ensuremath{%
     {#3}[{#1} \mapsto \mathcal{A}\llbracket {#2} \rrbracket {#3}]%
   }%
}

实际上只有第一点和第四点%是必要的,其他两个也无害。

相关内容