Home             TeX miscellanea

Drawing quantum circuits

Some macros


\def\gl#1{\setbox0\hbox{$#1$}%
          \setbox0\hbox{\kern-.5\wd0\kern.2pt\raise-.5\ht0\box0}%
          \ht0=0pt \wd0=0pt \dp0=0pt \box0}
\def\bdot{\gl{\bullet}}

\def\gvr{\vrule height 2ex}
\def\gvz{\vrule height 2ex width 0pt \kern .4pt}
\def\gline{\kern 1.8ex & & \kern 2ex
          &\vrule height 1.7ex
          &\kern 2ex   & & \kern 1.8ex}
\def\glinz{\kern 1.8ex & & \kern 2ex
          & \vrule height 1.7ex width 0pt \kern .4pt
          &\kern 2ex   & & \kern 1.8ex}
\def\ghrl#1{\multispan#1\hrulefill\ignorespaces}
\def\ghrs{\vrule height .4pt}
\def\ghrz{\vrule height .4pt width 0pt \kern 0pt}

\def\grket#1{\vbox{\offinterlineskip\halign{##&&##\cr
    \glinz \cr
           &      &   & \ghrz \cr
           & \gvz &   & \gvz              &        & \gvz \cr
    \ghrl2        &   & \gl{\rlap{$|#1\rangle$}}          \cr
           & \gvz &   & \gvz              &        & \gvz \cr
           &      &   & \ghrz \cr
    \glinz \cr}}\ignorespaces}

\def\glket#1{\vbox{\offinterlineskip\halign{##&&##\cr
    \glinz \cr
           &      &   & \ghrz \cr
           & \gvz &   & \gvz              &        & \gvz   \cr
           &      &   & \gl{\llap{$|#1\rangle$}} & & \ghrl2 \cr
           & \gvz &   & \gvz              &        & \gvz   \cr
           &      &   & \ghrz \cr
    \glinz \cr}}\ignorespaces}


\def\nog{\vbox{\offinterlineskip\halign{##&&##\cr
    \glinz \cr
           &        &   & \ghrz \cr
           & \gvz   &   & \gvz    &        & \gvz \cr
    \ghrl3              & \ghrs   & \ghrl3 \cr
           & \gvz   &   & \gvz    &        & \gvz \cr
           &        &   & \ghrz \cr
    \glinz \cr}}}

\def\jump{\vbox{\offinterlineskip\halign{##&&##\cr
    \gline \cr
           &        &   & \ghrs \cr
           & \gvz   &   & \gvr    &        & \gvz \cr
    \ghrl3              & \ghrs   & \ghrl3 \cr
           & \gvz   &   & \gvr    &        & \gvz \cr
           &        &   & \ghrs \cr
    \gline \cr}}}

\def\cont{\vbox{\offinterlineskip\halign{##&&##\cr
    \gline \cr
           &        &   & \ghrs \cr
           & \gvz   &   & \gvr    &        & \gvz \cr
    \ghrl3              & \bdot   & \ghrl3 \cr
           & \gvz   &   & \gvr    &        & \gvz \cr
           &        &   & \ghrs \cr
    \gline \cr}}}

\def\contup{\vbox{\offinterlineskip\halign{##&&##\cr
    \gline \cr
           &        &   & \ghrs \cr
           & \gvz   &   & \gvr    &        & \gvz \cr
    \ghrl3              & \bdot   & \ghrl3 \cr
           & \gvz   &   & \gvz    &        & \gvz \cr
           &        &   & \ghrz \cr
    \glinz \cr}}}

\def\contdn{\vbox{\offinterlineskip\halign{##&&##\cr
    \glinz \cr
           &        &   & \ghrz \cr
           & \gvz   &   & \gvz    &        & \gvz \cr
    \ghrl3              & \bdot   & \ghrl3 \cr
           & \gvz   &   & \gvr    &        & \gvz \cr
           &        &   & \ghrs \cr
    \gline \cr}}}

\def\gate#1{\vbox{\offinterlineskip\halign{##&&##\cr
    \glinz \cr
           & \ghrl5 \cr
           & \gvr   &   &         &        & \gvr \cr
    \ghrl2          &   & \gl{#1} &        & \ghrl2 \cr
           & \gvr   &   &         &        & \gvr \cr
           & \ghrl5 \cr
    \glinz \cr}}\ignorespaces}

\def\gateup#1{\vbox{\offinterlineskip\halign{##&&##\cr
    \gline \cr
           & \ghrl5 \cr
           & \gvr   &   &         &        & \gvr \cr
    \ghrl2          &   & \gl{#1} &        & \ghrl2 \cr
           & \gvr   &   &         &        & \gvr \cr
           & \ghrl5 \cr
    \glinz \cr}}\ignorespaces}

\def\gatedn#1{\vbox{\offinterlineskip\halign{##&&##\cr
    \glinz \cr
           & \ghrl5 \cr
           & \gvr   &   &         &        & \gvr \cr
    \ghrl2          &   & \gl{#1} &        & \ghrl2 \cr
           & \gvr   &   &         &        & \gvr \cr
           & \ghrl5 \cr
    \gline \cr}}\ignorespaces}

\def\gcr{\cr\noalign{\vskip-1pt}}

\font\bss=cmssbx10
\def\qop#1{\mathop{\hbox{\bss#1}}\nolimits}
\def\X{\qop X} \def\Y{\qop Y} \def\Z{\qop Z} \def\H{\qop H}

Examples


$$ \matrix{
   \glket{\phi} \gatedn{\S} \nog \gatedn{\S\dag}   \grket{\phi} \gcr
   \glket{x}    \cont       \nog \cont             \grket{x}    \gcr
   \glket{0}    \gateup{\oplus f}\contdn
                                 \gateup{\oplus f} \grket{0}  \gcr
   \glket{y}    \nog       \gateup{\X}\nog         \grket{y\oplus f(x)}
} $$

$$ \matrix{
   \gate{\H} \nog        \contdn     \gate{\H} \gcr
   \gate{\H} \nog        \jump       \gate{\H} \gcr
   \gate{\H} \contdn     \jump       \gate{\H} \gcr
   \gate{\H} \gateup{\X} \gateup{\X} \gate{\H}     }
 = \matrix{
   \nog        \gatedn{\X} \gcr
   \nog        \jump       \gcr
   \gatedn{\X} \jump       \gcr
   \contup     \contup         }
$$