新的答案(更好)

新的答案(更好)

我正在寻找一种方法来射出与预定义的射箭相同样式(或难以辨认)的箭,带有短而略微倾斜的线段,例如\nrightarrow。不幸的是,使用\not\cancel会产生可怕的结果。

答案1

新的答案(更好)

我想到了一个更好的方法。由于 创建的斜线\not太长,我改用较短水平线的旋转版本。我这样做,而不是缩放 创建的斜线以\not匹配原始线的粗细(而不会破坏圆形帽)。

我在下面定义了四个宏,它们划掉了一个关系符号:

  • \Neg[<shift>]{<symbol>}只是使用\not
  • \sNeg[<shift>]{<symbol>}使用旋转的-
  • \ssNeg[<shift>]{<symbol>}使用两个旋转的\dabar@s;
  • \sssNeg[<shift>]{<symbol>}使用一个旋转的\dabar@

\Neg匹配 产生的斜线\not\sNeg匹配 中的斜线\nRightarrow\ssNeg匹配 中的斜线,\nrightarrow并且\sssNeg只创建一个非常短的斜线。如果提供了可选参数,斜线将向右移动这个量。但请注意,这<shift>是 中的长度mu,因此它必须是以下形式<number>mu(NB18mu等于1em,除非它在\scriptstyle​​和中按比例缩放\scriptscriptstyle)。

产生的字符\dabar@是一个短水平线(带有圆形末端),我认为它只用于 的定义\dashrightarrow。我想使用\shortmid,但这个字符不是垂直居中的(这意味着我必须手动调整其垂直位置)。

此代码生成一个(不完整的)否定箭头列表:

\documentclass{article}

\usepackage{amsmath}
\usepackage{amssymb}  %% <- for some of the arrows
\usepackage{graphicx} %% <- for \rotatebox

