这问题解释了如何使其:
表现得像\colon
。它有两种解决方案。本问题涉及第二种不太受欢迎的解决方案,即 egreg 解决方案,如下所示这问题在于,最受支持的方案,Carlisle 的解决方案,在与 一起使用时会出现问题amsmath
。因为我想使用那个包,所以我必须考虑 egregs 解决方案。
这个解决方案有些粗糙,这就是这个问题的意义所在:它也涉及和:=
,并且与使用resp.=:
有区别,正如在\coloneqq
\eqqcolon
\begin{gather*}
a:=b=:c=d\\
a\coloneqq b \eqqcolon c = d
\end{gather*}
显示为
因此,与命令的间距相比,间距有点不同mathtools
- 查看红线和我在屏幕截图顶部额外绘制的(几乎看不见的)虚线橙色垂直线,这使得间距差异变得明显。
问题 1:为什么会有区别?
问题2:在他的解决方案中,egreg 有点自相矛盾:经过他的魔法,':=' 看起来像\coloneqq
(除了间距不同,如上所示)并且还在此 MWE 中提供了一个例子 - 但在评论中他继续说,不应该使用:=
。那么他为什么在他的 MWE 中提供它?我应该使用还是不应该使用:=
?如果两者都被认为是良好的做法,当人们想要创建看起来专业的文档时,应该使用哪一个?
答案1
你可以在数学模式下为结肠提供一些“智能”
\documentclass{scrartcl}
\usepackage{mathtools}
\makeatletter
\def\ordinarycolon{\mathchar`\:}
\def\colon{\nobreak\mskip2mu\mathpunct{}\nonscript\mkern-\thinmuskip\mathord\ordinarycolon\mskip6muplus1mu\relax}
\begingroup\lccode`\~=`\:\lowercase{\endgroup
\protected\def~}{\new@ifnextchar={\coloneqq\@gobble}{\colon}}
\begingroup\lccode`\~=`\=\lowercase{\endgroup
\protected\def~}{\new@ifnextchar:{\eqqcolon\@gobble}{\mathrel\mathchar`\=}}
\AtBeginDocument{\mathcode`\:="8000 \mathcode`\=="8000 }
\makeatother
\begin{document}
\begin{gather*}
f : \mathbf{R} \to \mathbf{R} \\
a := b =: c = d \\
a \coloneqq b \eqqcolon c = d
\end{gather*}
\end{document}
这不应该增加不同的间距。