texlive[74817] Master: qworld (1apr25)

commits+karl at tug.org commits+karl at tug.org
Tue Apr 1 22:01:52 CEST 2025


Revision: 74817
          https://tug.org/svn/texlive?view=revision&revision=74817
Author:   karl
Date:     2025-04-01 22:01:51 +0200 (Tue, 01 Apr 2025)
Log Message:
-----------
qworld (1apr25)

Modified Paths:
--------------
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/libexec/ctan2tds
    trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/qworld/
    trunk/Master/texmf-dist/doc/latex/qworld/README.TEXLIVE
    trunk/Master/texmf-dist/doc/latex/qworld/README.md
    trunk/Master/texmf-dist/tex/latex/qworld/
    trunk/Master/texmf-dist/tex/latex/qworld/qworld.sty
    trunk/Master/tlpkg/tlpsrc/qworld.tlpsrc

Added: trunk/Master/texmf-dist/doc/latex/qworld/README.TEXLIVE
===================================================================
--- trunk/Master/texmf-dist/doc/latex/qworld/README.TEXLIVE	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/qworld/README.TEXLIVE	2025-04-01 20:01:51 UTC (rev 74817)
@@ -0,0 +1,9 @@
+The files below have been removed in the TeX Live installation of
+the current package, possibly because of missing source (e.g., a
+PDF with no source), possibly because their only purpose is to support
+nonfree fonts or other software, possibly for other reasons.
+More info: https://tug.org/texlive/pkgcontrib.html#requirements
+
+If this is a concern, please contact the package maintainer.
+
+	qworld.pdf


