我想改变:
和的通常作用\colon
。请考虑以下代码
\documentclass{scrreprt}
\usepackage{amsmath}
\usepackage{unicode-math}
%\unimathsetup{colon=literal}
%\DeclareMathSymbol{:}{\mathpunct}{operators}{"3A}
%\let\colon\relax
%\DeclareMathSymbol{\colon}{\mathrel}{operators}{"3A}
\begin{document}
\newcommand\mycolon{\mathpunct{\char"003A}}
\newcommand\myratio{\mathrel{\char"003A}}
\( \pi:X \to Y \) (1)
\( \pi\myratio X \to Y \) (2)
\( \pi\colon X \to Y \) (3)
\( \pi\mycolon X \to Y \) (4)
\end{document}
前两个在 $\pi$ 和 $X$ 之间的间隙相同。(3) 的间距较小,而 (4) 的间距最小。记住 (3) 的间距。现在取消注释行以交换 ':' 和 \colon 的作用。现在 (1') 已正确设置为标点符号,间距等于 (4') 而不等于 (3) 的先前间距。有办法调整它们吗?
编辑:由于 egreg 而解决(改动很小)
\documentclass{scrreprt}
\usepackage{amsmath}
\usepackage{unicode-math}
\usepackage{etoolbox}
\patchcmd{\colon}{:}{\relcolon}{}{} % Remove ':' from the definition of \colon
\newcommand\myratio{\mathrel{\char"02236}} % Define how the colon should look like as a ratio
%\newcommand\myratio{\mathrel{\char"003A}} % Use for wider space
\AtBeginDocument{
\edef\relcolon % Define \recolon with current ':'
{\mathrel{\Umathcharnum\the\Umathcodenum`:}}
\begingroup\lccode`~=`: % Make ':' math-active and redefine it to be \colon
\lowercase{\endgroup\let~}\colon
\mathcode`:="8000
\let\colon\myratio % Redefine \colon with \myratio
}
\begin{document}
\( \pi:X \to Y \) (1)
\( \pi\colon X \to Y \) (2)
\end{document}
答案1
带有 的amsmath
,\colon
不仅仅是一个标点符号,而且在它前面有一些空格,在它后面比标点符号有更多的空格。
(不太直接的)几乎可以互换含义的方法是
\documentclass{scrreprt}
\usepackage{amsmath}
\usepackage{unicode-math}
\usepackage{etoolbox}
\patchcmd{\colon}{:}{\relcolon}{}{}
\AtBeginDocument{
\edef\relcolon{\mathrel{\Umathcharnum\the\Umathcodenum`:}}
\begingroup\lccode`~=`:
\lowercase{\endgroup\let~}\colon
\mathcode`:="8000
}
\begin{document}
\( \pi:X \to Y \) (1)
\( \pi\mathpunct{\relcolon} X \to Y \) (2)
\( \pi\relcolon X \to Y \) (3)
\end{document}
情况(1)与 相同\colon
;情况(2)用 来\mathpunct
表示区别;情况(3)以冒号作为关系。
首先,我对其进行修补,使其定义中\colon
没有显式,否则将发生无限循环。然后(在文档开头),我使用当前的数学代码进行定义(需要获取显式数字)。最后,我激活数学并赋予它与相同的含义。其中 的使用没有任何后果,因为它似乎是带括号的,因此被视为普通符号。:
\relcolon
:
\edef
:
amsmath
\colon
\relcolon
不过,我认为改变语义不是一个好主意,因为它限制了可移植性。
如果您确实想要使用\colon
该关系,那么对上述代码进行修改应该可以起作用:
\documentclass{scrreprt}
\usepackage{amsmath}
\usepackage{unicode-math}
\usepackage{etoolbox}
\let\amsmathcolon\colon
\patchcmd{\amsmathcolon}{:}{\colon}{}{}
\AtBeginDocument{
\edef\colon{\mathrel{\Umathcharnum\the\Umathcodenum`:}}
\begingroup\lccode`~=`:
\lowercase{\endgroup\let~}\amsmathcolon
\mathcode`:="8000
}
\begin{document}
\( \pi:X \to Y \) (1)
\( \pi\mathpunct{\colon} X \to Y \) (2)
\( \pi\colon X \to Y \) (3)
\end{document}
请注意,选项colon=literal
没有按照要求做;这是一个例子
\documentclass{scrreprt}
\usepackage{amsmath}
\usepackage[colon=literal]{unicode-math}
\begin{document}
\( \pi:X \to Y \) (1)
\( \pi\mathpunct{\colon} X \to Y \) (2)
\( \pi\colon X \to Y \) (3)
\end{document}
因此:
使用了错误的间距并且\colon
没有重新定义。
答案2
请参阅文档第 5.5.6 节unicode-math
:
\documentclass{scrreprt}
\usepackage{amsmath}
\usepackage[colon=literal]{unicode-math}
\begin{document}
\( \pi:X \to Y \) (1)
\end{document}