为什么有一个针对 centernot 的包?

为什么有一个针对 centernot 的包?

\@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}

相关内容