`:` 设置为 `\colon`,但间距仍然不正确 - 第 2 部分

`:` 设置为 `\colon`,但间距仍然不正确 - 第 2 部分

问题解释了如何使其:表现得像\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}

这不应该增加不同的间距。

相关内容