交换 : 和 \colon 的含义

交换 : 和 \colon 的含义

我通常使用冒号符号:来表示映射。对于集合语法,有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

在此处输入图片描述

相关内容