![高阶箭头](https://linux22.com/image/411213/%E9%AB%98%E9%98%B6%E7%AE%AD%E5%A4%B4.png)
众所周知,\(\rightarrow\)
给出一个右箭头,\(\Rightarrow\)
给出一个右箭头。使用amssymb
包,您甚至可以用 制作三箭头\(\Rrightarrow\)
。但如果需要四箭头、五箭头或任何更高阶的箭头怎么办?是否有这样的命令,例如\arroworder{}
输入箭头的顺序*,例如:
\arroworder{1}
基本上是\(\rightarrow\)
\arroworder{2}
\(\Rightarrow\)
给出类似于\arroworder{3}
就像amssymb
命令一样\(\Rrightarrow\)
。- 可能
\arroworder{0}
只是一个箭头吗?
附言:似乎也没有三重左右箭头的命令。有没有办法做到这一点,最好是采用与第一个问题相同的风格?
* 在这种情况下,“顺序”是指箭头上附着的茎的数量。
答案1
这主要是技术评论,Implies
箭头声称arrows.meta
有一个长度参数,但实际上并没有,因为改变长度不会产生影响。可以纠正这个问题吗?可以。但我要警告你,至少这个“修复”并不好。
\documentclass{article}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\makeatletter
\pgfkeys{
/pgf/arrow keys/.cd,
xstretch/.store in=\pgfarrowxstretch,
xstretch=1,
ystretch/.store in=\pgfarrowystretch,
ystretch=1,
}
\ifcsname pgfutil@tempdimc\endcsname
\else
\newlength\pgfutil@tempdimc
\fi
\ifcsname pgfutil@tempdimd\endcsname
\else
\newlength\pgfutil@tempdimd
\fi
\pgfdeclarearrow{
name = varImplies,
setup code = {
\pgf@xa\pgfinnerlinewidth
\[email protected]\pgflinewidth
\pgfutil@tempdimc\pgfarrowxstretch\pgfutil@tempdima
\pgfutil@tempdimd\pgfarrowystretch\pgfutil@tempdima
\advance\pgfutil@tempdima by.25\pgf@xa%
\[email protected]\pgflinewidth
\advance\pgfutil@tempdimb by-.5\pgf@xa%
\pgfutil@tempdimb\pgfutil@tempdimb
\pgfarrowssettipend{2.06\pgfutil@tempdimc\advance\pgf@x by.5\pgfutil@tempdimb}
\pgfarrowssetbackend{-1.36\pgfutil@tempdimc\advance\pgf@x by.5\pgfutil@tempdimb}
\pgfarrowsupperhullpoint{-1.4\pgfutil@tempdimc}{2.8\pgfutil@tempdimd}
\pgfarrowsupperhullpoint{2\pgfutil@tempdimc}{.5\pgfutil@tempdimd}
\pgfarrowssavethe\pgfutil@tempdima
\pgfarrowssavethe\pgfutil@tempdimb
\pgfarrowssavethe\pgfutil@tempdimc
\pgfarrowssavethe\pgfutil@tempdimd
},
drawing code = {
\pgfmathsetmacro{\pft}{0.1/(\pgfutil@tempdimc/\pgfutil@tempdimd)}%
\pgftransformxshift{\pft\pgfutil@tempdima}
\pgfsetlinewidth{\pgfutil@tempdimb}
\pgfsetdash{}{+0pt}
\pgfsetroundcap
\pgfsetroundjoin
\pgfpathmoveto{\pgfpoint{-1.4\pgfutil@tempdimc}{2.65\pgfutil@tempdimd}}
\pgfpathcurveto
{\pgfpoint{-0.75\pgfutil@tempdimc}{1.25\pgfutil@tempdimd}}
{\pgfpoint{1\pgfutil@tempdimc}{0.05\pgfutil@tempdimd}}
{\pgfpoint{2\pgfutil@tempdimc}{0pt}}
\pgfpathcurveto
{\pgfpoint{1\pgfutil@tempdimc}{-0.05\pgfutil@tempdimd}}
{\pgfpoint{-.75\pgfutil@tempdimc}{-1.25\pgfutil@tempdimd}}
{\pgfpoint{-1.4\pgfutil@tempdimc}{-2.65\pgfutil@tempdimd}}
\pgfusepathqstroke
},
parameters = {}
}%
\makeatother
\newif\ifarrowordervar
\tikzset{arrow var/.is if=arrowordervar}
\arrowordervarfalse
\newcommand\arroworder[2][]{\begin{tikzpicture}[Rightarrow/.style={double equal sign distance,>={Implies},->},
triple/.style={-,preaction={draw,Rightarrow}},
Triple/.style={-,preaction={draw,double distance=0.75ex,
>={varImplies[xstretch=1,ystretch=1.4]},->}},
quadruple/.style={preaction={draw,Rightarrow,shorten >=0pt},shorten >=1.2pt,-,double,double
distance=0.2pt},
Quadruple/.style={draw,double distance=0.75ex,
>={varImplies[xstretch=1,ystretch=1.4]},->,
postaction={draw,line width=0.4pt,shorten >=1.4pt,-,double,double
distance=0.18ex}},#1]
\path[use as bounding box] (0,-0.6ex) rectangle
({width("$\Rightarrow$")*1pt},0.6ex);
\draw \ifcase#2
\or [->]
\or [Rightarrow]
\or \ifarrowordervar [Triple] \else [triple] \fi
\or \ifarrowordervar [Quadruple] \else [quadruple] \fi
\fi
(0.2pt,0) -- ({width("$\Rightarrow$")*1pt-0.8pt},0);
\end{tikzpicture}}
\begin{document}
$\to$ $\arroworder{1}$\par
$\Rightarrow$ $\arroworder{2}$\par
$\Rrightarrow$ $\arroworder[arrow var]{3}$ $\arroworder{3}$\par
$\Rrightarrow$ $\arroworder[arrow var]{4}$ $\arroworder{4}$\par
\end{document}
因此,它有一些选项arrow var
可以切换到箭头看起来与 AMS 箭头相似的模式。我们可以继续,使它们可扩展等等,但我认为首先要做的是提出一个明确的方案,说明如何构建这些箭头等等。
请注意,在 Ti钾在我看来, Zy 环境(例如tikz-cd
此类箭头)具有更好的动机,因为在那里你可以弯曲它们等等。我发布这篇文章主要是为了供将来尝试摆弄箭头时参考Implies
。
答案2
你可以查看这个讨论tikz 和 tikz-cd 中的三箭头\usepackage{tikz}
,其中使用和提供了“三重”甚至“四重”箭头样式的解决方案\rightarrow\
否则,\usepackge{witharrows}
可以使用 WithArrows 绘制多个嵌套箭头并更改层数。但 WithArrows 不会绘制直箭头。
对于“WithArrows”包,请访问Package WithArrows 文档由 F. Pantigny 编辑(最后修订于 2020 年 3 月 30 日)
我希望它有帮助。