나는 어리석은 문제에 직면하고 있습니다. 마지막 두 상자를 연결할 수 없는 것 같습니다. 그리고 나도 갖고 싶어 |.| 상자 중 하나에 있지만 어떻게 완료되었는지 모르겠습니다. 누군가 나를 도와줄 수 있나요?
\documentclass{standalone}
\usepackage{amsmath,amscd,amssymb,latexsym,upref} %stmaryrd
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usetikzlibrary{arrows.meta,
backgrounds,
chains,
fit,
quotes}
\begin{document}
\resizebox{16cm}{2cm}{%
\begin{tikzpicture}[auto,
node distance = 12mm,
start chain = A going right,
block/.style = {draw, fill=white,
text width=#1, minimum height=10mm, align=center,
outer sep=0pt, on chain},
block/.default = 18mm,
container/.style = {draw, fill=gray!50,
inner xsep=2mm, inner ysep=7mm},
]
\node [block=14mm] {a}; % block name is A-1
\node [block=12mm] {b};
\node [block=22mm] {c};
\node [block=15mm] {d};
\node [block=22mm] {e}; % block name is A-4
\node [block=22mm] {f}; % block name is A-6
\node [block=12mm] {g};
\node [block=24mm] {h}; % block name is A-8
\node [block=24mm] {i}; % block name is A-8
%
\scoped[on background layer]
\node [container, label={[anchor=north]joined},
fit= (A-5) (A-6)] (container) {};
\draw [-Stealth]
(A-1) edge (A-2) % text on arrow is between " and "
(A-2) edge (A-3)
(A-3) edge (A-4)
(A-4) edge (A-5)
(A-5) edge (A-6)
(A-6) edge (A-7);
(A-7) edge (A-8);
(A-8) edge (A-8);
\end{tikzpicture}
}
\end{document}
답변1
i로 표시된 마지막 블록에는 이름이 있으며 A-9
, 세미콜론을 넣으면 새 그리기 명령을 추가해야 합니다. 귀하의 모듈로 바 요청을 올바르게 이해했기를 바랍니다.
\documentclass{standalone}
\usepackage{amsmath,amscd,amssymb,latexsym,upref} %stmaryrd
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usetikzlibrary{arrows.meta,
backgrounds,
chains,
fit,
quotes}
\begin{document}
\resizebox{16cm}{2cm}{%
\begin{tikzpicture}[auto,
node distance = 12mm,
start chain = A going right,
block/.style = {draw, fill=white,
text width=#1, minimum height=10mm, align=center,
outer sep=0pt, on chain},
block/.default = 18mm,
container/.style = {draw, fill=gray!50,
inner xsep=2mm, inner ysep=7mm},
]
\node [block=14mm] {a}; % block name is A-1
\node [block=12mm] {b};
\node [block=22mm] {c};
\node [block=15mm] {d};
\node [block=22mm] {e~$|.|$}; % block name is A-4
\node [block=22mm] {f}; % block name is A-6
\node [block=12mm] {g};
\node [block=24mm] {h}; % block name is A-8
\node [block=24mm] {i}; % block name is A-9
%
\scoped[on background layer]
\node [container, label={[anchor=north]joined},
fit= (A-5) (A-6)] (container) {};
\draw [-Stealth]
(A-1) edge (A-2) % text on arrow is between " and "
(A-2) edge (A-3)
(A-3) edge (A-4)
(A-4) edge (A-5)
(A-5) edge (A-6)
(A-6) edge (A-7)
(A-7) edge (A-8)
(A-8) edge (A-9);
\end{tikzpicture}
}
\end{document}
답변2
- 문제의 mwe는 나에게 매우 친숙합니다 :-)
- MWE에서 사용하는 코드를 분석해야 합니다. 그러면 마지막 노드의 이름이
A-9
(A-8
mwe에 언급한 것과는 다릅니다) - 예를 들어 가장 일반적인 크기의 경우 기본 크기로 선택해야 하며
block/.default=22mm
나머지 경우에만 원하는 텍스트 너비를 작성해야 합니다(정말 다른 노드 크기가 필요합니까? 저는18mm
nad 만 사용하겠습니다9mm
. 아래 mwe 참조). - 텍스트로 노드에 작성할 수 있는 수학 표현식(예: $|\cdot|$)
*사용하지 마세요
\resizebox{16cm}{...
. 이미지의 모든 크기를 조정하고 이미지를 보기 흉하게 만듭니다. 오히려 노드 너비와 노드 거리의 합이 16cm가 되도록 다시 계산합니다.14mm + 12mm + 22mm + 15mm + 22mm + 22mm +12mm +24mm +24mm + 9x2x(내부 간격) +8*(노드 거리)=
318 mm
거의 두 배 정도 긴 것입니다. 모든 이미지 요소 길이를 절반으로 줄이고(아래 mwe 참조) 더 작은 글꼴 크기를 사용하는 것이 좋습니다
footnotesize
. 예를 들면 다음과 같습니다.
mwe에서는 노드 사이의 화살표에 텍스트를 추가하지 않습니다. 이 경우 라이브러리 join
의 매크로를 사용하여 그릴 수 있습니다.chains
위의 의견과 제안을 고려하면 귀하의 의견은 다음과 같습니다.
\documentclass[margin=3mm]{standalone}
\usepackage{amsmath,amscd,amssymb,latexsym,upref} %stmaryrd
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\usetikzlibrary{arrows.meta,
backgrounds,
chains,
fit,
quotes}
\begin{document}
\begin{tikzpicture}[
node distance = 7mm,
start chain = A going right,
block/.style = {draw, fill=white,
text width=#1, minimum height=10mm, align=center,
font=\footnotesize, inner sep=1mm, outer sep=0pt,
on chain, join=by -Stealth},
block/.default = 12mm,
container/.style = {draw, fill=gray!50,
inner xsep=2mm, inner ysep=7mm},
]
\node [block=6mm] {a}; % block name is A-1
\node [block=6mm] {b};
\node [block] {$|\cdot|$};
\node [block=6mm] {d};
\node [block] {e}; % block name is A-4
\node [block] {f}; % block name is A-6
\node [block=6mm] {g};
\node [block] {h};
\node [block] {i}; % block name is A-9
%
\scoped[on background layer]
\node [container, label={[anchor=north]joined},
fit= (A-5) (A-6)] (container) {};
\end{tikzpicture}
\end{document}
메모: 노드 사이에 화살표에 레이블을 지정하려면 join
블록 스타일 정의와 이미지 추가에서 옵션을 제거해야 합니다.
\draw [-Stealth]
(A-1) edge ["$\alpha$"] (A-2)
(A-2) edge ["$\beta$"] (A-3)
(A-3) edge ["$\gamma$"] (A-4)
(A-4) edge ["$\epsilon$"] (A-5)
(A-5) edge ["$\zeta$"] (A-6)
(A-6) edge ["$\theta$"] (A-7)
(A-7) edge ["$\iota$"] (A-8)
(A-8) edge ["$\kappa$"] (A-9);
이미지 옵션에 다음을 추가합니다.
every edge quote/.append style = {font=\footnotesize}
이미지를 그리는 데는 많은 인내심과 정확성, 시간이 필요합니다.