decorations.markings에서 화살촉 스타일 변경

decorations.markings에서 화살촉 스타일 변경

가운데에 화살촉이 있는 선을 그리고 싶은데 \arrow거기에서만 사용할 수 있는 명령과 함께 decoration.markings 라이브러리를 찾았습니다.

그러나 명령에 어떤 옵션과 화살촉을 사용할 수 있는지에 대한 정보는 거의 발견되지 않았습니다 \arrow.

시행착오를 거쳐 선 중앙에 간단한 화살표를 만들 수 있었습니다.

\tikzset{kb/.style={postaction={decorate,decoration={markings,mark=at position .5 with {\arrow{angle 90};}}}}}

그러나 화살촉의 스타일을 어떻게 변경할 수 있습니까? 즉, 주위에 원이 있거나 두 개의 화살촉이 차례로 있도록 하려면 어떻게 해야 합니까?

답변1

그렇다면 귀하의 질문은 장식으로 사용하기 위해 새로운 종류의 화살표 팁을 정의하는 방법입니다.

새 화살촉의 정의는 명령의 일부로 사용하거나 장식 내부 명령 \draw[->]의 일부로 사용하는 위치와 무관합니다. \arrow새로운 화살표 종류의 정의를 다루는 매뉴얼 부분은 다음과 같습니다.784쪽.

일반적으로 화살표의 임의 모양을 정의하는 것은 낮은 수준의 명령을 사용해야 하기 때문에 어렵습니다 pgf*. 또한 화살표가 스타일을 수용하고 확장 가능하도록 하려면 메타 화살표에 대해 배워야 합니다(785페이지).

그러나 귀하의 질문에서 귀하는 이전에 존재했던 화살표 끝의 조합이기 때문에 생성하기 쉬운 두 가지 특정 예를 제시했습니다.

  1. 주위에 원이 있는 하나의 화살표 머리입니다. 를 통해 기존 latex화살표와 기존 o(원) 화살촉을 결합할 수 있습니다 \pgfarrowsdeclarecombine. 이 명령은 기본적으로 화살촉 하나를 다른 화살촉 뒤에 배치하지만 두 번째 화살촉을 이동하는 오프셋을 지정할 수 있습니다. 이 경우에는 (시행 착오를 통해) -5pt원하는 결과를 생성하는 방법을 찾았습니다 .

  2. 두 개의 화살촉이 차례로 이어집니다. Command는 \pgfarrowsdeclaredouble이를 위해 정확하게 설계되었습니다.

다음 코드를 보세요:

\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing,decorations.markings,arrows}

\pgfarrowsdeclarecombine[-5pt]{circled}{circled}{latex}{latex}{o}{o}
\pgfarrowsdeclaredouble{doubled}{doubled}{stealth}{stealth}

\tikzset{
kb1/.style={postaction={decorate,
   decoration={markings,mark=at position .5 with {\arrow{circled};}}}
   },
kb2/.style={postaction={decorate,
   decoration={markings,mark=at position .5 with {\arrow{doubled};}}}
   },   
}

\begin{document}
\begin{tikzpicture}%
    \draw[kb1] (0,0) -- + (2,0);
    \draw[kb2] (0,.5) -- + (2,0);
\end{tikzpicture}
\end{document}

이는 다음을 생성합니다.

결과

업데이트

OP는 주석에서 화살표 종류가 이면 angle 90원이 너무 작다고 지적했습니다.

그것을 고치는 것은 약간 어렵고 해킹적입니다.

표준 화살표는 사용자 정의할 수 없습니다. 그렇게 하려면 "메타 화살표"를 사용해야 합니다. 이러한 종류에는 arrows.meta화살표 팁의 새 이름이 정의된 최신 버전의 pgf/tikz 및 package가 필요합니다 . 예를 들어 "빈 원" 화살표는 Circle[open]대신 이름이 지정되고 o화살표가 해당 Straight Barb화살표를 대체합니다 angle 90. 보다최신 pgfmanual 202페이지.

그러나 "복합 화살표"의 서로 다른 부분에 서로 다른 옵션을 전달하는 것이 가능한지 여부는 알 수 없습니다. "각도 90"과 "원"에 다른 크기를 부여해야 하는데 어떻게 해야 할지 모르겠습니다.

하지만 해킹을 발견했습니다. 새 메타 화살표를 원에만 사용하고 이전 화살표는 끝 부분 에 남겨두면 arrow 90전달하는 옵션은 \arrow복합 화살표의 "메타" 부분에만 사용되며 이렇게 하면 원 부분만 크기가 조정됩니다.

이 아이디어를 사용하면 다음과 같습니다.

\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing,decorations.markings,arrows,arrows.meta}

\pgfarrowsdeclarecombine[-2mm]{circled}{circled}{angle 90}{angle 90}{Circle[open]}{Circle[open]}
\pgfarrowsdeclaredouble{doubled}{doubled}{angle 90}{angle 90}

\tikzset{
kb1/.style={postaction={decorate,
   decoration={markings,mark=at position .5 with {\arrow{circled[width=3mm,length=3mm]};}}}
   },
kb2/.style={postaction={decorate,
   decoration={markings,mark=at position .5 with {\arrow{doubled};}}}
   },   
}

\begin{document}
\begin{tikzpicture}%
    \draw[kb1] (0,0) -- + (2,0);
    \draw[kb2] (0,.5) -- + (2,0);
\end{tikzpicture}
\end{document}

결과:

결과

관련 정보