여러 \pic 객체의 수평 정렬

여러 \pic 객체의 수평 정렬

일부 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}

여기에 이미지 설명을 입력하세요

관련 정보