Property changes on: trunk/Master/texmf-dist/doc/latex/qworld/README.TEXLIVE
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/qworld/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/qworld/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/qworld/README.md	2025-04-01 20:01:51 UTC (rev 74817)
@@ -0,0 +1,54 @@
+# QWorld
+## Overview
+QWorld is a LaTeX package designed to simplify the drawing of complex diagrammatic calculations in monoidal category theory. This package provides a concise and intuitive set of commands, allowing users to efficiently render string diagrams with minimal effort. This package is particularly useful for researchers working in category theory, quantum theory, and related fields where diagrammatic reasoning plays a crucial role.
+## Installation
+Once the package is registered on CTAN, it can be installed using:
+```
+\usepackage{qworld}
+```
+Alternatively, to install manually:
+1. Download the `.sty` file of the package.
+2. Place it in your LaTeX working directory or a suitable location within your TeX distribution.
+3. Add `\usepackage{qworld}` to the preamble of your document.
+4. Run `texhash` if necessary to update the file database.
+
+## Usage
+Below is a basic example of how to use qworld
+```
+\documentclass{article}
+\usepackage{qworld}
+\begin{document}
+    \begin{equation}
+        \q{
+            \qcap\qwire\n\qwire\qcup
+        }=\q{
+            \qwireup[vertical length=2]
+        }
+    \end{equation}
+\end{document}
+```
+For more detailed usage instructions, refer to the package documentation.
+## License
+This package is distributed under the [LaTeX Project Public License (LPPL)](https://www.latex-project.org/lppl.txt), version 1.3c or later.
+## Copyright
+© 2025 Niina Ryota
+
+This Package consists of the following files:
+- `qworld.sty` (the main package file)
+- `qworld.pdf` (documentation)
+
+The current maintainer of this package is **Niina Ryota**.
+## Modification Policy
+Under the terms of the LPPL:
+- Any modifications must **not** be distributed under the original package name.
+- Any modified versions must clearly state that they are derived from this package.
+- The original author (Niina Ryota) must always be credited in derived works.
+
+## Contact
+Author: Niina Ryota
+Email: qworld-package at googlegroups.com
+
+## Version History
+* v1.0.0 (2025-03-31): Initial release.
+## Contributions
+Bug reports, feature requests, and contributions are welcome. Please contact qworld-package at googlegroups.com for inquires or to submit issues.


Property changes on: trunk/Master/texmf-dist/doc/latex/qworld/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/qworld/qworld.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/qworld/qworld.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/qworld/qworld.sty	2025-04-01 20:01:51 UTC (rev 74817)
@@ -0,0 +1,1713 @@
+%% A LaTeX package for typesetting string diagrams in various categorical structures, including monoidal, dagger compact closed, rigid, braided, symmetric, and compact categories.
+%% Copyright (C) 2025 Ryota
+%% 
+%% This work may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), 
+%% version 1.3c or later. The latest version of this license is in:
+%%   https://www.latex-project.org/lppl.txt
+%% and version 1.3c 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 Ryota.
+%% 
+%% This work consists of the following files:
+%%   qworld.sty
+%%   qworld.pdf
+\ProvidesPackage{qworld}[2025/03/30 v1.0.0]
+\RequirePackage{tikz, pgffor, ifthen, xparse, xfp}
+\usetikzlibrary{cd,positioning,shapes.symbols,decorations.pathmorphing,arrows,calc,shapes.misc,intersections,decorations.pathreplacing,decorations.markings,arrows.meta, shapes.geometric}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifflowup
+\newif\ifflowdown
+\newif\ifflowleft
+\newif\ifflowright
+% Default: bottom-to-top (flow up)
+\flowuptrue
+\flowdownfalse
+\flowleftfalse
+\flowrightfalse
+
+\newif\ifsimplify
+\simplifytrue
+\DeclareOption{simplify=false}{
+    \simplifyfalse
+}
+\DeclareOption{flow direction=up}{
+    \flowuptrue
+    \flowdownfalse
+    \flowleftfalse
+    \flowrightfalse
+}
+\DeclareOption{flow direction=down}{
+    \flowupfalse
+    \flowdowntrue
+    \flowleftfalse
+    \flowrightfalse
+}
+\DeclareOption{flow direction=left}{
+    \flowupfalse
+    \flowdownfalse
+    \flowlefttrue
+    \flowrightfalse
+}
+\DeclareOption{flow direction=right}{%
+    \flowupfalse
+    \flowdownfalse
+    \flowleftfalse
+    \flowrighttrue
+}
+\ProcessOptions\relax
+\AtEndOfPackage{
+    \ifsimplify
+        \qwsimplify
+    \fi
+}
+\newcounter{portNnum}
+\newcounter{portSnum}
+\newcounter{portNtempnum}
+\newcounter{portStempnum}
+\newcounter{bbcount}
+\newcounter{qworldnumeros}\setcounter{qworldnumeros}{1}
+
+\newcommand{\qwreset}[1][0,0]
+{
+    \coordinate (qworldat) at (#1);
+}
+
+\newcommand{\qwbr}[1][1]
+{
+    \coordinate (O) at (0,0);
+    \coordinate (qworldattemp) at ([shift={(0,{\fpeval{-1*#1}})}]qworldat);
+    \coordinate (qworldat) at (O |- qworldattemp);
+}
+
+\newcommand{\qwmove}[1][0,0]
+{
+    \coordinate (qworldattemp) at ([shift={{\fpeval{(#1)}}}]qworldat);
+    \coordinate (qworldat) at (qworldattemp);
+}
+
+\newcommand{\qwspace}[1][1]
+{
+    \qwmove[#1,0]
+}
+
+\def\qwepsilony{0.2}
+\def\qwepsilonx{0}
+\def\qwinnersep{3.1415926536pt}
+\def\qwcontrolepsilon{0.5}
+\def\qwfillrate{0.13}
+\def\qwfillratex{0.37}
+\def\qwasymrate{0.05}
+\def\qwasymstress{2.5}
+\def\qwvelocityx{0}
+\def\qwvelocityy{0.2}
+\def\qwthickness{semithick}
+\def\qwspideradjust{1}
+\def\qwireinterval{1}
+\def\qcanvasslantstyle{notentered}
+\def\qwcompariaccu{1000}
+
+\newcommand{\qwtext}[2]
+{
+    \node at (#2) {#1};
+}
+
+\NewDocumentCommand{\qwid}{O{}}
+{
+    \qwidprocess[#1]
+}
+
+\NewDocumentCommand{\qwbox}{O{at=qworldat}}{
+    \qwboxprocess[box]{#1}
+}
+
+\NewDocumentCommand{\qwasymbox}{O{at=qworldat}}{
+    \qwboxprocess[asym]{#1}
+}
+
+\NewDocumentCommand{\qwadjbox}{O{at=qworldat}}{
+    \qwboxprocess[adj]{#1}
+}
+
+\NewDocumentCommand{\qwtransposebox}{O{at=qworldat}}{
+    \qwboxprocess[transpose]{#1}
+}
+
+\NewDocumentCommand{\qwconjbox}{O{at=qworldat}}{
+    \qwboxprocess[conj]{#1}
+}
+
+
+\NewDocumentCommand{\qwscalar}{O{at=qworldat}}{
+    \qwboxprocess[scalar]{p=0,#1}
+}
+
+\NewDocumentCommand{\qwstate}{O{at=qworldat}}{
+    \qwboxprocess[state]{s=0,#1}
+}
+
+\NewDocumentCommand{\qweffect}{O{at=qworldat}}{
+    \qwboxprocess[effect]{n=0,#1}
+}
+
+\NewDocumentCommand{\qwbraid}{O{at=qworldat}}{
+    \qwboxprocess[braid]{#1}
+}
+
+
+\NewDocumentCommand{\qwbraidinv}{O{at=qworldat}}{
+    \qwboxprocess[braidinv]{#1}
+}
+
+\NewDocumentCommand{\qwsymmetry}{O{at=qworldat}}{
+    \qwboxprocess[sym]{#1}
+}
+
+\NewDocumentCommand{\qwidup}{O{at=qworldat}}{
+    \qwidprocess[arrowtype=->-, #1]
+}
+
+\NewDocumentCommand{\qwiddown}{O{at=qworldat}}
+{
+    \qwidprocess[arrowtype=-<-, #1]
+}
+
+\NewDocumentCommand{\qwidupup}{O{at=qworldat}}
+{
+    \qwidprocess[arrowtype=->>-, #1]
+}
+
+\NewDocumentCommand{\qwiddowndown}{O{at=qworldat}}
+{
+    \qwidprocess[arrowtype=-<<-, #1]
+}
+
+\NewDocumentCommand{\qwcap}{O{at=qworldat}}
+{
+    \qwboxprocess[cap]{#1}
+}
+
+\NewDocumentCommand{\qwcup}{O{at=qworldat}}
+{
+    \qwboxprocess[cup]{#1}
+}
+
+\NewDocumentCommand{\qwcaprev}{O{at=qworldat}}
+{
+    \qwboxprocess[caprev]{#1}
+}
+
+\NewDocumentCommand{\qwcuprev}{O{at=qworldat}}
+{
+    \qwboxprocess[cuprev]{#1}
+}
+
+\NewDocumentCommand{\qwmul}{O{at={qworldat}}}
+{
+     \qwboxprocess[spider]{s=2,n=1,#1}
+}
+
+\NewDocumentCommand{\qwunit}{O{at={qworldat}}}
+{
+     \qwboxprocess[spider]{s=0,n=1,#1}
+}
+\NewDocumentCommand{\qwcounit}{O{at={qworldat}}}
+{
+     \qwboxprocess[spider]{s=1,n=0,#1}
+}
+
+\NewDocumentCommand{\qwcomul}{O{at={qworldat}}}
+{
+    \qwboxprocess[spider]{s=1,n=2,#1}
+}
+
+\NewDocumentCommand{\qwspider}{O{at={qworldat}}}
+{
+    \qwboxprocess[spider]{#1}
+}
+
+\newcommand{\qwdiagram}[2][]{
+    \ifmmode
+        {\vcenter{\hbox{
+                \begin{tikzpicture}[#1]
+                    \setcounter{qworldnumeros}{1}
+                    \qwreset
+                    #2
+                    \qwreset
+                \end{tikzpicture}
+        }}}
+    \else
+        \({\vcenter{\hbox{
+            \begin{tikzpicture}[#1]
+                \setcounter{qworldnumeros}{1}
+                \qwreset
+                #2
+                \qwreset
+            \end{tikzpicture}
+        }}}\)
+    \fi
+}
+
+\newcommand{\qwcanvas}[2][]{
+    \qwdiagram[#1]{#2}
+}
+
+\NewDocumentCommand{\qwbb}{O{notentered} O{notentered}}{
+    \ifthenelse{\equal{#2}{notentered}}
+    {
+        \ifthenelse{\equal{#1}{notentered}}{
+            \def\BBcolor{}
+            \def\BBP{1}
+        }{
+            \def\BBcolor{}
+            \def\BBP{#1}
+        }
+    }{
+        \def\BBcolor{#1}
+        \def\BBP{#2}
+    }
+  
+    \setcounter{bbcount}{0}
+    \foreach \i in \BBP{
+        \stepcounter{bbcount}
+    }
+
+    \def\minX{10000}\def\maxX{-10000}
+    \def\minY{10000}\def\maxY{-10000}
+    \foreach \hogaku in {NE, NW, SE, SW}{
+        \foreach \qwindex in \BBP {
+            \path let \p1 = (\hogaku-\qwindex)
+            in \pgfextra
+            {
+                \xdef\px{\x1} 
+                \xdef\py{\y1}
+            };
+            \xdef\minX{\fpeval{min(\minX, \px/1pt)}}
+            \xdef\minY{\fpeval{min(\minY, \py/1pt)}}
+            \xdef\maxX{\fpeval{max(\maxX, \px/1pt)}}
+            \xdef\maxY{\fpeval{max(\maxY, \py/1pt)}}
+        }
+    }
+    \ifnum\thebbcount=1
+        \foreach \i in \BBP{
+            \ifthenelse{\equal{#2}{notentered}}{
+                \draw[densely dotted, \BBcolor] (NW-\i) -- (NE-\i) -- (SE-\i) -- (SW-\i) --cycle;
+            }{
+                \draw[densely dotted, fill=#1, fill opacity=0.3] (NW-\i) -- (NE-\i) -- (SE-\i) -- (SW-\i) --cycle;
+            }
+        }
+    \else
+        \ifthenelse{\equal{#2}{notentered}}{
+            \draw[densely dotted, \BBcolor] (\minX pt,\minY pt) rectangle (\maxX pt,\maxY pt);%
+        }{
+            \draw[densely dotted, fill=#1, fill opacity=0.3] (\minX pt,\minY pt) rectangle (\maxX pt,\maxY pt);%
+        }
+    \fi
+    \coordinate (BB-NE) at (\maxX pt, \maxY pt);
+    \coordinate (BB-SW) at (\minX pt, \minY pt);
+    \coordinate (BB-NW) at (BB-SW |- BB-NE);
+    \coordinate (BB-SE) at (BB-SW -| BB-NE);
+    \coordinate (BB-N) at ($(BB-NW)!0.5!(BB-NE)$);
+    \coordinate (BB-S) at ($(BB-SW)!0.5!(BB-SE)$);
+    \coordinate (BB-W) at ($(BB-NW)!0.5!(BB-SW)$);
+    \coordinate (BB-E) at ($(BB-NE)!0.5!(BB-SE)$);
+    \coordinate (BB-C) at ($(BB-N)!0.5!(BB-S)$);
+}
+
+\newcommand{\qwbball}[1][notentered]{
+    \ifthenelse{\equal{#1}{notentered}}{
+        \foreach\j in{1,...,\theqworldnumeros}
+        {
+            \ifnum\j<\theqworldnumeros
+                \qwbb[\j]
+            \fi
+        }
+    }{
+        \foreach\j in{1,...,\theqworldnumeros}{
+            \ifnum\j<\theqworldnumeros
+                \qwbb[#1][\j]
+            \fi
+        }
+    }
+}
+
+\NewDocumentCommand{\qwbbsymbol}{O{E} m O{right}}
+{
+    \node[#3] at (BB-#1) {#2};
+}
+
+\newcommand{\qwBBall}[1][notentered]{
+    \addtocounter{qworldnumeros}{-1}
+    \ifthenelse{\equal{#1}{notentered}}{
+        \qwbb[1,...,\theqworldnumeros]
+    }{
+        \qwbb[#1][1,...,\theqworldnumeros]
+    }
+    \stepcounter{qworldnumeros}
+}
+
+\newcommand{\qwloop}[2][1]{
+    \foreach \i in {1,...,#1}
+    {
+        #2
+    }
+}
+\tikzset{
+    midarrow/.style={
+        decoration={markings, mark=at position 0.5 with {\arrow{>}}},
+        postaction={decorate}
+    }
+}
+\tikzset{
+    ->-/.style={
+        decoration={markings, mark=at position 0.5 with {\arrow{>}}},
+        postaction={decorate}
+    }
+}
+\tikzset{
+    ->--/.style={
+        decoration={markings, mark=at position 0.25 with {\arrow{>}}},
+        postaction={decorate}
+    }
+}
+\tikzset{
+    -->-/.style={
+        decoration={markings, mark=at position 0.75 with {\arrow{>}}},
+        postaction={decorate}
+    }
+}
+\tikzset{
+    midarrowinv/.style={
+        decoration={markings, mark=at position 0.5 with {\arrow{<}}},
+        postaction={decorate}
+  }
+}
+\tikzset{
+    -<-/.style={
+        decoration={markings, mark=at position 0.5 with {\arrow{<}}},
+        postaction={decorate}
+  }
+}
+\tikzset{
+    -<--/.style={
+        decoration={markings, mark=at position 0.25 with {\arrow{<}}},
+        postaction={decorate}
+    }
+}
+\tikzset{
+    --<-/.style={
+        decoration={markings, mark=at position 0.75 with {\arrow{<}}},
+        postaction={decorate}
+    }
+}
+\tikzset{
+    midddarrow/.style={
+        decoration={markings, mark=at position 0.5 with {\arrow{>>}}},
+        postaction={decorate}
+    }
+}
+\tikzset{
+    ->>-/.style={
+        decoration={markings, mark=at position 0.5 with {\arrow{>>}}},
+        postaction={decorate}
+    }
+}
+\tikzset{
+    ->>--/.style={
+        decoration={markings, mark=at position 0.25 with {\arrow{>>}}},
+        postaction={decorate}
+    }
+}
+\tikzset{
+    -->>-/.style={
+        decoration={markings, mark=at position 0.75 with {\arrow{>>}}},
+        postaction={decorate}
+    }
+}
+\tikzset{
+    midddarrowinv/.style={
+        decoration={markings, mark=at position 0.5 with {\arrow{<<}}},
+        postaction={decorate}
+  }
+}
+\tikzset{
+    -<<-/.style={
+        decoration={markings, mark=at position 0.5 with {\arrow{<<}}},
+        postaction={decorate}
+  }
+}
+\tikzset{
+    -<<--/.style={
+        decoration={markings, mark=at position 0.25 with {\arrow{<<}}},
+        postaction={decorate}
+    }
+}
+\tikzset{
+    --<<-/.style={
+        decoration={markings, mark=at position 0.75 with {\arrow{<<}}},
+        postaction={decorate}
+    }
+}
+
+\newcommand{\qwPhantomArrow}[2][>]{
+  \tikzset{
+        phantomarrow/.style={
+        decoration={markings, mark=at position #2 with {\arrow{#1}}},
+        postaction={decorate}
+    }
+  }
+}
+\def\qworiginalarrow{\qwPhantomArrow}
+\newcommand{\qwsimplify}{
+    \ifdefined\qid
+    \else
+        \def\qid{\qwid}
+    \fi
+    \ifdefined\qwire
+    \else
+        \def\qwire{\qwid}
+    \fi
+    \ifdefined\qbox
+    \else
+        \def\qbox{\qwbox}
+    \fi
+    \ifdefined\qasym
+    \else
+        \def\qasym{\qwasymbox}
+    \fi
+    \ifdefined\qasymbox
+    \else
+        \def\qasymbox{\qwasymbox}
+    \fi
+    \ifdefined\qadj
+    \else
+        \def\qadj{\qwadjbox}
+    \fi
+    \ifdefined\qadjbox
+    \else
+        \def\qadjbox{\qwadjbox}
+    \fi
+    \ifdefined\qtranspose
+    \else
+        \def\qtranspose{\qwtransposebox}
+    \fi
+    \ifdefined\qtransposebox
+    \else
+        \def\qtransposebox{\qwtransposebox}
+    \fi
+    \ifdefined\qtrans
+    \else
+        \def\qtrans{\qwtransposebox}
+    \fi
+    \ifdefined\qconj
+    \else
+        \def\qconj{\qwconjbox}
+    \fi
+    \ifdefined\qconjbox
+    \else
+        \def\qconjbox{\qwconjbox}
+    \fi
+    \ifdefined\qsc
+    \else
+        \def\qsc{\qwscalar}
+    \fi
+    \ifdefined\qwsc
+    \else
+        \def\qwsc{\qwscalar}
+    \fi
+    \ifdefined\qscalar
+    \else
+        \def\qscalar{\qwscalar}
+    \fi
+    \ifdefined\qstate
+    \else
+        \def\qstate{\qwstate}
+    \fi
+    \ifdefined\qeffect
+    \else
+        \def\qeffect{\qweffect}
+    \fi
+    \ifdefined\qbraid
+    \else
+        \def\qbraid{\qwbraid}
+    \fi
+    \ifdefined\qbraidinv
+    \else
+        \def\qbraidinv{\qwbraidinv}
+    \fi
+    \ifdefined\qsymmetry
+    \else
+        \def\qsymmetry{\qwsymmetry}
+    \fi
+    \ifdefined\qsym
+    \else
+        \def\qsym{\qwsymmetry}
+    \fi
+    \ifdefined\qidup
+    \else
+        \def\qidup{\qwidup}
+    \fi
+    \ifdefined\qwireup
+    \else
+        \def\qwireup{\qwidup}
+    \fi
+    \ifdefined\qwireu
+    \else
+        \def\qwireu{\qwidup}
+    \fi
+    \ifdefined\qiddown
+    \else
+        \def\qiddown{\qwiddown}
+    \fi
+    \ifdefined\qidown
+    \else
+        \def\qidown{\qwiddown}
+    \fi
+    \ifdefined\qwiredown
+    \else
+        \def\qwiredown{\qwiddown}
+    \fi
+    \ifdefined\qwired
+    \else
+        \def\qwired{\qwiddown}
+    \fi
+    \ifdefined\qwireupup
+    \else
+        \def\qwireupup{\qwidupup}
+    \fi
+    \ifdefined\qwireuu
+    \else
+        \def\qwireuu{\qwidupup}
+    \fi
+    \ifdefined\qwiredowndown
+    \else
+        \def\qwiredowndown{\qwiddowndown}
+    \fi
+    \ifdefined\qwiredd
+    \else
+        \def\qwiredd{\qwiddowndown}
+    \fi
+    \ifdefined\qcap
+    \else
+        \def\qcap{\qwcap}
+    \fi
+    \ifdefined\qcup
+    \else
+        \def\qcup{\qwcup}
+    \fi
+    \ifdefined\qcaprev
+    \else
+        \def\qcaprev{\qwcaprev}
+    \fi
+    \ifdefined\qcuprev
+    \else
+        \def\qcuprev{\qwcuprev}
+    \fi
+    \ifdefined\qmul
+    \else
+        \def\qmul{\qwmul}
+    \fi
+    \ifdefined\qunit
+    \else
+        \def\qunit{\qwunit}
+    \fi
+    \ifdefined\qcomul
+    \else
+        \def\qcomul{\qwcomul}
+    \fi
+    \ifdefined\qcounit
+    \else
+        \def\qcounit{\qwcounit}
+    \fi
+    \ifdefined\qspider
+    \else
+        \def\qspider{\qwspider}
+    \fi
+    \ifdefined\qunitobject
+    \else
+        \def\qunitobject{\qwunitobject}
+    \fi
+    \ifdefined\qunitob
+    \else
+        \def\qunitob{\qwunitobject}
+    \fi
+    \ifdefined\qdiagram
+    \else
+      \def\qdiagram{\qwdiagram}
+    \fi
+    \ifdefined\qwpuzzle
+    \else
+      \def\qwpuzzle{\qwdiagram}
+    \fi
+    \ifdefined\qpuzzle
+    \else
+      \def\qpuzzle{\qwdiagram}
+    \fi
+    \ifdefined\qpuz
+    \else
+      \def\qpuz{\qwdiagram}
+    \fi
+    \ifdefined\qcanvas
+    \else
+      \def\qcanvas{\qwcanvas}
+    \fi
+    \ifdefined\qcv
+    \else
+      \def\qcv{\qwcanvas}
+    \fi
+    \ifdefined\q
+    \else
+      \def\q{\qwcanvas}
+    \fi
+    \ifdefined\Q
+    \else
+        \def\Q{\qwcanvas}
+    \fi
+    \ifdefined\qbb
+    \else
+        \def\qbb{\qwbb}
+    \fi
+    \ifdefined\qbball
+    \else
+        \def\qbball{\qwbball}
+    \fi
+    \ifdefined\qBBall
+    \else
+        \def\qBBall{\qwBBall}
+    \fi
+    \ifdefined\qloop
+    \else
+        \def\qloop{\qwloop}
+    \fi
+    \ifdefined\qI
+    \else
+        \def\qI{\qwI}
+    \fi
+    \ifdefined\qs
+    \else
+        \def\qs{\qws}
+    \fi
+    \ifdefined\qS
+    \else
+        \def\qS{\qwS}
+    \fi
+    \ifdefined\qO
+    \else
+        \def\qO{\qwO}
+    \fi
+    \ifdefined\qn
+    \else
+        \def\qn{\qwn}
+    \fi
+    \ifdefined\qN
+    \else
+        \def\qN{\qwN}
+    \fi
+    \ifdefined\qshowI
+    \else
+        \def\qshowI{\qwI}
+    \fi
+    \ifdefined\qshows
+    \else
+        \def\qshows{\qws}
+    \fi
+    \ifdefined\qshowS
+    \else
+        \def\qshowS{\qwS}
+    \fi
+    \ifdefined\qshowO
+    \else
+        \def\qshowO{\qwO}
+    \fi
+    \ifdefined\qshown
+    \else
+        \def\qshown{\qwn}
+    \fi
+    \ifdefined\qshowN
+    \else
+        \def\qshowN{\qwN}
+    \fi
+    \ifdefined\showI
+    \else
+        \def\showI{\qwI}
+    \fi
+    \ifdefined\shows
+    \else
+        \def\shows{\qws}
+    \fi
+    \ifdefined\showS
+    \else
+        \def\showS{\qwS}
+    \fi
+    \ifdefined\showO
+    \else
+        \def\showO{\qwO}
+    \fi
+    \ifdefined\shown
+    \else
+        \def\shown{\qwn}
+    \fi
+    \ifdefined\showN
+    \else
+        \def\showN{\qwN}
+    \fi
+    \ifdefined\symbolI
+    \else
+        \def\symbolI{\qwI}
+    \fi
+    \ifdefined\symbols
+    \else
+        \def\symbols{\qws}
+    \fi
+    \ifdefined\symbolS
+    \else
+        \def\symbolS{\qwS}
+    \fi
+    \ifdefined\symbolO
+    \else
+        \def\symbolO{\qwO}
+    \fi
+    \ifdefined\symboln
+    \else
+        \def\symboln{\qwn}
+    \fi
+    \ifdefined\symbolN
+    \else
+        \def\symbolN{\qwN}
+    \fi
+    \ifdefined\qbbsymbol
+    \else
+        \def\qbbsymbol{\qwbbsymbol}
+    \fi
+    \ifdefined\bbsymbol
+    \else
+        \def\bbsymbol{\qwbbsymbol}
+    \fi
+    \ifdefined\qreset
+    \else
+      \def\qreset{\qwreset}
+    \fi
+    \ifdefined\qbr
+    \else
+        \def\qbr{\qwbr}
+    \fi
+    \ifdefined\xx
+    \else
+        \def\xx{\qwbr}
+    \fi
+    \ifdefined\n
+    \else
+        \def\n{\qwbr}
+    \fi
+    \ifdefined\qcirc
+    \else
+        \def\qcirc{\qwbr}
+    \fi
+    \ifdefined\qspace
+    \else
+        \def\qspace{\qwspace}
+    \fi
+    \ifdefined\qmove
+    \else
+        \def\qmove{\qwmove}
+    \fi
+    \ifdefined\qmv
+    \else
+        \def\qmv{\qwmove}
+    \fi
+}
+\pgfkeys{
+    /qworld/wire/.cd,
+    at/.store in=\wireat,
+    dom/.store in=\startpoint,
+    cod/.store in=\endpoint,
+    label/.store in=\wirelabel,
+    label side/.store in=\wirelabelside,
+    label at/.store in=\wirelabelat,
+    label option/.store in=\wirelabeloption,
+    name/.store in=\wirename,
+    name side/.store in=\wirenameside,
+    name at/.store in=\wirenameat,
+    name option/.store in=\wirenameoption,
+    id/.store in=\wireid,
+    sv/.store in=\startvelocity,
+    ev/.store in=\endvelocity,
+    arrowtype/.store in=\wirearrowtype,
+    innersep/.store in=\wireinnersep,
+    color/.store in=\wirecolor,
+    internal invocation/.store in=\internalinvocation,
+    vertical length/.store in=\wireverlen,
+    vlen/.store in=\wirevlen,
+    slant style/.store in=\wireslantstyle,
+    at/.default={qworldat},
+    dom/.default={qworldat},
+    cod/.default={[shift={(0,1)}]qworldat},
+    label/.default={},
+    label side/.default={right},
+    label at/.default={midway},
+    label option/.default={right,midway},
+    name/.default={notentered},
+    name at/.default={notentered},
+    name side/.default={notentered},
+    name option/.default={notentered},
+    id/.default={},
+    sv/.default={\qwvelocityx,\qwvelocityy},
+    ev/.default={\qwvelocityx,\qwvelocityy},
+    arrowtype/.default={},
+    innersep/.default={5pt},
+    color/.default={},
+    internal invocation/.default={0},
+    vertical length/.default={1},
+    vlen/.default={notentered},
+    slant style/.default={}
+}
+\newcommand{\qwidprocess}[1][]
+{
+    \pgfkeys{/qworld/wire/.cd, 
+    at={}, dom={}, cod={}, 
+    label={}, label side={right},label at={midway}, label option={right,midway}, 
+    name={notentered}, name side={notentered}, name at={notentered}, name option={notentered},
+    id={},
+    sv={\qwvelocityx,\qwvelocityy}, ev={\qwvelocityx,\qwvelocityy},
+    arrowtype={}, innersep={\qwinnersep}, color={}, internal invocation={0},
+    vertical length={1}, 
+    vlen={notentered},
+    slant style={},
+    #1}
+    \ifthenelse{\equal{\wirename}{notentered}\or\equal{\wirename}{{notentered}}}
+    {}{
+        \pgfkeys{/qworld/wire/.cd, label=\wirename}
+    }
+    \ifthenelse{\equal{\wirenameat}{notentered}\or\equal{\wirenameat}{{notentered}}}
+    {}{
+        \pgfkeys{/qworld/wire/.cd, label at=\wirenameat}
+    }
+    \ifthenelse{\equal{\wirenameside}{notentered}\or\equal{\wirenameside}{{notentered}}}
+    {}{
+        \pgfkeys{/qworld/wire/.cd, label side=\wirenameside}
+    }
+    \ifthenelse{\equal{\wirenameoption}{notentered}\or\equal{\wirenameoption}{{notentered}}}
+    {}{
+        \pgfkeys{/qworld/wire/.cd, label option=\wirenameoption}
+    }
+
+    \ifthenelse{\equal{\wirevlen}{notentered}}
+    {}{
+        \pgfkeys{/qworld/wire/.cd, vertical length=\wirevlen}
+    }
+    \ifx\wireat\empty
+        \ifx\endpoint\empty
+            \ifx\startpoint\empty
+                \coordinate (I-\theqworldnumeros) at ([shift={({\fpeval{0.5*\qwireinterval}},0)}]qworldat);
+            \else
+                \coordinate (I-\theqworldnumeros) at (\startpoint);          
+            \fi
+            \coordinate (O-\theqworldnumeros) at ([shift={(0,\wireverlen)}]I-\theqworldnumeros);
+        \else
+            \coordinate (O-\theqworldnumeros) at (\endpoint);
+            \ifx\startpoint\empty
+                \coordinate (I-\theqworldnumeros) at ([shift={(0,-\wireverlen)}]O-\theqworldnumeros);
+            \else
+                \coordinate (I-\theqworldnumeros) at (\startpoint);
+            \fi
+        \fi
+    \else
+        \coordinate (I-\theqworldnumeros) at ([shift={({\fpeval{0.5*\qwireinterval}},0)}]\wireat);
+        \ifx\endpoint\empty
+            \coordinate (O-\theqworldnumeros) at ([shift={(0,\wireverlen)}]I-\theqworldnumeros);
+        \else
+            \coordinate (O-\theqworldnumeros) at (\endpoint);
+        \fi
+    \fi
+    \coordinate (I-1-\theqworldnumeros) at (I-\theqworldnumeros);
+    \coordinate (O-1-\theqworldnumeros) at (O-\theqworldnumeros);
+    \ifx\wireid\empty
+    \else
+        \coordinate (I-\wireid) at (I-\theqworldnumeros);
+        \coordinate (I-1-\wireid) at (I-\theqworldnumeros);
+        \coordinate (O-\wireid) at (O-\theqworldnumeros);
+        \coordinate (O-1-\wireid) at (O-\theqworldnumeros);
+    \fi
+    \ifx\wirelabel\empty
+        \draw [\wirearrowtype,\qwthickness,\wirecolor] 
+          (I-\theqworldnumeros) ..controls ([shift={\fpeval{\wireverlen*(\startvelocity)}}]I-\theqworldnumeros) 
+          and ([shift={\fpeval{-1*\wireverlen*(\endvelocity)}}]O-\theqworldnumeros) .. (O-\theqworldnumeros);
+    \else
+        \draw [\wirearrowtype,\qwthickness,\wirecolor] (I-\theqworldnumeros) ..controls ([shift={\fpeval{\wireverlen*(\startvelocity)}}]I-\theqworldnumeros) 
+        and ([shift={\fpeval{-1*\wireverlen*(\endvelocity)}}]O-\theqworldnumeros) ..(O-\theqworldnumeros) node[\wirelabelat,\wirelabelside,\wireslantstyle] {\wirelabel};
+    \fi
+    \ifnum\internalinvocation=0
+        \path let \p1 = (I-\theqworldnumeros),\p2=(O-\theqworldnumeros) in \pgfextra{\xdef\inputx{\x1} \xdef\inputy{\y1} \xdef\outputx{\x2}\xdef\outputy{\y2}};
+        \ifnum\fpeval{ceil(\qwcompariaccu*\inputx/1pt)}<\fpeval{ceil(\qwcompariaccu*\outputx/1pt)}
+            \ifnum\fpeval{ceil(\qwcompariaccu*\inputy/1pt)}<\fpeval{ceil(\qwcompariaccu*\outputy/1pt)}
+                \coordinate (NE-\theqworldnumeros) at ([shift={({\fpeval{0.5*\qwireinterval}},0)}]O-\theqworldnumeros);
+                \coordinate (SW-\theqworldnumeros) at ([shift={({\fpeval{-0.5*\qwireinterval}},0)}]I-\theqworldnumeros);
+                \coordinate (NW-\theqworldnumeros) at (SW-\theqworldnumeros |- NE-\theqworldnumeros);
+                \coordinate (SE-\theqworldnumeros) at (SW-\theqworldnumeros -| NE-\theqworldnumeros);
+            \else
+                \coordinate (NW-\theqworldnumeros) at ([shift={({\fpeval{-0.5*\qwireinterval}},0)}]I-\theqworldnumeros);
+                \coordinate (SE-\theqworldnumeros) at ([shift={({\fpeval{0.5*\qwireinterval}},0)}]O-\theqworldnumeros);
+                \coordinate (NE-\theqworldnumeros) at (NW-\theqworldnumeros -| SE-\theqworldnumeros);
+                \coordinate (SW-\theqworldnumeros) at (NW-\theqworldnumeros |- SE-\theqworldnumeros);
+            \fi
+        \else
+            \ifnum\fpeval{ceil(\qwcompariaccu*\inputy/1pt)}<\fpeval{ceil(\qwcompariaccu*\outputy/1pt)}
+                \coordinate (NW-\theqworldnumeros) at ([shift={({\fpeval{-0.5*\qwireinterval}},0)}]O-\theqworldnumeros);
+                \coordinate (SE-\theqworldnumeros) at ([shift={({\fpeval{0.5*\qwireinterval}},0)}]I-\theqworldnumeros);
+                \coordinate (NE-\theqworldnumeros) at (NW-\theqworldnumeros -| SE-\theqworldnumeros);
+                \coordinate (SW-\theqworldnumeros) at (NW-\theqworldnumeros |- SE-\theqworldnumeros);
+            \else
+                \coordinate (NE-\theqworldnumeros) at ([shift={({\fpeval{0.5*\qwireinterval}},0)}]I-\theqworldnumeros);
+                \coordinate (SW-\theqworldnumeros) at ([shift={({\fpeval{-0.5*\qwireinterval}},0)}]O-\theqworldnumeros);
+                \coordinate (NW-\theqworldnumeros) at (SW-\theqworldnumeros |- NE-\theqworldnumeros);
+                \coordinate (SE-\theqworldnumeros) at (SW-\theqworldnumeros -| NE-\theqworldnumeros);
+            \fi
+        \fi
+        \coordinate (N-\theqworldnumeros) at ($(NE-\theqworldnumeros)!0.5!(NW-\theqworldnumeros)$);
+        \coordinate (S-\theqworldnumeros) at ($(SE-\theqworldnumeros)!0.5!(SW-\theqworldnumeros)$);
+        \coordinate (W-\theqworldnumeros) at ($(NW-\theqworldnumeros)!0.5!(SW-\theqworldnumeros)$);
+        \coordinate (E-\theqworldnumeros) at ($(NE-\theqworldnumeros)!0.5!(SE-\theqworldnumeros)$);
+        \coordinate (C-\theqworldnumeros) at ($(N-\theqworldnumeros)!0.5!(S-\theqworldnumeros)$);
+        \ifx\wireid\empty
+        \else
+            \coordinate (SE-\wireid) at (SE-\theqworldnumeros);
+            \coordinate (NE-\wireid) at (NE-\theqworldnumeros);
+            \coordinate (SW-\wireid) at (SW-\theqworldnumeros);
+            \coordinate (NW-\wireid) at (NW-\theqworldnumeros);
+            \coordinate (N-\wireid) at (N-\theqworldnumeros);
+            \coordinate (S-\wireid) at (S-\theqworldnumeros);
+            \coordinate (W-\wireid) at (W-\theqworldnumeros);
+            \coordinate (E-\wireid) at (E-\theqworldnumeros);
+            \coordinate (C-\wireid) at (c-\theqworldnumeros);
+        \fi
+        \coordinate (qworldat) at (SE-\theqworldnumeros);
+            \stepcounter{qworldnumeros}
+    \fi
+}
+
+\pgfkeys{
+    /qworld/box/.cd,
+    at/.store in=\boxat,
+    name/.store in=\boxname,
+    arity/.store in=\boxarity,
+    coarity/.store in=\boxcoarity,
+    id/.store in=\boxid,
+    index/.store in=\LuminousIndex,
+    show id/.store in=\boxshowid,
+    with wire/.store in=\boxwithwire,
+    align/.store in=\boxalign,
+    horizontal length/.store in=\boxhorilen,
+    vertical length/.store in=\boxverlen,
+    hlen/.store in=\boxhlen,
+    vlen/.store in=\boxvlen,
+    num L/.store in=\braidfsc,
+    num R/.store in=\braidbsc,
+    center margin length/.store in=\cml,
+    sv/.store in=\startvelocity,
+    ev/.store in=\endvelocity,
+    color/.store in=\boxcolor,
+    morphism color/.store in=\morphismcolor,
+    frame color/.store in=\framecolor,
+    arrowtype/.store in=\arrowtype,
+    dom arrowtype/.store in=\domarrowtype,
+    cod arrowtype/.store in=\codarrowtype,
+    internal invocation/.store in=\internalinvocation,
+    num ports/.store in=\copynumPorts,
+    num ports N/.store in=\copynumPortsN,
+    num ports S/.store in=\copynumPortsS,
+    num ports E/.store in=\copynumPortsE,
+    num ports W/.store in=\copynumPortsW,
+    ports/.store in=\copyPorts,
+    ports N/.store in=\copyPortsN,
+    ports S/.store in=\copyPortsS,
+    ports W/.store in=\copyPortsW,
+    ports E/.store in=\copyPortsE,
+    p/.store in=\numPorts,
+    n/.store in=\numPortsN,
+    s/.store in=\numPortsS,
+    e/.store in=\numPortsE,
+    w/.store in=\numPortsW,
+    P/.store in=\Ports,
+    N/.store in=\PortsN,
+    S/.store in=\PortsS,
+    W/.store in=\PortsW,
+    E/.store in=\PortsE,
+    braid smoothness/.store in=\braidsmoothness,
+    dual angle/.store in=\dualangle,
+    slant style/.store in=\boxslantstyle,
+    at/.default={qworldat},
+    name/.default={},
+    arity/.default={1},
+    coarity/.default={1},
+    id/.default={},
+    index/.default={},
+    show id/.default={notentered},
+    with wire/.default={notentered},
+    align/.default={true},
+    horizontal length/.default={},
+    vertical length/.default={},
+    hlen/.default={},
+    vlen/.default={},
+    num L/.default={1},
+    num R/.default={1},
+    center margin length/.default={1},
+    sv/.default={\qwvelocityx,\qwvelocityy},
+    ev/.default={\qwvelocityx,-\qwvelocityy},
+    color/.default={white},
+    morphism color/.default={black},
+    frame color/.default={black},
+    arrowtype/.default={},
+    dom arrowtype/.default={},
+    cod arrowtype/.default={},
+    internal invocation/.default={0},
+    num ports/.default={notentered},
+    num ports N/.default={notentered},
+    num ports S/.default={notentered},
+    num ports W/.default={notentered},
+    num ports E/.default={notentered},
+    ports/.default={notentered},
+    ports N/.default={notentered},
+    ports S/.default={notentered},
+    ports W/.default={notentered},
+    ports E/.default={notentered},
+    p/.default={notentered},
+    n/.default={notentered},
+    s/.default={notentered},
+    w/.default={notentered},
+    e/.default={notentered},
+    P/.default={notentered},
+    N/.default={notentered},
+    S/.default={notentered},
+    W/.default={notentered},
+    E/.default={notentered},
+    braid smoothness/.default={0.85},
+    dual angle/.default={55},
+    slant style/.default={}
+}
+\newcommand{\qwboxprocess}[2][box]{
+    \def\boxtype{#1}
+    \pgfkeys{/qworld/box/.cd, 
+    at={qworldat},
+    name={},
+    id={},
+    index={},
+    show id={notentered},
+    arity={1},
+    coarity={1},
+    with wire={notentered},
+    align={notentered},
+    horizontal length={notentered},
+    vertical length={1},
+    hlen={notentered},
+    vlen={notentered},
+    num L={1},
+    num R={1},
+    center margin length={1},
+    sv={\qwvelocityx,\qwvelocityy},
+    ev={\qwvelocityx,\qwvelocityy},
+    color={white},
+    morphism color={black},
+    frame color={black},
+    arrowtype={},
+    dom arrowtype={},
+    cod arrowtype={},
+    internal invocation=0,
+    num ports={notentered},
+    num ports N={notentered},
+    num ports S={notentered},
+    num ports W={notentered},
+    num ports E={notentered},
+    ports={notentered},
+    ports N={notentered},
+    ports S={notentered},
+    ports W={notentered},
+    ports E={notentered},
+    p={notentered},
+    n={notentered},
+    s={notentered},
+    w={notentered},
+    e={notentered},
+    P={notentered},
+    N={notentered},
+    S={notentered},
+    W={notentered},
+    E={notentered},
+    braid smoothness={0.85},
+    dual angle={55},
+    slant style={},
+    #2}
+    \ifthenelse{\equal{\boxshowid}{notentered}}
+    {
+
+    }{
+        \pgfkeys{/qworld/box/.cd, index={true}} 
+    }
+    \ifthenelse{\equal{\boxhlen}{notentered}}
+    {}{
+        \pgfkeys{/qworld/box/.cd, horizontal length=\boxhlen} 
+    }
+    \ifthenelse{\equal{\boxvlen}{notentered}}
+    {}{
+        \pgfkeys{/qworld/box/.cd, vertical length=\boxvlen} 
+    }
+    \ifthenelse{\equal{\LuminousIndex}{true}\or\equal{\LuminousIndex}{True}\or\equal{\LuminousIndex}{TRUE}}
+    {
+        \pgfkeys{/qworld/box/.cd, name={\theqworldnumeros}}
+    }{}
+    \ifx\domarrowtype\empty
+        \pgfkeys{/qworld/box/.cd, dom arrowtype=\arrowtype}
+    \fi
+    \ifx\codarrowtype\empty
+        \pgfkeys{/qworld/box/.cd, cod arrowtype=\arrowtype}
+    \fi
+    \ifthenelse{\equal{\boxtype}{cap}\or\equal{\boxtype}{caprev}\or\equal{\boxtype}{effect}\or\equal{\boxtype}{scalar}}
+    {
+        \pgfkeys{/qworld/box/.cd, n=0}
+        \ifthenelse{\equal{\boxtype}{cap}\or\equal{\boxtype}{caprev}}
+        {
+            \ifthenelse{\equal{\numPortsS}{notentered}}{
+                \pgfkeys{/qworld/box/.cd, s=2}
+            }{}
+        }{}
+    }{}
+    \ifthenelse{\equal{\boxtype}{cup}\or\equal{\boxtype}{cuprev}\or\equal{\boxtype}{state}\or\equal{\boxtype}{scalar}}
+    {
+        \pgfkeys{/qworld/box/.cd, s=0}
+        \ifthenelse{\equal{\boxtype}{cup}\or\equal{\boxtype}{cuprev}}
+        {
+            \ifthenelse{\equal{\numPortsN}{notentered}}{
+                \pgfkeys{/qworld/box/.cd, n=2}
+            }{}
+        }{}
+    }{}
+    \ifthenelse{\equal{\braidfsc}{0}}
+    {
+        \def\braidfsc{1}
+        \def\lstrandtype{dashed}
+    }{
+        \def\lstrandtype{}
+    }
+    \ifthenelse{\equal{\braidbsc}{0}}
+    {
+        \def\braidbsc{1}
+        \def\rstrandtype{dashed}
+    }{
+        \def\rstrandtype{}
+    }
+    \ifthenelse{\equal{\boxtype}{braid}\or\equal{\boxtype}{braidinv}\or\equal{\boxtype}{sym}}
+    {
+        \pgfkeys{/qworld/box/.cd, p={\fpeval{\braidfsc+\braidbsc}}}
+    }{}
+    \ifthenelse{\equal{\numPorts}{notentered}}
+    {}{
+        \pgfkeys{/qworld/box/.cd, n=\numPorts, s=\numPorts}
+    }
+    \ifthenelse{\equal{\numPorts}{0}}
+    {
+        \pgfkeys{/qworld/box/.cd, n=0,s=0}
+    }{}
+    \ifthenelse{\equal{\numPortsS}{0}}
+    {
+        \pgfkeys{/qworld/box/.cd, s=1,S={}}
+    }{}
+    \ifthenelse{\equal{\numPortsN}{0}}
+    {
+        \pgfkeys{/qworld/box/.cd, n=1,N={}}
+    }{}
+    \ifthenelse{\equal{\Ports}{notentered}}
+    {}{
+        \pgfkeys{/qworld/box/.cd, S=\Ports, N=\Ports}
+    }
+    \ifthenelse{\equal{\PortsS}{notentered}}
+    {
+        \ifthenelse{\equal{\numPortsS}{notentered}}
+        {
+            \pgfkeys{/qworld/box/.cd,s=1,S={1}}
+        }{
+            \pgfkeys{/qworld/box/.cd, S={1,...,\fpeval{\numPortsS}}}
+        }
+    }{}
+    \ifthenelse{\equal{\PortsN}{notentered}}
+    {
+        \ifthenelse{\equal{\numPortsN}{notentered}}
+        {
+            \pgfkeys{/qworld/box/.cd,n=1,N={1}}
+        }{
+            \pgfkeys{/qworld/box/.cd, N={1,...,\fpeval{\numPortsN}}}
+        }
+    }{}
+    \setcounter{portSnum}{0}
+    \ifthenelse{\equal{\PortsS}{{}}\or\equal{\PortsS}{}}{}{
+        \foreach\qwtempindex in \PortsS
+        {
+            \stepcounter{portSnum}
+        }
+    }
+    \def\cardportsS{\fpeval{\theportSnum}}
+
+    \setcounter{portNnum}{0}
+    \ifthenelse{\equal{\PortsN}{{}}\or\equal{\PortsN}{}}{
+    }{
+        \foreach\qwindex in \PortsN
+        {
+            \stepcounter{portNnum}
+        }
+    }
+    \def\cardportsN{\theportNnum}
+    \ifthenelse{\equal{\numPortsN}{notentered}\or\equal{\numPortsN}{{notentered}}}
+    {
+        \ifthenelse{\equal{\PortsN}{}\or\equal{\PortsN}{{}}}
+        {
+            \pgfkeys{/qworld/box/.cd, n=1}
+        }{
+            \xdef\maxN{0}
+            \foreach \qwiii in\PortsN
+            {
+                \ifnum\maxN<\qwiii
+                    \xdef\maxNtemp{\qwiii}
+                \fi
+                \xdef\maxN{\maxNtemp}
+            }
+            \pgfkeys{/qworld/box/.cd, n=\maxN}
+        }
+    }{}
+    \ifthenelse{\equal{\numPortsS}{notentered}\or\equal{\numPortsS}{{notentered}}}
+    {
+        \ifthenelse{\equal{\PortsS}{}\or\equal{\PortsS}{{}}}
+        {
+            \pgfkeys{/qworld/box/.cd, s=1}
+        }{
+            \xdef\maxS{0}
+            \foreach \qwiii in\PortsS
+            {
+                \ifnum\maxS<\qwiii
+                    \xdef\maxStemp{\qwiii}
+                \fi
+                \xdef\maxS{\maxStemp}
+            }
+            \pgfkeys{/qworld/box/.cd, s=\maxS}
+        }
+    }{}
+    \def\qworldwireScorrection{0}
+    \def\qworldwireNcorrection{0}
+    \ifthenelse{\equal{\boxhorilen}{notentered}}
+    {
+        \def\smargin{1}
+        \def\nmargin{1}
+        \pgfkeys{/qworld/box/.cd, horizontal length={\fpeval{max(1,\smargin*(\numPortsS-1)+1,\nmargin*(\numPortsN-1)+1)}}}
+    }{
+        \ifnum\numPortsS=1
+            \def\qworldwireScorrection{\fpeval{0.5*\boxhorilen-0.5*\qwireinterval}}
+        \fi
+        \ifnum\numPortsN=1
+            \def\qworldwireNcorrection{\fpeval{0.5*\boxhorilen-0.5*\qwireinterval}}
+        \fi
+        \def\smargin{\fpeval{(\boxhorilen-\qwireinterval)/(max(1,\numPortsS-1))}}
+        \def\nmargin{\fpeval{(\boxhorilen-\qwireinterval)/(max(1,\numPortsN-1))}}
+    }
+    \coordinate (SW-\theqworldnumeros) at (\boxat);
+    \coordinate (SE-\theqworldnumeros) at ([shift={(\boxhorilen,0)}]SW-\theqworldnumeros);
+    \coordinate (NE-\theqworldnumeros) at ([shift={(0,\boxverlen)}]SE-\theqworldnumeros);
+    \coordinate (NW-\theqworldnumeros) at (SW-\theqworldnumeros |- NE-\theqworldnumeros);
+    \coordinate (N-\theqworldnumeros) at ($(NE-\theqworldnumeros)!0.5!(NW-\theqworldnumeros)$);
+    \coordinate (S-\theqworldnumeros) at ($(SE-\theqworldnumeros)!0.5!(SW-\theqworldnumeros)$);
+    \coordinate (W-\theqworldnumeros) at ($(NW-\theqworldnumeros)!0.5!(SW-\theqworldnumeros)$);
+    \coordinate (E-\theqworldnumeros) at ($(NE-\theqworldnumeros)!0.5!(SE-\theqworldnumeros)$);
+    \coordinate (C-\theqworldnumeros) at ($(N-\theqworldnumeros)!0.5!(S-\theqworldnumeros)$);
+    \ifx\boxid\empty
+    \else
+        \coordinate (SW-\boxid) at (SW-\theqworldnumeros);
+        \coordinate (SE-\boxid) at (SE-\theqworldnumeros);
+        \coordinate (NE-\boxid) at (NE-\theqworldnumeros);
+        \coordinate (NW-\boxid) at (NW-\theqworldnumeros);
+        \coordinate (N-\boxid) at (N-\theqworldnumeros);
+        \coordinate (S-\boxid) at (S-\theqworldnumeros);
+        \coordinate (W-\boxid) at (W-\theqworldnumeros);
+        \coordinate (E-\boxid) at (E-\theqworldnumeros);
+        \coordinate (C-\boxid) at (C-\theqworldnumeros);
+    \fi
+    \ifnum\numPortsS>0
+        \foreach \qwindex in {1,...,\numPortsS}
+        {
+            \coordinate (s-\qwindex-\theqworldnumeros) at ([shift={({\fpeval{(0.5*\qwireinterval)+((\qwindex-1)*\smargin)+\qworldwireScorrection}},{\fpeval{\qwfillrate}})}]\boxat);
+            \coordinate (S-\qwindex-\theqworldnumeros) at (SW-\theqworldnumeros -| s-\qwindex-\theqworldnumeros);
+            \ifx\boxid\empty
+            \else
+                \coordinate (s-\qwindex-\boxid) at (s-\qwindex-\theqworldnumeros);
+                \coordinate (S-\qwindex-\boxid) at (S-\qwindex-\theqworldnumeros);
+            \fi
+        }
+    \else
+        \coordinate (s-1-\theqworldnumeros) at ([shift={({\fpeval{(0.5*\qwireinterval)}},{\fpeval{\qwfillrate}})}]\boxat);
+        \coordinate (S-1-\theqworldnumeros) at (SW-\theqworldnumeros -| s-1-\theqworldnumeros);
+        \ifx\boxid\empty
+        \else
+            \coordinate (s-1-\boxid) at (s-1-\theqworldnumeros);
+            \coordinate (S-1-\boxid) at (S-1-\theqworldnumeros);
+        \fi
+    \fi
+    \ifnum\numPortsN>0
+        \foreach \qwindex in {1,...,\numPortsN}
+        {
+            \coordinate (n-\qwindex-\theqworldnumeros) at ([shift={({\fpeval{(0.5*\qwireinterval)+((\qwindex-1)*\nmargin)+\qworldwireNcorrection}},{\fpeval{\boxverlen-\qwfillrate}})}]\boxat);
+            \coordinate (N-\qwindex-\theqworldnumeros) at (NW-\theqworldnumeros -| n-\qwindex-\theqworldnumeros);
+            \ifx\boxid\empty
+            \else
+                \coordinate (n-\qwindex-\boxid) at (n-\qwindex-\theqworldnumeros);
+                \coordinate (N-\qwindex-\boxid) at (N-\qwindex-\theqworldnumeros);
+            \fi
+        }
+    \else
+        \coordinate (n-1-\theqworldnumeros) at ([shift={({\fpeval{0.5*\qwireinterval}},{\fpeval{\boxverlen-\qwfillrate}})}]\boxat);
+        \coordinate (N-1-\theqworldnumeros) at (NW-\theqworldnumeros -| n-1-\theqworldnumeros);
+        \ifx\boxid\empty
+        \else
+            \coordinate (n-1-\boxid) at (n-1-\theqworldnumeros);
+            \coordinate (N-1-\boxid) at (N-1-\theqworldnumeros);
+        \fi
+    \fi
+    \coordinate (n-\theqworldnumeros) at (N-\theqworldnumeros |- n-1-\theqworldnumeros);
+    \coordinate (s-\theqworldnumeros) at (S-\theqworldnumeros |- s-1-\theqworldnumeros);
+    \ifx\boxid\empty
+    \else
+        \coordinate (n-\boxid) at (n-\theqworldnumeros);
+        \coordinate (s-\boxid) at (s-\theqworldnumeros);
+    \fi
+    \setcounter{portStempnum}{0}
+    \ifnum\cardportsS>0
+        \foreach\qwindex in \PortsS
+        {
+            \stepcounter{portStempnum}
+            \draw[\qwthickness, \domarrowtype] (S-\qwindex-\theqworldnumeros)--(s-\qwindex-\theqworldnumeros);
+            \coordinate (i-\theportStempnum-\theqworldnumeros) at (s-\qwindex-\theqworldnumeros);
+            \coordinate (I-\theportStempnum-\theqworldnumeros) at (S-\qwindex-\theqworldnumeros);
+            \ifx\boxid\empty
+            \else
+                \coordinate (i-\theportStempnum-\boxid) at (i-\theportStempnum-\theqworldnumeros);
+                \coordinate (I-\theportStempnum-\boxid) at (I-\theportStempnum-\theqworldnumeros);
+            \fi
+        }
+    \fi
+    \setcounter{portNtempnum}{0}
+    \ifnum\cardportsN>0
+        \foreach\qwindex in \PortsN
+        {
+            \stepcounter{portNtempnum}
+            \draw[\qwthickness, \codarrowtype] (n-\qwindex-\theqworldnumeros)--(N-\qwindex-\theqworldnumeros);
+            \coordinate (o-\theportNtempnum-\theqworldnumeros) at (n-\qwindex-\theqworldnumeros);
+            \coordinate (O-\theportNtempnum-\theqworldnumeros) at (N-\qwindex-\theqworldnumeros);
+            \ifx\boxid\empty
+            \else
+                \coordinate (o-\theportNtempnum-\boxid) at (o-\theportNtempnum-\theqworldnumeros);
+                \coordinate (O-\theportNtempnum-\boxid) at (O-\theportNtempnum-\theqworldnumeros);
+            \fi
+        }
+    \fi
+    \ifthenelse{\equal{\boxtype}{effect}}
+    {
+        \coordinate (sw-\theqworldnumeros) at ($(SW-\theqworldnumeros |- s-\theqworldnumeros)!0.1!(s-1-\theqworldnumeros)$);
+        \coordinate (se-\theqworldnumeros) at ($(SE-\theqworldnumeros |- s-\theqworldnumeros)!0.1!(s-\numPortsS-\theqworldnumeros)$);
+        \draw[{\qwthickness},draw = {\framecolor}, fill = {\boxcolor}] (se-\theqworldnumeros)--(sw-\theqworldnumeros)--(n-\theqworldnumeros)--cycle;
+        \node[\boxslantstyle] at ([shift={(0,{\fpeval{-0.1*\boxverlen}})}]C-\theqworldnumeros) {{\scalebox{\fpeval{min(\boxhorilen-\qwireinterval+2*\qwfillratex,\boxverlen-2*\qwfillrate)}}{\color{\morphismcolor}\boxname}}};
+    }{}
+    \ifthenelse{\equal{\boxtype}{state}}
+    {
+        \coordinate (ne-\theqworldnumeros) at ($(n-\numPortsN-\theqworldnumeros -| NE-\theqworldnumeros)!0.1!(n-\numPortsN-\theqworldnumeros)$);
+        \coordinate (nw-\theqworldnumeros) at ($(n-\theqworldnumeros -| NW-\theqworldnumeros)!0.1!(n-1-\theqworldnumeros)$);
+        \draw[{\qwthickness}, draw = {\framecolor}, fill = {\boxcolor}] (ne-\theqworldnumeros)--(nw-\theqworldnumeros)--(s-\theqworldnumeros)--cycle;
+        \node[\boxslantstyle] at ([shift={(0,{\fpeval{0.1*\boxverlen}})}]C-\theqworldnumeros) [anchor=center] {{\scalebox{\fpeval{min(\boxhorilen-\qwireinterval+2*\qwfillratex,\boxverlen-2*\qwfillrate)}}{\color{\morphismcolor}\boxname}}};
+    }{}
+    \ifthenelse{\equal{\boxtype}{scalar}}
+    {
+        \def\xradius{\fpeval{0.45*\boxhorilen}}
+        \def\yradius{\fpeval{0.5*\boxverlen-\qwfillrate}}
+        \def\radis{\fpeval{min(\xradius,\yradius)}}    
+        \node[draw={\framecolor}, {\qwthickness}, fill={\boxcolor},
+              circle, minimum width={\fpeval{2*\xradius}cm}, minimum height={\fpeval{2*\yradius}cm}
+              \boxslantstyle, transform shape] 
+              (SCALAR-\theqworldnumeros) at (C-\theqworldnumeros) {{\scalebox{\fpeval{min(\boxhorilen-\qwireinterval+2*\qwfillratex,\boxverlen-2*\qwfillrate)}}{\color{\morphismcolor}\boxname}}};
+    }{}
+    \def\ner{0}
+    \def\nwr{0}
+    \def\ser{0}
+    \def\swr{0}
+    \ifthenelse{\equal{\boxtype}{asym}}
+    {
+        \def\ner{\fpeval{-0.5*(0.5*\qwireinterval-\qwfillratex)}}
+        \def\ser{\fpeval{0.5*(0.5*\qwireinterval-\qwfillratex)}}
+        \def\boxtype{box}
+    }{}
+    \ifthenelse{\equal{\boxtype}{adj}}
+    {
+        \def\ner{\fpeval{0.5*(0.5*\qwireinterval-\qwfillratex)}}
+        \def\ser{\fpeval{-0.5*(0.5*\qwireinterval-\qwfillratex)}}
+        \def\boxtype{box}
+    }{}
+    \ifthenelse{\equal{\boxtype}{transpose}}
+    {
+        \def\nwr{\fpeval{-0.5*(0.5*\qwireinterval-\qwfillratex)}}
+        \def\swr{\fpeval{0.5*(0.5*\qwireinterval-\qwfillratex)}}
+        \def\boxtype{box}
+    }{}
+    \ifthenelse{\equal{\boxtype}{conj}}
+    {
+        \def\nwr{\fpeval{0.5*(0.5*\qwireinterval-\qwfillratex)}}
+        \def\swr{\fpeval{-0.5*(0.5*\qwireinterval-\qwfillratex)}}
+        \def\boxtype{box}
+    }{}
+    \ifthenelse{\equal{\boxtype}{box}}
+    {
+        \coordinate (nw-\theqworldnumeros) at ([shift={({0.5*\qwireinterval-\qwfillratex+\nwr},{-\qwfillrate})}]NW-\theqworldnumeros);
+        \coordinate (ne-\theqworldnumeros) at ([shift={({-0.5*\qwireinterval+\qwfillratex+\ner},{-\qwfillrate})}]NE-\theqworldnumeros);
+        \coordinate (se-\theqworldnumeros) at ([shift={({-0.5*\qwireinterval+\qwfillratex+\ser},{\qwfillrate})}]SE-\theqworldnumeros);
+        \coordinate (sw-\theqworldnumeros) at ([shift={({0.5*\qwireinterval-\qwfillratex+\swr},{\qwfillrate})}]SW-\theqworldnumeros);
+        \draw[draw = \framecolor, fill = \boxcolor,\qwthickness] (nw-\theqworldnumeros)--(ne-\theqworldnumeros)--(se-\theqworldnumeros)--(sw-\theqworldnumeros)--cycle;
+        \ifx\boxid\empty
+        \else
+            \coordinate (nw-\boxid) at (nw-\theqworldnumeros);
+            \coordinate (ne-\boxid) at (ne-\theqworldnumeros);
+            \coordinate (se-\boxid) at (se-\theqworldnumeros);
+            \coordinate (sw-\boxid) at (sw-\theqworldnumeros);
+        \fi
+        \node[\boxslantstyle] at (C-\theqworldnumeros) [anchor=center] {{\scalebox{\fpeval{min(\boxhorilen-1+2*\qwfillratex,\boxverlen-2*\qwfillrate)}}{\color{\morphismcolor}\boxname}}};
+    }{}
+    \def\qwwhitewidth{0.8pt}
+    \ifthenelse{\equal{\boxtype}{braid}}
+    {
+        \foreach\x in {1,...,\braidbsc}
+        {
+            \def\i{\fpeval{round(\x+\braidfsc)}}
+            \coordinate (tempA) at ($(o-\i-\theqworldnumeros)!{\fpeval{1-\braidsmoothness}}!(C-\theqworldnumeros)$);
+            \coordinate (tempB) at ($(C-\theqworldnumeros)!{\fpeval{\braidsmoothness}}!(o-\x-\theqworldnumeros)$);
+            \draw [\qwthickness,\framecolor,\rstrandtype] (i-\i-\theqworldnumeros) ..controls (tempA |- C-\theqworldnumeros) and (tempB |- C-\theqworldnumeros)..(o-\x-\theqworldnumeros);
+        }
+        \foreach\x in{1,...,\braidfsc}
+        {
+            \def\i{\fpeval{round(\x+\braidbsc)}}
+            \coordinate (tempA) at ($(i-\x-\theqworldnumeros)!{\fpeval{1-\braidsmoothness}}!(C-\theqworldnumeros)$);
+            \coordinate (tempB) at ($(C-\theqworldnumeros)!{\fpeval{\braidsmoothness}}!(o-\i-\theqworldnumeros)$);
+            \draw [ultra thick, draw = white, double = white, double distance =\pgflinewidth] 
+            (i-\x-\theqworldnumeros) ..controls (tempA |- C-\theqworldnumeros) and (tempB |- C-\theqworldnumeros)..(o-\i-\theqworldnumeros);
+            \draw [\qwthickness, draw = white, double = \framecolor, double distance =\pgflinewidth,\lstrandtype] 
+            (i-\x-\theqworldnumeros) ..controls (tempA |- C-\theqworldnumeros) and (tempB |- C-\theqworldnumeros)..(o-\i-\theqworldnumeros);
+        }
+    }{}
+    \ifthenelse{\equal{\boxtype}{braidinv}}
+    {
+        \foreach\x in{1,...,\braidfsc}
+        {
+            \def\i{\fpeval{round(\x+\braidbsc)}}
+            \coordinate (tempA) at ($(i-\x-\theqworldnumeros)!{\fpeval{1-\braidsmoothness}}!(C-\theqworldnumeros)$);
+            \coordinate (tempB) at ($(C-\theqworldnumeros)!{\fpeval{\braidsmoothness}}!(o-\i-\theqworldnumeros)$);
+            \draw [\qwthickness,\framecolor,\rstrandtype] (i-\x-\theqworldnumeros) ..controls (tempA |- C-\theqworldnumeros) and (tempB |- C-\theqworldnumeros)..(o-\i-\theqworldnumeros);
+        }
+        \foreach\x in {1,...,\braidbsc}
+        {
+            \def\i{\fpeval{round(\x+\braidfsc)}}
+            \coordinate (tempA) at ($(i-\i-\theqworldnumeros)!{\fpeval{1-\braidsmoothness}}!(C-\theqworldnumeros)$);
+            \coordinate (tempB) at ($(C-\theqworldnumeros)!{\fpeval{\braidsmoothness}}!(o-\x-\theqworldnumeros)$);
+            \draw[ultra thick,draw = white, double = white, double distance = \pgflinewidth,\lstrandtype]
+            (i-\i-\theqworldnumeros) ..controls (tempA |- C-\theqworldnumeros) and (tempB |- C-\theqworldnumeros)..(o-\x-\theqworldnumeros);
+            \draw[\qwthickness,draw = white, double = \framecolor, double distance = \pgflinewidth,\lstrandtype]
+            (i-\i-\theqworldnumeros) ..controls (tempA |- C-\theqworldnumeros) and (tempB |- C-\theqworldnumeros)..(o-\x-\theqworldnumeros);
+        }
+    }{}
+    \ifthenelse{\equal{\boxtype}{sym}}
+    {
+        \foreach\x in {1,...,\braidbsc}
+        {
+            \def\i{\fpeval{round(\x+\braidfsc)}}
+            \coordinate (tempA) at ($(i-\i-\theqworldnumeros)!{\fpeval{1-\braidsmoothness}}!(C-\theqworldnumeros)$);
+            \coordinate (tempB) at ($(C-\theqworldnumeros)!{\fpeval{\braidsmoothness}}!(o-\x-\theqworldnumeros)$);
+            \draw [\qwthickness,\framecolor,\rstrandtype] (i-\i-\theqworldnumeros) ..controls (tempA |- C-\theqworldnumeros) and (tempB |- C-\theqworldnumeros)..(o-\x-\theqworldnumeros);
+        }
+        \foreach\x in{1,...,\braidfsc}
+        {
+            \def\i{\fpeval{round(\x+\braidbsc)}}
+            \coordinate (tempA) at ($(i-\x-\theqworldnumeros)!{\fpeval{1-\braidsmoothness}}!(C-\theqworldnumeros)$);
+            \coordinate (tempB) at ($(C-\theqworldnumeros)!{\fpeval{\braidsmoothness}}!(o-\i-\theqworldnumeros)$);
+            \draw [\qwthickness,\framecolor,\lstrandtype] (i-\x-\theqworldnumeros) ..controls (tempA |- C-\theqworldnumeros) and (tempB |- C-\theqworldnumeros)..(o-\i-\theqworldnumeros);
+        }
+    }{}
+    \ifthenelse{\equal{\boxtype}{cap}}
+    {
+        \foreach \qwi in {1,...,\cardportsS}{
+            \def\qwj{\fpeval{\cardportsS-\qwi+1}}
+            \ifnum\qwi<\qwj
+                \draw[midarrow,\qwthickness,\framecolor]
+                    (i-\qwi-\theqworldnumeros) to [out={\dualangle},in={\fpeval{180-\dualangle}}] (i-\qwj-\theqworldnumeros);
+            \fi
+        }
+    }{}
+    \ifthenelse{\equal{\boxtype}{cup}}
+    {
+        \foreach \qwi in {1,...,\cardportsN}{
+            \def\qwj{\fpeval{\cardportsN-\qwi+1}}
+            \ifnum\qwi<\qwj
+                \draw[midarrow,\qwthickness,\framecolor]
+                    (o-\qwi-\theqworldnumeros) to [out={\fpeval{-1*\dualangle}},in={\fpeval{\dualangle-180}}] (o-\qwj-\theqworldnumeros);
+            \fi
+        }
+    }{}
+    \ifthenelse{\equal{\boxtype}{caprev}}
+    {
+        \foreach \qwi in {1,...,\cardportsS}{
+            \def\qwj{\fpeval{\cardportsS-\qwi+1}}
+            \ifnum\qwi<\qwj
+                \draw[midarrowinv,\qwthickness,\framecolor]
+                    (i-\qwi-\theqworldnumeros) to [out={\dualangle},in={\fpeval{180-\dualangle}}] (i-\qwj-\theqworldnumeros);
+            \fi
+        }
+    }{}
+    \ifthenelse{\equal{\boxtype}{cuprev}}
+    {
+        \foreach \qwi in {1,...,\cardportsN}{
+            \def\qwj{\fpeval{\cardportsN-\qwi+1}}
+            \ifnum\qwi<\qwj
+                \draw[midarrowinv,\qwthickness,\framecolor]
+                    (o-\qwi-\theqworldnumeros) to [out={\fpeval{-1*\dualangle}},in={\fpeval{\dualangle-180}}] (o-\qwj-\theqworldnumeros);
+            \fi
+        }
+    }{}
+    \ifthenelse{\equal{\boxtype}{spider}}
+    {
+        \ifnum\cardportsS>0
+            \foreach\x in\PortsS
+            {
+                \coordinate (tempD) at ($(C-\theqworldnumeros)!0.5!(s-\x-\theqworldnumeros)$);
+                \coordinate (tempA) at ($(tempD)!0.5!(C-\theqworldnumeros)$);
+                \coordinate (tempB) at ($(tempD)!0.5!(s-\x-\theqworldnumeros)$);
+                \coordinate (tempG) at (tempA -| tempD);
+                \coordinate (tempH) at (tempD -| tempB);
+                \draw [\qwthickness,\domarrowtype] (s-\x-\theqworldnumeros) ..controls (tempH) and (tempG) .. (C-\theqworldnumeros);
+            }
+        \fi
+        \ifnum\cardportsN>0
+            \foreach\x in\PortsN
+            {
+                \coordinate (tempD) at ($(C-\theqworldnumeros)!0.5!(n-\x-\theqworldnumeros)$);
+                \coordinate (tempA) at ($(tempD)!0.5!(C-\theqworldnumeros)$);
+                \coordinate (tempB) at ($(tempD)!0.5!(n-\x-\theqworldnumeros)$);
+                \coordinate (tempG) at (tempA -| tempD);
+                \coordinate (tempH) at (tempD -| tempB);
+                \draw [\qwthickness,\codarrowtype] (C-\theqworldnumeros) ..controls (tempG) and (tempH) .. (n-\x-\theqworldnumeros);
+                  %\draw [\qwthickness,\codarrowtype] (C-\theqworldnumeros) ..controls ([shift={(\qwvelocityx,-\qwspideradjust*\qwvelocityy)}]C-\theqworldnumeros) and ([shift={(\qwvelocityx,-\qwspideradjust*\qwvelocityy)}]n-\x-\theqworldnumeros) .. (n-\x-\theqworldnumeros);
+            }
+        \fi
+        \ifx\boxname\empty
+            \draw[\qwthickness,draw=\framecolor,fill=\boxcolor] (C-\theqworldnumeros) circle [x radius={0.1},y radius={0.1}];
+        \else
+            \draw[\qwthickness,draw=\framecolor,fill=\boxcolor] (C-\theqworldnumeros) circle [x radius={0.4},y radius={0.4}];
+            \node[\boxslantstyle] at (C-\theqworldnumeros) [anchor=center]{{\scalebox{\fpeval{min(0.9*\boxhorilen,\boxverlen-2*\qwfillrate)}}{\color{\morphismcolor}\boxname}}};
+        \fi
+    }{}
+    \ifthenelse{\equal{\boxtype}{unitobject}}
+    {
+        \draw[draw = {\framecolor}, fill = {\boxcolor}, opacity=0] (NE-\theqworldnumeros)--(NW-\theqworldnumeros)--(SW-\theqworldnumeros)--(SE-\theqworldnumeros)--cycle;
+    }{}
+    \ifthenelse{\equal{\boxtype}{rpcurl}}
+    {
+        \foreach \qwindex in {1,...,\cardportsN}{
+            \coordinate (temptempE) at ([shift={({\fpeval{-0.3*\smargin*(\qwindex-1)}},0)}]E-\theqworldnumeros);
+            \draw[\qwthickness] (temptempE) to [in=-\dualangle, out=\dualangle-180] (n-\qwindex-\theqworldnumeros);
+        }
+        \foreach \qwindex in {1,...,\cardportsS}{
+            \coordinate (temptempE) at ([shift={({\fpeval{-0.3*\smargin*(\qwindex-1)}},0)}]E-\theqworldnumeros);
+            \draw[ultra thick,draw = white, double = white, double distance = \pgflinewidth] (s-\qwindex-\theqworldnumeros) to [out=\dualangle, in=180-\dualangle] (temptempE);
+            \draw[\qwthickness,draw = white, double = \framecolor, double distance = \pgflinewidth] (s-\qwindex-\theqworldnumeros) to [out=\dualangle, in=180-\dualangle] (temptempE);
+        }
+    }{}
+
+    \coordinate (qworldat) at (SE-\theqworldnumeros);
+    \ifnum\internalinvocation=0
+        \stepcounter{qworldnumeros}
+    \fi
+}
+
+\pgfkeys{
+    /qworld/dom/.cd,
+    id/.store in=\domid,
+    label/.store in=\domlabel,
+    num/.store in=\domnum,
+    at/.store in=\domat,
+    type/.store in=\domtype,
+    id/.default={1},
+    label/.default={},
+    num/.default={1},
+    at/.default={below},
+    type/.default={I}
+}
+\NewDocumentCommand{\qwdom}{O{}}
+{
+    \pgfkeys{
+        /qworld/dom/.cd,
+        id={1},
+        label={},
+        num={1},
+        at={below},
+        type={I},
+        #1
+    }
+    \node[\domat] at (\domtype-\domnum-\domid) {\domlabel};
+}
+\pgfkeys{
+    /qworld/cod/.cd,
+    id/.store in=\codid,
+    label/.store in=\codlabel,
+    num/.store in=\codnum,
+    at/.store in=\codat,
+    type/.store in=\codtype,
+    id/.default={1},
+    label/.default={},
+    num/.default={1},
+    at/.default={above},
+    type/.default={O}
+}
+\NewDocumentCommand{\qwcod}{O{}}
+{
+    \pgfkeys{
+        /qworld/cod/.cd,
+        id={1},
+        label={},
+        num={1},
+        at={above},
+        type={O},
+        #1
+    }
+    \node[\codat] at (\codtype-\codnum-\codid) {\codlabel};
+}
+
+\NewDocumentCommand{\qwI}{O{1} m m O{below}}
+{
+    \node[#4] at (I-#1-#2) {#3};
+}
+
+\NewDocumentCommand{\qws}{O{1} m m O{below}}
+{
+    \node[#4] at (s-#1-#2) {#3};
+}
+
+\NewDocumentCommand{\qwS}{O{1} m m O{below}}
+{
+    \node[#4] at (S-#1-#2) {#3};
+}
+
+\NewDocumentCommand{\qwO}{O{1} m m O{above}}
+{
+    \node[#4] at (O-#1-#2) {#3};
+}
+
+\NewDocumentCommand{\qwn}{O{1} m m O{above}}
+{
+    \node[#4] at (n-#1-#2) {#3};
+}
+
+\NewDocumentCommand{\qwN}{O{1} m m O{above}}
+{
+    \node[#4] at (N-#1-#2) {#3};
+}
+
+\newcommand{\qwunitobject}[1][at={qworldat}]{
+    \qwboxprocess[unitobject]{#1, P={}}
+}


Property changes on: trunk/Master/texmf-dist/tex/latex/qworld/qworld.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2025-04-01 19:59:58 UTC (rev 74816)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2025-04-01 20:01:51 UTC (rev 74817)
@@ -745,7 +745,8 @@
      qualitype quantikz quantumarticle quattrocento
      quickreaction quicktype quiver quiz2socrative quizztex
      quotchap quoting quotmark
-     quran quran-bn quran-de quran-en quran-es quran-id quran-ur qyxf-book
+     quran quran-bn quran-de quran-en quran-es quran-id quran-ur
+     qworld qyxf-book
   r_und_s ragged2e raleway ran_toks randbild randexam randintlist
     random randomlist randomwalk randtext
     rank-2-roots rbt-mathnotes rccol rcs rcs-multi rcsinfo

Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2025-04-01 19:59:58 UTC (rev 74816)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2025-04-01 20:01:51 UTC (rev 74817)
@@ -4174,6 +4174,7 @@
  'pictex'	 => 'manual.pdf$',			# no source
  'piechartmp'    => 'piechartmp.pdf',                   # no source
  'ptptex'        => '(overcite|cite|wrapfig).sty',      # duplicated
+ 'qworld'    	 => 'qworld.pdf',                       # no source
  'scientific-thesis-cover' => 'demo.pdf',		# no source
  'sectionbox'    => 'example/lenna.*.jpg',              # nonfree
  'startex'	 => 'epsf.tex',				# stale copy

Modified: trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc	2025-04-01 19:59:58 UTC (rev 74816)
+++ trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc	2025-04-01 20:01:51 UTC (rev 74817)
@@ -213,6 +213,7 @@
 depend pseudocode
 depend pythonhighlight
 depend qsharp
+depend qworld
 depend quickreaction
 depend quiver
 depend rank-2-roots

Added: trunk/Master/tlpkg/tlpsrc/qworld.tlpsrc
===================================================================


More information about the tex-live-commits mailing list.