如何弯曲 TikZ 节点

如何弯曲 TikZ 节点

考虑下面的 MWE,它输出以下箭头

在此处输入图片描述

是否可以弯曲这样的节点,使其看起来像

在此处输入图片描述

(抱歉,图片质量不太好,我不是 Photoshop 艺术家)。如果可能的话,我希望字体可读,然后创建一个向右弯曲的箭头。

你知道有没有什么办法吗?

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.arrows}
\tikzstyle{arrownode}
  = [ shape=single arrow
    , single arrow head extend=.75em
    , single arrow head indent=.25em
    , minimum width=3em
    , draw
    , font=\sc
    ]
\begin{document}
    \begin{tikzpicture}
        \node[arrownode] at (0,0) {foobar};
    \end{tikzpicture}
\end{document}

答案1

使用 TikZ v3.00,您可以使用非线性变换来做一些奇妙的事情。这里的问题在于文本,因为 TikZ 还将节点文本放入框中并希望获得最佳效果。因此,框中的所有内容都会受到 TikZ 看到的框句柄的相同变换的影响(例如添加\hspace{3cm}到节点内容)。

\documentclass[]{article}
\usepackage{tikz}
\usetikzlibrary{shapes.arrows}
\usepgflibrary{curvilinear}
\usepgfmodule{nonlineartransformations}
\tikzset{arrownode/.style={
    shape=single arrow,
    single arrow head extend=.75em,
    single arrow head indent=.25em,
    minimum width=3em,
    draw,
    }
}
\begin{document}
    \begin{tikzpicture}
        {
        \pgfsetcurvilinearbeziercurve
        {\pgfpoint{0mm}{30mm}}
        {\pgfpoint{15mm}{30mm}}
        {\pgfpoint{30mm}{15mm}}
        {\pgfpoint{30mm}{0mm}}
        \pgftransformnonlinear{%
            \pgfpointcurvilinearbezierorthogonal%
            {\csname pgf@x\endcsname}%
            {\csname pgf@y\endcsname}%
        }%
        \node[arrownode,transform shape nonlinear=true] at (3,0) {why no rotation?};
        }
    \end{tikzpicture}
\end{document}

在此处输入图片描述

不过,你可以切换到文本装饰,我还没有仔细研究过 Mark Wibrow 如何对转换进行编码,但也许你可以让文本接受当前的转换矩阵(我还不知道)。所以,如果你用

\node[arrownode,transform shape nonlinear=true] (a) at (3,0) {\phantom{Why not rotating?}};
\path[decoration={text along path,
                text={Why not rotating?},
                text align=center,
                raise=-0.5ex
                },postaction={decorate}](a.west) -- (a.east);

你会得到

在此处输入图片描述

请注意,由于变换是非线性的,因此放置节点的位置很重要,因此在此示例中,如果将节点放置得更远,效果将更加明显。您可以看到顶部的白色空间来自变换后的画布。使用贝塞尔曲线坐标进行操作,您将获得惊人的结果 :)

相关内容