아마도 TikZ의 위치 지정이 어떻게 작동하는지에 대한 부적절한 질문일 것입니다. 저는 (단일 게이트 수준에서 시작하여) 몇 가지 전기 관련 내용을 그리려고 하는데 많은 내용이 계속해서 반복되기 때문에 이를 그리기 위한 매크로를 정의하고 싶습니다. 나는 이 간단한 것을 가지고 있습니다 :
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\def\halfadderplain{%
\draw +(0,2) -- +(3,2);
\draw +(0,1) -- +(3,1);
\draw +(0,0) -- +(3,0);
\draw +(0.5,-0.5) [fill=white] rectangle +(2.5,2.5);
\node at +(1.5,1) {QHA};
}
\begin{tikzpicture}
\coordinate (0,0);
\halfadderplain;
\coordinate (3,3);
\halfadderplain;
\end{tikzpicture}
\end{document}
다음 작업을 수행하고 싶습니다. 시작 좌표를 설정하고 매크로를 호출하여 구성 요소를 그린 다음 좌표를 다른 곳에 설정하고 그리기를 다시 호출합니다. 나는 다음과 같이 두 개의 구성 요소를 그려서 끝내고 싶습니다.
그러나 결과는 다음과 같습니다.
나는 \newcommand를 시도하고 \halfadderplain을 매개변수화하여 좌표를 설정했는데 제대로 작동했습니다. 또한 위 코드의 \halfadderplain을 해당 정의로 대체하려고 시도했지만 아무 일도 일어나지 않았으므로 이것이 매크로의 문제가 아니라 TikZ가 위치를 계산하는 방법을 오해한 것일 뿐이라고 생각합니다. 누군가 도와주실 수 있나요?
(이런 종류의 그림을 그리기 위해 특정 라이브러리를 사용하는 것은 나에게 해결책이 아닙니다.)
답변1
반가산기 장치를 수동으로 배치해야 하는 더티 솔루션이 있습니다. TikZ 모양을 사용하면 더 영리한 솔루션이 가능해야 합니다...
편집: Peter Grill의 의견에 따라 두 번째 (쓸모없는) 두 번째 인수를 제거했습니다.
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\def\halfadderplain#1{%
\begin{scope}[xshift=#1]
\draw +(0,2) -- +(3,2);
\draw +(0,1) -- +(3,1);
\draw +(0,0) -- +(3,0);
\draw +(0.5,-0.5) [fill=white] rectangle +(2.5,2.5);
\node at +(1.5,1) {QHA};
\end{scope}
}
\begin{tikzpicture}
\halfadderplain{0};
\halfadderplain{3cm};
\end{tikzpicture}
\end{document}
답변2
모든 경로는 서로를 알지 못합니다. 지정한 첫 번째 좌표는 \coordinate …;
다음 경로에 연결되지 않습니다(위치 지정 제외).
하나의 경로에서 이를 수행할 수 있습니다.
\documentclass[tikz]{standalone}
\begin{document}
\def\halfadderplain{
\foreach \y in {0,1,2} {+(0,\y) -- +(0.5,\y) +(2.5,\y) -- +(3,\y)}
+(0.5,-0.5) rectangle +(2.5,2.5)
node [midway] {QHA}
}
\begin{tikzpicture}
\draw (0,0) \halfadderplain;
\draw (3,0) \halfadderplain;
\end{tikzpicture}
\end{document}
또는 스타일로 insert path
:
\documentclass[tikz]{standalone}
\begin{document}
\tikzset{
halfadderplain/.style={
insert path={
\foreach \y in {0,1,2} {+(0,\y) -- +(0.5,\y) +(2.5,\y) -- +(3,\y)}
+(0.5,-0.5) rectangle +(2.5,2.5)
node [midway] {QHA}
}
}
}
\begin{tikzpicture}
\draw (0,0) [halfadderplain];
\draw (3,0) [halfadderplain];
\end{tikzpicture}
\end{document}
산출
답변3
코드를 줄이는 것이 가능합니다. 다른 답변과 같이 노드를 배치하는 방법은 사용하는 것입니다 xshift
. 모든 좌표가 수정됩니다.
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[qha/.style={minimum width= 2cm, minimum height= 3cm,draw,fill=white}]
\draw \foreach \y in {0,...,2} {(0,\y) -- (6,\y)};
\foreach \y in {0,3} \node[qha,xshift=\y cm] at (1.5,1) {QHA};
\end{tikzpicture}
\end{document}
다른 스타일의 변형은 다음과 같습니다.
\begin{tikzpicture}[qha/.style={minimum width= 2cm, minimum height= 3cm,draw,fill=white,xshift=#1}]
\draw \foreach \y in {0,...,2} {(0,\y) -- (6,\y)};
\foreach \y in {0,3} \node[qha=\y cm] at (1.5,1) {QHA};
\end{tikzpicture}
\foreach
참고: 두 개의 노드만 있는 두 번째를 피하는 것이 더 좋습니다 .