summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-06-14 03:02:26 +0000
committerNorbert Preining <norbert@preining.info>2020-06-14 03:02:26 +0000
commit893b65e5d4c0b7cb8ebbfca9ee6b090b9a4a182c (patch)
treef6b0cff2cf2f8e30ef3edbfa6c7205e588e81515
parent2d0067edb74f15b431d7a1e3a42b4f525986cef0 (diff)
CTAN sync 202006140302
-rw-r--r--FILES.byname269
-rw-r--r--FILES.byname.gzbin2221165 -> 2221100 bytes
-rw-r--r--FILES.last07days803
-rw-r--r--graphics/pgf/contrib/yquant/README.md4
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test1.qasm12
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test10.qasm16
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test11.qasm20
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test12.qasm20
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test13.qasm42
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test14.qasm49
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test15.qasm17
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test16.qasm22
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test17.qasm22
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test18.qasm20
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test2.qasm20
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test3.qasm13
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test4.qasm23
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test5.qasm15
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test6.qasm20
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test7.qasm21
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test8.qasm23
-rw-r--r--graphics/pgf/contrib/yquant/doc/qasm/test9.qasm20
-rw-r--r--graphics/pgf/contrib/yquant/doc/yquant-doc.pdfbin512339 -> 600284 bytes
-rw-r--r--graphics/pgf/contrib/yquant/doc/yquant-doc.tex380
-rw-r--r--graphics/pgf/contrib/yquant/tex/yquant-circuit.tex286
-rw-r--r--graphics/pgf/contrib/yquant/tex/yquant-config.tex168
-rw-r--r--graphics/pgf/contrib/yquant/tex/yquant-draw.tex482
-rw-r--r--graphics/pgf/contrib/yquant/tex/yquant-env.tex319
-rw-r--r--graphics/pgf/contrib/yquant/tex/yquant-lang.tex467
-rw-r--r--graphics/pgf/contrib/yquant/tex/yquant-langhelper.tex10
-rw-r--r--graphics/pgf/contrib/yquant/tex/yquant-registers.tex355
-rw-r--r--graphics/pgf/contrib/yquant/tex/yquant-shapes.tex17
-rw-r--r--graphics/pgf/contrib/yquant/tex/yquant-tools.tex326
-rw-r--r--graphics/pgf/contrib/yquant/tex/yquant.sty9
-rw-r--r--graphics/pgf/contrib/yquant/tex/yquantlanguage-qasm.sty681
-rw-r--r--language/japanese/pxjahyper/README-ja.md15
-rw-r--r--language/japanese/pxjahyper/README.md8
-rw-r--r--language/japanese/pxjahyper/pxjahyper-ajm.def13
-rw-r--r--language/japanese/pxjahyper/pxjahyper.pdfbin83272 -> 116816 bytes
-rw-r--r--language/japanese/pxjahyper/pxjahyper.sty137
-rw-r--r--language/japanese/pxjahyper/pxjahyper.tex96
-rw-r--r--macros/latex/contrib/hyperxmp/hyperxmp.dtx541
-rw-r--r--macros/latex/contrib/hyperxmp/hyperxmp.pdfbin1303174 -> 1326332 bytes
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.pdfbin355481 -> 356758 bytes
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.tex37
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.dtx219
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.pdfbin873835 -> 882583 bytes
-rw-r--r--macros/latex/contrib/pdfpc/pdfpc-doc.pdf (renamed from macros/latex/contrib/pdfpc/pdfpc.pdf)bin170447 -> 172285 bytes
-rw-r--r--macros/latex/contrib/pdfpc/pdfpc-doc.tex140
-rw-r--r--macros/latex/contrib/pdfpc/pdfpc.ins38
-rw-r--r--macros/latex/contrib/pdfpc/pdfpc.sty (renamed from macros/latex/contrib/pdfpc/pdfpc.dtx)48
-rw-r--r--support/latexdiff/doc/latexdiff-man.pdfbin282069 -> 282140 bytes
-rwxr-xr-xsupport/latexdiff/latexdiff12
-rwxr-xr-xsupport/latexdiff/latexdiff-fast12
-rwxr-xr-xsupport/latexdiff/latexdiff-so12
-rwxr-xr-xsupport/latexdiff/latexdiff-vc8
-rw-r--r--support/latexdiff/latexdiff-vc.12
-rw-r--r--support/latexdiff/latexdiff.12
-rwxr-xr-xsupport/latexdiff/latexrevise2
-rw-r--r--support/latexdiff/latexrevise.12
-rwxr-xr-xsystems/texlive/tlnet/install-tl24
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl7
-rwxr-xr-xsystems/texlive/tlnet/tlpkg/installer/install-tl-gui.tcl6
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb129
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.md52
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha5122
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc14
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2198456 -> 2199996 bytes
-rw-r--r--systems/win32/miktex/tm/packages/files.csv.lzmabin538561 -> 536588 bytes
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini10
-rw-r--r--systems/win32/w32tex/ChangeLog10
-rw-r--r--timestamp2
72 files changed, 4749 insertions, 1772 deletions
diff --git a/FILES.byname b/FILES.byname
index 0aaaf3d513..baf84bbcb2 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -5003,7 +5003,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2020/06/12 | 98984 | FILES.last07days
+2020/06/13 | 100402 | FILES.last07days
2018/06/27 | 99883 | fonts/academicons/academicons.pdf
2018/06/27 | 10779 | fonts/academicons/academicons.sty
2018/06/27 | 5774 | fonts/academicons/academicons.tex
@@ -135987,20 +135987,39 @@
2016/09/12 | 139796 | graphics/pgf/contrib/xebaposter/xebaposter-doc.pdf
2016/09/12 | 27760 | graphics/pgf/contrib/xebaposter/xebaposter-doc.tex
2016/09/12 | 422607 | graphics/pgf/contrib/xebaposter.zip
-2020/04/11 | 512339 | graphics/pgf/contrib/yquant/doc/yquant-doc.pdf
-2020/04/14 | 146542 | graphics/pgf/contrib/yquant/doc/yquant-doc.tex
-2020/03/24 | 3815 | graphics/pgf/contrib/yquant/README.md
-2020/04/06 | 17224 | graphics/pgf/contrib/yquant/tex/yquant-circuit.tex
-2020/04/14 | 12915 | graphics/pgf/contrib/yquant/tex/yquant-config.tex
-2020/04/14 | 27731 | graphics/pgf/contrib/yquant/tex/yquant-draw.tex
-2020/04/14 | 10349 | graphics/pgf/contrib/yquant/tex/yquant-env.tex
-2020/03/29 | 12208 | graphics/pgf/contrib/yquant/tex/yquant-langhelper.tex
-2020/04/11 | 21396 | graphics/pgf/contrib/yquant/tex/yquant-lang.tex
-2020/04/11 | 25575 | graphics/pgf/contrib/yquant/tex/yquant-registers.tex
-2020/04/14 | 24860 | graphics/pgf/contrib/yquant/tex/yquant-shapes.tex
-2020/04/11 | 1435 | graphics/pgf/contrib/yquant/tex/yquant.sty
-2020/04/05 | 8092 | graphics/pgf/contrib/yquant/tex/yquant-tools.tex
-2020/04/14 | 461777 | graphics/pgf/contrib/yquant.zip
+2020/06/11 | 242 | graphics/pgf/contrib/yquant/doc/qasm/test10.qasm
+2020/06/11 | 271 | graphics/pgf/contrib/yquant/doc/qasm/test11.qasm
+2020/06/11 | 275 | graphics/pgf/contrib/yquant/doc/qasm/test12.qasm
+2020/06/11 | 600 | graphics/pgf/contrib/yquant/doc/qasm/test13.qasm
+2020/06/13 | 993 | graphics/pgf/contrib/yquant/doc/qasm/test14.qasm
+2020/06/11 | 266 | graphics/pgf/contrib/yquant/doc/qasm/test15.qasm
+2020/06/11 | 305 | graphics/pgf/contrib/yquant/doc/qasm/test16.qasm
+2020/06/11 | 308 | graphics/pgf/contrib/yquant/doc/qasm/test17.qasm
+2020/06/11 | 313 | graphics/pgf/contrib/yquant/doc/qasm/test18.qasm
+2020/06/11 | 199 | graphics/pgf/contrib/yquant/doc/qasm/test1.qasm
+2020/06/11 | 342 | graphics/pgf/contrib/yquant/doc/qasm/test2.qasm
+2020/06/11 | 199 | graphics/pgf/contrib/yquant/doc/qasm/test3.qasm
+2020/06/11 | 290 | graphics/pgf/contrib/yquant/doc/qasm/test4.qasm
+2020/06/11 | 316 | graphics/pgf/contrib/yquant/doc/qasm/test5.qasm
+2020/06/11 | 283 | graphics/pgf/contrib/yquant/doc/qasm/test6.qasm
+2020/06/11 | 268 | graphics/pgf/contrib/yquant/doc/qasm/test7.qasm
+2020/06/11 | 302 | graphics/pgf/contrib/yquant/doc/qasm/test8.qasm
+2020/06/11 | 309 | graphics/pgf/contrib/yquant/doc/qasm/test9.qasm
+2020/06/13 | 600284 | graphics/pgf/contrib/yquant/doc/yquant-doc.pdf
+2020/06/13 | 168671 | graphics/pgf/contrib/yquant/doc/yquant-doc.tex
+2020/06/13 | 3884 | graphics/pgf/contrib/yquant/README.md
+2020/06/02 | 16847 | graphics/pgf/contrib/yquant/tex/yquant-circuit.tex
+2020/06/07 | 13304 | graphics/pgf/contrib/yquant/tex/yquant-config.tex
+2020/06/12 | 42148 | graphics/pgf/contrib/yquant/tex/yquant-draw.tex
+2020/06/11 | 20428 | graphics/pgf/contrib/yquant/tex/yquant-env.tex
+2020/05/24 | 12213 | graphics/pgf/contrib/yquant/tex/yquant-langhelper.tex
+2020/06/07 | 27045 | graphics/pgf/contrib/yquant/tex/yquant-lang.tex
+2020/06/13 | 23080 | graphics/pgf/contrib/yquant/tex/yquantlanguage-qasm.sty
+2020/06/11 | 34368 | graphics/pgf/contrib/yquant/tex/yquant-registers.tex
+2020/05/30 | 24960 | graphics/pgf/contrib/yquant/tex/yquant-shapes.tex
+2020/06/13 | 1535 | graphics/pgf/contrib/yquant/tex/yquant.sty
+2020/06/07 | 21485 | graphics/pgf/contrib/yquant/tex/yquant-tools.tex
+2020/06/13 | 550881 | graphics/pgf/contrib/yquant.zip
2007/12/11 | 654 | graphics/pgf/README
1994/04/20 | 473 | graphics/pictex/addon/00index
2008/08/12 | 1048 | graphics/pictex/addon/autoarea/ANNOUNCE.txt
@@ -162794,7 +162813,7 @@
2011/04/29 | 449052 | install/macros/latex/contrib/hrefhide.tds.zip
2016/11/20 | 951051 | install/macros/latex/contrib/hustthesis.tds.zip
2020/05/16 | 4136794 | install/macros/latex/contrib/hyperref.tds.zip
-2020/05/13 | 1197048 | install/macros/latex/contrib/hyperxmp.tds.zip
+2020/06/13 | 1218726 | install/macros/latex/contrib/hyperxmp.tds.zip
2009/09/02 | 167274 | install/macros/latex/contrib/hyphenat.tds.zip
2009/04/05 | 198256 | install/macros/latex/contrib/IEEEconf.tds.zip
2018/04/16 | 41342 | install/macros/latex/contrib/ifmtarg.tds.zip
@@ -171822,13 +171841,13 @@
2019/03/31 | 492 | language/japanese/pxchfon/vf/cfjas-x-ts1.vf
2020/04/26 | 375326 | language/japanese/pxchfon.zip
2020/04/25 | 1091 | language/japanese/pxjahyper/LICENSE
-2020/04/25 | 24248 | language/japanese/pxjahyper/pxjahyper-ajm.def
-2020/04/25 | 83272 | language/japanese/pxjahyper/pxjahyper.pdf
-2020/04/25 | 35850 | language/japanese/pxjahyper/pxjahyper.sty
-2020/04/25 | 5839 | language/japanese/pxjahyper/pxjahyper.tex
-2020/04/25 | 2235 | language/japanese/pxjahyper/README-ja.md
-2020/04/25 | 1224 | language/japanese/pxjahyper/README.md
-2020/04/24 | 103087 | language/japanese/pxjahyper.zip
+2020/06/13 | 23994 | language/japanese/pxjahyper/pxjahyper-ajm.def
+2020/06/13 | 116816 | language/japanese/pxjahyper/pxjahyper.pdf
+2020/06/13 | 38596 | language/japanese/pxjahyper/pxjahyper.sty
+2020/06/13 | 9836 | language/japanese/pxjahyper/pxjahyper.tex
+2020/06/13 | 2639 | language/japanese/pxjahyper/README-ja.md
+2020/06/13 | 1403 | language/japanese/pxjahyper/README.md
+2020/06/13 | 138094 | language/japanese/pxjahyper.zip
2020/05/04 | 1091 | language/japanese/pxjodel/LICENSE
2020/05/04 | 105827 | language/japanese/pxjodel/pxjodel.pdf
2020/05/04 | 4901 | language/japanese/pxjodel/pxjodel.sty
@@ -191210,16 +191229,16 @@
1997/08/24 | 1034 | macros/latex/contrib/hyper/scontrib/harvard.hyp
1997/08/24 | 297 | macros/latex/contrib/hyper/scontrib/README
1997/08/24 | 1381 | macros/latex/contrib/hyper/TODO
-2020/05/13 | 70830 | macros/latex/contrib/hyperxmp/einstein1.pdf
-2020/05/13 | 77679 | macros/latex/contrib/hyperxmp/einstein2.pdf
-2020/05/13 | 7979 | macros/latex/contrib/hyperxmp/einstein-xmp.tex
-2020/05/13 | 3466 | macros/latex/contrib/hyperxmp/gglo-hyxmp.ist
-2020/05/13 | 3442 | macros/latex/contrib/hyperxmp/gind-hyxmp.ist
-2020/05/13 | 216819 | macros/latex/contrib/hyperxmp/hyperxmp.dtx
-2020/05/13 | 2036 | macros/latex/contrib/hyperxmp/hyperxmp.ins
-2020/05/13 | 1303174 | macros/latex/contrib/hyperxmp/hyperxmp.pdf
-2020/05/13 | 2249 | macros/latex/contrib/hyperxmp/README
-2020/05/13 | 1185862 | macros/latex/contrib/hyperxmp.zip
+2020/06/13 | 70830 | macros/latex/contrib/hyperxmp/einstein1.pdf
+2020/06/13 | 77679 | macros/latex/contrib/hyperxmp/einstein2.pdf
+2020/06/13 | 7979 | macros/latex/contrib/hyperxmp/einstein-xmp.tex
+2020/06/13 | 3466 | macros/latex/contrib/hyperxmp/gglo-hyxmp.ist
+2020/06/13 | 3442 | macros/latex/contrib/hyperxmp/gind-hyxmp.ist
+2020/06/13 | 231514 | macros/latex/contrib/hyperxmp/hyperxmp.dtx
+2020/06/13 | 2036 | macros/latex/contrib/hyperxmp/hyperxmp.ins
+2020/06/13 | 1326332 | macros/latex/contrib/hyperxmp/hyperxmp.pdf
+2020/06/13 | 2249 | macros/latex/contrib/hyperxmp/README
+2020/06/13 | 1206651 | macros/latex/contrib/hyperxmp.zip
2010/03/06 | 321222 | macros/latex/contrib/hyper.zip
2009/09/02 | 35493 | macros/latex/contrib/hyphenat/hyphenat.dtx
2009/09/02 | 3153 | macros/latex/contrib/hyphenat/hyphenat.ins
@@ -195610,13 +195629,13 @@
1996/03/22 | 18862 | macros/latex/contrib/niceframe/umrandb.mf
2015/01/17 | 1370 | macros/latex/contrib/niceframe/umrand.mf
2015/01/17 | 287910 | macros/latex/contrib/niceframe.zip
-2020/06/07 | 388084 | macros/latex/contrib/nicematrix/nicematrix.dtx
-2020/06/07 | 355481 | macros/latex/contrib/nicematrix/nicematrix-french.pdf
-2020/05/27 | 110157 | macros/latex/contrib/nicematrix/nicematrix-french.tex
+2020/06/12 | 394137 | macros/latex/contrib/nicematrix/nicematrix.dtx
+2020/06/12 | 356758 | macros/latex/contrib/nicematrix/nicematrix-french.pdf
+2020/06/12 | 111437 | macros/latex/contrib/nicematrix/nicematrix-french.tex
2019/01/16 | 1423 | macros/latex/contrib/nicematrix/nicematrix.ins
-2020/06/07 | 873835 | macros/latex/contrib/nicematrix/nicematrix.pdf
+2020/06/12 | 882583 | macros/latex/contrib/nicematrix/nicematrix.pdf
2020/06/07 | 1005 | macros/latex/contrib/nicematrix/README.md
-2020/06/07 | 1295256 | macros/latex/contrib/nicematrix.zip
+2020/06/13 | 1306701 | macros/latex/contrib/nicematrix.zip
2015/11/21 | 217 | macros/latex/contrib/nicetext/ANNOUNCE.txt
2012/03/18 | 254582 | macros/latex/contrib/nicetext/demo/arseneau.pdf
2011/09/14 | 10 | macros/latex/contrib/nicetext/demo/iso.txt
@@ -197211,11 +197230,11 @@
2018/07/21 | 904 | macros/latex/contrib/pdfpc-movie/pdfpc-movie.ins
2018/07/21 | 1374 | macros/latex/contrib/pdfpc-movie/README.md
2018/07/21 | 81193 | macros/latex/contrib/pdfpc-movie.zip
-2020/03/07 | 5834 | macros/latex/contrib/pdfpc/pdfpc.dtx
-2020/03/07 | 1089 | macros/latex/contrib/pdfpc/pdfpc.ins
-2020/03/07 | 170447 | macros/latex/contrib/pdfpc/pdfpc.pdf
-2020/03/07 | 1196 | macros/latex/contrib/pdfpc/README.md
-2020/03/07 | 172577 | macros/latex/contrib/pdfpc.zip
+2020/06/13 | 172285 | macros/latex/contrib/pdfpc/pdfpc-doc.pdf
+2020/06/13 | 4808 | macros/latex/contrib/pdfpc/pdfpc-doc.tex
+2020/06/13 | 4775 | macros/latex/contrib/pdfpc/pdfpc.sty
+2020/06/13 | 1196 | macros/latex/contrib/pdfpc/README.md
+2020/06/13 | 175354 | macros/latex/contrib/pdfpc.zip
2017/12/03 | 19452 | macros/latex/contrib/pdfprivacy/LICENSE
2017/12/03 | 14446 | macros/latex/contrib/pdfprivacy/pdfprivacy.dtx
2017/12/03 | 1975 | macros/latex/contrib/pdfprivacy/pdfprivacy.ins
@@ -247397,27 +247416,27 @@
2003/03/08 | 2750 | support/latexcount/latexcount.pl
2006/10/01 | 31301 | support/latexdb/latexdb-0.3.tgz
2006/04/24 | 506 | support/latexdb/README
-2020/05/27 | 2212 | support/latexdiff/contrib/latexchanges.py
-2020/05/27 | 1491 | support/latexdiff/contrib/latexdiff.spec
-2020/05/27 | 4454 | support/latexdiff/contrib/latexdiff-wrap
-2020/05/27 | 575 | support/latexdiff/contrib/README.latexchanges
-2020/05/27 | 32474 | support/latexdiff/COPYING
-2020/05/27 | 4172 | support/latexdiff/doc/example-diff.tex
-2020/05/27 | 282069 | support/latexdiff/doc/latexdiff-man.pdf
-2020/05/27 | 12049 | support/latexdiff/doc/latexdiff-man.tex
-2020/05/27 | 1356 | support/latexdiff/example/example-draft.tex
-2020/05/27 | 1414 | support/latexdiff/example/example-rev.tex
-2020/05/27 | 224184 | support/latexdiff/latexdiff
-2020/05/27 | 49272 | support/latexdiff/latexdiff.1
-2020/05/27 | 240383 | support/latexdiff/latexdiff-fast
-2020/05/27 | 235994 | support/latexdiff/latexdiff-so
-2020/05/27 | 28671 | support/latexdiff/latexdiff-vc
-2020/05/27 | 13572 | support/latexdiff/latexdiff-vc.1
-2020/05/27 | 20729 | support/latexdiff/latexrevise
-2020/05/27 | 9551 | support/latexdiff/latexrevise.1
-2020/05/27 | 3148 | support/latexdiff/Makefile
-2020/05/27 | 5296 | support/latexdiff/README
-2020/05/27 | 543923 | support/latexdiff.zip
+2020/06/13 | 2212 | support/latexdiff/contrib/latexchanges.py
+2020/06/13 | 1491 | support/latexdiff/contrib/latexdiff.spec
+2020/06/13 | 4454 | support/latexdiff/contrib/latexdiff-wrap
+2020/06/13 | 575 | support/latexdiff/contrib/README.latexchanges
+2020/06/13 | 32474 | support/latexdiff/COPYING
+2020/06/13 | 4172 | support/latexdiff/doc/example-diff.tex
+2020/06/13 | 282140 | support/latexdiff/doc/latexdiff-man.pdf
+2020/06/13 | 12049 | support/latexdiff/doc/latexdiff-man.tex
+2020/06/13 | 1356 | support/latexdiff/example/example-draft.tex
+2020/06/13 | 1414 | support/latexdiff/example/example-rev.tex
+2020/06/13 | 224332 | support/latexdiff/latexdiff
+2020/06/13 | 49272 | support/latexdiff/latexdiff.1
+2020/06/13 | 240531 | support/latexdiff/latexdiff-fast
+2020/06/13 | 236142 | support/latexdiff/latexdiff-so
+2020/06/13 | 28725 | support/latexdiff/latexdiff-vc
+2020/06/13 | 13572 | support/latexdiff/latexdiff-vc.1
+2020/06/13 | 20731 | support/latexdiff/latexrevise
+2020/06/13 | 9551 | support/latexdiff/latexrevise.1
+2020/06/13 | 3148 | support/latexdiff/Makefile
+2020/06/13 | 5296 | support/latexdiff/README
+2020/06/13 | 544231 | support/latexdiff.zip
1997/05/24 | 9592 | support/latexdraw/bin/latex2epc
1996/03/06 | 8149 | support/latexdraw/bin/ldstapeldiagramm
1996/03/06 | 5576 | support/latexdraw/bin/ldtortendiagramm
@@ -255719,8 +255738,8 @@
2019/02/28 | 8200 | systems/texlive/tlnet/archive/commedit.source.r50116.tar.xz
2019/02/28 | 535056 | systems/texlive/tlnet/archive/comment.doc.r41927.tar.xz
2019/02/28 | 4124 | systems/texlive/tlnet/archive/comment.r41927.tar.xz
-2020/06/07 | 550024 | systems/texlive/tlnet/archive/commutative-diagrams.doc.r55438.tar.xz
-2020/06/07 | 12676 | systems/texlive/tlnet/archive/commutative-diagrams.r55438.tar.xz
+2020/06/13 | 549992 | systems/texlive/tlnet/archive/commutative-diagrams.doc.r55526.tar.xz
+2020/06/13 | 12684 | systems/texlive/tlnet/archive/commutative-diagrams.r55526.tar.xz
2019/02/28 | 1860 | systems/texlive/tlnet/archive/compactbib.r15878.tar.xz
2020/03/13 | 708 | systems/texlive/tlnet/archive/compare.r54265.tar.xz
2019/02/28 | 1304 | systems/texlive/tlnet/archive/competences.doc.r47573.tar.xz
@@ -258495,10 +258514,10 @@
2019/02/28 | 38768 | systems/texlive/tlnet/archive/HA-prosper.source.r15878.tar.xz
2020/03/04 | 216528 | systems/texlive/tlnet/archive/har2nat.doc.r54080.tar.xz
2020/03/04 | 1112 | systems/texlive/tlnet/archive/har2nat.r54080.tar.xz
-2020/05/27 | 3048 | systems/texlive/tlnet/archive/haranoaji.doc.r55283.tar.xz
-2020/05/25 | 3060 | systems/texlive/tlnet/archive/haranoaji-extra.doc.r55265.tar.xz
-2020/05/25 | 25912136 | systems/texlive/tlnet/archive/haranoaji-extra.r55265.tar.xz
-2020/05/27 | 26174240 | systems/texlive/tlnet/archive/haranoaji.r55283.tar.xz
+2020/06/13 | 3048 | systems/texlive/tlnet/archive/haranoaji.doc.r55524.tar.xz
+2020/06/13 | 3060 | systems/texlive/tlnet/archive/haranoaji-extra.doc.r55525.tar.xz
+2020/06/13 | 25909728 | systems/texlive/tlnet/archive/haranoaji-extra.r55525.tar.xz
+2020/06/13 | 26177396 | systems/texlive/tlnet/archive/haranoaji.r55524.tar.xz
2019/02/28 | 120084 | systems/texlive/tlnet/archive/hardwrap.doc.r21396.tar.xz
2019/02/28 | 2732 | systems/texlive/tlnet/archive/hardwrap.r21396.tar.xz
2019/02/28 | 11108 | systems/texlive/tlnet/archive/hardwrap.source.r21396.tar.xz
@@ -262197,9 +262216,9 @@
2020/03/20 | 216100 | systems/texlive/tlnet/archive/pmx.x86_64-linux.r54410.tar.xz
2020/03/20 | 224020 | systems/texlive/tlnet/archive/pmx.x86_64-solaris.r54410.tar.xz
2019/02/28 | 4032 | systems/texlive/tlnet/archive/pnas2009.r16287.tar.xz
-2020/06/02 | 762828 | systems/texlive/tlnet/archive/poemscol.doc.r55389.tar.xz
-2020/06/02 | 19420 | systems/texlive/tlnet/archive/poemscol.r55389.tar.xz
-2020/06/02 | 89876 | systems/texlive/tlnet/archive/poemscol.source.r55389.tar.xz
+2020/06/13 | 769620 | systems/texlive/tlnet/archive/poemscol.doc.r55528.tar.xz
+2020/06/13 | 19700 | systems/texlive/tlnet/archive/poemscol.r55528.tar.xz
+2020/06/13 | 91208 | systems/texlive/tlnet/archive/poemscol.source.r55528.tar.xz
2019/12/15 | 267148 | systems/texlive/tlnet/archive/poetry.doc.r53129.tar.xz
2019/12/15 | 3288 | systems/texlive/tlnet/archive/poetry.r53129.tar.xz
2019/12/15 | 17256 | systems/texlive/tlnet/archive/poetry.source.r53129.tar.xz
@@ -262867,8 +262886,8 @@
2019/02/28 | 8952 | systems/texlive/tlnet/archive/quotmark.source.r15878.tar.xz
2020/03/09 | 129972 | systems/texlive/tlnet/archive/quran-de.doc.r54191.tar.xz
2020/03/09 | 620164 | systems/texlive/tlnet/archive/quran-de.r54191.tar.xz
-2020/03/16 | 495960 | systems/texlive/tlnet/archive/quran.doc.r54333.tar.xz
-2020/03/16 | 1192000 | systems/texlive/tlnet/archive/quran.r54333.tar.xz
+2020/06/13 | 501764 | systems/texlive/tlnet/archive/quran.doc.r55530.tar.xz
+2020/06/13 | 1447112 | systems/texlive/tlnet/archive/quran.r55530.tar.xz
2020/03/09 | 2025520 | systems/texlive/tlnet/archive/quran-ur.doc.r54191.tar.xz
2020/03/09 | 496 | systems/texlive/tlnet/archive/quran-ur.r54191.tar.xz
2019/07/31 | 642036 | systems/texlive/tlnet/archive/ragged2e.doc.r51780.tar.xz
@@ -263756,11 +263775,11 @@
2019/02/28 | 944 | systems/texlive/tlnet/archive/susy.r19440.tar.xz
2019/02/28 | 1380 | systems/texlive/tlnet/archive/svgcolor.doc.r15878.tar.xz
2019/02/28 | 3452 | systems/texlive/tlnet/archive/svgcolor.r15878.tar.xz
-2020/05/09 | 1077456 | systems/texlive/tlnet/archive/svg.doc.r55070.tar.xz
+2020/06/13 | 1079448 | systems/texlive/tlnet/archive/svg.doc.r55527.tar.xz
2019/02/28 | 197212 | systems/texlive/tlnet/archive/svg-inkscape.doc.r32199.tar.xz
2019/02/28 | 648 | systems/texlive/tlnet/archive/svg-inkscape.r32199.tar.xz
-2020/05/09 | 13884 | systems/texlive/tlnet/archive/svg.r55070.tar.xz
-2020/05/09 | 44084 | systems/texlive/tlnet/archive/svg.source.r55070.tar.xz
+2020/06/13 | 14056 | systems/texlive/tlnet/archive/svg.r55527.tar.xz
+2020/06/13 | 44588 | systems/texlive/tlnet/archive/svg.source.r55527.tar.xz
2019/02/28 | 441216 | systems/texlive/tlnet/archive/svn.doc.r15878.tar.xz
2019/02/28 | 258436 | systems/texlive/tlnet/archive/svninfo.doc.r17554.tar.xz
2019/02/28 | 3940 | systems/texlive/tlnet/archive/svninfo.r17554.tar.xz
@@ -264526,9 +264545,9 @@
2019/02/28 | 33908 | systems/texlive/tlnet/archive/thumbs.source.r33134.tar.xz
2019/02/28 | 155976 | systems/texlive/tlnet/archive/thumby.doc.r16736.tar.xz
2019/02/28 | 3268 | systems/texlive/tlnet/archive/thumby.r16736.tar.xz
-2020/06/09 | 2284684 | systems/texlive/tlnet/archive/thuthesis.doc.r55485.tar.xz
-2020/06/09 | 22004 | systems/texlive/tlnet/archive/thuthesis.r55485.tar.xz
-2020/06/09 | 37760 | systems/texlive/tlnet/archive/thuthesis.source.r55485.tar.xz
+2020/06/13 | 2303668 | systems/texlive/tlnet/archive/thuthesis.doc.r55523.tar.xz
+2020/06/13 | 22404 | systems/texlive/tlnet/archive/thuthesis.r55523.tar.xz
+2020/06/13 | 39320 | systems/texlive/tlnet/archive/thuthesis.source.r55523.tar.xz
2019/02/28 | 488008 | systems/texlive/tlnet/archive/ticket.doc.r42280.tar.xz
2019/02/28 | 3996 | systems/texlive/tlnet/archive/ticket.r42280.tar.xz
2019/02/28 | 371572 | systems/texlive/tlnet/archive/ticollege.doc.r36306.tar.xz
@@ -264895,8 +264914,8 @@
2019/02/28 | 254104 | systems/texlive/tlnet/archive/tucv.doc.r20680.tar.xz
2019/02/28 | 1860 | systems/texlive/tlnet/archive/tucv.r20680.tar.xz
2019/02/28 | 4996 | systems/texlive/tlnet/archive/tucv.source.r20680.tar.xz
-2020/04/26 | 1510292 | systems/texlive/tlnet/archive/tuda-ci.doc.r54878.tar.xz
-2020/04/26 | 36216 | systems/texlive/tlnet/archive/tuda-ci.r54878.tar.xz
+2020/06/13 | 1534812 | systems/texlive/tlnet/archive/tuda-ci.doc.r55529.tar.xz
+2020/06/13 | 36228 | systems/texlive/tlnet/archive/tuda-ci.r55529.tar.xz
2020/04/15 | 3782156 | systems/texlive/tlnet/archive/tudscr.doc.r54744.tar.xz
2020/04/15 | 159924 | systems/texlive/tlnet/archive/tudscr.r54744.tar.xz
2020/04/15 | 315432 | systems/texlive/tlnet/archive/tudscr.source.r54744.tar.xz
@@ -265908,16 +265927,16 @@
2020/01/24 | 138180 | systems/texlive/tlnet/archive/zxjatype.doc.r53500.tar.xz
2020/01/24 | 8760 | systems/texlive/tlnet/archive/zxjatype.r53500.tar.xz
2020/05/31 | 105475 | systems/texlive/tlnet/install-tl
-2020/06/12 | 5500776 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2020/06/12 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2020/06/12 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2020/06/13 | 5500717 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2020/06/13 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2020/06/13 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2020/05/31 | 4770 | systems/texlive/tlnet/install-tl-windows.bat
-2020/06/12 | 19383612 | systems/texlive/tlnet/install-tl-windows.exe
-2020/06/12 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2020/06/12 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2020/06/12 | 24269097 | systems/texlive/tlnet/install-tl.zip
-2020/06/12 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2020/06/12 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2020/06/13 | 19383599 | systems/texlive/tlnet/install-tl-windows.exe
+2020/06/13 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2020/06/13 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2020/06/13 | 24269097 | systems/texlive/tlnet/install-tl.zip
+2020/06/13 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2020/06/13 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2020/03/05 | 1215 | systems/texlive/tlnet/README.md
2020/04/06 | 5961 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
2016/04/12 | 600 | systems/texlive/tlnet/tlpkg/gpg/random_seed
@@ -265973,12 +265992,12 @@
2020/05/17 | 20322 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2020/05/03 | 4786 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2017/11/14 | 27560 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2020/06/12 | 16275223 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2020/06/12 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2020/06/13 | 16275469 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2020/06/13 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2020/05/13 | 86417 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2020/06/12 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2020/06/12 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2020/06/12 | 2198256 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/06/13 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/06/13 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2020/06/13 | 2198456 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2020/04/15 | 58761 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2020/03/20 | 41736 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2020/05/11 | 15010 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -269898,7 +269917,7 @@
2019/02/25 | 612669 | systems/win32/miktex/tm/packages/commedit.tar.lzma
2016/08/30 | 542821 | systems/win32/miktex/tm/packages/comment.tar.lzma
2016/07/18 | 16387 | systems/win32/miktex/tm/packages/committee-font.tar.lzma
-2020/06/09 | 565961 | systems/win32/miktex/tm/packages/commutative-diagrams.tar.lzma
+2020/06/13 | 565907 | systems/win32/miktex/tm/packages/commutative-diagrams.tar.lzma
2001/05/31 | 2089 | systems/win32/miktex/tm/packages/compactbib.tar.lzma
2018/05/04 | 7572 | systems/win32/miktex/tm/packages/competences.tar.lzma
2007/04/20 | 184812 | systems/win32/miktex/tm/packages/complexity.tar.bz2
@@ -270422,7 +270441,7 @@
2020/02/04 | 281488 | systems/win32/miktex/tm/packages/filehook.tar.lzma
2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma
2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma
-2020/06/12 | 538561 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/06/13 | 536588 | systems/win32/miktex/tm/packages/files.csv.lzma
2001/05/14 | 5617 | systems/win32/miktex/tm/packages/finbib.tar.lzma
2015/10/20 | 44379 | systems/win32/miktex/tm/packages/findhyph.tar.lzma
2011/10/21 | 89323 | systems/win32/miktex/tm/packages/fink.tar.lzma
@@ -270718,8 +270737,8 @@
2012/01/10 | 52557 | systems/win32/miktex/tm/packages/happy4th.tar.lzma
2005/09/15 | 278342 | systems/win32/miktex/tm/packages/ha-prosper.cab
2005/12/29 | 1366 | systems/win32/miktex/tm/packages/har2nat.cab
-2020/05/25 | 25842048 | systems/win32/miktex/tm/packages/haranoaji-extra.tar.lzma
-2020/05/25 | 26110608 | systems/win32/miktex/tm/packages/haranoaji.tar.lzma
+2020/06/13 | 25847362 | systems/win32/miktex/tm/packages/haranoaji-extra.tar.lzma
+2020/06/13 | 26106034 | systems/win32/miktex/tm/packages/haranoaji.tar.lzma
2011/02/15 | 134243 | systems/win32/miktex/tm/packages/hardwrap.tar.lzma
2007/05/12 | 6681 | systems/win32/miktex/tm/packages/harmony.tar.bz2
2012/05/29 | 52924 | systems/win32/miktex/tm/packages/harnon-cv.tar.lzma
@@ -271065,7 +271084,7 @@
2020/03/30 | 15094509 | systems/win32/miktex/tm/packages/libertine.tar.lzma
2020/03/09 | 1999275 | systems/win32/miktex/tm/packages/libertinus-fonts.tar.lzma
2020/05/06 | 664255 | systems/win32/miktex/tm/packages/libertinus-otf.tar.lzma
-2020/06/02 | 2359255 | systems/win32/miktex/tm/packages/libertinust1math.tar.lzma
+2020/06/13 | 2359490 | systems/win32/miktex/tm/packages/libertinust1math.tar.lzma
2020/05/07 | 17336 | systems/win32/miktex/tm/packages/libertinus.tar.lzma
2019/12/20 | 9819512 | systems/win32/miktex/tm/packages/libertinus-type1.tar.lzma
2012/09/26 | 53049 | systems/win32/miktex/tm/packages/libgreek.tar.lzma
@@ -271572,9 +271591,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2020/05/17 | 39207 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2020/05/17 | 42854 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/06/12 | 200712 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2020/06/12 | 1202300 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2020/06/12 | 1121592 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/06/13 | 200750 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/06/13 | 1202364 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/06/13 | 1121425 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2020/05/17 | 13031 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2020/05/17 | 14067 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma
2016/07/15 | 35914 | systems/win32/miktex/tm/packages/mil3.tar.lzma
@@ -271610,7 +271629,7 @@
2019/02/16 | 263396 | systems/win32/miktex/tm/packages/modeles-factures-belges-assocs.tar.lzma
2015/08/04 | 1177267 | systems/win32/miktex/tm/packages/moderncv.tar.lzma
2018/04/04 | 395594 | systems/win32/miktex/tm/packages/modernposter.tar.lzma
-2019/03/07 | 193178 | systems/win32/miktex/tm/packages/moderntimeline.tar.lzma
+2020/06/13 | 195613 | systems/win32/miktex/tm/packages/moderntimeline.tar.lzma
2020/02/02 | 299994 | systems/win32/miktex/tm/packages/modes.tar.lzma
2019/11/02 | 547640 | systems/win32/miktex/tm/packages/modiagram.tar.lzma
2009/02/07 | 33580 | systems/win32/miktex/tm/packages/modref.tar.lzma
@@ -271787,7 +271806,7 @@
2014/04/07 | 854578 | systems/win32/miktex/tm/packages/obnov.tar.lzma
2013/01/24 | 541997 | systems/win32/miktex/tm/packages/ocg-p.tar.lzma
2013/08/19 | 4002337 | systems/win32/miktex/tm/packages/ocgtools.tar.lzma
-2019/11/10 | 18320 | systems/win32/miktex/tm/packages/ocgx2.tar.lzma
+2020/06/13 | 18427 | systems/win32/miktex/tm/packages/ocgx2.tar.lzma
2012/12/20 | 1003744 | systems/win32/miktex/tm/packages/ocgx.tar.lzma
2011/01/07 | 294157 | systems/win32/miktex/tm/packages/ocr-b-outline.tar.lzma
2011/01/07 | 10750 | systems/win32/miktex/tm/packages/ocr-b.tar.lzma
@@ -272008,7 +272027,7 @@
2020/04/20 | 614703 | systems/win32/miktex/tm/packages/pm-isomath.tar.lzma
2016/01/03 | 396227 | systems/win32/miktex/tm/packages/pmxchords.tar.lzma
2020/02/08 | 674358 | systems/win32/miktex/tm/packages/pmx.tar.lzma
-2020/06/04 | 872880 | systems/win32/miktex/tm/packages/poemscol.tar.lzma
+2020/06/13 | 881436 | systems/win32/miktex/tm/packages/poemscol.tar.lzma
2019/12/15 | 287993 | systems/win32/miktex/tm/packages/poetry.tar.lzma
2016/03/09 | 18224 | systems/win32/miktex/tm/packages/poetrytex.tar.lzma
2019/06/19 | 186268 | systems/win32/miktex/tm/packages/poiretone.tar.lzma
@@ -272042,7 +272061,7 @@
2008/11/07 | 35981 | systems/win32/miktex/tm/packages/prettyref.tar.lzma
2017/07/26 | 201385 | systems/win32/miktex/tm/packages/preview.tar.lzma
2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma
-2020/06/12 | 848 | systems/win32/miktex/tm/packages/pr.ini
+2020/06/13 | 858 | systems/win32/miktex/tm/packages/pr.ini
2010/09/27 | 248469 | systems/win32/miktex/tm/packages/printlen.tar.lzma
2008/06/17 | 77313 | systems/win32/miktex/tm/packages/proba.tar.lzma
2017/07/12 | 988486 | systems/win32/miktex/tm/packages/probsoln.tar.lzma
@@ -272152,7 +272171,7 @@
2017/09/17 | 127190 | systems/win32/miktex/tm/packages/pst-pulley.tar.lzma
2007/04/20 | 26964 | systems/win32/miktex/tm/packages/pst-qtree.tar.lzma
2020/02/13 | 4662495 | systems/win32/miktex/tm/packages/pstricks-add.tar.lzma
-2020/06/11 | 7237206 | systems/win32/miktex/tm/packages/pstricks.tar.lzma
+2020/06/13 | 7255336 | systems/win32/miktex/tm/packages/pstricks.tar.lzma
2017/01/04 | 130862 | systems/win32/miktex/tm/packages/pstring.tar.lzma
2017/06/30 | 88418 | systems/win32/miktex/tm/packages/pst-rputover.tar.lzma
2011/06/23 | 570621 | systems/win32/miktex/tm/packages/pst-rubans.tar.lzma
@@ -272224,7 +272243,7 @@
2014/01/31 | 317536 | systems/win32/miktex/tm/packages/quoting.tar.lzma
2007/12/30 | 166253 | systems/win32/miktex/tm/packages/quotmark.tar.lzma
2020/03/09 | 747672 | systems/win32/miktex/tm/packages/quran-de.tar.lzma
-2020/03/18 | 1683177 | systems/win32/miktex/tm/packages/quran.tar.lzma
+2020/06/13 | 1944192 | systems/win32/miktex/tm/packages/quran.tar.lzma
2020/03/09 | 1994041 | systems/win32/miktex/tm/packages/quran-ur.tar.lzma
2019/08/02 | 659794 | systems/win32/miktex/tm/packages/ragged2e.tar.lzma
2016/12/05 | 2516856 | systems/win32/miktex/tm/packages/raleway.tar.lzma
@@ -272272,7 +272291,7 @@
2019/12/09 | 324460 | systems/win32/miktex/tm/packages/rerunfilecheck.tar.lzma
2019/04/26 | 555007 | systems/win32/miktex/tm/packages/resphilosophica.tar.lzma
2020/03/23 | 168623 | systems/win32/miktex/tm/packages/rest-api.tar.lzma
-2020/04/21 | 163885 | systems/win32/miktex/tm/packages/resumecls.tar.lzma
+2020/06/13 | 163872 | systems/win32/miktex/tm/packages/resumecls.tar.lzma
2018/08/23 | 153645 | systems/win32/miktex/tm/packages/returntogrid.tar.lzma
2012/01/03 | 207878 | systems/win32/miktex/tm/packages/reverxii.tar.lzma
2017/03/20 | 265801 | systems/win32/miktex/tm/packages/revquantum.tar.lzma
@@ -272580,7 +272599,7 @@
2020/02/03 | 276948 | systems/win32/miktex/tm/packages/supertabular.tar.lzma
2006/11/14 | 56821 | systems/win32/miktex/tm/packages/susy.tar.bz2
2007/01/02 | 4353 | systems/win32/miktex/tm/packages/svgcolor.tar.bz2
-2020/05/12 | 1140285 | systems/win32/miktex/tm/packages/svg.tar.lzma
+2020/06/13 | 1140640 | systems/win32/miktex/tm/packages/svg.tar.lzma
2010/03/30 | 275226 | systems/win32/miktex/tm/packages/svninfo.tar.lzma
2012/05/11 | 452623 | systems/win32/miktex/tm/packages/svn-multi.tar.lzma
2010/04/27 | 254706 | systems/win32/miktex/tm/packages/svn-prov.tar.lzma
@@ -272724,7 +272743,7 @@
2014/03/14 | 746611 | systems/win32/miktex/tm/packages/thumbs.tar.lzma
2016/07/18 | 210377 | systems/win32/miktex/tm/packages/thumb.tar.lzma
2010/01/16 | 158776 | systems/win32/miktex/tm/packages/thumby.tar.lzma
-2020/06/09 | 2391374 | systems/win32/miktex/tm/packages/thuthesis.tar.lzma
+2020/06/13 | 2413618 | systems/win32/miktex/tm/packages/thuthesis.tar.lzma
2016/10/12 | 493413 | systems/win32/miktex/tm/packages/ticket.tar.lzma
2015/02/28 | 377353 | systems/win32/miktex/tm/packages/ticollege.tar.lzma
2012/01/16 | 417463 | systems/win32/miktex/tm/packages/tikz-3dplot.tar.lzma
@@ -272833,7 +272852,7 @@
2005/06/02 | 90162 | systems/win32/miktex/tm/packages/ttcmex.cab
2016/11/04 | 106224 | systems/win32/miktex/tm/packages/ttf2pk.tar.lzma
2010/12/13 | 260868 | systems/win32/miktex/tm/packages/tucv.tar.lzma
-2020/05/06 | 1547217 | systems/win32/miktex/tm/packages/tuda-ci.tar.lzma
+2020/06/13 | 1572082 | systems/win32/miktex/tm/packages/tuda-ci.tar.lzma
2020/01/15 | 4262168 | systems/win32/miktex/tm/packages/tudscr.tar.lzma
2019/02/17 | 800587 | systems/win32/miktex/tm/packages/tufte-latex.tar.lzma
2006/06/12 | 143924 | systems/win32/miktex/tm/packages/tugboat-plain.cab
@@ -273066,7 +273085,7 @@
2015/11/25 | 486715 | systems/win32/miktex/tm/packages/xifthen.tar.lzma
2017/11/18 | 1746 | systems/win32/miktex/tm/packages/xii-lat.tar.lzma
2017/11/18 | 1593 | systems/win32/miktex/tm/packages/xii.tar.lzma
-2020/06/09 | 498444 | systems/win32/miktex/tm/packages/xindex.tar.lzma
+2020/06/13 | 495391 | systems/win32/miktex/tm/packages/xindex.tar.lzma
2016/11/05 | 133165 | systems/win32/miktex/tm/packages/xindy.tar.lzma
2020/02/27 | 2365856 | systems/win32/miktex/tm/packages/xint.tar.lzma
2019/09/08 | 547780 | systems/win32/miktex/tm/packages/xits.tar.lzma
@@ -273186,7 +273205,7 @@
2020/06/11 | 4915564 | systems/win32/w32tex/aleph-w32.tar.xz
2020/06/02 | 66272736 | systems/win32/w32tex/biblatex-biber.tar.xz
2016/12/13 | 65971452 | systems/win32/w32tex/cbfonts.tar.xz
-2020/06/11 | 667190 | systems/win32/w32tex/ChangeLog
+2020/06/12 | 667561 | systems/win32/w32tex/ChangeLog
2009/08/03 | 141221 | systems/win32/w32tex/ChangeLog.0
2009/08/03 | 221890 | systems/win32/w32tex/ChangeLog.1
2009/08/03 | 116462 | systems/win32/w32tex/ChangeLog.2
@@ -273194,7 +273213,7 @@
2017/06/24 | 644754 | systems/win32/w32tex/ChangeLog.4
2020/05/29 | 22110824 | systems/win32/w32tex/cjkzr.tar.xz
2013/04/27 | 15858676 | systems/win32/w32tex/context-doc.tar.xz
-2020/06/11 | 140046520 | systems/win32/w32tex/context.tar.xz
+2020/06/11 | 140045988 | systems/win32/w32tex/context.tar.xz
2020/06/06 | 910020 | systems/win32/w32tex/cweb-w32.tar.xz
2020/03/02 | 6281164 | systems/win32/w32tex/datetime2.tar.xz
2020/06/06 | 845488 | systems/win32/w32tex/dvi2ps-w32.tar.xz
@@ -273210,14 +273229,14 @@
2020/05/30 | 29268960 | systems/win32/w32tex/latex.tar.xz
2020/06/06 | 996252 | systems/win32/w32tex/lcdf-typetools-w32.tar.xz
2020/06/09 | 399072360 | systems/win32/w32tex/ltxpkgdocs.tar.xz
-2020/06/11 | 34896928 | systems/win32/w32tex/ltxpkgs.tar.xz
+2020/06/12 | 34896648 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/06/11 | 3852976 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
2020/06/11 | 3798068 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
2020/06/11 | 3832868 | systems/win32/w32tex/luajittex-w32.tar.xz
-2020/06/11 | 18137864 | systems/win32/w32tex/luatex-dev-w32.tar.xz
-2020/06/11 | 18155796 | systems/win32/w32tex/luatex-exp-w32.tar.xz
+2020/06/12 | 18133524 | systems/win32/w32tex/luatex-dev-w32.tar.xz
+2020/06/12 | 18153688 | systems/win32/w32tex/luatex-exp-w32.tar.xz
2020/05/25 | 69259880 | systems/win32/w32tex/luatexja.tar.xz
-2020/06/11 | 18142552 | systems/win32/w32tex/luatex-w32.tar.xz
+2020/06/12 | 18140128 | systems/win32/w32tex/luatex-w32.tar.xz
2020/06/06 | 1663388 | systems/win32/w32tex/makeindex-w32.tar.xz
2015/05/26 | 1542676 | systems/win32/w32tex/manual.tar.xz
2020/06/06 | 439416 | systems/win32/w32tex/mftools.tar.xz
@@ -273233,7 +273252,7 @@
2020/05/26 | 2823676 | systems/win32/w32tex/platex.tar.xz
2020/03/20 | 1598792 | systems/win32/w32tex/pmx.tar.xz
2020/06/06 | 1168960 | systems/win32/w32tex/pstoedit-w32.tar.xz
-2020/06/10 | 274396556 | systems/win32/w32tex/pstricks.tar.xz
+2020/06/12 | 274413076 | systems/win32/w32tex/pstricks.tar.xz
2020/06/06 | 517548 | systems/win32/w32tex/psutils-w32.tar.xz
2020/06/11 | 6461864 | systems/win32/w32tex/ptex-ng-w32.tar.xz
2020/06/11 | 10488188 | systems/win32/w32tex/ptex-w32.tar.xz
@@ -273266,7 +273285,7 @@
2020/06/11 | 44056796 | systems/win32/w32tex/web2c-w32.tar.xz
2020/06/06 | 811152 | systems/win32/w32tex/win64/aleph-w64.tar.xz
2019/12/09 | 22317480 | systems/win32/w32tex/win64/biblatex-biber-w64.tar.xz
-2020/06/06 | 2130900 | systems/win32/w32tex/win64/context-w64.tar.xz
+2020/06/11 | 2130952 | systems/win32/w32tex/win64/context-w64.tar.xz
2020/06/06 | 82676 | systems/win32/w32tex/win64/cweb-w64.tar.xz
2020/06/06 | 758008 | systems/win32/w32tex/win64/dvi2ps-w64.tar.xz
2020/06/06 | 447860 | systems/win32/w32tex/win64/dvi2tty-w64.tar.xz
@@ -273402,7 +273421,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2020/06/13 | 186 | timestamp
+2020/06/14 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2017/06/30 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index 2dad1ac454..e2e9eda09e 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 57b945ef47..104b4ffbe7 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,14 +1,118 @@
+2020/06/13 | 993 | graphics/pgf/contrib/yquant/doc/qasm/test14.qasm
+2020/06/13 | 9836 | language/japanese/pxjahyper/pxjahyper.tex
+2020/06/13 | 9551 | support/latexdiff/latexrevise.1
+2020/06/13 | 91208 | systems/texlive/tlnet/archive/poemscol.source.r55528.tar.xz
+2020/06/13 | 881436 | systems/win32/miktex/tm/packages/poemscol.tar.lzma
+2020/06/13 | 858 | systems/win32/miktex/tm/packages/pr.ini
+2020/06/13 | 7979 | macros/latex/contrib/hyperxmp/einstein-xmp.tex
+2020/06/13 | 77679 | macros/latex/contrib/hyperxmp/einstein2.pdf
+2020/06/13 | 769620 | systems/texlive/tlnet/archive/poemscol.doc.r55528.tar.xz
+2020/06/13 | 7255336 | systems/win32/miktex/tm/packages/pstricks.tar.lzma
+2020/06/13 | 70830 | macros/latex/contrib/hyperxmp/einstein1.pdf
+2020/06/13 | 600284 | graphics/pgf/contrib/yquant/doc/yquant-doc.pdf
+2020/06/13 | 575 | support/latexdiff/contrib/README.latexchanges
+2020/06/13 | 565907 | systems/win32/miktex/tm/packages/commutative-diagrams.tar.lzma
+2020/06/13 | 550881 | graphics/pgf/contrib/yquant.zip
+2020/06/13 | 5500717 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2020/06/13 | 549992 | systems/texlive/tlnet/archive/commutative-diagrams.doc.r55526.tar.xz
+2020/06/13 | 544231 | support/latexdiff.zip
+2020/06/13 | 536588 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/06/13 | 5296 | support/latexdiff/README
+2020/06/13 | 501764 | systems/texlive/tlnet/archive/quran.doc.r55530.tar.xz
+2020/06/13 | 495391 | systems/win32/miktex/tm/packages/xindex.tar.lzma
+2020/06/13 | 49272 | support/latexdiff/latexdiff.1
+2020/06/13 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2020/06/13 | 4808 | macros/latex/contrib/pdfpc/pdfpc-doc.tex
+2020/06/13 | 4775 | macros/latex/contrib/pdfpc/pdfpc.sty
+2020/06/13 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2020/06/13 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2020/06/13 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2020/06/13 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2020/06/13 | 44588 | systems/texlive/tlnet/archive/svg.source.r55527.tar.xz
+2020/06/13 | 4454 | support/latexdiff/contrib/latexdiff-wrap
+2020/06/13 | 4172 | support/latexdiff/doc/example-diff.tex
+2020/06/13 | 39320 | systems/texlive/tlnet/archive/thuthesis.source.r55523.tar.xz
+2020/06/13 | 3884 | graphics/pgf/contrib/yquant/README.md
+2020/06/13 | 38596 | language/japanese/pxjahyper/pxjahyper.sty
+2020/06/13 | 36228 | systems/texlive/tlnet/archive/tuda-ci.r55529.tar.xz
+2020/06/13 | 3466 | macros/latex/contrib/hyperxmp/gglo-hyxmp.ist
+2020/06/13 | 3442 | macros/latex/contrib/hyperxmp/gind-hyxmp.ist
+2020/06/13 | 32474 | support/latexdiff/COPYING
2020/06/13 | 3217 | fonts/haranoaji/README
2020/06/13 | 3217 | fonts/haranoaji-extra/README
+2020/06/13 | 3148 | support/latexdiff/Makefile
+2020/06/13 | 3060 | systems/texlive/tlnet/archive/haranoaji-extra.doc.r55525.tar.xz
+2020/06/13 | 3048 | systems/texlive/tlnet/archive/haranoaji.doc.r55524.tar.xz
+2020/06/13 | 28725 | support/latexdiff/latexdiff-vc
+2020/06/13 | 282140 | support/latexdiff/doc/latexdiff-man.pdf
+2020/06/13 | 2639 | language/japanese/pxjahyper/README-ja.md
+2020/06/13 | 26177396 | systems/texlive/tlnet/archive/haranoaji.r55524.tar.xz
+2020/06/13 | 26106034 | systems/win32/miktex/tm/packages/haranoaji.tar.lzma
+2020/06/13 | 25909728 | systems/texlive/tlnet/archive/haranoaji-extra.r55525.tar.xz
+2020/06/13 | 25847362 | systems/win32/miktex/tm/packages/haranoaji-extra.tar.lzma
+2020/06/13 | 24269097 | systems/texlive/tlnet/install-tl.zip
+2020/06/13 | 2413618 | systems/win32/miktex/tm/packages/thuthesis.tar.lzma
+2020/06/13 | 240531 | support/latexdiff/latexdiff-fast
+2020/06/13 | 23994 | language/japanese/pxjahyper/pxjahyper-ajm.def
+2020/06/13 | 236142 | support/latexdiff/latexdiff-so
+2020/06/13 | 2359490 | systems/win32/miktex/tm/packages/libertinust1math.tar.lzma
+2020/06/13 | 231514 | macros/latex/contrib/hyperxmp/hyperxmp.dtx
+2020/06/13 | 23080 | graphics/pgf/contrib/yquant/tex/yquantlanguage-qasm.sty
+2020/06/13 | 2303668 | systems/texlive/tlnet/archive/thuthesis.doc.r55523.tar.xz
+2020/06/13 | 2249 | macros/latex/contrib/hyperxmp/README
+2020/06/13 | 224332 | support/latexdiff/latexdiff
+2020/06/13 | 22404 | systems/texlive/tlnet/archive/thuthesis.r55523.tar.xz
+2020/06/13 | 2212 | support/latexdiff/contrib/latexchanges.py
+2020/06/13 | 2198456 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/06/13 | 20731 | support/latexdiff/latexrevise
+2020/06/13 | 2036 | macros/latex/contrib/hyperxmp/hyperxmp.ins
+2020/06/13 | 200750 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/06/13 | 19700 | systems/texlive/tlnet/archive/poemscol.r55528.tar.xz
+2020/06/13 | 195613 | systems/win32/miktex/tm/packages/moderntimeline.tar.lzma
+2020/06/13 | 1944192 | systems/win32/miktex/tm/packages/quran.tar.lzma
+2020/06/13 | 19383599 | systems/texlive/tlnet/install-tl-windows.exe
+2020/06/13 | 18427 | systems/win32/miktex/tm/packages/ocgx2.tar.lzma
+2020/06/13 | 175354 | macros/latex/contrib/pdfpc.zip
+2020/06/13 | 172285 | macros/latex/contrib/pdfpc/pdfpc-doc.pdf
+2020/06/13 | 168671 | graphics/pgf/contrib/yquant/doc/yquant-doc.tex
+2020/06/13 | 163872 | systems/win32/miktex/tm/packages/resumecls.tar.lzma
+2020/06/13 | 16275469 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2020/06/13 | 1572082 | systems/win32/miktex/tm/packages/tuda-ci.tar.lzma
+2020/06/13 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2020/06/13 | 1535 | graphics/pgf/contrib/yquant/tex/yquant.sty
+2020/06/13 | 1534812 | systems/texlive/tlnet/archive/tuda-ci.doc.r55529.tar.xz
+2020/06/13 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2020/06/13 | 1491 | support/latexdiff/contrib/latexdiff.spec
+2020/06/13 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2020/06/13 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/06/13 | 1447112 | systems/texlive/tlnet/archive/quran.r55530.tar.xz
+2020/06/13 | 1414 | support/latexdiff/example/example-rev.tex
+2020/06/13 | 14056 | systems/texlive/tlnet/archive/svg.r55527.tar.xz
+2020/06/13 | 1403 | language/japanese/pxjahyper/README.md
+2020/06/13 | 138094 | language/japanese/pxjahyper.zip
+2020/06/13 | 13572 | support/latexdiff/latexdiff-vc.1
+2020/06/13 | 1356 | support/latexdiff/example/example-draft.tex
+2020/06/13 | 1326332 | macros/latex/contrib/hyperxmp/hyperxmp.pdf
+2020/06/13 | 1306701 | macros/latex/contrib/nicematrix.zip
+2020/06/13 | 12684 | systems/texlive/tlnet/archive/commutative-diagrams.r55526.tar.xz
+2020/06/13 | 1218726 | install/macros/latex/contrib/hyperxmp.tds.zip
+2020/06/13 | 1206651 | macros/latex/contrib/hyperxmp.zip
+2020/06/13 | 12049 | support/latexdiff/doc/latexdiff-man.tex
+2020/06/13 | 1202364 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/06/13 | 1196 | macros/latex/contrib/pdfpc/README.md
+2020/06/13 | 116816 | language/japanese/pxjahyper/pxjahyper.pdf
+2020/06/13 | 1140640 | systems/win32/miktex/tm/packages/svg.tar.lzma
+2020/06/13 | 1121425 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/06/13 | 1079448 | systems/texlive/tlnet/archive/svg.doc.r55527.tar.xz
2020/06/12 | 981 | graphics/svg/source/examples/root.C
2020/06/12 | 907844 | systems/texlive/tlnet/archive/latexindent.doc.r55520.tar.xz
2020/06/12 | 9000 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
2020/06/12 | 885150 | macros/latex/contrib/poemscol.zip
2020/06/12 | 8846 | macros/xetex/latex/quran/doc/quran.png
+2020/06/12 | 882583 | macros/latex/contrib/nicematrix/nicematrix.pdf
2020/06/12 | 877155 | macros/latex/contrib/thuthesis/thuthesis-example.pdf
2020/06/12 | 852207 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
2020/06/12 | 8508 | macros/latex/contrib/thuthesis/math_commands.tex
-2020/06/12 | 848 | systems/win32/miktex/tm/packages/pr.ini
2020/06/12 | 8467 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex
2020/06/12 | 822674 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
2020/06/12 | 815848 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
@@ -23,6 +127,7 @@
2020/06/12 | 7176656 | systems/texlive/tlnet/archive/pstricks.doc.r55515.tar.xz
2020/06/12 | 716 | macros/xetex/latex/quran/README
2020/06/12 | 714868 | graphics/svg/source/examples/root.svg
+2020/06/12 | 667561 | systems/win32/w32tex/ChangeLog
2020/06/12 | 6639 | macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo
2020/06/12 | 6630 | macros/latex/contrib/thuthesis/README.md
2020/06/12 | 6598 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex
@@ -55,10 +160,8 @@
2020/06/12 | 558962 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
2020/06/12 | 5574 | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.mitra.code.tex
2020/06/12 | 550435 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
-2020/06/12 | 5500776 | systems/texlive/tlnet/install-tl-unx.tar.gz
2020/06/12 | 54266 | macros/xetex/latex/quran/doc/quran-test1.pdf
2020/06/12 | 538748 | graphics/pgf/contrib/commutative-diagrams/commutative-diagrams-doc.pdf
-2020/06/12 | 538561 | systems/win32/miktex/tm/packages/files.csv.lzma
2020/06/12 | 5118 | macros/latex/contrib/thuthesis/thusetup.tex
2020/06/12 | 5105 | macros/latex/contrib/thuthesis/data/appendix-translation.tex
2020/06/12 | 5065820 | fonts/haranoaji/HaranoAjiGothic-Heavy.otf
@@ -66,7 +169,6 @@
2020/06/12 | 502 | macros/xetex/latex/quran/doc/quran-test.tex
2020/06/12 | 4973 | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.koinos.code.tex
2020/06/12 | 49549 | graphics/pgf/contrib/commutative-diagrams/commutative-diagrams-doc.tex
-2020/06/12 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2020/06/12 | 485498 | macros/latex/contrib/poemscol/poemscol.dtx
2020/06/12 | 4833116 | fonts/haranoaji/HaranoAjiGothic-Bold.otf
2020/06/12 | 4825 | macros/latex/contrib/tuda-ci/tex/tudacolors.sty
@@ -83,22 +185,22 @@
2020/06/12 | 4595 | macros/xetex/latex/quran/tex/quran-transfr.def
2020/06/12 | 4575 | macros/xetex/latex/quran/tex/quran-transen.def
2020/06/12 | 4563 | macros/xetex/latex/quran/tex/quran-transfa.def
-2020/06/12 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2020/06/12 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2020/06/12 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2020/06/12 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2020/06/12 | 4555 | macros/xetex/latex/quran/tex/quran-transde.def
2020/06/12 | 4441 | macros/latex/contrib/tuda-ci/tex/tudacolors.def
2020/06/12 | 4406652 | fonts/haranoaji-extra/HaranoAjiGothic-ExtraLight.otf
2020/06/12 | 4382 | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.ramma.code.tex
2020/06/12 | 4328 | macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty
+2020/06/12 | 42148 | graphics/pgf/contrib/yquant/tex/yquant-draw.tex
2020/06/12 | 4085 | graphics/svg/README.md
2020/06/12 | 398 | macros/xetex/latex/quran/doc/quran-test1.tex
+2020/06/12 | 394137 | macros/latex/contrib/nicematrix/nicematrix.dtx
2020/06/12 | 3891 | macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty
2020/06/12 | 36930 | macros/xetex/latex/quran/tex/quran.sty
2020/06/12 | 36377 | macros/latex/contrib/tuda-ci/tex/tudapub.cls
2020/06/12 | 3622 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
+2020/06/12 | 356758 | macros/latex/contrib/nicematrix/nicematrix-french.pdf
2020/06/12 | 355 | graphics/pgf/contrib/commutative-diagrams/commutative-diagrams.tex
+2020/06/12 | 34896648 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/06/12 | 33629 | macros/xetex/latex/quran/doc/quran-test.pdf
2020/06/12 | 335927 | macros/xetex/latex/quran/doc/quran-doc.pdf
2020/06/12 | 3300 | macros/latex/contrib/tuda-ci/tex/tudafonts.sty
@@ -111,12 +213,12 @@
2020/06/12 | 28424 | graphics/svg/source/examples/svg-example.svg
2020/06/12 | 2802 | macros/latex/contrib/thuthesis/data/denotation.tex
2020/06/12 | 2792159 | macros/xetex/latex/quran.zip
+2020/06/12 | 274413076 | systems/win32/w32tex/pstricks.tar.xz
2020/06/12 | 2652 | macros/latex/contrib/thuthesis/data/resume.tex
2020/06/12 | 2633 | macros/latex/contrib/thuthesis/data/abstract.tex
2020/06/12 | 2619 | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.diorthono.code.tex
2020/06/12 | 2516 | systems/texlive/tlnet/archive/moderntimeline.r55518.tar.xz
2020/06/12 | 2486252 | macros/latex/contrib/thuthesis.zip
-2020/06/12 | 24269097 | systems/texlive/tlnet/install-tl.zip
2020/06/12 | 23923 | macros/latex/contrib/tuda-ci/tex/tudaexercise.cls
2020/06/12 | 23404 | macros/latex/contrib/tuda-ci/tex/tudathesis.cfg
2020/06/12 | 23247 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis_maschbau.tex
@@ -124,7 +226,6 @@
2020/06/12 | 2302 | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.bapto.code.tex
2020/06/12 | 2227 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty
2020/06/12 | 2222 | macros/latex/contrib/thuthesis/thuthesis.ins
-2020/06/12 | 2198256 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2020/06/12 | 2191 | macros/xetex/latex/quran/doc/quran-test2.tex
2020/06/12 | 218652 | systems/texlive/tlnet/archive/texlive-scripts.doc.r55511.tar.xz
2020/06/12 | 2175 | macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
@@ -132,12 +233,13 @@
2020/06/12 | 2097 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex
2020/06/12 | 2094 | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.code.tex
2020/06/12 | 2009 | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.ektropi.code.tex
-2020/06/12 | 200712 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
2020/06/12 | 2006 | graphics/pgf/contrib/commutative-diagrams/kodi.sty
2020/06/12 | 20052 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex
2020/06/12 | 19631 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex
-2020/06/12 | 19383612 | systems/texlive/tlnet/install-tl-windows.exe
2020/06/12 | 186684 | systems/texlive/tlnet/archive/moderntimeline.doc.r55518.tar.xz
+2020/06/12 | 18153688 | systems/win32/w32tex/luatex-exp-w32.tar.xz
+2020/06/12 | 18140128 | systems/win32/w32tex/luatex-w32.tar.xz
+2020/06/12 | 18133524 | systems/win32/w32tex/luatex-dev-w32.tar.xz
2020/06/12 | 17921 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex
2020/06/12 | 1784 | macros/latex/contrib/thuthesis/Makefile
2020/06/12 | 175 | graphics/pgf/contrib/commutative-diagrams/README
@@ -150,18 +252,13 @@
2020/06/12 | 16739 | macros/latex/contrib/tuda-ci/tex/tudaposter.cls
2020/06/12 | 1672 | macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo
2020/06/12 | 1668 | macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo
-2020/06/12 | 16275223 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
2020/06/12 | 1601542 | macros/xetex/latex/quran/tex/qurantext-fa.translation.def
2020/06/12 | 1570 | macros/latex/contrib/thuthesis/thuthesis-example.tex
2020/06/12 | 1569 | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.ozos.code.tex
-2020/06/12 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
2020/06/12 | 1536419 | support/spix.zip
-2020/06/12 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
2020/06/12 | 152255 | macros/latex/contrib/thuthesis/thuthesis.dtx
2020/06/12 | 1461 | graphics/svg/doc/LICENSE.md
-2020/06/12 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
2020/06/12 | 14509 | macros/latex/contrib/tuda-ci/tex/tudaletter.cls
-2020/06/12 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
2020/06/12 | 1447378 | macros/xetex/latex/quran/tex/qurantext-simple.def
2020/06/12 | 1438728 | macros/xetex/latex/quran/tex/qurantext-uthmani.def
2020/06/12 | 14186 | macros/latex/contrib/thuthesis/tsinghua-name-bachelor.pdf
@@ -172,10 +269,9 @@
2020/06/12 | 1251810 | macros/xetex/latex/quran/tex/qurantext-en.transliteration.def
2020/06/12 | 1230282 | macros/xetex/latex/quran/tex/qurantext-de.translation.def
2020/06/12 | 1210492 | macros/xetex/latex/quran/tex/qurantext-fr.translation.def
-2020/06/12 | 1202300 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
2020/06/12 | 11729 | graphics/pgf/contrib/commutative-diagrams/tikzlibrarycommutative-diagrams.mandyas.code.tex
2020/06/12 | 1167724 | graphics/svg.zip
-2020/06/12 | 1121592 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/06/12 | 111437 | macros/latex/contrib/nicematrix/nicematrix-french.tex
2020/06/12 | 110 | graphics/svg/source/examples/svg-preamble.tex
2020/06/12 | 1089911 | macros/xetex/latex/quran/tex/qurantext-en.translation.def
2020/06/12 | 1075242 | macros/latex/contrib/thuthesis/thuthesis.pdf
@@ -193,16 +289,15 @@
2020/06/11 | 80323 | indexing/xindex/lualatex/xindex-unicode.lua
2020/06/11 | 781056 | systems/texlive/tlnet/archive/babel.doc.r55508.tar.xz
2020/06/11 | 7660915 | graphics/pstricks/base.zip
-2020/06/11 | 7237206 | systems/win32/miktex/tm/packages/pstricks.tar.lzma
2020/06/11 | 70771 | fonts/libertinust1math/tex/libertinust1math.sty
2020/06/11 | 6781 | indexing/xindex/scripts/xindex.lua
-2020/06/11 | 667190 | systems/win32/w32tex/ChangeLog
2020/06/11 | 6609 | macros/latex/contrib/ocgx2/ChangeLog
2020/06/11 | 653560 | systems/texlive/tlnet/archive/babel.source.r55508.tar.xz
2020/06/11 | 6461864 | systems/win32/w32tex/ptex-ng-w32.tar.xz
2020/06/11 | 6323532 | systems/win32/w32tex/win64/pdftex-w64.tar.xz
2020/06/11 | 6289 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2020/06/11 | 6262 | indexing/xindex/lualatex/xindex-norsk.lua
+2020/06/11 | 600 | graphics/pgf/contrib/yquant/doc/qasm/test13.qasm
2020/06/11 | 5870302 | install/fonts/libertinust1math.tds.zip
2020/06/11 | 5861038 | fonts/libertinust1math.zip
2020/06/11 | 551546 | indexing/xindex.zip
@@ -222,14 +317,28 @@
2020/06/11 | 3810 | fonts/libertinust1math/README
2020/06/11 | 3798068 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
2020/06/11 | 35147 | support/spix/LICENSE.txt
-2020/06/11 | 34896928 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/06/11 | 34728 | indexing/xindex/lualatex/xindex-lib.lua
+2020/06/11 | 34368 | graphics/pgf/contrib/yquant/tex/yquant-registers.tex
+2020/06/11 | 342 | graphics/pgf/contrib/yquant/doc/qasm/test2.qasm
+2020/06/11 | 316 | graphics/pgf/contrib/yquant/doc/qasm/test5.qasm
+2020/06/11 | 313 | graphics/pgf/contrib/yquant/doc/qasm/test18.qasm
+2020/06/11 | 309 | graphics/pgf/contrib/yquant/doc/qasm/test9.qasm
+2020/06/11 | 308 | graphics/pgf/contrib/yquant/doc/qasm/test17.qasm
+2020/06/11 | 305 | graphics/pgf/contrib/yquant/doc/qasm/test16.qasm
+2020/06/11 | 302 | graphics/pgf/contrib/yquant/doc/qasm/test8.qasm
2020/06/11 | 2915 | indexing/xindex/lualatex/xindex-DIN2.lua
2020/06/11 | 29136 | systems/texlive/tlnet/archive/caption.r55507.tar.xz
+2020/06/11 | 290 | graphics/pgf/contrib/yquant/doc/qasm/test4.qasm
2020/06/11 | 2878 | indexing/xindex/lualatex/xindex-cfg-common.lua
+2020/06/11 | 283 | graphics/pgf/contrib/yquant/doc/qasm/test6.qasm
2020/06/11 | 2831829 | systems/win32/miktex/tm/packages/shtthesis.tar.lzma
+2020/06/11 | 275 | graphics/pgf/contrib/yquant/doc/qasm/test12.qasm
+2020/06/11 | 271 | graphics/pgf/contrib/yquant/doc/qasm/test11.qasm
+2020/06/11 | 268 | graphics/pgf/contrib/yquant/doc/qasm/test7.qasm
+2020/06/11 | 266 | graphics/pgf/contrib/yquant/doc/qasm/test15.qasm
2020/06/11 | 2555 | indexing/xindex/lualatex/xindex-cfg.lua
2020/06/11 | 2482 | support/spix/README.md
+2020/06/11 | 242 | graphics/pgf/contrib/yquant/doc/qasm/test10.qasm
2020/06/11 | 2377 | macros/latex/contrib/moderntimeline/moderntimeline.ins
2020/06/11 | 2323 | indexing/xindex/lualatex/xindex-cfg-uca.lua
2020/06/11 | 23224 | macros/latex/contrib/moderntimeline/moderntimeline.dtx
@@ -237,14 +346,15 @@
2020/06/11 | 22920 | systems/texlive/tlnet/archive/cweb.r55499.tar.xz
2020/06/11 | 21866 | macros/latex/contrib/ocgx2.zip
2020/06/11 | 21827723 | systems/win32/miktex/tm/packages/dps.tar.lzma
+2020/06/11 | 2130952 | systems/win32/w32tex/win64/context-w64.tar.xz
2020/06/11 | 20741788 | systems/win32/w32tex/pdftex-w32.tar.xz
+2020/06/11 | 20428 | graphics/pgf/contrib/yquant/tex/yquant-env.tex
+2020/06/11 | 199 | graphics/pgf/contrib/yquant/doc/qasm/test3.qasm
+2020/06/11 | 199 | graphics/pgf/contrib/yquant/doc/qasm/test1.qasm
2020/06/11 | 193040 | systems/texlive/tlnet/archive/caption.source.r55507.tar.xz
2020/06/11 | 192153 | macros/latex/contrib/moderntimeline.zip
2020/06/11 | 186431 | macros/latex/contrib/moderntimeline/moderntimeline.pdf
2020/06/11 | 1833552 | systems/win32/w32tex/jtex-w32.tar.xz
-2020/06/11 | 18155796 | systems/win32/w32tex/luatex-exp-w32.tar.xz
-2020/06/11 | 18142552 | systems/win32/w32tex/luatex-w32.tar.xz
-2020/06/11 | 18137864 | systems/win32/w32tex/luatex-dev-w32.tar.xz
2020/06/11 | 1811671 | systems/win32/miktex/tm/packages/caption.tar.lzma
2020/06/11 | 167376 | systems/texlive/tlnet/archive/babel.r55508.tar.xz
2020/06/11 | 166888 | systems/texlive/tlnet/archive/texlive-docindex.doc.r55497.tar.xz
@@ -253,7 +363,7 @@
2020/06/11 | 1561 | indexing/xindex/CHANGELOG
2020/06/11 | 152335 | systems/win32/miktex/tm/packages/hvarabic.tar.lzma
2020/06/11 | 1521639 | support/spix/spix.pdf
-2020/06/11 | 140046520 | systems/win32/w32tex/context.tar.xz
+2020/06/11 | 140045988 | systems/win32/w32tex/context.tar.xz
2020/06/11 | 117 | support/spix/CHANGELOG.md
2020/06/11 | 10941 | indexing/xindex/lualatex/xindex-HAdW-eKO.lua
2020/06/11 | 10488188 | systems/win32/w32tex/ptex-w32.tar.xz
@@ -325,7 +435,6 @@
2020/06/10 | 29088 | macros/latex/contrib/caption/ltcaption.dtx
2020/06/10 | 2810120 | systems/texlive/tlnet/archive/shtthesis.doc.r55494.tar.xz
2020/06/10 | 2786 | support/latexindent/documentation/subsec-partnering-poly-switches.tex
-2020/06/10 | 274396556 | systems/win32/w32tex/pstricks.tar.xz
2020/06/10 | 2706891 | install/macros/latex/required/babel-base.tds.zip
2020/06/10 | 264773 | macros/latex/contrib/caption/caption-rus.tex
2020/06/10 | 2538 | support/latexindent/documentation/sec-conclusions-know-limitations.tex
@@ -420,12 +529,10 @@
2020/06/09 | 60084 | systems/win32/miktex/tm/packages/beamerappendixnote.tar.lzma
2020/06/09 | 58599 | systems/texlive/tlnet/tlpkg/translations/messages.pot
2020/06/09 | 579303 | systems/win32/miktex/tm/packages/cellprops.tar.lzma
-2020/06/09 | 565961 | systems/win32/miktex/tm/packages/commutative-diagrams.tar.lzma
2020/06/09 | 559276 | systems/texlive/tlnet/archive/cellprops.doc.r55483.tar.xz
2020/06/09 | 5370 | macros/latex/contrib/dps/examples/advanced/usebtnappr/sideshow/first_date.tex
2020/06/09 | 4997 | macros/latex/contrib/dps/examples/advanced/uselayers/sideshow/first_date.tex
2020/06/09 | 49859337 | macros/latex/contrib/dps.zip
-2020/06/09 | 498444 | systems/win32/miktex/tm/packages/xindex.tar.lzma
2020/06/09 | 4861 | macros/latex/contrib/dps/examples/advanced/uselayers/sideshow/first_date_g.tex
2020/06/09 | 4653000 | systems/win32/w32tex/dvipdfm-w32.tar.xz
2020/06/09 | 4649 | graphics/pstricks/base/README
@@ -434,7 +541,6 @@
2020/06/09 | 40111 | macros/latex/contrib/shtthesis/shtthesis-user-guide.tex
2020/06/09 | 399072360 | systems/win32/w32tex/ltxpkgdocs.tar.xz
2020/06/09 | 383669 | systems/win32/miktex/tm/packages/gbt7714.tar.lzma
-2020/06/09 | 37760 | systems/texlive/tlnet/archive/thuthesis.source.r55485.tar.xz
2020/06/09 | 35711 | graphics/pstricks/base/dvips/pstricks.pro
2020/06/09 | 349793 | systems/win32/miktex/tm/packages/crop.tar.lzma
2020/06/09 | 34927 | macros/latex/contrib/shtthesis/shtthesis.cls
@@ -454,12 +560,9 @@
2020/06/09 | 249 | graphics/pstricks/base/latex/pst-key.sty
2020/06/09 | 242376 | systems/win32/miktex/tm/packages/courierten.tar.lzma
2020/06/09 | 239141 | systems/win32/miktex/tm/packages/luamesh.tar.lzma
-2020/06/09 | 2391374 | systems/win32/miktex/tm/packages/thuthesis.tar.lzma
2020/06/09 | 23492 | graphics/pstricks/base/generic/pst-fp.tex
-2020/06/09 | 2284684 | systems/texlive/tlnet/archive/thuthesis.doc.r55485.tar.xz
2020/06/09 | 227153 | systems/win32/miktex/tm/packages/ellipsis.tar.lzma
2020/06/09 | 22627 | systems/win32/miktex/tm/packages/miktex-misc.tar.lzma
-2020/06/09 | 22004 | systems/texlive/tlnet/archive/thuthesis.r55485.tar.xz
2020/06/09 | 20406 | systems/win32/miktex/tm/packages/pdfcrop.tar.lzma
2020/06/09 | 1854624 | systems/win32/miktex/tm/packages/xecjk.tar.lzma
2020/06/09 | 18456 | systems/texlive/tlnet/archive/nicematrix.r55484.tar.xz
@@ -581,708 +684,80 @@
2020/06/08 | 1060464 | systems/texlive/tlnet/archive/baskervillef.r55475.tar.xz
2020/06/07 | 9924 | macros/latex/contrib/beamer-contrib/beamerappendixnote/example-basic.pdf
2020/06/07 | 9407 | graphics/pstricks/contrib/pst-eucl/Changes
-2020/06/07 | 896 | fonts/baskervillef/vf/BaskervilleF-Regular-tosf-ts1.vf
-2020/06/07 | 892 | fonts/baskervillef/vf/BaskervilleF-Regular-tlf-ts1.vf
-2020/06/07 | 892 | fonts/baskervillef/vf/BaskervilleF-Regular-osf-ts1.vf
-2020/06/07 | 892 | fonts/baskervillef/vf/BaskervilleF-Regular-lf-ts1.vf
2020/06/07 | 88856 | systems/texlive/tlnet/archive/xecjk.source.r55443.tar.xz
-2020/06/07 | 8872 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-sc-ot1.tfm
-2020/06/07 | 873835 | macros/latex/contrib/nicematrix/nicematrix.pdf
2020/06/07 | 8714048 | systems/texlive/tlnet/archive/reledmac.doc.r55442.tar.xz
-2020/06/07 | 86552 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tlf-t1.tfm
2020/06/07 | 86420 | systems/texlive/tlnet/archive/ctex.source.r55440.tar.xz
2020/06/07 | 854 | macros/latex/contrib/beamer-contrib/beamerappendixnote/README.md
-2020/06/07 | 84700 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-osf-t1.tfm
-2020/06/07 | 84688 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-lf-t1.tfm
-2020/06/07 | 84660 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tosf-t1.tfm
-2020/06/07 | 83936 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-t1.tfm
-2020/06/07 | 8288 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-sc-ot1.tfm
-2020/06/07 | 8280 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-sc-ot1.tfm
-2020/06/07 | 8260 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-sc-ot1.tfm
-2020/06/07 | 82092 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-t1.tfm
-2020/06/07 | 82072 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-t1.tfm
-2020/06/07 | 82060 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-t1.tfm
2020/06/07 | 812 | systems/texlive/tlnet/archive/collection-langenglish.r55453.tar.xz
-2020/06/07 | 804 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-tosf-sc-ot1.vf
-2020/06/07 | 804 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-tlf-sc-ot1.vf
-2020/06/07 | 804 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-osf-sc-ot1.vf
-2020/06/07 | 804 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-lf-sc-ot1.vf
-2020/06/07 | 800 | fonts/baskervillef/vf/BaskervilleF-Regular-tosf-sc-ot1.vf
-2020/06/07 | 800 | fonts/baskervillef/vf/BaskervilleF-Regular-tlf-sc-ot1.vf
-2020/06/07 | 800 | fonts/baskervillef/vf/BaskervilleF-Regular-osf-sc-ot1.vf
-2020/06/07 | 800 | fonts/baskervillef/vf/BaskervilleF-Regular-lf-sc-ot1.vf
-2020/06/07 | 800 | fonts/baskervillef/vf/BaskervilleF-Italic-tosf-sc-ot1.vf
-2020/06/07 | 800 | fonts/baskervillef/vf/BaskervilleF-Italic-tlf-sc-ot1.vf
-2020/06/07 | 800 | fonts/baskervillef/vf/BaskervilleF-Italic-osf-sc-ot1.vf
-2020/06/07 | 800 | fonts/baskervillef/vf/BaskervilleF-Italic-lf-sc-ot1.vf
-2020/06/07 | 800 | fonts/baskervillef/vf/BaskervilleF-Bold-tosf-sc-ot1.vf
-2020/06/07 | 796 | fonts/baskervillef/vf/BaskervilleF-Bold-tlf-sc-ot1.vf
-2020/06/07 | 796 | fonts/baskervillef/vf/BaskervilleF-Bold-osf-sc-ot1.vf
-2020/06/07 | 796 | fonts/baskervillef/vf/BaskervilleF-Bold-lf-sc-ot1.vf
-2020/06/07 | 77200 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-th-t1.tfm
-2020/06/07 | 77200 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-th-t1.tfm
-2020/06/07 | 77200 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-th-t1.tfm
-2020/06/07 | 77200 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-th-t1.tfm
2020/06/07 | 74 | macros/luatex/latex/luamesh/doc/mesh.txt
-2020/06/07 | 7464 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tlf-sc-ot1.tfm
-2020/06/07 | 724 | fonts/baskervillef/vf/BaskervilleF-Bold-tosf-ts1.vf
-2020/06/07 | 720 | fonts/baskervillef/vf/BaskervilleF-Bold-tlf-ts1.vf
-2020/06/07 | 720 | fonts/baskervillef/vf/BaskervilleF-Bold-osf-ts1.vf
-2020/06/07 | 720 | fonts/baskervillef/vf/BaskervilleF-Bold-lf-ts1.vf
-2020/06/07 | 716 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-tosf-ts1.vf
-2020/06/07 | 716 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-tlf-ts1.vf
-2020/06/07 | 716 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-osf-ts1.vf
-2020/06/07 | 712 | fonts/baskervillef/vf/BaskervilleF-Italic-tosf-ts1.vf
-2020/06/07 | 712 | fonts/baskervillef/vf/BaskervilleF-Italic-tlf-ts1.vf
-2020/06/07 | 712 | fonts/baskervillef/vf/BaskervilleF-Italic-osf-ts1.vf
-2020/06/07 | 712 | fonts/baskervillef/vf/BaskervilleF-Italic-lf-ts1.vf
-2020/06/07 | 712 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-lf-ts1.vf
2020/06/07 | 70662 | graphics/pstricks/base/generic/pstricks97.tex
-2020/06/07 | 6872 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-lf-sc-ot1.tfm
-2020/06/07 | 6868 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-osf-sc-ot1.tfm
-2020/06/07 | 6832 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tosf-sc-ot1.tfm
2020/06/07 | 65958 | macros/latex/contrib/beamer-contrib/beamerappendixnote.zip
-2020/06/07 | 6540 | fonts/baskervillef/tfm/BaskervilleF-Bold-tlf-sc-ot1.tfm
2020/06/07 | 6497 | macros/luatex/latex/luamesh/doc/maillagev4.msh
-2020/06/07 | 64680 | fonts/baskervillef/tfm/BaskervilleF-Regular-lf-t1.tfm
-2020/06/07 | 64320 | fonts/baskervillef/tfm/BaskervilleF-Bold-tlf-t1.tfm
-2020/06/07 | 64232 | fonts/baskervillef/tfm/BaskervilleF-Regular-tlf-t1.tfm
-2020/06/07 | 64016 | fonts/baskervillef/tfm/BaskervilleF-Regular-osf-t1.tfm
-2020/06/07 | 63984 | fonts/baskervillef/tfm/BaskervilleF-Regular-tosf-t1.tfm
-2020/06/07 | 6332 | fonts/baskervillef/tfm/BaskervilleF-Regular-lf-sc-ot1.tfm
-2020/06/07 | 62920 | fonts/baskervillef/tfm/BaskervilleF-Bold-lf-t1.tfm
-2020/06/07 | 62912 | fonts/baskervillef/tfm/BaskervilleF-Bold-osf-t1.tfm
-2020/06/07 | 62892 | fonts/baskervillef/tfm/BaskervilleF-Bold-tosf-t1.tfm
-2020/06/07 | 62612 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tlf-ly1.tfm
2020/06/07 | 616 | systems/texlive/tlnet/archive/collection-langgerman.r55451.tar.xz
-2020/06/07 | 61048 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-ly1.tfm
-2020/06/07 | 60872 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-osf-ly1.tfm
-2020/06/07 | 60872 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-lf-ly1.tfm
-2020/06/07 | 60840 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tosf-ly1.tfm
-2020/06/07 | 6012 | fonts/baskervillef/tfm/BaskervilleF-Bold-lf-sc-ot1.tfm
-2020/06/07 | 6008 | fonts/baskervillef/tfm/BaskervilleF-Bold-osf-sc-ot1.tfm
-2020/06/07 | 5992 | fonts/baskervillef/tfm/BaskervilleF-Regular-tlf-sc-ot1.tfm
-2020/06/07 | 5984 | fonts/baskervillef/tfm/BaskervilleF-Bold-tosf-sc-ot1.tfm
-2020/06/07 | 5940 | fonts/baskervillef/tfm/BaskervilleF-Regular-osf-sc-ot1.tfm
-2020/06/07 | 59320 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-ly1.tfm
-2020/06/07 | 59300 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-ly1.tfm
-2020/06/07 | 59292 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-ly1.tfm
-2020/06/07 | 5916 | fonts/baskervillef/tfm/BaskervilleF-Regular-tosf-sc-ot1.tfm
2020/06/07 | 57 | macros/luatex/latex/luamesh/doc/meshgarde.txt
2020/06/07 | 572793 | macros/latex/contrib/cellprops.zip
2020/06/07 | 564606 | macros/latex/contrib/cellprops/cellprops.pdf
2020/06/07 | 56311 | macros/latex/contrib/beamer-contrib/beamerappendixnote/beamerappendixnote.pdf
-2020/06/07 | 550024 | systems/texlive/tlnet/archive/commutative-diagrams.doc.r55438.tar.xz
-2020/06/07 | 54576 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-th-ly1.tfm
-2020/06/07 | 54576 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-th-ly1.tfm
-2020/06/07 | 54576 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-th-ly1.tfm
-2020/06/07 | 54576 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-th-ly1.tfm
2020/06/07 | 5444 | macros/latex/contrib/beamer-contrib/beamerappendixnote/beamerappendixnote.dtx
2020/06/07 | 53844 | systems/texlive/tlnet/archive/reledmac.r55442.tar.xz
2020/06/07 | 52870 | dviware/dviljk/Makefile.in
2020/06/07 | 51232 | macros/latex/contrib/cellprops/cellprops.dtx
2020/06/07 | 475 | macros/latex/contrib/cellprops/cellprops.ins
-2020/06/07 | 47400 | fonts/baskervillef/tfm/BaskervilleF-Bold-tlf-ly1.tfm
2020/06/07 | 4734 | graphics/pstricks/base/dvips/pst-dots97.pro
2020/06/07 | 4724 | systems/texlive/tlnet/archive/beamerswitch.r55441.tar.xz
-2020/06/07 | 46752 | fonts/baskervillef/tfm/BaskervilleF-Regular-lf-ly1.tfm
2020/06/07 | 466224 | graphics/pstricks/contrib/pst-eucl/tex/pst-eucl.tex
-2020/06/07 | 46432 | fonts/baskervillef/tfm/BaskervilleF-Regular-tlf-ly1.tfm
-2020/06/07 | 46152 | fonts/baskervillef/tfm/BaskervilleF-Bold-lf-ly1.tfm
-2020/06/07 | 46148 | fonts/baskervillef/tfm/BaskervilleF-Bold-osf-ly1.tfm
-2020/06/07 | 46140 | fonts/baskervillef/tfm/BaskervilleF-Regular-osf-ly1.tfm
-2020/06/07 | 46132 | fonts/baskervillef/tfm/BaskervilleF-Bold-tosf-ly1.tfm
-2020/06/07 | 46108 | fonts/baskervillef/tfm/BaskervilleF-Regular-tosf-ly1.tfm
2020/06/07 | 45754 | macros/luatex/latex/luamesh/scripts/luamesh-tex.lua
2020/06/07 | 4225 | macros/luatex/latex/luamesh/doc/luamesh-title.pdf
2020/06/07 | 4154 | macros/latex/contrib/dps/examples/basic/dps_d1.tex
2020/06/07 | 41145 | macros/luatex/latex/luamesh/doc/luamesh-doc.tex
2020/06/07 | 4002 | fonts/baskervillef/README
-2020/06/07 | 388084 | macros/latex/contrib/nicematrix/nicematrix.dtx
2020/06/07 | 382796 | macros/luatex/latex/luamesh/doc/animation-crop.pdf
2020/06/07 | 37814 | macros/latex/contrib/shtthesis/shtthesis-gbt7714-plain.bst
2020/06/07 | 3776 | macros/luatex/latex/luamesh/doc/maillage.msh
2020/06/07 | 36552 | macros/luatex/latex/luamesh/tex/luamesh.sty
-2020/06/07 | 36004 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-sc-t1.tfm
-2020/06/07 | 3571 | fonts/baskervillef/enc/zba_e3xw3x.enc
-2020/06/07 | 355481 | macros/latex/contrib/nicematrix/nicematrix-french.pdf
-2020/06/07 | 3549 | fonts/baskervillef/enc/zba_523v7l.enc
-2020/06/07 | 3539 | fonts/baskervillef/enc/zba_rqjco3.enc
-2020/06/07 | 3533 | fonts/baskervillef/enc/zba_jjbdnj.enc
2020/06/07 | 35113 | macros/latex/contrib/cellprops/LICENSE
-2020/06/07 | 3500 | fonts/baskervillef/enc/zba_y7xbvf.enc
-2020/06/07 | 3481 | fonts/baskervillef/enc/zba_qiwnw4.enc
-2020/06/07 | 3476 | fonts/baskervillef/enc/zba_fcs4fj.enc
-2020/06/07 | 3475 | fonts/baskervillef/enc/zba_wn2rfu.enc
-2020/06/07 | 3451 | fonts/baskervillef/enc/zba_4hfcgk.enc
-2020/06/07 | 3450 | fonts/baskervillef/enc/zba_gliky3.enc
-2020/06/07 | 3446 | fonts/baskervillef/enc/zba_7cypa5.enc
-2020/06/07 | 3445 | fonts/baskervillef/enc/zba_w4i4io.enc
-2020/06/07 | 3444 | fonts/baskervillef/enc/zba_a3asoq.enc
-2020/06/07 | 3443 | fonts/baskervillef/enc/zba_uutbpy.enc
-2020/06/07 | 3442 | fonts/baskervillef/enc/zba_x7qzb2.enc
-2020/06/07 | 3439 | fonts/baskervillef/enc/zba_uf7ozb.enc
2020/06/07 | 3436496 | systems/texlive/tlnet/archive/pst-func.doc.r55439.tar.xz
-2020/06/07 | 34292 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-sc-t1.tfm
-2020/06/07 | 34284 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-sc-t1.tfm
-2020/06/07 | 34264 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-sc-t1.tfm
-2020/06/07 | 3420 | fonts/baskervillef/enc/zba_typa7y.enc
-2020/06/07 | 3415 | fonts/baskervillef/enc/zba_734fzj.enc
-2020/06/07 | 3412 | fonts/baskervillef/enc/zba_ueebfa.enc
-2020/06/07 | 3411 | fonts/baskervillef/enc/zba_zvejcx.enc
-2020/06/07 | 3404 | fonts/baskervillef/enc/zba_th2k46.enc
-2020/06/07 | 3403 | fonts/baskervillef/enc/zba_m7qm6t.enc
-2020/06/07 | 3397 | fonts/baskervillef/enc/zba_twn2qn.enc
2020/06/07 | 3393 | macros/luatex/latex/luamesh/doc/biblio.bib
-2020/06/07 | 3393 | fonts/baskervillef/enc/zba_iy3fha.enc
-2020/06/07 | 3379 | fonts/baskervillef/enc/zba_vydigt.enc
-2020/06/07 | 3377 | fonts/baskervillef/enc/zba_art6xf.enc
-2020/06/07 | 3374 | fonts/baskervillef/enc/zba_w54rd4.enc
-2020/06/07 | 3371 | fonts/baskervillef/enc/zba_wbekxi.enc
-2020/06/07 | 3370 | fonts/baskervillef/enc/zba_rtk6yp.enc
-2020/06/07 | 3370 | fonts/baskervillef/enc/zba_7qcgfh.enc
-2020/06/07 | 3368 | fonts/baskervillef/enc/zba_uqoays.enc
-2020/06/07 | 3355 | fonts/baskervillef/enc/zba_aqsbza.enc
-2020/06/07 | 3354 | fonts/baskervillef/enc/zba_gmq6ah.enc
-2020/06/07 | 3346 | fonts/baskervillef/enc/zba_73mseb.enc
-2020/06/07 | 3339 | fonts/baskervillef/enc/zba_wxljbs.enc
-2020/06/07 | 3337 | fonts/baskervillef/enc/zba_ymdv6d.enc
-2020/06/07 | 3330 | fonts/baskervillef/enc/zba_5oqvu4.enc
-2020/06/07 | 3325 | fonts/baskervillef/enc/zba_lfjjhs.enc
-2020/06/07 | 3322 | fonts/baskervillef/enc/zba_b5bk2y.enc
-2020/06/07 | 3321 | fonts/baskervillef/enc/zba_pxbj3a.enc
2020/06/07 | 3248 | macros/luatex/latex/luamesh/scripts/luamesh-polygon.lua
-2020/06/07 | 3216 | fonts/baskervillef/enc/zba_ugitcp.enc
-2020/06/07 | 3209 | fonts/baskervillef/enc/zba_3kjwvw.enc
-2020/06/07 | 3208 | fonts/baskervillef/enc/zba_5cwn7d.enc
-2020/06/07 | 3185 | fonts/baskervillef/enc/zba_5k66dt.enc
-2020/06/07 | 3178 | fonts/baskervillef/enc/zba_hykkzd.enc
-2020/06/07 | 3177 | fonts/baskervillef/enc/zba_e5ewsu.enc
-2020/06/07 | 3156 | fonts/baskervillef/enc/zba_3a6nlu.enc
-2020/06/07 | 3150 | fonts/baskervillef/enc/zba_wyngyv.enc
-2020/06/07 | 3144 | fonts/baskervillef/enc/zba_ihgygy.enc
-2020/06/07 | 3137 | fonts/baskervillef/enc/zba_2vxxim.enc
-2020/06/07 | 3136 | fonts/baskervillef/enc/zba_6vkpq5.enc
-2020/06/07 | 3125 | fonts/baskervillef/enc/zba_to6jjw.enc
-2020/06/07 | 3119 | fonts/baskervillef/enc/zba_2hmbf5.enc
-2020/06/07 | 3109 | fonts/baskervillef/enc/zba_23ismr.enc
-2020/06/07 | 3095 | fonts/baskervillef/enc/zba_zpc5ms.enc
-2020/06/07 | 3088 | fonts/baskervillef/enc/zba_t3ys54.enc
-2020/06/07 | 3087 | fonts/baskervillef/enc/zba_532cq4.enc
-2020/06/07 | 3082 | fonts/baskervillef/enc/zba_skajg2.enc
-2020/06/07 | 3078 | fonts/baskervillef/enc/zba_etzx2k.enc
-2020/06/07 | 3078 | fonts/baskervillef/enc/zba_cjo72v.enc
-2020/06/07 | 3048 | fonts/baskervillef/enc/zba_zygn7r.enc
-2020/06/07 | 3048 | fonts/baskervillef/enc/zba_336dgv.enc
-2020/06/07 | 3037 | fonts/baskervillef/enc/zba_lfhy4n.enc
-2020/06/07 | 3035 | fonts/baskervillef/enc/zba_lkeymy.enc
-2020/06/07 | 3029 | fonts/baskervillef/enc/zba_bnjopg.enc
-2020/06/07 | 3021 | fonts/baskervillef/enc/zba_hwnpjr.enc
-2020/06/07 | 3017 | fonts/baskervillef/enc/zba_qvggep.enc
-2020/06/07 | 3009 | fonts/baskervillef/enc/zba_arki3d.enc
-2020/06/07 | 3001 | fonts/baskervillef/enc/zba_srcuqk.enc
-2020/06/07 | 29936 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-sc-ly1.tfm
-2020/06/07 | 2990 | fonts/baskervillef/enc/zba_xpcegd.enc
-2020/06/07 | 2988 | fonts/baskervillef/enc/zba_uf5aa7.enc
-2020/06/07 | 2986 | fonts/baskervillef/enc/zba_2j2bbt.enc
2020/06/07 | 2981 | macros/luatex/latex/luamesh/doc/luameshdoc.cls
-2020/06/07 | 2978 | fonts/baskervillef/enc/zba_y3x75k.enc
-2020/06/07 | 2949 | fonts/baskervillef/enc/zba_wybx5h.enc
-2020/06/07 | 2945 | fonts/baskervillef/enc/zba_a73a6q.enc
-2020/06/07 | 2937 | fonts/baskervillef/enc/zba_ogu2yp.enc
-2020/06/07 | 2929 | fonts/baskervillef/enc/zba_kodzea.enc
-2020/06/07 | 2925 | fonts/baskervillef/enc/zba_ve4agh.enc
-2020/06/07 | 2900 | fonts/baskervillef/enc/zba_zkzy6d.enc
-2020/06/07 | 2896 | fonts/baskervillef/enc/zba_ck2hfy.enc
-2020/06/07 | 2888 | fonts/baskervillef/enc/zba_mby7uf.enc
-2020/06/07 | 28368 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-sc-ly1.tfm
-2020/06/07 | 28360 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-sc-ly1.tfm
-2020/06/07 | 28340 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-sc-ly1.tfm
-2020/06/07 | 27864 | fonts/baskervillef/tfm/BaskervilleF-Regular-lf-sc-t1.tfm
-2020/06/07 | 27524 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tlf-sc-t1.tfm
2020/06/07 | 2740859 | install/fonts/baskervillef.tds.zip
-2020/06/07 | 27148 | fonts/baskervillef/tfm/BaskervilleF-Bold-tlf-sc-t1.tfm
+2020/06/07 | 27045 | graphics/pgf/contrib/yquant/tex/yquant-lang.tex
2020/06/07 | 2697817 | fonts/baskervillef.zip
-2020/06/07 | 26944 | fonts/baskervillef/tfm/BaskervilleF-Regular-tlf-sc-t1.tfm
-2020/06/07 | 26868 | fonts/baskervillef/tfm/BaskervilleF-Regular-osf-sc-t1.tfm
-2020/06/07 | 26844 | fonts/baskervillef/tfm/BaskervilleF-Regular-tosf-sc-t1.tfm
-2020/06/07 | 25848 | fonts/baskervillef/tfm/BaskervilleF-Bold-lf-sc-t1.tfm
-2020/06/07 | 25840 | fonts/baskervillef/tfm/BaskervilleF-Bold-osf-sc-t1.tfm
-2020/06/07 | 25820 | fonts/baskervillef/tfm/BaskervilleF-Bold-tosf-sc-t1.tfm
-2020/06/07 | 25796 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-osf-sc-t1.tfm
-2020/06/07 | 25792 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-lf-sc-t1.tfm
-2020/06/07 | 25760 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tosf-sc-t1.tfm
-2020/06/07 | 2570 | fonts/baskervillef/enc/zba_cvjygd.enc
-2020/06/07 | 2520 | fonts/baskervillef/enc/zba_oxcsv2.enc
2020/06/07 | 251532 | systems/texlive/tlnet/archive/beamerswitch.doc.r55441.tar.xz
2020/06/07 | 248883 | macros/luatex/latex/luamesh.zip
-2020/06/07 | 2447 | fonts/baskervillef/enc/zba_lh5uiy.enc
-2020/06/07 | 24440 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tlf-sc-ly1.tfm
2020/06/07 | 241236 | systems/texlive/tlnet/archive/courierten.r55436.tar.xz
2020/06/07 | 239 | macros/luatex/latex/luamesh/doc/maillage.geo
2020/06/07 | 238398 | graphics/pstricks/contrib/pst-eucl/doc/pst-eucl-doc.tex
-2020/06/07 | 23396 | fonts/baskervillef/tfm/BaskervilleF-Regular-lf-sc-ly1.tfm
-2020/06/07 | 22856 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-lf-sc-ly1.tfm
-2020/06/07 | 22848 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-osf-sc-ly1.tfm
-2020/06/07 | 22820 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tosf-sc-ly1.tfm
-2020/06/07 | 22608 | fonts/baskervillef/tfm/BaskervilleF-Regular-tlf-sc-ly1.tfm
-2020/06/07 | 22452 | fonts/baskervillef/tfm/BaskervilleF-Regular-osf-sc-ly1.tfm
-2020/06/07 | 22428 | fonts/baskervillef/tfm/BaskervilleF-Regular-tosf-sc-ly1.tfm
2020/06/07 | 2217380 | systems/texlive/tlnet/archive/luajittex.win32.r55431.tar.xz
-2020/06/07 | 22067 | fonts/baskervillef/map/BaskervilleF.map
2020/06/07 | 219 | macros/luatex/latex/luamesh/doc/fond.mp
2020/06/07 | 219920 | systems/texlive/tlnet/archive/xecjk.r55443.tar.xz
-2020/06/07 | 2160 | fonts/baskervillef/tfm/BaskervilleF-Italic-sup-ly1.tfm
-2020/06/07 | 2160 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-sup-ly1.tfm
-2020/06/07 | 2156 | fonts/baskervillef/tfm/BaskervilleF-Italic-sup-ly1--base.tfm
-2020/06/07 | 2156 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-sup-ly1--base.tfm
-2020/06/07 | 213 | fonts/baskervillef/tex/baskervillef.fontspec
-2020/06/07 | 2136 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-sup-t1.tfm
-2020/06/07 | 2132 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-sup-t1--base.tfm
-2020/06/07 | 21268 | fonts/baskervillef/tfm/BaskervilleF-Bold-tlf-sc-ly1.tfm
-2020/06/07 | 2124 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-osf-ly1--base.tfm
-2020/06/07 | 2124 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-lf-ly1--base.tfm
-2020/06/07 | 2116 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-ly1--base.tfm
-2020/06/07 | 2104 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-sc-ly1--base.tfm
-2020/06/07 | 2104 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-ly1--base.tfm
-2020/06/07 | 2100 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tlf-ly1--base.tfm
-2020/06/07 | 2100 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-lf-sc-ly1--base.tfm
-2020/06/07 | 2096 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-sc-ly1--base.tfm
-2020/06/07 | 2092 | fonts/baskervillef/tfm/BaskervilleF-Italic-sup-t1.tfm
-2020/06/07 | 2092 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tosf-ly1--base.tfm
-2020/06/07 | 2092 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-osf-sc-ly1--base.tfm
-2020/06/07 | 2088 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-ly1--base.tfm
-2020/06/07 | 2088 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-ly1--base.tfm
-2020/06/07 | 2084 | fonts/baskervillef/tfm/BaskervilleF-Italic-sup-t1--base.tfm
-2020/06/07 | 2080 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-th-ly1--base.tfm
-2020/06/07 | 2080 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-th-ly1--base.tfm
-2020/06/07 | 2080 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-th-ly1--base.tfm
-2020/06/07 | 2080 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-th-ly1--base.tfm
-2020/06/07 | 2076 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-sc-ly1--base.tfm
-2020/06/07 | 2076 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-sc-ly1--base.tfm
-2020/06/07 | 2072 | fonts/baskervillef/tfm/BaskervilleF-Italic-dnom-ly1.tfm
+2020/06/07 | 21485 | graphics/pgf/contrib/yquant/tex/yquant-tools.tex
2020/06/07 | 206 | macros/latex/contrib/beamer-contrib/beamerappendixnote/example-basic.tex
-2020/06/07 | 2068 | fonts/baskervillef/tfm/BaskervilleF-Italic-dnom-ly1--base.tfm
-2020/06/07 | 2068 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tlf-sc-ly1--base.tfm
-2020/06/07 | 2064 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tosf-sc-ly1--base.tfm
2020/06/07 | 205720 | systems/texlive/tlnet/archive/reledmac.source.r55442.tar.xz
-2020/06/07 | 2044 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-osf-t1--base.tfm
-2020/06/07 | 2032 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-lf-t1--base.tfm
-2020/06/07 | 2016 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tlf-t1--base.tfm
-2020/06/07 | 20144 | fonts/baskervillef/tfm/BaskervilleF-Bold-lf-sc-ly1.tfm
-2020/06/07 | 20140 | fonts/baskervillef/tfm/BaskervilleF-Bold-osf-sc-ly1.tfm
-2020/06/07 | 2012 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-t1--base.tfm
-2020/06/07 | 20124 | fonts/baskervillef/tfm/BaskervilleF-Bold-tosf-sc-ly1.tfm
-2020/06/07 | 2004 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tosf-t1--base.tfm
-2020/06/07 | 2000 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-t1--base.tfm
2020/06/07 | 19912 | systems/texlive/tlnet/archive/beamerswitch.source.r55441.tar.xz
-2020/06/07 | 1988 | fonts/baskervillef/tfm/BaskervilleF-Italic-dnom-t1.tfm
-2020/06/07 | 1984 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-t1--base.tfm
-2020/06/07 | 19848 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tlf-ot1.tfm
-2020/06/07 | 1980 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-t1--base.tfm
-2020/06/07 | 1980 | fonts/baskervillef/tfm/BaskervilleF-Italic-dnom-t1--base.tfm
-2020/06/07 | 1976 | fonts/baskervillef/tfm/BaskervilleF-Bold-sup-ly1.tfm
-2020/06/07 | 1972 | fonts/baskervillef/tfm/BaskervilleF-Bold-sup-ly1--base.tfm
-2020/06/07 | 1964 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-osf-sc-t1--base.tfm
-2020/06/07 | 1960 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-sc-t1--base.tfm
-2020/06/07 | 1960 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-lf-sc-t1--base.tfm
-2020/06/07 | 1956 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-th-t1--base.tfm
-2020/06/07 | 1956 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-th-t1--base.tfm
-2020/06/07 | 1956 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-th-t1--base.tfm
-2020/06/07 | 1956 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-th-t1--base.tfm
-2020/06/07 | 1952 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-sc-t1--base.tfm
-2020/06/07 | 1948 | fonts/baskervillef/tfm/BaskervilleF-Regular-sup-ly1.tfm
-2020/06/07 | 19484 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-ot1.tfm
-2020/06/07 | 1944 | fonts/baskervillef/tfm/BaskervilleF-Regular-sup-ly1--base.tfm
-2020/06/07 | 1944 | fonts/baskervillef/tfm/BaskervilleF-Bold-sup-t1.tfm
-2020/06/07 | 1936 | fonts/baskervillef/tfm/BaskervilleF-Bold-sup-t1--base.tfm
-2020/06/07 | 1932 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-sc-t1--base.tfm
-2020/06/07 | 1932 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-sc-t1--base.tfm
-2020/06/07 | 1932 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tlf-sc-t1--base.tfm
-2020/06/07 | 1928 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tosf-sc-t1--base.tfm
-2020/06/07 | 19140 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-osf-ot1.tfm
-2020/06/07 | 19140 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-lf-ot1.tfm
-2020/06/07 | 1912 | fonts/baskervillef/tfm/BaskervilleF-Regular-sup-t1.tfm
-2020/06/07 | 19108 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tosf-ot1.tfm
-2020/06/07 | 1908 | fonts/baskervillef/tfm/BaskervilleF-Regular-osf-sc-ly1--base.tfm
-2020/06/07 | 1904 | fonts/baskervillef/tfm/BaskervilleF-Regular-sup-t1--base.tfm
-2020/06/07 | 1904 | fonts/baskervillef/tfm/BaskervilleF-Regular-lf-sc-ly1--base.tfm
-2020/06/07 | 1904 | fonts/baskervillef/tfm/BaskervilleF-Bold-lf-ly1--base.tfm
-2020/06/07 | 1900 | fonts/baskervillef/tfm/BaskervilleF-Regular-osf-ly1--base.tfm
-2020/06/07 | 1900 | fonts/baskervillef/tfm/BaskervilleF-Regular-lf-ly1--base.tfm
-2020/06/07 | 1900 | fonts/baskervillef/tfm/BaskervilleF-Bold-osf-ly1--base.tfm
-2020/06/07 | 1892 | fonts/baskervillef/tfm/BaskervilleF-Bold-lf-sc-ly1--base.tfm
-2020/06/07 | 1888 | fonts/baskervillef/tfm/BaskervilleF-Bold-osf-sc-ly1--base.tfm
-2020/06/07 | 1884 | fonts/baskervillef/tfm/BaskervilleF-Regular-tosf-sc-ly1--base.tfm
-2020/06/07 | 1884 | fonts/baskervillef/tfm/BaskervilleF-Regular-tlf-sc-ly1--base.tfm
-2020/06/07 | 1884 | fonts/baskervillef/tfm/BaskervilleF-Bold-tosf-ly1--base.tfm
-2020/06/07 | 1884 | fonts/baskervillef/tfm/BaskervilleF-Bold-tlf-ly1--base.tfm
-2020/06/07 | 18780 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-ot1.tfm
-2020/06/07 | 1876 | fonts/baskervillef/tfm/BaskervilleF-Regular-tosf-ly1--base.tfm
-2020/06/07 | 1876 | fonts/baskervillef/tfm/BaskervilleF-Regular-tlf-ly1--base.tfm
-2020/06/07 | 18764 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-ot1.tfm
2020/06/07 | 18760 | systems/texlive/tlnet/archive/pst-func.r55439.tar.xz
-2020/06/07 | 18756 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-ot1.tfm
-2020/06/07 | 1872 | fonts/baskervillef/tfm/BaskervilleF-Bold-tosf-sc-ly1--base.tfm
-2020/06/07 | 1872 | fonts/baskervillef/tfm/BaskervilleF-Bold-tlf-sc-ly1--base.tfm
-2020/06/07 | 1864 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-lf-sc-ot1--base.tfm
2020/06/07 | 1863 | macros/luatex/latex/luamesh/doc/luamesh-doc.listing
-2020/06/07 | 1860 | fonts/baskervillef/tfm/BaskervilleF-Regular-dnom-ly1.tfm
-2020/06/07 | 1860 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-osf-sc-ot1--base.tfm
-2020/06/07 | 1856 | fonts/baskervillef/tfm/BaskervilleF-Regular-dnom-ly1--base.tfm
-2020/06/07 | 1832 | fonts/baskervillef/tfm/BaskervilleF-Bold-lf-t1--base.tfm
-2020/06/07 | 1832 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tlf-sc-ot1--base.tfm
-2020/06/07 | 1828 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-sc-ot1--base.tfm
-2020/06/07 | 18284 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tlf-ot1G.tfm
-2020/06/07 | 1824 | fonts/baskervillef/tfm/BaskervilleF-Bold-osf-t1--base.tfm
-2020/06/07 | 1824 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tosf-sc-ot1--base.tfm
-2020/06/07 | 1820 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-sc-ot1--base.tfm
2020/06/07 | 1818688 | systems/texlive/tlnet/archive/luatex.win32.r55431.tar.xz
2020/06/07 | 1804 | systems/texlive/tlnet/archive/collection-fontsextra.r55436.tar.xz
-2020/06/07 | 1804 | fonts/baskervillef/tfm/BaskervilleF-Regular-osf-t1--base.tfm
-2020/06/07 | 1804 | fonts/baskervillef/tfm/BaskervilleF-Regular-lf-t1--base.tfm
-2020/06/07 | 1804 | fonts/baskervillef/tfm/BaskervilleF-Bold-tosf-t1--base.tfm
-2020/06/07 | 1804 | fonts/baskervillef/tfm/BaskervilleF-Bold-tlf-t1--base.tfm
-2020/06/07 | 1800 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-sc-ot1--base.tfm
-2020/06/07 | 1800 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-sc-ot1--base.tfm
-2020/06/07 | 17876 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-ot1G.tfm
-2020/06/07 | 1784 | fonts/baskervillef/tfm/BaskervilleF-Regular-dnom-t1.tfm
-2020/06/07 | 1784 | fonts/baskervillef/tfm/BaskervilleF-Bold-lf-sc-t1--base.tfm
-2020/06/07 | 1780 | fonts/baskervillef/tfm/BaskervilleF-Regular-tosf-t1--base.tfm
-2020/06/07 | 1780 | fonts/baskervillef/tfm/BaskervilleF-Regular-tlf-t1--base.tfm
2020/06/07 | 17783 | macros/luatex/latex/luamesh/scripts/luamesh.lua
-2020/06/07 | 1776 | fonts/baskervillef/tfm/BaskervilleF-Regular-osf-sc-t1--base.tfm
-2020/06/07 | 1776 | fonts/baskervillef/tfm/BaskervilleF-Regular-dnom-t1--base.tfm
-2020/06/07 | 1776 | fonts/baskervillef/tfm/BaskervilleF-Bold-osf-sc-t1--base.tfm
-2020/06/07 | 1772 | fonts/baskervillef/tfm/BaskervilleF-Regular-lf-sc-t1--base.tfm
-2020/06/07 | 1756 | fonts/baskervillef/tfm/BaskervilleF-Bold-tosf-sc-t1--base.tfm
-2020/06/07 | 1756 | fonts/baskervillef/tfm/BaskervilleF-Bold-tlf-sc-t1--base.tfm
-2020/06/07 | 1752 | fonts/baskervillef/tfm/BaskervilleF-Regular-tosf-sc-t1--base.tfm
-2020/06/07 | 1752 | fonts/baskervillef/tfm/BaskervilleF-Regular-tlf-sc-t1--base.tfm
-2020/06/07 | 1740 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-tosf-t1.vf
-2020/06/07 | 1740 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-tosf-ly1.vf
-2020/06/07 | 1740 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-tlf-ly1.vf
-2020/06/07 | 1740 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-osf-ly1.vf
2020/06/07 | 1740981 | graphics/pstricks/contrib/pst-eucl/doc/pst-eucl-doc.pdf
-2020/06/07 | 17384 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-th-ot1.tfm
-2020/06/07 | 17384 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-th-ot1.tfm
-2020/06/07 | 17384 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-th-ot1.tfm
-2020/06/07 | 17384 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-th-ot1.tfm
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-Regular-tosf-t1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-Regular-tosf-ly1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-Regular-tlf-t1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-Regular-tlf-ly1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-Regular-osf-t1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-Regular-osf-ly1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-Regular-lf-ly1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-Italic-tosf-th-t1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-Italic-tosf-t1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-Italic-tosf-ly1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-Italic-tlf-th-t1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-Italic-tlf-ly1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-Italic-osf-th-t1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-Italic-osf-ly1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-Italic-lf-th-t1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-tlf-t1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-osf-t1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-lf-t1.vf
-2020/06/07 | 1736 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-lf-ly1.vf
-2020/06/07 | 1736 | fonts/baskervillef/tfm/BaskervilleF-Regular-osf-sc-ot1--base.tfm
-2020/06/07 | 1732 | fonts/baskervillef/vf/BaskervilleF-Regular-lf-t1.vf
-2020/06/07 | 1732 | fonts/baskervillef/vf/BaskervilleF-Italic-tlf-t1.vf
-2020/06/07 | 1732 | fonts/baskervillef/vf/BaskervilleF-Italic-osf-t1.vf
-2020/06/07 | 1732 | fonts/baskervillef/vf/BaskervilleF-Italic-lf-t1.vf
-2020/06/07 | 1732 | fonts/baskervillef/vf/BaskervilleF-Italic-lf-ly1.vf
-2020/06/07 | 1732 | fonts/baskervillef/vf/BaskervilleF-Bold-tosf-t1.vf
-2020/06/07 | 1732 | fonts/baskervillef/vf/BaskervilleF-Bold-tosf-ly1.vf
-2020/06/07 | 1732 | fonts/baskervillef/vf/BaskervilleF-Bold-tlf-t1.vf
-2020/06/07 | 1732 | fonts/baskervillef/vf/BaskervilleF-Bold-tlf-ly1.vf
-2020/06/07 | 1732 | fonts/baskervillef/vf/BaskervilleF-Bold-osf-t1.vf
-2020/06/07 | 1732 | fonts/baskervillef/vf/BaskervilleF-Bold-osf-ly1.vf
-2020/06/07 | 1732 | fonts/baskervillef/vf/BaskervilleF-Bold-lf-t1.vf
-2020/06/07 | 1732 | fonts/baskervillef/vf/BaskervilleF-Bold-lf-ly1.vf
-2020/06/07 | 1732 | fonts/baskervillef/tfm/BaskervilleF-Regular-lf-sc-ot1--base.tfm
2020/06/07 | 173181 | macros/luatex/latex/luamesh/doc/luamesh-doc.pdf
-2020/06/07 | 1724 | fonts/baskervillef/vf/BaskervilleF-Regular-tosf-sc-ly1.vf
-2020/06/07 | 1724 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-tosf-sc-ly1.vf
-2020/06/07 | 1724 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-tlf-sc-ly1.vf
-2020/06/07 | 1724 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-osf-sc-ly1.vf
-2020/06/07 | 1724 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-lf-sc-ly1.vf
-2020/06/07 | 1724 | fonts/baskervillef/tfm/BaskervilleF-Bold-lf-sc-ot1--base.tfm
-2020/06/07 | 1720 | fonts/baskervillef/vf/BaskervilleF-Regular-tlf-sc-ly1.vf
-2020/06/07 | 1720 | fonts/baskervillef/vf/BaskervilleF-Regular-osf-sc-ly1.vf
-2020/06/07 | 1720 | fonts/baskervillef/vf/BaskervilleF-Regular-lf-sc-ly1.vf
-2020/06/07 | 1720 | fonts/baskervillef/vf/BaskervilleF-Italic-tosf-sc-ly1.vf
-2020/06/07 | 1720 | fonts/baskervillef/vf/BaskervilleF-Italic-tlf-sc-ly1.vf
-2020/06/07 | 1720 | fonts/baskervillef/vf/BaskervilleF-Italic-osf-sc-ly1.vf
-2020/06/07 | 1720 | fonts/baskervillef/vf/BaskervilleF-Italic-lf-sc-ly1.vf
-2020/06/07 | 1720 | fonts/baskervillef/vf/BaskervilleF-Bold-tosf-sc-ly1.vf
-2020/06/07 | 1720 | fonts/baskervillef/vf/BaskervilleF-Bold-tlf-sc-ly1.vf
-2020/06/07 | 1720 | fonts/baskervillef/vf/BaskervilleF-Bold-osf-sc-ly1.vf
-2020/06/07 | 1720 | fonts/baskervillef/tfm/BaskervilleF-Bold-osf-sc-ot1--base.tfm
-2020/06/07 | 1716 | fonts/baskervillef/vf/BaskervilleF-Bold-lf-sc-ly1.vf
-2020/06/07 | 1712 | fonts/baskervillef/tfm/BaskervilleF-Regular-tosf-sc-ot1--base.tfm
-2020/06/07 | 1708 | fonts/baskervillef/tfm/BaskervilleF-Regular-tlf-sc-ot1--base.tfm
-2020/06/07 | 1704 | fonts/baskervillef/vf/BaskervilleF-Regular-tosf-sc-t1.vf
-2020/06/07 | 1704 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-tosf-sc-t1.vf
-2020/06/07 | 1704 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-tlf-sc-t1.vf
-2020/06/07 | 1704 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-osf-sc-t1.vf
-2020/06/07 | 1704 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-lf-sc-t1.vf
-2020/06/07 | 1700 | fonts/baskervillef/vf/BaskervilleF-Regular-tlf-sc-t1.vf
-2020/06/07 | 1700 | fonts/baskervillef/vf/BaskervilleF-Regular-sup-t1.vf
-2020/06/07 | 1700 | fonts/baskervillef/vf/BaskervilleF-Regular-osf-sc-t1.vf
-2020/06/07 | 1700 | fonts/baskervillef/vf/BaskervilleF-Regular-lf-sc-t1.vf
-2020/06/07 | 1700 | fonts/baskervillef/vf/BaskervilleF-Regular-dnom-t1.vf
-2020/06/07 | 1700 | fonts/baskervillef/vf/BaskervilleF-Italic-tosf-sc-t1.vf
-2020/06/07 | 1700 | fonts/baskervillef/vf/BaskervilleF-Italic-tlf-sc-t1.vf
-2020/06/07 | 1700 | fonts/baskervillef/vf/BaskervilleF-Italic-osf-sc-t1.vf
-2020/06/07 | 1700 | fonts/baskervillef/vf/BaskervilleF-Italic-lf-sc-t1.vf
-2020/06/07 | 1700 | fonts/baskervillef/vf/BaskervilleF-Italic-dnom-t1.vf
-2020/06/07 | 1700 | fonts/baskervillef/vf/BaskervilleF-Bold-tosf-sc-t1.vf
-2020/06/07 | 1700 | fonts/baskervillef/vf/BaskervilleF-Bold-tlf-sc-t1.vf
-2020/06/07 | 1700 | fonts/baskervillef/vf/BaskervilleF-Bold-osf-sc-t1.vf
-2020/06/07 | 1700 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-sup-t1.vf
-2020/06/07 | 1696 | fonts/baskervillef/vf/BaskervilleF-Italic-sup-t1.vf
-2020/06/07 | 1696 | fonts/baskervillef/vf/BaskervilleF-Bold-sup-t1.vf
-2020/06/07 | 1696 | fonts/baskervillef/vf/BaskervilleF-Bold-lf-sc-t1.vf
-2020/06/07 | 1696 | fonts/baskervillef/tfm/BaskervilleF-Bold-tosf-sc-ot1--base.tfm
-2020/06/07 | 1696 | fonts/baskervillef/tfm/BaskervilleF-Bold-tlf-sc-ot1--base.tfm
-2020/06/07 | 1692 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-sup-ly1.vf
-2020/06/07 | 1688 | fonts/baskervillef/vf/BaskervilleF-Regular-sup-ly1.vf
-2020/06/07 | 1688 | fonts/baskervillef/vf/BaskervilleF-Regular-dnom-ly1.vf
-2020/06/07 | 1688 | fonts/baskervillef/vf/BaskervilleF-Italic-sup-ly1.vf
-2020/06/07 | 1688 | fonts/baskervillef/vf/BaskervilleF-Italic-dnom-ly1.vf
-2020/06/07 | 1684 | fonts/baskervillef/vf/BaskervilleF-Bold-sup-ly1.vf
-2020/06/07 | 167624 | fonts/baskervillef/opentype/BaskervilleF-BoldItalic.otf
-2020/06/07 | 1668 | fonts/baskervillef/vf/BaskervilleF-Italic-tosf-th-ly1.vf
-2020/06/07 | 1668 | fonts/baskervillef/vf/BaskervilleF-Italic-tlf-th-ly1.vf
-2020/06/07 | 1668 | fonts/baskervillef/vf/BaskervilleF-Italic-osf-th-ly1.vf
-2020/06/07 | 1668 | fonts/baskervillef/vf/BaskervilleF-Italic-lf-th-ly1.vf
-2020/06/07 | 1644 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-osf-ts1.tfm
-2020/06/07 | 1644 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-lf-ts1.tfm
-2020/06/07 | 1640 | fonts/baskervillef/tfm/BaskervilleF-Regular-osf-ts1.tfm
-2020/06/07 | 1640 | fonts/baskervillef/tfm/BaskervilleF-Regular-lf-ts1.tfm
-2020/06/07 | 1640 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-osf-ts1--base.tfm
-2020/06/07 | 1640 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-lf-ts1--base.tfm
-2020/06/07 | 1628 | fonts/baskervillef/tfm/BaskervilleF-Regular-osf-ts1--base.tfm
-2020/06/07 | 1628 | fonts/baskervillef/tfm/BaskervilleF-Regular-lf-ts1--base.tfm
-2020/06/07 | 1620 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-ts1.tfm
-2020/06/07 | 1620 | fonts/baskervillef/tfm/BaskervilleF-Italic-osf-ts1--base.tfm
-2020/06/07 | 1620 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-ts1.tfm
-2020/06/07 | 1620 | fonts/baskervillef/tfm/BaskervilleF-Italic-lf-ts1--base.tfm
-2020/06/07 | 1616 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tosf-ts1.tfm
-2020/06/07 | 1616 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tlf-ts1.tfm
-2020/06/07 | 1612 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tosf-ts1--base.tfm
-2020/06/07 | 1612 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-tlf-ts1--base.tfm
-2020/06/07 | 1608 | fonts/baskervillef/tfm/BaskervilleF-Regular-tosf-ts1.tfm
-2020/06/07 | 1608 | fonts/baskervillef/tfm/BaskervilleF-Regular-tlf-ts1.tfm
-2020/06/07 | 1596 | fonts/baskervillef/tfm/BaskervilleF-Regular-tosf-ts1--base.tfm
-2020/06/07 | 1596 | fonts/baskervillef/tfm/BaskervilleF-Regular-tlf-ts1--base.tfm
-2020/06/07 | 1584 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-ts1.tfm
-2020/06/07 | 1584 | fonts/baskervillef/tfm/BaskervilleF-Italic-tosf-ts1--base.tfm
-2020/06/07 | 1584 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-ts1.tfm
-2020/06/07 | 1584 | fonts/baskervillef/tfm/BaskervilleF-Italic-tlf-ts1--base.tfm
-2020/06/07 | 157568 | fonts/baskervillef/opentype/BaskervilleF-Italic.otf
2020/06/07 | 1553132 | systems/texlive/tlnet/archive/luahbtex.win32.r55431.tar.xz
2020/06/07 | 15529816 | systems/texlive/tlnet/archive/fira.r55437.tar.xz
2020/06/07 | 1543980 | systems/texlive/tlnet/archive/xecjk.doc.r55443.tar.xz
-2020/06/07 | 1540 | fonts/baskervillef/tfm/BaskervilleF-Bold-osf-ts1.tfm
-2020/06/07 | 1540 | fonts/baskervillef/tfm/BaskervilleF-Bold-osf-ts1--base.tfm
-2020/06/07 | 1540 | fonts/baskervillef/tfm/BaskervilleF-Bold-lf-ts1.tfm
-2020/06/07 | 1540 | fonts/baskervillef/tfm/BaskervilleF-Bold-lf-ts1--base.tfm
-2020/06/07 | 153958 | fonts/baskervillef/type1/BaskervilleF-BoldItalic.pfb
-2020/06/07 | 152351 | fonts/baskervillef/type1/BaskervilleF-Italic.pfb
-2020/06/07 | 1516 | fonts/baskervillef/tfm/BaskervilleF-Bold-tosf-ts1.tfm
-2020/06/07 | 1516 | fonts/baskervillef/tfm/BaskervilleF-Bold-tosf-ts1--base.tfm
-2020/06/07 | 1516 | fonts/baskervillef/tfm/BaskervilleF-Bold-tlf-ts1.tfm
-2020/06/07 | 1516 | fonts/baskervillef/tfm/BaskervilleF-Bold-tlf-ts1--base.tfm
-2020/06/07 | 1492 | fonts/baskervillef/tfm/BaskervilleF-BoldItalic-sup-ot1.tfm
-2020/06/07 | 14848 | fonts/baskervillef/tfm/BaskervilleF-Bold-tlf-ot1.tfm
-2020/06/07 | 1464 | fonts/baskervillef/tfm/BaskervilleF-Italic-sup-ot1.tfm
-2020/06/07 | 1464 | fonts/baskervillef/tfm/BaskervilleF-Italic-dnom-ot1.tfm
2020/06/07 | 1440 | systems/texlive/tlnet/archive/collection-mathscience.r55438.tar.xz
-2020/06/07 | 14328 | fonts/baskervillef/tfm/BaskervilleF-Regular-lf-ot1.tfm
-2020/06/07 | 143261 | fonts/baskervillef/type1/BaskervilleF-Regular.pfb
-2020/06/07 | 14248 | fonts/baskervillef/tfm/BaskervilleF-Regular-tlf-ot1.tfm
-2020/06/07 | 14212 | fonts/baskervillef/tfm/BaskervilleF-Bold-osf-ot1.tfm
-2020/06/07 | 14208 | fonts/baskervillef/tfm/BaskervilleF-Bold-lf-ot1.tfm
-2020/06/07 | 14188 | fonts/baskervillef/tfm/BaskervilleF-Bold-tosf-ot1.tfm
-2020/06/07 | 14028 | fonts/baskervillef/tfm/BaskervilleF-Regular-osf-ot1.tfm
-2020/06/07 | 14004 | fonts/baskervillef/tfm/BaskervilleF-Regular-tosf-ot1.tfm
-2020/06/07 | 13908 | fonts/baskervillef/tfm/BaskervilleF-Bold-tlf-ot1G.tfm
-2020/06/07 | 1364 | fonts/baskervillef/tfm/BaskervilleF-Bold-sup-ot1.tfm
-2020/06/07 | 1360 | fonts/baskervillef/tfm/BaskervilleF-Regular-sup-ot1.tfm
-2020/06/07 | 136045 | fonts/baskervillef/type1/BaskervilleF-Bold.pfb
-2020/06/07 | 1356 | fonts/baskervillef/tfm/BaskervilleF-Regular-dnom-ot1.tfm
2020/06/07 | 1355155 | graphics/pstricks/contrib/pst-eucl.zip
-2020/06/07 | 13448 | fonts/baskervillef/tfm/BaskervilleF-Regular-tlf-ot1G.tfm
+2020/06/07 | 13304 | graphics/pgf/contrib/yquant/tex/yquant-config.tex
2020/06/07 | 1311 | macros/luatex/latex/luamesh/README
2020/06/07 | 1309 | macros/luatex/latex/luamesh/doc/fond.pdf
2020/06/07 | 1303884 | systems/texlive/tlnet/archive/fira.doc.r55437.tar.xz
-2020/06/07 | 1295256 | macros/latex/contrib/nicematrix.zip
2020/06/07 | 128636 | systems/texlive/tlnet/archive/ctex.r55440.tar.xz
-2020/06/07 | 12676 | systems/texlive/tlnet/archive/commutative-diagrams.r55438.tar.xz
2020/06/07 | 12327 | graphics/pstricks/base/dvips/pstricks97.pro
2020/06/07 | 122436 | macros/latex/contrib/abnt.zip
2020/06/07 | 114 | macros/luatex/latex/luamesh/doc/dum.tex
2020/06/07 | 1122 | macros/latex/contrib/cellprops/README.md
-2020/06/07 | 110640 | fonts/baskervillef/opentype/BaskervilleF-Regular.otf
2020/06/07 | 10888 | systems/texlive/tlnet/archive/pdfcrop.r55435.tar.xz
2020/06/07 | 1077656 | systems/texlive/tlnet/archive/ctex.doc.r55440.tar.xz
2020/06/07 | 1068 | systems/texlive/tlnet/archive/courierten.doc.r55436.tar.xz
-2020/06/07 | 105604 | fonts/baskervillef/opentype/BaskervilleF-Bold.otf
-2020/06/07 | 1032 | fonts/baskervillef/vf/BaskervilleF-BoldItalic-tlf-ot1G.vf
-2020/06/07 | 1028 | fonts/baskervillef/vf/BaskervilleF-Regular-tlf-ot1G.vf
-2020/06/07 | 1024 | fonts/baskervillef/vf/BaskervilleF-Italic-tlf-ot1G.vf
-2020/06/07 | 1024 | fonts/baskervillef/vf/BaskervilleF-Bold-tlf-ot1G.vf
2020/06/07 | 10228 | systems/texlive/tlnet/archive/pdfcrop.doc.r55435.tar.xz
2020/06/07 | 1005 | macros/latex/contrib/nicematrix/README.md
-2020/06/06 | 996252 | systems/win32/w32tex/lcdf-typetools-w32.tar.xz
-2020/06/06 | 987055 | macros/latex/contrib/reledmac/reledpar.pdf
-2020/06/06 | 93928003 | systems/win32/w32tex/TLW64/tl-win64.zip
-2020/06/06 | 93475 | macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
-2020/06/06 | 910020 | systems/win32/w32tex/cweb-w32.tar.xz
-2020/06/06 | 874125 | macros/latex/contrib/reledmac/reledmac.dtx
-2020/06/06 | 845488 | systems/win32/w32tex/dvi2ps-w32.tar.xz
-2020/06/06 | 837756 | systems/win32/w32tex/ttf2pt1-w32.tar.xz
-2020/06/06 | 8328 | systems/texlive/tlnet/archive/vancouver.r55423.tar.xz
-2020/06/06 | 82676 | systems/win32/w32tex/win64/cweb-w64.tar.xz
-2020/06/06 | 825392 | systems/win32/w32tex/ttf2pk-w32.tar.xz
-2020/06/06 | 811152 | systems/win32/w32tex/win64/aleph-w64.tar.xz
-2020/06/06 | 811152 | systems/texlive/tlnet/archive/ccool.doc.r55425.tar.xz
-2020/06/06 | 799596 | systems/win32/w32tex/win64/lcdf-typetools-w64.tar.xz
-2020/06/06 | 789616 | systems/win32/w32tex/win64/pstoedit-w64.tar.xz
-2020/06/06 | 759612 | systems/win32/w32tex/win64/dvipsk-w64.tar.xz
-2020/06/06 | 758008 | systems/win32/w32tex/win64/dvi2ps-w64.tar.xz
-2020/06/06 | 73630 | graphics/pstricks/contrib/pst-func/tex/pst-func.tex
-2020/06/06 | 734500 | systems/win32/w32tex/win64/ttf2pk-w64.tar.xz
-2020/06/06 | 7305 | macros/latex/contrib/abnt/abnt.sty
-2020/06/06 | 723940 | systems/texlive/tlnet/archive/l3build.doc.r55426.tar.xz
-2020/06/06 | 7224 | graphics/pstricks/contrib/pst-func/Changes
-2020/06/06 | 695668 | systems/win32/w32tex/win64/ttf2pt1-w64.tar.xz
-2020/06/06 | 6782 | macros/latex/contrib/reledmac/examples/2-footnote_spacing.tex
-2020/06/06 | 6039 | language/chinese/ctex/README.md
-2020/06/06 | 587792 | systems/win32/w32tex/win64/jtex-w64.tar.xz
-2020/06/06 | 524888 | systems/win32/w32tex/mftrace-w32.tar.xz
-2020/06/06 | 517548 | systems/win32/w32tex/psutils-w32.tar.xz
-2020/06/06 | 512431 | macros/xetex/latex/xecjk/xeCJK.dtx
-2020/06/06 | 484040 | systems/win32/w32tex/dvi2tty-w32.tar.xz
-2020/06/06 | 4680 | systems/texlive/tlnet/archive/crop.r55424.tar.xz
-2020/06/06 | 4645 | macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.tex
-2020/06/06 | 4550532 | systems/win32/w32tex/dvipsk-w32.tar.xz
-2020/06/06 | 4485588 | systems/win32/w32tex/texinfo-w32.tar.xz
-2020/06/06 | 447860 | systems/win32/w32tex/win64/dvi2tty-w64.tar.xz
-2020/06/06 | 439962 | language/chinese/ctex/ctex.dtx
-2020/06/06 | 439416 | systems/win32/w32tex/mftools.tar.xz
-2020/06/06 | 431232 | systems/win32/w32tex/win64/mftools-w64.tar.xz
-2020/06/06 | 4277 | macros/latex/contrib/beamer-contrib/beamerswitch/README.md
-2020/06/06 | 419860 | systems/win32/w32tex/win64/tex4htk-w64.tar.xz
-2020/06/06 | 407080 | systems/win32/w32tex/win64/omegaj-w64.tar.xz
-2020/06/06 | 40225 | support/pdfcrop/pdfcrop.pl
-2020/06/06 | 39651 | graphics/pstricks/contrib/pst-func/doc/pst-func-doc.data
-2020/06/06 | 3889616 | graphics/pstricks/contrib/pst-func/doc/pst-func-doc.pdf
-2020/06/06 | 386024 | systems/win32/w32tex/win64/psutils-w64.tar.xz
-2020/06/06 | 3808 | macros/latex/contrib/reledmac/README.md
-2020/06/06 | 37801 | macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
-2020/06/06 | 376500 | systems/win32/w32tex/win64/mftrace-w64.tar.xz
-2020/06/06 | 3760 | systems/texlive/tlnet/archive/ccool.r55425.tar.xz
-2020/06/06 | 36590 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example.pdf
-2020/06/06 | 3532891 | graphics/pstricks/contrib/pst-func.zip
-2020/06/06 | 3395 | macros/xetex/latex/xecjk/README.md
-2020/06/06 | 3389636 | systems/win32/w32tex/win64/web2c-w64.tar.xz
-2020/06/06 | 326624 | systems/texlive/tlnet/archive/crop.doc.r55424.tar.xz
-2020/06/06 | 32392 | systems/texlive/tlnet/archive/l3build.r55426.tar.xz
-2020/06/06 | 31749 | macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
-2020/06/06 | 3159 | macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.tex
-2020/06/06 | 309117 | macros/latex/contrib/beamer-contrib/beamerswitch.zip
-2020/06/06 | 304996 | systems/win32/w32tex/win64/gregorio-w64.tar.xz
-2020/06/06 | 303460 | macros/latex/contrib/reledmac/reledpar.dtx
-2020/06/06 | 302761 | fonts/courierten.zip
-2020/06/06 | 2988 | macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.tex
-2020/06/06 | 29475 | language/chinese/ctex/ctxdoc.cls
-2020/06/06 | 29424 | systems/texlive/tlnet/archive/l3build.source.r55426.tar.xz
-2020/06/06 | 292881 | macros/xetex/latex/xecjk/xunicode-symbols.pdf
-2020/06/06 | 2637680 | systems/win32/w32tex/dvitools-w32.tar.xz
-2020/06/06 | 263410 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
-2020/06/06 | 2627 | macros/latex/contrib/beamer-contrib/beamerswitch/Makefile
-2020/06/06 | 26137779 | install/fonts/fira.tds.zip
-2020/06/06 | 25965953 | fonts/fira.zip
-2020/06/06 | 25358 | macros/latex/contrib/icon-appr/docs/iconappr-man.tex
-2020/06/06 | 24795 | macros/latex/contrib/reledmac/doc-include/migrate-mac.dtx
-2020/06/06 | 24474 | macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
-2020/06/06 | 239560 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
-2020/06/06 | 2340208 | systems/win32/w32tex/win64/dvitools-w64.tar.xz
-2020/06/06 | 22958 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-trans.pdf
-2020/06/06 | 22389 | support/pdfcrop.zip
-2020/06/06 | 22344 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-handout.pdf
-2020/06/06 | 2168 | systems/win32/w32tex/TLTEXINFO/00README-TEXINFO.TL
-2020/06/06 | 215182 | macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
-2020/06/06 | 215012 | macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
-2020/06/06 | 2130900 | systems/win32/w32tex/win64/context-w64.tar.xz
-2020/06/06 | 20916 | macros/latex/contrib/icon-appr/icon-appr.dtx
-2020/06/06 | 2027 | macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.tex
-2020/06/06 | 201833 | macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
-2020/06/06 | 20075 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch-example-article.pdf
-2020/06/06 | 1998713 | macros/latex/contrib/reledmac/reledmac.pdf
-2020/06/06 | 1973 | macros/latex/contrib/reledmac/examples/2-antilabe.tex
-2020/06/06 | 194565 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.pdf
-2020/06/06 | 1936888 | install/macros/xetex/latex/xecjk.tds.zip
-2020/06/06 | 190222 | macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
-2020/06/06 | 190204 | macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
-2020/06/06 | 190161 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
-2020/06/06 | 189915 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
-2020/06/06 | 189792 | macros/latex/contrib/reledmac/examples/1-tabular.pdf
-2020/06/06 | 189690 | macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
-2020/06/06 | 189362 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
-2020/06/06 | 188865 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
-2020/06/06 | 188836 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
-2020/06/06 | 188745 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
-2020/06/06 | 1878236 | systems/win32/w32tex/win64/ptex-w64.tar.xz
-2020/06/06 | 187631 | macros/latex/contrib/reledmac/examples/2-indexing.pdf
-2020/06/06 | 183782 | macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
-2020/06/06 | 18323 | macros/latex/contrib/reledmac/examples/2-glossaries.pdf
-2020/06/06 | 1806700 | systems/win32/w32tex/win64/uptex-w64.tar.xz
-2020/06/06 | 17840 | systems/texlive/tlnet/archive/crop.source.r55424.tar.xz
-2020/06/06 | 177475 | macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
-2020/06/06 | 175170 | macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
-2020/06/06 | 17346380 | systems/win32/w32tex/gregorio-w32.tar.xz
-2020/06/06 | 1695 | macros/latex/contrib/reledmac/makefile
-2020/06/06 | 168099 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
-2020/06/06 | 1663388 | systems/win32/w32tex/makeindex-w32.tar.xz
-2020/06/06 | 1619577 | macros/xetex/latex/xecjk.zip
-2020/06/06 | 15848 | systems/texlive/tlnet/archive/ccool.source.r55425.tar.xz
-2020/06/06 | 158108 | macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
-2020/06/06 | 1577921 | install/language/chinese/ctex.tds.zip
-2020/06/06 | 1537 | graphics/pstricks/contrib/pst-func/README.md
-2020/06/06 | 145283 | macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
-2020/06/06 | 144492 | macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
-2020/06/06 | 140523 | macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
-2020/06/06 | 138405 | macros/latex/contrib/reledmac/examples/2-linespacing.pdf
-2020/06/06 | 138222 | macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
-2020/06/06 | 136436 | systems/texlive/tlnet/archive/vancouver.doc.r55423.tar.xz
-2020/06/06 | 135414 | macros/latex/contrib/reledmac/examples/2-performances.pdf
-2020/06/06 | 134815 | macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
-2020/06/06 | 13376 | systems/texlive/tlnet/archive/rec-thy.r55427.tar.xz
-2020/06/06 | 130290 | macros/latex/contrib/reledmac/examples/2-antilabe.pdf
-2020/06/06 | 129005 | macros/latex/contrib/reledmac/examples/2-notes-width.pdf
-2020/06/06 | 1288169 | macros/xetex/latex/xecjk/xeCJK.pdf
-2020/06/06 | 126016 | macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
-2020/06/06 | 125082 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
-2020/06/06 | 124324 | macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
-2020/06/06 | 123601 | macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
-2020/06/06 | 123463 | macros/latex/contrib/reledmac/examples/1-verses.pdf
-2020/06/06 | 1234248 | systems/win32/w32tex/omegaj-w32.tar.xz
-2020/06/06 | 123178 | macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
-2020/06/06 | 123151 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
-2020/06/06 | 122256 | macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
-2020/06/06 | 121597 | macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
-2020/06/06 | 1191894 | language/chinese/ctex.zip
-2020/06/06 | 118947 | macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
-2020/06/06 | 1168960 | systems/win32/w32tex/pstoedit-w32.tar.xz
-2020/06/06 | 1140664 | systems/win32/w32tex/win64/makeindex-w64.tar.xz
-2020/06/06 | 112924 | systems/texlive/tlnet/archive/rec-thy.doc.r55427.tar.xz
-2020/06/06 | 1113957 | language/chinese/ctex/ctex.pdf
-2020/06/06 | 10362172 | macros/latex/contrib/reledmac.zip
-2020/06/06 | 103129 | graphics/pstricks/contrib/pst-func/doc/pst-func-doc.tex
-2020/06/06 | 10272 | support/pdfcrop/README.md
-2020/06/06 | 102192 | macros/latex/contrib/beamer-contrib/beamerswitch/beamerswitch.dtx
diff --git a/graphics/pgf/contrib/yquant/README.md b/graphics/pgf/contrib/yquant/README.md
index 56a8428524..d8d8e1afaa 100644
--- a/graphics/pgf/contrib/yquant/README.md
+++ b/graphics/pgf/contrib/yquant/README.md
@@ -7,8 +7,10 @@ It builds on and interacts with TiKZ, which brings an enourmous flexibility for
A detailed reference with lots of examples is provided in the PDF version of this Readme. We will sketch some basic usage.
+Now yquant also understands circuits written in the qasm language!
+
## License
-This material is subject to the LaTeX Project Public License 1.3.
+This material is subject to the LaTeX Project Public License 1.3c.
## Examples
Many more examples and explanations can be found in the [PDF version](https://github.com/projekter/yquant/raw/master/doc/latex/yquant/yquant-doc.pdf) of this Readme.
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test1.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test1.qasm
new file mode 100644
index 0000000000..0f8dc1d4fc
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test1.qasm
@@ -0,0 +1,12 @@
+#
+# File: test1.qasm
+# Date: 22-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - EPR creation
+#
+ qubit q0
+ qubit q1
+
+ h q0 # create EPR pair
+ cnot q0,q1
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test10.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test10.qasm
new file mode 100644
index 0000000000..4f788eb36c
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test10.qasm
@@ -0,0 +1,16 @@
+#
+# File: test10.qasm
+# Date: 22-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - multi-qubit gates
+# also demonstrates use of classical bits
+
+ qubit q0
+ cbit c1
+ qubit q2
+
+ h q0
+ Utwo q0,c1
+ S q2
+ Utwo c1,q2
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test11.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test11.qasm
new file mode 100644
index 0000000000..e668be717f
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test11.qasm
@@ -0,0 +1,20 @@
+#
+# File: test11.qasm
+# Date: 22-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - user-defined
+# multi-qubit ops
+
+ defbox fx,2,0,'U_{f(x)}'
+ defbox fxy,3,0,'U_{f(x,y)}'
+
+ qubit q0
+ qubit q1
+ qubit q2
+
+ h q0
+ fx q0,q1
+ h q1
+ fxy q0,q1,q2
+
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test12.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test12.qasm
new file mode 100644
index 0000000000..d9a6a7caed
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test12.qasm
@@ -0,0 +1,20 @@
+#
+# File: test12.qasm
+# Date: 22-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - multi-qubit controlled
+# multi-qubit operations
+
+ defbox CU2,3,1,'U'
+ defbox CV2,3,1,'V'
+
+ qubit q0
+ qubit q1
+ qubit q2
+
+ h q0
+ CU2 q0,q1,q2
+ h q0
+ CV2 q2,q0,q1
+ \ No newline at end of file
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test13.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test13.qasm
new file mode 100644
index 0000000000..a8def4239c
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test13.qasm
@@ -0,0 +1,42 @@
+#
+# File: test13.qasm
+# Date: 22-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - three-qubit phase
+# estimation circuit with QFT and controlled-U
+
+ defbox CU,3,1,'U'
+ defbox CU2,3,1,'U^2'
+ defbox CU4,3,1,'U^4'
+ def c-S,1,'S'
+ def c-T,1,'T'
+
+ qubit j0,0 # QFT qubits
+ qubit j1,0
+ qubit j2,0
+ qubit s0 # U qubits
+ qubit s1
+
+ h j0 # equal superposition
+ h j1
+ h j2
+
+ CU4 j0,s0,s1 # controlled-U
+ CU2 j1,s0,s1
+ CU j2,s0,s1
+
+ h j0 # QFT
+ c-S j0,j1
+ h j1
+ nop j0
+ c-T j0,j2
+ c-S j1,j2
+ h j2
+ nop j0
+ nop j0
+ nop j1
+
+ measure j0 # final measurement
+ measure j1
+ measure j2
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test14.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test14.qasm
new file mode 100644
index 0000000000..ee83a46a4d
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test14.qasm
@@ -0,0 +1,49 @@
+#
+# File: test14.qasm
+# Date: 22-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - three-qubit FT QEC
+# circuit with syndrome measurement
+
+ defbox synd,4,0,'\txt{Process\\Syndrome}'
+ defbox rop,7,4,'{\symcal R}'
+
+ qubit q0 # code data qubits
+ qubit q1
+ qubit q2
+ qubit s0,0 # syndrome measurement qubits
+ qubit s1,0
+ cbit c0,0 # classical bits to store syndromes
+ cbit c1,0
+
+ h s0 # create EPR pair for FT meas
+ cnot s0,s1
+ cnot q0,s0 # measure parity of q0,q1
+ nop s1 # prevent cnot's from colliding
+ cnot q1,s1
+ cnot s0,s1 # uncreate EPR
+ h s0
+ measure s0 # measure syndrome qubits
+ nop s1
+ measure s1
+ cnot s0,c0 # copy to classical bits
+ nop s1
+ cnot s1,c1
+ space s0
+
+ zero s0
+ zero s1
+ h s0 # create EPR pair for FT meas
+ cnot s0,s1
+ cnot q1,s0 # measure parity of q1,q2
+ nop s1 # prevent cnot's from colliding
+ cnot q2,s1
+ cnot s0,s1 # uncreate EPR
+ h s0
+ measure s0 # measure syndrome qubits
+ nop s1
+ measure s1
+
+ synd s0,s1,c0,c1
+ rop s0,s1,c0,c1,q0,q1,q2
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test15.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test15.qasm
new file mode 100644
index 0000000000..0d7ed35ea5
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test15.qasm
@@ -0,0 +1,17 @@
+#
+# File: test15.qasm
+# Date: 24-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - "D-type" measurement
+# requested by Nielsen
+
+ def MeasZ,0,'\dmeterwide{HZ_\theta}{18pt}'
+
+ qubit q0,\psi
+ qubit q1,+
+
+ nop q0
+ ZZ q0,q1
+ nop q0
+ MeasZ q0
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test16.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test16.qasm
new file mode 100644
index 0000000000..1aa78ddfbf
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test16.qasm
@@ -0,0 +1,22 @@
+#
+# File: test16.qasm
+# Date: 24-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - example from Nielsen
+# paper on cluster states
+
+ qubit q0,\psi
+ qubit q1,\psi
+ qubit q2,\phi
+ qubit q3,0
+
+ nop q0
+ nop q0
+ slash q0
+ nop q1
+ ZZ q1,q2
+ cnot q2,q3
+ nop q2
+ discard q2
+ dmeter q3
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test17.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test17.qasm
new file mode 100644
index 0000000000..e1eefac730
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test17.qasm
@@ -0,0 +1,22 @@
+#
+# File: test17.qasm
+# Date: 24-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - example from Nielsen
+# paper on cluster states
+
+ def MeasH,0,'\dmeter{H}'
+
+ qubit q0,\psi
+ qubit q1,+
+ qubit q2,+
+ qubit q3,\phi
+
+ nop q0
+ nop q2
+ ZZ q0,q1
+ ZZ q2,q3
+ ZZ q1,q2
+ MeasH q1
+ MeasH q2
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test18.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test18.qasm
new file mode 100644
index 0000000000..04576ece23
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test18.qasm
@@ -0,0 +1,20 @@
+#
+# File: test18.qasm
+# Date: 25-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - multiple-control bullet op
+
+ def MeasH,0,'\dmeter{H}'
+ def Z4,3,'bullet' # handled specially
+
+ qubit q0,\psi
+ qubit q1,+
+ qubit q2,+
+ qubit q3,\phi
+
+ nop q0
+ nop q2
+ Z4 q0,q1,q2,q3
+ MeasH q1
+ MeasH q2
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test2.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test2.qasm
new file mode 100644
index 0000000000..9b8ae9af10
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test2.qasm
@@ -0,0 +1,20 @@
+#
+# File: test2.qasm
+# Date: 29-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - simple teleportation circuit
+#
+ qubit q0
+ qubit q1
+ qubit q2
+
+ h q1 # create EPR pair
+ cnot q1,q2
+ cnot q0,q1 # Bell basis measurement
+ h q0
+ nop q1
+ measure q0
+ measure q1
+ c-x q1,q2 # correction step
+ c-z q0,q2
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test3.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test3.qasm
new file mode 100644
index 0000000000..01c8247741
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test3.qasm
@@ -0,0 +1,13 @@
+#
+# File: test3.qasm
+# Date: 22-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - swap circuit
+#
+ qubit q0
+ qubit q1
+
+ cnot q0,q1
+ cnot q1,q0
+ cnot q0,q1
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test4.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test4.qasm
new file mode 100644
index 0000000000..c4dc61ef21
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test4.qasm
@@ -0,0 +1,23 @@
+#
+# File: test4.qasm
+# Date: 22-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - quantum
+# fourier transform on three qubits
+
+ def c-S,1,'S'
+ def c-T,1,'T'
+
+ qubit j0
+ qubit j1
+ qubit j2
+
+ h j0
+ c-S j1,j0
+ c-T j2,j0
+ nop j1
+ h j1
+ c-S j2,j1
+ h j2
+ swap j0,j2
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test5.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test5.qasm
new file mode 100644
index 0000000000..0a1a7e511b
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test5.qasm
@@ -0,0 +1,15 @@
+#
+# File: test5.qasm
+# Date: 22-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - demonstrate arbitray qubit matrix ops
+
+ def c-P,1,'\m{e^{i\alpha} & 0 \cr 0 & e^{-i\alpha}}'
+ def Ryt,0,'\m{\cos{\theta}&-\sin{\theta}\cr\sin{\theta}&\cos{\theta}}'
+
+ qubit j0
+ qubit j1
+
+ c-P j0,j1
+ Ryt j0 \ No newline at end of file
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test6.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test6.qasm
new file mode 100644
index 0000000000..88d48c87ab
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test6.qasm
@@ -0,0 +1,20 @@
+#
+# File: test6.qasm
+# Date: 22-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - demonstrate
+# multiple-qubit controlled single-q-gates
+
+ def c-U,3,'U'
+
+ qubit j0
+ qubit j1
+ qubit j2
+ qubit j3
+
+ toffoli j0,j1,j2
+ X j0
+ c-U j2,j3,j0,j1
+ H j2
+ measure j3
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test7.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test7.qasm
new file mode 100644
index 0000000000..ffc7227b20
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test7.qasm
@@ -0,0 +1,21 @@
+#
+# File: test7.qasm
+# Date: 22-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - measurement
+# of operator with correction
+
+ def c-U,1,'U'
+ def c-V,1,'V'
+
+ qubit q0
+ qubit q1
+
+ H q0
+ c-U q0,q1
+ H q0
+ measure q0
+ c-V q0,q1
+ nop q0
+ nop q1
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test8.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test8.qasm
new file mode 100644
index 0000000000..ba88ef68b4
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test8.qasm
@@ -0,0 +1,23 @@
+#
+# File: test8.qasm
+# Date: 22-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - stage in
+# simplification of quantum teleportation
+
+ def c-Z,1,'Z'
+
+ qubit q0,\psi
+ qubit q1,0
+ qubit q2,0
+
+ H q1
+ cnot q0,q1
+ cnot q1,q2
+ cnot q0,q1
+ cnot q1,q2
+ H q0
+ c-Z q2,q0
+ H q0
+ H q0
diff --git a/graphics/pgf/contrib/yquant/doc/qasm/test9.qasm b/graphics/pgf/contrib/yquant/doc/qasm/test9.qasm
new file mode 100644
index 0000000000..fc1486be8d
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/doc/qasm/test9.qasm
@@ -0,0 +1,20 @@
+#
+# File: test9.qasm
+# Date: 22-Mar-04
+# Author: I. Chuang <ichuang@mit.edu>
+#
+# Sample qasm input file - two-qubit gate circuit
+# implementation of Toffoli
+
+ def c-X,1,'\sqrt{X}'
+ def c-Xd,1,'{\sqrt{X}}^\dagger'
+
+ qubit q0
+ qubit q1
+ qubit q2
+
+ c-X q1,q2
+ cnot q0,q1
+ c-Xd q1,q2
+ cnot q0,q1
+ c-X q0,q2
diff --git a/graphics/pgf/contrib/yquant/doc/yquant-doc.pdf b/graphics/pgf/contrib/yquant/doc/yquant-doc.pdf
index 16dca0f393..fb714890d7 100644
--- a/graphics/pgf/contrib/yquant/doc/yquant-doc.pdf
+++ b/graphics/pgf/contrib/yquant/doc/yquant-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/yquant/doc/yquant-doc.tex b/graphics/pgf/contrib/yquant/doc/yquant-doc.tex
index 6455278430..cf32f913e6 100644
--- a/graphics/pgf/contrib/yquant/doc/yquant-doc.tex
+++ b/graphics/pgf/contrib/yquant/doc/yquant-doc.tex
@@ -14,8 +14,9 @@
\definecolor{darkblue}{RGB}{5, 10, 122}
\usepackage[english]{babel}
\usepackage[colorlinks, linkcolor=darkblue, bookmarksdepth=paragraph]{hyperref}
-\usepackage{yquant,braket,hyphenat,microtype,hologo,minted}
+\usepackage{yquant,braket,hyphenat,microtype,hologo,minted,import}
\usetikzlibrary{quotes,fit,shapes.symbols,backgrounds,quantikz}
+\useyquantlanguage{qasm}
\usepackage{amsmath,adjustbox,cleveref}
\usepackage[framemethod=tikz]{mdframed}
% END_FOLD
@@ -52,16 +53,17 @@
\endgroup\vskip-\parskip%
\noindent\ignorespaces%
}
-\newenvironment{option}[1]{\vskip5mm%
+\newenvironment{option*}[2]{\vskip5mm%
\noindent\begin{minipage}[t]{\linewidth}%
\begingroup%
\let\minted@inline@iii=\patched@minted@inline@iii%
\raggedleft%
\hspace*{-1cm}%
- \phantomsection\label{style:/yquant/#1}%
- \texttt{\textcolor{gray}{/yquant/}\textcolor{mintgreen}{#1}}\hfill default: %
+ \phantomsection\label{style:/#1/#2}%
+ \texttt{\textcolor{gray}{/#1/}\textcolor{mintgreen}{#2}}\hfill default: %
\tex}{%
\end{minipage}}
+\newenvironment{option}{\csname option*\endcsname{yquant}}{\csname endoption*\endcsname}
\newsavebox\codeexamplebox
\newenvironment{codeexample}{%
@@ -196,8 +198,8 @@
\section{Introduction}
This document outlines the scope and usage of the \Yquant{} package.
It contains both a reference and a huge number of examples.
- \Yquant{} is a package that makes typesetting quantum circuits easy; the package is not yet available on CTAN.
- This alpha version~0.1.2 \emph{should} be stable and interfaces are not very likely to change in an incompatible way in the future.
+ \Yquant{} is a package that makes typesetting quantum circuits easy; the package is available on CTAN.
+ This alpha version~0.3 \emph{should} be stable and interfaces are not very likely to change in an incompatible way in the future.
Please do report all issues and desirable additions.
\subsection{How to read the manual}
@@ -209,7 +211,9 @@
Then, have a look at \cref{sec:tikz} (or \cref{sec:alt}).
\subsection{Installation}
- At the moment, clone this repository or download a copy and extract the files to a path visible to your \TeX{} compiler.
+ The recommended way of installation is through CTAN.
+ A direct installation from this Git repository to obtain the latest additions and features is be possible by just cloning it to a path visible to your \TeX{} compiler.
+ While the repository may contain new additions, they are not thoroughly tested until they end up on CTAN; features that are not documented in this manual are entirely unreliable.
For example, you may put them in the same directory as your document (if you just want to give a try), or you may extract them to \texttt{tex/latex/yquant} in your local \texttt{texmf} (followed by an update of the file name database).
\subsection{Purpose of \Yquant, alternatives}\label{sec:alt}
@@ -229,6 +233,8 @@
Changes to the output, while possible, will be overwritten if \texttt{qasm2circ} is run again.
\pkg{qasm} output often looks sub\hyp optimal do to the fact that, e.g., rectangles are made up of four lines that do not properly connect and give a crumbly general feeling.
+ Note that since version~0.3, \Yquant{} understands \pkg{qasm} syntax, see \cref{sec:foreign:qasm}.
+
Maintenance status: last update of \pkg{qasm} in 2005. Also, \pkg{xy} was last updated in 2013, and the script is not compatible out\hyp of\hyp the\hyp box with Python~3, though an automatic conversion should work.
\item \pkg{qcircuit} is probably the most\hyp widely used package.
It provides commands that make it much easier to create quantum circuits using the \pkg{xy} package.
@@ -243,7 +249,7 @@
It also reduces burdens of the \pkg{xy} syntax.
However, the disadvantages of the grid\hyp based syntax still remain.
- Maintenance status: last update in 2019; the underlying \TikZ{} is actively maintained again by now.
+ Maintenance status: last update in 2020; the underlying \TikZ{} is actively maintained again by now.
\item \pkg{qpic} follows the approach of \pkg{qasm}: It makes use of an external Python program that reads the quantum circuits in an own language and converts them into \TikZ{} commands.
The language \pkg{qpic} follows is much more powerful than \pkg{qasm}'s.
The disadvantage that modifications in the output code will not remain after running the Python script again is mitigated by the possibility to define own \TeX{} macros.
@@ -292,7 +298,7 @@
The optional arguments for the \tex!yquant! environment have to appear \emph{on the same line} as the environment itself.
If you want to put the arguments into a new line, it is crucial to mask the line break by putting a comment symbol after the environment: \tex!\begin{yquant}%!.
Without this comment, \Yquant{} will detect your line break (this is one of the few places in \TeX{} where line breaks and spaces are different) and assume that the expression in square brackets instead provides arguments for the following operation! \\
- Finally note that in (non\hyp fragile) \texttt{beamer} frames, this discrimination between spaces and new lines does not work; the optional arguments will always be counted for the environment, not for the gate.
+ Finally note that in (non\hyp fragile) \pkg{beamer} frames, this discrimination between spaces and new lines does not work; the optional arguments will always be counted for the environment, not for the gate.
In this case, you can either declare the frame as fragile or (recommended) introduce a blank line between the environment and the options for the first gate.
\end{warning}
@@ -302,6 +308,7 @@
The starred form additionally supports the use of undeclared registers: it basically declares a registers upon its first usage.
This will always be a \texttt{qubit} register; but if you use the corresponding option and the first usage is an \gate{init} command, you may overwrite this.
+ Subcircuits always use the unstarred form.
Additionally, if you refer to the index $i$ of a vector register of length $L < i$, this register will automatically be enlarged to $i \coloneq L$.
It is also possible to convert a scalar register into a vector register in this manner.
@@ -435,6 +442,8 @@ IndexSingle = ?number? | ( [ ?number? ], "-", [ ?number? ] );
It will draw a \emph{main} part of the gate at the first contiguous slice of registers in the target list---you may select another register for this part by preceding the name or index with a star (which, contrary to the simplified grammar, may only occur \emph{once} in a target specification).
All other contiguous slices of target registers will be drawn in a \emph{subordinate style} for this gate.
Finally, all slices will be connected by a single vertical line with the style \style{/yquant/every multi line}.
+ Subcircuits, supported as of version~0.2, will always span the full region from the first to the last register specified in a multi\hyp qubit gate.
+ This is due to the fact that they may contain arbitrary ancilla registers which may be positioned somewhere in between the parts that actually constitute the subcircuit---so this whole region must not have wires of other registers crossing.
\begin{warning}[Discontiguous targets and control lines]
A control line extends from the very first to the very last affected register in an operation.
A sub\hyp gate line that is used for discontiguous registers will only span the range of a multi\hyp register.
@@ -477,6 +486,97 @@ IndexSingle = ?number? | ( [ ?number? ], "-", [ ?number? ] );
If there are no positive controls, the list may be empty or, together with the pipe, omitted.
Preceded by a tilde (``\yquant!~!''), the list of negative controls then follows; this mimics the syntax of many programming languages that denote logical negation by a tilde.
If there are no negative controls, the list may be empty or, together with the pipe, omitted.
+
+ \clearpage
+ \subsection{Importing circuits from files}\label{sec:import}
+ Since version~0.2, \Yquant{} provides a simple way to import circuits that are stored in external files.
+ The macro \tex!\yquantimport! can be used in three different contexts:
+ \begin{itemize}
+ \item Outside of a \TikZ{} picture environment. \\
+ In this case, \tex!\yquantimport[<options>]{<filename>}! will be equivalent to
+ \begin{minted}{tex}
+\begin{tikzpicture}
+ \begin{yquant}[<options>]
+ % the content of <filename> goes here
+ \end{yquant}
+\end{tikzpicture}
+ \end{minted}
+ The starred form, \tex!\yquantimport*[<options>]{<filename>}!, instead inserts the starred \Yquant{} environment.
+ Note that the options are always \Yquant{} options; if you want to pass \TikZ{} options, you will have to create the picture environment by yourself or change the option path to the correct one (\texttt{/tikz/.cd}).
+ \item Inside a \TikZ{} picture environment, but outside of a \Yquant{} environment. \\
+ This is the same as before, just that no extra picture environment will be added.
+ \item Inside both a \TikZ{} picture environment and a \Yquant{} environment. \\
+ The file will be inserted directly into the environment.
+ \Yquant's parser is automatically restarted after this.
+ The content will always be put in a \TeX{} group; if additional options are provided, \Yquant{} also inserts a \TikZ{} \tex!scope! and executes \tex!\yquantset{<options>}! directly after the scope.
+ If \tex!\yquantimport! is used, the content will be read as if the containing environment was an unstarred one; if \tex!\yquantimport*! is used, the content will be read as if the containing environment was a starred one.
+ \end{itemize}
+ Note that \Yquant{} internally uses plain \TeX's \tex!\import! command (i.e., \tex!\@@import! in \LaTeX).
+ However, when the \pkg{import} package is loaded, it uses \\ \tex!\subimport{\yquantimportpath}{<filename>}!, where \tex!\yquantimportpath! defaults to \texttt{./}---so by changing this, files from other folders may be imported which by themselves again include other files, and the relative path resolution will work.
+
+ Note that you may in particular import the content of a \gate{subcircuit}.
+
+ \subsection{Defining own gates}
+ \begin{warning}[Scope]
+ All gate declarations are always global.
+ \end{warning}
+
+ Since version~0.2.1, if you want to define a gate that corresponds to a single \gate{box} gate with a certain pre\hyp defined content, you may use the macro\\
+ \tex!\yquantdefinebox{<name>}[<style>]{<content>}!, which is far more efficient than the much more general \tex!\yquantdefinegate! introduced below.
+ It works in the following way:
+ \begin{itemize}
+ \item It creates a new gate with name \texttt{<name>} that can be accessed as all the other build\hyp in gates.
+ Note that \texttt{<name>} is case\hyp insensitive and may not contain spaces.
+ Special characters are allowed if \TeX{} can cope with them (i.e., no comment signs, no unbalanced braces, no backslashes...).
+ \item It creates a style \style{/yquant/operators/every <name>} and assigns the optional \texttt{<style>} to it.
+ If no style is provided, the default style will inherit from \style{/yquant/operators/every box}.
+ \item It defines \texttt{<content>} to be the value that is written into the box.
+ This \texttt{<content>} is expanded in a protected manner at the time of gate declaration.
+ You may need to prefix fragile macros by \tex!\protect!.
+ \end{itemize}
+
+ Sometimes, you may wish to define gates that are more than just a single box---perhaps a succession of multiple gates or even multi\hyp register gates with individual operations on the input registers. \\
+ Since version~0.2, \Yquant{} provides a simple macro that allows this.
+ The macro \tex!\yquantdefinegate{<name>}[<style>]{<content>}! works in the following way:
+ \begin{itemize}
+ \item It creates a new gate with name \texttt{<name>} that can be accessed as all the other built\hyp in gates.
+ Note that \texttt{<name>} is case\hyp insensitive and may not contain spaces.
+ Special characters are allowed if \TeX{} can cope with them (i.e., no comment signs, no unbalanced braces, no backslashes...).
+ \item It creates a style \style{/yquant/operators/every <name>} and assigns the optional \texttt{<style>} to it.
+ If no style is provided, the default style will inherit from \style{/yquant/operators/every custom gate}.
+ This will make the gate ``seamless,'' i.e., avoid highlighting the fact that this is a custom gate.
+ \item It defines a macro that contains \texttt{<content>} (expanded in a protected manner) and that will be inserted as a subcircuit whenever this gate is invoked.
+ This in particular means that if you use \hyperref[sec:import]{\tex!\yquantimport!} within the gate, the file will only be loaded once at the time of declaration.
+ \end{itemize}
+ When the gate is later drawn, the styles are invoked in the following order---remember custom gates are implemented by means of subcircuits---:
+ \begin{enumerate}
+ \item \style{/yquant/every operator}
+ \item \style{/yquant/operators/every <name>}
+ \item \style{/yquant/operators/every subcircuit box}
+ \item \style{/yquant/this operator}
+ \item \style{/yquant/operators/this subcircuit box}
+ \end{enumerate}
+ Gates defined in this way can only make use of the default gates or other custom gates.
+ They do not accept custom arguments, and it is not possible to declare own, custom shapes in this way (though other predefined shapes may be used).
+ If they are used in a multi\hyp qubit manner, they will never be split into contiguous slices (but their content will be, so if you use the default style that turns off the box, the only way to notice this is that intermediate unaffected gates will not be allowed to place gates within the custom gate).
+
+ \begin{warning}[Redefining existing gates]
+ The above macros will issue an error if the gate already exists.
+ You can use \tex!\yquantredefinebox! or \tex!\yquantredefinegate! to overwrite existing gate definitions.
+ Note that this will overwrite \emph{any} gate, even the built\hyp in ones.
+
+ Generally, it is discouraged to make use of this possibility.
+ For custom gates, if you redefine a gate as a box which was previously a general subcircuit\hyp based gate, the macro that contains the subcircuit will still be held in memory.
+ Overwriting built\hyp in gates will not clear the attributes associated to this gate (though required attributes will no longer be required afterwards).
+ Again, this is not a problem but prevents \Yquant{} from issuing potentially helpful error message if such a---now meaningless---attribute is used.
+
+ Finally, once a built\hyp in gate is overwritten, it cannot be restored.
+ In particular, the register creation pseudo\hyp gates \gate{qubit}, \gate{cbit}, \gate{qubits}, and \gate{nobit} perform some magic that cannot be mimicked with custom gates.
+ \end{warning}
+
+ More advanced declaration of custom gates requires the use of backend macros.
+ Refer to \texttt{yquant-lang.tex} for this.
+ For the declaration of custom shapes, see \texttt{yquant-shapes.tex} for examples.
\section{Configuration}\label{sec:config}
\Yquant{} uses \pkg{pgfkeys} to control its options, which are located in the path \texttt{/yquant}.
@@ -560,6 +660,10 @@ IndexSingle = ?number? | ( [ ?number? ], "-", [ ?number? ] );
The decoration \texttt{gapped brace} allows to additionally specify the regions in which a line should be drawn by using the \texttt{/tikz/decoration/from to} key, which expects a comma\hyp separated list of dimension ranges, and which is automatically populated by \Yquant.
Since it may happen that the arch of the brace needs to be shifted from the value specified in \texttt{/tikz/decoration/aspect} (else, it would be drawn into a gap), the special key \texttt{/yquant/gapped brace/apply shift} is installed, which transforms the \texttt{pos=-1} specification into a position that corresponds to the actual \texttt{aspect} value.
\end{option}
+
+ \begin{option}{every input label}!!
+ This style is installed for every register name label in a \gate{subcircuit} when the register is an input (or input and output) register.
+ \end{option}
\subsection{Register outputs}\unskipOpt
\begin{option}{every output}!shape=yquant-text, anchor=west, align=left!
@@ -671,6 +775,12 @@ IndexSingle = ?number? | ( [ ?number? ], "-", [ ?number? ] );
This style is installed for every \gate{box} operator.
\end{option}
+ \begin{option}{operators/every custom gate}!/yquant/operators/this subcircuit box/.append style={draw=none, inner sep=0pt}, /yquant/register/default name=!
+ This style is by default installed for every user\hyp defined gate (since version~0.2).
+ User\hyp defined gates are implemented via subcircuits; this style suppresses the box that surrounds the subcircuit and by default suppresses all register names.
+ This allows a seamless integration of the gate/subcircuit into the main circuit, without putting particular emphasis to the fact that what was defined as the custom gate indeed belongs together.
+ \end{option}
+
\begin{option}{operators/every dmeter}!shape=yquant-dmeter, x radius=2mm, y radius=2mm, fill=white, draw!
This style is installed for every \gate{dmeter} gate.
The \texttt{yquant-dmeter} shape consists of a rectangle whose right side is replaced by a circle, resembling the letter ``D.''
@@ -708,6 +818,28 @@ IndexSingle = ?number? | ( [ ?number? ], "-", [ ?number? ] );
This style is installed for every \gate{slash} pseudo\hyp gate, i.e., the one that is used to indicate that a single register line actually denotes multiple registers.
\end{option}
+ \begin{option}{operators/every subcircuit}!!
+ This style is installed for every \gate{subcircuit}.
+ \end{option}
+
+ \begin{option}{operators/every subcircuit box}!/yquant/operators/every box!
+ This style is installed for every \gate{subcircuit}.
+ Note that in contrast to all other styles such as \style{/yquant/operators/every subcircuit} or \style{/yquant/this operator}, this style is only applied to the ``container'' node of the subcircuit, but not to the elements in the subcircuit themselves.
+ \end{option}
+
+ \begin{option}{subcircuit box style}!/yquant/operators/every subcircuit box/.append style={#1}!
+ This is a shorthand to apply styles to the subcircuit box only.
+ \end{option}
+
+ \begin{option}{operators/this subcircuit box}!!
+ This style is appended to the current style installed for the \gate{subcircuit}, but will not apply to its contents.
+ Additionally, this style will be reset to an empty style at the beginning of each subcircuit, so that it really only applies to exactly the subcircuit box it is explicitly specified on, not to nested subcircuit boxes.
+ \end{option}
+
+ \begin{option}{this subcircuit box style}!/yquant/operators/this subcircuit box/.append style={#1}!
+ This is a shorthand to apply styles to the current subcircuit box only.
+ \end{option}
+
\begin{option}{operators/every swap}!shape=yquant-swap, radius=.75mm, draw!
This style is installed for every \gate{swap} gate that interchanges two qubits.
The \texttt{yquant-swap} shape consists of a single cross.
@@ -755,6 +887,9 @@ IndexSingle = ?number? | ( [ ?number? ], "-", [ ?number? ] );
Multiple slices in a discontiguous multi\hyp register are additionally suffixed by \texttt{-s\textit{<slice index>}}.
All controls are also named, suffixed by \tex!-p\idx! or \tex!-n\idx! for positive and negative controls (i.e., the topmost positive control of the previous operator will be available as \texttt{op-p0}).
Counters for target registers, positive, and negative controls are all independent.
+ Finally, you can even access names within a subcircuit, provided you give a name to the subcircuit.
+ All nodes in the subcircuit will then have the name \texttt{\textit{<subcircuit name>}-\textit{<name specified in the subcircuits>}}.
+ For nested subcircuits, you will get multiple prefixes.
All \Yquant{} shapes have the anchors available you would typically expect from a \TikZ{} shape of the given outline.
Before version~0.1.2, \Yquant{} shapes needed to provide a \texttt{circuit} anchor and projection anchors.
@@ -786,9 +921,6 @@ IndexSingle = ?number? | ( [ ?number? ], "-", [ ?number? ] );
\item Remove the clipping paths stored so far on this register, apart from the clipping on the last gate (which will be needed again if this was not the end of the circuit).
\end{itemize}
\end{itemize}
-
-% The current version of \Yquant{} does not implement subcircuits yet.
-% However, this is planned in a future version; by naming a subcircuit, all named operations inside should then also become available (prefixed by the subcircuit's name).
\section{Reference: Gates and operations}\label{sec:gates}
This section lists all operations \Yquant{} currently understands.
@@ -943,7 +1075,12 @@ IndexSingle = ?number? | ( [ ?number? ], "-", [ ?number? ] );
Names are case\hyp insensitive.
The register can be made into a vector register by specifying \texttt{<len>} (default \tex!1!).
- \emph{Possible attributes:} none
+ \clearpage
+ \emph{Possible attributes:}
+ \begin{itemize}
+ \item \yquant![out]! or \yquant![ancilla]! (required in subcircuits) \\
+ \emph{see \gate{qubit}}
+ \end{itemize}
\subsection{\texorpdfstring{\yquant!not!}{not}}\label{gate:not}
Syntax: \yquant!not <target> | <pcontrol> ~ <ncontrol>;! \\
@@ -994,6 +1131,21 @@ IndexSingle = ?number? | ( [ ?number? ], "-", [ ?number? ] );
\begin{itemize}
\item \yquant![after=<regname>]! \\
If given, the register will start not at the left of the circuit but instead at the position at which the last gate in the register \texttt{<regname>} ended.
+
+ This attribute may not be given in combination with \yquant![in]! or \yquant![inout]!.
+ \item \yquant![in]!, \yquant![out]!, \yquant![inout]!, or \yquant![ancilla]! \\
+ Default: \yquant![ancilla]! for top\hyp level circuits (do not change there); \yquant![inout]! for subcircuits.
+
+ Determines how a subcircuit interacts with its parent circuit.
+
+ Registers declared with the \yquant![ancilla]! attribute are available only to the subcircuit; they cannot be connected to an outside wire.
+
+ Registers declared with the \yquant![in]! or \yquant![inout]! attribute will expect an outer wire of the same type to be present and will then be identical with this outer wire.
+ Any changes applied to the wire within the subcircuit automatically also happen on the associated outer wire.
+ If the attribute is \yquant![in]!, the wire will automatically be discarded at the end of the subcircuit (and hence also in the outer circuit, where it may be re\hyp initialized).
+ This is different from applying the \gate{discard} gate in that the wire will still extend until the end of the subcircuit and may thus receive proper \gate{output}s.
+
+ Registers declared with the \yquant![out]! attribute will expect a discarded outer wire to be present, which will be initialized to a \texttt{qubit} at the beginning of the subcircuit, and from then on be identical with the outer wire.
\item \yquant![value=<value>]! \\
Denotes the label that is printed to the left of the wire.
If the value is omitted, the default is used (\style{/yquant/register/default name}, preinitialized to \tex!\regidx!).
@@ -1044,6 +1196,36 @@ IndexSingle = ?number? | ( [ ?number? ], "-", [ ?number? ] );
\emph{Possible attributes:} none
+ \subsection{\texorpdfstring{\yquant!subcircuit!}{subcircuit}}\label{gate:subcircuit}
+ Syntax: \yquant!subcircuit <target>;! \\
+ This is a subcircuit gate which inserts independent quantum circuits at the current position within the circuit.
+ It may span multiple registers, but is never split into contiguous slices.
+ It allows for controls and may change the type of any target involved, depending on the particular subcircuit.
+ The style \style{/yquant/operators/every subcircuit} is installed.
+
+ \emph{Possible attributes:}
+ \begin{itemize}
+ \item \yquant!value=<subcircuit>! (required) \\
+ Denotes the content of the subcircuit.
+ It is specified in the usual syntax of \Yquant.
+ Note that, regardless of the outer environment, a subcircuit always implicitly uses the unstarred form, i.e., you must declare every register explicitly before its first usage.
+ This is to make sure that the interface of the circuit, i.e., which registers are taken as input and/or output parameters and in which order, is not accidentally mistaken.
+
+ The mapping between input and output registers is trivial for single\hyp qubit uses.
+ For multi\hyp qubit uses, it works in the following way---in short, it matches in visual order.
+ You declare input and output registers by using the appropriate attributes on the \gate{qubit}, \gate{cbit}, \gate{qubits} (or even \gate{nobit}) gates.
+ The list of all non\hyp ancillas, from the topmost to the bottom\hyp most, forms the list of parameter registers of the subcircuit.
+ This is exactly the number of registers that must be supplied within one multi\hyp qubit target.
+ Also within the multi\hyp qubit target, we sort all registers from the topmost to the bottom\hyp most (in the order as they visually appear, not the order in which they are entered).
+ Those two lists of equal length are then mapped $1:1$ to each other.
+ Intermixing with ancillas is possible at every position and will lead to a vertical shift of the wires, until all registers, inner and outer, can be displayed flawlessly.
+
+ As subcircuits follow the same rules as ordinary circuits, it is possible to mix them with arbitrary \TeX{} code, and also to access named gates within the subcircuit---but note that named gates in the outer circuit cannot be accessed (at least unless you play with the \texttt{name prefix} key in \TikZ).
+ In order to access inner nodes from the outer circuit, the subcircuit itself must be named; the inner nodes are then prefixed by the name of the subcircuit and a dash.
+
+ It is possible to nest subcircuits arbitrarily.
+ \end{itemize}
+
\subsection{\texorpdfstring{\yquant!swap!}{swap}}\label{gate:swap}
Syntax: \yquant!swap <targets> | <pcontrol> ~ <ncontrol>;! \\
This is the two\hyp qubit \textsc{swap} gate $\ketbra{00}{00} + \ketbra{01}{10} + \ketbra{10}{01} + \ketbra{11}{11}$ that exchanges two qubits.
@@ -1120,6 +1302,8 @@ qubit {$\ket{<name>_{\idx}}$} <name>[<len>];
\end{minted}
in the preamble, as is done here.
+ Note that since version~0.3, \Yquant{} supports the \pkg{qasm} syntax, see \cref{sec:foreign:qasm}
+
\begin{example}[test1 (create an EPR pair)]
\begin{codeexample}
\begin{tikzpicture}
@@ -2201,7 +2385,7 @@ $=$
\node[inner, anchor=east] at (a-3 -| u.east) {\smash{$y \oplus f(x)$}};
\end{tikzpicture}
\end{codeexample*}
- There is no simple way to draw \emph{within} a gate, though this is probably something that will be easier using subcircuits (planned feature).
+ There is no simple way to draw \emph{within} a gate, unless this gate is a proper quantum circuit itself.
Instead, here the intricate parts were reproduced using \TikZ: first, we make sure we assign a name to every relevant coordinate.
Then we use some \TikZ{} styles to draw the braces and nodes at the intersection of these coordinates.
Here, we also make use of the \texttt{moveto} decoration transformation that comes with \Yquant{} and that allows to enlarge the braces slightly for a good overall appearance.
@@ -2481,7 +2665,7 @@ $=$
\end{yquant}
\end{tikzpicture}
\end{codeexample*}
- While here, we opted for the most logical choice to name the declaration of the register, a name put to any operation on the desired register would also serve the purpose.
+ While here, we opted for the most logical choice to name the declaration of the register, a name put to any operation on the desired register would also serve the purpose (as long as this operation is vertically symmetrical, which subcircuits may not be).
\end{example}
\clearpage
@@ -2646,32 +2830,51 @@ $=$
draw, inner sep=6pt, "reversed c-\textsc{not}"] {};
\end{tikzpicture}
\end{codeexample*}
+ In this case, since version~0.2, a subcircuit may provide a similar experience:
+ \begin{codeexample*}
+% \usetikzlibrary{quotes}
+\begin{tikzpicture}
+ \begin{yquant*}
+ h a;
+ cnot b | a;
+ [this subcircuit box style={inner sep=6pt, "reversed c-\textsc{not}"}]
+ subcircuit {
+ qubit {} x;
+ qubit {} y;
+ h -;
+ cnot y | x;
+ h -;
+ } (-);
+ cnot b | a;
+ h b;
+ \end{yquant*}
+\end{tikzpicture}
+ \end{codeexample*}
+ Here, we used the key \style{/yquant/this subcircuit box style} to influence only the style of the subcircuit box itself instead of providing global options that apply to every object in the subcircuit (you wouldn't want the label be assigned to every single gate).
\end{example}
\clearpage
\begin{example}
\begin{codeexample*}
-% \usetikzlibrary{quotes, backgrounds}
+% \usetikzlibrary{quotes}
\begin{tikzpicture}
\begin{yquant*}
h a;
- [name=left]
- cnot b | a;
- cnot a | b;
- [name=right]
- cnot b | a;
+ [this subcircuit box style={draw, dashed, rounded corners, fill=blue!20, inner xsep=6pt, inner ysep=10pt, "\textsc{swap}" below}, register/default name=]
+ subcircuit {
+ qubit a;
+ qubit b;
+ cnot b | a;
+ cnot a | b;
+ cnot b | a;
+ } (a-b);
h b;
\end{yquant*}
- \scoped[on background layer]
- \node[fit=(left-0) (left-p0) (right-0) (right-p0),
- draw, dashed, rounded corners, fill=blue!20,
- inner xsep=6pt, inner ysep=10pt,
- "\textsc{swap}" below] {};
\end{tikzpicture}
\end{codeexample*}
- In this example, we need to refer to names, but want to fill the background before those nodes are actually available.
- Hence, we use the layering mechanism of \TikZ{} and put the node on the background layer.
- Alternatively, we could have drawn on top and used opacity to still make visible what is behind; but in general, whenever you can avoid to use opacities, do avoid it; it adds overhead at the renderer and may give sub\hyp optimal result when printing since the viewer has to reduce all elements to non\hyp overlapping parts.
+ Since version~0.2, fully enclosing a bunch of operations (with no controls extending to some inner component) is possible by means of \gate{subcircuit}s.
+ Before, this had to be done using named operations and layers.
+ Note that here we used the style \style{/yquant/this subcircuit box style} to assign a styling that only applies to the box containing the subcircuit, but not to the inner gates---which would have happened had we just given the arguments to the subcircuit directly.
\end{example}
\Yquant{} does not support the fancy nearest\hyp neighbor swap gate that \pkg{quantikz} has.
@@ -2726,30 +2929,97 @@ $=$
\end{example}
\endgroup
+ \section{Foreign language support}
+ \Yquant{} is built in various modules, so that it is not hard to use the quantum circuit rendering backend, but expose a different language frontend.
+ Since version~0.3, \Yquant{} not only understands its own language, but also others.
+
+ \subsection{qasm}
+ By saying \tex!\useyquantlanguage{qasm}! in the preamble after loading \Yquant{} itself, the parser for \pkg{qasm} (not OpenQASM) is loaded.
+ It provides the environment \tex!qasm! as well as the macro \tex!\qasmimport!, which works similarly to \tex!\yquantimport! (but does not accept additional options).
+
+ \subsubsection{Language specification}
+ The \pkg{qasm} language is not formally defined, but an overview is provided at \href{https://web.archive.org/web/20050410022847/https://www.media.mit.edu/quanta/qasm2circ/#spec}{the archived website of \texttt{qasm2circ}}.
+ The \Yquant{} implementation is designed to be compatible with the original parser, with the following exceptions:
+ \begin{itemize}
+ \item In \pkg{qasm}, lines could begin in an arbitrary manner; the first whitespace followed by the first valid command were then the instruction.
+ Contrary to this, \Yquant's parser always expects a line to start with a valid gate (preceded by arbitrary whitespaces), a comment, or to be empty.
+ \item In \pkg{qasm}, user\hyp defined gates will be drawn in a box unless they contain the text \texttt{\textbackslash dmeter}, and they will be recognized as measurement gates if they contain \texttt{\textbackslash meter} or \texttt{\textbackslash dmeter}.
+ Contrary to this, \Yquant's parser expect the gates to \emph{start} with one of the \emph{macros} \tex!\meter!, \tex!\dmeter!, or \tex!\dmeterwide!.
+ Using these macros \emph{within} the content of a gate does not make sense from the point of view that in \Yquant, gates are nodes with shapes, so either the full gate has a particular shape or it does not, but not only parts of it.
+ \item The \texttt{space} gate is supposed to produce a horizontal whitespace without a gate.
+ In \Yquant's implementation, you have to discard the wire if you want to reproduce this behavior; \texttt{space} and \texttt{nop} are equivalent.
+ \end{itemize}
+
+ The default \pkg{qasm} style defines several macros that can be used in gates.
+ \Yquant{} makes \tex!\m! (matrix; requires \pkg{amsmath}) and \tex!\txt! (switch to text mode) available within the \pkg{qasm} environment.
+
+ Do not expect \Yquant's output to match the one of \pkg{qasm} exactly.
+ \Yquant{} is not grid based, so that commands such as \texttt{nop} don't even make sense.
+ They are implemented for compatibility reasons and will produce a fixed horizontal space of the operator minimum width plus one separation, which might or might not be accurate.
+
+ Note that whatever you write between \tex!\begin{qasm}! and \tex!\end{qasm}! is essentially treated as verbatim; only where the specification says so (in the definition of a new gate and in the optional third command to the register definition), it is interpreted as \TeX{} markup.
+ Consequently, in \pkg{beamer}, any frame containing these environments must be given the \texttt{verbatim} option.
+
+ \subsubsection{Configuration}
+ Loading the \pkg{qasm} language interpreter will define several new configuration keys.
+ For all the gates, it will use the keys defined in \cref{sec:config}, and it additionally provides the following:
+
+ \begin{option}{operators/every s}!/yquant/operators/every box!
+ This style is installed for every \texttt{s} operator.
+ \end{option}
+
+ \begin{option}{operators/every t}!/yquant/operators/every box!
+ This style is installed for every \texttt{t} operator.
+ \end{option}
+
+ \begin{option}{operators/every utwo}!/yquant/operators/every box!
+ This style is installed for every \texttt{Utwo} operator.
+ \end{option}
+
+ \begin{option*}{qasm}{zero}!\qasm@ket0!
+ The content of this macro is used as the initialization content whenever the \texttt{zero} gate is invoked.
+ \end{option*}
+
+ \begin{option*}{qasm}{register/default qubit name}!\qasm@ket{#1}!
+ This macro is invoked with a single parameter (the name of a qubit register) and gives back what is printed as the name of the register (will be in math mode automatically).
+ \end{option*}
+
+ \begin{option*}{qasm}{register/default qubit name value}!\qasm@ket{#1} = \qasm@ket{#2}!
+ This macro is invoked with two parameters (the name of a qubit register and its initial value) and gives back what is printed as the name of the register (will be in math mode automatically).
+ \end{option*}
+
+ \subsubsection{Examples}
+ The unaltered\footnote{Only in \texttt{test14.qasm}, \tex!\cal! was replaced by \tex!\symcal!---and this is only necessary as this manual was set with \pkg{unicode-math}. In traditional mode, even this would not be necessary.} \texttt{.qasm} files provided from \href{https://www.media.mit.edu/quanta/qasm2circ/}{the \texttt{qasm2circ} page} were stored in the subfolder \texttt{qasm} relative to this manual's \TeX{} file.
+ The following command is then used to print all of them:
+ \begin{minted}{tex}
+% preamble:
+% \usepackage{yquant,import}
+% \useyquantlanguage{qasm}
+\def\yquantimportpath{qasm/}
+\foreach \circuitno in {1, ..., 18} {
+ \paragraph{Circuit \#\circuitno}
+ \begin{center}
+ \qasmimport{test\circuitno.qasm}
+ \end{center}
+}
+ \end{minted}
+
+ \def\yquantimportpath{qasm/}
+ \foreach \circuitno in {1, ..., 18} {
+ \paragraph{Circuit \#\circuitno}\leavevmode\nopagebreak\par\nopagebreak
+ \begin{adjustbox}{center}
+ \qasmimport{test\circuitno.qasm}
+ \end{adjustbox}
+ }
+
\section{Wishlist}
This section contains some thoughts on future improvements and features.
\begin{itemize}
- \item Subcircuit support. \\
- A subcircuit is a quantum circuit on its own that is put into a box within other circuits.
- It has input, output, and also internal wires.
- Subcircuits may be declared on\hyp the\hyp fly if they are used only once, but there should also be the option to globally declare subcircuits and use them at any time.
- As with ordinary quantum circuits, everything in a subcircuit should be allowed to have a name.
- If the subcircuit itself is then also named, those inner names should be made available (prefixed with the subcircuit's name), to the outer circuit.
- Subcircuits may also contain subcircuits.
- While the number of input registers should match, a subcircuit may have more, less or different output registers.
- The language needs to be extended to somehow allow for this.
- Subcircuits will typically be multi\hyp qubit elements that, at least if internal wires are used, may significantly increase the required height for an individual register.
- Hence, the internal height calculations must be adapted.
- This will be particularly problematic if the subcircuit targets non\hyp adjacent wires.
- \item Support for other languages. \\
- It would be particularly nice to introduce a language mode.
- While the \Yquant{} language will always provide the set of everything \Yquant{} can do at the moment, it would be nice if \Yquant{} can automatically detect \texttt{OpenQASM} and parse its content correctly.
- \texttt{OpenQASM} is much more limited than \Yquant{} and, being a language designed for actual execution of the circuits, does not provide means to change visual appearance.
- Probably some \Yquant{} additions to \texttt{OpenQASM} would be ok, as long as they only complement the original language?
- Also, \texttt{OpenQASM} support would probably require subcircuits.
-
- Another nice feature would be to support \pkg{qasm}.
- Also here, the feature set is much more limited and it would probably be hard to implement an automatic detection, the user would have to specify the language by hand.
+ \item Support for more other languages. \\
+ Since version~0.3, \Yquant{} understands \pkg{qasm}.
+ It would be nice if \Yquant{} could also understand \texttt{OpenQASM} correctly.
+ The way \texttt{OpenQASM} treats operations is a bit different from \Yquant{} and also \pkg{qasm}.
+ Some machinery would be required to automatically carry out transversal gates; apart from that everything should be available in \Yquant.
\item Vertical layout. \\
Sometimes, long quantum circuits on a portrait page can be better represented in a vertical layout.
Also if lots of explanations are to be added, this becomes problematic in the horizontal version.
@@ -2773,5 +3043,15 @@ $=$
\Yquant{} now also properly draws non\hyp contiguous multi\hyp qubit operations. \\
New gate: \gate{correlate}.
Various bug fixes.
+
+ \subsection{2020-06-02: Version 0.2}
+ Introduce \gate{subcircuit}; required rewriting how \Yquant{} internally positions vertically.
+ Provide simple macros to load circuits (or parts) from a file and to declare own custom gates.
+
+ \subsection{2020-06-07: Version 0.2.1}
+ Introduce a macro to declare a lightweight custom gate, which is only a single box with custom content.
+
+ \subsection{2020-06-13: Version 0.3}
+ Introduce support for the \pkg{qasm} language.
%END_FOLD
\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/yquant/tex/yquant-circuit.tex b/graphics/pgf/contrib/yquant/tex/yquant-circuit.tex
index 2117e7f440..2c9e114bdc 100644
--- a/graphics/pgf/contrib/yquant/tex/yquant-circuit.tex
+++ b/graphics/pgf/contrib/yquant/tex/yquant-circuit.tex
@@ -1,19 +1,13 @@
% BEGIN_FOLD Drawing wires
-% a bit faster than nested \@firstoftwo/\@secondoftwo
-% note \@thirdofthree is defined in the latex kernel already.
-\long\def\@firstofthree#1#2#3{#1}%
-\long\def\@secondofthree#1#2#3{#2}%
-\long\def\@firstoffour#1#2#3#4{#1}%
-\long\def\@secondoffour#1#2#3#4{#2}%
-\long\def\@thirdoffour#1#2#3#4{#3}%
-\long\def\@fourthoffour#1#2#3#4{#4}%
-\long\def\@thirdandfourthoffour#1#2#3#4{#3#4}%
-
% extends the wire of register #1. Assumes a node called yquantbox is set up, and the \pgfshapeclippathhorzresult was set up appropriately for this node.
-\protected\def\yquant@circuit@extendwire#1{%
+\protected\def\yquant@circuit@extendwire#1#2{%
\begingroup%
- \pgfpointanchor{yquantbox}{center}%
- \edef\wirexpos{\the\pgf@x}%
+ \ifx*#2%
+ \edef\wirexpos{\the\dimen0}%
+ \else%
+ \pgfpointanchor{yquantbox}{#2}%
+ \edef\wirexpos{\the\pgf@x}%
+ \fi%
\yquant@register@get@typeywire{#1}\wiretype\wireypos\wirelast%
\edef\wirexprevpos{\expandafter\@firstoffour\wirelast}%
\ifnum\wiretype=\yquant@register@type@none%
@@ -29,23 +23,46 @@
{\unexpanded\expandafter\expandafter\expandafter{%
\expandafter\@thirdandfourthoffour\wirelast%
}%
- }
+ }%
{\unexpanded\expandafter{\pgfshapeclippathhorzresult}}%
}%
\fi%
\endgroup%
}
-% finishes the wire of registers 1 to #1 until x position \yquant@env@end@xpos
+% finishes the wires of all registers until x position #1
\protected\def\yquant@circuit@endwires#1{%
- \yquant@for \yquant@circuit@endwires@i := 1 to #1 {
- \yquant@draw@wire\yquant@circuit@endwires@i\yquant@env@end@xpos%
+ \ifcsname\yquant@prefix xshift\endcsname%
+ \dimdef\yquant@env@end@xpos{#1+\csname\yquant@prefix xshift\endcsname}%
+ \else%
+ \def\yquant@env@end@xpos{#1}%
+ \fi%
+ \yquant@for \yquant@circuit@endwires@i := 1 to \csname\yquant@prefix registers\endcsname {%
+ % we only extend the wire if it does not come from the outer circuit - this one would be responsible for the extension.
+ \ifcsname\yquant@prefix registermap@\yquant@circuit@endwires@i\endcsname%
+ \xifinlistcs\yquant@circuit@endwires@i{\yquant@prefix inonly}{%
+ % however, the wire is to be discarded after this circuit
+ \edef\storedleft{\the\pgf@picminx}%
+ \yquant@draw@wire\yquant@circuit@endwires@i1%
+ \global\pgf@picminx=\storedleft%
+ \yquant@register@set@type\yquant@circuit@endwires@i\yquant@register@type@none%
+ }\relax%
+ \else%
+ \yquant@draw@wire\yquant@circuit@endwires@i1%
+ \fi%
}%
}
% outputs the wire according to its previous instructions and prepares for a change in the wire style
\protected\def\yquant@circuit@flushwire#1{%
- \yquant@draw@wire{#1}{}%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ % make sure drawing the wire does not affect our left bounding box position
+ \edef\storedleft{\the\pgf@picminx}%
+ \yquant@draw@wire{#1}0%
+ \global\pgf@picminx=\storedleft%
+ \else%
+ \yquant@draw@wire{#1}0%
+ \fi%
\begingroup%
\yquant@register@get@lastwire{#1}\wirelast%
\yquant@register@set@lastwire{#1}{%
@@ -156,6 +173,8 @@
\let\yquant@circuit@operator@mintarget=\yquant@register@get@ids@min%
\let\yquant@circuit@operator@maxtarget=\yquant@register@get@ids@max%
\let\yquant@circuit@operator@numtarget=\yquant@register@get@ids@count%
+ % make sure to reset this for subcircuits
+ \yquant@circuit@operator@hasControlsfalse%
% For the targets, multi-qubit registers might have been allowed, but certainly not for
% the controls!
\yquant@register@get@allowmultifalse%
@@ -198,92 +217,64 @@
}%
}
-% BEGIN_FOLD Subcircuit-related
-% Does all necessary calculations for inserting a sub-circuit
-% #1: subcircuit code (should start with \begin{yquant})
-%\newbox\yquant@circuit@subcircuit@box
-%\protected\long\def\yquant@circuit@subcircuit#1{%
-% % We need to place the inner circuit at the correct position; but for this, we need
-% % its extent. For this, we first place it within a box. But this box is then
-% % integrated seamlessly, in particular, named nodes must be re-placed. We use a lot of
-% % inspiration from pgf's matrix capabilities.
-% % First, we anticipate the macro that is used by our subcircuit to store the node
-% % names.
-% \edef\yquant@circuit@subcircuit@nodelist{yquant@env\the\numexpr\yquant@env+1\relax @circuit@subcircuit@nodelist}%
-% \global\cslet\yquant@circuit@subcircuit@nodelist\empty%
-% \pgfinterruptboundingbox%
-% % we make sure there are no conflicts by prefixing any named nodes in any case.
-% \ifx\yquant@lang@attr@name\empty%
-% \pgfkeys{/tikz/name prefix/.expanded={sub\yquant@prefix-}}%
-% \else%
-% \pgfkeys{/tikz/name prefix/.expanded={\pgfkeysvalueof{/tikz/name prefix}\yquant@lang@attr@name-}}%
-% \fi%
-% \let\pgf@nodecallback=\yquant@circuit@subcircuit@nodecallback%
-% \pgftransformreset%
-% \global\setbox\yquant@circuit@subcircuit@box=\hbox{{%
-% % bypass 'overlay' option
-% \pgf@relevantforpicturesizetrue%
-% \pgfsys@beginpicture%
-% #1%
-% \pgfsys@endpicture%
-% \ifdim\pgf@picmaxx=-16000pt %
-% \global\pgf@picmaxx=0pt %
-% \global\pgf@picminx=0pt %
-% \global\pgf@picmaxy=0pt %
-% \global\pgf@picminy=0pt %
-% \fi%
-% }}%
-% \wd\yquant@circuit@subcircuit@box=0pt %
-% \global\setbox\yquant@circuit@subcircuit@box=\hbox{{%
-% \hskip-\pgf@picminx%
-% \unhbox\yquant@circuit@subcircuit@box%
-% \hskip\pgf@picmaxx%
-% }}%
-% \ht\yquant@circuit@subcircuit@box=\pgf@picmaxy%
-% \dp\yquant@circuit@subcircuit@box=-\pgf@picminy%
-% % We need to remember the offset for the coordinate shifts
-% \dimgdef\yquant@circuit@subcircuit@shiftx{-\pgf@picminx}%
-% \endpgfinterruptboundingbox%
-% \ifx\yquant@lang@attr@name\empty%
-% % However, if the outer node was not named, no access to the inner nodes is desired,
-% % so we delete all nodes again.
-% \def\do##1{%
-% \csgundef{pgf@sh@ns@##1}%
-% \csgundef{pgf@sh@np@##1}%
-% \csgundef{pgf@sh@nt@##1}%
-% \csgundef{pgf@sh@pi@##1}%
-% \csgundef{pgf@sh@ma@##1}%
-% }%
-% \dolistcsloop\yquant@circuit@subcircuit@nodelist%
-% \global\cslet\yquant@circuit@subcircuit@nodelist\empty%
-% \else%
-% % But now access is desired, and probably we are deeply nested. Append the sublist to ours, so that our parent can re-map them again.
-% \ifx\pgf@nodecallback\yquant@circuit@subcircuit@nodecallback%
-% \csxappto{\yquant@prefix circuit@subcircuit@nodelist}%
-% {\csname\yquant@circuit@subcircuit@nodelist\endcsname}%
-% \fi%
-% \fi%
-%}
-%
-%\def\yquant@circuit@subcircuit@nodecallback#1{%
-% \listcsxadd{\yquant@prefix circuit@subcircuit@nodelist}{#1}%
-%}
-
-%\protected\def\yquant@circuit@subcircuit@shiftnodes#1{%
-% \expandafter\unless\expandafter\ifx\csname\yquant@circuit@subcircuit@nodelist\endcsname\empty{%
-% \pgftransformreset%
-% \pgf@process{\pgfpointanchor{#1}{text}}%
-% \edef\yquant@circuit@subcircuit@offset{%
-% \noexpand\pgfqpoint{\the\dimexpr\pgf@x+\yquant@circuit@subcircuit@shiftx\relax}%
-% {\the\dimexpr\pgf@y\relax}%
-% }%
-% \def\do##1{%
-% \pgf@shift@node{##1}\yquant@circuit@subcircuit@offset%
-% }%
-% \dolistcsloop\yquant@circuit@subcircuit@nodelist%
-% }\fi%
-%}
-% END_FOLD
+% creates a subcircuit. Parameter registers must be filled in \yquant@circuit@subcircuit@params.
+\protected\def\yquant@circuit@subcircuit#1{%
+ \numdef\yquant@circuit@subcircuit@id{\yquant@env+1}%
+ \listcsxadd{\yquant@prefix subcircuits}{\yquant@circuit@subcircuit@id}%
+ \begingroup%
+ \tikzset{/yquant/every operator, #1,%
+ /yquant/this operator, /yquant/operators/this subcircuit box/.style={}}%
+ % execute the subcircuit
+ \expandafter%
+ \yquant@env@begin@noarg%
+ \yquant@lang@attr@value% this contains the subcircuit's content
+ \expandafter\unless\expandafter\ifx\csname\yquant@prefix parameters\endcsname\empty%
+ \PackageError{yquant.sty}{Invalid subcircuit parameters count}%
+ {Too many parameters given.}%
+ \fi%
+ \global\cslet{\yquant@prefix parameters}\yquant@circuit@subcircuit@param%
+ \dimen0=\yquant@config@register@sep%
+ % the first input must count all its height plus everything that is above it in the subcircuit as the height of the outer wire it is attached to
+ \edef\firstinput{%
+ \expandafter\expandafter\expandafter%
+ \@firstoftwo\csname\yquant@prefix firstinput\endcsname%
+ }%
+ \edef\outerfirst{%
+ \expandafter\expandafter\expandafter%
+ \@secondoftwo\csname\yquant@prefix firstinput\endcsname%
+ }%
+ \dimen2=\yquant@register@get@height\firstinput\relax%
+ \ifnum\firstinput>1 %
+ \yquant@fordown \i := \the\numexpr\firstinput-1\relax downto 1 {%
+ \advance\dimen2 by \dimexpr\yquant@register@get@height\i+%
+ \yquant@register@get@depth\i+\dimen0\relax%
+ }%
+ \fi%
+ % the last input must count all its depth plus everything that is below it in the subcircuit as the depth of the outer wire it is attached to
+ \edef\lastinput{%
+ \expandafter\expandafter\expandafter%
+ \@firstoftwo\csname\yquant@prefix lastinput\endcsname%
+ }%
+ \edef\outerlast{%
+ \expandafter\expandafter\expandafter%
+ \@secondoftwo\csname\yquant@prefix lastinput\endcsname%
+ }%
+ \dimen4=\yquant@register@get@depth\lastinput\relax%
+ \ifnum\lastinput<\csname\yquant@prefix registers\endcsname%
+ \yquant@for \i := \the\numexpr\lastinput+1\relax to \csname\yquant@prefix registers\endcsname {%
+ \advance\dimen4 by \dimexpr\yquant@register@get@height\i+%
+ \yquant@register@get@depth\i+\dimen0\relax%
+ }%
+ \fi%
+ \begingroup%
+ \let\yquant@prefix=\yquant@parent%
+ \yquant@register@update@height\outerfirst{\the\dimen2}%
+ \yquant@register@update@depth\outerlast{\the\dimen4}%
+ \endgroup%
+ % we cannot make more precise statements about the inputs in between - for example, if input 1 is mapped to outer wire 1 and input 2 to outer wire 5, how to split the heights/depth appropriately between the outer wires 1-5?
+ \yquant@env@end%
+ \endgroup%
+}
% BEGIN_FOLD Helpers for operator callbacks
% turn a wire into a different type
@@ -358,67 +349,42 @@
}
\protected\long\def\yquant@circuit@output@do#1#2#3{%
- % this must only be called at the end of an environment, where \yquant@env@end@xpos is
- % set up properly!
+ % this must only be called at the end of an environment, where \yquant@env@end@xpos is set up properly! It not only has to provide the appropriate drawing commands for later, but also has to measure the actual width of the outputs, which is required for proper subcircuit positioning.
\def\do##1{%
- \ifyquant@firsttoken\yquant@register@multi{##1}{%
- \csxappto{\yquant@prefix draw}%
- {\noexpand\yquant@circuit@output@do@multi%
- \yquant@circuit@output@do@multi@@extract##1{\unexpanded{#3}}}%
- }{%
- \csgappto{\yquant@prefix draw}%
- {\yquant@circuit@output@do@single{##1}{#3}}%
- }%
- }%
- \csgappto{\yquant@prefix draw}{%
- \yquant@circuit@output@group{#2}%
- }
- % \dolistloop will carry out one \expandafter on the argument; but this expansion step
- % is already done. If #1 starts with \yquant@register@multi, this will be expanded once
- % despite \protected, so insert some expand-to-nothing token first.
- \dolistloop{\empty#1}%
- \csgappto{\yquant@prefix draw}{%
- \yquant@circuit@output@endgroup%
+ \pgfinterruptboundingbox%
+ \yquant@env@virtualize@path%
+ \ifyquant@firsttoken\yquant@register@multi{##1}{%
+ \csxappto{\yquant@prefix draw}%
+ {\yquant@draw@output@multi%
+ \yquant@circuit@output@do@multi@@extract##1{\unexpanded{#3}}}%
+ \yquant@draw@@output@multi{#3}%
+ }{%
+ \csgappto{\yquant@prefix draw}%
+ {\yquant@draw@output@single{##1}{#3}}%
+ \yquant@draw@@output@single{##1}{#3}%
+ \yquant@register@update@height{##1}{\the\pgf@picmaxy}%
+ \yquant@register@update@depth{##1}{\the\dimexpr-\pgf@picminy\relax}%
+ }%
+ \ifdim\pgf@picmaxx>\csname\yquant@prefix xmax\endcsname%
+ \csxdef{\yquant@prefix xmax}{\the\pgf@picmaxx}%
+ \fi%
+ \endpgfinterruptboundingbox%
}%
+ \yquant@draw@output@group{#2}%
+ \csgappto{\yquant@prefix draw}{%
+ \yquant@draw@output@group{#2}%
+ }%
+ % \dolistloop will carry out one \expandafter on the argument; but this expansion step
+ % is already done. If #1 starts with \yquant@register@multi, this will be expanded once
+ % despite \protected, so insert some expand-to-nothing token first.
+ \dolistloop{\empty#1}%
+ \csgappto{\yquant@prefix draw}{%
+ \yquant@draw@output@endgroup%
+ }%
+ \yquant@draw@output@endgroup%
}
\def\yquant@circuit@output@do@multi@@extract#1#2#3#4#5{%
{#2}{#3}{#5}%
}
-
-\protected\long\def\yquant@circuit@output@group#1{%
- \begingroup%
- \def\idx{0}%
- \yquant@set{#1}%
-}
-
-\let\yquant@circuit@output@endgroup=\endgroup%
-
-\long\def\yquant@circuit@output@do@single#1#2{%
- \path
- (\yquant@env@end@xpos, \yquant@register@get@y{#1})
- node[/yquant/every output,
- /yquant/every \ifcase\yquant@register@get@type{#1} nobit\or qubit\or cbit\or qubits\fi\space output] {#2};
- \numdef\idx{\idx+1}%
-}
-
-\long\def\yquant@circuit@output@do@multi#1#2#3#4{%
- % extremely similar to \yquant@draw@multiinit
- \@tempdima=-.5\dimexpr\yquant@config@register@sep\relax%
- \dimdef\yquant@draw@multiinit@@min{\yquant@register@get@y{#1}-\@tempdima}%
- \dimdef\yquant@draw@multiinit@@max{\yquant@register@get@y{#2}+\@tempdima}%
- \dimdef\yquant@draw@multiinit@@total{%
- \yquant@draw@multiinit@@max-\yquant@draw@multiinit@@min%
- }%
- \def\pgfdecorationsegmentaspect{0}%
- \let\yquant@register@multi@contiguous=\yquant@draw@multiinit@contiguous%
- \let\pgfdecorationsegmentfromto=\empty%
- #3%
- \edef\pgfdecorationsegmentfromto{\expandafter\@gobble\pgfdecorationsegmentfromto}%
- \path[/yquant/every multi output]
- (\yquant@env@end@xpos, \yquant@draw@multiinit@@min) --
- (\yquant@env@end@xpos, \yquant@draw@multiinit@@max)
- node {#4};%
- \numdef\idx{\idx+1}%
-}
% END_FOLD \ No newline at end of file
diff --git a/graphics/pgf/contrib/yquant/tex/yquant-config.tex b/graphics/pgf/contrib/yquant/tex/yquant-config.tex
index c1a74fecb4..a6765d1485 100644
--- a/graphics/pgf/contrib/yquant/tex/yquant-config.tex
+++ b/graphics/pgf/contrib/yquant/tex/yquant-config.tex
@@ -1,145 +1,151 @@
-\pgfdeclaremetadecoration{tikz@internal}{pre}{
- \state{pre}[width=\pgfkeysvalueof{/pgf/decoration/pre length}+\pgfkeysvalueof{/pgf/decoration/post length}, next state=main]{
- \appto\tikz@dec@shift{\pgftransformxshift{-\pgfkeysvalueof{/pgf/decoration/post length}}}
- \tikz@dec@trans
- \decoration{\pgfkeysvalueof{/pgf/decoration/pre}}
- }
- \state{main}[width=\pgfmetadecoratedremainingdistance, next state=final]{
- \tikz@dec@trans
- \decoration{\tikz@decoration@name}
- }
- \state{final}{
- \tikz@dec@trans
- \decoration{\pgfkeysvalueof{/pgf/decoration/post}}
- }
+\pgfdeclaremetadecoration{tikz@internal}{pre}{%
+ \state{pre}[width=\pgfkeysvalueof{/pgf/decoration/pre length}+\pgfkeysvalueof{/pgf/decoration/post length}, next state=main]{%
+ \appto\tikz@dec@shift{\pgftransformxshift{-\pgfkeysvalueof{/pgf/decoration/post length}}}%
+ \tikz@dec@trans%
+ \decoration{\pgfkeysvalueof{/pgf/decoration/pre}}%
+ }%
+ \state{main}[width=\pgfmetadecoratedremainingdistance, next state=final]{%
+ \tikz@dec@trans%
+ \decoration{\tikz@decoration@name}%
+ }%
+ \state{final}{%
+ \tikz@dec@trans%
+ \decoration{\pgfkeysvalueof{/pgf/decoration/post}}%
+ }%
}
-\pgfqkeys{/yquant}{
+\pgfqkeys{/yquant}{%
every circuit/.style={%
every node/.prefix style={transform shape},%
every label/.prefix style={transform shape=false}% TODO: no, we don't really want this, but pgf bug #843 requires this if we still want to have `label position` available
- },
+ },%
% register settings
register/default name/.store in=%
- \yquant@config@register@default@name,
+ \yquant@config@register@default@name,%
register/minimum height/.code=%
- {\dimdef\yquant@config@register@minimum@height{#1}},
+ {\dimdef\yquant@config@register@minimum@height{#1}},%
register/separation/.code=%
- {\dimdef\yquant@config@register@sep{#1}},
+ {\dimdef\yquant@config@register@sep{#1}},%
% register label style
every label/.style=%
- {shape=yquant-text, anchor=center, align=right},
+ {shape=yquant-text, anchor=center, align=right},%
every initial label/.style=%
- {anchor=east},
+ {anchor=east},%
every qubit label/.style=%
- {},
+ {},%
every cbit label/.style=%
- {},
+ {},%
every qubits label/.style=%
- {},
+ {},%
every multi label/.style=%
- {shift={(-.075, 0)}, draw, decoration={gapped brace, mirror}, decorate, /yquant/gapped brace/apply shift,
- every node/.append style={shape=yquant-text, anchor=east, align=right, shift={(-.05, 0)}, pos=-1}},
+ {shift={(-.075, 0)}, draw, decoration={gapped brace, mirror}, decorate, /yquant/gapped brace/apply shift,%
+ every node/.append style={shape=yquant-text, anchor=east, align=right, shift={(-.05, 0)}, pos=-1}},%
+ every input label/.style=%
+ {},%
% output label styles
every output/.style=%
- {shape=yquant-text, anchor=west, align=left},
+ {shape=yquant-text, anchor=west, align=left},%
every qubit output/.style=%
- {},
+ {},%
every cbit output/.style=%
- {},
+ {},%
every qubits output/.style=%
- {},
+ {},%
every multi output/.style=%
- {shift={(.075, 0)}, draw, decoration={gapped brace}, decorate, /yquant/gapped brace/apply shift,
- every node/.append style={shape=yquant-text, anchor=west, align=left, shift={(.05, 0)}, pos=-1}},
+ {shift={(.075, 0)}, draw, decoration={gapped brace}, decorate, /yquant/gapped brace/apply shift,%
+ every node/.append style={shape=yquant-text, anchor=west, align=left, shift={(.05, 0)}, pos=-1}},%
% wire style
every wire/.style=%
- {draw},
+ {draw},%
every qubit wire/.style=%
- {},
+ {},%
every cbit wire/.style=%
- {},
+ {},%
every qubits wire/.style=%
- {},
+ {},%
% operator settings
operator/separation/.code=%
- {\dimdef\yquant@config@operator@sep{#1}},
+ {\dimdef\yquant@config@operator@sep{#1}},%
operator/minimum width/.code=%
- {\dimdef\yquant@config@operator@minimum@width{#1}},
+ {\dimdef\yquant@config@operator@minimum@width{#1}},%
operator/multi warning/.is if=%
- yquant@config@operator@multi@warn,
+ yquant@config@operator@multi@warn,%
% operator style: control
every control line/.style=%
- {draw},
+ {draw},%
every control/.style=%
- {shape=yquant-circle, anchor=center, radius=.5mm},
+ {shape=yquant-circle, anchor=center, radius=.5mm},%
every positive control/.style=%
- {fill=black},
+ {fill=black},%
every negative control/.style=%
- {draw},
+ {draw},%
% operator style: main part
every operator/.style=%
- {anchor=center},
+ {anchor=center},%
operator/multi main/.is if=%
- yquant@config@operator@multi@main,
+ yquant@config@operator@multi@main,%
operator/multi as single/.style=%
- {/yquant/every multi line/.style=/yquant/every control line},
+ {/yquant/every multi line/.style=/yquant/every control line},%
every multi line/.style=%
- {draw, decoration={snake, amplitude=.25mm, segment length=5pt}, decorate},
+ {draw, decoration={snake, amplitude=.25mm, segment length=5pt}, decorate},%
% overwriting all styles
this operator/.style=%
- {},
+ {},%
this control/.style=%
- {},
+ {},%
operator style/.style=%
- {/yquant/this operator/.append style={#1}},
+ {/yquant/this operator/.append style={#1}},%
control style/.style=%
- {/yquant/every control line/.append style={#1},
- /yquant/this control/.append style={#1}},
+ {/yquant/every control line/.append style={#1},%
+ /yquant/this control/.append style={#1}},%
style/.style=%
- {/yquant/this operator/.append style={#1},
- /yquant/every control line/.append style={#1},
- /yquant/this control/.append style={#1}},
+ {/yquant/this operator/.append style={#1},%
+ /yquant/every control line/.append style={#1},%
+ /yquant/this control/.append style={#1}},%
% different operator appearances
operators/every box/.style=%
- {shape=yquant-rectangle, draw, align=center, inner xsep=1mm, x radius=2mm, y radius=2.47mm},
- operators/every h/.style=%
- {/yquant/operators/every box},
+ {shape=yquant-rectangle, draw, align=center, inner xsep=1mm, x radius=2mm, y radius=2.47mm},%
+ operators/every subcircuit/.style=%
+ {},%
+ operators/every subcircuit box/.style=%
+ {/yquant/operators/every box},%
+ subcircuit box style/.style=%
+ {/yquant/operators/every subcircuit box/.append style={#1}},%
+ operators/this subcircuit box/.style=%
+ {},%
+ this subcircuit box style/.style=%
+ {/yquant/operators/this subcircuit box/.append style={#1}},%
+ operators/every custom gate/.style=%
+ {/yquant/operators/this subcircuit box/.append style={draw=none, inner sep=0pt},%
+ /yquant/register/default name=},
+ % every h, every x, every y, every z are implicitly defined during gate declaration
operators/every pauli/.style=%
- {/yquant/operators/every box},
- operators/every x/.style=%
- {/yquant/operators/every pauli},
- operators/every y/.style=%
- {/yquant/operators/every pauli},
- operators/every z/.style=%
- {/yquant/operators/every pauli},
-% operators/every subcircuit/.style=%
-% {/yquant/operators/every box, inner ysep=0pt},
+ {/yquant/operators/every box},%
operators/every phase/.style=%
- {shape=yquant-circle, radius=.5mm, fill},
+ {shape=yquant-circle, radius=.5mm, fill},%
operators/every zz/.style=%
- {shape=yquant-circle, radius=.5mm, fill},
+ {shape=yquant-circle, radius=.5mm, fill},%
operators/every xx/.style=%
- {shape=yquant-rectangle, radius=.75mm, draw},
+ {shape=yquant-rectangle, radius=.75mm, draw},%
operators/every slash/.style=%
- {shape=yquant-slash, x radius=.5mm, y radius=.7mm, draw},
+ {shape=yquant-slash, x radius=.5mm, y radius=.7mm, draw},%
operators/every swap/.style=%
- {shape=yquant-swap, radius=.75mm, draw},
+ {shape=yquant-swap, radius=.75mm, draw},%
operators/every not/.style=%
- {shape=yquant-oplus, radius=1.3mm, draw},
+ {shape=yquant-oplus, radius=1.3mm, draw},%
operators/every measure/.style=%
- {shape=yquant-measure, x radius=4mm, y radius=2.5mm, draw},
+ {shape=yquant-measure, x radius=4mm, y radius=2.5mm, draw},%
operators/every measure meter/.style=%
- {draw, -{Latex[length=2.5pt]}},
+ {draw, -{Latex[length=2.5pt]}},%
operators/every dmeter/.style=%
- {shape=yquant-dmeter, x radius=2mm, y radius=2mm, draw},
+ {shape=yquant-dmeter, x radius=2mm, y radius=2mm, draw},%
operators/every barrier/.style=%
- {shape=yquant-line, dashed, draw},
+ {shape=yquant-line, dashed, draw},%
operators/every wave/.style=%
- {shape=yquant-circle, radius=.5mm, fill},
- /pgf/decoration/from to/.store in=\pgfdecorationsegmentfromto,
+ {shape=yquant-circle, radius=.5mm, fill},%
+ /pgf/decoration/from to/.store in=\pgfdecorationsegmentfromto,%
gapped brace/apply shift/.code={%
\let\tikz@timer@line=\yquant@gappedbrace@timer%
- },
+ },%
}
\def\yquant@config@register@default@name{\regidx}
@@ -162,7 +168,7 @@
\ifdim\tikz@time pt=-1pt %
% first set \pgfdecoratedremainingdistance appropriately
\pgfpointdiff\tikz@timer@start\tikz@timer@end%
- \pgfmathsqrt@{\dimexpr\pgf@x*\pgf@x/65536+\pgf@y*\pgf@y/65536\relax\@gobbletwo}
+ \pgfmathsqrt@{\dimexpr\pgf@x*\pgf@x/65536+\pgf@y*\pgf@y/65536\relax\@gobbletwo}%
\pgfdecoratedremainingdistance=\pgfmathresult pt %
% now perform the transformation
\pgf@xc=\pgfdecorationsegmentaspect\pgfdecoratedremainingdistance%
diff --git a/graphics/pgf/contrib/yquant/tex/yquant-draw.tex b/graphics/pgf/contrib/yquant/tex/yquant-draw.tex
index c89eb3ef98..ec4dc80837 100644
--- a/graphics/pgf/contrib/yquant/tex/yquant-draw.tex
+++ b/graphics/pgf/contrib/yquant/tex/yquant-draw.tex
@@ -3,7 +3,11 @@
\protected\def\yquant@draw@group#1#2#3#4#5{%
\begingroup%
- \def\yquant@draw@@x{#1}%
+ \ifcsname\yquant@prefix xshift\endcsname%
+ \dimdef\yquant@draw@@x{#1+\csname\yquant@prefix xshift\endcsname}%
+ \else%
+ \def\yquant@draw@@x{#1}%
+ \fi%
\ifx F#2%
\yquant@draw@@currentcontroltype=0 %
\else%
@@ -65,7 +69,7 @@
/yquant/this operator}%
}%
\cmd%
- \yquant@circuit@extendwire{#1}%
+ \yquant@circuit@extendwire{#1}{center}%
\expandafter\yquant@circuit@extendcontrolline\expandafter%
{\the\yquant@draw@@currentcontroltype}\yquant@draw@@x%
% check for empty name parameter
@@ -106,14 +110,14 @@
y radius/.expanded=\the\dimexpr.5\dimexpr\yquant@register@get@ydist{#1}{#2}\relax\relax+%
.5*\noexpand\pgfkeysvalueof{/tikz/y radius}\fi,%
name prefix=, name suffix=, name=yquantbox]%
- {\unexpanded\expandafter{\yquant@draw@@content}};
+ {\unexpanded\expandafter{\yquant@draw@@content}};%
\pgfshapeclippath{yquantbox}%
{/yquant/every operator, \yquant@draw@@style,%
/yquant/this operator}%
}%
\cmd%
\yquant@for \i := #1 to #2 {%
- \yquant@circuit@extendwire\i%
+ \yquant@circuit@extendwire\i{center}%
}%
\yquant@circuit@extendmultiline\yquant@draw@@x%
\expandafter\yquant@circuit@extendcontrolline\expandafter%
@@ -148,7 +152,7 @@
(\yquant@draw@@x, \yquant@draw@multiinit@@min) --%
(\yquant@draw@@x, \yquant@draw@multiinit@@max)%
node[name prefix=, name suffix=, name=yquantbox]%
- {\unexpanded\expandafter{\yquant@draw@@content}};
+ {\unexpanded\expandafter{\yquant@draw@@content}};%
}%
\cmd%
% no wire extension (we are still at the initial position), no control line (init doesn't allow for those, so just save the no-op), no multi line
@@ -197,6 +201,162 @@
\fi%
}
+\newbox\yquant@draw@subcircuit@box
+
+\protected\def\yquant@draw@subcircuit@nodecallback#1{%
+ \ifstrequal{#1}{yquantbox}\relax{%
+ \listcsxadd{\yquant@prefix draw@subcircuit@nodelist}{#1}%
+ }%
+}
+
+\protected\long\def\yquant@draw@subcircuit@prepare#1#2{%
+ \let\idx=\yquant@draw@@idx@content%
+ % In order to wrap the inner circuit in a proper box operator and clip outer paths appropriately (which was not possible yet, as we didn't know the exact vertical positions), we first place it within a box. During the setup time, we assumed that the subcircuit be placed at position #3; however, now, this has changed due to the additional box.
+ % First, we anticipate the macro that is used by our subcircuit to store the node
+ % names.
+ \edef\yquant@draw@subcircuit@nodelist{yquant@env#1@draw@subcircuit@nodelist}%
+ \global\cslet\yquant@draw@subcircuit@nodelist\empty%
+ \pgfinterruptboundingbox%
+ \let\yquant@parent=\yquant@prefix%
+ \def\yquant@prefix{yquant@env#1@}%
+ \ifstrempty{#2}{%
+ % we make sure there are no conflicts by prefixing any named nodes in any case.
+ \pgfkeys{/tikz/name prefix/.expanded={sub\yquant@prefix-}}%
+ \let\pgf@nodecallback=\yquant@draw@subcircuit@nodecallback%
+ }{%
+ \pgfkeys{/tikz/name prefix/.expanded={\pgfkeysvalueof{/tikz/name prefix}#2-}}%
+ }%
+ \letcs\xmin{\yquant@prefix xmin}%
+ \letcs\xmax{\yquant@prefix xmax}%
+ \global\setbox\yquant@draw@subcircuit@box=\hbox to 0pt {{%
+ % bypass 'overlay' option
+ \pgf@relevantforpicturesizetrue%
+ \pgfsys@beginpicture%
+ % reset all styles to the expected defaults (similar, but extended to \pgfpicture, see pgf issue #870)
+ \pgfsetcolor{.}%
+ \pgfsetlinewidth{0.4pt}%
+ \pgfsetbuttcap%
+ \pgfsetmiterjoin%
+ \pgfsetmiterlimit{10}%
+ \pgfsetdash{}{0pt}%
+ % The left outer position of our box will be \yquant@draw@@x-.5(xmax-xmin).
+ % To compensate for, we perform a left shift of all commands that take explicit coordinates from the subcircuit.
+ % The y positions, on the other hand, are exactly the ones as they should be integrated in the picture.
+ \csdimdef{\yquant@prefix xshift}{\yquant@draw@@x-.5\dimexpr\xmax+\xmin\relax}%
+ \csname\yquant@prefix draw\endcsname%
+ \ifdim\pgf@picmaxx=-16000pt %
+ \global\pgf@picmaxx=0pt %
+ \global\pgf@picminx=0pt %
+ \global\pgf@picmaxy=0pt %
+ \global\pgf@picminy=0pt %
+ \fi%
+ \ifyquantdebug%
+ \pgf@relevantforpicturesizefalse%
+ \draw[green] (current bounding box.north east) rectangle (current bounding box.south west);%
+ \fi%
+ \pgfsys@endpicture%
+ }}%
+ \global\setbox\yquant@draw@subcircuit@box=\hbox to \dimexpr\xmax-\xmin\relax {%
+ \hskip-\dimexpr\yquant@draw@@x-.5\dimexpr\xmax-\xmin\relax\relax%
+ \lower\pgf@picmaxy%
+ \box\yquant@draw@subcircuit@box%
+ }%
+ \ht\yquant@draw@subcircuit@box=0pt%
+ \dp\yquant@draw@subcircuit@box=\dimexpr\pgf@picmaxy-\pgf@picminy\relax%
+ \expandafter%
+ \endpgfinterruptboundingbox%
+ \expandafter\edef\expandafter\yquant@draw@subcircuit@y\expandafter{%
+ \the\dimexpr.5\pgf@picminy+.5\pgf@picmaxy\relax%
+ }%
+ \ifstrempty{#2}{%
+ % However, if the outer node was not named, no access to the inner nodes is desired, so we delete all nodes again.
+ \def\do##1{%
+ \csgundef{pgf@sh@ns@##1}%
+ \csgundef{pgf@sh@np@##1}%
+ \csgundef{pgf@sh@nt@##1}%
+ \csgundef{pgf@sh@pi@##1}%
+ \csgundef{pgf@sh@ma@##1}%
+ }%
+ \dolistcsloop{\yquant@draw@subcircuit@nodelist}%
+ \csgundef\yquant@draw@subcircuit@nodelist%
+ }{%
+ \ifcsname\yquant@prefix draw@subcircuit@nodelist\endcsname%
+ \csxappto{\yquant@prefix draw@subcircuit@nodelist}%
+ {\csname\yquant@draw@subcircuit@nodelist\endcsname}%
+ \fi%
+ }%
+}
+
+\protected\long\def\yquant@draw@subcircuit@single#1#2#3{%
+ \yquant@draw@subcircuit@prepare{#2}{#3}%
+ \edef\cmd{%
+ \noexpand\path (\yquant@draw@@x, \yquant@draw@subcircuit@y)%
+ node[/yquant/every operator, \yquant@draw@@style,%
+ /yquant/operators/every subcircuit box, /yquant/this operator,%
+ /yquant/operators/this subcircuit box,%
+ name prefix=, name suffix=, name=yquantbox]%
+ {\box\yquant@draw@subcircuit@box};%
+ \pgfshapeclippath{yquantbox}%
+ {/yquant/every operator, \yquant@draw@@style,%
+ /yquant/operators/every subcircuit box, /yquant/this operator,%
+ /yquant/operators/this subcircuit box}%
+ }%
+ \cmd%
+ % see comment in draw@subcircuit@multi
+ \yquant@softpath@extractmaxxat\pgfshapeclippathhorzresult{\yquant@register@get@y{#1}}%
+ \let\pgfshapeclippathhorzresult=\empty%
+ \yquant@circuit@extendwire{#1}{*}%
+ \expandafter\yquant@circuit@extendcontrolline\expandafter%
+ {\the\yquant@draw@@currentcontroltype}\yquant@draw@@x%
+ % check for empty name parameter
+ \ifstrempty{#3}\relax{%
+ \pgfnodealias{\tikz@pp@name{#3}}{yquantbox}%
+ }%
+ \numdef\yquant@draw@@idx@content{\yquant@draw@@idx@content+1}%
+}
+
+\protected\long\def\yquant@draw@subcircuit@multi#1#2#3#4#5#6{%
+ % there is no contiguous slicing for subcircuits, as they may have all kinds of wire operations that can extend beyond the individual slices, let alone ancillas
+ \yquant@draw@subcircuit@prepare{#5}{#6}%
+ % We need to somehow extract the y radius
+ \edef\cmd{%
+ \noexpand\path (\yquant@draw@@x, \yquant@draw@subcircuit@y)%
+ node[/yquant/every operator, \yquant@draw@@style,%
+ /yquant/operators/every subcircuit box, /yquant/this operator,%
+ /yquant/operators/this subcircuit box,
+ /yquant/operator/multi main=true,%
+ name prefix=, name suffix=, name=yquantbox]%
+ {\box\yquant@draw@subcircuit@box};%
+ \pgfshapeclippath{yquantbox}%
+ {/yquant/every operator, \yquant@draw@@style,%
+ /yquant/operators/every subcircuit box, /yquant/this operator,%
+ /yquant/operators/this subcircuit box,%
+ /yquant/operator/multi main=true}%
+ }%
+ \cmd%
+ % install the clippings - but only on wires that are visually between the first and list while not being part of the circuit.
+ \let\nonaffectedpgfshapeclippathhorzresult=\pgfshapeclippathhorzresult%
+ \yquant@for \i := #1 to #2 {%
+ \xifinlist{\i}{#4}{%
+ % Usually, we always begin with a wire from the center of the operator shape and clip the inner parts away. This can't be done here, as the wire needs to be drawn _inside_ of the outer box operator here. Instead of clipping against the clip path, we extract its maximum x position at the position of the wire (which is an overkill for simple shapes, but the allows to specify even more complicated ones) and place the wire at this position without clipping.
+ % Note: this works very well for lines joining at perpendicular angles; but if the shape of the box is more fancy, while the position will be calculated correctly, the wire has a rectangular (or rounded, depending on the line cap) shape that is drawn on top of thw operator. While \yquant@softpath@extractmaxxat could without much effort determine exactly the segment of the path that corresponds to the rightmost line, we would then have to convert this single line into a closed path that fills the linewidth and clip against it to get proper joiners. Since most likely, no-one will ever need this, we don't do it. But file a feature request if desired.
+ \yquant@softpath@extractmaxxat\nonaffectedpgfshapeclippathhorzresult%
+ {\yquant@register@get@y\i}%
+ \let\pgfshapeclippathhorzresult=\empty%
+ \yquant@circuit@extendwire\i{*}%
+ }{%
+ \let\pgfshapeclippathhorzresult=\nonaffectedpgfshapeclippathhorzresult%
+ \yquant@circuit@extendwire\i{center}%
+ }%
+ }%
+ \expandafter\yquant@circuit@extendcontrolline\expandafter%
+ {\the\yquant@draw@@currentcontroltype}\yquant@draw@@x%
+ \ifstrempty{#6}\relax{%
+ \pgfnodealias{\tikz@pp@name{#6}}{yquantbox}%
+ }%
+ \numdef\yquant@draw@@idx@content{\yquant@draw@@idx@content+1}%
+}
+
\protected\def\yquant@draw@control#1#2#3{%
\edef\cmd{%
\noexpand\path (\yquant@draw@@x, \yquant@register@get@y{#2})%
@@ -208,7 +368,7 @@
/yquant/this control}%
}%
\cmd%
- \yquant@circuit@extendwire{#2}%
+ \yquant@circuit@extendwire{#2}{center}%
\yquant@draw@@currentcontroltype=\yquant@register@get@type{#2}\relax%
\expandafter\yquant@circuit@extendcontrolline\expandafter%
{\yquant@draw@@currentcontroltype}\yquant@draw@@x%
@@ -251,7 +411,7 @@
\fi%
\edef\cmd{%
\noexpand\path[/yquant/every control line]%
- \yquant@circuit@extendcontrolline@cmd;
+ \yquant@circuit@extendcontrolline@cmd;%
}%
\cmd%
\endpgfscope%
@@ -285,7 +445,7 @@
\pgfusepathqclip%
\endgroup%
\fi%
- \path[/yquant/every multi line] #2;
+ \path[/yquant/every multi line] #2;%
\endpgfscope%
}
@@ -300,18 +460,18 @@
\protected\def\yquant@draw@wire#1#2{%
\begingroup%
\yquant@register@get@typeywire{#1}\wiretype\wireypos\wirelast%
- \edef\wirexprevpos{\expandafter\@firstoffour\wirelast}%
- \ifx\yquant@env@end@xpos#2\relax%
- \let\wirexpos=\yquant@env@end@xpos%
- \else%
- \edef\wirexpos{\expandafter\@secondoffour\wirelast}%
- \fi%
\unless\ifnum\wiretype=\yquant@register@type@none%
+ \edef\wirexprevpos{\expandafter\@firstoffour\wirelast}%
+ \ifx0#2%
+ \edef\wirexpos{\expandafter\@secondoffour\wirelast}%
+ \else%
+ \let\wirexpos=\yquant@env@end@xpos%
+ \fi%
\ifdim\wirexpos>\wirexprevpos %
\edef\wirestyle{\noexpand\tikzset{%
/yquant/this wire/.style={%
/yquant/every wire,%
- /yquant/every \ifcase\wiretype\relax nobit\or qubit \or cbit \or qubits \fi wire,%
+ /yquant/every \yquant@register@type@tostring\wiretype\space wire,%
\yquant@register@get@style{#1}%
}, /yquant/this wire%
}}%
@@ -334,13 +494,13 @@
% We need to access the current bounding box as well as other positions in the local coordinate frame. For this, transform the bounding box to the current frame (though this is expensive). Does this capture rotations correctly?
\begingroup%
\pgftransforminvert%
- \pgfpointtransformednonlinear{\pgfqpoint{\pgf@picminx}{\pgf@picminy}}
+ \pgfpointtransformednonlinear{\pgfqpoint{\pgf@picminx}{\pgf@picminy}}%
\global\@tempdima=\pgf@y%
\pgfpointtransformednonlinear{\pgfqpoint{\pgf@picmaxx}{\pgf@picmaxy}}%
\global\@tempdimb=\pgf@y%
\endgroup%
% To avoid rendering artifacts at all zoom levels with all renderers, we need to make the clipping region large. Let's try the current bounding box first.
- % This may be insufficient if there no or a tiny wire label and only registers of a small height. In this case, take at ten times the line width or at least 1cm, but don't let it affect the bounding box.
+ % This may be insufficient if there no or a tiny wire label and only registers of a small height. In this case, take ten times the line width or at least 1cm, but don't let it affect the bounding box.
\ifdim\dimexpr\@tempdimb-\@tempdima\relax<10\pgflinewidth %
\@tempdima=\dimexpr\wireypos-5\pgflinewidth\relax%
\@tempdimb=\dimexpr\wireypos+5\pgflinewidth\relax%
@@ -370,7 +530,7 @@
% quantum wire
\protected\csdef{yquant@draw@wire@\yquant@register@type@q}#1{%
\edef\cmd{%
- \noexpand\path [/yquant/this wire]
+ \noexpand\path [/yquant/this wire]%
(\wirexprevpos,\wireypos) -- (\wirexpos,\wireypos);%
}%
\cmd%
@@ -379,7 +539,7 @@
% classical wire
\protected\csdef{yquant@draw@wire@\yquant@register@type@c}#1{%
\edef\cmd{%
- \noexpand\path [/yquant/this wire]
+ \noexpand\path [/yquant/this wire]%
(\wirexprevpos,\wireypos+2\pgflinewidth)--(\wirexpos,\wireypos+2\pgflinewidth)%
(\wirexprevpos,\wireypos-2\pgflinewidth)--(\wirexpos,\wireypos-2\pgflinewidth);%
}%
@@ -389,13 +549,49 @@
% quantum-bundle
\protected\csdef{yquant@draw@wire@\yquant@register@type@qs}#1{%
\edef\cmd{%
- \noexpand\path [/yquant/this wire]
+ \noexpand\path [/yquant/this wire]%
(\wirexprevpos,\wireypos+2\pgflinewidth)--(\wirexpos,\wireypos+2\pgflinewidth)%
(\wirexprevpos,\wireypos)--(\wirexpos,\wireypos)%
(\wirexprevpos,\wireypos-2\pgflinewidth)--(\wirexpos,\wireypos-2\pgflinewidth);%
}%
\cmd%
}
+
+\protected\long\def\yquant@draw@output@group#1{%
+ \begingroup%
+ \def\idx{0}%
+ \yquant@set{#1}%
+}
+
+\let\yquant@draw@output@endgroup=\endgroup%
+
+\protected\long\def\yquant@draw@output@single#1#2{%
+ \path%
+ (\yquant@env@end@xpos, \yquant@register@get@y{#1})%
+ node[/yquant/every output,%
+ /yquant/every \yquant@register@type@tostring{\yquant@register@get@type{#1}} output] {#2};
+ \numdef\idx{\idx+1}%
+}
+
+\protected\long\def\yquant@draw@output@multi#1#2#3#4{%
+ % extremely similar to \yquant@draw@multiinit
+ \@tempdima=-.5\dimexpr\yquant@config@register@sep\relax%
+ \dimdef\yquant@draw@multiinit@@min{\yquant@register@get@y{#1}-\@tempdima}%
+ \dimdef\yquant@draw@multiinit@@max{\yquant@register@get@y{#2}+\@tempdima}%
+ \dimdef\yquant@draw@multiinit@@total{%
+ \yquant@draw@multiinit@@max-\yquant@draw@multiinit@@min%
+ }%
+ \def\pgfdecorationsegmentaspect{0}%
+ \let\yquant@register@multi@contiguous=\yquant@draw@multiinit@contiguous%
+ \let\pgfdecorationsegmentfromto=\empty%
+ #3%
+ \edef\pgfdecorationsegmentfromto{\expandafter\@gobble\pgfdecorationsegmentfromto}%
+ \path[/yquant/every multi output]%
+ (\yquant@env@end@xpos, \yquant@draw@multiinit@@min) --%
+ (\yquant@env@end@xpos, \yquant@draw@multiinit@@max)%
+ node {#4};%
+ \numdef\idx{\idx+1}%
+}
% END_FOLD
% BEGIN_FOLD Preparation of drawing a generic shape
@@ -443,6 +639,12 @@
}{%
\yquant@draw@@single{#1}{#2}{##1}%
}%
+ \ifx\yquant@draw@@multi\yquant@draw@@multiinit%
+ % if we draw an initialization (whether multi or single), this possibly affects the minimal x position. All other gates will be shifted so that they cannot extend beyond the minimal position.
+ \ifdim\pgf@picminx<\csname\yquant@prefix xmin\endcsname%
+ \csxdef{\yquant@prefix xmin}{\the\pgf@picminx}%
+ \fi%
+ \fi%
\expandafter%
\endpgfinterruptboundingbox%
\expandafter\dimen\expandafter0\expandafter=%
@@ -451,41 +653,44 @@
\dimen2=\dimen0 %
\fi%
\numdef\idx{\idx+1}%
- % TODO
-% \yquant@draw@callback@box\nodename%
}%
\dolistloop\yquant@circuit@operator@targets%
% END_FOLD
- % BEGIN_FOLD controls
+ \yquant@draw@@controls%
+ \yquant@draw@@finalize{#1}{#2}%
+}
+
+\protected\def\yquant@draw@@controls@loop#1#2{%
+ \ifx\yquant@lang@attr@name\empty%
+ \let\nodename=\empty%
+ \else%
+ \edef\nodename{\yquant@lang@attr@name-#1\idx}%
+ \fi%
+ \yquant@sort@eadd{%
+ \expandafter\noexpand\csname yquant@draw@#1control\endcsname%
+ {#2}% register index
+ {\nodename}%
+ }%
+ \unless\ifdefined\yquant@draw@controltype%
+ \edef\yquant@draw@controltype{#2}%
+ \fi%
+ \numdef\idx{\idx+1}%
+}
+
+\protected\def\yquant@draw@@controls{%
\ifyquant@circuit@operator@hasControls%
- \def\do##1{%
- \ifx\yquant@lang@attr@name\empty%
- \let\nodename=\empty%
- \else%
- \edef\nodename{\yquant@lang@attr@name-\yquant@draw@controlprefix\idx}%
- \fi%
- \yquant@sort@eadd{%
- \expandafter\noexpand\csname yquant@draw@\yquant@draw@controlprefix control\endcsname%
- {##1}% register index
- {\nodename}%
- }%
- \unless\ifdefined\yquant@draw@controltype%
- \edef\yquant@draw@controltype{##1}%
- \fi%
- \numdef\idx{\idx+1}%
- }
- \def\yquant@draw@controlprefix{p}%
\def\idx{0}%
- \dolistloop\yquant@circuit@operator@pctrls%
- \def\yquant@draw@controlprefix{n}%
+ \forlistloop{\yquant@draw@@controls@loop p}\yquant@circuit@operator@pctrls%
\def\idx{0}%
- \dolistloop\yquant@circuit@operator@nctrls%
+ \forlistloop{\yquant@draw@@controls@loop n}\yquant@circuit@operator@nctrls%
\unless\ifdefined\yquant@draw@controltype%
\PackageError{yquant.sty}{Assertion failure}%
{Internal inconsistency in yquant: Controlled action detected, but no controls were found.}%
\fi%
\fi%
- % END_FOLD
+}
+
+\protected\long\def\yquant@draw@@finalize#1#2{%
% We now know the dimensions of all the registers (though we didn't bother with the height of the control knobs [if present], we just assume they are too small to change this).
\protected\def\idx{}%
\protected@edef\yquant@draw@append{%
@@ -502,16 +707,15 @@
}%
\yquant@sort\yquant@draw@sort%
\advance \dimen2 by \yquant@circuit@operator@x\relax%
- % BEGIN_FOLD shipout
\ifyquant@circuit@operator@hasControls%
- % If we draw a control line, all intermediate registers are affected in their position so that the line is never crossed. If the vertical line is instead caused by a multi register, \yquant@draw@finalize@ctrl will be responsible for advancing only the affected positions.
+ % If we draw a control line, all intermediate registers are affected in their position so that the line is never crossed. If the vertical line is instead caused by a multi register, \yquant@draw@@finalize@ctrl will be responsible for advancing only the affected positions.
\yquant@for \yquant@i := \yquant@circuit@operator@minctrl to \yquant@circuit@operator@maxctrl {%
\yquant@register@set@x\yquant@i{\the\dimen2}%
}%
\fi%
\def\do##1{%
\appto\yquant@draw@append{##1}%
- \yquant@draw@finalize@ctrl##1%
+ \yquant@draw@@finalize@ctrl##1%
}%
\yquant@sort@dolistloop%
\csxappto{\yquant@prefix draw}{%
@@ -557,7 +761,6 @@
\fi%
\fi%
}%
- % END_FOLD
}
\protected\def\yquant@draw@@single#1#2#3{%
@@ -570,12 +773,11 @@
\pgfinterruptboundingbox%
\yquant@env@virtualize@path%
\path%
- (0pt, 0pt)
+ (0pt, 0pt)%
node[/yquant/every operator, #2, /yquant/this operator,%
name prefix=, name suffix=, name=] {#1};%
- \yquant@register@update@height{#3}{%
- \the\dimexpr\pgf@picmaxy-\pgf@picminy\relax%
- }%
+ \yquant@register@update@height{#3}{\the\pgf@picmaxy}%
+ \yquant@register@update@depth{#3}{\the\dimexpr-\pgf@picminy\relax}%
}
\protected\def\yquant@draw@@multi#1#2#3{%
@@ -594,9 +796,9 @@
\ifdim\pgf@picmaxy=-16000pt %
% if there was no single contiguous part before, determine the width now
\path%
- (0pt, 0pt)
+ (0pt, 0pt)%
node[/yquant/every operator, #2, /yquant/this operator,%
- name prefix=, name suffix=, name=] {#1};
+ name prefix=, name suffix=, name=] {#1};%
\fi%
}
@@ -608,14 +810,13 @@
\edef\cmd{%
\noexpand\path (0pt, 0pt)%
node[/yquant/every operator, \yquant@draw@@style, /yquant/this operator,%
- /yquant/operator/multi main=\ifnum#3=1 true\else false\fi,
+ /yquant/operator/multi main=\ifnum#3=1 true\else false\fi,%
name prefix=, name suffix=, name=]%
- {\unexpanded\expandafter{\yquant@draw@@content}};
+ {\unexpanded\expandafter{\yquant@draw@@content}};%
}%
\cmd%
- \yquant@register@update@height{#1}{%
- \the\dimexpr\pgf@picmaxy-\pgf@picminy\relax%
- }%
+ \yquant@register@update@height{#1}{\the\pgf@picmaxy}%
+ \yquant@register@update@depth{#1}{\the\dimexpr-\pgf@picminy\relax}%
\fi%
}
@@ -629,24 +830,116 @@
\pgfinterruptboundingbox%
\yquant@env@virtualize@path%
\path%
- (0pt, 0pt)
+ (0pt, 0pt)%
node[/yquant/every operator, #2, /yquant/every multi label,%
- name prefix=, name suffix=, name=] {#1};
+ name prefix=, name suffix=, name=] {#1};%
+}
+
+\protected\long\def\yquant@draw@@subcircuit#1{%
+ \yquant@sort@clear%
+ \def\idx{0}%
+ \dimen2=\yquant@config@operator@minimum@width%
+ % BEGIN_FOLD register
+ \def\do##1{%
+ \ifx\yquant@lang@attr@name\empty%
+ \let\nodename=\empty%
+ \else%
+ \edef\nodename{\yquant@lang@attr@name-\idx}%
+ \fi%
+ \ifyquant@firsttoken\yquant@register@multi{##1}{%
+ \yquant@draw@@subcircuit@multi{#1}{##1}%
+ }{%
+ \yquant@draw@@subcircuit@single{#1}{##1}%
+ }%
+ \dimen0=\dimexpr%
+ \csname yquant@env\yquant@circuit@subcircuit@id @xmax\endcsname-%
+ \csname yquant@env\yquant@circuit@subcircuit@id @xmin\endcsname%
+ \relax\relax%
+ \pgfinterruptboundingbox%
+ % There will still be some extra width taken by separations or other things related to the box itself.
+ \yquant@env@virtualize@path%
+ \path%
+ (0pt, 0pt)%
+ node[/yquant/every operator, #1,%
+ /yquant/operators/every subcircuit box, /yquant/this operator,%
+ /yquant/operators/this subcircuit box,%
+ name prefix=, name suffix=, name=]%
+ {\hbox to \dimen0{}};%
+ % We also don't update the height here, as the height of the subcircuit is undetermined as long as we did not match inner and outer wires.
+ \expandafter%
+ \endpgfinterruptboundingbox%
+ \expandafter\dimen\expandafter0\expandafter=%
+ \the\dimexpr\pgf@picmaxx-\pgf@picminx\relax\relax%
+ \ifdim\dimen0>\dimen2 %
+ \dimen2=\dimen0 %
+ \fi%
+ \numdef\idx{\idx+1}%
+ }%
+ \dolistloop\yquant@circuit@operator@targets%
+ % END_FOLD
+ \yquant@draw@@controls%
+ \yquant@draw@@finalize{}{#1}%
+}
+
+\protected\def\yquant@draw@@subcircuit@single#1#2{%
+ \edef\yquant@circuit@subcircuit@param{#2\yquant@list@delim}%
+ \yquant@circuit@subcircuit{#1}%
+ \yquant@sort@eadd{%
+ \yquant@draw@subcircuit@single%
+ {#2}% register index
+ {\yquant@circuit@subcircuit@id}%
+ {\nodename}%
+ }%
+}
+
+\protected\def\yquant@draw@@subcircuit@multi#1#2{%
+ \edef\yquant@circuit@subcircuit@param{\@fifthoffive#2}%
+ \yquant@sort@list\yquant@circuit@subcircuit@param\yquant@sort@ascending%
+ \yquant@circuit@subcircuit{#1}%
+ \yquant@sort@eadd{%
+ \yquant@draw@subcircuit@multi%
+ #2%
+ {\yquant@circuit@subcircuit@id}%
+ {\nodename}%
+ }
+}
+
+\protected\long\def\yquant@draw@@output@single#1#2{%
+ \path
+ (\yquant@env@end@xpos, 0pt)%
+ node[/yquant/every output,%
+ /yquant/every \yquant@register@type@tostring{\yquant@register@get@type{#1}} output] {#2};%
+ \numdef\idx{\idx+1}%
+}
+
+\protected\long\def\yquant@draw@@output@multi#1{%
+ \path[/yquant/every multi output]%
+ (\yquant@env@end@xpos, 0pt) -- (\yquant@env@end@xpos, 1cm)%
+ node {#1};%
+ \numdef\idx{\idx+1}%
}
-\def\yquant@draw@finalize@ctrl#1{%
+\def\yquant@draw@@finalize@ctrl#1{%
+ \let\next=\yquant@draw@@finalize@ctrl@single%
\ifx\yquant@draw@multi#1%
- \expandafter\yquant@draw@finalize@ctrl@multi%
+ \let\next=\yquant@draw@@finalize@ctrl@multi%
\else%
\ifx\yquant@draw@multiinit#1%
- \expandafter\expandafter\expandafter\yquant@draw@finalize@ctrl@multi%
+ \let\next=\yquant@draw@@finalize@ctrl@multi%
\else%
- \expandafter\expandafter\expandafter\yquant@draw@finalize@ctrl@single%
+ \ifx\yquant@draw@subcircuit@multi#1%
+ \let\next=\yquant@draw@@finalize@ctrl@subcircuit@multi%
+ \else%
+ \ifx\yquant@draw@subcircuit@single#1%
+ \let\next=\yquant@draw@@finalize@ctrl@subcircuit@single%
+ \fi%
+ \fi%
\fi%
\fi%
+ \next%
}
-\protected\def\yquant@draw@finalize@ctrl@single#1#2{%
+\protected\def\yquant@draw@@finalize@ctrl@single#1#2{%
\unless\ifyquant@circuit@operator@hasControls%
\yquant@register@set@x#1{\the\dimen2}%
\fi%
@@ -655,13 +948,17 @@
}%
}
-\protected\def\yquant@draw@finalize@ctrl@singleinit#1#2{%
+\def\yquant@draw@@finalize@ctrl@subcircuit@single#1#2#3{%
+ \yquant@draw@@finalize@ctrl@single{#1}{#3}%
+}
+
+\protected\def\yquant@draw@@finalize@ctrl@singleinit#1#2{%
\eappto\yquant@draw@append{%
\yquant@draw@callback@wire{#1}%
}%
}
-\protected\def\yquant@draw@finalize@ctrl@multi#1#2#3#4#5{%
+\protected\def\yquant@draw@@finalize@ctrl@multi#1#2#3#4#5{%
\unless\ifyquant@circuit@operator@hasControls{%
% \yquant@for uses \loop...\repeat and hence redefines \body, which would destroy an outer loop.
% if we did not draw a control line, the x position has not yet been set. A multi-qubit register might visually extend over multiple registers that are not even part, hence we update them all.
@@ -669,16 +966,15 @@
\yquant@register@set@x\yquant@i{\the\dimen2}%
}%
}\fi%
- % this is called from a do loop itself, so preserve \do (but do not enter grouping)
- \let\yquant@register@multi@contiguous=\yquant@draw@finalize@ctrl@multi@contiguous%
+ \let\yquant@register@multi@contiguous=\yquant@draw@@finalize@ctrl@multi@contiguous%
\ifyquant@circuit@operator@hasControls%
\ifyquant@config@operator@multi@warn%
- \def\yquant@draw@finalize@ctrl@multi@contiguous@warn{0}%
+ \def\yquant@draw@@finalize@ctrl@multi@contiguous@warn{0}%
\else%
- \def\yquant@draw@finalize@ctrl@multi@contiguous@warn{2}%
+ \def\yquant@draw@@finalize@ctrl@multi@contiguous@warn{2}%
\fi%
\else%
- \def\yquant@draw@finalize@ctrl@multi@contiguous@warn{2}%
+ \def\yquant@draw@@finalize@ctrl@multi@contiguous@warn{2}%
\fi%
\cslet{\yquant@prefix finalize@ctrl@draw@appto}\empty%
#4%
@@ -686,17 +982,37 @@
\csgundef{\yquant@prefix finalize@ctrl@draw@appto}%
}
-\protected\def\yquant@draw@finalize@ctrl@multiinit#1#2#3#4#5{%
+\protected\def\yquant@draw@@finalize@ctrl@subcircuit@multi@loop#1{%
+ \begingroup%
+ \edef\tmp{\yquant@draw@callback@wire{#1}}%
+ \expandafter%
+ \endgroup%
+ \expandafter\appto\expandafter\yquant@draw@append\expandafter{\tmp}%
+}
+
+\protected\def\yquant@draw@@finalize@ctrl@subcircuit@multi#1#2#3#4#5#6{%
+ % there are no contiguous parts here, don't call the normal @multi
+ \unless\ifyquant@circuit@operator@hasControls{%
+ % \yquant@for uses \loop...\repeat and hence redefines \body, which would destroy an outer loop.
+ % if we did not draw a control line, the x position has not yet been set. A multi-qubit register might visually extend over multiple registers that are not even part, hence we update them all.
+ \yquant@for \yquant@i := #1 to #2 {%
+ \yquant@register@set@x\yquant@i{\the\dimen2}%
+ }%
+ }\fi%
+ \forlistloop\yquant@draw@@finalize@ctrl@subcircuit@multi@loop{#4}%
+}
+
+\protected\def\yquant@draw@@finalize@ctrl@multiinit#1#2#3#4#5{%
% this is called from a do loop itself, so preserve \do (but do not enter grouping)
- \let\yquant@register@multi@contiguous=\yquant@draw@finalize@ctrl@multi@contiguous%
+ \let\yquant@register@multi@contiguous=\yquant@draw@@finalize@ctrl@multi@contiguous%
\ifyquant@circuit@operator@hasControls%
\ifyquant@config@operator@multi@warn%
- \def\yquant@draw@finalize@ctrl@multi@contiguous@warn{0}%
+ \def\yquant@draw@@finalize@ctrl@multi@contiguous@warn{0}%
\else%
- \def\yquant@draw@finalize@ctrl@multi@contiguous@warn{2}%
+ \def\yquant@draw@@finalize@ctrl@multi@contiguous@warn{2}%
\fi%
\else%
- \def\yquant@draw@finalize@ctrl@multi@contiguous@warn{2}%
+ \def\yquant@draw@@finalize@ctrl@multi@contiguous@warn{2}%
\fi%
\cslet{\yquant@prefix finalize@ctrl@draw@appto}\empty%
#4%
@@ -704,15 +1020,15 @@
\csgundef{\yquant@prefix finalize@ctrl@draw@appto}%
}
-\protected\def\yquant@draw@finalize@ctrl@multi@contiguous#1#2#3{%
- \ifnum\yquant@draw@finalize@ctrl@multi@contiguous@warn=1 %
+\protected\def\yquant@draw@@finalize@ctrl@multi@contiguous#1#2#3{%
+ \ifnum\yquant@draw@@finalize@ctrl@multi@contiguous@warn=1 %
\PackageWarning{yquant.sty}{Ambiguous operation: multiple discontiguous multi-register operations in combination with controls make it hard to visually determine on which registers the gates act on.}%
% switch the warning off for this group (which is a single operation)
\yquant@config@operator@multi@warnfalse%
- \def\yquant@draw@finalize@ctrl@multi@contiguous@warn{2}%
+ \def\yquant@draw@@finalize@ctrl@multi@contiguous@warn{2}%
\else%
- \numdef\yquant@draw@finalize@ctrl@multi@contiguous@warn{%
- \yquant@draw@finalize@ctrl@multi@contiguous@warn+1%
+ \numdef\yquant@draw@@finalize@ctrl@multi@contiguous@warn{%
+ \yquant@draw@@finalize@ctrl@multi@contiguous@warn+1%
}%
\fi%
{% save \body
diff --git a/graphics/pgf/contrib/yquant/tex/yquant-env.tex b/graphics/pgf/contrib/yquant/tex/yquant-env.tex
index 16c3598af3..bb901d1d2c 100644
--- a/graphics/pgf/contrib/yquant/tex/yquant-env.tex
+++ b/graphics/pgf/contrib/yquant/tex/yquant-env.tex
@@ -42,71 +42,235 @@
\yquant@env@begin@arg[]%
}
-\long\protected\def\yquant@env@begin@arg[#1]{%
+\def\yquant@env@begin@arg{%
+ \let\yquant@env@check=\yquant@env@check@%
+ \yquant@env@begin@generic\yquant%
+}
+
+\long\protected\def\yquant@env@begin@generic#1[#2]{
\begingroup%
- \advance\yquant@env by 1 %
+ \let\yquant@parent=\yquant@prefix%
+ \global\advance\yquant@env by 1 %
\edef\yquant@prefix{yquant@env\the\yquant@env @}%
- \let\yquant=\yquant@env@scan%
- \yquant@lang@reset@attrs%
+ \ifnum\yquant@env=1 %
+ \yquant@env@substikz#1%
+ \def\yquant@env@create@x{0pt}%
+ \global\cslet{\yquant@prefix parameters}\empty%
+ \else%
+ \let\yquant@lang@reset@attrs@inputoutput=\yquant@lang@reset@attrs@inputoutput@subcircuit%
+ \let\yquant@env@create@x=\yquant@circuit@operator@x%
+ \global\cslet{\yquant@prefix parameters}\yquant@circuit@subcircuit@param%
+ \yquant@env@lazyfalse% forbid lazy register creation in subcircuits. We need a proper and in-order declaration of the subcircuit's interface.
+ \fi%
+ \let#1=\yquant@env@scan%
+ \yquant@env@reset@commands%
\csgdef{\yquant@prefix registers}{0}%
\global\cslet{\yquant@prefix draw}\relax%
\global\cslet{\yquant@prefix outputs}\relax%
+ \csdimgdef{\yquant@prefix xmin}{\yquant@env@create@x+\yquant@config@operator@sep}%
+ \global\cslet{\yquant@prefix subcircuits}\empty%
+ \global\cslet{\yquant@prefix inonly}\empty%
\csxdef{\yquant@prefix cleanup}{%
\expandafter\noexpand\csname\yquant@prefix registers\endcsname%
\expandafter\noexpand\csname\yquant@prefix draw\endcsname%
\expandafter\noexpand\csname\yquant@prefix outputs\endcsname%
+ \expandafter\noexpand\csname\yquant@prefix parameters\endcsname%
+ \expandafter\noexpand\csname\yquant@prefix xmin\endcsname%
+ \expandafter\noexpand\csname\yquant@prefix subcircuits\endcsname%
+ \expandafter\noexpand\csname\yquant@prefix inonly\endcsname%
\expandafter\noexpand\csname\yquant@prefix cleanup\endcsname%
}%
- \ifnum\yquant@env=1 %
- \yquant@env@substikz%
- \fi%
- \scope[{/yquant/.cd, #1, /tikz/.cd, /yquant/every circuit}]%
+ \scope[{/yquant/.cd, #2, /tikz/.cd, /yquant/every circuit}]%
}
-\newif\ifyquantdebug
+
\protected\def\yquant@env@end{%
\letcs\yquant@env@end@registers{\yquant@prefix registers}%
\ifnum\yquant@env@end@registers>0 %
% draw all wires
\yquant@register@get@maxxrange\yquant@env@end@xpos{1}{\yquant@env@end@registers}%
- % to have a symmetric situation, we extend again one separation at the end
+ \ifdim\csname\yquant@prefix xmin\endcsname<%
+ \dimexpr\yquant@env@create@x+\yquant@config@operator@sep\relax%
+ % to have a symmetric situation, we extend again one separation at the end
+ \dimdef\yquant@env@end@xpos{\yquant@env@end@xpos+\yquant@config@operator@sep}%
+ \global\cslet{\yquant@prefix xmax}\yquant@env@end@xpos%
+ \else%
+ % while the outputs need this, the subcircuit doesn't if there are no outputs.
+ \global\cslet{\yquant@prefix xmax}\yquant@env@end@xpos%
+ \dimdef\yquant@env@end@xpos{\yquant@env@end@xpos+\yquant@config@operator@sep}%
+ \fi%
+ \yquant@cleanup@csadd{xmax}%
\csxappto{\yquant@prefix draw}{%
- \def\noexpand\yquant@env@end@xpos{%
- \the\dimexpr\yquant@env@end@xpos+\yquant@config@operator@sep\relax%
- }%
- \yquant@circuit@endwires{\yquant@env@end@registers}%
- }
- % also calculate the true y positions
- \dimen0=0pt %
- \dimen2=0pt %
- \dimen4=\yquant@config@register@sep %
- \yquant@for \i := 1 to \yquant@env@end@registers {%
- % we do not care if the wire is present for the y position
- \dimen2=.5\dimexpr\yquant@register@get@height\i\relax%
- \advance\dimen0 by \dimen2\relax%
- % top-to-bottom means negative coordinates in pgf
- \yquant@register@set@y\i{-\the\dimen0}%
- \advance\dimen0 by \dimen2\relax%
- \advance\dimen0 by \dimen4\relax%
+ \yquant@circuit@endwires{\yquant@env@end@xpos}%
}%
\csname\yquant@prefix outputs\endcsname%
+ % also calculate the true y positions
+ \unless\ifdefined\yquant@parent%
+ \yquant@env@end@calcypositions%
+ \fi%
+ \else%
+ \ifdefined\yquant@parent%
+ \PackageError{yquant.sty}{Empty subcircuit}%
+ {Subcircuits must contain registers.}%
+ \else%
+ \PackageWarning{yquant.sty}{Empty quantum circuit}%
+ \fi%
+ \fi%
+ \global\let\yquant@env@scan=\relax% don't rescan after the scope
+ \endscope% this will exit five to seven groups (depending on the transparency group state, and it might even be driver-dependent, though it is not at the moment), so better make the relax global
+ \global\let\yquant@env@scan=\yquant@env@scan@%
+ \ifdefined\yquant@parent%
+ % We are in a subcircuit. The drawing and cleanup is delayed until the end.
+ \csxappto{\yquant@parent cleanup}%
+ {\unexpanded\expandafter\expandafter\expandafter{%
+ \csname\yquant@prefix cleanup\endcsname%
+ }}%
+ \ifyquantdebug%
+ \csshow{\yquant@prefix draw}%
+ \fi%
+ \else%
+ % Now we actually carry out the tikz commands which were previously stored in the draw command. But before this, we get rid of all \yquant@env@scan calls and also restore the scope command, since this would add itself once again. And get@y needs to expand.
+ \let\path=\tikz@command@path%
+ \let\tikz@lib@scope@check=\yquant@env@substikz@scopecheck%
+ \let\tikz@scope@opt=\yquant@env@substikz@scope%
+ \let\endtikz@scope@env=\yquant@env@substikz@endscope%
+ \let\endscope=\endtikz@scope@env%
+ \let\stopscope=\endscope%
+ \yquant@register@get@y@@expandable%
+ \ifyquantdebug%
+ \csshow{\yquant@prefix draw}%
\fi%
- \endscope%
- % Now we actually carry out the tikz commands which were previously stored in the draw command. But before this, we get rid of all \yquant@env@scan calls and also restore the scope command, since this would add itself once again. And get@y needs to expand.
- \let\path=\tikz@command@path%
- \let\tikz@lib@scope@check=\yquant@env@substikz@scopecheck%
- \let\tikz@scope@opt=\yquant@env@substikz@scope%
- \let\endtikz@scope@env=\yquant@env@substikz@endscope%
- \let\endscope=\endtikz@scope@env%
- \let\stopscope=\endscope%
- \yquant@register@get@y@@expandable%
- \ifyquantdebug%
- \csshow{\yquant@prefix draw}%
+ \csname\yquant@prefix draw\endcsname%
+ \expandafter\expandafter\expandafter\yquant@cleanup\csname\yquant@prefix cleanup\endcsname|%
+ \global\yquant@env=0 %
\fi%
- \csname\yquant@prefix draw\endcsname%
- \expandafter\expandafter\expandafter\yquant@cleanup\csname\yquant@prefix cleanup\endcsname|%
\endgroup%
}
+\protected\def\yquant@env@end@calcypositions{%
+ \begingroup%
+ \dimen4=\yquant@config@register@sep %
+ % We know the heights of most gates, but subcircuits are tricky. Since the position of their inner wires depends on the heights of the outer wires, we could not make any assumption about their heights yet. So we now need multiple iterations: First, we fix the positions of our own wires preliminarily. Then, we iterate through all subcircuits at the first level, place their wires appropriately and try to align input and output. In doing so, we recognize when there's not enough space at an outer wire. If this is the case, we enlarge the outer wire's height appropriately and restart alignment from the outmost level. If everything is proper, we start aligning at the next level.
+ \yquant@env@end@calcypositions@toplevel1%
+ % Turn the preliminary positions into true ones at every level.
+ \yquant@env@end@setypositions1%
+ \endgroup%
+}
+
+\protected\def\yquant@env@end@calcypositions@loop#1{%
+ % \yquant@parent has to be set already
+ \def\yquant@prefix{yquant@env#1@}%
+ % #1 now holds the id of the subcircuit. Find the first input.
+ \edef\firstinput{%
+ \expandafter\expandafter\expandafter%
+ \@firstoftwo\csname\yquant@prefix firstinput\endcsname%
+ }%
+ \edef\lastinput{%
+ \expandafter\expandafter\expandafter%
+ \@firstoftwo\csname\yquant@prefix lastinput\endcsname%
+ }%
+ % we already made sure during in \yquant@circuit@subcircuit that there is enough space above and below the subcircuit. Still, the wires need to be positioned. However, we will first deal with all intermediate wires, which need to be placed by means of shifts - there is no direct correspondence to heights or depths of parent wires any more.
+ \ifnum\firstinput<\numexpr\lastinput-1\relax%
+ \dimen0=\dimexpr%
+ \csname y@\csname\yquant@prefix registermap@\firstinput\endcsname\endcsname+%
+ \yquant@register@get@depth\firstinput+\dimen4%
+ \relax%
+ \yquant@for \i := \numexpr\firstinput+1\relax to \lastinput {%
+ \advance\dimen0 by \yquant@register@get@height\i\relax%
+ \ifcsname\yquant@prefix registermap@\i\endcsname%
+ % this is an input: do we have enough space by using the outer position?
+ \letcs\outername{\yquant@prefix registermap@\i}%
+ \letcs\outery{y@\outername}%
+ \ifdim\dimen0>\outery\relax%
+ % re-aligning the outer positions is required
+ \ifcsname y+@\outername\endcsname%
+ \csdimdef{y+@\outername}%
+ {\csname y+@\outername\endcsname+\dimen0-\outery}%
+ \else%
+ \csdimdef{y+@\outername}{\dimen0-\outery}%
+ \fi%
+ \let\yquant@env@end@calcypositions@redo=\relax%
+ \fi%
+ \else%
+ \csedef{y@\yquant@prefix register@\i}{\the\dimen0}%
+ \fi%
+ \ifdefined\yquant@env@end@calcypositions@redo%
+ \expandafter\yquant@for@break%
+ \else%
+ \advance\dimen0 by \dimexpr\yquant@register@get@depth\i+\dimen4\relax%
+ \fi%
+ }%
+ \fi%
+ \unless\ifdefined\yquant@env@end@calcypositions@redo%
+ % sounds good, no readjustments necessary. Now transfer the wires above and below in the appropriate macros.
+ \ifnum\firstinput>1 %
+ \dimen0=\dimexpr%
+ \csname y@\csname\yquant@prefix registermap@\firstinput\endcsname\endcsname-%
+ \yquant@register@get@height\firstinput-\dimen4%
+ \relax%
+ \yquant@fordown \i := \numexpr\firstinput-1\relax downto 1 {%
+ \advance\dimen0 by -\yquant@register@get@depth\i\relax%
+ \csedef{y@\yquant@prefix register@\i}{\the\dimen0}%
+ \advance\dimen0 by -\dimexpr\yquant@register@get@height\i+\dimen4\relax%
+ }%
+ \fi%
+ \ifnum\lastinput<\csname\yquant@prefix registers\endcsname%
+ \dimen0=\dimexpr%
+ \csname y@\csname\yquant@prefix registermap@\lastinput\endcsname\endcsname+%
+ \yquant@register@get@depth\lastinput+\dimen4%
+ \relax%
+ \yquant@for \i := \numexpr\lastinput+1\relax to \csname\yquant@prefix registers\endcsname {%
+ \advance\dimen0 by \yquant@register@get@height\i\relax%
+ \csedef{y@\yquant@prefix register@\i}{\the\dimen0}%
+ \advance\dimen0 by \dimexpr\yquant@register@get@depth\i+\dimen4\relax%
+ }%
+ \fi%
+ \fi%
+ \ifdefined\yquant@env@end@calcypositions@redo%
+ % forget every plan about going deeper, restart.
+ \expandafter\listbreak%
+ \else%
+ \expandafter\yquant@env@end@calcypositions@subcircuits%
+ \fi%
+}
+
+\protected\def\yquant@env@end@calcypositions@subcircuits{%
+ \let\yquant@parent=\yquant@prefix%
+ \forlistcsloop\yquant@env@end@calcypositions@loop{\yquant@prefix subcircuits}%
+ \ifdefined\yquant@env@end@calcypositions@redo%
+ \expandafter\listbreak%
+ \fi%
+}
+
+\protected\def\yquant@env@end@calcypositions@toplevel{%
+ \def\yquant@prefix{yquant@env1@}%
+ \dimen0=0pt %
+ \yquant@for \i := 1 to \yquant@env@end@registers {%
+ % we do not care if the wire is present for the y position
+ \advance\dimen0 by \yquant@register@get@height\i\relax%
+ \ifcsname y+@\yquant@prefix register@\i\endcsname%
+ \advance\dimen0 by \csname y+@\yquant@prefix register@\i\endcsname\relax%
+ \fi%
+ \csedef{y@\yquant@prefix register@\i}{\the\dimen0}%
+ \advance\dimen0 by \dimexpr\yquant@register@get@depth\i+\dimen4\relax%
+ }%
+ \undef\yquant@env@end@calcypositions@redo%
+ \let\yquant@parent=\yquant@prefix%
+ \forlistcsloop\yquant@env@end@calcypositions@loop{\yquant@prefix subcircuits}%
+ \ifdefined\yquant@env@end@calcypositions@redo%
+ \expandafter\yquant@env@end@calcypositions@toplevel%
+ \fi%
+}
+
+\protected\def\yquant@env@end@setypositions#1{%
+ \def\yquant@prefix{yquant@env#1@}%
+ \yquant@for \i := 1 to \csname\yquant@prefix registers\endcsname {%
+ \unless\ifcsname\yquant@prefix registermap@\i\endcsname%
+ \yquant@register@set@y\i{-\csname y@\yquant@prefix register@\i\endcsname}%
+ \fi%
+ }%
+ \forlistcsloop\yquant@env@end@setypositions{\yquant@prefix subcircuits}%
+}
+
\tikzaddtikzonlycommandshortcutlet\yquant\yquant@envunstar
\expandafter\tikzaddtikzonlycommandshortcutlet\csname yquant*\endcsname\yquant@envstar
\tikzaddtikzonlycommandshortcutlet\endyquant\yquant@env@end
@@ -117,11 +281,16 @@
}
\let\yquant@set=\yquantset%
-% private yquant-language related helpers
% In order to allow nested environments and also grouping (without the need to smuggle definitions out of the groups whenever necessary), we count the number of nested environments.
\newcount\yquant@env
-\def\yquant@env@substikz@finish{%
+% Some commands may be overwritten while a subcircuit is processed, in particular attributes, but also some others. However, within the subcircuit, they need to have their original (un)definition.
+\protected\def\yquant@env@reset@commands{%
+ \yquant@lang@reset@attrs%
+ \yquant@register@reset@multi%
+}
+
+\protected\def\yquant@env@substikz@finish{%
% Rendering pipeline
\endgroup%
\global\pgflinewidth=\tikzscope@linewidth\relax%
@@ -137,24 +306,24 @@
}
% substitute the tikz commands (defined in \tikz@installcommands) so that they can be arbitrarily interleaved with yquant code. We patch \path, \scope, \endscope, \stopscope, their internal complements, and also patch \yquantset.
-\protected\def\yquant@env@substikz{%
+\protected\def\yquant@env@substikz#1{%
% \tikz@path@do@at@end is called after a path. Hence, it is an ideal candidate to re-invoke \yquant@env@scan. However, it is by default defined to be \tikz@lib@scope@check, and we need this definition for the scopes library to work correctly. But since \tikz@lib@scope@check is also called after a scope and the end of a scope, this is even better. Yet, we need to check whether the scopes library is present or not.
\let\yquant@env@substikz@scopecheck=\tikz@lib@scope@check%
\ifx\tikz@lib@scope@check\pgfutil@empty%
% no, it is not. This is simple.
- \let\tikz@lib@scope@check=\yquant@env@scan%
+ \def\tikz@lib@scope@check{\yquant@env@scan}%
\else%
% yes, it is. Call it after the special behavior is done.
\patchcmd\tikz@lib@scope@check{{}}{\yquant@env@scan}\relax{%
\PackageWarning{yquant.sty}{Patching \string\tikz@lib@scope@check\space failed; you must invoke \string\yquant\space manually after every tikz command to switch back to yquant code.}%
- }
+ }%
\fi%
% We not only need to re-invoke yquant after the tikz command, but we must also make sure that the tikz command is not actually drawn now, but at the end. However, what happens if some macros are used within the command? Here, we choose to expand the macros to the values they have _now_, but protected (which should prevent bad things for formatting commands). If you find this to be an issue, please report.
\def\path##1;{%
\protected@csxappto{\yquant@prefix draw}{%
\noexpand\path##1;%
}%
- \yquant%
+ #1%
}%
% no need for \scoped, because it internally calls \scope.
% We need to hack into \scope, but this is a bit tricky due to its argument handling. In order to get all optional arguments, including the possible animations library, correct, we change \tikz@scope@opt.
@@ -189,6 +358,7 @@
\begingroup%
\yquant@env@contscan%
}
+\let\yquant@env@scan@=\yquant@env@scan
\protected\def\yquant@env@contscan{%
\yquant@futurenonspacelet\yquant@env@nextchar\yquant@env@check%
@@ -199,7 +369,7 @@
\yquant@env@scan%
}
-\protected\def\yquant@env@check{%
+\protected\def\yquant@env@check@{%
\let\next=\relax%
% Here we assume standard catcodes for A and [, but our language specification also requires this implicitly.
\ifx\yquant@env@nextchar[%
@@ -254,4 +424,59 @@
\def\yquant@env@gobblepar{%
\afterassignment\yquant@env@contscan%
\let\@eattoken= %
+}
+
+\def\yquantimport@now#1{%
+ \expandafter\yquant\@@input #1\relax%
+}
+
+\def\yquantimportcommand{\yquantimport@now}%
+
+\AtBeginDocument{%
+ % do we have the import package?
+ \ifdefined\@doimport%
+ \providecommand\yquantimportpath{./}%
+ \def\yquantimportcommand{\@doimport\yquantimport@now{\yquantimportpath}}%
+ \fi%
+}
+
+\def\yquantimport{%
+ \@ifstar{\yquantimport@i{*}}{\yquantimport@i{}}%
+}
+
+\def\yquantimport@i#1{%
+ \@ifnextchar[{\yquantimport@ii{#1}}{\yquantimport@ii{#1}[]}%
+}%
+
+\def\yquantimport@ii#1[#2]#3{%
+ \ifpgfpicture%
+ \ifnum\yquant@env>0 %
+ \begingroup%
+ \ifstrequal{#1}{*}{%
+ \yquant@env@lazytrue%
+ }{%
+ \yquant@env@lazyfalse%
+ }%
+ \ifstrempty{#2}{%
+ \yquantimportcommand{#3}%
+ }{%
+ \scope%
+ \yquantset{#2}%
+ \yquantimportcommand{#3}%
+ \endscope%
+ }%
+ \endgroup%
+ \expandafter\expandafter\expandafter\yquant%
+ \else%
+ \begin{yquant#1}[{#2}]
+ \yquantimportcommand{#3}%
+ \end{yquant#1}%
+ \fi%
+ \else%
+ \begin{tikzpicture}%
+ \begin{yquant#1}[{#2}]
+ \yquantimportcommand{#3}%
+ \end{yquant#1}%
+ \end{tikzpicture}
+ \fi%
} \ No newline at end of file
diff --git a/graphics/pgf/contrib/yquant/tex/yquant-lang.tex b/graphics/pgf/contrib/yquant/tex/yquant-lang.tex
index b250f78827..2ea08e8b16 100644
--- a/graphics/pgf/contrib/yquant/tex/yquant-lang.tex
+++ b/graphics/pgf/contrib/yquant/tex/yquant-lang.tex
@@ -1,70 +1,100 @@
% BEGIN_FOLD Attributes
-\yquant@langhelper@declare@attr{
- value/.store in=\yquant@lang@attr@value,
+\yquant@langhelper@declare@attr{%
+ value/.store in=\yquant@lang@attr@value,%
after/.code={%
\yquant@register@get@ids{#1}%
\let\yquant@lang@attr@after=\yquant@register@get@ids@list%
- },
- type/.store in=\yquant@lang@attr@type
+ },%
+ type/.store in=\yquant@lang@attr@type,%
+ ancilla/.code={%
+ \undef\yquant@lang@attr@input%
+ \undef\yquant@lang@attr@output%
+ },%
+ in/.code={%
+ \let\yquant@lang@attr@input=\relax%
+ \undef\yquant@lang@attr@output%
+ },%
+ in/.default=\regidx,%
+ out/.code={%
+ \undef\yquant@lang@attr@input%
+ \let\yquant@lang@attr@output=\relax%
+ },%
+ out/.default=\regidx,%
+ inout/.code={%
+ \let\yquant@lang@attr@input=\relax%
+ \let\yquant@lang@attr@output=\relax%
+ }%
+ inout/.default=\regidx,%
}
-\yquant@langhelper@declare@attr@global{
- name/.store in=\yquant@lang@attr@name
+\yquant@langhelper@declare@attr@global{%
+ name/.store in=\yquant@lang@attr@name%
}
\protected\def\yquant@lang@reset@attrs{%
\undef\yquant@lang@attr@value%
\undef\yquant@lang@attr@after%
\undef\yquant@lang@attr@type%
+ \yquant@lang@reset@attrs@inputoutput%
\let\yquant@lang@attr@name=\empty%
}
+
+\protected\def\yquant@lang@reset@attrs@inputoutput{%
+ \undef\yquant@lang@attr@input%
+ \undef\yquant@lang@attr@output%
+}
+
+\protected\def\yquant@lang@reset@attrs@inputoutput@subcircuit{%
+ \let\yquant@lang@attr@input=\relax%
+ \let\yquant@lang@attr@output=\relax%
+}
% END_FOLD
% BEGIN_FOLD Declaration of registers
\yquant@langhelper@declare@command@uncontrolled{nobit}\yquant@lang@@nobit
-\yquant@langhelper@setup@attrs{nobit}{}{}
+\yquant@langhelper@setup@attrs{nobit}{}{ancilla,out}
\def\yquant@lang@@nobit#1{%
\let\yquant@lang@create@type=\yquant@register@type@none%
\def\yquant@lang@create@style{initial}% there is no separate style, just duplicate
\ifdefined\yquant@lang@attr@value%
\PackageError{yquant.sty}{Placeholder initialization must not have value}%
{You must not provide a description for an invisible register.}
- \else
+ \else%
\let\yquant@lang@attr@value=\empty%
\fi%
- \yquant@lang@create@parse@name#1[;
+ \yquant@lang@create@parse@name#1[;%
}
\yquant@langhelper@declare@command@uncontrolled{qubit}\yquant@lang@@qubit
-\yquant@langhelper@setup@attrs{qubit}{}{after,value}
+\yquant@langhelper@setup@attrs{qubit}{}{after,value,ancilla,in,out,inout}
\def\yquant@lang@@qubit#1{%
\let\yquant@lang@create@type=\yquant@register@type@q%
\def\yquant@lang@create@style{qubit}%
\unless\ifdefined\yquant@lang@attr@value%
\let\yquant@lang@attr@value=\yquant@config@register@default@name%
\fi%
- \yquant@lang@create@parse@name#1[;
+ \yquant@lang@create@parse@name#1[;%
}
\yquant@langhelper@declare@command@uncontrolled{cbit}\yquant@lang@@cbit
-\yquant@langhelper@setup@attrs{qubit}{}{after,value}
+\yquant@langhelper@setup@attrs{cbit}{}{after,value,ancilla,in,out,inout}
\def\yquant@lang@@cbit#1{%
\let\yquant@lang@create@type=\yquant@register@type@c%
\def\yquant@lang@create@style{qubit}%
\unless\ifdefined\yquant@lang@attr@value%
\let\yquant@lang@attr@value=\yquant@config@register@default@name%
\fi%
- \yquant@lang@create@parse@name#1[;
+ \yquant@lang@create@parse@name#1[;%
}
\yquant@langhelper@declare@command@uncontrolled{qubits}\yquant@lang@@qubits
-\yquant@langhelper@setup@attrs{qubit}{}{after,value}
+\yquant@langhelper@setup@attrs{qubits}{}{after,value,ancilla,in,out,inout}
\def\yquant@lang@@qubits#1{%
\let\yquant@lang@create@type=\yquant@register@type@qs%
\def\yquant@lang@create@style{qubits}%
\unless\ifdefined\yquant@lang@attr@value%
\let\yquant@lang@attr@value=\yquant@config@register@default@name%
\fi%
- \yquant@lang@create@parse@name#1[;
+ \yquant@lang@create@parse@name#1[;%
}
\def\yquant@lang@create@parse@name#1[#2;{%
@@ -82,7 +112,7 @@
\ifnum\len<1 %
\PackageError{yquant.sty}{Invalid register length}%
{Valid register lengths are integers greater or equal to one.}%
- \fi
+ \fi%
}{%
\PackageError{yquant.sty}{Invalid register name}%
{Register names must not contain `[' apart from register length indication.}%
@@ -109,8 +139,11 @@
% determine x position
\ifdefined\yquant@lang@attr@after%
\yquant@register@get@maxxlist\yquant@lang@create@x\yquant@lang@attr@after%
+ \ifdefined\yquant@lang@attr@input%
+ \PackageError{yquant.sty}{An input register cannot be created with `after` attribute}{}%
+ \fi%
\else%
- \def\yquant@lang@create@x{0pt}%
+ \let\yquant@lang@create@x=\yquant@env@create@x%
\fi%
\begingroup%
\ifx\yquant@lang@attr@name\empty%
@@ -120,29 +153,87 @@
\fi%
% pre-set y position
\yquant@for \idx := \idx to \numexpr \len -1\relax {%
- \yquant@register@define%
- \yquant@lang@create@type%
- \yquant@lang@create@x%
- \reg\idx%
+ \ifdefined\yquant@lang@attr@input%
+ \expandafter\yquant@list@gdequeue\csname \yquant@prefix parameters\endcsname\outermap%
+ \ifx\outermap\empty%
+ \PackageError{yquant.sty}{Invalid subcircuit parameter count}%
+ {No outer register available for input register `\reg[\idx]`.}%
+ \fi%
+ \csxappto{\yquant@prefix draw}{%
+ \yquant@lang@create@check@input{\outermap}{\yquant@lang@create@type}%
+ {\reg[\idx]}%
+ }%
+ \unless\ifdefined\yquant@lang@attr@output%
+ \listcsxadd{\yquant@prefix inonly}%
+ {\the\numexpr\csname\yquant@prefix registers\endcsname+1\relax}%
+ \fi%
+ \yquant@register@alias%
+ \yquant@lang@create@type%
+ \yquant@lang@create@x%
+ \reg\idx\outermap%
+ \else%
+ \ifdefined\yquant@lang@attr@output%
+ \expandafter\yquant@list@gdequeue\csname\yquant@prefix parameters\endcsname\outermap%
+ \ifx\outermap\empty%
+ \PackageError{yquant.sty}{Invalid subcircuit parameter count}%
+ {No outer register available for output register `\reg`.}%
+ \fi%
+ \csxappto{\yquant@prefix draw}{%
+ \yquant@lang@create@check@output{\outermap}{\reg[\idx]}%
+ }%
+ \yquant@register@alias%
+ \yquant@lang@create@type%
+ \yquant@lang@create@x%
+ \reg\idx\outermap%
+ \else%
+ \yquant@register@define%
+ \yquant@lang@create@type%
+ \yquant@lang@create@x%
+ \reg\idx%
+ \fi%
+ \fi%
% First determine the actual height by a virtual draw command
- \pgfinterruptboundingbox%
- \yquant@env@virtualize@path%
- \path%
- (\yquant@lang@create@x, 0pt)
- node[/yquant/every label, /yquant/every initial label,%
- /yquant/every \yquant@lang@create@style\space label]
- {\trim@spaces{\yquant@lang@attr@value}};%
- \expandafter\yquant@register@update@height%
- \csname\yquant@prefix registers\endcsname%
- {\the\dimexpr\pgf@picmaxy-\pgf@picminy\relax}%
- \endpgfinterruptboundingbox%
+ \protected@edef\trimmedvalue{\trim@spaces{\yquant@lang@attr@value}}%
+ \unless\ifx\empty\trimmedvalue%
+ \pgfinterruptboundingbox%
+ \yquant@env@virtualize@path%
+ \edef\cmd{%
+ \noexpand\path%
+ (\yquant@lang@create@x, 0pt)%
+ node[/yquant/every label, /yquant/every initial label,%
+ /yquant/every \yquant@lang@create@style\space label%
+ \ifdefined\yquant@lang@attr@input, /yquant/every input label\fi]%
+ {\unexpanded\expandafter{\trimmedvalue}};%
+ }%
+ \cmd%
+ \ifdim\pgf@picminx<\csname\yquant@prefix xmin\endcsname%
+ \csxdef{\yquant@prefix xmin}{\the\pgf@picminx}%
+ \fi%
+ \expandafter\yquant@register@update@height%
+ \csname\yquant@prefix registers\endcsname%
+ {\the\pgf@picmaxy}%
+ \expandafter\yquant@register@update@depth%
+ \csname\yquant@prefix registers\endcsname%
+ {\the\dimexpr-\pgf@picminy\relax}%
+ \endpgfinterruptboundingbox%
+ \fi%
% Prepare to shipout
- \protected@csxappto{\yquant@prefix draw}{%
+ \csxappto{\yquant@prefix draw}{%
\yquant@lang@create@draw{\csname\yquant@prefix registers\endcsname}%
{\yquant@lang@create@x}%
{\yquant@lang@create@style}%
- {\yquant@lang@attr@value}%
+ \ifdefined\yquant@lang@attr@input1\else0\fi%
+ {\unexpanded\expandafter{\trimmedvalue}}%
{\yquant@lang@create@name}%
+ \unless\ifdefined\yquant@lang@attr@input%
+ \ifdefined\yquant@lang@attr@output%
+ \yquant@circuit@flushwire%
+ {\csname\yquant@prefix registers\endcsname}%
+ \yquant@register@set@type%
+ {\csname\yquant@prefix registers\endcsname}%
+ \yquant@lang@create@type%
+ \fi%
+ \fi%
}%
}%
\unless\ifx\yquant@lang@attr@name\empty%
@@ -154,32 +245,166 @@
\endgroup%
}
-\protected\def\yquant@lang@create@draw#1#2#3#4#5{%
+\protected\def\yquant@lang@create@check@input#1#2#3{%
+ \begingroup%
+ \let\yquant@prefix=\yquant@parent%
+ \unless\if#2\yquant@register@get@type{#1}%
+ \PackageError{yquant.sty}{Subcircuit expects wire of type `\yquant@register@type@tostring{#2}', but got `\yquant@register@type@tostring{\yquant@register@get@type{#1}}'}%
+ {Outer and inner wire types must match for input wire `\detokenize{#3}`.}%
+ \fi%
+ \endgroup%
+}
+
+\protected\def\yquant@lang@create@check@output#1#2{%
+ \begingroup%
+ \let\yquant@prefix=\yquant@parent%
+ \unless\if\yquant@register@type@none\yquant@register@get@type{#1}%
+ \PackageError{yquant.sty}%
+ {Subcircuit expects discarded wire, got `\yquant@register@type@tostring{\yquant@register@get@type{#1}}'}%
+ {Outer wire must be discarded before being acceptable for output-only register `\detokenize{#2}`.}%
+ \fi%
+ \endgroup%
+}
+
+\protected\def\yquant@lang@create@draw#1#2#3#4#5#6{%
\begingroup%
\dimdef\wireypos{\yquant@register@get@y{#1}}%
- \ifstrempty{#4}{%
+ \ifcsname\yquant@prefix xshift\endcsname%
+ \dimdef\createxpos{#2+\csname\yquant@prefix xshift\endcsname}%
+ \else%
+ \dimdef\createxpos{#2}%
+ \fi%
+ \ifstrempty{#5}{%
% For empty labels, we still put the node at the appropriate position as it may needs to be referenced, but we will not let it effect the bounding box (so that the left end is not shifted), and we don't need an inner separation, so that the label is truely just a coordinate.
- \path[overlay]
- (#2, \wireypos)%
- coordinate[name prefix=, name suffix=, name=yquantbox];
+ \path[overlay]%
+ (\createxpos, \wireypos)%
+ coordinate[name prefix=, name suffix=, name=yquantbox];%
+ \let\pgfshapeclippathhorzresult=\empty%
}{%
- \path
- (#2, \wireypos)%
- node[/yquant/every label, /yquant/every initial label,%
- /yquant/every #3 label, name prefix=, name suffix=, name=yquantbox]%
- {#4};%
+ \edef\cmd{%
+ \noexpand\path%
+ (\createxpos, \wireypos)%
+ node[/yquant/every label, /yquant/every initial label,%
+ /yquant/every #3 label\ifx1#4, /yquant/every input label\fi,%
+ name prefix=, name suffix=, name=yquantbox]%
+ {\unexpanded{#5}};%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \pgfshapeclippath{yquantbox}%
+ {/yquant/every label, /yquant/every initial label,%
+ /yquant/every #3 label\ifx1#4, /yquant/every input label\fi}%
+ \fi%
+ }%
+ \cmd%
}%
- % set the wire style to have the correct \pgflinewidth available (we don't allow individual line widths for different types of wires)
- \tikzset{/yquant/every wire}%
- \pgfpointanchor{yquantbox}{east}%
- \yquant@register@set@lastwire{#1}{{\the\pgf@x}{\the\pgf@x}{}{}}%
- \ifstrempty{#5}\relax{%
- \pgfnodealias{\tikz@pp@name{#5}}{yquantbox}%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ % if this is an alias, the creation is just an extension
+ \if\yquant@register@type@none\yquant@register@get@type{#1}%
+ \ifstrequal{#3}{initial}{%
+ \yquant@circuit@extendwire{#1}{east}%
+ }{%
+ % however, our inner wire is present, while the outer wire was discarded.
+ \tikzset{/yquant/every wire}%
+ \pgfpointanchor{yquantbox}{east}%
+ \yquant@register@set@lastwire{#1}{%
+ {\the\pgf@x}{\the\pgf@x}{}%
+ {\unexpanded\expandafter{\pgfshapeclippathhorzresult}}%
+ }%
+ }%
+ \else%
+ \yquant@circuit@extendwire{#1}{east}%
+ \fi%
+ \else%
+ % set the wire style to have the correct \pgflinewidth available (we don't allow individual line widths for different types of wires)
+ \tikzset{/yquant/every wire}%
+ \pgfpointanchor{yquantbox}{east}%
+ \yquant@register@set@lastwire{#1}{{\the\pgf@x}{\the\pgf@x}{}{}}%
+ \fi%
+ \ifstrempty{#6}\relax{%
+ \pgfnodealias{\tikz@pp@name{#6}}{yquantbox}%
}%
\endgroup%
}
% END_FOLD
+% BEGIN_FOLD Define own gates
+\def\yquantdefinegate#1{%
+ \ifcsname yquant@lang@#1\endcsname%
+ \PackageError{yquant.sty}{Gate redefined}%
+ {The gate `#1' already exists. Use \string\yquantredefinegate\space if you really want to redefine it.}%
+ \fi%
+ \@ifnextchar[{\yquantdefinegate@i{#1}}%
+ {\yquantdefinegate@i{#1}[/yquant/operators/every custom gate]}%
+}
+
+% while this command is provided to redefine gates, we do not clear the attributes that were once assigned to the previous one, so gate redefinition is discouraged!
+\def\yquantredefinegate#1{%
+ \unless\ifcsname yquant@lang@#1\endcsname%
+ \PackageError{yquant.sty}{Unknown gate redefined}%
+ {The gate `#1' is unknown and cannot be redefined. Use \string\yquantdefinegate\space to define it.}%
+ \fi%
+ \@ifnextchar[{\yquantdefinegate@i{#1}}%
+ {\yquantdefinegate@i{#1}[/yquant/operators/every custom gate]}%
+}
+
+\protected\long\def\yquantdefinegate@i#1[#2]#3{%
+ \pgfkeys{/yquant/operators/every #1/.style={#2}}%
+ \protected@edef\yquantdefinegate@do{%
+ \yquant@langhelper@declare@command%
+ {#1}%
+ \expandafter\noexpand\csname yquant@lang@@#1\endcsname%
+ % This does not clear the attributes for redefines, but makes at least sure nothing is marked as required that should not be.
+ \yquant@langhelper@setup@attrs{#1}{}{}%
+ % Now define the gate's content as a macro
+ \def\expandafter\noexpand\csname yquant@lang@@@#1\endcsname{%
+ #3%
+ }%
+ % And provide the implementation
+ \protected\def\expandafter\noexpand\csname yquant@lang@@#1\endcsname####1####2####3{%
+ \yquant@register@get@multiaslist%
+ \yquant@circuit@operator{####1}{####2}{####3}%
+ \let\noexpand\yquant@lang@attr@value=\expandafter\noexpand\csname yquant@lang@@@#1\endcsname%
+ \yquant@draw@@subcircuit{/yquant/operators/every #1}%
+ }%
+ }%
+ \yquantdefinegate@do%
+}
+
+\def\yquantdefinebox#1{%
+ \ifcsname yquant@lang@#1\endcsname%
+ \PackageError{yquant.sty}{Gate redefined}%
+ {The gate `#1' already exists. Use \string\yquantredefinebox\space if you really want to redefine it.}%
+ \fi%
+ \@ifnextchar[{\yquantdefinebox@i{#1}}%
+ {\yquantdefinebox@i{#1}[/yquant/operators/every box]}%
+}
+
+\def\yquantredefinebox#1{%
+ \unless\ifcsname yquant@lang@#1\endcsname%
+ \PackageError{yquant.sty}{Unknown gate redefined}%
+ {The gate `#1' is unknown and cannot be redefined. Use \string\yquantdefinebox\space to define it.}%
+ \fi%
+ \yquantdefinebox@i{#1}%
+ \@ifnextchar[{\yquantdefinebox@i{#1}}%
+ {\yquantdefinebox@i{#1}[/yquant/operators/every box]}%
+}
+
+\protected\long\def\yquantdefinebox@i#1[#2]#3{%
+ \pgfkeys{/yquant/operators/every #1/.style={#2}}%
+ \protected@edef\yquantdefinebox@do{%
+ \yquant@langhelper@declare@command%
+ {#1}%
+ \expandafter\noexpand\csname yquant@lang@@#1\endcsname%
+ \yquant@langhelper@setup@attrs{#1}{}{}%
+ \def\expandafter\noexpand\csname yquant@lang@@#1\endcsname{%
+ \yquant@draw%
+ {#3}%
+ {/yquant/operators/every #1}%
+ }%
+ }%
+ \yquantdefinebox@do%
+}
+% END_FOLD
+
% BEGIN_FOLD Box registers
% all-purpose box with arbitrary text
\yquant@langhelper@declare@command{box}\yquant@lang@@box
@@ -187,68 +412,30 @@
\def\yquant@lang@@box{%
\yquant@register@get@allowmultitrue%
\expandafter\yquant@draw%
- \expandafter{\yquant@lang@attr@value}
+ \expandafter{\yquant@lang@attr@value}%
{/yquant/operators/every box}%
}
% Hadamard
-\yquant@langhelper@declare@command{h}\yquant@lang@@h
-\yquant@langhelper@setup@attrs{h}{}{}
-\def\yquant@lang@@h{%
- \yquant@draw%
- {$H$}%
- {/yquant/operators/every h}%
-}
+\yquantdefinebox{h}{$H$}
% Pauli X (or NOT)
-\yquant@langhelper@declare@command{x}\yquant@lang@@x
-\yquant@langhelper@setup@attrs{x}{}{}
-\def\yquant@lang@@x{%
- \yquant@draw%
- {$X$}%
- {/yquant/operators/every x}%
-}
+\yquantdefinebox{x}[/yquant/operators/every pauli]{$X$}
% Pauli Y
-\yquant@langhelper@declare@command{y}\yquant@lang@@y
-\yquant@langhelper@setup@attrs{y}{}{}
-\def\yquant@lang@@y{%
- \yquant@draw%
- {$Y$}%
- {/yquant/operators/every y}%
-}
+\yquantdefinebox{y}[/yquant/operators/every pauli]{$Y$}
% Pauli Z
-\yquant@langhelper@declare@command{z}\yquant@lang@@z
-\yquant@langhelper@setup@attrs{z}{}{}
-\def\yquant@lang@@z{%
- \yquant@draw%
- {$Z$}%
- {/yquant/operators/every z}%
-}
+\yquantdefinebox{z}[/yquant/operators/every pauli]{$Z$}
% sub-circuit: This is a nested circuit.
-%\yquant@langhelper@declare@command{subcircuit}\yquant@lang@@subcircuit
-%\yquant@langhelper@setup@attrs{subcircuit}{}{shift}
-%\protected\def\yquant@lang@@subcircuit#1#2#3{%
-% % First we restore access to the yquant environment (which was a shorthand to
-% % re-starting the parser within the environment, conveniently forbidding nesting).
-% \let\yquant=\yquant@envunstar%
-% \cslet{yquant*}\yquant@envstar%
-% % Then determine the actual subcircuit content.
-% \yquant@circuit@subcircuit\yquant@lang@attr@value%
-% % Now the subcircuit is stored in \yquant@circuit@subcircuit@box. However, note that
-% % it may contain named nodes (whose names are stored in
-% % \csname\yquant@prefix circuit@subcircuit@nodelist\endcsname) that need to be shifted
-% % whenever we actually position the subcircuit.
-%% \let\yquant@draw@callback@box=\yquant@circuit@subcircuit@shiftnodes%
-% \yquant@register@get@allowmultitrue%
-% \yquant@draw%
-% {\copy\yquant@circuit@subcircuit@box}%
-% {/yquant/operators/every subcircuit}
-% {#1}{#2}{#3}%
-% \global\setbox\yquant@circuit@subcircuit@box=\box\voidb@x% memory management
-%}
+\yquant@langhelper@declare@command{subcircuit}\yquant@lang@@subcircuit
+\yquant@langhelper@setup@attrs{subcircuit}{value}{}
+\protected\def\yquant@lang@@subcircuit#1#2#3{%
+ \yquant@register@get@multiaslist%
+ \yquant@circuit@operator{#1}{#2}{#3}%
+ \yquant@draw@@subcircuit{/yquant/operators/every subcircuit}%
+}
% END_FOLD
% BEGIN_FOLD other geometric shapes
@@ -291,8 +478,8 @@
\protected\def\yquant@lang@@slash#1{%
% temporarily squeeze most into the separation
\pgfkeys{%
- /yquant/operator/minimum width=0pt,
- /yquant/operator/separation=.5\dimexpr\yquant@config@operator@sep-\pgflinewidth\relax
+ /yquant/operator/minimum width=0pt,%
+ /yquant/operator/separation=.5\dimexpr\yquant@config@operator@sep-\pgflinewidth\relax%
}%
\def\yquant@draw@callback@wire##1{%
\yquant@register@set@x%
@@ -332,20 +519,7 @@
\yquant@langhelper@setup@attrs{measure}{}{value,type}
\def\yquant@lang@@measure{%
\ifdefined\yquant@lang@attr@type%
- \expandafter\ifstrequal\expandafter{\yquant@lang@attr@type}{qubit}%
- {\let\yquant@circuit@settype@to=\yquant@register@type@q}%
- {%
- \expandafter\ifstrequal\expandafter{\yquant@lang@attr@type}{cbit}%
- {\let\yquant@circuit@settype@to=\yquant@register@type@c}%
- {%
- \expandafter\ifstrequal\expandafter{\yquant@lang@attr@type}{qubits}%
- {\let\yquant@circuit@settype@to=\yquant@register@type@qs}%
- {%
- \PackageError{yquant.sty}{Invalid bit type: `\yquant@lang@attr@type}%
- {Use one of `qubit', `cbit', or `qubits'.}%
- }%
- }%
- }%
+ \yquant@register@type@fromstring\yquant@lang@attr@type\yquant@circuit@settype@to%
\else%
\let\yquant@circuit@settype@to=\yquant@register@type@c%
\fi%
@@ -365,20 +539,7 @@
\yquant@langhelper@setup@attrs{dmeter}{}{value,type}
\def\yquant@lang@@dmeter{%
\ifdefined\yquant@lang@attr@type%
- \expandafter\ifstrequal\expandafter{\yquant@lang@attr@type}{qubit}%
- {\let\yquant@circuit@settype@to=\yquant@register@type@q}%
- {%
- \expandafter\ifstrequal\expandafter{\yquant@lang@attr@type}{cbit}%
- {\let\yquant@circuit@settype@to=\yquant@register@type@c}%
- {%
- \expandafter\ifstrequal\expandafter{\yquant@lang@attr@type}{qubits}%
- {\let\yquant@circuit@settype@to=\yquant@register@type@qs}%
- {%
- \PackageError{yquant.sty}{Invalid bit type: `\yquant@lang@attr@type}%
- {Use one of `qubit', `cbit', or `qubits'.}%
- }%
- }%
- }%
+ \yquant@register@type@fromstring\yquant@lang@attr@type\yquant@circuit@settype@to%
\else%
\let\yquant@circuit@settype@to=\yquant@register@type@c%
\fi%
@@ -402,7 +563,7 @@
\yquant@draw%
{}%
{/yquant/operators/every barrier}%
- {}{}
+ {}{}%
}
\yquant@langhelper@declare@command@uncontrolled{correlate}\yquant@lang@@correlate
@@ -453,25 +614,12 @@
\fi%
}%
}
-\long\def\@fifthoffive#1#2#3#4#5{#5}
+
\protected\def\yquant@lang@@init#1{%
\yquant@register@get@allowmultitrue%
\yquant@register@get@ids{#1}%
\ifdefined\yquant@lang@attr@type%
- \expandafter\ifstrequal\expandafter{\yquant@lang@attr@type}{qubit}%
- {\let\yquant@circuit@settype@to=\yquant@register@type@q}%
- {%
- \expandafter\ifstrequal\expandafter{\yquant@lang@attr@type}{cbit}%
- {\let\yquant@circuit@settype@to=\yquant@register@type@c}%
- {%
- \expandafter\ifstrequal\expandafter{\yquant@lang@attr@type}{qubits}%
- {\let\yquant@circuit@settype@to=\yquant@register@type@qs}%
- {%
- \PackageError{yquant.sty}{Invalid bit type: `\yquant@lang@attr@type}%
- {Use one of `qubit', `cbit', or `qubits'.}%
- }%
- }%
- }%
+ \yquant@register@type@fromstring\yquant@lang@attr@type\yquant@circuit@settype@to%
\else%
% We don't know which type is desired. Scan all target registers and use the first wire that is available as a type.
\let\yquant@circuit@settype@to=\yquant@register@type@none%
@@ -492,15 +640,9 @@
% now we don't have a clue; assume it's a qubit
\let\yquant@circuit@settype@to=\yquant@register@type@q%
\fi%
- \ifx\yquant@circuit@settype@to\yquant@register@type@q%
- \def\yquant@lang@attr@type{qubit}%
- \else%
- \ifx\yquant@circuit@settype@to\yquant@register@type@c%
- \def\yquant@lang@attr@type{cbit}%
- \else%
- \def\yquant@lang@attr@type{qubits}%
- \fi%
- \fi%
+ \edef\yquant@lang@attr@type{%
+ \yquant@register@type@tostring\yquant@circuit@settype@to%
+ }%
\fi%
\let\yquant@draw@callback@wire=\yquant@circuit@settype%
\let\yquant@draw@@multi=\yquant@draw@@multiinit%
@@ -532,20 +674,7 @@
\yquant@langhelper@setup@attrs{settype}{value}{}
\protected\def\yquant@lang@@settype#1{%
\yquant@register@get@ids{#1}%
- \expandafter\ifstrequal\expandafter{\yquant@lang@attr@value}{qubit}%
- {\let\yquant@circuit@settype@to=\yquant@register@type@q}%
- {%
- \expandafter\ifstrequal\expandafter{\yquant@lang@attr@value}{cbit}%
- {\let\yquant@circuit@settype@to=\yquant@register@type@c}%
- {%
- \expandafter\ifstrequal\expandafter{\yquant@lang@attr@value}{qubits}%
- {\let\yquant@circuit@settype@to=\yquant@register@type@qs}%
- {%
- \PackageError{yquant.sty}{Invalid bit type: `\yquant@lang@attr@value}%
- {Use one of `qubit', `cbit', or `qubits'.}%
- }%
- }%
- }%
+ \yquant@register@type@fromstring\yquant@lang@attr@value\yquant@circuit@settype@to%
\yquant@circuit@actonwires%
\yquant@circuit@settype%
\yquant@register@get@ids@list%
diff --git a/graphics/pgf/contrib/yquant/tex/yquant-langhelper.tex b/graphics/pgf/contrib/yquant/tex/yquant-langhelper.tex
index 102a8959d9..8611424194 100644
--- a/graphics/pgf/contrib/yquant/tex/yquant-langhelper.tex
+++ b/graphics/pgf/contrib/yquant/tex/yquant-langhelper.tex
@@ -45,7 +45,7 @@
}%
\fi%
\endpgfkeysinterruptkeyfilter%
- },
+ },%
/pgf/key filters/attr filter/.code={%
% we need to capture every non-attribute (which means filtering them out).
\expandafter\ifyquant@beginswith\expandafter{\pgfkeyscurrentkey}{/yquant/attrs/}{%
@@ -84,9 +84,9 @@
\pgfkeysfiltercontinuefalse%
}%
}%
- },
- /yquant/attr filter/.style={
- /pgf/key filters/attr filter/.install key filter,
+ },%
+ /yquant/attr filter/.style={%
+ /pgf/key filters/attr filter/.install key filter,%
/yquant/attr filter handler/.install key filter handler=\yquant@attrs@remaining%
}%
}
@@ -112,7 +112,7 @@
\pgfkeysinterruptkeyfilter%
\pgfkeys{/yquant/all attrs/##1={####1}}%
\endpgfkeysinterruptkeyfilter%
- }
+ }%
}%
}%
\eappto\keysset{%
diff --git a/graphics/pgf/contrib/yquant/tex/yquant-registers.tex b/graphics/pgf/contrib/yquant/tex/yquant-registers.tex
index 18a23662d3..c90a44614c 100644
--- a/graphics/pgf/contrib/yquant/tex/yquant-registers.tex
+++ b/graphics/pgf/contrib/yquant/tex/yquant-registers.tex
@@ -3,6 +3,38 @@
\def\yquant@register@type@c{2}
\def\yquant@register@type@qs{3}
+\def\yquant@register@type@tostring#1{%
+ \ifcase#1 %
+ nobit%
+ \or%
+ qubit%
+ \or%
+ cbit%
+ \or%
+ qubits%
+ \else%
+ \PackageError{yquant.sty}{Internal inconsistency detected}%
+ {Unknown wire type: `#1'.}%
+ \fi%
+}
+
+\protected\def\yquant@register@type@fromstring#1#2{%
+ \expandafter\ifstrequal\expandafter{#1}{qubit}%
+ {\let#2=\yquant@register@type@q}%
+ {%
+ \expandafter\ifstrequal\expandafter{#1}{cbit}%
+ {\let#2=\yquant@register@type@c}%
+ {%
+ \expandafter\ifstrequal\expandafter{#1}{qubits}%
+ {\let#2=\yquant@register@type@qs}%
+ {%
+ \PackageError{yquant.sty}{Invalid bit type: `#1'}%
+ {Use one of `qubit', `cbit', or `qubits'.}%
+ }%
+ }%
+ }%
+}
+
% Internally, we store the register information in a single macro. Indeed, this is almost always faster than using multiple macros (at least in the way implemented here), apart from changing a single type of information, which is almost as fast.
% BEGIN_FOLD Constructor: create single register and cleanup environment
@@ -16,17 +48,55 @@
\csxdef{\yquant@prefix register@\csname\yquant@prefix registers\endcsname}{%
{#1}% type
{#2}% x pos
- {\yquant@config@register@minimum@height}% height; at the end, the y position
- {{0pt}{0pt}{}{}}% wire start positions and clipping
+ {{\the\dimexpr.5\dimexpr\yquant@config@register@minimum@height\relax\relax}%
+ {\the\dimexpr.5\dimexpr\yquant@config@register@minimum@height\relax\relax}}% height and depth; at the end, the y position
+ {{\yquant@env@create@x}{\yquant@env@create@x}{}{}}% wire start positions and clipping
{}% wire style
}%
\global\csletcs{\yquant@prefix registername@#3[#4]}{\yquant@prefix registers}%
- \csxdef{\yquant@prefix registerhigh@\reg}{#4}%
+ \csxdef{\yquant@prefix registerhigh@#3}{#4}%
\yquant@cleanup@csadd{\yquant@prefix register@\csname\yquant@prefix registers\endcsname}%
\yquant@cleanup@csadd{\yquant@prefix registername@#3[#4]}%
\ifnum0=#4\relax%
- \yquant@cleanup@csadd{\yquant@prefix registerhigh@\reg}%
+ \yquant@cleanup@csadd{\yquant@prefix registerhigh@#3}%
+ \fi%
+}
+
+% in a subcircuit, create a new register that is only an alias for an existing register in the outer circuit.
+% #5: id in the outer circuit
+\protected\def\yquant@register@alias#1#2#3#4#5{%
+ \csnumgdef{\yquant@prefix registers}%
+ {\csname\yquant@prefix registers\endcsname+1}%
+ \ifcsname\yquant@parent registermap@#5\endcsname%
+ % the parent is already an alias itself, pass this on transparently
+ \global\csletcs%
+ {\yquant@prefix registermap@\csname\yquant@prefix registers\endcsname}%
+ {\yquant@parent registermap@#5}%
+ \else%
+ \csxdef{\yquant@prefix registermap@\csname\yquant@prefix registers\endcsname}%
+ {\yquant@parent register@#5}%
+ \fi%
+ % even though this is an alias, we still need to keep track of its internal dimensions
+ \csgdef{\yquant@prefix registerdim@\csname\yquant@prefix registers\endcsname}%
+ {{0pt}{0pt}}%
+ \yquant@cleanup@csadd{\yquant@prefix registerdim@\csname\yquant@prefix registers\endcsname}%
+ \global\csletcs{\yquant@prefix registername@#3[#4]}{\yquant@prefix registers}%
+ \csxdef{\yquant@prefix registerhigh@#3}{#4}%
+ \yquant@cleanup@csadd{\yquant@prefix registermap@\csname\yquant@prefix registers\endcsname}%
+ \yquant@cleanup@csadd{\yquant@prefix registername@#3[#4]}%
+ \ifnum0=#4\relax%
+ \yquant@cleanup@csadd{\yquant@prefix registerhigh@#3}%
+ \fi%
+ \csxdef{\yquant@prefix lastinput}{{\csname\yquant@prefix registers\endcsname}{#5}}%
+ \unless\ifcsname\yquant@prefix firstinput\endcsname%
+ \csxdef{\yquant@prefix firstinput}{{\csname\yquant@prefix registers\endcsname}{#5}}%
+ \yquant@cleanup@csadd{\yquant@prefix firstinput}%
+ \yquant@cleanup@csadd{\yquant@prefix lastinput}%
\fi%
+ \expandafter\yquant@register@set@@aux%
+ \csname\csname\yquant@prefix registermap@\csname\yquant@prefix registers\endcsname\endcsname\endcsname%
+ \yquant@register@set@x@aux%
+ {#2}%
}
% END_FOLD
@@ -43,19 +113,17 @@
% same as before, but resolves to the _index_ of the last register
\protected\def\yquant@register@get@id@high#1#2{%
- \ifcsname\yquant@prefix registerhigh@#2\endcsname%
- \letcs#1{\yquant@prefix registerhigh@#2}%
- \else%
+ \unless\ifcsname\yquant@prefix registerhigh@#2\endcsname%
\yquant@register@get@id@lazycreate{#2}%
- \letcs#1{\yquant@prefix registers}%
\fi%
+ \letcs#1{\yquant@prefix registerhigh@#2}%
}
% In the lazy mode, we create all unknown registers on-the-fly.
\def\yquant@register@get@id@lazycreate#1{%
\ifyquant@env@lazy%
% In principle, we could just call \yquant@lang@@qubit. However, if access to a vector register is desired and a _part_ of this does already exist (though not the requested index), we only create the missing registers.
- \yquant@register@get@id@lazycreate@parse#1[;
+ \yquant@register@get@id@lazycreate@parse#1[;%
\else%
\PackageError{yquant.sty}{Register `#1' unknown}%
{You referred to an unknown register.
@@ -96,13 +164,14 @@
\yquant@for \idx := \idx to \numexpr \len -1\relax {%
\yquant@register@define%
\yquant@register@type@q%
- {0pt}%
- \reg\idx
+ {\yquant@env@create@x}%
+ \reg\idx%
% Prepare to shipout
\csxappto{\yquant@prefix draw}{%
\yquant@lang@create@draw{\csname\yquant@prefix registers\endcsname}%
{0pt}%
{qubit}%
+ 0%
{}%
{}%
}%
@@ -137,7 +206,10 @@
\catcode`(=\active%
\def[##1]{\yquant@register@get@ids@@index{##1}}%
\def(##1){\yquant@register@get@ids@@multi{##1}}%
- \edef\yquant@register@get@ids@retokenized{\scantokens{#1\noexpand}}%
+ % this is also invoked by other languages which might have completely redefined all catcodes (qasm redefines the backslash), so don't just add \noexpand at the end of the \scantokens...
+ \everyeof{\noexpand}%
+ \endlinechar=-1 %
+ \edef\yquant@register@get@ids@retokenized{\scantokens{#1}}%
\expandafter%
\endgroup%
\expandafter\docsvlist\expandafter{\yquant@register@get@ids@retokenized}%
@@ -239,7 +311,7 @@
}%
\count0=2147483647 %
\csletcs{ifallowmain}{iffalse}%
- }{
+ }{%
\let\yquant@register@get@ids@norange@checkindex@setmain=\relax%
}%
\else%
@@ -346,7 +418,7 @@
\expandafter\yquant@register@get@id\expandafter\idx\expandafter{\idx}%
\count6=\idx%
\csletcs{ifallowmain}{iffalse}%
- }{
+ }{%
\yquant@register@get@id\idx{\current[#1]}%
}%
\else%
@@ -575,50 +647,99 @@
}%
}
+\protected\def\yquant@register@multi@splitparts@sort{%
+ \yquant@sort@list\yquant@register@get@ids@list\yquant@sort@ascending%
+}
+
\protected\def\yquant@register@get@multiassingle{%
\yquant@register@get@allowmultitrue%
\let\yquant@register@multi@splitparts=\yquant@register@multi@splitparts@sepall%
\preto\yquant@attrs@remaining{/yquant/operator/multi as single,}%
}
+
+\protected\def\yquant@register@get@multiaslist{%
+ \yquant@register@get@allowmultitrue%
+ \let\yquant@register@multi@splitparts=\yquant@register@multi@splitparts@sort%
+}
+
+\let\yquant@register@multi@reset@original@splitparts=\yquant@register@multi@splitparts%
+\protected\def\yquant@register@reset@multi{%
+% \yquant@register@get@allowmultifalse% not needed, as \yquant@circuit@operator automatically resets it
+ \let\yquant@register@multi@splitparts=\yquant@register@multi@reset@original@splitparts%
+}
% END_FOLD
% BEGIN_FOLD Getters: extract the requested information from the register with given id
\def\yquant@register@get@type#1{%
- \expandafter\expandafter\expandafter%
- \yquant@register@get@type@aux\csname\yquant@prefix register@#1\endcsname%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@type@aux\csname\csname\yquant@prefix registermap@#1\endcsname\endcsname%
+ \else%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@type@aux\csname\yquant@prefix register@#1\endcsname%
+ \fi%
}
\def\yquant@register@get@type@aux#1#2#3#4#5{#1}
\def\yquant@register@get@x#1{%
- \expandafter\expandafter\expandafter%
- \yquant@register@get@x@aux\csname\yquant@prefix register@#1\endcsname%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@x@aux\csname\csname\yquant@prefix registermap@#1\endcsname\endcsname%
+ \else%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@x@aux\csname\yquant@prefix register@#1\endcsname%
+ \fi%
}
\def\yquant@register@get@x@aux#1#2#3#4#5{#2}
\def\yquant@register@get@height#1{%
- \expandafter\expandafter\expandafter%
- \yquant@register@get@height@aux\csname\yquant@prefix register@#1\endcsname%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \expandafter\expandafter\expandafter%
+ \@firstoftwo\csname\yquant@prefix registerdim@#1\endcsname%
+ \else%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@height@aux\csname\yquant@prefix register@#1\endcsname%
+ \fi%
}
-\def\yquant@register@get@height@aux#1#2#3#4#5{#3}
+\def\yquant@register@get@height@aux#1#2#3#4#5{\@firstoftwo#3}
+
+\def\yquant@register@get@depth#1{%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \expandafter\expandafter\expandafter%
+ \@secondoftwo\csname\yquant@prefix registerdim@#1\endcsname%
+ \else%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@depth@aux\csname\yquant@prefix register@#1\endcsname%
+ \fi%
+}
+
+\def\yquant@register@get@depth@aux#1#2#3#4#5{\@secondoftwo#3}
% The y parameter get macros exist in two forms: The protected one is used during the storage to the draw macro; it should never be executed. The env environment then maps them to their proper expandable forms.
-\protected\def\yquant@register@get@@protected{%
+\protected\def\yquant@register@get@y{%
\PackageError%
{yquant.sty}%
{Execution of a get-y macro in an illegal context}%
{get-y macros may not be called unless the yquant environment ends.}%
}
-\let\yquant@register@get@y=\yquant@register@get@@protected
-\let\yquant@register@y=\yquant@register@get@@protected
% This plays a similar role: It must never be expanded before the tikz command is invoked (because it does not exist).
-\let\nodepart=\yquant@register@get@@protected
+\protected\def\nodepart{}
-% getting the y position is the same as getting the height parameter, since we will reuse it at the end.
-\let\yquant@register@get@y@unprotected=\yquant@register@get@height
+\def\yquant@register@get@y@unprotected#1{%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@y@aux\csname\csname\yquant@prefix registermap@#1\endcsname\endcsname%
+ \else%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@y@aux\csname\yquant@prefix register@#1\endcsname%
+ \fi%
+}
+
+\def\yquant@register@get@y@aux#1#2#3#4#5{#3}
% y distance between two registers.
\def\yquant@register@get@ydist#1#2{%
@@ -626,17 +747,23 @@
{\the\dimexpr\yquant@register@get@y{#2}-\yquant@register@get@y{#1}\relax}%
}
-% y position of the current register
-\def\yquant@register@y@unprotected{0pt}%
-
\protected\def\yquant@register@get@y@@expandable{%
\let\yquant@register@get@y=\yquant@register@get@y@unprotected%
- \let\yquant@register@y=\yquant@register@y@unprotected%
}
\def\yquant@register@get@lastwire#1{%
- \expandafter\expandafter\expandafter%
- \yquant@register@get@lastwire@aux\csname\yquant@prefix register@#1\endcsname%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \expandafter\@firstoftwo%
+ \else%
+ \expandafter\@secondoftwo%
+ \fi%
+ {%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@lastwire@aux\csname\csname\yquant@prefix registermap@#1\endcsname\endcsname%
+ }{%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@lastwire@aux\csname\yquant@prefix register@#1\endcsname%
+ }%
}
\protected\def\yquant@register@get@lastwire@aux#1#2#3#4#5#6{%
@@ -644,15 +771,30 @@
}
\def\yquant@register@get@style#1{%
- \expandafter\expandafter\expandafter%
- \yquant@register@get@style@aux\csname\yquant@prefix register@#1\endcsname%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@style@aux\csname\csname\yquant@prefix registermap@#1\endcsname\endcsname%
+ \else%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@style@aux\csname\yquant@prefix register@#1\endcsname%
+ \fi%
}
\def\yquant@register@get@style@aux#1#2#3#4#5{#5}
\def\yquant@register@get@typeywire#1{%
- \expandafter\expandafter\expandafter%
- \yquant@register@get@typeywire@aux\csname\yquant@prefix register@#1\endcsname%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \expandafter\@firstoftwo%
+ \else%
+ \expandafter\@secondoftwo%
+ \fi%
+ {%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@typeywire@aux\csname\csname\yquant@prefix registermap@#1\endcsname\endcsname%
+ }{%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@typeywire@aux\csname\yquant@prefix register@#1\endcsname%
+ }%
}
\protected\def\yquant@register@get@typeywire@aux#1#2#3#4#5#6#7#8{%
@@ -695,12 +837,23 @@
% BEGIN_FOLD Setters: change register information
\protected\long\def\yquant@register@set@@aux#1#2#3{%
- \long\xdef#1{\expandafter#2#1{#3}}%
+ \xdef#1{\expandafter#2#1{#3}}%
}
\protected\def\yquant@register@set@type#1{%
- \expandafter\yquant@register@set@@aux%
- \csname\yquant@prefix register@#1\endcsname\yquant@register@set@type@aux%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \expandafter\@firstoftwo%
+ \else%
+ \expandafter\@secondoftwo%
+ \fi%
+ {%
+ \expandafter\yquant@register@set@@aux%
+ \csname\csname\yquant@prefix registermap@#1\endcsname\endcsname%
+ }{%
+ \expandafter\yquant@register@set@@aux%
+ \csname\yquant@prefix register@#1\endcsname%
+ }%
+ \yquant@register@set@type@aux%
}
\long\def\yquant@register@set@type@aux#1#2#3#4#5#6{%
@@ -708,8 +861,19 @@
}
\protected\def\yquant@register@set@x#1{%
- \expandafter\yquant@register@set@@aux%
- \csname\yquant@prefix register@#1\endcsname\yquant@register@set@x@aux%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \expandafter\@firstoftwo%
+ \else%
+ \expandafter\@secondoftwo%
+ \fi%
+ {%
+ \expandafter\yquant@register@set@@aux%
+ \csname\csname\yquant@prefix registermap@#1\endcsname\endcsname%
+ }{%
+ \expandafter\yquant@register@set@@aux%
+ \csname\yquant@prefix register@#1\endcsname%
+ }%
+ \yquant@register@set@x@aux%
}
\long\def\yquant@register@set@x@aux#1#2#3#4#5#6{%
@@ -717,25 +881,99 @@
}
\protected\def\yquant@register@update@height#1#2{%
- \ifdim#2>\yquant@register@get@height{#1} %
- \expandafter\yquant@register@set@@aux%
- \csname\yquant@prefix register@#1\endcsname\yquant@register@set@height@aux{#2}%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \ifdim#2>%
+ \expandafter\expandafter\expandafter%
+ \@firstoftwo\csname\yquant@prefix registerdim@#1\endcsname%
+ \relax%
+ \csxdef{\yquant@prefix registerdim@#1}{%
+ {#2}%
+ {\expandafter\expandafter\expandafter%
+ \@secondoftwo\csname\yquant@prefix registerdim@#1\endcsname}%
+ }%
+ \fi%
+ \else%
+ \ifdim#2>%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@height@aux\csname\yquant@prefix register@#1\endcsname%
+ \relax%
+ \expandafter\yquant@register@set@@aux%
+ \csname\yquant@prefix register@#1\endcsname%
+ \yquant@register@set@height@aux{#2}%
+ \fi%
+ \fi%
+}
+
+\long\def\yquant@register@set@height@aux#1#2#3#4#5#6{%
+ \unexpanded{{#1}{#2}}%
+ {{#6}{\unexpanded\expandafter{\@secondoftwo#3}}}%
+ \unexpanded{{#4}{#5}}%
+}
+
+\protected\def\yquant@register@update@depth#1#2{%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \ifdim#2>%
+ \expandafter\expandafter\expandafter%
+ \@secondoftwo\csname\yquant@prefix registerdim@#1\endcsname%
+ \relax%
+ \csxdef{\yquant@prefix registerdim@#1}{%
+ {\expandafter\expandafter\expandafter%
+ \@firstoftwo\csname\yquant@prefix registerdim@#1\endcsname}%
+ {#2}%
+ }%
+ \fi%
+ \else%
+ \ifdim#2>%
+ \expandafter\expandafter\expandafter%
+ \yquant@register@get@depth@aux\csname\yquant@prefix register@#1\endcsname%
+ \relax%
+ \expandafter\yquant@register@set@@aux%
+ \csname\yquant@prefix register@#1\endcsname%
+ \yquant@register@set@depth@aux{#2}%
+ \fi%
\fi%
}
+\long\def\yquant@register@set@depth@aux#1#2#3#4#5#6{%
+ \unexpanded{{#1}{#2}}%
+ {{\unexpanded\expandafter{\@firstoftwo#3}}{#6}}%
+ \unexpanded{{#4}{#5}}%
+}
+
\protected\def\yquant@register@set@y#1{%
- \expandafter\yquant@register@set@@aux%
- \csname\yquant@prefix register@#1\endcsname\yquant@register@set@height@aux%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \expandafter\@firstoftwo%
+ \else%
+ \expandafter\@secondoftwo%
+ \fi%
+ {%
+ \expandafter\yquant@register@set@@aux%
+ \csname\csname\yquant@prefix registermap@#1\endcsname\endcsname%
+ }{%
+ \expandafter\yquant@register@set@@aux%
+ \csname\yquant@prefix register@#1\endcsname%
+ }%
+ \yquant@register@set@y@aux%
}
-% Set the currently used register
-\long\def\yquant@register@set@height@aux#1#2#3#4#5#6{%
+\long\def\yquant@register@set@y@aux#1#2#3#4#5#6{%
\unexpanded{{#1}{#2}}{#6}\unexpanded{{#4}{#5}}%
}
\protected\def\yquant@register@set@lastwire#1{%
- \expandafter\yquant@register@set@@aux%
- \csname\yquant@prefix register@#1\endcsname\yquant@register@set@lastwire@aux%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \expandafter\@firstoftwo%
+ \else%
+ \expandafter\@secondoftwo%
+ \fi%
+ {%
+ \expandafter\yquant@register@set@@aux%
+ \csname\csname\yquant@prefix registermap@#1\endcsname\endcsname%
+ }{%
+ \expandafter\yquant@register@set@@aux%
+ \csname\yquant@prefix register@#1\endcsname%
+ }%
+ \yquant@register@set@lastwire@aux%
}
\long\def\yquant@register@set@lastwire@aux#1#2#3#4#5#6{%
@@ -743,8 +981,19 @@
}
\protected\def\yquant@register@set@style#1{%
- \expandafter\yquant@register@set@@aux%
- \csname\yquant@prefix register@#1\endcsname\yquant@register@set@style@aux%
+ \ifcsname\yquant@prefix registermap@#1\endcsname%
+ \expandafter\@firstoftwo%
+ \else%
+ \expandafter\@secondoftwo%
+ \fi%
+ {%
+ \expandafter\yquant@register@set@@aux%
+ \csname\csname\yquant@prefix registermap@#1\endcsname\endcsname%
+ }{%
+ \expandafter\yquant@register@set@@aux%
+ \csname\yquant@prefix register@#1\endcsname%
+ }%
+ \yquant@register@set@style@aux%
}
\long\def\yquant@register@set@style@aux#1#2#3#4#5#6{%
diff --git a/graphics/pgf/contrib/yquant/tex/yquant-shapes.tex b/graphics/pgf/contrib/yquant/tex/yquant-shapes.tex
index 3a03985ca5..7ce146171b 100644
--- a/graphics/pgf/contrib/yquant/tex/yquant-shapes.tex
+++ b/graphics/pgf/contrib/yquant/tex/yquant-shapes.tex
@@ -21,7 +21,7 @@
{\PackageError{yquant.sty}%
{Failed to patch \string\pgfdeclareshape}%
{yquant could not provide a necessary extension to pgf.}}%
-% Every shape additionally provides information about how it should clip the wires. The clipping softpath instructions of shape #1 are stored into \pgfshapeclippathresult. The path is drawn with the tikz options #2 in place.
+% Every shape additionally provides information about how it should clip the wires. The clipping softpath instructions of shape #1 are stored into \pgfshapeclippath[horz|vert]result. The path is drawn with the tikz options #2 in place.
\protected\def\pgfshapeclippath#1#2{%
% Ok, check whether #1 is known!
\ifcsname pgf@sh@ns@#1\endcsname%
@@ -56,7 +56,8 @@
\end{pgfinterruptpath}%
\else%
\pgferror{No shape named #1 is known}%
- \pgfpointorigin%
+ \global\let\pgfshapeclippathhorzresult=\empty%
+ \global\let\pgfshapeclippathvertresult=\empty%
\fi%
}
@@ -81,7 +82,7 @@
{\southwest%
\advance\pgf@x by \@tempdima%
\advance\pgf@y by \@tempdimb%
- }
+ }%
{\northeast%
\advance\pgf@x by -\@tempdima%
\advance\pgf@y by -\@tempdimb%
@@ -441,7 +442,7 @@
% we only draw the meter symbol if this is the main part of a multi-register (or there is no text)
\ifyquant@config@operator@multi@main%
% Make sure the meter does not extend beyond the box (we are in a scope here)
- \path [clip]
+ \path [clip]%
(-\xradius, \yradius) rectangle (\xradius, -\yradius);%
% The position of the meter symbol depends on the presence of the text. If there is no text, we just vertically center. If there is some text, we shift the symbol upwards from the text until there is no overlap any more.
\csname pgf@anchor@yquant-measure@text\endcsname%
@@ -451,10 +452,10 @@
\else%
\@tempdima=\dimexpr\pgf@y+2pt\relax%
\fi%
- \path [/yquant/operators/every measure meter]
+ \path [/yquant/operators/every measure meter]%
(-2.25mm, \@tempdima) arc[start angle=160, end angle=20,%
- x radius=2.25mm, y radius=1.4mm]
- (0, \@tempdima) -- ++(1.6mm, 2.3mm);
+ x radius=2.25mm, y radius=1.4mm]%
+ (0, \@tempdima) -- ++(1.6mm, 2.3mm);%
\fi%
}%
}
@@ -553,7 +554,7 @@
\shorten%
\@tempdima=\dimexpr\yradius+\pgf@x\relax%
\@tempdimb=\dimexpr\yradius+\pgf@y\relax%
- \pgfpathrectanglecorners
+ \pgfpathrectanglecorners%
{\pgfqpoint{-.5\pgflinewidth}{\@tempdima}}%
{\pgfqpoint{.5\pgflinewidth}{-\@tempdimb}}%
}%
diff --git a/graphics/pgf/contrib/yquant/tex/yquant-tools.tex b/graphics/pgf/contrib/yquant/tex/yquant-tools.tex
index fe1efecbf4..5f7efe5e03 100644
--- a/graphics/pgf/contrib/yquant/tex/yquant-tools.tex
+++ b/graphics/pgf/contrib/yquant/tex/yquant-tools.tex
@@ -21,11 +21,27 @@
\let\@eattoken= %
}
+% a bit faster than nested \@firstoftwo/\@secondoftwo
+% note \@thirdofthree is defined in the latex kernel already.
+\long\def\@firstofthree#1#2#3{#1}%
+\long\def\@secondofthree#1#2#3{#2}%
+\long\def\@firstoffour#1#2#3#4{#1}%
+\long\def\@secondoffour#1#2#3#4{#2}%
+\long\def\@thirdoffour#1#2#3#4{#3}%
+\long\def\@fourthoffour#1#2#3#4{#4}%
+\long\def\@thirdandfourthoffour#1#2#3#4{#3#4}%
+\long\def\@fifthoffive#1#2#3#4#5{#5}
+
% Loop #1 from min(#2, #3) to max(#2, #3), executing #4
\protected\def\yquant@for #1:=#2to#3#{%
\yquant@for@aux#1{#2}{#3}%
}
+% Loop #1 from max(#2, #3) down to min(#2, #3), executing #4
+\protected\def\yquant@fordown #1:=#2downto#3#{%
+ \yquant@fordown@aux#1{#2}{#3}%
+}
+
\long\def\yquant@for@aux#1#2#3#4{%
\ifnum#2<#3\relax%
\numdef#1{#2}%
@@ -37,6 +53,17 @@
\fi%
}
+\long\def\yquant@fordown@aux#1#2#3#4{%
+ \ifnum#2>#3\relax%
+ \numdef#1{#2}%
+ % to allow for things like \yquant@for \i := \i to ..., expand the boundaries
+ \expandafter\yquant@fordown@loop\expandafter#1\expandafter{\the\numexpr#3-1\relax}{#4}%
+ \else%
+ \numdef#1{#3}%
+ \expandafter\yquant@fordown@loop\expandafter#1\expandafter{\the\numexpr#2-1\relax}{#4}%
+ \fi%
+}
+
\long\def\yquant@for@loop#1#2#3{%
\loop%
\ifnum#1<#2\relax%
@@ -45,6 +72,14 @@
\repeat%
}
+\long\def\yquant@fordown@loop#1#2#3{%
+ \loop%
+ \ifnum#1>#2\relax%
+ #3%
+ \numdef#1{#1-1}%
+ \repeat%
+}
+
\def\yquant@for@break{%
\fi%
\iffalse%
@@ -219,7 +254,7 @@
\expandafter\iffalse@hidden%
\fi%
\repeat%
- \expandafter
+ \expandafter%
}%
\expandafter\count\expandafter2\expandafter=\the\count2\relax%
\ifnum\count0<\count2 %
@@ -235,15 +270,21 @@
\cslet{yquant@sort@item#2}\tmp%
}
+% Add an internal etoolbox list to the sorted items
+\def\yquant@sort@addlist#1{%
+ \forlistloop\yquant@sort@addlist@aux#1%
+}
+
+\protected\def\yquant@sort@addlist@aux#1{%
+ \csdef{yquant@sort@item\the\yquant@sort@count}{#1}%
+ \advance\yquant@sort@count by 1 %
+}
+
% Sorts an internal etoolbox list #1 using macro #2
\protected\def\yquant@sort@list#1#2{%
\begingroup%
\yquant@sort@count=0 %
- \def\do##1{%
- \csdef{yquant@sort@item\the\yquant@sort@count}{##1}%
- \advance\yquant@sort@count by 1 %
- }%
- \dolistloop#1%
+ \yquant@sort@addlist#1%
\yquant@sort#2%
\let#1=\empty%
\count0=0 %
@@ -268,7 +309,278 @@
\expandafter\expandafter\expandafter\do%
\expandafter\expandafter\expandafter{%
\csname yquant@sort@item\the\count0\endcsname%
- }
+ }%
\advance\count0 by 1 %
\repeat%
+}
+
+\begingroup
+\catcode`\|=3
+\gdef\yquant@list@delim{|}
+
+\protected\gdef\yquant@list@dequeue#1#2{%
+ \expandafter\ifblank\expandafter{#1}{%
+ \let#2=\empty%
+ }{%
+ \expandafter\yquant@list@dequeue@i#1\etb@lst@q@end{#1}{#2}\def%
+ }%
+}%
+
+\protected\gdef\yquant@list@dequeue@i#1|#2\etb@lst@q@end#3#4#5{%
+ \def#4{#1}%
+ #5#3{#2}%
+}
+
+\protected\gdef\yquant@list@gdequeue#1#2{%
+ \expandafter\ifblank\expandafter{#1}{%
+ \let#2=\empty%
+ }{%
+ \expandafter\yquant@list@dequeue@i#1\etb@lst@q@end{#1}{#2}\gdef%
+ }%
+}
+\endgroup
+
+\def\ifyquant@OR#1#2{%
+ #1%
+ \expandafter\@firstoftwo%
+ \else%
+ #2%
+ \expandafter\expandafter\expandafter\@firstoftwo%
+ \else%
+ \expandafter\expandafter\expandafter\@secondoftwo%
+ \fi%
+ \fi%
+}
+
+% #1 is a pgf soft path. We extract the maximum x position at the y position specified in #2 and assign it to \dimen0.
+\protected\def\yquant@softpath@extractmaxxat#1#2{%
+ \begingroup%
+ \dimen0=-16000pt %
+ \dimen2=#2 %
+ \let\pgfsyssoftpath@movetotoken=\yquant@softpath@extractmaxxat@moveto%
+ \let\pgfsyssoftpath@linetotoken=\yquant@softpath@extractmaxxat@lineto%
+ \let\pgfsyssoftpath@curvetosupportatoken=\yquant@softpath@extractmaxxat@curveto%
+ \let\pgfsyssoftpath@rectcornertoken=\yquant@softpath@extractmaxxat@rectto%
+ \let\pgfsyssoftpath@closepath=\@gobbletwo%
+ % the specialroundtoken (undocumented) is \@gobbletwo by default.
+ #1%
+ \expandafter%
+ \endgroup%
+ \expandafter\dimen\expandafter0\expandafter=\the\dimen0 %
+}
+
+\protected\def\yquant@softpath@extractmaxxat@update#1{%
+ \ifdim\dimen0<#1 %
+ \dimen0=#1 %
+ \fi%
+}
+
+\protected\def\yquant@softpath@extractmaxxat@moveto#1#2{%
+ \dimen4=#1 %
+ \dimen6=#2 %
+}
+
+\protected\def\yquant@softpath@extractmaxxat@lineto#1#2{%
+ \ifyquant@OR{\ifdim\dimen4>\dimen0 }{\ifdim#1>\dimen0 }{%
+ \ifdim\dimen6=\dimen2 %
+ \yquant@softpath@extractmaxxat@update{\dimen4}%
+ \else%
+ \ifdim\dimen6<\dimen2 %
+ \unless\ifdim#2<\dimen2 %
+ \expandafter\yquant@softpath@extractmaxxat@update\expandafter{\the\dimexpr%
+ \dimen4+% x0
+ \dimexpr#1-\dimen4\relax*% (x1-x0)
+ \dimexpr\dimen2-\dimen6\relax/\dimexpr#2-\dimen6\relax% (y-y0)/(y1-y0)
+ \relax}%
+ \fi%
+ \else%
+ \unless\ifdim#2>\dimen2 %
+ \expandafter\yquant@softpath@extractmaxxat@update\expandafter{\the\dimexpr%
+ \dimen4+% x0
+ \dimexpr#1-\dimen4\relax*% (x1-x0)
+ \dimexpr\dimen2-\dimen6\relax/\dimexpr#2-\dimen6\relax% (y-y0)/(y1-y0)
+ \relax}%
+ \fi%
+ \fi%
+ \fi%
+ }\relax%
+ \dimen4=#1 %
+ \dimen6=#2 %
+}
+
+\protected\def\yquant@softpath@extractmaxxat@curveto@checkx#1#2#3{%
+ % \dimen11 holds our only candidate for t. Is it within the curve?
+ \unless\ifdim\dimen11<0pt %
+ \unless\ifdim\dimen11>1pt %
+ % it is. \dimen4: x0, #1: xa, #2: xb, #3: x1
+ \begingroup%
+ \dimen12=\dimexpr1pt-\dimen11\relax% 1 - t
+ \dimen13=\dimexpr\dimen11*\dimen11/65535\relax% t^2
+ \dimen14=\dimexpr\dimen12*\dimen12/65535\relax% (1 - t)^2
+ \dimen255=\dimexpr\dimen13*\dimen11/65535*\dimexpr#3\relax/65535+% t^3 x1
+ 3\dimen13*\dimen12/65535*\dimexpr#2\relax/65535+% t^2(1 - t) xb
+ \dimen14*\dimen12/65535*\dimen4/65535+% (1 - t)^3 x0
+ 3\dimen11*\dimen14/65535*\dimexpr#1\relax/65535% 3t(1 - t)^2 xa
+ \relax%
+ \expandafter%
+ \endgroup%
+ \expandafter\yquant@softpath@extractmaxxat@update\expandafter{\the\dimen255}%
+ \fi%
+ \fi%
+}
+
+\protected\def\yquant@softpath@extractmaxxat@curveto#1#2\pgfsyssoftpath@curvetosupportbtoken#3#4\pgfsyssoftpath@curvetotoken#5#6{%
+ % There's really no good way to do this apart from solving the Bézier curve (a third-order polynomial). Let's do it. (Yes, this is inefficient, but if someone substitutes the rectangular box of a subcircuit by a more fancy design, this is not our fault).
+ % Parametrized by t, the x coordinates of the curve are
+ % x0 + 3 (xa - x0) t + 3 (x0 - 2xa + xb) t^2 + (3xa - 3xb + x1 - x0) t^3
+ % where x0 = \dimen4 (the moveto point), xa = #1, xb = #3, x1 = #5.
+ % Likewise for y:
+ % y0 = \dimen6 (the moveto point), ya = #2, yb = #4, y1 = #6.
+ % We first solve the third-order polynomial for t using the y value, then plug it back into the x value.
+ % TODO: this is accurate to approx. 3 digits. Can this be improved by reformulating Cardanos formula to involve less divisions?
+ \begingroup%
+ % We need so may dimensions that we break with TeX's convention for their use.
+ % for the multiplications with and divisions by dimensions, we exploit that eTeX fuses muldiv to 64 bits. Further note that each dimension has a scaling factor of 65535 for sp<->pt conversion. This is why don't factor out divisions (which would be more efficient, but not give the benefit of 64bit accuracy).
+ % a = 3(ya - yb) + (y1 - y0)
+ \dimen1=\dimexpr3\dimexpr#2-#4\relax+#6-\dimen6\relax%
+ \ifdim\dimen1=0pt %
+ % this is only a quadratic curve!
+ % b = 3(y0 - 2ya + yb)
+ \dimen3=\dimexpr3\dimexpr\dimen6-2\dimexpr#2\relax+#4\relax*65535\relax%
+ % c: 3(ya - y0)
+ \dimen5=\dimexpr3\dimexpr#2-\dimen6\relax*65535\relax%
+ % d: y0 - <desired y>
+ \dimen7=\dimexpr\dimexpr\dimen6-\dimen2\relax*65535\relax%
+ % check the discriminant of the equation
+ \dimen8=\dimexpr\dimen3*\dimen3/65535-4\dimen3*\dimen7/65535\relax%
+ \unless\ifdim\dimen8<0pt%
+ % there are two potential candidates, (-c +- sqrt(c^2 - 4b d))/2b
+ \pgfmathsqrt@{\the\dimen8\@gobbletwo}%
+ \dimen11=\dimexpr\dimexpr-\dimen5+\pgfmathresult pt\relax*65535/%
+ \dimexpr2\dimen3\relax\relax%
+ \yquant@softpath@extractmaxxat@curveto@checkx{#1}{#3}{#5}%
+ \dimen11=\dimexpr\dimexpr-\dimen5-\pgfmathresult pt\relax*65535/%
+ \dimexpr2\dimen3\relax\relax%
+ \yquant@softpath@extractmaxxat@curveto@checkx{#1}{#3}{#5}%
+ \fi%
+ \else%
+ % We will simplify by directly dividing all coefficients by a
+ % b = 3(y0 - 2ya + yb)
+ \dimen3=\dimexpr3\dimexpr\dimen6-2\dimexpr#2\relax+#4\relax*65535/\dimen1\relax%
+ % c: 3(ya - y0)
+ \dimen5=\dimexpr3\dimexpr#2-\dimen6\relax*65535/\dimen1\relax%
+ % d: y0 - <desired y>
+ \dimen7=\dimexpr\dimexpr\dimen6-\dimen2\relax*65535/\dimen1\relax%
+ % Note that now our a value (\dimen1) is no longer needed, it is one.
+ % check the discriminant of the equation
+ % Q = (3c - b^2)/9
+ \dimen8=\dimexpr\dimexpr3\dimen5-\dimen3*\dimen3/65535\relax/9\relax%
+ % R = (9bc - 27d - 2b^3)/54 = bc/6 - d/2 - b^3/27
+ \dimen9=\dimexpr\dimen3*\dimen5/393210-% 6*65535
+ .5\dimen7-%
+ \dimen3*\dimen3/65535*\dimen3/1769445% 27*65535
+ \relax%
+ % D = Q^3 + R^2
+ \dimen10=\dimexpr\dimen8*\dimen8/65535*\dimen8/65535+\dimen9*\dimen9/65535\relax%
+ \ifdim\dimen10>0pt %
+ % only one real root: y_1 = S + T - b/3a
+ % S = cbrt(R + sqrt(Q^3 + R^2))
+ % T = cbrt(R - sqrt(Q^3 + R^2))
+ \pgfmathsqrt@{\the\dimen10\@gobbletwo}%
+ \dimen12=\dimexpr\dimen9+\pgfmathresult pt\relax%
+ \dimen13=\dimexpr\dimen9-\pgfmathresult pt\relax%
+ \ifdim\dimen12>0pt %
+ \pgfmathpow@{\the\dimen12\@gobbletwo}{.3333333333}%
+ \dimen11=\pgfmathresult pt %
+ \else%
+ \pgfmathpow@{\the\dimexpr-\dimen12\relax\@gobbletwo}{.3333333333}%
+ \dimen11=-\pgfmathresult pt %
+ \fi%
+ \ifdim\dimen13>0pt %
+ \pgfmathpow@{\the\dimen13\@gobbletwo}{.3333333333}%
+ \dimen11=\dimexpr\dimen11+\pgfmathresult pt-.33333333333\dimen3\relax%
+ \else%
+ \pgfmathpow@{\the\dimexpr-\dimen13\relax\@gobbletwo}{.3333333333}%
+ \dimen11=\dimexpr\dimen11-\pgfmathresult pt-.33333333333\dimen3\relax%
+ \fi%
+ \yquant@softpath@extractmaxxat@curveto@checkx{#1}{#3}{#5}%
+ \else%
+ \ifdim\dimen10=0pt %
+ % easiest case, three real roots, two of which are equal:
+ % y_1 = 2cbrt(R) - b/3a
+ % y_2, x_3 = -cbrt(R) - b/3a
+ \ifdim\dimen9>0pt %
+ \pgfmathpow@{\the\dimen9\@gobbletwo}{.3333333333}%
+ \dimen15=\pgfmathresult pt %
+ \else%
+ \pgfmathpow@{\the\dimexpr-\dimen9\relax\@gobbletwo}{.3333333333}%
+ \dimen15=-\pgfmathresult pt %
+ \fi%
+ \dimen11=\dimexpr2\dimen15-.33333333333\dimen3\relax%
+ \yquant@softpath@extractmaxxat@curveto@checkx{#1}{#3}{#5}%
+ % check the next candidate
+ \dimen11=\dimexpr-\dimen15-.33333333333\dimen3\relax%
+ \yquant@softpath@extractmaxxat@curveto@checkx{#1}{#3}{#5}%
+ \else%
+ % nastiest case, three distinct real roots which we can find only by taking a complex-valued cube root.
+ % p + i q = cbrt(R + i sqrt(|D|))
+ \pgfmathsqrt@{\the\dimexpr-\dimen10\relax\@gobbletwo}%
+ \dimen10=\pgfmathresult pt %
+ % Let us first find the absolute value
+ \dimen12=\dimexpr\dimen9*\dimen9/65535+\dimen10*\dimen10/65535\relax%
+ \pgfmathpow@{\the\dimen12\@gobbletwo}{.1666666667}%
+ \dimen12=\pgfmathresult pt%
+ % then we need 1/3 the argument of R + i sqrt(|D|).
+ \pgfmathatantwo@{\the\dimen10\@gobbletwo}{\the\dimen9\@gobbletwo}%
+ \dimen13=.3333333333\dimexpr\pgfmathresult pt\relax%
+ % and then the real and imaginary parts as cosine and sine.
+ \pgfmathcos@{\the\dimen13\@gobbletwo}%
+ \dimen14=\dimexpr\pgfmathresult\dimen12\relax%
+ \pgfmathsin@{\the\dimen13\@gobbletwo}%
+ \dimen15=\dimexpr\pgfmathresult\dimen12\relax%
+ % Now the candidates are
+ % y_1 = 2p - b/3a
+ % y_2 = -p - sqrt(3)q - b/3a
+ % y_3 = -p + sqrt(3)q - b/3a
+ \dimen11=\dimexpr2\dimen14-.33333333333\dimen3\relax%
+ \yquant@softpath@extractmaxxat@curveto@checkx{#1}{#3}{#5}%
+ \dimen11=\dimexpr-\dimen14-1.732050808\dimen15-.33333333333\dimen3\relax%
+ \yquant@softpath@extractmaxxat@curveto@checkx{#1}{#3}{#5}%
+ \dimen11=\dimexpr-\dimen14+1.732050808\dimen15-.33333333333\dimen3\relax%
+ \yquant@softpath@extractmaxxat@curveto@checkx{#1}{#3}{#5}%
+ \fi%
+ \fi%
+ \fi%
+ % Now after all these calculations, \dimen0 was updated within the group. Make available outside.
+ \expandafter%
+ \endgroup%
+ \expandafter\dimen\expandafter0\expandafter=\the\dimen0 %
+ \dimen4=#5 %
+ \dimen6=#6 %
+}
+
+\protected\def\yquant@softpath@extractmaxxat@rectto#1#2\pgfsyssoftpath@rectsizetoken#3#4{%
+ % #1: lower left x, #2: lower left y, #3: width, #4: height
+ % note that neither width nor height need be positive!
+ \ifdim#4>0pt %
+ \unless\ifdim#2>\dimen2 %
+ \unless\ifdim\dimexpr#2+#4\relax<\dimen2 %
+ \ifdim#3>0pt %
+ \yquant@softpath@extractmaxxat@update{\dimexpr#1+#3\relax}%
+ \else%
+ \yquant@softpath@extractmaxxat@update{#1}%
+ \fi%
+ \fi%
+ \fi%
+ \else%
+ \unless\ifdim#2<\dimen2 %
+ \unless\ifdim\dimexpr#2+#4\relax>\dimen2 %
+ \ifdim#3>0pt %
+ \yquant@softpath@extractmaxxat@update{\dimexpr#1+#3\relax}%
+ \else%
+ \yquant@softpath@extractmaxxat@update{#1}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
} \ No newline at end of file
diff --git a/graphics/pgf/contrib/yquant/tex/yquant.sty b/graphics/pgf/contrib/yquant/tex/yquant.sty
index c402c6342c..2395f67462 100644
--- a/graphics/pgf/contrib/yquant/tex/yquant.sty
+++ b/graphics/pgf/contrib/yquant/tex/yquant.sty
@@ -11,17 +11,18 @@
% 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'.
+% This work has the LPPL maintenance status `author-maintained'.
%
% The Current Maintainer of this work is Benjamin Desef.
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{yquant}[2020/04/11 v0.1.2 Yet another quantum circuit library for LaTeX]
+\ProvidesPackage{yquant}[2020/06/13 v0.3 Yet another quantum circuit library for LaTeX]
\RequirePackage{etoolbox}[2018/02/11]
\RequirePackage{tikz}[2015/08/29]
\RequirePackage{trimspaces}[2009/09/17]
\usetikzlibrary{arrows.meta,decorations.pathreplacing,decorations.pathmorphing}
+\newif\ifyquantdebug
\input yquant-config.tex
\input yquant-tools.tex
\input yquant-registers.tex
@@ -35,6 +36,10 @@
% usually, \\ is robust; but when using \centering, it is \let to \@centercr, which is not robust (probably because this happens only when not protecting). Fix this, so that \\ does not require \protect if a centered circuit is drawn.
\robustify\@centercr
+\outer\def\useyquantlanguage#1{%
+ \RequirePackage{yquantlanguage-#1}
+}
+
\endinput
%%
%% End of file `yquant.sty'. \ No newline at end of file
diff --git a/graphics/pgf/contrib/yquant/tex/yquantlanguage-qasm.sty b/graphics/pgf/contrib/yquant/tex/yquantlanguage-qasm.sty
new file mode 100644
index 0000000000..eaa848e03f
--- /dev/null
+++ b/graphics/pgf/contrib/yquant/tex/yquantlanguage-qasm.sty
@@ -0,0 +1,681 @@
+% yquantlanguage-qasm.sty
+% Extend yquant to understand qasm syntax.
+%
+% Copyright 2020 Benjamin Desef
+%
+% This work may be distributed and/or modified under the conditions of the LaTeX Project
+% Public License, either version 1.3c 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.3c or later is part of all distributions of LaTeX version 2005/12/01 or
+% later.
+%
+% This work has the LPPL maintenance status `author-maintained'.
+%
+% The Current Maintainer of this work is Benjamin Desef.
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{yquantlanguage-qasm}[2020/06/13 v0.3 yquant-qasm]
+
+\RequirePackage{yquant}[2020/06/13]
+
+% BEGIN_FOLD Environment definitions
+\begingroup
+ \catcode`\{=12 \global\let\qasm@env@charbgroup={
+ \catcode`\#=12 \global\let\qasm@env@charhashtag=#
+\endgroup
+{\catcode`\^^M=12 \protected\gdef\qasm@defwithnewline#1#{\def#1^^M}}
+{\catcode`\|=0 \catcode`\\=12 |global|let|qasm@env@charbackslash=\ |gdef|qasm@env@charend{\endqasm}}
+\protected\def\qasm@env@begin{%
+ \begingroup%
+ \qasm@env@setcatcodes%
+ \@ifnextchar[\qasm@env@begin@arg{\qasm@env@begin@arg[]}%
+}
+
+\protected\def\qasm@env@setcatcodes{%
+ % make most TeX specials ordinary - not \dospecials, we want to keep spaces
+ \catcode`\\=12 %
+ \catcode`\{=12 %
+ \catcode`\}=12 %
+ \catcode`\$=12 %
+ \catcode`\&=12 %
+ \catcode`\#=12 %
+ \catcode`\^=12 \catcode`\^^K=12 %
+ \catcode`\_=12 \catcode`\^^A=12 %
+ \catcode`\%=12 %
+ \catcode`\~=12 %
+ \catcode`\^^M=12 %
+}
+
+\def\qasm@env@begin@arg{%
+ \yquant@env@lazyfalse%
+ \let\yquant@env@check=\qasm@env@check%
+ \let\yquant@register@get@ids=\qasm@register@get@ids%
+ \let\yquant@attrs@remaining=\empty% we don't have attributes, but the backend requires this to be set up
+ \let\tikz@ensure@dollar@catcode=\relax% this check will fail, but it does not make sense in our case. Every tikz command will be read with the appropriate dollar catcode.
+ % provide some commands that might be used during gate construction
+ \let\m=\qasm@cmd@m%
+ \let\txt=\qasm@cmd@txt%
+ \let\meter=\qasm@cmd@meter%
+ \let\dmeter=\qasm@cmd@dmeter%
+ \let\dmeterwide=\qasm@cmd@dmeterwide%
+ \yquant@env@begin@generic\qasm%
+}
+
+\def\qasm@env@end{%
+ \yquant@env@end%
+ \endgroup%
+}
+
+% since the backslash is just an `other' character, we cannot leave our environment. Hence, we manually check for \endqasm and \end{qasm}.
+\def\qasm@env@checkend#1#2#3#4#5{%
+ \ifstrequal{#1#2#3#4 }{\end}{% for us, \end is a macro so that TeX will insert another space
+ \ifx q#5%
+ \expandafter\qasm@env@checkend@plain%
+ \else%
+ \ifx\qasm@env@charbgroup#5%
+ \expandafter\expandafter\expandafter\qasm@env@checkend@latex%
+ \else%
+ \PackageError{yquant.sty}%
+ {Invalid qasm syntax: `\meaning#1'}%
+ {Adhere to the specs!}%
+ \fi%
+ \fi%
+ }{%
+ \PackageError{yquant.sty}%
+ {Invalid qasm syntax: `\meaning#1'}%
+ {Adhere to the specs!}%
+ }%
+}
+
+\def\qasm@env@checkend@plain#1#2#3{%
+ \ifstrequal{#1#2#3}{asm}{%
+ \endgroup% we initially thought this was a normal command, so exit the group
+ \endqasm%
+ \futurelet\qasm@env@checkend@plain@delimiter\qasm@env@checkend@plain@validate%
+ }{%
+ \PackageError{yquant.sty}%
+ {Invalid qasm syntax: `\meaning\qasm@env@charbackslash'}%
+ {Adhere to the specs!}%
+ }%
+}
+
+\def\qasm@env@checkend@plain@validate{%
+ % we already ended the qasm environment, based on the assumption that what followed was not a letter
+ \ifcat\qasm@env@checkend@plain@delimiter A%
+ % we were wrong and should never have left the environment. Now it's too late
+ \PackageError{yquant.sty}%
+ {Invalid qasm syntax: `\meaning\qasm@env@charbackslash'}%
+ {Adhere to the specs!}%
+ \fi%
+}
+
+\begingroup
+ \catcode`\[=1 \catcode`\]=2 \catcode`\}=12 % we set [ just for editors that scan for matching parenthesis, though we don't need it
+ \gdef\qasm@env@checkend@latex#1#2#3#4#5[%
+ \ifstrequal[#1#2#3#4#5][qasm}][%
+ \endgroup% we initially thought this was a normal command, so exit the group
+ \end[qasm]%
+ ][%
+ \PackageError[yquant.sty]%
+ [Invalid qasm syntax: `\meaning\qasm@env@charbackslash']%
+ [Adhere to the specs!]%
+ ]%
+ ]%
+\endgroup
+
+\protected\def\qasm@env@restorecatcodes{%
+ % restore standard catcodes (hopefully they were standard before entering the environment)
+ \catcode`\\=0 % backslash is TeX escape character
+ \catcode`\{=1 % left brace is begin-group character
+ \catcode`\}=2 % right brace is end-group character
+ \catcode`\$=3 % dollar sign is math shift
+ \catcode`\&=4 % ampersand is alignment tab
+ \catcode`\#=6 % hash mark is macro parameter character
+ \catcode`\^=7 \catcode`\^^K=7 % circumflex and uparrow are for superscripts
+ \catcode`\_=8 \catcode`\^^A=8 % underline and downarrow are for subscripts
+ \catcode`\%=14 % percent sign is comment character
+ \catcode`\~=\active % tilde is active
+% \catcode`\^^M=5 % ascii return is end-line - not needed, is done manually
+}
+
+\tikzaddtikzonlycommandshortcutlet\qasm\qasm@env@begin
+\tikzaddtikzonlycommandshortcutlet\endqasm\qasm@env@end
+
+\protected\def\qasm@env@check{%
+ \let\next=\relax%
+ \ifx\yquant@env@nextchar\qasm@env@charhashtag% comment
+ \let\next=\qasm@env@gobblecomment%
+ \else%
+ % Here we assume standard catcodes for A
+ \ifcat\noexpand\yquant@env@nextchar A% letter
+ \let\next=\qasm@langhelper@check@name%
+ \else%
+ \ifx\yquant@env@nextchar\yquant@env@linebreak% linebreaks are no longer end-of-line characters, but have catcode 12 (other).
+ \let\next=\yquant@env@gobblepar%
+ \else%
+ \ifx\yquant@env@nextchar\par%
+ \let\next=\yquant@env@gobblepar%
+ \else%
+ \ifx\yquant@env@nextchar\qasm@env@charbackslash% backslash might end the environment
+ \let\next=\qasm@env@checkend%
+ \else%
+ \PackageError{yquant.sty}%
+ {Invalid qasm syntax: `\meaning\yquant@env@nextchar'}%
+ {Adhere to the specs!}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \next%
+}
+
+\qasm@defwithnewline\qasm@env@gobblecomment#1{%
+ \yquant@env@contscan%
+}
+
+\def\qasmimport#1{%
+ \ifpgfpicture%
+ \ifnum\yquant@env>0 %
+ \PackageError{yquant.sty}{You cannot use qasm circuits as subcircuits}{}%
+ \else%
+ \begingroup%
+ \let\yquantimport@now=\qasmimport@now%
+ \everyeof{\noexpand}%
+ \qasm@env@setcatcodes%
+ \yquantimportcommand{#1}%
+ \expandafter\expandafter\expandafter\qasm%
+ \expandafter\qasmimport@file%
+ \qasm@env@charend%
+ \endgroup%
+ \fi%
+ \else%
+ \begin{tikzpicture}%
+ \begingroup%
+ \let\yquantimport@now=\qasmimport@now%
+ \everyeof{\noexpand}%
+ \qasm@env@setcatcodes%
+ \yquantimportcommand{#1}%
+ \expandafter\expandafter\expandafter\qasm%
+ \expandafter\qasmimport@file%
+ \qasm@env@charend%
+ \endgroup%
+ \end{tikzpicture}
+ \fi%
+}
+
+\def\qasmimport@now#1{%
+ \edef\qasmimport@file{\@@input #1 }%
+}
+% END_FOLD
+
+% BEGIN_FOLD Langhelper definitions
+% Parsing command itself
+\protected\qasm@defwithnewline\qasm@langhelper@check@name#1 #2{%
+ \lowercase{\edef\cmd{#1}}%
+ \unless\ifcsname qasm@lang@\cmd\endcsname%
+ \PackageError{yquant.sty}{Unsupported qasm command: `#1'}%
+ {You used a command that is unknown to qasm.}%
+ \fi%
+ \catcode`\^^M=5 % this catcode is required for scantokens, which we almost always need (because we use yquant's extensive register name facilities)
+ \csname qasm@lang@\cmd\endcsname#2 \qasm@end%
+}
+
+% Defining commands that accept registers and take an optional value
+% #1: name of the argument
+% #2: command that is to be called
+% #3: number of controls
+% #4: number of targets
+\protected\def\qasm@langhelper@declare@command#1#2#3#4{%
+ \begingroup%
+ \lowercase{\edef\cmd{#1}}%
+ % everything after the next space is just gobbled
+ \protected\long\csgdef{qasm@lang@\cmd}##1 ##2\qasm@end{%
+ \qasm@langhelper@declare@command@@fetchargs{#3}{#4}{##1}{#2}%
+ \yquant@env@rescan%
+ }%
+ \endgroup%
+}
+
+\protected\def\qasm@langhelper@declare@command@@fetchargs#1#2#3#4{%
+ \let\targets=\empty%
+ \let\controls=\empty%
+ \count0=0 %
+ \count2=#1 %
+ \forcsvlist%
+ \qasm@langhelper@declare@command@@fetchargs@%
+ {#3}%
+ \unless\ifnum\count0=\numexpr\count2+#2\relax %
+ \PackageError{yquant.sty}{Invalid command use}%
+ {This gate requires #2 target\unless\ifnum#2=1 s\fi\space and #1 control\unless\ifnum#1=1 s\fi.}%
+ \fi%
+ \edef\cmd{%
+ \unexpanded{#4}%
+ {\expandafter\@gobble\controls\empty}{}%
+ {\expandafter\@gobble\targets\empty}%
+ }%
+ \cmd%
+}
+
+\protected\def\qasm@langhelper@declare@command@@fetchargs@#1{%
+ \advance\count0 by 1 %
+ \unless\ifnum\count0>\count2 %
+ % we are at the beginning
+ \appto\controls{,#1}%
+ \else%
+ \appto\targets{,#1}%
+ \fi%
+}
+
+% converts names to indices
+\protected\def\qasm@register@get@ids#1{%
+ \begingroup%
+ \let\yquant@register@get@ids@list=\empty%
+ \count0=2147483647 % minimal id
+ \count2=0 % maximal id
+ \count4=0 % number of total registers
+ \forcsvlist\qasm@register@get@ids@outerlist{#1}%
+ \global\let\yquant@register@get@ids@list=\yquant@register@get@ids@list%
+ \xdef\yquant@register@get@ids@min{\the\count0}%
+ \xdef\yquant@register@get@ids@max{\the\count2}%
+ \xdef\yquant@register@get@ids@count{\the\count4}%
+ % this is very simple: if multi-registers are allowed and we have more than one, then we are in a multi-register; else not.
+ \ifyquant@register@get@allowmulti%
+ \ifnum\count4> 1%
+ \count6=\count0 % no way to chain the main register
+ \yquant@register@multi@splitparts%
+ \xdef\yquant@register@get@ids@list{%
+ \noexpand\yquant@register@multi%
+ {\the\count0}{\the\count2}{\the\count4}{\yquant@register@get@ids@list}%
+ \yquant@list@delim%
+ }%
+ \count4=1 %
+ \fi%
+ \fi%
+ \endgroup%
+}
+
+\protected\def\qasm@register@get@ids@outerlist#1{%
+ \yquant@register@get@id\idx{#1[0]}%
+ \listeadd\yquant@register@get@ids@list{\idx}%
+ \ifnum\count0>\idx %
+ \count0=\idx %
+ \fi%
+ \ifnum\count2<\idx %
+ \count2=\idx %
+ \fi%
+ \advance\count4 by 1 %
+}
+% END_FOLD
+
+% BEGIN_FOLD Configuration
+\pgfkeys{%
+ /yquant/operators/every s/.style={%
+ /yquant/operators/every box%
+ },%
+ /yquant/operators/every t/.style={%
+ /yquant/operators/every box%
+ },%
+ /yquant/operators/every utwo/.style={%
+ /yquant/operators/every box%
+ },
+ /qasm/zero/.store in=%
+ \qasm@config@zero,%
+ /qasm/register/default qubit name/.store in=%
+ \qasm@config@qubit@nameonly,%
+ /qasm/register/default qubit name value/.store in=%
+ \qasm@config@qubit@namevalue%
+}
+\def\qasm@ket#1{\mathopen|\mathinner{#1}\rangle}
+\def\qasm@config@zero{$\qasm@ket0$}
+\let\qasm@config@qubit@nameonly=\qasm@ket
+\def\qasm@config@qubit@namevalue#1#2{\qasm@ket{#1} = \qasm@ket{#2}}
+% END_FOLD
+
+% BEGIN_FOLD Automagically convert names
+% if ([A-z]+)(\d+) matches, replace by $1_{$2}, else let unchanged, fully expandable
+\def\qasmname#1{%
+ \expandafter\qasmname@entry\expandafter{#1}%
+}
+
+\def\qasmname@entry#1{%
+ \ifstrempty{#1}{}{%
+ \qasmname@checkletter#1\relax\qasmname@end{}%
+ }%
+}
+
+\def\qasmname@checkletter#1#2\qasmname@end#3{%
+ \ifstrempty{#2}{%
+ % done, and we didn't get a number, so regex doesn't match (#1 is \relax)
+ #3%
+ }{%
+ \ifnum`#1>64 %
+ \ifnum`#1<123 %
+ \expandafter\expandafter\expandafter\@firstoftwo%
+ \else%
+ \expandafter\expandafter\expandafter\@secondoftwo%
+ \fi%
+ \else%
+ \expandafter\@secondoftwo%
+ \fi%
+ {%
+ \qasmname@checkletter#2\qasmname@end{#3#1}%
+ }{%
+ % not in A-z, move to the number part - but only if there was something matching before!
+ \ifstrempty{#3}{%
+ \qasmname@droprelax#1#2\qasmname@end%
+ }{%
+ \qasmname@checknumber#1#2\qasmname@end{#3}{}%
+ }%
+ }%
+ }%
+}
+
+\def\qasmname@checknumber#1#2\qasmname@end#3#4{%
+ \ifstrempty{#2}{%
+ % done - was there a number?
+ \ifstrempty{#4}{%
+ #3%
+ }{%
+ #3_{#4}%
+ }%
+ }{%
+ \ifnum`#1>47 %
+ \ifnum`#1<58 %
+ \expandafter\expandafter\expandafter\@firstoftwo%
+ \else%
+ \expandafter\expandafter\expandafter\@secondoftwo%
+ \fi%
+ \else%
+ \expandafter\@secondoftwo%
+ \fi%
+ {%
+ \qasmname@checknumber#2\qasmname@end{#3}{#4#1}%
+ }{%
+ \qasmname@droprelax#3#4#1#2\qasmname@end%
+ }%
+ }%
+}
+
+\def\qasmname@droprelax#1\relax#2\qasmname@end{%
+ \ifstrempty{#2}{%
+ #1%
+ }{%
+ \qasmname@droprelax{#1\relax}#2\qasmname@end%
+ }%
+}
+% END_FOLD
+
+% BEGIN_FOLD Language definitions
+\protected\def\qasm@lang@qubit#1 #2\qasm@end{%
+ \let\yquant@lang@create@type=\yquant@register@type@q%
+ \def\yquant@lang@create@style{qubit}%
+ \qasm@lang@create#1,,,,\qasm@end%
+}
+
+\protected\def\qasm@lang@cbit#1 #2\qasm@end{%
+ \let\yquant@lang@create@type=\yquant@register@type@c%
+ \def\yquant@lang@create@style{cbit}%
+ \qasm@lang@create#1,,,,\qasm@end%
+}
+
+\protected\def\qasm@lang@create#1,#2,#3,#4,#5\qasm@end{%
+ \ifstrempty{#4}\relax{%
+ \PackageError{yquant.sty}{Invalid number of arguments}%
+ {Register creation in qasm expects at most three arguments.}%
+ }%
+ \ifstrequal{#5}{,,}{%
+ % we have a third parameter which defines the TeX name - retokenize it
+ \begingroup%
+ \qasm@env@restorecatcodes%
+ \everyeof{\noexpand}%
+ \endlinechar=-1 %
+ \edef\process{%
+ \def\noexpand\yquant@lang@attr@value{%
+ \scantokens{\unexpanded{#3}}%
+ }%
+ }
+ \expandafter%
+ \endgroup%
+ \process%
+ }{%
+ % make num subscript if name = alpha+numbers
+ \edef\yquant@lang@attr@value{\qasmname{#1}}%
+ }%
+ \ifx\yquant@lang@create@type\yquant@register@type@c%
+ \ifstrempty{#2}{% cbit has initial value?
+ \edef\yquant@lang@attr@value{%
+ $\unexpanded\expandafter{\yquant@lang@attr@value}$%
+ }%
+ }{%
+ \begingroup%
+ \qasm@env@restorecatcodes%
+ \everyeof{\noexpand}%
+ \endlinechar=-1 %
+ \edef\process{%
+ \def\noexpand\yquant@lang@attr@value{%
+ $\unexpanded\expandafter{\yquant@lang@attr@value} = %
+ \scantokens{\unexpanded{#2}}$%
+ }%
+ }
+ \expandafter%
+ \endgroup%
+ \process%
+ }%
+ \else%
+ \ifstrempty{#2}{% qubit has initial value?
+ \edef\yquant@lang@attr@value{%
+ \unexpanded\expandafter{\expandafter$%
+ \expandafter\qasm@config@qubit@nameonly%
+ \expandafter{\yquant@lang@attr@value}%
+ $}%
+ }%
+ }{%
+ \begingroup%
+ \qasm@env@restorecatcodes%
+ \everyeof{\noexpand}%
+ \endlinechar=-1 %
+ \edef\process{%
+ \def\noexpand\yquant@lang@attr@value{%
+ $\noexpand\qasm@config@qubit@namevalue%
+ {\unexpanded\expandafter{\yquant@lang@attr@value}}%
+ {\scantokens{\unexpanded{#2}}}$%
+ }%
+ }
+ \expandafter%
+ \endgroup%
+ \process%
+ }%
+ \fi%
+ \yquant@lang@create@do{#1}[1][;%
+ \yquant@env@rescan%
+}
+
+\protected\def\qasm@lang@def#1,#2,'#3' #4\qasm@end{%
+ \lowercase{\def\cmd{#1}}%
+ % we need to do a couple of case distictions (it might seem crazy to look for the existence of a particular macro in #3, but this is what qasm does)
+ \ifstrequal{#3}{bullet}{%
+ \edef\process{%
+ \def\expandafter\noexpand\csname qasm@lang@@def@\cmd\endcsname{%
+ \let\noexpand\yquant@lang@attr@value=\noexpand\empty%
+ \noexpand\yquant@lang@@phase%
+ }%
+ }%
+ }{%
+ % re-tokenize the code
+ \begingroup%
+ \qasm@env@restorecatcodes%
+ \everyeof{\noexpand}%
+ \endlinechar=-1 %
+ \edef\process{%
+ \def\noexpand\texcode{%
+ \scantokens{\unexpanded{#3}}%
+ }%
+ }%
+ \expandafter%
+ \endgroup%
+ \process%
+ % now check whether the text begins with \meter, \dmeter or \dmeterwide. This is not 100% equivalent to qasm, which only checks whether these macros are present, not whether they are at the beginning. But due to our node approach, anything different from the whole content being this macro does not make sense.
+ \expandafter\ifyquant@firsttoken\expandafter\meter\expandafter{\texcode}{%
+ \edef\process{%
+ \def\expandafter\noexpand\csname qasm@lang@@def@\cmd\endcsname####1####2{%
+ \noexpand\yquant@lang@@measure%
+ }%
+ }%
+ }{%
+ \expandafter\ifyquant@firsttoken\expandafter\dmeter\expandafter{\texcode}{%
+ \protected@edef\process{%
+ \def\expandafter\noexpand\csname qasm@lang@@def@\cmd\endcsname####1####2{%
+ \def\noexpand\yquant@lang@attr@value{\texcode}%
+ \noexpand\yquant@lang@@dmeter%
+ }%
+ }%
+ }{%
+ \expandafter\ifyquant@firsttoken\expandafter\dmeterwide\expandafter{\texcode}{%
+ \protected@edef\process{%
+ \def\expandafter\noexpand\csname qasm@lang@@def@\cmd\endcsname####1####2{%
+ \def\noexpand\yquant@lang@attr@value{\texcode}%
+ \noexpand\yquant@lang@@dmeter%
+ }%
+ }%
+ }{%
+ \edef\process{%
+ \def\expandafter\noexpand\csname qasm@lang@@def@\cmd\endcsname{%
+ \yquant@draw%
+ {$\unexpanded\expandafter{\texcode}$}%
+ {/yquant/operators/every box}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ \eappto\process{%
+ % we don't use \qasm@langhelper@declare@command here, since it works globally
+ \protected\long\def\expandafter\noexpand\csname qasm@lang@\cmd\endcsname####1 ####2\noexpand\qasm@end{%
+ \qasm@langhelper@declare@command@@fetchargs{#2}1{####1}\expandafter\noexpand\csname qasm@lang@@def@\cmd\endcsname%
+ \noexpand\yquant@env@rescan%
+ }%
+ }%
+ \expandafter%
+ \endgroup%
+ \process%
+ \yquant@env@scan%
+}
+
+\protected\def\qasm@lang@defbox#1,#2,#3,'#4' #5\qasm@end{%
+ \ifnum#2<#3 %
+ \PackageError{yquant.sty}{Invalid box definition}%
+ {You need at least as many total qubits as controls.}%
+ \fi%
+ \lowercase{\def\cmd{#1}}%
+ % no special cases here
+ \begingroup%
+ \qasm@env@restorecatcodes%
+ \everyeof{\noexpand}%
+ \endlinechar=-1 %
+ \edef\process{%
+ \def\noexpand\texcode{%
+ \scantokens{\unexpanded{#4}}%
+ }%
+ }%
+ \expandafter%
+ \endgroup%
+ \process%
+ \edef\process{%
+ \def\expandafter\noexpand\csname qasm@lang@@def@\cmd\endcsname{%
+ \noexpand\yquant@register@get@allowmultitrue%
+ \yquant@draw%
+ {$\unexpanded\expandafter{\texcode}$}%
+ {/yquant/operators/every box}%
+ }%
+ % we don't use \qasm@langhelper@declare@command here, since it works globally
+ \protected\long\def\expandafter\noexpand\csname qasm@lang@\cmd\endcsname####1 ####2\noexpand\qasm@end{%
+ \qasm@langhelper@declare@command@@fetchargs{#3}{\the\numexpr#2-#3\relax}{####1}\expandafter\noexpand\csname qasm@lang@@def@\cmd\endcsname%
+ \noexpand\yquant@env@rescan%
+ }%
+ }%
+ \expandafter%
+ \endgroup%
+ \process%
+ \yquant@env@scan%
+}
+
+\qasm@langhelper@declare@command{measure}{\expandafter\yquant@lang@@measure\@gobbletwo}01
+
+\qasm@langhelper@declare@command{H}\yquant@lang@@h01
+
+\qasm@langhelper@declare@command{X}\yquant@lang@@x01
+
+\qasm@langhelper@declare@command{Y}\yquant@lang@@y01
+
+\qasm@langhelper@declare@command{Z}\yquant@lang@@z01
+
+\qasm@langhelper@declare@command{S}\qasm@lang@@s01
+\def\qasm@lang@@s{%
+ \yquant@draw%
+ {$S$}%
+ {/yquant/operators/every s}%
+}
+
+\qasm@langhelper@declare@command{T}\qasm@lang@@t01
+\def\qasm@lang@@t{%
+ \yquant@draw%
+ {$T$}%
+ {/yquant/operators/every t}%
+}
+
+\qasm@langhelper@declare@command{nop}\qasm@lang@@nop01
+\def\qasm@lang@@nop#1#2#3{%
+ \dimdef\yquant@lang@attr@value{\yquant@config@operator@minimum@width+\yquant@config@operator@sep}%
+ \yquant@lang@@hspace{#3}%
+ % we don't use a grid-based layout, so a nop really does nothing
+}
+
+\qasm@langhelper@declare@command{zero}\qasm@lang@@zero01
+\def\qasm@lang@@zero#1#2#3{%
+ \let\yquant@lang@attr@value=\qasm@config@zero%
+ \yquant@lang@@init{#3}%
+}
+
+\qasm@langhelper@declare@command{discard}{\expandafter\yquant@lang@@discard\@gobbletwo}01
+
+\qasm@langhelper@declare@command{slash}{\expandafter\yquant@lang@@slash\@gobbletwo}01
+
+\qasm@langhelper@declare@command{dmeter}{\expandafter\yquant@lang@@dmeter\@gobbletwo}01
+
+\qasm@langhelper@declare@command{cnot}\yquant@lang@@not11
+
+\qasm@langhelper@declare@command{c-z}\yquant@lang@@z11
+
+\qasm@langhelper@declare@command{c-x}\yquant@lang@@x11
+
+\qasm@langhelper@declare@command{toffoli}\yquant@lang@@not21
+
+\qasm@langhelper@declare@command{ZZ}{\expandafter\yquant@lang@@zz\@gobbletwo}02
+
+\qasm@langhelper@declare@command{XX}\yquant@lang@@xx02
+
+\qasm@langhelper@declare@command{swap}\yquant@lang@@swap02
+
+\qasm@langhelper@declare@command{Utwo}\qasm@lang@@Utwo02
+\def\qasm@lang@@Utwo{%
+ \yquant@register@get@allowmultitrue%
+ \yquant@draw%
+ {$U$}%
+ {/yquant/operators/every utwo}%
+}
+
+% space is a hspace _without_ wire - in priciple, we would have to discard and then re-initialize
+\qasm@langhelper@declare@command{space}\qasm@lang@@nop01
+% END_FOLD
+
+% some commands that might be used in boxes
+\def\qasm@cmd@m#1{\begin{pmatrix}#1\end{pmatrix}}
+\def\qasm@cmd@txt#1{$#1$}% do not use \text{...}, but exit math mode - in this way, TikZ can still handle linebreak
+\def\qasm@cmd@meter{}%
+\def\qasm@cmd@dmeterwide#1#2{$#1$}%
+\def\qasm@cmd@dmeter#1{$#1$}%
+
+\endinput \ No newline at end of file
diff --git a/language/japanese/pxjahyper/README-ja.md b/language/japanese/pxjahyper/README-ja.md
index 1c607b41ca..1e61d70fc3 100644
--- a/language/japanese/pxjahyper/README-ja.md
+++ b/language/japanese/pxjahyper/README-ja.md
@@ -12,14 +12,20 @@ LaTeX: pLaTeX 上での hyperref のサポート
### 前提環境
* フォーマット: LaTeX
- * エンジン: pTeX、upTeX、pTeX-ng
+ * エンジン: pTeX、upTeX、pTeX-ng
+ ※一部の機能では e-TeX 拡張が必要。
* DVIウェア: dvipdfmx
* 依存パッケージ:
+ - atbegshi
- hyperref
+ * 一部の機能で必要なパッケージ:
+ - japanese-otf
+ - etoolbox
+ - bxjatoucs
### インストール
- - `*.sty` → $TEXMF/tex/platex/PXjahyper
+ - `*.sty`, `*.def` → $TEXMF/tex/platex/PXjahyper
### ライセンス
@@ -35,6 +41,11 @@ pxjahyper パッケージ ー 本体
更新履歴
--------
+ * Version 0.5 〈2020/06/13〉
+ - `otfmacros` オプションを正式にサポート。
+ - `disablecmds` オプションを追加。
+ - `none`(`nodvidriver` の別名)を非推奨とする。
+
* Version 0.4b 〈2020/04/24〉
- `\copyright` の再定義をやめる。
diff --git a/language/japanese/pxjahyper/README.md b/language/japanese/pxjahyper/README.md
index 4c1e22dcbe..b1d28bca54 100644
--- a/language/japanese/pxjahyper/README.md
+++ b/language/japanese/pxjahyper/README.md
@@ -13,11 +13,16 @@ Japanese.
### System Requirements
* TeX format: LaTeX.
- * TeX engine: pTeX, upTeX, pTeX-ng.
+ * TeX engine: pTeX, upTeX, pTeX-ng.
+ Some features require the e-TeX extension.
* DVI-ware: dvipdfmx.
* Dependent packages:
- atbegshi
- hyperref
+ * Packages required by some features:
+ - japanese-otf
+ - etoolbox
+ - bxjatoucs
### Installation
@@ -37,6 +42,7 @@ Please refer to the manual `pxjahyper.pdf` (in Japanese) for detail.
Revision History
----------------
+ * Version 0.5 〈2020/06/13〉
* Version 0.4b 〈2020/04/24〉
* Version 0.4a 〈2019/11/23〉
* Version 0.4 〈2019/10/25〉
diff --git a/language/japanese/pxjahyper/pxjahyper-ajm.def b/language/japanese/pxjahyper/pxjahyper-ajm.def
index 81ce1868df..288f320997 100644
--- a/language/japanese/pxjahyper/pxjahyper-ajm.def
+++ b/language/japanese/pxjahyper/pxjahyper-ajm.def
@@ -11,7 +11,7 @@
%% package declaration
\NeedsTeXFormat{pLaTeX2e}
-\ProvidesFile{pxjahyper-ajm.def}[2020/04/24 v0.4b]
+\ProvidesFile{pxjahyper-ajm.def}[2020/06/13 v0.5]
%% avoid multiple loading
\csname pxjahyperajmLoaded\endcsname
@@ -43,16 +43,9 @@
%% \pxhy@cond@both\ifXXX...\fi\ifYYY...\fi{<yes>}{<no>}
% Checks whether \ifXXX and \ifYYY both hold.
\@gobbletwo\if\if\@gobbletwo\if\if \def\pxhy@cond@both#1\fi#2\fi{%
- \bxju@cond{\if #1#2T\else F\fi\else F\fi T}\fi
+ \pxhy@cond{\if #1#2T\else F\fi\else F\fi T}\fi
}
-%% \pxhy@if@star{<varient>}{<normal>}
-% Expands to <varient> if followed by *, otherwise to <normal>.
-\def\pxhy@if@star#1#2#3{% #3=next-arg
- \expandafter\pxhy@if@star@a\detokenize{#3}@{#1}*@{#2{#3}}\pxhy@mk
-}
-\def\pxhy@if@star@a#1*@#2#3\pxhy@mk{#2}
-
%% \pxhy@if@plus{<varient>}{<normal>}
% Expands to <varient> if followed by +, otherwise to <normal>.
\def\pxhy@if@plus#1#2#3{% #3=next-arg
@@ -131,7 +124,7 @@
%--------------------------------------- helpers
%% prepare
-\csuse{forcecjktoken}
+\pxhy@forcecjktoken
%% shorthands
\catcode`\`=\active \let`\noexpand
diff --git a/language/japanese/pxjahyper/pxjahyper.pdf b/language/japanese/pxjahyper/pxjahyper.pdf
index 4f72b39a18..9d164d0fda 100644
--- a/language/japanese/pxjahyper/pxjahyper.pdf
+++ b/language/japanese/pxjahyper/pxjahyper.pdf
Binary files differ
diff --git a/language/japanese/pxjahyper/pxjahyper.sty b/language/japanese/pxjahyper/pxjahyper.sty
index 66b070c713..4d83b2a351 100644
--- a/language/japanese/pxjahyper/pxjahyper.sty
+++ b/language/japanese/pxjahyper/pxjahyper.sty
@@ -10,7 +10,7 @@
%% package declaration
\NeedsTeXFormat{pLaTeX2e}
-\ProvidesPackage{pxjahyper}[2020/04/24 v0.4b]
+\ProvidesPackage{pxjahyper}[2020/06/13 v0.5]
%% error messages
\def\pxhy@pkgname{pxjahyper}
@@ -26,11 +26,13 @@
%% packages
\RequirePackage{atbegshi}
+\RequirePackage{ltxcmds}[2011/08/22]% v1.21
%% globals
\newif\ifpxhy@ptex
\newif\ifpxhy@uptex
\newif\ifpxhy@etex
+\newif\ifpxhy@etoolbox
\let\pxhy@jcode\@undefined
\newif\ifpxhy@tounicode
\newif\ifpxhy@zerox
@@ -41,6 +43,7 @@
\let\pxhy@driver\@undefined
\newif\ifpxhy@hy@unicode
\newif\ifpxhy@jacommentline
+\newif\ifpxhy@disablecmds
\newif\ifpxhy@otfcid
\newif\ifpxhy@otfmacros
@@ -85,6 +88,12 @@
\DeclareOption{nojacommentline}{%
\pxhy@jacommentlinefalse
}
+\DeclareOption{disablecmds}{%
+ \pxhy@disablecmdstrue
+}
+\DeclareOption{nodisablecmds}{%
+ \pxhy@disablecmdsfalse
+}
\pxhy@otfcidtrue
\DeclareOption{otfcid}{%
\pxhy@otfcidtrue
@@ -95,13 +104,12 @@
}
\DeclareOption{otfmacros}{%
\pxhy@otfmacrostrue
- \let\pxhy@otfcid@given=t
}
\DeclareOption{nootfmacros}{%
\pxhy@otfmacrosfalse
}
\ExecuteOptions{%
- auto,tounicode,noout2uni,jacommentline%
+ auto,tounicode,noout2uni,jacommentline,disablecmds%
}
\ProcessOptions*
@@ -150,7 +158,9 @@
\ifx\pxhy@tmpa\pxhy@tmpb #2\fi
}
\pxhy@check\eTeXversion{%
- \IfFileExists{etoolbox.sty}{\pxhy@etextrue}{}}
+ \pxhy@etextrue
+ \IfFileExists{etoolbox.sty}{\pxhy@etoolboxtrue}{}%
+}
\pxhy@check\kanjiskip{\pxhy@ptextrue}
\pxhy@check\forcecjktoken{\pxhy@uptextrue}
\ifpxhy@ptex\else
@@ -203,13 +213,18 @@
\pxhy@fatal{hyperref 'unicode' mode is not supported}{}%
\expandafter\endinput
\fi
+% otfmacros forces use of otfcid.
+\ifpxhy@otfmacros
+ \let\pxhy@otfcid@given=t
+ \pxhy@otfcidtrue
+\fi
% otfcid requires upTeX or out2uni.
\ifpxhy@uptex\else\ifpxhy@zerox\else
\pxhy@otfcidfalse
\ifx t\pxhy@otfcid@given
\PackageWarningNoLine\pxhy@pkgname
- {Option 'otfcid' is invalid unless upTeX is used\MessageBreak
- or 'out2uni' is specified}
+ {Option 'otfcid'/'otfmacros' is invalid\MessageBreak
+ unless upTeX is used or 'out2uni' is specified}
\fi
\fi\fi
@@ -226,11 +241,6 @@ pxhy@driver = \the\pxhy@driver^^J%
%--------------------------------------- Helpers
-%% packages
-\ifpxhy@etex
- \RequirePackage{etoolbox}[2011/01/03]%v2.1
-\fi
-
%% unique tokens
\def\pxhy@end{\pxhy@end@}
\let\pxhy@mk\indent % unexpandable
@@ -262,6 +272,32 @@ pxhy@driver = \the\pxhy@driver^^J%
\let\pxhy@forcecjktoken\relax
\fi
+%--------------------------------------- Helpers (e-TeX)
+\ifpxhy@etex
+
+%% packages
+\ifpxhy@etoolbox
+ \RequirePackage{etoolbox}[2011/01/03]%v2.1
+\fi
+
+%% \pxhy@if@star{<varient>}{<normal>}
+% Expands to <varient> if followed by *, otherwise to <normal>.
+\def\pxhy@if@star#1#2#3{% #3=next-arg
+ \expandafter\pxhy@if@star@a\expandafter @\detokenize{#3}@%
+ {#1}@*@{#2{#3}}\pxhy@mk
+}
+\def\pxhy@if@star@a#1@*@#2#3\pxhy@mk{#2}
+
+%% \pxhy@if@opt{<true>}{<false>}
+% Expands to <true>{<opt>} if followed by [<opt>], otherwise to <false>.
+\def\pxhy@if@opt#1#2#3{% #3=next-arg
+ \expandafter\pxhy@if@opt@a\expandafter @\detokenize{#3}@%
+ {\pxhy@if@opt@b{#1}}@[@{#2{#3}}\pxhy@mk%]
+}
+\def\pxhy@if@opt@a#1@[@#2#3\pxhy@mk{#2}
+\def\pxhy@if@opt@b#1#2]{#1{#2}}
+
+\fi
%--------------------------------------- Output 'tounicode' special
\ifpxhy@tounicode
@@ -445,7 +481,7 @@ pxhy@driver = \the\pxhy@driver^^J%
\let\pxhy@otfcid@disabled\relax
%% preparation
-\ifpxhy@etex
+\ifpxhy@etoolbox
% check if bxjatoucs is available
\IfFileExists{bxjatoucs.sty}{%
\let\bxjatoucsCheckAvail=t
@@ -457,11 +493,15 @@ pxhy@driver = \the\pxhy@driver^^J%
package 'bxjatoucs' is unavailable%
}%
}{}
+\else\ifpxhy@etex
+ \def\pxhy@otfcid@disabled{%
+ package 'etoolbox' is unavailable%
+ }
\else
\def\pxhy@otfcid@disabled{%
- e-TeX extension (or 'etoolbox') is unavailable%
+ e-TeX extension is unavailable%
}
-\fi
+\fi\fi
%% annihilate the ajmacros's own pdfstring process
\ifpxhy@otfmacros\ifx\pxhy@otfcid@disabled\relax
\let\ajRedefine@ajCommands\relax
@@ -514,7 +554,7 @@ pxhy@driver = \the\pxhy@driver^^J%
\pxhy@dispatch@otfcid
\else
\PackageWarningNoLine\pxhy@pkgname
- {Option 'otfcid' is disabled, because\MessageBreak
+ {Option 'otfcid'/'otfmacros' is disabled, because\MessageBreak
\pxhy@otfcid@disabled}%
\pxhy@otfcidfalse
\fi
@@ -1112,6 +1152,73 @@ pxhy@driver = \the\pxhy@driver^^J%
\fi
\fi
+%--------------------------------------- 'disablecmds'
+\ifpxhy@disablecmds
+
+%% \pxhy@rensuji
+\ifpxhy@etex
+ \def\pxhy@rensuji{%
+ \pxhy@if@star\pxhy@rensuji@a\pxhy@rensuji@a
+ }
+ \def\pxhy@rensuji@a{%
+ \pxhy@if@opt\@secondoftwo\@firstofone
+ }
+\else
+ \let\pxhy@rensuji\relax % freeze
+\fi
+
+%% \pxhy@ifdef@let\CSa\CSb
+\def\pxhy@ifdef@let#1#2{%
+ \ifx#1\@undefined\else
+ \let#1#2%
+ \fi
+}
+
+%% \pxhy@disable@commands
+\def\pxhy@disable@commands{%
+ % pTeX primitives
+ \let\autospacing\@empty
+ \let\autoxspacing\@empty
+ \let\inhibitglue\@empty
+ \let\noautospacing\@empty
+ \let\noautoxspacing\@empty
+ % pLaTeX core
+ \let\romanencoding\@gobble
+ \let\kanjiencoding\@gobble
+ \let\romanfamily\@gobble
+ \let\kanjifamily\@gobble
+ \let\romanseries\@gobble
+ \let\kanjiseries\@gobble
+ \let\romanshape\@gobble
+ \let\kanjishape\@gobble
+ \let\useroman\@gobblefour
+ \let\usekanji\@gobblefour
+ \let\textmc\@firstofone
+ \let\textgt\@firstofone
+ \let\mcfamily\@empty
+ \let\gtfamily\@empty
+ \let\userelfont\@empty
+ \let\<\@empty
+ % plext
+ \pxhy@ifdef@let\bou\@firstofone
+ \pxhy@ifdef@let\kasen\@firstofone
+ \pxhy@ifdef@let\rensuji\pxhy@rensuji
+ \pxhy@ifdef@let\prensuji\pxhy@rensuji
+ \pxhy@ifdef@let\Rensuji\pxhy@rensuji
+ % japanese-otf
+ \pxhy@ifdef@let\textmg\@firstofone
+ \pxhy@ifdef@let\mgfamily\@empty
+ \pxhy@ifdef@let\ltseries\@empty
+ \pxhy@ifdef@let\ebseries\@empty
+ \pxhy@ifdef@let\propshape\@empty
+}
+
+%% register to 'disable' list
+% This registration should be of lower priority than others,
+% and thus is prepended to pdfstringdefPreHook.
+\ltx@GlobalPrependToMacro\pdfstringdefPreHook{\pxhy@disable@commands}
+
+\fi
%--------------------------------------- All done
\endinput
%% EOF
diff --git a/language/japanese/pxjahyper/pxjahyper.tex b/language/japanese/pxjahyper/pxjahyper.tex
index f8049f8d57..e7387f2386 100644
--- a/language/japanese/pxjahyper/pxjahyper.tex
+++ b/language/japanese/pxjahyper/pxjahyper.tex
@@ -1,16 +1,17 @@
% 文字コードは UTF-8
% uplatex で組版する
\documentclass[uplatex,a4paper]{jsarticle}
+\renewcommand{\headfont}{\gtfamily\romanseries{sbc}\sffamily}
\usepackage{shortvrb}
\MakeShortVerb{\|}
\usepackage{bxtexlogo}
\bxtexlogoimport{*}
-\newcommand{\PkgVersion}{0.4b}
-\newcommand{\PkgDate}{2020/04/24}
+\newcommand{\PkgVersion}{0.5}
+\newcommand{\PkgDate}{2020/06/13}
\newcommand{\Pkg}[1]{\textsf{#1}}
\newcommand{\Meta}[1]{$\langle$\mbox{}#1\mbox{}$\rangle$}
\newcommand{\Note}{\par\noindent ※}
-\newcommand{\Means}{~:\quad}
+\newcommand{\Means}{:\quad}
%-----------------------------------------------------------
\begin{document}
\title{\Pkg{pxjahyper} パッケージ}
@@ -67,8 +68,29 @@
使えるようにする。
具体的には、当該のAJ1のグリフに“対応”するUnicode文字が
あればそれを出力し、なければ(警告を出した上で)削除する。
-\item |nootfcid| \Means
+\item |nootfcid|\Means
|otfcid| の否定。
+ \Note |otfcid| の利用には、エンジンの{\eTeX}拡張および
+ \Pkg{etoolbox}と\Pkg{bxjatoucs}パッケージインストールが必要。
+\item |disablecmds|(既定)\Means
+ 「PDF文字列中のテキスト装飾命令の無効化」を有効にする。
+ \Note 詳細は\ref{ssec:disablecmds}節を参照。
+\item |nodisablecmds|\Means
+ |disablecmds| の否定。
+\item |otfmacros|\Means
+ \Pkg{japanese-otf}付属の\Pkg{ajmacros}パッケージが提供する
+ 文字入力命令(|\ajMaru|、|\ajLig| 等)をPDF文字列中で
+ “可能な限り”使えるようにする。
+ \Note Unicode文字で表現可能であればそれを出力し、
+ なければ代替表現を出力する。
+ \Note |otfmacros| を指定する場合は |otfcid| も有効にする必要がある。
+ \Note \Pkg{ajmacros}パッケージの多くの命令は“脆弱(fragile)”である。
+ そのため、節見出し(|\section| 等の引数)で |\ajMaru| 等の命令を
+ 使いたい場合は、命令の前に |\protect| 付ける必要がある。
+ \footnote{ちなみに、引数がPDF文字列として解釈される場合には、
+ |\protect| は全く結果に影響しない。}
+\item |nootfmacros|(既定)\Means
+ |otfmacros| の否定。
\item |bigcode|(既定)\Means
{\upTeX}でのToUnicode CMapとして既定のUTF8-UCSの代わりに\
UTF8-UTF16を用いる。
@@ -78,12 +100,13 @@
\Note 0.3a版より既定を |bigcode| に変更した。
\item |dvipdfmx|\Means
dvipdfmxを前提とした動作を行う。
-\item |nodriver|/|none|\Means
+\item |nodvidriver|\Means
dvipdfmxを前提とした動作を抑止する。
- 現状では、この場合には本パッケージは実質的に何の動作も行わない。
+ \Note 現状では、この場合には本パッケージは実質的に何の動作も行わない。
+ \Note 0.5版より、|nodvidriver| の別名の |none| は非推奨の扱いとする。
\item |auto|(既定)\Means
\Pkg{hyperref}のドライバがdvipdfmx用ならば |dvipdfmx|、
- それ以外は |none| の動作。
+ それ以外は |nodvidriver| の動作。
\end{itemize}
%===========================================================
@@ -92,9 +115,20 @@
「概要」で述べた機能は(オプション設定に応じて)
自動的に実施される。
-\paragraph{Unicode符号値による入力}
+%-------------------
+\subsection{Unicode符号値による入力}
+
PDF文字列入力中で、|\Ux| が以下の意味になる。
PDF文字列以外では |\Ux| は以前の定義(または未定義)に戻る。
+\footnote{|\Ux| という命令名は\Pkg{bxbase}パッケージの
+Unicode符号値入力用の命令が使っているものである。
+従って、\Pkg{bxbase}パッケージを読み込んでいれば、
+「PDF文字列と版面出力の両方に使われる」ようなテキストにおいて、
+|\Ux| でUnicode符号値入力が可能になる。
+ただし、Unicode符号値入力用の命令としては
+「\Pkg{japanese-otf}パッケージの |\UTF| 命令」
+の方が有名であり、\Pkg{pxjahyper}は |\UTF| も正しく扱えるので、
+こちらを使う方が無難かもしれない。}
\begin{itemize}
\item |\Ux{|Unicode符号値|}|\Means
@@ -109,7 +143,9 @@ out2uni用の出力を行うように設計されているが、
|\UTF| も(PDF文字列中では)|\Ux| と同じ動作
(つまりtounicode用の出力)になるように変更される。
-\paragraph{PDF文字列用の文字命令の定義}
+%-------------------
+\subsection{PDF文字列用の文字命令の定義}
+
以下の命令が提供される。(プリアンブルでのみ使用可能。)
\begin{itemize}
@@ -138,4 +174,46 @@ PDF文字列中で |\textschwa|(schwa記号)や |\d{t}|(\d{t})が
\pxDeclarePdfTextComposite{\d}{t}{}{1E6D}
\end{verbatim}\end{quote}
+%-------------------
+\subsection{PDF文字列用中のテキスト装飾命令の無効化}
+\label{ssec:disablecmds}
+
+PDF文字列は単なるUnicode文字列として扱われるものなので、
+|\textit| や |\large| 等のテキスト装飾用の命令は意味をなさず、
+またそれらの命令の実装はPDF文字列の解釈中は正常に処理できない。
+PDF文字列と版面出力の両方に使われるテキスト(節見出し等)
+についてテキスト装飾命令が支障なく使えるように、
+\Pkg{hyperref}では基本的なテキスト装飾命令
+(多くは{\LaTeX}カーネルが提供するもの)
+について、「PDF文字列として扱う場合は自動的に無力化
+\footnote{例えば、“|\textit{text}|”や“|{\large text}|”は
+ 単に“|text|”と書いたものと見なされる。}
+する」機構を実装している。
+これにより、例えば節見出しのテキストに“|\textit{text}|”が
+含まれていたとすると、
+版面に出力する場合には“\textit{text}”のように装飾が施され、
+一方で、PDF文字列としては“|text|”と解釈されることになる。
+
+0.5版以降の\Pkg{pxjahyper}では、この無効化の対象に
+「和文用のテキスト装飾命令(およびそれに準じるもの)」
+を追加するようになった。
+以下の命令が対象になる。
+
+\begin{itemize}
+\item 和文のフォント選択命令\Means
+ |\textmc| |\gtfamily| |\kanjifamily| |\useroman| |\userelfont|
+ など
+\item 次の{\pLaTeX}カーネル命令\Means
+ |\<|
+\item 次の{\pTeX}プリミティブ\Means
+ |\inhibitglue| |\|(|no|)|autospacing| |\|(|no|)|autoxspacing|
+\item 次の\Pkg{plext}の命令\Means
+ |\bou| |\kasen| |\rensuji|
+\item 次の\Pkg{japanese-otf}の命令\Means
+ |\textmg| |\mgfamily| |\ltseries| |\ebseries| |\propshape|
+\end{itemize}
+
+
+
+
\end{document}
diff --git a/macros/latex/contrib/hyperxmp/hyperxmp.dtx b/macros/latex/contrib/hyperxmp/hyperxmp.dtx
index 1d2c332018..e4e4f52837 100644
--- a/macros/latex/contrib/hyperxmp/hyperxmp.dtx
+++ b/macros/latex/contrib/hyperxmp/hyperxmp.dtx
@@ -22,7 +22,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{hyperxmp}
%<*package>
- [2020/05/12 v5.2 Store hyperref metadata in XMP format]
+ [2020/06/13 v5.3 Store hyperref metadata in XMP format]
%</package>
%
%<*driver>
@@ -112,7 +112,7 @@
%</driver>
% \fi
%
-% \CheckSum{2425}
+% \CheckSum{2610}
%
% \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
@@ -169,6 +169,8 @@
% standards, as requested by Robin Schwab}
% \changes{v5.0}{2020/02/26}{Added support for \protect\acro{PDF/X}
% standards, as requested by Robin Schwab}
+% \changes{v5.0}{2020/03/17}{Don't set any document dates (creation,
+% modification, or metadata) from \string\optname{pdfdate}}
% \changes{v5.2}{2020/04/29}{Introduced the \protect\optname{pdfidentifier}
% package option, which enables an author to specify a unique identifier
% for the document}
@@ -189,6 +191,7 @@
% ^^A Define a few logical styles.
% \DeclareRobustCommand{\term}[1]{#1\SortIndex{#1}{#1}}
% \DeclareRobustCommand{\pkgname}[1]{\mbox{\textsf{#1}}\SortIndex{#1}{\textsf{#1}}}
+% \DeclareRobustCommand{\clsname}[1]{\mbox{\textsf{#1}}\SortIndex{#1}{\textsf{#1}}}
% \makeatletter
% \DeclareRobustCommand{\xmpprop}[2][]{^^A XMP property
% \def\xmppropopt{#1}^^A
@@ -1128,15 +1131,27 @@
% can include \term{Unicode} characters in its \acro{XMP} fields.
%
% \usagenote{Automatically specified metadata}
-% \optname{pdftitle} defaults to the document's title as specified by
-% |\title{|\dots|}|. \optname{pdfauthor} defaults to the document's
-% author(s) as specified by |\author{|\dots|}|. \optname{pdfdate}
-% defaults to the current date and time. \optname{pdfmetalang}
-% defaults to the same value as \optname{pdflang} if non-empty,
-% ``|x-default|'' otherwise. An implication of automatic
-% metadata specification is that an author can simply include
-% |\usepackage{hyperxmp}| in a document's preamble and benefit from
-% a modicum of \acro{XMP} metadata with no additional effort.
+% \pkgname{hyperxmp} attempts to identify certain metadata
+% automatically. The hope is that in many cases, an author can simply
+% include |\usepackage{hyperxmp}| in a document's preamble and benefit
+% from a modicum of \acro{XMP} metadata with no additional effort.
+%
+% Currently, \optname{pdftitle} defaults to the document's title as
+% specified by |\title{|\dots|}|. \optname{pdfauthor} defaults to the
+% document's author(s) as specified by |\author{|\dots|}|.
+% \optname{pdfdate} defaults to the current date and time.
+% \optname{pdfmetalang} defaults to the same value as \optname{pdflang}
+% if non-empty, ``|x-default|'' otherwise. \pkgname{hyperxmp}
+% recognizes some class-specific metadata as well, such as that provided
+% via the Koma letter classes (e.g.,~\clsname{scrlttr2}) and the
+% \acro{ACM} article class (\clsname{acmart}).
+%
+% If a document uses the \pkgname{polyglossia} package, it is
+% recommended that it \emph{not} explicitly set \optname{pdflang}.
+% \optname{pdflang} accepts only a single language name while
+% \pkgname{hyperxmp} can automatically query \pkgname{polyglossia} for a
+% list of all languages used in the document and include this list in an
+% \acro{XMP} \xmpterm{dc:language} element.
%
% \usagenote{Multilingual metadata}
% \label{note:multilingual}
@@ -1435,22 +1450,24 @@
% Thanks to Heiko Oberdiek for the bug report and suggested modifications.}
%
% \begin{macro}{\hyxmp@at@end}
-% \begin{macro}{\hyxmp@driver}
% The |\hyxmp@at@end| macro includes code at the end of the document.
-% For \pdfTeX, the standard |\AtEndDocument| works well enough. For all
-% the other backends we use |\AtEndDvi| from the \pkgname{atenddvi}
-% package, which is more robust but requires an addition \LaTeX\ run.
-% \begin{macrocode}
-\def\hyxmp@driver{hpdftex}
-\ifx\hyxmp@driver\Hy@driver
- \let\hyxmp@at@end=\AtEndDocument
-\else
+% When available (as is the case in most modern \tex\ backends),
+% \cs{AtEndDocument} works well enough. Otherwise, we invoke
+% \cs{AtEndDvi} from the \pkgname{atenddvi} package, which is robust but
+% requires an addition \LaTeX\ run.
+% \changes{v5.3}{2020/05/29}{Use \protect\cs{AtEndDocument} in all
+% \protect\tex\ back ends that provide it. Thanks to Nelson Posse
+% Lago for pointing out why \protect\pkgname{atenddvi} is best avoided
+% if possible}
+% \begin{macrocode}
+\@ifundefined{AtEndDocument}{%
\RequirePackage{atenddvi}
\let\hyxmp@at@end=\AtEndDvi
-\fi
+}{%
+ \let\hyxmp@at@end=\AtEndDocument
+}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
%
% \subsection{Integration with \textsf{hyperref}}
@@ -1504,6 +1521,20 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\@if@def@and@nonempty}
+% This macro combines \cs{@ifundefined} and \cs{@ifmtargexp}. If the
+% macro named |#1| is both defined and non-empty, evaluate~|#2|.
+% Otherwise, evaluate~|#3|.
+% \changes{v5.3}{2020/06/07}{Added this macro}
+% \begin{macrocode}
+\newcommand*{\@if@def@and@nonempty}[3]{%
+ \@ifundefined{#1}{#3}{%
+ \expandafter\@ifmtargexp\expandafter{\csname#1\endcsname}{#3}{#2}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\hyxmp@pdfstringdef}
% \begin{macro}{\hyxmp@textunderscore}
% Because \pkgname{hyperxmp} uses underscores to represent hard spaces,
@@ -2421,30 +2452,78 @@
% \end{macro}
% \end{macro}
%
-% Rather than load \pkgname{hyperref} ourself we let the author do it
-% then verify he actually did. This approach gives the author the
-% flexibility to load \pkgname{hyperxmp} and \pkgname{hyperref} in
-% either order and to call |\hypersetup| anywhere in the document's
-% preamble, not just before \pkgname{hyperxmp} is loaded.
+% \begin{macro}{\hyxmp@set@koma@phones}
+% \changes{v5.3}{2020/06/07}{Added this macro}
+% \begin{macro}{\hyxmp@koma@phones}
+% Define \cs{hyxmp@koma@phones} as a comma-separated list of the phone
+% numbers provided to a Koma letter class (mobile and landline).
% \begin{macrocode}
-\AtBeginDocument{%
- \@ifpackageloaded{hyperref}{%
+\newcommand*{\hyxmp@set@koma@phones}{%
+ \@if@def@and@nonempty{scr@frommobilephone@var}{%
+ \@if@def@and@nonempty{scr@fromphone@var}{%
+ \edef\hyxmp@koma@phones{\scr@frommobilephone@var,\scr@fromphone@var}%
+ }{%
+ \edef\hyxmp@koma@phones{\scr@frommobilephone@var}%
+ }%
+ }{%
+ \@if@def@and@nonempty{scr@fromphone@var}{%
+ \edef\hyxmp@koma@phones{\scr@fromphone@var}%
+ }{%
+ }%
+ }%
+}
% \end{macrocode}
-% In older versions of \pkgname{hyperref}, |\@pdflang| is set to
-% |\@empty| if \optname{pdflang} is not specified. In newer versions of
-% \pkgname{hyperref}, |\@pdflang| is set to |\relax| if
-% \optname{pdflang} is not specified. The latter is a bit problematic
-% for \pkgname{hyperxmp} because it makes |\@pdflang| non-expandable,
-% which causes a literal ``|\@pdflang|'' to be written as \acro{XMP}
-% metadata. To avoid that situation we redefine |\@pdflang| as
-% |\@empty| if we see it set to |\relax|.
-% \changes{v2.3a}{2013/04/16}{Bug fix: Redefine \cs{@pdflang} as
-% \cs{@empty} when \protect\pkgname{hyperref} has set
-% it to \cs{relax}}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\hyxmp@use@first@valid}
+% Given a \pkgname{hyperxmp} option~(|#1|), its current value~(|#2|),
+% and a comma-separated list of option names~(|#3|), if the current
+% value is empy, invoke \cs{hypersetup} to set the option to the first
+% non-empty item in the list. If all items in the list are empty, do
+% nothing.
+% \changes{v5.3}{2020/05/29}{Added this macro}
% \begin{macrocode}
- \ifx\@pdflang\relax
- \let\@pdflang=\@empty
+\newcommand*{\hyxmp@use@first@valid}[3]{%
+ \@ifmtargexp{#2}{%
+ \hyxmp@use@first@valid@i{#1}#3,!,%
+ }%
+ {}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hyxmp@use@first@valid@i}
+% This macro performs all the work for \cs{hyxmp@use@first@valid}. It
+% loops over a comma-separated list of macros~(|#2|), stopping when it
+% encounters an end-of-list marker~(``|!|''). The first list element
+% that is neither undefined nor empty is assigned to a given option
+% name~(|#1|) using \cs{hypersetup}.
+% \begin{macrocode}
+\def\hyxmp@use@first@valid@i#1#2,{%
+ \def\next{\hyxmp@use@first@valid@i{#1}}%
+ \ifx#2!%
+ \let\next=\relax
+ \else
+ \ifx#2\undefined
+ \else
+ \@ifnotmtargexp{#2}{%
+ \hypersetup{#1={#2}}%
+ \def\next##1!,{}%
+ }%
\fi
+ \fi
+ \next
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hyxmp@auto@assign@data}
+% If certain metadata are unspecified, try to specify meaningful values
+% using data provided by author via other means (e.g.,~\cs{title} for
+% the document's title).
+% \begin{macrocode}
+\newcommand*{\hyxmp@auto@assign@data}{%
% \end{macrocode}
% If the author explicitly specified the language to use for the
% document's metadata, we use that. If not, we use the document
@@ -2461,37 +2540,346 @@
% \protect\texttt{x-default}. This addresses a bug report by Niklas
% Beisert}
% \begin{macrocode}
- \ifx\@pdfmetalang\@empty
- \ifx\@pdflang\@empty
- \let\@pdfmetalang=\hyxmp@x@default
- \else
- \edef\@pdfmetalang{\@pdflang}%
- \fi
+ \ifx\@pdfmetalang\@empty
+ \ifx\@pdflang\@empty
+ \let\@pdfmetalang=\hyxmp@x@default
+ \else
+ \edef\@pdfmetalang{\@pdflang}%
\fi
- \hyxmp@xmlify\@pdfmetalang
+ \fi
+ \hyxmp@xmlify\@pdfmetalang
% \end{macrocode}
-% \changes{v5.0}{2020/03/17}{Don't set any document dates (creation,
-% modification, or metadata) from \string\optname{pdfdate}}
% If the author left \optname{pdftitle} blank but specified |\title|,
-% use the title for \optname{pdftitle}. Likewise, if the author left
-% \optname{pdfauthor} blank but specified |\author|, use the author for
-% \optname{pdfauthor}.
+% use the title for \optname{pdftitle}. Do likewise for various other
+% metadata: identify author-provided information that can be co-opted
+% for use as \acro{XMP} metadata.
% \changes{v2.7}{2016/02/01}{Automatically use \cs{title} and \cs{author}
% if \protect\optname{pdftitle} and \protect\optname{pdfauthor} are left
% unspecified. Thanks to Maciej Radziejewski for the suggestion}
+% \changes{v5.3}{2020/05/29}{Consider other author-provided sources of
+% metadata. Thanks to Robin Schwab for proposing that
+% \protect\pkgname{hyperxmp} use the Koma letter classes's metadata}
% \begin{macrocode}
- \@ifmtargexp{\@pdftitle}{%
- \@ifnotmtargexp{\@title}{%
- \hypersetup{pdftitle={\@title}}%
+ \hyxmp@use@first@valid{pdftitle}{\@pdftitle}{%
+ \scr@subject@var,%
+ \@title
+ }%
+ \hyxmp@use@first@valid{pdfauthor}{\@pdfauthor}{%
+ \scr@fromname@var,%
+ \@author
+ }%
+ \hyxmp@use@first@valid{pdfcontactemail}{\@pdfcontactemail}{%
+ \scr@fromemail@var
+ }%
+ \hyxmp@set@koma@phones
+ \hyxmp@use@first@valid{pdfcontactphone}{\@pdfcontactphone}{%
+ \hyxmp@koma@phones
+ }%
+ \hyxmp@use@first@valid{pdfcontacturl}{\@pdfcontacturl}{%
+ \scr@fromurl@var
+ }%
+ \hyxmp@use@first@valid{pdfsubtitle}{\@pdfsubtitle}{%
+ \@subtitle
+ }%
+ \hyxmp@use@first@valid{pdfpublisher}{\@pdfpublisher}{%
+ \@publishers
+ }%
+% \end{macrocode}
+% We handle the \clsname{acmart} class specially. \clsname{acmart}
+% stores author-provided contact information in a structured format that
+% we can process fairly easily. Note that if the author is not using
+% the \clsname{acmart} class, \cs{hyxmp@parse@acmart} will have been
+% redefined to do nothing.
+% \begin{macrocode}
+ \hyxmp@parse@acmart
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hyxmp@parse@acmart}
+% The \clsname{acmart} class stores a rich set of author metadata in its
+% \cs{addresses} macro. \cs{hyxmp@parse@acmart} extracts the contact
+% information for the first author and converts that to \acro{XMP}
+% metadata.
+% \changes{v5.3}{2020/05/30}{Added this macro}
+% \begin{macrocode}
+\newcommand*{\hyxmp@parse@acmart}{%
+ \begingroup
+% \end{macrocode}
+% \begin{macro}{\@author}
+% \clsname{acmart} has already invoked
+% |\hypersetup{pdfauthor=|\dots|}| to specify the complete list of
+% authors. At this point, |\@author| is defined to produce a warning
+% message. We locally redefine it to do nothing.
+% \begin{macrocode}
+ \let\@author=\@gobble
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\email}
+% \begin{macro}{\hyxmp@address@val}
+% Within \cs{addresses}, \cs{email} is defined to accept two arguments,
+% the second of which is the author's email address.
+% \begin{macrocode}
+ \def\email##1##2{%
+ \def\hyxmp@address@val{##2}%
+ \hyxmp@use@first@valid{pdfcontactemail}{\@pdfcontactemail}{%
+ \hyxmp@address@val
}%
}%
- {}%
- \@ifmtargexp{\@pdfauthor}{%
- \@ifnotmtargexp{\@author}{%
- \hypersetup{pdfauthor={\@author}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\streetaddress}
+% \begin{macro}{\hyxmp@address@val}
+% \cs{streetaddress} wraps the author's street address.
+% \begin{macrocode}
+ \def\streetaddress##1{%
+ \def\hyxmp@address@val{##1}%
+ \hyxmp@use@first@valid{pdfcontactaddress}{\@pdfcontactaddress}{%
+ \hyxmp@address@val
}%
}%
- {}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\city}
+% \begin{macro}{\hyxmp@address@val}
+% \cs{city} wraps the author's city name.
+% \begin{macrocode}
+ \def\city##1{%
+ \def\hyxmp@address@val{##1}%
+ \hyxmp@use@first@valid{pdfcontactcity}{\@pdfcontactcity}{%
+ \hyxmp@address@val
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\state}
+% \begin{macro}{\hyxmp@address@val}
+% \cs{state} wraps the author's state or region name.
+% \begin{macrocode}
+ \def\state##1{%
+ \def\hyxmp@address@val{##1}%
+ \hyxmp@use@first@valid{pdfcontactregion}{\@pdfcontactregion}{%
+ \hyxmp@address@val
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\country}
+% \begin{macro}{\hyxmp@address@val}
+% \cs{country} wraps the author's country name.
+% \begin{macrocode}
+ \def\country##1{%
+ \def\hyxmp@address@val{##1}%
+ \hyxmp@use@first@valid{pdfcontactcountry}{\@pdfcontactcountry}{%
+ \hyxmp@address@val
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\postcode}
+% \begin{macro}{\hyxmp@address@val}
+% \cs{postcode} wraps the author's postal code.
+% \begin{macrocode}
+ \def\postcode##1{%
+ \def\hyxmp@address@val{##1}%
+ \hyxmp@use@first@valid{pdfcontactpostcode}{\@pdfcontactpostcode}{%
+ \hyxmp@address@val
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\affiliation}
+% We want to produce \acro{XMP} metadata for only a single affiliation.
+% Although \cs{hyxmp@use@first@valid} will ensure that only the first
+% email, city, country, etc.\ encountered is considered, we run the
+% first of one affiliation defining, say, a city and state but no
+% country and a subsequent affiliation defining a country. In that
+% case, the \acro{XMP} would include the first author's city and state
+% and the subsequent author's country. Hence, we define
+% \cs{affiliation} to ``self destruct'' after its first use, discarding
+% all further affiliations.
+% \begin{macrocode}
+ \def\affiliation##1##2{%
+ ##2%
+ \let\affiliation=\@gobbletwo
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% We want to evaluate \cs{addresses} with the preceding local
+% definitions in effect, but we don't want to typeset any text appearing
+% in the string. Hence, we ``typeset'' \cs{addresses} within a box that
+% is subsequently discarded.
+% \begin{macrocode}
+ \setbox0=\hbox{\addresses}%
+ \endgroup
+% \end{macrocode}
+%
+% \clsname{acmart} supports other relevant metadata in addition to the
+% authors' mailing addresses. For instance, papers accepted for
+% publication indicate their \acro{DOI} number. However, papers under
+% review will contain either a placeholder \acro{DOI},
+% ``10.1145/nnnnnnn.nnnnnnn'', or the example \acro{DOI} specified in
+% the \clsname{acmart} example document, ``10.1145/1122445.1122456''.
+% We ignore both of those \acro{DOI}s.
+% \begin{macrocode}
+ \@if@def@and@nonempty{@acmDOI}{%
+ \IfSubStr{\@acmDOI}{10.1145/1122445.1122456}{}{%
+ \IfSubStr{\@acmDOI}{10.1145/nnnnnnn.nnnnnnn}{}{%
+ \hyxmp@use@first@valid{pdfdoi}{\@pdfdoi}{%
+ \@acmDOI
+ }%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% \begin{macro}{\hyxmp@strip@isbn@date}
+% \begin{macro}{\hyxmp@acm@isbn}
+% Papers appearing in conference proceedings specify the proceedings'
+% \acro{ISBN}. As with \cs{@acmDOI} above, we ignore both the
+% placeholder \acro{ISBN}, ``978-x-xxxx-xxxx-x/YY/MM'', and the example
+% \acro{ISBN}, ``978-1-4503-XXXX-X/18/06''. We also strip off the
+% ``\texttt{/}\meta{year}\texttt{/}\meta{month}'' suffix so as to
+% include a true \acro{ISBN} in the \acro{XMP} metadata.
+% \begin{macrocode}
+ \@if@def@and@nonempty{@acmISBN}{%
+ \IfSubStr{\@acmISBN}{XXXX}{}{%
+ \IfSubStr{\@acmISBN}{xxxx}{}{%
+ \def\hyxmp@strip@isbn@date##1/##2!{##1}%
+ \edef\hyxmp@acm@isbn{%
+ \expandafter\hyxmp@strip@isbn@date\@acmISBN/!%
+ }%
+ \hyxmp@use@first@valid{pdfisbn}{\@pdfisbn}{%
+ \hyxmp@acm@isbn
+ }%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\hyxmp@acm@publisher}
+% The publisher is of course \acro{ACM}.
+% \begin{macrocode}
+ \def\hyxmp@acm@publisher{Association for Computing Machinery}%
+ \hyxmp@use@first@valid{pdfpublisher}{\@pdfpublisher}{%
+ \hyxmp@acm@publisher
+ }%
+% \end{macrocode}
+% Use the journal name if defined, otherwise the book name (for
+% conference proceedings).
+% \begin{macrocode}
+ \hyxmp@use@first@valid{pdfpublication}{\@pdfpublication}{%
+ \@journalName,%
+ \@acmBooktitle,%
+ \@acmConference
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\hyxmp@acm@pubtype}
+% \clsname{acmart} makes clear whether it's typesetting a journal
+% article. If it's not a journal, we assume it's a book (conference
+% proceedings).
+% \begin{macrocode}
+ \if@ACM@journal
+ \def\hyxmp@acm@pubtype{journal}%
+ \else
+ \def\hyxmp@acm@pubtype{book}%
+ \fi
+ \hyxmp@use@first@valid{pdfpubtype}{\@pdfpubtype}{%
+ \hyxmp@acm@pubtype
+ }%
+% \end{macrocode}
+% \end{macro}
+% Journal articles have a volume and issue number.
+% \begin{macrocode}
+ \hyxmp@use@first@valid{pdfvolumenum}{\@pdfvolumenum}{%
+ \@acmVolume
+ }%
+ \hyxmp@use@first@valid{pdfissuenum}{\@pdfissuenum}{%
+ \@acmNumber
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Nullify \cs{hyxmp@parse@acmart} if the author is not using the
+% \clsname{acmart} class.
+% \begin{macrocode}
+\@ifclassloaded{acmart}{}{\let\hyxmp@parse@acmart=\relax}
+% \end{macrocode}
+%
+% \begin{macro}{\hyxmp@set@dc@lang}
+% \begin{macro}{\hyxmp@dc@lang}
+% \cs{@pdflang} is used in both the \acro{PDF} document catalog (the
+% \pdfterm{Lang} key, written to the \acro{PDF} file by
+% \pkgname{hyperref}) and in the Dublin Core \xmpterm{dc:language} tag
+% (Section~\ref{sec:dublin-core}). Normally, these are the same.
+% However, \pdfterm{Lang} accepts only a single language while
+% \xmpterm{dc:language} accepts multiple languages. If the document
+% loads \pkgname{polyglossia} and does not specify \optname{pdflang} in
+% \cs{hypersetup}, \cs{hyxmp@set@dc@lang} is redefined below to set
+% \cs{hyxmp@dc@lang} to \pkgname{polyglossia}'s list of used languages
+% (once this is known). Otherwise, \cs{hyxmp@set@dc@lang} assigns the
+% language specified by \optname{pdflang} (if any) to
+% \cs{hyxmp@dc@lang}.
+% \begin{macrocode}
+\newcommand*{\hyxmp@set@dc@lang}{%
+ \let\hyxmp@dc@lang=\@pdflang
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Rather than load \pkgname{hyperref} ourself we let the author do it
+% then verify he actually did. This approach gives the author the
+% flexibility to load \pkgname{hyperxmp} and \pkgname{hyperref} in
+% either order and to call |\hypersetup| anywhere in the document's
+% preamble, not just before \pkgname{hyperxmp} is loaded.
+% \begin{macrocode}
+\AtEndPreamble{%
+ \@ifpackageloaded{hyperref}{%
+% \end{macrocode}
+% In older versions of \pkgname{hyperref}, \cs{@pdflang} is set to
+% \cs{@empty} if \optname{pdflang} is not specified. In newer versions
+% of \pkgname{hyperref}, \cs{@pdflang} is set to \cs{relax} if
+% \optname{pdflang} is not specified. The latter is a bit problematic
+% for \pkgname{hyperxmp} because it makes \cs{@pdflang} non-expandable,
+% which causes a literal ``\cs{@pdflang}'' to be written as \acro{XMP}
+% metadata. To avoid that situation we redefine \cs{@pdflang} as
+% \cs{@empty} if we see it set to \cs{relax}. Actually, we first check
+% if the \pkgname{polyglossia} package has specified the document's main
+% language in \cs{mainbcp47id}. If so, we use that instead of
+% \cs{@empty} and redefine \cs{hyxmp@set@dc@lang} to consider
+% \pkgname{polyglossia}'s list of used languages.
+% \changes{v2.3a}{2013/04/16}{Bug fix: Redefine \cs{@pdflang} as
+% \cs{@empty} when \protect\pkgname{hyperref} has set
+% it to \cs{relax}}
+% \changes{v5.3}{2020/06/08}{Acquire the default language from the
+% \protect\pkgname{polyglossia} package, if loaded. Thanks to
+% Robin Schwab for bringing that package to my attention}
+% \begin{macrocode}
+ \ifx\@pdflang\relax
+ \@ifundefined{mainbcp47id}{%
+ \let\@pdflang=\@empty
+ }{%
+ \xdef\@pdflang{\csname mainbcp47id\endcsname}%
+ \renewcommand*{\hyxmp@set@dc@lang}{%
+ \edef\hyxmp@dc@lang{\xpg@bcp@loaded}%
+ }%
+ }%
+ \fi
+% \end{macrocode}
+% Fill in any missing metadata we can using values provided by the author
+% via mechanisms other than the \cs{hypersetup} command.
+% \begin{macrocode}
+ \hyxmp@auto@assign@data
% \end{macrocode}
% Most \acro{PDF} standards dictate that if the same metadata appear in
% both the \acro{XMP} packet and the \acro{PDF} \pdfterm{Info}
@@ -2550,6 +2938,19 @@
}
% \end{macrocode}
%
+% A number of classes either require or recommend that authors declare
+% various class-specific metadata \emph{after} the |\begin{document}|.
+% So where do we invoke \cs{hyxmp@auto@assign@data}? On one hand, we
+% want to invoke it before the |\begin{document}| because this may
+% obviate \pkgname{hyperxmp}'s ``\meta{job name} did not specify any
+% metadata'' warning message. On the other hand, we want to invoke it
+% after the |\begin{document}| so it picks up metadata not specified in
+% the preamble. Our solution is to invoke \cs{hyxmp@auto@assign@data}
+% twice: both before the |\begin{document}| at at the |\end{document}|.
+% \begin{macrocode}
+\hyxmp@at@end{\hyxmp@auto@assign@data}
+% \end{macrocode}
+%
%
% \subsection{Manipulating author-supplied data}
%
@@ -4436,7 +4837,7 @@ ______</dc:#2>^^J%
% \changes{v4.1}{2019/04/05}{Added this macro}
% \begin{macrocode}
\newcommand{\hyxmp@singleton@dc}[3][Bag]{%
- \@ifnotmtarg{#3}{%
+ \@ifnotmtargexp{#3}{%
\hyxmp@xmlify{#3}%
\hyxmp@add@to@xml{%
______<dc:#2>^^J%
@@ -4498,7 +4899,6 @@ ______</dc:#2>^^J%
\hyxmp@rdf@dc{rights}{\@pdfcopyright}%
\hyxmp@singleton@dc{publisher}{\@pdfpublisher}%
\hyxmp@singleton@dc[Seq]{date}{\hyxmp@today@xmp}%
- \hyxmp@singleton@dc{language}{\@pdflang}%
\hyxmp@singleton@dc{type}{\@pdftype}%
\hyxmp@list@to@xml[\ifHy@pdfa]{creator}{Seq}{\hyxmp@pdfauthor}%
\hyxmp@list@to@xml{subject}{Bag}{\hyxmp@pdfkeywords}%
@@ -4507,6 +4907,17 @@ ______</dc:#2>^^J%
\hyxmp@add@simple{dc:source}{\@pdfsource}%
\fi
% \end{macrocode}
+% Set \cs{hyxmp@dc@lang} to either the single language \cs{@pdflang}
+% (which may be unspecified) or to a list of languages used in the
+% document via \pkgname{polyglossia}. See
+% Section~\ref{sec:hyperref-int} for the definition of
+% \cs{hyxmp@set@dc@lang}.
+% \changes{v5.3}{2020/06/13}{Include all languages used in the document
+% in \protect\xmpterm{dc:language}}
+% \begin{macrocode}
+ \hyxmp@set@dc@lang
+ \hyxmp@list@to@xml{language}{Bag}{\hyxmp@dc@lang}%
+% \end{macrocode}
% If |\@pdfidentifier| is empty, try setting it to each of |\@pdfdoi|,
% |\@pdfeissn|, |\@pdfissn|, and |\@pdfisbn|, in turn, with proper
% syntactic adjustments.
@@ -4777,7 +5188,7 @@ ______</dc:#2>^^J%
%
% \begin{macro}{\hyxmp@list@to@lines}
% Given a property~(|#1|) and a macro containing a comma-separated
-% list~(|#2|), replace commas with |\xmplinesep|. Do nothing it the
+% list~(|#2|), replace commas with |\xmplinesep|. Do nothing if the
% list is empty.
% \changes{v2.2}{2012/12/07}{Added this macro}
% \begin{macrocode}
diff --git a/macros/latex/contrib/hyperxmp/hyperxmp.pdf b/macros/latex/contrib/hyperxmp/hyperxmp.pdf
index 01425c6e03..28b08b0787 100644
--- a/macros/latex/contrib/hyperxmp/hyperxmp.pdf
+++ b/macros/latex/contrib/hyperxmp/hyperxmp.pdf
Binary files differ
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.pdf b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
index c5d481ad72..24432563ff 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
Binary files differ
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.tex b/macros/latex/contrib/nicematrix/nicematrix-french.tex
index d79a0f3727..a8c0fdd435 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.tex
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.tex
@@ -378,8 +378,45 @@ arum & iris & jacinthe & muguet
\end{center}
+\interitem
+On remarquera que les centrage horizontal du contenu des blocs est correct même si un espacement des colonnes a été
+demandé par une instruction comme |!{\qquad}| dans le préambule (ce n'est pas le cas avec |\multicolumn|). Dans
+l'exemple suivant, l'en-tête «Premier groupe» est correctement centré.
+
+\medskip
+\begin{center}
+\begin{BVerbatim}
+\begin{NiceTabular}{C!{\qquad}CCC~emphase#!{\qquad}@CCC}
+\toprule
+& ~emphase#\Block{1-3}{Premier groupe}@ & & & \Block{1-3}{Deuxième groupe} \\
+Rang & 1A & 1B & 1C & 2A & 2B & 2C \\
+\midrule
+ 1 & 0.657 & 0.913 & 0.733 & 0.830 & 0.387 & 0.893\\
+ 2 & 0.343 & 0.537 & 0.655 & 0.690 & 0.471 & 0.333\\
+ 3 & 0.783 & 0.885 & 0.015 & 0.306 & 0.643 & 0.263\\
+ 4 & 0.161 & 0.708 & 0.386 & 0.257 & 0.074 & 0.336\\
+\bottomrule
+\end{NiceTabular}
+\end{BVerbatim}
+\end{center}
\bigskip
+\begin{center}
+\begin{NiceTabular}{C!{\qquad}CCC!{\qquad}CCC}
+\toprule
+& \Block{1-3}{Premier groupe} & & & \Block{1-3}{Deuxième groupe} \\
+Rang & 1A & 1B & 1C & 2A & 2B & 2C \\
+\midrule
+ 1 & 0.657 & 0.913 & 0.733 & 0.830 & 0.387 & 0.893\\
+ 2 & 0.343 & 0.537 & 0.655 & 0.690 & 0.471 & 0.333\\
+ 3 & 0.783 & 0.885 & 0.015 & 0.306 & 0.643 & 0.263\\
+ 4 & 0.161 & 0.708 & 0.386 & 0.257 & 0.074 & 0.336\\
+\bottomrule
+\end{NiceTabular}
+\end{center}
+
+
+\interitem
On peut aussi utiliser la commande |\Block| dans des matrices mathématiques.
\medskip
diff --git a/macros/latex/contrib/nicematrix/nicematrix.dtx b/macros/latex/contrib/nicematrix/nicematrix.dtx
index e957be5dc9..a3e658e757 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.dtx
+++ b/macros/latex/contrib/nicematrix/nicematrix.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2018-2019 by F. Pantigny
+% Copyright (C) 2018-2020 by F. Pantigny
% -----------------------------------
%
% This file may be distributed and/or modified under the
@@ -15,8 +15,8 @@
%
% \fi
% \iffalse
-\def\myfileversion{4.2}
-\def\myfiledate{2020/06/07}
+\def\myfileversion{4.3}
+\def\myfiledate{2020/06/12}
%
%
%<*batchfile>
@@ -434,9 +434,49 @@ version 2005/12/01 or later.
% \end{NiceTabular}
% \end{center}
%
-%
+% \interitem
+% On should remark that the horizontal centering of the contents of the blocks
+% is correct even when an instruction such as |!{\qquad}| has been used in the
+% preamble of the array in order to increase the space between two columns (this
+% is not the case with |\multicolumn|). In the following example, the header
+% ``First group'' is correctly centered.
%
% \medskip
+% \begin{center}
+% \begin{BVerbatim}
+% \begin{NiceTabular}{C!{\qquad}CCC~emphase#!{\qquad}@CCC}
+% \toprule
+% & ~emphase#\Block{1-3}{First group}@ & & & \Block{1-3}{Second group} \\
+% Rank & 1A & 1B & 1C & 2A & 2B & 2C \\
+% \midrule
+% 1 & 0.657 & 0.913 & 0.733 & 0.830 & 0.387 & 0.893\\
+% 2 & 0.343 & 0.537 & 0.655 & 0.690 & 0.471 & 0.333\\
+% 3 & 0.783 & 0.885 & 0.015 & 0.306 & 0.643 & 0.263\\
+% 4 & 0.161 & 0.708 & 0.386 & 0.257 & 0.074 & 0.336\\
+% \bottomrule
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \end{center}
+%
+% \bigskip
+% \begin{center}
+% \begin{NiceTabular}{C!{\qquad}CCC!{\qquad}CCC}
+% \toprule
+% & \Block{1-3}{First group} & & & \Block{1-3}{Second group} \\
+% Rank & 1A & 1B & 1C & 2A & 2B & 2C \\
+% \midrule
+% 1 & 0.657 & 0.913 & 0.733 & 0.830 & 0.387 & 0.893\\
+% 2 & 0.343 & 0.537 & 0.655 & 0.690 & 0.471 & 0.333\\
+% 3 & 0.783 & 0.885 & 0.015 & 0.306 & 0.643 & 0.263\\
+% 4 & 0.161 & 0.708 & 0.386 & 0.257 & 0.074 & 0.336\\
+% \bottomrule
+% \end{NiceTabular}
+% \end{center}
+%
+%
+%
+%
+% \interitem
% It's also possible to use the command |\Block| in mathematical matrices.
%
% \medskip
@@ -3659,7 +3699,7 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% The following commands are only for efficiency. It must \emph{not} be protected
+% The following commands are only for efficiency. They must \emph{not} be protected
% because it will be used (for instance) in names of \textsc{pgf} nodes.
% \begin{macrocode}
\cs_new:Npn \@@_succ:n #1 { \the \numexpr #1 + 1 \relax }
@@ -4049,9 +4089,8 @@ version 2005/12/01 or later.
% \begin{macrocode}
\seq_new:N \g_@@_pos_of_blocks_seq
% \end{macrocode}
-% The sequence |\g_@@_pos_of_blocks_seq| will be used by the test of
-% non-overlapping of two blocks and when we will draw the rules required by the
-% key |hvlines| (these rules won't be drawn within the blocks).
+% The sequence |\g_@@_pos_of_blocks_seq| when we will draw the rules required by
+% the key |hvlines| (these rules won't be drawn within the blocks).
%
% \bigskip
% We will also manage a sequence for the positions of the dotted lines. These
@@ -7884,9 +7923,9 @@ version 2005/12/01 or later.
% \begin{macrocode}
\cs_new_protected:Npn \@@_draw_non_standard_dotted_line:
{
- \begin { scope }
- \exp_args:No \@@_draw_non_standard_dotted_line:n
- { \l_@@_xdots_line_style_tl , \l_@@_xdots_color_tl }
+ \begin { scope }
+ \exp_args:No \@@_draw_non_standard_dotted_line:n
+ { \l_@@_xdots_line_style_tl , \l_@@_xdots_color_tl }
}
% \end{macrocode}
% We have used the fact that, in \textsc{pgf}, un color name can be put directly
@@ -9211,7 +9250,7 @@ version 2005/12/01 or later.
{
\int_compare:nNnT \l_tmpb_tl > { #2 - 1 }
{
- \int_compare:nNnT \l_tmpb_tl < { #4 + 1 }
+ \int_compare:nNnT \l_tmpb_tl < { #4 + 1 }
{ \bool_gset_false:N \g_tmpa_bool }
}
}
@@ -9871,10 +9910,10 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% \subsection*{Block matrices}
+% \subsection*{The blocks}
%
-% The code in this section if for the construction of \emph{block matrices}. It
-% has no direct link with the environment |{NiceMatrixBlock}|.
+% The code deals with the command |\Block|. This command has no direct link with
+% the environment |{NiceMatrixBlock}|.
%
%
% The following command will be linked to |\Block| in the environments of
@@ -9882,8 +9921,10 @@ version 2005/12/01 or later.
% because it has an optional argument between |<| and |>| (for TeX instructions
% put before the math mode of the label)
%
+% It's mandatory to use a expandable command (probably because of the first
+% optional argument ?).
% \begin{macrocode}
-\NewDocumentCommand \@@_Block: { O { } m D < > { } m }
+\NewExpandableDocumentCommand \@@_Block: { O { } m D < > { } m }
{ \@@_Block_i #2 \q_stop { #1 } { #3 } { #4 } }
% \end{macrocode}
%
@@ -9909,10 +9950,10 @@ version 2005/12/01 or later.
% \begin{macrocode}
\tl_set:Nx \l_tmpa_tl
{
- { \int_use:N \c@iRow }
- { \int_use:N \c@jCol }
- { \int_eval:n { \c@iRow + #1 - 1 } }
- { \int_eval:n { \c@jCol + #2 - 1 } }
+ { \int_use:N \c@iRow }
+ { \int_use:N \c@jCol }
+ { \int_eval:n { \c@iRow + #1 - 1 } }
+ { \int_eval:n { \c@jCol + #2 - 1 } }
}
% \end{macrocode}
% Now, |\l_tmpa_tl| constains a ``object'' corresponding to the position of the
@@ -9944,7 +9985,9 @@ version 2005/12/01 or later.
%
% \bigskip
% The key |tikz| is for Tikz options used when the \textsc{pgf} node of the
-% block is created.
+% block is created (the ``normal'' block node and not the ``short'' one nor the
+% ``medium'' one). \textbf{In fact, as for now, it is \emph{not} documented}. Is
+% it really a good idea to provide such a key?
% \begin{macrocode}
\keys_define:nn { NiceMatrix / Block }
{
@@ -9965,7 +10008,8 @@ version 2005/12/01 or later.
\cs_new_protected:Npn \@@_Block_iii:nnnnnn #1 #2 #3 #4 #5 #6
{
% \end{macrocode}
-% The group is for the keys.
+% The group is for the keys (even if, as for new, there is only one key, called
+% |tikz| and not documented).
% \begin{macrocode}
\group_begin:
\keys_set:nn { NiceMatrix / Block } { #5 }
@@ -9973,7 +10017,7 @@ version 2005/12/01 or later.
%
% \begin{macrocode}
\bool_lazy_or:nnTF
- { \int_compare_p:nNn { #3 } > \c@iRow }
+ { \int_compare_p:nNn { #3 } > \g_@@_row_total_int }
{ \int_compare_p:nNn { #4 } > \c@jCol }
{ \msg_error:nnnn { nicematrix } { Block~too~large } { #1 } { #2 } }
{
@@ -9984,7 +10028,54 @@ version 2005/12/01 or later.
\hbox_set:Nn \l_@@_cell_box { #6 }
% \end{macrocode}
%
-% \medskip
+% \bigskip
+% Let's consider the following |{NiceTabular}|. Because of the instruction
+% |!{\hspace{1cm}}| in the preamble which increases the space between the
+% columns (by adding, in fact, that space to the previous column, that is to say
+% the second column of the tabular), we will create \emph{two} nodes relative to
+% the block: the node |1-1-block| and the node |1-1-block-short|. The latter
+% will be used by \pkg{nicematrix} to put the label of the node. The first one
+% won't be used explicitely.
+% \begin{Verbatim}
+% \begin{NiceTabular}{CC!{\hspace{1cm}}C}
+% \Block{2-2}{our block} & & one \\
+% & & two \\
+% three & four & five \\
+% six & seven & eight \\
+% \end{NiceTabular}
+% \end{Verbatim}
+%
+% \tikzset{highlight/.style={rectangle,
+% fill=red!15,
+% blend mode = multiply,
+% rounded corners = 0pt,
+% inner sep=0pt,
+% fit = #1}}
+%
+% \begin{tabular}{c!{\hspace{1cm}}c}
+% We highlight the node |1-1-block|
+% & We highlight the node |1-1-block-short| \\[2mm]
+% \begin{NiceTabular}{CC!{\hspace{1cm}}C}
+% \Block{2-2}{our block} & & one \\
+% & & two \\
+% three & four & five \\
+% six & seven & eight \\
+% \CodeAfter
+% \tikz \node [highlight = (1-1-block)] { } ;
+% \end{NiceTabular}
+% &
+% \begin{NiceTabular}{CC!{\hspace{1cm}}C}
+% \Block{2-2}{our block} & & one \\
+% & & two \\
+% three & four & five \\
+% six & seven & eight \\
+% \CodeAfter
+% \tikz \node [highlight = (1-1-block-short)] { } ;
+% \end{NiceTabular}
+% \end{tabular}
+%
+%
+% \bigskip
% The construction of the node corresponding to the merged cells.
% \begin{macrocode}
\pgfpicture
@@ -10012,7 +10103,55 @@ version 2005/12/01 or later.
\l_tmpb_dim \l_tmpa_dim \l_tmpd_dim \l_tmpc_dim
\end { pgfscope }
% \end{macrocode}
+%
+%
%
+% \medskip
+% We construct the |short| node.
+% \begin{macrocode}
+ \dim_set_eq:NN \l_tmpb_dim \c_max_dim
+ \int_step_inline:nnn \l_@@_first_row_int \g_@@_row_total_int
+ {
+% \end{macrocode}
+% We recall that, when a cell is empty, no (normal) node is created in that
+% cell. That's why we test the existence of the node before using it.
+% \begin{macrocode}
+ \cs_if_exist:cT
+ { pgf @ sh @ ns @ \@@_env: - ##1 - #2 }
+ {
+ \pgfpointanchor { \@@_env: - ##1 - #2 } { west }
+ \dim_set:Nn \l_tmpb_dim { \dim_min:nn \l_tmpb_dim \pgf@x }
+ }
+ }
+% \end{macrocode}
+% If all the cells of the column were empty, |\l_tmpb_dim| has still the same
+% value |\c_max_dim|. In that case, you use for |\l_tmpb_dim| the value of the
+% position of the vertical rule.
+% \begin{macrocode}
+ \dim_compare:nNnT \l_tmpb_dim = \c_max_dim
+ {
+ \@@_qpoint:n { col - #2 }
+ \dim_set_eq:NN \l_tmpb_dim \pgf@x
+ }
+ \dim_set:Nn \l_tmpd_dim { - \c_max_dim }
+ \int_step_inline:nnn \l_@@_first_row_int \g_@@_row_total_int
+ {
+ \cs_if_exist:cT
+ { pgf @ sh @ ns @ \@@_env: - ##1 - #4 }
+ {
+ \pgfpointanchor { \@@_env: - ##1 - #4 } { east }
+ \dim_set:Nn \l_tmpd_dim { \dim_max:nn \l_tmpd_dim \pgf@x }
+ }
+ }
+ \dim_compare:nNnT \l_tmpd_dim = { - \c_max_dim }
+ {
+ \@@_qpoint:n { col - \@@_succ:n { #4 } }
+ \dim_set_eq:NN \l_tmpd_dim \pgf@x
+ }
+ \@@_pgf_rect_node:nnnnn
+ { \@@_env: - #1 - #2 - block - short }
+ \l_tmpb_dim \l_tmpa_dim \l_tmpd_dim \l_tmpc_dim
+% \end{macrocode}
%
% \medskip
% If the creation of the ``medium nodes'' is required, we create a ``medium
@@ -10033,6 +10172,16 @@ version 2005/12/01 or later.
\int_compare:nNnTF { #1 } = { #3 }
{
% \end{macrocode}
+% We take into account the case of a block of one row in the ``first row'' or
+% the ``end row''.
+% \begin{macrocode}
+ \int_compare:nNnTF { #1 } = 0
+ { \l_@@_code_for_first_row_tl }
+ {
+ \int_compare:nNnT { #1 } = \l_@@_last_row_int
+ \l_@@_code_for_last_row_tl
+ }
+% \end{macrocode}
% If the block has only one row, we want the label of the block perfectly
% aligned on the baseline of the row. That's why we have constructed a
% |\pgfcoordinate| on the baseline of the row, in the first column of the array.
@@ -10042,7 +10191,7 @@ version 2005/12/01 or later.
% \end{macrocode}
% We retrieve (in |\pgf@x|) the $x$-value of the center of the block.
% \begin{macrocode}
- \@@_qpoint:n { #1 - #2 - block }
+ \@@_qpoint:n { #1 - #2 - block - short }
% \end{macrocode}
% We put the label of the block which has been composed in |\l_@@_cell_box|.
% \begin{macrocode}
@@ -10054,11 +10203,11 @@ version 2005/12/01 or later.
%
% \medskip
% If the number of rows is different of $1$, we put the label of the block in
-% the center of the node (the label of the block has been composed in
+% the center of the (short) node (the label of the block has been composed in
% |\l_@@_cell_box|).
% \begin{macrocode}
{
- \pgftransformshift { \@@_qpoint:n { #1 - #2 - block } }
+ \pgftransformshift { \@@_qpoint:n { #1 - #2 - block - short } }
\pgfnode { rectangle } { center }
{ \box_use_drop:N \l_@@_cell_box } { } { }
}
@@ -10172,6 +10321,7 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+% \bigskip
% \subsection*{The redefinition of the command \textbackslash dotfill }
%
% \begin{macrocode}
@@ -10199,6 +10349,7 @@ version 2005/12/01 or later.
{ \dim_compare:nNnT { \box_wd:N \l_@@_cell_box } = \c_zero_dim \@@_dotfill }
% \end{macrocode}
%
+% \bigskip
% \subsection*{The command \textbackslash diagbox}
%
%
@@ -10256,7 +10407,8 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
-% \subsection*{The command \textbackslash CodeAfter}
+% \bigskip
+% \subsection*{The keyword \textbackslash CodeAfter}
%
% In fact, in this subsection, we define the user command |\CodeAfter| for the
% case of the ``normal syntax''. For the case of ``light-syntax'', see the
@@ -10286,7 +10438,7 @@ version 2005/12/01 or later.
\str_if_eq:eeTF \@currenvir { #1 }
{ \end { #1 } }
% \end{macrocode}
-% It this is not the |\end| we are looking for, we put those tokens in
+% If this is not the |\end| we are looking for, we put those tokens in
% |\g_@@_code_after_tl| and we go on searching for the next command |\end| with
% a recursive call to the command |\@@_CodeAfter:n|.
% \begin{macrocode}
@@ -10302,7 +10454,6 @@ version 2005/12/01 or later.
% \bigskip
% \subsection*{We process the options at package loading}
%
-%
%
% We process the options when the package is loaded (with |\usepackage|) but we
% recommend to use |\NiceMatrixOptions| instead.
@@ -11151,6 +11302,14 @@ version 2005/12/01 or later.
% It's now possible to write |\begin{pNiceMatrix}a&b\\c&d\end{pNiceMatrix}^2|
% with the expected result.
%
+% \subsection*{Changes between versions 4.2 and 4.3}
+%
+% The horizontal centering of the content of a |\Block| is correct even when an
+% instruction such as |!{\qquad}| is used in the preamble of the array.
+%
+% It's now possible to use the command |\Block| in the ``last row''.
+%
+%
% \PrintIndex
%
% \tableofcontents
diff --git a/macros/latex/contrib/nicematrix/nicematrix.pdf b/macros/latex/contrib/nicematrix/nicematrix.pdf
index 184e8e4a59..31fb149271 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfpc/pdfpc.pdf b/macros/latex/contrib/pdfpc/pdfpc-doc.pdf
index 275a168ac1..9929c83f28 100644
--- a/macros/latex/contrib/pdfpc/pdfpc.pdf
+++ b/macros/latex/contrib/pdfpc/pdfpc-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfpc/pdfpc-doc.tex b/macros/latex/contrib/pdfpc/pdfpc-doc.tex
new file mode 100644
index 0000000000..3130ff0e80
--- /dev/null
+++ b/macros/latex/contrib/pdfpc/pdfpc-doc.tex
@@ -0,0 +1,140 @@
+% This file is part of pdfpc.
+% Copyright (C) 2020 Evgeny Stambulchik
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+% -------------------------------------------------------------------------------------------
+%
+% Allow for defining some meta data and simple textual notes for use
+% with the pdfpc presentation application <https://pdfpc.github.io>.
+%
+% -------------------------------------------------------------------------------------------
+%
+% Inspired by Carsten Brandt's <https://github.com/cebe/pdfpc-latex-notes>.
+%
+% -------------------------------------------------------------------------------------------
+%
+% Please report bugs and other problems as well as suggestions for improvements
+% to the issue tracker at github <https://github.com/pdfpc/pdfpc/>
+%
+% -------------------------------------------------------------------------------------------
+\documentclass[11pt]{ltxdoc}
+
+\usepackage{iftex}
+
+\usepackage[english]{babel}
+
+\usepackage{hyperref}
+
+\newcommand*{\sty}[1]{\textsf{#1}}
+\def\param#1{\textit{\rmfamily\mdseries\ensuremath{\langle}#1\ensuremath{\rangle}}}
+
+
+\title{The \sty{pdfpc} package \\ {\large\url{https://github.com/pdfpc/pdfpc}}}
+\author{Evgeny Stambulchik}
+\date{2020/06/10 (v0.4.0)}
+
+\hypersetup{pdftitle={The pdfpc package}, pdfauthor={Evgeny Stambulchik}}
+
+\begin{document}
+\maketitle
+\thispagestyle{empty}
+
+\begin{abstract}
+This package provides a convenient way to specify notes and to define certain
+meta properties of the presentation when used with
+\href{https://pdfpc.github.io/}{PDF Presenter Console (\texttt{pdfpc}), a
+GPLv2+ licensed multi-monitor PDF presentation viewer application available on
+GitHub}\footnote{\url{https://pdfpc.github.io/}}.
+\end{abstract}
+
+\clearpage
+\section*{Dependencies and other requirements}
+
+\sty{pdfpc} requires the use of \LaTeXe.
+
+It depends on the following packages:
+
+\begin{multicols}{4}\sffamily\centering
+kvoptions \\ xstring \\ pdfcomment \\ hyperxmp
+\end{multicols}
+
+\section*{License}
+
+\textcopyright\ 2020 Evgeny Stambulchik
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
+
+This work consists of the following files:
+
+\begin{itemize}
+ \item "pdfpc.sty",
+ \item "pdfpc-doc.tex"
+ \item "pdfpc-doc.pdf" \emph{(compiled)}
+\end{itemize}
+
+\clearpage
+
+\part{The documentation}
+\section*{Loading \sty{pdfpc}}
+
+Load \sty{pdfpc} by adding \cmd{\usepackage\{pdfpc\}} to your preamble.
+
+The following \param{options} may be given as comma-separated list:
+
+\begin{itemize}
+\item \texttt{duration}
+\item \texttt{starttime}
+\item \texttt{endtime}
+\item \texttt{enduserslide}
+\item \texttt{lastminutes}
+\item \texttt{hidenotes}
+\item \texttt{overridenote}
+\item \texttt{defaulttransition} (needs pdfpc v4.5 or higher)
+\end{itemize}
+
+The meaning and possible values of most of these options are documented in
+\textit{pdfpcrc(5)} man page of the pdfpc program. The rest are explained below.
+
+To add a note to a slide (must not be longer than one paragraph):
+
+{\leftskip2.5em%
+\cmd{\pdfpcnote\{Text of a note\}}
+}\par
+
+The pdfpc package can be used standalone or together with beamer. In
+the later case, it may be desirable to continue using the \cmd{\note}
+command. To this end, the \texttt{overridenote} option should be provided.
+Please note though, that this will work only in simple cases.
+
+If you prefer using full-featured beamer notes rendered alongside the
+presentation (\cmd{\setbeameroption\{show notes on second screen\}}), the pdfpc
+package will autodetect it, so using the \texttt{--notes} command-line option is
+unnecessary. To override the autodetection, use the \texttt{notesposition}
+option, accepting the same values (right/left/top/bottom/none).
+
+When sharing slides, one may want to omit the (private) notes, by using the
+\texttt{hidenotes} option. Enabling it together with \texttt{overridenote} will
+disable the beamer notes as well.
+
+\StopEventually{%
+ \clearpage
+ \PrintChanges}
+\clearpage
+
+\Finale
+\end{document}
diff --git a/macros/latex/contrib/pdfpc/pdfpc.ins b/macros/latex/contrib/pdfpc/pdfpc.ins
deleted file mode 100644
index 905306c93e..0000000000
--- a/macros/latex/contrib/pdfpc/pdfpc.ins
+++ /dev/null
@@ -1,38 +0,0 @@
-\input docstrip
-
-\preamble
- pdfpc.dtx
- Copyright (C) 2020 Evgeny Stambulchik
-
- This file is part of pdfpc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
- This work consists of the files pdfpc.dtx, pdfpc.ins, and the derived file
- pdfpc.sty
-
-\endpreamble
-
-\askforoverwritefalse
-
-\generate
-{%
- \file{pdfpc.sty}{%
- \usepreamble\defaultpreamble
- \usepostamble\defaultpostamble
- \from{pdfpc.dtx}{pdfpc.sty,package}%
- }%
-}
-\endbatchfile
diff --git a/macros/latex/contrib/pdfpc/pdfpc.dtx b/macros/latex/contrib/pdfpc/pdfpc.sty
index ad5430f324..8a7c357063 100644
--- a/macros/latex/contrib/pdfpc/pdfpc.dtx
+++ b/macros/latex/contrib/pdfpc/pdfpc.sty
@@ -1,25 +1,3 @@
-%\iffalse
-%<*package>
-%% \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 \~}
-%</package>
-%\fi
-%\iffalse
-% Doc-Source file to use with LaTeX2e
-%
% This file is part of pdfpc.
% Copyright (C) 2020 Evgeny Stambulchik
%
@@ -51,21 +29,15 @@
% to the issue tracker at github <https://github.com/pdfpc/pdfpc/>
%
% -------------------------------------------------------------------------------------------
-%\fi
%
-% Identify the package and force \LaTeXe:
-% \begin{macrocode}
-\ProvidesPackage{pdfpc}[2019/12/03 v0.2.1 PDFPC]
+\ProvidesPackage{pdfpc}[2020/06/10 v0.4.0 PDFPC]
\NeedsTeXFormat{LaTeX2e}
-% \end{macrocode}
%
% Require additional packages needed by \sty{pdfpc}:
-% \begin{macrocode}
\RequirePackage{kvoptions}
\RequirePackage{xstring}
\RequirePackage{pdfcomment}
\RequirePackage{hyperxmp}
-% \end{macrocode}
%
\SetupKeyvalOptions{
family=PDFPC,
@@ -77,8 +49,10 @@
\DeclareStringOption{endtime}
\DeclareStringOption{enduserslide}
\DeclareStringOption{lastminutes}
+\DeclareBoolOption{hidenotes}
\DeclareBoolOption{overridenote}
\DeclareStringOption{notesposition}
+\DeclareStringOption{defaulttransition}
\DeclareDefaultOption{\@unknownoptionerror}
%
\ProcessKeyvalOptions*
@@ -116,7 +90,6 @@
\fi%
%
% Guesswork for beamer/pgfpages notes
-% \begin{macrocode}
\ifx\PDFPC@notesposition\pdfpc@notespositionauto%
\def\PDFPC@notesposition{none}%
\def\pdfpc@onepaperheight{\paperheight}%
@@ -144,10 +117,8 @@
\fi%
\fi%
\fi%
-% \end{macrocode}
%
% Our schema
-% \begin{macrocode}
\newcommand*{\pdfpc@schema}{%
\hyxmp@add@to@xml{%
______<rdf:Description xmlns:pdfpc="https://github.com/pdfpc/pdfpc">^^J%
@@ -158,20 +129,21 @@ ______<rdf:Description xmlns:pdfpc="https://github.com/pdfpc/pdfpc">^^J%
\hyxmp@add@simple{pdfpc:EndUserSlide}{\PDFPC@enduserslide}%
\hyxmp@add@simple{pdfpc:LastMinutes}{\PDFPC@lastminutes}%
\hyxmp@add@simple{pdfpc:NotesPosition}{\PDFPC@notesposition}%
+ \hyxmp@add@simple{pdfpc:DefaultTransition}{\PDFPC@defaulttransition}%
\hyxmp@add@to@xml{%
______</rdf:Description>^^J%
}%
}
%
% Piggybacking on the hyperxmp schema...
-% \begin{macrocode}
\let\oldhyxmp@pdf@schema\hyxmp@pdf@schema
\renewcommand{\hyxmp@pdf@schema}{{\oldhyxmp@pdf@schema}{\pdfpc@schema}}
-% \end{macrocode}
-
+%
% Note command
-% \begin{macrocode}
-\newcommand{\pdfpcnote}[1]{\pdfmargincomment{#1}}
-% \end{macrocode}
+\ifPDFPC@hidenotes%
+ \newcommand{\pdfpcnote}[1]{}
+\else%
+ \newcommand{\pdfpcnote}[1]{\pdfmargincomment{#1}}
+\fi%
%
\endinput
diff --git a/support/latexdiff/doc/latexdiff-man.pdf b/support/latexdiff/doc/latexdiff-man.pdf
index d5a97b67cd..ebf545df91 100644
--- a/support/latexdiff/doc/latexdiff-man.pdf
+++ b/support/latexdiff/doc/latexdiff-man.pdf
Binary files differ
diff --git a/support/latexdiff/latexdiff b/support/latexdiff/latexdiff
index b8fde01b78..9c2f45e957 100755
--- a/support/latexdiff/latexdiff
+++ b/support/latexdiff/latexdiff
@@ -3,7 +3,7 @@
# latexdiff - differences two latex files on the word level
# and produces a latex file with the differences marked up.
#
-# Copyright (C) 2004-16 F J Tilmann (tilmann@gfz-potsdam.de)
+# Copyright (C) 2004-20 F J Tilmann (tilmann@gfz-potsdam.de)
#
# Repository/issue tracker: https://github.com/ftilmann/latexdiff
# CTAN page: http://www.ctan.org/pkg/latexdiff
@@ -23,7 +23,9 @@
# Detailed usage information at the end of the file
#
-
+# Version 1.3.1.1
+# - remove spurious \n to fix error: Unknown regexp modifier "/n" at .../latexdiff line 1974, near "=~ " (see github issue #201)
+#
# Version 1.3.1
# Bug fixes:
# - remove some uninitialised variable $2 warnings in string substitution in flatten function in case included file is not found
@@ -201,8 +203,8 @@ my ($algodiffversion)=split(/ /,$Algorithm::Diff::VERSION);
my ($versionstring)=<<EOF ;
-This is LATEXDIFF 1.3.1a (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V)
- (c) 2004-2018 F J Tilmann
+This is LATEXDIFF 1.3.1.1 (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V)
+ (c) 2004-2020 F J Tilmann
EOF
# Hash with defaults for configuration variables. These marked undef have default values constructed from list defined in the DATA block
@@ -1514,7 +1516,7 @@ sub flatten {
} else {
# if file does not exist, do not expand include or input command (do not warn if fname contains #[0-9] as it is then likely part of a command definition
# and is not meant to be expanded directly
- print STDERR "WARNING: Could not find included file ",$fullfile,". I will continue but not expand |$inputcmd|\n" unless $fname =~ m(#[0-9])n ;
+ print STDERR "WARNING: Could not find included file ",$fullfile,". I will continue but not expand |$inputcmd|\n" unless $fname =~ m(#[0-9]) ;
$replacement = $inputcmd ; # i.e. just the original command again -> make no change file does not exist
$newpage="";
}
diff --git a/support/latexdiff/latexdiff-fast b/support/latexdiff/latexdiff-fast
index a6a7d9164d..ec3f618dab 100755
--- a/support/latexdiff/latexdiff-fast
+++ b/support/latexdiff/latexdiff-fast
@@ -3,7 +3,7 @@
# latexdiff - differences two latex files on the word level
# and produces a latex file with the differences marked up.
#
-# Copyright (C) 2004-16 F J Tilmann (tilmann@gfz-potsdam.de)
+# Copyright (C) 2004-20 F J Tilmann (tilmann@gfz-potsdam.de)
#
# Repository/issue tracker: https://github.com/ftilmann/latexdiff
# CTAN page: http://www.ctan.org/pkg/latexdiff
@@ -23,7 +23,9 @@
# Detailed usage information at the end of the file
#
-
+# Version 1.3.1.1
+# - remove spurious \n to fix error: Unknown regexp modifier "/n" at .../latexdiff line 1974, near "=~ " (see github issue #201)
+#
# Version 1.3.1
# Bug fixes:
# - remove some uninitialised variable $2 warnings in string substitution in flatten function in case included file is not found
@@ -762,8 +764,8 @@ my ($algodiffversion)=split(/ /,$Algorithm::Diff::VERSION);
my ($versionstring)=<<EOF ;
-This is LATEXDIFF 1.3.1a (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V)
- (c) 2004-2018 F J Tilmann
+This is LATEXDIFF 1.3.1.1 (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V)
+ (c) 2004-2020 F J Tilmann
EOF
# Hash with defaults for configuration variables. These marked undef have default values constructed from list defined in the DATA block
@@ -2075,7 +2077,7 @@ sub flatten {
} else {
# if file does not exist, do not expand include or input command (do not warn if fname contains #[0-9] as it is then likely part of a command definition
# and is not meant to be expanded directly
- print STDERR "WARNING: Could not find included file ",$fullfile,". I will continue but not expand |$inputcmd|\n" unless $fname =~ m(#[0-9])n ;
+ print STDERR "WARNING: Could not find included file ",$fullfile,". I will continue but not expand |$inputcmd|\n" unless $fname =~ m(#[0-9]) ;
$replacement = $inputcmd ; # i.e. just the original command again -> make no change file does not exist
$newpage="";
}
diff --git a/support/latexdiff/latexdiff-so b/support/latexdiff/latexdiff-so
index 81387135c5..45e5188bcc 100755
--- a/support/latexdiff/latexdiff-so
+++ b/support/latexdiff/latexdiff-so
@@ -3,7 +3,7 @@
# latexdiff - differences two latex files on the word level
# and produces a latex file with the differences marked up.
#
-# Copyright (C) 2004-16 F J Tilmann (tilmann@gfz-potsdam.de)
+# Copyright (C) 2004-20 F J Tilmann (tilmann@gfz-potsdam.de)
#
# Repository/issue tracker: https://github.com/ftilmann/latexdiff
# CTAN page: http://www.ctan.org/pkg/latexdiff
@@ -23,7 +23,9 @@
# Detailed usage information at the end of the file
#
-
+# Version 1.3.1.1
+# - remove spurious \n to fix error: Unknown regexp modifier "/n" at .../latexdiff line 1974, near "=~ " (see github issue #201)
+#
# Version 1.3.1
# Bug fixes:
# - remove some uninitialised variable $2 warnings in string substitution in flatten function in case included file is not found
@@ -658,8 +660,8 @@ my ($algodiffversion)=split(/ /,$Algorithm::Diff::VERSION);
my ($versionstring)=<<EOF ;
-This is LATEXDIFF 1.3.1a (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V)
- (c) 2004-2018 F J Tilmann
+This is LATEXDIFF 1.3.1.1 (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V)
+ (c) 2004-2020 F J Tilmann
EOF
# Hash with defaults for configuration variables. These marked undef have default values constructed from list defined in the DATA block
@@ -1971,7 +1973,7 @@ sub flatten {
} else {
# if file does not exist, do not expand include or input command (do not warn if fname contains #[0-9] as it is then likely part of a command definition
# and is not meant to be expanded directly
- print STDERR "WARNING: Could not find included file ",$fullfile,". I will continue but not expand |$inputcmd|\n" unless $fname =~ m(#[0-9])n ;
+ print STDERR "WARNING: Could not find included file ",$fullfile,". I will continue but not expand |$inputcmd|\n" unless $fname =~ m(#[0-9]) ;
$replacement = $inputcmd ; # i.e. just the original command again -> make no change file does not exist
$newpage="";
}
diff --git a/support/latexdiff/latexdiff-vc b/support/latexdiff/latexdiff-vc
index 9843238c45..b50a52722f 100755
--- a/support/latexdiff/latexdiff-vc
+++ b/support/latexdiff/latexdiff-vc
@@ -3,7 +3,7 @@
# latexdiff-vc - wrapper script for applying latexdiff to rcs managed files
# and for automatised creation of postscript or pdf from difference file
#
-# Copyright (C) 2005-16 F J Tilmann (tilmann@gfz-potsdam.de)
+# Copyright (C) 2005-20 F J Tilmann (tilmann@gfz-potsdam.de)
#
# Repository: https://github.com/ftilmann/latexdiff
# CTAN page: http://www.ctan.org/pkg/latexdiff
@@ -71,7 +71,7 @@ use strict ;
use warnings ;
my $versionstring=<<EOF ;
-This is LATEXDIFF-VC 1.3.1
+This is LATEXDIFF-VC 1.3.1.1
(c) 2005-2020 F J Tilmann
EOF
@@ -315,11 +315,11 @@ if ( scalar(@revs)>0 ) {
# make file list (last arguments), initial arguments have to be passed to latexdiff
# We assume an argument is a valid file rather than a latexdiff argument
-# if it has extension .tex, .bbl or .flt (output of flatex)
+# if it has extension .tex, .bbl or .flt (output of flatex), and does not start with a - or --
@files=($file2);
while( $file1=pop @ARGV ) {
- if ( $file1 =~ /\.(tex|bbl|flt)$/ ) {
+ if ( $file1 =~ /\.(tex|bbl|flt)$/ && $file1 !~ /^-/) {
# $file1 looks like a valid file name and is prepended to file list
unshift @files, $file1 ;
} else {
diff --git a/support/latexdiff/latexdiff-vc.1 b/support/latexdiff/latexdiff-vc.1
index c8340e7104..7a031cf151 100644
--- a/support/latexdiff/latexdiff-vc.1
+++ b/support/latexdiff/latexdiff-vc.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "LATEXDIFF-VC 1"
-.TH LATEXDIFF-VC 1 "2020-05-27" "perl v5.22.1" " "
+.TH LATEXDIFF-VC 1 "2020-06-13" "perl v5.22.1" " "
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/support/latexdiff/latexdiff.1 b/support/latexdiff/latexdiff.1
index f624ca652d..1de1d3fd85 100644
--- a/support/latexdiff/latexdiff.1
+++ b/support/latexdiff/latexdiff.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "LATEXDIFF 1"
-.TH LATEXDIFF 1 "2020-05-26" "perl v5.22.1" " "
+.TH LATEXDIFF 1 "2020-06-13" "perl v5.22.1" " "
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/support/latexdiff/latexrevise b/support/latexdiff/latexrevise
index f7f88f1b95..2d809fb156 100755
--- a/support/latexdiff/latexrevise
+++ b/support/latexdiff/latexrevise
@@ -32,7 +32,7 @@ use strict;
use warnings;
my $versionstring=<<EOF ;
-This is LATEXREVISE 1.3.1
+This is LATEXREVISE 1.3.1.1
(c) 2005-2020 F J Tilmann
EOF
diff --git a/support/latexdiff/latexrevise.1 b/support/latexdiff/latexrevise.1
index 234addcce2..5c5558a805 100644
--- a/support/latexdiff/latexrevise.1
+++ b/support/latexdiff/latexrevise.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "LATEXREVISE 1"
-.TH LATEXREVISE 1 "2020-05-27" "perl v5.22.1" " "
+.TH LATEXREVISE 1 "2020-06-13" "perl v5.22.1" " "
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/systems/texlive/tlnet/install-tl b/systems/texlive/tlnet/install-tl
index 40549712ca..7d3f5c2bfd 100755
--- a/systems/texlive/tlnet/install-tl
+++ b/systems/texlive/tlnet/install-tl
@@ -1,5 +1,5 @@
#!/usr/bin/env perl
-# $Id: install-tl 55357 2020-05-31 20:09:55Z siepo $
+# $Id: install-tl 55535 2020-06-13 20:03:38Z siepo $
# Copyright 2007-2020
# Reinhard Kotucha, Norbert Preining, Karl Berry, Siep Kroonenberg.
# This file is licensed under the GNU General Public License version 2
@@ -8,7 +8,7 @@
# Be careful when changing wording: *every* normal informational message
# output here must be recognized by the long grep in tl-update-tlnet.
-my $svnrev = '$Revision: 55357 $';
+my $svnrev = '$Revision: 55535 $';
$svnrev =~ m/: ([0-9]+) /;
$::installerrevision = ($1 ? $1 : 'unknown');
@@ -1331,13 +1331,14 @@ sub do_texmf_cnf {
my $yyyy = $TeXLive::TLConfig::ReleaseYear;
# we have to find TEXMFLOCAL TEXMFSYSVAR and TEXMFHOME
+ # at this point, a final slash of $vars{TEXDIR} itself has already
+ # been removed.
foreach my $line (@texmfcnflines) {
if ($line =~ m/^TEXMFLOCAL\b/) { # don't find TEXMFLOCALEDIR
# by default TEXMFLOCAL = TEXDIR/../texmf-local, if this is the case
# we don't have to write a new setting.
- my $deftmlocal = dirname($vars{'TEXDIR'});
- $deftmlocal .= "/texmf-local";
- if ("$vars{'TEXMFLOCAL'}" ne "$deftmlocal") {
+ my $deftmflocal = Cwd::abs_path($vars{'TEXDIR'}.'/../texmf-local');
+ if (Cwd::abs_path($vars{TEXMFLOCAL}) ne "$deftmflocal") {
push @changedtmf, "TEXMFLOCAL = $vars{'TEXMFLOCAL'}\n";
}
} elsif ($line =~ m/^TEXMFSYSVAR/) {
@@ -1348,15 +1349,15 @@ sub do_texmf_cnf {
if ("$vars{'TEXMFSYSCONFIG'}" ne "$vars{'TEXDIR'}/texmf-config") {
push @changedtmf, "TEXMFSYSCONFIG = $vars{'TEXMFSYSCONFIG'}\n";
}
- } elsif ($line =~ m/^TEXMFVAR/) {
+ } elsif ($line =~ m/^TEXMFVAR/ && !$vars{'instopt_portable'}) {
if ($vars{"TEXMFVAR"} ne "~/.texlive$yyyy/texmf-var") {
push @changedtmf, "TEXMFVAR = $vars{'TEXMFVAR'}\n";
}
- } elsif ($line =~ m/^TEXMFCONFIG/) {
+ } elsif ($line =~ m/^TEXMFCONFIG/ && !$vars{'instopt_portable'}) {
if ("$vars{'TEXMFCONFIG'}" ne "~/.texlive$yyyy/texmf-config") {
push @changedtmf, "TEXMFCONFIG = $vars{'TEXMFCONFIG'}\n";
}
- } elsif ($line =~ m/^TEXMFHOME/) {
+ } elsif ($line =~ m/^TEXMFHOME/ && !$vars{'instopt_portable'}) {
if ("$vars{'TEXMFHOME'}" ne "~/texmf") {
push @changedtmf, "TEXMFHOME = $vars{'TEXMFHOME'}\n";
}
@@ -1392,6 +1393,11 @@ EOF
s/^(TEXMF\w+\s*=\s*)\Q$vars{'TEXDIR'}\E/$1\$SELFAUTOPARENT/;
print TMF;
}
+ if ($vars{'instopt_portable'}) {
+ print TMF "TEXMFHOME = \$TEXMFLOCAL\n";
+ print TMF "TEXMFVAR = \$TEXMFSYSVAR\n";
+ print TMF "TEXMFCONFIG = \$TEXMFSYSCONFIG\n";
+ }
#
# save the setting of shell_escape to the generated system texmf.cnf
# default in texmf-dist/web2c/texmf.cnf is
@@ -3129,7 +3135,7 @@ This script and its documentation were written for the TeX Live
distribution (L<https://tug.org/texlive>) and both are licensed under the
GNU General Public License Version 2 or later.
-$Id: install-tl 55357 2020-05-31 20:09:55Z siepo $
+$Id: install-tl 55535 2020-06-13 20:03:38Z siepo $
=cut
# to remake HTML version: pod2html --cachedir=/tmp install-tl >/tmp/itl.html
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index 1148afb707..4d18ffed79 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -57,9 +57,6 @@ $mirrors = {
'Singapore' => {
'https://download.nus.edu.sg/mirror/ctan/' => 1,
},
- 'Taiwan' => {
- 'http://ftp.yzu.edu.tw/CTAN/' => 1,
- },
},
'Europe' => {
'Austria' => {
@@ -176,7 +173,6 @@ $mirrors = {
'http://ctan.math.utah.edu/ctan/tex-archive/' => 1,
'http://ctan.math.washington.edu/tex-archive/' => 1,
'http://ctan.mirrors.hoobly.com/' => 1,
- 'http://mirror.las.iastate.edu/tex-archive/' => 1,
'http://mirror.utexas.edu/ctan/' => 1,
'http://mirrors.concertpass.com/tex-archive/' => 1,
'http://mirrors.ibiblio.org/pub/mirrors/CTAN/' => 1,
@@ -192,6 +188,9 @@ $mirrors = {
},
},
'South America' => {
+ 'Brazil' => {
+ 'http://linorg.usp.br/CTAN/' => 1,
+ },
'Chile' => {
'http://ctan.dcc.uchile.cl/' => 1,
},
diff --git a/systems/texlive/tlnet/tlpkg/installer/install-tl-gui.tcl b/systems/texlive/tlnet/tlpkg/installer/install-tl-gui.tcl
index 49d63fa6ff..5719f4e91d 100755
--- a/systems/texlive/tlnet/tlpkg/installer/install-tl-gui.tcl
+++ b/systems/texlive/tlnet/tlpkg/installer/install-tl-gui.tcl
@@ -600,7 +600,11 @@ proc commit_root {} {
}
commit_canonical_local
- if {$::vars(instopt_portable)} reset_personal_dirs
+ if {$::vars(instopt_portable)} {
+ set ::vars(TEXMFHOME) $::vars(TEXMFLOCAL)
+ set ::vars(TEXMFVAR) $::vars(TEXMFSYSVAR)
+ set ::vars(TEXMFCONFIG) $::vars(TEXMFSYSCONFIG)
+ }
destroy .tltd
}
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index f0d9fdc8ce..5e69a9e9d0 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,7 +26,7 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2020
-depend revision/55530
+depend revision/55540
name 00texlive.image
category TLCore
@@ -4213,7 +4213,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 55511
+revision 55535
shortdesc TeX Live standalone installer package
longdesc This package defines the files to go into the installer
longdesc archives (install-tl-unx.tar.gz, install-tl.zip) built by the
@@ -158921,7 +158921,7 @@ catalogue-version 0.1
name latexdiff
category Package
-revision 55328
+revision 55540
shortdesc Determine and mark up significant differences between LaTeX files
longdesc Latexdiff is a Perl script for visual mark up and revision of
longdesc significant differences between two LaTeX files. Various
@@ -158934,10 +158934,10 @@ longdesc all changes. Manual editing of the difference file can be used
longdesc to override this default behaviour and accept or reject
longdesc selected changes only.
depend latexdiff.ARCH
-containersize 69956
-containerchecksum 2736a5b43483c639471b729b7dbde43d13dc8df2009fb6ae4e65662714a19f88b8b5922c321ed1523e141b9a4e2ec49e6458262d755381458b6ad0eb9a673321
-doccontainersize 478528
-doccontainerchecksum 25b8433c2cf8e46035eefee112167b22227c4a7336fa7c0b4be10b8b89ec2f146bcd5148f8fcdcba58e4a1510e17a0f9bffc3a2863cb9cfaf1d3094cc09a9626
+containersize 70032
+containerchecksum cd69ad7bea121664c600e77438eee882e71447bfe5ffb034773a72269ea856f41b54b1369aa701b755586e12f121948d9773688f65d6b0bb161e3a052d95c5f6
+doccontainersize 478708
+doccontainerchecksum 33931c4a47ce1ae61119a54caf074049504ea044159afb6a8ad59dcfea1d54782939ef5d2e8f3303f0aa623c64c4dc84a209eefb179fd057b6903ef6c9409f67
docfiles size=260
texmf-dist/doc/man/man1/latexdiff-vc.1
texmf-dist/doc/man/man1/latexdiff-vc.man1.pdf
@@ -158959,7 +158959,7 @@ docfiles size=260
texmf-dist/doc/support/latexdiff/example/example-rev.tex
texmf-dist/doc/support/latexdiff/latexdiff
texmf-dist/doc/support/latexdiff/latexdiff-fast
-runfiles size=71
+runfiles size=72
texmf-dist/scripts/latexdiff/latexdiff-vc.pl
texmf-dist/scripts/latexdiff/latexdiff.pl
texmf-dist/scripts/latexdiff/latexrevise.pl
@@ -158967,7 +158967,7 @@ catalogue-contact-repository https://github.com/ftilmann/latexdiff/
catalogue-ctan /support/latexdiff
catalogue-license gpl3
catalogue-topics doc-mgmt
-catalogue-version 1.3.1
+catalogue-version 1.3.1.1
name latexdiff.aarch64-linux
category Package
@@ -202857,7 +202857,7 @@ catalogue-topics font font-type1 font-decor
name nicematrix
category Package
-revision 55484
+revision 55539
shortdesc Improve the typesetting of mathematical matrices with PGF
relocated 1
longdesc This package provides new environments similar to the
@@ -202872,18 +202872,18 @@ longdesc a control over the width of the columns and the possibility to
longdesc add an exterior line and an exterior column. nicematrix
longdesc requires and loads amsmath, array, expl3, l3keys2e, xparse,
longdesc pgf, as well as the TikZ library fit.
-containersize 18456
-containerchecksum 44f847b1b423b99ddf8d2cc83362ae599ba778bc71aff86dc7bfc6a93f22ad6ea3861171bbc411988b4f826d2f534aa17610b3687959f056740b9282cd2e2aea
-doccontainersize 1213052
-doccontainerchecksum e4b13a01b133a7745da74bca967651aeaee8faead7330f287a83eb6a3ee13916643ee94e51a2ba519c829d0bd3a17afccc4560214ccac81c97f8d34ae61e275b
-docfiles size=329
+containersize 18596
+containerchecksum a20fabdae46475b943b737e0fd5a9ed3fbda0bc10cb9923913557588c127caa01d308bc101dffb7385082990638652027312ca52135eb0a47f5fc14163519d32
+doccontainersize 1222384
+doccontainerchecksum 45f39d2ed9b3f130aef4cb6f94cfecdb9e535355574f45ccc5fc1d50df415b3486c540a3efa3eec159ab7f8ddde6898af8b4b1f8cc1e5c69b7f4be1e00ccf35e
+docfiles size=333
RELOC/doc/latex/nicematrix/README.md details="Readme"
RELOC/doc/latex/nicematrix/nicematrix-french.pdf details="Package documentation in French" language="fr"
RELOC/doc/latex/nicematrix/nicematrix-french.tex
RELOC/doc/latex/nicematrix/nicematrix.pdf details="Package documentation"
-srccontainersize 65176
-srccontainerchecksum 5d134ea27d7a0f9c20a7c1f820609272c128c317a2c27d8dab5def99dc4903eb0823e000552b98f5749a64c40392f25d24cbc2d2f7e0ba3cc9cf01e09bbe0316
-srcfiles size=96
+srccontainersize 66132
+srccontainerchecksum 549038e3a03d7f83825f05a76f2ef45fb564ae6e0c3837374414958de282458f25acb5f61cc1697b4e40ed227d2fd43d9c8171217ef0771b7a9aea4f00b05fd0
+srcfiles size=98
RELOC/source/latex/nicematrix/nicematrix.dtx
RELOC/source/latex/nicematrix/nicematrix.ins
runfiles size=39
@@ -202891,7 +202891,7 @@ runfiles size=39
catalogue-ctan /macros/latex/contrib/nicematrix
catalogue-license lppl1.3
catalogue-topics maths matrix pgf-tikz expl3
-catalogue-version 4.2
+catalogue-version 4.3
name nicetext
category Package
@@ -225704,25 +225704,21 @@ catalogue-version 0.5q
name pdfpc
category Package
-revision 54160
+revision 55536
shortdesc Define data for the pdfpc presentation viewer
relocated 1
longdesc This packages allows to define additional meta data within the
longdesc PDF file which can be interpreted by the PDF presenter console
longdesc (pdfpc) program. pdfpc depends on kvoptions, xstring,
longdesc pdfcomment, and hyperxmp.
-containersize 2296
-containerchecksum 2f9ec2e321e778eb0903aefbe97f43136d09635c954f46a861250ce158b8d2c9d2a1f1670564137eb6c2ffa9bfca3b163d9a6f61bdf7e754d9e5caee76d4e652
-doccontainersize 171332
-doccontainerchecksum 43dbfb650c7af115139fa7a38543f3177e703ef2427e2cbf428a44799b80987566e9994ebf9df65589517d03bbea7ca14e03e7bf636a9ca37144359446a8570e
-docfiles size=43
+containersize 2060
+containerchecksum 13ac7327ea2efbafd7e6babb80ebf092b7435adeed1bf82228daebaa2bfa1aa84f840c517a842127deae42cb9debcbf4837d90d2ecae7e3d9c7c26eeb15e6255
+doccontainersize 174836
+doccontainerchecksum 830fe7ac4066f9cd8ab68c2cac02420b8034ccc9cb87004ca7178d760d736abbd128490b61488d88777efcfa49490811a62982500db8cdafb70014f2da45d582
+docfiles size=46
RELOC/doc/latex/pdfpc/README.md details="Readme"
- RELOC/doc/latex/pdfpc/pdfpc.pdf details="Package documentation"
-srccontainersize 2576
-srccontainerchecksum bc13d0f236e70ebf0de10a0c6d51a0c82f65a8ad2c96a7ef64fb89849b5bfea5d34b8a545e79d4226393b34daf839dd40354267641586c490f72facc0652ffc4
-srcfiles size=3
- RELOC/source/latex/pdfpc/pdfpc.dtx
- RELOC/source/latex/pdfpc/pdfpc.ins
+ RELOC/doc/latex/pdfpc/pdfpc-doc.pdf details="Package documentation"
+ RELOC/doc/latex/pdfpc/pdfpc-doc.tex
runfiles size=2
RELOC/tex/latex/pdfpc/pdfpc.sty
catalogue-contact-bugs https://github.com/pdfpc/pdfpc/
@@ -225730,7 +225726,7 @@ catalogue-contact-home https://pdfpc.github.io/
catalogue-ctan /macros/latex/contrib/pdfpc
catalogue-license gpl3+
catalogue-topics presentation
-catalogue-version 0.2.1
+catalogue-version 0.4.0
name pdfpc-movie
category Package
@@ -245458,30 +245454,30 @@ catalogue-version 1.0
name pxjahyper
category Package
-revision 54863
+revision 55538
shortdesc Hyperref support for pLaTeX
relocated 1
longdesc This package adjusts the behavior of hyperref on (u)pLaTeX so
longdesc that authors can properly create PDF documents that contain
longdesc document information in Japanese.
-containersize 13752
-containerchecksum fcf5472209ed9021a254e61571182d49b3710ef7484dfad37a70b660a1f387edd1e550340e73f3e4a08b431c4a6fb2ab3b3a8ca45f1312bc23b043e9b4436d46
-doccontainersize 86852
-doccontainerchecksum c42971eee526d1e8e0c3989dba09e1f433a390113ca27c524679b88f8279671a9c0ee780f3ce1cd1624a19afc4664d7200348a28078944572d7293dce4bbb2bb
-docfiles size=26
+containersize 14296
+containerchecksum d3a2f0eddb3c5f05866ef3ae85cbc791e8b182e346b42d7769945d05ad2537c1b6cb812461c9d4ddd1cca51cc659f4850aa8f8fb378d2ba2be9382d382f028b5
+doccontainersize 121292
+doccontainerchecksum 3e721bb27564d30f68358edb61eacb27033b826630dc206614935186d915f23dc68bc119be84e6d7966bced4df719b45ea59dc1ae37917ebc45f4e302eb40648
+docfiles size=35
RELOC/doc/platex/pxjahyper/LICENSE
RELOC/doc/platex/pxjahyper/README-ja.md details="Readme (Japanese)" language="ja"
RELOC/doc/platex/pxjahyper/README.md details="Readme"
RELOC/doc/platex/pxjahyper/pxjahyper.pdf details="Package documentation (Japanese)" language="ja"
RELOC/doc/platex/pxjahyper/pxjahyper.tex
-runfiles size=15
+runfiles size=16
RELOC/tex/platex/pxjahyper/pxjahyper-ajm.def
RELOC/tex/platex/pxjahyper/pxjahyper.sty
catalogue-contact-repository https://github.com/zr-tex8r/PXjahyper
catalogue-ctan /language/japanese/pxjahyper
catalogue-license mit
catalogue-topics japanese hyper
-catalogue-version 0.4b
+catalogue-version 0.5
name pxjodel
category Package
@@ -285252,15 +285248,15 @@ docfiles size=592
name texlive-docindex
category TLCore
-revision 55497
+revision 55532
shortdesc top-level TeX Live doc.html, etc.
longdesc These files are regenerated as needed, which is often, so we
longdesc make them a separate package. See the tl-update-auto script for
longdesc the process.
containersize 388
-containerchecksum bc8b4be8096b97816a7812603780656f57d7c1f0c75b74f225f4a6b28bbd5699c154b6c7c9513a15a3e7809f8f2484c7e717a052276c5ea06a86e3c7b2d1a82a
-doccontainersize 166888
-doccontainerchecksum 34dd01833a96c8376eedd96ff17aa1b1baa936adc8b755918b4f837ec721a0c7d0b510ff077c5e2ce4951acc5743e7d2978bda93566dc1e0ccb0097defd8881a
+containerchecksum 3a8ddd618add5c74aad76fce758a787e240cd2ac447209660af7c4eb996e8c53d5f32e58a2d63d8e359a2d7558f2c0aa364ed006f83093fea9d452ae4e2f5ce3
+doccontainersize 167036
+doccontainerchecksum 9d8af7f7c8b69a893873f8cd3ffb58303ee8566d9882629c770ebb86aebdd39b2fb4131d8c38e0d7ada5a0b786f181f2035e9486d485fb3f13223d6ff2cc7a31
docfiles size=331
doc.html
@@ -285482,7 +285478,7 @@ docfiles size=368
name texlive-scripts
category TLCore
-revision 55511
+revision 55535
shortdesc TeX Live infrastructure programs
longdesc Includes install-tl, tl-portable, rungs, etc.; not needed for
longdesc tlmgr to run but still ours. Not included in tlcritical.
@@ -285490,10 +285486,10 @@ depend texlive-scripts.ARCH
depend texlive.infra
execute addMap mathpple.map
postaction shortcut type=menu name="TeX Live command-line" cmd=TEXDIR/tlpkg/installer/tl-cmd.bat
-containersize 131824
-containerchecksum 8cc70d86a080fc89c12134fae9e68c9473ed683bd3a96b8adfafc49a65c87b8852c3c2d3c7dccef969127c16e898c87e230feb67aecbab1f2e5aadd9df98cb06
-doccontainersize 218652
-doccontainerchecksum d9333a47baba0d4f2d0bf550a3109a61c901bafb65d53348467b569f501116929909ebf3b1033f0560c070dcb5345a7cacb6fe8c2d1090867a054dede6916f7f
+containersize 131932
+containerchecksum 658c8061cb975e112663abb77ca73dcc716adb28cbd3bc2d886fa90d3793e4c21500904fb19e959a0fa1ab970cbd63ca425c2630bf8a9193b79eb7bb46ef2113
+doccontainersize 218656
+doccontainerchecksum fa7caf2916c69d1667a36f3b607867e00ff6be445188ef1face43b30b27ccccf6513b664e03727dd9084f4e40510aa9803c8e67dea427505bad8a190d99462e4
docfiles size=141
texmf-dist/doc/man/man1/fmtutil-sys.1
texmf-dist/doc/man/man1/fmtutil-sys.man1.pdf
@@ -322825,7 +322821,7 @@ binfiles arch=x86_64-solaris size=1
name yquant
category Package
-revision 54737
+revision 55537
shortdesc Typesetting quantum circuits in a human-readable language
relocated 1
longdesc This LaTeX package allows to quickly draw quantum circuits. It
@@ -322838,15 +322834,33 @@ longdesc i.e., it requires no external program -- that introduces a
longdesc logic oriented language and thus brings the best of both worlds
longdesc together. It builds on and interacts with TikZ, which brings an
longdesc enourmous flexibility for customization of individual circuit.
-containersize 27388
-containerchecksum a9b7137e12cb9a39bb525ac79536bd7b6c7d17e7bcbfdce4ec71637d0710e50fdc00ee03892030fc3aecbadbebd687dbe45680d2743e677c1b91bb3c1d1262ed
-doccontainersize 410360
-doccontainerchecksum 5452fa75ce7f500440cdb93cceec0cd89c61e7e902b28e63a0ec3a89e29ad1b81bb673f6549afe2241965c03abc61d4a4f3c3f030df7f097d1c50ec1e0b08b12
-docfiles size=163
+containersize 38812
+containerchecksum f96ee436d13e3f0941f5e7101ababd7eaf02c160a6a36d671180b505584115ff503c5bf3597ba2c6a28a639ee8daac6e0fed5ca8efe948c343304f030d5a9e86
+doccontainersize 475460
+doccontainerchecksum 435621a5785fdf141641d57a5328df40de07bc0301d5539d124765b49fe01bbffb74996a0489aa5eff0bd7f2942e7064fe1f57c6137676bfbc49fcd1594f84a2
+docfiles size=208
RELOC/doc/latex/yquant/README.md details="Readme"
+ RELOC/doc/latex/yquant/test1.qasm
+ RELOC/doc/latex/yquant/test10.qasm
+ RELOC/doc/latex/yquant/test11.qasm
+ RELOC/doc/latex/yquant/test12.qasm
+ RELOC/doc/latex/yquant/test13.qasm
+ RELOC/doc/latex/yquant/test14.qasm
+ RELOC/doc/latex/yquant/test15.qasm
+ RELOC/doc/latex/yquant/test16.qasm
+ RELOC/doc/latex/yquant/test17.qasm
+ RELOC/doc/latex/yquant/test18.qasm
+ RELOC/doc/latex/yquant/test2.qasm
+ RELOC/doc/latex/yquant/test3.qasm
+ RELOC/doc/latex/yquant/test4.qasm
+ RELOC/doc/latex/yquant/test5.qasm
+ RELOC/doc/latex/yquant/test6.qasm
+ RELOC/doc/latex/yquant/test7.qasm
+ RELOC/doc/latex/yquant/test8.qasm
+ RELOC/doc/latex/yquant/test9.qasm
RELOC/doc/latex/yquant/yquant-doc.pdf details="Package documentation"
RELOC/doc/latex/yquant/yquant-doc.tex
-runfiles size=45
+runfiles size=64
RELOC/tex/latex/yquant/yquant-circuit.tex
RELOC/tex/latex/yquant/yquant-config.tex
RELOC/tex/latex/yquant/yquant-draw.tex
@@ -322857,12 +322871,13 @@ runfiles size=45
RELOC/tex/latex/yquant/yquant-shapes.tex
RELOC/tex/latex/yquant/yquant-tools.tex
RELOC/tex/latex/yquant/yquant.sty
+ RELOC/tex/latex/yquant/yquantlanguage-qasm.sty
catalogue-contact-bugs https://github.com/projekter/yquant/issues
catalogue-contact-home https://github.com/projekter/yquant
catalogue-ctan /graphics/pgf/contrib/yquant
catalogue-license lppl1.3c
catalogue-topics graphics diagram-circ pgf-tikz
-catalogue-version 0.1.2
+catalogue-version 0.3
name ytableau
category Package
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 9c4719f1e7..989c26212b 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-08b7f1c0e09664a9ba8dfd4926c2ef7d texlive.tlpdb
+83b9e5e450c67b18345f8945194c6517 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index b474f30934..a295ca05fd 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-1e71f834c1c7b7fddca5c78a9cec7808f1555dd169a24662fbe1870e1f8f38e6e7951a748323450d6741510349cf6073f8a92765957a8a12f0eaa1304b0a1860 texlive.tlpdb
+6b341748c147e6e4bc60f9e6abb1992e51bcf822ddb0c2690b47313ec9a220eea45dd451abc1610ba89736f6aeaadfd051716f03b44da3b20083f91cd59c679b texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 29896f9065..6661f4f84f 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
@@ -1,10 +1,10 @@
-----BEGIN PGP SIGNATURE-----
-iQEcBAEBCgAGBQJe5BZmAAoJEEzhh34ZQ4xw6JYIALKf+WyYMtlrz0YBqyJPG+dZ
-RbU4A2Q+ineFkS+mRQJZGtFm4GFK5rfbZDoTmwgoUjRN6JYFVXFl2+i49XxFiWi9
-Hgho5+QKT12zuGRCvifY95ECsMSHRJgBBpix4XBrgy6PeqdqTvlLSv4OtbKPH/ai
-sf624eX0HkA/rjyGdT8DCbzuwdFmTdp88RaGQSIKYT1dIPEw82R6kJOVKGLaGmun
-fSDZTIxAZLI78Wi9WA5qkRhVOZUJMafoVkb5RdVRu9Eo/JhhAKaw9nioB4PCqugQ
-aHZBsf4YSHYmapU4AvhGIvtAz6fPTqKyG0mhLmQBI2ibRijf5OaLJMlVtM5dWoo=
-=tpyA
+iQEcBAEBCgAGBQJe5WgZAAoJEEzhh34ZQ4xw61kH/iWfA48R3QGyTh0Frlgl59ta
+L3aY2yXawvkM21e1Z5pdgrME2PDvEhnWLHlm4l+K+yHNP2rbPYQfrnzwCWBQq7RO
+BPcsb1DmkY4vS6L9qWOCniVfVtvSdnQeGwSFEaSw4JFWMXqbbroE0E3xIatdMzRf
+s4Otfro6L2BseOoj4KN7quTsWIec9ljanKPMKUD4Al83Ky13ZluSHNpiH58jAIQ1
+rs7hiLhamFBwYifB/6fYNQ/6WakXqmH7CS/m0qdiqCDeLrSiJkDEoR0y/+KNibqo
+ytozzxIwkI8+oZOR9hAcJ6mEah2F6R4I/YfUaazc2H2fn15F2SCdqXFRmqxq4qw=
+=cSyk
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index 6695a380eb..7ed5121be9 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/files.csv.lzma b/systems/win32/miktex/tm/packages/files.csv.lzma
index 07087b4260..5589c56b4a 100644
--- a/systems/win32/miktex/tm/packages/files.csv.lzma
+++ b/systems/win32/miktex/tm/packages/files.csv.lzma
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index 59e94827c7..90e3add96b 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1591992982
-lastupd=babel caption dps hvarabic latexindent pstricks shtthesis abnt baskervillef beamerappendixnote beamerswitch ccool cellprops commutative-diagrams courierten crop ctex ellipsis erw-l3 fira
-lstdigest=943759caa899f6c03a2dd7d96199aca6
+date=1592079389
+lastupd=commutative-diagrams haranoaji haranoaji-extra libertinust1math moderntimeline ocgx2 poemscol pstricks quran resumecls svg thuthesis tuda-ci xindex babel caption dps hvarabic latexindent shtthesis
+lstdigest=1b4eeefd9336097c7d4a592e59b2e046
numpkg=3928
relstate=stable
-version=7468
+version=7469
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: SV2ufhDVvjcE2IQLFIAhYhHLJ7SvhZ6p1ePiWaS4VyCh8ZyG2+0qPFG55/jFUtl6sGmoUgF5oYAuGrDB/OAR+JZjKl30Df+OuBRROeL5MPrxoYnVNh+YrmPfn9BuvEEwxp1UFciuiTUvWqnoIott05Hh4H3Ze/qTf4U7dKxZDfA5TIzykERXhGetgJlKQ67voe0MCbJAr/GO4in+8GtfDxYpb5IrP+2p1HYwKw1Ybpz3uV5EJEB8zrA8zOIbr1H6uU3krtdBs6mKce/qoU4+BgC2g4RfZ3UYCumrJQ0uiJGQ0Rbq5JUF3ISwC++eT4LK2u7eunPIETSmA6larGS02g==
+;;;; signature/miktex: cbx51XNLTUjfKpovZ+b3dhfUVVc7iSOhNikquf5roEoNrkzIRSdE7HXcTiEpuVyo40+8SswvdQdjgPvPeGvEsQqKT11ElZP6326sA/3XQjh7v94chL6C5uIPjURo8VqTD/90AQVQ5d8pcM2Vc9OjJSBHkuSDTeKLlUC20QNZM17zQdkcnh8AYTMlEXVmZtuJpvCyiZWZvNXr0bYWaPFzwq2uX2D6xy98jLPDIhfJRECkSyC6tOL7FXGghE4AA5quQkzhcGBGMvj1Z4Nu+U9ACmw5HghkJ7YkSjCoKTtDY/PXVmLvGnBQyDS6SnIwHd8jTXz8zBEv5wCwqJM99lIOag==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/w32tex/ChangeLog b/systems/win32/w32tex/ChangeLog
index 53716b49c1..424563eedf 100644
--- a/systems/win32/w32tex/ChangeLog
+++ b/systems/win32/w32tex/ChangeLog
@@ -1,5 +1,15 @@
W32TeX (x86 & x64) ChangeLog
+[2020/06/13]
+(01) context.tar.xz
+ ConTeXt version: 2020.06.12 17:40.
+(02) ltxpkgs.tar.xz
+ Update poemscol, and svg.
+(03) luatexja.tar.xz
+ Update haranoaji, and haranoaji-extra fonts.
+(04) pgfcontrib.tar.xz
+ Update commutative-diagrams.
+
[2020/06/12]
(01) context.tar.xz
ConTeXt version: 2020.06.11 21:26.
diff --git a/timestamp b/timestamp
index ff5fd56c58..8558ed1b8f 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2020-06-13-02-02
+2020-06-14-02-02