![交换 : 和 \colon 的含义](https://linux22.com/image/252808/%E4%BA%A4%E6%8D%A2%20%3A%20%E5%92%8C%20%5Ccolon%20%E7%9A%84%E5%90%AB%E4%B9%89.png)
我通常使用冒号符号:
来表示映射。对于集合语法,有braket
包。因此,由于的间距:
不合适,我希望它表现得像\colon
。我试过了
\documentclass{article}
\usepackage[fleqn]{amsmath}
\usepackage{braket}
\usepackage{dsfont}
\usepackage{mathtools}
\mathtoolsset{centercolon}
\def\textcolon{:} \catcode`\:=\active \def:{\relax\ifmmode\colon\else\textcolon\fi}
\begin{document}
Here is an example:
\begin{gather*}
f: x \mapsto x^2\\
g\colon \mathds R_+ \ni x \mapsto x^x \in \mathds R\\
A := \Set{ x \in \mathds R_+ | g(x) < x }
\end{gather*}
\end{document}
但这会引发错误
!TeX 容量超出,抱歉 [grouping levels=255]。
如果没有主动定义,它看起来像
请注意,我使用:=
来定义。这应该仍然是可能的。但问题在于,这\colon=
看起来很糟糕:
我同意 egreg 的观点,使用所有活动的数学字符并不是一个好主意。我采用 David 的方法并使用:
\AtBeginDocument{\DeclareMathSymbol{:}{\mathpunct}{operators}{"3A}}
\def\colon{\mathrel{:}}
\usepackage{mathtools}
\usepackage{newunicodechar}
\def\textcoloneq{≔} \newunicodechar{≔}{\ifmmode \mathrel{{\vcentcolon}{=}} \else \textcoloneq \fi}
\def\texteqcolon{≕} \newunicodechar{≕}{\ifmmode \mathrel{{=}{\vcentcolon}} \else \texteqcolon \fi}
我使用\AtBeginDocument
,以便可以与一起使用fontspec
。
答案1
你只需要
\DeclareMathSymbol{:}{\mathpunct}{operators}{"3A}
定义:
为像\colon
。原始定义是:
\DeclareMathSymbol{:}{\mathrel}{operators}{"3A}
\DeclareMathSymbol{\colon}{\mathpunct}{operators}{"3A}
答案2
我想打字更容易\colon
:)
\documentclass{article}
\usepackage[fleqn]{amsmath}
\usepackage{braket}
\usepackage{dsfont}
\usepackage{etoolbox}
\edef\latexordinarycolon{\mathchar\the\mathcode`: } % keep the ordinary :
\usepackage{mathtools}
\let\amsmathcolon\colon % keep amsmath's \colon
\patchcmd\amsmathcolon{:}{\latexordinarycolon}{}{} % avoid the mention of : in it
\mathtoolsset{centercolon}
\makeatletter
\begingroup
\catcode`:=\active \global\let\mathtools@colon=: % : is math active with mathtools "centercolon"
\gdef:{\@ifnextchar={\mathtools@colon\mkern-1.2mu}\amsmathcolon} % if : is followed by = ...
\endgroup
\let\colon\latexordinarycolon % Now \colon is a relation symbol
%%% Now we redefine = so that =: works
\edef\latexequal{\mathchar\the\mathcode`= }
\begingroup
\catcode`==\active
\gdef={\latexequal\@ifnextchar:{\afterassignment\mathtools@colon\let\next}{}}
\endgroup
\AtBeginDocument{\mathcode`=="8000 }
\begin{document}
Here is an example:
\begin{gather*}
f: x \mapsto x^2\\
g\colon \mathds R_+ \ni x \mapsto x^x \in \mathds R\\
A := \Set{ x \in \mathds R_+ | g(x) < x }\\
a:=b=:c=d
\end{gather*}
\end{document}
=:
正如我们所见,输入并得到与 相同的结果是不可能的\eqqcolon
。