![使用 centernot 在堆叠元素的自定义运算符周围留出空间](https://linux22.com/image/423359/%E4%BD%BF%E7%94%A8%20centernot%20%E5%9C%A8%E5%A0%86%E5%8F%A0%E5%85%83%E7%B4%A0%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%E8%BF%90%E7%AE%97%E7%AC%A6%E5%91%A8%E5%9B%B4%E7%95%99%E5%87%BA%E7%A9%BA%E9%97%B4.png)
我正在使用带有定义的运算符
\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
:
请注意,\tom
u 和 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}
我们会得到
我认为这更好。