summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/yquant/yquant-lang.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-04-14 21:06:44 +0000
committerKarl Berry <karl@freefriends.org>2020-04-14 21:06:44 +0000
commitbbe9e3a2874a81d4559603fc57aa37a0f53ae4bb (patch)
tree3b44a4b917247d46f8b79043e2a2774a9e118d3c /Master/texmf-dist/tex/latex/yquant/yquant-lang.tex
parent70ceb95a32e274762041dec44d43760f70c2dd31 (diff)
yquant (14apr20)
git-svn-id: svn://tug.org/texlive/trunk@54737 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/yquant/yquant-lang.tex')
-rw-r--r--Master/texmf-dist/tex/latex/yquant/yquant-lang.tex151
1 files changed, 86 insertions, 65 deletions
diff --git a/Master/texmf-dist/tex/latex/yquant/yquant-lang.tex b/Master/texmf-dist/tex/latex/yquant/yquant-lang.tex
index b88503beb1a..b250f788276 100644
--- a/Master/texmf-dist/tex/latex/yquant/yquant-lang.tex
+++ b/Master/texmf-dist/tex/latex/yquant/yquant-lang.tex
@@ -68,25 +68,25 @@
}
\def\yquant@lang@create@parse@name#1[#2;{%
- \if\relax\detokenize{#2}\relax%
+ \ifstrempty{#2}{%
\yquant@lang@create@do#1[1][;%
- \else%
+ }{%
\yquant@lang@create@do#1[#2;%
- \fi%
+ }%
}
\protected\def\yquant@lang@create@do#1[#2]#3[;{%
% parse length
- \if\relax\detokenize{#3}\relax%
+ \ifstrempty{#3}{%
\yquant@langhelper@validate\len\count{#2}%
\ifnum\len<1 %
\PackageError{yquant.sty}{Invalid register length}%
{Valid register lengths are integers greater or equal to one.}%
\fi
- \else%
+ }{%
\PackageError{yquant.sty}{Invalid register name}%
{Register names must not contain `[' apart from register length indication.}%
- \fi%
+ }%
\edef\reg{\trim@spaces{#1}}%
% we allow for scattering, so check whether the register already exists
\ifcsname\yquant@prefix registerhigh@\reg\endcsname%
@@ -157,47 +157,25 @@
\protected\def\yquant@lang@create@draw#1#2#3#4#5{%
\begingroup%
\dimdef\wireypos{\yquant@register@get@y{#1}}%
- \if\relax\detokenize{#4}\relax%
+ \ifstrempty{#4}{%
% For empty labels, we still put the node at the appropriate position as it may needs to be referenced, but we will not let it effect the bounding box (so that the left end is not shifted), and we don't need an inner separation, so that the label is truely just a coordinate.
\path[overlay]
(#2, \wireypos)%
coordinate[name prefix=, name suffix=, name=yquantbox];
- \else%
+ }{%
\path
(#2, \wireypos)%
node[/yquant/every label, /yquant/every initial label,%
/yquant/every #3 label, name prefix=, name suffix=, name=yquantbox]%
{#4};%
- \fi%
+ }%
% set the wire style to have the correct \pgflinewidth available (we don't allow individual line widths for different types of wires)
\tikzset{/yquant/every wire}%
\pgfpointanchor{yquantbox}{east}%
- % Every label shape should implement the projection anchor, else we just guess the values, but this might be inaccurate for non-rectangular shapes
- \ifpgfpointshapexproj{yquantbox}%
- \@tempdima=\pgf@x%
- \pgfpointshapexproj{yquantbox}%
- {\pgfqpoint{\@tempdima}
- {\dimexpr\wireypos+2\pgflinewidth\relax}}%
- \edef\tmp{{(\the\pgf@x,\the\pgf@y)}}%
- % This projection should normally not be necessary, as the east anchor _should_ be accurate - but who knows?
- \pgfpointshapexproj{yquantbox}{\pgfqpoint{\@tempdima}{\wireypos}}%
- \edef\tmp{\tmp{(\the\pgf@x,\the\pgf@y)}}%
- \pgfpointshapexproj{yquantbox}
- {\pgfqpoint{\@tempdima}%
- {\dimexpr\wireypos-2\pgflinewidth\relax}}%
- \yquant@register@set@lastwire{#1}{\tmp{(\the\pgf@x,\the\pgf@y)}}%
- \else%
- % Just guess the values.
- \yquant@register@set@lastwire{#1}{%
- {(\the\pgf@x,\the\dimexpr\wireypos+2\pgflinewidth\relax)}%
- {(\the\pgf@x,\wireypos)}%
- {(\the\pgf@x,\the\dimexpr\wireypos-2\pgflinewidth\relax)}%
- }%
- \fi%
- \if\relax\detokenize{#5}\relax%
- \else%
+ \yquant@register@set@lastwire{#1}{{\the\pgf@x}{\the\pgf@x}{}{}}%
+ \ifstrempty{#5}\relax{%
\pgfnodealias{\tikz@pp@name{#5}}{yquantbox}%
- \fi%
+ }%
\endgroup%
}
% END_FOLD
@@ -289,21 +267,18 @@
% two-qubit controlled x (symmetric notation)
\yquant@langhelper@declare@command{xx}\yquant@lang@@xx
\yquant@langhelper@setup@attrs{xx}{}{}
-\def\yquant@lang@@xx#1#2#3{%
- \yquant@register@get@allowmultitrue%
- \yquant@circuit@operator{#1}{#2}{#3}%
- \ifyquant@circuit@operator@hasControls%
- \yquant@draw@{}{/yquant/operators/every xx, /yquant/operator/multi operator line=false}%
- \else%
- \yquant@draw@{}{/yquant/operators/every xx}%
- \fi%
+\def\yquant@lang@@xx{%
+ \yquant@register@get@multiassingle%
+ \yquant@draw%
+ {}%
+ {/yquant/operators/every xx}%
}
% two-qubit controlled phase (symmetric notation)
\yquant@langhelper@declare@command@uncontrolled{zz}\yquant@lang@@zz
\yquant@langhelper@setup@attrs{zz}{}{}
\def\yquant@lang@@zz{%
- \yquant@register@get@allowmultitrue%
+ \yquant@register@get@multiassingle%
\yquant@draw%
{}%
{/yquant/operators/every zz}%
@@ -333,14 +308,11 @@
% swap
\yquant@langhelper@declare@command{swap}\yquant@lang@@swap
\yquant@langhelper@setup@attrs{swap}{}{}
-\def\yquant@lang@@swap#1#2#3{%
- \yquant@register@get@allowmultitrue%
- \yquant@circuit@operator{#1}{#2}{#3}%
- \ifyquant@circuit@operator@hasControls%
- \yquant@draw@{}{/yquant/operators/every swap, /yquant/operator/multi operator line=false}%
- \else%
- \yquant@draw@{}{/yquant/operators/every swap}%
- \fi%
+\def\yquant@lang@@swap{%
+ \yquant@register@get@multiassingle%
+ \yquant@draw%
+ {}%
+ {/yquant/operators/every swap}%
}
% not
@@ -433,6 +405,18 @@
{}{}
}
+\yquant@langhelper@declare@command@uncontrolled{correlate}\yquant@lang@@correlate
+\yquant@langhelper@setup@attrs{correlate}{}{}
+\def\yquant@lang@@correlate{%
+ % do not call \yquant@register@get@multiassingle, we do not want to install a different multi line style!
+ \yquant@register@get@allowmultitrue%
+ \let\yquant@register@multi@splitparts=\yquant@register@multi@splitparts@sepall%
+ \yquant@draw%
+ {}%
+ {/yquant/operators/every wave}%
+ {}{}%
+}
+
\yquant@langhelper@declare@command@uncontrolled{align}\yquant@lang@@align
\yquant@langhelper@setup@attrs{align}{}{}
\def\yquant@lang@@align#1{%
@@ -452,14 +436,24 @@
\yquant@langhelper@setup@attrs{discard}{}{}
\def\yquant@lang@@discard#1{%
\yquant@register@get@ids{#1}%
- \yquant@circuit@settypes\yquant@register@get@ids@list\yquant@register@type@none%
+ \let\yquant@circuit@settype@to=\yquant@register@type@none%
+ \yquant@circuit@actonwires%
+ \yquant@circuit@settype%
+ \yquant@register@get@ids@list%
+ \yquant@register@type@none%
}
\yquant@langhelper@declare@command@uncontrolled{init}\yquant@lang@@init
\yquant@langhelper@setup@attrs{init}{value}{type}
-\def\yquant@lang@@init@multi@@extract#1#2#3#4#5{%
- #5%
+\protected\def\yquant@lang@@init@multi@@extract#1#2#3{%
+ \yquant@for \yquant@i := #1 to #2 {%
+ \edef\yquant@circuit@settype@to{\yquant@register@get@type\yquant@i}%
+ \unless\ifx\yquant@circuit@settype@to\yquant@register@type@none%
+ \expandafter\yquant@for@break%
+ \fi%
+ }%
}
+\long\def\@fifthoffive#1#2#3#4#5{#5}
\protected\def\yquant@lang@@init#1{%
\yquant@register@get@allowmultitrue%
\yquant@register@get@ids{#1}%
@@ -483,13 +477,9 @@
\let\yquant@circuit@settype@to=\yquant@register@type@none%
\def\do##1{%
\ifyquant@firsttoken\yquant@register@multi{##1}{%
- \def\@do####1{%
- \edef\yquant@circuit@settype@to{\yquant@register@get@type{####1}}%
- \unless\ifx\yquant@circuit@settype@to\yquant@register@type@none%
- \expandafter\listbreak%
- \fi%
- }%
- \forlistloop\@do{\yquant@lang@@init@multi@@extract##1}%
+ \let\yquant@register@multi@contiguous=\yquant@lang@@init@multi@@extract%
+ \@fifthoffive##1%
+ % we should reset multi@contiguous to the original command; but this is really just a placeholder. As long as it is \protected, everything is fine.
}{%
\edef\yquant@circuit@settype@to{\yquant@register@get@type{##1}}%
}%
@@ -518,6 +508,8 @@
% special case: if there were no operations at any affected wire before, we will replace the wire description
\ifdim\yquant@circuit@operator@x=\yquant@config@operator@sep\relax%
\def\yquant@circuit@operator@x{-.5\dimen2}%
+ \let\yquant@draw@finalize@ctrl@single=\yquant@draw@finalize@ctrl@singleinit%
+ \let\yquant@draw@finalize@ctrl@multi=\yquant@draw@finalize@ctrl@multiinit%
\expandafter\yquant@draw@%
\expandafter{\yquant@lang@attr@value}%
{/yquant/every label, /yquant/every initial label, /yquant/every \yquant@lang@attr@type\space label}%
@@ -536,9 +528,9 @@
\expandafter\yquant@circuit@output\expandafter{\yquant@register@get@ids@list}%
}
-\yquant@langhelper@declare@command@uncontrolled{setwire}\yquant@lang@@setwire
-\yquant@langhelper@setup@attrs{setwire}{value}{}
-\protected\def\yquant@lang@@setwire#1{%
+\yquant@langhelper@declare@command@uncontrolled{settype}\yquant@lang@@settype
+\yquant@langhelper@setup@attrs{settype}{value}{}
+\protected\def\yquant@lang@@settype#1{%
\yquant@register@get@ids{#1}%
\expandafter\ifstrequal\expandafter{\yquant@lang@attr@value}{qubit}%
{\let\yquant@circuit@settype@to=\yquant@register@type@q}%
@@ -554,6 +546,35 @@
}%
}%
}%
- \yquant@circuit@settypes\yquant@register@get@ids@list\yquant@circuit@settype@to%
+ \yquant@circuit@actonwires%
+ \yquant@circuit@settype%
+ \yquant@register@get@ids@list%
+ {}%
+}
+
+\def\yquant@lang@setwire{%
+ \PackageWarning{yquant.sty}{`setwire' gate is deprecated as of yquant 0.1.2. Use `settype' instead.}%
+ \yquant@lang@settype%
+}
+\yquant@langhelper@setup@attrs{setwire}{value}{}
+
+\yquant@langhelper@declare@command@uncontrolled{setstyle}\yquant@lang@@setstyle
+\yquant@langhelper@setup@attrs{setstyle}{value}{}
+\protected\def\yquant@lang@@setstyle#1{%
+ \yquant@register@get@ids{#1}%
+ \yquant@circuit@actonwires%
+ \yquant@circuit@setstyle%
+ \yquant@register@get@ids@list%
+ {{\yquant@lang@attr@value}}%
+}
+
+\yquant@langhelper@declare@command@uncontrolled{addstyle}\yquant@lang@@addstyle
+\yquant@langhelper@setup@attrs{addstyle}{value}{}
+\protected\def\yquant@lang@@addstyle#1{%
+ \yquant@register@get@ids{#1}%
+ \yquant@circuit@actonwires%
+ \yquant@circuit@addstyle%
+ \yquant@register@get@ids@list%
+ {{\yquant@lang@attr@value}}%
}
% END_FOLD \ No newline at end of file