La pregunta relacionadaBurbuja inversor Circuitikzmuestra cómo invertir una entrada en una puerta AND. ¿Cómo puedo hacer esto en una puerta de amortiguamiento? (triángulo orientado hacia la derecha) Parece que no puedo encontrar la documentación. Intenté usar node[buffer, inputs=i]
pero no parece reconocer la inputs
clave.
Actualización: Parece que puedo hacerlo en un elemento tikzpicture
, pero no dentro de circuitikz
él. Lo siguiente funciona, pero necesito combinarlo y conectarme a algunas cosas en un circuitikz
elemento:
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{circuits.logic.US}
\begin{document}
\begin{tikzpicture}[circuit logic US]
\node (a) [buffer gate, inputs=i] {};
\end{tikzpicture}%
\end{document}
¿Hay alguna manera de usar esto dentro de un dibujo de Circuitikz?
Respuesta1
Una posible solución es definir una puerta de búfer llamada \buffergate
mediante \newcommand
una sintaxis que tome dos argumentos #1=name
y #2= rotation angle
. Las soluciones propuestas se redefinen not port
en \buffergate
, de modo que la puerta de amortiguamiento se pueda utilizar dentro de un circuitiz
dibujo. Se toma prestado un ejemplo de circuitikz
y siguen las propuestas.
\newcommand{\buffergate}[2]
{ % #1 = name , #2 = rotation angle
\begin{scope}[transform shape,rotate=#2]
\draw[thick] (#1) ++(-16pt,0) coordinate[ocirc,xshift=-2pt](#1in) -- ++(0,16pt) -- ++
(30pt,-16pt)coordinate(a) -- ++(-30pt,-16pt) -- cycle;
\draw (a) --++(6pt,0)coordinate(#1out);
\end{scope}
}
La lógica detrás es llamar not port
, colorearlo de blanco, darle un nombre de etiqueta y usar el comando \bufergate
, como se muestra a continuación.
\draw (1,0) node[not port,color=white,name=not1] () {};
\buffergate{not1}{0} % 0 = horizontal
Código
\documentclass[border=10pt,varwidth]{standalone}
\usepackage{tikz}
\usepackage[american,siunitx]{circuitikz}
\usetikzlibrary{calc,positioning}
\newcommand{\buffergate}[2]
{ % #1 = name , #2 = rotation angle
\begin{scope}[transform shape,rotate=#2]
\draw[thick] (#1) ++(-16pt,0) coordinate[ocirc,xshift=-2pt](#1in) -- ++(0,16pt) -- ++(30pt,-16pt)coordinate(a) -- ++(-30pt,-16pt) -- cycle;
\draw (a) --++(6pt,0)coordinate(#1out);
\end{scope}
}
\begin{document}
An example from circuitikz
\begin{circuitikz}
\draw
(1,0) node[not port] (not1) {}
(3,0) node[not port] (not2) {}
(0,0) -- (not1.in)
(not2.in) -- (not1.out)
++(0,-1) node[ground] {} to [C] (not1.out)
(not2.out) -| (4,1) -| (0,0);
\end{circuitikz}
\medskip
Proposed solution 1 -- node
\medskip
\begin{circuitikz}
\draw
(1,0) node[not port,color=white,name=not1] () {};
\buffergate{not1}{0}
\draw (3,0) node[not port,color=white,name=not2] () {};
\buffergate{not2}{-90}
\draw (0,0) -- (not1.in);
\draw(1.7,-1) node[ground] {} to [C] (not1out)
(not2out) -| (4,1) -| (0,0);
\draw (not1out) --++(0.5,0)|- (not2in);
\end{circuitikz}
\medskip
Proposed solution 2 -- path
\medskip
\begin{circuitikz}
\path(0.5,0) to[not port,color=white,name=not1] (1.5,0);
\buffergate{not1}{0}
\path(2.5,0) to[not port,color=white,name=not2] (3.5,0);
\buffergate{not2}{90}
\draw (0,0) -- (not1in);
\draw (1.7,-1) node[ground] {} to [C] (not1out)
(not2out) -| (4,1) -| (0,0);
\draw (not1out) --++(0.5,0)|- (not2in);
\end{circuitikz}
\end{document}