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);

あなたは得るでしょう

ここに画像の説明を入力してください

変換は非線形なので、ノードを配置するポイントが重要になることに注意してください。この例では、ノードを遠くに配置するほど、効果が顕著になります。また、変換されたキャンバスから上部の白いスペースが出てくるのがわかります。ベジェ曲線の座標をいじってみると、とんでもない結果が得られます :)

関連情報