
두 벡터는 동일한 방향을 가지며 해당 화살표는 미분된 상태로 유지됩니다. 나는 그들을 "샴 쌍둥이"로 나타나게 하고 싶습니다. 화살표의 절반은 왼쪽에, 다른 절반은 오른쪽에 있습니다. 내가 의미하는 바는 다음 이미지의 왼쪽 상단에서 더 잘 설명될 수 있습니다. (화살표 하나는 빨간색이고 다른 화살표는 검은색입니다.)
에서수동Till Tantau의 "TikZ 및 pgf"에서는 이러한 스타일을 찾지 못했습니다. 실제로 [o-stealth]를 사용하려고 했을 때 다음과 같은 결과를 얻었습니다.
'o' 키를 모르겠습니다.
내 코드는 엉망이지만 Tikz의 초보자이기 때문에 매우 간단합니다. 다음은 그 일부입니다.
\documentclass[tikz]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{tikz}\begin{document}
\usetikzlibrary{calc,patterns,angles,quotes}
\begin{tikzpicture}
\pgfmathsetmacro{\Gvec}{1}
\pgfmathsetmacro{\midAngle}{20}
\pgfmathsetmacro{\Gcosmid}{\Gvec*cos(\midAngle)}
\coordinate (center) at (0,0);
\draw [thin, gray] (center) -- ++(270-\midAngle:2) coordinate (left);
\draw [thick, -stealth] (left)-- ++(90-\midAngle:\Gcosmid + 0.3) coordinate (Tmid);
\draw [thin] (left) -- ++(270-\midAngle:-\Gcosmid) coordinate (gcosmid);
\draw [->, red] (gcosmid) -- (Tmid) node [left] {\footnotesize{$a_{cp}$}};
\end{tikzpicture}
나는 "샴 화살"이 문제를 처리하는 좋은 방법이라고 생각합니다. 그러나 나는 다른 대안을 받아들입니다.
편집: 샴 화살표는 주로 색상 차별화에 의존합니다. 나중에 나는 좋은 모양의 조합(벡터가 동일한 성격을 가질 때 -stealth 및 -angle 90 스타일의 중첩, 예: mg 및 a_r)에 베팅했습니다.
답변1
환영! 다음은 "샴 스텔스" 화살표 팁입니다. 모양이 잘 모르겠어서 Stealth
베이스로 사용했어요. pgflibraryarrows.meta.code.tex
필요한 경우 에서 다른 헤드의 코드를 복사할 수 있습니다 . 이 작업을 수행하려면 새 화살표 매개변수인 두 번째 색상을 선언하고 경로를 두 개로 분할해야 합니다.
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{arrows.meta}
\makeatletter
\pgfkeys{/pgf/arrow keys/second color/.code=%
\pgfarrowsaddtooptions{\edef\pgfarrowsecondcolor{#1}}}
\pgfdeclarearrow{
name = Siamese Stealth,
defaults = {
length = +3pt 4.5 .8,
width' = +0pt .75,
inset' = +0pt 0.325,
line width = +0pt 0.5 0.5,
second color=red
},
setup code = {
% Cap the line width at 1/4th distance from inset to tip
\pgf@x\pgfarrowlength
\advance\pgf@x by-\pgfarrowinset
\[email protected]\pgf@x
\ifdim\pgf@x<\pgfarrowlinewidth
\pgfarrowlinewidth\pgf@x
\fi
% Compute front miter length:
\pgfmathdivide@{\pgf@sys@tonumber\pgfarrowlength}{\pgf@sys@tonumber\pgfarrowwidth}%
\let\pgf@temp@quot\pgfmathresult%
\pgf@x\pgfmathresult pt%
\pgf@x\pgfmathresult\pgf@x%
\pgf@x4\pgf@x%
\advance\pgf@x by1pt%
\pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}%
\pgf@xc\pgfmathresult\pgfarrowlinewidth% xc is front miter
\[email protected]\pgf@xc
\pgf@xa\pgf@temp@quot\pgfarrowlinewidth% xa is extra harpoon miter
% Compute back miter length:
\[email protected]\pgfarrowwidth%
\csname pgfmathatan2@\endcsname{\pgfmath@tonumber\pgfarrowlength}{\pgfmath@tonumber\pgf@ya}%
\pgf@yb\pgfmathresult pt%
\csname pgfmathatan2@\endcsname{\pgfmath@tonumber\pgfarrowinset}{\pgfmath@tonumber\pgf@ya}%
\pgf@ya\pgfmathresult pt%
\advance\pgf@yb by-\pgf@ya%
\[email protected]\pgf@yb% half angle in yb
\pgfmathtan@{\pgf@sys@tonumber\pgf@yb}%
\pgfmathreciprocal@{\pgfmathresult}%
\pgf@yc\pgfmathresult\pgfarrowlinewidth%
\[email protected]\pgf@yc%
\advance\pgf@ya by\pgf@yb%
\pgfmathsincos@{\pgf@sys@tonumber\pgf@ya}%
\pgf@ya\pgfmathresulty\pgf@yc% ya is the back miter
\pgf@yb\pgfmathresultx\pgf@yc% yb is the top miter
\ifdim\pgfarrowinset=0pt%
\[email protected]\pgfarrowlinewidth% easy: back miter is half linewidth
\fi
% Compute inset miter length:
\pgfmathdivide@{\pgf@sys@tonumber\pgfarrowinset}{\pgf@sys@tonumber\pgfarrowwidth}%
\let\pgf@temp@quot\pgfmathresult%
\pgf@x\pgfmathresult pt%
\pgf@x\pgfmathresult\pgf@x%
\pgf@x4\pgf@x%
\advance\pgf@x by1pt%
\pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}%
\pgf@yc\pgfmathresult\pgfarrowlinewidth% yc is inset miter
\[email protected]\pgf@yc%
% Inner length (pgfutil@tempdima) is now arrowlength - front miter - back miter
\pgfutil@tempdima\pgfarrowlength%
\advance\pgfutil@tempdima by-\pgf@xc%
\advance\pgfutil@tempdima by-\pgf@ya%
\[email protected]\pgfarrowwidth%
\advance\pgfutil@tempdimb by-\pgf@yb%
% harpoon miter correction
\ifpgfarrowroundjoin
\pgfarrowssetbackend{\pgf@ya\advance\pgf@x by-.5\pgfarrowlinewidth}
\else
\pgfarrowssetbackend{0pt}
\fi
\ifpgfarrowharpoon
\pgfarrowssetlineend{\pgfarrowinset\advance\pgf@x
by\pgf@yc\advance\pgf@x by.5\pgfarrowlinewidth}
\else
\pgfarrowssetlineend{\pgfarrowinset\advance\pgf@x by\pgf@yc\advance\pgf@x by-.25\pgfarrowlinewidth}
\ifpgfarrowreversed
\ifdim\pgfinnerlinewidth>0pt
\pgfarrowssetlineend{\pgfarrowinset}
\else
\pgfarrowssetlineend{\pgfutil@tempdima\advance\pgf@x by\pgf@ya\advance\pgf@x by-.25\pgfarrowlinewidth}
\fi
\fi
\fi
\ifpgfarrowroundjoin
\pgfarrowssettipend{\pgfutil@tempdima\advance\pgf@x by\pgf@ya\advance\pgf@x by.5\pgfarrowlinewidth}
\else
\pgfarrowssettipend{\pgfarrowlength\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi}
\fi
% The hull:
\pgfarrowshullpoint{\pgfarrowlength\ifpgfarrowroundjoin\else\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi\fi}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else0pt\fi}%
\pgfarrowsupperhullpoint{0pt}{.5\pgfarrowwidth}%
\pgfarrowshullpoint{\pgfarrowinset}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else 0pt\fi}%
% Adjust inset
\pgfarrowssetvisualbackend{\pgfarrowinset}
\advance\pgfarrowinset by\pgf@yc%
% The following are needed in the code:
\pgfarrowssavethe\pgfutil@tempdima
\pgfarrowssavethe\pgfutil@tempdimb
\pgfarrowssavethe\pgfarrowlinewidth
\pgfarrowssavethe\pgf@ya
\pgfarrowssavethe\pgfarrowinset
},
drawing code = {
\pgfsetdash{}{+0pt}%
\ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi
\ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{+\pgfarrowlinewidth}\fi
\pgfpathmoveto{\pgfqpoint{\pgfutil@tempdima\advance\pgf@x by\pgf@ya}{-0.5\pgfarrowlinewidth}}%
\pgfpathlineto{\pgfqpoint{\pgf@ya}{-0.5\pgfarrowlinewidth}}%
\pgfpathlineto{\pgfqpoint{\pgfarrowinset}{-0.5\pgfarrowlinewidth}}%
\ifpgfarrowharpoon \else
\pgfpathlineto{\pgfqpoint{\pgf@ya}{-\pgfutil@tempdimb}}%
\fi
\pgfpathclose
\ifpgfarrowopen\pgfusepathqstroke\else\ifdim\pgfarrowlinewidth>0pt\pgfusepathqfillstroke\else\pgfusepathqfill\fi\fi
\pgfsetstrokecolor{\pgfarrowsecondcolor}%
\pgfsetfillcolor{\pgfarrowsecondcolor}%
\pgfpathmoveto{\pgfqpoint{\pgfutil@tempdima\advance\pgf@x by\pgf@ya}{0.5\pgfarrowlinewidth}}%
\pgfpathlineto{\pgfqpoint{\pgf@ya}{0.5\pgfarrowlinewidth}}%
\pgfpathlineto{\pgfqpoint{\pgfarrowinset}{0.5\pgfarrowlinewidth}}%
\ifpgfarrowharpoon \else
\pgfpathlineto{\pgfqpoint{\pgf@ya}{\pgfutil@tempdimb}}%
\fi
\pgfpathclose
\ifpgfarrowopen\pgfusepathqstroke\else\ifdim\pgfarrowlinewidth>0pt\pgfusepathqfillstroke\else\pgfusepathqfill\fi\fi
},
parameters = {
\pgfarrowsecondcolor,%
\the\pgfarrowlinewidth,%
\the\pgfarrowlength,%
\the\pgfarrowwidth,%
\the\pgfarrowinset,%
\ifpgfarrowharpoon h\fi%
\ifpgfarrowopen o\fi%
\ifpgfarrowroundjoin j\fi%
},
}%
\makeatother
\begin{document}
\begin{tikzpicture}
\draw [thick,{Circle[open]}-{Siamese Stealth}] (0,0) -- ++ (70:1);
\draw [thick,{Circle[fill=blue]}-{Siamese Stealth[second color=blue,length=10pt]}] (1,0) -- ++ (70:1);
\draw [thick,{Circle[fill=orange]}-{Siamese Stealth[orange,second color=black,width=6pt]}] (2,0) -- ++ (70:1);
\end{tikzpicture}
\end{document}
화살표 o
머리는 라이브러리에 정의되어 있지만 여기에서 사용되는 arrows
으로 대체되었습니다 . arrows.meta
화살촉 Circle
은 의 보다 유연한 변형입니다 o
.
또 다른 가능성은 pic
. pgf core 명령이 없는 단축 코드가 있지만 유연성도 떨어집니다.
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}[pics/Siamese arrow/.style={code={
\tikzset{Siamese arrow/.cd,#1}
\def\pv##1{\pgfkeysvalueof{/tikz/Siamese arrow/##1}}%
\begin{scope}
\clip (-\pv{length}-5pt,0) -- (2pt,0) --
(2pt,0.5*\pv{width}+\pgflinewidth)
-- (-\pv{length}-5pt,0.5*\pv{width}+\pgflinewidth) -- cycle;
\draw[-{\pv{head}[length=\pv{length},width=\pv{width}]},
color=\pv{color 1}] (-\pv{length}+2pt,0) -- (2pt,0);
\end{scope}
\begin{scope}
\clip (-\pv{length}-5pt,0) -- (2pt,0) --
(2pt,-0.5*\pv{width}-\pgflinewidth)
-- (-\pv{length}-5pt,-0.5*\pv{width}-\pgflinewidth) -- cycle;
\draw[-{\pv{head}[length=\pv{length},width=\pv{width}]},
color=\pv{color 2}] (-\pv{length}+2pt,0) -- (2pt,0);
\end{scope}
}},Siamese arrow/.cd,length/.initial=6pt,width/.initial=3pt,
head/.initial=Stealth,color 1/.initial=black,color 2/.initial=red]
%
\draw [thick,shorten >=2pt,{Circle[open]}-] (0,0) -- ++ (70:1)
pic[pos=1,sloped]{Siamese arrow} ;
\draw [thick,shorten >=2pt,{Circle[open]}-] (1,0) -- ++ (70:1)
pic[pos=1,sloped]{Siamese arrow={width=5pt,color 1=blue,color 2=orange}} ;
\draw [thick,shorten >=2pt,{Circle[open]}-] (2,0) -- ++ (70:1)
pic[pos=1,sloped]{Siamese arrow={head=Latex,length=4pt,color 1=red,color 2=blue}} ;
\end{tikzpicture}
\end{document}