summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/qcircuit
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2014-07-24 23:07:27 +0000
committerKarl Berry <karl@freefriends.org>2014-07-24 23:07:27 +0000
commit369ffb24863654c2f800915b021b3f483dd7bca2 (patch)
treeaad854959f51f383a8afc4d55d984d23fde89e22 /Master/texmf-dist/tex/latex/qcircuit
parenta9483c887815e8976dd5ee214736c1de4e66497d (diff)
qcircuit (24jul14)
git-svn-id: svn://tug.org/texlive/trunk@34712 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/qcircuit')
-rw-r--r--Master/texmf-dist/tex/latex/qcircuit/qcircuit.sty144
1 files changed, 144 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/qcircuit/qcircuit.sty b/Master/texmf-dist/tex/latex/qcircuit/qcircuit.sty
new file mode 100644
index 00000000000..bf946def860
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/qcircuit/qcircuit.sty
@@ -0,0 +1,144 @@
+% Q-circuit version 2.0
+% Contributors: Steve Flammia, Bryan Eastin, Travis Scholten
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+% Thanks to the Xy-pic guys, Kristoffer H Rose, Ross Moore, and Daniel Müllner,
+% for their help in making Qcircuit work with Xy-pic version 3.8.
+% Thanks also to Dave Clader, Andrew Childs, Rafael Possignolo, Tyson Williams,
+% Sergio Boixo, Cris Moore, Jonas Anderson, and Stephan Mertens for helping us test
+% and/or develop the new version.
+\ProvidesPackage{qcircuit}[2014/06/29]
+\RequirePackage{xy}
+
+\DeclareOption{braket}{
+ \newcommand{\bra}[1]{\ensuremath{\left\langle{#1}\right\vert}}
+ \newcommand{\ket}[1]{\ensuremath{\left\vert{#1}\right\rangle}}
+}
+
+\DeclareOption{qm}{
+ \newcommand{\ip}[2]{\ensuremath{\left\langle{#1}\right\vert{#2}\rangle}}
+ \newcommand{\melem}[3]{\ensuremath{\left\langle{#1}\right\vert{#2}\vert{#3}\rangle}}
+ \newcommand{\expval}[1]{\ensuremath{\left\langle #1 \right\rangle}}
+ \newcommand{\op}[2]{\ensuremath{\vert{#1}\rangle\langle{#2}\vert}}
+}
+
+\ProcessOptions\relax
+
+\xyoption{matrix}
+\xyoption{frame}
+\xyoption{arrow}
+\xyoption{arc}
+
+\usepackage{ifpdf}
+\ifpdf
+\else
+\PackageWarningNoLine{Qcircuit}{qcircuit is loading in Postscript mode. The Xy-pic options ps and dvips will be loaded. If you wish to use other Postscript drivers for Xy-pic, you must modify the code in qcircuit.sty}
+% The following options load the drivers most commonly required to
+% get proper Postscript output from Xy-pic. Should these fail to work,
+% try replacing the following two lines with some of the other options
+% given in the Xy-pic reference manual.
+\xyoption{ps}
+\xyoption{dvips}
+\fi
+
+% The following resets Xy-pic matrix alignment to the pre-3.8 default, as
+% required by Qcircuit.
+\entrymodifiers={!C\entrybox}
+
+\newcommand{\qw}[1][-1]{\ar @{-} [0,#1]}
+ % Defines a wire that connects horizontally. By default it connects to the object on the left of the current object.
+ % WARNING: Wire commands must appear after the gate in any given entry.
+\newcommand{\qwx}[1][-1]{\ar @{-} [#1,0]}
+ % Defines a wire that connects vertically. By default it connects to the object above the current object.
+ % WARNING: Wire commands must appear after the gate in any given entry.
+\newcommand{\cw}[1][-1]{\ar @{=} [0,#1]}
+ % Defines a classical wire that connects horizontally. By default it connects to the object on the left of the current object.
+ % WARNING: Wire commands must appear after the gate in any given entry.
+\newcommand{\cwx}[1][-1]{\ar @{=} [#1,0]}
+ % Defines a classical wire that connects vertically. By default it connects to the object above the current object.
+ % WARNING: Wire commands must appear after the gate in any given entry.
+\newcommand{\gate}[1]{*+<.6em>{#1} \POS ="i","i"+UR;"i"+UL **\dir{-};"i"+DL **\dir{-};"i"+DR **\dir{-};"i"+UR **\dir{-},"i" \qw}
+ % Boxes the argument, making a gate.
+\newcommand{\meter}{*=<1.8em,1.4em>{\xy ="j","j"-<.778em,.322em>;{"j"+<.778em,-.322em> \ellipse ur,_{}},"j"-<0em,.4em>;p+<.5em,.9em> **\dir{-},"j"+<2.2em,2.2em>*{},"j"-<2.2em,2.2em>*{} \endxy} \POS ="i","i"+UR;"i"+UL **\dir{-};"i"+DL **\dir{-};"i"+DR **\dir{-};"i"+UR **\dir{-},"i" \qw}
+ % Inserts a measurement meter.
+ % In case you're wondering, the constants .778em and .322em specify
+ % one quarter of a circle with radius 1.1em.
+ % The points added at + and - <2.2em,2.2em> are there to strech the
+ % canvas, ensuring that the size is unaffected by erratic spacing issues
+ % with the arc.
+\newcommand{\measure}[1]{*+[F-:<.9em>]{#1} \qw}
+ % Inserts a measurement bubble with user defined text.
+\newcommand{\measuretab}[1]{*{\xy*+<.6em>{#1}="e";"e"+UL;"e"+UR **\dir{-};"e"+DR **\dir{-};"e"+DL **\dir{-};"e"+LC-<.5em,0em> **\dir{-};"e"+UL **\dir{-} \endxy} \qw}
+ % Inserts a measurement tab with user defined text.
+\newcommand{\measureD}[1]{*{\xy*+=<0em,.1em>{#1}="e";"e"+UR+<0em,.25em>;"e"+UL+<-.5em,.25em> **\dir{-};"e"+DL+<-.5em,-.25em> **\dir{-};"e"+DR+<0em,-.25em> **\dir{-};{"e"+UR+<0em,.25em>\ellipse^{}};"e"+C:,+(0,1)*{} \endxy} \qw}
+ % Inserts a D-shaped measurement gate with user defined text.
+\newcommand{\multimeasure}[2]{*+<1em,.9em>{\hphantom{#2}} \qw \POS[0,0].[#1,0];p !C *{#2},p \drop\frm<.9em>{-}}
+ % Draws a multiple qubit measurement bubble starting at the current position and spanning #1 additional gates below.
+ % #2 gives the label for the gate.
+ % You must use an argument of the same width as #2 in \ghost for the wires to connect properly on the lower lines.
+\newcommand{\multimeasureD}[2]{*+<1em,.9em>{\hphantom{#2}} \POS [0,0]="i",[0,0].[#1,0]="e",!C *{#2},"e"+UR-<.8em,0em>;"e"+UL **\dir{-};"e"+DL **\dir{-};"e"+DR+<-.8em,0em> **\dir{-};{"e"+DR+<0em,.8em>\ellipse^{}};"e"+UR+<0em,-.8em> **\dir{-};{"e"+UR-<.8em,0em>\ellipse^{}},"i" \qw}
+ % Draws a multiple qubit D-shaped measurement gate starting at the current position and spanning #1 additional gates below.
+ % #2 gives the label for the gate.
+ % You must use an argument of the same width as #2 in \ghost for the wires to connect properly on the lower lines.
+\newcommand{\control}{*!<0em,.025em>-=-<.2em>{\bullet}}
+ % Inserts an unconnected control.
+\newcommand{\controlo}{*+<.01em>{\xy -<.095em>*\xycircle<.19em>{} \endxy}}
+ % Inserts a unconnected control-on-0.
+\newcommand{\ctrl}[1]{\control \qwx[#1] \qw}
+ % Inserts a control and connects it to the object #1 wires below.
+\newcommand{\ctrlo}[1]{\controlo \qwx[#1] \qw}
+ % Inserts a control-on-0 and connects it to the object #1 wires below.
+\newcommand{\targ}{*+<.02em,.02em>{\xy ="i","i"-<.39em,0em>;"i"+<.39em,0em> **\dir{-}, "i"-<0em,.39em>;"i"+<0em,.39em> **\dir{-},"i"*\xycircle<.4em>{} \endxy} \qw}
+ % Inserts a CNOT target.
+\newcommand{\qswap}{*=<0em>{\times} \qw}
+ % Inserts half a swap gate.
+ % Must be connected to the other swap with \qwx.
+\newcommand{\multigate}[2]{*+<1em,.9em>{\hphantom{#2}} \POS [0,0]="i",[0,0].[#1,0]="e",!C *{#2},"e"+UR;"e"+UL **\dir{-};"e"+DL **\dir{-};"e"+DR **\dir{-};"e"+UR **\dir{-},"i" \qw}
+ % Draws a multiple qubit gate starting at the current position and spanning #1 additional gates below.
+ % #2 gives the label for the gate.
+ % You must use an argument of the same width as #2 in \ghost for the wires to connect properly on the lower lines.
+\newcommand{\ghost}[1]{*+<1em,.9em>{\hphantom{#1}} \qw}
+ % Leaves space for \multigate on wires other than the one on which \multigate appears. Without this command wires will cross your gate.
+ % #1 should match the second argument in the corresponding \multigate.
+\newcommand{\push}[1]{*{#1}}
+ % Inserts #1, overriding the default that causes entries to have zero size. This command takes the place of a gate.
+ % Like a gate, it must precede any wire commands.
+ % \push is useful for forcing columns apart.
+ % NOTE: It might be useful to know that a gate is about 1.3 times the height of its contents. I.e. \gate{M} is 1.3em tall.
+ % WARNING: \push must appear before any wire commands and may not appear in an entry with a gate or label.
+\newcommand{\gategroup}[6]{\POS"#1,#2"."#3,#2"."#1,#4"."#3,#4"!C*+<#5>\frm{#6}}
+ % Constructs a box or bracket enclosing the square block spanning rows #1-#3 and columns=#2-#4.
+ % The block is given a margin #5/2, so #5 should be a valid length.
+ % #6 can take the following arguments -- or . or _\} or ^\} or \{ or \} or _) or ^) or ( or ) where the first two options yield dashed and
+ % dotted boxes respectively, and the last eight options yield bottom, top, left, and right braces of the curly or normal variety. See the Xy-pic reference manual for more options.
+ % \gategroup can appear at the end of any gate entry, but it's good form to pick either the last entry or one of the corner gates.
+ % BUG: \gategroup uses the four corner gates to determine the size of the bounding box. Other gates may stick out of that box. See \prop.
+
+\newcommand{\rstick}[1]{*!L!<-.5em,0em>=<0em>{#1}}
+ % Centers the left side of #1 in the cell. Intended for lining up wire labels. Note that non-gates have default size zero.
+\newcommand{\lstick}[1]{*!R!<.5em,0em>=<0em>{#1}}
+ % Centers the right side of #1 in the cell. Intended for lining up wire labels. Note that non-gates have default size zero.
+\newcommand{\ustick}[1]{*!D!<0em,-.5em>=<0em>{#1}}
+ % Centers the bottom of #1 in the cell. Intended for lining up wire labels. Note that non-gates have default size zero.
+\newcommand{\dstick}[1]{*!U!<0em,.5em>=<0em>{#1}}
+ % Centers the top of #1 in the cell. Intended for lining up wire labels. Note that non-gates have default size zero.
+\newcommand{\Qcircuit}{\xymatrix @*=<0em>}
+ % Defines \Qcircuit as an \xymatrix with entries of default size 0em.
+\newcommand{\link}[2]{\ar @{-} [#1,#2]}
+ % Draws a wire or connecting line to the element #1 rows down and #2 columns forward.
+\newcommand{\pureghost}[1]{*+<1em,.9em>{\hphantom{#1}}}
+ % Same as \ghost except it omits the wire leading to the left.
+
+\endinput