我正在使用带有定义的运算符
\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}
我们会得到
我认为这更好。