0

I want to draw several diagrams for boolean circuits, as $w + x(y + zx')$. Is there a Tikz's library to draw this component?

basic element of a circuit

I'm sure there is a right way to do it but can't find anything in circuits library. I have this so far:

    \documentclass{standalone}
    \usepackage{tikz}
    \begin{document}
    \begin{tikzpicture}
    \draw (0,0) -- (1,0);
    \draw (1.07,-0.014) node {$\circ$};
    \draw (1.5,0.07) node {$x$};
    \draw (2-0.07,-0.014) node {$\circ$};
    \draw (2,0) -- (3,0);
    \end{tikzpicture}
    \end{document}

EDIT: Jul 10, 2019, 07:27 CDT

Just found arrows.meta library and the tip Circle[open], so I improved my code:

\documentclass{standalone} 
\usepackage{tikz}
\usetikzlibrary{arrows.meta} 
\begin{document} 
\begin{tikzpicture}
\draw (0,0) [arrows = -{Circle[open]}] -- (1,0);    
\draw (1.25,0.07) node {$x$}; 
\draw (1.5,0) [arrows = {Circle[open]}-] -- (2.5,0);
\end{tikzpicture} 
\end{document}

Looks fine to me!

Arrow with Circle[open] tip

6
  • Do you have a web link that explains this notation $w + x(y + zx')$?
    – AndréC
    Jul 10 '19 at 11:59
  • @AndréC, they are boolean variables, + is unión, product is intersection, and prima is complement. Shannon use dual meaning in ccapitalia.net/descarga/docs/…
    – tatojo
    Jul 10 '19 at 12:43
  • Is your last update an answer to your problem?
    – AndréC
    Jul 10 '19 at 13:07
  • Yes @AndréC, it is!
    – tatojo
    Jul 13 '19 at 14:11
  • It is better to answer your own question by stating that my solution gave you the idea. Answering your own question is encouraged here: tex.stackexchange.com/help/self-answer
    – AndréC
    Jul 13 '19 at 17:18
2

I don't know if there is a library that does what you want. And I'm not sure I'll answer your question.

I created an arrow with TikZ that I called circ which has a radius of 1.5pt.

\pgfdeclarearrow{ 
    name = circ,
parameters = { },
setup code = { },
drawing code = {
    \newdimen\arrowsize%
    \arrowsize=0.5pt%
    \pgfsetdash{}{+0pt}%
    \pgfsetmiterjoin%
    \advance\arrowsize by .25\pgflinewidth
    \pgfsetfillcolor{white}
    \pgfpathcircle{\pgfpoint{3\arrowsize}{0}} {3\arrowsize}%
    \pgfusepathqfillstroke%
    },
defaults = { }
}

The arrow is the same size as \circ. And I anchored the text to the base so it would be the same height as yours.

screenshot

   \documentclass[border=5mm]{standalone}
    \usepackage{tikz}
    \usetikzlibrary{calc}
    \pgfdeclarearrow{ 
    name = circ,
parameters = { },
setup code = { },
drawing code = {
    \newdimen\arrowsize%
    \arrowsize=0.5pt%
    \pgfsetdash{}{+0pt}%
    \pgfsetmiterjoin%
    \advance\arrowsize by .25\pgflinewidth
    \pgfsetfillcolor{white}
    \pgfpathcircle{\pgfpoint{3\arrowsize}{0}} {3\arrowsize}%
    \pgfusepathqfillstroke%
    },
defaults = { }
}
    \begin{document}
    % We see that the new arrow circ at the same size as `\circ`
    \begin{tikzpicture} 
    \draw[-circ] (0,0) -- (1,0);% new arrow circ
    \draw (1.5,0.07) node {$x$};
    \draw (2-0.07,0) node {$\circ$};% \circ
    \draw (2,0) -- (3,0);

    \begin{scope}[blue,yshift=-5mm]
     % second draw with new circ arrow only
    \draw[-circ] (0,0) -- (1,0)node (a){};
    \draw[circ-] (2,0)node(b){} -- (3,0);
    \node[anchor=base] at ($(a)!.5!(b)$) {$x$};
    \end{scope}

    \end{tikzpicture}
    \end{document}
1

For fun, a veryshort code with pstricks:

\documentclass[border=4pt]{standalone}
\usepackage{pst-node}
\usepackage{auto-pst-pdf} 

\begin{document}

\begin{psmatrix}[mnode=r, emnode=p, colsep=0.8cm]
[name = L] & \psDefBoxNodes{X}{\makebox[2em]{$x$}} & [name=R]
\psset{ arrows =o-, linewidth=0.4pt,}%
\psline(X:Cl)(L) \psline(X:Cr)(R)%
\end{psmatrix}

\end{document} 

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.