使用 centernot 在堆叠元素的自定义运算符周围留出空间

使用 centernot 在堆叠元素的自定义运算符周围留出空间

我正在使用带有定义的运算符

\newcommand{\tom}[2]{{\displaystyle\mathrel{\mathop{\to}^{#1}_{#2}}}}

否定

\newcommand{\ntom}[2]{\centernot{\displaystyle\mathrel{\mathop{\to}^{#1}_{#2}}}}

该操作符如下所示,带有标记u\tom km w

在此处输入图片描述

而否定的形式如下u\ntom km w

在此处输入图片描述

请注意,\tomu 和 w 与箭头相撞,而否定中则周围留有空格。我不确定哪一个看起来更好,但有没有办法保持一致?

我也不太习惯使用\displaystyle,但这是我能看到的唯一确保 k 和 m 保持在\mathrel/中箭头上方和下方的方法\mathop

答案1

您可以保持一致:

\documentclass{article}
\usepackage{amsmath,centernot}

\makeatletter
\newcommand{\tom}{\n@tom{\n@tom@to}}
\newcommand{\ntom}{\n@tom{\n@tom@nto}}

\newcommand{\n@tom}[3]{\overunderset{#2}{#3}{#1}}

\newcommand{\n@tom@to}{\rightarrow\mathrel{\vphantom{\not}}}
\newcommand{\n@tom@nto}{\centernot\rightarrow}
\makeatother

\begin{document}

$u\tom{k}{m}w$ $u\ntom{k}{m}w$

\end{document}

在此处输入图片描述

这种看似神秘的编程风格旨在分层分解工作。一个主宏\n@tom将箭头类型作为第一个参数,然后是顶部和底部限制。两种类型的箭头是分开定义的,以便更容易修改它们。

例如,如果我们加载amssymb而不是centernot并将两个最终定义更改为

\newcommand{\n@tom@to}{\rightarrow}
\newcommand{\n@tom@nto}{\nrightarrow}

我们会得到

在此处输入图片描述

我认为这更好。

相关内容