TikZ 노드를 구부리는 방법

TikZ 노드를 구부리는 방법

다음 화살표를 출력하는 아래 MWE를 고려하십시오.

여기에 이미지 설명을 입력하세요

그러한 노드를 구부려서 다음과 같이 보일 수 있습니까?

여기에 이미지 설명을 입력하세요

(품질이 좋지 않아서 죄송합니다. 저는 포토샵 아티스트가 아닙니다.) 가능하다면 글꼴을 읽을 수 있도록 하고 오른쪽으로 구부러지는 화살표를 만듭니다.

혹시 방법이 있는지 아시나요?

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

당신은 얻을 것이다

여기에 이미지 설명을 입력하세요

변환은 비선형이므로 노드를 배치하는 지점이 중요하므로 이 예에서는 노드를 더 멀리 배치할수록 효과가 더 뚜렷해집니다. 그리고 변환된 캔버스에서 위쪽 공백이 들어오는 것을 볼 수 있습니다. 베지어 곡선 좌표를 가지고 놀면 말도 안되는 결과를 얻을 수 있습니다 :)

관련 정보