在数学中,我专门使用冒号:
作为标点符号,即\colon
(比较这个问题)。因此我想改变:
排版方式,使其类似于\colon
。
有没有办法在 XeTeX / unicode-math 中实现这一点?
答案1
\documentclass{article}
\usepackage{amsmath}
\begin{document}
$\forall x: P (x)$ using \verb|:|
$\forall x \colon P(x)$ using \verb|\colon|
\def\newcolon{%
\nobreak\mskip2mu\mathpunct{}\nonscript\mkern-\thinmuskip{\text{:}}%
\mskip 6mu plus 1 mu \relax}
\mathcode`\:="8000 %
{\catcode`:=\active \global\let:\newcolon}
$\forall x: P (x)$ using revised \verb|:|
$\scriptstyle \forall x: P (x)$
$\scriptscriptstyle \forall x: P (x)$
\end{document}
答案2
如果你不是法国人,并且不打算用法语写作,那么你可以这样做
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\mathchardef\normalcolon=\mathcode`:
\def\colon{%
\noexpand\nobreak
\mskip 2mu
\mathpunct{}
\nonscript\mkern -\thinmuskip
{\normalcolon}%
\mskip 6muplus1mu
\relax
}
\begingroup\lccode`\~=`\:\lowercase{\endgroup\let~}\colon
\mathcode`\:=\string"8000
\makeatother
\begin{document}
$f: A \to B$
$a\normalcolon b$
\end{document}
babel-french
如果使用,这会导致 TeX 陷入无限循环。更安全的补丁:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{amsmath}
\makeatletter
\mathchardef\normalcolon=\mathcode`:
\def\colon{%
\noexpand\nobreak
\mskip 2mu
\mathpunct{}
\nonscript\mkern -\thinmuskip
{\normalcolon}%
\mskip 6muplus1mu
\relax
}
\@ifpackagewith{babel}{french}{% french babel makes : active
\declare@shorthand{french}{:}{%
\ifmmode % <--- added
\colon % <--- added
\else % <--- added
\ifFB@spacing
\ifhmode
\ifdim\lastskip>1sp
\unskip\penalty\@M\FBcolonspace
\else
\FDP@colonspace
\fi
\fi
\fi
\string:%
\fi % <--- added
}%
}{%
\begingroup\lccode`\~=`\:\lowercase{\endgroup\let~}\colon
\mathcode`\:=\string"8000
}
\makeatother
\begin{document}
$f: A \to B$
$a\normalcolon b$
\end{document}
您仍然可以使用\colon
标准含义。对于冒号作为关系符号(在 TeX 中通常使用 获得:
),我提供了\normalcolon
。
免责声明。这不适用于 XeLaTeX 或 LuaLaTeX。