"확장" 화살표가 있는 UML 다이어그램과 같이 "기본" 블록에 연결되어야 하는 여러 블록이 있습니다. (저는 TeX 없이 그리는 것만으로 이 예제를 만들었습니다.)
|-
화살표의 공통 라인에 대해 이 코드를 사용하여 (270:10mm)
아래로 이동하려고 합니다 10mm
.
\tikzset{node distance=1.6cm, auto, every text node part/.style={align=center, font={\sffamily\small}}}
\tikzstyle{block} = [draw=myblack, fill=white, inner sep=0.3cm, outer sep=0.1cm, thick]
\begin{tikzpicture}
\node[block] (base) {Base};
\node[block, below=of base] (impl2) {Impl2};
\node[block, left=of impl2] (impl1) {Impl1};
\node[block, right=of impl2] (impl3) {Impl3};
\draw[->] (impl1.north) |- (270:10mm) --++ (base.south);
\draw[->] (impl2.north) |- (270:10mm) --++ (base.south);
\draw[->] (impl3.north) |- (270:10mm) --++ (base.south);
\end{tikzpicture}
하지만 나는이 사진을 받고 있어요 :
여러 화살표를 공통 선으로 올바르게 결합하는 방법은 무엇입니까? 아마도 블록의 양과 위치를 변경해야 할 것이므로 고정되거나 하드 코딩된 선 좌표가 작동하지 않을 것입니다.
답변1
나는 TikZ 라이브러리를 사용하여 이렇게 하고 싶습니다 arrows
.
\documentclass[border=1mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{chains,arrows}
\tikzset{
node distance=1.6cm,
auto,
every text node part/.style={
align=center,
font={\sffamily\small},
}
}
\tikzstyle{block}=[
draw=black,
fill=white,
inner sep=0.3cm,
outer sep=0cm,
thick,
]
\begin{document}
\begin{tikzpicture}
\node[block] (base) {Base};
\node[block, below=of base] (impl2) {Impl2};
\node[block, left= of impl2] (impl1) {Impl1};
\node[block, right=of impl2] (impl3) {Impl3};
\draw (impl1.north) |- (270:10mm) -| (base.south);
\draw[-latex] (impl2.north) -- (base.south);
\draw (impl3.north) |- (270:10mm) -| (base.south);
\end{tikzpicture}
\end{document}
편집하다:큰 문제는 아니지만 화살표를 확대하면 왼쪽 및 오른쪽 노드(화살표가 없음)에서 나오는 연결이 화살표 끝의 시각적 방식을 변경하는 것을 볼 수 있습니다. 아래를 참조하세요.
따라서 이 경우 예를 들어 연결의 끝점을 약간 아래로 이동하면 ([yshift=-1pt]base.south)
가장자리가 프레임에 닿지 않고 화살표 끝이 더 날카로워집니다.
\draw (impl1.north) |- (270:10mm) -| ([yshift=-1pt]base.south);
\draw[-latex] (impl2.north) -- (base.south);
\draw (impl3.north) |- (270:10mm) -| ([yshift=-1pt]base.south);
답변2
제가 제안하는 것은 다음과 같습니다. 코드를 쉽게 읽을 수 있도록 n
모양의 노드가 coordinate
"교차로"에 정의됩니다. 특수 화살표는 arrows.meta
Ti 에 의존하는 다음 스타일로 수행됩니다.케이Z 라이브러리:
extends/.style={->, >={Triangle[open, width=0.2cm, length=0.2cm]}}
더 이상 \tikzstyle
사용되지 않습니다. 스타일 block/.style={...}
을 정의하는 데 사용합니다 block
(아래 참조). outer sep=0
내 block
스타일에서는 연결선이 직사각형 테두리 앞에서 멈추지 않도록 합니다. auto
여기서는 사용되지 않기 때문에 옵션을 제거했습니다 .
\documentclass[tikz, border=2mm]{standalone}
\usetikzlibrary{arrows.meta, positioning}
\begin{document}
\begin{tikzpicture}[
node distance=1.6cm,
every text node part/.style={align=center, font={\sffamily\small}},
block/.style={draw=black, fill=white, inner sep=0.3cm, outer sep=0, thick},
extends/.style={->, >={Triangle[open, width=0.2cm, length=0.2cm]}},
]
\node[block] (base) {Base} coordinate[below=0.7cm of base.south] (n);
\node[block, below=of base] (impl2) {Impl2};
\node[block, left=of impl2] (impl1) {Impl1};
\node[block, right=of impl2] (impl3) {Impl3};
\draw (impl1.north) |- (n);
\draw (impl2.north) |- (n);
\draw (impl3.north) |- (n);
\draw[extends] (n) -- (base.south);
\end{tikzpicture}
\end{document}
답변3
귀하의 다이어그램은 반대 화살표 방향으로 나무 위에 남아 있습니다.
forest
옵션이 포함된 패키지를 사용하면 간단하게 그릴 수 있습니다 forked edge
.
\documentclass[margin=3mm]{standalone}
\usepackage[edges]{forest}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{forest}
for tree = {
% nodes
draw,
inner sep = 3mm,
font = \sffamily\small,
% tree
forked edge,
l sep = 12mm, % vertical distances between nodes
fork sep = 6mm, % distances to connection point
s sep = 12mm, % horizontal distances between nodes
edge ={Stealth-}
}% end for tree
[Base
[Impl1]
[Impl2]
[Impl3]
]
\end{forest}
\end{document}