我正在用 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}]%
}%
}
实际上只有第一点和第四点%
是必要的,其他两个也无害。