
Mithilfe des folgenden Codes habe ich manuell dafür gesorgt, dass die \foreach-Schleife an der Position des Mittelpunkts von Knoten B beginnt.
Wie kann ich die \foreach-Schleife automatisch in der Mitte des Knotens B starten, sodass, wenn ich den Code bearbeiten möchte, um ihre Position zu ändern, die \foreach-Schleife an der neuen Position startet, ohne dass ich ihre Startposition bei (3,\X) neu definieren muss.
\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{verbatim}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{frame}[t]
\frametitle{}
\newsavebox{\recBBr}
\savebox{\recBBr}{
\begin{tikzpicture}[scale=.6]
\draw [thick, black, fill=red!60!white] (0,0) rectangle +(1,1.24*1.68);
\end{tikzpicture}}
\begin{tikzpicture}[scale=.8, transform shape]
\draw [line width=.4mm, black, dashed](0,0) -- (11,0) node [pos=.28] (B) {\Large B};
\begin{scope}[on background layer]
\foreach \X in {0,1.5,3,4.5}
{\node[blue, yshift=.64cm] (y-\X) at (3,\X){\usebox{\recBBr}};}
\end{scope}
\end{tikzpicture}
\end{frame}
\end{document}
Antwort1
Option 1
Verwenden Sie die Koordinate (B|-0,\X)
, die den Schnittpunkt zwischen einer vertikalen Linie durch (B)
und einer horizontalen Linie durch findet (0,\X)
:
\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{verbatim}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{frame}[t]
\frametitle{}
\newsavebox{\recBBr}
\savebox{\recBBr}{% <-- important so you don't get extra space in the box
\begin{tikzpicture}[scale=.6]
\draw [thick, black, fill=red!60!white] (0,0) rectangle +(1,1.24*1.68);
\end{tikzpicture}}
\begin{tikzpicture}[scale=.8, transform shape]
\draw [line width=.4mm, black, dashed](0,0) -- (11,0) node [pos=.28,font=\Large] (B) {B};
\begin{scope}[on background layer]
\foreach \X in {0,1.5,3,4.5}
{\node[blue,yshift=.64cm] (y-\X) at (B|-0,\X){\usebox{\recBBr}};}
\end{scope}
\end{tikzpicture}
\end{frame}
\end{document}
Option 2
Verwendung foreach
innerhalb eines Pfades, beginnend bei B
:
\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{verbatim}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{frame}[t]
\frametitle{}
\newsavebox{\recBBr}
\savebox{\recBBr}{% <-- important so you don't get extra space in the box
\begin{tikzpicture}[scale=.6]
\draw [thick, black, fill=red!60!white] (0,0) rectangle +(1,1.24*1.68);
\end{tikzpicture}}
\begin{tikzpicture}[scale=.8, transform shape]
\draw [line width=.4mm, black, dashed](0,0) -- (11,0) node [pos=.28,font=\Large] (B) {B};
\begin{scope}[on background layer]
\path
(B)
\foreach \X in {1,...,4} {
node[blue,yshift=.64cm] (y-\X) {\usebox{\recBBr}}
++(0,1.5)
};
\end{scope}
\end{tikzpicture}
\end{frame}
\end{document}
Beachten Sie, dass Sie dadurch eine natürlichere Benennung der (y-N)
Knoten erhalten und diese zudem besser lesbar ist. Dies ++(0,1.5)
gibt die Verschiebung seit der letzten Koordinate in der Vergangenheit an, was intuitiver erscheint und einfacher zu ändern ist, als die y
Werte manuell in der Liste der Schleife anzugeben.
In beiden Fällen hatte die Box einen zusätzlichen anfänglichen Zwischenraum, der zu einer unerwünschten X-Verschiebung in den rechteckigen Boxen geführt hätte. Dieser wurde durch Kommentieren der neuen Zeile entfernt.
Antwort2
Wenn das Problem nur darin besteht, das Bild zu zeichnen, das Sie in Ihrer Frage zeigen, würde ich Ihr Bild folgendermaßen zeichnen:
- ziehe zuerst rote Kästchen
- Danach bestimmen Sie die gestrichelte Startlinie relativ zur Südkoordinate der Lovest-Box
- in der Zeichnung ist praktisch zu verwenden
chains
undpositioning
Bibliotheken - zum Zeichnen von roten Kästen ist dies nicht erforderlich
savebox
. Stattdessen ist es einfacher, den Stil für rote Kästen zu definieren:
\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{verbatim}
\usepackage{tikz}
\usetikzlibrary{chains,
positioning}
\begin{document}
\begin{frame}[t]
\frametitle{}
\begin{tikzpicture}[
node distance = 2mm and 32mm,
start chain = going below,
box/.style = {draw, thick, fill=red!60!white,
minimum width=6mm, minimum height=12mm,
inner sep=0pt, outer sep=0mm,
on chain}
]
\foreach \i in {1,...,4}
\node (n\i) [box] {};
\coordinate[left=of n4.south] (a);
\draw [line width=.4mm, dashed]
(a) -- ++ (11,0);
\node[font=\Large] at (n4.south) {B};
\end{tikzpicture}
\end{frame}
\end{document}