同じドキュメントでTikZ回路ライブラリとCircuiTikZを使用する

同じドキュメントでTikZ回路ライブラリとCircuiTikZを使用する

少し探し回った後、私はいくつか見つけた解決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 定義を使用する場合、*その前に を使用する必要があることです。

たとえば、次のようになります。

\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

それは可能ですが、それでもまだ間に合わせです。

明らかに、ライブラリをロードすると、グループの終了時に削除されないグローバルな変更がいくつか行われます。ただし、一度にすべての混合回路を作成し、それらを (グローバルに) 保存ボックスに保存することはできます。

externalize を使用するか、スタンドアロンを使用してイメージを作成してみてください。最善の解決策は、必要な 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}

関連情報