구부러진 화살표에 라벨을 붙입니다.

구부러진 화살표에 라벨을 붙입니다.

다음 코드에 몇 가지 문제가 있습니다.

\documentclass[crop,border=0]{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture} [>=latex]
    \draw[->, out=225, in=200] (-0.5,1.2) to (12-0.5,-1.6) node [pos=0.8, below] {\scriptsize $\begin{pmatrix}1 & 0 & 0 & 0 \end{pmatrix}$};
\end{tikzpicture}
\end{document}

무엇을 선택하든 pos항상 행 벡터가 아래 그림(화살표 아래가 아닌 고정된 위치)으로 배치됩니다. 내 의도는 벡터를 화살표 끝 부분과 그 아래에 배치하는 것입니다.

내가 얻는 화살표의 예

어떠한 제안? 고마워!

답변1

올바른 구문은 다음 바로 뒤에 노드를 배치하는 것입니다 to.

\documentclass[crop,border=0]{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{bbox}
\begin{document}
\begin{tikzpicture} [>=latex,bezier bounding box]
    \draw[->, out=225, in=200] (-0.5,1.2) to node [pos=0.8, below] {\scriptsize
    $\begin{pmatrix}1 & 0 & 0 & 0 \end{pmatrix}$} (12-0.5,-1.6) ;
\end{tikzpicture}
\end{document}

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

bbox올바른 경계 상자를 가져오는 데 사용된 라이브러리를 찾을 수 있습니다 .여기.

부록: arrows.meta및 를 사용하는 경우 bending(실험적) bbox라이브러리를 약간 수정해야 합니다(구부리기로 인해 매우 짧은 베지어 곡선이 생성되기 때문). 다음을 다음과 같이 저장합니다 tikzlibrarybbox.code.tex.

\tikzset{%
  bezier bounding box/.is choice,%
  bezier bounding box/.default=true,%
  bezier bounding box/true/.code=\tikzset{switch on bezier bounding box},%
  bezier bounding box/false/.code=\tikzset{switch off bezier bounding box}}%
\tikzset{switch off bezier bounding box/.code={%
\def\pgf@lt@curveto##1##2##3##4##5##6{%
  \pgf@protocolsizes{##1}{##2}%
  \pgf@protocolsizes{##3}{##4}%
  \pgf@protocolsizes{##5}{##6}%
  \pgfsyssoftpath@curveto{\the##1}{\the##2}{\the##3}{\the##4}{\the##5}{\the##6}%
}%
\let\pgf@nlt@curveto\pgf@lt@curveto}}
%
% it might just be me but according to what I believe to find 
% \pgfmathsetlengthmacro appears to generate spaces
%
\tikzset{switch on bezier bounding box/.code={%
\def\pgf@lt@curveto##1##2##3##4##5##6{%
  % extrema in x
  \pgfmathsetmacro{\pgf@temp@b}{abs(\pgf@path@lastx-##5-3*##1+3*##3)}%
  % ^^^ this is used for the denominator below, cannot become too small
  \pgfmathsetmacro{\pgf@temp@c}{max(1+\pgf@path@lastx,max(##1,max(##3,##5)))}%
  % ^^^ in order to avoid dimension too large errors from squaring lengths in pt
  \ifdim\pgf@temp@c pt>1pt
   \pgfmathparse{((##1/\pgf@temp@c)*(##1/\pgf@temp@c)-1*((##1/\pgf@temp@c)*(##3/\pgf@temp@c))+(##3/\pgf@temp@c)*(##3/\pgf@temp@c)-1*((##1/\pgf@temp@c)*(##5/\pgf@temp@c))+(-(##3/\pgf@temp@c)+(##5/\pgf@temp@c))*(\pgf@path@lastx/\pgf@temp@c))}%
   \pgfutil@tempdima=\pgfmathresult pt\relax% 
   % ^^^ discriminant
   \ifdim\pgf@temp@b pt<0.01pt\relax%
    % approximately linear  
    \pgfmathparse{abs(2*(##1)-2*(##3)+(##5))}%
    \pgfutil@tempdimb=\pgfmathresult pt\relax%
    \ifdim\pgfutil@tempdimb<0.1pt\relax%
     % if the denominator is very small, it is *likely* large but could be 0/0
    \else
     \pgfmathsetmacro{\pgf@temp@a}{(2*(##1)-3*(##3)+(##5))/(2*(##1)-2*(##3)+(##5))}%
     \pgfmathparse{\pgf@path@lastx*pow(1-\pgf@temp@a,3)+3*##1*pow(1-\pgf@temp@a,2)*\pgf@temp@a+3*##3*(1-\pgf@temp@a)*\pgf@temp@a*\pgf@temp@a+##5*pow(\pgf@temp@a,3)}%
     \pgfutil@tempdimb=\pgfmathresult pt\relax%
     \pgf@protocolsizes{\pgfutil@tempdimb}{##6}%
    \fi%
   \else
    \ifdim\pgfutil@tempdima<0pt\relax% negative discriminant -> no turning point
    \else
      \pgfmathsetmacro{\pgf@temp@a}{min(1,max(0,(\pgf@path@lastx-2*##1+##3-\pgf@temp@c*sqrt(\pgfutil@tempdima))/(\pgf@path@lastx-##5-3*##1+3*##3)))}%
      \pgfmathparse{\pgf@path@lastx*pow(1-\pgf@temp@a,3)+3*##1*pow(1-\pgf@temp@a,2)*\pgf@temp@a+3*##3*(1-\pgf@temp@a)*\pgf@temp@a*\pgf@temp@a+##5*pow(\pgf@temp@a,3)}%
      \pgfutil@tempdimb=\pgfmathresult pt\relax%
      \pgf@protocolsizes{\pgfutil@tempdimb}{##6}%
      \pgfmathsetmacro{\pgf@temp@a}{min(1,max(0,(\pgf@path@lastx-2*##1+##3+\pgf@temp@c*sqrt(\pgfutil@tempdima))/(\pgf@path@lastx-##5-3*##1+3*##3)))}%
      \pgfmathparse{\pgf@path@lastx*pow(1-\pgf@temp@a,3)+3*##1*pow(1-\pgf@temp@a,2)*\pgf@temp@a+3*##3*(1-\pgf@temp@a)*\pgf@temp@a*\pgf@temp@a+##5*pow(\pgf@temp@a,3)}%
      \pgfutil@tempdimb=\pgfmathresult pt\relax%
      \pgf@protocolsizes{\pgfutil@tempdimb}{##6}%
    \fi% 
   \fi 
  \fi
  %%%%%%%%%%%%%%%%%%%%%%%%%%%
  % extrema in y (completely analogous to the above)
  \pgfmathsetmacro{\pgf@temp@b}{abs(\pgf@path@lasty-##6-3*##2+3*##4)}%
  \pgfmathsetmacro{\pgf@temp@c}{max(1+\pgf@path@lasty,max(##2,max(##4,##6)))}%
  \ifdim\pgf@temp@c pt>1pt
   \pgfmathparse{((##2/\pgf@temp@c)*(##2/\pgf@temp@c)-1*((##2/\pgf@temp@c)*(##4/\pgf@temp@c))+(##4/\pgf@temp@c)*(##4/\pgf@temp@c)-1*((##2/\pgf@temp@c)*(##6/\pgf@temp@c))+(-(##4/\pgf@temp@c)+(##6/\pgf@temp@c))*(\pgf@path@lasty/\pgf@temp@c))}%
   \pgfutil@tempdima=\pgfmathresult pt\relax% 
   % ^^^ discriminant
   \ifdim\pgf@temp@b pt<0.01pt\relax%
    % approximately linear  
    \pgfmathparse{abs(2*(##2)-2*(##4)+(##6))}%
    \pgfutil@tempdimb=\pgfmathresult pt\relax%
    \ifdim\pgfutil@tempdimb<0.1pt\relax%
     % if the denominator is very small, it is *likely* large but could be 0/0
    \else
     \pgfmathsetmacro{\pgf@temp@a}{(2*(##2)-3*(##4)+(##6))/(2*(##2)-2*(##4)+(##6))}%
     \pgfmathparse{\pgf@path@lasty*pow(1-\pgf@temp@a,3)+3*##2*pow(1-\pgf@temp@a,2)*\pgf@temp@a+3*##4*(1-\pgf@temp@a)*\pgf@temp@a*\pgf@temp@a+##6*pow(\pgf@temp@a,3)}%
     \pgfutil@tempdimb=\pgfmathresult pt\relax%
     \pgf@protocolsizes{##5}{\pgfutil@tempdimb}%
    \fi%
   \else
    \ifdim\pgfutil@tempdima<0pt\relax% negative discriminant -> no turning point
    \else
      \pgfmathsetmacro{\pgf@temp@a}{min(1,max(0,(\pgf@path@lasty-2*##2+##4-\pgf@temp@c*sqrt(\pgfutil@tempdima))/(\pgf@path@lasty-##6-3*##2+3*##4)))}%
      \pgfmathparse{\pgf@path@lasty*pow(1-\pgf@temp@a,3)+3*##2*pow(1-\pgf@temp@a,2)*\pgf@temp@a+3*##4*(1-\pgf@temp@a)*\pgf@temp@a*\pgf@temp@a+##6*pow(\pgf@temp@a,3)}%
      \pgfutil@tempdimb=\pgfmathresult pt\relax%
      \pgf@protocolsizes{##5}{\pgfutil@tempdimb}%
      \pgfmathsetmacro{\pgf@temp@a}{min(1,max(0,(\pgf@path@lasty-2*##2+##4+\pgf@temp@c*sqrt(\pgfutil@tempdima))/(\pgf@path@lasty-##6-3*##2+3*##4)))}%
      \pgfmathparse{\pgf@path@lasty*pow(1-\pgf@temp@a,3)+3*##2*pow(1-\pgf@temp@a,2)*\pgf@temp@a+3*##4*(1-\pgf@temp@a)*\pgf@temp@a*\pgf@temp@a+##6*pow(\pgf@temp@a,3)}%
      \pgfutil@tempdimb=\pgfmathresult pt\relax%
      \pgf@protocolsizes{##5}{\pgfutil@tempdimb}%
    \fi% 
   \fi 
  \fi
  \pgf@protocolsizes{\pgf@path@lastx}{\pgf@path@lasty}%
  \pgf@protocolsizes{##5}{##6}%
  \pgfsyssoftpath@curveto{\the##1}{\the##2}{\the##3}{\the##4}{\the##5}{\the##6}%
}
\let\pgf@nlt@curveto\pgf@lt@curveto}}% fix me: 0/0 cases and occasional
% dimension too large errors (they can be fixed with fpu)

그러면 다음도 작동합니다.

\documentclass[crop,border=0]{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{bbox,arrows.meta,bending}
\begin{document}
\begin{tikzpicture} [,bezier bounding box]
    \draw[-{Latex[bend]}, out=225, in=200] (-0.5,1.2) to node [pos=0.8, below] {\scriptsize
    $\begin{pmatrix}1 & 0 & 0 & 0 \end{pmatrix}$} (12-0.5,-1.6) ;
\end{tikzpicture}
\end{document}

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

답변2

다음을 시도해 보세요:

\documentclass[crop,border=0]{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{quotes}

\begin{document}
    \begin{tikzpicture} [>=latex, auto=right
                        ]
\draw[->] (-0.5,1.2) to [out=225, in=200, "$\begin{pmatrix}1 & 0 & 0 & 0 \end{pmatrix}$", pos=0.7] (12-0.5,-1.6);
    \end{tikzpicture}
\end{document}

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

부록

곡선을 그리기 전에 추가하는 것이 좋습니다 \clip (-1.2,1.2) rectangle (11.5,-3);. 이를 사용하면 그림 왼쪽의 공백을 잘라낼 수 있습니다(앵커가 구부러져 발생). 가장자리 레이블의 글꼴이 더 작은 경우 다음 MWE에서와 같이 스타일을 정의할 수 있습니다.

\documentclass[crop,border=0]{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{quotes}

\begin{document}
    \begin{tikzpicture} [>=latex, 
every edge quotes/.style = {font=\scriptsize, auto=right}
                        ]
\clip (-1.2,1.2) rectangle (11.5,-3);
\draw[->] (-0.5,1.2) to [out=225, in=200, "$\begin{pmatrix}1 & 0 & 0 & 0 \end{pmatrix}$", pos=0.7] (11.5,-1.6);
    \end{tikzpicture}
\end{document}

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

관련 정보