如何彎曲 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);

你會得到

在此輸入影像描述

請注意,放置節點的點很重要,因為變換是非線性的,因此在此範例中,如果將節點放得更遠,效果就會更明顯。您可以看到頂部空白區域來自轉換後的畫布,使用貝塞爾曲線座標進行操作,您會得到荒謬的結果:)

相關內容