summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2015-08-17 22:16:32 +0000
committerKarl Berry <karl@freefriends.org>2015-08-17 22:16:32 +0000
commitb1d20363871115b9069612379a4904914558483f (patch)
tree62cbd89556a7d67cc5d32ac072b3379f475693e6
parentc970c7a71b932db2126f7e23ee447c74de7d6d81 (diff)
blochsphere (17aug15)
git-svn-id: svn://tug.org/texlive/trunk@38137 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/latex/blochsphere/LICENSE417
-rw-r--r--Master/texmf-dist/doc/latex/blochsphere/README.md6
-rw-r--r--Master/texmf-dist/doc/latex/blochsphere/blochsphere.pdfbin0 -> 95413 bytes
-rw-r--r--Master/texmf-dist/doc/latex/blochsphere/example.pdfbin0 -> 29938 bytes
-rw-r--r--Master/texmf-dist/doc/latex/blochsphere/example.tex30
-rw-r--r--Master/texmf-dist/source/latex/blochsphere/blochsphere.dtx853
-rw-r--r--Master/texmf-dist/source/latex/blochsphere/blochsphere.ins57
-rw-r--r--Master/texmf-dist/tex/latex/blochsphere/blochsphere.sty407
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check3
-rw-r--r--Master/tlpkg/tlpsrc/blochsphere.tlpsrc0
-rw-r--r--Master/tlpkg/tlpsrc/collection-pictures.tlpsrc1
11 files changed, 1773 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/blochsphere/LICENSE b/Master/texmf-dist/doc/latex/blochsphere/LICENSE
new file mode 100644
index 00000000000..9566bc7ca8d
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/blochsphere/LICENSE
@@ -0,0 +1,417 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
+
diff --git a/Master/texmf-dist/doc/latex/blochsphere/README.md b/Master/texmf-dist/doc/latex/blochsphere/README.md
new file mode 100644
index 00000000000..7fea48e3529
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/blochsphere/README.md
@@ -0,0 +1,6 @@
+latex-blochsphere
+=================
+
+A LaTeX package which allows for simple drawing of 3D projections of Bloch spheres.
+
+Documentation and stable API coming shortly.
diff --git a/Master/texmf-dist/doc/latex/blochsphere/blochsphere.pdf b/Master/texmf-dist/doc/latex/blochsphere/blochsphere.pdf
new file mode 100644
index 00000000000..951b5ed42a3
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/blochsphere/blochsphere.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/blochsphere/example.pdf b/Master/texmf-dist/doc/latex/blochsphere/example.pdf
new file mode 100644
index 00000000000..a66d3424f15
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/blochsphere/example.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/blochsphere/example.tex b/Master/texmf-dist/doc/latex/blochsphere/example.tex
new file mode 100644
index 00000000000..42cae462698
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/blochsphere/example.tex
@@ -0,0 +1,30 @@
+\documentclass{standalone}
+
+\usepackage{blochsphere}
+
+\begin{document}
+
+\begin{blochsphere}[radius=1.5 cm,tilt=15,rotation=-20]
+ \drawBallGrid[style={opacity=0.1}]{30}{30}
+
+ \drawGreatCircle[style={dashed}]{-60}{0}{0}
+ \drawGreatCircle[style={dashed}]{60}{0}{0}
+
+ \drawRotationLeft[scale=1.3,style={red}]{-60}{0}{0}{15}
+ \drawRotationRight[scale=1.3,style={red}]{60}{0}{0}{15}
+
+ \node at (-0.8,1.9) {\textcolor{red}{\tiny $J_{12}(t)$}};
+ \node at (1.1,1.8) {\textcolor{red}{\tiny $J_{23}(t)$}};
+
+ \labelLatLon{up}{90}{0};
+ \labelLatLon{down}{-90}{90};
+ \node[above] at (up) {{\tiny $\left|1\right>$ }};
+ \node[below] at (down) {{\tiny $\left|0\right>$}};
+
+ \labelLatLon[labelmark=false]{d}{15}{90};
+ \node at (d) {\color{gray}\fontsize{0.15cm}{1em}\selectfont $60^\circ$};
+
+ \labelLatLon[labelmark=false]{d2}{5}{78};
+ \node at (d2) {\color{gray}\fontsize{0.15cm}{1em}\selectfont $60^\circ$};
+\end{blochsphere}
+\end{document}
diff --git a/Master/texmf-dist/source/latex/blochsphere/blochsphere.dtx b/Master/texmf-dist/source/latex/blochsphere/blochsphere.dtx
new file mode 100644
index 00000000000..10cae76ad58
--- /dev/null
+++ b/Master/texmf-dist/source/latex/blochsphere/blochsphere.dtx
@@ -0,0 +1,853 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2015 by Matthew Wardrop <mister.wardrop@gmail.com>
+% ---------------------------------------------------------------------------
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Matthew Wardrop
+%
+% This work consists of the files blochsphere.dtx and blochsphere.ins
+% and the derived filebase blochsphere.sty.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{blochsphere.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{blochsphere}
+%<*package>
+ [2015/08/17 v1.0 blochsphere drawing package]
+%</package>
+%
+%<*driver>
+\documentclass{ltxdoc}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\usepackage{blochsphere}
+\usepackage{minted}
+\usepackage{hyperref}
+
+\setlength{\parskip}{0.7em}
+
+\newenvironment{key}[2]{
+ \noindent{\llap{Option: \bf\tt #2\hskip 9pt}}
+}{}
+\newcommand{\DescribeKey}[3][]{
+ \noindent{\llap{\bf\tt #2\hskip 9pt}[default = #1] #3}
+}
+
+\usepackage{listings}
+\lstset{breaklines=true}
+
+\begin{document}
+ \DocInput{blochsphere.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{841}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v1.0}{2015/08/17}{Initial version}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \providecommand*{\url}{\texttt}
+% \GetFileInfo{blochsphere.dtx}
+% \title{The \textsf{blochsphere} package}
+% \author{Matthew Wardrop \\ \url{mister.wardrop@gmail.com}}
+% \date{\fileversion~from \filedate}
+%
+% \maketitle
+%
+% \tableofcontents
+%
+% \section{Introduction}
+%
+% The |blochsphere| package is used to draw pseudo-3D Blochsphere diagrams, such as that
+% shown in figure \ref{fig:blochsphere}. It supports various annotations, such as
+% great and small circles, axes, rotation markings and state vectors. It can be used
+% in a standalone fashion, or nested within a |tikzpicture| environment by setting
+% the environment option |nested| to |true|.
+%
+% \section{Usage}
+%
+% Using |blochsphere| is as simple as creating a `blochsphere' environment.
+% \begin{minted}{LaTeX}
+% \begin{blochsphere}[<options>]
+% ...
+% \end{blochsphere}
+% \end{minted}
+% By default, this will create a blank Bloch sphere ready for annotation. The options can be
+% any of those described in the next section.
+%
+% \noindent\DescribeMacro{\drawBall} \oarg{options}\\
+% This macro draws the basic Bloch sphere, according to the options defined in the next section.
+%
+% \noindent\DescribeMacro{\drawBallGrid} \oarg{options} \marg{latdegsep} \marg{longdegsep}\\
+% This macro draws latitude and longitude circles at an interval defined by |latdegsep| and |longdegsep| respectively.
+%
+% \noindent\DescribeMacro{\setDrawingPlane} \oarg{options} \marg{tiltangle} \marg{rotationangle}\\
+% This macro defines a transformation matrix within TikZ to create the effect of 2D projections of 3D planes,
+% named according to the |plane| option. This is used internally in all of the drawing commands.
+%
+% \noindent\DescribeMacro{\setLatitudinalDrawingPlane} \oarg{options} \marg{latitude}\\
+% This is a special case of |\setDrawingPlane| that constructs the transform required to draw a 2D image in
+% a latitudinal plane.
+%
+% \noindent\DescribeMacro{\setLongitudinalDrawingPlane} \oarg{options} \marg{longitude}\\
+% This is a special case of |\setDrawingPlane| that constructs the transform required to draw a 2D image in
+% a longitudinal plane.
+%
+% \noindent\DescribeMacro{\drawCircle} \oarg{options} \marg{tiltangle} \marg{rotationangle}\\
+% Draws a circle on the surface of a Bloch sphere around the axis which is tilted by |tiltangle|
+% from the z-axis and with a rotation of |rotationangle| about the z-axis.
+%
+% \noindent\DescribeMacro{\drawGreatCircle} \oarg{options} \marg{tiltangle} \marg{rotationangle}\\
+% An alias of |\drawCircle|.
+%
+% \noindent\DescribeMacro{\drawSmallCircle} \oarg{options} \marg{tiltangle} \marg{rotationangle} \marg{offsetLatitude}\\
+% Draws a circle on the surface of a Bloch sphere around the axis which is tilted by |tiltangle|
+% from the z-axis and with a rotation of |rotationangle| about the z-axis, with an offset along the axis
+% such that it reaches an effective latitude of |offsetLatitude|.
+%
+% \noindent\DescribeMacro{\drawLatitudeCircle} \oarg{options} \marg{latitude}\\
+% Draws a circle on the Bloch sphere corresponding to the given latitude.
+%
+% \noindent\DescribeMacro{\drawLongitudeCircle} \oarg{options} \marg{longitude}\\
+% Draws a great circle on the Bloch sphere corresponding to the given longitude.
+%
+% \noindent\DescribeMacro{\drawRotationLeft} \oarg{options} \marg{tiltangle} \marg{rotationangle} \marg{axisoffset} \marg{clearangle}\\
+% Draw a left-handed rotation about the Bloch sphere, titled and rotated as for a circle
+% with the same parameters, with a gap in the line where the arrow should go of
+% |clearangle| degrees.
+%
+% \noindent\DescribeMacro{\drawRotationRight} \oarg{options} \marg{tiltangle} \marg{rotationangle} \marg{axisoffset} \marg{clearangle}\\
+% As above, but a right-handed rotation annotation.
+%
+% \noindent\DescribeMacro{\drawAxis} \oarg{options} \marg{tiltangle} \marg{rotationangle}\\
+% Draw a line along the axis tilted |tiltangle| degrees from the z-axis, rotated about
+% the z-axis by |rotationangle| degrees.
+%
+% \noindent\DescribeMacro{\labelPolar} \oarg{options} \marg{tikzlabel} \marg{tiltangle} \marg{rotationangle}\\
+% Assign a tikz label to the point identified by an angle |tiltangle| from the z-axis
+% and a rotation |rotationangle| about the z-axis.
+%
+% \noindent\DescribeMacro{\labelLatLon} \oarg{options} \marg{tikzlabel} \marg{latitude} \marg{longitude}\\
+% Assign a tikz label to the point identified the specified latitude and longitude.
+%
+% \noindent\DescribeMacro{\drawStatePolar} \oarg{options} \marg{tikzlabel} \marg{tiltangle} \marg{rotationangle}\\
+% Draw a vector from the origin to the point identified by an angle |tiltangle|
+% from the z-axis and a rotation |rotationangle| about the z-axis, which will
+% be labelled |tikzlabel|.
+%
+% \noindent\DescribeMacro{\drawStateLatLon} \oarg{options} \marg{tikzlabel} \marg{latitude} \marg{longitude}\\
+% Draw a vector from the origin to the point identified by the provided
+% latitude and longitude, which will be labelled |tikzlabel|.
+%
+%
+% \section{Package, Environment and Macro options}
+% For convenience, all options at all levels share the same namespace. Therefore, all
+% options passed to the package will be the defaults for all environment, which will
+% in turn be the defaults for all subsequent macro calls.
+%
+%
+% \DescribeKey[1.5cm]{radius}
+% {This option controls the radius of the qubit, and can be specified in any valid \LaTeX units.}
+%
+%
+% \DescribeKey[15]{tilt}{This option controls the tilt (into the page) of the top of the bloch sphere (in degrees).}
+%
+%
+% \DescribeKey[-20]{rotation}{This option controls the (right-handed) rotation of the Blochsphere around the (potentially tilted) z-axis, also specified in degrees.}
+%
+%
+% \DescribeKey[white]{color}{This specifies the colour of the drawn ball.}
+%
+%
+% \DescribeKey[0.7]{opacity}{This option controls the opacity of the ball, allowing lines drawn behind the ball to be visible.}
+%
+%
+% \DescribeKey[]{style}{This option controls the current drawing style, and supports any valid tikz styling.}
+%
+%
+% \DescribeKey[1]{scale}{This option allows one to temporarily change the scale of drawn circles/etc, allowing annotations to ``hover'' over the Bloch sphere.}
+%
+%
+% \DescribeKey[current plane]{plane}{The name which should label the current plane being defined, or the plane to be used.}
+%
+%
+% \DescribeKey[(0,0,0)]{shift}{The three dimensional offset by which the currently being drawn objects should be shifted.}
+%
+%
+% \DescribeKey[3d]{ball}{Specifies how the ball should be drawn. Options are: {\tt 3d}, {\tt circle}, {\tt none}}
+%
+%
+% \DescribeKey[black]{statecolor}{The color with which the state vectors should be drawn.}
+%
+%
+% \DescribeKey[0.4pt]{statewidth}{The width with which state vectors should be drawn.}
+%
+%
+% \DescribeKey[]{axisarrow}{The arrow to use at the end of a drawn axis.}
+%
+%
+% \DescribeKey[false]{labelmark}{Whether a black dot should be drawn at the point being labelled.}
+%
+%
+% \DescribeKey[false]{nested}{Whether the {\tt blochsphere} environment is being nested in a |tikzpicture| environment. If it is nested, then this should be set to true.}
+%
+%
+% \section{Example}
+% In this section we provide example code to generate the following diagram:
+%
+% \begin{figure}[h!]
+% \begin{center}
+% \includegraphics{example.pdf}
+% \end{center}
+% \caption{Example Bloch Sphere \label{fig:blochsphere}}
+% \end{figure}
+%
+% \newminted{latex}{gobble=2,linenos}
+% \begin{latexcode}
+% \begin{blochsphere}[radius=1.5 cm,tilt=15,rotation=-20]
+% \drawBallGrid[style={opacity=0.3}]{30}{30}
+%
+% \drawGreatCircle[style={dashed}]{-60}{0}{0}
+% \drawGreatCircle[style={dashed}]{60}{0}{0}
+%
+% \drawRotationLeft[scale=1.3,style={red}]{-60}{0}{0}{15}
+% \drawRotationRight[scale=1.3,style={red}]{60}{0}{0}{15}
+%
+% \node at (-0.8,1.9) {\textcolor{red}{\tiny $J_{12}(t)$}};
+% \node at (1.1,1.8) {\textcolor{red}{\tiny $J_{23}(t)$}};
+%
+% \labelLatLon{up}{90}{0};
+% \labelLatLon{down}{-90}{90};
+% \node[above] at (up) {{\tiny $\left|1\right>$ }};
+% \node[below] at (down) {{\tiny $\left|0\right>$}};
+%
+% \labelLatLon[labelmark=false]{d}{15}{90};
+% \node at (d) {\color{gray}\fontsize{0.15cm}{1em}\selectfont $60^\circ$};
+%
+% \labelLatLon[labelmark=falsa]{d2}{5}{78};
+% \node at (d2) {\color{gray}\fontsize{0.15cm}{1em}\selectfont $60^\circ$};
+% \end{blochsphere}
+% \end{latexcode}
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% \iffalse
+%<*package>
+% \fi
+% \subsection{Preamble}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{blochsphere}[2015/08/17]
+% \end{macrocode}
+% \iffalse
+%% \usepackage{trace}
+%%\tracingall
+% \fi
+%
+% \begin{macrocode}
+\usepackage{tikz,etoolbox,environ,ifthen,kvsetkeys,kvoptions}
+\usetikzlibrary{decorations.pathreplacing, decorations.markings, calc, fadings}
+% \end{macrocode}
+%
+% \subsection{Package/Environment/Macro options}
+%
+% \begin{key}{blochsphere}{radius}
+% \begin{macrocode}
+\define@key{blochsphere}{radius}{%
+ \def\blochsphere@radius{#1}%
+}
+\providecommand{\blochsphere@radius}{1cm}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{tilt}
+% \begin{macrocode}
+\define@key{blochsphere}{tilt}{%
+ \def\blochsphere@tilt{#1}%
+}
+\providecommand{\blochsphere@tilt}{15}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{rotation}
+% \begin{macrocode}
+\define@key{blochsphere}{rotation}{%
+ \def\blochsphere@rotation{#1}%
+}
+\providecommand{\blochsphere@rotation}{-20}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{color}
+% \begin{macrocode}
+\define@key{blochsphere}{color}{%
+ \def\blochsphere@color{#1}%
+}
+\providecommand{\blochsphere@color}{white}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{opacity}
+% \begin{macrocode}
+\define@key{blochsphere}{opacity}{%
+ \def\blochsphere@opacity{#1}%
+}
+\providecommand{\blochsphere@opacity}{0.7}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{style}
+% \begin{macrocode}
+\define@key{blochsphere}{style}{%
+ \def\blochsphere@style{#1}%
+}
+\providecommand{\blochsphere@style}{}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{scale}
+% \begin{macrocode}
+\define@key{blochsphere}{scale}{%
+ \def\blochsphere@scale{#1}%
+}
+\providecommand{\blochsphere@scale}{1}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{plane}
+% \begin{macrocode}
+\define@key{blochsphere}{plane}{%
+ \def\blochsphere@plane{#1}%
+}
+\providecommand{\blochsphere@plane}{current plane}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{shift}
+% \begin{macrocode}
+\define@key{blochsphere}{shift}{%
+ \def\blochsphere@shift{{#1}}%
+}
+\providecommand{\blochsphere@shift}{{0,0,0}}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{ball}
+% \begin{macrocode}
+\define@key{blochsphere}{ball}{%
+ \def\blochsphere@ball{#1}%
+}
+\providecommand{\blochsphere@ball}{3d}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{statecolor}
+% \begin{macrocode}
+\define@key{blochsphere}{statecolor}{%
+ \def\blochsphere@statecolor{#1}%
+}
+\providecommand{\blochsphere@statecolor}{black}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{statewidth}
+% \begin{macrocode}
+\define@key{blochsphere}{statewidth}{%
+ \def\blochsphere@statewidth{#1}%
+}
+\providecommand{\blochsphere@statewidth}{0.4pt}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{axisarrow}
+% \begin{macrocode}
+\define@key{blochsphere}{axisarrow}{%
+ \def\blochsphere@axisarrow{#1}%
+}
+\providecommand{\blochsphere@axisarrow}{}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{labelmark}
+% \begin{macrocode}
+\define@key{blochsphere}{labelmark}{%
+ \setboolean{blochsphere@labelmark}{#1}%
+}
+\newboolean{blochsphere@labelmark}
+\setboolean{blochsphere@labelmark}{false}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{nested}
+% \begin{macrocode}
+\define@key{blochsphere}{nested}{%
+ \setboolean{blochsphere@nested}{#1}%
+}
+\newboolean{blochsphere@nested}
+\setboolean{blochsphere@nested}{false}
+% \end{macrocode}
+% \end{key}
+% \begin{macrocode}
+\ProcessKeyvalOptions{blochsphere}\relax
+% \end{macrocode}
+%
+% \subsection{{\bfseries\tt blochsphere} Environment}
+% This is the central environment definition. Note that all macros defined
+% below will only be defined within this environment.
+%
+% \begin{environment}{blochsphere}
+% \begin{macrocode}
+\newenvironment{blochsphere}[1][]{
+ \begingroup
+ \makeatletter
+ \ignorespaces\setkeys{blochsphere}{#1}\unskip%
+ \pgfdeclarelayer{back}%
+ \pgfdeclarelayer{front}%
+ \pgfsetlayers{back,main,front}%
+ \pgfkeys{%
+ /tikz/on layer/.code={%
+ \pgfonlayer{##1}\begingroup%
+ \aftergroup\endpgfonlayer%
+ \aftergroup\endgroup%
+ },%
+ /tikz/node on layer/.code={%
+ \gdef\node@@on@layer{%
+ \setbox\tikz@tempbox=\hbox\bgroup\pgfonlayer{##1}\unhbox\tikz@tempbox\endpgfonlayer\egroup}%
+ \aftergroup\node@on@layer%
+ },%
+ /tikz/end node on layer/.code={%
+ \endpgfonlayer\endgroup\endgroup%
+ }%
+ }%
+ \def\node@on@layer{\aftergroup\node@@on@layer}%
+% \end{macrocode}
+% \begin{macro}{\drawBall}
+% \begin{macrocode}
+ \newcommand\drawBall[1][]{
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \expandafter\ifstrequal\expandafter{\blochsphere@ball}{3d}{
+ \fill[on layer=main,ball color=\blochsphere@color,opacity=\blochsphere@opacity] (0,0) circle (\blochsphere@radius); % 3D lighting effect
+ }{}
+ \expandafter\ifstrequal\expandafter{\blochsphere@ball}{circle}{
+ \draw[on layer=main,color=\blochsphere@color] (0,0) circle (\blochsphere@radius); % 3D lighting effect
+ }{}
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawBallGrid}
+% \begin{macrocode}
+ \newcommand\drawBallGrid[3][]{
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \foreach \phi in {0,##2,...,89} {
+ \drawLatitudeCircle{\phi}
+ \drawLatitudeCircle{-\phi}
+ }
+ \foreach \theta in {0,##3,...,179} {
+ \drawLongitudeCircle{\theta}
+ }
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setDrawingPlane}
+% \begin{macrocode}
+ \newcommand\setDrawingPlane[3][]{%
+ \setkeys{blochsphere}{##1}
+ \pgfmathsetmacro\aphi{##2}
+ \pgfmathsetmacro\atheta{##3}
+ \pgfmathsetmacro\dot{cos(\aphi)}
+ \ifdim\dot pt<0.7 pt\relax%
+ \pgfmathsetmacro\norm{cos(asin(\dot))}
+ \pgfmathsetmacro\xx{-sin(\aphi)*sin(\blochsphere@rotation - \atheta)}
+ \pgfmathsetmacro\xy{sin(\aphi)*sin(\blochsphere@tilt)*cos(\blochsphere@rotation - \atheta)}
+ \pgfmathsetmacro\yx{-sin(2*\aphi - \blochsphere@rotation + \atheta)/4 - sin(2*\aphi + \blochsphere@rotation - \atheta)/4}
+ \pgfmathsetmacro\yy{(sin(\aphi)*cos(\blochsphere@tilt) - sin(\blochsphere@tilt)*sin(\blochsphere@rotation - \atheta)*cos(\aphi))*sin(\aphi)}
+ \else
+ \pgfmathsetmacro\norm{sqrt(abs(sin(\blochsphere@rotation - \atheta)*cos(\aphi))^2 + abs(sin(\blochsphere@tilt)*cos(\aphi)*cos(\blochsphere@rotation - \atheta))^2 + abs(cos(\aphi)*cos(\blochsphere@tilt)*cos(\blochsphere@rotation - \atheta))^2)}
+ \pgfmathsetmacro\xx{-sin(\blochsphere@rotation - \atheta)*cos(\aphi)}
+ \pgfmathsetmacro\xy{sin(\blochsphere@tilt)*cos(\aphi)*cos(\blochsphere@rotation - \atheta)}
+ \pgfmathsetmacro\yx{-cos(\aphi)^2*cos(\blochsphere@rotation - \atheta)}
+ \pgfmathsetmacro\yy{(sin(\aphi)*cos(\blochsphere@tilt) - sin(\blochsphere@tilt)*sin(\blochsphere@rotation - \atheta)*cos(\aphi))*cos(\aphi)}
+ \fi
+ \computeOffset{shift}
+ \begingroup\newcommand\tmp[1]{\endgroup\noexpand\relax%
+ \tikzset{\blochsphere@plane/.style={cm={\xx/\norm, \xy/\norm, \yx/\norm, \yy/\norm, \unexpanded\expandafter{####1} }}}%
+ } \tmp{\shift}
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setLatitudinalDrawingPlane}
+% \begin{macrocode}
+ \newcommand\setLatitudinalDrawingPlane[2][]{%
+ \pgfmathsetmacro\yshift{sin(##2)*\the\blochsphere@radius}
+ \setDrawingPlane[##1,shift={{0,0,\yshift}}]{0}{0}
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setLatitudinalDrawingPlane}
+% \begin{macrocode}
+ \newcommand\setLongitudinalDrawingPlane[2][]{%
+ \setDrawingPlane[##1]{90}{##2}
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawCircle}
+% \begin{macrocode}
+ \newcommand\drawCircle[3][]{
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \setDrawingPlane{##2}{##3}
+ \computeVisibility{##2}{##3}{agamma}{abeta}
+ \begingroup\edef\tmp{\endgroup%
+ \noexpand\draw[current plane,on layer=back,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma-\abeta-0.2:\blochsphere@radius+\the\pgflinewidth*0.5) arc (\agamma-\abeta-0.2:\agamma+\abeta+0.2:\blochsphere@radius+\the\pgflinewidth*0.5)};
+ \noexpand\draw[current plane,on layer=front,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma+\abeta:\blochsphere@radius+\the\pgflinewidth*0.5) arc (\agamma+\abeta:\agamma-\abeta+360:\blochsphere@radius+\the\pgflinewidth*0.5)};
+ } \tmp
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawGreatCircle}
+% \begin{macrocode}
+ \newcommand\drawGreatCircle[3][]{
+ \drawCircle[##1]{##2}{##3}
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawSmallCircle}
+% \begin{macrocode}
+ \newcommand\drawSmallCircle[4][]{
+ \begingroup
+ \pgfmathsetmacro\xshift{sin(##2)*cos(##3)*\blochsphere@radius*sin(##4)}
+ \pgfmathsetmacro\yshift{sin(##2)*sin(##3)*\blochsphere@radius*sin(##4)}
+ \pgfmathsetmacro\zshift{cos(##2)*\blochsphere@radius*sin(##4)}
+ \pgfmathsetmacro\radius{\blochsphere@radius*cos(##4)}
+ \drawCircle[##1,shift={{\xshift,\yshift,\zshift}},radius=\radius]{##2}{##3}
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawLatitudeCircle}
+% \begin{macrocode}
+ \newcommand\drawLatitudeCircle[2][]{
+ \begingroup
+ \pgfmathsetmacro\yshift{sin(##2)*\blochsphere@radius}
+ \pgfmathsetmacro\radius{\blochsphere@radius*cos(##2)}
+ \drawCircle[##1,shift={{0,0,\yshift}},radius=\radius]{0}{0}
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawLongitudeCircle}
+% \begin{macrocode}
+ \newcommand\drawLongitudeCircle[2][]{
+ \begingroup
+ \drawCircle[##1]{90}{##2+90}
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawRotationLeft}
+% \begin{macrocode}
+ \newcommand\drawRotationLeft[5][]{
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \pgfmathsetmacro\xshift{sin(##2)*cos(##3)*##4}
+ \pgfmathsetmacro\yshift{sin(##2)*sin(##3)*##4}
+ \pgfmathsetmacro\zshift{cos(##2)*##4}
+ \setDrawingPlane[shift={\xshift,\yshift,\zshift}]{##2}{##3}
+ \computeVisibility{##2}{##3}{agamma}{abeta}
+ \begingroup\edef\tmp{\endgroup%
+ \noexpand\draw[current plane,on layer=back,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma-\abeta-0.2:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5) arc (\agamma-\abeta-0.2:\agamma+\abeta+0.2:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5)};
+ \noexpand\draw[<-,current plane,on layer=front,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma+\abeta+##5:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5) arc (\agamma+\abeta+##5:\agamma-\abeta+360:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5)};
+ } \tmp
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawRotationRight}
+% \begin{macrocode}
+ \newcommand\drawRotationRight[5][]{
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \pgfmathsetmacro\xshift{sin(##2)*cos(##3)*##4}
+ \pgfmathsetmacro\yshift{sin(##2)*sin(##3)*##4}
+ \pgfmathsetmacro\zshift{cos(##2)*##4}
+ \setDrawingPlane[shift={\xshift,\yshift,\zshift}]{##2}{##3}
+ \computeVisibility{##2}{##3}{agamma}{abeta}
+ \begingroup\edef\tmp{\endgroup%
+ \noexpand\draw[current plane,on layer=back,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma-\abeta-0.2:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5) arc (\agamma-\abeta-0.2:\agamma+\abeta+0.2:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5)};
+ \noexpand\draw[->,current plane,on layer=front,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma+\abeta:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5) arc (\agamma+\abeta:\agamma-\abeta+360-##5:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5)};
+ } \tmp
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawAxis}
+% \begin{macrocode}
+ \newcommand\drawAxis[3][] {
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \pgfmathsetmacro\behind{ifthenelse(-sin(##2)*sin(\blochsphere@rotation - ##3)*cos(\blochsphere@tilt) + sin(\blochsphere@tilt)*cos(##2)<0, 1, 0)}
+ \pgfmathsetmacro\newphi{180-##2}
+ \pgfmathsetmacro\newtheta{##3+180}
+ \ifnum\behind=0\relax
+ \labelPolar[scale=1,mark=0]{blochspheretmpp}{##2}{##3}
+ \labelPolar[mark=0]{blochspheretmps}{##2}{##3}
+ \labelPolar[mark=0]{blochspheretmpe}{\newphi}{\newtheta}
+ \else
+ \labelPolar[scale=1,mark=0]{blochspheretmpp}{\newphi}{\newtheta}
+ \labelPolar[mark=0]{blochspheretmpe}{##2}{##3}
+ \labelPolar[mark=0]{blochspheretmps}{\newphi}{\newtheta}
+ \fi
+ \begingroup\edef\tmp{\endgroup%
+ \ifnum\behind=0\relax
+ \noexpand\draw[on layer=front,\unexpanded\expandafter{\blochsphere@style},\blochsphere@axisarrow] (blochspheretmpp) -- (blochspheretmps);
+ \noexpand\draw[on layer=back,\unexpanded\expandafter{\blochsphere@style}] (blochspheretmpe) -- (blochspheretmpp);
+ \else
+ \noexpand\draw[on layer=front,\unexpanded\expandafter{\blochsphere@style},\blochsphere@axisarrow] (blochspheretmpp) -- (blochspheretmpe);
+ \noexpand\draw[on layer=back,\unexpanded\expandafter{\blochsphere@style}] (blochspheretmps) -- (blochspheretmpp);
+ \fi
+ } \tmp
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\labelPolar}
+% \begin{macrocode}
+ \newcommand\labelPolar[4][]{%
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \setLongitudinalDrawingPlane{##4+90}
+ \pgfmathsetmacro\behind{ifthenelse(-sin(##3)*sin(\blochsphere@rotation - ##4)*cos(\blochsphere@tilt) + sin(\blochsphere@tilt)*cos(##3)<0, 1, 0)}
+ \ifthenelse{\boolean{blochsphere@labelmark}}
+ {
+ \ifnum\behind=1\relax
+ \path[current plane,on layer=back] (90-##3:\blochsphere@radius*\blochsphere@scale) coordinate[mark coordinate] (##2); %
+ \else
+ \path[current plane,on layer=front] (90-##3:\blochsphere@radius*\blochsphere@scale) coordinate[mark coordinate] (##2); %
+ \fi
+ }
+ {
+ \ifnum\behind=1\relax
+ \path[current plane,on layer=back] (90-##3:\blochsphere@radius*\blochsphere@scale) coordinate (##2); %
+ \else
+ \path[current plane,on layer=front] (90-##3:\blochsphere@radius*\blochsphere@scale) coordinate (##2); %
+ \fi
+ }
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\labelLatLon}
+% \begin{macrocode}
+ \newcommand\labelLatLon[4][]{%
+ \begingroup
+ \pgfmathsetmacro\newphi{90-##3}
+ \labelPolar[##1]{##2}{\newphi}{##4}
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawStateLatLon}
+% \begin{macrocode}
+ \newcommand\drawStateLatLon[4][]{
+ \begingroup
+ \pgfmathsetmacro\newphi{90-##3}
+ \drawStatePolar[##1]{##2}{\newphi}{##4}
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawStatePolar}
+% \begin{macrocode}
+ \newcommand\drawStatePolar[4][]{
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \labelPolar{##2}{##3}{##4}
+ \pgfmathsetmacro\behind{ifthenelse(-sin(##3)*sin(\blochsphere@rotation - ##4)*cos(\blochsphere@tilt) + sin(\blochsphere@tilt)*cos(##3)<0, 1, 0)}
+ \ifnum\behind=1\relax
+ \tikzset{test/.style={
+ postaction={
+ decorate,
+ decoration={
+ markings,
+ mark=at position \pgfdecoratedpathlength-0.5pt with {\arrow[\blochsphere@statecolor,line width=\blochsphere@statewidth,opacity=0.2] {>}; },
+ mark=between positions 0 and \pgfdecoratedpathlength-5pt step 0.5pt with {
+ \pgfmathsetmacro\myval{multiply(divide(
+ \pgfkeysvalueof{/pgf/decoration/mark info/distance from start}, \pgfdecoratedpathlength),100)};
+ \pgfsetfillcolor{\blochsphere@statecolor};
+ \pgfsetfillopacity{0.4-\myval/100*0.2}
+ \pgfpathcircle{\pgfpointorigin}{\blochsphere@statewidth};
+ \pgfusepath{fill};}
+ }}}}
+ \else
+ \tikzset{test/.style={
+ postaction={
+ decorate,
+ decoration={
+ markings,
+ mark=at position \pgfdecoratedpathlength-0.5pt with {\arrow[\blochsphere@statecolor,line width=\blochsphere@statewidth] {>}; },
+ mark=between positions 0 and \pgfdecoratedpathlength-5pt step 0.5pt with {
+ \pgfmathsetmacro\myval{multiply(divide(
+ \pgfkeysvalueof{/pgf/decoration/mark info/distance from start}, \pgfdecoratedpathlength),100)};
+ \pgfsetfillcolor{\blochsphere@statecolor};
+ \pgfsetfillopacity{0.4+\myval/100*0.6}
+ \pgfpathcircle{\pgfpointorigin}{\blochsphere@statewidth};
+ \pgfusepath{fill};}
+ }}}}
+ \fi
+ \path [test,on layer=main] (0,0) -- (##2);
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\computeOffset}
+% \begin{macrocode}
+ \newcommand\computeOffset[2][]{%
+ \setkeys{blochsphere}{##1}%
+ \pgfmathsetmacro{\x}{\blochsphere@shift[0]*cos(\blochsphere@rotation) + \blochsphere@shift[1]*sin(\blochsphere@rotation)}%
+ \pgfmathsetmacro\y{\blochsphere@shift[0]*sin(\blochsphere@rotation)*sin(\blochsphere@tilt) - \blochsphere@shift[1]*sin(\blochsphere@tilt)*cos(\blochsphere@rotation) + \blochsphere@shift[2]*cos(\blochsphere@tilt)}
+ \expandafter\def\csname ##2\endcsname{(\x pt,\y pt)}%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\computeVisibility}
+% \begin{macrocode}
+ \newcommand\computeVisibility[5][]{
+ \setkeys{blochsphere}{##1}
+ \pgfmathsetmacro\aphi{##2}
+ \pgfmathsetmacro\atheta{##3}
+ \pgfmathsetmacro\d{sqrt(\blochsphere@shift[0]^2+\blochsphere@shift[1]^2+\blochsphere@shift[2]^2)}%% distance from origin of shift
+ \pgfmathsetmacro\tatheta{\atheta+\blochsphere@rotation}
+ \pgfmathsetmacro\dot{cos(\aphi)}
+ \ifdim\dot pt<0.7 pt\relax%
+ \pgfmathsetmacro\domaintest{ifthenelse(and(\blochsphere@rotation - \atheta==0,or(\aphi==0,sin(\blochsphere@tilt==0))),0,1)}
+ \ifdim\domaintest pt=0 pt\relax
+ \pgfmathsetmacro\agamma{0}
+ \else
+ \pgfmathsetmacro\agamma{-90+atan(cos(\blochsphere@tilt)*cos(\blochsphere@rotation - \atheta)/(sin(\aphi)*sin(\blochsphere@tilt) + sin(\blochsphere@rotation - \atheta)*cos(\aphi)*cos(\blochsphere@tilt)))}
+ \fi
+ \else
+ \pgfmathsetmacro\domaintest{ifthenelse(and(Mod(\blochsphere@rotation-\atheta,180)==90,Mod(\blochsphere@tilt,180)==90),0,1)}
+ \pgfmathsetmacro\domaintesttwo{ifthenelse(Mod(\blochsphere@rotation-\atheta,180)==90,0,1)}
+ \pgfmathsetmacro\domaintestthree{ifthenelse(Mod(\blochsphere@tilt,180)==90,0,1)}
+ \ifdim\domaintest pt=0 pt\relax
+ \pgfmathsetmacro\agamma{360-90*\blochsphere@tilt/abs(\blochsphere@tilt)}
+ \else
+ \ifdim\domaintesttwo pt=0 pt\relax
+ \pgfmathsetmacro\agamma{360-90*(sin(\aphi)*tan(\blochsphere@tilt)+cos(\aphi)*sin(\blochsphere@rotation-\atheta))/abs(sin(\aphi)*tan(\blochsphere@tilt)+cos(\aphi)*sin(\blochsphere@rotation-\atheta))}
+ \else
+ \ifdim\domaintestthree pt=0 pt\relax
+ \pgfmathsetmacro\agamma{360-90*\blochsphere@tilt/abs(\blochsphere@tilt)*cos(\blochsphere@rotation-\atheta)/abs(cos(\blochsphere@rotation-\atheta))}
+ \else
+ \pgfmathsetmacro\agamma{360-atan( (sin(\aphi)*tan(\blochsphere@tilt)+cos(\aphi)*sin(\blochsphere@rotation-\atheta))/cos(\blochsphere@rotation-\atheta) )}
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfmathsetmacro\aalpha{acos(-sin(\aphi)*sin(\blochsphere@rotation)*cos(\atheta)*cos(\blochsphere@tilt) + sin(\aphi)*sin(\atheta)*cos(\blochsphere@rotation)*cos(\blochsphere@tilt) + sin(\blochsphere@tilt)*cos(\aphi))}
+ \pgfmathsetmacro\aalphatest{atan(\d/\blochsphere@radius)}
+ \ifdim\aalpha pt<\aalphatest pt\relax
+ \pgfmathsetmacro\abeta{0}
+ \else
+ \pgfmathsetmacro\abeta{acos(\d*cot(\aalpha)/\blochsphere@radius)}
+ \fi
+ \pgfmathsetmacro\abeta{ifthenelse(\blochsphere@shift[2]<0,\abeta+2*(90-\abeta),\abeta)}
+ \expandafter\pgfmathsetmacro\csname ##4\endcsname{\agamma}
+ \expandafter\pgfmathsetmacro\csname ##5\endcsname{\abeta}
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+ \tikzset{%
+ >=latex, % option for nice arrows
+ inner sep=0pt,%
+ outer sep=2pt,%
+ mark coordinate/.style={inner sep=0pt,outer sep=0pt,minimum size=3pt,
+ fill=black,circle}%
+ }%
+ \pgfdeclareradialshading[tikz@ball]{ball}{\pgfqpoint{-10bp}{10bp}}{%
+ color(0bp)=(tikz@ball!30!white);
+ color(9bp)=(tikz@ball!75!white);
+ color(18bp)=(tikz@ball!90!black);
+ color(25bp)=(tikz@ball!70!black);
+ color(50bp)=(black)
+ }%
+ \ifthenelse{\boolean{blochsphere@nested}}{}{%
+ \begin{tikzpicture}
+ \drawBall
+ }%
+}
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+{
+ \ifthenelse{\boolean{blochsphere@nested}}{}{
+ \end{tikzpicture}%
+ }%
+ \endgroup%
+}
+\endinput
+% \end{macrocode}
+
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \Finale
+\endinput
diff --git a/Master/texmf-dist/source/latex/blochsphere/blochsphere.ins b/Master/texmf-dist/source/latex/blochsphere/blochsphere.ins
new file mode 100644
index 00000000000..0fa2764a365
--- /dev/null
+++ b/Master/texmf-dist/source/latex/blochsphere/blochsphere.ins
@@ -0,0 +1,57 @@
+%% blochsphere.dtx
+%% Copyright 2015 Matthew Wardrop <mister.wardrop@gmail.com>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Matthew Wardrop.
+%
+% This work consists of the files blochsphere.dtx and blochsphere.ins,
+% the derived file pig.sty and any accompanying documentation and examples.
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/blochsphere}
+
+\preamble
+
+This generated file is part of the blochsphere package.
+
+Copyright (C) 2015 by Matthew Wardrop <mister.wardrop@gmail.com>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+\endpreamble
+
+\generate{\file{blochsphere.sty}{\from{blochsphere.dtx}{package}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* blochsphere.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file blochsphere.dtx *}
+\Msg{* through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
diff --git a/Master/texmf-dist/tex/latex/blochsphere/blochsphere.sty b/Master/texmf-dist/tex/latex/blochsphere/blochsphere.sty
new file mode 100644
index 00000000000..720b05b5bc2
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/blochsphere/blochsphere.sty
@@ -0,0 +1,407 @@
+%%
+%% This is file `blochsphere.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% blochsphere.dtx (with options: `package')
+%%
+%% This generated file is part of the blochsphere package.
+%%
+%% Copyright (C) 2015 by Matthew Wardrop <mister.wardrop@gmail.com>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{blochsphere}
+ [2015/08/17 v1.0 blochsphere drawing package]
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{blochsphere}[2015/08/17]
+%% \usepackage{trace}
+%%\tracingall
+\usepackage{tikz,etoolbox,environ,ifthen,kvsetkeys,kvoptions}
+\usetikzlibrary{decorations.pathreplacing, decorations.markings, calc, fadings}
+\define@key{blochsphere}{radius}{%
+\def\blochsphere@radius{#1}%
+}
+\providecommand{\blochsphere@radius}{1cm}
+\define@key{blochsphere}{tilt}{%
+\def\blochsphere@tilt{#1}%
+}
+\providecommand{\blochsphere@tilt}{15}
+\define@key{blochsphere}{rotation}{%
+\def\blochsphere@rotation{#1}%
+}
+\providecommand{\blochsphere@rotation}{-20}
+\define@key{blochsphere}{color}{%
+\def\blochsphere@color{#1}%
+}
+\providecommand{\blochsphere@color}{white}
+\define@key{blochsphere}{opacity}{%
+\def\blochsphere@opacity{#1}%
+}
+\providecommand{\blochsphere@opacity}{0.7}
+\define@key{blochsphere}{style}{%
+\def\blochsphere@style{#1}%
+}
+\providecommand{\blochsphere@style}{}
+\define@key{blochsphere}{scale}{%
+\def\blochsphere@scale{#1}%
+}
+\providecommand{\blochsphere@scale}{1}
+\define@key{blochsphere}{plane}{%
+\def\blochsphere@plane{#1}%
+}
+\providecommand{\blochsphere@plane}{current plane}
+\define@key{blochsphere}{shift}{%
+\def\blochsphere@shift{{#1}}%
+}
+\providecommand{\blochsphere@shift}{{0,0,0}}
+\define@key{blochsphere}{ball}{%
+\def\blochsphere@ball{#1}%
+}
+\providecommand{\blochsphere@ball}{3d}
+\define@key{blochsphere}{statecolor}{%
+\def\blochsphere@statecolor{#1}%
+}
+\providecommand{\blochsphere@statecolor}{black}
+\define@key{blochsphere}{statewidth}{%
+\def\blochsphere@statewidth{#1}%
+}
+\providecommand{\blochsphere@statewidth}{0.4pt}
+\define@key{blochsphere}{axisarrow}{%
+\def\blochsphere@axisarrow{#1}%
+}
+\providecommand{\blochsphere@axisarrow}{}
+\define@key{blochsphere}{labelmark}{%
+ \setboolean{blochsphere@labelmark}{#1}%
+}
+\newboolean{blochsphere@labelmark}
+\setboolean{blochsphere@labelmark}{false}
+\define@key{blochsphere}{nested}{%
+\setboolean{blochsphere@nested}{#1}%
+}
+\newboolean{blochsphere@nested}
+\setboolean{blochsphere@nested}{false}
+\ProcessKeyvalOptions{blochsphere}\relax
+\newenvironment{blochsphere}[1][]{
+\begingroup
+\makeatletter
+\ignorespaces\setkeys{blochsphere}{#1}\unskip%
+\pgfdeclarelayer{back}%
+\pgfdeclarelayer{front}%
+\pgfsetlayers{back,main,front}%
+\pgfkeys{%
+/tikz/on layer/.code={%
+\pgfonlayer{##1}\begingroup%
+\aftergroup\endpgfonlayer%
+\aftergroup\endgroup%
+},%
+/tikz/node on layer/.code={%
+\gdef\node@@on@layer{%
+\setbox\tikz@tempbox=\hbox\bgroup\pgfonlayer{##1}\unhbox\tikz@tempbox\endpgfonlayer\egroup}%
+\aftergroup\node@on@layer%
+},%
+/tikz/end node on layer/.code={%
+\endpgfonlayer\endgroup\endgroup%
+}%
+}%
+\def\node@on@layer{\aftergroup\node@@on@layer}%
+\newcommand\drawBall[1][]{
+\begingroup
+\setkeys{blochsphere}{##1}
+\expandafter\ifstrequal\expandafter{\blochsphere@ball}{3d}{
+\fill[on layer=main,ball color=\blochsphere@color,opacity=\blochsphere@opacity] (0,0) circle (\blochsphere@radius); % 3D lighting effect
+}{}
+\expandafter\ifstrequal\expandafter{\blochsphere@ball}{circle}{
+\draw[on layer=main,color=\blochsphere@color] (0,0) circle (\blochsphere@radius); % 3D lighting effect
+}{}
+\endgroup
+}%
+\newcommand\drawBallGrid[3][]{
+\begingroup
+\setkeys{blochsphere}{##1}
+\foreach \phi in {0,##2,...,89} {
+\drawLatitudeCircle{\phi}
+\drawLatitudeCircle{-\phi}
+}
+\foreach \theta in {0,##3,...,179} {
+\drawLongitudeCircle{\theta}
+}
+\endgroup
+}%
+\newcommand\setDrawingPlane[3][]{%
+\setkeys{blochsphere}{##1}
+\pgfmathsetmacro\aphi{##2}
+\pgfmathsetmacro\atheta{##3}
+\pgfmathsetmacro\dot{cos(\aphi)}
+\ifdim\dot pt<0.7 pt\relax%
+\pgfmathsetmacro\norm{cos(asin(\dot))}
+\pgfmathsetmacro\xx{-sin(\aphi)*sin(\blochsphere@rotation - \atheta)}
+\pgfmathsetmacro\xy{sin(\aphi)*sin(\blochsphere@tilt)*cos(\blochsphere@rotation - \atheta)}
+\pgfmathsetmacro\yx{-sin(2*\aphi - \blochsphere@rotation + \atheta)/4 - sin(2*\aphi + \blochsphere@rotation - \atheta)/4}
+\pgfmathsetmacro\yy{(sin(\aphi)*cos(\blochsphere@tilt) - sin(\blochsphere@tilt)*sin(\blochsphere@rotation - \atheta)*cos(\aphi))*sin(\aphi)}
+\else
+\pgfmathsetmacro\norm{sqrt(abs(sin(\blochsphere@rotation - \atheta)*cos(\aphi))^2 + abs(sin(\blochsphere@tilt)*cos(\aphi)*cos(\blochsphere@rotation - \atheta))^2 + abs(cos(\aphi)*cos(\blochsphere@tilt)*cos(\blochsphere@rotation - \atheta))^2)}
+\pgfmathsetmacro\xx{-sin(\blochsphere@rotation - \atheta)*cos(\aphi)}
+\pgfmathsetmacro\xy{sin(\blochsphere@tilt)*cos(\aphi)*cos(\blochsphere@rotation - \atheta)}
+\pgfmathsetmacro\yx{-cos(\aphi)^2*cos(\blochsphere@rotation - \atheta)}
+\pgfmathsetmacro\yy{(sin(\aphi)*cos(\blochsphere@tilt) - sin(\blochsphere@tilt)*sin(\blochsphere@rotation - \atheta)*cos(\aphi))*cos(\aphi)}
+\fi
+\computeOffset{shift}
+ \begingroup\newcommand\tmp[1]{\endgroup\noexpand\relax%
+\tikzset{\blochsphere@plane/.style={cm={\xx/\norm, \xy/\norm, \yx/\norm, \yy/\norm, \unexpanded\expandafter{####1} }}}%
+} \tmp{\shift}
+}%
+\newcommand\setLatitudinalDrawingPlane[2][]{%
+\pgfmathsetmacro\yshift{sin(##2)*\the\blochsphere@radius}
+\setDrawingPlane[##1,shift={{0,0,\yshift}}]{0}{0}
+}%
+\newcommand\setLongitudinalDrawingPlane[2][]{%
+\setDrawingPlane[##1]{90}{##2}
+}%
+\newcommand\drawCircle[3][]{
+\begingroup
+\setkeys{blochsphere}{##1}
+\setDrawingPlane{##2}{##3}
+\computeVisibility{##2}{##3}{agamma}{abeta}
+\begingroup\edef\tmp{\endgroup%
+\noexpand\draw[current plane,on layer=back,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma-\abeta-0.2:\blochsphere@radius+\the\pgflinewidth*0.5) arc (\agamma-\abeta-0.2:\agamma+\abeta+0.2:\blochsphere@radius+\the\pgflinewidth*0.5)};
+\noexpand\draw[current plane,on layer=front,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma+\abeta:\blochsphere@radius+\the\pgflinewidth*0.5) arc (\agamma+\abeta:\agamma-\abeta+360:\blochsphere@radius+\the\pgflinewidth*0.5)};
+} \tmp
+\endgroup
+}%
+\newcommand\drawGreatCircle[3][]{
+\drawCircle[##1]{##2}{##3}
+}
+\newcommand\drawSmallCircle[4][]{
+\begingroup
+\pgfmathsetmacro\xshift{sin(##2)*cos(##3)*\blochsphere@radius*sin(##4)}
+\pgfmathsetmacro\yshift{sin(##2)*sin(##3)*\blochsphere@radius*sin(##4)}
+\pgfmathsetmacro\zshift{cos(##2)*\blochsphere@radius*sin(##4)}
+\pgfmathsetmacro\radius{\blochsphere@radius*cos(##4)}
+\drawCircle[##1,shift={{\xshift,\yshift,\zshift}},radius=\radius]{##2}{##3}
+\endgroup
+}%
+\newcommand\drawLatitudeCircle[2][]{
+\begingroup
+\pgfmathsetmacro\yshift{sin(##2)*\blochsphere@radius}
+\pgfmathsetmacro\radius{\blochsphere@radius*cos(##2)}
+\drawCircle[##1,shift={{0,0,\yshift}},radius=\radius]{0}{0}
+\endgroup
+}%
+\newcommand\drawLongitudeCircle[2][]{
+\begingroup
+\drawCircle[##1]{90}{##2+90}
+\endgroup
+}%
+\newcommand\drawRotationLeft[5][]{
+\begingroup
+\setkeys{blochsphere}{##1}
+\pgfmathsetmacro\xshift{sin(##2)*cos(##3)*##4}
+\pgfmathsetmacro\yshift{sin(##2)*sin(##3)*##4}
+\pgfmathsetmacro\zshift{cos(##2)*##4}
+\setDrawingPlane[shift={\xshift,\yshift,\zshift}]{##2}{##3}
+\computeVisibility{##2}{##3}{agamma}{abeta}
+\begingroup\edef\tmp{\endgroup%
+\noexpand\draw[current plane,on layer=back,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma-\abeta-0.2:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5) arc (\agamma-\abeta-0.2:\agamma+\abeta+0.2:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5)};
+\noexpand\draw[<-,current plane,on layer=front,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma+\abeta+##5:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5) arc (\agamma+\abeta+##5:\agamma-\abeta+360:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5)};
+} \tmp
+\endgroup
+}%
+\newcommand\drawRotationRight[5][]{
+\begingroup
+\setkeys{blochsphere}{##1}
+\pgfmathsetmacro\xshift{sin(##2)*cos(##3)*##4}
+\pgfmathsetmacro\yshift{sin(##2)*sin(##3)*##4}
+\pgfmathsetmacro\zshift{cos(##2)*##4}
+\setDrawingPlane[shift={\xshift,\yshift,\zshift}]{##2}{##3}
+\computeVisibility{##2}{##3}{agamma}{abeta}
+\begingroup\edef\tmp{\endgroup%
+\noexpand\draw[current plane,on layer=back,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma-\abeta-0.2:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5) arc (\agamma-\abeta-0.2:\agamma+\abeta+0.2:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5)};
+\noexpand\draw[->,current plane,on layer=front,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma+\abeta:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5) arc (\agamma+\abeta:\agamma-\abeta+360-##5:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5)};
+} \tmp
+\endgroup
+}%
+\newcommand\drawAxis[3][] {
+\begingroup
+\setkeys{blochsphere}{##1}
+\pgfmathsetmacro\behind{ifthenelse(-sin(##2)*sin(\blochsphere@rotation - ##3)*cos(\blochsphere@tilt) + sin(\blochsphere@tilt)*cos(##2)<0, 1, 0)}
+\pgfmathsetmacro\newphi{180-##2}
+\pgfmathsetmacro\newtheta{##3+180}
+\ifnum\behind=0\relax
+\labelPolar[scale=1,mark=0]{blochspheretmpp}{##2}{##3}
+\labelPolar[mark=0]{blochspheretmps}{##2}{##3}
+\labelPolar[mark=0]{blochspheretmpe}{\newphi}{\newtheta}
+\else
+\labelPolar[scale=1,mark=0]{blochspheretmpp}{\newphi}{\newtheta}
+\labelPolar[mark=0]{blochspheretmpe}{##2}{##3}
+\labelPolar[mark=0]{blochspheretmps}{\newphi}{\newtheta}
+\fi
+\begingroup\edef\tmp{\endgroup%
+\ifnum\behind=0\relax
+\noexpand\draw[on layer=front,\unexpanded\expandafter{\blochsphere@style},\blochsphere@axisarrow] (blochspheretmpp) -- (blochspheretmps);
+\noexpand\draw[on layer=back,\unexpanded\expandafter{\blochsphere@style}] (blochspheretmpe) -- (blochspheretmpp);
+\else
+\noexpand\draw[on layer=front,\unexpanded\expandafter{\blochsphere@style},\blochsphere@axisarrow] (blochspheretmpp) -- (blochspheretmpe);
+\noexpand\draw[on layer=back,\unexpanded\expandafter{\blochsphere@style}] (blochspheretmps) -- (blochspheretmpp);
+\fi
+} \tmp
+\endgroup
+}%
+\newcommand\labelPolar[4][]{%
+\begingroup
+\setkeys{blochsphere}{##1}
+\setLongitudinalDrawingPlane{##4+90}
+\pgfmathsetmacro\behind{ifthenelse(-sin(##3)*sin(\blochsphere@rotation - ##4)*cos(\blochsphere@tilt) + sin(\blochsphere@tilt)*cos(##3)<0, 1, 0)}
+\ifthenelse{\boolean{blochsphere@labelmark}}
+ {
+ \ifnum\behind=1\relax
+ \path[current plane,on layer=back] (90-##3:\blochsphere@radius*\blochsphere@scale) coordinate[mark coordinate] (##2); %
+ \else
+ \path[current plane,on layer=front] (90-##3:\blochsphere@radius*\blochsphere@scale) coordinate[mark coordinate] (##2); %
+ \fi
+ }
+ {
+ \ifnum\behind=1\relax
+ \path[current plane,on layer=back] (90-##3:\blochsphere@radius*\blochsphere@scale) coordinate (##2); %
+ \else
+ \path[current plane,on layer=front] (90-##3:\blochsphere@radius*\blochsphere@scale) coordinate (##2); %
+ \fi
+ }
+\endgroup
+}%
+\newcommand\labelLatLon[4][]{%
+\begingroup
+\pgfmathsetmacro\newphi{90-##3}
+\labelPolar[##1]{##2}{\newphi}{##4}
+\endgroup
+}%
+\newcommand\drawStateLatLon[4][]{
+\begingroup
+\pgfmathsetmacro\newphi{90-##3}
+\drawStatePolar[##1]{##2}{\newphi}{##4}
+\endgroup
+}%
+\newcommand\drawStatePolar[4][]{
+\begingroup
+\setkeys{blochsphere}{##1}
+\labelPolar{##2}{##3}{##4}
+\pgfmathsetmacro\behind{ifthenelse(-sin(##3)*sin(\blochsphere@rotation - ##4)*cos(\blochsphere@tilt) + sin(\blochsphere@tilt)*cos(##3)<0, 1, 0)}
+\ifnum\behind=1\relax
+\tikzset{test/.style={
+postaction={
+decorate,
+decoration={
+markings,
+mark=at position \pgfdecoratedpathlength-0.5pt with {\arrow[\blochsphere@statecolor,line width=\blochsphere@statewidth,opacity=0.2] {>}; },
+mark=between positions 0 and \pgfdecoratedpathlength-5pt step 0.5pt with {
+\pgfmathsetmacro\myval{multiply(divide(
+\pgfkeysvalueof{/pgf/decoration/mark info/distance from start}, \pgfdecoratedpathlength),100)};
+\pgfsetfillcolor{\blochsphere@statecolor};
+\pgfsetfillopacity{0.4-\myval/100*0.2}
+\pgfpathcircle{\pgfpointorigin}{\blochsphere@statewidth};
+\pgfusepath{fill};}
+}}}}
+\else
+\tikzset{test/.style={
+postaction={
+decorate,
+decoration={
+markings,
+mark=at position \pgfdecoratedpathlength-0.5pt with {\arrow[\blochsphere@statecolor,line width=\blochsphere@statewidth] {>}; },
+mark=between positions 0 and \pgfdecoratedpathlength-5pt step 0.5pt with {
+\pgfmathsetmacro\myval{multiply(divide(
+\pgfkeysvalueof{/pgf/decoration/mark info/distance from start}, \pgfdecoratedpathlength),100)};
+\pgfsetfillcolor{\blochsphere@statecolor};
+\pgfsetfillopacity{0.4+\myval/100*0.6}
+\pgfpathcircle{\pgfpointorigin}{\blochsphere@statewidth};
+\pgfusepath{fill};}
+}}}}
+\fi
+\path [test,on layer=main] (0,0) -- (##2);
+\endgroup
+}%
+\newcommand\computeOffset[2][]{%
+\setkeys{blochsphere}{##1}%
+\pgfmathsetmacro{\x}{\blochsphere@shift[0]*cos(\blochsphere@rotation) + \blochsphere@shift[1]*sin(\blochsphere@rotation)}%
+\pgfmathsetmacro\y{\blochsphere@shift[0]*sin(\blochsphere@rotation)*sin(\blochsphere@tilt) - \blochsphere@shift[1]*sin(\blochsphere@tilt)*cos(\blochsphere@rotation) + \blochsphere@shift[2]*cos(\blochsphere@tilt)}
+\expandafter\def\csname ##2\endcsname{(\x pt,\y pt)}%
+}%
+\newcommand\computeVisibility[5][]{
+\setkeys{blochsphere}{##1}
+\pgfmathsetmacro\aphi{##2}
+\pgfmathsetmacro\atheta{##3}
+\pgfmathsetmacro\d{sqrt(\blochsphere@shift[0]^2+\blochsphere@shift[1]^2+\blochsphere@shift[2]^2)}%% distance from origin of shift
+\pgfmathsetmacro\tatheta{\atheta+\blochsphere@rotation}
+\pgfmathsetmacro\dot{cos(\aphi)}
+\ifdim\dot pt<0.7 pt\relax%
+\pgfmathsetmacro\domaintest{ifthenelse(and(\blochsphere@rotation - \atheta==0,or(\aphi==0,sin(\blochsphere@tilt==0))),0,1)}
+\ifdim\domaintest pt=0 pt\relax
+\pgfmathsetmacro\agamma{0}
+\else
+\pgfmathsetmacro\agamma{-90+atan(cos(\blochsphere@tilt)*cos(\blochsphere@rotation - \atheta)/(sin(\aphi)*sin(\blochsphere@tilt) + sin(\blochsphere@rotation - \atheta)*cos(\aphi)*cos(\blochsphere@tilt)))}
+\fi
+\else
+\pgfmathsetmacro\domaintest{ifthenelse(and(Mod(\blochsphere@rotation-\atheta,180)==90,Mod(\blochsphere@tilt,180)==90),0,1)}
+\pgfmathsetmacro\domaintesttwo{ifthenelse(Mod(\blochsphere@rotation-\atheta,180)==90,0,1)}
+\pgfmathsetmacro\domaintestthree{ifthenelse(Mod(\blochsphere@tilt,180)==90,0,1)}
+\ifdim\domaintest pt=0 pt\relax
+\pgfmathsetmacro\agamma{360-90*\blochsphere@tilt/abs(\blochsphere@tilt)}
+\else
+\ifdim\domaintesttwo pt=0 pt\relax
+\pgfmathsetmacro\agamma{360-90*(sin(\aphi)*tan(\blochsphere@tilt)+cos(\aphi)*sin(\blochsphere@rotation-\atheta))/abs(sin(\aphi)*tan(\blochsphere@tilt)+cos(\aphi)*sin(\blochsphere@rotation-\atheta))}
+\else
+\ifdim\domaintestthree pt=0 pt\relax
+\pgfmathsetmacro\agamma{360-90*\blochsphere@tilt/abs(\blochsphere@tilt)*cos(\blochsphere@rotation-\atheta)/abs(cos(\blochsphere@rotation-\atheta))}
+\else
+\pgfmathsetmacro\agamma{360-atan( (sin(\aphi)*tan(\blochsphere@tilt)+cos(\aphi)*sin(\blochsphere@rotation-\atheta))/cos(\blochsphere@rotation-\atheta) )}
+\fi
+\fi
+\fi
+\fi
+\pgfmathsetmacro\aalpha{acos(-sin(\aphi)*sin(\blochsphere@rotation)*cos(\atheta)*cos(\blochsphere@tilt) + sin(\aphi)*sin(\atheta)*cos(\blochsphere@rotation)*cos(\blochsphere@tilt) + sin(\blochsphere@tilt)*cos(\aphi))}
+\pgfmathsetmacro\aalphatest{atan(\d/\blochsphere@radius)}
+\ifdim\aalpha pt<\aalphatest pt\relax
+\pgfmathsetmacro\abeta{0}
+\else
+\pgfmathsetmacro\abeta{acos(\d*cot(\aalpha)/\blochsphere@radius)}
+\fi
+\pgfmathsetmacro\abeta{ifthenelse(\blochsphere@shift[2]<0,\abeta+2*(90-\abeta),\abeta)}
+\expandafter\pgfmathsetmacro\csname ##4\endcsname{\agamma}
+\expandafter\pgfmathsetmacro\csname ##5\endcsname{\abeta}
+}%
+\tikzset{%
+>=latex, % option for nice arrows
+inner sep=0pt,%
+outer sep=2pt,%
+mark coordinate/.style={inner sep=0pt,outer sep=0pt,minimum size=3pt,
+fill=black,circle}%
+}%
+\pgfdeclareradialshading[tikz@ball]{ball}{\pgfqpoint{-10bp}{10bp}}{%
+color(0bp)=(tikz@ball!30!white);
+color(9bp)=(tikz@ball!75!white);
+color(18bp)=(tikz@ball!90!black);
+color(25bp)=(tikz@ball!70!black);
+color(50bp)=(black)
+}%
+\ifthenelse{\boolean{blochsphere@nested}}{}{%
+\begin{tikzpicture}
+\drawBall
+}%
+}
+{
+\ifthenelse{\boolean{blochsphere@nested}}{}{
+\end{tikzpicture}%
+}%
+\endgroup%
+}
+\endinput
+%%
+%% End of file `blochsphere.sty'.
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index 7537e4c256f..3e45a2ae563 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -97,7 +97,8 @@ my @TLP_working = qw(
bidi bidi-atbegshi bidicontour bidihl
bidipagegrid bidipresentation bidishadowtext
bigfoot bigints binomexp biocon bitelist bizcard
- blacklettert1 blindtext blkarray block blockdraw_mp bloques blowup blox
+ blacklettert1 blindtext blkarray
+ blochsphere block blockdraw_mp bloques blowup blox
bnumexpr bodegraph bohr boisik bold-extra
boites boldtensors bondgraph bondgraphs
bookcover bookdb bookest bookhands booklet
diff --git a/Master/tlpkg/tlpsrc/blochsphere.tlpsrc b/Master/tlpkg/tlpsrc/blochsphere.tlpsrc
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/blochsphere.tlpsrc
diff --git a/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc b/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc
index bcd274c6732..54c35618f6f 100644
--- a/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc
@@ -10,6 +10,7 @@ depend asyfig
depend asypictureb
depend autoarea
depend bardiag
+depend blochsphere
depend bloques
depend blox
depend bodegraph