我正在寻找一种方法来射出与预定义的射箭相同样式(或难以辨认)的箭,带有短而略微倾斜的线段,例如\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}}