30 制作一个数学符号的“否定”形式

发布于 2024-08-09 23:24:51

我想对某个数学符号制作它的"否定"形式,剽窃鱼老师的代码(对鱼老师的贡献表示倾佩和感谢,希望鱼老师不要过于在意),想对\Longleftrightarrow 这个符号中心处添加一条斜线,表示否定,mwe:

\documentclass{article}
\usepackage{tikz,amsmath}
\usetikzlibrary{calc}
\begin{document}

\makeatletter
\def\pgfgetnodeheight(#1)#2{
  \path ($(#1.south) - (#1.north)$);
  \pgfmathsetmacro#2{veclen(\pgf@x, \pgf@y)}
  \edef#2{#2pt}
}
\def\pgfgetnodewidth(#1)#2{
  \path ($(#1.east) - (#1.west)$);
  \pgfmathsetmacro#2{veclen(\pgf@x, \pgf@y)}
  \edef#2{#2pt}
}
\makeatother

\[\sum_{k}^{n}f(k)
\begin{tikzpicture}
  \node[inner sep=0pt,] (a) {$\Longleftrightarrow$};
  \pgfgetnodewidth(a)\nWidth
  \pgfgetnodeheight(a)\nHeight
  
  \draw[line width=.5pt](-.6*\nHeight,-.25*\nWidth)--(.6*\nHeight,.25*\nWidth);

\end{tikzpicture}
ABC
\]
\end{document}

效果如下:

image.png

但符号没有合适的摆放在一行的数学公式 \sum_{k}^{n}f(k)ABC 之间的正确位置(垂直和水平位置).

我的问题:

  1. 怎样将以上制作的数学符号插入正确的行间数学公式的位置,就跟普通的数学符号位置一样;
  2. 如果对行内数学公式,它们的符号大小和左右间距可能不同,还有上下标的情况,总之对制作的新符号,在四种数学字体模式下如何自动的调整对应的合适位置以及符号大小。(我想到 \mathchoice 命令,不知能否行得通)
  3. 更一般地,对所有的(或者大多数常用的)数学符号,能否制作一个命令,当输入这个命令(参数是某个的数学符号),得到这个对应数学符号的"否定形式" —— 在符号中心插入一条如上图一样的斜线。

查看更多

关注者
0
被浏览
1.2k
1 个回答
Thallo
Thallo 2024-08-10
这家伙不懒,但还是什么也没写

使用 amssymb 包,通过在 <arrow> 前面添加 n 可以得到否定箭头,但箭头可能太少,于是还是给个小建议供参考。

鱼大神代码学不来,学来我也写不懂,捣鼓一个新的,尽可能满足你的需求:
同样的思路,在符号的中心处添加一条斜线,通过添加线并旋转制成的 \homo[...]{<array>} 指令,其中可选参数用于水平移动斜线的位置,使其在箭头过短时不会碰到箭头两端。

\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}  % 更多箭头啊啊啊啊啊啊啊啊
\usepackage{graphicx} % 24岁是\rotatebox!!!

\makeatletter % 要 @ 啊啊啊啊啊啊啊
\newcommand*\homo[2][0mu]{\HomoInternal{#1}{\homoslash}{#2}}
\newcommand*\HomoInternal[3]{\mathpalette\Homo@{{#1}{#2}{#3}}}
\newcommand*\Homo@[2]{\Homo@@{#1}#2}
\newcommand*\Homo@@[4]{%
  \mathrel{\ooalign{%
    $\m@th#1#4$\cr
    \hidewidth$\m@th#3{#1}\mkern\muexpr#2*2$\hidewidth\cr
  }}%
}
\newcommand*\homoslash[1]{\rotatebox[origin=c]{60}{$\m@th#1-$}}
\makeatother  % 不要 @ 啊啊啊啊啊啊啊啊


\begin{document}

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

\[
y^{x \homo[1mu]{\Leftrightarrow} y^{x \homo[1mu]{\Leftrightarrow} y}} \homo[1mu]{\Leftrightarrow} y_{x \homo[1mu]{\Leftrightarrow} y_{x \homo[1mu]{\Leftrightarrow} y}}
\]

\end{document}

使用\homo[...]{<array>}
image.png

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览