\@centernot
当我注意到 CTAN 上有一个针对 centernot 命令的包时,我感到非常惊讶。具体来说,和\c@ncel
(它是 Plain TeX 的一部分)有什么区别?
答案1
\c@ncel
(默认使用\notin
)是
\def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}
注意,这不考虑\mathrel
间距或下标大小,因此使用如下方式包装
\DeclareRobustCommand
\notin{\mathrel{\m@th\mathpalette\c@ncel\in}}
相反地,\@centerdot
使用不同的定心机制并应用\mathrel
\newcommand*{\centernot}{%
\mathpalette\@centernot
}
\def\@centernot#1#2{%
\mathrel{%
\rlap{%
\settowidth\dimen@{$\m@th#1{#2}$}%
\kern.5\dimen@
\settowidth\dimen@{$\m@th#1=$}%
\kern-.5\dimen@
$\m@th#1\not$%
}%
{#2}%
}%
}
它还使用\not
而不是/
/。
因此,与许多其他软件包一样,它们是具有类似用例的不同实现。
\documentclass{article}
\usepackage{amssymb}
\usepackage{centernot}
\makeatletter
\DeclareRobustCommand\cnot[1]{\mathrel{\m@th\mathpalette\c@ncel#1}}
\begin{document}
$ A \centernot\subset B $
$ A \cnot\subset B $
$ A \centernot\rightarrow B $
$ A \cnot\rightarrow B $
\end{document}