
다음 코드를 사용하여 노드 B의 중심 위치에서 \foreach 루프가 시작되도록 수동으로 만들었습니다.
노드 B의 중심에서 \foreach 루프를 자동으로 시작하여 위치를 변경하기 위해 코드를 편집하려는 경우 시작 위치를 재정의할 필요 없이 \foreach 루프가 새 위치에서 시작되도록 하려면 어떻게 해야 합니까? (3,\X).
\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}
답변1
옵션 1
(B|-0,\X)
수직선 (B)
과 수평선 사이의 교차점을 찾는 좌표를 사용합니다 (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}
옵션 2
foreach
다음에서 시작하는 경로 내부에서 사용하십시오 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}
이렇게 하면 노드에 더 자연스러운 이름을 지정할 수 (y-N)
있으며 읽기에도 더 쉽습니다. 는 과거의 마지막 좌표 이후의 이동을 나타내며, 루프 목록에 값을 ++(0,1.5)
수동으로 제공하는 것보다 더 직관적이고 변경하기 쉽습니다 .y
두 경우 모두 상자에는 직사각형 상자에서 원하지 않는 x-shift가 발생하는 추가 초기 공간이 있었습니다. 개행 문자를 주석 처리하여 제거되었습니다.
답변2
문제가 질문에 표시되는 이미지를 그리는 것이라면 다음과 같은 방법으로 이미지를 그릴 것입니다.
- 먼저 빨간색 상자를 그립니다.
- 가장 좋아하는 상자의 남쪽 좌표에 상대적인 시작 점선을 결정한 후
- 그리기에 사용하기 편리
chains
하고positioning
라이브러리 - 빨간색 상자를 그리는 데는 필요하지 않습니다
savebox
. 대신 빨간색 상자의 스타일을 정의하는 것이 더 간단합니다.
\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}