用重新定义的 \= 定义 coloneq (def)

用重新定义的 \= 定义 coloneq (def)

为了方便起见,我尝试定义一些“define”的快捷键,例如

\usepackage{mathtools}

\NewCommandCopy{\tmp}{\=}
\AtBeginDocument{%
  \DeclareRobustCommand{\=}{\ =\ }%
}
\def\:={\ \coloneqq\ }
\def\=:{\ \eqqcolon\ }

然而,这并没有给出令人满意的结果:

\usepackage{amsmath}

\begin{align*}
    f_Z(z) &\:= \int_{\mathbb{R}} f_{XY}(x,z-x)dx   \\
    &\= \int_{\mathbb{R}} f_X(x)f_Y(z-x)dx  \\
    &\=: (f_X * f_Y)(z),
\end{align*}

这会导致“\=:”的间距错误,而“\:=”的间距是好的。 在此处输入图片描述

有什么巧妙的方法来解决这个问题吗?

如果您能告诉我一些技巧或技术,我将不胜感激。

谢谢,

答案1

你是想搬起石头砸自己的脚,然后取得成功。

\=如果您的文档想要使用原来的含义(长音符号),那么以这种方式重新定义会给您带来问题。

第二:您\def\=:没有定义控制序列\=:(这是不可能的),而是在控制序列之后重新定义\=为 require 。但是,这会被您在 begin document 处执行的:相同重新定义所覆盖。\=

你可以使用:==:如果你有很多这样的符号1

关于额外的间距,抱歉,但我无法帮助获得糟糕的输出。2

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

\renewcommand{\vcentcolon}{\mathrel{\mathop\standardcolon}}

\ExplSyntaxOn

\cs_new_protected:Nn \seung_equals:
 {
  \peek_charcode_remove:NTF : { \eqqcolon } { \standardequal }
 }
\cs_new_protected:Nn \seung_colon:
 {
  \peek_charcode_remove:NTF = { \coloneqq } { \standardcolon }
 }

\AtBeginDocument
 {
  \mathchardef\standardequal=\mathcode`=
  \mathchardef\standardcolon=\mathcode`:
  \char_set_active_eq:NN = \seung_equals:
  \char_set_active_eq:NN : \seung_colon:
  \mathcode`=="8000\scan_stop:
  \mathcode`:="8000\scan_stop:
 }

\ExplSyntaxOff

\begin{document}

\begin{align*}
    f_Z(z) &:= \int_{\mathbb{R}} f_{XY}(x,z-x)\,dx   \\
    &= \int_{\mathbb{R}} f_X(x)f_Y(z-x)\,dx  \\
    &=: (f_X * f_Y)(z),
\end{align*}

\end{document}

在此处输入图片描述

脚注

  1. 我从来不明白为什么需要 ≔ 或 ≕。
  2. 中关系符号周围的间距eqnarray被广泛认为是印刷错误。比较并决定。

在此处输入图片描述

相关内容