
여기저기 둘러본 끝에 몇 가지를 발견했습니다.해결책tikz
패키지 와 동일한 문서의 라이브러리를 사용합니다 circuitkz
. 아니면 그랬다고 생각했어요.
나는 tikz 로직의 시각적 요소(및 다중 입력 로직 게이트를 갖는 기능)와 Circuitikz의 트랜지스터를 좋아합니다.
위에서 언급한 솔루션을 시도했는데 다음과 같이 작동합니다.
\documentclass{article}
\usepackage{circuitikz}
\usepackage{tikz}
\begin{document}
\begin{figure}[htbp]
\centering
\begingroup
\usetikzlibrary{circuits.logic.US}
\usetikzlibrary{circuits.ee.IEC}
\begin{tikzpicture}[circuit logic US, circuit ee IEC, huge circuit symbols, set resistor graphic = var resistor IEC graphic]
\matrix[column sep=10mm, row sep=10mm,anchor=center]
{
\node [not gate] (not1) {}; \\
\node [not gate] (not2) {}; \\
};
\node (a) at ([xshift=-25mm]not1.input) {$V_{in}^+$};
\node [contact] (a1) at ([xshift=-10mm]not1.input) {};
\node (b) at ([xshift=-25mm]not2.input) {$V_{in}^-$};
\node [contact] (b1) at ([xshift=-10mm]not2.input) {};
\node (x) at ([xshift=25mm]not1.output) {$V_{out}^-$};
\node [contact] (x1) at ([xshift=10mm]not1.output) {};
\node (z) at ([xshift=25mm]not2.output) {$V_{out}^+$};
\node [contact] (z1) at ([xshift=10mm]not2.output) {};
\node (en) at ([xshift=-30mm]$(not1.south)!0.5!(not2.north)$) {$EN$};
\node [contact] (en1) at ($(not1.south)!0.5!(not2.north)$) {};
\draw (en1.center) -- (not1.south) node[below right] (ennot1) {$E$};
\draw (en1.center) -- (not2.north) node[above right] (ennot2) {$E$};
\node [resistor={info'={$R$}}] (res1) at ([xshift=2mm, yshift=10mm]not1.north){};
\node [resistor={info={$R$}}] (res2) at ([xshift=2mm, yshift=-10mm]not2.south){};
\draw (a.east) -- (a1.center);
\draw (a1.center) |- (res1.input);
\draw (a1.center) -- (not1.input);
\draw (b.east) -- (b1.center);
\draw (b1.center) |- (res2.input);
\draw (b1.center) -- (not2.input);
\draw (en.east) -- (en1.center);
\draw (not1.output) -- (x1.center);
\draw (x1.center) |- (res1.output);
\draw (x1.center) |- (x.west);
\draw (not2.output) -- (z1.center);
\draw (z1.center) |- (res2.output);
\draw (z1.center) |- (z.west);
\end{tikzpicture}
\endgroup
\caption{Some NOT gates with enable and resistors.}
\end{figure}
\begin{figure}[htbp]
\begin{center}
\begin{circuitikz}[scale=0.7, transform shape]
\draw[thick,->] (0,0.5) --(1,0.5) node[anchor=south east] {$i(x,t)$};
\node[] at (0,-1) {$v(x,t)$};
\draw
(0,0) node[anchor=east] {+}
to[short, o-] (1,0)
to[R=$Rx$] (3,0)
to[L=$Lx$] (5,0)
(5,-2) to[R=$Gx$, *-*] (5,0)
(5,0) to[short] (7,0)
(7,-2) to[C=$Cx$, *-*] (7,0)
(5,-2) to[short] (7,-2)
(0,-2) node[anchor=east]{-}
to[short, o-] (5,-2)
(9,0) node[anchor=west]{+}
to[short, o-] (7,0)
(9,-2) node[anchor=west]{-}
to[short, o-] (7,-2)
;
\draw[thick,->] (7,0.5) --(9,0.5) node[anchor=south east] {$i(x+ x,t)$};
\node[] at (9,-1) {$v(x+ x,t)$};
\end{circuitikz}
\caption{Infinitesimal section of a transmission line.}
\label{fig:transmission_line_section}
\end{center}
\end{figure}
\end{document}
하지만 으로 다른 그림을 추가하려고 하면 tikzpicture
오류와 함께 종료됩니다. 예를 들어:
\documentclass{article}
\usepackage{circuitikz}
\usepackage{tikz}
\begin{document}
\begin{figure}[htbp]
\centering
\begingroup
\usetikzlibrary{circuits.logic.US}
\usetikzlibrary{circuits.ee.IEC}
\begin{tikzpicture}[circuit logic US, circuit ee IEC, huge circuit symbols, set resistor graphic = var resistor IEC graphic]
\matrix[column sep=10mm, row sep=10mm,anchor=center]
{
\node [not gate] (not1) {}; \\
\node [not gate] (not2) {}; \\
};
\node (a) at ([xshift=-25mm]not1.input) {$V_{in}^+$};
\node [contact] (a1) at ([xshift=-10mm]not1.input) {};
\node (b) at ([xshift=-25mm]not2.input) {$V_{in}^-$};
\node [contact] (b1) at ([xshift=-10mm]not2.input) {};
\node (x) at ([xshift=25mm]not1.output) {$V_{out}^-$};
\node [contact] (x1) at ([xshift=10mm]not1.output) {};
\node (z) at ([xshift=25mm]not2.output) {$V_{out}^+$};
\node [contact] (z1) at ([xshift=10mm]not2.output) {};
\node (en) at ([xshift=-30mm]$(not1.south)!0.5!(not2.north)$) {$EN$};
\node [contact] (en1) at ($(not1.south)!0.5!(not2.north)$) {};
\draw (en1.center) -- (not1.south) node[below right] (ennot1) {$E$};
\draw (en1.center) -- (not2.north) node[above right] (ennot2) {$E$};
\node [resistor={info'={$R$}}] (res1) at ([xshift=2mm, yshift=10mm]not1.north){};
\node [resistor={info={$R$}}] (res2) at ([xshift=2mm, yshift=-10mm]not2.south){};
\draw (a.east) -- (a1.center);
\draw (a1.center) |- (res1.input);
\draw (a1.center) -- (not1.input);
\draw (b.east) -- (b1.center);
\draw (b1.center) |- (res2.input);
\draw (b1.center) -- (not2.input);
\draw (en.east) -- (en1.center);
\draw (not1.output) -- (x1.center);
\draw (x1.center) |- (res1.output);
\draw (x1.center) |- (x.west);
\draw (not2.output) -- (z1.center);
\draw (z1.center) |- (res2.output);
\draw (z1.center) |- (z.west);
\end{tikzpicture}
\endgroup
\caption{Some NOT gates with enable and resistors.}
\end{figure}
\begin{figure}[htbp]
\centering
\begingroup
\usetikzlibrary{circuits.logic.US}
\usetikzlibrary{circuits.ee.IEC}
\begin{tikzpicture}[circuit logic US, circuit ee IEC, huge circuit symbols, set resistor graphic = var resistor IEC graphic]
\matrix[column sep=10mm, row sep=10mm,anchor=center]
{
\node [not gate] (not1) {}; \\
\node [not gate] (not2) {}; \\
};
\node (a) at ([xshift=-25mm]not1.input) {$V_{in}^+$};
\node [contact] (a1) at ([xshift=-10mm]not1.input) {};
\node (b) at ([xshift=-25mm]not2.input) {$V_{in}^-$};
\node [contact] (b1) at ([xshift=-10mm]not2.input) {};
\node (x) at ([xshift=25mm]not1.output) {$V_{out}^-$};
\node [contact] (x1) at ([xshift=10mm]not1.output) {};
\node (z) at ([xshift=25mm]not2.output) {$V_{out}^+$};
\node [contact] (z1) at ([xshift=10mm]not2.output) {};
\node (en) at ([xshift=-30mm]$(not1.south)!0.5!(not2.north)$) {$EN$};
\node [contact] (en1) at ($(not1.south)!0.5!(not2.north)$) {};
\draw (en1.center) -- (not1.south) node[below right] (ennot1) {$E$};
\draw (en1.center) -- (not2.north) node[above right] (ennot2) {$E$};
\node [resistor={info'={$R$}}] (res1) at ([xshift=2mm, yshift=10mm]not1.north){};
\node [resistor={info={$R$}}] (res2) at ([xshift=2mm, yshift=-10mm]not2.south){};
\draw (a.east) -- (a1.center);
\draw (a1.center) |- (res1.input);
\draw (a1.center) -- (not1.input);
\draw (b.east) -- (b1.center);
\draw (b1.center) |- (res2.input);
\draw (b1.center) -- (not2.input);
\draw (en.east) -- (en1.center);
\draw (not1.output) -- (x1.center);
\draw (x1.center) |- (res1.output);
\draw (x1.center) |- (x.west);
\draw (not2.output) -- (z1.center);
\draw (z1.center) |- (res2.output);
\draw (z1.center) |- (z.west);
\end{tikzpicture}
\endgroup
\caption{Some NOT gates with enable and resistors.}
\end{figure}
\begin{figure}[htbp]
\begin{center}
\begin{circuitikz}[scale=0.7, transform shape]
\draw[thick,->] (0,0.5) --(1,0.5) node[anchor=south east] {$i(x,t)$};
\node[] at (0,-1) {$v(x,t)$};
\draw
(0,0) node[anchor=east] {+}
to[short, o-] (1,0)
to[R=$Rx$] (3,0)
to[L=$Lx$] (5,0)
(5,-2) to[R=$Gx$, *-*] (5,0)
(5,0) to[short] (7,0)
(7,-2) to[C=$Cx$, *-*] (7,0)
(5,-2) to[short] (7,-2)
(0,-2) node[anchor=east]{-}
to[short, o-] (5,-2)
(9,0) node[anchor=west]{+}
to[short, o-] (7,0)
(9,-2) node[anchor=west]{-}
to[short, o-] (7,-2)
;
\draw[thick,->] (7,0.5) --(9,0.5) node[anchor=south east] {$i(x+ x,t)$};
\node[] at (9,-1) {$v(x+ x,t)$};
\end{circuitikz}
\caption{Infinitesimal section of a transmission line.}
\label{fig:transmission_line_section}
\end{center}
\end{figure}
\end{document}
내가 뭔가 잘못하고 있는 걸까요? 라이브러리가 그룹에만 선언되어 있으면 다른 그룹에는 선언할 수 없나요? 선언된 라이브러리의 범위를 제한하는 더 나은 솔루션이 있습니까?
답변1
CircuiTikZ의 내용을 주의 깊게 읽은 후수동, 적절한 해결책은 compatilibity
패키지 옵션을 사용하고 TikZ 라이브러리를 전역적으로 로드된 상태로 두는 것입니다. 유일한 단점은 CircuiTikZ 정의를 사용할 때 *
그 앞에 an을 사용해야 한다는 것입니다.
예를 들면 다음과 같습니다.
\begin{figure}[htbp]
\begin{center}
\begin{circuitikz}[scale=0.7, transform shape]
\draw[thick,->] (0,0.5) --(1,0.5) node[anchor=south east] {$i(x,t)$};
\node[] at (0,-1) {$v(x,t)$};
\draw
(0,0) node[anchor=east] {+}
to[short, o-] (1,0)
to[R=$Rx$] (3,0)
to[L=$Lx$] (5,0)
(5,-2) to[R=$Gx$, *-*] (5,0)
(5,0) to[short] (7,0)
(7,-2) to[C=$Cx$, *-*] (7,0)
(5,-2) to[short] (7,-2)
(0,-2) node[anchor=east]{-}
to[short, o-] (5,-2)
(9,0) node[anchor=west]{+}
to[short, o-] (7,0)
(9,-2) node[anchor=west]{-}
to[short, o-] (7,-2)
;
\draw[thick,->] (7,0.5) --(9,0.5) node[anchor=south east] {$i(x+ x,t)$};
\node[] at (9,-1) {$v(x+ x,t)$};
\end{circuitikz}
\caption{Infinitesimal section of a transmission line.}
\label{fig:transmission_line_section}
\end{center}
\end{figure}
옵션 을 사용할 때 다음으로 이동합니다 compatibility
.
\begin{figure}[htbp]
\begin{center}
\begin{circuitikz}[scale=0.7, transform shape]
\draw[thick,->] (0,0.5) --(1,0.5) node[anchor=south east] {$i(x,t)$};
\node[] at (0,-1) {$v(x,t)$};
\draw
(0,0) node[anchor=east] {+}
to[*short, o-] (1,0)
to[*R=$Rx$] (3,0)
to[*L=$Lx$] (5,0)
(5,-2) to[*R=$Gx$, *-*] (5,0)
(5,0) to[*short] (7,0)
(7,-2) to[*C=$Cx$, *-*] (7,0)
(5,-2) to[*short] (7,-2)
(0,-2) node[anchor=east]{-}
to[*short, o-] (5,-2)
(9,0) node[anchor=west]{+}
to[*short, o-] (7,0)
(9,-2) node[anchor=west]{-}
to[*short, o-] (7,-2)
;
\draw[thick,->] (7,0.5) --(9,0.5) node[anchor=south east] {$i(x+ x,t)$};
\node[] at (9,-1) {$v(x+ x,t)$};
\end{circuitikz}
\caption{Infinitesimal section of a transmission line.}
\label{fig:transmission_line_section}
\end{center}
\end{figure}
답변2
할 수는 있지만 여전히 문제가 있습니다.
분명히 라이브러리를 로드하면 그룹이 끝날 때 제거되지 않는 일부 전역 변경 사항이 발생합니다. 그러나 모든 혼합 회로를 한 번에 생성하여 저장 상자에 (전역적으로) 저장할 수 있습니다.
외부화를 사용해 보거나 독립 실행형을 사용하여 이미지를 생성할 수도 있습니다. 가장 좋은 해결책은 원하는 TikZ 구성 요소의 소스를 복사하고 Circuitikz에서 사용할 수 있도록 이름을 바꾸는 것입니다.
\documentclass{article}
\usepackage{circuitikz}
\usepackage{tikz}
\newsavebox{\figA}
\newsavebox{\figB}
\begin{document}
\begingroup
\usetikzlibrary{circuits.logic.US}
\usetikzlibrary{circuits.ee.IEC}
\global\setbox\figA=\hbox{%
\begin{tikzpicture}[circuit logic US, circuit ee IEC, huge circuit symbols, set resistor graphic = var resistor IEC graphic]
\matrix[column sep=10mm, row sep=10mm,anchor=center]
{
\node [not gate] (not1) {}; \\
\node [not gate] (not2) {}; \\
};
\node (a) at ([xshift=-25mm]not1.input) {$V_{in}^+$};
\node [contact] (a1) at ([xshift=-10mm]not1.input) {};
\node (b) at ([xshift=-25mm]not2.input) {$V_{in}^-$};
\node [contact] (b1) at ([xshift=-10mm]not2.input) {};
\node (x) at ([xshift=25mm]not1.output) {$V_{out}^-$};
\node [contact] (x1) at ([xshift=10mm]not1.output) {};
\node (z) at ([xshift=25mm]not2.output) {$V_{out}^+$};
\node [contact] (z1) at ([xshift=10mm]not2.output) {};
\node (en) at ([xshift=-30mm]$(not1.south)!0.5!(not2.north)$) {$EN$};
\node [contact] (en1) at ($(not1.south)!0.5!(not2.north)$) {};
\draw (en1.center) -- (not1.south) node[below right] (ennot1) {$E$};
\draw (en1.center) -- (not2.north) node[above right] (ennot2) {$E$};
\node [resistor={info'={$R$}}] (res1) at ([xshift=2mm, yshift=10mm]not1.north){};
\node [resistor={info={$R$}}] (res2) at ([xshift=2mm, yshift=-10mm]not2.south){};
\draw (a.east) -- (a1.center);
\draw (a1.center) |- (res1.input);
\draw (a1.center) -- (not1.input);
\draw (b.east) -- (b1.center);
\draw (b1.center) |- (res2.input);
\draw (b1.center) -- (not2.input);
\draw (en.east) -- (en1.center);
\draw (not1.output) -- (x1.center);
\draw (x1.center) |- (res1.output);
\draw (x1.center) |- (x.west);
\draw (not2.output) -- (z1.center);
\draw (z1.center) |- (res2.output);
\draw (z1.center) |- (z.west);
\end{tikzpicture}}%
\global\setbox\figB=\hbox{%
\begin{tikzpicture}[circuit logic US, circuit ee IEC, huge circuit symbols, set resistor graphic = var resistor IEC graphic]
\matrix[column sep=10mm, row sep=10mm,anchor=center]
{
\node [not gate] (not1) {}; \\
\node [not gate] (not2) {}; \\
};
\node (a) at ([xshift=-25mm]not1.input) {$V_{in}^+$};
\node [contact] (a1) at ([xshift=-10mm]not1.input) {};
\node (b) at ([xshift=-25mm]not2.input) {$V_{in}^-$};
\node [contact] (b1) at ([xshift=-10mm]not2.input) {};
\node (x) at ([xshift=25mm]not1.output) {$V_{out}^-$};
\node [contact] (x1) at ([xshift=10mm]not1.output) {};
\node (z) at ([xshift=25mm]not2.output) {$V_{out}^+$};
\node [contact] (z1) at ([xshift=10mm]not2.output) {};
\node (en) at ([xshift=-30mm]$(not1.south)!0.5!(not2.north)$) {$EN$};
\node [contact] (en1) at ($(not1.south)!0.5!(not2.north)$) {};
\draw (en1.center) -- (not1.south) node[below right] (ennot1) {$E$};
\draw (en1.center) -- (not2.north) node[above right] (ennot2) {$E$};
\node [resistor={info'={$R$}}] (res1) at ([xshift=2mm, yshift=10mm]not1.north){};
\node [resistor={info={$R$}}] (res2) at ([xshift=2mm, yshift=-10mm]not2.south){};
\draw (a.east) -- (a1.center);
\draw (a1.center) |- (res1.input);
\draw (a1.center) -- (not1.input);
\draw (b.east) -- (b1.center);
\draw (b1.center) |- (res2.input);
\draw (b1.center) -- (not2.input);
\draw (en.east) -- (en1.center);
\draw (not1.output) -- (x1.center);
\draw (x1.center) |- (res1.output);
\draw (x1.center) |- (x.west);
\draw (not2.output) -- (z1.center);
\draw (z1.center) |- (res2.output);
\draw (z1.center) |- (z.west);
\end{tikzpicture}}
\endgroup
\begin{figure}[htbp]
\centering
\usebox{\figA}
\caption{Some NOT gates with enable and resistors.}
\end{figure}
\begin{figure}[htbp]
\centering
\usebox{\figB}
\caption{Some NOT gates with enable and resistors.}
\end{figure}
\begin{figure}[htbp]
\begin{center}
\begin{circuitikz}[scale=0.7, transform shape]
\draw[thick,->] (0,0.5) --(1,0.5) node[anchor=south east] {$i(x,t)$};
\node[] at (0,-1) {$v(x,t)$};
\draw
(0,0) node[anchor=east] {+}
to[short, o-] (1,0)
to[R=$Rx$] (3,0)
to[L=$Lx$] (5,0)
(5,-2) to[R=$Gx$, *-*] (5,0)
(5,0) to[short] (7,0)
(7,-2) to[C=$Cx$, *-*] (7,0)
(5,-2) to[short] (7,-2)
(0,-2) node[anchor=east]{-}
to[short, o-] (5,-2)
(9,0) node[anchor=west]{+}
to[short, o-] (7,0)
(9,-2) node[anchor=west]{-}
to[short, o-] (7,-2)
;
\draw[thick,->] (7,0.5) --(9,0.5) node[anchor=south east] {$i(x+ x,t)$};
\node[] at (9,-1) {$v(x+ x,t)$};
\end{circuitikz}
\caption{Infinitesimal section of a transmission line.}
\label{fig:transmission_line_section}
\end{center}
\end{figure}
\end{document}