\makeatletter %% <- make @ usable in command names
\newcommand*\Neg[2][0mu]{\Neginternal{#1}{\negslash}{#2}}
\newcommand*\sNeg[2][0mu]{\Neginternal{#1}{\snegslash}{#2}}
\newcommand*\ssNeg[2][0mu]{\Neginternal{#1}{\ssnegslash}{#2}}
\newcommand*\sssNeg[2][0mu]{\Neginternal{#1}{\sssnegslash}{#2}}
\newcommand*\Neginternal[3]{\mathpalette\Neg@{{#1}{#2}{#3}}}
\newcommand*\Neg@[2]{\Neg@@{#1}#2}
\newcommand*\Neg@@[4]{%
  \mathrel{\ooalign{%
    $\m@th#1#4$\cr
    \hidewidth$\m@th#3{#1}\mkern\muexpr#2*2$\hidewidth\cr
  }}%
}

\newcommand*\negslash[1]{\m@th#1\not\mathrel{\phantom{=}}}
\newcommand*\snegslash[1]{\rotatebox[origin=c]{60}{$\m@th#1-$}}
\newcommand*\ssnegslash[1]{\rotatebox[origin=c]{60}{$\m@th#1{\dabar@}\mkern-7mu{\dabar@}$}}
\newcommand*\sssnegslash[1]{\rotatebox[origin=c]{60}{$\m@th#1\dabar@$}}
\makeatother  %% <- revert @

\begin{document}

\[
    \begin{array}{cccccc}
        \texttt{\tiny\textbackslash not}&
        \texttt{\tiny\textbackslash Neg}&
        \texttt{\tiny\textbackslash sNeg}&
        \texttt{\tiny\textbackslash ssNeg}&
        \texttt{\tiny\textbackslash sssNeg}&
        \texttt{\tiny\textbackslash n<arrow>}
        \\\hline
        \not\rightarrow & \Neg[1mu]{\rightarrow} & \sNeg[1mu]{\rightarrow} & \ssNeg[1mu]{\rightarrow} & \sssNeg[1mu]{\rightarrow} & \nrightarrow
        \\
        \not\leftarrow & \Neg[-1mu]{\leftarrow} & \sNeg[-1mu]{\leftarrow} & \ssNeg[-1mu]{\leftarrow} & \sssNeg[-1mu]{\leftarrow} & \nleftarrow
        \\
        \not\Rightarrow & \Neg[2mu]{\Rightarrow} & \sNeg[2mu]{\Rightarrow} & \ssNeg[2mu]{\Rightarrow} & \sssNeg[2mu]{\Rightarrow} & \nRightarrow
        \\
        \not\leftrightarrow & \Neg{\leftrightarrow} & \sNeg{\leftrightarrow} & \ssNeg{\leftrightarrow} & \sssNeg{\leftrightarrow} & \nleftrightarrow
        \\
        \not\Leftrightarrow & \Neg{\Leftrightarrow} & \sNeg{\Leftrightarrow} & \ssNeg{\Leftrightarrow} & \sssNeg{\Leftrightarrow} & \nLeftrightarrow
        \\
        \not\mapsto & \Neg[1mu]{\mapsto} & \sNeg[1mu]{\mapsto} & \ssNeg[1mu]{\mapsto} & \sssNeg[1mu]{\mapsto}
        \\
        \not\hookrightarrow & \Neg[1mu]{\hookrightarrow} & \sNeg[1mu]{\hookrightarrow} & \ssNeg[1mu]{\hookrightarrow} & \sssNeg[1mu]{\hookrightarrow}
        \\
        \not\leadsto & \Neg[1mu]{\leadsto} & \sNeg[1mu]{\leadsto} & \ssNeg[1mu]{\leadsto} & \sssNeg[1mu]{\leadsto}
        \\
        \not\rightsquigarrow & \Neg[1mu]{\rightsquigarrow} & \sNeg[1mu]{\rightsquigarrow} & \ssNeg[1mu]{\rightsquigarrow} & \sssNeg[1mu]{\rightsquigarrow}
        \\
        \not\rightharpoonup & \Neg[1mu]{\rightharpoonup} & \sNeg[1mu]{\rightharpoonup} & \ssNeg[1mu]{\rightharpoonup} & \sssNeg[1mu]{\rightharpoonup}
        \\
        \not\rightarrowtail & \Neg[1mu]{\rightarrowtail} & \sNeg[1mu]{\rightarrowtail} & \ssNeg[1mu]{\rightarrowtail} & \sssNeg[1mu]{\rightarrowtail}
        \\
        \not\rightrightarrows & \Neg[1mu]{\rightrightarrows} & \sNeg[1mu]{\rightrightarrows} & \ssNeg[1mu]{\rightrightarrows} & \sssNeg[1mu]{\rightrightarrows}
        \\
        \not\longrightarrow & \Neg[1mu]{\longrightarrow} & \sNeg[1mu]{\longrightarrow} & \ssNeg[1mu]{\longrightarrow} & \sssNeg[1mu]{\longrightarrow}
        \\
        \not\xrightarrow{abcdefg} & \Neg[1mu]{\xrightarrow{abcdefg}} & \sNeg[1mu]{\xrightarrow{abcdefg}} & \ssNeg[1mu]{\xrightarrow{abcdefg}} & \sssNeg[1mu]{\xrightarrow{abcdefg}}
    \end{array}
\]

\[
    x \Neg[1mu]{\mapsto} y_{x \Neg[1mu]{\mapsto} y_{x \Neg[1mu]{\mapsto} y}},
    x \sNeg[1mu]{\mapsto} y_{x \sNeg[1mu]{\mapsto} y_{x \sNeg[1mu]{\mapsto} y}},
    x \ssNeg[1mu]{\mapsto} y_{x \ssNeg[1mu]{\mapsto} y_{x \ssNeg[1mu]{\mapsto} y}},
    x \sssNeg[1mu]{\mapsto} y_{x \sssNeg[1mu]{\mapsto} y_{x \sssNeg[1mu]{\mapsto} y}}
\]

\end{document}

输出

几点说明

  • 我将其大写,\Neg因为\neg已经存在(它产生了“¬”)。
  • 我在用着\mathpalette以确保符号在下标/上标等中正确缩放。
  • 我在用着\ooalign(参见这个答案) 来叠加\not\mathrel{\phantom{=}}这些箭头。
  • 我正在\rotatebox使用graphicx将水平线旋转 60º。您可以根据需要更改此数字。
  • in是必需的\phantom{=}\negslash因为虽然\not它本身没有宽度,但它(我相信)被设计为与=字符的宽度相匹配。

题外话:有点奇怪的是,它的\nrightarrow箭头比 的箭头小得多\rightarrow,其他几个箭头也是如此amssymb。我个人从来都不喜欢 Computer Modern 数学字体的箭头太宽,所以如果他们也包含一个版本就好了\rightarrow。我个人从来都不喜欢 Computer Modern 数学字体的相当宽的箭头,所以如果他们也包含一个头部较小的

旧答案(已过时)

在我以前的回答中,我在箭头上方叠加了一个\scriptstyle斜线\scriptscriptstyle。结果看起来不太好,而且在下标/上标等情况下不起作用。除此之外,它的作用是一样的。

\newcommand*\negrel[3][0mu]{%
  \mathrel{\ooalign{%
    $#3$\cr
    \hidewidth$\vcenter{\hbox{$#2\not\mathrel{\phantom{=}}$}}\mkern\muexpr#1*2$\hidewidth
    \cr
  }}%
}
\newcommand*\sneg[2][0mu]{\negrel[#1]{\scriptstyle}{#2}}
\newcommand*\ssneg[2][0mu]{\negrel[#1]{\scriptscriptstyle}{#2}}

相关内容