
일부 tikz 그림을 그룹화하고 pic
이를 위해 a를 사용하고 있습니다. 또한 사진을 일반 노드인 것처럼 사용하고 연결 화살표를 그리고 싶습니다. 경계 상자 중앙을 따라 사진을 수평으로 정렬하려면 어떻게 해야 합니까? 수치적인 좌표를 지정하는 것을 피하고 싶습니다. 내 코드의 축소 버전은 다음과 같습니다.
right = of X
지정하면 그림의 경계 상자 좌표가 해당 지점에 배치되는 것으로 보이지만 저는 그 지점에 (0,0)
있는 것이 더 좋습니다 . (0, 0.5 * bounding box height)
몇 가지 옵션을 넣어 보았지만 anchor
아무런 효과가 없는 것 같습니다. 사진이 위치할 때 사진의 경계 상자 크기를 알 수 없는 것 같습니다.
\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
inner sep=0mm,
stack/.pic={
\foreach \i in {#1}
\draw [pic actions] (0+\i,0+\i) rectangle (1+\i,1+\i);
},
squares/.style={
black,
fill=orange!75,
},
edge/.style={
->,
black,
ultra thick,
shorten <=1mm,
shorten >=1mm,
},
]
\pic [
squares,
local bounding box=A,
] {stack={0,0.2,...,1}};
\pic [
squares,
local bounding box=B,
scale=0.5,
right= of A,
] {stack={0,0.2,...,1}};
\pic [
squares,
local bounding box=C,
scale=0.25,
right= of B,
] {stack={0,0.2,...,1}};
\draw [edge] (A) -- (B);
\draw [edge] (B) -- (C);
\end{tikzpicture}
\end{document}
답변1
무언가를 그리기 전에 크기를 계산해야 한다면 저장 상자를 사용해야 합니다. 아니면 두 번 그리세요.
저장 상자를 사용할 때 [tikz]
로 바꾸는 것을 참고하세요 .\usepackage{tikz}
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\newsavebox{\boxa}
\newsavebox{\boxb}
\newsavebox{\boxc}
\begin{document}
\savebox{\boxa}{\begin{tikzpicture}[
inner sep=0mm,
stack/.pic={
\foreach \i in {#1}
\draw [pic actions] (0+\i,0+\i) rectangle (1+\i,1+\i);
},
squares/.style={
black,
fill=orange!75,
},
]
\pic [
squares,
] {stack={0,0.2,...,1}};
\end{tikzpicture}}%
\savebox{\boxb}{\begin{tikzpicture}[
inner sep=0mm,
stack/.pic={
\foreach \i in {#1}
\draw [pic actions] (0+\i,0+\i) rectangle (1+\i,1+\i);
},
squares/.style={
black,
fill=orange!75,
},
]
\pic [
squares,
scale=0.5,
] {stack={0,0.2,...,1}};
\end{tikzpicture}}%
\savebox{\boxc}{\begin{tikzpicture}[
inner sep=0mm,
stack/.pic={
\foreach \i in {#1}
\draw [pic actions] (0+\i,0+\i) rectangle (1+\i,1+\i);
},
squares/.style={
black,
fill=orange!75,
},
]
\pic [
squares,
scale=0.25,
] {stack={0,0.2,...,1}};
\end{tikzpicture}}%
\begin{tikzpicture}[
inner sep=0mm,
edge/.style={
->,
black,
ultra thick,
shorten <=1mm,
shorten >=1mm,
},
]
\node (A) {\usebox\boxa};
\node[right=of A] (B) {\usebox\boxb};
\node[right=of B] (C) {\usebox\boxc};
\draw [edge] (A) -- (B);
\draw [edge] (B) -- (C);
\end{tikzpicture}
\end{document}
답변2
\tikz \pic ...
의 "텍스트" 섹션 내부에 tikz 그림(이 경우)을 배치할 수 있다는 것이 밝혀졌습니다 \node
. 아마도 tikz는 이미 노드의 텍스트 내용을 상자에 저장했기 때문에(tikz가 중앙에 노드를 고정하는 방법을 어떻게 알 수 있을까요?), 우리는 이를 재사용하여 스스로 \savebox
춤을 추는 것을 피할 수 있습니다.
\documentclass[tikz,border=1mm]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
inner sep=0mm,
stack/.pic={
\foreach \i in {#1}
\draw [pic actions] (0+\i,0+\i) rectangle (1+\i,1+\i);
},
squares/.style={
fill=orange!75,
},
edge/.style={
->,
ultra thick,
shorten <=1mm,
shorten >=1mm,
},
]
\node (A) { \tikz \pic[squares] {stack={0,0.2,...,1}}; };
\node [right=of A] (B) { \tikz \pic[squares, scale=0.5] {stack={0,0.2,...,1}}; };
\node [right=of B] (C) { \tikz \pic[squares, scale=0.25] {stack={0,0.2,...,1}}; };
\draw [edge] (A) -- (B);
\draw [edge] (B) -- (C);
\end{tikzpicture}
\end{document}