我特别希望“⦂”(U2982,Z NOTATION TYPE COLON)以具有 mathrel 间距的冒号形式出现(或者更好的是,以 amsmath 的方式重新定义 \colon
)
但重新定义\typecolon
不起作用\AtBeginDocument
。我也尝试过使用较低级别的 unicode-math 命令。包含我的尝试的 MWE 如下:
%!TEX program = lualatex
\documentclass{article}
\usepackage[math-style=ISO, partial=upright]{unicode-math}
\setmathfont{LibertinusMath-Regular.otf}
\AtBeginDocument{
\let\typecolon\colon % fails
% \renewcommand{\typecolon}{\nobreak\mskip2mu\mathpunct{}\nonscript
% \mkern-\thinmuskip{:}\mskip6muplus1mu\relax} % fails
}
% \ExplSyntaxOn
% \AtBeginDocument{
% \__um_process_symbol_noparse:nnn {"02982}{:}{\mathrel} % fails
% \__um_process_symbol_noparse:nnn {"02982}{\colon}{\mathrel} % fails
% \__um_remap_symbol:nnn {\`⦂} {\mathrel} {"02236} % fails
% \__um_remap_symbol:nnn {\typecolon} {\mathrel} {"02236} % fails
% }
% \ExplSyntaxOff
\begin{document}
With explicit symbol: $f ⦂ A → B.$
With \verb|\symbol|: $f \symbol{"02982} A → B.$
With \verb|\typecolon|: $f \typecolon A → B.$
\end{document}
我的假设是 unicode-math 将裸 unicode 字符定义为“活动字符” \typecolon
,根据unicode-数学表.tex但显然我错了,或者重新定义\typecolon
会起作用。
这里正确的方法是什么?我的误解在哪里?提前感谢所有回复。
版本详细信息:
我正在使用带有 unicode-math 的 LuaLaTeX:
>_ lualatex --version
This is LuaHBTeX, Version 1.14.0 (TeX Live 2022/dev/Debian) […]
具体来说,就是与 Ubuntu 22.04 一起打包的内容。
答案1
分配一个\mathcode
会使"8000
字符“数学活动”。在数学模式下使用时,这样的 〈character〉 将被具有原始字符代码的活动字符标记替换(TeXbook 第 289 页)。因此,我们只需分配适当的\mathcode
并使活动⦂
行为为\colon
。
% Tested with LuaTeX and XeTeX
\documentclass{article}
\usepackage[math-style=ISO, partial=upright]{unicode-math}
\setmainfont{STIX-Regular.otf} % to show the ⦂ in horizontal mode
\setmathfont{LibertinusMath-Regular.otf}
% In LuaTeX, \letcharcode`⦂=\colon can replace the following line (Marcel Krüger's hint)
\begingroup \lccode`~=`⦂ \lowercase{\endgroup\def~}{\colon}
\AtBeginDocument{\mathcode`⦂="8000\relax}
\begin{document}
With \verb|\colon|: $f \colon A → B$.
With explicit symbol: $f ⦂ A → B$.
With \verb|\symbol|: $f \symbol{"02982} A → B$.
“⦂” is still “\symbol{"02982}” (\verb|\symbol{"02982}|) in horizontal mode.
\end{document}
在数学模式中,\symbol{"02982}
也被活动的 所取代⦂
,因为它扩展为\char"02982\relax
,并且\char"02982
是一个 〈character〉,在数学模式下其处理方式与⦂
-with-catcode-12 (TeXbook p.289) 相同。
答案2
只需指出“内部unicode-math API”选项,OP似乎更喜欢这个选项:
\documentclass{article}
\usepackage[math-style=ISO, partial=upright]{unicode-math}
\setmainfont{STIX-Regular.otf}
\setmathfont{LibertinusMath-Regular.otf}
\ExplSyntaxOn
\AtBeginDocument{
\__um_mathactive_remap:nn {"2982} {\colon}
}
\ExplSyntaxOff
\begin{document}
With \verb|\colon|: $f \colon A → B$.
With explicit symbol: $f ⦂ A → B$.
With \verb|\symbol|: $f \symbol{"02982} A → B$.
“⦂” is still “\symbol{"02982}” (\verb|\symbol{"02982}|) in horizontal mode.
% MWE copied from the other answer, I don't actually have the fonts to test but testing with default font works well
\end{document}
在其他一些版本中,我认为您需要删除第一个__
?,正如内部 API 所期望的那样。
还有\__um_map_char_single:nn
“15.1 映射“裸”数学字符“在unicode-math-code.pdf中,但是文档有点密集......