perataan horizontal beberapa objek \ pic

Aug 22 2020

Saya ingin mengelompokkan beberapa gambar tikz bersama-sama, dan saya menggunakan a picuntuk ini. Saya selanjutnya ingin menggunakan foto-foto itu seolah-olah itu adalah simpul biasa, dan menggambar beberapa panah penghubung. Bagaimana saya bisa menyejajarkan foto secara horizontal di sepanjang bagian tengah kotak pembatasnya? Saya ingin menghindari menentukan koordinat numerik. Versi potongan kode saya ada di bawah.

Tampaknya menentukan right = of Xmenempatkan (0,0)koordinat kotak pembatas gambar pada titik itu, tetapi saya lebih suka (0, 0.5 * bounding box height)pada titik itu. Saya mencoba memasukkan beberapa anchoropsi, tetapi ini tampaknya tidak berpengaruh apa pun - saya kira ukuran kotak pembatas gambar tidak diketahui pada saat foto diposisikan.

\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}

Jawaban

3 JohnKormylo Aug 22 2020 at 21:12

Jika Anda perlu menghitung ukuran sesuatu SEBELUM Anda menggambarnya, Anda perlu menggunakan kotak penyimpanan. Entah itu atau gambar dua kali.

Perhatikan mengganti [tikz]dengan \usepackage{tikz}saat menggunakan kotak penyimpanan.

\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}
Graham501617 Aug 23 2020 at 13:08

Ternyata seseorang dapat menempatkan gambar tikz ( \tikz \pic ...dalam hal ini) di dalam bagian "teks" dari a \node. Mungkin tikz sudah menyimpan konten teks node ke dalam sebuah kotak (bagaimana lagi tikz tahu bagaimana cara menghubungkan node di pusatnya?), Jadi kita bisa menggunakannya kembali untuk menghindari melakukan \saveboxtarian kita sendiri .

\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}