summaryrefslogtreecommitdiff
path: root/graphics
diff options
context:
space:
mode:
Diffstat (limited to 'graphics')
-rw-r--r--graphics/asymptote/ChangeLog488
-rw-r--r--graphics/asymptote/GUI/icons_rc.py374
-rw-r--r--graphics/asymptote/INSTALL6
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/CMakeDirectoryInformation.cmake6
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/DependInfo.cmake4
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/build.make14
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/Doxyfile8
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/Makefile26
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/cmake_install.cmake6
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/CMakeDirectoryInformation.cmake6
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/DependInfo.cmake20
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/build.make80
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.internal2015
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.make2313
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/flags.make4
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/src/Makefile74
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/src/cmake_install.cmake4
-rw-r--r--graphics/asymptote/Makefile.in2
-rw-r--r--graphics/asymptote/README2
-rw-r--r--graphics/asymptote/ReleaseNotes16
-rw-r--r--graphics/asymptote/absyn.h2
-rw-r--r--graphics/asymptote/arrayop.h8
-rw-r--r--graphics/asymptote/asy-keywords.el8
-rw-r--r--graphics/asymptote/asy.list915
-rw-r--r--graphics/asymptote/asymptote.spec2
-rw-r--r--graphics/asymptote/base/asy-mode.el15
-rw-r--r--graphics/asymptote/base/plain_boxes.asy28
-rw-r--r--graphics/asymptote/base/plain_picture.asy11
-rw-r--r--graphics/asymptote/base/plain_scaling.asy26
-rw-r--r--graphics/asymptote/base/plain_shipout.asy9
-rw-r--r--graphics/asymptote/base/simplex2.asy310
-rw-r--r--graphics/asymptote/base/three.asy11
-rw-r--r--graphics/asymptote/base/v3dheadertypes.asy2
-rw-r--r--graphics/asymptote/base/v3dtypes.asy2
-rw-r--r--graphics/asymptote/binaries/i386-windows/README2
-rw-r--r--graphics/asymptote/binaries/x86_64-windows/README2
-rw-r--r--graphics/asymptote/builtin.cc4
-rw-r--r--graphics/asymptote/callable.h2
-rw-r--r--graphics/asymptote/camp.tab.h2
-rw-r--r--graphics/asymptote/camp.y2
-rw-r--r--graphics/asymptote/coder.cc2
-rw-r--r--graphics/asymptote/coder.h5
-rw-r--r--graphics/asymptote/common.h1
-rwxr-xr-xgraphics/asymptote/configure150
-rw-r--r--graphics/asymptote/configure.ac16
-rw-r--r--graphics/asymptote/dec.cc174
-rw-r--r--graphics/asymptote/dec.h53
-rw-r--r--graphics/asymptote/doc/CAD.pdfbin198650 -> 198650 bytes
-rw-r--r--graphics/asymptote/doc/FAQ/asy-faq.info2
-rw-r--r--graphics/asymptote/doc/TeXShopAndAsymptote.pdfbin81349 -> 81194 bytes
-rw-r--r--graphics/asymptote/doc/asy-latex.pdfbin209115 -> 209115 bytes
-rw-r--r--graphics/asymptote/doc/asyRefCard.pdfbin121145 -> 121145 bytes
-rw-r--r--graphics/asymptote/doc/asymptote.pdfbin1269364 -> 1249734 bytes
-rw-r--r--graphics/asymptote/doc/asymptote.texi538
-rw-r--r--graphics/asymptote/doc/basealign.asy (renamed from graphics/asymptote/examples/basealign.asy)0
-rw-r--r--graphics/asymptote/doc/png/asymptote.info1504
-rw-r--r--graphics/asymptote/entry.cc2
-rw-r--r--graphics/asymptote/entry.h2
-rw-r--r--graphics/asymptote/env.cc11
-rw-r--r--graphics/asymptote/env.h8
-rw-r--r--graphics/asymptote/errormsg.cc2
-rw-r--r--graphics/asymptote/examples/slope.asy2
-rw-r--r--graphics/asymptote/examples/teapot.asy4
-rw-r--r--graphics/asymptote/exp.h4
-rw-r--r--graphics/asymptote/fileio.h6
-rw-r--r--graphics/asymptote/fundec.h16
-rwxr-xr-xgraphics/asymptote/generate_enums.py8
-rw-r--r--graphics/asymptote/genv.cc41
-rw-r--r--graphics/asymptote/genv.h12
-rw-r--r--graphics/asymptote/glew.c7
-rw-r--r--graphics/asymptote/glrender.cc9
-rw-r--r--graphics/asymptote/glrender.h6
-rw-r--r--graphics/asymptote/item.h24
-rw-r--r--graphics/asymptote/main.cc9
-rw-r--r--graphics/asymptote/memory.h2
-rw-r--r--graphics/asymptote/newexp.cc2
-rw-r--r--graphics/asymptote/newexp.h10
-rw-r--r--graphics/asymptote/picture.cc5
-rw-r--r--graphics/asymptote/pkg.m4343
-rw-r--r--graphics/asymptote/program.cc4
-rw-r--r--graphics/asymptote/revision.cc2
-rw-r--r--graphics/asymptote/runmath.cc10
-rw-r--r--graphics/asymptote/runmath.in6
-rw-r--r--graphics/asymptote/runtime.cc9
-rw-r--r--graphics/asymptote/runtime.in10
-rw-r--r--graphics/asymptote/settings.cc4
-rw-r--r--graphics/asymptote/stack.cc51
-rw-r--r--graphics/asymptote/stack.h16
-rw-r--r--graphics/asymptote/stm.h4
-rw-r--r--graphics/asymptote/tests/TestLib.asy2
-rw-r--r--graphics/asymptote/tests/template/functionTest.asy20
-rw-r--r--graphics/asymptote/tests/template/imports/A.asy4
-rw-r--r--graphics/asymptote/tests/template/imports/B.asy1
-rw-r--r--graphics/asymptote/tests/template/imports/C.asy6
-rw-r--r--graphics/asymptote/tests/template/imports/composeFunctions.asy9
-rw-r--r--graphics/asymptote/tests/template/imports/notTemplate.asy4
-rw-r--r--graphics/asymptote/tests/template/imports/notTemplate2.asy4
-rw-r--r--graphics/asymptote/tests/template/imports/pureset.asy116
-rw-r--r--graphics/asymptote/tests/template/imports/sortedset.asy208
-rw-r--r--graphics/asymptote/tests/template/imports/splaytree.asy549
-rw-r--r--graphics/asymptote/tests/template/imports/structTemplate.asy36
-rw-r--r--graphics/asymptote/tests/template/imports/zip.asy5
-rw-r--r--graphics/asymptote/tests/template/initTest.asy23
-rw-r--r--graphics/asymptote/tests/template/multiImport.asy25
-rw-r--r--graphics/asymptote/tests/template/sortedsetTest.asy254
-rw-r--r--graphics/asymptote/tests/template/splaytreeTest.asy553
-rw-r--r--graphics/asymptote/tests/template/structTest.asy64
-rw-r--r--graphics/asymptote/v3dheadertypes.h2
-rw-r--r--graphics/asymptote/v3dheadertypes.py2
-rw-r--r--graphics/asymptote/v3dtypes.h2
-rw-r--r--graphics/asymptote/v3dtypes.py2
-rw-r--r--graphics/circuit_macros/CHANGES6
-rw-r--r--graphics/circuit_macros/Copying2
-rw-r--r--graphics/circuit_macros/README120
-rw-r--r--graphics/circuit_macros/darrow.m42
-rw-r--r--graphics/circuit_macros/doc/AlogixMan.m42
-rw-r--r--graphics/circuit_macros/doc/AmpTableMan.m428
-rw-r--r--graphics/circuit_macros/doc/Circuit_macros.pdfbin1086791 -> 1135017 bytes
-rw-r--r--graphics/circuit_macros/doc/Circuit_macros.tex3
-rw-r--r--graphics/circuit_macros/doc/FF.m412
-rw-r--r--graphics/circuit_macros/doc/Makefile15
-rw-r--r--graphics/circuit_macros/doc/QTrans.m45
-rw-r--r--graphics/circuit_macros/doc/ResistorsMan.m430
-rw-r--r--graphics/circuit_macros/doc/SourcesMan.m423
-rw-r--r--graphics/circuit_macros/doc/Taps.m42
-rw-r--r--graphics/circuit_macros/doc/Version.tex2
-rw-r--r--graphics/circuit_macros/doc/body.tex94
-rw-r--r--graphics/circuit_macros/doc/defines.tex657
-rw-r--r--graphics/circuit_macros/doc/quick.m412
-rw-r--r--graphics/circuit_macros/doc/relaycoilMan.m460
-rw-r--r--graphics/circuit_macros/dpictools.pic79
-rw-r--r--graphics/circuit_macros/examples/Alogix.m412
-rw-r--r--graphics/circuit_macros/examples/AmpTable.m428
-rw-r--r--graphics/circuit_macros/examples/Buttons.m432
-rw-r--r--graphics/circuit_macros/examples/Chips.m47
-rw-r--r--graphics/circuit_macros/examples/Consumption.m412
-rw-r--r--graphics/circuit_macros/examples/Dini.m457
-rw-r--r--graphics/circuit_macros/examples/EVplugs.m482
-rw-r--r--graphics/circuit_macros/examples/Fuses.m42
-rw-r--r--graphics/circuit_macros/examples/Geometry.m42
-rw-r--r--graphics/circuit_macros/examples/Incleps.m43
-rw-r--r--graphics/circuit_macros/examples/Makefile44
-rw-r--r--graphics/circuit_macros/examples/MoreTable.m42
-rw-r--r--graphics/circuit_macros/examples/Quantum.m423
-rw-r--r--graphics/circuit_macros/examples/Resistors.m430
-rw-r--r--graphics/circuit_macros/examples/SQUID.m422
-rw-r--r--graphics/circuit_macros/examples/Sevensegment.m482
-rw-r--r--graphics/circuit_macros/examples/Shadowed.m4 (renamed from graphics/circuit_macros/examples/shadowed.m4)13
-rw-r--r--graphics/circuit_macros/examples/Sources.m422
-rw-r--r--graphics/circuit_macros/examples/Switches.m42
-rw-r--r--graphics/circuit_macros/examples/cbresistor.m480
-rw-r--r--graphics/circuit_macros/examples/dpv/AmpTableDPV.m425
-rw-r--r--graphics/circuit_macros/examples/dpv/DiniDPV.m458
-rw-r--r--graphics/circuit_macros/examples/dpv/EVplugsDPV.m482
-rw-r--r--graphics/circuit_macros/examples/dpv/GeometryDPV.m42
-rw-r--r--graphics/circuit_macros/examples/dpv/Makefile22
-rw-r--r--graphics/circuit_macros/examples/dpv/QuantumDPV.m423
-rw-r--r--graphics/circuit_macros/examples/dpv/ResistorsDPV.m435
-rw-r--r--graphics/circuit_macros/examples/dpv/SQUIDDPV.m419
-rw-r--r--graphics/circuit_macros/examples/dpv/SevensegmentDPV.m482
-rw-r--r--graphics/circuit_macros/examples/dpv/SourcesDPV.m440
-rw-r--r--graphics/circuit_macros/examples/dpv/Spec555DPV.m457
-rw-r--r--graphics/circuit_macros/examples/dpv/cbresistorDPV.m482
-rw-r--r--graphics/circuit_macros/examples/dpv/ex00DPV.m494
-rw-r--r--graphics/circuit_macros/examples/dpv/examplesDPV.htmx43
-rw-r--r--graphics/circuit_macros/examples/dpv/examplesDPVs.htmx33
-rw-r--r--graphics/circuit_macros/examples/dpv/quickDPV.m410
-rw-r--r--graphics/circuit_macros/examples/dpv/relaycoilDPV.m432
-rw-r--r--graphics/circuit_macros/examples/ex00.m491
-rw-r--r--graphics/circuit_macros/examples/examples.pdfbin1917517 -> 1936421 bytes
-rw-r--r--graphics/circuit_macros/examples/extras/Ant.m430
-rw-r--r--graphics/circuit_macros/examples/extras/Asymptotes.m493
-rw-r--r--graphics/circuit_macros/examples/extras/Birds.m4 (renamed from graphics/circuit_macros/examples/extras/birds.m4)0
-rw-r--r--graphics/circuit_macros/examples/extras/Bistable.m4 (renamed from graphics/circuit_macros/examples/extras/bistable.m4)0
-rw-r--r--graphics/circuit_macros/examples/extras/Brace.m4 (renamed from graphics/circuit_macros/examples/extras/brace.m4)0
-rw-r--r--graphics/circuit_macros/examples/extras/Ccurve.m414
-rw-r--r--graphics/circuit_macros/examples/extras/Chaos.m4 (renamed from graphics/circuit_macros/examples/extras/chaos.m4)0
-rw-r--r--graphics/circuit_macros/examples/extras/Chuck.m46
-rw-r--r--graphics/circuit_macros/examples/extras/ClassDAmp.m46
-rw-r--r--graphics/circuit_macros/examples/extras/Cruller.m467
-rw-r--r--graphics/circuit_macros/examples/extras/Cylinder.m443
-rw-r--r--graphics/circuit_macros/examples/extras/HSV.m4 (renamed from graphics/circuit_macros/examples/extras/hsv.m4)0
-rw-r--r--graphics/circuit_macros/examples/extras/Highgain.m410
-rw-r--r--graphics/circuit_macros/examples/extras/Koch.m433
-rw-r--r--graphics/circuit_macros/examples/extras/Makefile44
-rw-r--r--graphics/circuit_macros/examples/extras/Parallel-series.m415
-rw-r--r--graphics/circuit_macros/examples/extras/Person.m4 (renamed from graphics/circuit_macros/examples/extras/person.m4)0
-rw-r--r--graphics/circuit_macros/examples/extras/README_extras2
-rw-r--r--graphics/circuit_macros/examples/extras/Rotellipse.m4 (renamed from graphics/circuit_macros/examples/extras/rotellipse.m4)0
-rw-r--r--graphics/circuit_macros/examples/extras/SampleFlow.m48
-rw-r--r--graphics/circuit_macros/examples/extras/Spec555.m456
-rw-r--r--graphics/circuit_macros/examples/extras/Squiggle.m4 (renamed from graphics/circuit_macros/examples/extras/squiggle.m4)0
-rw-r--r--graphics/circuit_macros/examples/extras/Venus.m4 (renamed from graphics/circuit_macros/examples/extras/venus.m4)0
-rw-r--r--graphics/circuit_macros/examples/extras/ex17.m4 (renamed from graphics/circuit_macros/examples/ex17.m4)0
-rw-r--r--graphics/circuit_macros/examples/files.tex53
-rw-r--r--graphics/circuit_macros/examples/ics.m449
-rw-r--r--graphics/circuit_macros/examples/keyboard.m48
-rw-r--r--graphics/circuit_macros/examples/mf/cct.mf64
-rw-r--r--graphics/circuit_macros/examples/quick.m412
-rw-r--r--graphics/circuit_macros/examples/relaycoil.m414
-rw-r--r--graphics/circuit_macros/examples/xfig/xfiglib.fig8
-rw-r--r--graphics/circuit_macros/gpic.m42
-rw-r--r--graphics/circuit_macros/lib3D.m428
-rw-r--r--graphics/circuit_macros/libSLD.m42
-rw-r--r--graphics/circuit_macros/libcct.m4499
-rw-r--r--graphics/circuit_macros/libgen.m4141
-rw-r--r--graphics/circuit_macros/liblog.m42
-rw-r--r--graphics/circuit_macros/mfpic.m42
-rw-r--r--graphics/circuit_macros/mpost.m42
-rw-r--r--graphics/circuit_macros/pdf.m42
-rw-r--r--graphics/circuit_macros/pgf.m42
-rw-r--r--graphics/circuit_macros/postscript.m42
-rw-r--r--graphics/circuit_macros/psfrag.m42
-rw-r--r--graphics/circuit_macros/pstricks.m42
-rw-r--r--graphics/circuit_macros/svg.m42
-rw-r--r--graphics/circuit_macros/xfig.m42
-rw-r--r--graphics/pgf/contrib/argumentation/README.md2
-rw-r--r--graphics/pgf/contrib/argumentation/argumentation-doc.pdfbin275801 -> 307239 bytes
-rw-r--r--graphics/pgf/contrib/argumentation/argumentation-doc.tex888
-rw-r--r--graphics/pgf/contrib/argumentation/argumentation.sty227
-rw-r--r--graphics/pgf/contrib/circuitikz/doc/changelog.tex29
-rw-r--r--graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdfbin13862 -> 13867 bytes
-rw-r--r--graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdfbin2422724 -> 2431321 bytes
-rw-r--r--graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex65
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/circuitikz.sty4
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex151
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcirctripoles.tex24
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex4
-rw-r--r--graphics/pgf/contrib/pgfgantt/README17
-rw-r--r--graphics/pgf/contrib/pgfgantt/pgfgantt-doc.pdfbin0 -> 661617 bytes
-rw-r--r--graphics/pgf/contrib/pgfgantt/pgfgantt.dtx348
-rw-r--r--graphics/pgf/contrib/pgfgantt/pgfgantt.ins11
-rw-r--r--graphics/pgf/contrib/pgfgantt/pgfgantt.pdfbin941473 -> 0 bytes
-rw-r--r--graphics/pgf/contrib/pmdraw/README.md (renamed from graphics/pmdraw/README.md)6
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-1.tex (renamed from graphics/pmdraw/examples/example-1.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-10.tex (renamed from graphics/pmdraw/examples/example-10.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-11.tex (renamed from graphics/pmdraw/examples/example-11.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-12.tex (renamed from graphics/pmdraw/examples/example-12.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-13.tex (renamed from graphics/pmdraw/examples/example-13.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-14.tex (renamed from graphics/pmdraw/examples/example-14.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-15.tex (renamed from graphics/pmdraw/examples/example-15.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-16.tex (renamed from graphics/pmdraw/examples/example-16.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-17.tex (renamed from graphics/pmdraw/examples/example-17.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-18.tex (renamed from graphics/pmdraw/examples/example-18.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-19.tex (renamed from graphics/pmdraw/examples/example-19.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-2.tex (renamed from graphics/pmdraw/examples/example-2.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-20.tex (renamed from graphics/pmdraw/examples/example-20.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-21.tex (renamed from graphics/pmdraw/examples/example-21.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-22.tex (renamed from graphics/pmdraw/examples/example-22.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-23.tex (renamed from graphics/pmdraw/examples/example-23.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-24.tex (renamed from graphics/pmdraw/examples/example-24.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-25.tex (renamed from graphics/pmdraw/examples/example-25.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-3.tex (renamed from graphics/pmdraw/examples/example-3.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-4.tex (renamed from graphics/pmdraw/examples/example-4.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-5.tex (renamed from graphics/pmdraw/examples/example-5.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-6.tex (renamed from graphics/pmdraw/examples/example-6.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-7.tex (renamed from graphics/pmdraw/examples/example-7.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-8.tex (renamed from graphics/pmdraw/examples/example-8.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/examples/example-9.tex (renamed from graphics/pmdraw/examples/example-9.tex)0
-rw-r--r--graphics/pgf/contrib/pmdraw/pmdraw.pdf (renamed from graphics/pmdraw/pmdraw.pdf)bin384283 -> 397582 bytes
-rw-r--r--graphics/pgf/contrib/pmdraw/pmdraw.sty (renamed from graphics/pmdraw/pmdraw.sty)758
-rw-r--r--graphics/pgf/contrib/pmdraw/pmdraw.tex (renamed from graphics/pmdraw/pmdraw.tex)642
-rw-r--r--graphics/pgf/contrib/spath3/README.txt (renamed from graphics/pgf/contrib/spath3/README)2
-rw-r--r--graphics/pgf/contrib/spath3/spath3.pdfbin441114 -> 446012 bytes
-rw-r--r--graphics/pgf/contrib/spath3/spath3.tex63
-rw-r--r--graphics/pgf/contrib/spath3/spath3_code.dtx127
-rw-r--r--graphics/pgf/contrib/spath3/spath3_code.pdfbin833596 -> 840527 bytes
-rw-r--r--graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.pdfbin0 -> 746493 bytes
-rw-r--r--graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.tex1712
-rw-r--r--graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.pdfbin676340 -> 804095 bytes
-rw-r--r--graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex611
-rw-r--r--graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-examples-integrals.pdfbin0 -> 141889 bytes
-rw-r--r--graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-examples-integrals.tex251
-rw-r--r--graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-exemples-integrales.pdfbin0 -> 141384 bytes
-rw-r--r--graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-exemples-integrales.tex251
-rw-r--r--graphics/pgf/contrib/tkz-grapheur/tex/tkz-grapheur.sty3176
-rw-r--r--graphics/pstricks/contrib/pst-optic/Changes1
-rw-r--r--graphics/pstricks/contrib/pst-optic/README5
-rw-r--r--graphics/pstricks/contrib/pst-optic/doc/pst-optic-doc.bib11
-rw-r--r--graphics/pstricks/contrib/pst-optic/doc/pst-optic-doc.pdfbin516250 -> 518230 bytes
-rw-r--r--graphics/pstricks/contrib/pst-optic/doc/pst-optic-doc.tex19
-rw-r--r--graphics/pstricks/contrib/pst-optic/tex/pst-optic.tex28
282 files changed, 18262 insertions, 6857 deletions
diff --git a/graphics/asymptote/ChangeLog b/graphics/asymptote/ChangeLog
index ef7b7897ea..d328718705 100644
--- a/graphics/asymptote/ChangeLog
+++ b/graphics/asymptote/ChangeLog
@@ -1,3 +1,440 @@
+commit 58246991e2474ffbd1bfe012d5d0a11407da7795
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Jun 21 10:33:58 2024 -0700
+
+ Support latest osmesa.h (issue #433).
+
+commit 25eee09b986b2bf373a5bab21be4b0406bc2568a
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Jun 21 00:09:15 2024 -0700
+
+ Install shaders without executable bit.
+
+commit 74af1955622ae40bbe4edc74cd197049a04684a9
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Jun 21 00:08:00 2024 -0700
+
+ Avoid use of deprecated datetime.utcfromtimestamp function.
+
+commit 9cd341a78049695722a25d54be507ffd18cacb15
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Jun 20 23:30:08 2024 -0700
+
+ Update documentation.
+
+commit 8455927794379406ea28be52adc7cc65262f9ea7
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Jun 20 23:21:48 2024 -0700
+
+ Omit teapot regularization.
+
+commit 5099d297e6a950c8917a21be9bf15d75e7855e6a
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Jun 20 19:04:49 2024 -0700
+
+ Fix discussion of deferred drawing.
+
+commit b0cba406177a0bbee1428ac2e36f886cccdc5b94
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Jun 19 23:59:31 2024 -0700
+
+ Replace ImageMagick convert by magick convert.
+
+commit 4d15930f3a4aa8ca4f4616276678e9b1537c27a4
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Jun 19 19:00:15 2024 -0700
+
+ Fix documentation.
+
+commit b2dba448eb7e579f9f1e382c3c22c3e1be439e1c
+Merge: eca567a5 154a9d93
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Jun 19 18:43:30 2024 -0700
+
+ Merge pull request #439 from jkseppan/flycheck
+
+ Integrate with flycheck
+
+commit eca567a539a7bf2b1beb5a3e1871c9c3db276e94
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Jun 19 18:37:05 2024 -0700
+
+ Apply pull request #452, with a few modifications.
+
+commit e36ea98c063075bd48a44410c8de1fc173d354c7
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Jun 19 17:28:47 2024 -0700
+
+ Update documentation.
+
+commit 7d063bebcf040ab417c770941676df92b669e13e
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Jun 19 15:11:17 2024 -0700
+
+ Replace tabs in error messages by 2 spaces (issue #444).
+
+commit 39dff901f9c36de254710b57381dc4b83a636f63
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Jun 19 13:50:40 2024 -0700
+
+ Fix approximate transparency rendering for GPUs without SSBO support (issue #462).
+
+commit 99bd09380ddd649d3d6060dda12320e2dc8ed10b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Jun 19 10:35:08 2024 -0700
+
+ Pass PKG_FLAGS to AC_CHECK_LIB (issue # 461).
+
+commit 216e2ef85fe61c959d2163f8c7c5f4faca87d840
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Jun 19 09:41:16 2024 -0700
+
+ Change add(picture dest, picture src, pair position) to respect a size specification for src (see issue #450).
+ This change is backwards incompatible only in cases where src is given a size specification; the previous behaviour can then be obtained with
+
+ add(dest,src.fit(identity()),position).
+
+commit 4cbd256f23a940f60b54c1ea4df1fe2febe101dd
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Jun 19 09:40:04 2024 -0700
+
+ Fix example.
+
+commit c7f016286dffc4cd1805d7541d50e17d05805527
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Jun 16 23:46:09 2024 -0700
+
+ Avoid duplicate code.
+
+commit d3ad8b5fd85a0ba900c4933acb013e501e473bb1
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Jun 16 20:23:45 2024 -0700
+
+ Qualify call to glutSetOption.
+
+commit 9a776cfe4d3bf6b01c7c5340745aa5b0fc9bd707
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Jun 16 15:48:31 2024 -0700
+
+ Update URL.
+
+commit 9cf74052039f62dc4f4c810cd0a0b133d977433d
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Jun 13 17:44:57 2024 -0700
+
+ Reset terminal on exit.
+
+commit af44b79a8b008c6e2bcc3a422cdc28adb78d25d0
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Jun 13 08:29:49 2024 -0700
+
+ Exit glut gracefully.
+
+commit c7250761093ba84f3db1c948d3fc4effcfb8d32a
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Jun 13 08:02:34 2024 -0700
+
+ Don't show target for empty pictures.
+
+commit 1d4dfcae1950fcfce44ed109260b39f0e6dbb45f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Jun 12 23:46:42 2024 -0700
+
+ Fix erase.
+
+commit 237a30626c2167f1269dd2ec8b6910569f569e5f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Jun 11 23:29:34 2024 -0700
+
+ Don't warn if there are no constraints.
+
+commit 45912ba5dc3aa458ce25fc04d569fbe430238c13
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Jun 11 23:29:11 2024 -0700
+
+ Only output a 3D picture when not up to date.
+
+commit 590b89237b2b2d61d310380313e9e61d2329d22e
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Jun 11 20:09:50 2024 -0700
+
+ Decouple scaling of each dimension with a fixed version of the original 2-variable simplex method (see commit 401cf60f89dcddfb6993f7bd25a86b144ec5f3ad and issue #72).
+
+commit 8b307db4402ec7ad1bf1d1f3559140acaa4863e2
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Jun 9 08:15:36 2024 -0700
+
+ Fix DEBUG_FRAME warning.
+
+commit 1c16640576c9b96926f9f76e06b81f0f68fd1714
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Jun 9 08:10:30 2024 -0700
+
+ Remove unused argument to stack::load.
+
+commit 786fc0fb3da2fb0e3f4b1dd94aa3548b4a06ad56
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jun 8 23:07:21 2024 -0700
+
+ Update documentation of templated imports.
+
+commit f153c484aca2ead08683cbfb2a5afbcafef1c703
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Sat Jun 8 19:40:39 2024 -0700
+
+ Test template for nested imports.
+
+commit 61c6d2be12bfad7239ff4f6733ba1a66b84f4d26
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jun 8 19:23:03 2024 -0700
+
+ Support templated imports for parameter types defined in imported modules.
+
+commit 575ef4298a22e175dc2201b4c91f1cf6f8511a0e
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Jun 4 21:07:41 2024 -0700
+
+ Partially revert commit 45b84def56e7c4af6a9f0e9546bf92f90c9a22af.
+
+commit 12e20a7be326f05d5e5d7a555a0f9ceb29becce1
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Sun Jun 2 21:27:29 2024 -0700
+
+ Add more thorough test of struct template.
+
+commit 772a3e4d0efa95367f547159bb86dd9f436abd18
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Jun 2 17:39:49 2024 -0700
+
+ Remove automatic recordInitializer for imported templates; add test.
+
+commit 3f6f4361af778517867837b79cc56db28e791935
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Sun Jun 2 13:28:17 2024 -0700
+
+ Add import de-duplication tests.
+
+commit 600c54f7669d23bf57beaee991773f1b301720ef
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Sun Jun 2 12:52:08 2024 -0700
+
+ Minor readability improvements.
+
+commit d22b41fb0e7eaf2290951409abf2f867aa317850
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jun 1 23:39:39 2024 -0700
+
+ Defer pushing qualified tyEntries until actually loading a templated module.
+
+commit 70346afc6d421c5b102a35f7b9bde8109082ef71
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jun 1 21:00:12 2024 -0700
+
+ Remove unused code.
+
+commit 8c9e05a2f239390a3ce0fa9fc236027ac3d8bfb1
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jun 1 20:50:57 2024 -0700
+
+ Revert "Revert "Initialize structs declared within templated imports.""
+
+ This reverts commit 315ca8cbe34cee0b5079bd669060b568da7b342a.
+
+commit e5590f72c74f43840ae87d411f4791b200a7a3e3
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jun 1 20:37:57 2024 -0700
+
+ Support templated access with types containing static fields.
+
+commit a697a52388f0e07797ac5eaa8d00c419337d0c7b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jun 1 19:30:28 2024 -0700
+
+ Simplify code.
+
+commit 57539e7ae5f20414d936730e57120106a8ef3f44
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jun 1 19:28:25 2024 -0700
+
+ Simplify code.
+
+commit 1e51fe661e819f13446288f2cdb47b7688f499e7
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Sat Jun 1 15:40:15 2024 -0700
+
+ Only pop qualifiers for records.
+
+commit 45b84def56e7c4af6a9f0e9546bf92f90c9a22af
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jun 1 13:24:36 2024 -0700
+
+ Support templated access with imported and top-level structure types.
+
+commit db67e9101801809cc15e4e34de72c8c41a60b18b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu May 30 20:55:20 2024 -0700
+
+ Simplify code.
+
+commit 6faf168867f0a7dd3930b6cf0d74fc4e3333ddd0
+Merge: 7dfdaf3c be47ce98
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Thu May 30 19:50:04 2024 -0700
+
+ Merge branch 'rename' into template
+
+commit be47ce9838e0a92dd026fbb1df0532edca5a2e1a
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Wed May 29 22:43:42 2024 -0700
+
+ Rename types::tyTy back to types::ty.
+
+commit 79f526207906986ac2a86414bdece4dffeb12781
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Wed May 29 22:36:20 2024 -0700
+
+ Rename absyntax::ty to absyntax::astType.
+
+commit 092fc985e8be1cfd88f2045fe39e981bd110f0be
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Wed May 29 22:19:31 2024 -0700
+
+ Change some macro-gated ty to tyTy.
+
+commit 94451536b4a372c4fb5f15b928377174c8e17311
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Wed May 29 22:13:06 2024 -0700
+
+ Change `#if SIMPLE_FRAME` to `#ifdef SIMPLE_FRAME` for consistency.
+
+commit 7dfdaf3c418ddb0d2471cea99eb0bcaeaec8c6a7
+Merge: ecb912d9 122092fa
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed May 29 21:02:20 2024 -0700
+
+ Merge branch 'master' into template.
+
+commit 122092fa8a238ac101e9b7dcd6316be919e069ea
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed May 29 20:53:21 2024 -0700
+
+ Work around missing pkg-config files.
+
+commit 2d3fc31c89786cf7edfb8ee85e02fce60b483570
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Wed May 29 14:51:49 2024 -0700
+
+ Rename vm::frame to vm::vmFrame to avoid confusion with trans::frame.
+
+commit c2cd04a91d1bc7e1fb8e45737d7d45a22344ca1f
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Wed May 29 14:51:13 2024 -0700
+
+ Output linebreak in testLib to improve error message readability.
+
+commit 3bc8e52d1eedf0956785e6214a462172f5820656
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Wed May 29 12:57:35 2024 -0700
+
+ Rename types::ty to types::tyTy to distinguish it from absyntax::ty.
+
+commit ecb912d95d3cb9c9595e82f8de8bfaf1dfa9e8ba
+Merge: 193c933f 684570c8
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue May 28 10:15:51 2024 -0700
+
+ Merge branch 'master' into template.
+
+commit 193c933fed79c9d12527ee32f249e7c70812af35
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Tue May 28 10:02:01 2024 -0700
+
+ WIP: Correctly qualify tyEntries for template parameters.
+
+commit 684570c8872a2e93ef86a6ef456a0599a934bf12
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon May 27 19:50:24 2024 -0700
+
+ Ship with pkg.m4 to support pkg-config.
+
+commit de439f6d57b43871dbb3d23f5a9ab8c9af9c4ef2
+Merge: 518077fd e369a22f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu May 23 22:52:55 2024 -0700
+
+ Merge branch 'master' into template.
+
+commit e369a22fd851e63c2f1e75b098a572778f932d86
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu May 23 22:52:21 2024 -0700
+
+ Support COMPACT=0 again.
+
+commit 518077fd67809c0b847982708e7695405d51ea03
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu May 23 21:17:55 2024 -0700
+
+ Improve 32 bit integer detection macro.
+
+commit c451de132d783606f8aee2c8bd6214f1a972de3e
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed May 22 22:04:30 2024 -0700
+
+ Remove obsolete code.
+
+commit eee7be909c837074d690f5377324940c1c22556b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed May 22 21:57:45 2024 -0700
+
+ Revert "Remove obsolete code."
+
+ This reverts commit 82da5932f7dfa59337840abfec723de14edaee98.
+
+commit 82da5932f7dfa59337840abfec723de14edaee98
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue May 21 23:31:34 2024 -0700
+
+ Remove obsolete code.
+
+commit 652038f70d54f8fce993312063897b7d67e26649
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue May 21 23:21:00 2024 -0700
+
+ Avoid particular compile error if Int=int.
+
+commit 03916a9cd8a2cab8c6b8ebd48c4b9aa2be03a339
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue May 21 23:12:58 2024 -0700
+
+ Revert "Avoid particular compile error if Int=int."
+
+ This reverts commit 6e8222e13ad71b03376c84f259bf126944beb303.
+
+commit 8fbeeaa6bb7a84be36942b0622294391e46783de
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri May 17 16:03:19 2024 -0700
+
+ Fix documentation.
+
+commit 154a9d938d5c97aa75e83a88ef3de22444d422a5
+Author: Jouni K. Seppänen <jks@iki.fi>
+Date: Fri Apr 5 15:21:57 2024 +0300
+
+ Integrate with flycheck
+
+ Flycheck is the modern way to do on-the-fly syntax checking
+ and linting in Emacs: https://www.flycheck.org/en/latest/index.html
+
+ This adds a checker if flycheck is loaded. The checker uses the
+ user-defined asy command, with -noV to avoid creating a new viewer,
+ and a temporary file as the output target.
+
+commit 8371bce0828789ba8d991a3e57b5314fd9278bf6
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Mar 24 20:30:32 2024 -0700
+
+ Increment version to 2.90.
+
commit 92e96dde395fdb9707bd1bb9960e83146411ffa1
Author: John Bowman <bowman@ualberta.ca>
Date: Sat Mar 23 14:12:38 2024 -0700
@@ -34,6 +471,19 @@ Date: Sat Mar 23 13:58:31 2024 -0700
origin: "???"
commit: "???"
+commit 6e8222e13ad71b03376c84f259bf126944beb303
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Fri Mar 22 18:45:11 2024 -0700
+
+ Avoid particular compile error if Int=int.
+
+commit 63359273ebbd562fcd5f269eb08e5ce2d59bd1bf
+Merge: 4e0d0dcb d3f67352
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Fri Mar 22 09:26:47 2024 -0700
+
+ Merge branch 'template' of https://github.com/vectorgraphics/asymptote into template
+
commit 315ca8cbe34cee0b5079bd669060b568da7b342a
Author: John Bowman <bowman@ualberta.ca>
Date: Thu Mar 21 22:23:47 2024 -0700
@@ -42,6 +492,44 @@ Date: Thu Mar 21 22:23:47 2024 -0700
This reverts commit 12baa706a2162acd5a555af922105a4061fbd0f8.
+commit d3f67352cda9f7ad6cb52eb15b925ec594a923af
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Mar 21 22:21:43 2024 -0700
+
+ Update last revision.
+
+commit 719c11747ff45acd7f0cf4b8810b4170f74c3b90
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Mar 21 22:05:05 2024 -0700
+
+ Add templated import initialization test.
+
+commit 4e0d0dcb17b53f9a427154b0ac6775ed2ba8e2d7
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Thu Mar 21 20:12:38 2024 -0700
+
+ Mostly cosmetic changes.
+
+commit 84eceac38b494271aaf4063a8c568a3e9f46f20a
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Wed Mar 20 14:20:35 2024 -0700
+
+ Remove no-longer-needed workaround.
+
+commit a2f2984eeed93a70a148f49f1d5ce9ff4be9ddea
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Wed Mar 20 14:02:16 2024 -0700
+
+ Revert "Initialize structs declared within templated imports."
+
+ This reverts commit 12baa706a2162acd5a555af922105a4061fbd0f8.
+
+commit ce9a9ce520cebbc6ea508e12b53542a0d14a92ea
+Author: Charles Staats III <charles.staats.iii@gmail.com>
+Date: Wed Mar 20 14:01:37 2024 -0700
+
+ Add additional tests from datastructures branch.
+
commit 033715655b4165ba2d00aaf9640bfb9b505d593a
Merge: 2bc14502 de239a50
Author: Charles Staats III <charles.staats.iii@gmail.com>
diff --git a/graphics/asymptote/GUI/icons_rc.py b/graphics/asymptote/GUI/icons_rc.py
index ba173f94ff..8fca5b33ee 100644
--- a/graphics/asymptote/GUI/icons_rc.py
+++ b/graphics/asymptote/GUI/icons_rc.py
@@ -2,7 +2,7 @@
# Resource object code
#
-# Created by: The Resource Compiler for PyQt5 (Qt v5.15.12)
+# Created by: The Resource Compiler for PyQt5 (Qt v5.15.14)
#
# WARNING! All changes made in this file will be lost!
@@ -381,42 +381,42 @@ qt_resource_data = b"\
\x34\x2e\x36\x31\x33\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\
\x31\x38\x2e\x33\x35\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x02\x1c\
+\x00\x00\x02\x1f\
\x00\
-\x00\x07\x5c\x78\x9c\xdd\x55\x4d\x73\x9b\x30\x10\xbd\xf7\x57\x6c\
-\xa7\x07\x25\x07\x84\xbe\x10\x28\x13\x92\x99\x7a\xa6\xa7\xf4\x96\
-\x5c\x7a\xc3\x41\x80\x1a\x0c\x1e\xa0\xc6\xfd\xf7\x95\x6d\x49\x76\
-\x69\x33\xbd\xe4\xd0\x89\x0f\x98\xf7\x56\x6f\xd9\xb7\xcb\x0e\xb7\
-\xf7\xfb\x4d\x0b\x3b\x3d\x8c\xa6\xef\x72\x44\x31\x41\xa0\xbb\xe7\
-\xbe\x34\x5d\x9d\xa3\xa7\xc7\x2f\x51\x86\xee\xef\x3e\xdc\x7e\x8c\
-\x22\x78\x6c\xcc\x08\x95\x69\x35\xcc\xc5\x08\xb5\xee\xf4\x50\x4c\
-\xba\x84\xf5\x4f\x28\x77\x66\xdc\xd5\x1b\x60\x98\x52\x4c\x21\x8a\
-\xac\xc4\x12\x97\x89\x29\x02\xfb\xa8\x6e\xcc\x51\x33\x4d\xdb\x9b\
-\x38\x9e\xe7\x19\xcf\x1c\xf7\x43\x1d\x33\x42\x48\x6c\xcf\xbb\x23\
-\x37\xfb\xd6\x74\x2f\x7f\x3b\x48\x95\x52\xf1\x31\x8a\x60\x36\xe5\
-\xd4\xe4\x48\x72\x6c\x49\xb9\x9d\x10\x34\xda\xd4\xcd\x64\x29\x71\
-\x40\x3b\xa3\xe7\xcf\xfd\x3e\x47\x89\xc4\x82\x28\x01\x94\xa6\x38\
-\x4b\x32\x70\x0a\x90\x02\xd9\x32\x6b\x30\x65\x8e\xb6\x45\xad\xe9\
-\x09\x4e\x43\xd1\x8d\x55\x3f\x6c\x72\x74\xbc\x6d\xad\xc9\xab\x45\
-\x8e\xeb\xf1\xb9\x68\xf5\x95\xcd\x23\x99\x14\xd7\x07\xe1\xb6\x98\
-\x1a\xb0\x99\xbe\x82\xc2\x5c\xa4\x82\x81\x60\x38\x15\x29\x7b\x08\
-\x44\x22\x70\xa6\x98\xfc\x83\x58\x2d\x89\x7f\xe1\x0b\x81\xc2\x24\
-\x13\x0a\xa8\xc2\x89\xe0\x14\x24\xc3\x22\xe3\x02\xb8\x9d\x04\xf3\
-\x68\x05\x42\x60\xa9\xa4\x0a\x61\x9f\xd7\xcb\x03\xf6\x15\xbe\x4a\
-\x04\x53\x9e\xe0\x04\x4b\x42\xb3\x55\x20\xd8\xb1\x55\x49\x78\x26\
-\xe3\x98\x50\xea\x2a\x3a\x81\x55\xa8\xd7\x05\xbd\x1d\xaf\xf5\xd8\
-\x25\x7f\x58\xf6\xf4\x1b\x3a\xbc\x88\x6d\x8e\x3e\xad\xab\x75\x55\
-\x55\x28\xb6\x13\x88\xeb\xb7\x99\x5f\x30\x22\x70\xc2\x14\xbd\x70\
-\x46\x30\xe7\x32\x0b\xce\xa8\xc4\x8a\x67\xdc\x59\x73\xe8\xec\xcd\
-\x87\x83\x39\x27\x0f\xd8\xe7\x0f\x44\x86\x53\x46\x93\x90\xe0\x94\
-\xf7\xe2\x7a\x1e\xe4\x89\x0c\x85\x39\xe1\xa2\xf2\xd0\xa5\xae\xef\
-\x34\x82\x71\x1a\xfa\x17\x6d\x7b\x46\x8e\x3f\x4f\x44\x76\x9d\xf4\
-\x73\xb1\xcd\xd1\xd0\xff\xe8\xca\xdf\xe8\xef\xbd\xe9\x96\xfc\xc6\
-\x4c\x7a\x68\x8d\xfd\xb3\x6b\x4d\x30\xe1\x69\x12\x62\x6e\x27\x39\
-\x4e\x28\xa7\xec\x4d\xa7\xb2\xe8\xda\xfb\xda\x2a\x67\xea\x3d\xcd\
-\xeb\xd5\x2d\xb2\x5f\x08\x95\x30\x76\xde\x22\x9c\x26\x32\x91\x7e\
-\x8b\x4e\xe8\x62\x8b\x5c\xd8\xcf\xc6\xcb\x17\xef\xc3\x7f\xd3\xba\
-\xd3\xc5\x7e\xcc\xee\x7e\x01\xb3\x30\xdb\xa9\
+\x00\x07\x5c\x78\x9c\xdd\x53\x3d\x6f\xdb\x30\x10\xdd\xfd\x2b\xae\
+\xc8\xc0\x64\xf0\x89\x5f\xa2\xc4\xc0\x74\x80\x1a\xe8\x94\x6e\xc9\
+\xd2\x4d\xb6\x68\x99\x8d\x2c\x19\x92\x2a\xb9\xff\xbe\x88\x2d\xd2\
+\xae\xda\xa0\x4b\x86\x22\x1a\x08\xbd\x77\x7a\xa7\x7b\x77\xbc\xc5\
+\xc3\x71\x5f\x42\x6f\x9b\xd6\xd5\x95\x21\x0c\x29\x01\x5b\x6d\xea\
+\xdc\x55\x85\x21\xcf\x4f\x5f\xe6\x29\x79\x58\xce\x16\x9f\xe6\x73\
+\x78\xda\xb9\x16\xb6\xae\xb4\x30\x64\x2d\x14\xb6\xb2\x4d\xd6\xd9\
+\x1c\xd6\x3f\x21\xef\x5d\xdb\x17\x7b\xe0\xc8\x18\x32\x98\xcf\x97\
+\xb3\x45\xdb\x17\xd7\x89\x19\x81\xe3\xbe\xac\x5a\x43\x76\x5d\x77\
+\xb8\x8f\xa2\x61\x18\x70\x10\x58\x37\x45\xc4\x29\xa5\x51\xdb\x17\
+\xe3\x27\xf7\xc7\xd2\x55\x2f\x7f\xfb\x90\x69\xad\xa3\x53\x94\xc0\
+\xe0\xf2\x6e\x67\x88\x12\xa8\xb5\x56\x87\x8e\xc0\xce\xba\x62\xd7\
+\x19\xa2\xe4\x2b\xea\x9d\x1d\x3e\xd7\x47\x43\x62\x85\x92\x6a\x09\
+\x8c\x25\x98\xc6\x29\x8c\x0a\x50\x92\x2c\x67\x8b\x02\x5c\x6e\xc8\
+\x21\x2b\x2c\x3b\xc3\xae\xc9\xaa\x76\x5b\x37\x7b\x43\x4e\xaf\x65\
+\xd6\xd9\xdb\x49\x8e\xbb\x76\x93\x95\xf6\x16\xb5\x56\x5c\xc9\xbb\
+\x57\xe1\x21\xeb\x76\x90\x1b\xf2\x15\x34\x0a\x99\x48\x0e\x92\x63\
+\x22\x13\xfe\x18\x88\x58\x62\xaa\xb9\xfa\x83\x58\x4d\x89\x7f\xe1\
+\x2b\x81\x46\x9a\x4a\x0d\x4c\x63\x2c\x05\x03\xc5\x51\xa6\x42\x82\
+\xe0\xc8\xb8\x47\x2b\x90\x12\x95\x56\x3a\x84\x7d\x5e\x2f\x0f\xd8\
+\x57\xf8\x26\x11\x4c\x79\x42\x50\x54\x94\xa5\xab\x40\xf0\x53\xab\
+\xe2\xf0\x4f\x2e\x90\x32\x36\x56\x74\x06\xab\x50\xef\x18\xf4\x76\
+\xbc\xd6\xe3\x31\xf9\xe3\xb4\xa7\xdf\xc8\xeb\x45\x2c\x0d\xb9\x59\
+\x6f\xd7\xdb\xed\x96\x44\xcb\xd9\x22\x2a\xde\x67\x7e\xc1\x88\xc4\
+\x98\x6b\x76\xe5\x8c\xa2\x10\x2a\x0d\xce\x98\x42\x2d\x52\x31\x5a\
+\x1b\xd1\xc5\x9b\x0f\x07\x73\xa3\x3c\x60\x9f\x3f\x10\x29\x26\x9c\
+\xc5\x21\xc1\x39\xef\xd5\x79\x19\xe4\x99\x0c\x85\x8d\xc2\x49\xe5\
+\xa1\x4b\x55\x5d\x59\x02\x6d\xd7\xd4\x2f\xd6\x90\x1b\x7a\x7a\x3c\
+\x31\x2f\x5d\x65\x37\xd9\xc1\x90\xa6\xfe\x51\xe5\xbf\xd1\xdf\x6b\
+\x57\x4d\xf9\xbd\xeb\x6c\x53\xba\xbd\xeb\x0c\x61\x14\xa9\x48\xe2\
+\x10\x1b\x77\x52\x60\xcc\x04\xe3\xef\x3a\x95\x49\xd7\x3e\xd6\x56\
+\x8d\xa6\x3e\xd2\xbc\xde\xdc\x22\xc6\x50\xc7\x9c\x5f\xb6\x08\x93\
+\x58\xc5\xca\x6f\xd1\x19\x5d\x6d\xd1\x18\xf6\xb3\xf1\xf2\xc9\x7d\
+\xf8\x6f\x5a\x77\x3e\xda\xbe\x58\xfe\x02\xb3\x30\xdb\xa9\
\x00\x00\x03\x2a\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -1468,38 +1468,38 @@ qt_resource_data = b"\
\x30\x36\x20\x34\x31\x36\x2c\x31\x31\x30\x20\x09\x09\x09\x22\x2f\
\x3e\x0a\x09\x09\x3c\x2f\x67\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\
\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x01\xd8\
+\x00\x00\x01\xdd\
\x00\
-\x00\x06\xc4\x78\x9c\xcd\x54\x4d\x6f\x9b\x40\x10\x3d\xe3\x5f\x31\
-\xdd\x5b\x25\xf6\x0b\x62\x62\x53\xe3\xa8\xfe\x90\x65\x29\x6d\x2d\
-\x35\x75\xd5\x53\x85\x61\x0b\x28\x14\x10\x2c\x60\xe7\xd7\x77\x77\
-\xed\x54\xa9\x14\x5f\x43\x0f\x3b\xab\x9d\x79\xf3\xe6\x0d\x4f\x62\
-\x76\x77\xfc\x9d\x43\x27\xea\x26\x2b\x8b\x00\x71\xc2\x10\x88\x22\
-\x2a\xe3\xac\x48\x02\xd4\xca\x5f\x78\x82\xee\xe6\xa3\xd9\x3b\x8c\
-\x61\x23\x0a\x51\x87\xb2\xac\x7d\xf8\x18\x97\x07\x01\xdb\x3c\x6f\
-\x1b\x69\x52\xc0\x3d\xe2\x10\x6e\xc3\xd7\xfd\x06\xd6\xc7\xaa\xac\
-\x25\xec\xf2\x36\xc1\xdb\x02\x88\x49\xee\xcf\x33\x7c\xf0\x08\x63\
-\xb0\x68\xb3\x3c\x06\xf6\x1e\x00\x63\x4d\xbf\xfa\xb2\x7c\xf8\xb1\
-\x5b\x43\xd3\x25\xb0\xfb\xb6\xb8\xdf\x2e\x01\x61\x4a\xbf\xbb\x4b\
-\x4a\x57\x0f\x2b\xc3\xc0\x09\xa7\x74\xfd\x19\x01\x4a\xa5\xac\x7c\
-\x4a\xfb\xbe\x27\xbd\x4b\xca\x3a\xa1\x9b\x3a\xac\xd2\x2c\x6a\xa8\
-\x02\x52\x0d\x54\x4d\x54\x91\x71\x4e\x62\x19\x23\x35\x42\x33\xbf\
-\xd8\x93\x23\xc8\xe2\x00\xdd\x87\x27\x51\xff\x54\x0f\xf5\x19\x8a\
-\x26\x78\x85\xd9\x61\x8c\x69\xa6\x0b\xc4\x3f\xe6\x59\xf1\xf8\x1a\
-\x90\x4f\xa7\x53\x6a\xaa\x0a\x1a\x20\x56\x1d\x11\x9c\xce\xf7\xc8\
-\x82\x3e\x8b\x65\x1a\xa0\x31\x77\x74\x3e\x15\x59\x92\xca\xbf\xcf\
-\x2e\x13\xfd\xa2\xd4\x4d\xc0\x40\xe5\xf4\x41\xd0\xc8\x53\x2e\x02\
-\x24\x8a\xf0\x90\x0b\x7c\x08\xa3\xc7\xa4\x2e\xdb\x22\xf6\x0b\xd1\
-\xc3\x0b\xe4\x07\x23\xcd\x6f\xaa\x30\x52\xf0\xaa\x16\x8d\xa8\x3b\
-\xa1\x77\x4e\xe6\x23\xcb\x04\x6b\x56\x85\x32\x05\xb5\xf0\x27\xee\
-\x31\x9b\x8f\x5d\xe2\x46\xcc\x76\xc9\x2d\x76\x6d\x4f\x45\x75\xf4\
-\x9d\xe2\x31\x23\xe3\x08\xab\x82\xcd\x74\x12\xbb\xf8\x52\xee\xce\
-\x25\x66\x6a\xee\x73\x83\xbe\x53\x53\x30\x2d\x3a\x65\x1b\x46\x7d\
-\xf6\x66\xce\x93\x5a\xdf\xb2\xe8\xbf\x2a\x9c\xc9\xe4\x3f\x50\x71\
-\xc3\xbd\xa1\x54\xcc\xe8\x35\x73\x9c\x09\x7f\x13\x41\x66\xce\x55\
-\x73\x86\x57\xa1\xcd\x19\x48\xc5\x75\x73\x6e\xd8\xf4\x4d\x04\x99\
-\x39\x57\xcd\x19\x5e\x85\x36\x67\x20\x15\xc6\x9c\x4b\x50\xff\xe5\
-\xf9\xe8\x0f\x44\x1a\x94\x79\
+\x00\x06\xc4\x78\x9c\xcd\x51\x4d\x8f\x9b\x30\x14\x3c\xc3\xaf\x78\
+\xf5\xad\x12\xfe\x82\x85\x24\x14\xb2\x6a\x3e\x14\x45\xda\xb6\x91\
+\x36\x4d\xd5\x53\x45\xc0\x05\xb4\x2c\x20\x70\x80\xf4\xd7\x57\x76\
+\xd2\x6a\x2b\x6d\xae\x4b\x0f\xf6\x93\x67\xde\x9b\x37\xd6\x04\xf7\
+\xc3\x73\x01\x9d\x68\xda\xbc\x2a\x43\xc4\x09\x43\x20\xca\xb8\x4a\
+\xf2\x32\x0d\xd1\x49\xfe\xc4\x53\x74\x3f\x37\x83\x77\x18\xc3\x46\
+\x94\xa2\x89\x64\xd5\xf8\xf0\x31\xa9\x8e\x02\xb6\x45\x71\x6a\xa5\
+\x86\x80\x7b\xc4\x26\xdc\x82\xc7\xc3\x06\xd6\x43\x5d\x35\x12\x76\
+\xc5\x29\xc5\xdb\x12\x88\x06\x0f\x97\x1d\x3e\x78\x84\x31\x58\x9c\
+\xf2\x22\x01\xf6\x1e\x00\x63\x25\xbf\xfa\xb2\xdc\x7f\xdf\xad\xa1\
+\xed\x52\xd8\x7d\x5d\x3c\x6c\x97\x80\x30\xa5\xdf\x9c\x25\xa5\xab\
+\xfd\x4a\x2b\x70\xc2\x29\x5d\x7f\x46\x80\x32\x29\x6b\x9f\xd2\xbe\
+\xef\x49\xef\x90\xaa\x49\xe9\xa6\x89\xea\x2c\x8f\x5b\xfa\x78\xd8\
+\x50\xd5\xb8\xda\xaf\x68\xdb\xa5\x9c\x93\x44\x26\x68\x6e\x06\x4a\
+\xf9\xc5\x3f\x39\x82\x3c\x09\xd1\x43\x74\x16\xcd\x0f\x8e\x60\x78\
+\x2e\xca\x36\x7c\x45\xd9\x66\x8c\x29\xa5\x6b\x8b\x3f\x14\x79\xf9\
+\xf4\x5a\x23\x9f\xcd\x66\x54\xb3\x08\x86\x10\xb1\x7a\x40\x70\xbe\
+\x54\xd3\x80\x3e\x4f\x64\x16\x22\x97\xdb\x0a\xcf\x44\x9e\x66\xf2\
+\xef\xb3\xcb\x45\xbf\xa8\xd4\x10\x30\x70\xb9\xad\x0e\x82\x56\x9e\
+\x0b\x11\x22\x51\x46\xc7\x42\xe0\x63\x14\x3f\xa5\x4d\x75\x2a\x13\
+\xbf\x14\x3d\xbc\xe8\xfc\xa0\xad\xf9\x6d\x1d\xc5\x22\x44\x75\x23\
+\x5a\xd1\x74\x42\xfd\x39\x9d\x9b\x86\xbe\x8c\xa0\x8e\x64\x06\x49\
+\x88\x3e\x71\x8f\x59\xdc\x75\x88\x13\x33\xcb\x21\x13\xec\x58\x1e\
+\x99\x60\x8f\x4c\x54\xcd\xb0\xcb\x88\x1b\x63\x87\x4c\x2c\xa6\x40\
+\xec\xe0\x2b\xdd\x5d\x28\xa6\x39\xe7\xcf\x80\xaa\x99\x26\xf4\x88\
+\x82\x2c\xad\xa8\xce\x41\xef\xf9\x85\x4c\xc3\x30\xe8\xbf\x2e\xec\
+\xe9\xf4\x3f\x70\x71\xc7\xbd\xb1\x5c\x04\xf4\x56\x38\xf6\x94\xbf\
+\x89\x21\xbd\xe7\x66\x38\xe3\xbb\x50\xe1\x8c\xe4\xe2\x76\x38\x77\
+\x6c\xf6\x26\x86\xf4\x9e\x9b\xe1\x8c\xef\x42\x85\x33\x92\x0b\x1d\
+\xce\xf5\x6a\xbb\x74\x6e\xfe\x06\x44\x1a\x94\x79\
\x00\x00\x03\x3d\
\x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -2751,44 +2751,44 @@ qt_resource_struct_v1 = b"\
\x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x85\
\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x12\xa4\
\x00\x00\x00\xee\x00\x01\x00\x00\x00\x01\x00\x00\x16\x90\
-\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x00\x18\xb0\
-\x00\x00\x01\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xde\
-\x00\x00\x01\x54\x00\x00\x00\x00\x00\x01\x00\x00\x1f\xf9\
-\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\x24\xa0\
-\x00\x00\x01\x98\x00\x00\x00\x00\x00\x01\x00\x00\x29\x17\
-\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\x2d\xb7\
-\x00\x00\x01\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x30\x7c\
-\x00\x00\x02\x04\x00\x00\x00\x00\x00\x01\x00\x00\x35\x4a\
-\x00\x00\x02\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x3b\x09\
-\x00\x00\x02\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xe6\
-\x00\x00\x02\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x42\xfd\
-\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x46\x49\
-\x00\x00\x02\xec\x00\x00\x00\x00\x00\x01\x00\x00\x48\xe5\
-\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x00\x4b\xff\
-\x00\x00\x03\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x50\x01\
-\x00\x00\x03\x7a\x00\x00\x00\x00\x00\x01\x00\x00\x52\xf5\
-\x00\x00\x03\x90\x00\x00\x00\x00\x00\x01\x00\x00\x55\x90\
-\x00\x00\x03\xb6\x00\x01\x00\x00\x00\x01\x00\x00\x58\x00\
-\x00\x00\x03\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x59\xdc\
-\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x5d\x1d\
-\x00\x00\x04\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x60\x08\
-\x00\x00\x04\x42\x00\x00\x00\x00\x00\x01\x00\x00\x62\x7e\
-\x00\x00\x04\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x65\xdc\
-\x00\x00\x04\x72\x00\x00\x00\x00\x00\x01\x00\x00\x69\x3f\
-\x00\x00\x04\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x6c\x46\
-\x00\x00\x04\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x70\x8c\
-\x00\x00\x04\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x73\x07\
-\x00\x00\x04\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x77\x5f\
-\x00\x00\x05\x08\x00\x00\x00\x00\x00\x01\x00\x00\x7b\x3d\
-\x00\x00\x05\x30\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x63\
-\x00\x00\x05\x58\x00\x00\x00\x00\x00\x01\x00\x00\x82\x12\
-\x00\x00\x05\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x83\x32\
-\x00\x00\x05\x82\x00\x00\x00\x00\x00\x01\x00\x00\x87\x12\
-\x00\x00\x05\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x8a\x55\
-\x00\x00\x05\xd8\x00\x00\x00\x00\x00\x01\x00\x00\x8b\xc2\
-\x00\x00\x06\x06\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x7d\
-\x00\x00\x06\x36\x00\x00\x00\x00\x00\x01\x00\x00\x8f\xed\
-\x00\x00\x06\x58\x00\x00\x00\x00\x00\x01\x00\x00\x92\xdf\
+\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x00\x18\xb3\
+\x00\x00\x01\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xe1\
+\x00\x00\x01\x54\x00\x00\x00\x00\x00\x01\x00\x00\x1f\xfc\
+\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\x24\xa3\
+\x00\x00\x01\x98\x00\x00\x00\x00\x00\x01\x00\x00\x29\x1a\
+\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\x2d\xba\
+\x00\x00\x01\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x30\x7f\
+\x00\x00\x02\x04\x00\x00\x00\x00\x00\x01\x00\x00\x35\x4d\
+\x00\x00\x02\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x3b\x0c\
+\x00\x00\x02\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xe9\
+\x00\x00\x02\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x43\x00\
+\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x46\x4c\
+\x00\x00\x02\xec\x00\x00\x00\x00\x00\x01\x00\x00\x48\xe8\
+\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x00\x4c\x02\
+\x00\x00\x03\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x50\x04\
+\x00\x00\x03\x7a\x00\x00\x00\x00\x00\x01\x00\x00\x52\xf8\
+\x00\x00\x03\x90\x00\x00\x00\x00\x00\x01\x00\x00\x55\x93\
+\x00\x00\x03\xb6\x00\x01\x00\x00\x00\x01\x00\x00\x58\x03\
+\x00\x00\x03\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x59\xe4\
+\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x5d\x25\
+\x00\x00\x04\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x60\x10\
+\x00\x00\x04\x42\x00\x00\x00\x00\x00\x01\x00\x00\x62\x86\
+\x00\x00\x04\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x65\xe4\
+\x00\x00\x04\x72\x00\x00\x00\x00\x00\x01\x00\x00\x69\x47\
+\x00\x00\x04\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x6c\x4e\
+\x00\x00\x04\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x70\x94\
+\x00\x00\x04\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x73\x0f\
+\x00\x00\x04\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x77\x67\
+\x00\x00\x05\x08\x00\x00\x00\x00\x00\x01\x00\x00\x7b\x45\
+\x00\x00\x05\x30\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x6b\
+\x00\x00\x05\x58\x00\x00\x00\x00\x00\x01\x00\x00\x82\x1a\
+\x00\x00\x05\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x83\x3a\
+\x00\x00\x05\x82\x00\x00\x00\x00\x00\x01\x00\x00\x87\x1a\
+\x00\x00\x05\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x8a\x5d\
+\x00\x00\x05\xd8\x00\x00\x00\x00\x00\x01\x00\x00\x8b\xca\
+\x00\x00\x06\x06\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x85\
+\x00\x00\x06\x36\x00\x00\x00\x00\x00\x01\x00\x00\x8f\xf5\
+\x00\x00\x06\x58\x00\x00\x00\x00\x00\x01\x00\x00\x92\xe7\
"
qt_resource_struct_v2 = b"\
@@ -2797,93 +2797,93 @@ qt_resource_struct_v2 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x2c\x00\x00\x00\x02\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2d\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
\x00\x00\x00\x38\x00\x00\x00\x00\x00\x01\x00\x00\x07\x6f\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2b\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
\x00\x00\x00\x52\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x0f\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2a\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6d\
\x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x85\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2b\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x12\xa4\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2b\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
\x00\x00\x00\xee\x00\x01\x00\x00\x00\x01\x00\x00\x16\x90\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2c\
-\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x00\x18\xb0\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2a\
-\x00\x00\x01\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xde\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2d\
-\x00\x00\x01\x54\x00\x00\x00\x00\x00\x01\x00\x00\x1f\xf9\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2c\
-\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\x24\xa0\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2c\
-\x00\x00\x01\x98\x00\x00\x00\x00\x00\x01\x00\x00\x29\x17\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2c\
-\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\x2d\xb7\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2b\
-\x00\x00\x01\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x30\x7c\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2d\
-\x00\x00\x02\x04\x00\x00\x00\x00\x00\x01\x00\x00\x35\x4a\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2a\
-\x00\x00\x02\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x3b\x09\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2b\
-\x00\x00\x02\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xe6\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2c\
-\x00\x00\x02\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x42\xfd\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2a\
-\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x46\x49\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2a\
-\x00\x00\x02\xec\x00\x00\x00\x00\x00\x01\x00\x00\x48\xe5\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2a\
-\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x00\x4b\xff\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2b\
-\x00\x00\x03\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x50\x01\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2a\
-\x00\x00\x03\x7a\x00\x00\x00\x00\x00\x01\x00\x00\x52\xf5\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2d\
-\x00\x00\x03\x90\x00\x00\x00\x00\x00\x01\x00\x00\x55\x90\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2a\
-\x00\x00\x03\xb6\x00\x01\x00\x00\x00\x01\x00\x00\x58\x00\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2c\
-\x00\x00\x03\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x59\xdc\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2c\
-\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x5d\x1d\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2c\
-\x00\x00\x04\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x60\x08\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2a\
-\x00\x00\x04\x42\x00\x00\x00\x00\x00\x01\x00\x00\x62\x7e\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2b\
-\x00\x00\x04\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x65\xdc\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2c\
-\x00\x00\x04\x72\x00\x00\x00\x00\x00\x01\x00\x00\x69\x3f\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2b\
-\x00\x00\x04\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x6c\x46\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2c\
-\x00\x00\x04\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x70\x8c\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2b\
-\x00\x00\x04\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x73\x07\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2a\
-\x00\x00\x04\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x77\x5f\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2b\
-\x00\x00\x05\x08\x00\x00\x00\x00\x00\x01\x00\x00\x7b\x3d\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2c\
-\x00\x00\x05\x30\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x63\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2a\
-\x00\x00\x05\x58\x00\x00\x00\x00\x00\x01\x00\x00\x82\x12\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2d\
-\x00\x00\x05\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x83\x32\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2c\
-\x00\x00\x05\x82\x00\x00\x00\x00\x00\x01\x00\x00\x87\x12\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2b\
-\x00\x00\x05\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x8a\x55\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2a\
-\x00\x00\x05\xd8\x00\x00\x00\x00\x00\x01\x00\x00\x8b\xc2\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2c\
-\x00\x00\x06\x06\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x7d\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2d\
-\x00\x00\x06\x36\x00\x00\x00\x00\x00\x01\x00\x00\x8f\xed\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2c\
-\x00\x00\x06\x58\x00\x00\x00\x00\x00\x01\x00\x00\x92\xdf\
-\x00\x00\x01\x8e\x6d\x38\xcc\x2a\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x00\x18\xb3\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xe1\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x54\x00\x00\x00\x00\x00\x01\x00\x00\x1f\xfc\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\x24\xa3\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x98\x00\x00\x00\x00\x00\x01\x00\x00\x29\x1a\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\x2d\xba\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x30\x7f\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x02\x04\x00\x00\x00\x00\x00\x01\x00\x00\x35\x4d\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x02\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x3b\x0c\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x02\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xe9\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x02\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x43\x00\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x46\x4c\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x02\xec\x00\x00\x00\x00\x00\x01\x00\x00\x48\xe8\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6d\
+\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x00\x4c\x02\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x03\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x50\x04\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x03\x7a\x00\x00\x00\x00\x00\x01\x00\x00\x52\xf8\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x03\x90\x00\x00\x00\x00\x00\x01\x00\x00\x55\x93\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x03\xb6\x00\x01\x00\x00\x00\x01\x00\x00\x58\x03\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x03\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x59\xe4\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x5d\x25\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x04\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x60\x10\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6d\
+\x00\x00\x04\x42\x00\x00\x00\x00\x00\x01\x00\x00\x62\x86\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x04\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x65\xe4\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x04\x72\x00\x00\x00\x00\x00\x01\x00\x00\x69\x47\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x04\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x6c\x4e\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x04\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x70\x94\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x04\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x73\x0f\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x04\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x77\x67\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x05\x08\x00\x00\x00\x00\x00\x01\x00\x00\x7b\x45\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x05\x30\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x6b\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6d\
+\x00\x00\x05\x58\x00\x00\x00\x00\x00\x01\x00\x00\x82\x1a\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x05\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x83\x3a\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x05\x82\x00\x00\x00\x00\x00\x01\x00\x00\x87\x1a\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x05\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x8a\x5d\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6d\
+\x00\x00\x05\xd8\x00\x00\x00\x00\x00\x01\x00\x00\x8b\xca\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x06\x06\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x85\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x06\x36\x00\x00\x00\x00\x00\x01\x00\x00\x8f\xf5\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x06\x58\x00\x00\x00\x00\x00\x01\x00\x00\x92\xe7\
+\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
"
qt_version = [int(v) for v in QtCore.qVersion().split('.')]
diff --git a/graphics/asymptote/INSTALL b/graphics/asymptote/INSTALL
index 602c338363..f4e0dd8937 100644
--- a/graphics/asymptote/INSTALL
+++ b/graphics/asymptote/INSTALL
@@ -30,7 +30,7 @@ Compiling Asymptote from Git Developmental Source Code
To compile from Git developmental source code:
-git clone http://github.com/vectorgraphics/asymptote
+git clone https://github.com/vectorgraphics/asymptote
cd asymptote
./autogen.sh
./configure
@@ -40,12 +40,12 @@ make install
Optional packages:
* Fast Fourier Transform library
- http://www.fftw.org/
+ https://www.fftw.org/
Version requirement >= 3.0
* The GNU Scientific Library for numerical analysis:
- http://www.gnu.org/software/gsl/
+ https://www.gnu.org/software/gsl/
*****************************************
Generic Configure Instructions (advanced)
diff --git a/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/CMakeDirectoryInformation.cmake b/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/CMakeDirectoryInformation.cmake
index 668314bb71..10947361b6 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/CMakeDirectoryInformation.cmake
+++ b/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/CMakeDirectoryInformation.cmake
@@ -1,9 +1,9 @@
# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.27
+# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Relative path conversion top directories.
-set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/usr/local/src/asymptote-2.89/LspCpp")
-set(CMAKE_RELATIVE_PATH_TOP_BINARY "/usr/local/src/asymptote-2.89/LspCpp")
+set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/usr/local/src/asymptote-2.90/LspCpp")
+set(CMAKE_RELATIVE_PATH_TOP_BINARY "/usr/local/src/asymptote-2.90/LspCpp")
# Force unix paths in dependencies.
set(CMAKE_FORCE_UNIX_PATHS 1)
diff --git a/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/DependInfo.cmake b/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/DependInfo.cmake
index 45a25b7803..29b95a515e 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/DependInfo.cmake
+++ b/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/DependInfo.cmake
@@ -14,5 +14,9 @@ set(CMAKE_DEPENDS_DEPENDENCY_FILES
set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES
)
+# Targets to which this target links which contain Fortran sources.
+set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES
+ )
+
# Fortran module output directory.
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
diff --git a/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/build.make b/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/build.make
index 68ff539b12..cd14a44b53 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/build.make
+++ b/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/build.make
@@ -1,5 +1,5 @@
# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.27
+# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Delete rule output on recipe failure.
.DELETE_ON_ERROR:
@@ -56,10 +56,10 @@ RM = /usr/bin/cmake -E rm -f
EQUALS = =
# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.89/LspCpp
+CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.90/LspCpp
# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.89/LspCpp
+CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.90/LspCpp
# Utility rule file for doc.
@@ -70,8 +70,8 @@ include third_party/uri/CMakeFiles/doc.dir/compiler_depend.make
include third_party/uri/CMakeFiles/doc.dir/progress.make
third_party/uri/CMakeFiles/doc:
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir=/usr/local/src/asymptote-2.89/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generating API documentation with Doxygen"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri && /bin/doxygen /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/Doxyfile
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generating API documentation with Doxygen"
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri && /bin/doxygen /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/Doxyfile
doc: third_party/uri/CMakeFiles/doc
doc: third_party/uri/CMakeFiles/doc.dir/build.make
@@ -82,10 +82,10 @@ third_party/uri/CMakeFiles/doc.dir/build: doc
.PHONY : third_party/uri/CMakeFiles/doc.dir/build
third_party/uri/CMakeFiles/doc.dir/clean:
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri && $(CMAKE_COMMAND) -P CMakeFiles/doc.dir/cmake_clean.cmake
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri && $(CMAKE_COMMAND) -P CMakeFiles/doc.dir/cmake_clean.cmake
.PHONY : third_party/uri/CMakeFiles/doc.dir/clean
third_party/uri/CMakeFiles/doc.dir/depend:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /usr/local/src/asymptote-2.89/LspCpp /usr/local/src/asymptote-2.89/LspCpp/third_party/uri /usr/local/src/asymptote-2.89/LspCpp /usr/local/src/asymptote-2.89/LspCpp/third_party/uri /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/CMakeFiles/doc.dir/DependInfo.cmake "--color=$(COLOR)"
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /usr/local/src/asymptote-2.90/LspCpp /usr/local/src/asymptote-2.90/LspCpp/third_party/uri /usr/local/src/asymptote-2.90/LspCpp /usr/local/src/asymptote-2.90/LspCpp/third_party/uri /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/CMakeFiles/doc.dir/DependInfo.cmake "--color=$(COLOR)"
.PHONY : third_party/uri/CMakeFiles/doc.dir/depend
diff --git a/graphics/asymptote/LspCpp/third_party/uri/Doxyfile b/graphics/asymptote/LspCpp/third_party/uri/Doxyfile
index 056a61bbb1..d5d97f4b56 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/Doxyfile
+++ b/graphics/asymptote/LspCpp/third_party/uri/Doxyfile
@@ -128,7 +128,7 @@ FULL_PATH_NAMES = YES
# If left blank the directory from which doxygen is run is used as the
# path to strip.
-STRIP_FROM_PATH = /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/
+STRIP_FROM_PATH = /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
# the path mentioned in the documentation of a class, which tells
@@ -626,7 +626,7 @@ WARN_LOGFILE =
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
-INPUT = /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include
+INPUT = /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
@@ -658,7 +658,7 @@ RECURSIVE = YES
# Note that relative paths are relative to the directory from which doxygen is
# run.
-EXCLUDE = /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail
+EXCLUDE = /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
@@ -821,7 +821,7 @@ COLS_IN_ALPHA_INDEX = 5
# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
# should be ignored while generating the index headers.
-IGNORE_PREFIX = /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/uri/src/
+IGNORE_PREFIX = /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/uri/src/
#---------------------------------------------------------------------------
# configuration options related to the HTML output
diff --git a/graphics/asymptote/LspCpp/third_party/uri/Makefile b/graphics/asymptote/LspCpp/third_party/uri/Makefile
index a9bce1ebf0..508a0f8b29 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/Makefile
+++ b/graphics/asymptote/LspCpp/third_party/uri/Makefile
@@ -1,5 +1,5 @@
# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.27
+# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Default target executed when no arguments are given to make.
default_target: all
@@ -60,10 +60,10 @@ RM = /usr/bin/cmake -E rm -f
EQUALS = =
# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.89/LspCpp
+CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.90/LspCpp
# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.89/LspCpp
+CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.90/LspCpp
#=============================================================================
# Targets provided globally by CMake.
@@ -135,14 +135,14 @@ install/strip/fast: preinstall/fast
# The main all target
all: cmake_check_build_system
- cd /usr/local/src/asymptote-2.89/LspCpp && $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.89/LspCpp/CMakeFiles /usr/local/src/asymptote-2.89/LspCpp/third_party/uri//CMakeFiles/progress.marks
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/all
- $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.89/LspCpp/CMakeFiles 0
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.90/LspCpp/CMakeFiles /usr/local/src/asymptote-2.90/LspCpp/third_party/uri//CMakeFiles/progress.marks
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.90/LspCpp/CMakeFiles 0
.PHONY : all
# The main clean target
clean:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/clean
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/clean
.PHONY : clean
# The main clean target
@@ -151,22 +151,22 @@ clean/fast: clean
# Prepare targets for installation.
preinstall: all
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/preinstall
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/preinstall
.PHONY : preinstall
# Prepare targets for installation.
preinstall/fast:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/preinstall
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/preinstall
.PHONY : preinstall/fast
# clear depends
depend:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
.PHONY : depend
# Convenience name for target.
third_party/uri/CMakeFiles/doc.dir/rule:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/CMakeFiles/doc.dir/rule
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/CMakeFiles/doc.dir/rule
.PHONY : third_party/uri/CMakeFiles/doc.dir/rule
# Convenience name for target.
@@ -175,7 +175,7 @@ doc: third_party/uri/CMakeFiles/doc.dir/rule
# fast build rule for target.
doc/fast:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/CMakeFiles/doc.dir/build.make third_party/uri/CMakeFiles/doc.dir/build
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/CMakeFiles/doc.dir/build.make third_party/uri/CMakeFiles/doc.dir/build
.PHONY : doc/fast
# Help Target
@@ -202,6 +202,6 @@ help:
# No rule that depends on this can have commands that come from listfiles
# because they might be regenerated.
cmake_check_build_system:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
.PHONY : cmake_check_build_system
diff --git a/graphics/asymptote/LspCpp/third_party/uri/cmake_install.cmake b/graphics/asymptote/LspCpp/third_party/uri/cmake_install.cmake
index 8a2139f497..b0d4be5b79 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/cmake_install.cmake
+++ b/graphics/asymptote/LspCpp/third_party/uri/cmake_install.cmake
@@ -1,4 +1,4 @@
-# Install script for directory: /usr/local/src/asymptote-2.89/LspCpp/third_party/uri
+# Install script for directory: /usr/local/src/asymptote-2.90/LspCpp/third_party/uri
# Set the install prefix
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
@@ -43,12 +43,12 @@ if(NOT DEFINED CMAKE_OBJDUMP)
endif()
if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT)
- file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/." TYPE DIRECTORY FILES "/usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include")
+ file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/." TYPE DIRECTORY FILES "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include")
endif()
if(NOT CMAKE_INSTALL_LOCAL_ONLY)
# Include the install script for each subdirectory.
- include("/usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/cmake_install.cmake")
+ include("/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/cmake_install.cmake")
endif()
diff --git a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/CMakeDirectoryInformation.cmake b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/CMakeDirectoryInformation.cmake
index 668314bb71..10947361b6 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/CMakeDirectoryInformation.cmake
+++ b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/CMakeDirectoryInformation.cmake
@@ -1,9 +1,9 @@
# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.27
+# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Relative path conversion top directories.
-set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/usr/local/src/asymptote-2.89/LspCpp")
-set(CMAKE_RELATIVE_PATH_TOP_BINARY "/usr/local/src/asymptote-2.89/LspCpp")
+set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/usr/local/src/asymptote-2.90/LspCpp")
+set(CMAKE_RELATIVE_PATH_TOP_BINARY "/usr/local/src/asymptote-2.90/LspCpp")
# Force unix paths in dependencies.
set(CMAKE_FORCE_UNIX_PATHS 1)
diff --git a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/DependInfo.cmake b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/DependInfo.cmake
index 98d4213d2b..594e10e458 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/DependInfo.cmake
+++ b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/DependInfo.cmake
@@ -8,19 +8,23 @@ set(CMAKE_DEPENDS_LANGUAGES
# The set of dependency files which are needed:
set(CMAKE_DEPENDS_DEPENDENCY_FILES
- "/usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o.d"
- "/usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_normalize.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o.d"
- "/usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_parse.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o.d"
- "/usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o.d"
- "/usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_resolve.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o.d"
- "/usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/uri.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o.d"
- "/usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/uri_builder.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o.d"
- "/usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/uri_errors.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o.d"
+ "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o.d"
+ "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o.d"
+ "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o.d"
+ "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o.d"
+ "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_resolve.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o.d"
+ "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o.d"
+ "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_builder.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o.d"
+ "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_errors.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o.d"
)
# Targets to which this target links which contain Fortran sources.
set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES
)
+# Targets to which this target links which contain Fortran sources.
+set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES
+ )
+
# Fortran module output directory.
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
diff --git a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/build.make b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/build.make
index 20b63f7feb..feab93c641 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/build.make
+++ b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/build.make
@@ -1,5 +1,5 @@
# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.27
+# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Delete rule output on recipe failure.
.DELETE_ON_ERROR:
@@ -56,10 +56,10 @@ RM = /usr/bin/cmake -E rm -f
EQUALS = =
# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.89/LspCpp
+CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.90/LspCpp
# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.89/LspCpp
+CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.90/LspCpp
# Include any dependencies generated for this target.
include third_party/uri/src/CMakeFiles/network-uri.dir/depend.make
@@ -75,114 +75,114 @@ include third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o: third_party/uri/src/uri.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.89/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o -MF CMakeFiles/network-uri.dir/uri.cpp.o.d -o CMakeFiles/network-uri.dir/uri.cpp.o -c /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/uri.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o"
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o -MF CMakeFiles/network-uri.dir/uri.cpp.o.d -o CMakeFiles/network-uri.dir/uri.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/uri.cpp.i"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/uri.cpp > CMakeFiles/network-uri.dir/uri.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri.cpp > CMakeFiles/network-uri.dir/uri.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/uri.cpp.s"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/uri.cpp -o CMakeFiles/network-uri.dir/uri.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri.cpp -o CMakeFiles/network-uri.dir/uri.cpp.s
third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o: third_party/uri/src/uri_builder.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.89/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o -MF CMakeFiles/network-uri.dir/uri_builder.cpp.o.d -o CMakeFiles/network-uri.dir/uri_builder.cpp.o -c /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/uri_builder.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o"
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o -MF CMakeFiles/network-uri.dir/uri_builder.cpp.o.d -o CMakeFiles/network-uri.dir/uri_builder.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_builder.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/uri_builder.cpp.i"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/uri_builder.cpp > CMakeFiles/network-uri.dir/uri_builder.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_builder.cpp > CMakeFiles/network-uri.dir/uri_builder.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/uri_builder.cpp.s"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/uri_builder.cpp -o CMakeFiles/network-uri.dir/uri_builder.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_builder.cpp -o CMakeFiles/network-uri.dir/uri_builder.cpp.s
third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o: third_party/uri/src/uri_errors.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.89/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o -MF CMakeFiles/network-uri.dir/uri_errors.cpp.o.d -o CMakeFiles/network-uri.dir/uri_errors.cpp.o -c /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/uri_errors.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o"
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o -MF CMakeFiles/network-uri.dir/uri_errors.cpp.o.d -o CMakeFiles/network-uri.dir/uri_errors.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_errors.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/uri_errors.cpp.i"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/uri_errors.cpp > CMakeFiles/network-uri.dir/uri_errors.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_errors.cpp > CMakeFiles/network-uri.dir/uri_errors.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/uri_errors.cpp.s"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/uri_errors.cpp -o CMakeFiles/network-uri.dir/uri_errors.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_errors.cpp -o CMakeFiles/network-uri.dir/uri_errors.cpp.s
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o: third_party/uri/src/detail/uri_parse.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.89/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o -c /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_parse.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o"
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/detail/uri_parse.cpp.i"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_parse.cpp > CMakeFiles/network-uri.dir/detail/uri_parse.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse.cpp > CMakeFiles/network-uri.dir/detail/uri_parse.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/detail/uri_parse.cpp.s"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_parse.cpp -o CMakeFiles/network-uri.dir/detail/uri_parse.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse.cpp -o CMakeFiles/network-uri.dir/detail/uri_parse.cpp.s
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o: third_party/uri/src/detail/uri_parse_authority.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.89/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o -c /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o"
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.i"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp > CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp > CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.s"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp -o CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp -o CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.s
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o: third_party/uri/src/detail/uri_advance_parts.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.89/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o -c /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o"
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.i"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp > CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp > CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.s"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp -o CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp -o CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.s
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o: third_party/uri/src/detail/uri_normalize.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.89/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o -c /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_normalize.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o"
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.i"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_normalize.cpp > CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.cpp > CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.s"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_normalize.cpp -o CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.cpp -o CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.s
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o: third_party/uri/src/detail/uri_resolve.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.89/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o -c /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_resolve.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o"
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_resolve.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.i"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_resolve.cpp > CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_resolve.cpp > CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.s"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_resolve.cpp -o CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_resolve.cpp -o CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.s
# Object files for target network-uri
network__uri_OBJECTS = \
@@ -208,19 +208,19 @@ third_party/uri/src/libnetwork-uri.a: third_party/uri/src/CMakeFiles/network-uri
third_party/uri/src/libnetwork-uri.a: third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o
third_party/uri/src/libnetwork-uri.a: third_party/uri/src/CMakeFiles/network-uri.dir/build.make
third_party/uri/src/libnetwork-uri.a: third_party/uri/src/CMakeFiles/network-uri.dir/link.txt
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/usr/local/src/asymptote-2.89/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Linking CXX static library libnetwork-uri.a"
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && $(CMAKE_COMMAND) -P CMakeFiles/network-uri.dir/cmake_clean_target.cmake
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/network-uri.dir/link.txt --verbose=$(VERBOSE)
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Linking CXX static library libnetwork-uri.a"
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && $(CMAKE_COMMAND) -P CMakeFiles/network-uri.dir/cmake_clean_target.cmake
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/network-uri.dir/link.txt --verbose=$(VERBOSE)
# Rule to build all files generated by this target.
third_party/uri/src/CMakeFiles/network-uri.dir/build: third_party/uri/src/libnetwork-uri.a
.PHONY : third_party/uri/src/CMakeFiles/network-uri.dir/build
third_party/uri/src/CMakeFiles/network-uri.dir/clean:
- cd /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src && $(CMAKE_COMMAND) -P CMakeFiles/network-uri.dir/cmake_clean.cmake
+ cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && $(CMAKE_COMMAND) -P CMakeFiles/network-uri.dir/cmake_clean.cmake
.PHONY : third_party/uri/src/CMakeFiles/network-uri.dir/clean
third_party/uri/src/CMakeFiles/network-uri.dir/depend:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /usr/local/src/asymptote-2.89/LspCpp /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src /usr/local/src/asymptote-2.89/LspCpp /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/DependInfo.cmake "--color=$(COLOR)"
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /usr/local/src/asymptote-2.90/LspCpp /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src /usr/local/src/asymptote-2.90/LspCpp /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/DependInfo.cmake "--color=$(COLOR)"
.PHONY : third_party/uri/src/CMakeFiles/network-uri.dir/depend
diff --git a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.internal b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.internal
index 89c154bfba..3100d7c219 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.internal
+++ b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.internal
@@ -1,8 +1,8 @@
# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.27
+# Generated by "Unix Makefiles" Generator, CMake Version 3.28
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -26,6 +26,7 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o
/usr/include/bits/select.h
/usr/include/bits/setjmp.h
/usr/include/bits/stdint-intn.h
+ /usr/include/bits/stdint-least.h
/usr/include/bits/stdint-uintn.h
/usr/include/bits/stdio.h
/usr/include/bits/stdio_lim.h
@@ -69,112 +70,113 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o
/usr/include/bits/waitstatus.h
/usr/include/bits/wchar.h
/usr/include/bits/wordsize.h
- /usr/include/c++/13/algorithm
- /usr/include/c++/13/backward/auto_ptr.h
- /usr/include/c++/13/backward/binders.h
- /usr/include/c++/13/bit
- /usr/include/c++/13/bits/algorithmfwd.h
- /usr/include/c++/13/bits/align.h
- /usr/include/c++/13/bits/alloc_traits.h
- /usr/include/c++/13/bits/allocated_ptr.h
- /usr/include/c++/13/bits/allocator.h
- /usr/include/c++/13/bits/atomic_base.h
- /usr/include/c++/13/bits/atomic_lockfree_defines.h
- /usr/include/c++/13/bits/basic_string.h
- /usr/include/c++/13/bits/basic_string.tcc
- /usr/include/c++/13/bits/char_traits.h
- /usr/include/c++/13/bits/charconv.h
- /usr/include/c++/13/bits/concept_check.h
- /usr/include/c++/13/bits/cpp_type_traits.h
- /usr/include/c++/13/bits/cxxabi_forced.h
- /usr/include/c++/13/bits/cxxabi_init_exception.h
- /usr/include/c++/13/bits/exception.h
- /usr/include/c++/13/bits/exception_defines.h
- /usr/include/c++/13/bits/exception_ptr.h
- /usr/include/c++/13/bits/functexcept.h
- /usr/include/c++/13/bits/functional_hash.h
- /usr/include/c++/13/bits/hash_bytes.h
- /usr/include/c++/13/bits/invoke.h
- /usr/include/c++/13/bits/ios_base.h
- /usr/include/c++/13/bits/locale_classes.h
- /usr/include/c++/13/bits/locale_classes.tcc
- /usr/include/c++/13/bits/localefwd.h
- /usr/include/c++/13/bits/memoryfwd.h
- /usr/include/c++/13/bits/move.h
- /usr/include/c++/13/bits/nested_exception.h
- /usr/include/c++/13/bits/new_allocator.h
- /usr/include/c++/13/bits/ostream_insert.h
- /usr/include/c++/13/bits/postypes.h
- /usr/include/c++/13/bits/predefined_ops.h
- /usr/include/c++/13/bits/ptr_traits.h
- /usr/include/c++/13/bits/range_access.h
- /usr/include/c++/13/bits/refwrap.h
- /usr/include/c++/13/bits/requires_hosted.h
- /usr/include/c++/13/bits/shared_ptr.h
- /usr/include/c++/13/bits/shared_ptr_atomic.h
- /usr/include/c++/13/bits/shared_ptr_base.h
- /usr/include/c++/13/bits/std_abs.h
- /usr/include/c++/13/bits/stl_algo.h
- /usr/include/c++/13/bits/stl_algobase.h
- /usr/include/c++/13/bits/stl_construct.h
- /usr/include/c++/13/bits/stl_function.h
- /usr/include/c++/13/bits/stl_heap.h
- /usr/include/c++/13/bits/stl_iterator.h
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h
- /usr/include/c++/13/bits/stl_iterator_base_types.h
- /usr/include/c++/13/bits/stl_pair.h
- /usr/include/c++/13/bits/stl_raw_storage_iter.h
- /usr/include/c++/13/bits/stl_relops.h
- /usr/include/c++/13/bits/stl_tempbuf.h
- /usr/include/c++/13/bits/stl_uninitialized.h
- /usr/include/c++/13/bits/stream_iterator.h
- /usr/include/c++/13/bits/streambuf.tcc
- /usr/include/c++/13/bits/streambuf_iterator.h
- /usr/include/c++/13/bits/stringfwd.h
- /usr/include/c++/13/bits/uniform_int_dist.h
- /usr/include/c++/13/bits/unique_ptr.h
- /usr/include/c++/13/bits/uses_allocator.h
- /usr/include/c++/13/bits/utility.h
- /usr/include/c++/13/cassert
- /usr/include/c++/13/cctype
- /usr/include/c++/13/cerrno
- /usr/include/c++/13/clocale
- /usr/include/c++/13/cstdio
- /usr/include/c++/13/cstdlib
- /usr/include/c++/13/cwchar
- /usr/include/c++/13/debug/assertions.h
- /usr/include/c++/13/debug/debug.h
- /usr/include/c++/13/exception
- /usr/include/c++/13/ext/aligned_buffer.h
- /usr/include/c++/13/ext/alloc_traits.h
- /usr/include/c++/13/ext/atomicity.h
- /usr/include/c++/13/ext/concurrence.h
- /usr/include/c++/13/ext/numeric_traits.h
- /usr/include/c++/13/ext/string_conversions.h
- /usr/include/c++/13/ext/type_traits.h
- /usr/include/c++/13/initializer_list
- /usr/include/c++/13/iosfwd
- /usr/include/c++/13/iterator
- /usr/include/c++/13/limits
- /usr/include/c++/13/memory
- /usr/include/c++/13/new
- /usr/include/c++/13/stdexcept
- /usr/include/c++/13/streambuf
- /usr/include/c++/13/string
- /usr/include/c++/13/system_error
- /usr/include/c++/13/tuple
- /usr/include/c++/13/type_traits
- /usr/include/c++/13/typeinfo
- /usr/include/c++/13/utility
- /usr/include/c++/13/x86_64-redhat-linux/bits/atomic_word.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h
+ /usr/include/c++/14/algorithm
+ /usr/include/c++/14/backward/auto_ptr.h
+ /usr/include/c++/14/backward/binders.h
+ /usr/include/c++/14/bit
+ /usr/include/c++/14/bits/algorithmfwd.h
+ /usr/include/c++/14/bits/align.h
+ /usr/include/c++/14/bits/alloc_traits.h
+ /usr/include/c++/14/bits/allocated_ptr.h
+ /usr/include/c++/14/bits/allocator.h
+ /usr/include/c++/14/bits/atomic_base.h
+ /usr/include/c++/14/bits/atomic_lockfree_defines.h
+ /usr/include/c++/14/bits/basic_string.h
+ /usr/include/c++/14/bits/basic_string.tcc
+ /usr/include/c++/14/bits/char_traits.h
+ /usr/include/c++/14/bits/charconv.h
+ /usr/include/c++/14/bits/concept_check.h
+ /usr/include/c++/14/bits/cpp_type_traits.h
+ /usr/include/c++/14/bits/cxxabi_forced.h
+ /usr/include/c++/14/bits/cxxabi_init_exception.h
+ /usr/include/c++/14/bits/exception.h
+ /usr/include/c++/14/bits/exception_defines.h
+ /usr/include/c++/14/bits/exception_ptr.h
+ /usr/include/c++/14/bits/functexcept.h
+ /usr/include/c++/14/bits/functional_hash.h
+ /usr/include/c++/14/bits/hash_bytes.h
+ /usr/include/c++/14/bits/invoke.h
+ /usr/include/c++/14/bits/ios_base.h
+ /usr/include/c++/14/bits/locale_classes.h
+ /usr/include/c++/14/bits/locale_classes.tcc
+ /usr/include/c++/14/bits/localefwd.h
+ /usr/include/c++/14/bits/memoryfwd.h
+ /usr/include/c++/14/bits/move.h
+ /usr/include/c++/14/bits/nested_exception.h
+ /usr/include/c++/14/bits/new_allocator.h
+ /usr/include/c++/14/bits/ostream_insert.h
+ /usr/include/c++/14/bits/postypes.h
+ /usr/include/c++/14/bits/predefined_ops.h
+ /usr/include/c++/14/bits/ptr_traits.h
+ /usr/include/c++/14/bits/range_access.h
+ /usr/include/c++/14/bits/refwrap.h
+ /usr/include/c++/14/bits/requires_hosted.h
+ /usr/include/c++/14/bits/shared_ptr.h
+ /usr/include/c++/14/bits/shared_ptr_atomic.h
+ /usr/include/c++/14/bits/shared_ptr_base.h
+ /usr/include/c++/14/bits/std_abs.h
+ /usr/include/c++/14/bits/stl_algo.h
+ /usr/include/c++/14/bits/stl_algobase.h
+ /usr/include/c++/14/bits/stl_construct.h
+ /usr/include/c++/14/bits/stl_function.h
+ /usr/include/c++/14/bits/stl_heap.h
+ /usr/include/c++/14/bits/stl_iterator.h
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h
+ /usr/include/c++/14/bits/stl_iterator_base_types.h
+ /usr/include/c++/14/bits/stl_pair.h
+ /usr/include/c++/14/bits/stl_raw_storage_iter.h
+ /usr/include/c++/14/bits/stl_relops.h
+ /usr/include/c++/14/bits/stl_tempbuf.h
+ /usr/include/c++/14/bits/stl_uninitialized.h
+ /usr/include/c++/14/bits/stream_iterator.h
+ /usr/include/c++/14/bits/streambuf.tcc
+ /usr/include/c++/14/bits/streambuf_iterator.h
+ /usr/include/c++/14/bits/stringfwd.h
+ /usr/include/c++/14/bits/uniform_int_dist.h
+ /usr/include/c++/14/bits/unique_ptr.h
+ /usr/include/c++/14/bits/uses_allocator.h
+ /usr/include/c++/14/bits/utility.h
+ /usr/include/c++/14/bits/version.h
+ /usr/include/c++/14/cassert
+ /usr/include/c++/14/cctype
+ /usr/include/c++/14/cerrno
+ /usr/include/c++/14/clocale
+ /usr/include/c++/14/cstdio
+ /usr/include/c++/14/cstdlib
+ /usr/include/c++/14/cwchar
+ /usr/include/c++/14/debug/assertions.h
+ /usr/include/c++/14/debug/debug.h
+ /usr/include/c++/14/exception
+ /usr/include/c++/14/ext/aligned_buffer.h
+ /usr/include/c++/14/ext/alloc_traits.h
+ /usr/include/c++/14/ext/atomicity.h
+ /usr/include/c++/14/ext/concurrence.h
+ /usr/include/c++/14/ext/numeric_traits.h
+ /usr/include/c++/14/ext/string_conversions.h
+ /usr/include/c++/14/ext/type_traits.h
+ /usr/include/c++/14/initializer_list
+ /usr/include/c++/14/iosfwd
+ /usr/include/c++/14/iterator
+ /usr/include/c++/14/limits
+ /usr/include/c++/14/memory
+ /usr/include/c++/14/new
+ /usr/include/c++/14/stdexcept
+ /usr/include/c++/14/streambuf
+ /usr/include/c++/14/string
+ /usr/include/c++/14/system_error
+ /usr/include/c++/14/tuple
+ /usr/include/c++/14/type_traits
+ /usr/include/c++/14/typeinfo
+ /usr/include/c++/14/utility
+ /usr/include/c++/14/x86_64-redhat-linux/bits/atomic_word.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr-default.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h
/usr/include/ctype.h
/usr/include/endian.h
/usr/include/errno.h
@@ -196,16 +198,16 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o
/usr/include/sys/types.h
/usr/include/time.h
/usr/include/wchar.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdint.h
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/optional.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/string_view.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_advance_parts.hpp
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/optional.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/string_view.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_advance_parts.hpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_normalize.cpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -229,6 +231,7 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o
/usr/include/bits/select.h
/usr/include/bits/setjmp.h
/usr/include/bits/stdint-intn.h
+ /usr/include/bits/stdint-least.h
/usr/include/bits/stdint-uintn.h
/usr/include/bits/stdio.h
/usr/include/bits/stdio_lim.h
@@ -273,132 +276,133 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o
/usr/include/bits/wchar.h
/usr/include/bits/wctype-wchar.h
/usr/include/bits/wordsize.h
- /usr/include/c++/13/algorithm
- /usr/include/c++/13/backward/auto_ptr.h
- /usr/include/c++/13/backward/binders.h
- /usr/include/c++/13/bit
- /usr/include/c++/13/bits/algorithmfwd.h
- /usr/include/c++/13/bits/align.h
- /usr/include/c++/13/bits/alloc_traits.h
- /usr/include/c++/13/bits/allocated_ptr.h
- /usr/include/c++/13/bits/allocator.h
- /usr/include/c++/13/bits/atomic_base.h
- /usr/include/c++/13/bits/atomic_lockfree_defines.h
- /usr/include/c++/13/bits/basic_string.h
- /usr/include/c++/13/bits/basic_string.tcc
- /usr/include/c++/13/bits/char_traits.h
- /usr/include/c++/13/bits/charconv.h
- /usr/include/c++/13/bits/codecvt.h
- /usr/include/c++/13/bits/concept_check.h
- /usr/include/c++/13/bits/cpp_type_traits.h
- /usr/include/c++/13/bits/cxxabi_forced.h
- /usr/include/c++/13/bits/cxxabi_init_exception.h
- /usr/include/c++/13/bits/exception.h
- /usr/include/c++/13/bits/exception_defines.h
- /usr/include/c++/13/bits/exception_ptr.h
- /usr/include/c++/13/bits/functexcept.h
- /usr/include/c++/13/bits/functional_hash.h
- /usr/include/c++/13/bits/hash_bytes.h
- /usr/include/c++/13/bits/invoke.h
- /usr/include/c++/13/bits/ios_base.h
- /usr/include/c++/13/bits/locale_classes.h
- /usr/include/c++/13/bits/locale_classes.tcc
- /usr/include/c++/13/bits/locale_conv.h
- /usr/include/c++/13/bits/locale_facets.h
- /usr/include/c++/13/bits/locale_facets.tcc
- /usr/include/c++/13/bits/locale_facets_nonio.h
- /usr/include/c++/13/bits/locale_facets_nonio.tcc
- /usr/include/c++/13/bits/localefwd.h
- /usr/include/c++/13/bits/memoryfwd.h
- /usr/include/c++/13/bits/move.h
- /usr/include/c++/13/bits/nested_exception.h
- /usr/include/c++/13/bits/new_allocator.h
- /usr/include/c++/13/bits/ostream_insert.h
- /usr/include/c++/13/bits/postypes.h
- /usr/include/c++/13/bits/predefined_ops.h
- /usr/include/c++/13/bits/ptr_traits.h
- /usr/include/c++/13/bits/range_access.h
- /usr/include/c++/13/bits/refwrap.h
- /usr/include/c++/13/bits/requires_hosted.h
- /usr/include/c++/13/bits/shared_ptr.h
- /usr/include/c++/13/bits/shared_ptr_atomic.h
- /usr/include/c++/13/bits/shared_ptr_base.h
- /usr/include/c++/13/bits/std_abs.h
- /usr/include/c++/13/bits/std_function.h
- /usr/include/c++/13/bits/stl_algo.h
- /usr/include/c++/13/bits/stl_algobase.h
- /usr/include/c++/13/bits/stl_bvector.h
- /usr/include/c++/13/bits/stl_construct.h
- /usr/include/c++/13/bits/stl_function.h
- /usr/include/c++/13/bits/stl_heap.h
- /usr/include/c++/13/bits/stl_iterator.h
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h
- /usr/include/c++/13/bits/stl_iterator_base_types.h
- /usr/include/c++/13/bits/stl_pair.h
- /usr/include/c++/13/bits/stl_raw_storage_iter.h
- /usr/include/c++/13/bits/stl_relops.h
- /usr/include/c++/13/bits/stl_tempbuf.h
- /usr/include/c++/13/bits/stl_uninitialized.h
- /usr/include/c++/13/bits/stl_vector.h
- /usr/include/c++/13/bits/stream_iterator.h
- /usr/include/c++/13/bits/streambuf.tcc
- /usr/include/c++/13/bits/streambuf_iterator.h
- /usr/include/c++/13/bits/stringfwd.h
- /usr/include/c++/13/bits/uniform_int_dist.h
- /usr/include/c++/13/bits/unique_ptr.h
- /usr/include/c++/13/bits/uses_allocator.h
- /usr/include/c++/13/bits/utility.h
- /usr/include/c++/13/bits/vector.tcc
- /usr/include/c++/13/cassert
- /usr/include/c++/13/cctype
- /usr/include/c++/13/cerrno
- /usr/include/c++/13/clocale
- /usr/include/c++/13/cstdint
- /usr/include/c++/13/cstdio
- /usr/include/c++/13/cstdlib
- /usr/include/c++/13/cstring
- /usr/include/c++/13/ctime
- /usr/include/c++/13/cwchar
- /usr/include/c++/13/cwctype
- /usr/include/c++/13/debug/assertions.h
- /usr/include/c++/13/debug/debug.h
- /usr/include/c++/13/exception
- /usr/include/c++/13/ext/aligned_buffer.h
- /usr/include/c++/13/ext/alloc_traits.h
- /usr/include/c++/13/ext/atomicity.h
- /usr/include/c++/13/ext/concurrence.h
- /usr/include/c++/13/ext/numeric_traits.h
- /usr/include/c++/13/ext/string_conversions.h
- /usr/include/c++/13/ext/type_traits.h
- /usr/include/c++/13/functional
- /usr/include/c++/13/initializer_list
- /usr/include/c++/13/iosfwd
- /usr/include/c++/13/iterator
- /usr/include/c++/13/locale
- /usr/include/c++/13/memory
- /usr/include/c++/13/new
- /usr/include/c++/13/stdexcept
- /usr/include/c++/13/streambuf
- /usr/include/c++/13/string
- /usr/include/c++/13/system_error
- /usr/include/c++/13/tuple
- /usr/include/c++/13/type_traits
- /usr/include/c++/13/typeinfo
- /usr/include/c++/13/utility
- /usr/include/c++/13/vector
- /usr/include/c++/13/x86_64-redhat-linux/bits/atomic_word.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_base.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/messages_members.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/time_members.h
+ /usr/include/c++/14/algorithm
+ /usr/include/c++/14/backward/auto_ptr.h
+ /usr/include/c++/14/backward/binders.h
+ /usr/include/c++/14/bit
+ /usr/include/c++/14/bits/algorithmfwd.h
+ /usr/include/c++/14/bits/align.h
+ /usr/include/c++/14/bits/alloc_traits.h
+ /usr/include/c++/14/bits/allocated_ptr.h
+ /usr/include/c++/14/bits/allocator.h
+ /usr/include/c++/14/bits/atomic_base.h
+ /usr/include/c++/14/bits/atomic_lockfree_defines.h
+ /usr/include/c++/14/bits/basic_string.h
+ /usr/include/c++/14/bits/basic_string.tcc
+ /usr/include/c++/14/bits/char_traits.h
+ /usr/include/c++/14/bits/charconv.h
+ /usr/include/c++/14/bits/codecvt.h
+ /usr/include/c++/14/bits/concept_check.h
+ /usr/include/c++/14/bits/cpp_type_traits.h
+ /usr/include/c++/14/bits/cxxabi_forced.h
+ /usr/include/c++/14/bits/cxxabi_init_exception.h
+ /usr/include/c++/14/bits/exception.h
+ /usr/include/c++/14/bits/exception_defines.h
+ /usr/include/c++/14/bits/exception_ptr.h
+ /usr/include/c++/14/bits/functexcept.h
+ /usr/include/c++/14/bits/functional_hash.h
+ /usr/include/c++/14/bits/hash_bytes.h
+ /usr/include/c++/14/bits/invoke.h
+ /usr/include/c++/14/bits/ios_base.h
+ /usr/include/c++/14/bits/locale_classes.h
+ /usr/include/c++/14/bits/locale_classes.tcc
+ /usr/include/c++/14/bits/locale_conv.h
+ /usr/include/c++/14/bits/locale_facets.h
+ /usr/include/c++/14/bits/locale_facets.tcc
+ /usr/include/c++/14/bits/locale_facets_nonio.h
+ /usr/include/c++/14/bits/locale_facets_nonio.tcc
+ /usr/include/c++/14/bits/localefwd.h
+ /usr/include/c++/14/bits/memoryfwd.h
+ /usr/include/c++/14/bits/move.h
+ /usr/include/c++/14/bits/nested_exception.h
+ /usr/include/c++/14/bits/new_allocator.h
+ /usr/include/c++/14/bits/ostream_insert.h
+ /usr/include/c++/14/bits/postypes.h
+ /usr/include/c++/14/bits/predefined_ops.h
+ /usr/include/c++/14/bits/ptr_traits.h
+ /usr/include/c++/14/bits/range_access.h
+ /usr/include/c++/14/bits/refwrap.h
+ /usr/include/c++/14/bits/requires_hosted.h
+ /usr/include/c++/14/bits/shared_ptr.h
+ /usr/include/c++/14/bits/shared_ptr_atomic.h
+ /usr/include/c++/14/bits/shared_ptr_base.h
+ /usr/include/c++/14/bits/std_abs.h
+ /usr/include/c++/14/bits/std_function.h
+ /usr/include/c++/14/bits/stl_algo.h
+ /usr/include/c++/14/bits/stl_algobase.h
+ /usr/include/c++/14/bits/stl_bvector.h
+ /usr/include/c++/14/bits/stl_construct.h
+ /usr/include/c++/14/bits/stl_function.h
+ /usr/include/c++/14/bits/stl_heap.h
+ /usr/include/c++/14/bits/stl_iterator.h
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h
+ /usr/include/c++/14/bits/stl_iterator_base_types.h
+ /usr/include/c++/14/bits/stl_pair.h
+ /usr/include/c++/14/bits/stl_raw_storage_iter.h
+ /usr/include/c++/14/bits/stl_relops.h
+ /usr/include/c++/14/bits/stl_tempbuf.h
+ /usr/include/c++/14/bits/stl_uninitialized.h
+ /usr/include/c++/14/bits/stl_vector.h
+ /usr/include/c++/14/bits/stream_iterator.h
+ /usr/include/c++/14/bits/streambuf.tcc
+ /usr/include/c++/14/bits/streambuf_iterator.h
+ /usr/include/c++/14/bits/stringfwd.h
+ /usr/include/c++/14/bits/uniform_int_dist.h
+ /usr/include/c++/14/bits/unique_ptr.h
+ /usr/include/c++/14/bits/uses_allocator.h
+ /usr/include/c++/14/bits/utility.h
+ /usr/include/c++/14/bits/vector.tcc
+ /usr/include/c++/14/bits/version.h
+ /usr/include/c++/14/cassert
+ /usr/include/c++/14/cctype
+ /usr/include/c++/14/cerrno
+ /usr/include/c++/14/clocale
+ /usr/include/c++/14/cstdint
+ /usr/include/c++/14/cstdio
+ /usr/include/c++/14/cstdlib
+ /usr/include/c++/14/cstring
+ /usr/include/c++/14/ctime
+ /usr/include/c++/14/cwchar
+ /usr/include/c++/14/cwctype
+ /usr/include/c++/14/debug/assertions.h
+ /usr/include/c++/14/debug/debug.h
+ /usr/include/c++/14/exception
+ /usr/include/c++/14/ext/aligned_buffer.h
+ /usr/include/c++/14/ext/alloc_traits.h
+ /usr/include/c++/14/ext/atomicity.h
+ /usr/include/c++/14/ext/concurrence.h
+ /usr/include/c++/14/ext/numeric_traits.h
+ /usr/include/c++/14/ext/string_conversions.h
+ /usr/include/c++/14/ext/type_traits.h
+ /usr/include/c++/14/functional
+ /usr/include/c++/14/initializer_list
+ /usr/include/c++/14/iosfwd
+ /usr/include/c++/14/iterator
+ /usr/include/c++/14/locale
+ /usr/include/c++/14/memory
+ /usr/include/c++/14/new
+ /usr/include/c++/14/stdexcept
+ /usr/include/c++/14/streambuf
+ /usr/include/c++/14/string
+ /usr/include/c++/14/system_error
+ /usr/include/c++/14/tuple
+ /usr/include/c++/14/type_traits
+ /usr/include/c++/14/typeinfo
+ /usr/include/c++/14/utility
+ /usr/include/c++/14/vector
+ /usr/include/c++/14/x86_64-redhat-linux/bits/atomic_word.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_base.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_inline.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr-default.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/messages_members.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/time_members.h
/usr/include/ctype.h
/usr/include/endian.h
/usr/include/errno.h
@@ -424,26 +428,26 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o
/usr/include/time.h
/usr/include/wchar.h
/usr/include/wctype.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdint.h
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/optional.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/string_view.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/config.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/uri.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/algorithm.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/algorithm_split.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_normalize.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_percent_encode.hpp
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/optional.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/string_view.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/config.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/algorithm.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/algorithm_split.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_percent_encode.hpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_parse.cpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -467,6 +471,7 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o
/usr/include/bits/select.h
/usr/include/bits/setjmp.h
/usr/include/bits/stdint-intn.h
+ /usr/include/bits/stdint-least.h
/usr/include/bits/stdint-uintn.h
/usr/include/bits/stdio.h
/usr/include/bits/stdio_lim.h
@@ -511,126 +516,127 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o
/usr/include/bits/wchar.h
/usr/include/bits/wctype-wchar.h
/usr/include/bits/wordsize.h
- /usr/include/c++/13/algorithm
- /usr/include/c++/13/backward/auto_ptr.h
- /usr/include/c++/13/backward/binders.h
- /usr/include/c++/13/bit
- /usr/include/c++/13/bits/algorithmfwd.h
- /usr/include/c++/13/bits/align.h
- /usr/include/c++/13/bits/alloc_traits.h
- /usr/include/c++/13/bits/allocated_ptr.h
- /usr/include/c++/13/bits/allocator.h
- /usr/include/c++/13/bits/atomic_base.h
- /usr/include/c++/13/bits/atomic_lockfree_defines.h
- /usr/include/c++/13/bits/basic_string.h
- /usr/include/c++/13/bits/basic_string.tcc
- /usr/include/c++/13/bits/char_traits.h
- /usr/include/c++/13/bits/charconv.h
- /usr/include/c++/13/bits/codecvt.h
- /usr/include/c++/13/bits/concept_check.h
- /usr/include/c++/13/bits/cpp_type_traits.h
- /usr/include/c++/13/bits/cxxabi_forced.h
- /usr/include/c++/13/bits/cxxabi_init_exception.h
- /usr/include/c++/13/bits/exception.h
- /usr/include/c++/13/bits/exception_defines.h
- /usr/include/c++/13/bits/exception_ptr.h
- /usr/include/c++/13/bits/functexcept.h
- /usr/include/c++/13/bits/functional_hash.h
- /usr/include/c++/13/bits/hash_bytes.h
- /usr/include/c++/13/bits/invoke.h
- /usr/include/c++/13/bits/ios_base.h
- /usr/include/c++/13/bits/locale_classes.h
- /usr/include/c++/13/bits/locale_classes.tcc
- /usr/include/c++/13/bits/locale_conv.h
- /usr/include/c++/13/bits/locale_facets.h
- /usr/include/c++/13/bits/locale_facets.tcc
- /usr/include/c++/13/bits/locale_facets_nonio.h
- /usr/include/c++/13/bits/locale_facets_nonio.tcc
- /usr/include/c++/13/bits/localefwd.h
- /usr/include/c++/13/bits/memoryfwd.h
- /usr/include/c++/13/bits/move.h
- /usr/include/c++/13/bits/nested_exception.h
- /usr/include/c++/13/bits/new_allocator.h
- /usr/include/c++/13/bits/ostream_insert.h
- /usr/include/c++/13/bits/postypes.h
- /usr/include/c++/13/bits/predefined_ops.h
- /usr/include/c++/13/bits/ptr_traits.h
- /usr/include/c++/13/bits/range_access.h
- /usr/include/c++/13/bits/refwrap.h
- /usr/include/c++/13/bits/requires_hosted.h
- /usr/include/c++/13/bits/shared_ptr.h
- /usr/include/c++/13/bits/shared_ptr_atomic.h
- /usr/include/c++/13/bits/shared_ptr_base.h
- /usr/include/c++/13/bits/std_abs.h
- /usr/include/c++/13/bits/stl_algo.h
- /usr/include/c++/13/bits/stl_algobase.h
- /usr/include/c++/13/bits/stl_construct.h
- /usr/include/c++/13/bits/stl_function.h
- /usr/include/c++/13/bits/stl_heap.h
- /usr/include/c++/13/bits/stl_iterator.h
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h
- /usr/include/c++/13/bits/stl_iterator_base_types.h
- /usr/include/c++/13/bits/stl_pair.h
- /usr/include/c++/13/bits/stl_raw_storage_iter.h
- /usr/include/c++/13/bits/stl_relops.h
- /usr/include/c++/13/bits/stl_tempbuf.h
- /usr/include/c++/13/bits/stl_uninitialized.h
- /usr/include/c++/13/bits/stream_iterator.h
- /usr/include/c++/13/bits/streambuf.tcc
- /usr/include/c++/13/bits/streambuf_iterator.h
- /usr/include/c++/13/bits/stringfwd.h
- /usr/include/c++/13/bits/uniform_int_dist.h
- /usr/include/c++/13/bits/unique_ptr.h
- /usr/include/c++/13/bits/uses_allocator.h
- /usr/include/c++/13/bits/utility.h
- /usr/include/c++/13/cassert
- /usr/include/c++/13/cctype
- /usr/include/c++/13/cerrno
- /usr/include/c++/13/clocale
- /usr/include/c++/13/cstdio
- /usr/include/c++/13/cstdlib
- /usr/include/c++/13/cstring
- /usr/include/c++/13/ctime
- /usr/include/c++/13/cwchar
- /usr/include/c++/13/cwctype
- /usr/include/c++/13/debug/assertions.h
- /usr/include/c++/13/debug/debug.h
- /usr/include/c++/13/exception
- /usr/include/c++/13/ext/aligned_buffer.h
- /usr/include/c++/13/ext/alloc_traits.h
- /usr/include/c++/13/ext/atomicity.h
- /usr/include/c++/13/ext/concurrence.h
- /usr/include/c++/13/ext/numeric_traits.h
- /usr/include/c++/13/ext/string_conversions.h
- /usr/include/c++/13/ext/type_traits.h
- /usr/include/c++/13/initializer_list
- /usr/include/c++/13/iosfwd
- /usr/include/c++/13/iterator
- /usr/include/c++/13/limits
- /usr/include/c++/13/locale
- /usr/include/c++/13/memory
- /usr/include/c++/13/new
- /usr/include/c++/13/stdexcept
- /usr/include/c++/13/streambuf
- /usr/include/c++/13/string
- /usr/include/c++/13/system_error
- /usr/include/c++/13/tuple
- /usr/include/c++/13/type_traits
- /usr/include/c++/13/typeinfo
- /usr/include/c++/13/utility
- /usr/include/c++/13/x86_64-redhat-linux/bits/atomic_word.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_base.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/messages_members.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/time_members.h
+ /usr/include/c++/14/algorithm
+ /usr/include/c++/14/backward/auto_ptr.h
+ /usr/include/c++/14/backward/binders.h
+ /usr/include/c++/14/bit
+ /usr/include/c++/14/bits/algorithmfwd.h
+ /usr/include/c++/14/bits/align.h
+ /usr/include/c++/14/bits/alloc_traits.h
+ /usr/include/c++/14/bits/allocated_ptr.h
+ /usr/include/c++/14/bits/allocator.h
+ /usr/include/c++/14/bits/atomic_base.h
+ /usr/include/c++/14/bits/atomic_lockfree_defines.h
+ /usr/include/c++/14/bits/basic_string.h
+ /usr/include/c++/14/bits/basic_string.tcc
+ /usr/include/c++/14/bits/char_traits.h
+ /usr/include/c++/14/bits/charconv.h
+ /usr/include/c++/14/bits/codecvt.h
+ /usr/include/c++/14/bits/concept_check.h
+ /usr/include/c++/14/bits/cpp_type_traits.h
+ /usr/include/c++/14/bits/cxxabi_forced.h
+ /usr/include/c++/14/bits/cxxabi_init_exception.h
+ /usr/include/c++/14/bits/exception.h
+ /usr/include/c++/14/bits/exception_defines.h
+ /usr/include/c++/14/bits/exception_ptr.h
+ /usr/include/c++/14/bits/functexcept.h
+ /usr/include/c++/14/bits/functional_hash.h
+ /usr/include/c++/14/bits/hash_bytes.h
+ /usr/include/c++/14/bits/invoke.h
+ /usr/include/c++/14/bits/ios_base.h
+ /usr/include/c++/14/bits/locale_classes.h
+ /usr/include/c++/14/bits/locale_classes.tcc
+ /usr/include/c++/14/bits/locale_conv.h
+ /usr/include/c++/14/bits/locale_facets.h
+ /usr/include/c++/14/bits/locale_facets.tcc
+ /usr/include/c++/14/bits/locale_facets_nonio.h
+ /usr/include/c++/14/bits/locale_facets_nonio.tcc
+ /usr/include/c++/14/bits/localefwd.h
+ /usr/include/c++/14/bits/memoryfwd.h
+ /usr/include/c++/14/bits/move.h
+ /usr/include/c++/14/bits/nested_exception.h
+ /usr/include/c++/14/bits/new_allocator.h
+ /usr/include/c++/14/bits/ostream_insert.h
+ /usr/include/c++/14/bits/postypes.h
+ /usr/include/c++/14/bits/predefined_ops.h
+ /usr/include/c++/14/bits/ptr_traits.h
+ /usr/include/c++/14/bits/range_access.h
+ /usr/include/c++/14/bits/refwrap.h
+ /usr/include/c++/14/bits/requires_hosted.h
+ /usr/include/c++/14/bits/shared_ptr.h
+ /usr/include/c++/14/bits/shared_ptr_atomic.h
+ /usr/include/c++/14/bits/shared_ptr_base.h
+ /usr/include/c++/14/bits/std_abs.h
+ /usr/include/c++/14/bits/stl_algo.h
+ /usr/include/c++/14/bits/stl_algobase.h
+ /usr/include/c++/14/bits/stl_construct.h
+ /usr/include/c++/14/bits/stl_function.h
+ /usr/include/c++/14/bits/stl_heap.h
+ /usr/include/c++/14/bits/stl_iterator.h
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h
+ /usr/include/c++/14/bits/stl_iterator_base_types.h
+ /usr/include/c++/14/bits/stl_pair.h
+ /usr/include/c++/14/bits/stl_raw_storage_iter.h
+ /usr/include/c++/14/bits/stl_relops.h
+ /usr/include/c++/14/bits/stl_tempbuf.h
+ /usr/include/c++/14/bits/stl_uninitialized.h
+ /usr/include/c++/14/bits/stream_iterator.h
+ /usr/include/c++/14/bits/streambuf.tcc
+ /usr/include/c++/14/bits/streambuf_iterator.h
+ /usr/include/c++/14/bits/stringfwd.h
+ /usr/include/c++/14/bits/uniform_int_dist.h
+ /usr/include/c++/14/bits/unique_ptr.h
+ /usr/include/c++/14/bits/uses_allocator.h
+ /usr/include/c++/14/bits/utility.h
+ /usr/include/c++/14/bits/version.h
+ /usr/include/c++/14/cassert
+ /usr/include/c++/14/cctype
+ /usr/include/c++/14/cerrno
+ /usr/include/c++/14/clocale
+ /usr/include/c++/14/cstdio
+ /usr/include/c++/14/cstdlib
+ /usr/include/c++/14/cstring
+ /usr/include/c++/14/ctime
+ /usr/include/c++/14/cwchar
+ /usr/include/c++/14/cwctype
+ /usr/include/c++/14/debug/assertions.h
+ /usr/include/c++/14/debug/debug.h
+ /usr/include/c++/14/exception
+ /usr/include/c++/14/ext/aligned_buffer.h
+ /usr/include/c++/14/ext/alloc_traits.h
+ /usr/include/c++/14/ext/atomicity.h
+ /usr/include/c++/14/ext/concurrence.h
+ /usr/include/c++/14/ext/numeric_traits.h
+ /usr/include/c++/14/ext/string_conversions.h
+ /usr/include/c++/14/ext/type_traits.h
+ /usr/include/c++/14/initializer_list
+ /usr/include/c++/14/iosfwd
+ /usr/include/c++/14/iterator
+ /usr/include/c++/14/limits
+ /usr/include/c++/14/locale
+ /usr/include/c++/14/memory
+ /usr/include/c++/14/new
+ /usr/include/c++/14/stdexcept
+ /usr/include/c++/14/streambuf
+ /usr/include/c++/14/string
+ /usr/include/c++/14/system_error
+ /usr/include/c++/14/tuple
+ /usr/include/c++/14/type_traits
+ /usr/include/c++/14/typeinfo
+ /usr/include/c++/14/utility
+ /usr/include/c++/14/x86_64-redhat-linux/bits/atomic_word.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_base.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_inline.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr-default.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/messages_members.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/time_members.h
/usr/include/ctype.h
/usr/include/endian.h
/usr/include/errno.h
@@ -656,17 +662,17 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o
/usr/include/time.h
/usr/include/wchar.h
/usr/include/wctype.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdint.h
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/optional.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/string_view.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/grammar.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_parse.hpp
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/optional.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/string_view.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/grammar.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse.hpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -690,6 +696,7 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o
/usr/include/bits/select.h
/usr/include/bits/setjmp.h
/usr/include/bits/stdint-intn.h
+ /usr/include/bits/stdint-least.h
/usr/include/bits/stdint-uintn.h
/usr/include/bits/stdio.h
/usr/include/bits/stdio_lim.h
@@ -734,126 +741,127 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o
/usr/include/bits/wchar.h
/usr/include/bits/wctype-wchar.h
/usr/include/bits/wordsize.h
- /usr/include/c++/13/algorithm
- /usr/include/c++/13/backward/auto_ptr.h
- /usr/include/c++/13/backward/binders.h
- /usr/include/c++/13/bit
- /usr/include/c++/13/bits/algorithmfwd.h
- /usr/include/c++/13/bits/align.h
- /usr/include/c++/13/bits/alloc_traits.h
- /usr/include/c++/13/bits/allocated_ptr.h
- /usr/include/c++/13/bits/allocator.h
- /usr/include/c++/13/bits/atomic_base.h
- /usr/include/c++/13/bits/atomic_lockfree_defines.h
- /usr/include/c++/13/bits/basic_string.h
- /usr/include/c++/13/bits/basic_string.tcc
- /usr/include/c++/13/bits/char_traits.h
- /usr/include/c++/13/bits/charconv.h
- /usr/include/c++/13/bits/codecvt.h
- /usr/include/c++/13/bits/concept_check.h
- /usr/include/c++/13/bits/cpp_type_traits.h
- /usr/include/c++/13/bits/cxxabi_forced.h
- /usr/include/c++/13/bits/cxxabi_init_exception.h
- /usr/include/c++/13/bits/exception.h
- /usr/include/c++/13/bits/exception_defines.h
- /usr/include/c++/13/bits/exception_ptr.h
- /usr/include/c++/13/bits/functexcept.h
- /usr/include/c++/13/bits/functional_hash.h
- /usr/include/c++/13/bits/hash_bytes.h
- /usr/include/c++/13/bits/invoke.h
- /usr/include/c++/13/bits/ios_base.h
- /usr/include/c++/13/bits/locale_classes.h
- /usr/include/c++/13/bits/locale_classes.tcc
- /usr/include/c++/13/bits/locale_conv.h
- /usr/include/c++/13/bits/locale_facets.h
- /usr/include/c++/13/bits/locale_facets.tcc
- /usr/include/c++/13/bits/locale_facets_nonio.h
- /usr/include/c++/13/bits/locale_facets_nonio.tcc
- /usr/include/c++/13/bits/localefwd.h
- /usr/include/c++/13/bits/memoryfwd.h
- /usr/include/c++/13/bits/move.h
- /usr/include/c++/13/bits/nested_exception.h
- /usr/include/c++/13/bits/new_allocator.h
- /usr/include/c++/13/bits/ostream_insert.h
- /usr/include/c++/13/bits/postypes.h
- /usr/include/c++/13/bits/predefined_ops.h
- /usr/include/c++/13/bits/ptr_traits.h
- /usr/include/c++/13/bits/range_access.h
- /usr/include/c++/13/bits/refwrap.h
- /usr/include/c++/13/bits/requires_hosted.h
- /usr/include/c++/13/bits/shared_ptr.h
- /usr/include/c++/13/bits/shared_ptr_atomic.h
- /usr/include/c++/13/bits/shared_ptr_base.h
- /usr/include/c++/13/bits/std_abs.h
- /usr/include/c++/13/bits/stl_algo.h
- /usr/include/c++/13/bits/stl_algobase.h
- /usr/include/c++/13/bits/stl_construct.h
- /usr/include/c++/13/bits/stl_function.h
- /usr/include/c++/13/bits/stl_heap.h
- /usr/include/c++/13/bits/stl_iterator.h
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h
- /usr/include/c++/13/bits/stl_iterator_base_types.h
- /usr/include/c++/13/bits/stl_pair.h
- /usr/include/c++/13/bits/stl_raw_storage_iter.h
- /usr/include/c++/13/bits/stl_relops.h
- /usr/include/c++/13/bits/stl_tempbuf.h
- /usr/include/c++/13/bits/stl_uninitialized.h
- /usr/include/c++/13/bits/stream_iterator.h
- /usr/include/c++/13/bits/streambuf.tcc
- /usr/include/c++/13/bits/streambuf_iterator.h
- /usr/include/c++/13/bits/stringfwd.h
- /usr/include/c++/13/bits/uniform_int_dist.h
- /usr/include/c++/13/bits/unique_ptr.h
- /usr/include/c++/13/bits/uses_allocator.h
- /usr/include/c++/13/bits/utility.h
- /usr/include/c++/13/cassert
- /usr/include/c++/13/cctype
- /usr/include/c++/13/cerrno
- /usr/include/c++/13/clocale
- /usr/include/c++/13/cstdio
- /usr/include/c++/13/cstdlib
- /usr/include/c++/13/cstring
- /usr/include/c++/13/ctime
- /usr/include/c++/13/cwchar
- /usr/include/c++/13/cwctype
- /usr/include/c++/13/debug/assertions.h
- /usr/include/c++/13/debug/debug.h
- /usr/include/c++/13/exception
- /usr/include/c++/13/ext/aligned_buffer.h
- /usr/include/c++/13/ext/alloc_traits.h
- /usr/include/c++/13/ext/atomicity.h
- /usr/include/c++/13/ext/concurrence.h
- /usr/include/c++/13/ext/numeric_traits.h
- /usr/include/c++/13/ext/string_conversions.h
- /usr/include/c++/13/ext/type_traits.h
- /usr/include/c++/13/initializer_list
- /usr/include/c++/13/iosfwd
- /usr/include/c++/13/iterator
- /usr/include/c++/13/limits
- /usr/include/c++/13/locale
- /usr/include/c++/13/memory
- /usr/include/c++/13/new
- /usr/include/c++/13/stdexcept
- /usr/include/c++/13/streambuf
- /usr/include/c++/13/string
- /usr/include/c++/13/system_error
- /usr/include/c++/13/tuple
- /usr/include/c++/13/type_traits
- /usr/include/c++/13/typeinfo
- /usr/include/c++/13/utility
- /usr/include/c++/13/x86_64-redhat-linux/bits/atomic_word.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_base.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/messages_members.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/time_members.h
+ /usr/include/c++/14/algorithm
+ /usr/include/c++/14/backward/auto_ptr.h
+ /usr/include/c++/14/backward/binders.h
+ /usr/include/c++/14/bit
+ /usr/include/c++/14/bits/algorithmfwd.h
+ /usr/include/c++/14/bits/align.h
+ /usr/include/c++/14/bits/alloc_traits.h
+ /usr/include/c++/14/bits/allocated_ptr.h
+ /usr/include/c++/14/bits/allocator.h
+ /usr/include/c++/14/bits/atomic_base.h
+ /usr/include/c++/14/bits/atomic_lockfree_defines.h
+ /usr/include/c++/14/bits/basic_string.h
+ /usr/include/c++/14/bits/basic_string.tcc
+ /usr/include/c++/14/bits/char_traits.h
+ /usr/include/c++/14/bits/charconv.h
+ /usr/include/c++/14/bits/codecvt.h
+ /usr/include/c++/14/bits/concept_check.h
+ /usr/include/c++/14/bits/cpp_type_traits.h
+ /usr/include/c++/14/bits/cxxabi_forced.h
+ /usr/include/c++/14/bits/cxxabi_init_exception.h
+ /usr/include/c++/14/bits/exception.h
+ /usr/include/c++/14/bits/exception_defines.h
+ /usr/include/c++/14/bits/exception_ptr.h
+ /usr/include/c++/14/bits/functexcept.h
+ /usr/include/c++/14/bits/functional_hash.h
+ /usr/include/c++/14/bits/hash_bytes.h
+ /usr/include/c++/14/bits/invoke.h
+ /usr/include/c++/14/bits/ios_base.h
+ /usr/include/c++/14/bits/locale_classes.h
+ /usr/include/c++/14/bits/locale_classes.tcc
+ /usr/include/c++/14/bits/locale_conv.h
+ /usr/include/c++/14/bits/locale_facets.h
+ /usr/include/c++/14/bits/locale_facets.tcc
+ /usr/include/c++/14/bits/locale_facets_nonio.h
+ /usr/include/c++/14/bits/locale_facets_nonio.tcc
+ /usr/include/c++/14/bits/localefwd.h
+ /usr/include/c++/14/bits/memoryfwd.h
+ /usr/include/c++/14/bits/move.h
+ /usr/include/c++/14/bits/nested_exception.h
+ /usr/include/c++/14/bits/new_allocator.h
+ /usr/include/c++/14/bits/ostream_insert.h
+ /usr/include/c++/14/bits/postypes.h
+ /usr/include/c++/14/bits/predefined_ops.h
+ /usr/include/c++/14/bits/ptr_traits.h
+ /usr/include/c++/14/bits/range_access.h
+ /usr/include/c++/14/bits/refwrap.h
+ /usr/include/c++/14/bits/requires_hosted.h
+ /usr/include/c++/14/bits/shared_ptr.h
+ /usr/include/c++/14/bits/shared_ptr_atomic.h
+ /usr/include/c++/14/bits/shared_ptr_base.h
+ /usr/include/c++/14/bits/std_abs.h
+ /usr/include/c++/14/bits/stl_algo.h
+ /usr/include/c++/14/bits/stl_algobase.h
+ /usr/include/c++/14/bits/stl_construct.h
+ /usr/include/c++/14/bits/stl_function.h
+ /usr/include/c++/14/bits/stl_heap.h
+ /usr/include/c++/14/bits/stl_iterator.h
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h
+ /usr/include/c++/14/bits/stl_iterator_base_types.h
+ /usr/include/c++/14/bits/stl_pair.h
+ /usr/include/c++/14/bits/stl_raw_storage_iter.h
+ /usr/include/c++/14/bits/stl_relops.h
+ /usr/include/c++/14/bits/stl_tempbuf.h
+ /usr/include/c++/14/bits/stl_uninitialized.h
+ /usr/include/c++/14/bits/stream_iterator.h
+ /usr/include/c++/14/bits/streambuf.tcc
+ /usr/include/c++/14/bits/streambuf_iterator.h
+ /usr/include/c++/14/bits/stringfwd.h
+ /usr/include/c++/14/bits/uniform_int_dist.h
+ /usr/include/c++/14/bits/unique_ptr.h
+ /usr/include/c++/14/bits/uses_allocator.h
+ /usr/include/c++/14/bits/utility.h
+ /usr/include/c++/14/bits/version.h
+ /usr/include/c++/14/cassert
+ /usr/include/c++/14/cctype
+ /usr/include/c++/14/cerrno
+ /usr/include/c++/14/clocale
+ /usr/include/c++/14/cstdio
+ /usr/include/c++/14/cstdlib
+ /usr/include/c++/14/cstring
+ /usr/include/c++/14/ctime
+ /usr/include/c++/14/cwchar
+ /usr/include/c++/14/cwctype
+ /usr/include/c++/14/debug/assertions.h
+ /usr/include/c++/14/debug/debug.h
+ /usr/include/c++/14/exception
+ /usr/include/c++/14/ext/aligned_buffer.h
+ /usr/include/c++/14/ext/alloc_traits.h
+ /usr/include/c++/14/ext/atomicity.h
+ /usr/include/c++/14/ext/concurrence.h
+ /usr/include/c++/14/ext/numeric_traits.h
+ /usr/include/c++/14/ext/string_conversions.h
+ /usr/include/c++/14/ext/type_traits.h
+ /usr/include/c++/14/initializer_list
+ /usr/include/c++/14/iosfwd
+ /usr/include/c++/14/iterator
+ /usr/include/c++/14/limits
+ /usr/include/c++/14/locale
+ /usr/include/c++/14/memory
+ /usr/include/c++/14/new
+ /usr/include/c++/14/stdexcept
+ /usr/include/c++/14/streambuf
+ /usr/include/c++/14/string
+ /usr/include/c++/14/system_error
+ /usr/include/c++/14/tuple
+ /usr/include/c++/14/type_traits
+ /usr/include/c++/14/typeinfo
+ /usr/include/c++/14/utility
+ /usr/include/c++/14/x86_64-redhat-linux/bits/atomic_word.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_base.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_inline.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr-default.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/messages_members.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/time_members.h
/usr/include/ctype.h
/usr/include/endian.h
/usr/include/errno.h
@@ -879,17 +887,17 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o
/usr/include/time.h
/usr/include/wchar.h
/usr/include/wctype.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdint.h
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/optional.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/string_view.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/grammar.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_parse_authority.hpp
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/optional.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/string_view.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/grammar.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse_authority.hpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_resolve.cpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_resolve.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -913,6 +921,7 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o
/usr/include/bits/select.h
/usr/include/bits/setjmp.h
/usr/include/bits/stdint-intn.h
+ /usr/include/bits/stdint-least.h
/usr/include/bits/stdint-uintn.h
/usr/include/bits/stdio.h
/usr/include/bits/stdio_lim.h
@@ -956,116 +965,117 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o
/usr/include/bits/waitstatus.h
/usr/include/bits/wchar.h
/usr/include/bits/wordsize.h
- /usr/include/c++/13/algorithm
- /usr/include/c++/13/backward/auto_ptr.h
- /usr/include/c++/13/backward/binders.h
- /usr/include/c++/13/bit
- /usr/include/c++/13/bits/algorithmfwd.h
- /usr/include/c++/13/bits/align.h
- /usr/include/c++/13/bits/alloc_traits.h
- /usr/include/c++/13/bits/allocated_ptr.h
- /usr/include/c++/13/bits/allocator.h
- /usr/include/c++/13/bits/atomic_base.h
- /usr/include/c++/13/bits/atomic_lockfree_defines.h
- /usr/include/c++/13/bits/basic_string.h
- /usr/include/c++/13/bits/basic_string.tcc
- /usr/include/c++/13/bits/char_traits.h
- /usr/include/c++/13/bits/charconv.h
- /usr/include/c++/13/bits/concept_check.h
- /usr/include/c++/13/bits/cpp_type_traits.h
- /usr/include/c++/13/bits/cxxabi_forced.h
- /usr/include/c++/13/bits/cxxabi_init_exception.h
- /usr/include/c++/13/bits/exception.h
- /usr/include/c++/13/bits/exception_defines.h
- /usr/include/c++/13/bits/exception_ptr.h
- /usr/include/c++/13/bits/functexcept.h
- /usr/include/c++/13/bits/functional_hash.h
- /usr/include/c++/13/bits/hash_bytes.h
- /usr/include/c++/13/bits/invoke.h
- /usr/include/c++/13/bits/ios_base.h
- /usr/include/c++/13/bits/locale_classes.h
- /usr/include/c++/13/bits/locale_classes.tcc
- /usr/include/c++/13/bits/localefwd.h
- /usr/include/c++/13/bits/memoryfwd.h
- /usr/include/c++/13/bits/move.h
- /usr/include/c++/13/bits/nested_exception.h
- /usr/include/c++/13/bits/new_allocator.h
- /usr/include/c++/13/bits/ostream_insert.h
- /usr/include/c++/13/bits/postypes.h
- /usr/include/c++/13/bits/predefined_ops.h
- /usr/include/c++/13/bits/ptr_traits.h
- /usr/include/c++/13/bits/range_access.h
- /usr/include/c++/13/bits/refwrap.h
- /usr/include/c++/13/bits/requires_hosted.h
- /usr/include/c++/13/bits/shared_ptr.h
- /usr/include/c++/13/bits/shared_ptr_atomic.h
- /usr/include/c++/13/bits/shared_ptr_base.h
- /usr/include/c++/13/bits/std_abs.h
- /usr/include/c++/13/bits/std_function.h
- /usr/include/c++/13/bits/stl_algo.h
- /usr/include/c++/13/bits/stl_algobase.h
- /usr/include/c++/13/bits/stl_construct.h
- /usr/include/c++/13/bits/stl_function.h
- /usr/include/c++/13/bits/stl_heap.h
- /usr/include/c++/13/bits/stl_iterator.h
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h
- /usr/include/c++/13/bits/stl_iterator_base_types.h
- /usr/include/c++/13/bits/stl_pair.h
- /usr/include/c++/13/bits/stl_raw_storage_iter.h
- /usr/include/c++/13/bits/stl_relops.h
- /usr/include/c++/13/bits/stl_tempbuf.h
- /usr/include/c++/13/bits/stl_uninitialized.h
- /usr/include/c++/13/bits/stream_iterator.h
- /usr/include/c++/13/bits/streambuf.tcc
- /usr/include/c++/13/bits/streambuf_iterator.h
- /usr/include/c++/13/bits/stringfwd.h
- /usr/include/c++/13/bits/uniform_int_dist.h
- /usr/include/c++/13/bits/unique_ptr.h
- /usr/include/c++/13/bits/uses_allocator.h
- /usr/include/c++/13/bits/utility.h
- /usr/include/c++/13/cassert
- /usr/include/c++/13/cctype
- /usr/include/c++/13/cerrno
- /usr/include/c++/13/clocale
- /usr/include/c++/13/cstddef
- /usr/include/c++/13/cstdint
- /usr/include/c++/13/cstdio
- /usr/include/c++/13/cstdlib
- /usr/include/c++/13/cstring
- /usr/include/c++/13/cwchar
- /usr/include/c++/13/debug/assertions.h
- /usr/include/c++/13/debug/debug.h
- /usr/include/c++/13/exception
- /usr/include/c++/13/ext/aligned_buffer.h
- /usr/include/c++/13/ext/alloc_traits.h
- /usr/include/c++/13/ext/atomicity.h
- /usr/include/c++/13/ext/concurrence.h
- /usr/include/c++/13/ext/numeric_traits.h
- /usr/include/c++/13/ext/string_conversions.h
- /usr/include/c++/13/ext/type_traits.h
- /usr/include/c++/13/functional
- /usr/include/c++/13/initializer_list
- /usr/include/c++/13/iosfwd
- /usr/include/c++/13/iterator
- /usr/include/c++/13/memory
- /usr/include/c++/13/new
- /usr/include/c++/13/stdexcept
- /usr/include/c++/13/streambuf
- /usr/include/c++/13/string
- /usr/include/c++/13/system_error
- /usr/include/c++/13/tuple
- /usr/include/c++/13/type_traits
- /usr/include/c++/13/typeinfo
- /usr/include/c++/13/utility
- /usr/include/c++/13/x86_64-redhat-linux/bits/atomic_word.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h
+ /usr/include/c++/14/algorithm
+ /usr/include/c++/14/backward/auto_ptr.h
+ /usr/include/c++/14/backward/binders.h
+ /usr/include/c++/14/bit
+ /usr/include/c++/14/bits/algorithmfwd.h
+ /usr/include/c++/14/bits/align.h
+ /usr/include/c++/14/bits/alloc_traits.h
+ /usr/include/c++/14/bits/allocated_ptr.h
+ /usr/include/c++/14/bits/allocator.h
+ /usr/include/c++/14/bits/atomic_base.h
+ /usr/include/c++/14/bits/atomic_lockfree_defines.h
+ /usr/include/c++/14/bits/basic_string.h
+ /usr/include/c++/14/bits/basic_string.tcc
+ /usr/include/c++/14/bits/char_traits.h
+ /usr/include/c++/14/bits/charconv.h
+ /usr/include/c++/14/bits/concept_check.h
+ /usr/include/c++/14/bits/cpp_type_traits.h
+ /usr/include/c++/14/bits/cxxabi_forced.h
+ /usr/include/c++/14/bits/cxxabi_init_exception.h
+ /usr/include/c++/14/bits/exception.h
+ /usr/include/c++/14/bits/exception_defines.h
+ /usr/include/c++/14/bits/exception_ptr.h
+ /usr/include/c++/14/bits/functexcept.h
+ /usr/include/c++/14/bits/functional_hash.h
+ /usr/include/c++/14/bits/hash_bytes.h
+ /usr/include/c++/14/bits/invoke.h
+ /usr/include/c++/14/bits/ios_base.h
+ /usr/include/c++/14/bits/locale_classes.h
+ /usr/include/c++/14/bits/locale_classes.tcc
+ /usr/include/c++/14/bits/localefwd.h
+ /usr/include/c++/14/bits/memoryfwd.h
+ /usr/include/c++/14/bits/move.h
+ /usr/include/c++/14/bits/nested_exception.h
+ /usr/include/c++/14/bits/new_allocator.h
+ /usr/include/c++/14/bits/ostream_insert.h
+ /usr/include/c++/14/bits/postypes.h
+ /usr/include/c++/14/bits/predefined_ops.h
+ /usr/include/c++/14/bits/ptr_traits.h
+ /usr/include/c++/14/bits/range_access.h
+ /usr/include/c++/14/bits/refwrap.h
+ /usr/include/c++/14/bits/requires_hosted.h
+ /usr/include/c++/14/bits/shared_ptr.h
+ /usr/include/c++/14/bits/shared_ptr_atomic.h
+ /usr/include/c++/14/bits/shared_ptr_base.h
+ /usr/include/c++/14/bits/std_abs.h
+ /usr/include/c++/14/bits/std_function.h
+ /usr/include/c++/14/bits/stl_algo.h
+ /usr/include/c++/14/bits/stl_algobase.h
+ /usr/include/c++/14/bits/stl_construct.h
+ /usr/include/c++/14/bits/stl_function.h
+ /usr/include/c++/14/bits/stl_heap.h
+ /usr/include/c++/14/bits/stl_iterator.h
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h
+ /usr/include/c++/14/bits/stl_iterator_base_types.h
+ /usr/include/c++/14/bits/stl_pair.h
+ /usr/include/c++/14/bits/stl_raw_storage_iter.h
+ /usr/include/c++/14/bits/stl_relops.h
+ /usr/include/c++/14/bits/stl_tempbuf.h
+ /usr/include/c++/14/bits/stl_uninitialized.h
+ /usr/include/c++/14/bits/stream_iterator.h
+ /usr/include/c++/14/bits/streambuf.tcc
+ /usr/include/c++/14/bits/streambuf_iterator.h
+ /usr/include/c++/14/bits/stringfwd.h
+ /usr/include/c++/14/bits/uniform_int_dist.h
+ /usr/include/c++/14/bits/unique_ptr.h
+ /usr/include/c++/14/bits/uses_allocator.h
+ /usr/include/c++/14/bits/utility.h
+ /usr/include/c++/14/bits/version.h
+ /usr/include/c++/14/cassert
+ /usr/include/c++/14/cctype
+ /usr/include/c++/14/cerrno
+ /usr/include/c++/14/clocale
+ /usr/include/c++/14/cstddef
+ /usr/include/c++/14/cstdint
+ /usr/include/c++/14/cstdio
+ /usr/include/c++/14/cstdlib
+ /usr/include/c++/14/cstring
+ /usr/include/c++/14/cwchar
+ /usr/include/c++/14/debug/assertions.h
+ /usr/include/c++/14/debug/debug.h
+ /usr/include/c++/14/exception
+ /usr/include/c++/14/ext/aligned_buffer.h
+ /usr/include/c++/14/ext/alloc_traits.h
+ /usr/include/c++/14/ext/atomicity.h
+ /usr/include/c++/14/ext/concurrence.h
+ /usr/include/c++/14/ext/numeric_traits.h
+ /usr/include/c++/14/ext/string_conversions.h
+ /usr/include/c++/14/ext/type_traits.h
+ /usr/include/c++/14/functional
+ /usr/include/c++/14/initializer_list
+ /usr/include/c++/14/iosfwd
+ /usr/include/c++/14/iterator
+ /usr/include/c++/14/memory
+ /usr/include/c++/14/new
+ /usr/include/c++/14/stdexcept
+ /usr/include/c++/14/streambuf
+ /usr/include/c++/14/string
+ /usr/include/c++/14/system_error
+ /usr/include/c++/14/tuple
+ /usr/include/c++/14/type_traits
+ /usr/include/c++/14/typeinfo
+ /usr/include/c++/14/utility
+ /usr/include/c++/14/x86_64-redhat-linux/bits/atomic_word.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr-default.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h
/usr/include/ctype.h
/usr/include/endian.h
/usr/include/errno.h
@@ -1089,24 +1099,24 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o
/usr/include/sys/types.h
/usr/include/time.h
/usr/include/wchar.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdint.h
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/optional.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/string_view.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/config.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/uri.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/algorithm_find.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_resolve.hpp
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/optional.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/string_view.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/config.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/algorithm_find.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_resolve.hpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/uri.cpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -1130,6 +1140,7 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o
/usr/include/bits/select.h
/usr/include/bits/setjmp.h
/usr/include/bits/stdint-intn.h
+ /usr/include/bits/stdint-least.h
/usr/include/bits/stdint-uintn.h
/usr/include/bits/stdio.h
/usr/include/bits/stdio_lim.h
@@ -1174,132 +1185,133 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o
/usr/include/bits/wchar.h
/usr/include/bits/wctype-wchar.h
/usr/include/bits/wordsize.h
- /usr/include/c++/13/algorithm
- /usr/include/c++/13/backward/auto_ptr.h
- /usr/include/c++/13/backward/binders.h
- /usr/include/c++/13/bit
- /usr/include/c++/13/bits/algorithmfwd.h
- /usr/include/c++/13/bits/align.h
- /usr/include/c++/13/bits/alloc_traits.h
- /usr/include/c++/13/bits/allocated_ptr.h
- /usr/include/c++/13/bits/allocator.h
- /usr/include/c++/13/bits/atomic_base.h
- /usr/include/c++/13/bits/atomic_lockfree_defines.h
- /usr/include/c++/13/bits/basic_string.h
- /usr/include/c++/13/bits/basic_string.tcc
- /usr/include/c++/13/bits/char_traits.h
- /usr/include/c++/13/bits/charconv.h
- /usr/include/c++/13/bits/codecvt.h
- /usr/include/c++/13/bits/concept_check.h
- /usr/include/c++/13/bits/cpp_type_traits.h
- /usr/include/c++/13/bits/cxxabi_forced.h
- /usr/include/c++/13/bits/cxxabi_init_exception.h
- /usr/include/c++/13/bits/exception.h
- /usr/include/c++/13/bits/exception_defines.h
- /usr/include/c++/13/bits/exception_ptr.h
- /usr/include/c++/13/bits/functexcept.h
- /usr/include/c++/13/bits/functional_hash.h
- /usr/include/c++/13/bits/hash_bytes.h
- /usr/include/c++/13/bits/invoke.h
- /usr/include/c++/13/bits/ios_base.h
- /usr/include/c++/13/bits/locale_classes.h
- /usr/include/c++/13/bits/locale_classes.tcc
- /usr/include/c++/13/bits/locale_conv.h
- /usr/include/c++/13/bits/locale_facets.h
- /usr/include/c++/13/bits/locale_facets.tcc
- /usr/include/c++/13/bits/locale_facets_nonio.h
- /usr/include/c++/13/bits/locale_facets_nonio.tcc
- /usr/include/c++/13/bits/localefwd.h
- /usr/include/c++/13/bits/memoryfwd.h
- /usr/include/c++/13/bits/move.h
- /usr/include/c++/13/bits/nested_exception.h
- /usr/include/c++/13/bits/new_allocator.h
- /usr/include/c++/13/bits/ostream_insert.h
- /usr/include/c++/13/bits/postypes.h
- /usr/include/c++/13/bits/predefined_ops.h
- /usr/include/c++/13/bits/ptr_traits.h
- /usr/include/c++/13/bits/range_access.h
- /usr/include/c++/13/bits/refwrap.h
- /usr/include/c++/13/bits/requires_hosted.h
- /usr/include/c++/13/bits/shared_ptr.h
- /usr/include/c++/13/bits/shared_ptr_atomic.h
- /usr/include/c++/13/bits/shared_ptr_base.h
- /usr/include/c++/13/bits/std_abs.h
- /usr/include/c++/13/bits/std_function.h
- /usr/include/c++/13/bits/stl_algo.h
- /usr/include/c++/13/bits/stl_algobase.h
- /usr/include/c++/13/bits/stl_bvector.h
- /usr/include/c++/13/bits/stl_construct.h
- /usr/include/c++/13/bits/stl_function.h
- /usr/include/c++/13/bits/stl_heap.h
- /usr/include/c++/13/bits/stl_iterator.h
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h
- /usr/include/c++/13/bits/stl_iterator_base_types.h
- /usr/include/c++/13/bits/stl_pair.h
- /usr/include/c++/13/bits/stl_raw_storage_iter.h
- /usr/include/c++/13/bits/stl_relops.h
- /usr/include/c++/13/bits/stl_tempbuf.h
- /usr/include/c++/13/bits/stl_uninitialized.h
- /usr/include/c++/13/bits/stl_vector.h
- /usr/include/c++/13/bits/stream_iterator.h
- /usr/include/c++/13/bits/streambuf.tcc
- /usr/include/c++/13/bits/streambuf_iterator.h
- /usr/include/c++/13/bits/stringfwd.h
- /usr/include/c++/13/bits/uniform_int_dist.h
- /usr/include/c++/13/bits/unique_ptr.h
- /usr/include/c++/13/bits/uses_allocator.h
- /usr/include/c++/13/bits/utility.h
- /usr/include/c++/13/bits/vector.tcc
- /usr/include/c++/13/cassert
- /usr/include/c++/13/cctype
- /usr/include/c++/13/cerrno
- /usr/include/c++/13/clocale
- /usr/include/c++/13/cstdint
- /usr/include/c++/13/cstdio
- /usr/include/c++/13/cstdlib
- /usr/include/c++/13/cstring
- /usr/include/c++/13/ctime
- /usr/include/c++/13/cwchar
- /usr/include/c++/13/cwctype
- /usr/include/c++/13/debug/assertions.h
- /usr/include/c++/13/debug/debug.h
- /usr/include/c++/13/exception
- /usr/include/c++/13/ext/aligned_buffer.h
- /usr/include/c++/13/ext/alloc_traits.h
- /usr/include/c++/13/ext/atomicity.h
- /usr/include/c++/13/ext/concurrence.h
- /usr/include/c++/13/ext/numeric_traits.h
- /usr/include/c++/13/ext/string_conversions.h
- /usr/include/c++/13/ext/type_traits.h
- /usr/include/c++/13/functional
- /usr/include/c++/13/initializer_list
- /usr/include/c++/13/iosfwd
- /usr/include/c++/13/iterator
- /usr/include/c++/13/locale
- /usr/include/c++/13/memory
- /usr/include/c++/13/new
- /usr/include/c++/13/stdexcept
- /usr/include/c++/13/streambuf
- /usr/include/c++/13/string
- /usr/include/c++/13/system_error
- /usr/include/c++/13/tuple
- /usr/include/c++/13/type_traits
- /usr/include/c++/13/typeinfo
- /usr/include/c++/13/utility
- /usr/include/c++/13/vector
- /usr/include/c++/13/x86_64-redhat-linux/bits/atomic_word.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_base.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/messages_members.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/time_members.h
+ /usr/include/c++/14/algorithm
+ /usr/include/c++/14/backward/auto_ptr.h
+ /usr/include/c++/14/backward/binders.h
+ /usr/include/c++/14/bit
+ /usr/include/c++/14/bits/algorithmfwd.h
+ /usr/include/c++/14/bits/align.h
+ /usr/include/c++/14/bits/alloc_traits.h
+ /usr/include/c++/14/bits/allocated_ptr.h
+ /usr/include/c++/14/bits/allocator.h
+ /usr/include/c++/14/bits/atomic_base.h
+ /usr/include/c++/14/bits/atomic_lockfree_defines.h
+ /usr/include/c++/14/bits/basic_string.h
+ /usr/include/c++/14/bits/basic_string.tcc
+ /usr/include/c++/14/bits/char_traits.h
+ /usr/include/c++/14/bits/charconv.h
+ /usr/include/c++/14/bits/codecvt.h
+ /usr/include/c++/14/bits/concept_check.h
+ /usr/include/c++/14/bits/cpp_type_traits.h
+ /usr/include/c++/14/bits/cxxabi_forced.h
+ /usr/include/c++/14/bits/cxxabi_init_exception.h
+ /usr/include/c++/14/bits/exception.h
+ /usr/include/c++/14/bits/exception_defines.h
+ /usr/include/c++/14/bits/exception_ptr.h
+ /usr/include/c++/14/bits/functexcept.h
+ /usr/include/c++/14/bits/functional_hash.h
+ /usr/include/c++/14/bits/hash_bytes.h
+ /usr/include/c++/14/bits/invoke.h
+ /usr/include/c++/14/bits/ios_base.h
+ /usr/include/c++/14/bits/locale_classes.h
+ /usr/include/c++/14/bits/locale_classes.tcc
+ /usr/include/c++/14/bits/locale_conv.h
+ /usr/include/c++/14/bits/locale_facets.h
+ /usr/include/c++/14/bits/locale_facets.tcc
+ /usr/include/c++/14/bits/locale_facets_nonio.h
+ /usr/include/c++/14/bits/locale_facets_nonio.tcc
+ /usr/include/c++/14/bits/localefwd.h
+ /usr/include/c++/14/bits/memoryfwd.h
+ /usr/include/c++/14/bits/move.h
+ /usr/include/c++/14/bits/nested_exception.h
+ /usr/include/c++/14/bits/new_allocator.h
+ /usr/include/c++/14/bits/ostream_insert.h
+ /usr/include/c++/14/bits/postypes.h
+ /usr/include/c++/14/bits/predefined_ops.h
+ /usr/include/c++/14/bits/ptr_traits.h
+ /usr/include/c++/14/bits/range_access.h
+ /usr/include/c++/14/bits/refwrap.h
+ /usr/include/c++/14/bits/requires_hosted.h
+ /usr/include/c++/14/bits/shared_ptr.h
+ /usr/include/c++/14/bits/shared_ptr_atomic.h
+ /usr/include/c++/14/bits/shared_ptr_base.h
+ /usr/include/c++/14/bits/std_abs.h
+ /usr/include/c++/14/bits/std_function.h
+ /usr/include/c++/14/bits/stl_algo.h
+ /usr/include/c++/14/bits/stl_algobase.h
+ /usr/include/c++/14/bits/stl_bvector.h
+ /usr/include/c++/14/bits/stl_construct.h
+ /usr/include/c++/14/bits/stl_function.h
+ /usr/include/c++/14/bits/stl_heap.h
+ /usr/include/c++/14/bits/stl_iterator.h
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h
+ /usr/include/c++/14/bits/stl_iterator_base_types.h
+ /usr/include/c++/14/bits/stl_pair.h
+ /usr/include/c++/14/bits/stl_raw_storage_iter.h
+ /usr/include/c++/14/bits/stl_relops.h
+ /usr/include/c++/14/bits/stl_tempbuf.h
+ /usr/include/c++/14/bits/stl_uninitialized.h
+ /usr/include/c++/14/bits/stl_vector.h
+ /usr/include/c++/14/bits/stream_iterator.h
+ /usr/include/c++/14/bits/streambuf.tcc
+ /usr/include/c++/14/bits/streambuf_iterator.h
+ /usr/include/c++/14/bits/stringfwd.h
+ /usr/include/c++/14/bits/uniform_int_dist.h
+ /usr/include/c++/14/bits/unique_ptr.h
+ /usr/include/c++/14/bits/uses_allocator.h
+ /usr/include/c++/14/bits/utility.h
+ /usr/include/c++/14/bits/vector.tcc
+ /usr/include/c++/14/bits/version.h
+ /usr/include/c++/14/cassert
+ /usr/include/c++/14/cctype
+ /usr/include/c++/14/cerrno
+ /usr/include/c++/14/clocale
+ /usr/include/c++/14/cstdint
+ /usr/include/c++/14/cstdio
+ /usr/include/c++/14/cstdlib
+ /usr/include/c++/14/cstring
+ /usr/include/c++/14/ctime
+ /usr/include/c++/14/cwchar
+ /usr/include/c++/14/cwctype
+ /usr/include/c++/14/debug/assertions.h
+ /usr/include/c++/14/debug/debug.h
+ /usr/include/c++/14/exception
+ /usr/include/c++/14/ext/aligned_buffer.h
+ /usr/include/c++/14/ext/alloc_traits.h
+ /usr/include/c++/14/ext/atomicity.h
+ /usr/include/c++/14/ext/concurrence.h
+ /usr/include/c++/14/ext/numeric_traits.h
+ /usr/include/c++/14/ext/string_conversions.h
+ /usr/include/c++/14/ext/type_traits.h
+ /usr/include/c++/14/functional
+ /usr/include/c++/14/initializer_list
+ /usr/include/c++/14/iosfwd
+ /usr/include/c++/14/iterator
+ /usr/include/c++/14/locale
+ /usr/include/c++/14/memory
+ /usr/include/c++/14/new
+ /usr/include/c++/14/stdexcept
+ /usr/include/c++/14/streambuf
+ /usr/include/c++/14/string
+ /usr/include/c++/14/system_error
+ /usr/include/c++/14/tuple
+ /usr/include/c++/14/type_traits
+ /usr/include/c++/14/typeinfo
+ /usr/include/c++/14/utility
+ /usr/include/c++/14/vector
+ /usr/include/c++/14/x86_64-redhat-linux/bits/atomic_word.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_base.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_inline.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr-default.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/messages_members.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/time_members.h
/usr/include/ctype.h
/usr/include/endian.h
/usr/include/errno.h
@@ -1325,28 +1337,28 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o
/usr/include/time.h
/usr/include/wchar.h
/usr/include/wctype.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdint.h
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/optional.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/string_view.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/config.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/uri.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/algorithm.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_advance_parts.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_normalize.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_parse.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_percent_encode.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_resolve.hpp
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/optional.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/string_view.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/config.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/algorithm.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_advance_parts.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_percent_encode.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_resolve.hpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/uri_builder.cpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_builder.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -1370,6 +1382,7 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o
/usr/include/bits/select.h
/usr/include/bits/setjmp.h
/usr/include/bits/stdint-intn.h
+ /usr/include/bits/stdint-least.h
/usr/include/bits/stdint-uintn.h
/usr/include/bits/stdio.h
/usr/include/bits/stdio_lim.h
@@ -1414,128 +1427,129 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o
/usr/include/bits/wchar.h
/usr/include/bits/wctype-wchar.h
/usr/include/bits/wordsize.h
- /usr/include/c++/13/algorithm
- /usr/include/c++/13/backward/auto_ptr.h
- /usr/include/c++/13/backward/binders.h
- /usr/include/c++/13/bit
- /usr/include/c++/13/bits/algorithmfwd.h
- /usr/include/c++/13/bits/align.h
- /usr/include/c++/13/bits/alloc_traits.h
- /usr/include/c++/13/bits/allocated_ptr.h
- /usr/include/c++/13/bits/allocator.h
- /usr/include/c++/13/bits/atomic_base.h
- /usr/include/c++/13/bits/atomic_lockfree_defines.h
- /usr/include/c++/13/bits/basic_string.h
- /usr/include/c++/13/bits/basic_string.tcc
- /usr/include/c++/13/bits/char_traits.h
- /usr/include/c++/13/bits/charconv.h
- /usr/include/c++/13/bits/codecvt.h
- /usr/include/c++/13/bits/concept_check.h
- /usr/include/c++/13/bits/cpp_type_traits.h
- /usr/include/c++/13/bits/cxxabi_forced.h
- /usr/include/c++/13/bits/cxxabi_init_exception.h
- /usr/include/c++/13/bits/exception.h
- /usr/include/c++/13/bits/exception_defines.h
- /usr/include/c++/13/bits/exception_ptr.h
- /usr/include/c++/13/bits/functexcept.h
- /usr/include/c++/13/bits/functional_hash.h
- /usr/include/c++/13/bits/hash_bytes.h
- /usr/include/c++/13/bits/invoke.h
- /usr/include/c++/13/bits/ios_base.h
- /usr/include/c++/13/bits/locale_classes.h
- /usr/include/c++/13/bits/locale_classes.tcc
- /usr/include/c++/13/bits/locale_conv.h
- /usr/include/c++/13/bits/locale_facets.h
- /usr/include/c++/13/bits/locale_facets.tcc
- /usr/include/c++/13/bits/locale_facets_nonio.h
- /usr/include/c++/13/bits/locale_facets_nonio.tcc
- /usr/include/c++/13/bits/localefwd.h
- /usr/include/c++/13/bits/memoryfwd.h
- /usr/include/c++/13/bits/move.h
- /usr/include/c++/13/bits/nested_exception.h
- /usr/include/c++/13/bits/new_allocator.h
- /usr/include/c++/13/bits/ostream_insert.h
- /usr/include/c++/13/bits/postypes.h
- /usr/include/c++/13/bits/predefined_ops.h
- /usr/include/c++/13/bits/ptr_traits.h
- /usr/include/c++/13/bits/range_access.h
- /usr/include/c++/13/bits/refwrap.h
- /usr/include/c++/13/bits/requires_hosted.h
- /usr/include/c++/13/bits/shared_ptr.h
- /usr/include/c++/13/bits/shared_ptr_atomic.h
- /usr/include/c++/13/bits/shared_ptr_base.h
- /usr/include/c++/13/bits/std_abs.h
- /usr/include/c++/13/bits/std_function.h
- /usr/include/c++/13/bits/stl_algo.h
- /usr/include/c++/13/bits/stl_algobase.h
- /usr/include/c++/13/bits/stl_construct.h
- /usr/include/c++/13/bits/stl_function.h
- /usr/include/c++/13/bits/stl_heap.h
- /usr/include/c++/13/bits/stl_iterator.h
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h
- /usr/include/c++/13/bits/stl_iterator_base_types.h
- /usr/include/c++/13/bits/stl_pair.h
- /usr/include/c++/13/bits/stl_raw_storage_iter.h
- /usr/include/c++/13/bits/stl_relops.h
- /usr/include/c++/13/bits/stl_tempbuf.h
- /usr/include/c++/13/bits/stl_uninitialized.h
- /usr/include/c++/13/bits/stream_iterator.h
- /usr/include/c++/13/bits/streambuf.tcc
- /usr/include/c++/13/bits/streambuf_iterator.h
- /usr/include/c++/13/bits/stringfwd.h
- /usr/include/c++/13/bits/uniform_int_dist.h
- /usr/include/c++/13/bits/unique_ptr.h
- /usr/include/c++/13/bits/uses_allocator.h
- /usr/include/c++/13/bits/utility.h
- /usr/include/c++/13/cassert
- /usr/include/c++/13/cctype
- /usr/include/c++/13/cerrno
- /usr/include/c++/13/clocale
- /usr/include/c++/13/cstdint
- /usr/include/c++/13/cstdio
- /usr/include/c++/13/cstdlib
- /usr/include/c++/13/cstring
- /usr/include/c++/13/ctime
- /usr/include/c++/13/cwchar
- /usr/include/c++/13/cwctype
- /usr/include/c++/13/debug/assertions.h
- /usr/include/c++/13/debug/debug.h
- /usr/include/c++/13/exception
- /usr/include/c++/13/ext/aligned_buffer.h
- /usr/include/c++/13/ext/alloc_traits.h
- /usr/include/c++/13/ext/atomicity.h
- /usr/include/c++/13/ext/concurrence.h
- /usr/include/c++/13/ext/numeric_traits.h
- /usr/include/c++/13/ext/string_conversions.h
- /usr/include/c++/13/ext/type_traits.h
- /usr/include/c++/13/functional
- /usr/include/c++/13/initializer_list
- /usr/include/c++/13/iosfwd
- /usr/include/c++/13/iterator
- /usr/include/c++/13/locale
- /usr/include/c++/13/memory
- /usr/include/c++/13/new
- /usr/include/c++/13/stdexcept
- /usr/include/c++/13/streambuf
- /usr/include/c++/13/string
- /usr/include/c++/13/system_error
- /usr/include/c++/13/tuple
- /usr/include/c++/13/type_traits
- /usr/include/c++/13/typeinfo
- /usr/include/c++/13/utility
- /usr/include/c++/13/x86_64-redhat-linux/bits/atomic_word.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_base.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/messages_members.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/time_members.h
+ /usr/include/c++/14/algorithm
+ /usr/include/c++/14/backward/auto_ptr.h
+ /usr/include/c++/14/backward/binders.h
+ /usr/include/c++/14/bit
+ /usr/include/c++/14/bits/algorithmfwd.h
+ /usr/include/c++/14/bits/align.h
+ /usr/include/c++/14/bits/alloc_traits.h
+ /usr/include/c++/14/bits/allocated_ptr.h
+ /usr/include/c++/14/bits/allocator.h
+ /usr/include/c++/14/bits/atomic_base.h
+ /usr/include/c++/14/bits/atomic_lockfree_defines.h
+ /usr/include/c++/14/bits/basic_string.h
+ /usr/include/c++/14/bits/basic_string.tcc
+ /usr/include/c++/14/bits/char_traits.h
+ /usr/include/c++/14/bits/charconv.h
+ /usr/include/c++/14/bits/codecvt.h
+ /usr/include/c++/14/bits/concept_check.h
+ /usr/include/c++/14/bits/cpp_type_traits.h
+ /usr/include/c++/14/bits/cxxabi_forced.h
+ /usr/include/c++/14/bits/cxxabi_init_exception.h
+ /usr/include/c++/14/bits/exception.h
+ /usr/include/c++/14/bits/exception_defines.h
+ /usr/include/c++/14/bits/exception_ptr.h
+ /usr/include/c++/14/bits/functexcept.h
+ /usr/include/c++/14/bits/functional_hash.h
+ /usr/include/c++/14/bits/hash_bytes.h
+ /usr/include/c++/14/bits/invoke.h
+ /usr/include/c++/14/bits/ios_base.h
+ /usr/include/c++/14/bits/locale_classes.h
+ /usr/include/c++/14/bits/locale_classes.tcc
+ /usr/include/c++/14/bits/locale_conv.h
+ /usr/include/c++/14/bits/locale_facets.h
+ /usr/include/c++/14/bits/locale_facets.tcc
+ /usr/include/c++/14/bits/locale_facets_nonio.h
+ /usr/include/c++/14/bits/locale_facets_nonio.tcc
+ /usr/include/c++/14/bits/localefwd.h
+ /usr/include/c++/14/bits/memoryfwd.h
+ /usr/include/c++/14/bits/move.h
+ /usr/include/c++/14/bits/nested_exception.h
+ /usr/include/c++/14/bits/new_allocator.h
+ /usr/include/c++/14/bits/ostream_insert.h
+ /usr/include/c++/14/bits/postypes.h
+ /usr/include/c++/14/bits/predefined_ops.h
+ /usr/include/c++/14/bits/ptr_traits.h
+ /usr/include/c++/14/bits/range_access.h
+ /usr/include/c++/14/bits/refwrap.h
+ /usr/include/c++/14/bits/requires_hosted.h
+ /usr/include/c++/14/bits/shared_ptr.h
+ /usr/include/c++/14/bits/shared_ptr_atomic.h
+ /usr/include/c++/14/bits/shared_ptr_base.h
+ /usr/include/c++/14/bits/std_abs.h
+ /usr/include/c++/14/bits/std_function.h
+ /usr/include/c++/14/bits/stl_algo.h
+ /usr/include/c++/14/bits/stl_algobase.h
+ /usr/include/c++/14/bits/stl_construct.h
+ /usr/include/c++/14/bits/stl_function.h
+ /usr/include/c++/14/bits/stl_heap.h
+ /usr/include/c++/14/bits/stl_iterator.h
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h
+ /usr/include/c++/14/bits/stl_iterator_base_types.h
+ /usr/include/c++/14/bits/stl_pair.h
+ /usr/include/c++/14/bits/stl_raw_storage_iter.h
+ /usr/include/c++/14/bits/stl_relops.h
+ /usr/include/c++/14/bits/stl_tempbuf.h
+ /usr/include/c++/14/bits/stl_uninitialized.h
+ /usr/include/c++/14/bits/stream_iterator.h
+ /usr/include/c++/14/bits/streambuf.tcc
+ /usr/include/c++/14/bits/streambuf_iterator.h
+ /usr/include/c++/14/bits/stringfwd.h
+ /usr/include/c++/14/bits/uniform_int_dist.h
+ /usr/include/c++/14/bits/unique_ptr.h
+ /usr/include/c++/14/bits/uses_allocator.h
+ /usr/include/c++/14/bits/utility.h
+ /usr/include/c++/14/bits/version.h
+ /usr/include/c++/14/cassert
+ /usr/include/c++/14/cctype
+ /usr/include/c++/14/cerrno
+ /usr/include/c++/14/clocale
+ /usr/include/c++/14/cstdint
+ /usr/include/c++/14/cstdio
+ /usr/include/c++/14/cstdlib
+ /usr/include/c++/14/cstring
+ /usr/include/c++/14/ctime
+ /usr/include/c++/14/cwchar
+ /usr/include/c++/14/cwctype
+ /usr/include/c++/14/debug/assertions.h
+ /usr/include/c++/14/debug/debug.h
+ /usr/include/c++/14/exception
+ /usr/include/c++/14/ext/aligned_buffer.h
+ /usr/include/c++/14/ext/alloc_traits.h
+ /usr/include/c++/14/ext/atomicity.h
+ /usr/include/c++/14/ext/concurrence.h
+ /usr/include/c++/14/ext/numeric_traits.h
+ /usr/include/c++/14/ext/string_conversions.h
+ /usr/include/c++/14/ext/type_traits.h
+ /usr/include/c++/14/functional
+ /usr/include/c++/14/initializer_list
+ /usr/include/c++/14/iosfwd
+ /usr/include/c++/14/iterator
+ /usr/include/c++/14/locale
+ /usr/include/c++/14/memory
+ /usr/include/c++/14/new
+ /usr/include/c++/14/stdexcept
+ /usr/include/c++/14/streambuf
+ /usr/include/c++/14/string
+ /usr/include/c++/14/system_error
+ /usr/include/c++/14/tuple
+ /usr/include/c++/14/type_traits
+ /usr/include/c++/14/typeinfo
+ /usr/include/c++/14/utility
+ /usr/include/c++/14/x86_64-redhat-linux/bits/atomic_word.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_base.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_inline.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr-default.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/messages_members.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/time_members.h
/usr/include/ctype.h
/usr/include/endian.h
/usr/include/errno.h
@@ -1561,25 +1575,25 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o
/usr/include/time.h
/usr/include/wchar.h
/usr/include/wctype.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdint.h
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/optional.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/string_view.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/config.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/uri.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/algorithm.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_normalize.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/detail/uri_parse_authority.hpp
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/optional.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/string_view.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/config.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/algorithm.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse_authority.hpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/uri_errors.cpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_errors.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -1634,73 +1648,74 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o
/usr/include/bits/waitstatus.h
/usr/include/bits/wchar.h
/usr/include/bits/wordsize.h
- /usr/include/c++/13/backward/binders.h
- /usr/include/c++/13/bits/alloc_traits.h
- /usr/include/c++/13/bits/allocator.h
- /usr/include/c++/13/bits/basic_string.h
- /usr/include/c++/13/bits/basic_string.tcc
- /usr/include/c++/13/bits/char_traits.h
- /usr/include/c++/13/bits/charconv.h
- /usr/include/c++/13/bits/concept_check.h
- /usr/include/c++/13/bits/cpp_type_traits.h
- /usr/include/c++/13/bits/cxxabi_forced.h
- /usr/include/c++/13/bits/cxxabi_init_exception.h
- /usr/include/c++/13/bits/exception.h
- /usr/include/c++/13/bits/exception_defines.h
- /usr/include/c++/13/bits/exception_ptr.h
- /usr/include/c++/13/bits/functexcept.h
- /usr/include/c++/13/bits/functional_hash.h
- /usr/include/c++/13/bits/hash_bytes.h
- /usr/include/c++/13/bits/invoke.h
- /usr/include/c++/13/bits/localefwd.h
- /usr/include/c++/13/bits/memoryfwd.h
- /usr/include/c++/13/bits/move.h
- /usr/include/c++/13/bits/nested_exception.h
- /usr/include/c++/13/bits/new_allocator.h
- /usr/include/c++/13/bits/ostream_insert.h
- /usr/include/c++/13/bits/postypes.h
- /usr/include/c++/13/bits/predefined_ops.h
- /usr/include/c++/13/bits/ptr_traits.h
- /usr/include/c++/13/bits/range_access.h
- /usr/include/c++/13/bits/refwrap.h
- /usr/include/c++/13/bits/requires_hosted.h
- /usr/include/c++/13/bits/std_abs.h
- /usr/include/c++/13/bits/stl_algobase.h
- /usr/include/c++/13/bits/stl_construct.h
- /usr/include/c++/13/bits/stl_function.h
- /usr/include/c++/13/bits/stl_iterator.h
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h
- /usr/include/c++/13/bits/stl_iterator_base_types.h
- /usr/include/c++/13/bits/stl_pair.h
- /usr/include/c++/13/bits/stringfwd.h
- /usr/include/c++/13/bits/utility.h
- /usr/include/c++/13/cctype
- /usr/include/c++/13/cerrno
- /usr/include/c++/13/clocale
- /usr/include/c++/13/cstdio
- /usr/include/c++/13/cstdlib
- /usr/include/c++/13/cwchar
- /usr/include/c++/13/debug/assertions.h
- /usr/include/c++/13/debug/debug.h
- /usr/include/c++/13/exception
- /usr/include/c++/13/ext/alloc_traits.h
- /usr/include/c++/13/ext/numeric_traits.h
- /usr/include/c++/13/ext/string_conversions.h
- /usr/include/c++/13/ext/type_traits.h
- /usr/include/c++/13/initializer_list
- /usr/include/c++/13/iosfwd
- /usr/include/c++/13/new
- /usr/include/c++/13/stdexcept
- /usr/include/c++/13/string
- /usr/include/c++/13/system_error
- /usr/include/c++/13/type_traits
- /usr/include/c++/13/typeinfo
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h
+ /usr/include/c++/14/backward/binders.h
+ /usr/include/c++/14/bits/alloc_traits.h
+ /usr/include/c++/14/bits/allocator.h
+ /usr/include/c++/14/bits/basic_string.h
+ /usr/include/c++/14/bits/basic_string.tcc
+ /usr/include/c++/14/bits/char_traits.h
+ /usr/include/c++/14/bits/charconv.h
+ /usr/include/c++/14/bits/concept_check.h
+ /usr/include/c++/14/bits/cpp_type_traits.h
+ /usr/include/c++/14/bits/cxxabi_forced.h
+ /usr/include/c++/14/bits/cxxabi_init_exception.h
+ /usr/include/c++/14/bits/exception.h
+ /usr/include/c++/14/bits/exception_defines.h
+ /usr/include/c++/14/bits/exception_ptr.h
+ /usr/include/c++/14/bits/functexcept.h
+ /usr/include/c++/14/bits/functional_hash.h
+ /usr/include/c++/14/bits/hash_bytes.h
+ /usr/include/c++/14/bits/invoke.h
+ /usr/include/c++/14/bits/localefwd.h
+ /usr/include/c++/14/bits/memoryfwd.h
+ /usr/include/c++/14/bits/move.h
+ /usr/include/c++/14/bits/nested_exception.h
+ /usr/include/c++/14/bits/new_allocator.h
+ /usr/include/c++/14/bits/ostream_insert.h
+ /usr/include/c++/14/bits/postypes.h
+ /usr/include/c++/14/bits/predefined_ops.h
+ /usr/include/c++/14/bits/ptr_traits.h
+ /usr/include/c++/14/bits/range_access.h
+ /usr/include/c++/14/bits/refwrap.h
+ /usr/include/c++/14/bits/requires_hosted.h
+ /usr/include/c++/14/bits/std_abs.h
+ /usr/include/c++/14/bits/stl_algobase.h
+ /usr/include/c++/14/bits/stl_construct.h
+ /usr/include/c++/14/bits/stl_function.h
+ /usr/include/c++/14/bits/stl_iterator.h
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h
+ /usr/include/c++/14/bits/stl_iterator_base_types.h
+ /usr/include/c++/14/bits/stl_pair.h
+ /usr/include/c++/14/bits/stringfwd.h
+ /usr/include/c++/14/bits/utility.h
+ /usr/include/c++/14/bits/version.h
+ /usr/include/c++/14/cctype
+ /usr/include/c++/14/cerrno
+ /usr/include/c++/14/clocale
+ /usr/include/c++/14/cstdio
+ /usr/include/c++/14/cstdlib
+ /usr/include/c++/14/cwchar
+ /usr/include/c++/14/debug/assertions.h
+ /usr/include/c++/14/debug/debug.h
+ /usr/include/c++/14/exception
+ /usr/include/c++/14/ext/alloc_traits.h
+ /usr/include/c++/14/ext/numeric_traits.h
+ /usr/include/c++/14/ext/string_conversions.h
+ /usr/include/c++/14/ext/type_traits.h
+ /usr/include/c++/14/initializer_list
+ /usr/include/c++/14/iosfwd
+ /usr/include/c++/14/new
+ /usr/include/c++/14/stdexcept
+ /usr/include/c++/14/string
+ /usr/include/c++/14/system_error
+ /usr/include/c++/14/type_traits
+ /usr/include/c++/14/typeinfo
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h
/usr/include/ctype.h
/usr/include/endian.h
/usr/include/errno.h
@@ -1717,8 +1732,8 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o
/usr/include/sys/select.h
/usr/include/sys/types.h
/usr/include/wchar.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/config.hpp
- /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/config.hpp
+ /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
diff --git a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.make b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.make
index 095ca0a14b..ba32393472 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.make
+++ b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.make
@@ -1,5 +1,5 @@
# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.27
+# Generated by "Unix Makefiles" Generator, CMake Version 3.28
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o: third_party/uri/src/detail/uri_advance_parts.cpp \
/usr/include/alloca.h \
@@ -25,6 +25,7 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o: t
/usr/include/bits/select.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/stdint-intn.h \
+ /usr/include/bits/stdint-least.h \
/usr/include/bits/stdint-uintn.h \
/usr/include/bits/stdio.h \
/usr/include/bits/stdio_lim.h \
@@ -68,112 +69,113 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o: t
/usr/include/bits/waitstatus.h \
/usr/include/bits/wchar.h \
/usr/include/bits/wordsize.h \
- /usr/include/c++/13/algorithm \
- /usr/include/c++/13/backward/auto_ptr.h \
- /usr/include/c++/13/backward/binders.h \
- /usr/include/c++/13/bit \
- /usr/include/c++/13/bits/algorithmfwd.h \
- /usr/include/c++/13/bits/align.h \
- /usr/include/c++/13/bits/alloc_traits.h \
- /usr/include/c++/13/bits/allocated_ptr.h \
- /usr/include/c++/13/bits/allocator.h \
- /usr/include/c++/13/bits/atomic_base.h \
- /usr/include/c++/13/bits/atomic_lockfree_defines.h \
- /usr/include/c++/13/bits/basic_string.h \
- /usr/include/c++/13/bits/basic_string.tcc \
- /usr/include/c++/13/bits/char_traits.h \
- /usr/include/c++/13/bits/charconv.h \
- /usr/include/c++/13/bits/concept_check.h \
- /usr/include/c++/13/bits/cpp_type_traits.h \
- /usr/include/c++/13/bits/cxxabi_forced.h \
- /usr/include/c++/13/bits/cxxabi_init_exception.h \
- /usr/include/c++/13/bits/exception.h \
- /usr/include/c++/13/bits/exception_defines.h \
- /usr/include/c++/13/bits/exception_ptr.h \
- /usr/include/c++/13/bits/functexcept.h \
- /usr/include/c++/13/bits/functional_hash.h \
- /usr/include/c++/13/bits/hash_bytes.h \
- /usr/include/c++/13/bits/invoke.h \
- /usr/include/c++/13/bits/ios_base.h \
- /usr/include/c++/13/bits/locale_classes.h \
- /usr/include/c++/13/bits/locale_classes.tcc \
- /usr/include/c++/13/bits/localefwd.h \
- /usr/include/c++/13/bits/memoryfwd.h \
- /usr/include/c++/13/bits/move.h \
- /usr/include/c++/13/bits/nested_exception.h \
- /usr/include/c++/13/bits/new_allocator.h \
- /usr/include/c++/13/bits/ostream_insert.h \
- /usr/include/c++/13/bits/postypes.h \
- /usr/include/c++/13/bits/predefined_ops.h \
- /usr/include/c++/13/bits/ptr_traits.h \
- /usr/include/c++/13/bits/range_access.h \
- /usr/include/c++/13/bits/refwrap.h \
- /usr/include/c++/13/bits/requires_hosted.h \
- /usr/include/c++/13/bits/shared_ptr.h \
- /usr/include/c++/13/bits/shared_ptr_atomic.h \
- /usr/include/c++/13/bits/shared_ptr_base.h \
- /usr/include/c++/13/bits/std_abs.h \
- /usr/include/c++/13/bits/stl_algo.h \
- /usr/include/c++/13/bits/stl_algobase.h \
- /usr/include/c++/13/bits/stl_construct.h \
- /usr/include/c++/13/bits/stl_function.h \
- /usr/include/c++/13/bits/stl_heap.h \
- /usr/include/c++/13/bits/stl_iterator.h \
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h \
- /usr/include/c++/13/bits/stl_iterator_base_types.h \
- /usr/include/c++/13/bits/stl_pair.h \
- /usr/include/c++/13/bits/stl_raw_storage_iter.h \
- /usr/include/c++/13/bits/stl_relops.h \
- /usr/include/c++/13/bits/stl_tempbuf.h \
- /usr/include/c++/13/bits/stl_uninitialized.h \
- /usr/include/c++/13/bits/stream_iterator.h \
- /usr/include/c++/13/bits/streambuf.tcc \
- /usr/include/c++/13/bits/streambuf_iterator.h \
- /usr/include/c++/13/bits/stringfwd.h \
- /usr/include/c++/13/bits/uniform_int_dist.h \
- /usr/include/c++/13/bits/unique_ptr.h \
- /usr/include/c++/13/bits/uses_allocator.h \
- /usr/include/c++/13/bits/utility.h \
- /usr/include/c++/13/cassert \
- /usr/include/c++/13/cctype \
- /usr/include/c++/13/cerrno \
- /usr/include/c++/13/clocale \
- /usr/include/c++/13/cstdio \
- /usr/include/c++/13/cstdlib \
- /usr/include/c++/13/cwchar \
- /usr/include/c++/13/debug/assertions.h \
- /usr/include/c++/13/debug/debug.h \
- /usr/include/c++/13/exception \
- /usr/include/c++/13/ext/aligned_buffer.h \
- /usr/include/c++/13/ext/alloc_traits.h \
- /usr/include/c++/13/ext/atomicity.h \
- /usr/include/c++/13/ext/concurrence.h \
- /usr/include/c++/13/ext/numeric_traits.h \
- /usr/include/c++/13/ext/string_conversions.h \
- /usr/include/c++/13/ext/type_traits.h \
- /usr/include/c++/13/initializer_list \
- /usr/include/c++/13/iosfwd \
- /usr/include/c++/13/iterator \
- /usr/include/c++/13/limits \
- /usr/include/c++/13/memory \
- /usr/include/c++/13/new \
- /usr/include/c++/13/stdexcept \
- /usr/include/c++/13/streambuf \
- /usr/include/c++/13/string \
- /usr/include/c++/13/system_error \
- /usr/include/c++/13/tuple \
- /usr/include/c++/13/type_traits \
- /usr/include/c++/13/typeinfo \
- /usr/include/c++/13/utility \
- /usr/include/c++/13/x86_64-redhat-linux/bits/atomic_word.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h \
+ /usr/include/c++/14/algorithm \
+ /usr/include/c++/14/backward/auto_ptr.h \
+ /usr/include/c++/14/backward/binders.h \
+ /usr/include/c++/14/bit \
+ /usr/include/c++/14/bits/algorithmfwd.h \
+ /usr/include/c++/14/bits/align.h \
+ /usr/include/c++/14/bits/alloc_traits.h \
+ /usr/include/c++/14/bits/allocated_ptr.h \
+ /usr/include/c++/14/bits/allocator.h \
+ /usr/include/c++/14/bits/atomic_base.h \
+ /usr/include/c++/14/bits/atomic_lockfree_defines.h \
+ /usr/include/c++/14/bits/basic_string.h \
+ /usr/include/c++/14/bits/basic_string.tcc \
+ /usr/include/c++/14/bits/char_traits.h \
+ /usr/include/c++/14/bits/charconv.h \
+ /usr/include/c++/14/bits/concept_check.h \
+ /usr/include/c++/14/bits/cpp_type_traits.h \
+ /usr/include/c++/14/bits/cxxabi_forced.h \
+ /usr/include/c++/14/bits/cxxabi_init_exception.h \
+ /usr/include/c++/14/bits/exception.h \
+ /usr/include/c++/14/bits/exception_defines.h \
+ /usr/include/c++/14/bits/exception_ptr.h \
+ /usr/include/c++/14/bits/functexcept.h \
+ /usr/include/c++/14/bits/functional_hash.h \
+ /usr/include/c++/14/bits/hash_bytes.h \
+ /usr/include/c++/14/bits/invoke.h \
+ /usr/include/c++/14/bits/ios_base.h \
+ /usr/include/c++/14/bits/locale_classes.h \
+ /usr/include/c++/14/bits/locale_classes.tcc \
+ /usr/include/c++/14/bits/localefwd.h \
+ /usr/include/c++/14/bits/memoryfwd.h \
+ /usr/include/c++/14/bits/move.h \
+ /usr/include/c++/14/bits/nested_exception.h \
+ /usr/include/c++/14/bits/new_allocator.h \
+ /usr/include/c++/14/bits/ostream_insert.h \
+ /usr/include/c++/14/bits/postypes.h \
+ /usr/include/c++/14/bits/predefined_ops.h \
+ /usr/include/c++/14/bits/ptr_traits.h \
+ /usr/include/c++/14/bits/range_access.h \
+ /usr/include/c++/14/bits/refwrap.h \
+ /usr/include/c++/14/bits/requires_hosted.h \
+ /usr/include/c++/14/bits/shared_ptr.h \
+ /usr/include/c++/14/bits/shared_ptr_atomic.h \
+ /usr/include/c++/14/bits/shared_ptr_base.h \
+ /usr/include/c++/14/bits/std_abs.h \
+ /usr/include/c++/14/bits/stl_algo.h \
+ /usr/include/c++/14/bits/stl_algobase.h \
+ /usr/include/c++/14/bits/stl_construct.h \
+ /usr/include/c++/14/bits/stl_function.h \
+ /usr/include/c++/14/bits/stl_heap.h \
+ /usr/include/c++/14/bits/stl_iterator.h \
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h \
+ /usr/include/c++/14/bits/stl_iterator_base_types.h \
+ /usr/include/c++/14/bits/stl_pair.h \
+ /usr/include/c++/14/bits/stl_raw_storage_iter.h \
+ /usr/include/c++/14/bits/stl_relops.h \
+ /usr/include/c++/14/bits/stl_tempbuf.h \
+ /usr/include/c++/14/bits/stl_uninitialized.h \
+ /usr/include/c++/14/bits/stream_iterator.h \
+ /usr/include/c++/14/bits/streambuf.tcc \
+ /usr/include/c++/14/bits/streambuf_iterator.h \
+ /usr/include/c++/14/bits/stringfwd.h \
+ /usr/include/c++/14/bits/uniform_int_dist.h \
+ /usr/include/c++/14/bits/unique_ptr.h \
+ /usr/include/c++/14/bits/uses_allocator.h \
+ /usr/include/c++/14/bits/utility.h \
+ /usr/include/c++/14/bits/version.h \
+ /usr/include/c++/14/cassert \
+ /usr/include/c++/14/cctype \
+ /usr/include/c++/14/cerrno \
+ /usr/include/c++/14/clocale \
+ /usr/include/c++/14/cstdio \
+ /usr/include/c++/14/cstdlib \
+ /usr/include/c++/14/cwchar \
+ /usr/include/c++/14/debug/assertions.h \
+ /usr/include/c++/14/debug/debug.h \
+ /usr/include/c++/14/exception \
+ /usr/include/c++/14/ext/aligned_buffer.h \
+ /usr/include/c++/14/ext/alloc_traits.h \
+ /usr/include/c++/14/ext/atomicity.h \
+ /usr/include/c++/14/ext/concurrence.h \
+ /usr/include/c++/14/ext/numeric_traits.h \
+ /usr/include/c++/14/ext/string_conversions.h \
+ /usr/include/c++/14/ext/type_traits.h \
+ /usr/include/c++/14/initializer_list \
+ /usr/include/c++/14/iosfwd \
+ /usr/include/c++/14/iterator \
+ /usr/include/c++/14/limits \
+ /usr/include/c++/14/memory \
+ /usr/include/c++/14/new \
+ /usr/include/c++/14/stdexcept \
+ /usr/include/c++/14/streambuf \
+ /usr/include/c++/14/string \
+ /usr/include/c++/14/system_error \
+ /usr/include/c++/14/tuple \
+ /usr/include/c++/14/type_traits \
+ /usr/include/c++/14/typeinfo \
+ /usr/include/c++/14/utility \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/atomic_word.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr-default.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h \
/usr/include/ctype.h \
/usr/include/endian.h \
/usr/include/errno.h \
@@ -195,9 +197,9 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o: t
/usr/include/sys/types.h \
/usr/include/time.h \
/usr/include/wchar.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdint.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h \
third_party/uri/include/network/optional.hpp \
third_party/uri/include/network/string_view.hpp \
third_party/uri/include/network/uri/detail/uri_parts.hpp \
@@ -227,6 +229,7 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o: third
/usr/include/bits/select.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/stdint-intn.h \
+ /usr/include/bits/stdint-least.h \
/usr/include/bits/stdint-uintn.h \
/usr/include/bits/stdio.h \
/usr/include/bits/stdio_lim.h \
@@ -271,132 +274,133 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o: third
/usr/include/bits/wchar.h \
/usr/include/bits/wctype-wchar.h \
/usr/include/bits/wordsize.h \
- /usr/include/c++/13/algorithm \
- /usr/include/c++/13/backward/auto_ptr.h \
- /usr/include/c++/13/backward/binders.h \
- /usr/include/c++/13/bit \
- /usr/include/c++/13/bits/algorithmfwd.h \
- /usr/include/c++/13/bits/align.h \
- /usr/include/c++/13/bits/alloc_traits.h \
- /usr/include/c++/13/bits/allocated_ptr.h \
- /usr/include/c++/13/bits/allocator.h \
- /usr/include/c++/13/bits/atomic_base.h \
- /usr/include/c++/13/bits/atomic_lockfree_defines.h \
- /usr/include/c++/13/bits/basic_string.h \
- /usr/include/c++/13/bits/basic_string.tcc \
- /usr/include/c++/13/bits/char_traits.h \
- /usr/include/c++/13/bits/charconv.h \
- /usr/include/c++/13/bits/codecvt.h \
- /usr/include/c++/13/bits/concept_check.h \
- /usr/include/c++/13/bits/cpp_type_traits.h \
- /usr/include/c++/13/bits/cxxabi_forced.h \
- /usr/include/c++/13/bits/cxxabi_init_exception.h \
- /usr/include/c++/13/bits/exception.h \
- /usr/include/c++/13/bits/exception_defines.h \
- /usr/include/c++/13/bits/exception_ptr.h \
- /usr/include/c++/13/bits/functexcept.h \
- /usr/include/c++/13/bits/functional_hash.h \
- /usr/include/c++/13/bits/hash_bytes.h \
- /usr/include/c++/13/bits/invoke.h \
- /usr/include/c++/13/bits/ios_base.h \
- /usr/include/c++/13/bits/locale_classes.h \
- /usr/include/c++/13/bits/locale_classes.tcc \
- /usr/include/c++/13/bits/locale_conv.h \
- /usr/include/c++/13/bits/locale_facets.h \
- /usr/include/c++/13/bits/locale_facets.tcc \
- /usr/include/c++/13/bits/locale_facets_nonio.h \
- /usr/include/c++/13/bits/locale_facets_nonio.tcc \
- /usr/include/c++/13/bits/localefwd.h \
- /usr/include/c++/13/bits/memoryfwd.h \
- /usr/include/c++/13/bits/move.h \
- /usr/include/c++/13/bits/nested_exception.h \
- /usr/include/c++/13/bits/new_allocator.h \
- /usr/include/c++/13/bits/ostream_insert.h \
- /usr/include/c++/13/bits/postypes.h \
- /usr/include/c++/13/bits/predefined_ops.h \
- /usr/include/c++/13/bits/ptr_traits.h \
- /usr/include/c++/13/bits/range_access.h \
- /usr/include/c++/13/bits/refwrap.h \
- /usr/include/c++/13/bits/requires_hosted.h \
- /usr/include/c++/13/bits/shared_ptr.h \
- /usr/include/c++/13/bits/shared_ptr_atomic.h \
- /usr/include/c++/13/bits/shared_ptr_base.h \
- /usr/include/c++/13/bits/std_abs.h \
- /usr/include/c++/13/bits/std_function.h \
- /usr/include/c++/13/bits/stl_algo.h \
- /usr/include/c++/13/bits/stl_algobase.h \
- /usr/include/c++/13/bits/stl_bvector.h \
- /usr/include/c++/13/bits/stl_construct.h \
- /usr/include/c++/13/bits/stl_function.h \
- /usr/include/c++/13/bits/stl_heap.h \
- /usr/include/c++/13/bits/stl_iterator.h \
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h \
- /usr/include/c++/13/bits/stl_iterator_base_types.h \
- /usr/include/c++/13/bits/stl_pair.h \
- /usr/include/c++/13/bits/stl_raw_storage_iter.h \
- /usr/include/c++/13/bits/stl_relops.h \
- /usr/include/c++/13/bits/stl_tempbuf.h \
- /usr/include/c++/13/bits/stl_uninitialized.h \
- /usr/include/c++/13/bits/stl_vector.h \
- /usr/include/c++/13/bits/stream_iterator.h \
- /usr/include/c++/13/bits/streambuf.tcc \
- /usr/include/c++/13/bits/streambuf_iterator.h \
- /usr/include/c++/13/bits/stringfwd.h \
- /usr/include/c++/13/bits/uniform_int_dist.h \
- /usr/include/c++/13/bits/unique_ptr.h \
- /usr/include/c++/13/bits/uses_allocator.h \
- /usr/include/c++/13/bits/utility.h \
- /usr/include/c++/13/bits/vector.tcc \
- /usr/include/c++/13/cassert \
- /usr/include/c++/13/cctype \
- /usr/include/c++/13/cerrno \
- /usr/include/c++/13/clocale \
- /usr/include/c++/13/cstdint \
- /usr/include/c++/13/cstdio \
- /usr/include/c++/13/cstdlib \
- /usr/include/c++/13/cstring \
- /usr/include/c++/13/ctime \
- /usr/include/c++/13/cwchar \
- /usr/include/c++/13/cwctype \
- /usr/include/c++/13/debug/assertions.h \
- /usr/include/c++/13/debug/debug.h \
- /usr/include/c++/13/exception \
- /usr/include/c++/13/ext/aligned_buffer.h \
- /usr/include/c++/13/ext/alloc_traits.h \
- /usr/include/c++/13/ext/atomicity.h \
- /usr/include/c++/13/ext/concurrence.h \
- /usr/include/c++/13/ext/numeric_traits.h \
- /usr/include/c++/13/ext/string_conversions.h \
- /usr/include/c++/13/ext/type_traits.h \
- /usr/include/c++/13/functional \
- /usr/include/c++/13/initializer_list \
- /usr/include/c++/13/iosfwd \
- /usr/include/c++/13/iterator \
- /usr/include/c++/13/locale \
- /usr/include/c++/13/memory \
- /usr/include/c++/13/new \
- /usr/include/c++/13/stdexcept \
- /usr/include/c++/13/streambuf \
- /usr/include/c++/13/string \
- /usr/include/c++/13/system_error \
- /usr/include/c++/13/tuple \
- /usr/include/c++/13/type_traits \
- /usr/include/c++/13/typeinfo \
- /usr/include/c++/13/utility \
- /usr/include/c++/13/vector \
- /usr/include/c++/13/x86_64-redhat-linux/bits/atomic_word.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_base.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/messages_members.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/time_members.h \
+ /usr/include/c++/14/algorithm \
+ /usr/include/c++/14/backward/auto_ptr.h \
+ /usr/include/c++/14/backward/binders.h \
+ /usr/include/c++/14/bit \
+ /usr/include/c++/14/bits/algorithmfwd.h \
+ /usr/include/c++/14/bits/align.h \
+ /usr/include/c++/14/bits/alloc_traits.h \
+ /usr/include/c++/14/bits/allocated_ptr.h \
+ /usr/include/c++/14/bits/allocator.h \
+ /usr/include/c++/14/bits/atomic_base.h \
+ /usr/include/c++/14/bits/atomic_lockfree_defines.h \
+ /usr/include/c++/14/bits/basic_string.h \
+ /usr/include/c++/14/bits/basic_string.tcc \
+ /usr/include/c++/14/bits/char_traits.h \
+ /usr/include/c++/14/bits/charconv.h \
+ /usr/include/c++/14/bits/codecvt.h \
+ /usr/include/c++/14/bits/concept_check.h \
+ /usr/include/c++/14/bits/cpp_type_traits.h \
+ /usr/include/c++/14/bits/cxxabi_forced.h \
+ /usr/include/c++/14/bits/cxxabi_init_exception.h \
+ /usr/include/c++/14/bits/exception.h \
+ /usr/include/c++/14/bits/exception_defines.h \
+ /usr/include/c++/14/bits/exception_ptr.h \
+ /usr/include/c++/14/bits/functexcept.h \
+ /usr/include/c++/14/bits/functional_hash.h \
+ /usr/include/c++/14/bits/hash_bytes.h \
+ /usr/include/c++/14/bits/invoke.h \
+ /usr/include/c++/14/bits/ios_base.h \
+ /usr/include/c++/14/bits/locale_classes.h \
+ /usr/include/c++/14/bits/locale_classes.tcc \
+ /usr/include/c++/14/bits/locale_conv.h \
+ /usr/include/c++/14/bits/locale_facets.h \
+ /usr/include/c++/14/bits/locale_facets.tcc \
+ /usr/include/c++/14/bits/locale_facets_nonio.h \
+ /usr/include/c++/14/bits/locale_facets_nonio.tcc \
+ /usr/include/c++/14/bits/localefwd.h \
+ /usr/include/c++/14/bits/memoryfwd.h \
+ /usr/include/c++/14/bits/move.h \
+ /usr/include/c++/14/bits/nested_exception.h \
+ /usr/include/c++/14/bits/new_allocator.h \
+ /usr/include/c++/14/bits/ostream_insert.h \
+ /usr/include/c++/14/bits/postypes.h \
+ /usr/include/c++/14/bits/predefined_ops.h \
+ /usr/include/c++/14/bits/ptr_traits.h \
+ /usr/include/c++/14/bits/range_access.h \
+ /usr/include/c++/14/bits/refwrap.h \
+ /usr/include/c++/14/bits/requires_hosted.h \
+ /usr/include/c++/14/bits/shared_ptr.h \
+ /usr/include/c++/14/bits/shared_ptr_atomic.h \
+ /usr/include/c++/14/bits/shared_ptr_base.h \
+ /usr/include/c++/14/bits/std_abs.h \
+ /usr/include/c++/14/bits/std_function.h \
+ /usr/include/c++/14/bits/stl_algo.h \
+ /usr/include/c++/14/bits/stl_algobase.h \
+ /usr/include/c++/14/bits/stl_bvector.h \
+ /usr/include/c++/14/bits/stl_construct.h \
+ /usr/include/c++/14/bits/stl_function.h \
+ /usr/include/c++/14/bits/stl_heap.h \
+ /usr/include/c++/14/bits/stl_iterator.h \
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h \
+ /usr/include/c++/14/bits/stl_iterator_base_types.h \
+ /usr/include/c++/14/bits/stl_pair.h \
+ /usr/include/c++/14/bits/stl_raw_storage_iter.h \
+ /usr/include/c++/14/bits/stl_relops.h \
+ /usr/include/c++/14/bits/stl_tempbuf.h \
+ /usr/include/c++/14/bits/stl_uninitialized.h \
+ /usr/include/c++/14/bits/stl_vector.h \
+ /usr/include/c++/14/bits/stream_iterator.h \
+ /usr/include/c++/14/bits/streambuf.tcc \
+ /usr/include/c++/14/bits/streambuf_iterator.h \
+ /usr/include/c++/14/bits/stringfwd.h \
+ /usr/include/c++/14/bits/uniform_int_dist.h \
+ /usr/include/c++/14/bits/unique_ptr.h \
+ /usr/include/c++/14/bits/uses_allocator.h \
+ /usr/include/c++/14/bits/utility.h \
+ /usr/include/c++/14/bits/vector.tcc \
+ /usr/include/c++/14/bits/version.h \
+ /usr/include/c++/14/cassert \
+ /usr/include/c++/14/cctype \
+ /usr/include/c++/14/cerrno \
+ /usr/include/c++/14/clocale \
+ /usr/include/c++/14/cstdint \
+ /usr/include/c++/14/cstdio \
+ /usr/include/c++/14/cstdlib \
+ /usr/include/c++/14/cstring \
+ /usr/include/c++/14/ctime \
+ /usr/include/c++/14/cwchar \
+ /usr/include/c++/14/cwctype \
+ /usr/include/c++/14/debug/assertions.h \
+ /usr/include/c++/14/debug/debug.h \
+ /usr/include/c++/14/exception \
+ /usr/include/c++/14/ext/aligned_buffer.h \
+ /usr/include/c++/14/ext/alloc_traits.h \
+ /usr/include/c++/14/ext/atomicity.h \
+ /usr/include/c++/14/ext/concurrence.h \
+ /usr/include/c++/14/ext/numeric_traits.h \
+ /usr/include/c++/14/ext/string_conversions.h \
+ /usr/include/c++/14/ext/type_traits.h \
+ /usr/include/c++/14/functional \
+ /usr/include/c++/14/initializer_list \
+ /usr/include/c++/14/iosfwd \
+ /usr/include/c++/14/iterator \
+ /usr/include/c++/14/locale \
+ /usr/include/c++/14/memory \
+ /usr/include/c++/14/new \
+ /usr/include/c++/14/stdexcept \
+ /usr/include/c++/14/streambuf \
+ /usr/include/c++/14/string \
+ /usr/include/c++/14/system_error \
+ /usr/include/c++/14/tuple \
+ /usr/include/c++/14/type_traits \
+ /usr/include/c++/14/typeinfo \
+ /usr/include/c++/14/utility \
+ /usr/include/c++/14/vector \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/atomic_word.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_base.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_inline.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr-default.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/messages_members.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/time_members.h \
/usr/include/ctype.h \
/usr/include/endian.h \
/usr/include/errno.h \
@@ -422,9 +426,9 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o: third
/usr/include/time.h \
/usr/include/wchar.h \
/usr/include/wctype.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdint.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h \
third_party/uri/include/network/optional.hpp \
third_party/uri/include/network/string_view.hpp \
third_party/uri/include/network/uri/config.hpp \
@@ -464,6 +468,7 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o: third_par
/usr/include/bits/select.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/stdint-intn.h \
+ /usr/include/bits/stdint-least.h \
/usr/include/bits/stdint-uintn.h \
/usr/include/bits/stdio.h \
/usr/include/bits/stdio_lim.h \
@@ -508,126 +513,127 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o: third_par
/usr/include/bits/wchar.h \
/usr/include/bits/wctype-wchar.h \
/usr/include/bits/wordsize.h \
- /usr/include/c++/13/algorithm \
- /usr/include/c++/13/backward/auto_ptr.h \
- /usr/include/c++/13/backward/binders.h \
- /usr/include/c++/13/bit \
- /usr/include/c++/13/bits/algorithmfwd.h \
- /usr/include/c++/13/bits/align.h \
- /usr/include/c++/13/bits/alloc_traits.h \
- /usr/include/c++/13/bits/allocated_ptr.h \
- /usr/include/c++/13/bits/allocator.h \
- /usr/include/c++/13/bits/atomic_base.h \
- /usr/include/c++/13/bits/atomic_lockfree_defines.h \
- /usr/include/c++/13/bits/basic_string.h \
- /usr/include/c++/13/bits/basic_string.tcc \
- /usr/include/c++/13/bits/char_traits.h \
- /usr/include/c++/13/bits/charconv.h \
- /usr/include/c++/13/bits/codecvt.h \
- /usr/include/c++/13/bits/concept_check.h \
- /usr/include/c++/13/bits/cpp_type_traits.h \
- /usr/include/c++/13/bits/cxxabi_forced.h \
- /usr/include/c++/13/bits/cxxabi_init_exception.h \
- /usr/include/c++/13/bits/exception.h \
- /usr/include/c++/13/bits/exception_defines.h \
- /usr/include/c++/13/bits/exception_ptr.h \
- /usr/include/c++/13/bits/functexcept.h \
- /usr/include/c++/13/bits/functional_hash.h \
- /usr/include/c++/13/bits/hash_bytes.h \
- /usr/include/c++/13/bits/invoke.h \
- /usr/include/c++/13/bits/ios_base.h \
- /usr/include/c++/13/bits/locale_classes.h \
- /usr/include/c++/13/bits/locale_classes.tcc \
- /usr/include/c++/13/bits/locale_conv.h \
- /usr/include/c++/13/bits/locale_facets.h \
- /usr/include/c++/13/bits/locale_facets.tcc \
- /usr/include/c++/13/bits/locale_facets_nonio.h \
- /usr/include/c++/13/bits/locale_facets_nonio.tcc \
- /usr/include/c++/13/bits/localefwd.h \
- /usr/include/c++/13/bits/memoryfwd.h \
- /usr/include/c++/13/bits/move.h \
- /usr/include/c++/13/bits/nested_exception.h \
- /usr/include/c++/13/bits/new_allocator.h \
- /usr/include/c++/13/bits/ostream_insert.h \
- /usr/include/c++/13/bits/postypes.h \
- /usr/include/c++/13/bits/predefined_ops.h \
- /usr/include/c++/13/bits/ptr_traits.h \
- /usr/include/c++/13/bits/range_access.h \
- /usr/include/c++/13/bits/refwrap.h \
- /usr/include/c++/13/bits/requires_hosted.h \
- /usr/include/c++/13/bits/shared_ptr.h \
- /usr/include/c++/13/bits/shared_ptr_atomic.h \
- /usr/include/c++/13/bits/shared_ptr_base.h \
- /usr/include/c++/13/bits/std_abs.h \
- /usr/include/c++/13/bits/stl_algo.h \
- /usr/include/c++/13/bits/stl_algobase.h \
- /usr/include/c++/13/bits/stl_construct.h \
- /usr/include/c++/13/bits/stl_function.h \
- /usr/include/c++/13/bits/stl_heap.h \
- /usr/include/c++/13/bits/stl_iterator.h \
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h \
- /usr/include/c++/13/bits/stl_iterator_base_types.h \
- /usr/include/c++/13/bits/stl_pair.h \
- /usr/include/c++/13/bits/stl_raw_storage_iter.h \
- /usr/include/c++/13/bits/stl_relops.h \
- /usr/include/c++/13/bits/stl_tempbuf.h \
- /usr/include/c++/13/bits/stl_uninitialized.h \
- /usr/include/c++/13/bits/stream_iterator.h \
- /usr/include/c++/13/bits/streambuf.tcc \
- /usr/include/c++/13/bits/streambuf_iterator.h \
- /usr/include/c++/13/bits/stringfwd.h \
- /usr/include/c++/13/bits/uniform_int_dist.h \
- /usr/include/c++/13/bits/unique_ptr.h \
- /usr/include/c++/13/bits/uses_allocator.h \
- /usr/include/c++/13/bits/utility.h \
- /usr/include/c++/13/cassert \
- /usr/include/c++/13/cctype \
- /usr/include/c++/13/cerrno \
- /usr/include/c++/13/clocale \
- /usr/include/c++/13/cstdio \
- /usr/include/c++/13/cstdlib \
- /usr/include/c++/13/cstring \
- /usr/include/c++/13/ctime \
- /usr/include/c++/13/cwchar \
- /usr/include/c++/13/cwctype \
- /usr/include/c++/13/debug/assertions.h \
- /usr/include/c++/13/debug/debug.h \
- /usr/include/c++/13/exception \
- /usr/include/c++/13/ext/aligned_buffer.h \
- /usr/include/c++/13/ext/alloc_traits.h \
- /usr/include/c++/13/ext/atomicity.h \
- /usr/include/c++/13/ext/concurrence.h \
- /usr/include/c++/13/ext/numeric_traits.h \
- /usr/include/c++/13/ext/string_conversions.h \
- /usr/include/c++/13/ext/type_traits.h \
- /usr/include/c++/13/initializer_list \
- /usr/include/c++/13/iosfwd \
- /usr/include/c++/13/iterator \
- /usr/include/c++/13/limits \
- /usr/include/c++/13/locale \
- /usr/include/c++/13/memory \
- /usr/include/c++/13/new \
- /usr/include/c++/13/stdexcept \
- /usr/include/c++/13/streambuf \
- /usr/include/c++/13/string \
- /usr/include/c++/13/system_error \
- /usr/include/c++/13/tuple \
- /usr/include/c++/13/type_traits \
- /usr/include/c++/13/typeinfo \
- /usr/include/c++/13/utility \
- /usr/include/c++/13/x86_64-redhat-linux/bits/atomic_word.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_base.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/messages_members.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/time_members.h \
+ /usr/include/c++/14/algorithm \
+ /usr/include/c++/14/backward/auto_ptr.h \
+ /usr/include/c++/14/backward/binders.h \
+ /usr/include/c++/14/bit \
+ /usr/include/c++/14/bits/algorithmfwd.h \
+ /usr/include/c++/14/bits/align.h \
+ /usr/include/c++/14/bits/alloc_traits.h \
+ /usr/include/c++/14/bits/allocated_ptr.h \
+ /usr/include/c++/14/bits/allocator.h \
+ /usr/include/c++/14/bits/atomic_base.h \
+ /usr/include/c++/14/bits/atomic_lockfree_defines.h \
+ /usr/include/c++/14/bits/basic_string.h \
+ /usr/include/c++/14/bits/basic_string.tcc \
+ /usr/include/c++/14/bits/char_traits.h \
+ /usr/include/c++/14/bits/charconv.h \
+ /usr/include/c++/14/bits/codecvt.h \
+ /usr/include/c++/14/bits/concept_check.h \
+ /usr/include/c++/14/bits/cpp_type_traits.h \
+ /usr/include/c++/14/bits/cxxabi_forced.h \
+ /usr/include/c++/14/bits/cxxabi_init_exception.h \
+ /usr/include/c++/14/bits/exception.h \
+ /usr/include/c++/14/bits/exception_defines.h \
+ /usr/include/c++/14/bits/exception_ptr.h \
+ /usr/include/c++/14/bits/functexcept.h \
+ /usr/include/c++/14/bits/functional_hash.h \
+ /usr/include/c++/14/bits/hash_bytes.h \
+ /usr/include/c++/14/bits/invoke.h \
+ /usr/include/c++/14/bits/ios_base.h \
+ /usr/include/c++/14/bits/locale_classes.h \
+ /usr/include/c++/14/bits/locale_classes.tcc \
+ /usr/include/c++/14/bits/locale_conv.h \
+ /usr/include/c++/14/bits/locale_facets.h \
+ /usr/include/c++/14/bits/locale_facets.tcc \
+ /usr/include/c++/14/bits/locale_facets_nonio.h \
+ /usr/include/c++/14/bits/locale_facets_nonio.tcc \
+ /usr/include/c++/14/bits/localefwd.h \
+ /usr/include/c++/14/bits/memoryfwd.h \
+ /usr/include/c++/14/bits/move.h \
+ /usr/include/c++/14/bits/nested_exception.h \
+ /usr/include/c++/14/bits/new_allocator.h \
+ /usr/include/c++/14/bits/ostream_insert.h \
+ /usr/include/c++/14/bits/postypes.h \
+ /usr/include/c++/14/bits/predefined_ops.h \
+ /usr/include/c++/14/bits/ptr_traits.h \
+ /usr/include/c++/14/bits/range_access.h \
+ /usr/include/c++/14/bits/refwrap.h \
+ /usr/include/c++/14/bits/requires_hosted.h \
+ /usr/include/c++/14/bits/shared_ptr.h \
+ /usr/include/c++/14/bits/shared_ptr_atomic.h \
+ /usr/include/c++/14/bits/shared_ptr_base.h \
+ /usr/include/c++/14/bits/std_abs.h \
+ /usr/include/c++/14/bits/stl_algo.h \
+ /usr/include/c++/14/bits/stl_algobase.h \
+ /usr/include/c++/14/bits/stl_construct.h \
+ /usr/include/c++/14/bits/stl_function.h \
+ /usr/include/c++/14/bits/stl_heap.h \
+ /usr/include/c++/14/bits/stl_iterator.h \
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h \
+ /usr/include/c++/14/bits/stl_iterator_base_types.h \
+ /usr/include/c++/14/bits/stl_pair.h \
+ /usr/include/c++/14/bits/stl_raw_storage_iter.h \
+ /usr/include/c++/14/bits/stl_relops.h \
+ /usr/include/c++/14/bits/stl_tempbuf.h \
+ /usr/include/c++/14/bits/stl_uninitialized.h \
+ /usr/include/c++/14/bits/stream_iterator.h \
+ /usr/include/c++/14/bits/streambuf.tcc \
+ /usr/include/c++/14/bits/streambuf_iterator.h \
+ /usr/include/c++/14/bits/stringfwd.h \
+ /usr/include/c++/14/bits/uniform_int_dist.h \
+ /usr/include/c++/14/bits/unique_ptr.h \
+ /usr/include/c++/14/bits/uses_allocator.h \
+ /usr/include/c++/14/bits/utility.h \
+ /usr/include/c++/14/bits/version.h \
+ /usr/include/c++/14/cassert \
+ /usr/include/c++/14/cctype \
+ /usr/include/c++/14/cerrno \
+ /usr/include/c++/14/clocale \
+ /usr/include/c++/14/cstdio \
+ /usr/include/c++/14/cstdlib \
+ /usr/include/c++/14/cstring \
+ /usr/include/c++/14/ctime \
+ /usr/include/c++/14/cwchar \
+ /usr/include/c++/14/cwctype \
+ /usr/include/c++/14/debug/assertions.h \
+ /usr/include/c++/14/debug/debug.h \
+ /usr/include/c++/14/exception \
+ /usr/include/c++/14/ext/aligned_buffer.h \
+ /usr/include/c++/14/ext/alloc_traits.h \
+ /usr/include/c++/14/ext/atomicity.h \
+ /usr/include/c++/14/ext/concurrence.h \
+ /usr/include/c++/14/ext/numeric_traits.h \
+ /usr/include/c++/14/ext/string_conversions.h \
+ /usr/include/c++/14/ext/type_traits.h \
+ /usr/include/c++/14/initializer_list \
+ /usr/include/c++/14/iosfwd \
+ /usr/include/c++/14/iterator \
+ /usr/include/c++/14/limits \
+ /usr/include/c++/14/locale \
+ /usr/include/c++/14/memory \
+ /usr/include/c++/14/new \
+ /usr/include/c++/14/stdexcept \
+ /usr/include/c++/14/streambuf \
+ /usr/include/c++/14/string \
+ /usr/include/c++/14/system_error \
+ /usr/include/c++/14/tuple \
+ /usr/include/c++/14/type_traits \
+ /usr/include/c++/14/typeinfo \
+ /usr/include/c++/14/utility \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/atomic_word.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_base.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_inline.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr-default.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/messages_members.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/time_members.h \
/usr/include/ctype.h \
/usr/include/endian.h \
/usr/include/errno.h \
@@ -653,9 +659,9 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o: third_par
/usr/include/time.h \
/usr/include/wchar.h \
/usr/include/wctype.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdint.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h \
third_party/uri/include/network/optional.hpp \
third_party/uri/include/network/string_view.hpp \
third_party/uri/include/network/uri/detail/uri_parts.hpp \
@@ -686,6 +692,7 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o:
/usr/include/bits/select.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/stdint-intn.h \
+ /usr/include/bits/stdint-least.h \
/usr/include/bits/stdint-uintn.h \
/usr/include/bits/stdio.h \
/usr/include/bits/stdio_lim.h \
@@ -730,126 +737,127 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o:
/usr/include/bits/wchar.h \
/usr/include/bits/wctype-wchar.h \
/usr/include/bits/wordsize.h \
- /usr/include/c++/13/algorithm \
- /usr/include/c++/13/backward/auto_ptr.h \
- /usr/include/c++/13/backward/binders.h \
- /usr/include/c++/13/bit \
- /usr/include/c++/13/bits/algorithmfwd.h \
- /usr/include/c++/13/bits/align.h \
- /usr/include/c++/13/bits/alloc_traits.h \
- /usr/include/c++/13/bits/allocated_ptr.h \
- /usr/include/c++/13/bits/allocator.h \
- /usr/include/c++/13/bits/atomic_base.h \
- /usr/include/c++/13/bits/atomic_lockfree_defines.h \
- /usr/include/c++/13/bits/basic_string.h \
- /usr/include/c++/13/bits/basic_string.tcc \
- /usr/include/c++/13/bits/char_traits.h \
- /usr/include/c++/13/bits/charconv.h \
- /usr/include/c++/13/bits/codecvt.h \
- /usr/include/c++/13/bits/concept_check.h \
- /usr/include/c++/13/bits/cpp_type_traits.h \
- /usr/include/c++/13/bits/cxxabi_forced.h \
- /usr/include/c++/13/bits/cxxabi_init_exception.h \
- /usr/include/c++/13/bits/exception.h \
- /usr/include/c++/13/bits/exception_defines.h \
- /usr/include/c++/13/bits/exception_ptr.h \
- /usr/include/c++/13/bits/functexcept.h \
- /usr/include/c++/13/bits/functional_hash.h \
- /usr/include/c++/13/bits/hash_bytes.h \
- /usr/include/c++/13/bits/invoke.h \
- /usr/include/c++/13/bits/ios_base.h \
- /usr/include/c++/13/bits/locale_classes.h \
- /usr/include/c++/13/bits/locale_classes.tcc \
- /usr/include/c++/13/bits/locale_conv.h \
- /usr/include/c++/13/bits/locale_facets.h \
- /usr/include/c++/13/bits/locale_facets.tcc \
- /usr/include/c++/13/bits/locale_facets_nonio.h \
- /usr/include/c++/13/bits/locale_facets_nonio.tcc \
- /usr/include/c++/13/bits/localefwd.h \
- /usr/include/c++/13/bits/memoryfwd.h \
- /usr/include/c++/13/bits/move.h \
- /usr/include/c++/13/bits/nested_exception.h \
- /usr/include/c++/13/bits/new_allocator.h \
- /usr/include/c++/13/bits/ostream_insert.h \
- /usr/include/c++/13/bits/postypes.h \
- /usr/include/c++/13/bits/predefined_ops.h \
- /usr/include/c++/13/bits/ptr_traits.h \
- /usr/include/c++/13/bits/range_access.h \
- /usr/include/c++/13/bits/refwrap.h \
- /usr/include/c++/13/bits/requires_hosted.h \
- /usr/include/c++/13/bits/shared_ptr.h \
- /usr/include/c++/13/bits/shared_ptr_atomic.h \
- /usr/include/c++/13/bits/shared_ptr_base.h \
- /usr/include/c++/13/bits/std_abs.h \
- /usr/include/c++/13/bits/stl_algo.h \
- /usr/include/c++/13/bits/stl_algobase.h \
- /usr/include/c++/13/bits/stl_construct.h \
- /usr/include/c++/13/bits/stl_function.h \
- /usr/include/c++/13/bits/stl_heap.h \
- /usr/include/c++/13/bits/stl_iterator.h \
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h \
- /usr/include/c++/13/bits/stl_iterator_base_types.h \
- /usr/include/c++/13/bits/stl_pair.h \
- /usr/include/c++/13/bits/stl_raw_storage_iter.h \
- /usr/include/c++/13/bits/stl_relops.h \
- /usr/include/c++/13/bits/stl_tempbuf.h \
- /usr/include/c++/13/bits/stl_uninitialized.h \
- /usr/include/c++/13/bits/stream_iterator.h \
- /usr/include/c++/13/bits/streambuf.tcc \
- /usr/include/c++/13/bits/streambuf_iterator.h \
- /usr/include/c++/13/bits/stringfwd.h \
- /usr/include/c++/13/bits/uniform_int_dist.h \
- /usr/include/c++/13/bits/unique_ptr.h \
- /usr/include/c++/13/bits/uses_allocator.h \
- /usr/include/c++/13/bits/utility.h \
- /usr/include/c++/13/cassert \
- /usr/include/c++/13/cctype \
- /usr/include/c++/13/cerrno \
- /usr/include/c++/13/clocale \
- /usr/include/c++/13/cstdio \
- /usr/include/c++/13/cstdlib \
- /usr/include/c++/13/cstring \
- /usr/include/c++/13/ctime \
- /usr/include/c++/13/cwchar \
- /usr/include/c++/13/cwctype \
- /usr/include/c++/13/debug/assertions.h \
- /usr/include/c++/13/debug/debug.h \
- /usr/include/c++/13/exception \
- /usr/include/c++/13/ext/aligned_buffer.h \
- /usr/include/c++/13/ext/alloc_traits.h \
- /usr/include/c++/13/ext/atomicity.h \
- /usr/include/c++/13/ext/concurrence.h \
- /usr/include/c++/13/ext/numeric_traits.h \
- /usr/include/c++/13/ext/string_conversions.h \
- /usr/include/c++/13/ext/type_traits.h \
- /usr/include/c++/13/initializer_list \
- /usr/include/c++/13/iosfwd \
- /usr/include/c++/13/iterator \
- /usr/include/c++/13/limits \
- /usr/include/c++/13/locale \
- /usr/include/c++/13/memory \
- /usr/include/c++/13/new \
- /usr/include/c++/13/stdexcept \
- /usr/include/c++/13/streambuf \
- /usr/include/c++/13/string \
- /usr/include/c++/13/system_error \
- /usr/include/c++/13/tuple \
- /usr/include/c++/13/type_traits \
- /usr/include/c++/13/typeinfo \
- /usr/include/c++/13/utility \
- /usr/include/c++/13/x86_64-redhat-linux/bits/atomic_word.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_base.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/messages_members.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/time_members.h \
+ /usr/include/c++/14/algorithm \
+ /usr/include/c++/14/backward/auto_ptr.h \
+ /usr/include/c++/14/backward/binders.h \
+ /usr/include/c++/14/bit \
+ /usr/include/c++/14/bits/algorithmfwd.h \
+ /usr/include/c++/14/bits/align.h \
+ /usr/include/c++/14/bits/alloc_traits.h \
+ /usr/include/c++/14/bits/allocated_ptr.h \
+ /usr/include/c++/14/bits/allocator.h \
+ /usr/include/c++/14/bits/atomic_base.h \
+ /usr/include/c++/14/bits/atomic_lockfree_defines.h \
+ /usr/include/c++/14/bits/basic_string.h \
+ /usr/include/c++/14/bits/basic_string.tcc \
+ /usr/include/c++/14/bits/char_traits.h \
+ /usr/include/c++/14/bits/charconv.h \
+ /usr/include/c++/14/bits/codecvt.h \
+ /usr/include/c++/14/bits/concept_check.h \
+ /usr/include/c++/14/bits/cpp_type_traits.h \
+ /usr/include/c++/14/bits/cxxabi_forced.h \
+ /usr/include/c++/14/bits/cxxabi_init_exception.h \
+ /usr/include/c++/14/bits/exception.h \
+ /usr/include/c++/14/bits/exception_defines.h \
+ /usr/include/c++/14/bits/exception_ptr.h \
+ /usr/include/c++/14/bits/functexcept.h \
+ /usr/include/c++/14/bits/functional_hash.h \
+ /usr/include/c++/14/bits/hash_bytes.h \
+ /usr/include/c++/14/bits/invoke.h \
+ /usr/include/c++/14/bits/ios_base.h \
+ /usr/include/c++/14/bits/locale_classes.h \
+ /usr/include/c++/14/bits/locale_classes.tcc \
+ /usr/include/c++/14/bits/locale_conv.h \
+ /usr/include/c++/14/bits/locale_facets.h \
+ /usr/include/c++/14/bits/locale_facets.tcc \
+ /usr/include/c++/14/bits/locale_facets_nonio.h \
+ /usr/include/c++/14/bits/locale_facets_nonio.tcc \
+ /usr/include/c++/14/bits/localefwd.h \
+ /usr/include/c++/14/bits/memoryfwd.h \
+ /usr/include/c++/14/bits/move.h \
+ /usr/include/c++/14/bits/nested_exception.h \
+ /usr/include/c++/14/bits/new_allocator.h \
+ /usr/include/c++/14/bits/ostream_insert.h \
+ /usr/include/c++/14/bits/postypes.h \
+ /usr/include/c++/14/bits/predefined_ops.h \
+ /usr/include/c++/14/bits/ptr_traits.h \
+ /usr/include/c++/14/bits/range_access.h \
+ /usr/include/c++/14/bits/refwrap.h \
+ /usr/include/c++/14/bits/requires_hosted.h \
+ /usr/include/c++/14/bits/shared_ptr.h \
+ /usr/include/c++/14/bits/shared_ptr_atomic.h \
+ /usr/include/c++/14/bits/shared_ptr_base.h \
+ /usr/include/c++/14/bits/std_abs.h \
+ /usr/include/c++/14/bits/stl_algo.h \
+ /usr/include/c++/14/bits/stl_algobase.h \
+ /usr/include/c++/14/bits/stl_construct.h \
+ /usr/include/c++/14/bits/stl_function.h \
+ /usr/include/c++/14/bits/stl_heap.h \
+ /usr/include/c++/14/bits/stl_iterator.h \
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h \
+ /usr/include/c++/14/bits/stl_iterator_base_types.h \
+ /usr/include/c++/14/bits/stl_pair.h \
+ /usr/include/c++/14/bits/stl_raw_storage_iter.h \
+ /usr/include/c++/14/bits/stl_relops.h \
+ /usr/include/c++/14/bits/stl_tempbuf.h \
+ /usr/include/c++/14/bits/stl_uninitialized.h \
+ /usr/include/c++/14/bits/stream_iterator.h \
+ /usr/include/c++/14/bits/streambuf.tcc \
+ /usr/include/c++/14/bits/streambuf_iterator.h \
+ /usr/include/c++/14/bits/stringfwd.h \
+ /usr/include/c++/14/bits/uniform_int_dist.h \
+ /usr/include/c++/14/bits/unique_ptr.h \
+ /usr/include/c++/14/bits/uses_allocator.h \
+ /usr/include/c++/14/bits/utility.h \
+ /usr/include/c++/14/bits/version.h \
+ /usr/include/c++/14/cassert \
+ /usr/include/c++/14/cctype \
+ /usr/include/c++/14/cerrno \
+ /usr/include/c++/14/clocale \
+ /usr/include/c++/14/cstdio \
+ /usr/include/c++/14/cstdlib \
+ /usr/include/c++/14/cstring \
+ /usr/include/c++/14/ctime \
+ /usr/include/c++/14/cwchar \
+ /usr/include/c++/14/cwctype \
+ /usr/include/c++/14/debug/assertions.h \
+ /usr/include/c++/14/debug/debug.h \
+ /usr/include/c++/14/exception \
+ /usr/include/c++/14/ext/aligned_buffer.h \
+ /usr/include/c++/14/ext/alloc_traits.h \
+ /usr/include/c++/14/ext/atomicity.h \
+ /usr/include/c++/14/ext/concurrence.h \
+ /usr/include/c++/14/ext/numeric_traits.h \
+ /usr/include/c++/14/ext/string_conversions.h \
+ /usr/include/c++/14/ext/type_traits.h \
+ /usr/include/c++/14/initializer_list \
+ /usr/include/c++/14/iosfwd \
+ /usr/include/c++/14/iterator \
+ /usr/include/c++/14/limits \
+ /usr/include/c++/14/locale \
+ /usr/include/c++/14/memory \
+ /usr/include/c++/14/new \
+ /usr/include/c++/14/stdexcept \
+ /usr/include/c++/14/streambuf \
+ /usr/include/c++/14/string \
+ /usr/include/c++/14/system_error \
+ /usr/include/c++/14/tuple \
+ /usr/include/c++/14/type_traits \
+ /usr/include/c++/14/typeinfo \
+ /usr/include/c++/14/utility \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/atomic_word.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_base.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_inline.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr-default.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/messages_members.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/time_members.h \
/usr/include/ctype.h \
/usr/include/endian.h \
/usr/include/errno.h \
@@ -875,9 +883,9 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o:
/usr/include/time.h \
/usr/include/wchar.h \
/usr/include/wctype.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdint.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h \
third_party/uri/include/network/optional.hpp \
third_party/uri/include/network/string_view.hpp \
third_party/uri/include/network/uri/detail/uri_parts.hpp \
@@ -908,6 +916,7 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o: third_p
/usr/include/bits/select.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/stdint-intn.h \
+ /usr/include/bits/stdint-least.h \
/usr/include/bits/stdint-uintn.h \
/usr/include/bits/stdio.h \
/usr/include/bits/stdio_lim.h \
@@ -951,116 +960,117 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o: third_p
/usr/include/bits/waitstatus.h \
/usr/include/bits/wchar.h \
/usr/include/bits/wordsize.h \
- /usr/include/c++/13/algorithm \
- /usr/include/c++/13/backward/auto_ptr.h \
- /usr/include/c++/13/backward/binders.h \
- /usr/include/c++/13/bit \
- /usr/include/c++/13/bits/algorithmfwd.h \
- /usr/include/c++/13/bits/align.h \
- /usr/include/c++/13/bits/alloc_traits.h \
- /usr/include/c++/13/bits/allocated_ptr.h \
- /usr/include/c++/13/bits/allocator.h \
- /usr/include/c++/13/bits/atomic_base.h \
- /usr/include/c++/13/bits/atomic_lockfree_defines.h \
- /usr/include/c++/13/bits/basic_string.h \
- /usr/include/c++/13/bits/basic_string.tcc \
- /usr/include/c++/13/bits/char_traits.h \
- /usr/include/c++/13/bits/charconv.h \
- /usr/include/c++/13/bits/concept_check.h \
- /usr/include/c++/13/bits/cpp_type_traits.h \
- /usr/include/c++/13/bits/cxxabi_forced.h \
- /usr/include/c++/13/bits/cxxabi_init_exception.h \
- /usr/include/c++/13/bits/exception.h \
- /usr/include/c++/13/bits/exception_defines.h \
- /usr/include/c++/13/bits/exception_ptr.h \
- /usr/include/c++/13/bits/functexcept.h \
- /usr/include/c++/13/bits/functional_hash.h \
- /usr/include/c++/13/bits/hash_bytes.h \
- /usr/include/c++/13/bits/invoke.h \
- /usr/include/c++/13/bits/ios_base.h \
- /usr/include/c++/13/bits/locale_classes.h \
- /usr/include/c++/13/bits/locale_classes.tcc \
- /usr/include/c++/13/bits/localefwd.h \
- /usr/include/c++/13/bits/memoryfwd.h \
- /usr/include/c++/13/bits/move.h \
- /usr/include/c++/13/bits/nested_exception.h \
- /usr/include/c++/13/bits/new_allocator.h \
- /usr/include/c++/13/bits/ostream_insert.h \
- /usr/include/c++/13/bits/postypes.h \
- /usr/include/c++/13/bits/predefined_ops.h \
- /usr/include/c++/13/bits/ptr_traits.h \
- /usr/include/c++/13/bits/range_access.h \
- /usr/include/c++/13/bits/refwrap.h \
- /usr/include/c++/13/bits/requires_hosted.h \
- /usr/include/c++/13/bits/shared_ptr.h \
- /usr/include/c++/13/bits/shared_ptr_atomic.h \
- /usr/include/c++/13/bits/shared_ptr_base.h \
- /usr/include/c++/13/bits/std_abs.h \
- /usr/include/c++/13/bits/std_function.h \
- /usr/include/c++/13/bits/stl_algo.h \
- /usr/include/c++/13/bits/stl_algobase.h \
- /usr/include/c++/13/bits/stl_construct.h \
- /usr/include/c++/13/bits/stl_function.h \
- /usr/include/c++/13/bits/stl_heap.h \
- /usr/include/c++/13/bits/stl_iterator.h \
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h \
- /usr/include/c++/13/bits/stl_iterator_base_types.h \
- /usr/include/c++/13/bits/stl_pair.h \
- /usr/include/c++/13/bits/stl_raw_storage_iter.h \
- /usr/include/c++/13/bits/stl_relops.h \
- /usr/include/c++/13/bits/stl_tempbuf.h \
- /usr/include/c++/13/bits/stl_uninitialized.h \
- /usr/include/c++/13/bits/stream_iterator.h \
- /usr/include/c++/13/bits/streambuf.tcc \
- /usr/include/c++/13/bits/streambuf_iterator.h \
- /usr/include/c++/13/bits/stringfwd.h \
- /usr/include/c++/13/bits/uniform_int_dist.h \
- /usr/include/c++/13/bits/unique_ptr.h \
- /usr/include/c++/13/bits/uses_allocator.h \
- /usr/include/c++/13/bits/utility.h \
- /usr/include/c++/13/cassert \
- /usr/include/c++/13/cctype \
- /usr/include/c++/13/cerrno \
- /usr/include/c++/13/clocale \
- /usr/include/c++/13/cstddef \
- /usr/include/c++/13/cstdint \
- /usr/include/c++/13/cstdio \
- /usr/include/c++/13/cstdlib \
- /usr/include/c++/13/cstring \
- /usr/include/c++/13/cwchar \
- /usr/include/c++/13/debug/assertions.h \
- /usr/include/c++/13/debug/debug.h \
- /usr/include/c++/13/exception \
- /usr/include/c++/13/ext/aligned_buffer.h \
- /usr/include/c++/13/ext/alloc_traits.h \
- /usr/include/c++/13/ext/atomicity.h \
- /usr/include/c++/13/ext/concurrence.h \
- /usr/include/c++/13/ext/numeric_traits.h \
- /usr/include/c++/13/ext/string_conversions.h \
- /usr/include/c++/13/ext/type_traits.h \
- /usr/include/c++/13/functional \
- /usr/include/c++/13/initializer_list \
- /usr/include/c++/13/iosfwd \
- /usr/include/c++/13/iterator \
- /usr/include/c++/13/memory \
- /usr/include/c++/13/new \
- /usr/include/c++/13/stdexcept \
- /usr/include/c++/13/streambuf \
- /usr/include/c++/13/string \
- /usr/include/c++/13/system_error \
- /usr/include/c++/13/tuple \
- /usr/include/c++/13/type_traits \
- /usr/include/c++/13/typeinfo \
- /usr/include/c++/13/utility \
- /usr/include/c++/13/x86_64-redhat-linux/bits/atomic_word.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h \
+ /usr/include/c++/14/algorithm \
+ /usr/include/c++/14/backward/auto_ptr.h \
+ /usr/include/c++/14/backward/binders.h \
+ /usr/include/c++/14/bit \
+ /usr/include/c++/14/bits/algorithmfwd.h \
+ /usr/include/c++/14/bits/align.h \
+ /usr/include/c++/14/bits/alloc_traits.h \
+ /usr/include/c++/14/bits/allocated_ptr.h \
+ /usr/include/c++/14/bits/allocator.h \
+ /usr/include/c++/14/bits/atomic_base.h \
+ /usr/include/c++/14/bits/atomic_lockfree_defines.h \
+ /usr/include/c++/14/bits/basic_string.h \
+ /usr/include/c++/14/bits/basic_string.tcc \
+ /usr/include/c++/14/bits/char_traits.h \
+ /usr/include/c++/14/bits/charconv.h \
+ /usr/include/c++/14/bits/concept_check.h \
+ /usr/include/c++/14/bits/cpp_type_traits.h \
+ /usr/include/c++/14/bits/cxxabi_forced.h \
+ /usr/include/c++/14/bits/cxxabi_init_exception.h \
+ /usr/include/c++/14/bits/exception.h \
+ /usr/include/c++/14/bits/exception_defines.h \
+ /usr/include/c++/14/bits/exception_ptr.h \
+ /usr/include/c++/14/bits/functexcept.h \
+ /usr/include/c++/14/bits/functional_hash.h \
+ /usr/include/c++/14/bits/hash_bytes.h \
+ /usr/include/c++/14/bits/invoke.h \
+ /usr/include/c++/14/bits/ios_base.h \
+ /usr/include/c++/14/bits/locale_classes.h \
+ /usr/include/c++/14/bits/locale_classes.tcc \
+ /usr/include/c++/14/bits/localefwd.h \
+ /usr/include/c++/14/bits/memoryfwd.h \
+ /usr/include/c++/14/bits/move.h \
+ /usr/include/c++/14/bits/nested_exception.h \
+ /usr/include/c++/14/bits/new_allocator.h \
+ /usr/include/c++/14/bits/ostream_insert.h \
+ /usr/include/c++/14/bits/postypes.h \
+ /usr/include/c++/14/bits/predefined_ops.h \
+ /usr/include/c++/14/bits/ptr_traits.h \
+ /usr/include/c++/14/bits/range_access.h \
+ /usr/include/c++/14/bits/refwrap.h \
+ /usr/include/c++/14/bits/requires_hosted.h \
+ /usr/include/c++/14/bits/shared_ptr.h \
+ /usr/include/c++/14/bits/shared_ptr_atomic.h \
+ /usr/include/c++/14/bits/shared_ptr_base.h \
+ /usr/include/c++/14/bits/std_abs.h \
+ /usr/include/c++/14/bits/std_function.h \
+ /usr/include/c++/14/bits/stl_algo.h \
+ /usr/include/c++/14/bits/stl_algobase.h \
+ /usr/include/c++/14/bits/stl_construct.h \
+ /usr/include/c++/14/bits/stl_function.h \
+ /usr/include/c++/14/bits/stl_heap.h \
+ /usr/include/c++/14/bits/stl_iterator.h \
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h \
+ /usr/include/c++/14/bits/stl_iterator_base_types.h \
+ /usr/include/c++/14/bits/stl_pair.h \
+ /usr/include/c++/14/bits/stl_raw_storage_iter.h \
+ /usr/include/c++/14/bits/stl_relops.h \
+ /usr/include/c++/14/bits/stl_tempbuf.h \
+ /usr/include/c++/14/bits/stl_uninitialized.h \
+ /usr/include/c++/14/bits/stream_iterator.h \
+ /usr/include/c++/14/bits/streambuf.tcc \
+ /usr/include/c++/14/bits/streambuf_iterator.h \
+ /usr/include/c++/14/bits/stringfwd.h \
+ /usr/include/c++/14/bits/uniform_int_dist.h \
+ /usr/include/c++/14/bits/unique_ptr.h \
+ /usr/include/c++/14/bits/uses_allocator.h \
+ /usr/include/c++/14/bits/utility.h \
+ /usr/include/c++/14/bits/version.h \
+ /usr/include/c++/14/cassert \
+ /usr/include/c++/14/cctype \
+ /usr/include/c++/14/cerrno \
+ /usr/include/c++/14/clocale \
+ /usr/include/c++/14/cstddef \
+ /usr/include/c++/14/cstdint \
+ /usr/include/c++/14/cstdio \
+ /usr/include/c++/14/cstdlib \
+ /usr/include/c++/14/cstring \
+ /usr/include/c++/14/cwchar \
+ /usr/include/c++/14/debug/assertions.h \
+ /usr/include/c++/14/debug/debug.h \
+ /usr/include/c++/14/exception \
+ /usr/include/c++/14/ext/aligned_buffer.h \
+ /usr/include/c++/14/ext/alloc_traits.h \
+ /usr/include/c++/14/ext/atomicity.h \
+ /usr/include/c++/14/ext/concurrence.h \
+ /usr/include/c++/14/ext/numeric_traits.h \
+ /usr/include/c++/14/ext/string_conversions.h \
+ /usr/include/c++/14/ext/type_traits.h \
+ /usr/include/c++/14/functional \
+ /usr/include/c++/14/initializer_list \
+ /usr/include/c++/14/iosfwd \
+ /usr/include/c++/14/iterator \
+ /usr/include/c++/14/memory \
+ /usr/include/c++/14/new \
+ /usr/include/c++/14/stdexcept \
+ /usr/include/c++/14/streambuf \
+ /usr/include/c++/14/string \
+ /usr/include/c++/14/system_error \
+ /usr/include/c++/14/tuple \
+ /usr/include/c++/14/type_traits \
+ /usr/include/c++/14/typeinfo \
+ /usr/include/c++/14/utility \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/atomic_word.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr-default.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h \
/usr/include/ctype.h \
/usr/include/endian.h \
/usr/include/errno.h \
@@ -1084,9 +1094,9 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o: third_p
/usr/include/sys/types.h \
/usr/include/time.h \
/usr/include/wchar.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdint.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h \
third_party/uri/include/network/optional.hpp \
third_party/uri/include/network/string_view.hpp \
third_party/uri/include/network/uri/config.hpp \
@@ -1124,6 +1134,7 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o: third_party/uri/src/ur
/usr/include/bits/select.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/stdint-intn.h \
+ /usr/include/bits/stdint-least.h \
/usr/include/bits/stdint-uintn.h \
/usr/include/bits/stdio.h \
/usr/include/bits/stdio_lim.h \
@@ -1168,132 +1179,133 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o: third_party/uri/src/ur
/usr/include/bits/wchar.h \
/usr/include/bits/wctype-wchar.h \
/usr/include/bits/wordsize.h \
- /usr/include/c++/13/algorithm \
- /usr/include/c++/13/backward/auto_ptr.h \
- /usr/include/c++/13/backward/binders.h \
- /usr/include/c++/13/bit \
- /usr/include/c++/13/bits/algorithmfwd.h \
- /usr/include/c++/13/bits/align.h \
- /usr/include/c++/13/bits/alloc_traits.h \
- /usr/include/c++/13/bits/allocated_ptr.h \
- /usr/include/c++/13/bits/allocator.h \
- /usr/include/c++/13/bits/atomic_base.h \
- /usr/include/c++/13/bits/atomic_lockfree_defines.h \
- /usr/include/c++/13/bits/basic_string.h \
- /usr/include/c++/13/bits/basic_string.tcc \
- /usr/include/c++/13/bits/char_traits.h \
- /usr/include/c++/13/bits/charconv.h \
- /usr/include/c++/13/bits/codecvt.h \
- /usr/include/c++/13/bits/concept_check.h \
- /usr/include/c++/13/bits/cpp_type_traits.h \
- /usr/include/c++/13/bits/cxxabi_forced.h \
- /usr/include/c++/13/bits/cxxabi_init_exception.h \
- /usr/include/c++/13/bits/exception.h \
- /usr/include/c++/13/bits/exception_defines.h \
- /usr/include/c++/13/bits/exception_ptr.h \
- /usr/include/c++/13/bits/functexcept.h \
- /usr/include/c++/13/bits/functional_hash.h \
- /usr/include/c++/13/bits/hash_bytes.h \
- /usr/include/c++/13/bits/invoke.h \
- /usr/include/c++/13/bits/ios_base.h \
- /usr/include/c++/13/bits/locale_classes.h \
- /usr/include/c++/13/bits/locale_classes.tcc \
- /usr/include/c++/13/bits/locale_conv.h \
- /usr/include/c++/13/bits/locale_facets.h \
- /usr/include/c++/13/bits/locale_facets.tcc \
- /usr/include/c++/13/bits/locale_facets_nonio.h \
- /usr/include/c++/13/bits/locale_facets_nonio.tcc \
- /usr/include/c++/13/bits/localefwd.h \
- /usr/include/c++/13/bits/memoryfwd.h \
- /usr/include/c++/13/bits/move.h \
- /usr/include/c++/13/bits/nested_exception.h \
- /usr/include/c++/13/bits/new_allocator.h \
- /usr/include/c++/13/bits/ostream_insert.h \
- /usr/include/c++/13/bits/postypes.h \
- /usr/include/c++/13/bits/predefined_ops.h \
- /usr/include/c++/13/bits/ptr_traits.h \
- /usr/include/c++/13/bits/range_access.h \
- /usr/include/c++/13/bits/refwrap.h \
- /usr/include/c++/13/bits/requires_hosted.h \
- /usr/include/c++/13/bits/shared_ptr.h \
- /usr/include/c++/13/bits/shared_ptr_atomic.h \
- /usr/include/c++/13/bits/shared_ptr_base.h \
- /usr/include/c++/13/bits/std_abs.h \
- /usr/include/c++/13/bits/std_function.h \
- /usr/include/c++/13/bits/stl_algo.h \
- /usr/include/c++/13/bits/stl_algobase.h \
- /usr/include/c++/13/bits/stl_bvector.h \
- /usr/include/c++/13/bits/stl_construct.h \
- /usr/include/c++/13/bits/stl_function.h \
- /usr/include/c++/13/bits/stl_heap.h \
- /usr/include/c++/13/bits/stl_iterator.h \
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h \
- /usr/include/c++/13/bits/stl_iterator_base_types.h \
- /usr/include/c++/13/bits/stl_pair.h \
- /usr/include/c++/13/bits/stl_raw_storage_iter.h \
- /usr/include/c++/13/bits/stl_relops.h \
- /usr/include/c++/13/bits/stl_tempbuf.h \
- /usr/include/c++/13/bits/stl_uninitialized.h \
- /usr/include/c++/13/bits/stl_vector.h \
- /usr/include/c++/13/bits/stream_iterator.h \
- /usr/include/c++/13/bits/streambuf.tcc \
- /usr/include/c++/13/bits/streambuf_iterator.h \
- /usr/include/c++/13/bits/stringfwd.h \
- /usr/include/c++/13/bits/uniform_int_dist.h \
- /usr/include/c++/13/bits/unique_ptr.h \
- /usr/include/c++/13/bits/uses_allocator.h \
- /usr/include/c++/13/bits/utility.h \
- /usr/include/c++/13/bits/vector.tcc \
- /usr/include/c++/13/cassert \
- /usr/include/c++/13/cctype \
- /usr/include/c++/13/cerrno \
- /usr/include/c++/13/clocale \
- /usr/include/c++/13/cstdint \
- /usr/include/c++/13/cstdio \
- /usr/include/c++/13/cstdlib \
- /usr/include/c++/13/cstring \
- /usr/include/c++/13/ctime \
- /usr/include/c++/13/cwchar \
- /usr/include/c++/13/cwctype \
- /usr/include/c++/13/debug/assertions.h \
- /usr/include/c++/13/debug/debug.h \
- /usr/include/c++/13/exception \
- /usr/include/c++/13/ext/aligned_buffer.h \
- /usr/include/c++/13/ext/alloc_traits.h \
- /usr/include/c++/13/ext/atomicity.h \
- /usr/include/c++/13/ext/concurrence.h \
- /usr/include/c++/13/ext/numeric_traits.h \
- /usr/include/c++/13/ext/string_conversions.h \
- /usr/include/c++/13/ext/type_traits.h \
- /usr/include/c++/13/functional \
- /usr/include/c++/13/initializer_list \
- /usr/include/c++/13/iosfwd \
- /usr/include/c++/13/iterator \
- /usr/include/c++/13/locale \
- /usr/include/c++/13/memory \
- /usr/include/c++/13/new \
- /usr/include/c++/13/stdexcept \
- /usr/include/c++/13/streambuf \
- /usr/include/c++/13/string \
- /usr/include/c++/13/system_error \
- /usr/include/c++/13/tuple \
- /usr/include/c++/13/type_traits \
- /usr/include/c++/13/typeinfo \
- /usr/include/c++/13/utility \
- /usr/include/c++/13/vector \
- /usr/include/c++/13/x86_64-redhat-linux/bits/atomic_word.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_base.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/messages_members.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/time_members.h \
+ /usr/include/c++/14/algorithm \
+ /usr/include/c++/14/backward/auto_ptr.h \
+ /usr/include/c++/14/backward/binders.h \
+ /usr/include/c++/14/bit \
+ /usr/include/c++/14/bits/algorithmfwd.h \
+ /usr/include/c++/14/bits/align.h \
+ /usr/include/c++/14/bits/alloc_traits.h \
+ /usr/include/c++/14/bits/allocated_ptr.h \
+ /usr/include/c++/14/bits/allocator.h \
+ /usr/include/c++/14/bits/atomic_base.h \
+ /usr/include/c++/14/bits/atomic_lockfree_defines.h \
+ /usr/include/c++/14/bits/basic_string.h \
+ /usr/include/c++/14/bits/basic_string.tcc \
+ /usr/include/c++/14/bits/char_traits.h \
+ /usr/include/c++/14/bits/charconv.h \
+ /usr/include/c++/14/bits/codecvt.h \
+ /usr/include/c++/14/bits/concept_check.h \
+ /usr/include/c++/14/bits/cpp_type_traits.h \
+ /usr/include/c++/14/bits/cxxabi_forced.h \
+ /usr/include/c++/14/bits/cxxabi_init_exception.h \
+ /usr/include/c++/14/bits/exception.h \
+ /usr/include/c++/14/bits/exception_defines.h \
+ /usr/include/c++/14/bits/exception_ptr.h \
+ /usr/include/c++/14/bits/functexcept.h \
+ /usr/include/c++/14/bits/functional_hash.h \
+ /usr/include/c++/14/bits/hash_bytes.h \
+ /usr/include/c++/14/bits/invoke.h \
+ /usr/include/c++/14/bits/ios_base.h \
+ /usr/include/c++/14/bits/locale_classes.h \
+ /usr/include/c++/14/bits/locale_classes.tcc \
+ /usr/include/c++/14/bits/locale_conv.h \
+ /usr/include/c++/14/bits/locale_facets.h \
+ /usr/include/c++/14/bits/locale_facets.tcc \
+ /usr/include/c++/14/bits/locale_facets_nonio.h \
+ /usr/include/c++/14/bits/locale_facets_nonio.tcc \
+ /usr/include/c++/14/bits/localefwd.h \
+ /usr/include/c++/14/bits/memoryfwd.h \
+ /usr/include/c++/14/bits/move.h \
+ /usr/include/c++/14/bits/nested_exception.h \
+ /usr/include/c++/14/bits/new_allocator.h \
+ /usr/include/c++/14/bits/ostream_insert.h \
+ /usr/include/c++/14/bits/postypes.h \
+ /usr/include/c++/14/bits/predefined_ops.h \
+ /usr/include/c++/14/bits/ptr_traits.h \
+ /usr/include/c++/14/bits/range_access.h \
+ /usr/include/c++/14/bits/refwrap.h \
+ /usr/include/c++/14/bits/requires_hosted.h \
+ /usr/include/c++/14/bits/shared_ptr.h \
+ /usr/include/c++/14/bits/shared_ptr_atomic.h \
+ /usr/include/c++/14/bits/shared_ptr_base.h \
+ /usr/include/c++/14/bits/std_abs.h \
+ /usr/include/c++/14/bits/std_function.h \
+ /usr/include/c++/14/bits/stl_algo.h \
+ /usr/include/c++/14/bits/stl_algobase.h \
+ /usr/include/c++/14/bits/stl_bvector.h \
+ /usr/include/c++/14/bits/stl_construct.h \
+ /usr/include/c++/14/bits/stl_function.h \
+ /usr/include/c++/14/bits/stl_heap.h \
+ /usr/include/c++/14/bits/stl_iterator.h \
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h \
+ /usr/include/c++/14/bits/stl_iterator_base_types.h \
+ /usr/include/c++/14/bits/stl_pair.h \
+ /usr/include/c++/14/bits/stl_raw_storage_iter.h \
+ /usr/include/c++/14/bits/stl_relops.h \
+ /usr/include/c++/14/bits/stl_tempbuf.h \
+ /usr/include/c++/14/bits/stl_uninitialized.h \
+ /usr/include/c++/14/bits/stl_vector.h \
+ /usr/include/c++/14/bits/stream_iterator.h \
+ /usr/include/c++/14/bits/streambuf.tcc \
+ /usr/include/c++/14/bits/streambuf_iterator.h \
+ /usr/include/c++/14/bits/stringfwd.h \
+ /usr/include/c++/14/bits/uniform_int_dist.h \
+ /usr/include/c++/14/bits/unique_ptr.h \
+ /usr/include/c++/14/bits/uses_allocator.h \
+ /usr/include/c++/14/bits/utility.h \
+ /usr/include/c++/14/bits/vector.tcc \
+ /usr/include/c++/14/bits/version.h \
+ /usr/include/c++/14/cassert \
+ /usr/include/c++/14/cctype \
+ /usr/include/c++/14/cerrno \
+ /usr/include/c++/14/clocale \
+ /usr/include/c++/14/cstdint \
+ /usr/include/c++/14/cstdio \
+ /usr/include/c++/14/cstdlib \
+ /usr/include/c++/14/cstring \
+ /usr/include/c++/14/ctime \
+ /usr/include/c++/14/cwchar \
+ /usr/include/c++/14/cwctype \
+ /usr/include/c++/14/debug/assertions.h \
+ /usr/include/c++/14/debug/debug.h \
+ /usr/include/c++/14/exception \
+ /usr/include/c++/14/ext/aligned_buffer.h \
+ /usr/include/c++/14/ext/alloc_traits.h \
+ /usr/include/c++/14/ext/atomicity.h \
+ /usr/include/c++/14/ext/concurrence.h \
+ /usr/include/c++/14/ext/numeric_traits.h \
+ /usr/include/c++/14/ext/string_conversions.h \
+ /usr/include/c++/14/ext/type_traits.h \
+ /usr/include/c++/14/functional \
+ /usr/include/c++/14/initializer_list \
+ /usr/include/c++/14/iosfwd \
+ /usr/include/c++/14/iterator \
+ /usr/include/c++/14/locale \
+ /usr/include/c++/14/memory \
+ /usr/include/c++/14/new \
+ /usr/include/c++/14/stdexcept \
+ /usr/include/c++/14/streambuf \
+ /usr/include/c++/14/string \
+ /usr/include/c++/14/system_error \
+ /usr/include/c++/14/tuple \
+ /usr/include/c++/14/type_traits \
+ /usr/include/c++/14/typeinfo \
+ /usr/include/c++/14/utility \
+ /usr/include/c++/14/vector \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/atomic_word.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_base.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_inline.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr-default.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/messages_members.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/time_members.h \
/usr/include/ctype.h \
/usr/include/endian.h \
/usr/include/errno.h \
@@ -1319,9 +1331,9 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o: third_party/uri/src/ur
/usr/include/time.h \
/usr/include/wchar.h \
/usr/include/wctype.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdint.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h \
third_party/uri/include/network/optional.hpp \
third_party/uri/include/network/string_view.hpp \
third_party/uri/include/network/uri/config.hpp \
@@ -1363,6 +1375,7 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o: third_party/ur
/usr/include/bits/select.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/stdint-intn.h \
+ /usr/include/bits/stdint-least.h \
/usr/include/bits/stdint-uintn.h \
/usr/include/bits/stdio.h \
/usr/include/bits/stdio_lim.h \
@@ -1407,128 +1420,129 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o: third_party/ur
/usr/include/bits/wchar.h \
/usr/include/bits/wctype-wchar.h \
/usr/include/bits/wordsize.h \
- /usr/include/c++/13/algorithm \
- /usr/include/c++/13/backward/auto_ptr.h \
- /usr/include/c++/13/backward/binders.h \
- /usr/include/c++/13/bit \
- /usr/include/c++/13/bits/algorithmfwd.h \
- /usr/include/c++/13/bits/align.h \
- /usr/include/c++/13/bits/alloc_traits.h \
- /usr/include/c++/13/bits/allocated_ptr.h \
- /usr/include/c++/13/bits/allocator.h \
- /usr/include/c++/13/bits/atomic_base.h \
- /usr/include/c++/13/bits/atomic_lockfree_defines.h \
- /usr/include/c++/13/bits/basic_string.h \
- /usr/include/c++/13/bits/basic_string.tcc \
- /usr/include/c++/13/bits/char_traits.h \
- /usr/include/c++/13/bits/charconv.h \
- /usr/include/c++/13/bits/codecvt.h \
- /usr/include/c++/13/bits/concept_check.h \
- /usr/include/c++/13/bits/cpp_type_traits.h \
- /usr/include/c++/13/bits/cxxabi_forced.h \
- /usr/include/c++/13/bits/cxxabi_init_exception.h \
- /usr/include/c++/13/bits/exception.h \
- /usr/include/c++/13/bits/exception_defines.h \
- /usr/include/c++/13/bits/exception_ptr.h \
- /usr/include/c++/13/bits/functexcept.h \
- /usr/include/c++/13/bits/functional_hash.h \
- /usr/include/c++/13/bits/hash_bytes.h \
- /usr/include/c++/13/bits/invoke.h \
- /usr/include/c++/13/bits/ios_base.h \
- /usr/include/c++/13/bits/locale_classes.h \
- /usr/include/c++/13/bits/locale_classes.tcc \
- /usr/include/c++/13/bits/locale_conv.h \
- /usr/include/c++/13/bits/locale_facets.h \
- /usr/include/c++/13/bits/locale_facets.tcc \
- /usr/include/c++/13/bits/locale_facets_nonio.h \
- /usr/include/c++/13/bits/locale_facets_nonio.tcc \
- /usr/include/c++/13/bits/localefwd.h \
- /usr/include/c++/13/bits/memoryfwd.h \
- /usr/include/c++/13/bits/move.h \
- /usr/include/c++/13/bits/nested_exception.h \
- /usr/include/c++/13/bits/new_allocator.h \
- /usr/include/c++/13/bits/ostream_insert.h \
- /usr/include/c++/13/bits/postypes.h \
- /usr/include/c++/13/bits/predefined_ops.h \
- /usr/include/c++/13/bits/ptr_traits.h \
- /usr/include/c++/13/bits/range_access.h \
- /usr/include/c++/13/bits/refwrap.h \
- /usr/include/c++/13/bits/requires_hosted.h \
- /usr/include/c++/13/bits/shared_ptr.h \
- /usr/include/c++/13/bits/shared_ptr_atomic.h \
- /usr/include/c++/13/bits/shared_ptr_base.h \
- /usr/include/c++/13/bits/std_abs.h \
- /usr/include/c++/13/bits/std_function.h \
- /usr/include/c++/13/bits/stl_algo.h \
- /usr/include/c++/13/bits/stl_algobase.h \
- /usr/include/c++/13/bits/stl_construct.h \
- /usr/include/c++/13/bits/stl_function.h \
- /usr/include/c++/13/bits/stl_heap.h \
- /usr/include/c++/13/bits/stl_iterator.h \
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h \
- /usr/include/c++/13/bits/stl_iterator_base_types.h \
- /usr/include/c++/13/bits/stl_pair.h \
- /usr/include/c++/13/bits/stl_raw_storage_iter.h \
- /usr/include/c++/13/bits/stl_relops.h \
- /usr/include/c++/13/bits/stl_tempbuf.h \
- /usr/include/c++/13/bits/stl_uninitialized.h \
- /usr/include/c++/13/bits/stream_iterator.h \
- /usr/include/c++/13/bits/streambuf.tcc \
- /usr/include/c++/13/bits/streambuf_iterator.h \
- /usr/include/c++/13/bits/stringfwd.h \
- /usr/include/c++/13/bits/uniform_int_dist.h \
- /usr/include/c++/13/bits/unique_ptr.h \
- /usr/include/c++/13/bits/uses_allocator.h \
- /usr/include/c++/13/bits/utility.h \
- /usr/include/c++/13/cassert \
- /usr/include/c++/13/cctype \
- /usr/include/c++/13/cerrno \
- /usr/include/c++/13/clocale \
- /usr/include/c++/13/cstdint \
- /usr/include/c++/13/cstdio \
- /usr/include/c++/13/cstdlib \
- /usr/include/c++/13/cstring \
- /usr/include/c++/13/ctime \
- /usr/include/c++/13/cwchar \
- /usr/include/c++/13/cwctype \
- /usr/include/c++/13/debug/assertions.h \
- /usr/include/c++/13/debug/debug.h \
- /usr/include/c++/13/exception \
- /usr/include/c++/13/ext/aligned_buffer.h \
- /usr/include/c++/13/ext/alloc_traits.h \
- /usr/include/c++/13/ext/atomicity.h \
- /usr/include/c++/13/ext/concurrence.h \
- /usr/include/c++/13/ext/numeric_traits.h \
- /usr/include/c++/13/ext/string_conversions.h \
- /usr/include/c++/13/ext/type_traits.h \
- /usr/include/c++/13/functional \
- /usr/include/c++/13/initializer_list \
- /usr/include/c++/13/iosfwd \
- /usr/include/c++/13/iterator \
- /usr/include/c++/13/locale \
- /usr/include/c++/13/memory \
- /usr/include/c++/13/new \
- /usr/include/c++/13/stdexcept \
- /usr/include/c++/13/streambuf \
- /usr/include/c++/13/string \
- /usr/include/c++/13/system_error \
- /usr/include/c++/13/tuple \
- /usr/include/c++/13/type_traits \
- /usr/include/c++/13/typeinfo \
- /usr/include/c++/13/utility \
- /usr/include/c++/13/x86_64-redhat-linux/bits/atomic_word.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_base.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/gthr.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/messages_members.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/time_members.h \
+ /usr/include/c++/14/algorithm \
+ /usr/include/c++/14/backward/auto_ptr.h \
+ /usr/include/c++/14/backward/binders.h \
+ /usr/include/c++/14/bit \
+ /usr/include/c++/14/bits/algorithmfwd.h \
+ /usr/include/c++/14/bits/align.h \
+ /usr/include/c++/14/bits/alloc_traits.h \
+ /usr/include/c++/14/bits/allocated_ptr.h \
+ /usr/include/c++/14/bits/allocator.h \
+ /usr/include/c++/14/bits/atomic_base.h \
+ /usr/include/c++/14/bits/atomic_lockfree_defines.h \
+ /usr/include/c++/14/bits/basic_string.h \
+ /usr/include/c++/14/bits/basic_string.tcc \
+ /usr/include/c++/14/bits/char_traits.h \
+ /usr/include/c++/14/bits/charconv.h \
+ /usr/include/c++/14/bits/codecvt.h \
+ /usr/include/c++/14/bits/concept_check.h \
+ /usr/include/c++/14/bits/cpp_type_traits.h \
+ /usr/include/c++/14/bits/cxxabi_forced.h \
+ /usr/include/c++/14/bits/cxxabi_init_exception.h \
+ /usr/include/c++/14/bits/exception.h \
+ /usr/include/c++/14/bits/exception_defines.h \
+ /usr/include/c++/14/bits/exception_ptr.h \
+ /usr/include/c++/14/bits/functexcept.h \
+ /usr/include/c++/14/bits/functional_hash.h \
+ /usr/include/c++/14/bits/hash_bytes.h \
+ /usr/include/c++/14/bits/invoke.h \
+ /usr/include/c++/14/bits/ios_base.h \
+ /usr/include/c++/14/bits/locale_classes.h \
+ /usr/include/c++/14/bits/locale_classes.tcc \
+ /usr/include/c++/14/bits/locale_conv.h \
+ /usr/include/c++/14/bits/locale_facets.h \
+ /usr/include/c++/14/bits/locale_facets.tcc \
+ /usr/include/c++/14/bits/locale_facets_nonio.h \
+ /usr/include/c++/14/bits/locale_facets_nonio.tcc \
+ /usr/include/c++/14/bits/localefwd.h \
+ /usr/include/c++/14/bits/memoryfwd.h \
+ /usr/include/c++/14/bits/move.h \
+ /usr/include/c++/14/bits/nested_exception.h \
+ /usr/include/c++/14/bits/new_allocator.h \
+ /usr/include/c++/14/bits/ostream_insert.h \
+ /usr/include/c++/14/bits/postypes.h \
+ /usr/include/c++/14/bits/predefined_ops.h \
+ /usr/include/c++/14/bits/ptr_traits.h \
+ /usr/include/c++/14/bits/range_access.h \
+ /usr/include/c++/14/bits/refwrap.h \
+ /usr/include/c++/14/bits/requires_hosted.h \
+ /usr/include/c++/14/bits/shared_ptr.h \
+ /usr/include/c++/14/bits/shared_ptr_atomic.h \
+ /usr/include/c++/14/bits/shared_ptr_base.h \
+ /usr/include/c++/14/bits/std_abs.h \
+ /usr/include/c++/14/bits/std_function.h \
+ /usr/include/c++/14/bits/stl_algo.h \
+ /usr/include/c++/14/bits/stl_algobase.h \
+ /usr/include/c++/14/bits/stl_construct.h \
+ /usr/include/c++/14/bits/stl_function.h \
+ /usr/include/c++/14/bits/stl_heap.h \
+ /usr/include/c++/14/bits/stl_iterator.h \
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h \
+ /usr/include/c++/14/bits/stl_iterator_base_types.h \
+ /usr/include/c++/14/bits/stl_pair.h \
+ /usr/include/c++/14/bits/stl_raw_storage_iter.h \
+ /usr/include/c++/14/bits/stl_relops.h \
+ /usr/include/c++/14/bits/stl_tempbuf.h \
+ /usr/include/c++/14/bits/stl_uninitialized.h \
+ /usr/include/c++/14/bits/stream_iterator.h \
+ /usr/include/c++/14/bits/streambuf.tcc \
+ /usr/include/c++/14/bits/streambuf_iterator.h \
+ /usr/include/c++/14/bits/stringfwd.h \
+ /usr/include/c++/14/bits/uniform_int_dist.h \
+ /usr/include/c++/14/bits/unique_ptr.h \
+ /usr/include/c++/14/bits/uses_allocator.h \
+ /usr/include/c++/14/bits/utility.h \
+ /usr/include/c++/14/bits/version.h \
+ /usr/include/c++/14/cassert \
+ /usr/include/c++/14/cctype \
+ /usr/include/c++/14/cerrno \
+ /usr/include/c++/14/clocale \
+ /usr/include/c++/14/cstdint \
+ /usr/include/c++/14/cstdio \
+ /usr/include/c++/14/cstdlib \
+ /usr/include/c++/14/cstring \
+ /usr/include/c++/14/ctime \
+ /usr/include/c++/14/cwchar \
+ /usr/include/c++/14/cwctype \
+ /usr/include/c++/14/debug/assertions.h \
+ /usr/include/c++/14/debug/debug.h \
+ /usr/include/c++/14/exception \
+ /usr/include/c++/14/ext/aligned_buffer.h \
+ /usr/include/c++/14/ext/alloc_traits.h \
+ /usr/include/c++/14/ext/atomicity.h \
+ /usr/include/c++/14/ext/concurrence.h \
+ /usr/include/c++/14/ext/numeric_traits.h \
+ /usr/include/c++/14/ext/string_conversions.h \
+ /usr/include/c++/14/ext/type_traits.h \
+ /usr/include/c++/14/functional \
+ /usr/include/c++/14/initializer_list \
+ /usr/include/c++/14/iosfwd \
+ /usr/include/c++/14/iterator \
+ /usr/include/c++/14/locale \
+ /usr/include/c++/14/memory \
+ /usr/include/c++/14/new \
+ /usr/include/c++/14/stdexcept \
+ /usr/include/c++/14/streambuf \
+ /usr/include/c++/14/string \
+ /usr/include/c++/14/system_error \
+ /usr/include/c++/14/tuple \
+ /usr/include/c++/14/type_traits \
+ /usr/include/c++/14/typeinfo \
+ /usr/include/c++/14/utility \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/atomic_word.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_base.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/ctype_inline.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr-default.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/gthr.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/messages_members.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/time_members.h \
/usr/include/ctype.h \
/usr/include/endian.h \
/usr/include/errno.h \
@@ -1554,9 +1568,9 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o: third_party/ur
/usr/include/time.h \
/usr/include/wchar.h \
/usr/include/wctype.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdint.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h \
third_party/uri/include/network/optional.hpp \
third_party/uri/include/network/string_view.hpp \
third_party/uri/include/network/uri/config.hpp \
@@ -1626,73 +1640,74 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o: third_party/uri
/usr/include/bits/waitstatus.h \
/usr/include/bits/wchar.h \
/usr/include/bits/wordsize.h \
- /usr/include/c++/13/backward/binders.h \
- /usr/include/c++/13/bits/alloc_traits.h \
- /usr/include/c++/13/bits/allocator.h \
- /usr/include/c++/13/bits/basic_string.h \
- /usr/include/c++/13/bits/basic_string.tcc \
- /usr/include/c++/13/bits/char_traits.h \
- /usr/include/c++/13/bits/charconv.h \
- /usr/include/c++/13/bits/concept_check.h \
- /usr/include/c++/13/bits/cpp_type_traits.h \
- /usr/include/c++/13/bits/cxxabi_forced.h \
- /usr/include/c++/13/bits/cxxabi_init_exception.h \
- /usr/include/c++/13/bits/exception.h \
- /usr/include/c++/13/bits/exception_defines.h \
- /usr/include/c++/13/bits/exception_ptr.h \
- /usr/include/c++/13/bits/functexcept.h \
- /usr/include/c++/13/bits/functional_hash.h \
- /usr/include/c++/13/bits/hash_bytes.h \
- /usr/include/c++/13/bits/invoke.h \
- /usr/include/c++/13/bits/localefwd.h \
- /usr/include/c++/13/bits/memoryfwd.h \
- /usr/include/c++/13/bits/move.h \
- /usr/include/c++/13/bits/nested_exception.h \
- /usr/include/c++/13/bits/new_allocator.h \
- /usr/include/c++/13/bits/ostream_insert.h \
- /usr/include/c++/13/bits/postypes.h \
- /usr/include/c++/13/bits/predefined_ops.h \
- /usr/include/c++/13/bits/ptr_traits.h \
- /usr/include/c++/13/bits/range_access.h \
- /usr/include/c++/13/bits/refwrap.h \
- /usr/include/c++/13/bits/requires_hosted.h \
- /usr/include/c++/13/bits/std_abs.h \
- /usr/include/c++/13/bits/stl_algobase.h \
- /usr/include/c++/13/bits/stl_construct.h \
- /usr/include/c++/13/bits/stl_function.h \
- /usr/include/c++/13/bits/stl_iterator.h \
- /usr/include/c++/13/bits/stl_iterator_base_funcs.h \
- /usr/include/c++/13/bits/stl_iterator_base_types.h \
- /usr/include/c++/13/bits/stl_pair.h \
- /usr/include/c++/13/bits/stringfwd.h \
- /usr/include/c++/13/bits/utility.h \
- /usr/include/c++/13/cctype \
- /usr/include/c++/13/cerrno \
- /usr/include/c++/13/clocale \
- /usr/include/c++/13/cstdio \
- /usr/include/c++/13/cstdlib \
- /usr/include/c++/13/cwchar \
- /usr/include/c++/13/debug/assertions.h \
- /usr/include/c++/13/debug/debug.h \
- /usr/include/c++/13/exception \
- /usr/include/c++/13/ext/alloc_traits.h \
- /usr/include/c++/13/ext/numeric_traits.h \
- /usr/include/c++/13/ext/string_conversions.h \
- /usr/include/c++/13/ext/type_traits.h \
- /usr/include/c++/13/initializer_list \
- /usr/include/c++/13/iosfwd \
- /usr/include/c++/13/new \
- /usr/include/c++/13/stdexcept \
- /usr/include/c++/13/string \
- /usr/include/c++/13/system_error \
- /usr/include/c++/13/type_traits \
- /usr/include/c++/13/typeinfo \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h \
- /usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h \
+ /usr/include/c++/14/backward/binders.h \
+ /usr/include/c++/14/bits/alloc_traits.h \
+ /usr/include/c++/14/bits/allocator.h \
+ /usr/include/c++/14/bits/basic_string.h \
+ /usr/include/c++/14/bits/basic_string.tcc \
+ /usr/include/c++/14/bits/char_traits.h \
+ /usr/include/c++/14/bits/charconv.h \
+ /usr/include/c++/14/bits/concept_check.h \
+ /usr/include/c++/14/bits/cpp_type_traits.h \
+ /usr/include/c++/14/bits/cxxabi_forced.h \
+ /usr/include/c++/14/bits/cxxabi_init_exception.h \
+ /usr/include/c++/14/bits/exception.h \
+ /usr/include/c++/14/bits/exception_defines.h \
+ /usr/include/c++/14/bits/exception_ptr.h \
+ /usr/include/c++/14/bits/functexcept.h \
+ /usr/include/c++/14/bits/functional_hash.h \
+ /usr/include/c++/14/bits/hash_bytes.h \
+ /usr/include/c++/14/bits/invoke.h \
+ /usr/include/c++/14/bits/localefwd.h \
+ /usr/include/c++/14/bits/memoryfwd.h \
+ /usr/include/c++/14/bits/move.h \
+ /usr/include/c++/14/bits/nested_exception.h \
+ /usr/include/c++/14/bits/new_allocator.h \
+ /usr/include/c++/14/bits/ostream_insert.h \
+ /usr/include/c++/14/bits/postypes.h \
+ /usr/include/c++/14/bits/predefined_ops.h \
+ /usr/include/c++/14/bits/ptr_traits.h \
+ /usr/include/c++/14/bits/range_access.h \
+ /usr/include/c++/14/bits/refwrap.h \
+ /usr/include/c++/14/bits/requires_hosted.h \
+ /usr/include/c++/14/bits/std_abs.h \
+ /usr/include/c++/14/bits/stl_algobase.h \
+ /usr/include/c++/14/bits/stl_construct.h \
+ /usr/include/c++/14/bits/stl_function.h \
+ /usr/include/c++/14/bits/stl_iterator.h \
+ /usr/include/c++/14/bits/stl_iterator_base_funcs.h \
+ /usr/include/c++/14/bits/stl_iterator_base_types.h \
+ /usr/include/c++/14/bits/stl_pair.h \
+ /usr/include/c++/14/bits/stringfwd.h \
+ /usr/include/c++/14/bits/utility.h \
+ /usr/include/c++/14/bits/version.h \
+ /usr/include/c++/14/cctype \
+ /usr/include/c++/14/cerrno \
+ /usr/include/c++/14/clocale \
+ /usr/include/c++/14/cstdio \
+ /usr/include/c++/14/cstdlib \
+ /usr/include/c++/14/cwchar \
+ /usr/include/c++/14/debug/assertions.h \
+ /usr/include/c++/14/debug/debug.h \
+ /usr/include/c++/14/exception \
+ /usr/include/c++/14/ext/alloc_traits.h \
+ /usr/include/c++/14/ext/numeric_traits.h \
+ /usr/include/c++/14/ext/string_conversions.h \
+ /usr/include/c++/14/ext/type_traits.h \
+ /usr/include/c++/14/initializer_list \
+ /usr/include/c++/14/iosfwd \
+ /usr/include/c++/14/new \
+ /usr/include/c++/14/stdexcept \
+ /usr/include/c++/14/string \
+ /usr/include/c++/14/system_error \
+ /usr/include/c++/14/type_traits \
+ /usr/include/c++/14/typeinfo \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h \
+ /usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h \
/usr/include/ctype.h \
/usr/include/endian.h \
/usr/include/errno.h \
@@ -1709,187 +1724,181 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o: third_party/uri
/usr/include/sys/select.h \
/usr/include/sys/types.h \
/usr/include/wchar.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h \
- /usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h \
+ /usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h \
third_party/uri/include/network/uri/config.hpp \
third_party/uri/include/network/uri/uri_errors.hpp
-third_party/uri/src/uri_errors.cpp:
+third_party/uri/src/uri_builder.cpp:
third_party/uri/src/uri.cpp:
-third_party/uri/src/detail/algorithm_find.hpp:
+third_party/uri/src/detail/uri_resolve.hpp:
-third_party/uri/src/detail/uri_resolve.cpp:
+third_party/uri/src/detail/algorithm_find.hpp:
third_party/uri/src/detail/uri_parse_authority.hpp:
+third_party/uri/src/detail/uri_parse.hpp:
+
third_party/uri/src/detail/grammar.hpp:
third_party/uri/src/detail/uri_parse.cpp:
-third_party/uri/src/detail/uri_percent_encode.hpp:
-
-third_party/uri/src/detail/algorithm_split.hpp:
+third_party/uri/src/detail/algorithm.hpp:
third_party/uri/include/network/uri/uri_errors.hpp:
+third_party/uri/include/network/uri/uri_builder.hpp:
+
third_party/uri/include/network/uri/uri.hpp:
+third_party/uri/include/network/uri/detail/encode.hpp:
+
third_party/uri/include/network/uri/config.hpp:
/usr/include/string.h:
-/usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h:
+/usr/include/c++/14/x86_64-redhat-linux/bits/ctype_base.h:
-/usr/include/c++/13/x86_64-redhat-linux/bits/ctype_base.h:
+/usr/include/c++/14/locale:
-/usr/include/c++/13/vector:
+/usr/include/c++/14/cwctype:
-third_party/uri/src/detail/algorithm.hpp:
+/usr/include/c++/14/ctime:
-/usr/include/c++/13/ctime:
+/usr/include/c++/14/cstdint:
-/usr/include/c++/13/cstring:
+/usr/include/c++/14/x86_64-redhat-linux/bits/messages_members.h:
-/usr/include/c++/13/bits/locale_facets_nonio.h:
+/usr/include/c++/14/bits/vector.tcc:
-/usr/include/c++/13/bits/locale_facets.h:
+third_party/uri/src/detail/uri_percent_encode.hpp:
-/usr/include/c++/13/bits/locale_conv.h:
+/usr/include/c++/14/bits/stl_vector.h:
-third_party/uri/src/detail/uri_normalize.cpp:
+/usr/include/c++/14/bits/stl_bvector.h:
-/usr/include/c++/13/x86_64-redhat-linux/bits/time_members.h:
+/usr/include/c++/14/bits/std_function.h:
-third_party/uri/include/network/uri/detail/uri_parts.hpp:
+/usr/include/c++/14/x86_64-redhat-linux/bits/time_members.h:
-third_party/uri/include/network/optional.hpp:
+/usr/include/c++/14/bits/locale_facets_nonio.tcc:
-/usr/lib/gcc/x86_64-redhat-linux/13/include/stdint.h:
+/usr/include/c++/14/bits/codecvt.h:
-/usr/lib/gcc/x86_64-redhat-linux/13/include/stddef.h:
+third_party/uri/include/network/uri/detail/uri_parts.hpp:
-/usr/lib/gcc/x86_64-redhat-linux/13/include/stdarg.h:
+third_party/uri/include/network/optional.hpp:
/usr/include/wchar.h:
+/usr/include/time.h:
+
/usr/include/sys/single_threaded.h:
/usr/include/sys/cdefs.h:
-/usr/include/stdlib.h:
+/usr/include/c++/14/bits/locale_facets.tcc:
/usr/include/stdio.h:
-/usr/include/stdint.h:
-
/usr/include/stdc-predef.h:
/usr/include/sched.h:
-/usr/include/pthread.h:
-
/usr/include/linux/errno.h:
-/usr/include/features-time64.h:
-
-/usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h:
+/usr/include/c++/14/x86_64-redhat-linux/bits/os_defines.h:
-/usr/include/c++/13/x86_64-redhat-linux/bits/cpu_defines.h:
+/usr/include/c++/14/x86_64-redhat-linux/bits/gthr.h:
-/usr/include/strings.h:
+/usr/include/c++/14/x86_64-redhat-linux/bits/error_constants.h:
-/usr/include/c++/13/x86_64-redhat-linux/bits/c++locale.h:
+/usr/include/locale.h:
-/usr/include/bits/wctype-wchar.h:
+/usr/include/c++/14/x86_64-redhat-linux/bits/c++config.h:
-/usr/include/sys/types.h:
+/usr/include/sys/select.h:
-/usr/include/c++/13/x86_64-redhat-linux/bits/atomic_word.h:
+/usr/include/c++/14/x86_64-redhat-linux/bits/c++allocator.h:
-/usr/include/c++/13/bits/locale_facets_nonio.tcc:
+/usr/include/c++/14/typeinfo:
-/usr/include/c++/13/utility:
+/usr/include/c++/14/type_traits:
-/usr/include/c++/13/type_traits:
+/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h:
-third_party/uri/include/network/uri/detail/encode.hpp:
+/usr/include/c++/14/tuple:
-/usr/include/c++/13/tuple:
+/usr/include/c++/14/string:
-/usr/include/c++/13/stdexcept:
+/usr/include/bits/wctype-wchar.h:
-/usr/include/c++/13/memory:
+/usr/include/sys/types.h:
-/usr/include/c++/13/limits:
+/usr/include/c++/14/memory:
-/usr/include/c++/13/iterator:
+/usr/include/c++/14/bits/locale_conv.h:
-/usr/include/c++/13/initializer_list:
+/usr/include/c++/14/iosfwd:
-/usr/include/c++/13/ext/type_traits.h:
+/usr/include/c++/14/initializer_list:
-/usr/include/c++/13/x86_64-redhat-linux/bits/c++allocator.h:
+/usr/include/c++/14/ext/type_traits.h:
-/usr/include/c++/13/ext/string_conversions.h:
+/usr/include/c++/14/ext/string_conversions.h:
-/usr/include/c++/13/ext/numeric_traits.h:
+/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h:
-third_party/uri/src/detail/uri_resolve.hpp:
+/usr/include/c++/14/ext/atomicity.h:
-/usr/include/c++/13/ext/concurrence.h:
+/usr/include/c++/14/ext/alloc_traits.h:
-/usr/include/c++/13/new:
+/usr/include/c++/14/new:
-/usr/include/c++/13/ext/alloc_traits.h:
+/usr/include/c++/14/ext/aligned_buffer.h:
-/usr/include/locale.h:
+/usr/include/errno.h:
-/usr/include/c++/13/ext/aligned_buffer.h:
+/usr/include/c++/14/debug/debug.h:
-/usr/include/gnu/stubs-64.h:
+/usr/include/c++/14/debug/assertions.h:
-/usr/include/c++/13/debug/debug.h:
+/usr/include/c++/14/cstdio:
-/usr/include/c++/13/debug/assertions.h:
+/usr/include/c++/14/cerrno:
-/usr/include/c++/13/cwchar:
+/usr/include/c++/14/bits/version.h:
-/usr/include/c++/13/cstdint:
+/usr/include/c++/14/bits/utility.h:
-/usr/include/c++/13/bits/std_function.h:
+third_party/uri/src/uri_errors.cpp:
-/usr/include/c++/13/cstdlib:
+/usr/include/c++/14/bits/uses_allocator.h:
-/usr/include/c++/13/bits/uniform_int_dist.h:
+/usr/include/c++/14/limits:
-/usr/include/c++/13/bits/stringfwd.h:
+/usr/include/c++/14/bits/unique_ptr.h:
-/usr/include/c++/13/cassert:
+/usr/include/gnu/stubs-64.h:
-/usr/include/bits/types/time_t.h:
+/usr/include/c++/14/bits/stringfwd.h:
-/usr/include/c++/13/cerrno:
+/usr/include/c++/14/bits/locale_facets.h:
-/usr/include/bits/types/struct_tm.h:
+/usr/include/c++/14/bits/streambuf.tcc:
-/usr/include/c++/13/ext/atomicity.h:
+/usr/include/c++/14/streambuf:
-/usr/include/c++/13/cctype:
+/usr/include/bits/types/struct_tm.h:
/usr/include/bits/wchar.h:
-/usr/include/bits/types/struct_timespec.h:
-
-/usr/include/c++/13/bits/stl_bvector.h:
-
-/usr/include/sys/select.h:
-
-/usr/include/c++/13/bits/allocator.h:
+/usr/include/c++/14/bits/stl_construct.h:
-/usr/include/c++/13/bits/locale_classes.tcc:
+/usr/include/bits/types/struct_timespec.h:
/usr/include/bits/types/struct_sched_param.h:
@@ -1897,81 +1906,93 @@ third_party/uri/src/detail/uri_resolve.hpp:
/usr/include/bits/waitflags.h:
-third_party/uri/src/uri_builder.cpp:
-
-/usr/include/c++/13/locale:
-
-/usr/include/c++/13/bits/stl_uninitialized.h:
-
/usr/include/bits/types/struct_FILE.h:
-/usr/include/bits/types/locale_t.h:
-
-/usr/include/c++/13/x86_64-redhat-linux/bits/os_defines.h:
-
-/usr/include/c++/13/bits/stl_heap.h:
-
/usr/include/bits/types/cookie_io_functions_t.h:
/usr/include/bits/sched.h:
/usr/include/bits/types/clockid_t.h:
-/usr/include/bits/atomic_wide_counter.h:
+/usr/include/c++/14/x86_64-redhat-linux/bits/gthr-default.h:
-/usr/include/c++/13/clocale:
+/usr/include/bits/atomic_wide_counter.h:
-/usr/include/c++/13/bits/allocated_ptr.h:
+/usr/include/c++/14/bits/cxxabi_init_exception.h:
-/usr/include/bits/types/__locale_t.h:
+/usr/include/c++/14/bits/streambuf_iterator.h:
/usr/include/bits/types/__FILE.h:
-/usr/include/c++/13/bits/char_traits.h:
+/usr/include/c++/14/bits/align.h:
-/usr/include/c++/13/bits/codecvt.h:
+/usr/include/c++/14/utility:
/usr/include/bits/types/FILE.h:
+/usr/include/c++/14/bits/exception_ptr.h:
+
/usr/include/bits/types.h:
+/usr/include/endian.h:
+
+/usr/include/c++/14/bits/localefwd.h:
+
/usr/include/bits/types/error_t.h:
/usr/include/bits/stdint-intn.h:
+/usr/include/c++/14/system_error:
+
+/usr/include/c++/14/cstdlib:
+
+/usr/include/bits/endian.h:
+
third_party/uri/include/network/uri/detail/translate.hpp:
/usr/include/asm/errno.h:
-/usr/include/bits/thread-shared-types.h:
+/usr/include/stdint.h:
-/usr/include/features.h:
+/usr/include/c++/14/bits/cxxabi_forced.h:
-/usr/include/bits/endianness.h:
+/usr/include/bits/types/time_t.h:
+
+/usr/include/c++/14/bits/atomic_base.h:
+
+/usr/include/libintl.h:
+
+/usr/include/c++/14/bits/stl_uninitialized.h:
+
+/usr/include/bits/floatn-common.h:
-/usr/include/c++/13/bits/unique_ptr.h:
+/usr/include/stdlib.h:
-/usr/include/c++/13/bits/align.h:
+/usr/include/c++/14/algorithm:
/usr/include/bits/struct_mutex.h:
-/usr/include/c++/13/bits/stl_vector.h:
+/usr/include/c++/14/bits/locale_classes.h:
+
+/usr/include/c++/14/bits/new_allocator.h:
+
+/usr/include/c++/14/cstddef:
/usr/include/bits/cpu-set.h:
-/usr/include/bits/typesizes.h:
+/usr/include/c++/14/x86_64-redhat-linux/bits/ctype_inline.h:
+
+/usr/include/c++/14/bits/nested_exception.h:
/usr/include/bits/uintn-identity.h:
-/usr/include/c++/13/iosfwd:
+/usr/include/c++/14/cctype:
-/usr/include/c++/13/bits/predefined_ops.h:
+/usr/include/c++/14/bits/exception.h:
/usr/include/bits/long-double.h:
-/usr/include/bits/stdlib-float.h:
-
-/usr/include/bits/time64.h:
+/usr/include/c++/14/bits/shared_ptr.h:
/usr/include/bits/stdio_lim.h:
@@ -1979,44 +2000,18 @@ third_party/uri/include/network/uri/detail/translate.hpp:
/usr/include/bits/time.h:
-third_party/uri/src/detail/uri_advance_parts.hpp:
-
-/usr/include/c++/13/string:
-
-/usr/include/bits/byteswap.h:
+/usr/include/c++/14/exception:
/usr/include/bits/struct_rwlock.h:
/usr/include/bits/types/struct_itimerspec.h:
-/usr/include/c++/13/bits/ptr_traits.h:
-
-/usr/include/c++/13/bits/stl_construct.h:
-
-/usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h:
-
-/usr/include/alloca.h:
-
-/usr/include/c++/13/x86_64-redhat-linux/bits/messages_members.h:
-
-/usr/include/c++/13/bit:
-
-/usr/include/c++/13/bits/basic_string.tcc:
-
-/usr/include/c++/13/bits/vector.tcc:
+/usr/include/bits/types/__sigset_t.h:
/usr/include/bits/locale.h:
-/usr/include/c++/13/algorithm:
-
-/usr/include/c++/13/bits/stl_raw_storage_iter.h:
-
-/usr/include/c++/13/bits/stream_iterator.h:
-
third_party/uri/src/detail/uri_parse_authority.cpp:
-/usr/include/c++/13/functional:
-
/usr/include/bits/setjmp.h:
/usr/include/bits/types/struct___jmp_buf_tag.h:
@@ -2025,194 +2020,218 @@ third_party/uri/src/detail/uri_parse_authority.cpp:
/usr/include/bits/types/__fpos_t.h:
-/usr/include/c++/13/bits/stl_iterator_base_types.h:
-
-/usr/include/asm-generic/errno-base.h:
+/usr/include/c++/14/bits/predefined_ops.h:
-/usr/include/c++/13/bits/hash_bytes.h:
+/usr/include/asm-generic/errno.h:
-/usr/include/assert.h:
+/usr/include/c++/14/bits/stl_function.h:
-/usr/include/bits/types/__sigset_t.h:
+/usr/include/c++/14/cassert:
-/usr/include/c++/13/backward/auto_ptr.h:
+/usr/include/assert.h:
third_party/uri/src/detail/uri_normalize.hpp:
-third_party/uri/src/detail/uri_advance_parts.cpp:
+/usr/include/c++/14/ext/concurrence.h:
-/usr/include/c++/13/bits/ios_base.h:
+third_party/uri/src/detail/uri_advance_parts.cpp:
/usr/include/bits/floatn.h:
-/usr/include/bits/pthreadtypes.h:
-
/usr/include/bits/libc-header-start.h:
-/usr/include/wctype.h:
+/usr/include/features-time64.h:
+
+/usr/include/c++/14/bits/stl_relops.h:
-/usr/include/c++/13/exception:
+/usr/include/wctype.h:
/usr/include/bits/errno.h:
/usr/include/bits/timex.h:
-/usr/include/c++/13/bits/shared_ptr_atomic.h:
+/usr/include/c++/14/bits/locale_facets_nonio.h:
+
+/usr/include/c++/14/x86_64-redhat-linux/bits/c++locale.h:
/usr/include/bits/pthread_stack_min-dynamic.h:
-/usr/include/endian.h:
+/usr/include/bits/types/struct_timeval.h:
-/usr/include/c++/13/bits/streambuf.tcc:
+/usr/include/c++/14/bits/stl_raw_storage_iter.h:
third_party/uri/include/network/uri/detail/decode.hpp:
+/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h:
+
/usr/include/gnu/stubs.h:
+/usr/include/c++/14/x86_64-redhat-linux/bits/atomic_word.h:
+
/usr/include/bits/pthreadtypes-arch.h:
-/usr/include/libintl.h:
+/usr/include/c++/14/bits/invoke.h:
-/usr/include/c++/13/bits/basic_string.h:
+/usr/include/bits/types/__fpos64_t.h:
-/usr/include/bits/stdio.h:
+/usr/include/bits/select.h:
-/usr/include/bits/types/timer_t.h:
+/usr/include/c++/14/cstring:
-/usr/include/c++/13/cwctype:
+/usr/include/c++/14/stdexcept:
-/usr/include/bits/types/wint_t.h:
+/usr/include/c++/14/cwchar:
-/usr/include/bits/timesize.h:
+/usr/include/c++/14/bits/charconv.h:
-/usr/include/c++/13/bits/shared_ptr.h:
+/usr/include/alloca.h:
-/usr/include/bits/waitstatus.h:
+/usr/include/bits/types/locale_t.h:
-/usr/include/c++/13/bits/streambuf_iterator.h:
+/usr/include/c++/14/bits/ptr_traits.h:
-/usr/include/bits/wordsize.h:
+/usr/include/bits/stdint-least.h:
-third_party/uri/include/network/string_view.hpp:
+/usr/include/bits/stdlib-bsearch.h:
-/usr/include/bits/types/sigset_t.h:
+/usr/include/bits/types/mbstate_t.h:
-/usr/include/c++/13/bits/move.h:
+/usr/include/c++/14/bits/shared_ptr_atomic.h:
-third_party/uri/src/detail/uri_parse.hpp:
+/usr/include/c++/14/bits/functional_hash.h:
-/usr/include/c++/13/bits/utility.h:
+/usr/include/bits/types/timer_t.h:
-/usr/include/c++/13/bits/stl_function.h:
+/usr/include/bits/thread-shared-types.h:
-/usr/include/bits/select.h:
+/usr/include/c++/14/bits/stl_pair.h:
-/usr/include/c++/13/backward/binders.h:
+/usr/include/bits/types/wint_t.h:
-/usr/include/c++/13/bits/algorithmfwd.h:
+/usr/include/c++/14/bits/range_access.h:
-/usr/include/bits/types/struct_timeval.h:
+/usr/include/bits/timesize.h:
-/usr/include/c++/13/bits/concept_check.h:
+/usr/include/bits/waitstatus.h:
-/usr/include/c++/13/bits/alloc_traits.h:
+/usr/include/c++/14/vector:
-/usr/include/c++/13/x86_64-redhat-linux/bits/gthr.h:
+/usr/include/c++/14/bits/uniform_int_dist.h:
-/usr/include/bits/types/mbstate_t.h:
+/usr/include/c++/14/bits/shared_ptr_base.h:
-/usr/include/c++/13/bits/atomic_lockfree_defines.h:
+/usr/include/bits/wordsize.h:
-/usr/include/c++/13/bits/cpp_type_traits.h:
+/usr/include/c++/14/bits/allocator.h:
-/usr/include/c++/13/bits/cxxabi_forced.h:
+/usr/include/bits/stdlib-float.h:
-/usr/include/c++/13/typeinfo:
+/usr/include/bits/time64.h:
-/usr/include/c++/13/bits/cxxabi_init_exception.h:
+/usr/include/c++/14/backward/binders.h:
-/usr/include/c++/13/streambuf:
+/usr/include/c++/14/bit:
-/usr/include/c++/13/bits/exception.h:
+/usr/include/bits/typesizes.h:
-/usr/include/c++/13/cstdio:
+/usr/include/c++/14/bits/algorithmfwd.h:
-/usr/include/c++/13/bits/charconv.h:
+/usr/include/c++/14/bits/ostream_insert.h:
-/usr/include/c++/13/bits/stl_pair.h:
+/usr/include/c++/14/bits/alloc_traits.h:
-third_party/uri/include/network/uri/uri_builder.hpp:
+third_party/uri/src/detail/uri_advance_parts.hpp:
-/usr/include/c++/13/bits/exception_defines.h:
+/usr/include/bits/byteswap.h:
-/usr/include/c++/13/bits/localefwd.h:
+/usr/include/c++/14/bits/allocated_ptr.h:
-/usr/include/c++/13/bits/exception_ptr.h:
+/usr/include/c++/14/bits/stl_iterator.h:
-/usr/include/c++/13/bits/stl_iterator.h:
+/usr/include/asm-generic/errno-base.h:
-/usr/include/bits/types/__fpos64_t.h:
+/usr/include/c++/14/bits/stl_algobase.h:
-/usr/include/c++/13/bits/functexcept.h:
+/usr/include/c++/14/x86_64-redhat-linux/bits/cpu_defines.h:
-/usr/include/errno.h:
+/usr/include/c++/14/bits/atomic_lockfree_defines.h:
-/usr/include/c++/13/bits/functional_hash.h:
+/usr/include/bits/pthreadtypes.h:
-/usr/include/c++/13/bits/invoke.h:
+/usr/include/c++/14/bits/basic_string.h:
-/usr/include/c++/13/bits/locale_classes.h:
+/usr/include/c++/14/clocale:
-/usr/include/time.h:
+/usr/include/c++/14/bits/basic_string.tcc:
-/usr/include/c++/13/bits/memoryfwd.h:
+/usr/include/pthread.h:
-/usr/include/c++/13/bits/nested_exception.h:
+/usr/include/c++/14/bits/functexcept.h:
-/usr/include/c++/13/bits/atomic_base.h:
+/usr/include/c++/14/bits/concept_check.h:
-/usr/include/c++/13/bits/new_allocator.h:
+/usr/include/c++/14/bits/cpp_type_traits.h:
-/usr/include/c++/13/bits/ostream_insert.h:
+/usr/include/c++/14/bits/exception_defines.h:
-/usr/include/c++/13/system_error:
+/usr/include/c++/14/bits/char_traits.h:
-/usr/include/c++/13/bits/range_access.h:
+/usr/include/c++/14/bits/hash_bytes.h:
-/usr/include/bits/stdint-uintn.h:
+/usr/include/bits/types/__locale_t.h:
-/usr/include/c++/13/bits/refwrap.h:
+/usr/include/c++/14/bits/ios_base.h:
-/usr/include/c++/13/bits/locale_facets.tcc:
+/usr/include/c++/14/bits/locale_classes.tcc:
-/usr/include/bits/stdlib-bsearch.h:
+third_party/uri/include/network/string_view.hpp:
-/usr/include/c++/13/bits/requires_hosted.h:
+/usr/include/c++/14/backward/auto_ptr.h:
-/usr/include/bits/floatn-common.h:
+/usr/include/bits/types/sigset_t.h:
+
+/usr/include/c++/14/bits/move.h:
-/usr/include/c++/13/bits/shared_ptr_base.h:
+third_party/uri/src/detail/uri_resolve.cpp:
-/usr/include/c++/13/x86_64-redhat-linux/bits/error_constants.h:
+/usr/include/c++/14/bits/memoryfwd.h:
-/usr/include/c++/13/bits/uses_allocator.h:
+/usr/include/c++/14/bits/postypes.h:
-/usr/include/c++/13/bits/postypes.h:
+third_party/uri/src/detail/algorithm_split.hpp:
-/usr/include/c++/13/bits/std_abs.h:
+/usr/include/c++/14/bits/refwrap.h:
-/usr/include/c++/13/cstddef:
+/usr/include/strings.h:
-/usr/include/c++/13/bits/stl_algo.h:
+/usr/include/c++/14/bits/requires_hosted.h:
-/usr/include/c++/13/bits/stl_algobase.h:
+third_party/uri/src/detail/uri_normalize.cpp:
-/usr/include/asm-generic/errno.h:
+/usr/include/c++/14/bits/std_abs.h:
-/usr/include/c++/13/bits/stl_iterator_base_funcs.h:
+/usr/include/c++/14/bits/stl_algo.h:
-/usr/include/c++/13/bits/stl_relops.h:
+/usr/include/c++/14/functional:
-/usr/include/bits/endian.h:
+/usr/include/features.h:
+
+/usr/include/c++/14/iterator:
+
+/usr/include/bits/endianness.h:
+
+/usr/include/c++/14/bits/stl_heap.h:
+
+/usr/include/c++/14/ext/numeric_traits.h:
+
+/usr/include/bits/stdint-uintn.h:
+
+/usr/include/c++/14/bits/stl_iterator_base_funcs.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/include/c++/14/bits/stl_iterator_base_types.h:
+
+/usr/include/c++/14/bits/stl_tempbuf.h:
-/usr/include/c++/13/bits/stl_tempbuf.h:
+/usr/include/c++/14/bits/stream_iterator.h:
diff --git a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/flags.make b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
index bc29220fff..abe8aebb87 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
+++ b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
@@ -1,10 +1,10 @@
# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.27
+# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# compile CXX with /bin/c++
CXX_DEFINES =
-CXX_INCLUDES = -I/usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src -I/usr/local/src/asymptote-2.89/LspCpp/third_party/uri/include
+CXX_INCLUDES = -I/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src -I/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include
CXX_FLAGS = -fPIE -D_FILE_OFFSET_BIS=64 -DUSEGC -DLSPCPP_USEGC -I../gc-8.2.4/include -std=c++11 -Wall -Werror -Wno-parentheses -O2 -g -DNDEBUG
diff --git a/graphics/asymptote/LspCpp/third_party/uri/src/Makefile b/graphics/asymptote/LspCpp/third_party/uri/src/Makefile
index 8907cafad6..7948b3894d 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/src/Makefile
+++ b/graphics/asymptote/LspCpp/third_party/uri/src/Makefile
@@ -1,5 +1,5 @@
# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.27
+# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Default target executed when no arguments are given to make.
default_target: all
@@ -60,10 +60,10 @@ RM = /usr/bin/cmake -E rm -f
EQUALS = =
# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.89/LspCpp
+CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.90/LspCpp
# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.89/LspCpp
+CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.90/LspCpp
#=============================================================================
# Targets provided globally by CMake.
@@ -135,14 +135,14 @@ install/strip/fast: preinstall/fast
# The main all target
all: cmake_check_build_system
- cd /usr/local/src/asymptote-2.89/LspCpp && $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.89/LspCpp/CMakeFiles /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src//CMakeFiles/progress.marks
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/all
- $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.89/LspCpp/CMakeFiles 0
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.90/LspCpp/CMakeFiles /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src//CMakeFiles/progress.marks
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.90/LspCpp/CMakeFiles 0
.PHONY : all
# The main clean target
clean:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/clean
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/clean
.PHONY : clean
# The main clean target
@@ -151,22 +151,22 @@ clean/fast: clean
# Prepare targets for installation.
preinstall: all
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/preinstall
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/preinstall
.PHONY : preinstall
# Prepare targets for installation.
preinstall/fast:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/preinstall
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/preinstall
.PHONY : preinstall/fast
# clear depends
depend:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
.PHONY : depend
# Convenience name for target.
third_party/uri/src/CMakeFiles/network-uri.dir/rule:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/CMakeFiles/network-uri.dir/rule
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/CMakeFiles/network-uri.dir/rule
.PHONY : third_party/uri/src/CMakeFiles/network-uri.dir/rule
# Convenience name for target.
@@ -175,7 +175,7 @@ network-uri: third_party/uri/src/CMakeFiles/network-uri.dir/rule
# fast build rule for target.
network-uri/fast:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/build
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/build
.PHONY : network-uri/fast
detail/uri_advance_parts.o: detail/uri_advance_parts.cpp.o
@@ -183,7 +183,7 @@ detail/uri_advance_parts.o: detail/uri_advance_parts.cpp.o
# target to build an object file
detail/uri_advance_parts.cpp.o:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o
.PHONY : detail/uri_advance_parts.cpp.o
detail/uri_advance_parts.i: detail/uri_advance_parts.cpp.i
@@ -191,7 +191,7 @@ detail/uri_advance_parts.i: detail/uri_advance_parts.cpp.i
# target to preprocess a source file
detail/uri_advance_parts.cpp.i:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.i
.PHONY : detail/uri_advance_parts.cpp.i
detail/uri_advance_parts.s: detail/uri_advance_parts.cpp.s
@@ -199,7 +199,7 @@ detail/uri_advance_parts.s: detail/uri_advance_parts.cpp.s
# target to generate assembly for a file
detail/uri_advance_parts.cpp.s:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.s
.PHONY : detail/uri_advance_parts.cpp.s
detail/uri_normalize.o: detail/uri_normalize.cpp.o
@@ -207,7 +207,7 @@ detail/uri_normalize.o: detail/uri_normalize.cpp.o
# target to build an object file
detail/uri_normalize.cpp.o:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o
.PHONY : detail/uri_normalize.cpp.o
detail/uri_normalize.i: detail/uri_normalize.cpp.i
@@ -215,7 +215,7 @@ detail/uri_normalize.i: detail/uri_normalize.cpp.i
# target to preprocess a source file
detail/uri_normalize.cpp.i:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.i
.PHONY : detail/uri_normalize.cpp.i
detail/uri_normalize.s: detail/uri_normalize.cpp.s
@@ -223,7 +223,7 @@ detail/uri_normalize.s: detail/uri_normalize.cpp.s
# target to generate assembly for a file
detail/uri_normalize.cpp.s:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.s
.PHONY : detail/uri_normalize.cpp.s
detail/uri_parse.o: detail/uri_parse.cpp.o
@@ -231,7 +231,7 @@ detail/uri_parse.o: detail/uri_parse.cpp.o
# target to build an object file
detail/uri_parse.cpp.o:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o
.PHONY : detail/uri_parse.cpp.o
detail/uri_parse.i: detail/uri_parse.cpp.i
@@ -239,7 +239,7 @@ detail/uri_parse.i: detail/uri_parse.cpp.i
# target to preprocess a source file
detail/uri_parse.cpp.i:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.i
.PHONY : detail/uri_parse.cpp.i
detail/uri_parse.s: detail/uri_parse.cpp.s
@@ -247,7 +247,7 @@ detail/uri_parse.s: detail/uri_parse.cpp.s
# target to generate assembly for a file
detail/uri_parse.cpp.s:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.s
.PHONY : detail/uri_parse.cpp.s
detail/uri_parse_authority.o: detail/uri_parse_authority.cpp.o
@@ -255,7 +255,7 @@ detail/uri_parse_authority.o: detail/uri_parse_authority.cpp.o
# target to build an object file
detail/uri_parse_authority.cpp.o:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o
.PHONY : detail/uri_parse_authority.cpp.o
detail/uri_parse_authority.i: detail/uri_parse_authority.cpp.i
@@ -263,7 +263,7 @@ detail/uri_parse_authority.i: detail/uri_parse_authority.cpp.i
# target to preprocess a source file
detail/uri_parse_authority.cpp.i:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.i
.PHONY : detail/uri_parse_authority.cpp.i
detail/uri_parse_authority.s: detail/uri_parse_authority.cpp.s
@@ -271,7 +271,7 @@ detail/uri_parse_authority.s: detail/uri_parse_authority.cpp.s
# target to generate assembly for a file
detail/uri_parse_authority.cpp.s:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.s
.PHONY : detail/uri_parse_authority.cpp.s
detail/uri_resolve.o: detail/uri_resolve.cpp.o
@@ -279,7 +279,7 @@ detail/uri_resolve.o: detail/uri_resolve.cpp.o
# target to build an object file
detail/uri_resolve.cpp.o:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o
.PHONY : detail/uri_resolve.cpp.o
detail/uri_resolve.i: detail/uri_resolve.cpp.i
@@ -287,7 +287,7 @@ detail/uri_resolve.i: detail/uri_resolve.cpp.i
# target to preprocess a source file
detail/uri_resolve.cpp.i:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.i
.PHONY : detail/uri_resolve.cpp.i
detail/uri_resolve.s: detail/uri_resolve.cpp.s
@@ -295,7 +295,7 @@ detail/uri_resolve.s: detail/uri_resolve.cpp.s
# target to generate assembly for a file
detail/uri_resolve.cpp.s:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.s
.PHONY : detail/uri_resolve.cpp.s
uri.o: uri.cpp.o
@@ -303,7 +303,7 @@ uri.o: uri.cpp.o
# target to build an object file
uri.cpp.o:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o
.PHONY : uri.cpp.o
uri.i: uri.cpp.i
@@ -311,7 +311,7 @@ uri.i: uri.cpp.i
# target to preprocess a source file
uri.cpp.i:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.i
.PHONY : uri.cpp.i
uri.s: uri.cpp.s
@@ -319,7 +319,7 @@ uri.s: uri.cpp.s
# target to generate assembly for a file
uri.cpp.s:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.s
.PHONY : uri.cpp.s
uri_builder.o: uri_builder.cpp.o
@@ -327,7 +327,7 @@ uri_builder.o: uri_builder.cpp.o
# target to build an object file
uri_builder.cpp.o:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o
.PHONY : uri_builder.cpp.o
uri_builder.i: uri_builder.cpp.i
@@ -335,7 +335,7 @@ uri_builder.i: uri_builder.cpp.i
# target to preprocess a source file
uri_builder.cpp.i:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.i
.PHONY : uri_builder.cpp.i
uri_builder.s: uri_builder.cpp.s
@@ -343,7 +343,7 @@ uri_builder.s: uri_builder.cpp.s
# target to generate assembly for a file
uri_builder.cpp.s:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.s
.PHONY : uri_builder.cpp.s
uri_errors.o: uri_errors.cpp.o
@@ -351,7 +351,7 @@ uri_errors.o: uri_errors.cpp.o
# target to build an object file
uri_errors.cpp.o:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o
.PHONY : uri_errors.cpp.o
uri_errors.i: uri_errors.cpp.i
@@ -359,7 +359,7 @@ uri_errors.i: uri_errors.cpp.i
# target to preprocess a source file
uri_errors.cpp.i:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.i
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.i
.PHONY : uri_errors.cpp.i
uri_errors.s: uri_errors.cpp.s
@@ -367,7 +367,7 @@ uri_errors.s: uri_errors.cpp.s
# target to generate assembly for a file
uri_errors.cpp.s:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.s
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.s
.PHONY : uri_errors.cpp.s
# Help Target
@@ -418,6 +418,6 @@ help:
# No rule that depends on this can have commands that come from listfiles
# because they might be regenerated.
cmake_check_build_system:
- cd /usr/local/src/asymptote-2.89/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+ cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
.PHONY : cmake_check_build_system
diff --git a/graphics/asymptote/LspCpp/third_party/uri/src/cmake_install.cmake b/graphics/asymptote/LspCpp/third_party/uri/src/cmake_install.cmake
index 2295d35b1e..fbf9b52637 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/src/cmake_install.cmake
+++ b/graphics/asymptote/LspCpp/third_party/uri/src/cmake_install.cmake
@@ -1,4 +1,4 @@
-# Install script for directory: /usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src
+# Install script for directory: /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src
# Set the install prefix
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
@@ -43,6 +43,6 @@ if(NOT DEFINED CMAKE_OBJDUMP)
endif()
if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT)
- file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/usr/local/src/asymptote-2.89/LspCpp/third_party/uri/src/libnetwork-uri.a")
+ file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/libnetwork-uri.a")
endif()
diff --git a/graphics/asymptote/Makefile.in b/graphics/asymptote/Makefile.in
index 15b2a7c6bb..1c7866fef1 100644
--- a/graphics/asymptote/Makefile.in
+++ b/graphics/asymptote/Makefile.in
@@ -274,7 +274,7 @@ install-asy: asy sty
${INSTALL} -p -m 644 base/*.asy $(addprefix base/,$(EXTRA)) \
asy-keywords.el $(asydir)
${INSTALL} -p -m 755 GUI/*.py $(GUIdir)
- ${INSTALL} -p -m 755 base/shaders/*.glsl $(shaderdir)
+ ${INSTALL} -p -m 644 base/shaders/*.glsl $(shaderdir)
${INSTALL} -p -m 644 base/webgl/asygl.js \
$(webgldir)
-${INSTALL} -p -m 644 GUI/pyUIClass/*.py $(GUIdir)/pyUIClass
diff --git a/graphics/asymptote/README b/graphics/asymptote/README
index 1e1c510415..686eb44150 100644
--- a/graphics/asymptote/README
+++ b/graphics/asymptote/README
@@ -1,5 +1,5 @@
ASYMPTOTE
- Copyright 2004-23 Andy Hammerlindl, John Bowman, and Tom Prince
+ Copyright 2004-24 Andy Hammerlindl, John Bowman, and Tom Prince
Asymptote is a powerful descriptive vector graphics language for technical
drawing, inspired by MetaPost but with an improved C++-like
diff --git a/graphics/asymptote/ReleaseNotes b/graphics/asymptote/ReleaseNotes
index 035d4c5d88..3afa9be03a 100644
--- a/graphics/asymptote/ReleaseNotes
+++ b/graphics/asymptote/ReleaseNotes
@@ -1,3 +1,19 @@
+Release Notes for Version 2.90
+A bug in the approximate transparency rendering code for GPUs
+without SSBO support was fixed.
+Support was added for templated accesses involving imported types,
+top-level structure types, and static fields.
+ImageMagick magick convert is now used instead of convert.
+The add(picture dest, picture src, pair position) function now respects
+size specifications (backwards incompatible; the previous behaviour can
+be obtained with add(dest,src.fit(identity()),position).
+The terminal is now reset upon exit. The erase command was fixed.
+Picture scalings in different dimensions are decoupled again.
+Flycheck syntax checking support for Emacs was added.
+Portability issues were addressed.
+Improvements were made to the documentation, including an introduction
+to deferred drawing.
+
Release Notes for Version 2.89
Portability fixes were made to allow static builds with or without pkg-config.
diff --git a/graphics/asymptote/absyn.h b/graphics/asymptote/absyn.h
index a25d463c64..9a0421e0d4 100644
--- a/graphics/asymptote/absyn.h
+++ b/graphics/asymptote/absyn.h
@@ -48,7 +48,7 @@ void prettyindent(ostream &out, Int indent);
void prettyname(ostream &out, string name, Int indent, position pos);
class name;
-class ty;
+class astType;
class varinit;
class exp;
class runnable;
diff --git a/graphics/asymptote/arrayop.h b/graphics/asymptote/arrayop.h
index ee1310a914..1fec0cb703 100644
--- a/graphics/asymptote/arrayop.h
+++ b/graphics/asymptote/arrayop.h
@@ -323,7 +323,7 @@ void write(vm::stack *s)
string S=pop<string>(s,emptystring);
vm::item it=pop(s);
bool defaultfile=isdefault(it);
- camp::ofile *f=defaultfile ? &camp::Stdout : vm::get<camp::ofile*>(it);
+ camp::file *f=defaultfile ? &camp::Stdout : vm::get<camp::file*>(it);
if(!f->isOpen() || !f->enabled()) return;
size_t size=checkArray(a);
@@ -354,7 +354,7 @@ void writeArray(vm::stack *s)
string S=pop<string>(s,emptystring);
vm::item it=pop(s);
bool defaultfile=isdefault(it);
- camp::ofile *f=defaultfile ? &camp::Stdout : vm::get<camp::ofile*>(it);
+ camp::file *f=defaultfile ? &camp::Stdout : vm::get<camp::file*>(it);
if(!f->isOpen() || !f->enabled()) return;
size_t asize=checkArray(a);
@@ -409,7 +409,7 @@ void writeArray2(vm::stack *s)
array *a=pop<array*>(s);
vm::item it=pop(s);
bool defaultfile=isdefault(it);
- camp::ofile *f=defaultfile ? &camp::Stdout : vm::get<camp::ofile*>(it);
+ camp::file *f=defaultfile ? &camp::Stdout : vm::get<camp::file*>(it);
if(!f->isOpen() || !f->enabled()) return;
size_t size=checkArray(a);
@@ -441,7 +441,7 @@ void writeArray3(vm::stack *s)
array *a=pop<array*>(s);
vm::item it=pop(s);
bool defaultfile=isdefault(it);
- camp::ofile *f=defaultfile ? &camp::Stdout : vm::get<camp::ofile*>(it);
+ camp::file *f=defaultfile ? &camp::Stdout : vm::get<camp::file*>(it);
if(!f->isOpen() || !f->enabled()) return;
size_t size=checkArray(a);
diff --git a/graphics/asymptote/asy-keywords.el b/graphics/asymptote/asy-keywords.el
index ea0098cd05..071b63017f 100644
--- a/graphics/asymptote/asy-keywords.el
+++ b/graphics/asymptote/asy-keywords.el
@@ -2,16 +2,16 @@
;; This file is automatically generated by asy-list.pl.
;; Changes will be overwritten.
;;
-(defvar asy-keywords-version "2.89")
+(defvar asy-keywords-version "2.90")
(defvar asy-keyword-name '(
and controls tension atleast curl if else while for do return break continue struct typedef new access import unravel from include quote static public private restricted this explicit true false null cycle newframe operator ))
(defvar asy-type-name '(
-Braid FitResult Label Legend Solution TreeNode abscissa arc arrowhead binarytree binarytreeNode block bool bool3 bounds bqe circle conic coord coordsys cputime ellipse evaluatedpoint file filltype frame grid3 guide horner hsv hyperbola int inversion key light line linefit marginT marker mass node object pair parabola patch path path3 pen picture point position positionedvector projection rational real realschur revolution scaleT schur scientific segment side simplex slice solution splitface string surface tensionSpecifier ticklocate ticksgridT tickvalues transform transformation tree triangle trilinear triple vector vertex void ))
+Braid FitResult Label Legend Solution TreeNode abscissa arc arrowhead binarytree binarytreeNode block bool bool3 bounds bqe circle conic coord coordsys cputime ellipse evaluatedpoint file filltype frame grid3 guide horner hsv hyperbola int inversion key light line linefit marginT marker mass node object pair parabola patch path path3 pen picture point position positionedvector projection rational real realschur revolution scaleT schur scientific segment side slice solution splitface string surface tensionSpecifier ticklocate ticksgridT tickvalues transform transformation tree triangle trilinear triple vector vertex void ))
(defvar asy-function-name '(
-AND Align Arc ArcArrow ArcArrows Arrow Arrows AtA Automatic AvantGarde B03 B13 B23 B33 BBox BWRainbow BWRainbow2 Bar Bars BeginArcArrow BeginArrow BeginBar BeginDotMargin BeginMargin BeginPenMargin Blank Bookman Bottom BottomTop Bounds Break Broken BrokenLog CLZ CTZ Ceil Circle CircleBarIntervalMarker Cos Courier CrossIntervalMarker DOSendl DOSnewl DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Finite Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear Log LogFormat Margin Margins Mark MidArcArrow MidArrow NOT NewCenturySchoolBook NoBox NoMargin NoModifier NoTicks NoTicks3 NoZero NoZeroFormat None OR OmitFormat OmitTick OmitTickInterval OmitTickIntervals OutTicks Ox Oy Palatino PaletteTicks Pen PenMargin PenMargins Pentype Portrait RGB RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape Shift Sin Slant Spline StickIntervalMarker Straight Symbol Tan TeXify Ticks Ticks3 TildeIntervalMarker TimesRoman Top TrueMargin UnFill UpsideDown Wheel X XEquals XOR XY XYEquals XYZero XYgrid XZEquals XZZero XZero XZgrid Y YEquals YXgrid YZ YZEquals YZZero YZero YZgrid Yn Z ZX ZXgrid ZYgrid ZapfChancery ZapfDingbats _begingroup3 _cputime _draw _eval _findroot _image _labelpath _projection _schur _shipout _strokepath _texpath aCos aSin aTan abort abs abs2 accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addpenarc addpenline addseg adjust alias align all altitude angabscissa angle angledegrees angpoint animate annotate anticomplementary antipedal apply approximate arc arcarrowsize arccircle arcdir arcfromcenter arcfromfocus arclength arcnodesnumber arcpoint arcsubtended arcsubtendedcenter arctime arctopath array arrow arrow2 arrowbase arrowbasepoints arrowsize ascii asec asin asinh ask assert asy asycode asydir asyfigure asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit attach attract atupdate autoformat autoscale autoscale3 axes axes3 axialshade axis axiscoverage azimuth babel background bangles bar barmarksize barsize basealign baseline bbox beep begin beginclip begingroup beginpoint between bevel bezier bezierP bezierPP bezierPPP bezulate bibliography bibliographystyle binarytree binarytreeNode binomial bins bisector bisectorpoint bispline bispline0 bitreverse blend blockconnector box bqe brace breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte byteinv calculateScaling canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 cbrt cd ceil center centerToFocus centroid cevian change2 changecoordsys checkSegment check_fpt_zero checkconditionlength checker checkincreasing checklengths checkposition checkpt checkptincube checktriangle choose circle circlebarframe circlemarkradius circlenodesnumber circumcenter circumcircle clamped clear clip clipdraw close cmyk code colatitude collect collinear color colorless colors colorspace comma compassmark complement complementary concat concurrent cone conic conicnodesnumber conictype conj connect containmentTree contains contour contour3 controlSpecifier convert coordinates coordsys copy copyPairOrTriple cos cosh cot countIntersections cputime crop cropcode cross crossframe crosshatch crossmarksize csc cubicroots curabscissa curlSpecifier curpoint currentarrow currentexitfunction currentmomarrow currentpolarconicroutine curve cut cutafter cutbefore cyclic cylinder deactivatequote debugger deconstruct defaultdir defaultformat defaultpen defined degenerate degrees delete deletepreamble determinant diagonal diamond diffdiv dir dirSpecifier dirtime display distance divisors do_overpaint dot dotframe dotsize downcase draw drawAll drawCylinder drawDisk drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPhoton drawScalar drawSphere drawTube drawVertex drawVertexBox drawVertexBoxO drawVertexBoxX drawVertexO drawVertexOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawbeziertriangle drawline drawpixel drawstrokepath drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 embedplayer empty enclose end endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill filldraw filloutside fillrule filltype find findall findroot finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma gcd generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic graphicscale graphwithderiv gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image implicitsurface importv3d incenter incentral incircle increasing incrementposition indexedfigure initdefaults initialized input inradius insert inside insphere integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isDuplicate isnan isogonal isogonalconjugate isometry isotomic isotomicconjugate isparabola italic item jobname key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout lcm ldexp leastsquares legend legenditem length lexorder lift light limits line linear linecap lineinversion linejoin linemargin lineskip linetype linewidth link list lm_enorm lm_evaluate_default lm_lmdif lm_lmpar lm_minimize lm_print_default lm_print_quiet lm_qrfac lm_qrsolv locale locate locatefile location log log10 log1p logaxiscoverage longitude lookup make3dgrid makeNode makecircle makedraw makepen maketriangle map mapArray mapArrayString margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markthin markuniform mass masscenter massformat math max max3 maxAfterTransform maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minAfterTransform minbezier minbound minipage minratio mintimes miterlimit mktemp momArrowPath momarrowsize monotonic multifigure nGrad nativeformat natural newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa node none norm normalout normalvideo notaknot nowarn numberpage nurb object offset onpath opacity opposite orient orientation origin orthic orthocenter orthocentercenter outdirectory outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum patchwithnormals path path3 pathbetween pathinface pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 phi4 photon piecewisestraight point polar polarconicroutine polargraph polygon popcount postcontrol postscript pow10 ppoint prc prc0 prconly precision precontrol prepend primitive printBytecode print_random_addresses progress project projection projecttospan projecttospan_findcoeffs purge pwhermite quadpatches quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rationalidentity rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename render replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle samecoordsys sameside sample save savedefaults saveline scale scale3 scaleO scaleT scaleless schur scientific search searchtree sec secondaryX secondaryY seconds section sector seek seekeof segment segmentlimits sequence setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show simeq simplex simplexInit simplexPhase1 simplexPhase2 simplexTableau simplexWrite simpson sin sinh size size3 skewness skip slant sleep slice slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile stripsuffix strokepath subdivide subitem subpath substr sum surface symmedial symmedian system tab tableau tan tangent tangential tangents tanh tell tensionSpecifier tensorshade tex texcolor texify texpath texpreamble texreset texshipout texsize texstring textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox transform transformation transpose trembleFuzz triangle triangleAbc triangleabc triangletoquads trianglewithnormals triangulate tricoef tridiagonal trilinear trim truepoint tube uncycle unfill uniform unique unit unitrand unitsize unityroot unstraighten upcase updatefunction uperiodic upscale uptodate usepackage usersetting usetypescript usleep value variance variancebiased vbox vector vectorfield verbatim view vline vperiodic vprojection warn warning windingnumber write xasyKEY xaxis xaxis3 xaxis3At xaxisAt xequals xlimits xmap xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zlimits zpart ztick ztick3 ztrans ))
+AND Align Arc ArcArrow ArcArrows Arrow Arrows AtA Automatic AvantGarde B03 B13 B23 B33 BBox BWRainbow BWRainbow2 Bar Bars BeginArcArrow BeginArrow BeginBar BeginDotMargin BeginMargin BeginPenMargin Blank Bookman Bottom BottomTop Bounds Break Broken BrokenLog CLZ CTZ Ceil Circle CircleBarIntervalMarker Cos Courier CrossIntervalMarker DOSendl DOSnewl DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Finite Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear Log LogFormat Margin Margins Mark MidArcArrow MidArrow NOT NewCenturySchoolBook NoBox NoMargin NoModifier NoTicks NoTicks3 NoZero NoZeroFormat None OR OmitFormat OmitTick OmitTickInterval OmitTickIntervals OutTicks Ox Oy Palatino PaletteTicks Pen PenMargin PenMargins Pentype Portrait RGB RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape Shift Sin Slant Spline StickIntervalMarker Straight Symbol Tan TeXify Ticks Ticks3 TildeIntervalMarker TimesRoman Top TrueMargin UnFill UpsideDown Wheel X XEquals XOR XY XYEquals XYZero XYgrid XZEquals XZZero XZero XZgrid Y YEquals YXgrid YZ YZEquals YZZero YZero YZgrid Yn Z ZX ZXgrid ZYgrid ZapfChancery ZapfDingbats _begingroup3 _cputime _draw _eval _findroot _image _labelpath _projection _schur _shipout _strokepath _texpath aCos aSin aTan abort abs abs2 accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addpenarc addpenline addseg adjust alias align all altitude angabscissa angle angledegrees angpoint animate annotate anticomplementary antipedal apply approximate arc arcarrowsize arccircle arcdir arcfromcenter arcfromfocus arclength arcnodesnumber arcpoint arcsubtended arcsubtendedcenter arctime arctopath array arrow arrow2 arrowbase arrowbasepoints arrowsize ascii asec asin asinh ask assert asy asycode asydir asyfigure asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit attach attract atupdate autoformat autoscale autoscale3 axes axes3 axialshade axis axiscoverage azimuth babel background bangles bar barmarksize barsize basealign baseline bbox beep begin beginclip begingroup beginpoint between bevel bezier bezierP bezierPP bezierPPP bezulate bibliography bibliographystyle binarytree binarytreeNode binomial bins bisector bisectorpoint bispline bispline0 bitreverse blend blockconnector box bqe brace breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte byteinv calculateScaling canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 cbrt cd ceil center centerToFocus centroid cevian change2 changecoordsys checkSegment check_fpt_zero checkconditionlength checker checkincreasing checklengths checkposition checkpt checkptincube checktriangle choose circle circlebarframe circlemarkradius circlenodesnumber circumcenter circumcircle clamped clear clip clipdraw close cmyk code colatitude collect collinear color colorless colors colorspace comma compassmark complement complementary concat concurrent cone conic conicnodesnumber conictype conj connect containmentTree contains contour contour3 controlSpecifier convert coordinates coordsys copy copyPairOrTriple cos cosh cot countIntersections cputime crop cropcode cross crossframe crosshatch crossmarksize csc cubicroots curabscissa curlSpecifier curpoint currentarrow currentexitfunction currentmomarrow currentpolarconicroutine curve cut cutafter cutbefore cyclic cylinder deactivatequote debugger deconstruct defaultdir defaultformat defaultpen defined degenerate degrees delete deletepreamble determinant diagonal diamond diffdiv dir dirSpecifier dirtime display distance divisors do_overpaint dot dotframe dotsize downcase draw drawAll drawCylinder drawDisk drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPhoton drawScalar drawSphere drawTube drawVertex drawVertexBox drawVertexBoxO drawVertexBoxX drawVertexO drawVertexOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawbeziertriangle drawline drawpixel drawstrokepath drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 embedplayer empty enclose end endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill fillbox filldraw filloutside fillrule filltype find findall findroot finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma gcd generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic graphicscale graphwithderiv gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image implicitsurface importv3d incenter incentral incircle increasing incrementposition indexedfigure initdefaults initialized input inradius insert inside insphere integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isDuplicate isnan isogonal isogonalconjugate isometry isotomic isotomicconjugate isparabola italic item jobname key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout lcm ldexp leastsquares legend legenditem length lexorder lift light limits line linear linecap lineinversion linejoin linemargin lineskip linetype linewidth link list lm_enorm lm_evaluate_default lm_lmdif lm_lmpar lm_minimize lm_print_default lm_print_quiet lm_qrfac lm_qrsolv locale locate locatefile location log log10 log1p logaxiscoverage longitude lookup make3dgrid makeNode makecircle makedraw makepen maketriangle map mapArray mapArrayString margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markthin markuniform mass masscenter massformat math max max3 maxAfterTransform maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minAfterTransform minbezier minbound minipage minratio mintimes miterlimit mktemp momArrowPath momarrowsize monotonic multifigure nGrad nativeformat natural newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa node none norm normalout normalvideo notaknot nowarn numberpage nurb object offset onpath opacity opposite orient orientation origin orthic orthocenter orthocentercenter outdirectory outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum patchwithnormals path path3 pathbetween pathinface pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 phi4 photon piecewisestraight point polar polarconicroutine polargraph polygon popcount postcontrol postscript pow10 ppoint prc prc0 prconly precision precontrol prepend primitive printBytecode print_random_addresses progress project projection projecttospan projecttospan_findcoeffs purge pwhermite quadpatches quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rationalidentity rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename render replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle samecoordsys sameside sample save savedefaults saveline scale scale3 scaleO scaleT scaleless schur scientific search searchtree sec secondaryX secondaryY seconds section sector seek seekeof segment segmentlimits sequence setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show simeq simplexInit simplexPhase1 simplexPhase2 simplexTableau simplexWrite simpson sin sinh size size3 skewness skip slant sleep slice slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile stripsuffix strokepath subdivide subitem subpath substr sum surface symmedial symmedian system tab tableau tan tangent tangential tangents tanh tell tensionSpecifier tensorshade tex texcolor texify texpath texpreamble texreset texshipout texsize texstring textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox transform transformation transpose trembleFuzz triangle triangleAbc triangleabc triangletoquads trianglewithnormals triangulate tricoef tridiagonal trilinear trim truepoint tube uncycle unfill uniform unique unit unitrand unitsize unityroot unstraighten upcase updatefunction uperiodic upscale uptodate usepackage usersetting usetypescript usleep value variance variancebiased vbox vector vectorfield verbatim view vline vperiodic vprojection warn warning windingnumber write xasyKEY xaxis xaxis3 xaxis3At xaxisAt xequals xlimits xmap xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zlimits zpart ztick ztick3 ztrans ))
(defvar asy-variable-name '(
-AliceBlue Align Allow AntiqueWhite Apricot Aqua Aquamarine Aspect Azure BeginPoint Beige Bisque Bittersweet Black BlanchedAlmond Blue BlueGreen BlueViolet Both Break BrickRed Brown BurlyWood BurntOrange CCW CW CadetBlue CarnationPink Center Centered Cerulean Chartreuse Chocolate Coeff Coral CornflowerBlue Cornsilk Crimson Crop Cyan Dandelion DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DefaultHead DimGray DodgerBlue Dotted Down Draw E ENE EPS ESE E_Euler E_PC E_RK2 E_RK3BS Emerald EndPoint Euler Fill FillDraw FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold Goldenrod Gray Green GreenYellow Honeydew HookHead Horizontal HotPink I IgnoreAspect IndianRed Indigo Infinity Ivory JOIN_IN JOIN_OUT JungleGreen Khaki LM_DWARF LM_MACHEP LM_SQRT_DWARF LM_SQRT_GIANT LM_USERTOL Label Lavender LavenderBlush LawnGreen Left LeftJustified LeftSide LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linear Linen Log Logarithmic Magenta Mahogany Mark MarkFill MarkFillable MarkPath Maroon Max MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed Melon MidPoint MidnightBlue Min MintCream MistyRose Moccasin Move MoveQuiet Mulberry N NE NNE NNW NULL_VERTEX NW NavajoWhite Navy NavyBlue NoAlign NoCrop NoFill NoSide OldLace Olive OliveDrab OliveGreen Orange OrangeRed Orchid Ox Oy PC PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip Peach PeachPuff Periwinkle Peru PineGreen Pink Plum PowderBlue ProcessBlue Purple RELEASE RK2 RK3 RK3BS RK4 RK5 RK5DP RK5F RawSienna Red RedOrange RedViolet Rhodamine Right RightJustified RightSide RosyBrown RoyalBlue RoyalPurple RubineRed S SE SSE SSW SW SaddleBrown Salmon SandyBrown SeaGreen Seashell Sepia Sienna Silver SimpleHead SkyBlue SlateBlue SlateGray Snow SpringGreen SteelBlue Suppress SuppressQuiet Tan TeXHead Teal TealBlue Thistle Ticksize Tomato Turquoise UnFill Up VERSION Value Vertical Violet VioletRed W WNW WSW Wheat White WhiteSmoke WildStrawberry XHIGH XLOW XYAlign YAlign YHIGH YLOW Yellow YellowGreen YellowOrange ZHIGH ZLOW _outpipe aboveequationskip addpenarc addpenline align allowstepping angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor artificialColumn authorpen axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate bernstein beveljoin bigvertexpen bigvertexsize black blue bm bottom bp bracedefaultratio braceinnerangle bracemidangle braceouterangle brown bullet byfoci byvertices camerafactor chartreuse circlemarkradiusfactor circlenodesnumberfactor circleprecision circlescale cm codefile codepen codeskip colorPen coloredNodes coloredSegments conditionlength conicnodesfactor count cputimeformat crossmarksizefactor currentcoordsys currentlight currentpatterns currentpen currentpicture currentposition currentprojection curvilinearsystem cuttings cyan darkblue darkbrown darkcyan darkgray darkgreen darkgrey darkmagenta darkolive darkred dashdotted dashed datepen dateskip debuggerlines debugging deepblue deepcyan deepgray deepgreen deepgrey deepmagenta deepred deepyellow default defaultControl defaultS defaultbackpen defaultcoordsys defaultexcursion defaultfilename defaultformat defaultmassformat defaultpen defaultseparator diamond differentlengths dot dotfactor dotfilltype dotframe dotted doublelinepen doublelinespacing down duplicateFuzz ellipsenodesnumberfactor eps epsgeo epsilon evenodd expansionfactor extendcap fermionpen figureborder figuremattpen file3 firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gluonamplitude gluonpen gluonratio gray green grey hatchepsilon havepagenumber heavyblue heavycyan heavygray heavygreen heavygrey heavymagenta heavyred hline hwratio hyperbolanodesnumberfactor identity identity4 ignore implicitshipout inch inches includegraphicscommand inf infinity institutionpen intMax intMin invert invisible itempen itemskip itemstep labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor maxDenominator maxrefinements mediumblue mediumcyan mediumgray mediumgreen mediumgrey mediummagenta mediumred mediumyellow middle minDistDefault minblockheight minblockwidth mincirclediameter minipagemargin minipagewidth minvertexangle miterjoin mm momarrowfactor momarrowlength momarrowmargin momarrowoffset momarrowpen monoPen morepoints nCircle nan newbulletcolor ngraph nil nmesh nobasealign nodeMarginDefault nodesystem nomarker nopoint noprimary nullpath nullpen numarray ocgindex oldbulletcolor olive optimizeTableau orange origin overpaint page pageheight pagemargin pagenumberalign pagenumberpen pagenumberposition pagewidth paleblue palecyan palegray palegreen palegrey palemagenta palered paleyellow parabolanodesnumberfactor perpfactor phi photonamplitude photonpen photonratio pi pink plain plain_bounds plain_scaling plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon saveFunctions scalarpen sequencereal settings signedtrailingzero simplex solid spinner springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor swap textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepageposition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFrequency trembleRandom tubegranularity undefined unitcircle unitsquare up urlpen urlskip v3dheadertypes v3dtypes version vertexpen vertexsize viewportmargin viewportsize vline white wye yellow ylabelwidth zeroTransform zerotickfuzz zerowinding ))
+AliceBlue Align Allow AntiqueWhite Apricot Aqua Aquamarine Aspect Azure BeginPoint Beige Bisque Bittersweet Black BlanchedAlmond Blue BlueGreen BlueViolet Both Break BrickRed Brown BurlyWood BurntOrange CCW CW CadetBlue CarnationPink Center Centered Cerulean Chartreuse Chocolate Coeff Coral CornflowerBlue Cornsilk Crimson Crop Cyan Dandelion DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DefaultHead DimGray DodgerBlue Dotted Down Draw E ENE EPS ESE E_Euler E_PC E_RK2 E_RK3BS Emerald EndPoint Euler Fill FillDraw FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold Goldenrod Gray Green GreenYellow Honeydew HookHead Horizontal HotPink I IgnoreAspect IndianRed Indigo Infinity Ivory JOIN_IN JOIN_OUT JungleGreen Khaki LM_DWARF LM_MACHEP LM_SQRT_DWARF LM_SQRT_GIANT LM_USERTOL Label Lavender LavenderBlush LawnGreen Left LeftJustified LeftSide LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linear Linen Log Logarithmic Magenta Mahogany Mark MarkFill MarkFillable MarkPath Maroon Max MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed Melon MidPoint MidnightBlue Min MintCream MistyRose Moccasin Move MoveQuiet Mulberry N NE NNE NNW NULL_VERTEX NW NavajoWhite Navy NavyBlue NoAlign NoCrop NoFill NoSide OldLace Olive OliveDrab OliveGreen Orange OrangeRed Orchid Ox Oy PC PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip Peach PeachPuff Periwinkle Peru PineGreen Pink Plum PowderBlue ProcessBlue Purple RELEASE RK2 RK3 RK3BS RK4 RK5 RK5DP RK5F RawSienna Red RedOrange RedViolet Rhodamine Right RightJustified RightSide RosyBrown RoyalBlue RoyalPurple RubineRed S SE SSE SSW SW SaddleBrown Salmon SandyBrown SeaGreen Seashell Sepia Sienna Silver SimpleHead SkyBlue SlateBlue SlateGray Snow SpringGreen SteelBlue Suppress SuppressQuiet Tan TeXHead Teal TealBlue Thistle Ticksize Tomato Turquoise UnFill Up VERSION Value Vertical Violet VioletRed W WNW WSW Wheat White WhiteSmoke WildStrawberry XHIGH XLOW XYAlign YAlign YHIGH YLOW Yellow YellowGreen YellowOrange ZHIGH ZLOW _outpipe aboveequationskip addpenarc addpenline align allowstepping angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor artificialColumn authorpen axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate bernstein beveljoin bigvertexpen bigvertexsize black blue bm bottom bp bracedefaultratio braceinnerangle bracemidangle braceouterangle brown bullet byfoci byvertices camerafactor chartreuse circlemarkradiusfactor circlenodesnumberfactor circleprecision circlescale cm codefile codepen codeskip colorPen coloredNodes coloredSegments conditionlength conicnodesfactor count cputimeformat crossmarksizefactor currentcoordsys currentlight currentpatterns currentpen currentpicture currentposition currentprojection curvilinearsystem cuttings cyan darkblue darkbrown darkcyan darkgray darkgreen darkgrey darkmagenta darkolive darkred dashdotted dashed datepen dateskip debuggerlines debugging deepblue deepcyan deepgray deepgreen deepgrey deepmagenta deepred deepyellow default defaultControl defaultS defaultbackpen defaultcoordsys defaultexcursion defaultfilename defaultformat defaultmassformat defaultpen defaultseparator diamond differentlengths dot dotfactor dotfilltype dotframe dotted doublelinepen doublelinespacing down duplicateFuzz ellipsenodesnumberfactor eps epsgeo epsilon evenodd expansionfactor extendcap fermionpen figureborder figuremattpen file3 firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gluonamplitude gluonpen gluonratio gray green grey hatchepsilon havepagenumber heavyblue heavycyan heavygray heavygreen heavygrey heavymagenta heavyred hline hwratio hyperbolanodesnumberfactor identity identity4 ignore implicitshipout inch inches includegraphicscommand inf infinity institutionpen intMax intMin invert invisible itempen itemskip itemstep labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor maxDenominator maxrefinements mediumblue mediumcyan mediumgray mediumgreen mediumgrey mediummagenta mediumred mediumyellow middle minDistDefault minblockheight minblockwidth mincirclediameter minipagemargin minipagewidth minvertexangle miterjoin mm momarrowfactor momarrowlength momarrowmargin momarrowoffset momarrowpen monoPen morepoints nCircle nan newbulletcolor ngraph nil nmesh nobasealign nodeMarginDefault nodesystem nomarker nopoint noprimary nullpath nullpen numarray ocgindex oldbulletcolor olive optimizeTableau orange origin overpaint page pageheight pagemargin pagenumberalign pagenumberpen pagenumberposition pagewidth paleblue palecyan palegray palegreen palegrey palemagenta palered paleyellow parabolanodesnumberfactor perpfactor phi photonamplitude photonpen photonratio pi pink plain plain_bounds plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon saveFunctions scalarpen sequencereal settings signedtrailingzero solid spinner springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor swap textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepageposition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFrequency trembleRandom tubegranularity undefined unitcircle unitsquare up urlpen urlskip v3dheadertypes v3dtypes version vertexpen vertexsize viewportmargin viewportsize vline white wye yellow ylabelwidth zeroTransform zerotickfuzz zerowinding ))
diff --git a/graphics/asymptote/asy.list b/graphics/asymptote/asy.list
index 9a33fd6443..096577c741 100644
--- a/graphics/asymptote/asy.list
+++ b/graphics/asymptote/asy.list
@@ -68,8 +68,8 @@ path3 subpath(path3 p, real a, real b);
bool isnan(real x);
string jobname(string name);
void print_random_addresses(int n=<default>);
-void attach(picture dest=<default>, frame src, pair position, pair align, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void attach(picture dest=<default>, frame src, pair position=<default>, bool group=<default>, filltype filltype=<default>, bool above=<default>);
+void attach(picture dest=<default>, frame src, pair position, pair align, bool group=<default>, filltype filltype=<default>, bool above=<default>);
real[] quadraticroots(real a, real b, real c);
pair[] quadraticroots(explicit pair a, explicit pair b, explicit pair c);
pen darkcyan;
@@ -149,8 +149,8 @@ pen rgb(string s);
real inch;
bool ArcArrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
bool ArcArrow(picture, path, pen, marginT(path, pen));
-bool ArcArrows(picture, path, pen, marginT(path, pen));
bool ArcArrows(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>);
+bool ArcArrows(picture, path, pen, marginT(path, pen));
pen currentpen;
pair precontrol(path p, int t);
pair precontrol(path p, real t);
@@ -246,9 +246,8 @@ pair min(frame f);
pair min(explicit path p);
pair min(path[] p);
triple min(path3 p);
-real min(... real[] a);
-real min(real m, scaling s, coord[] c);
pair min(picture pic, bool user=<default>);
+real min(... real[] a);
real min(real m, scaling s, coord[] c);
int min(... int[] a);
filltype RadialShade(pen penc, pen penr);
@@ -256,22 +255,21 @@ int search(int[] a, int key);
int search(real[] a, real key);
int search(string[] a, string key);
int search(void()()[] a, void key()(), bool less(void()(), void()()));
-int search(marker[] a, marker key, bool less(marker, marker));
int search(real[] a, real key, bool less(real, real));
int search(guide[] a, guide key, bool less(guide, guide));
-int search(picture[] a, picture key, bool less(picture, picture));
+int search(marker[] a, marker key, bool less(marker, marker));
int search(pair[] a, pair key, bool less(pair, pair));
-int search(object[] a, object key, bool less(object, object));
+int search(picture[] a, picture key, bool less(picture, picture));
int search(frame[] a, frame key, bool less(frame, frame));
-int search(Label[] a, Label key, bool less(Label, Label));
+int search(coord[] a, coord key, bool less(coord, coord));
+int search(object[] a, object key, bool less(object, object));
int search(int[] a, int key, bool less(int, int));
-int search(Legend[] a, Legend key, bool less(Legend, Legend));
int search(bool3[] a, bool3 key, bool less(bool3, bool3));
-int search(coord[] a, coord key, bool less(coord, coord));
+int search(Label[] a, Label key, bool less(Label, Label));
+int search(Legend[] a, Legend key, bool less(Legend, Legend));
int search(string[] a, string key, bool less(string, string));
int search(path[] a, path key, bool less(path, path));
int search(pen[] a, pen key, bool less(pen, pen));
-int search(coord[] a, coord key, bool less(coord, coord));
int search(bool[] a, bool key, bool less(bool, bool));
int search(triple[] a, triple key, bool less(triple, triple));
filltype RadialShadeDraw(real xmargin=<default>, real ymargin=<default>, pen penc, pen penr, pen drawpen=<default>);
@@ -289,13 +287,13 @@ pen opacity(real opacity=<default>, string blend=<default>);
real opacity(pen p);
real[] solve(real[][] a, real[] b, bool warn=<default>);
real[][] solve(real[][] a, real[][] b, bool warn=<default>);
-void DOSendl(file file);
int rename(string from, string to);
+void DOSendl(file file);
string debugger(string file, int line, int column, code s=<default>);
string getc(file f);
bool debugging;
-void shipout(string prefix=<default>, frame f, string format=<default>, bool wait=<default>, bool view=<default>, string options=<default>, string script=<default>, light light=<default>, projection P=<default>, transform t=<default>);
void shipout(string prefix=<default>, picture pic=<default>, frame orientation(frame)=<default>, string format=<default>, bool wait=<default>, bool view=<default>, string options=<default>, string script=<default>, light light=<default>, projection P=<default>);
+void shipout(string prefix=<default>, frame f, string format=<default>, bool wait=<default>, bool view=<default>, string options=<default>, string script=<default>, light light=<default>, projection P=<default>, transform t=<default>);
void shipout3(string prefix, frame f, string format=<default>, real width, real height, real angle, real zoom, triple m, triple m, pair shift, pair margin, real[][] t, real[] background, triple[] lights, real[][] diffuse, real[][] specular, bool view=<default>);
void shipout3(string prefix, frame f, string format=<default>);
string getstring(string name=<default>, string default=<default>, string prompt=<default>, bool store=<default>);
@@ -348,19 +346,18 @@ pair max(frame f);
pair max(explicit path p);
pair max(path[] p);
triple max(path3 p);
-pair max(picture pic, bool user=<default>);
real max(real M, scaling s, coord[] c);
int max(... int[] a);
+pair max(picture pic, bool user=<default>);
real max(... real[] a);
-real max(real M, scaling s, coord[] c);
-Label Label(string s, string size=<default>, pair position, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
-Label Label(Label L, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
-Label Label(Label L, pair position, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
Label Label(string s, string size=<default>, explicit position position, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
-Label Label;
Label Label(Label L, explicit position position, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
Label Label(explicit pair position, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
Label Label(string s=<default>, string size=<default>, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
+Label Label;
+Label Label(string s, string size=<default>, pair position, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
+Label Label(Label L, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
+Label Label(Label L, pair position, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
string font(pen p=<default>);
pen font(string name, string options=<default>);
pen font(string encoding, string family, string series, string shape);
@@ -395,19 +392,19 @@ filltype NoFill;
real colatitude(triple v, bool warn=<default>);
void drawDisk(frame f, real[][] t, pen[] p, real opacity, real shininess, real metallic, real fresnel0);
void label(frame f, string s, string size, transform t, pair position, pair align, pen p);
-void label(picture pic=<default>, Label L, explicit guide g, align align=<default>, pen p=<default>, filltype filltype=<default>);
-void label(picture pic=<default>, Label L, explicit path g, align align=<default>, pen p=<default>, filltype filltype=<default>);
void label(picture pic=<default>, Label L, align align=<default>, pen p=<default>, filltype filltype=<default>);
void label(pair origin, picture pic=<default>, Label L, align align=<default>, pen p=<default>, filltype filltype=<default>);
void label(frame f, Label L, pair position, align align=<default>, pen p=<default>, filltype filltype=<default>);
void label(picture pic=<default>, Label L, pair position, align align=<default>, pen p=<default>, filltype filltype=<default>);
void label(frame f, Label L, align align=<default>, pen p=<default>, filltype filltype=<default>);
+void label(picture pic=<default>, Label L, explicit guide g, align align=<default>, pen p=<default>, filltype filltype=<default>);
+void label(picture pic=<default>, Label L, explicit path g, align align=<default>, pen p=<default>, filltype filltype=<default>);
real fabs(real x);
real[] fabs(real[] a);
bool labels(frame f);
light light(pen diffuse=<default>, pen specular=<default>, pen background=<default>, real x, real y, real z);
-light light(explicit light light);
light light(pen diffuse=<default>, pen specular=<default>, pen background=<default>, real specularfactor=<default> ... triple[] position);
+light light(explicit light light);
light light(pen[] diffuse, pen[] specular=<default>, pen background=<default>, real specularfactor=<default>, triple[] position);
real remainder(real x, real y);
int byte(real x);
@@ -433,11 +430,11 @@ real erf(real x);
void saveline(string name, string value, bool store=<default>);
pen fuchsia;
filltype filltype(int type=<default>, pen fillpen=<default>, pen drawpen=<default>, void fill2(frame f, path[] g, pen fillpen));
-frame[] fit(string prefix=<default>, picture[] pictures, string format=<default>, bool view=<default>, string options=<default>, string script=<default>, projection P=<default>);
-pen Bookman(string series=<default>, string shape=<default>);
+path box(pair a, pair b);
path box(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
path box(frame f, Label L, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
-path box(pair a, pair b);
+frame[] fit(string prefix=<default>, picture[] pictures, string format=<default>, bool view=<default>, string options=<default>, string script=<default>, projection P=<default>);
+pen Bookman(string series=<default>, string shape=<default>);
void seekeof(file f);
path unitcircle;
pair[] conj(pair[] a);
@@ -472,6 +469,7 @@ void deconstruct(picture pic=<default>);
int sgn(real x);
node node(void d(frame f, transform t, transform T, pair lb, pair rt), string key=<default>);
pair minAfterTransform(transform t, path[] p);
+void fillbox(frame dest, path g, pen p=<default>, filltype filltype=<default>, bool above=<default>);
int seconds(string t=<default>, string format=<default>);
pen cyan;
pen grey;
@@ -486,8 +484,6 @@ real arcarrowfactor;
real mm;
real arcarrowsize(pen p=<default>);
real calculateScaling(string dir, coord[] coords, real size, bool warn=<default>);
-real calculateScaling(string dir, coord[] coords, real size, bool warn=<default>);
-real calculateScaling(string dir, coord[] m, coord[] M, real size, bool warn=<default>);
real calculateScaling(string dir, coord[] m, coord[] M, real size, bool warn=<default>);
triple gettriple(string name=<default>, triple default=<default>, string prompt=<default>, bool store=<default>);
void drawpixel(frame f, triple v, pen p, real width=<default>);
@@ -514,10 +510,10 @@ pen rgba(real[] a);
real[] rgba(pen p);
string time(string format=<default>);
string time(int seconds, string format=<default>);
-int MoveQuiet;
void prepend(frame dest, frame src);
real pt;
settings settings;
+int MoveQuiet;
marginT EndMargin(path, pen);
pen nullpen;
side LeftSide;
@@ -528,10 +524,10 @@ triple[] copy(triple[] a, int depth=<default>);
bool[] copy(bool[] a, int depth=<default>);
real[][] copy(real[][] a, int depth=<default>);
pen[] copy(pen[] a, int depth=<default>);
-bool3[] copy(bool3[] a, int depth=<default>);
coord[] copy(coord[] a, int depth=<default>);
-Label[] copy(Label[] a, int depth=<default>);
-picture[] copy(picture[] a, int depth=<default>);
+object[] copy(object[] a, int depth=<default>);
+marker[] copy(marker[] a, int depth=<default>);
+Legend[] copy(Legend[] a, int depth=<default>);
pen[][] copy(pen[][] a, int depth=<default>);
path[] copy(path[] a, int depth=<default>);
string[] copy(string[] a, int depth=<default>);
@@ -540,10 +536,9 @@ int[] copy(int[] a, int depth=<default>);
string[][] copy(string[][] a, int depth=<default>);
frame[] copy(frame[] a, int depth=<default>);
pair[] copy(pair[] a, int depth=<default>);
-coord[] copy(coord[] a, int depth=<default>);
-object[] copy(object[] a, int depth=<default>);
-marker[] copy(marker[] a, int depth=<default>);
-Legend[] copy(Legend[] a, int depth=<default>);
+bool3[] copy(bool3[] a, int depth=<default>);
+Label[] copy(Label[] a, int depth=<default>);
+picture[] copy(picture[] a, int depth=<default>);
pair[][] copy(pair[][] a, int depth=<default>);
real[] abs(pair[] a);
real[] abs(triple[] a);
@@ -576,28 +571,27 @@ pen deepblue;
pen palered;
real[] map(real f(pair), pair[] a);
int[] map(int f(real), real[] a);
-Legend[] map(Legend f(Legend), Legend[] a);
-frame[] map(frame f(frame), frame[] a);
+bool3[] map(bool3 f(bool3), bool3[] a);
Label[] map(Label f(Label), Label[] a);
+frame[] map(frame f(frame), frame[] a);
+coord[] map(coord f(coord), coord[] a);
+object[] map(object f(object), object[] a);
pen[][] map(pen[] f(pen[]), pen[][] a);
triple[] map(triple f(triple), triple[] a);
pen[] map(pen f(pen), pen[] a);
-object[] map(object f(object), object[] a);
-pair[] map(pair f(pair), pair[] a);
picture[] map(picture f(picture), picture[] a);
-string[] map(string f(string), string[] a);
+pair[] map(pair f(pair), pair[] a);
marker[] map(marker f(marker), marker[] a);
+string[] map(string f(string), string[] a);
void()()[] map(void f()()(void()()), void()()[] a);
pair[][] map(pair[] f(pair[]), pair[][] a);
real[] map(real f(real), real[] a);
int[] map(int f(int), int[] a);
string[][] map(string[] f(string[]), string[][] a);
-coord[] map(coord f(coord), coord[] a);
bool[] map(bool f(bool), bool[] a);
path[] map(path f(path), path[] a);
real[][] map(real[] f(real[]), real[][] a);
-bool3[] map(bool3 f(bool3), bool3[] a);
-coord[] map(coord f(coord), coord[] a);
+Legend[] map(Legend f(Legend), Legend[] a);
guide[] map(guide f(guide), guide[] a);
path unstraighten(path p);
path3 unstraighten(path3 p);
@@ -612,10 +606,10 @@ pair minratio(triple[][] p, pair b);
pair minratio(path3 g);
int[] sequence(int n);
pen[][] sequence(pen[] f(int), int n);
-bool3[] sequence(bool3 f(int), int n);
coord[] sequence(coord f(int), int n);
-Label[] sequence(Label f(int), int n);
-picture[] sequence(picture f(int), int n);
+object[] sequence(object f(int), int n);
+marker[] sequence(marker f(int), int n);
+Legend[] sequence(Legend f(int), int n);
int[] sequence(int f(int), int n);
string[][] sequence(string[] f(int), int n);
pair[] sequence(pair f(int), int n);
@@ -626,10 +620,9 @@ void()()[] sequence(void f()()(int), int n);
bool[] sequence(bool f(int), int n);
string[] sequence(string f(int), int n);
pair[][] sequence(pair[] f(int), int n);
-coord[] sequence(coord f(int), int n);
-object[] sequence(object f(int), int n);
-marker[] sequence(marker f(int), int n);
-Legend[] sequence(Legend f(int), int n);
+bool3[] sequence(bool3 f(int), int n);
+Label[] sequence(Label f(int), int n);
+picture[] sequence(picture f(int), int n);
real[][] sequence(real[] f(int), int n);
real[] sequence(real f(int), int n);
int[] sequence(int n, int m);
@@ -649,9 +642,9 @@ pair size(frame f);
int size(path p);
int size(path[] p);
int size(path3 p);
+void size(picture dest, picture src);
pair size(picture pic, bool user=<default>);
void size(picture pic=<default>, transform t);
-void size(picture dest, picture src);
void size(picture pic=<default>, real x, real y=<default>, bool keepAspect=<default>);
void size(picture pic=<default>, real xsize, real ysize, pair min, pair max);
void clear(file f);
@@ -670,18 +663,18 @@ string downcase(string s);
pen mediumgrey;
transform transform(pen p);
string readline(string prompt=<default>, string name=<default>, bool tabcompletion=<default>);
+void beep();
+pair relpoint(path p, real l);
+pair[][] transpose(pair[][] a);
pen[][] transpose(pen[][] a);
string[][] transpose(string[][] a);
real[][] transpose(real[][] a);
-pair[][] transpose(pair[][] a);
-void beep();
-transformation transformation(real[][] modelview, real[][] projection);
-transformation transformation(real[][] modelview);
-pair relpoint(path p, real l);
pen overwrite(int n);
int overwrite(pen p=<default>);
pen linewidth(real x);
real linewidth(pen p=<default>);
+transformation transformation(real[][] modelview);
+transformation transformation(real[][] modelview, real[][] projection);
pair maxratio(frame f);
pair maxratio(triple[][] p, pair b);
pair maxratio(path3 g);
@@ -706,23 +699,23 @@ slice cut(path p, path knife, int n);
bool is3D(frame f);
bool is3D(string format=<default>);
void add(frame dest, frame src);
+void add(frame f, transform t=<default>, Label L);
+void add(picture pic=<default>, void d(frame f, transform t), bool exact=<default>);
+void add(frame dest, frame src, filltype filltype, bool above=<default>);
+void add(frame dest, frame src, bool group, filltype filltype=<default>, bool above=<default>);
+void add(picture pic=<default>, void d(picture, real[][]), bool exact=<default>);
+void add(frame dest, frame src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
+void add(picture dest=<default>, frame src, pair position=<default>, bool group=<default>, filltype filltype=<default>, bool above=<default>);
+void add(picture src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void add(picture dest=<default>, frame src, pair position, pair align, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void add(frame dest, frame src, pair position, pair align, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void add(picture src, bool group=<default>, filltype filltype=<default>, bool above=<default>);
-void add(picture pic=<default>, void d(frame f, transform t), bool exact=<default>);
void add(picture pic=<default>, void d(frame f, real[][] t, picture pic, projection P), bool exact=<default>);
-void add(picture pic=<default>, void d(picture, real[][]), bool exact=<default>);
+void add(picture pic=<default>, void d(picture, transform), bool exact=<default>);
void add(picture dest, picture src, bool group=<default>, filltype filltype=<default>, bool above=<default>);
-void add(picture pic=<default>, Label L);
void add(picture dest, picture src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
void add(picture dest=<default>, object F, pair position=<default>, bool group=<default>, filltype filltype=<default>, bool above=<default>);
-void add(frame dest, frame src, filltype filltype, bool above=<default>);
-void add(frame dest, frame src, bool group, filltype filltype=<default>, bool above=<default>);
-void add(frame dest, frame src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
-void add(picture dest=<default>, frame src, pair position=<default>, bool group=<default>, filltype filltype=<default>, bool above=<default>);
-void add(picture pic=<default>, void d(picture, transform), bool exact=<default>);
-void add(frame f, transform t=<default>, Label L);
-void add(picture src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
+void add(picture pic=<default>, Label L);
plain plain;
void purge(int divisor=<default>);
int Round(real x);
@@ -738,32 +731,30 @@ filltype Draw;
void Draw(picture pic=<default>, explicit path[] g, pen p=<default>);
filltype Draw(real xmargin=<default>, real ymargin=<default>, pen p=<default>);
void tab(file file);
-plain_scaling plain_scaling;
-string file(string s);
plain_bounds plain_bounds;
+string file(string s);
string outprefix(string prefix=<default>);
-object object(Label L, path e(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>), real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
object object(frame f);
object object(Label L);
+object object(Label L, path e(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>), real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
file stdin;
void()()[] array(int n, void value()(), int depth=<default>);
bool[] array(int n, bool value, int depth=<default>);
string[] array(int n, string value, int depth=<default>);
pair[][] array(int n, pair[] value, int depth=<default>);
-coord[] array(int n, coord value, int depth=<default>);
-object[] array(int n, object value, int depth=<default>);
-marker[] array(int n, marker value, int depth=<default>);
-Legend[] array(int n, Legend value, int depth=<default>);
+bool3[] array(int n, bool3 value, int depth=<default>);
+Label[] array(int n, Label value, int depth=<default>);
+picture[] array(int n, picture value, int depth=<default>);
real[][] array(int n, real[] value, int depth=<default>);
real[] array(int n, real value, int depth=<default>);
triple[] array(int n, triple value, int depth=<default>);
path[] array(int n, path value, int depth=<default>);
frame[] array(int n, frame value, int depth=<default>);
pen[][] array(int n, pen[] value, int depth=<default>);
-bool3[] array(int n, bool3 value, int depth=<default>);
coord[] array(int n, coord value, int depth=<default>);
-Label[] array(int n, Label value, int depth=<default>);
-picture[] array(int n, picture value, int depth=<default>);
+object[] array(int n, object value, int depth=<default>);
+marker[] array(int n, marker value, int depth=<default>);
+Legend[] array(int n, Legend value, int depth=<default>);
int[] array(int n, int value, int depth=<default>);
string[][] array(int n, string[] value, int depth=<default>);
pair[] array(int n, pair value, int depth=<default>);
@@ -778,8 +769,8 @@ int find(string s, string t, int pos=<default>);
position BeginPoint;
marginT BeginMargin(path, pen);
path buildcycle(... path[] p);
-bool BeginArrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
bool BeginArrow(picture, path, pen, marginT(path, pen));
+bool BeginArrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
marginT BeginPenMargin(path, pen);
int round(real x);
marginT BeginDotMargin(path, pen);
@@ -810,18 +801,18 @@ void draw(frame f, triple[][] p, triple center, bool straight, pen[] p, real opa
void draw(frame f, triple[] p, real[] knot, real[] weights=<default>, pen p);
void draw(frame f, triple[][] p, real[] uknot, real[] vknot, real[][] weights=<default>, pen[] p, real opacity, real shininess, real metallic, real fresnel0, pen[] colors);
void draw(frame f, triple[] v, int[][] vi, triple center=<default>, triple[] n, int[][] ni, pen[] p, real opacity, real shininess, real metallic, real fresnel0, pen[] c=<default>, int[][] ci=<default>, int interaction);
-void draw(picture pic=<default>, explicit path[] g, pen p=<default>, Label legend=<default>, marker marker=<default>);
-void draw(pair origin, picture pic=<default>, explicit path[] g, pen p=<default>, Label legend=<default>, marker marker=<default>);
void draw(picture pic=<default>, path[] g, pen fillrule=<default>, pen[] p);
-object draw(picture pic=<default>, Label L, path e(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>), pair position, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
+object draw(picture pic=<default>, Label L, path e(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>), real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
void draw(frame f, explicit path[] g, pen p=<default>);
void draw(frame f, path g, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen)));
-object draw(picture pic=<default>, Label L, path e(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>), real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
void draw(picture pic=<default>, Label L=<default>, path g, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
void draw(pair origin, picture pic=<default>, Label L=<default>, path g, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
-void draw(frame f, guide[] g, pen p=<default>);
void draw(picture pic=<default>, guide[] g, pen p=<default>, Label legend=<default>, marker marker=<default>);
void draw(pair origin, picture pic=<default>, guide[] g, pen p=<default>, Label legend=<default>, marker marker=<default>);
+object draw(picture pic=<default>, Label L, path e(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>), pair position, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
+void draw(picture pic=<default>, explicit path[] g, pen p=<default>, Label legend=<default>, marker marker=<default>);
+void draw(pair origin, picture pic=<default>, explicit path[] g, pen p=<default>, Label legend=<default>, marker marker=<default>);
+void draw(frame f, guide[] g, pen p=<default>);
void draw(frame f, path g, pen p=<default>);
int mantissaBits;
real identity(real x);
@@ -886,18 +877,18 @@ void write(file file=<default>, string s=<default>, guide x, void suffix(file)=<
void write(file file=<default>, string s=<default>, pen x, void suffix(file)=<default> ... pen[]);
void write(file file, string s=<default>, explicit guide[] x, void suffix(file)=<default>);
void write(string s=<default>, cputime c, string format=<default>, void suffix(file)=<default>);
-void write(string s=<default>, bool3 b, void suffix(file)=<default>);
void write(string s=<default>, explicit path[] x, void suffix(file)=<default>);
void write(file file, void suffix(file)=<default>);
void write(file file=<default>, string s=<default>, pen[] p);
void write(void suffix(file)=<default>);
-void write(file file, string s=<default>, bool3 b, void suffix(file)=<default>);
void write(file file, string s=<default>, explicit path[] x, void suffix(file)=<default>);
-void write(file file=<default>, Label L, void suffix(file)=<default>);
+void write(file file=<default>, align align, void suffix(file)=<default>);
void write(file file, string s=<default>, cputime c, string format=<default>, void suffix(file)=<default>);
void write(pairOrTriple a);
+void write(string s=<default>, bool3 b, void suffix(file)=<default>);
+void write(file file, string s=<default>, bool3 b, void suffix(file)=<default>);
void write(string s=<default>, explicit guide[] x, void suffix(file)=<default>);
-void write(file file=<default>, align align, void suffix(file)=<default>);
+void write(file file=<default>, Label L, void suffix(file)=<default>);
void save()();
marginT EndPenMargin(path, pen);
pair NNE;
@@ -950,21 +941,20 @@ string blend(pen p);
arrowhead HookHead;
arrowhead HookHead(real dir=<default>, real barb=<default>);
real[] concat(... real[][]);
-marker[] concat(... marker[][]);
pair[] concat(... pair[][]);
-picture[] concat(... picture[][]);
+marker[] concat(... marker[][]);
pen[] concat(... pen[][]);
-object[] concat(... object[][]);
+picture[] concat(... picture[][]);
path[] concat(... path[][]);
-Label[] concat(... Label[][]);
+coord[] concat(... coord[][]);
+object[] concat(... object[][]);
int[] concat(... int[][]);
void()()[] concat(... void()()[][]);
-Legend[] concat(... Legend[][]);
-string[] concat(... string[][]);
bool3[] concat(... bool3[][]);
-coord[] concat(... coord[][]);
+Label[] concat(... Label[][]);
+string[] concat(... string[][]);
+Legend[] concat(... Legend[][]);
triple[] concat(... triple[][]);
-coord[] concat(... coord[][]);
frame[] concat(... frame[][]);
guide[] concat(... guide[][]);
bool[] concat(... bool[][]);
@@ -974,71 +964,66 @@ real[] log1p(real[] a);
real infinity;
bool alias(pair[][] a, pair[][] b);
bool alias(guide[] a, guide[] b);
-bool alias(bool3 a, bool3 b);
-bool alias(coord a, coord b);
-bool alias(scaling a, scaling b);
-bool alias(ScaleT a, ScaleT b);
-bool alias(side a, side b);
-bool alias(Label[] a, Label[] b);
-bool alias(cputime a, cputime b);
-bool alias(pair[] a, pair[] b);
-bool alias(hsv a, hsv b);
+bool alias(filltype a, filltype b);
bool alias(coord[] a, coord[] b);
-bool alias(projection a, projection b);
-bool alias(pairOrTriple a, pairOrTriple b);
-bool alias(object a, object b);
-bool alias(int[] a, int[] b);
-bool alias(string[][] a, string[][] b);
-bool alias(marginT a, marginT b);
-bool alias(bounds a, bounds b);
-bool alias(scaleT a, scaleT b);
-bool alias(arrowhead a, arrowhead b);
-bool alias(picture[] a, picture[] b);
-bool alias(real[][] a, real[][] b);
-bool alias(scaling a, scaling b);
-bool alias(coords2 a, coords2 b);
bool alias(Legend a, Legend b);
bool alias(position a, position b);
-bool alias(Legend[] a, Legend[] b);
-bool alias(realschur a, realschur b);
-bool alias(string[] a, string[] b);
-bool alias(frame[] a, frame[] b);
-bool alias(slice a, slice b);
-bool alias(simplex a, simplex b);
+bool alias(object[] a, object[] b);
+bool alias(schur a, schur b);
+bool alias(pair[] a, pair[] b);
+bool alias(scaling a, scaling b);
bool alias(light a, light b);
bool alias(picture a, picture b);
-bool alias(bool[] a, bool[] b);
-bool alias(void()()[] a, void()()[] b);
-bool alias(pen[][] a, pen[][] b);
-bool alias(coord a, coord b);
+bool alias(int[] a, int[] b);
+bool alias(string[][] a, string[][] b);
+bool alias(slice a, slice b);
bool alias(autoscaleT a, autoscaleT b);
bool alias(align a, align b);
-bool alias(object[] a, object[] b);
-bool alias(processtime a, processtime b);
-bool alias(path[] a, path[] b);
-bool alias(triple[] a, triple[] b);
+bool alias(marker[] a, marker[] b);
+bool alias(cputime a, cputime b);
+bool alias(real[][] a, real[][] b);
+bool alias(bool3 a, bool3 b);
bool alias(bool3[] a, bool3[] b);
-bool alias(coord[] a, coord[] b);
-bool alias(coords2 a, coords2 b);
bool alias(freezableBounds a, freezableBounds b);
bool alias(transformation a, transformation b);
bool alias(node a, node b);
bool alias(Label a, Label b);
-bool alias(schur a, schur b);
-bool alias(real[] a, real[] b);
-bool alias(pen[] a, pen[] b);
-bool alias(filltype a, filltype b);
+bool alias(Label[] a, Label[] b);
+bool alias(processtime a, processtime b);
+bool alias(string[] a, string[] b);
+bool alias(frame[] a, frame[] b);
+bool alias(coords2 a, coords2 b);
bool alias(coords3 a, coords3 b);
bool alias(marker a, marker b);
-bool alias(marker[] a, marker[] b);
+bool alias(bool[] a, bool[] b);
+bool alias(void()()[] a, void()()[] b);
+bool alias(pen[][] a, pen[][] b);
+bool alias(marginT a, marginT b);
+bool alias(ScaleT a, ScaleT b);
+bool alias(side a, side b);
+bool alias(picture[] a, picture[] b);
+bool alias(realschur a, realschur b);
+bool alias(path[] a, path[] b);
+bool alias(triple[] a, triple[] b);
+bool alias(coord a, coord b);
+bool alias(projection a, projection b);
+bool alias(pairOrTriple a, pairOrTriple b);
+bool alias(object a, object b);
+bool alias(Legend[] a, Legend[] b);
+bool alias(real[] a, real[] b);
+bool alias(pen[] a, pen[] b);
+bool alias(hsv a, hsv b);
+bool alias(bounds a, bounds b);
+bool alias(scaleT a, scaleT b);
+bool alias(arrowhead a, arrowhead b);
real pi;
int getint(string name=<default>, int default=<default>, string prompt=<default>, bool store=<default>);
int bitreverse(int a, int bits);
bool IgnoreAspect;
void postscript(frame f, string s);
void postscript(frame f, string s, pair min, pair max);
-void postscript(picture pic=<default>, string s, pair min, pair max);
void postscript(picture pic=<default>, string s);
+void postscript(picture pic=<default>, string s, pair min, pair max);
transform slant(real s);
void breakpoint(code s=<default>);
void breakpoints();
@@ -1059,10 +1044,10 @@ real[] sort(real[] a);
real[][] sort(real[][] a);
string[] sort(string[] a);
string[][] sort(string[][] a);
-bool3[] sort(bool3[] a, bool less(bool3, bool3), bool stable=<default>);
coord[] sort(coord[] a, bool less(coord, coord), bool stable=<default>);
-Label[] sort(Label[] a, bool less(Label, Label), bool stable=<default>);
-picture[] sort(picture[] a, bool less(picture, picture), bool stable=<default>);
+object[] sort(object[] a, bool less(object, object), bool stable=<default>);
+marker[] sort(marker[] a, bool less(marker, marker), bool stable=<default>);
+Legend[] sort(Legend[] a, bool less(Legend, Legend), bool stable=<default>);
path[] sort(path[] a, bool less(path, path), bool stable=<default>);
pen[][] sort(pen[][] a, bool less(pen[], pen[]), bool stable=<default>);
pair[][] sort(pair[][] a, bool less(pair[], pair[]), bool stable=<default>);
@@ -1070,10 +1055,9 @@ pen[] sort(pen[] a, bool less(pen, pen), bool stable=<default>);
bool[] sort(bool[] a, bool less(bool, bool), bool stable=<default>);
void()()[] sort(void()()[] a, bool less(void()(), void()()), bool stable=<default>);
frame[] sort(frame[] a, bool less(frame, frame), bool stable=<default>);
-coord[] sort(coord[] a, bool less(coord, coord), bool stable=<default>);
-object[] sort(object[] a, bool less(object, object), bool stable=<default>);
-marker[] sort(marker[] a, bool less(marker, marker), bool stable=<default>);
-Legend[] sort(Legend[] a, bool less(Legend, Legend), bool stable=<default>);
+bool3[] sort(bool3[] a, bool less(bool3, bool3), bool stable=<default>);
+Label[] sort(Label[] a, bool less(Label, Label), bool stable=<default>);
+picture[] sort(picture[] a, bool less(picture, picture), bool stable=<default>);
int[] sort(int[] a, bool less(int, int), bool stable=<default>);
string[][] sort(string[][] a, bool less(string[], string[]), bool stable=<default>);
real[] sort(real[] a, bool less(real, real), bool stable=<default>);
@@ -1091,11 +1075,11 @@ void latticeshade(picture pic=<default>, path[] g, bool stroke=<default>, pen fi
pair[] pairs(real[] x, real[] y);
void eval(code s, bool embedded=<default>);
void eval(string s, bool embedded=<default>);
-bool Arrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
bool Arrow(picture, path, pen, marginT(path, pen));
+bool Arrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
void drawTube(frame f, triple[] g, real width, pen[] p, real opacity, real shininess, real metallic, real fresnel0, triple min, triple max, bool core=<default>);
-bool Arrows(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>);
bool Arrows(picture, path, pen, marginT(path, pen));
+bool Arrows(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>);
int tell(file f);
pen Yellow;
pair up;
@@ -1121,9 +1105,9 @@ pen[] mean(pen[][] palette, real opacity(real[])=<default>);
string mktemp(string s);
void sleep(int seconds);
void drawstrokepath(picture pic=<default>, path g, pen strokepen, pen p=<default>);
+void unitsize(picture pic=<default>, real x, real y=<default>, real z=<default>);
void arrow(picture pic=<default>, Label L=<default>, pair b, pair dir, real length=<default>, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>);
picture arrow(arrowhead arrowhead=<default>, path g, pen p=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>, bool forwards=<default>, marginT margin(path, pen)=<default>, bool center=<default>);
-void unitsize(picture pic=<default>, real x, real y=<default>, real z=<default>);
picture arrow2(arrowhead arrowhead=<default>, path g, pen p=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>);
path unitsquare;
real arrowdir;
@@ -1169,9 +1153,6 @@ real radius(path3 p, real t);
real radius(triple z0, triple c0, triple c1, triple z1, real t);
transform scaleless(transform t);
void makedraw(frame f, path g, pen p, int depth=<default>);
-simplex simplex(real[] c, real[][] A, real[] b, bool phase1=<default>);
-simplex simplex(real[] c, real[][] A, int[] s, real[] b);
-simplex simplex;
real nan;
pair down;
path arc(pair c, real r, real angle1, real angle2);
@@ -1249,9 +1230,9 @@ pair SW;
void flush(file f);
pen thin();
pen palecyan;
+void warning(string s, string t, bool position=<default>);
frame legend(picture pic=<default>, int perline=<default>, real xmargin=<default>, real ymargin=<default>, real linelength=<default>, real hskip=<default>, real vskip=<default>, real maxwidth=<default>, real maxheight=<default>, bool hstretch=<default>, bool vstretch=<default>, pen p=<default>);
picture legend(Legend[] Legend, int perline=<default>, real linelength, real hskip, real vskip, real maxwidth=<default>, real maxheight=<default>, bool hstretch=<default>, bool vstretch=<default>);
-void warning(string s, string t, bool position=<default>);
real Degrees(real radians);
picture legenditem(Legend legenditem, real linelength);
real legendhskip;
@@ -1298,8 +1279,8 @@ triple operator +(triple a);
triple[] operator +(triple[] a);
pen operator +(pen a, pen b);
transform operator +(transform a, transform b);
-marginT operator +(path, pen)(marginT ma(path, pen), marginT mb(path, pen));
pen operator +(pen p, real w);
+marginT operator +(path, pen)(marginT ma(path, pen), marginT mb(path, pen));
pen[] operator +(pen a, pen[] b);
pen operator +(real w, pen p);
string operator +(... string[] a);
@@ -1376,15 +1357,15 @@ triple operator *(real[][] t, triple v);
triple operator *(real x, triple v);
triple operator *(triple v, real x);
path3 operator *(real[][] t, path3 g);
+picture operator *(real[][] t, picture orig);
bounds operator *(transform t, bounds b);
side operator *(real x, side s);
Label operator *(real[][] t, Label L);
-picture operator *(transform t, picture orig);
path[] operator *(transform t, explicit path[] p);
-object operator *(transform t, explicit object F);
+picture operator *(transform t, picture orig);
pair[] operator *(transform t, pair[] z);
+object operator *(transform t, explicit object F);
Label operator *(transform t, Label L);
-picture operator *(real[][] t, picture orig);
bool operator init();
int operator init();
real operator init();
@@ -1398,41 +1379,37 @@ path3 operator init();
pen operator init();
frame operator init();
file operator init();
-bool3 operator init();
-coord operator init();
-scaling operator init();
+filltype operator init();
+Legend operator init();
+position operator init();
+schur operator init();
+marginT operator init();
ScaleT operator init();
side operator init();
-cputime operator init();
-coord operator init();
+realschur operator init();
+slice operator init();
autoscaleT operator init();
align operator init();
-processtime operator init();
-marginT operator init();
+cputime operator init();
+hsv operator init();
bounds operator init();
scaleT operator init();
arrowhead operator init();
-filltype operator init();
+coords2 operator init();
coords3 operator init();
marker operator init();
-slice operator init();
-simplex operator init();
+scaling operator init();
light operator init();
picture operator init();
-hsv operator init();
+coord operator init();
projection operator init();
pairOrTriple operator init();
object operator init();
-coords2 operator init();
+bool3 operator init();
transformation operator init();
node operator init();
Label operator init();
-schur operator init();
-scaling operator init();
-coords2 operator init();
-Legend operator init();
-position operator init();
-realschur operator init();
+processtime operator init();
real operator cast(int);
pair operator cast(int);
pair operator cast(real);
@@ -1475,32 +1452,32 @@ guide operator cast(cycleToken tok);
guide operator cast(curlSpecifier spec);
guide operator cast(tensionSpecifier t);
guide[] operator cast(path[] g);
+position operator cast(int x);
+hsv operator cast(pen p);
+object operator cast(string s);
bool3[] operator cast(bool[] b);
position operator cast(real x);
Label operator cast(string s);
pair operator cast(pairOrTriple a);
triple operator cast(pairOrTriple a);
-pen operator cast(hsv hsv);
frame operator cast(object F);
-align operator cast(side side);
-hsv operator cast(pen p);
-position operator cast(pair x);
guide[] operator cast(pair[] z);
path[] operator cast(guide[] g);
+bool operator cast(bool3 b);
+position operator cast(pair x);
+path[] operator cast(guide g);
+align operator cast(side side);
pair operator cast(position P);
object operator cast(frame f);
-path[] operator cast(guide g);
-object operator cast(Label L);
-Label operator cast(object F);
-bool operator cast(bool3 b);
-bool[] operator cast(bool3[] b);
-align operator cast(pair dir);
path[] operator cast(pair[] z);
path[] operator cast(path p);
-align operator cast(triple dir);
+bool[] operator cast(bool3[] b);
+align operator cast(pair dir);
+object operator cast(Label L);
+Label operator cast(object F);
bool3 operator cast(bool b);
-position operator cast(int x);
-object operator cast(string s);
+align operator cast(triple dir);
+pen operator cast(hsv hsv);
pen deepred;
bool error(file f);
string operator ecast(int);
@@ -1604,44 +1581,40 @@ bool operator ==(transform a, transform b);
bool operator ==(file a, file b);
bool operator ==(path a, path b);
bool operator ==(path3 a, path3 b);
-bool operator ==(bool a, bool3 b);
-bool operator ==(scaling a, scaling b);
-bool operator ==(coords2 a, coords2 b);
-bool operator ==(Legend a, Legend b);
-bool operator ==(position a, position b);
-bool operator ==(realschur a, realschur b);
-bool operator ==(bool3 a, bool b);
-bool operator ==(slice a, slice b);
-bool operator ==(simplex a, simplex b);
-bool operator ==(light a, light b);
-bool operator ==(picture a, picture b);
-bool operator ==(coord a, coord b);
-bool operator ==(autoscaleT a, autoscaleT b);
-bool operator ==(align a, align b);
-bool operator ==(processtime a, processtime b);
-bool operator ==(coords2 a, coords2 b);
+bool operator ==(bool3 a, bool3 b);
bool operator ==(freezableBounds a, freezableBounds b);
bool operator ==(transformation a, transformation b);
bool operator ==(node a, node b);
bool operator ==(Label a, Label b);
-bool operator ==(schur a, schur b);
-bool operator ==(filltype a, filltype b);
+bool operator ==(processtime a, processtime b);
+bool operator ==(coords2 a, coords2 b);
bool operator ==(coords3 a, coords3 b);
bool operator ==(marker a, marker b);
-bool operator ==(bool3 a, bool3 b);
-bool operator ==(coord a, coord b);
-bool operator ==(scaling a, scaling b);
+bool operator ==(marginT a, marginT b);
bool operator ==(ScaleT a, ScaleT b);
bool operator ==(side a, side b);
-bool operator ==(cputime a, cputime b);
-bool operator ==(hsv a, hsv b);
+bool operator ==(realschur a, realschur b);
+bool operator ==(coord a, coord b);
bool operator ==(projection a, projection b);
bool operator ==(pairOrTriple a, pairOrTriple b);
bool operator ==(object a, object b);
-bool operator ==(marginT a, marginT b);
+bool operator ==(hsv a, hsv b);
bool operator ==(bounds a, bounds b);
bool operator ==(scaleT a, scaleT b);
bool operator ==(arrowhead a, arrowhead b);
+bool operator ==(bool3 a, bool b);
+bool operator ==(filltype a, filltype b);
+bool operator ==(Legend a, Legend b);
+bool operator ==(position a, position b);
+bool operator ==(schur a, schur b);
+bool operator ==(scaling a, scaling b);
+bool operator ==(light a, light b);
+bool operator ==(picture a, picture b);
+bool operator ==(bool a, bool3 b);
+bool operator ==(slice a, slice b);
+bool operator ==(autoscaleT a, autoscaleT b);
+bool operator ==(align a, align b);
+bool operator ==(cputime a, cputime b);
bool operator !=(bool a, bool b);
bool[] operator !=(bool a, bool[] b);
bool[] operator !=(bool[] a, bool b);
@@ -1678,44 +1651,40 @@ bool operator !=(transform a, transform b);
bool operator !=(file a, file b);
bool operator !=(path a, path b);
bool operator !=(path3 a, path3 b);
-bool operator !=(bool a, bool3 b);
-bool operator !=(scaling a, scaling b);
-bool operator !=(coords2 a, coords2 b);
-bool operator !=(Legend a, Legend b);
-bool operator !=(position a, position b);
-bool operator !=(realschur a, realschur b);
-bool operator !=(bool3 a, bool b);
-bool operator !=(slice a, slice b);
-bool operator !=(simplex a, simplex b);
-bool operator !=(light a, light b);
-bool operator !=(picture a, picture b);
-bool operator !=(coord a, coord b);
-bool operator !=(autoscaleT a, autoscaleT b);
-bool operator !=(align a, align b);
-bool operator !=(processtime a, processtime b);
-bool operator !=(coords2 a, coords2 b);
+bool operator !=(bool3 a, bool3 b);
bool operator !=(freezableBounds a, freezableBounds b);
bool operator !=(transformation a, transformation b);
bool operator !=(node a, node b);
bool operator !=(Label a, Label b);
-bool operator !=(schur a, schur b);
-bool operator !=(filltype a, filltype b);
+bool operator !=(processtime a, processtime b);
+bool operator !=(coords2 a, coords2 b);
bool operator !=(coords3 a, coords3 b);
bool operator !=(marker a, marker b);
-bool operator !=(bool3 a, bool3 b);
-bool operator !=(coord a, coord b);
-bool operator !=(scaling a, scaling b);
+bool operator !=(marginT a, marginT b);
bool operator !=(ScaleT a, ScaleT b);
bool operator !=(side a, side b);
-bool operator !=(cputime a, cputime b);
-bool operator !=(hsv a, hsv b);
+bool operator !=(realschur a, realschur b);
+bool operator !=(coord a, coord b);
bool operator !=(projection a, projection b);
bool operator !=(pairOrTriple a, pairOrTriple b);
bool operator !=(object a, object b);
-bool operator !=(marginT a, marginT b);
+bool operator !=(hsv a, hsv b);
bool operator !=(bounds a, bounds b);
bool operator !=(scaleT a, scaleT b);
bool operator !=(arrowhead a, arrowhead b);
+bool operator !=(bool3 a, bool b);
+bool operator !=(filltype a, filltype b);
+bool operator !=(Legend a, Legend b);
+bool operator !=(position a, position b);
+bool operator !=(schur a, schur b);
+bool operator !=(scaling a, scaling b);
+bool operator !=(light a, light b);
+bool operator !=(picture a, picture b);
+bool operator !=(bool a, bool3 b);
+bool operator !=(slice a, slice b);
+bool operator !=(autoscaleT a, autoscaleT b);
+bool operator !=(align a, align b);
+bool operator !=(cputime a, cputime b);
bool operator <(int a, int b);
bool[] operator <(int a, int[] b);
bool[] operator <(int[] a, int b);
@@ -1741,7 +1710,6 @@ bool[] operator <=(string a, string[] b);
bool[] operator <=(string[] a, string b);
bool[] operator <=(string[] a, string[] b);
bool operator <=(coord a, coord b);
-bool operator <=(coord a, coord b);
void srand(int seed);
bool operator >(int a, int b);
bool[] operator >(int a, int[] b);
@@ -1768,7 +1736,6 @@ bool[] operator >=(string a, string[] b);
bool[] operator >=(string[] a, string b);
bool[] operator >=(string[] a, string[] b);
bool operator >=(coord a, coord b);
-bool operator >=(coord a, coord b);
filltype UnFill(real xmargin=<default>, real ymargin=<default>);
filltype UnFill;
real degrees(pair z, bool warn=<default>);
@@ -1794,8 +1761,8 @@ guide operator ..(... guide[])(tensionSpecifier t);
path polygon(int n);
guide operator --(... guide[]);
guide operator ---(... guide[]);
-void()()[] saveFunctions;
pen NewCenturySchoolBook(string series=<default>, string shape=<default>);
+void()()[] saveFunctions;
bool operator &(bool a, bool b);
bool[] operator &(bool a, bool[] b);
bool[] operator &(bool[] a, bool b);
@@ -1862,15 +1829,15 @@ real dot(real[] a, real[] b);
pair dot(pair[] a, pair[] b);
real dot(explicit pair z, explicit pair w);
real dot(triple u, triple v);
-void dot(picture pic=<default>, Label L, pair z, align align=<default>, string format=<default>, pen p=<default>, filltype filltype=<default>);
-void dot(picture pic=<default>, Label[] L=<default>, explicit path g, align align=<default>, string format=<default>, pen p=<default>, filltype filltype=<default>);
marker dot(pen p=<default>, filltype filltype=<default>);
void dot(picture pic=<default>, pair z, pen p=<default>, filltype filltype=<default>);
void dot(frame f, pair z, pen p=<default>, filltype filltype=<default>);
-marker dot;
void dot(picture pic=<default>, Label L, pen p=<default>, filltype filltype=<default>);
void dot(picture pic=<default>, Label[] L=<default>, pair[] z, align align=<default>, string format=<default>, pen p=<default>, filltype filltype=<default>);
void dot(picture pic=<default>, path[] g, pen p=<default>, filltype filltype=<default>);
+marker dot;
+void dot(picture pic=<default>, Label L, pair z, align align=<default>, string format=<default>, pen p=<default>, filltype filltype=<default>);
+void dot(picture pic=<default>, Label[] L=<default>, explicit path g, align align=<default>, string format=<default>, pen p=<default>, filltype filltype=<default>);
void list(string s, bool imports=<default>);
pair NNW;
string phantom(string s);
@@ -1903,13 +1870,12 @@ void _draw(frame f, path g, pen p);
void _draw(frame f, path3 g, triple center=<default>, pen[] p, real opacity, real shininess, real metallic, real fresnel0, int interaction=<default>);
void _draw(picture pic, path g, pen p, marginT margin(path, pen));
frame align(frame f, pair align);
-path[] align(path[] g, transform t=<default>, pair position, pair align, pen p=<default>);
object align(object F, pair align);
+path[] align(path[] g, transform t=<default>, pair position, pair align, pen p=<default>);
real unitrand();
string[] history(string name, int n=<default>);
string[] history(int n=<default>);
coord[] maxcoords(coord[] in, bool operator <=(coord, coord));
-coord[] maxcoords(coord[] in, bool operator <=(coord, coord));
pen AvantGarde(string series=<default>, string shape=<default>);
frame enclose(string prefix=<default>, object F, string format=<default>);
int count;
@@ -1951,8 +1917,8 @@ void abort(string s=<default>);
bool Aspect;
string hex(pen p);
int hex(string s);
-path brace(pair a, pair b, real amplitude=<default>);
void deactivatequote(picture pic=<default>);
+path brace(pair a, pair b, real amplitude=<default>);
string format(string format, int x, string locale=<default>);
string format(string format, bool forcemath=<default>, string separator, real x, string locale=<default>);
string format(string format=<default>, bool forcemath=<default>, real x, string locale=<default>);
@@ -1981,16 +1947,16 @@ real braceinnerangle;
real braceouterangle;
void tex(frame f, string s);
void tex(frame f, string s, pair min, pair max);
-void tex(picture pic=<default>, string s, pair min, pair max);
void tex(picture pic=<default>, string s);
+void tex(picture pic=<default>, string s, pair min, pair max);
real bracedefaultratio;
bool prconly(string format=<default>);
pen Black;
triple size3(frame f);
void size3(picture pic=<default>, real x, real y=<default>, real z=<default>, bool keepAspect=<default>);
bool eof(file f);
-frame dotframe(pen p=<default>, filltype filltype=<default>);
frame dotframe;
+frame dotframe(pen p=<default>, filltype filltype=<default>);
real realMax;
pair NE;
real realMin;
@@ -2007,7 +1973,6 @@ pair[][] fft(pair[][] a, int sign=<default>);
pair[][][] fft(pair[][][] a, int sign=<default>);
pair SE;
pen nobasealign;
-sCAD operator init();
real animationdelay;
animation operator init();
frame NoBox(frame f);
@@ -2054,6 +2019,16 @@ bsp operator init();
picture operator cast(face f);
face operator cast(path3 p);
void add(picture pic=<default>, face[] faces, projection P=<default>);
+sCAD operator init();
+surface surface(vertex[][] g);
+weighted operator init();
+bucket operator init();
+vertex operator init();
+object operator init();
+vertex[][] contour3(triple[][][] v, real[][][] f, real[][][] midpoint=<default>, projection P=<default>);
+vertex[][] contour3(real[][][] f, real[][][] midpoint=<default>, triple a, triple b, projection P=<default>);
+vertex[][] contour3(real f(real, real, real), triple a, triple b, int nx=<default>, int ny=<default>, int nz=<default>, projection P=<default>);
+real eps;
segment case1(pair p0, pair p1, int edge);
void draw(picture pic=<default>, Label[] L=<default>, guide[][] g, pen[] p);
void draw(picture pic=<default>, Label[] L=<default>, guide[][] g, pen p=<default>);
@@ -2073,15 +2048,6 @@ guide[][] contour(picture pic=<default>, real f(real, real), pair a, pair b, rea
guide[][] contour(picture pic=<default>, real f(pair), pair a, pair b, real[] c, int nx=<default>, int ny=<default>, guide join(... guide[])=<default>);
guide[][] contour(picture pic=<default>, pair[] z, real[] f, real[] c, guide join(... guide[])=<default>);
real eps;
-surface surface(vertex[][] g);
-weighted operator init();
-bucket operator init();
-vertex operator init();
-object operator init();
-vertex[][] contour3(triple[][][] v, real[][][] f, real[][][] midpoint=<default>, projection P=<default>);
-vertex[][] contour3(real[][][] f, real[][][] midpoint=<default>, triple a, triple b, projection P=<default>);
-vertex[][] contour3(real f(real, real, real), triple a, triple b, int nx=<default>, int ny=<default>, int nz=<default>, projection P=<default>);
-real eps;
void draw(TreeNode root, pair pos);
real treeNodeStep;
void drawAll(TreeNode node, frame f);
@@ -2108,12 +2074,12 @@ void drawVertexX(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<de
void drawVertexBox(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>);
void drawVertexBoxO(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
void drawVertexOX(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
-void drawVertexBoxX(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
void drawVertexTriangle(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>);
void drawVertexTriangleO(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
-void do_overpaint(picture pic, path p, pen bgpen, real halfwidth, real vertexangle);
+void drawVertexBoxX(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
pen doublelinepen;
real doublelinespacing;
+void do_overpaint(picture pic, path p, pen bgpen, real halfwidth, real vertexangle);
void texshipout(string stem, picture pic=<default>, bool xalign=<default>);
bool XYAlign;
void drawDoubleLine(picture pic=<default>, path p, pen fgpen=<default>, real dlspacing=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool erasebg=<default>, pen bgpen=<default>, real vertexangle=<default>, real margin=<default>);
@@ -2141,8 +2107,8 @@ pen fermionpen;
pen bigvertexpen;
real bigvertexsize;
real minvertexangle;
-void drawMomArrow(picture pic=<default>, path p, align align, position pos=<default>, real offset=<default>, real length=<default>, pen fgpen=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool erasebg=<default>, pen bgpen=<default>, real margin=<default>);
pen ghostpen;
+void drawMomArrow(picture pic=<default>, path p, align align, position pos=<default>, real offset=<default>, real length=<default>, pen fgpen=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool erasebg=<default>, pen bgpen=<default>, real margin=<default>);
void fmdefaults();
real linemargin;
void drawFermion(picture pic=<default>, path p, pen fgpen=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool erasebg=<default>, pen bgpen=<default>, real vertexangle=<default>, real margin=<default>);
@@ -2187,6 +2153,12 @@ point circumcenter(point A, point B, point C);
point circumcenter(triangle t);
circle circumcircle(point A, point B, point C);
circle circumcircle(triangle t);
+line altitude(vertex V);
+line altitude(side side);
+point isogonalconjugate(triangle t, point M);
+point isogonal(side side, point M);
+line isogonal(vertex V, point M);
+triangle isogonal(triangle t, point M);
point point(coordsys R, pair p, real m=<default>);
point point(explicit pair p, real m);
point point(coordsys R, explicit point M, real m=<default>);
@@ -2217,13 +2189,7 @@ point point(explicit vertex V);
point point(trilinear tri);
point point(circle c, point M);
point point(circle c, explicit vector v);
-line altitude(vertex V);
-line altitude(side side);
bool finite(explicit point p);
-point isogonalconjugate(triangle t, point M);
-point isogonal(side side, point M);
-line isogonal(vertex V, point M);
-triangle isogonal(triangle t, point M);
void dot(picture pic=<default>, Label L, explicit point Z, align align=<default>, string format=<default>, pen p=<default>);
real dot(point A, point B);
real dot(point A, explicit pair B);
@@ -2284,8 +2250,8 @@ bool defined(point P);
string conictype(bqe bqe);
triangle antipedal(triangle t, point M);
void clipdraw(picture pic=<default>, Label L=<default>, path g, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, real xmargin=<default>, real ymargin=<default>, Label legend=<default>, marker marker=<default>);
-int conicnodesfactor;
real perpfactor;
+int conicnodesfactor;
int conicnodesnumber(conic co, real angle1, real angle2, bool dir=<default>);
line hline(coordsys R=<default>);
line hline;
@@ -2309,6 +2275,7 @@ point orthocenter(point A, point B, point C);
point orthocenter(triangle t);
line extend(line l);
point intersectionpoint(line l1, line l2);
+point[] standardizecoordsys(coordsys R=<default>, bool warn=<default> ... point[] M);
pair[] intersectionpoints(pair A, pair B, real a, real b, real c, real d, real f, real g);
pair[] intersectionpoints(pair A, pair B, real[] equation);
point[] intersectionpoints(line l, path g);
@@ -2355,7 +2322,6 @@ point intouch(side side);
triangle intouch(triangle t);
real rf(real x, real y, real z);
bool concurrent(... line[] l);
-point[] standardizecoordsys(coordsys R=<default>, bool warn=<default> ... point[] M);
real inradius(point A, point B, point C);
real inradius(triangle t);
pen addpenline;
@@ -2432,6 +2398,7 @@ int nodesystem;
bool collinear(vector u, vector v);
point centroid(point A, point B, point C);
point centroid(triangle t);
+bool between(point M, point O, point N);
int angularsystem;
path square(pair z1, pair z2);
void filldraw(picture pic=<default>, circle c, pen fillpen=<default>, pen drawpen=<default>);
@@ -2460,7 +2427,6 @@ vector changecoordsys(coordsys R, vector v);
line changecoordsys(coordsys R, line l);
bqe changecoordsys(coordsys R, bqe bqe);
conic changecoordsys(coordsys R, conic co);
-bool between(point M, point O, point N);
real angle(explicit point M, coordsys R=<default>, bool warn=<default>);
real angle(explicit vector v, coordsys R=<default>, bool warn=<default>);
real angle(line l, coordsys R=<default>);
@@ -2513,6 +2479,9 @@ line[] complementary(explicit segment s);
arc complementary(arc a);
point ppoint(arc a, real x);
path fromFocus(conic co, real angle1, real angle2, int n, bool direction);
+segment segment(point A, point B);
+segment segment(line l);
+segment segment(explicit side side);
bool sameside(point M, point N, point O);
bool sameside(point M, point P, line l);
point[] sameside(point M, line l1, line l2);
@@ -2747,9 +2716,6 @@ triangle triangle(line l1, line l2, line l3);
trilinear trilinear(triangle t, real a, real b, real c);
trilinear trilinear(triangle t, point M);
trilinear trilinear(triangle t, real f(real, real, real), real a=<default>, real b=<default>, real c=<default>);
-segment segment(point A, point B);
-segment segment(line l);
-segment segment(explicit side side);
triangle triangleAbc(real alpha, real b, real c, real angle=<default>, point A=<default>);
triangle triangleabc(real a, real b, real c, real angle=<default>, point A=<default>);
triangle anticomplementary(triangle t);
@@ -2769,14 +2735,14 @@ real approximate(real t);
real[] approximate(real[] T);
void markangle(picture pic=<default>, Label L=<default>, int n=<default>, real radius=<default>, real space=<default>, explicit line l1, explicit line l2, explicit pair align=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, pen p=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>, marker marker=<default>);
void markangle(picture pic=<default>, Label L=<default>, int n=<default>, real radius=<default>, real space=<default>, explicit line l1, explicit line l2, explicit vector align, bool arrow(picture, path, pen, marginT(path, pen))=<default>, pen p=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>, marker marker=<default>);
+triangle cevian(triangle t, point P);
+point cevian(side side, point P);
+line cevian(vertex V, point P);
transform hprojection(line l, bool safe=<default>);
point conj(explicit point M);
vector conj(explicit vector u);
hyperbola conj(hyperbola h);
transform vprojection(line l, bool safe=<default>);
-triangle cevian(triangle t, point P);
-point cevian(side side, point P);
-line cevian(vertex V, point P);
parabola parabola(point F, line l);
parabola parabola(point F, point vertex);
parabola parabola(point F, real a, real angle);
@@ -2845,6 +2811,8 @@ string massformat(string format=<default>, string s, mass M);
int relativesystem;
void drawline(picture pic=<default>, triangle t, pen p=<default>);
void addMargins(picture pic=<default>, real lmargin=<default>, real bmargin=<default>, real rmargin=<default>, real tmargin=<default>, bool rigid=<default>, bool allObject=<default>);
+real[] bangles(picture pic=<default>, parabola p);
+real[][] bangles(picture pic=<default>, hyperbola h);
triangle medial(triangle t);
line median(vertex V);
line median(side side);
@@ -2863,8 +2831,127 @@ abscissa curabscissa(ellipse el, point M);
abscissa curabscissa(parabola p, point M);
abscissa curabscissa(conic co, point M);
abscissa curabscissa(arc a, point M);
-real[] bangles(picture pic=<default>, parabola p);
-real[][] bangles(picture pic=<default>, hyperbola h);
+locateT operator init();
+void Straight(flatguide3)(... void(flatguide3)[]);
+void graph(flatguide3)(triple F(real), real, real, int)(void join(flatguide3)(... void(flatguide3)[]));
+void(flatguide3)[] graph(triple F(real), real, real, int)(void join(flatguide3)(... void(flatguide3)[]), bool3 cond(real));
+void graph(flatguide3)(picture pic=<default>, real x(real), real y(real), real z(real), real a, real b, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void(flatguide3)[] graph(picture pic=<default>, real x(real), real y(real), real z(real), real a, real b, int n=<default>, bool3 cond(real), void join(flatguide3)(... void(flatguide3)[])=<default>);
+void graph(flatguide3)(picture pic=<default>, triple v(real), real a, real b, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void(flatguide3)[] graph(picture pic=<default>, triple v(real), real a, real b, int n=<default>, bool3 cond(real), void join(flatguide3)(... void(flatguide3)[])=<default>);
+void graph(flatguide3)(picture pic=<default>, triple[] v, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void(flatguide3)[] graph(picture pic=<default>, triple[] v, bool3[] cond, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void graph(flatguide3)(picture pic=<default>, real[] x, real[] y, real[] z, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void(flatguide3)[] graph(picture pic=<default>, real[] x, real[] y, real[] z, bool3[] cond, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void graph(flatguide3)(triple F(path, real), path p, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void graph(flatguide3)(triple F(pair), path p, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void graph(flatguide3)(picture pic=<default>, real f(pair), path p, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void graph(flatguide3)(real f(pair), path p, int n=<default>, real T(pair), void join(flatguide3)(... void(flatguide3)[])=<default>);
+void(flatguide3)[][] lift(real f(real x, real y), guide[][] g, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void(flatguide3)[][] lift(real f(pair z), guide[][] g, void join(flatguide3)(... void(flatguide3)[])=<default>);
+triple polar(real r, real theta, real phi);
+void polargraph(flatguide3)(real r(real, real), real theta(real), real phi(real), int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void xaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
+void yaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
+void zaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real zmin=<default>, real zmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
+void xaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
+void yaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
+void zaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real zmin=<default>, real zmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
+bool uperiodic(real[][] a);
+bool uperiodic(triple[][] a);
+bool vperiodic(real[][] a);
+bool vperiodic(triple[][] a);
+void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
+void axis(picture pic=<default>, Label L=<default>, path3 g, path3 g2=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>), ticklocate locate, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, int[] divisor=<default>, bool above=<default>, bool opposite=<default>);
+void Bounds(picture, axisT)(int type=<default>, int type2=<default>, triple align=<default>, bool extend=<default>);
+void Bounds(picture, axisT);
+void XZZero(picture, axisT)(triple align=<default>, bool extend=<default>);
+void XZZero(picture, axisT);
+void YZZero(picture, axisT)(triple align=<default>, bool extend=<default>);
+void YZZero(picture, axisT);
+surface surface(picture pic=<default>, triple[][] f, bool[][] cond=<default>);
+surface surface(picture pic=<default>, real[][] f, real[] x, real[] y, real[] xsplinetype(real[], real[])=<default>, real[] ysplinetype(real[], real[])=<default>, bool[][] cond=<default>);
+surface surface(picture pic=<default>, real[][] f, pair a, pair b, real[] xsplinetype(real[], real[]), real[] ysplinetype(real[], real[])=<default>, bool[][] cond=<default>);
+surface surface(picture pic=<default>, real[][] f, pair a, pair b, bool[][] cond=<default>);
+surface surface(picture pic=<default>, triple f(pair z), pair a, pair b, int nu=<default>, int nv=<default>, bool cond(pair z)=<default>);
+surface surface(picture pic=<default>, triple f(pair z), real[] u, real[] v, real[](real[], real[])[] usplinetype, real[](real[], real[])[] vsplinetype=<default>, bool cond(pair z)=<default>);
+surface surface(picture pic=<default>, triple f(pair z), pair a, pair b, int nu=<default>, int nv=<default>, real[](real[], real[])[] usplinetype, real[](real[], real[])[] vsplinetype=<default>, bool cond(pair z)=<default>);
+surface surface(picture pic=<default>, real f(pair z), pair a, pair b, int nx=<default>, int ny=<default>, bool cond(pair z)=<default>);
+surface surface(picture pic=<default>, real f(pair z), pair a, pair b, int nx=<default>, int ny=<default>, real[] xsplinetype(real[], real[]), real[] ysplinetype(real[], real[])=<default>, bool cond(pair z)=<default>);
+void XYEquals(picture, axisT)(real x, real y, triple align=<default>, bool extend=<default>);
+triple Dir(real)(triple dir);
+void draw(picture pic=<default>, Label[] L=<default>, void(flatguide3)[][] g, pen[] p, light light=<default>, string name=<default>, render render=<default>, interaction interaction=<default>);
+void draw(picture pic=<default>, Label[] L=<default>, void(flatguide3)[][] g, pen p=<default>, light light=<default>, string name=<default>, render render=<default>, interaction interaction=<default>);
+void Ticks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks=<default>, real[] ticks=<default>, int N=<default>, bool begin=<default>, bool end=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void Ticks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+real maxlength(triple f(pair z), pair a, pair b, int nu, int nv);
+void drawtick(picture pic, real[][] T, path3 g, path3 g2, ticklocate locate, real val, real Size, int sign, pen p, bool extend);
+triple tickMin3(picture pic);
+triple tickMax3(picture pic);
+triple Scale(picture pic=<default>, triple v);
+triple[][] Scale(picture pic=<default>, triple[][] P);
+real ScaleX(picture pic=<default>, real x);
+real ScaleY(picture pic=<default>, real y);
+real ScaleZ(picture pic=<default>, real z);
+real[][] ScaleZ(picture pic=<default>, real[][] P);
+picture vectorfield(path3 vector(pair v), triple f(pair z), pair a, pair b, int nu=<default>, int nv=<default>, bool truesize=<default>, real maxlength=<default>, bool cond(pair z)=<default>, pen p=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, string name=<default>, render render=<default>);
+path3 Circle(triple c, real r, triple normal=<default>, int n=<default>);
+void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
+void Spline(flatguide3)(... void(flatguide3)[]);
+void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
+void axes3(picture pic=<default>, Label xlabel=<default>, Label ylabel=<default>, Label zlabel=<default>, bool extend=<default>, triple min=<default>, triple max=<default>, pen p=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>);
+void label(picture pic, Label L, triple v, real x, align align, string format, pen p);
+void labelx(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
+void labelx3(picture pic=<default>, Label L=<default>, real x, align align=<default>, string format=<default>, pen p=<default>);
+void labeltick(picture pic, real[][] T, path3 g, ticklocate locate, real val, int sign, real Size, string ticklabel(real), Label F, real norm=<default>);
+void labelaxis(picture pic, real[][] T, Label L, path3 g, ticklocate locate=<default>, int sign=<default>, bool ticklabels=<default>);
+void labely(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
+void labely3(picture pic=<default>, Label L=<default>, real y, align align=<default>, string format=<default>, pen p=<default>);
+void labelz(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
+void labelz3(picture pic=<default>, Label L=<default>, real z, align align=<default>, string format=<default>, pen p=<default>);
+void autoscale3(picture pic=<default>, void axis(picture, axisT));
+void xtick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
+void xtick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+void xtick3(picture pic=<default>, real x, triple dir=<default>, real size=<default>, pen p=<default>);
+void xtick3(picture pic=<default>, Label L, real x, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+void ytick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
+void ytick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+void ytick3(picture pic=<default>, real y, triple dir=<default>, real size=<default>, pen p=<default>);
+void ytick3(picture pic=<default>, Label L, real y, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+void ztick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
+void ztick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+void ztick3(picture pic=<default>, real z, triple dir=<default>, real size=<default>, pen p=<default>);
+void ztick3(picture pic=<default>, Label L, real z, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+triple defaultdir(triple X, triple Y, triple Z, bool opposite=<default>, projection P);
+real xtrans(real[][] t, real x);
+real ytrans(real[][] t, real y);
+real ztrans(real[][] t, real z);
+ticklocate ticklocate(real a, real b, autoscaleT S=<default>, real tickmin=<default>, real tickmax=<default>, real time(real)=<default>, triple dir(real));
+triple ticklabelshift(triple align, pen p=<default>);
+path3 Arc(triple c, triple v1, triple v2, triple normal=<default>, bool direction=<default>, int n=<default>);
+path3 Arc(triple c, real r, real theta1, real phi1, real theta2, real phi2, triple normal=<default>, bool direction, int n=<default>);
+path3 Arc(triple c, real r, real theta1, real phi1, real theta2, real phi2, triple normal=<default>, int n=<default>);
+void limits(picture pic=<default>, triple min, triple max);
+void XZEquals(picture, axisT)(real x, real z, triple align=<default>, bool extend=<default>);
+void YZEquals(picture, axisT)(real y, real z, triple align=<default>, bool extend=<default>);
+void XYZero(picture, axisT)(triple align=<default>, bool extend=<default>);
+void XYZero(picture, axisT);
+void zlimits(picture pic=<default>, real min=<default>, real max=<default>, bool crop=<default>);
+void tick(picture pic=<default>, triple v, triple dir, real size=<default>, pen p=<default>);
+void tick(picture pic=<default>, Label L, real value, triple v, triple dir, string format=<default>, real size=<default>, pen p=<default>);
+surface bispline(real[][] z, real[][] p, real[][] q, real[][] r, real[] x, real[] y, bool[][] cond=<default>);
+real[][][] bispline(real[][] f, real[] x, real[] y, real[] xsplinetype(real[], real[])=<default>, real[] ysplinetype(real[], real[])=<default>, bool[][] cond=<default>);
+real[][][] bispline0(real[][] z, real[][] p, real[][] q, real[][] r, real[] x, real[] y, bool[][] cond=<default>);
+path3[] segment(triple[] v, bool[] cond, void join(flatguide3)(... void(flatguide3)[])=<default>);
+real[] uniform(real T(real x), real Tinv(real x), real a, real b, int n);
+void NoTicks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)();
+void NoTicks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
string DefaultFormat(real);
string DefaultLogFormat(real)(int base);
string DefaultLogFormat(real);
@@ -2908,9 +2995,6 @@ picture vectorfield(path vector(pair), pair a, pair b, int nx=<default>, int ny=
string OmitFormat(real)(string s=<default> ... real[] x);
guide Straight(... guide[]);
int Min;
-tickvalues OmitTickIntervals(tickvalues)(real[] a, real[] b);
-tickvalues OmitTickInterval(tickvalues)(real a, real b);
-tickvalues OmitTick(tickvalues)(... real[] x);
string trailingzero;
void label(picture pic, Label L, pair z, real x, align align, string format, pen p);
void labelx(picture pic=<default>, Label L=<default>, explicit pair z, align align=<default>, string format=<default>, pen p=<default>);
@@ -2919,13 +3003,14 @@ void labelx(picture pic=<default>, Label L, string format=<default>, explicit pe
path Arc(pair c, real r, real angle1, real angle2, bool direction, int n=<default>);
path Arc(pair c, real r, real angle1, real angle2, int n=<default>);
path Arc(pair c, explicit pair z1, explicit pair z2, bool direction=<default>, int n=<default>);
+pair labeltick(frame d, transform T, path g, ticklocate locate, real val, pair side, int sign, real Size, string ticklabel(real), Label F, real norm=<default>);
+void labelaxis(frame f, transform T, Label L, path g, ticklocate locate=<default>, int sign=<default>, bool ticklabels=<default>);
void labely(picture pic=<default>, Label L=<default>, explicit pair z, align align=<default>, string format=<default>, pen p=<default>);
void labely(picture pic=<default>, Label L=<default>, real y, align align=<default>, string format=<default>, pen p=<default>);
void labely(picture pic=<default>, Label L, string format=<default>, explicit pen p=<default>);
-pair labeltick(frame d, transform T, path g, ticklocate locate, real val, pair side, int sign, real Size, string ticklabel(real), Label F, real norm=<default>);
-void labelaxis(frame f, transform T, Label L, path g, ticklocate locate=<default>, int sign=<default>, bool ticklabels=<default>);
-picture secondaryX(picture primary=<default>, void f(picture));
-picture secondaryY(picture primary=<default>, void f(picture));
+tickvalues OmitTickIntervals(tickvalues)(real[] a, real[] b);
+tickvalues OmitTickInterval(tickvalues)(real a, real b);
+tickvalues OmitTick(tickvalues)(... real[] x);
void xtick(picture pic=<default>, explicit pair z, pair dir=<default>, real size=<default>, pen p=<default>);
void xtick(picture pic=<default>, real x, pair dir=<default>, real size=<default>, pen p=<default>);
void xtick(picture pic=<default>, Label L, explicit pair z, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
@@ -2934,6 +3019,8 @@ void ytick(picture pic=<default>, explicit pair z, pair dir=<default>, real size
void ytick(picture pic=<default>, real y, pair dir=<default>, real size=<default>, pen p=<default>);
void ytick(picture pic=<default>, Label L, explicit pair z, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
void ytick(picture pic=<default>, Label L, real y, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+picture secondaryX(picture primary=<default>, void f(picture));
+picture secondaryY(picture primary=<default>, void f(picture));
Label Break;
tickvalues Break(tickvalues)(real, real);
scaleT Linear;
@@ -2941,12 +3028,8 @@ scaleT Linear(bool automin=<default>, bool automax=<default>, real s=<default>,
pair tickMin(picture pic);
pair tickMax(picture pic);
string autoformat(string format=<default>, real norm ... real[] a);
-void xaxisAt(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool opposite=<default>);
real linear(real)(real S(real x)=<default>, real Min, real Max);
pair polar(real r, real theta);
-void yaxisAt(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool opposite=<default>);
-void xaxis(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
-void yaxis(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool autorotate=<default>);
string Format(real)(string s=<default>);
guide polargraph(picture pic=<default>, real r(real), real a, real b, int n=<default>, guide join(... guide[])=<default>);
guide polargraph(picture pic=<default>, real[] r, real[] theta, guide join(... guide[])=<default>);
@@ -2958,6 +3041,10 @@ string NoZeroFormat(real);
guide Hermite(... guide[])(real[] splinetype(real[], real[]));
guide Hermite(... guide[]);
path Circle(pair c, real r, int n=<default>);
+void xaxisAt(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool opposite=<default>);
+void yaxisAt(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool opposite=<default>);
+void xaxis(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
+void yaxis(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool autorotate=<default>);
bool axiscoverage(int N, transform T, path g, ticklocate locate, real Step, pair side, int sign, real Size, Label F, string ticklabel(real), real norm, real limit);
scaleT Broken(real a, real b, bool automin=<default>, bool automax=<default>);
scaleT BrokenLog(real a, real b, bool automin=<default>, bool automax=<default>);
@@ -2967,6 +3054,7 @@ void Ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, p
void Ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
void Ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>);
string noprimary;
+path[] segment(pair[] z, bool[] cond, guide join(... guide[])=<default>);
void xequals(picture pic=<default>, Label L=<default>, real x, bool extend=<default>, real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
void yequals(picture pic=<default>, Label L=<default>, real y, bool extend=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
pair Scale(picture pic=<default>, pair z);
@@ -2990,7 +3078,6 @@ axisT operator init();
int Both;
void axes(picture pic=<default>, Label xlabel=<default>, Label ylabel=<default>, bool extend=<default>, pair min=<default>, pair max=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
string signedtrailingzero;
-path[] segment(pair[] z, bool[] cond, guide join(... guide[])=<default>);
ticklocate ticklocate(real a, real b, autoscaleT S=<default>, real tickmin=<default>, real tickmax=<default>, real time(real)=<default>, pair dir(real)=<default>);
pair ticklabelshift(pair align, pen p=<default>);
pair zero(real);
@@ -3024,127 +3111,6 @@ void autoscale(picture pic=<default>, void axis(picture, axisT));
guide Spline(... guide[]);
void LeftRight(picture, axisT)(bool extend=<default>);
void LeftRight(picture, axisT);
-path3[] segment(triple[] v, bool[] cond, void join(flatguide3)(... void(flatguide3)[])=<default>);
-locateT operator init();
-void Straight(flatguide3)(... void(flatguide3)[]);
-void graph(flatguide3)(triple F(real), real, real, int)(void join(flatguide3)(... void(flatguide3)[]));
-void(flatguide3)[] graph(triple F(real), real, real, int)(void join(flatguide3)(... void(flatguide3)[]), bool3 cond(real));
-void graph(flatguide3)(picture pic=<default>, real x(real), real y(real), real z(real), real a, real b, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void(flatguide3)[] graph(picture pic=<default>, real x(real), real y(real), real z(real), real a, real b, int n=<default>, bool3 cond(real), void join(flatguide3)(... void(flatguide3)[])=<default>);
-void graph(flatguide3)(picture pic=<default>, triple v(real), real a, real b, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void(flatguide3)[] graph(picture pic=<default>, triple v(real), real a, real b, int n=<default>, bool3 cond(real), void join(flatguide3)(... void(flatguide3)[])=<default>);
-void graph(flatguide3)(picture pic=<default>, triple[] v, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void(flatguide3)[] graph(picture pic=<default>, triple[] v, bool3[] cond, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void graph(flatguide3)(picture pic=<default>, real[] x, real[] y, real[] z, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void(flatguide3)[] graph(picture pic=<default>, real[] x, real[] y, real[] z, bool3[] cond, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void graph(flatguide3)(triple F(path, real), path p, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void graph(flatguide3)(triple F(pair), path p, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void graph(flatguide3)(picture pic=<default>, real f(pair), path p, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void graph(flatguide3)(real f(pair), path p, int n=<default>, real T(pair), void join(flatguide3)(... void(flatguide3)[])=<default>);
-void(flatguide3)[][] lift(real f(real x, real y), guide[][] g, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void(flatguide3)[][] lift(real f(pair z), guide[][] g, void join(flatguide3)(... void(flatguide3)[])=<default>);
-triple polar(real r, real theta, real phi);
-void polargraph(flatguide3)(real r(real, real), real theta(real), real phi(real), int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
-bool uperiodic(real[][] a);
-bool uperiodic(triple[][] a);
-bool vperiodic(real[][] a);
-bool vperiodic(triple[][] a);
-void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
-void axis(picture pic=<default>, Label L=<default>, path3 g, path3 g2=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>), ticklocate locate, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, int[] divisor=<default>, bool above=<default>, bool opposite=<default>);
-void Bounds(picture, axisT)(int type=<default>, int type2=<default>, triple align=<default>, bool extend=<default>);
-void Bounds(picture, axisT);
-void xaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
-void yaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
-void zaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real zmin=<default>, real zmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
-void xaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
-void yaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
-void zaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real zmin=<default>, real zmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
-void XZZero(picture, axisT)(triple align=<default>, bool extend=<default>);
-void XZZero(picture, axisT);
-void YZZero(picture, axisT)(triple align=<default>, bool extend=<default>);
-void YZZero(picture, axisT);
-surface surface(picture pic=<default>, triple[][] f, bool[][] cond=<default>);
-surface surface(picture pic=<default>, real[][] f, real[] x, real[] y, real[] xsplinetype(real[], real[])=<default>, real[] ysplinetype(real[], real[])=<default>, bool[][] cond=<default>);
-surface surface(picture pic=<default>, real[][] f, pair a, pair b, real[] xsplinetype(real[], real[]), real[] ysplinetype(real[], real[])=<default>, bool[][] cond=<default>);
-surface surface(picture pic=<default>, real[][] f, pair a, pair b, bool[][] cond=<default>);
-surface surface(picture pic=<default>, triple f(pair z), pair a, pair b, int nu=<default>, int nv=<default>, bool cond(pair z)=<default>);
-surface surface(picture pic=<default>, triple f(pair z), real[] u, real[] v, real[](real[], real[])[] usplinetype, real[](real[], real[])[] vsplinetype=<default>, bool cond(pair z)=<default>);
-surface surface(picture pic=<default>, triple f(pair z), pair a, pair b, int nu=<default>, int nv=<default>, real[](real[], real[])[] usplinetype, real[](real[], real[])[] vsplinetype=<default>, bool cond(pair z)=<default>);
-surface surface(picture pic=<default>, real f(pair z), pair a, pair b, int nx=<default>, int ny=<default>, bool cond(pair z)=<default>);
-surface surface(picture pic=<default>, real f(pair z), pair a, pair b, int nx=<default>, int ny=<default>, real[] xsplinetype(real[], real[]), real[] ysplinetype(real[], real[])=<default>, bool cond(pair z)=<default>);
-void XYEquals(picture, axisT)(real x, real y, triple align=<default>, bool extend=<default>);
-triple Dir(real)(triple dir);
-void draw(picture pic=<default>, Label[] L=<default>, void(flatguide3)[][] g, pen[] p, light light=<default>, string name=<default>, render render=<default>, interaction interaction=<default>);
-void draw(picture pic=<default>, Label[] L=<default>, void(flatguide3)[][] g, pen p=<default>, light light=<default>, string name=<default>, render render=<default>, interaction interaction=<default>);
-void Ticks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks=<default>, real[] ticks=<default>, int N=<default>, bool begin=<default>, bool end=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void Ticks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-real maxlength(triple f(pair z), pair a, pair b, int nu, int nv);
-void drawtick(picture pic, real[][] T, path3 g, path3 g2, ticklocate locate, real val, real Size, int sign, pen p, bool extend);
-triple tickMin3(picture pic);
-triple tickMax3(picture pic);
-triple Scale(picture pic=<default>, triple v);
-triple[][] Scale(picture pic=<default>, triple[][] P);
-real ScaleX(picture pic=<default>, real x);
-real ScaleY(picture pic=<default>, real y);
-real ScaleZ(picture pic=<default>, real z);
-real[][] ScaleZ(picture pic=<default>, real[][] P);
-picture vectorfield(path3 vector(pair v), triple f(pair z), pair a, pair b, int nu=<default>, int nv=<default>, bool truesize=<default>, real maxlength=<default>, bool cond(pair z)=<default>, pen p=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, string name=<default>, render render=<default>);
-path3 Circle(triple c, real r, triple normal=<default>, int n=<default>);
-void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
-void Spline(flatguide3)(... void(flatguide3)[]);
-void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
-void axes3(picture pic=<default>, Label xlabel=<default>, Label ylabel=<default>, Label zlabel=<default>, bool extend=<default>, triple min=<default>, triple max=<default>, pen p=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>);
-void label(picture pic, Label L, triple v, real x, align align, string format, pen p);
-void labelx(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
-void labely(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
-void labeltick(picture pic, real[][] T, path3 g, ticklocate locate, real val, int sign, real Size, string ticklabel(real), Label F, real norm=<default>);
-void labelaxis(picture pic, real[][] T, Label L, path3 g, ticklocate locate=<default>, int sign=<default>, bool ticklabels=<default>);
-void labelx3(picture pic=<default>, Label L=<default>, real x, align align=<default>, string format=<default>, pen p=<default>);
-void labely3(picture pic=<default>, Label L=<default>, real y, align align=<default>, string format=<default>, pen p=<default>);
-void labelz(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
-void labelz3(picture pic=<default>, Label L=<default>, real z, align align=<default>, string format=<default>, pen p=<default>);
-void autoscale3(picture pic=<default>, void axis(picture, axisT));
-void xtick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
-void xtick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-void ytick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
-void ytick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-void xtick3(picture pic=<default>, real x, triple dir=<default>, real size=<default>, pen p=<default>);
-void xtick3(picture pic=<default>, Label L, real x, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-void ytick3(picture pic=<default>, real y, triple dir=<default>, real size=<default>, pen p=<default>);
-void ytick3(picture pic=<default>, Label L, real y, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-void ztick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
-void ztick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-void ztick3(picture pic=<default>, real z, triple dir=<default>, real size=<default>, pen p=<default>);
-void ztick3(picture pic=<default>, Label L, real z, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-triple defaultdir(triple X, triple Y, triple Z, bool opposite=<default>, projection P);
-real xtrans(real[][] t, real x);
-real ytrans(real[][] t, real y);
-real ztrans(real[][] t, real z);
-ticklocate ticklocate(real a, real b, autoscaleT S=<default>, real tickmin=<default>, real tickmax=<default>, real time(real)=<default>, triple dir(real));
-triple ticklabelshift(triple align, pen p=<default>);
-path3 Arc(triple c, triple v1, triple v2, triple normal=<default>, bool direction=<default>, int n=<default>);
-path3 Arc(triple c, real r, real theta1, real phi1, real theta2, real phi2, triple normal=<default>, bool direction, int n=<default>);
-path3 Arc(triple c, real r, real theta1, real phi1, real theta2, real phi2, triple normal=<default>, int n=<default>);
-void limits(picture pic=<default>, triple min, triple max);
-void XZEquals(picture, axisT)(real x, real z, triple align=<default>, bool extend=<default>);
-void YZEquals(picture, axisT)(real y, real z, triple align=<default>, bool extend=<default>);
-void XYZero(picture, axisT)(triple align=<default>, bool extend=<default>);
-void XYZero(picture, axisT);
-void zlimits(picture pic=<default>, real min=<default>, real max=<default>, bool crop=<default>);
-void tick(picture pic=<default>, triple v, triple dir, real size=<default>, pen p=<default>);
-void tick(picture pic=<default>, Label L, real value, triple v, triple dir, string format=<default>, real size=<default>, pen p=<default>);
-surface bispline(real[][] z, real[][] p, real[][] q, real[][] r, real[] x, real[] y, bool[][] cond=<default>);
-real[][][] bispline(real[][] f, real[] x, real[] y, real[] xsplinetype(real[], real[])=<default>, real[] ysplinetype(real[], real[])=<default>, bool[][] cond=<default>);
-real[][][] bispline0(real[][] z, real[][] p, real[][] q, real[][] r, real[] x, real[] y, bool[][] cond=<default>);
-real[] uniform(real T(real x), real Tinv(real x), real a, real b, int n);
-void NoTicks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)();
-void NoTicks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
bool Crop;
int ngraph;
real epsilon;
@@ -3179,9 +3145,9 @@ grid3(picture pic)[][] operator cast(grid3 gridroutine(picture pic));
triple X(picture pic);
triple Y(picture pic);
triple Z(picture pic);
+position middle;
grid3(picture pic)[] XYXgrid(position pos=<default>);
grid3(picture pic)[] XYXgrid;
-position middle;
grid3(picture pic)[] XY_XZgrid(position posa=<default>, position posb=<default>);
grid3(picture pic)[] XY_XZgrid;
grid3(picture pic)[] ZX_ZYgrid(position posa=<default>, position posb=<default>);
@@ -3190,19 +3156,19 @@ grid3 XYgrid(picture pic)(position pos=<default>);
grid3 XYgrid(picture pic);
grid3 ZYgrid(picture pic)(position pos=<default>);
grid3 ZYgrid(picture pic);
+void xaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
+void yaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
+void zaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
void grid3(picture pic=<default>, grid3(picture pic)[][] gridroutine=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, pen pGrid=<default>, pen pgrid=<default>, bool above=<default>);
void grid3(picture pic=<default>, grid3(picture pic)[][] gridroutine, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, pen[] pGrid, pen[] pgrid, bool above=<default>);
ticksgridT OutTicks()(Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, real Size=<default>, real size=<default>, pen pTick=<default>, pen ptick=<default>, grid3(picture pic)[][] gridroutine, pen pGrid=<default>, pen pgrid=<default>);
triple YZ(picture pic);
-void xaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
-void yaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
-void zaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
triple ZX(picture pic);
grid3(picture pic)[] ZXZgrid(position pos=<default>);
grid3(picture pic)[] ZXZgrid;
-position top;
grid3(picture pic)[] XZXgrid(position pos=<default>);
grid3(picture pic)[] XZXgrid;
+position top;
ticksgridT InTicks()(Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, real Size=<default>, real size=<default>, pen pTick=<default>, pen ptick=<default>, grid3(picture pic)[][] gridroutine, pen pGrid=<default>, pen pgrid=<default>);
ticksgridT InOutTicks()(Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, real Size=<default>, real size=<default>, pen pTick=<default>, pen ptick=<default>, grid3(picture pic)[][] gridroutine, pen pGrid=<default>, pen pgrid=<default>);
grid3(picture pic)[] YX_YZgrid(position posa=<default>, position posb=<default>);
@@ -3229,16 +3195,16 @@ horner diffdiv(real[] x, real[] y);
horner hdiffdiv(real[] x, real[] y, real[] dy);
horner operator init();
real fhorner(real)(horner sh);
-void labelpath(frame f, Label L, path g, string justify=<default>, pen p=<default>);
-void labelpath(picture pic=<default>, Label L, path g, string justify=<default>, pen p=<default>);
-string LeftJustified;
-string Centered;
-string RightJustified;
surface labelpath(string s, path3 p, real angle=<default>, triple optional=<default>);
triple[] firstframe(path3 p, triple optional=<default>);
triple[] nextframe(path3 p, real reltimestart, triple[] start, real reltimeend, int subdiv=<default>);
real eps;
triple nextnormal(triple p, triple q);
+void labelpath(frame f, Label L, path g, string justify=<default>, pen p=<default>);
+void labelpath(picture pic=<default>, Label L, path g, string justify=<default>, pen p=<default>);
+string LeftJustified;
+string Centered;
+string RightJustified;
string[] lm_infmsg;
void lm_qrfac(int m, int n, real[] a, bool pivot, int[] ipvt, real[] rdiag, real[] acnorm, real[] wa);
void lm_qrsolv(int n, real[] r, int ldr, int[] ipvt, real[] diag, real[] qtb, real[] x, real[] sdiag, real[] wa);
@@ -3326,6 +3292,8 @@ bool rectangular(triple[][] m);
bool polygon(path p);
pair unityroot(int n, int k=<default>);
real acot(real x);
+int[][] segmentlimits(bool[] b);
+int[][] segment(bool[] b);
pair[][] fft(pair[][] a, int sign=<default>);
real slope(path g, real x, int n=<default>, real fuzz=<default>);
real slope(path g, explicit pair z, int n=<default>, real fuzz=<default>);
@@ -3333,8 +3301,6 @@ picture grid(int Nx, int Ny, pen p=<default>);
rootfinder_settings operator init();
real frac(real x);
real asec(real x);
-int[][] segmentlimits(bool[] b);
-int[][] segment(bool[] b);
real time(path g, real x, int n=<default>, real fuzz=<default>);
real time(path g, explicit pair z, int n=<default>, real fuzz=<default>);
real[] leastsquares(real[][] A, real[] b, bool warn=<default>);
@@ -3479,11 +3445,14 @@ void simplexPhase2();
int[] artificialColumn;
void simplexWrite(rational[][] E, int[] Bindices, int, int);
path roundedpath(path A, real R, real S=<default>);
+problem operator init();
simplex operator init();
+void nextpage(pen p=<default>);
void display(frame[] f, real margin=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
void display(frame f, real margin=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
void display(string[] s, real margin=<default>, string[] captions=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
void display(string s, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
+void filecode(bool center=<default>, string s, pen p=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>);
void multifigure(string[] slist, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool step=<default>);
void subitem(string s, pen p=<default>);
pen pagenumberpen;
@@ -3496,21 +3465,21 @@ pen foregroundcolor;
void bibliography(string name);
void bibliographystyle(string name);
int[] lastnode;
-void item(string s, pen p=<default>, bool step=<default>);
real aboveequationskip;
void asyfigure(string s, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, filltype filltype=<default>, bool newslide=<default>);
void asyfilecode(bool center=<default>, string s, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>, bool newslide=<default>);
bool itemstep;
real itemskip;
void remark(bool center=<default>, string s, pair align=<default>, pen p=<default>, real indent=<default>, bool minipage=<default>, real skip=<default>, filltype filltype=<default>, bool step=<default>);
-pen authorpen;
void usersetting();
+void item(string s, pen p=<default>, bool step=<default>);
bool landscape;
-string cropcode(string s);
+pen authorpen;
real codeskip;
+string cropcode(string s);
+void newslide(bool stepping=<default>);
bool allowstepping;
pair currentposition;
-void newslide(bool stepping=<default>);
pen itempen;
bool reverse;
void reversevideo();
@@ -3527,10 +3496,10 @@ void normalvideo();
void title(string s, pair position=<default>, pair align=<default>, pen p=<default>, bool newslide=<default>);
pen titlepen;
real titleskip;
-pair titlealign;
pair dateskip;
-void titlepage(string title, string author, string institution=<default>, string date=<default>, string url=<default>, bool newslide=<default>);
+pair titlealign;
pen titlepagepen;
+void titlepage(string title, string author, string institution=<default>, string date=<default>, string url=<default>, bool newslide=<default>);
pair titlepageposition;
pen codepen;
void erasestep(int erasenode);
@@ -3550,24 +3519,22 @@ string newbulletcolor;
pen datepen;
void incrementposition(pair z);
pen institutionpen;
-int page;
void skip(real n=<default>);
bool stepping;
real pagemargin;
pen steppagenumberpen;
+int page;
bool empty();
void currentexitfunction();
void step();
string[] codefile;
void outline(string s=<default>, pair position=<default>, pair align=<default>, pen p=<default>);
void center(string s, pen p=<default>);
-void nextpage(pen p=<default>);
void equation(string s, pen p=<default>);
void equations(string s, pen p=<default>);
void asyinclude(string s, real xsize=<default>, real ysize=<default>);
void figure(string[] s, string options=<default>, real margin=<default>, string[] captions=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
void figure(string s, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
-void filecode(bool center=<default>, string s, pen p=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>);
real figureborder;
pen figuremattpen;
string bullet;
@@ -3620,12 +3587,12 @@ string operator cast(positionedvector vv);
triple operator cast(evaluatedpoint p);
surface implicitsurface(real f(triple)=<default>, real ff(real, real, real)=<default>, triple a, triple b, int n=<default>, bool keyword overlapedges=<default>, int keyword nx=<default>, int keyword ny=<default>, int keyword nz=<default>, int keyword maxdepth=<default>, bool keyword usetriangles=<default>);
bool operator ==(edge a, edge b);
-int NULL_VERTEX;
patch[] triangletoquads(path3 external, real f(triple), triple grad(triple), triple a, triple b);
patch trianglewithnormals(path3 external, triple n1, triple n2, triple n3);
-real B03(real t);
+int NULL_VERTEX;
evaluatedpoint[][][] make3dgrid(triple a, triple b, int nx, int ny, int nz, real f(triple), bool allowzero=<default>);
real B33(real t);
+real B03(real t);
evaluatedpoint[][] slice(evaluatedpoint[][] a, int start1, int end1, int start2, int end2);
evaluatedpoint[][][] slice(evaluatedpoint[][][] a, int start1, int end1, int start2, int end2, int start3, int end3);
positionedvector[][] slice(positionedvector[][] a, int start1, int end1, int start2, int end2);
@@ -3643,13 +3610,13 @@ path[] cylinder(path3 base, real h, triple axis=<default>, projection P);
revolution cylinder(triple c=<default>, real r, real h, triple axis=<default>);
revolution cone(triple c=<default>, real r, real h, triple axis=<default>, int n=<default>);
real rms(real[] A);
-real stdev(real[] A);
int[] frequency(real[] data, real[] bins);
int[] frequency(real[] data, real a, real b, int n);
int[][] frequency(real[] x, real[] y, real[] xbins, real[] ybins);
int[][] frequency(real[] x, real[] y, pair a, pair b, int nx, int ny=<default>);
int[][] frequency(pair[] z, pair a, pair b, int nx, int ny=<default>);
real mean(real[] A);
+real stdev(real[] A);
int bins(real[] data, int max=<default>);
path topbox(pair a, pair b);
path halfbox(pair a, pair b);
@@ -3664,16 +3631,16 @@ linefit operator init();
real skewness(real[] A);
linefit leastsquares(real[] x, real[] y);
linefit leastsquares(real[] x, real[] y, real[] w);
-void histogram(picture pic=<default>, real[] bins, real[] count, real low=<default>, pen fillpen=<default>, pen drawpen=<default>, bool bars=<default>, Label legend=<default>, real markersize=<default>);
-void histogram(picture pic=<default>, real[] data, real a, real b, int n, bool normalize=<default>, real low=<default>, pen fillpen=<default>, pen drawpen=<default>, bool bars=<default>, Label legend=<default>, real markersize=<default>);
real kurtosis(real[] A);
real kurtosisexcess(real[] A);
+void histogram(picture pic=<default>, real[] bins, real[] count, real low=<default>, pen fillpen=<default>, pen drawpen=<default>, bool bars=<default>, Label legend=<default>, real markersize=<default>);
+void histogram(picture pic=<default>, real[] data, real a, real b, int n, bool normalize=<default>, real low=<default>, pen fillpen=<default>, pen drawpen=<default>, bool bars=<default>, Label legend=<default>, real markersize=<default>);
pair[] endpoints(guide[] a);
Relation r3;
-Braid apply(Relation r, Braid b, int step, int place);
picture tableau(frame[] cards, bool number=<default>);
pair min(pair[] z);
Component bp;
+Braid apply(Relation r, Braid b, int step, int place);
Component phi;
real gapfactor;
Component bm;
@@ -3684,30 +3651,27 @@ Braid operator init();
Relation operator init();
Syzygy operator init();
real hwratio;
-Relation r4a;
Relation r4b;
+Relation r4a;
pair max(pair[] z);
pen Orchid;
pen Magenta;
pen BrickRed;
pen CadetBlue;
-pen Aquamarine;
pen CarnationPink;
pen SpringGreen;
-pen Lavender;
pen MidnightBlue;
pen OliveGreen;
pen Apricot;
+pen Aquamarine;
+pen Lavender;
pen Cyan;
pen Red;
pen RawSienna;
pen Mahogany;
pen Gray;
-pen YellowOrange;
-pen Maroon;
pen Plum;
pen BlueGreen;
-pen YellowGreen;
pen Cerulean;
pen Blue;
pen BlueViolet;
@@ -3715,40 +3679,43 @@ pen RedOrange;
pen Goldenrod;
pen ForestGreen;
pen BurntOrange;
+pen YellowOrange;
+pen Maroon;
pen Tan;
-pen Sepia;
+pen YellowGreen;
pen Brown;
pen RubineRed;
pen TealBlue;
pen White;
pen Purple;
pen Bittersweet;
-pen VioletRed;
+pen Sepia;
pen Orange;
-pen Violet;
pen OrangeRed;
pen Fuchsia;
-pen PineGreen;
pen Peach;
+pen PineGreen;
pen Dandelion;
+pen VioletRed;
pen Black;
-pen Thistle;
+pen Violet;
pen NavyBlue;
pen Rhodamine;
pen ProcessBlue;
-pen DarkOrchid;
+pen Thistle;
pen LimeGreen;
pen Green;
pen GreenYellow;
-pen WildStrawberry;
+pen DarkOrchid;
pen Emerald;
pen Mulberry;
+pen WildStrawberry;
pen RedViolet;
pen SkyBlue;
pen SeaGreen;
pen Periwinkle;
-pen Salmon;
pen Yellow;
+pen Salmon;
pen JungleGreen;
pen CornflowerBlue;
pen RoyalBlue;
@@ -3790,36 +3757,34 @@ v3dheadertypes operator init();
v3dtypes v3dtypes;
v3dtypes operator init();
string VERSION;
-pen Cornsilk;
pen Orchid;
pen Indigo;
pen Beige;
pen SlateBlue;
pen SlateGray;
+pen Cornsilk;
pen Magenta;
-pen Seashell;
pen CadetBlue;
pen DeepPink;
-pen Aquamarine;
pen SpringGreen;
-pen GhostWhite;
-pen Lavender;
pen MidnightBlue;
pen Olive;
pen OliveDrab;
+pen Seashell;
+pen Aquamarine;
+pen GhostWhite;
+pen Lavender;
pen Chocolate;
pen Cyan;
pen Gainsboro;
pen Ivory;
-pen LavenderBlush;
pen PapayaWhip;
-pen Wheat;
pen Red;
pen Pink;
pen MintCream;
pen DarkTurquoise;
-pen PeachPuff;
pen Gray;
+pen LavenderBlush;
pen MediumBlue;
pen MediumOrchid;
pen MediumPurple;
@@ -3828,12 +3793,10 @@ pen MediumSlateBlue;
pen MediumAquamarine;
pen MediumSpringGreen;
pen MediumTurquoise;
+pen Wheat;
pen MediumVioletRed;
-pen Maroon;
-pen Lime;
-pen SteelBlue;
pen Plum;
-pen YellowGreen;
+pen PeachPuff;
pen Blue;
pen Gold;
pen BlueViolet;
@@ -3841,11 +3804,14 @@ pen Goldenrod;
pen ForestGreen;
pen Chartreuse;
pen NavajoWhite;
+pen Maroon;
+pen Lime;
+pen SteelBlue;
+pen YellowGreen;
pen Tan;
pen DarkMagenta;
pen AntiqueWhite;
pen PaleTurquoise;
-pen LemonChiffon;
pen IndianRed;
pen Crimson;
pen Azure;
@@ -3855,58 +3821,58 @@ pen BurlyWood;
pen Moccasin;
pen DarkBlue;
pen Peru;
-pen Aqua;
pen White;
pen Purple;
pen WhiteSmoke;
+pen LemonChiffon;
pen DimGray;
pen Orange;
-pen Violet;
pen OrangeRed;
pen Fuchsia;
+pen Aqua;
pen Bisque;
pen Honeydew;
pen RosyBrown;
pen Black;
-pen Thistle;
+pen Violet;
pen Khaki;
pen FireBrick;
-pen Sienna;
pen Snow;
-pen DarkOrchid;
+pen Thistle;
pen LimeGreen;
+pen Sienna;
pen OldLace;
pen Green;
pen GreenYellow;
+pen DarkOrchid;
pen DarkCyan;
pen FloralWhite;
pen DarkRed;
-pen DarkOliveGreen;
-pen DarkOrange;
pen BlanchedAlmond;
pen PowderBlue;
pen DarkGray;
pen DarkGreen;
pen DarkGoldenrod;
+pen DarkOliveGreen;
pen SkyBlue;
-pen Silver;
+pen DarkOrange;
pen SeaGreen;
pen DarkViolet;
pen Teal;
pen AliceBlue;
pen HotPink;
pen DodgerBlue;
+pen Silver;
pen SaddleBrown;
pen Tomato;
pen DarkKhaki;
-pen Salmon;
-pen SandyBrown;
pen LightBlue;
pen LightCoral;
pen LightCyan;
pen Yellow;
pen LightGreen;
-pen DeepSkyBlue;
+pen SandyBrown;
+pen Salmon;
pen PaleGreen;
pen Linen;
pen LightGoldenrodYellow;
@@ -3924,6 +3890,7 @@ pen LightSteelBlue;
pen LightYellow;
pen rgbint(int r, int g, int b);
pen Coral;
+pen DeepSkyBlue;
pen MistyRose;
pen DarkSalmon;
pen DarkSeaGreen;
diff --git a/graphics/asymptote/asymptote.spec b/graphics/asymptote/asymptote.spec
index e56bc09e3e..c1bf0606aa 100644
--- a/graphics/asymptote/asymptote.spec
+++ b/graphics/asymptote/asymptote.spec
@@ -3,7 +3,7 @@
%global __python %{__python3}
Name: asymptote
-Version: 2.89
+Version: 2.90
Release: 1%{?dist}
Summary: Descriptive vector graphics language
diff --git a/graphics/asymptote/base/asy-mode.el b/graphics/asymptote/base/asy-mode.el
index 9f6eda793c..7b6d6f5c36 100644
--- a/graphics/asymptote/base/asy-mode.el
+++ b/graphics/asymptote/base/asy-mode.el
@@ -1600,5 +1600,20 @@ If optional argument Force is t then force compilation."
(asy-master-tex-view 'lasy-view-pdf-via-ps2pdf t t))
(define-key asy-mode-map (kbd "<C-M-S-return>") 'asy-master-tex-view-ps2pdf-f)
+;; Integrate with flycheck
+(with-eval-after-load 'flycheck
+ (flycheck-define-command-checker 'asy
+ "Syntax checking of asymptote files."
+ :command (append
+ (split-string (concat asy-command-location asy-command))
+ '("-noV" "-o" temporary-file-name source))
+ :error-patterns
+ ;; filename.asy: 123.45: warning: message
+ ;; filename.asy: 123.45: error message
+ '((warning line-start (file-name) ":" (* space) line (? ?\. column) ": warning: " (message) line-end)
+ (error line-start (file-name) ":" (* space) line (? ?\. column) ": " (message) line-end))
+ :modes '(asy-mode))
+ (add-to-list 'flycheck-checkers 'asy))
+
(provide `asy-mode)
;;; asy-mode.el ends here
diff --git a/graphics/asymptote/base/plain_boxes.asy b/graphics/asymptote/base/plain_boxes.asy
index 9576caff55..0b6746736a 100644
--- a/graphics/asymptote/base/plain_boxes.asy
+++ b/graphics/asymptote/base/plain_boxes.asy
@@ -1,3 +1,12 @@
+void fillbox(frame dest, path g, pen p=currentpen, filltype filltype=NoFill, bool above=true)
+{
+ if(above == false) {
+ frame F;
+ filltype.fill(F,g,p);
+ prepend(dest,F);
+ } else filltype.fill(dest,g,p);
+}
+
// Draw and/or fill a box on frame dest using the dimensions of frame src.
path box(frame dest, frame src=dest, real xmargin=0, real ymargin=xmargin,
pen p=currentpen, filltype filltype=NoFill, bool above=true)
@@ -6,11 +15,7 @@ path box(frame dest, frame src=dest, real xmargin=0, real ymargin=xmargin,
int sign=filltype == NoFill ? 1 : -1;
pair h=0.5*sign*(max(p)-min(p));
path g=box(min(src)-h-z,max(src)+h+z);
- frame F;
- if(above == false) {
- filltype.fill(F,g,p);
- prepend(dest,F);
- } else filltype.fill(dest,g,p);
+ fillbox(dest,g,p,filltype,above);
return g;
}
@@ -28,12 +33,7 @@ path roundbox(frame dest, frame src=dest, real xmargin=0, real ymargin=xmargin,
(dw,b)--(a-dw,b){right}..{down}
(a,b-dw)--(a,dw){down}..{left}
(a-dw,0)--(dw,0){left}..{up}cycle);
-
- frame F;
- if(above == false) {
- filltype.fill(F,g,p);
- prepend(dest,F);
- } else filltype.fill(dest,g,p);
+ fillbox(dest,g,p,filltype,above);
return g;
}
@@ -47,11 +47,7 @@ path ellipse(frame dest, frame src=dest, real xmargin=0, real ymargin=xmargin,
int sign=filltype == NoFill ? 1 : -1;
pair h=0.5*sign*(max(p)-min(p));
path g=ellipse(0.5*(M+m),factor*D.x+h.x+xmargin,factor*D.y+h.y+ymargin);
- frame F;
- if(above == false) {
- filltype.fill(F,g,p);
- prepend(dest,F);
- } else filltype.fill(dest,g,p);
+ fillbox(dest,g,p,filltype,above);
return g;
}
diff --git a/graphics/asymptote/base/plain_picture.asy b/graphics/asymptote/base/plain_picture.asy
index 13619e80ab..9df0e5753e 100644
--- a/graphics/asymptote/base/plain_picture.asy
+++ b/graphics/asymptote/base/plain_picture.asy
@@ -1,5 +1,4 @@
// Pre picture <<<1
-import plain_scaling;
import plain_bounds;
include plain_prethree;
@@ -222,6 +221,8 @@ struct picture { // <<<1
node3[] nodes3;
bool uptodate=true;
+ bool queueErase=false;
+ bool queueErase3=false;
struct bounds3 {
coords3 point,min,max;
@@ -286,6 +287,8 @@ struct picture { // <<<1
// Erase the current picture, retaining bounds.
void clear() {
+ queueErase=nodes.length > 0;
+ queueErase3=nodes3.length > 0;
nodes.delete();
nodes3.delete();
legend.delete();
@@ -1587,13 +1590,11 @@ void add(picture src, bool group=true, filltype filltype=NoFill,
currentpicture.add(src,group,filltype,above);
}
-// Fit the picture src using the identity transformation (so user
-// coordinates and truesize coordinates agree) and add it about the point
-// position to picture dest.
+// Fit the picture src and add it about the point position to picture dest.
void add(picture dest, picture src, pair position, bool group=true,
filltype filltype=NoFill, bool above=true)
{
- add(dest,src.fit(identity()),position,group,filltype,above);
+ add(dest,src.fit(),position,group,filltype,true);
}
void add(picture src, pair position, bool group=true, filltype filltype=NoFill,
diff --git a/graphics/asymptote/base/plain_scaling.asy b/graphics/asymptote/base/plain_scaling.asy
index 4c6beae655..dc21462c8e 100644
--- a/graphics/asymptote/base/plain_scaling.asy
+++ b/graphics/asymptote/base/plain_scaling.asy
@@ -192,8 +192,6 @@ real max(real M, scaling s, coord[] c) {
return M;
}
-import simplex;
-
/*
Calculate the sizing constants for the given array and maximum size.
Solve the two-variable linear programming problem using the simplex method.
@@ -203,19 +201,16 @@ import simplex;
*/
real calculateScaling(string dir, coord[] m, coord[] M, real size,
bool warn=true) {
- real[][] A;
- real[] b;
- real[] c=new real[] {-1,0,0};
+ from simplex2 access problem;
+ problem p=new problem;
void addMinCoord(coord c) {
// (a*user + b) + truesize >= 0:
- A.push(new real[] {c.user,1,-1});
- b.push(-c.truesize);
+ p.addRestriction(c.user,1,c.truesize);
}
void addMaxCoord(coord c) {
// (a*user + b) + truesize <= size:
- A.push(new real[] {-c.user,-1,1});
- b.push(c.truesize-size);
+ p.addRestriction(-c.user,-1,size-c.truesize);
}
for (int i=0; i < m.length; ++i)
@@ -223,17 +218,16 @@ real calculateScaling(string dir, coord[] m, coord[] M, real size,
for (int i=0; i < M.length; ++i)
addMaxCoord(M[i]);
- int[] s=array(A.length,1);
- simplex S=simplex(c,A,s,b);
-
- if(S.case == S.OPTIMAL) {
- return S.x[0];
- } else if(S.case == S.UNBOUNDED) {
+ if(p.rows.length == 2) return 1; // Don't warn if there are no constraints
+ int status=p.optimize();
+ if(status == problem.OPTIMAL) {
+ // TODO: Could just be return a;
+ return scaling.build(p.a(),p.b()).a;
+ } else if(status == problem.UNBOUNDED) {
if(warn) warning("unbounded",dir+" scaling in picture unbounded");
return 0;
} else {
if(!warn) return 1;
-
bool userzero(coord[] coords) {
for(var coord : coords)
if(coord.user != 0) return false;
diff --git a/graphics/asymptote/base/plain_shipout.asy b/graphics/asymptote/base/plain_shipout.asy
index a001ce045c..c784c5f462 100644
--- a/graphics/asymptote/base/plain_shipout.asy
+++ b/graphics/asymptote/base/plain_shipout.asy
@@ -122,7 +122,6 @@ void shipout(string prefix=defaultfilename, picture pic=currentpicture,
string options="", string script="",
light light=currentlight, projection P=currentprojection)
{
- pic.uptodate=true;
if(!uptodate()) {
bool inlinetex=settings.inlinetex;
bool prc=prc(format) || settings.v3d;
@@ -139,7 +138,7 @@ void shipout(string prefix=defaultfilename, picture pic=currentpicture,
settings.inlinetex=settings.inlineimage;
}
frame f;
- transform t=pic.calculateTransform();
+ transform t=empty3 ? pic.calculateTransform() : identity;
if(currentpicture.fitter == null) {
pen background=currentlight.background;
if(settings.outformat == "html" && background == nullpen)
@@ -152,10 +151,14 @@ void shipout(string prefix=defaultfilename, picture pic=currentpicture,
else
f=pic.fit(prefix,format,view=view,options,script,light,P);
- if(!prconly() && (!pic.empty2() || settings.render == 0 || prc || empty3))
+ if(!prconly() && (!pic.empty2() || settings.render == 0 || prc ||
+ pic.queueErase)) {
shipout(prefix,orientation(f),format,wait,view,t);
+ pic.queueErase=false;
+ }
settings.inlinetex=inlinetex;
}
+ pic.uptodate=true;
}
void newpage(picture pic=currentpicture)
diff --git a/graphics/asymptote/base/simplex2.asy b/graphics/asymptote/base/simplex2.asy
new file mode 100644
index 0000000000..e8d073ef0b
--- /dev/null
+++ b/graphics/asymptote/base/simplex2.asy
@@ -0,0 +1,310 @@
+/*****
+ * simplex.asy
+ * Andy Hammerlindl 2004/07/27
+ *
+ * Solves the two-variable linear programming problem using the simplex method.
+ * This problem is specialized in that the second variable, "b", does not have
+ * a non-negativity condition, and the first variable, "a", is the quantity
+ * being maximized.
+ * Correct execution of the algorithm also assumes that the coefficient of "b"
+ * will be +1 or -1 in every added restriction, and that the problem can be
+ * initialized to a valid state by pivoting b with one of the slack
+ * variables. This assumption may in fact be incorrect.
+ *****/
+
+struct problem {
+ typedef int var;
+ static var VAR_A = 0;
+ static var VAR_B = 1;
+
+ static int OPTIMAL = -1;
+ static var UNBOUNDED = -2;
+ static int INVALID = -3;
+
+ struct row {
+ real c, t[];
+ }
+
+ // The variables of the rows.
+ // Initialized for the two variable problem.
+ var[] v = {VAR_A, VAR_B};
+
+ // The rows of equalities.
+ row rowA() {
+ row r = new row;
+ r.c = 0;
+ r.t = new real[] {1, 0};
+ return r;
+ }
+ row rowB() {
+ row r = new row;
+ r.c = 0;
+ r.t = new real[] {0, 1};
+ return r;
+ }
+ row[] rows = {rowA(), rowB()};
+
+ // The number of original variables.
+ int n = rows.length;
+
+ // Pivot the variable v[col] with vp.
+ void pivot(int col, var vp)
+ {
+ var vc=v[col];
+
+ // Recalculate rows v[col] and vp for the pivot-swap.
+ row rvc = rows[vc], rvp = rows[vp];
+ real factor=1/rvp.t[col]; // NOTE: Handle rvp.t[col] == 0 case.
+ rvc.c=-rvp.c*factor;
+ rvp.c=0;
+ rvc.t=-rvp.t*factor;
+ rvp.t *= 0;
+ rvc.t[col]=factor;
+ rvp.t[col]=1;
+
+ var a=min(vc,vp);
+ var b=max(vc,vp);
+
+ // Recalculate the rows other than the two used for the above pivot.
+ for (var i = 0; i < a; ++i) {
+ row r=rows[i];
+ real m = r.t[col];
+ r.c += m*rvc.c;
+ r.t += m*rvc.t;
+ r.t[col]=m*factor;
+ }
+ for (var i = a+1; i < b; ++i) {
+ row r=rows[i];
+ real m = r.t[col];
+ r.c += m*rvc.c;
+ r.t += m*rvc.t;
+ r.t[col]=m*factor;
+ }
+ for (var i = b+1; i < rows.length; ++i) {
+ row r=rows[i];
+ real m = r.t[col];
+ r.c += m*rvc.c;
+ r.t += m*rvc.t;
+ r.t[col]=m*factor;
+ }
+
+ // Relabel the vars.
+ v[col] = vp;
+ }
+
+ // As b does not have a non-negativity condition, it must initially be
+ // pivoted out for a variable that does. This selects the initial
+ // variable to pivot with b. It also assumes that there is a valid
+ // solution with a == 0 to the linear programming problem, and if so, it
+ // picks a pivot to get to that state. In our case, a == 0 corresponds to
+ // a picture with the user coordinates shrunk down to zero, and if that
+ // doesn't fit, nothing will.
+ //
+ // If b has a minimal value, choose a pivot that will give b its minimal
+ // value. Otherwise, if b has maximal value, choose a pivot to give b its
+ // maximal value.
+ var initVar()
+ {
+ real min;
+ var argmin;
+ var i=2;
+ for (; i < rows.length; ++i) {
+ row r=rows[i];
+ if (r.t[VAR_B] > 0) {
+ min=r.c/r.t[VAR_B];
+ argmin=i;
+ break;
+ }
+ }
+ for (; i < rows.length; ++i) {
+ row r=rows[i];
+ if (r.t[VAR_B] > 0) {
+ real val=r.c/r.t[VAR_B];
+ if (val < min) {
+ min=val;
+ argmin=i;
+ }
+ }
+ }
+
+ if(argmin != 0) return argmin;
+
+ real max;
+ var argmax;
+ var i=2;
+ for (; i < rows.length; ++i) {
+ row r=rows[i];
+ if (r.t[VAR_B] < 0) {
+ max=r.c/r.t[VAR_B];
+ argmax=i;
+ break;
+ }
+ }
+
+ for (; i < rows.length; ++i) {
+ row r=rows[i];
+ if (r.t[VAR_B] < 0) {
+ real val=r.c/r.t[VAR_B];
+ if (val > max) {
+ max=val;
+ argmax=i;
+ }
+ }
+ }
+
+ if(argmax != 0) return argmax;
+
+ return UNBOUNDED;
+ }
+
+ // Initialize the linear program problem by moving into an acceptable state
+ // this assumes that b is unrestrained and is the second variable.
+ // NOTE: Works in limited cases, may be bug-ridden.
+ void init()
+ {
+ // Find the lowest constant term in the equations.
+ var lowest = 0;
+ for (var i = 2; i < rows.length; ++i) {
+ if (rows[i].c < rows[lowest].c)
+ lowest = i;
+ }
+
+ // Pivot if necessary.
+ if (lowest != 0)
+ pivot(VAR_B, lowest);
+ }
+
+ // Selects a column to pivot on. Returns OPTIMAL if the current state is
+ // optimal. Assumes we are optimizing the first row.
+ int selectColumn()
+ {
+ int i=find(rows[0].t > 0,1);
+ return (i >= 0) ? i : OPTIMAL;
+ }
+
+ // Select the new variable associated with a pivot on the column given.
+ // Returns UNBOUNDED if the space is unbounded.
+ var selectVar(int col)
+ {
+ // We assume that the first two vars (a and b) once swapped out, won't be
+ // swapped back in. This finds the variable which gives the tightest
+ // non-negativity condition restricting our optimization. This turns
+ // out to be the max of c/t[col]. Note that as c is positive, and
+ // t[col] is negative, all c/t[col] will be negative, so we are finding
+ // the smallest in magnitude.
+ var vp=UNBOUNDED;
+ real max=0;
+ int i=2;
+ for (; i < rows.length; ++i) {
+ row r=rows[i];
+ if(r.c < 0) r.c=0; // Fix any numerical precision error
+ if(r.t[col] < 0) {
+ max=r.c/r.t[col]; vp=i;
+ break;
+ }
+ }
+ for (; i < rows.length; ++i) {
+ row r=rows[i];
+ if(r.c < 0) r.c=0; // Fix any numerical precision error
+ if(r.c < max*r.t[col]) {
+ max=r.c/r.t[col]; vp=i;
+ }
+ }
+
+ return vp;
+ }
+
+ // Checks that the rows are in a valid state.
+ bool valid()
+ {
+ // Checks that constants are valid.
+ bool validConstants() {
+ for (int i = 0; i < rows.length; ++i)
+ // Do not test the row for b, as it does not have a non-negativity
+ // condition.
+ if (i != VAR_B && rows[i].c < 0)
+ return false;
+ return true;
+ }
+
+ // Check a variable to see if its row is simple.
+ // NOTE: Simple rows could be optimized out, since they are not really
+ // used.
+ bool validVar(int col) {
+
+ var vc = v[col];
+ row rvc = rows[vc];
+
+ if (rvc.c != 0)
+ return false;
+ for (int i = 0; i < n; ++i)
+ if (rvc.t[i] != (i == col ? 1 : 0))
+ return false;
+
+ return true;
+ }
+
+ if (!validConstants()) {
+ return false;
+ }
+ for (int i = 0; i < n; ++i)
+ if (!validVar(i)) {
+ return false;
+ }
+
+ return true;
+ }
+
+
+ // Perform the algorithm to find the optimal solution. Returns OPTIMAL,
+ // UNBOUNDED, or INVALID (if no solution is possible).
+ int optimize()
+ {
+ // Put into a valid state to begin and pivot b out.
+ var iv=initVar();
+ if (iv == UNBOUNDED)
+ return iv;
+ pivot(VAR_B, iv);
+
+ if (!valid())
+ return INVALID;
+
+ while(true) {
+ int col = selectColumn();
+
+ if (col == OPTIMAL)
+ return col;
+ var vp = selectVar(col);
+
+ if (vp == UNBOUNDED)
+ return vp;
+
+ pivot(col, vp);
+ }
+
+ // Shouldn't reach here.
+ return INVALID;
+ }
+
+ // Add a restriction to the problem:
+ // t1*a + t2*b + c >= 0
+ void addRestriction(real t1, real t2, real c)
+ {
+ row r = new row;
+ r.c = c;
+ r.t = new real[] {t1, t2};
+ rows.push(r);
+ }
+
+ // Return the value of a computed.
+ real a()
+ {
+ return rows[VAR_A].c;
+ }
+
+ // Return the value of b computed.
+ real b()
+ {
+ return rows[VAR_B].c;
+ }
+}
diff --git a/graphics/asymptote/base/three.asy b/graphics/asymptote/base/three.asy
index cde32f6acb..b93833f666 100644
--- a/graphics/asymptote/base/three.asy
+++ b/graphics/asymptote/base/three.asy
@@ -2681,7 +2681,7 @@ struct scene
if(P.absolute)
this.P=P.copy();
- else if(P.showtarget)
+ else if(P.showtarget && !pic.empty3())
draw(pic,P.target,nullpen);
t=pic.scaling(xsize3,ysize3,zsize3,keepAspect,warn);
@@ -2893,7 +2893,7 @@ object embed(string prefix=outprefix(), string label=prefix,
triple margin=(S.viewportmargin.x,S.viewportmargin.y,0);
M += margin;
m -= margin;
- } else if(M.z >= 0) abort("camera too close");
+ } else if(M.z >= 0 && !S.pic2.empty()) abort("camera too close");
if(primitive())
format=settings.v3d ? "v3d" : settings.outformat;
@@ -3038,12 +3038,15 @@ currentpicture.fitter=new frame(string prefix, picture pic, string format,
light light, projection P) {
frame f;
bool empty3=pic.empty3();
- if(!empty3) f=embedder(new object(string prefix, string format) {
+ if(!empty3 || pic.queueErase3) {
+ f=embedder(new object(string prefix, string format) {
return embed(prefix=prefix,pic,format,xsize,ysize,keepAspect,view,
options,script,light,P);
},prefix,format,view,light);
+ pic.queueErase3=false;
+ }
- if(is3D(format) || empty3)
+ if(is3D(format) || pic.queueErase)
add(f,pic.fit2(xsize,ysize,keepAspect));
return f;
};
diff --git a/graphics/asymptote/base/v3dheadertypes.asy b/graphics/asymptote/base/v3dheadertypes.asy
index 0118208970..aff3ebd34d 100644
--- a/graphics/asymptote/base/v3dheadertypes.asy
+++ b/graphics/asymptote/base/v3dheadertypes.asy
@@ -1,6 +1,6 @@
// Enum class for v3dheadertypes
// AUTO-GENERATED from v3dheadertypes.csv
-// Generated at 2024-03-23 21:31:00
+// Generated at 2024-06-21 17:45:18+00:00
struct v3dheadertypes
{
diff --git a/graphics/asymptote/base/v3dtypes.asy b/graphics/asymptote/base/v3dtypes.asy
index b808b2ae44..97517ebae2 100644
--- a/graphics/asymptote/base/v3dtypes.asy
+++ b/graphics/asymptote/base/v3dtypes.asy
@@ -1,6 +1,6 @@
// Enum class for v3dtypes
// AUTO-GENERATED from v3dtypes.csv
-// Generated at 2024-03-23 21:31:00
+// Generated at 2024-06-21 17:45:18+00:00
struct v3dtypes
{
diff --git a/graphics/asymptote/binaries/i386-windows/README b/graphics/asymptote/binaries/i386-windows/README
index 1e1c510415..686eb44150 100644
--- a/graphics/asymptote/binaries/i386-windows/README
+++ b/graphics/asymptote/binaries/i386-windows/README
@@ -1,5 +1,5 @@
ASYMPTOTE
- Copyright 2004-23 Andy Hammerlindl, John Bowman, and Tom Prince
+ Copyright 2004-24 Andy Hammerlindl, John Bowman, and Tom Prince
Asymptote is a powerful descriptive vector graphics language for technical
drawing, inspired by MetaPost but with an improved C++-like
diff --git a/graphics/asymptote/binaries/x86_64-windows/README b/graphics/asymptote/binaries/x86_64-windows/README
index 1e1c510415..686eb44150 100644
--- a/graphics/asymptote/binaries/x86_64-windows/README
+++ b/graphics/asymptote/binaries/x86_64-windows/README
@@ -1,5 +1,5 @@
ASYMPTOTE
- Copyright 2004-23 Andy Hammerlindl, John Bowman, and Tom Prince
+ Copyright 2004-24 Andy Hammerlindl, John Bowman, and Tom Prince
Asymptote is a powerful descriptive vector graphics language for technical
drawing, inspired by MetaPost but with an improved C++-like
diff --git a/graphics/asymptote/builtin.cc b/graphics/asymptote/builtin.cc
index 36af37d4d5..bb706f99a8 100644
--- a/graphics/asymptote/builtin.cc
+++ b/graphics/asymptote/builtin.cc
@@ -44,7 +44,7 @@
namespace vm {
// Defined in stack.cc
-extern vm::frame *make_dummyframe(string name);
+extern vm::vmFrame *make_dummyframe(string name);
}
using namespace types;
@@ -753,7 +753,7 @@ void addOperators(venv &ve)
dummyRecord *createDummyRecord(venv &ve, symbol name)
{
dummyRecord *r=new dummyRecord(name);
- vm::frame *f = make_dummyframe(name);
+ vm::vmFrame *f = make_dummyframe(name);
addConstant(ve, f, r, name);
addRecordOps(ve, r);
return r;
diff --git a/graphics/asymptote/callable.h b/graphics/asymptote/callable.h
index f870d48d97..da7584f90b 100644
--- a/graphics/asymptote/callable.h
+++ b/graphics/asymptote/callable.h
@@ -43,7 +43,7 @@ public:
// How a function reference to a non-builtin function is stored.
struct func : public callable {
lambda *body;
- frame *closure;
+ vmFrame *closure;
func () : body(), closure() {}
virtual void call (stack*);
virtual bool compare(callable*);
diff --git a/graphics/asymptote/camp.tab.h b/graphics/asymptote/camp.tab.h
index a0d9cee40d..d6b8090e69 100644
--- a/graphics/asymptote/camp.tab.h
+++ b/graphics/asymptote/camp.tab.h
@@ -137,7 +137,7 @@ union YYSTYPE
absyntax::arglist *alist;
absyntax::slice *slice;
absyntax::dimensions *dim;
- absyntax::ty *t;
+ absyntax::astType *t;
absyntax::decid *di;
absyntax::decidlist *dil;
absyntax::decidstart *dis;
diff --git a/graphics/asymptote/camp.y b/graphics/asymptote/camp.y
index 0f2cc5435e..bfa6734651 100644
--- a/graphics/asymptote/camp.y
+++ b/graphics/asymptote/camp.y
@@ -76,7 +76,7 @@ using mem::string;
absyntax::arglist *alist;
absyntax::slice *slice;
absyntax::dimensions *dim;
- absyntax::ty *t;
+ absyntax::astType *t;
absyntax::decid *di;
absyntax::decidlist *dil;
absyntax::decidstart *dis;
diff --git a/graphics/asymptote/coder.cc b/graphics/asymptote/coder.cc
index 1beb3b5860..ee90354239 100644
--- a/graphics/asymptote/coder.cc
+++ b/graphics/asymptote/coder.cc
@@ -38,7 +38,7 @@ vm::lambda *newLambda(string name) {
// Used purely for global variables and static code blocks of file
// level modules.
coder::coder(position pos, string name, modifier sord)
-#if SIMPLE_FRAME
+#ifdef SIMPLE_FRAME
: level(frame::indirect_frame(name)),
#else
: level(new frame(name, 0, 0)),
diff --git a/graphics/asymptote/coder.h b/graphics/asymptote/coder.h
index e07aa11e63..0d50e8c752 100644
--- a/graphics/asymptote/coder.h
+++ b/graphics/asymptote/coder.h
@@ -221,8 +221,9 @@ public:
frame *getFrame()
{
if (isStatic() && !isTopLevel()) {
- assert(parent->getFrame());
- return parent->getFrame();
+ frame *result = parent->getFrame();
+ assert(result);
+ return result;
}
else
return level;
diff --git a/graphics/asymptote/common.h b/graphics/asymptote/common.h
index 6ee3d971f0..7f582e70ff 100644
--- a/graphics/asymptote/common.h
+++ b/graphics/asymptote/common.h
@@ -73,6 +73,7 @@ typedef unsigned long unsignedInt;
#else
#define Int_MAX2 INT_MAX
#define Int_MIN INT_MIN
+#define intIsInt
typedef int Int;
typedef unsigned int unsignedInt;
#endif
diff --git a/graphics/asymptote/configure b/graphics/asymptote/configure
index 4e83c4a259..38dd93bbb9 100755
--- a/graphics/asymptote/configure
+++ b/graphics/asymptote/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for Asymptote 2.89.
+# Generated by GNU Autoconf 2.71 for Asymptote 2.90.
#
# Report bugs to <https://github.com/vectorgraphics/asymptote/issues>.
#
@@ -611,8 +611,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='Asymptote'
PACKAGE_TARNAME='asymptote'
-PACKAGE_VERSION='2.89'
-PACKAGE_STRING='Asymptote 2.89'
+PACKAGE_VERSION='2.90'
+PACKAGE_STRING='Asymptote 2.90'
PACKAGE_BUGREPORT='https://github.com/vectorgraphics/asymptote/issues'
PACKAGE_URL=''
@@ -1326,7 +1326,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures Asymptote 2.89 to adapt to many kinds of systems.
+\`configure' configures Asymptote 2.90 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1392,7 +1392,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Asymptote 2.89:";;
+ short | recursive ) echo "Configuration of Asymptote 2.90:";;
esac
cat <<\_ACEOF
@@ -1508,7 +1508,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-Asymptote configure 2.89
+Asymptote configure 2.90
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1988,7 +1988,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by Asymptote $as_me 2.89, which was
+It was created by Asymptote $as_me 2.90, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -3072,6 +3072,29 @@ VERSION=$PACKAGE_VERSION
# to do *after* running autoupdate.
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+# serial 11 (pkg-config-0.29.1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7575,7 +7598,7 @@ fi
if test "x$enable_readline" != "xno"; then
-
+CPPFLAGS="$CPPFLAGS "`pkg-config --silence-errors --cflags readline || echo`
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -7601,16 +7624,15 @@ _ACEOF
if ac_fn_cxx_try_compile "$LINENO"
then :
-PKG_FLAGS=""
+PKG_FLAGS=" "`pkg-config --silence-errors --libs readline || echo`
-
-if test "x$PKG_FLAGS" == "x"; then
+if test "x$PKG_FLAGS" == "x "; then
PKG_FLAGS=-l"readline"
-echo Will try linking with $PKG_FLAGS
+echo will try linking with $PKG_FLAGS
fi
LDFLAGS_SAVE=$LDFLAGS
-LDFLAGS="$LDFLAGS ""$STATIC ""$PKG_FLAGS ""$DYNAMIC "
+LDFLAGS="$LDFLAGS "$STATIC"$PKG_FLAGS "$DYNAMIC
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for history_list in -lreadline" >&5
printf %s "checking for history_list in -lreadline... " >&6; }
if test ${ac_cv_lib_readline_history_list+y}
@@ -7618,7 +7640,7 @@ then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lreadline $LIBS"
+LIBS="-lreadline $PKG_FLAGS $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -7663,7 +7685,7 @@ then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lreadline $LIBS"
+LIBS="-lreadline $PKG_FLAGS $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -7875,19 +7897,18 @@ fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+CPPFLAGS="$CPPFLAGS "`pkg-config --silence-errors --cflags tinfo || echo`
-PKG_FLAGS=""
-
+PKG_FLAGS=" "`pkg-config --silence-errors --libs tinfo || echo`
-
-if test "x$PKG_FLAGS" == "x"; then
+if test "x$PKG_FLAGS" == "x "; then
PKG_FLAGS=-l"tinfo"
-echo Will try linking with $PKG_FLAGS
+echo will try linking with $PKG_FLAGS
fi
LDFLAGS_SAVE=$LDFLAGS
-LDFLAGS="$LDFLAGS ""$STATIC ""$PKG_FLAGS ""$DYNAMIC "
+LDFLAGS="$LDFLAGS "$STATIC"$PKG_FLAGS "$DYNAMIC
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5
printf %s "checking for tgetent in -ltinfo... " >&6; }
if test ${ac_cv_lib_tinfo_tgetent+y}
@@ -7895,7 +7916,7 @@ then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
-LIBS="-ltinfo $LIBS"
+LIBS="-ltinfo $PKG_FLAGS $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -7940,7 +7961,7 @@ then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
-LIBS="-ltinfo $LIBS"
+LIBS="-ltinfo $PKG_FLAGS $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -7994,7 +8015,7 @@ fi
-
+CPPFLAGS="$CPPFLAGS "`pkg-config --silence-errors --cflags ncurses || echo`
for ac_header in ncurses/curses.h ncurses.h curses.h
do :
@@ -8010,16 +8031,15 @@ fi
done
-PKG_FLAGS=""
+PKG_FLAGS=" "`pkg-config --silence-errors --libs ncurses || echo`
-
-if test "x$PKG_FLAGS" == "x"; then
+if test "x$PKG_FLAGS" == "x "; then
PKG_FLAGS=-l"ncurses"
-echo Will try linking with $PKG_FLAGS
+echo will try linking with $PKG_FLAGS
fi
LDFLAGS_SAVE=$LDFLAGS
-LDFLAGS="$LDFLAGS ""$STATIC ""$PKG_FLAGS ""$DYNAMIC "
+LDFLAGS="$LDFLAGS "$STATIC"$PKG_FLAGS "$DYNAMIC
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for setupterm in -lncurses" >&5
printf %s "checking for setupterm in -lncurses... " >&6; }
if test ${ac_cv_lib_ncurses_setupterm+y}
@@ -8027,7 +8047,7 @@ then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lncurses $LIBS"
+LIBS="-lncurses $PKG_FLAGS $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -8072,7 +8092,7 @@ then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lncurses $LIBS"
+LIBS="-lncurses $PKG_FLAGS $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -8214,22 +8234,21 @@ fi
if test "x$enable_curl" != "xno"; then
-
+CPPFLAGS="$CPPFLAGS "`pkg-config --silence-errors --cflags curl || echo`
ac_fn_cxx_check_header_compile "$LINENO" "curl/curl.h" "ac_cv_header_curl_curl_h" "$ac_includes_default"
if test "x$ac_cv_header_curl_curl_h" = xyes
then :
-PKG_FLAGS=""
+PKG_FLAGS=" "`pkg-config --silence-errors --libs libcurl || echo`
-
-if test "x$PKG_FLAGS" == "x"; then
+if test "x$PKG_FLAGS" == "x "; then
PKG_FLAGS=-l"curl"
-echo Will try linking with $PKG_FLAGS
+echo will try linking with $PKG_FLAGS
fi
LDFLAGS_SAVE=$LDFLAGS
-LDFLAGS="$LDFLAGS ""$STATIC ""$PKG_FLAGS ""$DYNAMIC "
+LDFLAGS="$LDFLAGS "$STATIC"$PKG_FLAGS "$DYNAMIC
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for curl_easy_init in -lcurl" >&5
printf %s "checking for curl_easy_init in -lcurl... " >&6; }
if test ${ac_cv_lib_curl_curl_easy_init+y}
@@ -8237,7 +8256,7 @@ then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcurl $LIBS"
+LIBS="-lcurl $PKG_FLAGS $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -8282,7 +8301,7 @@ then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcurl $LIBS"
+LIBS="-lcurl $PKG_FLAGS $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -8353,22 +8372,21 @@ fi
if test "x$enable_fftw" != "xno"; then
-
+CPPFLAGS="$CPPFLAGS "`pkg-config --silence-errors --cflags fftw3 || echo`
ac_fn_cxx_check_header_compile "$LINENO" "fftw3.h" "ac_cv_header_fftw3_h" "$ac_includes_default"
if test "x$ac_cv_header_fftw3_h" = xyes
then :
-PKG_FLAGS=""
-
+PKG_FLAGS=" "`pkg-config --silence-errors --libs fftw3 || echo`
-if test "x$PKG_FLAGS" == "x"; then
+if test "x$PKG_FLAGS" == "x "; then
PKG_FLAGS=-l"fftw3"
-echo Will try linking with $PKG_FLAGS
+echo will try linking with $PKG_FLAGS
fi
LDFLAGS_SAVE=$LDFLAGS
-LDFLAGS="$LDFLAGS ""$STATIC ""$PKG_FLAGS ""$DYNAMIC "
+LDFLAGS="$LDFLAGS "$STATIC"$PKG_FLAGS "$DYNAMIC
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fftw_execute in -lfftw3" >&5
printf %s "checking for fftw_execute in -lfftw3... " >&6; }
if test ${ac_cv_lib_fftw3_fftw_execute+y}
@@ -8376,7 +8394,7 @@ then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lfftw3 $LIBS"
+LIBS="-lfftw3 $PKG_FLAGS $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -8421,7 +8439,7 @@ then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lfftw3 $LIBS"
+LIBS="-lfftw3 $PKG_FLAGS $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -8489,7 +8507,7 @@ fi
if test "x$enable_eigen" != "xno"; then
-
+CPPFLAGS="$CPPFLAGS "`pkg-config --silence-errors --cflags eigen3 || echo`
ac_fn_cxx_check_header_compile "$LINENO" "Eigen/Dense" "ac_cv_header_Eigen_Dense" "$ac_includes_default"
if test "x$ac_cv_header_Eigen_Dense" = xyes
@@ -8593,7 +8611,7 @@ printf "%s\n" "#define HAVE_LIBTIRPC 1" >>confdefs.h
;;
*)
-
+CPPFLAGS="$CPPFLAGS "`pkg-config --silence-errors --cflags libtirpc || echo`
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -8609,16 +8627,15 @@ _ACEOF
if ac_fn_cxx_try_compile "$LINENO"
then :
-PKG_FLAGS=""
+PKG_FLAGS=" "`pkg-config --silence-errors --libs libtirpc || echo`
-
-if test "x$PKG_FLAGS" == "x"; then
+if test "x$PKG_FLAGS" == "x "; then
PKG_FLAGS=-l"tirpc"
-echo Will try linking with $PKG_FLAGS
+echo will try linking with $PKG_FLAGS
fi
LDFLAGS_SAVE=$LDFLAGS
-LDFLAGS="$LDFLAGS ""$STATIC ""$PKG_FLAGS ""$DYNAMIC "
+LDFLAGS="$LDFLAGS "$STATIC"$PKG_FLAGS "$DYNAMIC
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for xdrstdio_create in -ltirpc" >&5
printf %s "checking for xdrstdio_create in -ltirpc... " >&6; }
if test ${ac_cv_lib_tirpc_xdrstdio_create+y}
@@ -8626,7 +8643,7 @@ then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
-LIBS="-ltirpc $LIBS"
+LIBS="-ltirpc $PKG_FLAGS $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -8671,7 +8688,7 @@ then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
-LIBS="-ltirpc $LIBS"
+LIBS="-ltirpc $PKG_FLAGS $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -8741,25 +8758,24 @@ fi
if test "x$enable_gsl" != "xno"; then
+CPPFLAGS="$CPPFLAGS "`pkg-config --silence-errors --cflags gsl || echo`
-
-
+LDFLAGS="$LDFLAGS "`pkg-config --silence-errors --libs gsl || echo`
ac_fn_cxx_check_header_compile "$LINENO" "gsl/gsl_sf.h" "ac_cv_header_gsl_gsl_sf_h" "$ac_includes_default"
if test "x$ac_cv_header_gsl_gsl_sf_h" = xyes
then :
-PKG_FLAGS=""
-
+PKG_FLAGS=" "`pkg-config --silence-errors --libs gsl || echo`
-if test "x$PKG_FLAGS" == "x"; then
+if test "x$PKG_FLAGS" == "x "; then
PKG_FLAGS=-l"gsl"
-echo Will try linking with $PKG_FLAGS
+echo will try linking with $PKG_FLAGS
fi
LDFLAGS_SAVE=$LDFLAGS
-LDFLAGS="$LDFLAGS ""$STATIC ""$PKG_FLAGS ""$DYNAMIC "
+LDFLAGS="$LDFLAGS "$STATIC"$PKG_FLAGS "$DYNAMIC
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gsl_sf_debye_6 in -lgsl" >&5
printf %s "checking for gsl_sf_debye_6 in -lgsl... " >&6; }
if test ${ac_cv_lib_gsl_gsl_sf_debye_6+y}
@@ -8767,7 +8783,7 @@ then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lgsl $LIBS"
+LIBS="-lgsl $PKG_FLAGS $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -8812,7 +8828,7 @@ then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lgsl $LIBS"
+LIBS="-lgsl $PKG_FLAGS $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -10553,7 +10569,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by Asymptote $as_me 2.89, which was
+This file was extended by Asymptote $as_me 2.90, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -10617,7 +10633,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-Asymptote config.status 2.89
+Asymptote config.status 2.90
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
diff --git a/graphics/asymptote/configure.ac b/graphics/asymptote/configure.ac
index 3fe1598181..7e6dd1aaa1 100644
--- a/graphics/asymptote/configure.ac
+++ b/graphics/asymptote/configure.ac
@@ -3,10 +3,11 @@
# this file.
AC_PREREQ(2)
-AC_INIT([Asymptote],[2.89],[https://github.com/vectorgraphics/asymptote/issues])
+AC_INIT([Asymptote],[2.90],[https://github.com/vectorgraphics/asymptote/issues])
VERSION=$PACKAGE_VERSION
AC_SUBST(VERSION)
m4_include([ax_pthread.m4])
+m4_include([pkg.m4])
AC_C_BIGENDIAN
AC_CANONICAL_HOST
@@ -322,18 +323,17 @@ AC_CHECK_HEADERS(editline/readline.h)
])
AC_DEFUN([PKG_CONFIG],[
-ifdef([PKG_CHECK_MODULES],$1="$2 "`pkg-config --silence-errors $3 $4`,)
+ifdef([PKG_CHECK_MODULES],$1="$2 "`pkg-config --silence-errors $3 $4 || echo`,$1="$2 ")
])
AC_DEFUN([CHECK_LIB_STATIC],[
-PKG_FLAGS=""
PKG_CONFIG(PKG_FLAGS,,--libs,$1)
-if test "x$PKG_FLAGS" == "x"; then
+if test "x$PKG_FLAGS" == "x "; then
PKG_FLAGS=-l"$2"
-echo Will try linking with $PKG_FLAGS
+echo will try linking with $PKG_FLAGS
fi
LDFLAGS_SAVE=$LDFLAGS
-LDFLAGS="$LDFLAGS ""$STATIC ""$PKG_FLAGS ""$DYNAMIC "
+LDFLAGS="$LDFLAGS "$STATIC"$PKG_FLAGS "$DYNAMIC
AC_CHECK_LIB($2,$3,AC_DEFINE($4,1,DEFINE_LIB($2)),
if test "x$enable_static" = "xyes"; then
[
@@ -344,7 +344,7 @@ AC_CHECK_LIB($2,$3,AC_DEFINE($4,1,DEFINE_LIB($2)),
[
LDFLAGS=$LDFLAGS_SAVE
$5
-])
+],$PKG_FLAGS)
]
else
[
@@ -352,7 +352,7 @@ LDFLAGS=$LDFLAGS_SAVE
$5
]
fi
-)]
+,$PKG_FLAGS)]
)
if test "x$enable_readline" != "xno"; then
diff --git a/graphics/asymptote/dec.cc b/graphics/asymptote/dec.cc
index 1b47e0722f..d969ac5f02 100644
--- a/graphics/asymptote/dec.cc
+++ b/graphics/asymptote/dec.cc
@@ -27,7 +27,7 @@ using namespace types;
using mem::list;
-trans::tyEntry *ty::transAsTyEntry(coenv &e, record *where)
+trans::tyEntry *astType::transAsTyEntry(coenv &e, record *where)
{
return new trans::tyEntry(trans(e, false), 0, where, getPos());
}
@@ -128,7 +128,7 @@ arrayTy::operator string() const
}
tyEntryTy::tyEntryTy(position pos, types::ty *t)
- : ty(pos), ent(new trans::tyEntry(t, 0, 0, position()))
+ : astType(pos), ent(new trans::tyEntry(t, 0, 0, position()))
{
}
@@ -200,7 +200,8 @@ void block::transAsField(coenv &e, record *r)
}
bool block::transAsTemplatedField(
- coenv &e, record *r, mem::vector<absyntax::namedTyEntry*>* args
+ coenv &e, record *r, mem::vector<absyntax::namedTyEntry*>* args,
+ frame *caller
) {
Scope scopeHolder(e, scope);
auto p = stms.begin();
@@ -214,7 +215,7 @@ bool block::transAsTemplatedField(
em.sync();
return false;
}
- if(!dec->transAsParamMatcher(e, r, args))
+ if(!dec->transAsParamMatcher(e, r, args, caller))
return false;
while (++p != stms.end()) {
@@ -234,9 +235,10 @@ void block::transAsRecordBody(coenv &e, record *r)
}
bool block::transAsTemplatedRecordBody(
- coenv &e, record *r, mem::vector<absyntax::namedTyEntry*> *args
+ coenv &e, record *r, mem::vector<absyntax::namedTyEntry*> *args,
+ frame *caller
) {
- bool succeeded = transAsTemplatedField(e, r, args);
+ bool succeeded = transAsTemplatedField(e, r, args, caller);
e.c.closeRecord();
return succeeded;
}
@@ -267,10 +269,26 @@ record *block::transAsTemplatedFile(
genv& ge,
symbol id,
mem::vector<absyntax::namedTyEntry*>* args,
- frame *parent
+ coenv& cE
) {
+
+ for (auto p = args->rbegin(); p != args->rend(); ++p) {
+ namedTyEntry *arg = *p;
+ tyEntry *ent = arg->ent;
+ if(ent->t->kind == types::ty_record) {
+ varEntry *v = ent->v;
+ if (v) {
+ // Push the value of v to the stack.
+ v->getLocation()->encode(READ, arg->pos, cE.c);
+ } else {
+ // Push the appropriate frame to the stack.
+ newRecordExp::encodeLevel(arg->pos,cE,ent);
+ }
+ }
+ }
+
// Create the new module.
- record *r = new record(id, new frame(id,parent,0));
+ record *r = new record(id, new frame(id, 0, 0));
// Create coder and environment to translate the module.
// File-level modules have dynamic fields by default.
@@ -283,7 +301,7 @@ record *block::transAsTemplatedFile(
autoplainRunnable()->transAsField(ce, r);
}
- bool succeeded = transAsTemplatedRecordBody(ce, r, args);
+ bool succeeded = transAsTemplatedRecordBody(ce, r, args, cE.c.getFrame());
if (!succeeded) {
return nullptr;
}
@@ -491,7 +509,7 @@ void decidstart::createSymMap(AsymptoteLsp::SymbolContext* symContext)
}
void decidstart::createSymMapWType(
- AsymptoteLsp::SymbolContext* symContext, absyntax::ty* base
+ AsymptoteLsp::SymbolContext* symContext, absyntax::astType* base
) {
#ifdef HAVE_LSP
std::string name(static_cast<std::string>(getName()));
@@ -733,7 +751,7 @@ void decid::createSymMap(AsymptoteLsp::SymbolContext* symContext)
}
void decid::createSymMapWType(
- AsymptoteLsp::SymbolContext* symContext, absyntax::ty* base
+ AsymptoteLsp::SymbolContext* symContext, absyntax::astType* base
) {
#ifdef HAVE_LSP
start->createSymMapWType(symContext, base);
@@ -775,7 +793,7 @@ void decidlist::createSymMap(AsymptoteLsp::SymbolContext* symContext) {
}
void decidlist::createSymMapWType(
- AsymptoteLsp::SymbolContext* symContext, absyntax::ty* base
+ AsymptoteLsp::SymbolContext* symContext, absyntax::astType* base
) {
#ifdef HAVE_LSP
for (auto const& p : decs)
@@ -834,7 +852,7 @@ class loadModuleExp : public exp {
public:
loadModuleExp(position pos, record *imp)
- : exp(pos) {ft=new function(imp,primString(),primString());}
+ : exp(pos) {ft=new function(imp,primString());}
void prettyprint(ostream &out, Int indent) {
prettyname(out, "loadModuleExp", indent, getPos());
@@ -865,18 +883,19 @@ public:
// the import, but doesn't add the import to the environment.
varEntry *accessModule(position pos, coenv &e, record *r, symbol id)
{
- record *imp=e.e.getModule(id, (string)id);
+ string filename=(string) id;
+ record *imp=e.e.getModule(id, filename);
if (!imp) {
em.error(pos);
- em << "could not load module '" << id << "'";
+ em << "could not load module '" << filename << "'";
em.sync();
return 0;
}
else {
// Create a varinit that evaluates to the module.
- // This is effectively the expression 'loadModule(filename,"")'.
+ // This is effectively the expression 'loadModule(filename)'.
callExp init(pos, new loadModuleExp(pos, imp),
- new stringExp(pos, (string)id), new stringExp(pos, ""));
+ new stringExp(pos, filename));
// The varEntry should have whereDefined()==0 as it is not defined inside
// the record r.
@@ -891,14 +910,15 @@ varEntry *accessModule(position pos, coenv &e, record *r, symbol id)
varEntry *accessTemplatedModule(position pos, coenv &e, record *r, symbol id,
formals *args)
{
- stringstream s;
- s << args->getSignature(e)->handle();
- string sigHandle=s.str();
+ string filename=(string) id;
+ stringstream buf;
+ buf << id << '/' << args->getSignature(e)->handle() << '/';
+ symbol index=symbol::literalTrans(buf.str());
auto *computedArgs = new mem::vector<namedTyEntry*>();
mem::vector<tySymbolPair> *fields = args->getFields();
for (auto p = fields->begin(); p != fields->end(); ++p) {
- ty* theType = p->ty;
+ astType* theType = p->ty;
symbol theName = p->sym;
if (theName == symbol::nullsym) {
em.error(theType->getPos());
@@ -911,11 +931,7 @@ varEntry *accessTemplatedModule(position pos, coenv &e, record *r, symbol id,
));
}
- record *imp=e.e.getTemplatedModule(id,
- (string) id,
- sigHandle,
- computedArgs,
- e.c.getFrame());
+ record *imp=e.e.getTemplatedModule(index,filename,computedArgs,e);
if (!imp) {
em.error(pos);
em << "could not load module '" << id << "'";
@@ -924,9 +940,8 @@ varEntry *accessTemplatedModule(position pos, coenv &e, record *r, symbol id,
}
else {
// Create a varinit that evaluates to the module.
- // This is effectively the expression 'loadModule(filename,index)'.
- callExp init(pos, new loadModuleExp(pos, imp),
- new stringExp(pos, (string) id), new stringExp(pos, sigHandle));
+ // This is effectively the expression 'loadModule(index)'.
+ callExp init(pos, new loadModuleExp(pos, imp), new stringExp(pos, index));
// The varEntry should have whereDefined()==0 as it is not defined inside
// the record r.
@@ -1061,7 +1076,22 @@ void typeParam::prettyprint(ostream &out, Int indent) {
out << "typeParam (" << paramSym << ")\n";
}
+void recordInitializer(coenv &e, symbol id, record *parent, position here)
+{
+ // This is equivalent to the code
+ // A operator init() { return new A; }
+ // where A is the name of the record.
+ formals formals(here);
+ simpleName recordName(here, id);
+ nameTy result(here, &recordName);
+ newRecordExp exp(here, &result);
+ returnStm stm(here, &exp);
+ fundec init(here, &result, symbol::opTrans("init"), &formals, &stm);
+ init.transAsField(e, parent);
+}
+
bool typeParam::transAsParamMatcher(coenv &e, record *r, namedTyEntry* arg) {
+ position pos=arg->pos;
if (arg->dest != paramSym) {
em.error(arg->pos);
em << "template argument name does not match module: passed "
@@ -1070,22 +1100,42 @@ bool typeParam::transAsParamMatcher(coenv &e, record *r, namedTyEntry* arg) {
<< paramSym;
return false;
}
- addTypeWithPermission(e, r, arg->ent, paramSym);
- types::ty *t = arg->ent->t;
- if (t->kind == types::ty_record) {
- record *local = dynamic_cast<record *>(t);
- // copied from recorddecc::addPostRecordEnvironment, mutatis mutandis
- if (r) {
- r->e.add(local->postdefenv, 0, e.c);
+
+ if(arg->ent->t->kind == types::ty_record) {
+ record *module = dynamic_cast<record *>(arg->ent->v->getType());
+ symbol Module=symbol::literalTrans(module->getName());
+ record *imp=e.e.getLoadedModule(Module);
+
+ tyEntry *entry;
+ if(imp) {
+ callExp init(pos, new loadModuleExp(pos, imp),
+ new stringExp(pos, module->getName()));
+ varEntry *v=makeVarEntryWhere(e, r, imp, 0, pos);
+ initializeVar(pos, e, v, &init);
+ if (v)
+ addVar(e, r, v, Module);
+
+ record *src = dynamic_cast<record *>(arg->ent->t);
+ qualifiedName *qn=new qualifiedName(
+ pos,
+ new simpleName(pos,module->getName()),
+ src->getName()
+ );
+
+ entry=nameTy(pos,qn).transAsTyEntry(e, r);
+ } else {
+ entry=arg->ent;
}
- e.e.add(local->postdefenv, 0, e.c);
- }
+ addTypeWithPermission(e, r, entry, paramSym);
+ recordInitializer(e,paramSym,r,pos);
+ } else
+ addTypeWithPermission(e, r, arg->ent, paramSym);
//e.e.addType(paramSym, arg->ent);
// The code below would add e.g. operator== to the context, but potentially
// ignore overrides of operator==:
//
- // types::ty *t = arg.ent->t;
+ // types::astType *t = arg.ent->t;
// if (t->kind == types::ty_record) {
// record *r = dynamic_cast<record *>(t);
// if (r) {
@@ -1116,7 +1166,7 @@ void typeParamList::add(typeParam *tp) {
}
bool typeParamList::transAsParamMatcher(
- coenv &e, record *r, mem::vector<namedTyEntry*> *args
+ coenv &e, record *r, mem::vector<namedTyEntry*> *args, frame *caller
) {
if (args->size() != params.size()) {
position pos = getPos();
@@ -1133,8 +1183,30 @@ bool typeParamList::transAsParamMatcher(
}
return false;
}
+ mem::vector<namedTyEntry*> *qualifiedArgs = new mem::vector<namedTyEntry*>();
+
+ const string callerContextName="callerContext/";
+ const static symbol *id0=new symbol(symbol::literalTrans(callerContextName));
+ record *callerContext = new record(*id0, caller);
+ for (namedTyEntry *arg : *args) {
+ if (arg->ent->t->kind == types::ty_record) {
+ varEntry *v = arg->ent->v;
+ varEntry *newV = makeVarEntryWhere(e, r, v ? v->getType() : callerContext, nullptr,
+ arg->pos);
+ newV->getLocation()->encode(WRITE, arg->pos, e.c);
+ e.c.encodePop();
+
+ tyEntry *newEnt = qualifyTyEntry(newV, arg->ent);
+ qualifiedArgs->push_back(
+ new namedTyEntry(arg->pos, arg->dest, newEnt)
+ );
+ } else {
+ qualifiedArgs->push_back(arg);
+ }
+ }
+
for (size_t i = 0; i < params.size(); ++i) {
- bool succeeded = params[i]->transAsParamMatcher(e, r, (*args)[i]);
+ bool succeeded = params[i]->transAsParamMatcher(e, r, (*qualifiedArgs)[i]);
if (!succeeded) return false;
}
return true;
@@ -1152,9 +1224,9 @@ symbol templatedSymbol() {
}
bool receiveTypedefDec::transAsParamMatcher(
- coenv& e, record *r, mem::vector<namedTyEntry*> *args
+ coenv& e, record *r, mem::vector<namedTyEntry*> *args, frame *caller
) {
- bool succeeded = params->transAsParamMatcher(e, r, args);
+ bool succeeded = params->transAsParamMatcher(e, r, args, caller);
types::ty *intTy = e.e.lookupType(intSymbol());
assert(intTy);
@@ -1349,19 +1421,7 @@ void recorddec::prettyprint(ostream &out, Int indent)
void recorddec::transRecordInitializer(coenv &e, record *parent)
{
- position here=getPos();
-
- // This is equivalent to the code
- // A operator init() { return new A; }
- // where A is the name of the record.
- formals formals(here);
- simpleName recordName(here, id);
- nameTy result(here, &recordName);
- newRecordExp exp(here, &result);
- returnStm stm(here, &exp);
- fundec init(here, &result, symbol::opTrans("init"), &formals, &stm);
-
- init.transAsField(e, parent);
+ recordInitializer(e,id,parent,getPos());
}
void recorddec::addPostRecordEnvironment(coenv &e, record *r, record *parent) {
@@ -1420,7 +1480,7 @@ runnable *autoplainRunnable() {
// Abstract syntax for the code:
// private import plain;
position pos=position();
- static importdec ap(pos, new idpair(pos, symbol::trans("plain")));
+ static importdec ap(pos, new idpair(pos, symbol::literalTrans("plain")));
static modifiedRunnable mr(pos, trans::PRIVATE, &ap);
return &mr;
diff --git a/graphics/asymptote/dec.h b/graphics/asymptote/dec.h
index ac6e5b065b..53fee4bfe0 100644
--- a/graphics/asymptote/dec.h
+++ b/graphics/asymptote/dec.h
@@ -45,9 +45,9 @@ using sym::symbol;
class vardec;
-class ty : public absyn {
+class astType : public absyn {
public:
- ty(position pos)
+ astType(position pos)
: absyn(pos) {}
virtual void prettyprint(ostream &out, Int indent) = 0;
@@ -71,15 +71,15 @@ public:
#endif
};
-class nameTy : public ty {
+class nameTy : public astType {
name *id;
public:
nameTy(position pos, name *id)
- : ty(pos), id(id) {}
+ : astType(pos), id(id) {}
nameTy(name *id)
- : ty(id->getPos()), id(id) {}
+ : astType(id->getPos()), id(id) {}
void prettyprint(ostream &out, Int indent) override;
@@ -107,16 +107,16 @@ public:
types::array *truetype(types::ty *base, bool tacit=false);
};
-class arrayTy : public ty {
- ty *cell;
+class arrayTy : public astType {
+ astType *cell;
dimensions *dims;
public:
- arrayTy(position pos, ty *cell, dimensions *dims)
- : ty(pos), cell(cell), dims(dims) {}
+ arrayTy(position pos, astType *cell, dimensions *dims)
+ : astType(pos), cell(cell), dims(dims) {}
arrayTy(name *id, dimensions *dims)
- : ty(dims->getPos()), cell(new nameTy(id)), dims(dims) {}
+ : astType(dims->getPos()), cell(new nameTy(id)), dims(dims) {}
void prettyprint(ostream &out, Int indent) override;
@@ -129,11 +129,11 @@ public:
// Similar to varEntryExp, this helper class always translates to the same
// fixed type.
-class tyEntryTy : public ty {
+class tyEntryTy : public astType {
trans::tyEntry *ent;
public:
tyEntryTy(position pos, trans::tyEntry *ent)
- : ty(pos), ent(ent) {}
+ : astType(pos), ent(ent) {}
tyEntryTy(position pos, types::ty *t);
@@ -240,12 +240,14 @@ public:
void transAsField(coenv &e, record *r) override;
bool transAsTemplatedField(
- coenv &e, record *r, mem::vector<absyntax::namedTyEntry*>* args
+ coenv &e, record *r, mem::vector<absyntax::namedTyEntry*>* args,
+ trans::frame *caller
);
void transAsRecordBody(coenv &e, record *r);
bool transAsTemplatedRecordBody(
- coenv &e, record *r, mem::vector<absyntax::namedTyEntry*> *args
+ coenv &e, record *r, mem::vector<absyntax::namedTyEntry*> *args,
+ trans::frame *caller
);
types::record *transAsFile(genv& ge, symbol id);
@@ -254,7 +256,7 @@ public:
genv& ge,
symbol id,
mem::vector<absyntax::namedTyEntry*> *args,
- trans::frame *parent
+ coenv &e
);
// If the block can be interpreted as a single vardec, return that vardec
@@ -363,7 +365,7 @@ public:
void createSymMap(AsymptoteLsp::SymbolContext* symContext) override;
void createSymMapWType(
- AsymptoteLsp::SymbolContext* symContext, absyntax::ty* base
+ AsymptoteLsp::SymbolContext* symContext, absyntax::astType* base
);
};
@@ -406,7 +408,7 @@ public:
void createSymMap(AsymptoteLsp::SymbolContext* symContext) override;
void createSymMapWType(
- AsymptoteLsp::SymbolContext* symContext, absyntax::ty* base
+ AsymptoteLsp::SymbolContext* symContext, absyntax::astType* base
);
};
@@ -441,7 +443,7 @@ public:
void createSymMap(AsymptoteLsp::SymbolContext* symContext) override;
void createSymMapWType(
- AsymptoteLsp::SymbolContext* symContext, absyntax::ty* base
+ AsymptoteLsp::SymbolContext* symContext, absyntax::astType* base
);
};
@@ -461,14 +463,14 @@ void createVar(position pos, coenv &e, record *r,
symbol id, types::ty *t, varinit *init);
class vardec : public dec {
- ty *base;
+ astType *base;
decidlist *decs;
public:
- vardec(position pos, ty *base, decidlist *decs)
+ vardec(position pos, astType *base, decidlist *decs)
: dec(pos), base(base), decs(decs) {}
- vardec(position pos, ty *base, decid *di)
+ vardec(position pos, astType *base, decid *di)
: dec(pos), base(base), decs(new decidlist(pos))
{
decs->add(di);
@@ -634,7 +636,8 @@ public:
void add(typeParam *tp);
- bool transAsParamMatcher(coenv &e, record *r, mem::vector<namedTyEntry*> *args);
+ bool transAsParamMatcher(coenv &e, record *r,
+ mem::vector<namedTyEntry*> *args, trans::frame *caller);
void prettyprint(ostream &out, Int indent);
};
@@ -644,12 +647,12 @@ class receiveTypedefDec : public dec {
typeParamList* params;
public:
- receiveTypedefDec(position pos, typeParamList* params)
+ receiveTypedefDec(position pos, typeParamList* params)
: dec(pos), params(params) {}
void transAsField(coenv& e, record *r) override;
bool transAsParamMatcher(
- coenv& e, record *r, mem::vector<namedTyEntry*> *args
+ coenv& e, record *r, mem::vector<namedTyEntry*> *args, trans::frame *caller
);
};
@@ -674,7 +677,7 @@ protected:
// from a.B unravel x;
//
// Here, v->getType() will yield A and v->getLocation() will yield the
- // location of the the variable a, but the record type t will be B.
+ // location of the variable a, but the record type t will be B.
record *t;
varEntry *v;
diff --git a/graphics/asymptote/doc/CAD.pdf b/graphics/asymptote/doc/CAD.pdf
index 1906655b54..819509abff 100644
--- a/graphics/asymptote/doc/CAD.pdf
+++ b/graphics/asymptote/doc/CAD.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/FAQ/asy-faq.info b/graphics/asymptote/doc/FAQ/asy-faq.info
index c0665b7144..e66a938dae 100644
--- a/graphics/asymptote/doc/FAQ/asy-faq.info
+++ b/graphics/asymptote/doc/FAQ/asy-faq.info
@@ -10,7 +10,7 @@ END-INFO-DIR-ENTRY
File: asy-faq.info, Node: Top, Next: Question 1.1, Up: (dir)
ASYMPTOTE FREQUENTLY ASKED QUESTIONS
- 2024-03-23
+ 2024-06-21
This is the list of Frequently Asked Questions about Asymptote (asy).
diff --git a/graphics/asymptote/doc/TeXShopAndAsymptote.pdf b/graphics/asymptote/doc/TeXShopAndAsymptote.pdf
index e6493a9c39..de1fb5b2da 100644
--- a/graphics/asymptote/doc/TeXShopAndAsymptote.pdf
+++ b/graphics/asymptote/doc/TeXShopAndAsymptote.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/asy-latex.pdf b/graphics/asymptote/doc/asy-latex.pdf
index 2b327afac6..e09c0b928e 100644
--- a/graphics/asymptote/doc/asy-latex.pdf
+++ b/graphics/asymptote/doc/asy-latex.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/asyRefCard.pdf b/graphics/asymptote/doc/asyRefCard.pdf
index d68b7b1b95..dcfb6417e4 100644
--- a/graphics/asymptote/doc/asyRefCard.pdf
+++ b/graphics/asymptote/doc/asyRefCard.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/asymptote.pdf b/graphics/asymptote/doc/asymptote.pdf
index 4e414de0ef..a5de59f7c4 100644
--- a/graphics/asymptote/doc/asymptote.pdf
+++ b/graphics/asymptote/doc/asymptote.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/asymptote.texi b/graphics/asymptote/doc/asymptote.texi
index ee0e3ae49e..f37789114f 100644
--- a/graphics/asymptote/doc/asymptote.texi
+++ b/graphics/asymptote/doc/asymptote.texi
@@ -81,6 +81,7 @@ Installation
* Compiling from UNIX source:: Building @code{Asymptote} from scratch
* Editing modes:: Convenient @code{emacs} and @code{vim} modes
* Git:: Getting the latest development source
+* Building the documentation:: Building the documentation
* Uninstall:: Goodbye, @code{Asymptote}!
Tutorial
@@ -105,6 +106,7 @@ Programming
* Pens:: Colors, line types, line widths, font sizes
* Transforms:: Affine transforms
* Frames and pictures:: Canvases for immediate and deferred drawing
+* Deferred drawing:: Witholding drawing until all data is available
* Files:: Reading and writing your data
* Variable initializers:: Initialize your variables
* Structures:: Organize your data
@@ -141,6 +143,7 @@ Base modules
* plain:: Default @code{Asymptote} base file
* simplex:: Linear programming: simplex method
+* simplex2:: Two-variable simplex method
* math:: Extend @code{Asymptote}'s math capabilities
* interpolate:: Interpolation routines
* geometry:: Geometry routines
@@ -308,6 +311,7 @@ A quick reference card for @code{Asymptote} is available at
* Compiling from UNIX source:: Building @code{Asymptote} from scratch
* Editing modes:: Convenient @code{emacs} and @code{vim} modes
* Git:: Getting the latest development source
+* Building the documentation:: Building the documentation
* Uninstall:: Goodbye, @code{Asymptote}!
@end menu
@@ -404,7 +408,7 @@ The @code{ImageMagick} package from
@noindent
is required to support output formats other than @acronym{HTML},
-@acronym{PDF}, @acronym{SVG}, and @acronym{PNG} (@pxref{convert}).
+@acronym{PDF}, @acronym{SVG}, and @acronym{PNG} (@pxref{magick}).
The @code{Python 3} interpreter from @url{https://www.python.org} is only
required if you wish to try out the graphical user interface (@pxref{GUI}).
@@ -516,7 +520,7 @@ configuration variables @code{paperwidth} and @code{paperheight}.
@cindex @code{texcommand}
@cindex @code{dvips}
@cindex @code{dvisvgm}
-@cindex @code{convert}
+@cindex @code{magick}
@cindex @code{ImageMagick}
@cindex @code{asygl}
These additional configuration variables normally do not require adjustment:
@@ -531,6 +535,7 @@ asygl
@end verbatim
@noindent
+@cindex @code{warn}
Warnings (such as "unbounded" and "offaxis") may be enabled or disabled with
the functions
@verbatim
@@ -792,6 +797,21 @@ apt-get build-dep asymptote
@end verbatim
@noindent
+@node Building the documentation
+@section Building the documentation
+Here are instructions for building the documentation:
+@verbatim
+cd doc
+make # for both the PDF version doc/asymptote.pdf and the HTML version
+cd png
+make # for the HTML version only: doc/png/index.html
+@end verbatim
+Note that the @code{HTML} version cannot be built without
+executing @code{make} from @code{doc} folder first.
+
+The @code{asy} executable is required for compiling the diagrams
+in the documentation.
+
@node Uninstall, , Git, Installation
@section Uninstall
@cindex uninstall
@@ -883,7 +903,7 @@ followed by @code{Enter}, to obtain the above image.
@cindex arrow keys
@cindex erase
@cindex quit
-@noindent
+
At this point you can type further @code{draw} commands, which will be added
to the displayed figure, @code{erase} to clear the canvas,
@verbatim
@@ -1123,7 +1143,8 @@ use in constructing an optional legend entry.
@cindex @code{Bar}
@cindex @code{Bars}
@cindex @code{barsize}
-Bars are useful for indicating dimensions. The possible values of
+
+Bars @code{bar} are useful for indicating dimensions. The possible values of
@code{bar} are @code{None}, @code{BeginBar}, @code{EndBar} (or
equivalently @code{Bar}), and @code{Bars} (which draws a bar at both
ends of the path). Each of these bar specifiers (except for
@@ -1133,6 +1154,7 @@ bar length is @code{barsize(pen)}.
@cindex arrows
@anchor{arrows}
+@cindex @code{arrowbar}
@cindex @code{None}
@cindex @code{Blank}
@cindex @code{BeginArrow}
@@ -1140,77 +1162,116 @@ bar length is @code{barsize(pen)}.
@cindex @code{EndArrow}
@cindex @code{Arrow}
@cindex @code{Arrows}
-@cindex @code{FillDraw}
-@cindex @code{Fill}
-@cindex @code{Draw}
-@cindex @code{NoFill}
-@cindex @code{UnFill}
+
+The possible values of @code{arrow} are @code{None}, @code{Blank}
+(which draws no arrows or path), @code{BeginArrow}, @code{MidArrow},
+@code{EndArrow} (or equivalently @code{Arrow}),
+and @code{Arrows} (which draws an arrow at both ends of the path).
+
@cindex @code{BeginArcArrow}
@cindex @code{MidArcArrow}
@cindex @code{EndArcArrow}
@cindex @code{ArcArrow}
@cindex @code{ArcArrows}
+There are also arrow versions with
+slightly modified default values of @code{size} and @code{angle} suitable for
+curved arrows: @code{BeginArcArrow}, @code{EndArcArrow} (or equivalently
+@code{ArcArrow}), @code{MidArcArrow}, and @code{ArcArrows}.
+
+For example:
+@verbatim
+draw((0,0)--(1,1),arrow=Arrows);
+@end verbatim
+All of the arrow specifiers except for @code{None} and @code{Blank}
+may be given optional arguments, for example:
+@verbatim
+draw((0,0)--(1,1),arrow=Arrow(
+ arrowhead=HookHead,size=3mm,angle=20,filltype=Draw,position=0.9));
+@end verbatim
+
+The function @code{Arrow} has the signature
+@verbatim
+arrowbar Arrow(arrowhead arrowhead=DefaultHead,
+ real size=0, real angle=arrowangle,
+ filltype filltype=null, position position=EndPoint)
+@end verbatim
+@noindent
+Calling @code{Arrow()} returns @code{Arrow}, which is an @code{arrowbar} object.
+The parameters are:
+
+@itemize
+@cindex @code{arrowhead}
@cindex @code{DefaultHead}
@cindex @code{SimpleHead}
@cindex @code{HookHead}
@cindex @code{TeXHead}
-The possible values of @code{arrow} are @code{None}, @code{Blank}
-(which draws no arrows or path), @code{BeginArrow}, @code{MidArrow},
-@code{EndArrow} (or equivalently @code{Arrow}),
-and @code{Arrows} (which draws an arrow at both ends of the path).
-All of the arrow specifiers except for @code{None} and @code{Blank}
-may be given the optional arguments arrowhead @code{arrowhead} (one of
+@item @code{arrowhead}
+can be one of
the predefined arrowhead styles @code{DefaultHead}, @code{SimpleHead},
-@code{HookHead}, @code{TeXHead}),
-real @code{size} (arrowhead size in @code{PostScript} coordinates),
-real @code{angle} (arrowhead angle
-in degrees), filltype @code{filltype} (one of @code{FillDraw}, @code{Fill},
-@code{NoFill}, @code{UnFill}, @code{Draw}) and (except for
-@code{MidArrow} and @code{Arrows}) a real @code{position} (in the
+@code{HookHead}, @code{TeXHead}.
+@item real @code{size} is the arrowhead size in @code{PostScript} coordinates.
+
+The default arrowhead size when drawn
+with a pen @code{p} is @code{arrowsize(p)}.
+@item real @code{angle} is the arrowhead angle
+in degrees.
+
+@item filltype @code{filltype} (@pxref{filltype}),
+@item (except for
+@code{MidArrow} and @code{Arrows}) real @code{position} (in the
sense of @code{point(path p, real t)}) along the path where the tip of
-the arrow should be placed. The default arrowhead size when drawn
-with a pen @code{p} is @code{arrowsize(p)}. There are also arrow versions with
-slightly modified default values of @code{size} and @code{angle} suitable for
-curved arrows: @code{BeginArcArrow}, @code{EndArcArrow} (or equivalently
-@code{ArcArrow}), @code{MidArcArrow}, and @code{ArcArrows}.
+the arrow should be placed.
+@end itemize
+Margins @code{margin} can be used to shrink the visible portion of a path by
+@code{labelmargin(p)} to avoid overlap with other drawn objects.
+
+Typical values of @code{margin}
+are:
+@table @code
@cindex @code{NoMargin}
+@item NoMargin
@cindex @code{BeginMargin}
+@item BeginMargin
@cindex @code{EndMargin}
@cindex @code{Margin}
+@item EndMargin
+(equivalently @code{Margin})
@cindex @code{Margins}
+@item Margins
+leaves a margin at both ends of the path.
+@item Margin(real begin, real end=begin)
+specify the size of the beginning and ending margin, respectively,
+in multiples of the units @code{labelmargin(p)} used for aligning labels.
@cindex @code{BeginPenMargin}
+@item BeginPenMargin
@cindex @code{EndPenMargin}
@cindex @code{PenMargin}
+@item EndPenMargin
+(equivalently @code{PenMargin})
@cindex @code{PenMargins}
+@item PenMargins
+@item PenMargin(real begin, real end=begin)
+specify a margin in units of
+the pen line width, taking account of the pen line width when drawing
+the path or arrow.
+@cindex @code{DotMargin}
+@item DotMargin
+an abbreviation for @code{PenMargin(-0.5*dotfactor,0.5*dotfactor)},
+used to draw from the usual beginning point just up to the boundary of an
+end dot of width @code{dotfactor*linewidth(p)}.
@cindex @code{BeginDotMargin}
+@item BeginDotMargin
@cindex @code{EndDotMargin}
-@cindex @code{DotMargin}
@cindex @code{DotMargins}
-@cindex @code{Margin}
+@item DotMargins
+work similarly.
@cindex @code{TrueMargin}
-Margins can be used to shrink the visible portion of a path by
-@code{labelmargin(p)} to avoid overlap with other drawn objects.
-Typical values of @code{margin}
-are @code{NoMargin}, @code{BeginMargin}, @code{EndMargin} (or
-equivalently @code{Margin}), and @code{Margins} (which leaves a margin
-at both ends of the path). One may use
-@code{Margin(real begin, real end=begin)}
-to specify the size of the beginning and ending margin, respectively,
-in multiples of the units @code{labelmargin(p)} used for aligning labels.
-Alternatively, @code{BeginPenMargin}, @code{EndPenMargin}
-(or equivalently @code{PenMargin}), @code{PenMargins},
-@code{PenMargin(real begin, real end=begin)} specify a margin in units of
-the pen line width, taking account of the pen line width when drawing
-the path or arrow. For example, use @code{DotMargin}, an
-abbreviation for @code{PenMargin(-0.5*dotfactor,0.5*dotfactor)},
-to draw from the usual beginning point just up to the boundary of an
-end dot of width @code{dotfactor*linewidth(p)}. The qualifiers
-@code{BeginDotMargin}, @code{EndDotMargin}, and @code{DotMargins} work
-similarly. The qualifier @code{TrueMargin(real begin, real end=begin)}
-allows one to specify a margin directly in @code{PostScript} units,
+@item TrueMargin(real begin, real end=begin)
+specify a margin directly in @code{PostScript} units,
independent of the pen line width.
+@end table
The use of arrows, bars, and margins is illustrated by the examples
@code{@uref{https://asymptote.sourceforge.io/gallery/Pythagoras.svg,,Pythagoras}@uref{https://asymptote.sourceforge.io/gallery/Pythagoras.asy,,.asy}} and
@@ -1484,6 +1545,7 @@ For an illustration of picture clipping, see the first example in @ref{LaTeX usa
@node label, , clip, Drawing commands
@section label
@cindex @code{label}
+@cindex @code{labelmargin}
@verbatim
void label(picture pic=currentpicture, Label L, pair position,
align align=NoAlign, pen p=currentpen, filltype filltype=NoFill)
@@ -1494,6 +1556,16 @@ Draw Label @code{L} on picture @code{pic} using pen @code{p}. If
coordinate @code{position}; otherwise it will be aligned in the
direction of @code{align} and displaced from @code{position} by
the @code{PostScript} offset @code{align*labelmargin(p)}.
+
+Here, @code{real labelmargin(pen p=currentpen)} is a quantity used to align labels.
+In the code below,
+@verbatim
+label("abcdefg",(0,0),align=up,basealign);
+@end verbatim
+@noindent
+the baseline of the label will be exactly
+@code{labelmargin(currentpen)} @code{PostScript} units above the center.
+
@cindex @code{Align}
The constant @code{Align} can be used to align the
bottom-left corner of the label at @code{position}.
@@ -1609,11 +1681,14 @@ label(graphic("file.eps","width=1cm"),(0,0),NE);
layer();
@end verbatim
+@anchor{baseline}
@cindex @code{baseline}
The @code{string baseline(string s, string template="\strut")}
-function can be used to enlarge the bounding box of labels to match a
+function can be used to enlarge the bounding box of a label to match a
given template, so that their baselines will be typeset on a
horizontal line. See @code{@uref{https://asymptote.sourceforge.io/gallery/Pythagoras.svg,,Pythagoras}@uref{https://asymptote.sourceforge.io/gallery/Pythagoras.asy,,.asy}} for an example.
+Alternatively, the pen @code{basealign} may be used to force labels to
+respect the TeX baseline (@pxref{basealign}).
One can prevent labels from overwriting one another with the
@code{overwrite} pen attribute (@pxref{overwrite}).
@@ -1626,7 +1701,10 @@ A group of objects may be packed together into single frame with the routine
frame pack(pair align=2S ... object inset[]);
@end verbatim
@noindent
-To draw or fill a box (or ellipse or other path) around a Label and
+@anchor{envelope}
+@cindex @code{envelope}
+@cindex @code{object}
+To draw or fill a box (or ellipse or other path) around a @code{Label} and
return the bounding object, use one of the routines
@verbatim
object draw(picture pic=currentpicture, Label L, envelope e,
@@ -1638,8 +1716,7 @@ object draw(picture pic=currentpicture, Label L, envelope e, pair position,
@end verbatim
@noindent
Here @code{envelope} is a boundary-drawing routine such as @code{box},
-@code{roundbox}, or @code{ellipse} defined in @code{plain_boxes.asy}
-(@pxref{envelope}).
+@code{roundbox}, or @code{ellipse} defined in @code{plain_boxes.asy}.
@cindex @code{texpath}
The function @code{path[] texpath(Label L)} returns the path array that
@@ -1774,6 +1851,7 @@ should coincide with the first node of the second path).
* Pens:: Colors, line types, line widths, font sizes
* Transforms:: Affine transforms
* Frames and pictures:: Canvases for immediate and deferred drawing
+* Deferred drawing:: Witholding drawing until all data is available
* Files:: Reading and writing your data
* Variable initializers:: Initialize your variables
* Structures:: Organize your data
@@ -2222,13 +2300,13 @@ individual characters. The inverse operation is provided by
@cindex @code{format}
returns a string containing @code{n} formatted according to the C-style format
string @code{s} using locale @code{locale} (or the current locale if an
-empty string is specified), following the behaviour of the C function
+empty string is specified), following the behavior of the C function
@code{fprintf}), except that only one data field is allowed.
@item string format(string s=defaultformat, bool forcemath=false, string s=defaultseparator, real x, string locale="")
returns a string containing @code{x} formatted according to the C-style format
string @code{s} using locale @code{locale} (or the current locale if an
-empty string is specified), following the behaviour of the C function
+empty string is specified), following the behavior of the C function
@code{fprintf}), except that only one data field is allowed, trailing
zeros are removed by default (unless @code{#} is specified), and
if @code{s} specifies math mode or @code{forcemath=true}, @TeX{} is
@@ -2665,7 +2743,7 @@ Note that @code{lastcut.before} plays the role of the
@cindex @code{buildcycle}
@item path buildcycle(... path[] p);
This returns the path surrounding a region bounded by a list of two or more
-consecutively intersecting paths, following the behaviour of the
+consecutively intersecting paths, following the behavior of the
@code{MetaPost buildcycle} command.
@cindex @code{min}
@@ -2704,7 +2782,7 @@ otherwise.
@cindex @code{inside}
@item pair inside(path p, pen fillrule=currentpen);
-returns an arbitrary point strictly inside a cyclic path @code{p}
+returns an arbitrary point strictly inside a nondegenerate cyclic path @code{p}
according to the fill rule @code{fillrule} (@pxref{fillrule}).
@cindex @code{strokepath}
@@ -3100,13 +3178,22 @@ pen basealign=basealign(1);
@end verbatim
@noindent
-The default setting, @code{nobasealign},which may be changed with
+The default setting, @code{nobasealign}, which may be changed with
@code{defaultpen(pen)}, causes the label alignment routines to use the
full label bounding box for alignment. In contrast, @code{basealign}
requests that the @TeX{} baseline be respected.
The base align setting of a pen is returned by
@code{int basealign(pen p=currentpen)}.
+For example, in the following image, the baselines of green @math{\pi} and
+@math{\gamma} are aligned, while the bottom border of red @math{-\pi}
+and @math{-\gamma} are aligned.
+@verbatiminclude basealign.asy
+@sp 1
+@center @image{./basealign}
+
+Another method for aligning baselines is provided by the @code{baseline} function (@pxref{baseline}).
+
@cindex @code{fontsize}
@cindex @code{lineskip}
@cindex @code{defaultpen}
@@ -3173,7 +3260,6 @@ pen ZapfDingbats(string series="m", string shape="n");
@item Starting with the 2018/04/01 release, @LaTeX{} takes UTF-8 as
the new default input encoding. However, you can still set different input
encoding (so as the font, font encoding or even language context).
-@noindent
@cindex Cyrillic
@cindex Russian
Here is an example for @code{cp1251} and Russian language in Cyrillic script
@@ -3225,7 +3311,7 @@ as described in
Since @code{PostScript} does not support transparency, this feature is
only effective with the @code{-f pdf} output format option; other
formats can be produced from the resulting @acronym{PDF} file with the
-@code{ImageMagick} @code{convert} program.
+@code{ImageMagick} @code{magick} program.
Labels are always drawn with an @code{opacity} of 1.
A simple example of transparent filling is provided in the example file
@code{@uref{https://asymptote.sourceforge.io/gallery/transparency.svg,,transparency}@uref{https://asymptote.sourceforge.io/gallery/transparency.asy,,.asy}}.
@@ -3300,7 +3386,7 @@ the pen attribute @code{overwrite}, which takes a single argument:
@cindex @code{Allow}
@cindex @code{defaultpen}
@item Allow
-Allow labels to overwrite one another. This is the default behaviour (unless
+Allow labels to overwrite one another. This is the default behavior (unless
overridden with @code{defaultpen(pen)}.
@cindex @code{Suppress}
@@ -3404,7 +3490,7 @@ The function @code{bool isometry(transform t)} can be used to test if @code{t}
is an isometry (preserves distance).
-@node Frames and pictures, Files, Transforms, Programming
+@node Frames and pictures
@section Frames and pictures
@table @code
@@ -3440,24 +3526,6 @@ A frame obtained by aligning frame @code{f} in the direction
frame align(frame f, pair align);
@end verbatim
-@cindex @code{box}
-@cindex @code{ellipse}
-@anchor{envelope}
-@cindex @code{envelope}
-To draw or fill a box or ellipse around a label or frame and return the
-boundary as a path, use one of the predefined @code{envelope} routines
-@verbatim
-path box(frame f, Label L="", real xmargin=0,
- real ymargin=xmargin, pen p=currentpen,
- filltype filltype=NoFill, bool above=true);
-path roundbox(frame f, Label L="", real xmargin=0,
- real ymargin=xmargin, pen p=currentpen,
- filltype filltype=NoFill, bool above=true);
-path ellipse(frame f, Label L="", real xmargin=0,
- real ymargin=xmargin, pen p=currentpen,
- filltype filltype=NoFill, bool above=true);
-@end verbatim
-
@item picture
@cindex @code{picture}
Pictures are high-level structures (@pxref{Structures}) defined in
@@ -3571,7 +3639,7 @@ To rotate the page by @math{-90} degrees, use the orientation @code{Seascape}.
The orientation @code{UpsideDown} rotates the page by 180 degrees.
@cindex subpictures
-@cindex @code{fit}
+@cindex @code{picture.fit}
A picture @code{pic} can be explicitly fit to a frame by calling
@verbatim
frame pic.fit(real xsize=pic.xsize, real ysize=pic.ysize,
@@ -3580,13 +3648,14 @@ frame pic.fit(real xsize=pic.xsize, real ysize=pic.ysize,
The default size and aspect ratio settings are those given to the
@code{size} command (which default to @code{0}, @code{0}, and
@code{true}, respectively).
-@cindex @code{calculateTransform}
+@cindex @code{picture.calculateTransform}
The transformation that would currently be used to fit a picture
@code{pic} to a frame is returned by the member function
@code{pic.calculateTransform()}.
In certain cases (e.g.@ 2D graphs) where only an approximate size
estimate for @code{pic} is available, the picture fitting routine
+@cindex @code{picture.scale}
@verbatim
frame pic.scale(real xsize=this.xsize, real ysize=this.ysize,
bool keepAspect=this.keepAspect);
@@ -3603,6 +3672,7 @@ frame bbox(picture pic=currentpicture, real xmargin=0,
real ymargin=xmargin, pen p=currentpen,
filltype filltype=NoFill);
@end verbatim
+@cindex @code{filltype}
@anchor{filltype}
Here @code{filltype} specifies one of the following fill types:
@table @code
@@ -3730,10 +3800,9 @@ as a single entity (@pxref{GUI}), @code{filltype} requests optional
background filling or clipping, and @code{above} specifies
whether to add @code{src} above or below existing objects.
-There are also routines to add a picture or frame @code{src} specified
-in postscript coordinates to another picture @code{dest} (or
-@code{currentpicture}) about the user coordinate
-@code{position}:
+There are also routines to add a fixed-size picture or frame
+@code{src} to another picture @code{dest} (or @code{currentpicture})
+about the user coordinate @code{position}:
@anchor{add about}
@cindex @code{add}
@cindex picture alignment
@@ -3844,7 +3913,109 @@ that can be used for importing @code{LaTeX} packages.
@end table
-@node Files, Variable initializers, Frames and pictures, Programming
+@node Deferred drawing
+@section Deferred drawing
+It is sometimes desirable to have elements of a fixed absolute size,
+independent of the picture scaling from user to
+@code{PostScript} coordinates.
+For example, normally one would want the size of a dot created with
+@code{dot}, the size of the arrowheads created with @code{arrow}
+(@pxref{arrows}), and labels to be drawn independent of the scaling.
+
+However, because of @code{Asymptote}'s automatic scaling feature (@pxref{Figure size}),
+the translation between user coordinate and @code{PostScript} coordinate
+is not determined until shipout time:
+@verbatim
+size(1cm);
+dot((0,0));
+dot((1,1));
+shipout("x"); // at this point, 1 unit coordinate = 1cm
+dot((2,2));
+shipout("y"); // at this point, 1 unit coordinate = 0.5cm
+@end verbatim
+@noindent
+It is therefore necessary to defer the drawing of these elements until shipout time.
+
+For example, a frame can be added at a specified user coordinate of a
+picture with the deferred drawing routine
+@code{add(picture dest=currentpicture, frame src, pair position)}:
+@verbatim
+frame f;
+fill(f,circle((0,0),1.5pt));
+add(f,position=(1,1),align=(0,0));
+@end verbatim
+
+@cindex @code{picture.add}
+@cindex @code{drawer}
+
+A deferred drawing routine is an object of type @code{drawer},
+which is a function with signature @code{void(frame f, transform t)}.
+For example, if the drawing routine
+@verbatim
+void d(frame f, transform t){
+ fill(f,shift(3cm,0)*circle(t*(1,1),2pt));
+}
+@end verbatim
+@noindent
+is added to @code{currentpicture} with
+@verbatim
+currentpicture.add(d);
+@end verbatim
+@noindent
+a filled circle of radius 2pt will be drawn on currentpicture centered
+3cm to the right of user coordinate @code{(1,1)}. The parameter @code{t} is the
+affine transformation from user coordinates to @code{PostScript} coordinates.
+
+Even though the actual drawing is deferred, you still need to specify to the
+@code{Asymptote} scaling routines that ultimately a fixed-size circle
+of radius 2pt will be drawn 3cm to the right of user-coordinate (1,1),
+by adding a frame about (1,1) that extends beyond (1,1) from
+@code{(3cm-2pt,-2pt)+min(currentpen)} to
+@code{(3cm+2pt,2pt)+max(currentpen)}, where we have even
+accounted for the pen linewidth. The following example will then
+produce a @acronym{PDF} file 10 cm wide:
+
+@cindex @code{picture.addPoint}
+@verbatim
+settings.outformat="pdf";
+size(10cm);
+dot((0,0));
+dot((1,1),red);
+add(new void(frame f, transform t) {
+ fill(f,shift(3cm,0)*circle(t*(1,1),2pt));
+});
+pair trueMin=(3cm-2pt,-2pt)+min(currentpen);
+pair trueMax=(3cm+2pt,2pt)+max(currentpen);
+currentpicture.addPoint((1,1),trueMin);
+currentpicture.addPoint((1,1),trueMax);
+@end verbatim
+@noindent
+Here we specified the minimum and maximum user and truesize (fixed)
+coordinates of the drawer with the @code{picture} routine
+@verbatim
+void addPoint(pair user, pair truesize);
+@end verbatim
+@noindent
+Alternatively, one can use
+@verbatim
+void addBox(pair userMin, pair userMax, pair trueMin=0, pair trueMax=0) {
+@end verbatim
+@noindent
+to specify a bounding box
+with bottom-left corner @code{t*(1,1)+trueMin}
+and top-right corner @code{t*(1,1)+trueMax},
+where @code{t} is the transformation that transforms
+from user coordinates to @code{PostScript} coordinates.
+
+For more details about deferred drawing, see
+``Asymptote: A vector graphics language,'' John C. Bowman and Andy
+Hammerlindl, TUGBOAT: The Communications of the TeX Users Group, 29:2,
+288-294 (2008),
+
+@noindent
+@url{https://www.math.ualberta.ca/~bowman/publications/asyTUG.pdf}.
+
+@node Files
@section Files
@cindex @code{file}
@@ -4102,6 +4273,7 @@ rename file @code{from} to file @code{to}.
Unless the @code{-globalwrite} (or @code{-nosafe}) option is enabled,
this operation is restricted to the current directory.
@cindex @code{convert}
+@cindex @code{magick}
@cindex @code{animate}
The functions
@verbatim
@@ -4109,11 +4281,11 @@ int convert(string args="", string file="", string format="");
int animate(string args="", string file="", string format="");
@end verbatim
@noindent
-call the @code{ImageMagick} commands @code{convert} and @code{animate},
+call the @code{ImageMagick} commands @code{magick} and @code{animate},
respectively, with the arguments @code{args} and the file name constructed
from the strings @code{file} and @code{format}.
-@node Variable initializers, Structures, Files, Programming
+@node Variable initializers
@section Variable initializers
@cindex variable initializers
@cindex @code{operator init}
@@ -4262,7 +4434,7 @@ That is, after the definition of a structure @code{T}, a variable of
type @code{T} is initialized to a new instance (@code{new T}) by
default. During the definition of the structure, however, variables
of type @code{T} are initialized to @code{null} by default. This
-special behaviour is to avoid infinite recursion of creating new
+special behavior is to avoid infinite recursion of creating new
instances in code such as
@verbatim
struct tree {
@@ -4328,59 +4500,8 @@ Creating a new Person is a chore; it takes three lines to create a new instance
and to initialize its fields (that's still considerably less effort than
creating a new person in real life, though).
-We can reduce the work by defining a constructor function
-@code{Person(string,string)}:
-@verbatim
-struct Person {
- string firstname;
- string lastname;
-
- static Person Person(string firstname, string lastname) {
- Person p=new Person;
- p.firstname=firstname;
- p.lastname=lastname;
- return p;
- }
-}
-
-Person joe=Person.Person("Joe", "Jones");
-@end verbatim
-
-While it is now easier than before to create a new instance, we still
-have to refer to the constructor by the qualified name
-@code{Person.Person}. If we add the line
-@verbatim
-from Person unravel Person;
-@end verbatim
-@noindent
-immediately after the structure definition, then the constructor can be used
-without qualification: @code{Person joe=Person("Joe", "Jones");}.
-
-The constructor is now easy to use, but it is quite a hassle to define. If you
-write a lot of constructors, you will find that you are repeating a lot of code
-in each of them. Fortunately, your friendly neighbourhood Asymptote
-developers have devised a way to automate much of the process.
-
+We can reduce the work by defining @code{operator init}:
@cindex @code{operator init}
-If, in the body of a structure, Asymptote encounters the definition of
-a function of the form @code{void operator init(@var{args})}, it implicitly
-defines a constructor function of the arguments @code{@var{args}} that
-uses the @code{void operator init} function to initialize a
-new instance of the structure.
-That is, it essentially defines the following constructor (assuming the
-structure is called @code{Foo}):
-
-@example
-static Foo Foo(@var{args}) @{
- Foo instance=new Foo;
- instance.operator init(@var{args});
- return instance;
-@}
-@end example
-
-This constructor is also implicitly copied to the enclosing scope after the end
-of the structure definition, so that it can used subsequently without qualifying
-it by the structure name. Our @code{Person} example can thus be implemented as:
@verbatim
struct Person {
string firstname;
@@ -4401,26 +4522,6 @@ confused with its use to define default values for variables
first case, the return type of the @code{operator init} must be @code{void}
while in the second, it must be the (non-@code{void}) type of the variable.
-@cindex @code{cputime}
-The function @code{cputime()}
-returns a structure @code{cputime} with cumulative @acronym{CPU} times
-broken down into the fields @code{parent.user}, @code{parent.system},
-@code{child.user}, and @code{child.system}, along with the cumulative
-wall clock time in @code{parent.clock}, all measured in seconds.
-For convenience, the incremental fields @code{change.user},
-@code{change.system}, and @code{change.clock} indicate the change in
-the corresponding fields since the last call to @code{cputime()}. The
-function
-@verbatim
-void write(file file=stdout, string s="", cputime c,
- string format=cputimeformat, suffix suffix=none);
-@end verbatim
-@noindent
-displays the incremental user cputime followed by ``u'',
-the incremental system cputime followed by ``s'',
-the total user cputime followed by ``U'', and
-the total system cputime followed by ``S''.
-
@cindex inheritance
@cindex virtual functions
Much like in C++, casting (@pxref{Casts}) provides for an elegant
@@ -5228,6 +5329,58 @@ If the iteration fails after the maximum allowed number of loops
@item @code{real simpson(real f(real), real a, real b, real acc=realEpsilon, real dxmax=b-a)}
returns the integral of @code{f} from @code{a} to @code{b} using adaptive Simpson integration.
+Internally, @code{operator init} implicitly defines a constructor function
+@code{Person(string,string)} as follows, where @var{args} is
+@code{string firstname, string lastname} in this case:
+@example
+struct Person @{
+ string firstname;
+ string lastname;
+
+ static Person Person(@var{args}) @{
+ Person p=new Person;
+ p.operator init(@var{args});
+ return p;
+ @}
+@}
+@end example
+@noindent
+which then can be used as:
+@verbatim
+Person joe=Person.Person("Joe", "Jones");
+@end verbatim
+
+The following is also implicitly generated in the enclosing scope,
+after the end of the structure definition.
+@verbatim
+from Person unravel Person;
+@end verbatim
+@noindent
+It allows us to use the constructor without qualification,
+otherwise we would have to refer to the constructor by the qualified name
+@code{Person.Person}.
+
+@cindex @code{cputime}
+@noindent
+@item @code{cputime cputime()}
+returns a structure @code{cputime} with cumulative @acronym{CPU} times
+broken down into the fields @code{parent.user}, @code{parent.system},
+@code{child.user}, and @code{child.system}, along with the cumulative
+wall clock time in @code{parent.clock}, all measured in seconds.
+For convenience, the incremental fields @code{change.user},
+@code{change.system}, and @code{change.clock} indicate the change in
+the corresponding fields since the last call to @code{cputime()}. The
+function
+@verbatim
+void write(file file=stdout, string s="", cputime c,
+ string format=cputimeformat, suffix suffix=none);
+@end verbatim
+@noindent
+displays the incremental user cputime followed by ``u'',
+the incremental system cputime followed by ``s'',
+the total user cputime followed by ``U'', and
+the total system cputime followed by ``S''.
+
@end table
@node Arrays, Casts, Functions, Programming
@@ -6073,7 +6226,6 @@ nonalphanumeric characters, enclose it with quotation marks:
@cindex @acronym{libcurl}
If @code{Asymptote} is compiled with support for @code{libcurl},
the file name can even be a @acronym{URL}:
-@noindent
@code{import "https://raw.githubusercontent.com/vectorgraphics/asymptote/HEAD/doc/axis3.asy" as axis3;}
It is an error if modules import themselves (or each other in a cycle).
@@ -6175,10 +6327,9 @@ access templatedModule(T=string, S=int[], Number=real)
@end verbatim
@noindent
Note that this is actually an @emph{access} command rather than an
-@emph{import} command, so the names of types, functions, etc. would have to be
-stated as e.g. @code{templatedModule_string_int_real.Wrapper_Number} rather than
-just @code{Wrapper_Number} (where @code{Wrapper_Number} is a type defined in
-@code{templatedModule.asy}).
+@emph{import} command, so a type, function, or variable @code{A}
+defined in @code{templatedModule.asy} would need to be accessed
+qualified as @code{templatedModule_string_int_real.A}.
Alternatively, the module could be imported via a command like
@verbatim
@@ -6191,12 +6342,12 @@ This command would automatically rename @code{Wrapper_Number} to
@code{Wrapper_real} and would also allow the use of any @code{operator ==}
overloads defined in the module.
-For more information, see the examples in
-@url{https://github.com/vectorgraphics/asymptote/tree/647b6c5732ec94a48f0f0b2446f02c86888fe7e7/tests/template}.
+Further examples can be found in the @code{tests/template} subdirectory
+of the @code{Asymptote} source directory.
-Issues: Certain standard features of almost any type (such as
-@code{==}, @code{new}, and the ability to call static methods on the type) may
-only be available for type arguments that are builtin or defined in the @code{plain} module.
+Issues: Certain expected operators (such as
+@code{operator ==}) may only be available for type arguments that are
+builtin or defined in module @code{plain}.
@node Static, , Import, Programming
@section Static
@@ -6372,7 +6523,6 @@ An even better method for processing a @code{LaTeX} file with embedded
@noindent
after putting the contents of
@url{https://raw.githubusercontent.com/vectorgraphics/asymptote/HEAD/doc/latexmkrc}
-@noindent
in a file @code{latexmkrc} in the same directory. The command
@verbatim
latexmk -pdf latexusage
@@ -6386,7 +6536,6 @@ To store the figures in a separate directory named @code{asy}, one can define
\def\asydir{asy}
@end verbatim
in @code{latexusage.tex}.
-@noindent
External @code{Asymptote} code can be included with
@cindex @code{asyinclude}
@verbatim
@@ -6442,6 +6591,7 @@ Here now is @code{latexusage.tex}:
@menu
* plain:: Default @code{Asymptote} base file
* simplex:: Linear programming: simplex method
+* simplex2:: Two-variable simplex method
* math:: Extend @code{Asymptote}'s math capabilities
* interpolate:: Interpolation routines
* geometry:: Geometry routines
@@ -6500,9 +6650,15 @@ option to disable this feature.
@section @code{simplex}
@cindex @code{simplex}
@cindex @code{deferred drawing}
-This module solves the two-variable linear programming problem using the
-simplex method. It is used by the module @code{plain} for automatic
-sizing of pictures.
+This module solves the general linear programming problem using the
+simplex method.
+
+@node simplex2, math, plain, Base modules
+@section @code{simplex2}
+@cindex @code{simplex2}
+@cindex @code{deferred drawing}
+This module solves a special case of the two-variable linear programming
+problem used by the module @code{plain} for automatic sizing of pictures.
@node math, interpolate, simplex, Base modules
@section @code{math}
@@ -6763,13 +6919,13 @@ sharp corners of paths, as illustrated in the example file @code{@uref{https://a
@node animation, embed, roundedpath, Base modules
@section @code{animation}
@cindex @code{animation}
-@cindex @code{convert}
+@cindex @code{magick}
@cindex animation
@cindex @code{ImageMagick}
This module allows one to generate animations, as illustrated by the
files @code{@uref{https://asymptote.sourceforge.io/gallery/animations/wheel.gif,,wheel}@uref{https://asymptote.sourceforge.io/gallery/animations/wheel.asy,,.asy}}, @code{@uref{https://asymptote.sourceforge.io/gallery/animations/wavepacket.gif,,wavepacket}@uref{https://asymptote.sourceforge.io/gallery/animations/wavepacket.asy,,.asy}}, and @code{@uref{https://asymptote.sourceforge.io/gallery/animations/cube.gif,,cube}@uref{https://asymptote.sourceforge.io/gallery/animations/cube.asy,,.asy}} in
the @code{animations} subdirectory of the examples directory. These
-animations use the @code{ImageMagick} @code{convert} program to
+animations use the @code{ImageMagick} @code{magick} program to
merge multiple images into a @acronym{GIF} or @acronym{MPEG}
movie.
@@ -6780,7 +6936,6 @@ module, generates higher-quality portable clickable @acronym{PDF} movies, with
optional controls. This requires installing the module
@quotation
@url{http://mirror.ctan.org/macros/latex/contrib/animate/animate.sty}
-@noindent
@end quotation
@noindent
(version 2007/11/30 or later) in a new directory @code{animate} in the
@@ -8043,7 +8198,7 @@ light nolight;
@cindex @code{transparent}
The @code{currentlight.background} (or @code{background} member of the
specified @code{light}) can be used
-to set the background colour for 2D (or 3D) images. The default
+to set the background color for 2D (or 3D) images. The default
background is white for @code{HTML} images and transparent for all
other formats. One can request a completely transparent background for
3D @code{WebGL} images with
@@ -8949,7 +9104,6 @@ functions in @code{graph.asy}.
@cindex @code{xaxis3}
@cindex @code{yaxis3}
@cindex @code{zaxis3}
-@noindent
To draw an @math{x} axis in three dimensions, use the routine
@verbatim
void xaxis3(picture pic=currentpicture, Label L="", axis axis=YZZero,
@@ -9194,7 +9348,7 @@ depends of the relative time.
The casting of @code{path} to @code{coloredpath} allows the
use of a @code{path} instead of a @code{coloredpath}; in this case the
-shading behaviour is the default shading behavior for a surface.
+shading behavior is the default shading behavior for a surface.
An example of @code{tube} is provided in the file
@code{@uref{https://asymptote.sourceforge.io/gallery/3Dwebgl/trefoilknot.html,,trefoilknot}@uref{https://asymptote.sourceforge.io/gallery/3Dwebgl/trefoilknot.asy,,.asy}}. Further examples can be found at
@@ -9602,7 +9756,7 @@ settings.autoplain=true;
at the beginning of the configuration file, it can contain arbitrary
@code{Asymptote} code.
-@cindex @code{convert}
+@cindex @code{magick}
@cindex @code{output}
@cindex @code{format}
@cindex @code{ImageMagick}
@@ -9619,7 +9773,7 @@ at the beginning of the configuration file, it can contain arbitrary
@cindex @code{EPS}
@cindex @code{PDF}
@anchor{texengines}
-@anchor{convert}
+@anchor{magick}
The default output format is @acronym{EPS} for the (default)
@code{latex} and @code{tex} tex engine and @acronym{PDF} for the
@code{pdflatex}, @code{xelatex}, @code{context}, @code{luatex}, and
@@ -9638,20 +9792,18 @@ which can display @acronym{SVG} output (used by the
with the default setting @code{settings.dvisvgmOptions="--optimize"}.
@code{Asymptote} can also produce any output format supported
-by the @code{ImageMagick} @code{convert} program (version 6.3.5 or
-later recommended; an @code{Invalid Parameter} error message indicates
-that the @code{MSDOS} utility @code{convert} is being used instead of
-the one that comes with @code{ImageMagick}).
+by the @code{ImageMagick} @code{magick} program (version 7 or
+later.
The optional setting @code{-render n} requests
an output resolution of @code{n} pixels per @code{bp}. Antialiasing is
controlled by the parameter @code{antialias}, which by default
specifies a sampling width of 2 pixels.
-To give other options to @code{convert}, use the
-@code{convertOptions} setting or call convert manually. This example
+To give other options to @code{magick}, use the
+@code{convertOptions} setting or call @code{magick convert} manually. This example
emulates how @code{Asymptote} produces antialiased @code{tiff} output at
one pixel per @code{bp}:
@verbatim
-asy -o - venn | convert -alpha Off -density 144x144 -geometry 50%x eps:- venn.tiff
+asy -o - venn | magick convert -alpha Off -density 144x144 -geometry 50%x eps:- venn.tiff
@end verbatim
@cindex @code{nosafe}
@@ -10006,9 +10158,9 @@ available from @url{https://sourceforge.net/projects/pstoedit/}) includes an
@code{Asymptote} backend. Unlike virtually all other @code{pstoedit}
backends, this driver includes native clipping, even-odd fill rule,
@code{PostScript} subpath, and full image support. Here is an example:
+
@noindent
@code{asy -V @value{Datadir}/doc/asymptote/examples/venn.asy}
-@noindent
@verbatim
pstoedit -f asy venn.eps test.asy
asy -V test
@@ -10219,7 +10371,7 @@ developed the @code{Asymptote Web Application} hosted at
@c LocalWords: MetaPost MetaFont Hammerlindl Healy texinfo autoload setq setf
@c LocalWords: printindex setfilename settitle dircategory direntry titlepage
@c LocalWords: vskip filll insertcopying ifnottex detailmenu alist augroup PQ
-@c LocalWords: bool behaviour facto zxf login Debian dev filetypedetect
+@c LocalWords: bool behavior facto zxf login Debian dev filetypedetect
@c LocalWords: FFTW bp readline gv eps args Boehm gc evenoddoverlap png joe
@c LocalWords: boolean initializer expi dir xpart ypart STL substring rfind
@c LocalWords: pos substr strftime typedef pxref unitcircle yscale Bezier iff
diff --git a/graphics/asymptote/examples/basealign.asy b/graphics/asymptote/doc/basealign.asy
index d653ec3c04..d653ec3c04 100644
--- a/graphics/asymptote/examples/basealign.asy
+++ b/graphics/asymptote/doc/basealign.asy
diff --git a/graphics/asymptote/doc/png/asymptote.info b/graphics/asymptote/doc/png/asymptote.info
index be3ab4d28a..672c1369bd 100644
--- a/graphics/asymptote/doc/png/asymptote.info
+++ b/graphics/asymptote/doc/png/asymptote.info
@@ -1,7 +1,7 @@
-This is asymptote.info, produced by makeinfo version 7.0.2 from
+This is asymptote.info, produced by makeinfo version 7.1 from
asymptote.texi.
-This file documents ‘Asymptote’, version 2.89.
+This file documents ‘Asymptote’, version 2.90.
<https://asymptote.sourceforge.io>
@@ -22,7 +22,7 @@ File: asymptote.info, Node: Top, Next: Description, Prev: (dir), Up: (dir)
Asymptote
*********
-This file documents ‘Asymptote’, version 2.89.
+This file documents ‘Asymptote’, version 2.90.
<https://asymptote.sourceforge.io>
@@ -53,7 +53,7 @@ This file documents ‘Asymptote’, version 2.89.
* Credits:: Contributions and acknowledgments
* Index:: General index
- — The Detailed Node Listing —
+ -- The Detailed Node Listing --
Installation
@@ -65,6 +65,7 @@ Installation
* Compiling from UNIX source:: Building ‘Asymptote’ from scratch
* Editing modes:: Convenient ‘emacs’ and ‘vim’ modes
* Git:: Getting the latest development source
+* Building the documentation:: Building the documentation
* Uninstall:: Goodbye, ‘Asymptote’!
Tutorial
@@ -89,6 +90,7 @@ Programming
* Pens:: Colors, line types, line widths, font sizes
* Transforms:: Affine transforms
* Frames and pictures:: Canvases for immediate and deferred drawing
+* Deferred drawing:: Witholding drawing until all data is available
* Files:: Reading and writing your data
* Variable initializers:: Initialize your variables
* Structures:: Organize your data
@@ -125,7 +127,8 @@ Base modules
* plain:: Default ‘Asymptote’ base file
* simplex:: Linear programming: simplex method
-* math:: Extend ‘Asymptote’’s math capabilities
+* simplex2:: Two-variable simplex method
+* math:: Extend ‘Asymptote’'s math capabilities
* interpolate:: Interpolation routines
* geometry:: Geometry routines
* trembling:: Wavy lines
@@ -280,6 +283,7 @@ File: asymptote.info, Node: Installation, Next: Tutorial, Prev: Description,
* Compiling from UNIX source:: Building ‘Asymptote’ from scratch
* Editing modes:: Convenient ‘emacs’ and ‘vim’ modes
* Git:: Getting the latest development source
+* Building the documentation:: Building the documentation
* Uninstall:: Goodbye, ‘Asymptote’!
After following the instructions for your specific distribution, please
@@ -312,7 +316,7 @@ dnf --enablerepo=rawhide install asymptote
To install the latest version of ‘Asymptote’ on a Debian-based
distribution (e.g. Ubuntu, Mepis, Linspire) follow the instructions for
compiling from ‘UNIX’ source (*note Compiling from UNIX source::).
-Alternatively, Debian users can install one of Hubert Chan’s prebuilt
+Alternatively, Debian users can install one of Hubert Chan's prebuilt
‘Asymptote’ binaries from
<http://ftp.debian.org/debian/pool/main/a/asymptote>
@@ -358,7 +362,7 @@ PDF’ available from <https://www.sumatrapdfreader.org/>.
<https://www.imagemagick.org/script/binary-releases.php>
is required to support output formats other than HTML, PDF, SVG, and PNG
-(*note convert::). The ‘Python 3’ interpreter from
+(*note magick::). The ‘Python 3’ interpreter from
<https://www.python.org> is only required if you wish to try out the
graphical user interface (*note GUI::).
@@ -483,7 +487,7 @@ in the order listed:
by ‘:’ under UNIX and ‘;’ under ‘MSDOS’);
3. The directory specified by the environment variable
‘ASYMPTOTE_HOME’; if this variable is not set, the directory ‘.asy’
- in the user’s home directory (‘%USERPROFILE%\.asy’ under ‘MSDOS’)
+ in the user's home directory (‘%USERPROFILE%\.asy’ under ‘MSDOS’)
is used;
4. The ‘Asymptote’ system directory (by default,
‘/usr/local/share/asymptote’ under ‘UNIX’ and ‘C:\Program
@@ -559,7 +563,7 @@ able to take Fourier transforms of data (say, to compute an audio power
spectrum). The ‘GSL’ library is only required if you require the
special functions that it supports.
- If you don’t want to install ‘Asymptote’ system wide, just make sure
+ If you don't want to install ‘Asymptote’ system wide, just make sure
the compiled binary ‘asy’ and GUI script ‘xasy’ are in your path and set
the configuration variable ‘dir’ to point to the directory ‘base’ (in
the top level directory of the ‘Asymptote’ source code).
@@ -606,7 +610,7 @@ au BufNewFile,BufRead *.asy setf asy
augroup END
filetype plugin on
- If any of these directories or files don’t exist, just create them.
+ If any of these directories or files don't exist, just create them.
To set ‘vim’ up to run the current asymptote script using ‘:make’ just
add to ‘~/.vim/ftplugin/asy.vim’:
setlocal makeprg=asy\ %
@@ -639,10 +643,27 @@ dependencies:
apt-get build-dep asymptote

+File: asymptote.info, Node: Building the documentation, Next: Uninstall, Prev: Git, Up: Installation
+
+2.9 Building the documentation
+==============================
+
+Here are instructions for building the documentation:
+cd doc
+make # for both the PDF version doc/asymptote.pdf and the HTML version
+cd png
+make # for the HTML version only: doc/png/index.html
+ Note that the ‘HTML’ version cannot be built without executing ‘make’
+from ‘doc’ folder first.
+
+ The ‘asy’ executable is required for compiling the diagrams in the
+documentation.
+
+
File: asymptote.info, Node: Uninstall, Prev: Git, Up: Installation
-2.9 Uninstall
-=============
+2.10 Uninstall
+==============
To uninstall a ‘Linux x86_64’ binary distribution, use the commands
tar -zxvf asymptote-x.xx.x86_64.tgz | xargs --replace=% rm /%
@@ -711,12 +732,13 @@ File: asymptote.info, Node: Drawing in interactive mode, Next: Figure size, P
Another method is _interactive mode_, where ‘Asymptote’ reads individual
commands as they are entered by the user. To try this out, enter
-‘Asymptote’’s interactive mode by clicking on the ‘Asymptote’ icon or
+‘Asymptote’'s interactive mode by clicking on the ‘Asymptote’ icon or
typing the command ‘asy’. Then type
draw((0,0)--(100,100));
-followed by ‘Enter’, to obtain the above image. At this point you can
-type further ‘draw’ commands, which will be added to the displayed
-figure, ‘erase’ to clear the canvas,
+followed by ‘Enter’, to obtain the above image.
+
+ At this point you can type further ‘draw’ commands, which will be
+added to the displayed figure, ‘erase’ to clear the canvas,
input test;
to execute all of the commands contained in the file ‘test.asy’, or
‘quit’ to exit interactive mode. You can use the arrow keys in
@@ -871,7 +893,7 @@ File: asymptote.info, Node: Drawing commands, Next: Bezier curves, Prev: Tuto
4 Drawing commands
******************
-All of ‘Asymptote’’s graphical capabilities are based on four primitive
+All of ‘Asymptote’'s graphical capabilities are based on four primitive
commands. The three ‘PostScript’ drawing commands ‘draw’, ‘fill’, and
‘clip’ add objects to a picture in the order in which they are executed,
with the most recently drawn object appearing on top. The labeling
@@ -925,8 +947,8 @@ convenience, the arguments ‘arrow’ and ‘bar’ may be specified in either
order. The argument ‘legend’ is a Label to use in constructing an
optional legend entry.
- Bars are useful for indicating dimensions. The possible values of
-‘bar’ are ‘None’, ‘BeginBar’, ‘EndBar’ (or equivalently ‘Bar’), and
+ Bars ‘bar’ are useful for indicating dimensions. The possible values
+of ‘bar’ are ‘None’, ‘BeginBar’, ‘EndBar’ (or equivalently ‘Bar’), and
‘Bars’ (which draws a bar at both ends of the path). Each of these bar
specifiers (except for ‘None’) will accept an optional real argument
that denotes the length of the bar in ‘PostScript’ coordinates. The
@@ -935,37 +957,71 @@ default bar length is ‘barsize(pen)’.
The possible values of ‘arrow’ are ‘None’, ‘Blank’ (which draws no
arrows or path), ‘BeginArrow’, ‘MidArrow’, ‘EndArrow’ (or equivalently
‘Arrow’), and ‘Arrows’ (which draws an arrow at both ends of the path).
-All of the arrow specifiers except for ‘None’ and ‘Blank’ may be given
-the optional arguments arrowhead ‘arrowhead’ (one of the predefined
-arrowhead styles ‘DefaultHead’, ‘SimpleHead’, ‘HookHead’, ‘TeXHead’),
-real ‘size’ (arrowhead size in ‘PostScript’ coordinates), real ‘angle’
-(arrowhead angle in degrees), filltype ‘filltype’ (one of ‘FillDraw’,
-‘Fill’, ‘NoFill’, ‘UnFill’, ‘Draw’) and (except for ‘MidArrow’ and
-‘Arrows’) a real ‘position’ (in the sense of ‘point(path p, real t)’)
-along the path where the tip of the arrow should be placed. The default
-arrowhead size when drawn with a pen ‘p’ is ‘arrowsize(p)’. There are
-also arrow versions with slightly modified default values of ‘size’ and
-‘angle’ suitable for curved arrows: ‘BeginArcArrow’, ‘EndArcArrow’ (or
-equivalently ‘ArcArrow’), ‘MidArcArrow’, and ‘ArcArrows’.
-
- Margins can be used to shrink the visible portion of a path by
-‘labelmargin(p)’ to avoid overlap with other drawn objects. Typical
-values of ‘margin’ are ‘NoMargin’, ‘BeginMargin’, ‘EndMargin’ (or
-equivalently ‘Margin’), and ‘Margins’ (which leaves a margin at both
-ends of the path). One may use ‘Margin(real begin, real end=begin)’ to
-specify the size of the beginning and ending margin, respectively, in
-multiples of the units ‘labelmargin(p)’ used for aligning labels.
-Alternatively, ‘BeginPenMargin’, ‘EndPenMargin’ (or equivalently
-‘PenMargin’), ‘PenMargins’, ‘PenMargin(real begin, real end=begin)’
-specify a margin in units of the pen line width, taking account of the
-pen line width when drawing the path or arrow. For example, use
-‘DotMargin’, an abbreviation for
-‘PenMargin(-0.5*dotfactor,0.5*dotfactor)’, to draw from the usual
-beginning point just up to the boundary of an end dot of width
-‘dotfactor*linewidth(p)’. The qualifiers ‘BeginDotMargin’,
-‘EndDotMargin’, and ‘DotMargins’ work similarly. The qualifier
-‘TrueMargin(real begin, real end=begin)’ allows one to specify a margin
-directly in ‘PostScript’ units, independent of the pen line width.
+
+ There are also arrow versions with slightly modified default values
+of ‘size’ and ‘angle’ suitable for curved arrows: ‘BeginArcArrow’,
+‘EndArcArrow’ (or equivalently ‘ArcArrow’), ‘MidArcArrow’, and
+‘ArcArrows’.
+
+ For example:
+draw((0,0)--(1,1),arrow=Arrows);
+
+ All of the arrow specifiers except for ‘None’ and ‘Blank’ may be
+given optional arguments, for example:
+draw((0,0)--(1,1),arrow=Arrow(
+ arrowhead=HookHead,size=3mm,angle=20,filltype=Draw,position=0.9));
+
+ The function ‘Arrow’ has the signature
+arrowbar Arrow(arrowhead arrowhead=DefaultHead,
+ real size=0, real angle=arrowangle,
+ filltype filltype=null, position position=EndPoint)
+Calling ‘Arrow()’ returns ‘Arrow’, which is an ‘arrowbar’ object. The
+parameters are:
+
+ • ‘arrowhead’ can be one of the predefined arrowhead styles
+ ‘DefaultHead’, ‘SimpleHead’, ‘HookHead’, ‘TeXHead’.
+ • real ‘size’ is the arrowhead size in ‘PostScript’ coordinates.
+
+ The default arrowhead size when drawn with a pen ‘p’ is
+ ‘arrowsize(p)’.
+ • real ‘angle’ is the arrowhead angle in degrees.
+
+ • filltype ‘filltype’ (*note filltype::),
+ • (except for ‘MidArrow’ and ‘Arrows’) real ‘position’ (in the sense
+ of ‘point(path p, real t)’) along the path where the tip of the
+ arrow should be placed.
+
+ Margins ‘margin’ can be used to shrink the visible portion of a path
+by ‘labelmargin(p)’ to avoid overlap with other drawn objects.
+
+ Typical values of ‘margin’ are:
+‘NoMargin’
+‘BeginMargin’
+‘EndMargin’
+ (equivalently ‘Margin’)
+‘Margins’
+ leaves a margin at both ends of the path.
+‘Margin(real begin, real end=begin)’
+ specify the size of the beginning and ending margin, respectively,
+ in multiples of the units ‘labelmargin(p)’ used for aligning
+ labels.
+‘BeginPenMargin’
+‘EndPenMargin’
+ (equivalently ‘PenMargin’)
+‘PenMargins’
+‘PenMargin(real begin, real end=begin)’
+ specify a margin in units of the pen line width, taking account of
+ the pen line width when drawing the path or arrow.
+‘DotMargin’
+ an abbreviation for ‘PenMargin(-0.5*dotfactor,0.5*dotfactor)’, used
+ to draw from the usual beginning point just up to the boundary of
+ an end dot of width ‘dotfactor*linewidth(p)’.
+‘BeginDotMargin’
+‘DotMargins’
+ work similarly.
+‘TrueMargin(real begin, real end=begin)’
+ specify a margin directly in ‘PostScript’ units, independent of the
+ pen line width.
The use of arrows, bars, and margins is illustrated by the examples
‘Pythagoras.asy’ and ‘sqrtx01.asy’.
@@ -1170,9 +1226,16 @@ void label(picture pic=currentpicture, Label L, pair position,
Draw Label ‘L’ on picture ‘pic’ using pen ‘p’. If ‘align’ is
‘NoAlign’, the label will be centered at user coordinate ‘position’;
otherwise it will be aligned in the direction of ‘align’ and displaced
-from ‘position’ by the ‘PostScript’ offset ‘align*labelmargin(p)’. The
-constant ‘Align’ can be used to align the bottom-left corner of the
-label at ‘position’. The Label ‘L’ can either be a string or the
+from ‘position’ by the ‘PostScript’ offset ‘align*labelmargin(p)’.
+
+ Here, ‘real labelmargin(pen p=currentpen)’ is a quantity used to
+align labels. In the code below,
+label("abcdefg",(0,0),align=up,basealign);
+the baseline of the label will be exactly ‘labelmargin(currentpen)’
+‘PostScript’ units above the center.
+
+ The constant ‘Align’ can be used to align the bottom-left corner of
+the label at ‘position’. The Label ‘L’ can either be a string or the
structure obtained by calling one of the functions
Label Label(string s="", pair position, align align=NoAlign,
pen p=nullpen, embed embed=Rotate, filltype filltype=NoFill);
@@ -1249,9 +1312,11 @@ label(graphic("file.eps","width=1cm"),(0,0),NE);
layer();
The ‘string baseline(string s, string template="\strut")’ function
-can be used to enlarge the bounding box of labels to match a given
+can be used to enlarge the bounding box of a label to match a given
template, so that their baselines will be typeset on a horizontal line.
-See ‘Pythagoras.asy’ for an example.
+See ‘Pythagoras.asy’ for an example. Alternatively, the pen ‘basealign’
+may be used to force labels to respect the TeX baseline (*note
+basealign::).
One can prevent labels from overwriting one another with the
‘overwrite’ pen attribute (*note overwrite::).
@@ -1260,7 +1325,7 @@ See ‘Pythagoras.asy’ for an example.
frames to be treated in a uniform manner. A group of objects may be
packed together into single frame with the routine
frame pack(pair align=2S ... object inset[]);
-To draw or fill a box (or ellipse or other path) around a Label and
+To draw or fill a box (or ellipse or other path) around a ‘Label’ and
return the bounding object, use one of the routines
object draw(picture pic=currentpicture, Label L, envelope e,
real xmargin=0, real ymargin=xmargin, pen p=currentpen,
@@ -1269,7 +1334,7 @@ object draw(picture pic=currentpicture, Label L, envelope e, pair position,
real xmargin=0, real ymargin=xmargin, pen p=currentpen,
filltype filltype=NoFill, bool above=true);
Here ‘envelope’ is a boundary-drawing routine such as ‘box’, ‘roundbox’,
-or ‘ellipse’ defined in ‘plain_boxes.asy’ (*note envelope::).
+or ‘ellipse’ defined in ‘plain_boxes.asy’.
The function ‘path[] texpath(Label L)’ returns the path array that
TeX would fill to draw the Label ‘L’.
@@ -1347,7 +1412,7 @@ draw((0,0)..controls (0,100) and (100,100)..(100,0));
However, it is usually more convenient to just use the ‘..’ operator,
which tells ‘Asymptote’ to choose its own control points using the
-algorithms described in Donald Knuth’s monograph, The MetaFontbook,
+algorithms described in Donald Knuth's monograph, The MetaFontbook,
Chapter 14. The user can still customize the guide (or path) by
specifying direction, tension, and curl values.
@@ -1398,6 +1463,7 @@ File: asymptote.info, Node: Programming, Next: LaTeX usage, Prev: Bezier curv
* Pens:: Colors, line types, line widths, font sizes
* Transforms:: Affine transforms
* Frames and pictures:: Canvases for immediate and deferred drawing
+* Deferred drawing:: Witholding drawing until all data is available
* Files:: Reading and writing your data
* Variable initializers:: Initialize your variables
* Structures:: Organize your data
@@ -1665,7 +1731,7 @@ user-defined types):
Strings delimited by single quotes (‘'’) have the same mappings as
character strings in ANSI ‘C’:
- • \’ maps to ’
+ • \' maps to '
• \" maps to "
• \? maps to ?
• \\ maps to backslash
@@ -1738,14 +1804,14 @@ user-defined types):
returns a string containing ‘n’ formatted according to the
C-style format string ‘s’ using locale ‘locale’ (or the
current locale if an empty string is specified), following the
- behaviour of the C function ‘fprintf’), except that only one
+ behavior of the C function ‘fprintf’), except that only one
data field is allowed.
‘string format(string s=defaultformat, bool forcemath=false, string s=defaultseparator, real x, string locale="")’
returns a string containing ‘x’ formatted according to the
C-style format string ‘s’ using locale ‘locale’ (or the
current locale if an empty string is specified), following the
- behaviour of the C function ‘fprintf’), except that only one
+ behavior of the C function ‘fprintf’), except that only one
data field is allowed, trailing zeros are removed by default
(unless ‘#’ is specified), and if ‘s’ specifies math mode or
‘forcemath=true’, TeX is used to typeset scientific notation
@@ -1788,7 +1854,7 @@ user-defined types):
seconds(time("%b %d %r %z %Y"),"%b %d %r %z %Y");
seconds(time("%b %d %r %Z %Y"),"%b %d %r "+time("%Z")+" %Y");
1+(seconds()-seconds("Jan 1","%b %d"))/(24*60*60);
- The last example returns today’s ordinal date, measured from
+ The last example returns today's ordinal date, measured from
the beginning of the year.
‘string time(int seconds, string format="%a %b %d %T %Z %Y")’
@@ -2088,7 +2154,7 @@ File: asymptote.info, Node: Paths and guides, Next: Pens, Prev: Data types,
returns the portions of path ‘p’ before and after the ‘n’th
intersection of ‘p’ with path ‘knife’ as a structure ‘slice’
(if no intersection exist is found, the entire path is
- considered to be ‘before’ the intersection):
+ considered to be 'before' the intersection):
struct slice {
path before,after;
}
@@ -2106,7 +2172,7 @@ File: asymptote.info, Node: Paths and guides, Next: Pens, Prev: Data types,
‘path buildcycle(... path[] p);’
This returns the path surrounding a region bounded by a list
of two or more consecutively intersecting paths, following the
- behaviour of the ‘MetaPost buildcycle’ command.
+ behavior of the ‘MetaPost buildcycle’ command.
‘pair min(path p);’
returns the pair (left,bottom) for the path bounding box of
@@ -2139,8 +2205,9 @@ File: asymptote.info, Node: Paths and guides, Next: Pens, Prev: Data types,
otherwise.
‘pair inside(path p, pen fillrule=currentpen);’
- returns an arbitrary point strictly inside a cyclic path ‘p’
- according to the fill rule ‘fillrule’ (*note fillrule::).
+ returns an arbitrary point strictly inside a nondegenerate
+ cyclic path ‘p’ according to the fill rule ‘fillrule’ (*note
+ fillrule::).
‘path[] strokepath(path g, pen p=currentpen);’
returns the path array that ‘PostScript’ would fill in drawing
@@ -2340,7 +2407,7 @@ with one or more color components equal to 1.
definitions of some colors (e.g. ‘Green’) actually disagree.
‘Asymptote’ also comes with a ‘asycolors.sty’ ‘LaTeX’ package that
- defines to ‘LaTeX’ CMYK versions of ‘Asymptote’’s predefined
+ defines to ‘LaTeX’ CMYK versions of ‘Asymptote’'s predefined
colors, so that they can be used directly within ‘LaTeX’ strings.
Normally, such colors are passed to ‘LaTeX’ via a pen argument;
however, to change the color of only a portion of a string, say for
@@ -2442,12 +2509,65 @@ with one or more color components equal to 1.
pen nobasealign=basealign(0);
pen basealign=basealign(1);
- The default setting, ‘nobasealign’,which may be changed with
+ The default setting, ‘nobasealign’, which may be changed with
‘defaultpen(pen)’, causes the label alignment routines to use the
full label bounding box for alignment. In contrast, ‘basealign’
requests that the TeX baseline be respected. The base align
setting of a pen is returned by ‘int basealign(pen p=currentpen)’.
+ For example, in the following image, the baselines of green \pi and
+ \gamma are aligned, while the bottom border of red -\pi and -\gamma
+ are aligned.
+ import fontsize;
+ import three;
+
+ settings.autobillboard=false;
+ settings.embed=false;
+ currentprojection=orthographic(Z);
+
+ defaultpen(fontsize(100pt));
+
+ dot(O);
+
+ label("acg",O,align=N,basealign);
+ label("ace",O,align=N,red);
+ label("acg",O,align=S,basealign);
+ label("ace",O,align=S,red);
+ label("acg",O,align=E,basealign);
+ label("ace",O,align=E,red);
+ label("acg",O,align=W,basealign);
+ label("ace",O,align=W,red);
+
+ picture pic;
+ dot(pic,(labelmargin(),0,0),blue);
+ dot(pic,(-labelmargin(),0,0),blue);
+ dot(pic,(0,labelmargin(),0),blue);
+ dot(pic,(0,-labelmargin(),0),blue);
+ add(pic,O);
+
+ dot((0,0));
+
+ label("acg",(0,0),align=N,basealign);
+ label("ace",(0,0),align=N,red);
+ label("acg",(0,0),align=S,basealign);
+ label("ace",(0,0),align=S,red);
+ label("acg",(0,0),align=E,basealign);
+ label("ace",(0,0),align=E,red);
+ label("acg",(0,0),align=W,basealign);
+ label("ace",(0,0),align=W,red);
+
+ picture pic;
+ dot(pic,(labelmargin(),0),blue);
+ dot(pic,(-labelmargin(),0),blue);
+ dot(pic,(0,labelmargin()),blue);
+ dot(pic,(0,-labelmargin()),blue);
+ add(pic,(0,0));
+
+ [./basealign]
+
+ Another method for aligning baselines is provided by the ‘baseline’
+ function (*note baseline::).
+
• The font size is specified in TeX points (1 pt = 1/72.27 inches)
with the function ‘pen fontsize(real size, real
lineskip=1.2*size)’. The default font size, 12pt, may be changed
@@ -2514,7 +2634,7 @@ with one or more color components equal to 1.
pen opacity(real opacity=1, string blend="Compatible");
The opacity can be varied from ‘0’ (fully transparent) to the
default value of ‘1’ (opaque), and ‘blend’ specifies one of the
- following foreground–background blending operations:
+ following foreground-background blending operations:
"Compatible","Normal","Multiply","Screen","Overlay","SoftLight",
"HardLight","ColorDodge","ColorBurn","Darken","Lighten","Difference",
"Exclusion","Hue","Saturation","Color","Luminosity",
@@ -2523,7 +2643,7 @@ with one or more color components equal to 1.
Since ‘PostScript’ does not support transparency, this feature is
only effective with the ‘-f pdf’ output format option; other
formats can be produced from the resulting PDF file with the
- ‘ImageMagick’ ‘convert’ program. Labels are always drawn with an
+ ‘ImageMagick’ ‘magick’ program. Labels are always drawn with an
‘opacity’ of 1. A simple example of transparent filling is
provided in the example file ‘transparency.asy’.
@@ -2621,7 +2741,7 @@ with one or more color components equal to 1.
‘Allow’
Allow labels to overwrite one another. This is the default
- behaviour (unless overridden with ‘defaultpen(pen)’.
+ behavior (unless overridden with ‘defaultpen(pen)’.
‘Suppress’
Suppress, with a warning, each label that would overwrite
@@ -2685,7 +2805,7 @@ power with the ‘^’ operator.
‘transform scale(real x, real y);’
scale by ‘x’ in the x direction and by ‘y’ in the y direction;
‘transform slant(real s);’
- maps ‘(x,y)’ –> ‘(x+s*y,y)’;
+ maps ‘(x,y)’ -> ‘(x+s*y,y)’;
‘transform rotate(real angle, pair z=(0,0));’
rotates by ‘angle’ in degrees about ‘z’;
‘transform reflect(pair a, pair b);’
@@ -2700,7 +2820,7 @@ respectively. The function ‘bool isometry(transform t)’ can be used to
test if ‘t’ is an isometry (preserves distance).

-File: asymptote.info, Node: Frames and pictures, Next: Files, Prev: Transforms, Up: Programming
+File: asymptote.info, Node: Frames and pictures, Next: Deferred drawing, Prev: Transforms, Up: Programming
6.5 Frames and pictures
=======================
@@ -2724,19 +2844,6 @@ File: asymptote.info, Node: Frames and pictures, Next: Files, Prev: Transform
label::), is returned by
frame align(frame f, pair align);
- To draw or fill a box or ellipse around a label or frame and return
- the boundary as a path, use one of the predefined ‘envelope’
- routines
- path box(frame f, Label L="", real xmargin=0,
- real ymargin=xmargin, pen p=currentpen,
- filltype filltype=NoFill, bool above=true);
- path roundbox(frame f, Label L="", real xmargin=0,
- real ymargin=xmargin, pen p=currentpen,
- filltype filltype=NoFill, bool above=true);
- path ellipse(frame f, Label L="", real xmargin=0,
- real ymargin=xmargin, pen p=currentpen,
- filltype filltype=NoFill, bool above=true);
-
‘picture’
Pictures are high-level structures (*note Structures::) defined in
the module ‘plain’ that provide canvases for drawing in user
@@ -2928,9 +3035,9 @@ File: asymptote.info, Node: Frames and pictures, Next: Files, Prev: Transform
optional background filling or clipping, and ‘above’ specifies
whether to add ‘src’ above or below existing objects.
- There are also routines to add a picture or frame ‘src’ specified
- in postscript coordinates to another picture ‘dest’ (or
- ‘currentpicture’) about the user coordinate ‘position’:
+ There are also routines to add a fixed-size picture or frame ‘src’
+ to another picture ‘dest’ (or ‘currentpicture’) about the user
+ coordinate ‘position’:
void add(picture src, pair position, bool group=true,
filltype filltype=NoFill, bool above=true);
void add(picture dest, picture src, pair position,
@@ -3027,9 +3134,86 @@ File: asymptote.info, Node: Frames and pictures, Next: Files, Prev: Transform
that can be used for importing ‘LaTeX’ packages.

-File: asymptote.info, Node: Files, Next: Variable initializers, Prev: Frames and pictures, Up: Programming
+File: asymptote.info, Node: Deferred drawing, Next: Files, Prev: Frames and pictures, Up: Programming
+
+6.6 Deferred drawing
+====================
+
+It is sometimes desirable to have elements of a fixed absolute size,
+independent of the picture scaling from user to ‘PostScript’
+coordinates. For example, normally one would want the size of a dot
+created with ‘dot’, the size of the arrowheads created with ‘arrow’
+(*note arrows::), and labels to be drawn independent of the scaling.
+
+ However, because of ‘Asymptote’'s automatic scaling feature (*note
+Figure size::), the translation between user coordinate and ‘PostScript’
+coordinate is not determined until shipout time:
+size(1cm);
+dot((0,0));
+dot((1,1));
+shipout("x"); // at this point, 1 unit coordinate = 1cm
+dot((2,2));
+shipout("y"); // at this point, 1 unit coordinate = 0.5cm
+It is therefore necessary to defer the drawing of these elements until
+shipout time.
+
+ For example, a frame can be added at a specified user coordinate of a
+picture with the deferred drawing routine ‘add(picture
+dest=currentpicture, frame src, pair position)’:
+frame f;
+fill(f,circle((0,0),1.5pt));
+add(f,position=(1,1),align=(0,0));
+
+ A deferred drawing routine is an object of type ‘drawer’, which is a
+function with signature ‘void(frame f, transform t)’. For example, if
+the drawing routine
+void d(frame f, transform t){
+ fill(f,shift(3cm,0)*circle(t*(1,1),2pt));
+}
+is added to ‘currentpicture’ with
+currentpicture.add(d);
+a filled circle of radius 2pt will be drawn on currentpicture centered
+3cm to the right of user coordinate ‘(1,1)’. The parameter ‘t’ is the
+affine transformation from user coordinates to ‘PostScript’ coordinates.
+
+ Even though the actual drawing is deferred, you still need to specify
+to the ‘Asymptote’ scaling routines that ultimately a fixed-size circle
+of radius 2pt will be drawn 3cm to the right of user-coordinate (1,1),
+by adding a frame about (1,1) that extends beyond (1,1) from
+‘(3cm-2pt,-2pt)+min(currentpen)’ to ‘(3cm+2pt,2pt)+max(currentpen)’,
+where we have even accounted for the pen linewidth. The following
+example will then produce a PDF file 10 cm wide:
+
+settings.outformat="pdf";
+size(10cm);
+dot((0,0));
+dot((1,1),red);
+add(new void(frame f, transform t) {
+ fill(f,shift(3cm,0)*circle(t*(1,1),2pt));
+});
+pair trueMin=(3cm-2pt,-2pt)+min(currentpen);
+pair trueMax=(3cm+2pt,2pt)+max(currentpen);
+currentpicture.addPoint((1,1),trueMin);
+currentpicture.addPoint((1,1),trueMax);
+Here we specified the minimum and maximum user and truesize (fixed)
+coordinates of the drawer with the ‘picture’ routine
+void addPoint(pair user, pair truesize);
+Alternatively, one can use
+void addBox(pair userMin, pair userMax, pair trueMin=0, pair trueMax=0) {
+to specify a bounding box with bottom-left corner ‘t*(1,1)+trueMin’ and
+top-right corner ‘t*(1,1)+trueMax’, where ‘t’ is the transformation that
+transforms from user coordinates to ‘PostScript’ coordinates.
+
+ For more details about deferred drawing, see "Asymptote: A vector
+graphics language," John C. Bowman and Andy Hammerlindl, TUGBOAT: The
+Communications of the TeX Users Group, 29:2, 288-294 (2008),
+
+<https://www.math.ualberta.ca/~bowman/publications/asyTUG.pdf>.
+
+
+File: asymptote.info, Node: Files, Next: Variable initializers, Prev: Deferred drawing, Up: Programming
-6.6 Files
+6.7 Files
=========
‘Asymptote’ can read and write text files (including comma-separated
@@ -3108,7 +3292,7 @@ write(fout,"List: ",1,2,3); // Writes "List: 1 2 3"
A file may be opened with ‘mode="xdr"’, to read or write double
precision (64-bit) reals and single precision (32-bit) integers in Sun
-Microsystem’s XDR (External Data Representation) portable binary format
+Microsystem's XDR (External Data Representation) portable binary format
(available on all ‘UNIX’ platforms). Alternatively, a file may also be
opened with ‘mode="binary"’ to read or write double precision reals and
single precision integers in the native (nonportable) machine binary
@@ -3188,14 +3372,14 @@ file ‘to’. Unless the ‘-globalwrite’ (or ‘-nosafe’) option is enabl
this operation is restricted to the current directory. The functions
int convert(string args="", string file="", string format="");
int animate(string args="", string file="", string format="");
-call the ‘ImageMagick’ commands ‘convert’ and ‘animate’, respectively,
+call the ‘ImageMagick’ commands ‘magick’ and ‘animate’, respectively,
with the arguments ‘args’ and the file name constructed from the strings
‘file’ and ‘format’.

File: asymptote.info, Node: Variable initializers, Next: Structures, Prev: Files, Up: Programming
-6.7 Variable initializers
+6.8 Variable initializers
=========================
A variable can be assigned a value when it is declared, as in ‘int x=3;’
@@ -3267,7 +3451,7 @@ for (var x : a)

File: asymptote.info, Node: Structures, Next: Operators, Prev: Variable initializers, Up: Programming
-6.8 Structures
+6.9 Structures
==============
Users may also define their own data types as structures, along with
@@ -3313,7 +3497,7 @@ form implicitly creates a new instance of ‘T’. That is, after the
definition of a structure ‘T’, a variable of type ‘T’ is initialized to
a new instance (‘new T’) by default. During the definition of the
structure, however, variables of type ‘T’ are initialized to ‘null’ by
-default. This special behaviour is to avoid infinite recursion of
+default. This special behavior is to avoid infinite recursion of
creating new instances in code such as
struct tree {
int value;
@@ -3366,55 +3550,10 @@ Person joe;
joe.firstname="Joe";
joe.lastname="Jones";
Creating a new Person is a chore; it takes three lines to create a new
-instance and to initialize its fields (that’s still considerably less
+instance and to initialize its fields (that's still considerably less
effort than creating a new person in real life, though).
- We can reduce the work by defining a constructor function
-‘Person(string,string)’:
-struct Person {
- string firstname;
- string lastname;
-
- static Person Person(string firstname, string lastname) {
- Person p=new Person;
- p.firstname=firstname;
- p.lastname=lastname;
- return p;
- }
-}
-
-Person joe=Person.Person("Joe", "Jones");
-
- While it is now easier than before to create a new instance, we still
-have to refer to the constructor by the qualified name ‘Person.Person’.
-If we add the line
-from Person unravel Person;
-immediately after the structure definition, then the constructor can be
-used without qualification: ‘Person joe=Person("Joe", "Jones");’.
-
- The constructor is now easy to use, but it is quite a hassle to
-define. If you write a lot of constructors, you will find that you are
-repeating a lot of code in each of them. Fortunately, your friendly
-neighbourhood Asymptote developers have devised a way to automate much
-of the process.
-
- If, in the body of a structure, Asymptote encounters the definition
-of a function of the form ‘void operator init(ARGS)’, it implicitly
-defines a constructor function of the arguments ‘ARGS’ that uses the
-‘void operator init’ function to initialize a new instance of the
-structure. That is, it essentially defines the following constructor
-(assuming the structure is called ‘Foo’):
-
- static Foo Foo(ARGS) {
- Foo instance=new Foo;
- instance.operator init(ARGS);
- return instance;
- }
-
- This constructor is also implicitly copied to the enclosing scope
-after the end of the structure definition, so that it can used
-subsequently without qualifying it by the structure name. Our ‘Person’
-example can thus be implemented as:
+ We can reduce the work by defining ‘operator init’:
struct Person {
string firstname;
string lastname;
@@ -3433,19 +3572,6 @@ not be confused with its use to define default values for variables
type of the ‘operator init’ must be ‘void’ while in the second, it must
be the (non-‘void’) type of the variable.
- The function ‘cputime()’ returns a structure ‘cputime’ with
-cumulative CPU times broken down into the fields ‘parent.user’,
-‘parent.system’, ‘child.user’, and ‘child.system’, along with the
-cumulative wall clock time in ‘parent.clock’, all measured in seconds.
-For convenience, the incremental fields ‘change.user’, ‘change.system’,
-and ‘change.clock’ indicate the change in the corresponding fields since
-the last call to ‘cputime()’. The function
-void write(file file=stdout, string s="", cputime c,
- string format=cputimeformat, suffix suffix=none);
-displays the incremental user cputime followed by “u”, the incremental
-system cputime followed by “s”, the total user cputime followed by “U”,
-and the total system cputime followed by “S”.
-
Much like in C++, casting (*note Casts::) provides for an elegant
implementation of structure inheritance, including a virtual function
‘v’:
@@ -3486,8 +3612,8 @@ write(c.y); // Outputs 3;

File: asymptote.info, Node: Operators, Next: Implicit scaling, Prev: Structures, Up: Programming
-6.9 Operators
-=============
+6.10 Operators
+==============
* Menu:
@@ -3498,8 +3624,8 @@ File: asymptote.info, Node: Operators, Next: Implicit scaling, Prev: Structur

File: asymptote.info, Node: Arithmetic & logical, Next: Self & prefix operators, Prev: Operators, Up: Operators
-6.9.1 Arithmetic & logical operators
-------------------------------------
+6.10.1 Arithmetic & logical operators
+-------------------------------------
‘Asymptote’ uses the standard binary arithmetic operators. However,
when one integer is divided by another, both arguments are converted to
@@ -3572,8 +3698,8 @@ a, int bits)’ (reverse bits within a word of length bits).

File: asymptote.info, Node: Self & prefix operators, Next: User-defined operators, Prev: Arithmetic & logical, Up: Operators
-6.9.2 Self & prefix operators
------------------------------
+6.10.2 Self & prefix operators
+------------------------------
As in C, each of the arithmetic operators ‘+’, ‘-’, ‘*’, ‘/’, ‘#’, ‘%’,
and ‘^’ can be used as a self operator. The prefix operators ‘++’
@@ -3597,8 +3723,8 @@ really needed, one can substitute the expressions ‘(++i-1)’ and

File: asymptote.info, Node: User-defined operators, Prev: Self & prefix operators, Up: Operators
-6.9.3 User-defined operators
-----------------------------
+6.10.3 User-defined operators
+-----------------------------
The following symbols may be used with ‘operator’ to define or redefine
operators on structures and built-in types:
@@ -3631,7 +3757,7 @@ write("g=",g);

File: asymptote.info, Node: Implicit scaling, Next: Functions, Prev: Operators, Up: Programming
-6.10 Implicit scaling
+6.11 Implicit scaling
=====================
If a numeric literal is in front of certain types of expressions, then
@@ -3668,7 +3794,7 @@ write(10cm);

File: asymptote.info, Node: Functions, Next: Arrays, Prev: Implicit scaling, Up: Programming
-6.11 Functions
+6.12 Functions
==============
* Menu:
@@ -3773,7 +3899,7 @@ segmentation fault, unless a fully working version of the GNU library

File: asymptote.info, Node: Default arguments, Next: Named arguments, Prev: Functions, Up: Functions
-6.11.1 Default arguments
+6.12.1 Default arguments
------------------------
‘Asymptote’ supports a more flexible mechanism for default function
@@ -3792,7 +3918,7 @@ defined.

File: asymptote.info, Node: Named arguments, Next: Rest arguments, Prev: Default arguments, Up: Functions
-6.11.2 Named arguments
+6.12.2 Named arguments
----------------------
It is sometimes difficult to remember the order in which arguments
@@ -3826,7 +3952,7 @@ x=3;
write(f(4,3));
and outputs 43.
- Parameters can be specified as “keyword-only” by putting ‘keyword’
+ Parameters can be specified as "keyword-only" by putting ‘keyword’
immediately before the parameter name, as in ‘int f(int keyword x)’ or
‘int f(int keyword x=77)’. This forces the caller of the function to
use a named argument to give a value for this parameter. That is,
@@ -3854,7 +3980,7 @@ would be allowed.

File: asymptote.info, Node: Rest arguments, Next: Mathematical functions, Prev: Named arguments, Up: Functions
-6.11.3 Rest arguments
+6.12.3 Rest arguments
---------------------
Rest arguments allow one to write functions that take a variable number
@@ -3942,7 +4068,7 @@ i(3,4); // ambiguous; the first candidate is better for the first argument,

File: asymptote.info, Node: Mathematical functions, Prev: Rest arguments, Up: Functions
-6.11.4 Mathematical functions
+6.12.4 Mathematical functions
-----------------------------
‘Asymptote’ has built-in versions of the standard ‘libm’ mathematical
@@ -4025,10 +4151,47 @@ write(Si(1.0));
returns the integral of ‘f’ from ‘a’ to ‘b’ using adaptive Simpson
integration.
+ Internally, ‘operator init’ implicitly defines a constructor
+ function ‘Person(string,string)’ as follows, where ARGS is ‘string
+ firstname, string lastname’ in this case:
+ struct Person {
+ string firstname;
+ string lastname;
+
+ static Person Person(ARGS) {
+ Person p=new Person;
+ p.operator init(ARGS);
+ return p;
+ }
+ }
+ which then can be used as:
+ Person joe=Person.Person("Joe", "Jones");
+
+ The following is also implicitly generated in the enclosing scope,
+ after the end of the structure definition.
+ from Person unravel Person;
+ It allows us to use the constructor without qualification,
+ otherwise we would have to refer to the constructor by the
+ qualified name ‘Person.Person’.
+
+‘cputime cputime()’
+ returns a structure ‘cputime’ with cumulative CPU times broken down
+ into the fields ‘parent.user’, ‘parent.system’, ‘child.user’, and
+ ‘child.system’, along with the cumulative wall clock time in
+ ‘parent.clock’, all measured in seconds. For convenience, the
+ incremental fields ‘change.user’, ‘change.system’, and
+ ‘change.clock’ indicate the change in the corresponding fields
+ since the last call to ‘cputime()’. The function
+ void write(file file=stdout, string s="", cputime c,
+ string format=cputimeformat, suffix suffix=none);
+ displays the incremental user cputime followed by "u", the
+ incremental system cputime followed by "s", the total user cputime
+ followed by "U", and the total system cputime followed by "S".
+

File: asymptote.info, Node: Arrays, Next: Casts, Prev: Functions, Up: Programming
-6.12 Arrays
+6.13 Arrays
===========
* Menu:
@@ -4445,7 +4608,7 @@ output with the functions ‘write(file,T[])’, ‘write(file,T[][])’,

File: asymptote.info, Node: Slices, Prev: Arrays, Up: Arrays
-6.12.1 Slices
+6.13.1 Slices
-------------
Asymptote allows a section of an array to be addressed as a slice using
@@ -4529,7 +4692,7 @@ of the cells.

File: asymptote.info, Node: Casts, Next: Import, Prev: Arrays, Up: Programming
-6.13 Casts
+6.14 Casts
==========
‘Asymptote’ implicitly casts ‘int’ to ‘real’, ‘int’ to ‘pair’, ‘real’ to
@@ -4596,7 +4759,7 @@ real operator cast(int x)=convert;

File: asymptote.info, Node: Import, Next: Static, Prev: Casts, Up: Programming
-6.14 Import
+6.15 Import
===========
While ‘Asymptote’ provides many features by default, some applications
@@ -4654,7 +4817,7 @@ name.
usually know all of the internal types and variables of a module, which
can also change as the module writer adds or changes features of the
module. As such, it is prudent to add ‘import’ commands at the start of
-an ‘Asymptote’ file, so that imported names won’t shadow locally defined
+an ‘Asymptote’ file, so that imported names won't shadow locally defined
functions. Still, imported names may shadow other imported names,
depending on the order in which they were imported, and imported
functions may cause overloading resolution problems if they have the
@@ -4744,7 +4907,7 @@ Imported global functions and variables are also listed if ‘imports’ is

File: asymptote.info, Node: Templated imports, Up: Import
-6.14.1 Templated imports
+6.15.1 Templated imports
------------------------
*Warning:* This feature is experimental: it has known issues and its
@@ -4765,10 +4928,9 @@ accessed for types ‘string’, ‘int[]’, and ‘real’ with the import com
access templatedModule(T=string, S=int[], Number=real)
as templatedModule_string_int_real;
Note that this is actually an _access_ command rather than an _import_
-command, so the names of types, functions, etc. would have to be stated
-as e.g. ‘templatedModule_string_int_real.Wrapper_Number’ rather than
-just ‘Wrapper_Number’ (where ‘Wrapper_Number’ is a type defined in
-‘templatedModule.asy’).
+command, so a type, function, or variable ‘A’ defined in
+‘templatedModule.asy’ would need to be accessed qualified as
+‘templatedModule_string_int_real.A’.
Alternatively, the module could be imported via a command like
from templatedModule(T=string, S=int[], Number=real) access
@@ -4778,18 +4940,17 @@ This command would automatically rename ‘Wrapper_Number’ to
‘Wrapper_real’ and would also allow the use of any ‘operator ==’
overloads defined in the module.
- For more information, see the examples in
-<https://github.com/vectorgraphics/asymptote/tree/647b6c5732ec94a48f0f0b2446f02c86888fe7e7/tests/template>.
+ Further examples can be found in the ‘tests/template’ subdirectory of
+the ‘Asymptote’ source directory.
- Issues: Certain standard features of almost any type (such as ‘==’,
-‘new’, and the ability to call static methods on the type) may only be
-available for type arguments that are builtin or defined in the ‘plain’
-module.
+ Issues: Certain expected operators (such as ‘operator ==’) may only
+be available for type arguments that are builtin or defined in module
+‘plain’.

File: asymptote.info, Node: Static, Prev: Import, Up: Programming
-6.15 Static
+6.16 Static
===========
Static qualifiers allocate the memory address of a variable in a higher
@@ -5099,7 +5260,8 @@ File: asymptote.info, Node: Base modules, Next: Options, Prev: LaTeX usage,
* plain:: Default ‘Asymptote’ base file
* simplex:: Linear programming: simplex method
-* math:: Extend ‘Asymptote’’s math capabilities
+* simplex2:: Two-variable simplex method
+* math:: Extend ‘Asymptote’'s math capabilities
* interpolate:: Interpolation routines
* geometry:: Geometry routines
* trembling:: Wavy lines
@@ -5160,17 +5322,25 @@ File: asymptote.info, Node: simplex, Next: math, Prev: plain, Up: Base modul
8.2 ‘simplex’
=============
-This module solves the two-variable linear programming problem using the
-simplex method. It is used by the module ‘plain’ for automatic sizing
-of pictures.
+This module solves the general linear programming problem using the
+simplex method.
+
+
+File: asymptote.info, Node: simplex2, Next: math, Prev: plain, Up: Base modules
+
+8.3 ‘simplex2’
+==============
+
+This module solves a special case of the two-variable linear programming
+problem used by the module ‘plain’ for automatic sizing of pictures.

File: asymptote.info, Node: math, Next: interpolate, Prev: simplex, Up: Base modules
-8.3 ‘math’
+8.4 ‘math’
==========
-This module extends ‘Asymptote’’s mathematical capabilities with useful
+This module extends ‘Asymptote’'s mathematical capabilities with useful
functions such as
‘void drawline(picture pic=currentpicture, pair P, pair Q, pen p=currentpen);’
@@ -5236,7 +5406,7 @@ functions such as

File: asymptote.info, Node: interpolate, Next: geometry, Prev: math, Up: Base modules
-8.4 ‘interpolate’
+8.5 ‘interpolate’
=================
This module implements Lagrange, Hermite, and standard cubic spline
@@ -5246,7 +5416,7 @@ interpolation in ‘Asymptote’, as illustrated in the example

File: asymptote.info, Node: geometry, Next: trembling, Prev: interpolate, Up: Base modules
-8.5 ‘geometry’
+8.6 ‘geometry’
==============
This module, written by Philippe Ivaldi, provides an extensive set of
@@ -5261,7 +5431,7 @@ and an index:

File: asymptote.info, Node: trembling, Next: stats, Prev: geometry, Up: Base modules
-8.6 ‘trembling’
+8.7 ‘trembling’
===============
This module, written by Philippe Ivaldi and illustrated in the example
@@ -5270,7 +5440,7 @@ This module, written by Philippe Ivaldi and illustrated in the example

File: asymptote.info, Node: stats, Next: patterns, Prev: trembling, Up: Base modules
-8.7 ‘stats’
+8.8 ‘stats’
===========
This module implements a Gaussian random number generator and a
@@ -5280,7 +5450,7 @@ collection of statistics routines, including ‘histogram’ and

File: asymptote.info, Node: patterns, Next: markers, Prev: stats, Up: Base modules
-8.8 ‘patterns’
+8.9 ‘patterns’
==============
This module implements ‘PostScript’ tiling patterns and includes several
@@ -5289,8 +5459,8 @@ convenient pattern generation routines.

File: asymptote.info, Node: markers, Next: map, Prev: patterns, Up: Base modules
-8.9 ‘markers’
-=============
+8.10 ‘markers’
+==============
This module implements specialized routines for marking paths and
angles. The principal mark routine provided by this module is
@@ -5335,7 +5505,7 @@ as illustrated in the example ‘markers2.asy’.

File: asymptote.info, Node: map, Next: tree, Prev: markers, Up: Base modules
-8.10 ‘map’
+8.11 ‘map’
==========
This module creates a struct parameterized by the types specified in
@@ -5356,7 +5526,7 @@ write(M.lookup("y"));

File: asymptote.info, Node: tree, Next: binarytree, Prev: map, Up: Base modules
-8.11 ‘tree’
+8.12 ‘tree’
===========
This module implements an example of a dynamic binary search tree.
@@ -5364,7 +5534,7 @@ This module implements an example of a dynamic binary search tree.

File: asymptote.info, Node: binarytree, Next: drawtree, Prev: tree, Up: Base modules
-8.12 ‘binarytree’
+8.13 ‘binarytree’
=================
This module can be used to draw an arbitrary binary tree and includes an
@@ -5389,7 +5559,7 @@ add(pic2.fit(),(0,0),10S);

File: asymptote.info, Node: drawtree, Next: syzygy, Prev: binarytree, Up: Base modules
-8.13 ‘drawtree’
+8.14 ‘drawtree’
===============
This is a simple tree drawing module used by the example ‘treetest.asy’.
@@ -5397,7 +5567,7 @@ This is a simple tree drawing module used by the example ‘treetest.asy’.

File: asymptote.info, Node: syzygy, Next: feynman, Prev: drawtree, Up: Base modules
-8.14 ‘syzygy’
+8.15 ‘syzygy’
=============
This module automates the drawing of braids, relations, and syzygies,
@@ -5407,7 +5577,7 @@ along with the corresponding equations, as illustrated in the example

File: asymptote.info, Node: feynman, Next: roundedpath, Prev: syzygy, Up: Base modules
-8.15 ‘feynman’
+8.16 ‘feynman’
==============
This module, contributed by Martin Wiebusch, is useful for drawing
@@ -5417,7 +5587,7 @@ Feynman diagrams, as illustrated by the examples ‘eetomumu.asy’ and

File: asymptote.info, Node: roundedpath, Next: animation, Prev: feynman, Up: Base modules
-8.16 ‘roundedpath’
+8.17 ‘roundedpath’
==================
This module, contributed by Stefan Knorr, is useful for rounding the
@@ -5427,13 +5597,13 @@ sharp corners of paths, as illustrated in the example file

File: asymptote.info, Node: animation, Next: embed, Prev: roundedpath, Up: Base modules
-8.17 ‘animation’
+8.18 ‘animation’
================
This module allows one to generate animations, as illustrated by the
files ‘wheel.asy’, ‘wavepacket.asy’, and ‘cube.asy’ in the ‘animations’
subdirectory of the examples directory. These animations use the
-‘ImageMagick’ ‘convert’ program to merge multiple images into a GIF or
+‘ImageMagick’ ‘magick’ program to merge multiple images into a GIF or
MPEG movie.
The related ‘animate’ module, derived from the ‘animation’ module,
@@ -5459,7 +5629,7 @@ described here:

File: asymptote.info, Node: embed, Next: slide, Prev: animation, Up: Base modules
-8.18 ‘embed’
+8.19 ‘embed’
============
This module provides an interface to the ‘LaTeX’ package (included with
@@ -5484,7 +5654,7 @@ animate::).

File: asymptote.info, Node: slide, Next: MetaPost, Prev: embed, Up: Base modules
-8.19 ‘slide’
+8.20 ‘slide’
============
This module provides a simple yet high-quality facility for making
@@ -5495,7 +5665,7 @@ file ‘slidemovies.asy’). A simple example is provided in

File: asymptote.info, Node: MetaPost, Next: babel, Prev: slide, Up: Base modules
-8.20 ‘MetaPost’
+8.21 ‘MetaPost’
===============
This module provides some useful routines to help ‘MetaPost’ users
@@ -5513,7 +5683,7 @@ equation solver ‘solve’ instead.

File: asymptote.info, Node: babel, Next: labelpath, Prev: MetaPost, Up: Base modules
-8.21 ‘babel’
+8.22 ‘babel’
============
This module implements the ‘LaTeX’ ‘babel’ package in ‘Asymptote’. For
@@ -5524,7 +5694,7 @@ babel("german");

File: asymptote.info, Node: labelpath, Next: labelpath3, Prev: babel, Up: Base modules
-8.22 ‘labelpath’
+8.23 ‘labelpath’
================
This module uses the ‘PSTricks’ ‘pstextpath’ macro to fit labels along a
@@ -5542,7 +5712,7 @@ inherits the limitations of the ‘PSTricks’ ‘\pstextpath’ macro.

File: asymptote.info, Node: labelpath3, Next: annotate, Prev: labelpath, Up: Base modules
-8.23 ‘labelpath3’
+8.24 ‘labelpath3’
=================
This module, contributed by Jens Schwaiger, implements a 3D version of
@@ -5552,7 +5722,7 @@ provided in ‘curvedlabel3.asy’.

File: asymptote.info, Node: annotate, Next: CAD, Prev: labelpath3, Up: Base modules
-8.24 ‘annotate’
+8.25 ‘annotate’
===============
This module supports PDF annotations for viewing with ‘Adobe Reader’,
@@ -5566,7 +5736,7 @@ and ‘tex’ TeX engines.

File: asymptote.info, Node: CAD, Next: graph, Prev: annotate, Up: Base modules
-8.25 ‘CAD’
+8.26 ‘CAD’
==========
This module, contributed by Mark Henning, provides basic pen definitions
@@ -5576,7 +5746,7 @@ and measurement functions for simple 2D CAD drawings according to DIN

File: asymptote.info, Node: graph, Next: palette, Prev: CAD, Up: Base modules
-8.26 ‘graph’
+8.27 ‘graph’
============
This module implements two-dimensional linear and logarithmic graphs,
@@ -6066,7 +6236,7 @@ following routines:
bool above=true);
In the right-hand graph, the unit n-sided regular polygon
‘polygon(int n)’ and the unit n-point cyclic cross ‘cross(int n,
- bool round=true, real r=0)’ (where ‘r’ is an optional “inner”
+ bool round=true, real r=0)’ (where ‘r’ is an optional "inner"
radius) are used to build a custom marker frame. Here
‘markuniform(bool centered=false, int n, bool rotated=false)’ adds
this frame at ‘n’ uniformly spaced points along the arclength of
@@ -6655,7 +6825,7 @@ following routines:
[./vectorfield]
15. The following scientific graphs, which illustrate many features of
- ‘Asymptote’’s graphics routines, were generated from the examples
+ ‘Asymptote’'s graphics routines, were generated from the examples
‘diatom.asy’ and ‘westnile.asy’, using the comma-separated data in
‘diatom.csv’ and ‘westnile.csv’.
@@ -6667,7 +6837,7 @@ following routines:

File: asymptote.info, Node: palette, Next: three, Prev: graph, Up: Base modules
-8.27 ‘palette’
+8.28 ‘palette’
==============
‘Asymptote’ can also generate color density images and palettes. The
@@ -6880,7 +7050,7 @@ pen[][] palette(real[][] f, pen[] palette);

File: asymptote.info, Node: three, Next: obj, Prev: palette, Up: Base modules
-8.28 ‘three’
+8.29 ‘three’
============
This module fully extends the notion of guides and paths in ‘Asymptote’
@@ -6888,7 +7058,7 @@ to three dimensions. It introduces the new types guide3, path3, and
surface. Guides in three dimensions are specified with the same syntax
as in two dimensions except that triples ‘(x,y,z)’ are used in place of
pairs ‘(x,y)’ for the nodes and direction specifiers. This
-generalization of John Hobby’s spline algorithm is shape-invariant under
+generalization of John Hobby's spline algorithm is shape-invariant under
three-dimensional rotation, scaling, and shifting, and reduces in the
planar case to the two-dimensional algorithm used in ‘Asymptote’,
‘MetaPost’, and ‘MetaFont’ [cf. J. C. Bowman, Proceedings in Applied
@@ -6975,7 +7145,7 @@ currentlight=Headlamp;
light nolight;
The ‘currentlight.background’ (or ‘background’ member of the
-specified ‘light’) can be used to set the background colour for 2D (or
+specified ‘light’) can be used to set the background color for 2D (or
3D) images. The default background is white for ‘HTML’ images and
transparent for all other formats. One can request a completely
transparent background for 3D ‘WebGL’ images with
@@ -6999,7 +7169,7 @@ documented at the beginning of module ‘three’.
The examples ‘elevation.asy’ and ‘sphericalharmonic.asy’ illustrate
how to draw a surface with patch-dependent colors. The examples
‘vertexshading.asy’ and ‘smoothelevation.asy’ illustrate
-vertex-dependent colors, which are supported by ‘Asymptote’’s native
+vertex-dependent colors, which are supported by ‘Asymptote’'s native
‘OpenGL’/‘WebGL’ renderers and the two-dimensional vector output format
(‘settings.render=0’). Since the PRC output format does not currently
support vertex shading of Bezier surfaces, PRC patches are shaded with
@@ -7023,7 +7193,7 @@ from a two-dimensional cyclic path ‘g’ with the constructor
surface surface(path p, triple plane(pair)=XYplane);
and then filled:
draw(surface((0,0)--E+2N--2E--E+N..0.2E..cycle),red);
-Planar Bezier surfaces patches are constructed using Orest Shardt’s
+Planar Bezier surfaces patches are constructed using Orest Shardt's
‘bezulate’ routine, which decomposes (possibly nonsimply connected)
regions bounded (according to the ‘zerowinding’ fill rule) by simple
cyclic paths (intersecting only at the endpoints) into subregions
@@ -7590,7 +7760,7 @@ add(faces);

File: asymptote.info, Node: obj, Next: graph3, Prev: three, Up: Base modules
-8.29 ‘obj’
+8.30 ‘obj’
==========
This module allows one to construct surfaces from simple obj files, as
@@ -7599,7 +7769,7 @@ illustrated in the example files ‘galleon.asy’ and ‘triceratops.asy’.

File: asymptote.info, Node: graph3, Next: grid3, Prev: obj, Up: Base modules
-8.30 ‘graph3’
+8.31 ‘graph3’
=============
This module implements three-dimensional versions of the functions in
@@ -7775,7 +7945,7 @@ picture vectorfield(path3 vector(pair v), triple f(pair z), pair a, pair b,

File: asymptote.info, Node: grid3, Next: solids, Prev: graph3, Up: Base modules
-8.31 ‘grid3’
+8.32 ‘grid3’
============
This module, contributed by Philippe Ivaldi, can be used for drawing 3D
@@ -7805,7 +7975,7 @@ zaxis3(Label("$z$",position=EndPoint,align=(-1,0.5)),Bounds(Min,Min),

File: asymptote.info, Node: solids, Next: tube, Prev: grid3, Up: Base modules
-8.32 ‘solids’
+8.33 ‘solids’
=============
This solid geometry module defines a structure ‘revolution’ that can be
@@ -7840,7 +8010,7 @@ struct skeleton {

File: asymptote.info, Node: tube, Next: flowchart, Prev: solids, Up: Base modules
-8.33 ‘tube’
+8.34 ‘tube’
===========
This module extends the ‘tube’ surfaces constructed in
@@ -7881,7 +8051,7 @@ the third case, the array of pens contains only one pen, which depends
of the relative time.
The casting of ‘path’ to ‘coloredpath’ allows the use of a ‘path’
-instead of a ‘coloredpath’; in this case the shading behaviour is the
+instead of a ‘coloredpath’; in this case the shading behavior is the
default shading behavior for a surface.
An example of ‘tube’ is provided in the file ‘trefoilknot.asy’.
@@ -7891,7 +8061,7 @@ Further examples can be found at

File: asymptote.info, Node: flowchart, Next: contour, Prev: tube, Up: Base modules
-8.34 ‘flowchart’
+8.35 ‘flowchart’
================
This module provides routines for drawing flowcharts. The primary
@@ -8007,7 +8177,7 @@ add(new void(picture pic, transform t) {

File: asymptote.info, Node: contour, Next: contour3, Prev: flowchart, Up: Base modules
-8.35 ‘contour’
+8.36 ‘contour’
==============
This module draws contour lines. To construct contours corresponding to
@@ -8222,14 +8392,14 @@ for(int i=0; i < np; ++i)
The example ‘Gouraudcontour.asy’ illustrates how to produce color
density images over such irregular triangular meshes. ‘Asymptote’ uses
-a robust version of Paul Bourke’s Delaunay triangulation algorithm based
+a robust version of Paul Bourke's Delaunay triangulation algorithm based
on the public-domain exact arithmetic predicates written by Jonathan
Shewchuk.

File: asymptote.info, Node: contour3, Next: smoothcontour3, Prev: contour, Up: Base modules
-8.36 ‘contour3’
+8.37 ‘contour3’
===============
This module draws surfaces described as the null space of real-valued
@@ -8239,7 +8409,7 @@ in the example file ‘magnetic.asy’.

File: asymptote.info, Node: smoothcontour3, Next: slopefield, Prev: contour3, Up: Base modules
-8.37 ‘smoothcontour3’
+8.38 ‘smoothcontour3’
=====================
This module, written by Charles Staats, draws implicitly defined
@@ -8265,17 +8435,17 @@ surface implicitsurface(real f(triple)=null,
int keyword maxdepth=8,
bool usetriangles=true);
The optional parameter ‘overlapedges’ attempts to compensate for an
-artifact that can cause the renderer to “see through” the boundary
+artifact that can cause the renderer to "see through" the boundary
between patches. Although it defaults to ‘false’, it should usually be
set to ‘true’. The example ‘genustwo.asy’ illustrates the use of this
function. Additional examples, together with a more in-depth
-explanation of the module’s usage and pitfalls, are available at
+explanation of the module's usage and pitfalls, are available at
<https://github.com/charlesstaats/smoothcontour3>.

File: asymptote.info, Node: slopefield, Next: ode, Prev: smoothcontour3, Up: Base modules
-8.38 ‘slopefield’
+8.39 ‘slopefield’
=================
To draw a slope field for the differential equation dy/dx=f(x,y) (or
@@ -8315,7 +8485,7 @@ draw(curve((0,0),func,(-3,-3),(3,3)),red);

File: asymptote.info, Node: ode, Prev: slopefield, Up: Base modules
-8.39 ‘ode’
+8.40 ‘ode’
==========
The ‘ode’ module, illustrated in the example ‘odetest.asy’, implements a
@@ -8486,7 +8656,7 @@ configuration file named ‘config.asy’ (or the file specified by the
environment variable ‘ASYMPTOTE_CONFIG’ or ‘-config’ option).
‘Asymptote’ will look for this file in its usual search path (*note
Search paths::). Typically the configuration file is placed in the
-‘.asy’ directory in the user’s home directory (‘%USERPROFILE%\.asy’
+‘.asy’ directory in the user's home directory (‘%USERPROFILE%\.asy’
under ‘MSDOS’). Configuration variables are accessed using the long
form of the option names:
import settings;
@@ -8522,16 +8692,14 @@ with the ‘graphic()’ function. The generated output is optimized with
the default setting ‘settings.dvisvgmOptions="--optimize"’.
‘Asymptote’ can also produce any output format supported by the
-‘ImageMagick’ ‘convert’ program (version 6.3.5 or later recommended; an
-‘Invalid Parameter’ error message indicates that the ‘MSDOS’ utility
-‘convert’ is being used instead of the one that comes with
-‘ImageMagick’). The optional setting ‘-render n’ requests an output
-resolution of ‘n’ pixels per ‘bp’. Antialiasing is controlled by the
-parameter ‘antialias’, which by default specifies a sampling width of 2
-pixels. To give other options to ‘convert’, use the ‘convertOptions’
-setting or call convert manually. This example emulates how ‘Asymptote’
-produces antialiased ‘tiff’ output at one pixel per ‘bp’:
-asy -o - venn | convert -alpha Off -density 144x144 -geometry 50%x eps:- venn.tiff
+‘ImageMagick’ ‘magick’ program (version 7 or later. The optional
+setting ‘-render n’ requests an output resolution of ‘n’ pixels per
+‘bp’. Antialiasing is controlled by the parameter ‘antialias’, which by
+default specifies a sampling width of 2 pixels. To give other options
+to ‘magick’, use the ‘convertOptions’ setting or call ‘magick convert’
+manually. This example emulates how ‘Asymptote’ produces antialiased
+‘tiff’ output at one pixel per ‘bp’:
+asy -o - venn | magick convert -alpha Off -density 144x144 -geometry 50%x eps:- venn.tiff
If the option ‘-nosafe’ is given, ‘Asymptote’ runs in unsafe mode.
This enables the ‘int system(string s)’ and ‘int system(string[] s)’
@@ -8643,7 +8811,7 @@ and must be entered immediately after the prompt:
also accepted unless there exists a top-level variable named ‘q’).
A history of the most recent 1000 (this number can be changed with
the ‘historylines’ configuration variable) previous commands will
- be retained in the file ‘.asy/history’ in the user’s home directory
+ be retained in the file ‘.asy/history’ in the user's home directory
(unless the command-line option ‘-localhistory’ was specified, in
which case the history will be stored in the file ‘.asy_history’ in
the current directory).
@@ -8832,13 +9000,14 @@ The excellent ‘PostScript’ editor ‘pstoedit’ (version 3.50 or later;
available from <https://sourceforge.net/projects/pstoedit/>) includes an
‘Asymptote’ backend. Unlike virtually all other ‘pstoedit’ backends,
this driver includes native clipping, even-odd fill rule, ‘PostScript’
-subpath, and full image support. Here is an example: ‘asy -V
-/usr/local/share/doc/asymptote/examples/venn.asy’
+subpath, and full image support. Here is an example:
+
+‘asy -V /usr/local/share/doc/asymptote/examples/venn.asy’
pstoedit -f asy venn.eps test.asy
asy -V test
-If the line widths aren’t quite correct, try giving ‘pstoedit’ the
-‘-dis’ option. If the fonts aren’t typeset correctly, try giving
+If the line widths aren't quite correct, try giving ‘pstoedit’ the
+‘-dis’ option. If the fonts aren't typeset correctly, try giving
‘pstoedit’ the ‘-dt’ option.

@@ -8962,7 +9131,7 @@ Prince. Sean Healy designed the ‘Asymptote’ logo. Other contributors
include Orest Shardt, Jesse Frohlich, Michail Vidiassov, Charles Staats,
Philippe Ivaldi, Olivier Guibé, Radoslav Marinov, Jeff Samuelson, Chris
Savage, Jacques Pienaar, Mark Henning, Steve Melenchuk, Martin Wiebusch,
-Stefan Knorr, Supakorn “Jamie” Rassameemasmuang, Jacob Skitsko, Joseph
+Stefan Knorr, Supakorn "Jamie" Rassameemasmuang, Jacob Skitsko, Joseph
Chaumont, and Oliver Cheng. Pedram Emami developed the ‘Asymptote Web
Application’ hosted at <http://asymptote.ualberta.ca>:
@@ -8977,11 +9146,48 @@ Index
* Menu:
+* -: Arithmetic & logical.
+ (line 14)
+* --: Paths. (line 16)
+* -- <1>: Self & prefix operators.
+ (line 6)
+* ---: Bezier curves. (line 84)
+* -=: Self & prefix operators.
+ (line 6)
+* -c: Options. (line 222)
+* -l: Options. (line 241)
+* -u: Options. (line 232)
+* -V: Configuring. (line 6)
+* -V <1>: Drawing in batch mode.
+ (line 16)
+* :: Arithmetic & logical.
+ (line 61)
+* ::: Bezier curves. (line 70)
* !: Arithmetic & logical.
(line 57)
* !=: Structures. (line 62)
* != <1>: Arithmetic & logical.
(line 37)
+* ?: Arithmetic & logical.
+ (line 61)
+* ..: Paths. (line 16)
+* .asy: Search paths. (line 12)
+* *: Pens. (line 15)
+* * <1>: Arithmetic & logical.
+ (line 16)
+* **: Arithmetic & logical.
+ (line 31)
+* *=: Self & prefix operators.
+ (line 6)
+* /: Arithmetic & logical.
+ (line 18)
+* /=: Self & prefix operators.
+ (line 6)
+* &: Bezier curves. (line 84)
+* & <1>: Arithmetic & logical.
+ (line 49)
+* &&: Arithmetic & logical.
+ (line 47)
* #: Arithmetic & logical.
(line 20)
* %: Arithmetic & logical.
@@ -8989,17 +9195,12 @@ Index
* % <1>: Interactive mode. (line 16)
* %=: Self & prefix operators.
(line 6)
-* &: Bezier curves. (line 84)
-* & <1>: Arithmetic & logical.
- (line 49)
-* &&: Arithmetic & logical.
- (line 47)
-* *: Pens. (line 15)
-* * <1>: Arithmetic & logical.
- (line 16)
-* **: Arithmetic & logical.
- (line 31)
-* *=: Self & prefix operators.
+* ^: Arithmetic & logical.
+ (line 29)
+* ^ <1>: Arithmetic & logical.
+ (line 55)
+* ^^: Paths. (line 23)
+* ^=: Self & prefix operators.
(line 6)
* +: Pens. (line 15)
* + <1>: Arithmetic & logical.
@@ -9008,33 +9209,6 @@ Index
(line 6)
* +=: Self & prefix operators.
(line 6)
-* -: Arithmetic & logical.
- (line 14)
-* --: Paths. (line 16)
-* -- <1>: Self & prefix operators.
- (line 6)
-* ---: Bezier curves. (line 84)
-* -=: Self & prefix operators.
- (line 6)
-* -c: Options. (line 224)
-* -l: Options. (line 243)
-* -u: Options. (line 234)
-* -V: Configuring. (line 6)
-* -V <1>: Drawing in batch mode.
- (line 16)
-* ..: Paths. (line 16)
-* .asy: Search paths. (line 12)
-* /: Arithmetic & logical.
- (line 18)
-* /=: Self & prefix operators.
- (line 6)
-* 2D graphs: graph. (line 6)
-* 3D graphs: graph3. (line 6)
-* 3D grids: grid3. (line 6)
-* 3D PostScript: three. (line 665)
-* :: Arithmetic & logical.
- (line 61)
-* ::: Bezier curves. (line 70)
* <: Arithmetic & logical.
(line 39)
* <=: Arithmetic & logical.
@@ -9046,19 +9220,14 @@ Index
(line 45)
* >=: Arithmetic & logical.
(line 43)
-* ?: Arithmetic & logical.
- (line 61)
-* ^: Arithmetic & logical.
- (line 29)
-* ^ <1>: Arithmetic & logical.
- (line 55)
-* ^=: Self & prefix operators.
- (line 6)
-* ^^: Paths. (line 23)
* |: Arithmetic & logical.
(line 53)
* ||: Arithmetic & logical.
(line 51)
+* 2D graphs: graph. (line 6)
+* 3D graphs: graph3. (line 6)
+* 3D grids: grid3. (line 6)
+* 3D PostScript: three. (line 665)
* a4: Configuring. (line 63)
* abort: Data types. (line 364)
* abs: Data types. (line 65)
@@ -9082,24 +9251,24 @@ Index
* acosh: Mathematical functions.
(line 6)
* add: Frames and pictures.
- (line 217)
+ (line 204)
* add <1>: Frames and pictures.
- (line 231)
+ (line 218)
* add <2>: three. (line 342)
* addViews: three. (line 459)
* adjust: Pens. (line 123)
* Ai: Mathematical functions.
(line 48)
-* Airy: Mathematical functions.
- (line 48)
* Ai_deriv: Mathematical functions.
(line 48)
+* Airy: Mathematical functions.
+ (line 48)
* alias: Structures. (line 62)
* alias <1>: Arrays. (line 183)
-* Align: label. (line 12)
-* aligndir: Options. (line 216)
+* Align: label. (line 20)
+* aligndir: Options. (line 214)
* all: Arrays. (line 350)
-* Allow: Pens. (line 363)
+* Allow: Pens. (line 416)
* and: Bezier curves. (line 56)
* AND: Arithmetic & logical.
(line 68)
@@ -9117,9 +9286,9 @@ Index
* arc: Paths and guides. (line 24)
* Arc: Paths and guides. (line 37)
* arc <1>: three. (line 353)
-* ArcArrow: draw. (line 26)
+* ArcArrow: draw. (line 30)
* ArcArrow3: three. (line 632)
-* ArcArrows: draw. (line 26)
+* ArcArrows: draw. (line 30)
* ArcArrows3: three. (line 632)
* arclength: Paths and guides. (line 153)
* arclength <1>: three. (line 566)
@@ -9131,15 +9300,17 @@ Index
(line 6)
* array: Data types. (line 284)
* array <1>: Arrays. (line 112)
-* array iteration: Programming. (line 52)
+* array iteration: Programming. (line 53)
* arrays: Arrays. (line 6)
* arrow: Drawing commands. (line 34)
* Arrow: draw. (line 26)
-* arrow <1>: label. (line 70)
+* arrow <1>: label. (line 77)
* arrow keys: Drawing in interactive mode.
(line 11)
* arrow keys <1>: GUI usage. (line 6)
* Arrow3: three. (line 632)
+* arrowbar: draw. (line 26)
+* arrowhead: draw. (line 50)
* arrows: draw. (line 26)
* Arrows: draw. (line 26)
* Arrows3: three. (line 632)
@@ -9153,9 +9324,9 @@ Index
* asinh: Mathematical functions.
(line 6)
* Aspect: Frames and pictures.
- (line 59)
+ (line 46)
* assert: Data types. (line 369)
-* assignment: Programming. (line 26)
+* assignment: Programming. (line 27)
* asy: Data types. (line 359)
* asy <1>: Import. (line 106)
* asy-mode: Editing modes. (line 6)
@@ -9163,9 +9334,9 @@ Index
* asygl: Configuring. (line 69)
* asyinclude: LaTeX usage. (line 42)
* Asymptote Web Application: Description. (line 6)
+* ASYMPTOTE_CONFIG: Options. (line 159)
* asymptote.sty: LaTeX usage. (line 6)
* asymptote.xml: Editing modes. (line 48)
-* ASYMPTOTE_CONFIG: Options. (line 159)
* atan: Mathematical functions.
(line 6)
* aTan: Mathematical functions.
@@ -9176,7 +9347,7 @@ Index
(line 6)
* atleast: Bezier curves. (line 56)
* attach: Frames and pictures.
- (line 276)
+ (line 263)
* attach <1>: LaTeX usage. (line 47)
* attach <2>: graph. (line 407)
* autoadjust: three. (line 428)
@@ -9193,7 +9364,7 @@ Index
* background: three. (line 76)
* background <1>: three. (line 97)
* background color: Frames and pictures.
- (line 180)
+ (line 167)
* BackView: three. (line 452)
* Bar: draw. (line 19)
* Bar3: three. (line 632)
@@ -9202,24 +9373,24 @@ Index
* barsize: draw. (line 19)
* base modules: Base modules. (line 6)
* basealign: Pens. (line 181)
-* baseline: label. (line 90)
+* baseline: label. (line 97)
* batch mode: Drawing in batch mode.
(line 6)
* beep: Data types. (line 382)
-* BeginArcArrow: draw. (line 26)
+* BeginArcArrow: draw. (line 30)
* BeginArcArrow3: three. (line 632)
* BeginArrow: draw. (line 26)
* BeginArrow3: three. (line 632)
* BeginBar: draw. (line 19)
* BeginBar3: three. (line 632)
-* BeginDotMargin: draw. (line 42)
+* BeginDotMargin: draw. (line 87)
* BeginDotMargin3: three. (line 648)
-* BeginMargin: draw. (line 42)
+* BeginMargin: draw. (line 68)
* BeginMargin3: three. (line 648)
-* BeginPenMargin: draw. (line 42)
+* BeginPenMargin: draw. (line 76)
* BeginPenMargin2: three. (line 648)
* BeginPenMargin3: three. (line 648)
-* BeginPoint: label. (line 55)
+* BeginPoint: label. (line 62)
* Bessel: Mathematical functions.
(line 48)
* bevel: flowchart. (line 72)
@@ -9230,14 +9401,14 @@ Index
* bezulate: three. (line 146)
* Bi: Mathematical functions.
(line 48)
+* Bi_deriv: Mathematical functions.
+ (line 48)
* Billboard: three. (line 536)
* binary: Files. (line 80)
* binary format: Files. (line 80)
* binary operators: Arithmetic & logical.
(line 6)
* binarytree: binarytree. (line 6)
-* Bi_deriv: Mathematical functions.
- (line 48)
* black stripes: three. (line 261)
* Blank: draw. (line 26)
* block.bottom: flowchart. (line 19)
@@ -9259,21 +9430,19 @@ Index
* BottomTop: graph. (line 139)
* BottomView: three. (line 452)
* bounding box: Frames and pictures.
- (line 180)
+ (line 167)
* bounds: palette. (line 43)
* Bounds: graph3. (line 21)
* box: Frames and pictures.
- (line 25)
-* box <1>: Frames and pictures.
- (line 130)
-* box <2>: three. (line 375)
-* box <3>: three. (line 377)
+ (line 117)
+* box <1>: three. (line 375)
+* box <2>: three. (line 377)
* bp: Drawing in batch mode.
(line 23)
* brace: Paths and guides. (line 51)
-* break: Programming. (line 48)
+* break: Programming. (line 49)
* breakpoints: Debugger. (line 21)
-* brick: Pens. (line 285)
+* brick: Pens. (line 338)
* broken axis: graph. (line 822)
* bug reports: Help. (line 19)
* buildcycle: Paths and guides. (line 270)
@@ -9283,8 +9452,6 @@ Index
* BWRainbow2: palette. (line 18)
* C string: Data types. (line 217)
* CAD: CAD. (line 6)
-* calculateTransform: Frames and pictures.
- (line 118)
* camera: three. (line 422)
* casts: Casts. (line 6)
* cbrt: Mathematical functions.
@@ -9292,10 +9459,10 @@ Index
* cd: Files. (line 26)
* ceil: Mathematical functions.
(line 26)
-* Center: label. (line 60)
+* Center: label. (line 67)
* center: three. (line 405)
-* checker: Pens. (line 285)
-* Chinese: Pens. (line 244)
+* checker: Pens. (line 338)
+* Chinese: Pens. (line 297)
* choose: Mathematical functions.
(line 39)
* Ci: Mathematical functions.
@@ -9305,7 +9472,7 @@ Index
* circle <1>: three. (line 349)
* circle <2>: flowchart. (line 61)
* circlebarframe: markers. (line 18)
-* CJK: Pens. (line 244)
+* CJK: Pens. (line 297)
* clamped: graph. (line 36)
* clang: Compiling from UNIX source.
(line 48)
@@ -9337,7 +9504,7 @@ Index
(line 6)
* complement: Arrays. (line 149)
* concat: Arrays. (line 179)
-* conditional: Programming. (line 26)
+* conditional: Programming. (line 27)
* conditional <1>: Arithmetic & logical.
(line 61)
* config: Configuring. (line 69)
@@ -9348,17 +9515,14 @@ Index
* conj: Data types. (line 62)
* constructors: Structures. (line 91)
* context: Options. (line 188)
-* continue: Programming. (line 48)
+* continue: Programming. (line 49)
* continue <1>: Debugger. (line 31)
* contour: contour. (line 6)
* contour3: contour3. (line 6)
* controls: Bezier curves. (line 45)
* controls <1>: three. (line 6)
-* controlSpecifier: Paths and guides. (line 396)
-* convert: Configuring. (line 69)
-* convert <1>: Files. (line 159)
-* convert <2>: animation. (line 6)
-* convert <3>: Options. (line 188)
+* controlSpecifier: Paths and guides. (line 397)
+* convert: Files. (line 159)
* convertOptions: Options. (line 174)
* Coons shading: fill. (line 78)
* copy: Arrays. (line 176)
@@ -9368,21 +9532,22 @@ Index
(line 20)
* cosh: Mathematical functions.
(line 6)
-* cputime: Structures. (line 169)
+* cputime: Mathematical functions.
+ (line 109)
* crop: graph. (line 640)
* cropping graphs: graph. (line 640)
* cross: Data types. (line 106)
* cross <1>: Data types. (line 197)
* cross <2>: graph. (line 481)
* crossframe: markers. (line 22)
-* crosshatch: Pens. (line 302)
+* crosshatch: Pens. (line 355)
* csv: Arrays. (line 382)
* CTZ: Arithmetic & logical.
(line 68)
* cubicroots: Arrays. (line 339)
* curl: Bezier curves. (line 66)
* curl <1>: three. (line 6)
-* curlSpecifier: Paths and guides. (line 408)
+* curlSpecifier: Paths and guides. (line 409)
* currentlight: three. (line 76)
* currentpen: Pens. (line 6)
* currentprojection: three. (line 449)
@@ -9395,10 +9560,10 @@ Index
* cycle <1>: Paths. (line 16)
* cycle <2>: three. (line 6)
* cyclic: Paths and guides. (line 85)
-* cyclic <1>: Paths and guides. (line 376)
+* cyclic <1>: Paths and guides. (line 377)
* cyclic <2>: Arrays. (line 39)
* cyclic <3>: three. (line 566)
-* Cyrillic: Pens. (line 238)
+* Cyrillic: Pens. (line 291)
* dashdotted: Pens. (line 102)
* dashed: Pens. (line 102)
* data types: Data types. (line 6)
@@ -9406,21 +9571,22 @@ Index
* Debian: UNIX binary distributions.
(line 19)
* debugger: Debugger. (line 6)
-* declaration: Programming. (line 26)
+* declaration: Programming. (line 27)
* deconstruct: GUI usage. (line 6)
* default arguments: Default arguments. (line 6)
* defaultformat: graph. (line 176)
-* DefaultHead: draw. (line 26)
+* DefaultHead: draw. (line 50)
* DefaultHead3: three. (line 632)
* defaultpen: Pens. (line 49)
* defaultpen <1>: Pens. (line 122)
* defaultpen <2>: Pens. (line 127)
* defaultpen <3>: Pens. (line 139)
-* defaultpen <4>: Pens. (line 192)
-* defaultpen <5>: Pens. (line 363)
-* defaultpen <6>: Pens. (line 387)
+* defaultpen <4>: Pens. (line 245)
+* defaultpen <5>: Pens. (line 416)
+* defaultpen <6>: Pens. (line 440)
* defaultrender: three. (line 46)
* deferred drawing: simplex. (line 6)
+* deferred drawing <1>: simplex2. (line 6)
* degrees: Data types. (line 78)
* degrees <1>: Mathematical functions.
(line 17)
@@ -9442,31 +9608,31 @@ Index
* dir <4>: three. (line 566)
* direction specifier: Bezier curves. (line 6)
* directory: Files. (line 26)
-* dirSpecifier: Paths and guides. (line 390)
+* dirSpecifier: Paths and guides. (line 391)
* dirtime: Paths and guides. (line 166)
* display: Configuring. (line 15)
-* do: Programming. (line 48)
+* do: Programming. (line 49)
* DOSendl: Files. (line 65)
* DOSnewl: Files. (line 65)
-* dot: draw. (line 83)
+* dot: draw. (line 117)
* dot <1>: Data types. (line 103)
* dot <2>: Data types. (line 194)
* dot <3>: Arrays. (line 279)
* dot <4>: Arrays. (line 282)
-* DotMargin: draw. (line 42)
+* DotMargin: draw. (line 83)
* DotMargin3: three. (line 648)
-* DotMargins: draw. (line 42)
+* DotMargins: draw. (line 89)
* DotMargins3: three. (line 648)
* dotted: Pens. (line 102)
* double deferred drawing: three. (line 327)
* double precision: Files. (line 80)
* draw: Drawing commands. (line 34)
* draw <1>: draw. (line 6)
-* Draw: draw. (line 26)
-* draw <2>: draw. (line 113)
-* Draw <1>: Frames and pictures.
- (line 160)
+* draw <2>: draw. (line 147)
+* Draw: Frames and pictures.
+ (line 147)
* draw <3>: three. (line 154)
+* drawer: Deferred drawing. (line 31)
* drawing commands: Drawing commands. (line 6)
* drawline: math. (line 9)
* drawtree: drawtree. (line 6)
@@ -9483,40 +9649,37 @@ Index
* Ei: Mathematical functions.
(line 48)
* ellipse: Paths and guides. (line 45)
-* ellipse <1>: Frames and pictures.
- (line 25)
* elliptic functions: Mathematical functions.
(line 48)
-* else: Programming. (line 26)
+* else: Programming. (line 27)
* emacs: Editing modes. (line 6)
* embed: embed. (line 6)
* Embedded: three. (line 536)
* emissivepen: three. (line 66)
* empty: Frames and pictures.
(line 7)
-* EndArcArrow: draw. (line 26)
+* EndArcArrow: draw. (line 30)
* EndArcArrow3: three. (line 632)
* EndArrow: draw. (line 26)
* EndArrow3: three. (line 632)
* EndBar: draw. (line 19)
* EndBar3: three. (line 632)
-* EndDotMargin: draw. (line 42)
+* EndDotMargin: draw. (line 89)
* EndDotMargin3: three. (line 648)
* endl: Files. (line 65)
-* EndMargin: draw. (line 42)
+* EndMargin: draw. (line 69)
* EndMargin3: three. (line 648)
-* EndPenMargin: draw. (line 42)
+* EndPenMargin: draw. (line 78)
* EndPenMargin2: three. (line 648)
* EndPenMargin3: three. (line 648)
-* EndPoint: label. (line 55)
-* envelope: Frames and pictures.
- (line 25)
+* EndPoint: label. (line 62)
+* envelope: label. (line 111)
* environment variables: Configuring. (line 90)
* eof: Files. (line 97)
* eof <1>: Arrays. (line 364)
* eol: Files. (line 97)
* eol <1>: Arrays. (line 364)
-* EPS: label. (line 78)
+* EPS: label. (line 85)
* EPS <1>: Options. (line 188)
* erase: Drawing in interactive mode.
(line 11)
@@ -9524,7 +9687,7 @@ Index
* erase <2>: Frames and pictures.
(line 7)
* erase <3>: Frames and pictures.
- (line 284)
+ (line 271)
* erf: Mathematical functions.
(line 6)
* erfc: Mathematical functions.
@@ -9572,27 +9735,25 @@ Index
(line 62)
* file: Files. (line 6)
* file <1>: Debugger. (line 44)
-* Fill: draw. (line 26)
-* fill: draw. (line 118)
+* fill: draw. (line 152)
* fill <1>: fill. (line 6)
* fill <2>: fill. (line 17)
-* Fill <1>: Frames and pictures.
- (line 146)
-* FillDraw: draw. (line 26)
+* Fill: Frames and pictures.
+ (line 133)
* filldraw: fill. (line 11)
-* FillDraw <1>: Frames and pictures.
- (line 136)
+* FillDraw: Frames and pictures.
+ (line 123)
* filloutside: fill. (line 27)
* fillrule: Pens. (line 164)
+* filltype: Frames and pictures.
+ (line 122)
* find: Data types. (line 242)
* find <1>: Arrays. (line 158)
* findall: Arrays. (line 163)
* firstcut: Paths and guides. (line 262)
-* fit: Frames and pictures.
- (line 113)
* fit3: three. (line 340)
* fixedscaling: Frames and pictures.
- (line 81)
+ (line 68)
* floor: Mathematical functions.
(line 26)
* flowchart: flowchart. (line 6)
@@ -9600,13 +9761,13 @@ Index
* flush <1>: Files. (line 97)
* fmod: Mathematical functions.
(line 6)
-* font: Pens. (line 206)
-* font <1>: Pens. (line 206)
-* font <2>: Pens. (line 235)
-* font encoding: Pens. (line 235)
-* fontcommand: Pens. (line 219)
-* fontsize: Pens. (line 192)
-* for: Programming. (line 26)
+* font: Pens. (line 259)
+* font <1>: Pens. (line 259)
+* font <2>: Pens. (line 288)
+* font encoding: Pens. (line 288)
+* fontcommand: Pens. (line 272)
+* fontsize: Pens. (line 245)
+* for: Programming. (line 27)
* format: Data types. (line 290)
* format <1>: Options. (line 188)
* forum: Help. (line 6)
@@ -9645,14 +9806,14 @@ Index
* gradient shading: fill. (line 32)
* graph: graph. (line 6)
* graph3: graph3. (line 6)
-* graphic: label. (line 78)
+* graphic: label. (line 85)
* graphic <1>: Options. (line 193)
* graphical user interface: GUI. (line 6)
* graphwithderiv: graph. (line 671)
* gray: Pens. (line 25)
* grayscale: Pens. (line 25)
* Grayscale: palette. (line 9)
-* grid: Pens. (line 285)
+* grid: Pens. (line 338)
* grid <1>: graph. (line 767)
* grid3: grid3. (line 6)
* gs: Configuring. (line 15)
@@ -9664,9 +9825,9 @@ Index
* GUI: GUI. (line 6)
* GUI installation: GUI installation. (line 6)
* GUI usage: GUI usage. (line 6)
-* guide: Paths and guides. (line 314)
+* guide: Paths and guides. (line 315)
* guide3: three. (line 6)
-* hatch: Pens. (line 302)
+* hatch: Pens. (line 355)
* Headlamp: three. (line 76)
* height: LaTeX usage. (line 47)
* help: Interactive mode. (line 42)
@@ -9684,7 +9845,7 @@ Index
* history: Files. (line 147)
* history <1>: Interactive mode. (line 54)
* historylines: Interactive mode. (line 58)
-* HookHead: draw. (line 26)
+* HookHead: draw. (line 50)
* HookHead3: three. (line 632)
* Horizontal: flowchart. (line 77)
* HTML5: three. (line 233)
@@ -9696,6 +9857,8 @@ Index
(line 6)
* I: Mathematical functions.
(line 48)
+* i_scaled: Mathematical functions.
+ (line 48)
* ibl: three. (line 104)
* iconify: three. (line 261)
* identity: Transforms. (line 24)
@@ -9703,9 +9866,9 @@ Index
(line 6)
* identity <2>: Arrays. (line 321)
* identity4: three. (line 504)
-* if: Programming. (line 26)
+* if: Programming. (line 27)
* IgnoreAspect: Frames and pictures.
- (line 63)
+ (line 50)
* image: palette. (line 33)
* image <1>: palette. (line 61)
* image-based lighting: three. (line 104)
@@ -9722,10 +9885,10 @@ Index
* inches: Figure size. (line 18)
* incircle: Data types. (line 120)
* include: Import. (line 131)
-* including images: label. (line 78)
+* including images: label. (line 85)
* increasing: math. (line 55)
* inf: Data types. (line 35)
-* inheritance: Structures. (line 182)
+* inheritance: Structures. (line 124)
* initialized: Arrays. (line 39)
* initializers: Variable initializers.
(line 6)
@@ -9735,7 +9898,7 @@ Index
* input <1>: Files. (line 12)
* input <2>: Interactive mode. (line 45)
* input <3>: Interactive mode. (line 49)
-* input encoding: Pens. (line 235)
+* input encoding: Pens. (line 288)
* insert: Data types. (line 253)
* insert <1>: Arrays. (line 39)
* inside: Paths and guides. (line 294)
@@ -9779,49 +9942,48 @@ Index
* invert: three. (line 494)
* invisible: Pens. (line 43)
* isnan: Data types. (line 35)
-* i_scaled: Mathematical functions.
- (line 48)
* J: Mathematical functions.
(line 6)
* J <1>: Mathematical functions.
(line 48)
-* Japanese: Pens. (line 244)
+* Japanese: Pens. (line 297)
* K: Mathematical functions.
(line 48)
+* k_scaled: Mathematical functions.
+ (line 48)
* Kate: Editing modes. (line 48)
* KDE editor: Editing modes. (line 48)
* keepAspect: Frames and pictures.
- (line 59)
+ (line 46)
* keepAspect <1>: Frames and pictures.
- (line 63)
+ (line 50)
* keepAspect <2>: LaTeX usage. (line 47)
* keyboard bindings:: three. (line 211)
* keys: Arrays. (line 39)
* keyword: Named arguments. (line 37)
* keyword-only: Named arguments. (line 37)
* keywords: Named arguments. (line 6)
-* Korean: Pens. (line 244)
-* k_scaled: Mathematical functions.
- (line 48)
+* Korean: Pens. (line 297)
* label: Labels. (line 6)
-* Label: draw. (line 101)
+* Label: draw. (line 135)
* label <1>: label. (line 6)
-* Label <1>: label. (line 14)
+* Label <1>: label. (line 21)
* Label <2>: graph. (line 331)
* label <2>: three. (line 530)
+* labelmargin: label. (line 6)
* labelpath: labelpath. (line 6)
* labelpath3: labelpath3. (line 6)
* labelx: graph. (line 331)
* labely: graph. (line 331)
* Landscape: Frames and pictures.
- (line 103)
-* language context: Pens. (line 235)
+ (line 90)
+* language context: Pens. (line 288)
* language server protocol: Language server protocol.
(line 6)
* lastcut: Paths and guides. (line 266)
* lasy-mode: Editing modes. (line 6)
* latex: Options. (line 188)
-* LaTeX NFSS fonts: Pens. (line 206)
+* LaTeX NFSS fonts: Pens. (line 259)
* LaTeX usage: LaTeX usage. (line 6)
* latexmk: LaTeX usage. (line 30)
* latitude: Data types. (line 164)
@@ -9831,12 +9993,12 @@ Index
* leastsquares <1>: graph. (line 948)
* Left: graph. (line 270)
* LeftRight: graph. (line 276)
-* LeftSide: label. (line 60)
+* LeftSide: label. (line 67)
* LeftTicks: graph. (line 161)
* LeftTicks <1>: graph. (line 234)
* LeftView: three. (line 452)
* legend: Drawing commands. (line 34)
-* legend <1>: draw. (line 65)
+* legend <1>: draw. (line 99)
* legend <2>: graph. (line 425)
* Legendre: Mathematical functions.
(line 48)
@@ -9844,7 +10006,7 @@ Index
* length <1>: Data types. (line 144)
* length <2>: Data types. (line 239)
* length <3>: Paths and guides. (line 76)
-* length <4>: Paths and guides. (line 373)
+* length <4>: Paths and guides. (line 374)
* length <5>: Arrays. (line 39)
* length <6>: three. (line 566)
* letter: Configuring. (line 63)
@@ -9864,7 +10026,7 @@ Index
* Linear: graph. (line 711)
* linecap: Pens. (line 139)
* linejoin: Pens. (line 149)
-* lineskip: Pens. (line 192)
+* lineskip: Pens. (line 245)
* linetype: Pens. (line 123)
* linewidth: Pens. (line 127)
* locale: Data types. (line 316)
@@ -9883,7 +10045,7 @@ Index
* longdashdotted: Pens. (line 102)
* longdashed: Pens. (line 102)
* longitude: Data types. (line 169)
-* loop: Programming. (line 26)
+* loop: Programming. (line 27)
* LSP: Language server protocol.
(line 6)
* lualatex: Options. (line 188)
@@ -9892,15 +10054,18 @@ Index
(line 6)
* MacOS X configuration: Compiling from UNIX source.
(line 48)
-* makepen: Pens. (line 338)
+* magick: Configuring. (line 69)
+* magick <1>: Files. (line 159)
+* magick <2>: animation. (line 6)
+* magick <3>: Options. (line 188)
+* makepen: Pens. (line 391)
* map: Arrays. (line 135)
* map <1>: Arrays. (line 140)
* map <2>: map. (line 6)
-* Margin: draw. (line 42)
-* Margin <1>: draw. (line 42)
+* Margin: draw. (line 69)
* Margin3: three. (line 648)
* Margin3 <1>: three. (line 648)
-* Margins: draw. (line 42)
+* Margins: draw. (line 70)
* margins: three. (line 333)
* Margins3: three. (line 648)
* mark: graph. (line 481)
@@ -9933,11 +10098,11 @@ Index
* MetaPost pickup: Pens. (line 6)
* MetaPost whatever: MetaPost. (line 10)
* Microsoft Windows: Microsoft Windows. (line 6)
-* MidArcArrow: draw. (line 26)
+* MidArcArrow: draw. (line 30)
* MidArcArrow3: three. (line 632)
* MidArrow: draw. (line 26)
* MidArrow3: three. (line 632)
-* MidPoint: label. (line 55)
+* MidPoint: label. (line 62)
* midpoint: Paths and guides. (line 180)
* min: Paths and guides. (line 275)
* min <1>: Frames and pictures.
@@ -9947,7 +10112,7 @@ Index
* min <4>: three. (line 566)
* minbound: Data types. (line 131)
* minbound <1>: Data types. (line 202)
-* minipage: label. (line 116)
+* minipage: label. (line 125)
* mintimes: Paths and guides. (line 228)
* miterjoin: Pens. (line 149)
* miterlimit: Pens. (line 159)
@@ -9960,8 +10125,8 @@ Index
* mouse: GUI. (line 6)
* mouse bindings: three. (line 192)
* mouse wheel: GUI usage. (line 6)
-* Move: Pens. (line 375)
-* MoveQuiet: Pens. (line 381)
+* Move: Pens. (line 428)
+* MoveQuiet: Pens. (line 434)
* multisample: three. (line 184)
* N: Labels. (line 18)
* name: Files. (line 93)
@@ -9981,58 +10146,58 @@ Index
(line 73)
* next: Debugger. (line 41)
* nobasealign: Pens. (line 181)
-* NoFill: draw. (line 26)
-* NoFill <1>: Frames and pictures.
- (line 154)
+* NoFill: Frames and pictures.
+ (line 141)
* noglobalread: Files. (line 26)
* noglobalread <1>: Files. (line 40)
* nolight: three. (line 76)
-* NoMargin: draw. (line 42)
+* NoMargin: draw. (line 67)
* NoMargin3: three. (line 648)
* None: draw. (line 19)
* None <1>: draw. (line 26)
* none: Files. (line 65)
* normal: three. (line 552)
-* nosafe: Options. (line 211)
+* nosafe: Options. (line 209)
* NOT: Arithmetic & logical.
(line 68)
* notaknot: graph. (line 36)
* NoTicks: graph. (line 161)
* NoTicks3: graph3. (line 35)
* null: Structures. (line 6)
-* nullpen: label. (line 14)
+* nullpen: label. (line 21)
* nullpen <1>: Frames and pictures.
- (line 140)
+ (line 127)
* nullpen <2>: Frames and pictures.
- (line 149)
+ (line 136)
* NURBS: three. (line 432)
* O: three. (line 345)
* obj: obj. (line 6)
+* object: label. (line 111)
* oblique: three. (line 388)
* obliqueX: three. (line 395)
* obliqueY: three. (line 401)
* obliqueZ: three. (line 388)
* ode: ode. (line 6)
* offset: Pens. (line 123)
-* offset <1>: Options. (line 216)
+* offset <1>: Options. (line 214)
* OmitTick: graph. (line 224)
* OmitTickInterval: graph. (line 224)
* OmitTickIntervals: graph. (line 224)
-* opacity: Pens. (line 254)
+* opacity: Pens. (line 307)
* opacity <1>: three. (line 66)
* open: Files. (line 12)
* OpenGL: three. (line 184)
* operator: User-defined operators.
(line 6)
-* operator +(...string[] a).: Data types. (line 284)
* operator --: graph. (line 30)
* operator ..: graph. (line 33)
+* operator +(...string[] a).: Data types. (line 284)
* operator answer: Interactive mode. (line 35)
* operator cast: Casts. (line 38)
* operator ecast: Casts. (line 65)
* operator init: Variable initializers.
(line 6)
-* operator init <1>: Structures. (line 134)
+* operator init <1>: Structures. (line 105)
* operators: Operators. (line 6)
* options: Options. (line 6)
* OR: Arithmetic & logical.
@@ -10040,22 +10205,22 @@ Index
* orient: Data types. (line 108)
* orient <1>: three. (line 583)
* orientation: Frames and pictures.
- (line 103)
+ (line 90)
* orthographic: three. (line 405)
* outformat: three. (line 184)
* outprefix: Frames and pictures.
- (line 91)
+ (line 78)
* output: Files. (line 38)
* output <1>: Options. (line 188)
* OutTicks: graph3. (line 35)
* overloading functions: Functions. (line 55)
-* overwrite: Pens. (line 360)
+* overwrite: Pens. (line 413)
* P: Mathematical functions.
(line 48)
-* pack: label. (line 100)
+* pack: label. (line 109)
* packing: Rest arguments. (line 30)
* pad: Frames and pictures.
- (line 186)
+ (line 173)
* pair: Figure size. (line 6)
* pair <1>: Data types. (line 46)
* pairs: Arrays. (line 245)
@@ -10073,10 +10238,10 @@ Index
* path <2>: three. (line 42)
* path <3>: flowchart. (line 77)
* path markers: graph. (line 481)
+* path[]: Paths. (line 23)
* path3: three. (line 6)
* path3 <1>: three. (line 42)
-* path[]: Paths. (line 23)
-* patterns: Pens. (line 271)
+* patterns: Pens. (line 324)
* patterns <1>: patterns. (line 6)
* PBR: three. (line 74)
* PDF: Options. (line 188)
@@ -10085,10 +10250,10 @@ Index
* pdfviewer: Configuring. (line 15)
* pdfviewerOptions: Options. (line 174)
* pen: Pens. (line 6)
-* PenMargin: draw. (line 42)
+* PenMargin: draw. (line 78)
* PenMargin2: three. (line 648)
* PenMargin3: three. (line 648)
-* PenMargins: draw. (line 42)
+* PenMargins: draw. (line 79)
* PenMargins2: three. (line 648)
* PenMargins3: three. (line 648)
* periodic: graph. (line 36)
@@ -10097,9 +10262,17 @@ Index
* perspective: three. (line 432)
* physically based rendering: three. (line 74)
* picture: Frames and pictures.
- (line 39)
+ (line 26)
* picture alignment: Frames and pictures.
- (line 231)
+ (line 218)
+* picture.add: Deferred drawing. (line 31)
+* picture.addPoint: Deferred drawing. (line 51)
+* picture.calculateTransform: Frames and pictures.
+ (line 105)
+* picture.fit: Frames and pictures.
+ (line 100)
+* picture.scale: Frames and pictures.
+ (line 110)
* piecewisestraight: Paths and guides. (line 92)
* pixel: three. (line 655)
* Pl: Mathematical functions.
@@ -10109,14 +10282,14 @@ Index
* plane: three. (line 371)
* planeproject: three. (line 549)
* point: Paths and guides. (line 95)
-* point <1>: Paths and guides. (line 379)
+* point <1>: Paths and guides. (line 380)
* point <2>: three. (line 566)
* polar: Data types. (line 149)
* polargraph: graph. (line 89)
* polygon: graph. (line 481)
* pop: Arrays. (line 39)
* Portrait: Frames and pictures.
- (line 103)
+ (line 90)
* position: three. (line 76)
* position <1>: three. (line 184)
* postcontrol: Paths and guides. (line 146)
@@ -10124,8 +10297,8 @@ Index
* postfix operators: Self & prefix operators.
(line 19)
* postscript: Frames and pictures.
- (line 297)
-* PostScript fonts: Pens. (line 222)
+ (line 284)
+* PostScript fonts: Pens. (line 275)
* PostScript subpath: Paths. (line 23)
* pow10: Mathematical functions.
(line 6)
@@ -10158,9 +10331,9 @@ Index
(line 6)
* radialshade: fill. (line 52)
* RadialShade: Frames and pictures.
- (line 172)
+ (line 159)
* RadialShadeDraw: Frames and pictures.
- (line 176)
+ (line 163)
* radians: Mathematical functions.
(line 17)
* radius: Paths and guides. (line 135)
@@ -10185,8 +10358,8 @@ Index
* recursion: Functions. (line 100)
* reference: Description. (line 92)
* reflect: Transforms. (line 42)
-* Relative: label. (line 50)
-* Relative <1>: label. (line 60)
+* Relative: label. (line 57)
+* Relative <1>: label. (line 67)
* relpoint: Paths and guides. (line 176)
* reltime: Paths and guides. (line 172)
* remainder: Mathematical functions.
@@ -10196,15 +10369,15 @@ Index
* render <1>: three. (line 184)
* render <2>: Options. (line 188)
* replace: Data types. (line 270)
-* resetdefaultpen: Pens. (line 387)
+* resetdefaultpen: Pens. (line 440)
* rest arguments: Rest arguments. (line 6)
* restore: Frames and pictures.
- (line 291)
+ (line 278)
* restricted: Structures. (line 6)
* return: Debugger. (line 47)
* reverse: Data types. (line 266)
* reverse <1>: Paths and guides. (line 183)
-* reverse <2>: Paths and guides. (line 382)
+* reverse <2>: Paths and guides. (line 383)
* reverse <3>: Arrays. (line 145)
* reverse <4>: three. (line 566)
* rewind: Files. (line 97)
@@ -10215,13 +10388,13 @@ Index
* Riemann zeta function: Mathematical functions.
(line 48)
* Right: graph. (line 273)
-* RightSide: label. (line 60)
+* RightSide: label. (line 67)
* RightTicks: graph. (line 161)
* RightTicks <1>: graph. (line 234)
* RightView: three. (line 452)
-* Rotate: label. (line 36)
+* Rotate: label. (line 43)
* rotate: three. (line 520)
-* Rotate(pair z): label. (line 39)
+* Rotate(pair z): label. (line 46)
* round: Mathematical functions.
(line 26)
* roundcap: Pens. (line 139)
@@ -10231,13 +10404,13 @@ Index
* RPM: UNIX binary distributions.
(line 6)
* runtime imports: Import. (line 102)
-* Russian: Pens. (line 238)
+* Russian: Pens. (line 291)
* S: Labels. (line 18)
-* safe: Options. (line 211)
+* safe: Options. (line 209)
* save: Frames and pictures.
- (line 288)
+ (line 275)
* saveline: Files. (line 139)
-* Scale: label. (line 45)
+* Scale: label. (line 52)
* scale: Pens. (line 123)
* scale <1>: Transforms. (line 34)
* scale <2>: Transforms. (line 36)
@@ -10254,7 +10427,7 @@ Index
* search <1>: Arrays. (line 172)
* search paths: Search paths. (line 6)
* Seascape: Frames and pictures.
- (line 110)
+ (line 97)
* secondary axis: graph. (line 854)
* secondaryX: graph. (line 854)
* secondaryY: graph. (line 854)
@@ -10271,7 +10444,7 @@ Index
* sgn: Mathematical functions.
(line 26)
* shading: fill. (line 32)
-* Shift: label. (line 33)
+* Shift: label. (line 40)
* shift: Transforms. (line 26)
* shift <1>: Transforms. (line 28)
* shift <2>: Transforms. (line 46)
@@ -10279,14 +10452,15 @@ Index
* shiftless: Transforms. (line 46)
* shininess: three. (line 66)
* shipout: Frames and pictures.
- (line 91)
+ (line 78)
* showtarget: three. (line 405)
* Si: Mathematical functions.
(line 48)
* signedint: Files. (line 80)
* signedint <1>: Files. (line 93)
-* SimpleHead: draw. (line 26)
+* SimpleHead: draw. (line 50)
* simplex: simplex. (line 6)
+* simplex2: simplex2. (line 6)
* simpson: Mathematical functions.
(line 82)
* sin: Mathematical functions.
@@ -10305,15 +10479,15 @@ Index
* SixViewsUS: three. (line 467)
* size: Figure size. (line 6)
* size <1>: Paths and guides. (line 81)
-* size <2>: Paths and guides. (line 370)
+* size <2>: Paths and guides. (line 371)
* size <3>: Frames and pictures.
- (line 48)
+ (line 35)
* size <4>: Frames and pictures.
- (line 74)
+ (line 61)
* size <5>: three. (line 566)
* size <6>: Options. (line 188)
* size3: three. (line 330)
-* Slant: label. (line 42)
+* Slant: label. (line 49)
* slant: Transforms. (line 38)
* sleep: Data types. (line 376)
* slice: Paths and guides. (line 251)
@@ -10363,19 +10537,19 @@ Index
* string <1>: Data types. (line 312)
* stroke: fill. (line 36)
* stroke <1>: clip. (line 6)
-* strokepath: Paths and guides. (line 309)
+* strokepath: Paths and guides. (line 310)
* strptime: Data types. (line 330)
* struct: Structures. (line 6)
* structures: Structures. (line 6)
* subpath: Paths and guides. (line 186)
* subpath <1>: three. (line 566)
* subpictures: Frames and pictures.
- (line 113)
+ (line 100)
* substr: Data types. (line 262)
* sum: Arrays. (line 220)
* superpath: Paths. (line 23)
-* Suppress: Pens. (line 367)
-* SuppressQuiet: Pens. (line 371)
+* Suppress: Pens. (line 420)
+* SuppressQuiet: Pens. (line 424)
* surface: three. (line 46)
* surface <1>: three. (line 104)
* surface <2>: three. (line 128)
@@ -10384,7 +10558,7 @@ Index
* surface <5>: graph3. (line 128)
* SVG: Options. (line 193)
* system: Data types. (line 354)
-* system <1>: Options. (line 211)
+* system <1>: Options. (line 209)
* syzygy: syzygy. (line 6)
* tab: Files. (line 65)
* tab completion: Drawing in interactive mode.
@@ -10400,24 +10574,24 @@ Index
* template: Templated imports. (line 6)
* tension: Bezier curves. (line 56)
* tension <1>: three. (line 6)
-* tensionSpecifier: Paths and guides. (line 402)
+* tensionSpecifier: Paths and guides. (line 403)
* tensor product shading: fill. (line 78)
* tensorshade: fill. (line 78)
* tessellation: three. (line 154)
* tex: Frames and pictures.
- (line 305)
+ (line 292)
* tex <1>: Options. (line 188)
-* TeX fonts: Pens. (line 213)
+* TeX fonts: Pens. (line 266)
* TeX string: Data types. (line 208)
* texcommand: Configuring. (line 69)
-* TeXHead: draw. (line 26)
+* TeXHead: draw. (line 50)
* TeXHead3: three. (line 632)
* texpath: Configuring. (line 69)
-* texpath <1>: label. (line 113)
+* texpath <1>: label. (line 122)
* texpreamble: Frames and pictures.
- (line 314)
+ (line 301)
* texreset: Frames and pictures.
- (line 318)
+ (line 305)
* textbook graph: graph. (line 361)
* tgz: UNIX binary distributions.
(line 6)
@@ -10433,8 +10607,8 @@ Index
* Ticks: graph. (line 161)
* Ticks <1>: graph. (line 234)
* tildeframe: markers. (line 24)
-* tile: Pens. (line 285)
-* tilings: Pens. (line 271)
+* tile: Pens. (line 338)
+* tilings: Pens. (line 324)
* time: Data types. (line 321)
* time <1>: Data types. (line 346)
* time <2>: math. (line 26)
@@ -10448,7 +10622,7 @@ Index
* transform: Transforms. (line 6)
* transform <1>: three. (line 541)
* transform3: three. (line 504)
-* transparency: Pens. (line 254)
+* transparency: Pens. (line 307)
* transparent: three. (line 97)
* transpose: Arrays. (line 212)
* transpose <1>: Arrays. (line 215)
@@ -10461,22 +10635,21 @@ Index
* trigonometric integrals: Mathematical functions.
(line 48)
* triple: Data types. (line 137)
-* TrueMargin: draw. (line 42)
+* TrueMargin: draw. (line 90)
* TrueMargin3: three. (line 648)
* tube: three. (line 166)
* tube <1>: tube. (line 6)
* tutorial: Tutorial. (line 6)
-* type1cm: Pens. (line 192)
+* type1cm: Pens. (line 245)
* typedef: Data types. (line 385)
* typedef <1>: Functions. (line 46)
* U3D: embed. (line 22)
* undefined: Paths and guides. (line 283)
-* UnFill: draw. (line 26)
* unfill: fill. (line 110)
+* UnFill: Frames and pictures.
+ (line 152)
* UnFill <1>: Frames and pictures.
- (line 165)
-* UnFill <2>: Frames and pictures.
- (line 168)
+ (line 155)
* uniform: Arrays. (line 154)
* uninstall: Uninstall. (line 6)
* unique: math. (line 59)
@@ -10491,7 +10664,7 @@ Index
(line 39)
* unitsize: Figure size. (line 39)
* unitsize <1>: Frames and pictures.
- (line 69)
+ (line 56)
* UNIX binary distributions: UNIX binary distributions.
(line 6)
* unpacking: Rest arguments. (line 39)
@@ -10499,12 +10672,12 @@ Index
* up: three. (line 405)
* update: Files. (line 38)
* UpsideDown: Frames and pictures.
- (line 103)
+ (line 90)
* UpsideDown <1>: Frames and pictures.
- (line 111)
+ (line 98)
* URL: Import. (line 94)
* usepackage: Frames and pictures.
- (line 321)
+ (line 308)
* user coordinates: Figure size. (line 39)
* user-defined operators: User-defined operators.
(line 6)
@@ -10521,7 +10694,7 @@ Index
* vectorfield3: graph3. (line 167)
* vectorization: Arrays. (line 343)
* verbatim: Frames and pictures.
- (line 297)
+ (line 284)
* vertex-dependent colors: three. (line 119)
* Vertical: flowchart. (line 77)
* Viewport: three. (line 76)
@@ -10531,14 +10704,15 @@ Index
* viewportwidth: LaTeX usage. (line 47)
* views: three. (line 279)
* vim: Editing modes. (line 32)
-* virtual functions: Structures. (line 182)
+* virtual functions: Structures. (line 124)
* void: Data types. (line 10)
* W: Labels. (line 18)
+* warn: Configuring. (line 79)
* WebGL: three. (line 233)
* whatever: Paths and guides. (line 246)
* Wheel: palette. (line 22)
* wheel mouse: GUI. (line 6)
-* while: Programming. (line 48)
+* while: Programming. (line 49)
* White: three. (line 76)
* white-space string delimiter mode: Arrays. (line 374)
* width: LaTeX usage. (line 47)
@@ -10589,8 +10763,6 @@ Index
* YZZero: graph3. (line 21)
* Z: three. (line 345)
* zaxis3: graph3. (line 7)
-* zeroTransform: Transforms. (line 44)
-* zerowinding: Pens. (line 164)
* zero_Ai: Mathematical functions.
(line 48)
* zero_Ai_deriv: Mathematical functions.
@@ -10601,6 +10773,8 @@ Index
(line 48)
* zero_J: Mathematical functions.
(line 48)
+* zeroTransform: Transforms. (line 44)
+* zerowinding: Pens. (line 164)
* zeta: Mathematical functions.
(line 48)
* zpart: Data types. (line 191)
@@ -10612,154 +10786,158 @@ Index

Tag Table:
-Node: Top575
-Node: Description7476
-Node: Installation11883
-Node: UNIX binary distributions12969
-Node: MacOS X binary distributions14146
-Node: Microsoft Windows14758
-Node: Configuring15999
-Node: Search paths20514
-Node: Compiling from UNIX source21608
-Node: Editing modes24913
-Node: Git27493
-Node: Uninstall28016
-Node: Tutorial28370
-Node: Drawing in batch mode29241
-Node: Drawing in interactive mode30165
-Node: Figure size31235
-Node: Labels32922
-Node: Paths33814
-Ref: unitcircle34454
-Node: Drawing commands36447
-Node: draw38317
-Ref: arrows39583
-Node: fill45454
-Ref: gradient shading46536
-Node: clip51382
-Node: label52159
-Ref: Label52807
-Node: Bezier curves58904
-Node: Programming62874
-Ref: array iteration64655
-Node: Data types64822
-Ref: format76484
-Node: Paths and guides81156
-Ref: circle81418
-Ref: extension91770
-Node: Pens98944
-Ref: fillrule107085
-Ref: basealign108043
-Ref: transparency111833
-Ref: makepen115557
-Ref: overwrite116463
-Node: Transforms117723
-Node: Frames and pictures119820
-Ref: envelope121038
-Ref: size122155
-Ref: unitsize123222
-Ref: shipout124351
-Ref: filltype126737
-Ref: add130366
-Ref: add about131364
-Ref: tex134482
-Node: Files135393
-Ref: cd136486
-Ref: scroll141634
-Node: Variable initializers144744
-Node: Structures147625
-Node: Operators155455
-Node: Arithmetic & logical155769
-Node: Self & prefix operators158323
-Node: User-defined operators159181
-Node: Implicit scaling160118
-Node: Functions160681
-Ref: stack overflow163826
-Node: Default arguments164112
-Node: Named arguments164884
-Node: Rest arguments167538
-Node: Mathematical functions170695
-Node: Arrays175856
-Ref: sort183954
-Ref: tridiagonal187512
-Ref: solve188827
-Node: Slices193147
-Node: Casts197167
-Node: Import199581
-Node: Templated imports205225
-Node: Static207316
-Node: LaTeX usage210274
-Node: Base modules216875
-Node: plain219382
-Node: simplex220088
-Node: math220369
-Node: interpolate223302
-Node: geometry223593
-Node: trembling224289
-Node: stats224566
-Node: patterns224837
-Node: markers225080
-Node: map226978
-Node: tree227414
-Node: binarytree227598
-Node: drawtree228273
-Node: syzygy228482
-Node: feynman228764
-Node: roundedpath229050
-Node: animation229340
-Ref: animate229789
-Node: embed230965
-Node: slide231975
-Node: MetaPost232318
-Node: babel233094
-Node: labelpath233342
-Node: labelpath3234206
-Node: annotate234533
-Node: CAD235023
-Node: graph235341
-Ref: ticks242957
-Ref: pathmarkers257145
-Ref: marker257619
-Ref: markuniform257989
-Ref: errorbars259896
-Ref: automatic scaling265073
-Node: palette276895
-Ref: images277017
-Ref: image281481
-Ref: logimage282002
-Ref: penimage283112
-Ref: penfunctionimage283375
-Node: three284151
-Ref: PostScript3D316547
-Node: obj318341
-Node: graph3318602
-Ref: GaussianSurface324473
-Node: grid3325651
-Node: solids326487
-Node: tube327511
-Node: flowchart329895
-Node: contour334614
-Node: contour3341216
-Node: smoothcontour3341540
-Node: slopefield343313
-Node: ode344858
-Node: Options345127
-Ref: configuration file353565
-Ref: settings353565
-Ref: texengines354915
-Ref: convert354915
-Node: Interactive mode358471
-Ref: history360700
-Node: GUI362073
-Node: GUI installation362643
-Node: GUI usage363639
-Node: Command-Line Interface364706
-Node: Language server protocol366194
-Node: PostScript to Asymptote367675
-Node: Help368505
-Node: Debugger370235
-Node: Credits372083
-Node: Index373344
+Node: Top573
+Node: Description7668
+Node: Installation12075
+Node: UNIX binary distributions13220
+Node: MacOS X binary distributions14395
+Node: Microsoft Windows15007
+Node: Configuring16247
+Node: Search paths20762
+Node: Compiling from UNIX source21854
+Node: Editing modes25157
+Node: Git27735
+Node: Building the documentation28258
+Node: Uninstall28824
+Node: Tutorial29180
+Node: Drawing in batch mode30051
+Node: Drawing in interactive mode30975
+Node: Figure size32046
+Node: Labels33733
+Node: Paths34625
+Ref: unitcircle35265
+Node: Drawing commands37258
+Node: draw39126
+Ref: arrows40402
+Node: fill46708
+Ref: gradient shading47790
+Node: clip52636
+Node: label53413
+Ref: Label54327
+Ref: baseline58241
+Ref: envelope58977
+Node: Bezier curves60529
+Node: Programming64497
+Ref: array iteration66357
+Node: Data types66524
+Ref: format78182
+Node: Paths and guides82850
+Ref: circle83112
+Ref: extension93464
+Node: Pens100657
+Ref: fillrule108796
+Ref: basealign109754
+Ref: transparency115119
+Ref: makepen118840
+Ref: overwrite119746
+Node: Transforms121005
+Node: Frames and pictures123100
+Ref: size124772
+Ref: unitsize125839
+Ref: shipout126968
+Ref: filltype129354
+Ref: add132983
+Ref: add about133956
+Ref: tex137074
+Node: Deferred drawing137985
+Node: Files141276
+Ref: cd142366
+Ref: scroll147512
+Node: Variable initializers150621
+Node: Structures153502
+Node: Operators158816
+Node: Arithmetic & logical159132
+Node: Self & prefix operators161688
+Node: User-defined operators162548
+Node: Implicit scaling163487
+Node: Functions164050
+Ref: stack overflow167195
+Node: Default arguments167481
+Node: Named arguments168253
+Node: Rest arguments170903
+Node: Mathematical functions174060
+Node: Arrays180924
+Ref: sort189022
+Ref: tridiagonal192580
+Ref: solve193895
+Node: Slices198215
+Node: Casts202235
+Node: Import204649
+Node: Templated imports210291
+Node: Static212185
+Node: LaTeX usage215143
+Node: Base modules221744
+Node: plain224309
+Node: simplex225015
+Node: simplex2225219
+Node: math225488
+Node: interpolate228419
+Node: geometry228710
+Node: trembling229406
+Node: stats229683
+Node: patterns229954
+Node: markers230197
+Node: map232097
+Node: tree232533
+Node: binarytree232717
+Node: drawtree233392
+Node: syzygy233601
+Node: feynman233883
+Node: roundedpath234169
+Node: animation234459
+Ref: animate234907
+Node: embed236083
+Node: slide237093
+Node: MetaPost237436
+Node: babel238212
+Node: labelpath238460
+Node: labelpath3239324
+Node: annotate239651
+Node: CAD240141
+Node: graph240459
+Ref: ticks248075
+Ref: pathmarkers262263
+Ref: marker262737
+Ref: markuniform263103
+Ref: errorbars265010
+Ref: automatic scaling270187
+Node: palette282007
+Ref: images282129
+Ref: image286593
+Ref: logimage287114
+Ref: penimage288224
+Ref: penfunctionimage288487
+Node: three289263
+Ref: PostScript3D321652
+Node: obj323446
+Node: graph3323707
+Ref: GaussianSurface329578
+Node: grid3330756
+Node: solids331592
+Node: tube332616
+Node: flowchart334999
+Node: contour339718
+Node: contour3346318
+Node: smoothcontour3346642
+Node: slopefield348409
+Node: ode349954
+Node: Options350223
+Ref: configuration file358661
+Ref: settings358661
+Ref: texengines360009
+Ref: magick360009
+Node: Interactive mode363404
+Ref: history365633
+Node: GUI367004
+Node: GUI installation367574
+Node: GUI usage368570
+Node: Command-Line Interface369637
+Node: Language server protocol371125
+Node: PostScript to Asymptote372606
+Node: Help373433
+Node: Debugger375163
+Node: Credits377011
+Node: Index378268

End Tag Table
diff --git a/graphics/asymptote/entry.cc b/graphics/asymptote/entry.cc
index 7a780fdd56..e6e3a031a0 100644
--- a/graphics/asymptote/entry.cc
+++ b/graphics/asymptote/entry.cc
@@ -526,7 +526,7 @@ void venv::namevalue::replaceType(ty *new_t, ty *old_t) {
}
#ifdef DEBUG_CACHE
-void venv::namevalue::popType(ty *s)
+void venv::namevalue::popType(astType *s)
#else
void venv::namevalue::popType()
#endif
diff --git a/graphics/asymptote/entry.h b/graphics/asymptote/entry.h
index e11ad59940..03cdcef4e2 100644
--- a/graphics/asymptote/entry.h
+++ b/graphics/asymptote/entry.h
@@ -395,7 +395,7 @@ class venv {
void replaceType(ty *new_t, ty *old_t);
#if DEBUG_CACHE
- void popType(ty *tnew);
+ void popType(astType *tnew);
#else
void popType();
#endif
diff --git a/graphics/asymptote/env.cc b/graphics/asymptote/env.cc
index f55be74fc9..fc8c4c3899 100644
--- a/graphics/asymptote/env.cc
+++ b/graphics/asymptote/env.cc
@@ -214,14 +214,17 @@ record *env::getModule(symbol id, string filename)
return ge.getModule(id, filename);
}
-record *env::getTemplatedModule(symbol id,
+record *env::getTemplatedModule(symbol index,
string filename,
- string index,
mem::vector<absyntax::namedTyEntry*>* args,
- trans::frame *parent)
+ coenv& e)
{
- return ge.getTemplatedModule(id, filename, index, args, parent);
+ return ge.getTemplatedModule(index, filename, args, e);
}
+record *env::getLoadedModule(symbol id)
+{
+ return ge.getLoadedModule(id);
+}
}
diff --git a/graphics/asymptote/env.h b/graphics/asymptote/env.h
index a63ef9c375..1cf628f095 100644
--- a/graphics/asymptote/env.h
+++ b/graphics/asymptote/env.h
@@ -30,6 +30,7 @@ using types::function;
using types::record;
class genv;
+class coenv;
// Keeps track of the name bindings of variables and types. This is used for
// the fields of a record, whereas the derived class env is used for
@@ -185,12 +186,11 @@ public:
~env();
record *getModule(symbol id, string filename);
- record *getTemplatedModule(symbol id,
+ record *getTemplatedModule(symbol index,
string filename,
- string index,
mem::vector<absyntax::namedTyEntry*> *args,
- trans::frame *parent
- );
+ coenv& e);
+ record *getLoadedModule(symbol id);
};
} // namespace trans
diff --git a/graphics/asymptote/errormsg.cc b/graphics/asymptote/errormsg.cc
index 3870caba28..c9248a6299 100644
--- a/graphics/asymptote/errormsg.cc
+++ b/graphics/asymptote/errormsg.cc
@@ -7,6 +7,7 @@
#include <cstdio>
#include <cstdlib>
+#include <regex>
#include "errormsg.h"
#include "interact.h"
@@ -33,6 +34,7 @@ ostream& operator<< (ostream& out, const position& pos)
while(count > 0 && getline(fin,s)) {
count--;
}
+ s=std::regex_replace(s,std::regex("\t")," ");
out << s << endl;
for(size_t i=1; i < pos.column; ++i)
out << " ";
diff --git a/graphics/asymptote/examples/slope.asy b/graphics/asymptote/examples/slope.asy
index 832f8c13fc..46cf11be43 100644
--- a/graphics/asymptote/examples/slope.asy
+++ b/graphics/asymptote/examples/slope.asy
@@ -37,7 +37,7 @@ real order=3;
for(int i=0; i < n-1; ++i) {
real dt=(b-a)*lambda^(n-i);
- Solution S=integrate(Y0,L,F,a,b,dt,dynamic=false,0.0002,0.0004,ERK3BS,verbose=false);
+ Solution S=integrate(Y0,G,a,b,dt,dynamic=false,0.0002,0.0004,RK3BS,verbose=false);
real maxnorm=0;
Solution E=integrate(Y0,G,a,b,1e-2*dt,dynamic=false,0.0002,0.0004,RK5);
diff --git a/graphics/asymptote/examples/teapot.asy b/graphics/asymptote/examples/teapot.asy
index 847ffd234d..7a12cc3a66 100644
--- a/graphics/asymptote/examples/teapot.asy
+++ b/graphics/asymptote/examples/teapot.asy
@@ -202,6 +202,7 @@ triple[][][] Q0={
}
};
+
surface regularize(triple[][] P, real fraction=0.02)
{
triple[][][] B=hsplit(P,fraction);
@@ -215,7 +216,8 @@ surface regularize(triple[][] P, real fraction=0.02)
surface S=surface(Q);
for(triple[][] q : Q0)
- S.append(regularize(q));
+ // S.append(regularize(q));
+ S.append(surface(patch(q)));
pen color;
real metallic;
diff --git a/graphics/asymptote/exp.h b/graphics/asymptote/exp.h
index d1a60e96dd..152df76ded 100644
--- a/graphics/asymptote/exp.h
+++ b/graphics/asymptote/exp.h
@@ -887,13 +887,13 @@ public:
};
class castExp : public exp {
- ty *target;
+ astType *target;
exp *castee;
types::ty *tryCast(coenv &e, types::ty *t, types::ty *s,
symbol csym);
public:
- castExp(position pos, ty *target, exp *castee)
+ castExp(position pos, astType *target, exp *castee)
: exp(pos), target(target), castee(castee) {}
void prettyprint(ostream &out, Int indent) override;
diff --git a/graphics/asymptote/fileio.h b/graphics/asymptote/fileio.h
index f64ce71d7c..e23bf343f6 100644
--- a/graphics/asymptote/fileio.h
+++ b/graphics/asymptote/fileio.h
@@ -92,6 +92,9 @@ public:
bool Standard() {return standard;}
+ bool enabled() {return !standard || settings::verbose > 1 ||
+ interact::interactive || !settings::getSetting<bool>("quiet");}
+
void standardEOF() {
#if defined(HAVE_LIBREADLINE) && defined(HAVE_LIBCURSES)
cout << endl;
@@ -510,9 +513,6 @@ public:
return 0;
}
- bool enabled() {return !standard || settings::verbose > 1 ||
- interact::interactive || !settings::getSetting<bool>("quiet");}
-
void write(bool val) {*stream << (val ? "true " : "false ");}
void write(Int val) {*stream << val;}
void write(double val) {*stream << val;}
diff --git a/graphics/asymptote/fundec.h b/graphics/asymptote/fundec.h
index bfd10f33d3..8ecf086f58 100644
--- a/graphics/asymptote/fundec.h
+++ b/graphics/asymptote/fundec.h
@@ -15,14 +15,14 @@
namespace absyntax {
class formal : public absyn {
- ty *base;
+ astType *base;
decidstart *start;
bool Explicit;
varinit *defval;
bool keywordOnly;
public:
- formal(position pos, ty *base, decidstart *start=0, varinit *defval=0,
+ formal(position pos, astType *base, decidstart *start=0, varinit *defval=0,
bool Explicit= false, bool keywordOnly=false)
: absyn(pos), base(base), start(start), Explicit(Explicit),
defval(defval), keywordOnly(keywordOnly) {}
@@ -38,7 +38,7 @@ public:
types::ty *getType(coenv &e, bool tacit=false);
- absyntax::ty *getAbsyntaxType() { return base; }
+ absyntax::astType *getAbsyntaxType() { return base; }
virtual void addOps(coenv &e, record *r);
@@ -63,9 +63,9 @@ public:
};
struct tySymbolPair : public gc {
- absyntax::ty* ty;
+ absyntax::astType* ty;
symbol sym;
- tySymbolPair(absyntax::ty* ty, symbol sym) : ty(ty), sym(sym) {}
+ tySymbolPair(absyntax::astType* ty, symbol sym) : ty(ty), sym(sym) {}
};
class formals : public absyn {
@@ -141,7 +141,7 @@ public:
};
class fundef : public exp {
- ty *result;
+ astType *result;
formals *params;
stm *body;
@@ -152,7 +152,7 @@ class fundef : public exp {
friend class fundec;
public:
- fundef(position pos, ty *result, formals *params, stm *body)
+ fundef(position pos, astType *result, formals *params, stm *body)
: exp(pos), result(result), params(params), body(body), id() {}
virtual void prettyprint(ostream &out, Int indent) override;
@@ -176,7 +176,7 @@ class fundec : public dec {
fundef fun;
public:
- fundec(position pos, ty *result, symbol id, formals *params, stm *body)
+ fundec(position pos, astType *result, symbol id, formals *params, stm *body)
: dec(pos), id(id), fun(pos, result, params, body)
{ fun.id = id; }
diff --git a/graphics/asymptote/generate_enums.py b/graphics/asymptote/generate_enums.py
index 6558243745..2843b9c3fe 100755
--- a/graphics/asymptote/generate_enums.py
+++ b/graphics/asymptote/generate_enums.py
@@ -11,7 +11,7 @@
# Written by Supakorn "Jamie" Rassameemasmuang <jamievlin@outlook.com>
from typing import List, Tuple, Any, Union
-from datetime import datetime
+from datetime import datetime, timezone
import io
import argparse
import os
@@ -50,10 +50,8 @@ def create_enums(filename: str) -> List[Union[Tuple[str, int, str], Tuple[str, i
def datetime_now():
- return datetime.utcfromtimestamp(
- int(os.environ.get('SOURCE_DATE_EPOCH', time.time()))
- )
-
+ return datetime.fromtimestamp(
+ int(os.environ.get('SOURCE_DATE_EPOCH', time.time())),tz=timezone.utc)
def generate_enum_cpp(outname, enums, name, comment=None, *args, **kwargs):
with io.open(outname, 'w') as fil:
diff --git a/graphics/asymptote/genv.cc b/graphics/asymptote/genv.cc
index fe8e1b5cab..65e132ef56 100644
--- a/graphics/asymptote/genv.cc
+++ b/graphics/asymptote/genv.cc
@@ -32,7 +32,6 @@
using namespace types;
using settings::getSetting;
using settings::Setting;
-using vm::importIndex_t;
// Dynamic loading of external libraries.
types::record *transExternalModule(
@@ -46,7 +45,7 @@ genv::genv()
{
// Add settings as a module. This is so that the init file ~/.asy/config.asy
// can set settings.
- imap[importIndex_t("settings","")]=settings::getSettingsModule();
+ imap[symbol::literalTrans("settings")]=settings::getSettingsModule();
// Translate plain in advance, if we're using autoplain.
if(getSetting<bool>("autoplain")) {
@@ -58,7 +57,7 @@ genv::genv()
Setting("autoplain")=true;
}
#ifdef HAVE_LIBGSL
- imap[importIndex_t("gsl","")]=trans::getGSLModule();
+ imap[symbol::literalTrans("gsl")]=trans::getGSLModule();
#endif
}
@@ -93,7 +92,7 @@ record *genv::loadTemplatedModule(
symbol id,
string filename,
mem::vector<absyntax::namedTyEntry*> *args,
- trans::frame *parent
+ coenv& e
) {
// Hackish way to load an external library.
#if 0
@@ -109,7 +108,7 @@ record *genv::loadTemplatedModule(
em.sync();
- record *r=ast->transAsTemplatedFile(*this, id, args, parent);
+ record *r=ast->transAsTemplatedFile(*this, id, args, e);
inTranslation.remove(filename);
@@ -130,46 +129,48 @@ void genv::checkRecursion(string filename) {
record *genv::getModule(symbol id, string filename) {
checkRecursion(filename);
- importIndex_t Index(filename,"");
- record *r=imap[Index];
+ symbol index=symbol::literalTrans(filename);
+ record *r=imap[index];
if (r)
return r;
else {
record *r=loadModule(id, filename);
// Don't add an erroneous module to the dictionary in interactive mode, as
// the user may try to load it again.
- if (!interact::interactive || !em.errors())
- imap[Index]=r;
+ if (!interact::interactive || !em.errors()) {
+ imap[index]=r;
+ }
return r;
}
}
record *genv::getTemplatedModule(
- symbol id,
+ symbol index,
string filename,
- string sigHandle,
mem::vector<absyntax::namedTyEntry*>* args,
- frame *parent
+ coenv& e
) {
checkRecursion(filename);
- importIndex_t Index(filename,sigHandle);
-
- record *r=imap[Index];
+ record *r=imap[index];
if (r)
return r;
else {
- record *r=loadTemplatedModule(id, filename, args, parent);
+ record *r=loadTemplatedModule(index, filename, args, e);
// Don't add an erroneous module to the dictionary in interactive mode, as
// the user may try to load it again.
- if (!interact::interactive || !em.errors())
- imap[Index]=r;
+ if (!interact::interactive || !em.errors()) {
+ imap[index]=r;
+ }
return r;
}
}
+record *genv::getLoadedModule(symbol id) {
+ return imap[id];
+}
typedef vm::stack::importInitMap importInitMap;
@@ -179,8 +180,8 @@ importInitMap *genv::getInitMap()
genv &ge;
initMap(genv &ge)
: ge(ge) {}
- lambda *operator[](importIndex_t s) {
- record *r=ge.imap[s];
+ lambda *operator[](string s) {
+ record *r=ge.imap[symbol::literalTrans(s)];
return r ? r->getInit() : 0;
}
};
diff --git a/graphics/asymptote/genv.h b/graphics/asymptote/genv.h
index 7587d9aee5..f78e9c59f2 100644
--- a/graphics/asymptote/genv.h
+++ b/graphics/asymptote/genv.h
@@ -31,7 +31,7 @@ namespace trans {
class genv : public gc {
// The initializer functions for imports, indexed by filename.
- typedef mem::map<vm::importIndex_t,record *> importMap;
+ typedef mem::map<symbol,record *> importMap;
importMap imap;
// List of modules in translation. Used to detect and prevent infinite
@@ -48,21 +48,21 @@ class genv : public gc {
symbol id,
string filename,
mem::vector<absyntax::namedTyEntry*> *args,
- trans::frame *parent
+ coenv& e
);
public:
genv();
// Get an imported module, translating if necessary.
- record *getModule(symbol name, string s);
+ record *getModule(symbol name, string filename);
record *getTemplatedModule(
- symbol id,
+ symbol index,
string filename,
- string sigHandle,
mem::vector<absyntax::namedTyEntry*> *args,
- frame *parent
+ coenv& e
);
+ record *getLoadedModule(symbol index);
// Uses the filename->record map to build a filename->initializer map to be
// used at runtime.
diff --git a/graphics/asymptote/glew.c b/graphics/asymptote/glew.c
index f6b50465b9..a6009a40e8 100644
--- a/graphics/asymptote/glew.c
+++ b/graphics/asymptote/glew.c
@@ -6,9 +6,16 @@
#define _WIN32
#endif
+#ifndef GLEW_INCLUDE
+#include <GL/glew.h>
+#else
+#include GLEW_INCLUDE
+#endif
+
#ifdef HAVE_LIBGL
#ifdef HAVE_LIBOSMESA
#define GLEW_OSMESA
+#define APIENTRY
#endif
#include "GL/glew.c"
diff --git a/graphics/asymptote/glrender.cc b/graphics/asymptote/glrender.cc
index d360d35a8b..c64dc26d0d 100644
--- a/graphics/asymptote/glrender.cc
+++ b/graphics/asymptote/glrender.cc
@@ -1827,6 +1827,10 @@ void init()
glutInit(&argc,argv);
fpu_trap(settings::trap());
+
+#ifdef FREEGLUT
+ glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,GLUT_ACTION_GLUTMAINLOOP_RETURNS);
+#endif
screenWidth=glutGet(GLUT_SCREEN_WIDTH);
screenHeight=glutGet(GLUT_SCREEN_HEIGHT);
#endif
@@ -2253,6 +2257,8 @@ void glrender(const string& prefix, const picture *pic, const string& format,
#endif
glutMainLoop();
+ cout << endl;
+ exitHandler(0);
#endif // HAVE_LIBGLUT
} else {
if(glthread) {
@@ -2769,7 +2775,8 @@ void drawBuffers()
drawTriangle();
if(transparent) {
- gl::copied=true;
+ if(camp::ssbo)
+ gl::copied=true;
if(interlock) resizeFragmentBuffer();
drawTransparent();
}
diff --git a/graphics/asymptote/glrender.h b/graphics/asymptote/glrender.h
index 6b99611dfe..1c140584a9 100644
--- a/graphics/asymptote/glrender.h
+++ b/graphics/asymptote/glrender.h
@@ -44,6 +44,9 @@
#endif
#ifdef HAVE_LIBOSMESA
+#ifndef APIENTRY
+#define APIENTRY
+#endif
#include <GL/osmesa.h>
#endif
@@ -61,6 +64,9 @@
#endif
#ifdef HAVE_LIBOSMESA
+#ifndef APIENTRY
+#define APIENTRY
+#endif
#include <GL/osmesa.h>
#endif
diff --git a/graphics/asymptote/item.h b/graphics/asymptote/item.h
index 70d4923445..28bba31b41 100644
--- a/graphics/asymptote/item.h
+++ b/graphics/asymptote/item.h
@@ -115,15 +115,19 @@ public:
item(Int i)
: kind(&typeid(Int)), i(i) {}
+#ifndef intIsInt
item(int i)
: kind(&typeid(Int)), i(i) {}
+#endif
item(double x)
: kind(&typeid(double)), x(x) {}
item(bool b)
: kind(&typeid(bool)), b(b) {}
+#ifndef intIsInt
item& operator= (int a)
{ kind=&typeid(Int); i=a; return *this; }
+#endif
item& operator= (unsigned int a)
{ kind=&typeid(Int); i=a; return *this; }
item& operator= (Int a)
@@ -197,29 +201,29 @@ private:
#ifdef SIMPLE_FRAME
// In the simple implementation, a frame is just an array of items.
-typedef item frame;
+typedef item vmFrame;
#else
-class frame : public gc {
+class vmFrame : public gc {
#ifdef DEBUG_FRAME
string name;
- Int parentIndex;
+ size_t parentIndex;
#endif
- typedef mem::vector<item> internal_vars_t;
+ using internal_vars_t = mem::vector<item>;
internal_vars_t vars;
// Allow the stack direct access to vars.
friend class stack;
public:
#ifdef DEBUG_FRAME
- frame(string name, Int parentIndex, size_t size)
+ vmFrame(string name, size_t parentIndex, size_t size)
: name(name), parentIndex(parentIndex), vars(size)
{}
string getName() { return name; }
- Int getParentIndex() { return parentIndex; }
+ size_t getParentIndex() { return parentIndex; }
#else
- frame(size_t size)
+ vmFrame(size_t size)
: vars(size)
{}
#endif
@@ -248,12 +252,6 @@ inline T get(const item& it)
}
template <>
-inline int get<int>(const item&)
-{
- throw vm::bad_item_value();
-}
-
-template <>
inline Int get<Int>(const item& it)
{
#if COMPACT
diff --git a/graphics/asymptote/main.cc b/graphics/asymptote/main.cc
index 0728ebcdaf..5f440c24c7 100644
--- a/graphics/asymptote/main.cc
+++ b/graphics/asymptote/main.cc
@@ -54,6 +54,12 @@
#include "stack.h"
+#ifdef HAVE_LIBCURSES
+#ifdef HAVE_LIBREADLINE
+#include <readline/readline.h>
+#endif
+#endif
+
using namespace settings;
using interact::interactive;
@@ -245,6 +251,9 @@ void *asymain(void *A)
void exitHandler(int)
{
+#if defined(HAVE_READLINE) && defined(HAVE_LIBCURSES)
+ rl_cleanup_after_signal();
+#endif
exit(returnCode());
}
diff --git a/graphics/asymptote/memory.h b/graphics/asymptote/memory.h
index 5c5d7a41d0..3ddc2aaea1 100644
--- a/graphics/asymptote/memory.h
+++ b/graphics/asymptote/memory.h
@@ -194,7 +194,7 @@ typedef std::basic_stringbuf<char,std::char_traits<char>,
inline void compact(int x) {GC_set_dont_expand(x);}
inline std::string stdString(string s) {return std::string(s.c_str());}
#else
-inline void compact(int x) {}
+inline void compact(int) {}
typedef std::string string;
typedef std::stringstream stringstream;
typedef std::istringstream istringstream;
diff --git a/graphics/asymptote/newexp.cc b/graphics/asymptote/newexp.cc
index c124293928..7d8efbd138 100644
--- a/graphics/asymptote/newexp.cc
+++ b/graphics/asymptote/newexp.cc
@@ -44,7 +44,7 @@ bool newRecordExp::encodeLevel(position pos, coenv &e, trans::tyEntry *ent)
if (ent->v) {
// Put the record on the stack. For instance, in code like
- // import imp;
+ // access imp;
// new imp.t;
// we are putting the instance of imp on the stack, so we can use it to
// allocate an instance of imp.t.
diff --git a/graphics/asymptote/newexp.h b/graphics/asymptote/newexp.h
index d386b18100..cec21abf7b 100644
--- a/graphics/asymptote/newexp.h
+++ b/graphics/asymptote/newexp.h
@@ -19,11 +19,11 @@ namespace absyntax {
typedef fundef newFunctionExp;
class newRecordExp : public exp {
- ty *result;
+ astType *result;
- static bool encodeLevel(position pos, coenv &e, trans::tyEntry *ent);
public:
- newRecordExp(position pos, ty *result)
+ static bool encodeLevel(position pos, coenv &e, trans::tyEntry *ent);
+ newRecordExp(position pos, astType *result)
: exp(pos), result(result) {}
void prettyprint(ostream &out, Int indent);
@@ -36,14 +36,14 @@ public:
};
class newArrayExp : public exp {
- ty *celltype;
+ astType *celltype;
explist *dimexps;
dimensions *dims;
arrayinit *ai;
public:
newArrayExp(position pos,
- ty *celltype,
+ astType *celltype,
explist *dimexps,
dimensions *dims,
arrayinit *ai)
diff --git a/graphics/asymptote/picture.cc b/graphics/asymptote/picture.cc
index 8f67201fb3..8ea6e3bf86 100644
--- a/graphics/asymptote/picture.cc
+++ b/graphics/asymptote/picture.cc
@@ -853,7 +853,10 @@ bool picture::postprocess(const string& prename, const string& outname,
double expand=antialias;
if(expand < 2.0) expand=1.0;
res *= expand;
- cmd.push_back(getSetting<string>("convert"));
+ string s=getSetting<string>("convert");
+ cmd.push_back(s);
+ if(s != "convert")
+ cmd.push_back("convert");
cmd.push_back("-density");
cmd.push_back(String(res)+"x"+String(res));
if(expand == 1.0)
diff --git a/graphics/asymptote/pkg.m4 b/graphics/asymptote/pkg.m4
new file mode 100644
index 0000000000..d8549a4789
--- /dev/null
+++ b/graphics/asymptote/pkg.m4
@@ -0,0 +1,343 @@
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+# serial 11 (pkg-config-0.29.1)
+
+dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+dnl 02111-1307, USA.
+dnl
+dnl As a special exception to the GNU General Public License, if you
+dnl distribute this file as part of a program that contains a
+dnl configuration script generated by Autoconf, you may include it under
+dnl the same distribution terms that you use for the rest of that
+dnl program.
+
+dnl PKG_PREREQ(MIN-VERSION)
+dnl -----------------------
+dnl Since: 0.29
+dnl
+dnl Verify that the version of the pkg-config macros are at least
+dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
+dnl installed version of pkg-config, this checks the developer's version
+dnl of pkg.m4 when generating configure.
+dnl
+dnl To ensure that this macro is defined, also add:
+dnl m4_ifndef([PKG_PREREQ],
+dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
+dnl
+dnl See the "Since" comment for each macro you use to see what version
+dnl of the macros you require.
+m4_defun([PKG_PREREQ],
+[m4_define([PKG_MACROS_VERSION], [0.29.1])
+m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
+ [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
+])dnl PKG_PREREQ
+
+dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
+dnl ----------------------------------
+dnl Since: 0.16
+dnl
+dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
+dnl first found in the path. Checks that the version of pkg-config found
+dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
+dnl used since that's the first version where most current features of
+dnl pkg-config existed.
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+fi[]dnl
+])dnl PKG_PROG_PKG_CONFIG
+
+dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------------------------------
+dnl Since: 0.18
+dnl
+dnl Check to see whether a particular set of modules exists. Similar to
+dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
+dnl
+dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+dnl only at the first occurence in configure.ac, so if the first place
+dnl it's called might be skipped (such as if it is within an "if", you
+dnl have to call PKG_CHECK_EXISTS manually
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_default([$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+dnl ---------------------------------------------
+dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
+dnl pkg_failed based on the result.
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes ],
+ [pkg_failed=yes])
+ else
+ pkg_failed=untried
+fi[]dnl
+])dnl _PKG_CONFIG
+
+dnl _PKG_SHORT_ERRORS_SUPPORTED
+dnl ---------------------------
+dnl Internal check to see if pkg-config supports short errors.
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])dnl _PKG_SHORT_ERRORS_SUPPORTED
+
+
+dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl [ACTION-IF-NOT-FOUND])
+dnl --------------------------------------------------------------
+dnl Since: 0.4.0
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
+dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ AC_MSG_RESULT([no])
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+ ])
+elif test $pkg_failed = untried; then
+ AC_MSG_RESULT([no])
+ m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+ ])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ $3
+fi[]dnl
+])dnl PKG_CHECK_MODULES
+
+
+dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl [ACTION-IF-NOT-FOUND])
+dnl ---------------------------------------------------------------------
+dnl Since: 0.29
+dnl
+dnl Checks for existence of MODULES and gathers its build flags with
+dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
+dnl and VARIABLE-PREFIX_LIBS from --libs.
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
+dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
+dnl configure.ac.
+AC_DEFUN([PKG_CHECK_MODULES_STATIC],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+_save_PKG_CONFIG=$PKG_CONFIG
+PKG_CONFIG="$PKG_CONFIG --static"
+PKG_CHECK_MODULES($@)
+PKG_CONFIG=$_save_PKG_CONFIG[]dnl
+])dnl PKG_CHECK_MODULES_STATIC
+
+
+dnl PKG_INSTALLDIR([DIRECTORY])
+dnl -------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable pkgconfigdir as the location where a module
+dnl should install pkg-config .pc files. By default the directory is
+dnl $libdir/pkgconfig, but the default can be changed by passing
+dnl DIRECTORY. The user can override through the --with-pkgconfigdir
+dnl parameter.
+AC_DEFUN([PKG_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([pkgconfigdir],
+ [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
+ [with_pkgconfigdir=]pkg_default)
+AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_INSTALLDIR
+
+
+dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
+dnl --------------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable noarch_pkgconfigdir as the location where a
+dnl module should install arch-independent pkg-config .pc files. By
+dnl default the directory is $datadir/pkgconfig, but the default can be
+dnl changed by passing DIRECTORY. The user can override through the
+dnl --with-noarch-pkgconfigdir parameter.
+AC_DEFUN([PKG_NOARCH_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([noarch-pkgconfigdir],
+ [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
+ [with_noarch_pkgconfigdir=]pkg_default)
+AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_NOARCH_INSTALLDIR
+
+
+dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------
+dnl Since: 0.28
+dnl
+dnl Retrieves the value of the pkg-config variable for the given module.
+AC_DEFUN([PKG_CHECK_VAR],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
+
+_PKG_CONFIG([$1], [variable="][$3]["], [$2])
+AS_VAR_COPY([$1], [pkg_cv_][$1])
+
+AS_VAR_IF([$1], [""], [$5], [$4])dnl
+])dnl PKG_CHECK_VAR
+
+dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND],
+dnl [DESCRIPTION], [DEFAULT])
+dnl ------------------------------------------
+dnl
+dnl Prepare a "--with-" configure option using the lowercase
+dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and
+dnl PKG_CHECK_MODULES in a single macro.
+AC_DEFUN([PKG_WITH_MODULES],
+[
+m4_pushdef([with_arg], m4_tolower([$1]))
+
+m4_pushdef([description],
+ [m4_default([$5], [build with ]with_arg[ support])])
+
+m4_pushdef([def_arg], [m4_default([$6], [auto])])
+m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes])
+m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no])
+
+m4_case(def_arg,
+ [yes],[m4_pushdef([with_without], [--without-]with_arg)],
+ [m4_pushdef([with_without],[--with-]with_arg)])
+
+AC_ARG_WITH(with_arg,
+ AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),,
+ [AS_TR_SH([with_]with_arg)=def_arg])
+
+AS_CASE([$AS_TR_SH([with_]with_arg)],
+ [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)],
+ [auto],[PKG_CHECK_MODULES([$1],[$2],
+ [m4_n([def_action_if_found]) $3],
+ [m4_n([def_action_if_not_found]) $4])])
+
+m4_popdef([with_arg])
+m4_popdef([description])
+m4_popdef([def_arg])
+
+])dnl PKG_WITH_MODULES
+
+dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl [DESCRIPTION], [DEFAULT])
+dnl -----------------------------------------------
+dnl
+dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES
+dnl check._[VARIABLE-PREFIX] is exported as make variable.
+AC_DEFUN([PKG_HAVE_WITH_MODULES],
+[
+PKG_WITH_MODULES([$1],[$2],,,[$3],[$4])
+
+AM_CONDITIONAL([HAVE_][$1],
+ [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"])
+])dnl PKG_HAVE_WITH_MODULES
+
+dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl [DESCRIPTION], [DEFAULT])
+dnl ------------------------------------------------------
+dnl
+dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after
+dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make
+dnl and preprocessor variable.
+AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES],
+[
+PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4])
+
+AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"],
+ [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])])
+])dnl PKG_HAVE_DEFINE_WITH_MODULES
diff --git a/graphics/asymptote/program.cc b/graphics/asymptote/program.cc
index 2af41c967d..c22d283fad 100644
--- a/graphics/asymptote/program.cc
+++ b/graphics/asymptote/program.cc
@@ -74,11 +74,11 @@ ostream& operator<< (ostream& out, const item& i)
out << "string, value = " << get<string>(i);
else if (i.type() == typeid(callable))
out << *(get<callable *>(i));
- else if (i.type() == typeid(frame)) {
+ else if (i.type() == typeid(vmFrame)) {
out << "frame";
# ifdef DEBUG_FRAME
{
- frame *f = get<frame *>(i);
+ vmFrame *f = get<vmFrame *>(i);
if (f)
out << " " << f->getName();
else
diff --git a/graphics/asymptote/revision.cc b/graphics/asymptote/revision.cc
index 4ff21c9455..7f032d5189 100644
--- a/graphics/asymptote/revision.cc
+++ b/graphics/asymptote/revision.cc
@@ -1,2 +1,2 @@
-const char *REVISION="2.89";
+const char *REVISION="2.90";
const char *AsyGLVersion="1.02";
diff --git a/graphics/asymptote/runmath.cc b/graphics/asymptote/runmath.cc
index d9ac05bba4..c7d4c65bba 100644
--- a/graphics/asymptote/runmath.cc
+++ b/graphics/asymptote/runmath.cc
@@ -81,7 +81,7 @@ using types::realArray;
using types::pairArray;
using run::integeroverflow;
-using vm::frame;
+using vm::vmFrame;
const char *invalidargument="invalid argument";
@@ -558,8 +558,8 @@ void gen_runmath28(stack *Stack)
#line 367 "runmath.in"
void boolMemEq(stack *Stack)
{
- frame * b=vm::pop<frame *>(Stack);
- frame * a=vm::pop<frame *>(Stack);
+ vmFrame * b=vm::pop<vmFrame *>(Stack);
+ vmFrame * a=vm::pop<vmFrame *>(Stack);
#line 368 "runmath.in"
{Stack->push<bool>(a == b); return;}
}
@@ -567,8 +567,8 @@ void boolMemEq(stack *Stack)
#line 372 "runmath.in"
void boolMemNeq(stack *Stack)
{
- frame * b=vm::pop<frame *>(Stack);
- frame * a=vm::pop<frame *>(Stack);
+ vmFrame * b=vm::pop<vmFrame *>(Stack);
+ vmFrame * a=vm::pop<vmFrame *>(Stack);
#line 373 "runmath.in"
{Stack->push<bool>(a != b); return;}
}
diff --git a/graphics/asymptote/runmath.in b/graphics/asymptote/runmath.in
index 4beba44fc3..36ca583744 100644
--- a/graphics/asymptote/runmath.in
+++ b/graphics/asymptote/runmath.in
@@ -28,7 +28,7 @@ using types::realArray;
using types::pairArray;
using run::integeroverflow;
-using vm::frame;
+using vm::vmFrame;
const char *invalidargument="invalid argument";
@@ -364,12 +364,12 @@ bool !(bool b)
return !b;
}
-bool :boolMemEq(frame *a, frame *b)
+bool :boolMemEq(vmFrame *a, vmFrame *b)
{
return a == b;
}
-bool :boolMemNeq(frame *a, frame *b)
+bool :boolMemNeq(vmFrame *a, vmFrame *b)
{
return a != b;
}
diff --git a/graphics/asymptote/runtime.cc b/graphics/asymptote/runtime.cc
index b0e7e11005..ba5a6d0f66 100644
--- a/graphics/asymptote/runtime.cc
+++ b/graphics/asymptote/runtime.cc
@@ -126,7 +126,7 @@ using namespace utils;
namespace run {
using camp::pair;
using vm::array;
-using vm::frame;
+using vm::vmFrame;
using vm::stack;
using camp::transform;
using absyntax::runnable;
@@ -216,7 +216,7 @@ void writestring(stack *s)
string S=pop<string>(s);
vm::item it=pop(s);
bool defaultfile=isdefault(it);
- camp::ofile *f=defaultfile ? &camp::Stdout : vm::get<camp::ofile*>(it);
+ camp::file *f=defaultfile ? &camp::Stdout : vm::get<camp::file*>(it);
if(!f->isOpen() || !f->enabled()) return;
if(S != "") f->write(S);
if(f->text()) {
@@ -298,7 +298,7 @@ void pushNullArray(stack *Stack)
void pushNullRecord(stack *Stack)
{
#line 256 "runtime.in"
- {Stack->push<frame*>(0); return;}
+ {Stack->push<vmFrame*>(0); return;}
}
#line 260 "runtime.in"
@@ -1135,9 +1135,8 @@ void gen_runtime86(stack *Stack)
void loadModule(stack *Stack)
{
string * index=vm::pop<string *>(Stack);
- string * filename=vm::pop<string *>(Stack);
#line 766 "runtime.in"
- Stack->load(*filename,*index);
+ Stack->load(*index);
}
#line 770 "runtime.in"
diff --git a/graphics/asymptote/runtime.in b/graphics/asymptote/runtime.in
index 63c49c3863..bc9154e4f6 100644
--- a/graphics/asymptote/runtime.in
+++ b/graphics/asymptote/runtime.in
@@ -101,7 +101,7 @@ using namespace utils;
namespace run {
using camp::pair;
using vm::array;
-using vm::frame;
+using vm::vmFrame;
using vm::stack;
using camp::transform;
using absyntax::runnable;
@@ -191,7 +191,7 @@ void writestring(stack *s)
string S=pop<string>(s);
vm::item it=pop(s);
bool defaultfile=isdefault(it);
- camp::ofile *f=defaultfile ? &camp::Stdout : vm::get<camp::ofile*>(it);
+ camp::file *f=defaultfile ? &camp::Stdout : vm::get<camp::file*>(it);
if(!f->isOpen() || !f->enabled()) return;
if(S != "") f->write(S);
if(f->text()) {
@@ -252,7 +252,7 @@ array* :pushNullArray()
return 0;
}
-frame* :pushNullRecord()
+vmFrame* :pushNullRecord()
{
return 0;
}
@@ -762,9 +762,9 @@ string location() {
}
// Wrapper for the stack::load() method.
-void :loadModule(string *filename, string *index)
+void :loadModule(string *index)
{
- Stack->load(*filename,*index);
+ Stack->load(*index);
}
string cd(string s=emptystring)
diff --git a/graphics/asymptote/settings.cc b/graphics/asymptote/settings.cc
index 6ed24a6c50..9a5006cfe4 100644
--- a/graphics/asymptote/settings.cc
+++ b/graphics/asymptote/settings.cc
@@ -1198,7 +1198,7 @@ void initSettings() {
initialize=false;
}
- settingsModule=new types::dummyRecord(symbol::trans("settings"));
+ settingsModule=new types::dummyRecord(symbol::literalTrans("settings"));
// Default mouse bindings
@@ -1510,7 +1510,7 @@ void initSettings() {
addOption(new envSetting("texcommand", ""));
addOption(new envSetting("dvips", "dvips"));
addOption(new envSetting("dvisvgm", "dvisvgm"));
- addOption(new envSetting("convert", "convert"));
+ addOption(new envSetting("convert", "magick"));
addOption(new envSetting("display", defaultDisplay));
addOption(new envSetting("animate", defaultAnimate));
addOption(new envSetting("papertype", "letter"));
diff --git a/graphics/asymptote/stack.cc b/graphics/asymptote/stack.cc
index 7072265176..3623e666cb 100644
--- a/graphics/asymptote/stack.cc
+++ b/graphics/asymptote/stack.cc
@@ -22,7 +22,7 @@
#include <iostream>
namespace vm {
-void draw(ostream& out, frame *v);
+void draw(ostream& out, vmFrame *v);
}
#endif
@@ -57,9 +57,9 @@ inline stack::vars_t base_frame(
#else
# ifdef DEBUG_FRAME
assert(!name.empty());
- vars = new frame(name, parentIndex, size);
+ vars = new vmFrame(name, parentIndex, size);
# else
- vars = new frame(size);
+ vars = new vmFrame(size);
# endif
(*vars)[parentIndex] = closure;
#endif
@@ -98,7 +98,7 @@ stack::vars_t make_dummyframe(string name)
inline stack::vars_t make_globalframe(size_t size)
{
assert(size > 0);
-#if SIMPLE_FRAME
+#ifdef SIMPLE_FRAME
// The global frame is an indirect frame. It holds one item, which is the
// link to another frame.
stack::vars_t direct = new item[1];
@@ -119,13 +119,13 @@ inline stack::vars_t make_globalframe(size_t size)
}
-inline void resize_frame(frame *f, size_t oldsize, size_t newsize)
+inline void resize_frame(vmFrame *f, size_t oldsize, size_t newsize)
{
//assert("Need to fix this" == 0);
assert(newsize > oldsize);
-#if SIMPLE_FRAME
- frame *old_indirect = get<frame *>(f[0]);
- frame *new_indirect = new item[newsize];
+#ifdef SIMPLE_FRAME
+ vmFrame *old_indirect = get<vmFrame *>(f[0]);
+ vmFrame *new_indirect = new item[newsize];
std::copy(old_indirect, old_indirect+oldsize, new_indirect);
f[0] = new_indirect;
#else
@@ -147,12 +147,13 @@ void run(lambda *l)
// Move arguments from stack to frame.
void stack::marshall(size_t args, stack::vars_t vars)
{
- for (size_t i = args; i > 0; --i)
-#if SIMPLE_FRAME
+ for (size_t i = args; i > 0; --i) {
+# ifdef SIMPLE_FRAME
vars[i-1] = pop();
-#else
- (*vars)[i-1] = pop();
-#endif
+# else
+ (*vars)[i-1] = pop();
+# endif
+ }
}
#ifdef PROFILE
@@ -275,7 +276,7 @@ void stack::runWithOrWithoutClosure(lambda *l, vars_t vars, vars_t parent)
#ifdef SIMPLE_FRAME
// Link to the variables, be they in a closure or on the stack.
- frame *varlink;
+ vmFrame *varlink;
# define SET_VARLINK assert(vars); varlink = vars;
# define VAR(n) ( (varlink)[(n) + frameStart] )
@@ -405,7 +406,7 @@ void stack::runWithOrWithoutClosure(lambda *l, vars_t vars, vars_t parent)
case inst::popframe:
{
assert(vars);
- vars=get<frame *>(VAR(0));
+ vars=get<vmFrame *>(VAR(0));
SET_VARLINK;
@@ -554,18 +555,18 @@ void stack::runWithOrWithoutClosure(lambda *l, vars_t vars, vars_t parent)
#undef FRAMEVAR
}
-void stack::load(string filename, string sigHandle) {
- importIndex_t Index(filename,sigHandle);
- frame *inst=instMap[Index];
- if (inst)
+void stack::load(string index) {
+ vmFrame *inst=instMap[index];
+ if (inst) {
push(inst);
+ }
else {
func f;
assert(initMap);
- f.body=(*initMap)[Index];
+ f.body=(*initMap)[index];
assert(f.body);
run(&f);
- instMap[Index]=get<frame *>(top());
+ instMap[index]=get<vmFrame *>(top());
}
}
@@ -597,7 +598,7 @@ void stack::draw(ostream& out)
out << "\n";
}
-void draw(ostream& out, frame* v)
+void draw(ostream& out, vmFrame* v)
{
out << "vars:" << endl;
@@ -613,7 +614,7 @@ void draw(ostream& out, frame* v)
if (i == v->getParentIndex()) {
try {
- frame *parent = get<frame *>(link);
+ vmFrame *parent = get<vmFrame *>(link);
out << (parent ? "link" : "----");
} catch (bad_item_value&) {
out << "non-link " << (*v)[0];
@@ -628,9 +629,9 @@ void draw(ostream& out, frame* v)
out << "\n";
- frame *parent;
+ vmFrame *parent;
try {
- parent = get<frame *>(link);
+ parent = get<vmFrame *>(link);
} catch (bad_item_value&) {
parent = 0;
}
diff --git a/graphics/asymptote/stack.h b/graphics/asymptote/stack.h
index eeff080f14..0522f6bb98 100644
--- a/graphics/asymptote/stack.h
+++ b/graphics/asymptote/stack.h
@@ -42,20 +42,18 @@ class runnable;
extern bool indebugger;
-typedef mem::pair<string, string> importIndex_t;
-
class stack {
public:
- typedef frame* vars_t;
+ using vars_t = vmFrame*;
struct importInitMap {
virtual ~importInitMap() {}
- virtual lambda *operator[](importIndex_t) = 0;
+ virtual lambda *operator[](string) = 0;
};
private:
// stack for operands
- typedef mem::vector<item> stack_t;
+ using stack_t = mem::vector<item>;
stack_t theStack;
void draw(ostream& out);
@@ -66,7 +64,7 @@ private:
// The stack stores a map of initialized imported modules by name, so that
// each module is initialized only once and each import refers to the same
// instance.
- typedef mem::map<CONST importIndex_t,frame *> importInstanceMap;
+ using importInstanceMap = mem::map<CONST mem::string, vmFrame*>;
importInstanceMap instMap;
// One can associate an environment to embedded code while running.
@@ -108,9 +106,9 @@ public:
void breakpoint(absyntax::runnable *r=NULL);
void debug();
- // Put an import (indexed by filename and signature) on top of the
- // stack, initializing it if necessary.
- void load(string filename, string sigHandle);
+ // Put an import (indexed by filename and optional template
+ // parameter signature) on top of the stack, initializing it if necessary.
+ void load(string index);
// These are so that built-in functions can easily manipulate the stack
void push(item next) {
diff --git a/graphics/asymptote/stm.h b/graphics/asymptote/stm.h
index 3ce488985d..b8fb4a86b5 100644
--- a/graphics/asymptote/stm.h
+++ b/graphics/asymptote/stm.h
@@ -164,14 +164,14 @@ public:
};
class extendedForStm : public stm {
- ty *start;
+ astType *start;
symbol var;
exp *set;
stm *body;
public:
- extendedForStm(position pos, ty *start, symbol var, exp *set, stm *body)
+ extendedForStm(position pos, astType *start, symbol var, exp *set, stm *body)
: stm(pos), start(start), var(var), set(set), body(body) {}
void createSymMap(AsymptoteLsp::SymbolContext* symContext) override;
diff --git a/graphics/asymptote/tests/TestLib.asy b/graphics/asymptote/tests/TestLib.asy
index a4a4b23992..f735fef09e 100644
--- a/graphics/asymptote/tests/TestLib.asy
+++ b/graphics/asymptote/tests/TestLib.asy
@@ -6,7 +6,7 @@ bool close(pair a, pair b)
void StartTest(string desc)
{
- write("Testing " + desc + "...",flush);
+ write("Testing " + desc + "...");
}
void EndTest()
diff --git a/graphics/asymptote/tests/template/functionTest.asy b/graphics/asymptote/tests/template/functionTest.asy
new file mode 100644
index 0000000000..770322b2c1
--- /dev/null
+++ b/graphics/asymptote/tests/template/functionTest.asy
@@ -0,0 +1,20 @@
+import TestLib;
+
+typedef real F1(string);
+typedef string F2(int);
+
+real f1(string s) {
+ return length(s);
+}
+
+F2 f2 = operator ecast;
+
+StartTest("Function type parameters");
+
+from 'template/imports/composeFunctions'(R=real, F1=F1, F2=F2, I=int) access
+ compose;
+
+real r = compose(f1, f2)(1234567890);
+assert(r == 10);
+
+EndTest(); \ No newline at end of file
diff --git a/graphics/asymptote/tests/template/imports/A.asy b/graphics/asymptote/tests/template/imports/A.asy
new file mode 100644
index 0000000000..dc737fdb91
--- /dev/null
+++ b/graphics/asymptote/tests/template/imports/A.asy
@@ -0,0 +1,4 @@
+typedef import(T);
+
+struct A {
+}
diff --git a/graphics/asymptote/tests/template/imports/B.asy b/graphics/asymptote/tests/template/imports/B.asy
new file mode 100644
index 0000000000..c048a43f46
--- /dev/null
+++ b/graphics/asymptote/tests/template/imports/B.asy
@@ -0,0 +1 @@
+typedef import(T);
diff --git a/graphics/asymptote/tests/template/imports/C.asy b/graphics/asymptote/tests/template/imports/C.asy
new file mode 100644
index 0000000000..38e8939bad
--- /dev/null
+++ b/graphics/asymptote/tests/template/imports/C.asy
@@ -0,0 +1,6 @@
+typedef import(T);
+
+T a=new T;
+assert(a.x == 1);
+
+int global = 17;
diff --git a/graphics/asymptote/tests/template/imports/composeFunctions.asy b/graphics/asymptote/tests/template/imports/composeFunctions.asy
new file mode 100644
index 0000000000..63678e6c6b
--- /dev/null
+++ b/graphics/asymptote/tests/template/imports/composeFunctions.asy
@@ -0,0 +1,9 @@
+typedef import(R, F1, F2, I);
+
+typedef R FF(I);
+
+FF compose(F1 f1, F2 f2) {
+ return new R(I i) {
+ return f1(f2(i));
+ };
+} \ No newline at end of file
diff --git a/graphics/asymptote/tests/template/imports/notTemplate.asy b/graphics/asymptote/tests/template/imports/notTemplate.asy
new file mode 100644
index 0000000000..bd309b07ba
--- /dev/null
+++ b/graphics/asymptote/tests/template/imports/notTemplate.asy
@@ -0,0 +1,4 @@
+struct A {
+ static int global = 17;
+ int local = 3;
+} \ No newline at end of file
diff --git a/graphics/asymptote/tests/template/imports/notTemplate2.asy b/graphics/asymptote/tests/template/imports/notTemplate2.asy
new file mode 100644
index 0000000000..4c9375c3b3
--- /dev/null
+++ b/graphics/asymptote/tests/template/imports/notTemplate2.asy
@@ -0,0 +1,4 @@
+struct B {
+ import 'template/imports/notTemplate' as notTemplate;
+}
+B b; \ No newline at end of file
diff --git a/graphics/asymptote/tests/template/imports/pureset.asy b/graphics/asymptote/tests/template/imports/pureset.asy
new file mode 100644
index 0000000000..472a37ccb4
--- /dev/null
+++ b/graphics/asymptote/tests/template/imports/pureset.asy
@@ -0,0 +1,116 @@
+typedef import(T);
+
+struct Set_T {
+ int size();
+ bool empty() {
+ return size() == 0;
+ }
+ bool contains(T item);
+ bool insert(T item);
+ T replace(T item); // Inserts item, and returns the item that was
+ // replaced, or emptyresponse if no item was replaced.
+ T get(T item);
+ bool delete(T item);
+ // Calls process on each item in the collection until process returns false.
+ void forEach(bool process(T item));
+}
+
+struct NaiveSet_T {
+ private T[] buffer = new T[0];
+ private T emptyresponse;
+ private bool equiv(T a, T b);
+
+ void operator init(bool equiv(T a, T b), T emptyresponse) {
+ this.equiv = equiv;
+ this.emptyresponse = emptyresponse;
+ }
+
+ int size() {
+ return buffer.length;
+ }
+
+ bool contains(T item) {
+ for (T a : buffer) {
+ if (equiv(a, item)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ bool insert(T item) {
+ if (contains(item)) {
+ return false;
+ }
+ buffer.push(item);
+ return true;
+ }
+
+ T replace(T item) {
+ for (int i = 0; i < buffer.length; ++i) {
+ if (equiv(buffer[i], item)) {
+ T old = buffer[i];
+ buffer[i] = item;
+ return old;
+ }
+ }
+ buffer.push(item);
+ return emptyresponse;
+ }
+
+ T get(T item) {
+ for (T a : buffer) {
+ if (equiv(a, item)) {
+ return a;
+ }
+ }
+ return emptyresponse;
+ }
+
+ bool delete(T item) {
+ for (int i = 0; i < buffer.length; ++i) {
+ if (equiv(buffer[i], item)) {
+ buffer[i] = buffer[buffer.length - 1];
+ buffer.pop();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ void forEach(bool process(T item)) {
+ for (T a : buffer) {
+ if (!process(a)) {
+ return;
+ }
+ }
+ }
+
+}
+
+Set_T operator cast(NaiveSet_T naiveSet) {
+ Set_T set = new Set_T;
+ set.size = naiveSet.size;
+ set.contains = naiveSet.contains;
+ set.insert = naiveSet.insert;
+ set.replace = naiveSet.replace;
+ set.get = naiveSet.get;
+ set.delete = naiveSet.delete;
+ set.forEach = naiveSet.forEach;
+ return set;
+}
+
+T[] operator cast(Set_T set) {
+ T[] buffer = new T[set.size()];
+ int i = 0;
+ set.forEach(new bool(T item) {
+ buffer[i] = item;
+ ++i;
+ return true;
+ });
+ return buffer;
+}
+
+Set_T makeNaiveSet(bool equiv(T, T), T emptyresponse) {
+ return NaiveSet_T(equiv, emptyresponse);
+} \ No newline at end of file
diff --git a/graphics/asymptote/tests/template/imports/sortedset.asy b/graphics/asymptote/tests/template/imports/sortedset.asy
new file mode 100644
index 0000000000..bcef6889e0
--- /dev/null
+++ b/graphics/asymptote/tests/template/imports/sortedset.asy
@@ -0,0 +1,208 @@
+typedef import(T);
+
+from "template/imports/pureset"(T=T) access Set_T, operator cast, makeNaiveSet;
+
+struct SortedSet_T {
+ int size();
+ bool empty() { return size() == 0; }
+ bool contains(T item);
+ T get(T item); // Returns the item in the collection that is
+ // equivalent to item, or emptyresponse if there is no
+ // such item.
+ // Returns the least element > item, or emptyresponse if there is no such
+ // element.
+ T after(T item);
+ // Returns the greatest element < item, or emptyresponse if there is no such
+ // element.
+ T before(T item);
+ T firstGEQ(T item) { return contains(item) ? get(item) : after(item); }
+ T firstLEQ(T item) { return contains(item) ? get(item) : before(item); }
+ T min(); // Returns emptyresponse if collection is empty.
+ T popMin(); // Returns emptyresponse if collection is empty.
+ T max(); // Returns emptyresponse if collection is empty.
+ T popMax(); // Returns emptyresponse if collection is empty.
+ bool insert(T item); // Returns true iff the collection is modified.
+ T replace(T item); // Inserts item, and returns the item that was
+ // replaced, or emptyresponse if no item was replaced.
+ bool delete(T item); // Returns true iff the collection is modified.
+ // Calls process on each item in the collection, in ascending order,
+ // until process returns false.
+ void forEach(bool process(T item));
+}
+
+T[] operator cast(SortedSet_T set) {
+ T[] result;
+ set.forEach(new bool(T item) {
+ result.push(item);
+ return true;
+ });
+ return result;
+}
+
+Set_T unSort(SortedSet_T sorted_set) {
+ Set_T set = new Set_T;
+ set.size = sorted_set.size;
+ set.empty = sorted_set.empty;
+ set.contains = sorted_set.contains;
+ set.insert = sorted_set.insert;
+ set.replace = sorted_set.replace;
+ set.get = sorted_set.get;
+ set.delete = sorted_set.delete;
+ set.forEach = sorted_set.forEach;
+ return set;
+}
+
+Set_T operator cast(SortedSet_T) = unSort;
+
+// For testing purposes, we provide a naive implementation of SortedSet_T.
+// This implementation is highly inefficient, but it is correct, and can be
+// used to test other implementations of SortedSet_T.
+struct NaiveSortedSet_T {
+ private bool lt(T a, T b);
+ private T[] buffer = new T[0];
+ private T emptyresponse;
+
+ private bool leq(T a, T b) {
+ return !lt(b, a);
+ }
+ private bool gt(T a, T b) {
+ return lt(b, a);
+ }
+ private bool geq(T a, T b) {
+ return leq(b, a);
+ }
+ private bool equiv(T a, T b) {
+ return leq(a, b) && leq(b, a);
+ }
+
+ void operator init(bool lessThan(T, T), T emptyresponse) {
+ this.lt = lessThan;
+ this.emptyresponse = emptyresponse;
+ }
+
+ int size() {
+ return buffer.length;
+ }
+
+ bool contains(T item) {
+ for (T possibility : buffer) {
+ if (equiv(possibility, item)) return true;
+ }
+ return false;
+ }
+
+ T after(T item) {
+ for (T possibility : buffer) {
+ if (gt(possibility, item)) return possibility;
+ }
+ return emptyresponse;
+ }
+
+ T before(T item) {
+ for (int ii = buffer.length - 1; ii >= 0; --ii) {
+ T possibility = buffer[ii];
+ if (lt(possibility, item)) return possibility;
+ }
+ return emptyresponse;
+ }
+
+ T min() {
+ if (buffer.length == 0) return emptyresponse;
+ return buffer[0];
+ }
+
+ T popMin() {
+ if (buffer.length == 0) return emptyresponse;
+ T toreturn = buffer[0];
+ buffer.delete(0);
+ return toreturn;
+ }
+
+ T max() {
+ if (buffer.length == 0) return emptyresponse;
+ return buffer[buffer.length - 1];
+ }
+
+ T popMax() {
+ if (buffer.length == 0) return emptyresponse;
+ return buffer.pop();
+ }
+
+ bool insert(T item) {
+ for (int i = 0; i < buffer.length; ++i) {
+ if (equiv(buffer[i], item)) return false;
+ else if (gt(buffer[i], item)) {
+ buffer.insert(i, item);
+ return true;
+ }
+ }
+ buffer.push(item);
+ return true;
+ }
+
+ T replace(T item) {
+ for (int i = 0; i < buffer.length; ++i) {
+ if (equiv(buffer[i], item)) {
+ T toreturn = buffer[i];
+ buffer[i] = item;
+ return toreturn;
+ }
+ else if (gt(buffer[i], item)) {
+ buffer.insert(i, item);
+ return emptyresponse;
+ }
+ }
+ buffer.push(item);
+ return emptyresponse;
+ }
+
+ T get(T item) {
+ for (T possibility : buffer) {
+ if (equiv(possibility, item)) return possibility;
+ }
+ return emptyresponse;
+ }
+
+ bool delete(T item) {
+ for (int i = 0; i < buffer.length; ++i) {
+ if (equiv(buffer[i], item)) {
+ buffer.delete(i);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ void forEach(bool process(T item)) {
+ for (T item : buffer) {
+ if (!process(item)) break;
+ }
+ }
+}
+
+SortedSet_T operator cast(NaiveSortedSet_T naive) {
+ SortedSet_T toreturn;
+ toreturn.size = naive.size;
+ toreturn.contains = naive.contains;
+ toreturn.after = naive.after;
+ toreturn.before = naive.before;
+ toreturn.min = naive.min;
+ toreturn.popMin = naive.popMin;
+ toreturn.max = naive.max;
+ toreturn.popMax = naive.popMax;
+ toreturn.insert = naive.insert;
+ toreturn.replace = naive.replace;
+ toreturn.get = naive.get;
+ toreturn.delete = naive.delete;
+ toreturn.forEach = naive.forEach;
+ return toreturn;
+}
+
+// Compose cast operators, since implicit casting is not transitive.
+T[] operator cast(NaiveSortedSet_T naive) {
+ return (SortedSet_T)naive;
+}
+
+SortedSet_T makeNaiveSortedSet(bool lessThan(T, T), T emptyresponse) {
+ return NaiveSortedSet_T(lessThan, emptyresponse);
+} \ No newline at end of file
diff --git a/graphics/asymptote/tests/template/imports/splaytree.asy b/graphics/asymptote/tests/template/imports/splaytree.asy
new file mode 100644
index 0000000000..d5850482f9
--- /dev/null
+++ b/graphics/asymptote/tests/template/imports/splaytree.asy
@@ -0,0 +1,549 @@
+typedef import(T);
+
+from "template/imports/sortedset"(T=T) access
+ Set_T,
+ SortedSet_T,
+ operator cast;
+
+private struct treenode {
+ treenode leftchild;
+ treenode rightchild;
+ T value;
+ void operator init(T value) {
+ this.value = value;
+ }
+
+ bool inOrder(bool run(T)) {
+ if (leftchild != null) {
+ if (!leftchild.inOrder(run)) return false;
+ }
+ if (!run(value)) return false;
+ if (rightchild != null) {
+ if (!rightchild.inOrder(run)) return false;
+ }
+ return true;
+ }
+}
+
+private struct NodeProgressEnum {
+ restricted static int num = 0;
+ private static int make() {
+ return (++num - 1);
+ }
+ static int NOT_STARTED = make();
+ static int LEFT_DONE = make();
+ static int SELF_DONE = make();
+ static int RIGHT_DONE = make();
+}
+
+private struct NodeInProgress {
+ treenode node;
+ int progress = NodeProgressEnum.NOT_STARTED;
+ void operator init(treenode node) {
+ this.node = node;
+ }
+}
+
+void inOrderNonRecursive(treenode root, bool run(T)) {
+ if (root == null) return;
+ NodeInProgress[] stack = new NodeInProgress[0];
+ stack.cyclic = true;
+ stack.push(NodeInProgress(root));
+ while (stack.length > 0) {
+ NodeInProgress current = stack[-1];
+ if (current.progress == NodeProgressEnum.NOT_STARTED) {
+ if (current.node.leftchild != null) {
+ stack.push(NodeInProgress(current.node.leftchild));
+ }
+ current.progress = NodeProgressEnum.LEFT_DONE;
+ } else if (current.progress == NodeProgressEnum.LEFT_DONE) {
+ if (!run(current.node.value)) return;
+ current.progress = NodeProgressEnum.SELF_DONE;
+ } else if (current.progress == NodeProgressEnum.SELF_DONE) {
+ if (current.node.rightchild != null) {
+ stack.push(NodeInProgress(current.node.rightchild));
+ }
+ current.progress = NodeProgressEnum.RIGHT_DONE;
+ } else {
+ assert(current.progress == NodeProgressEnum.RIGHT_DONE);
+ stack.pop();
+ }
+ }
+}
+
+
+private treenode splay(treenode[] ancestors, bool lessthan(T a, T b)) {
+ bool operator < (T a, T b) = lessthan;
+
+ if (ancestors.length == 0) return null;
+
+ treenode root = ancestors[0];
+ treenode current = ancestors.pop();
+
+ while (ancestors.length >= 2) {
+ treenode parent = ancestors.pop();
+ treenode grandparent = ancestors.pop();
+
+ if (ancestors.length > 0) {
+ treenode greatparent = ancestors[-1];
+ if (greatparent.leftchild == grandparent) {
+ greatparent.leftchild = current;
+ } else greatparent.rightchild = current;
+ }
+
+ bool currentside = (parent.leftchild == current);
+ bool grandside = (grandparent.leftchild == parent);
+
+ if (currentside == grandside) { // zig-zig
+ if (currentside) { // both left
+ treenode B = current.rightchild;
+ treenode C = parent.rightchild;
+
+ current.rightchild = parent;
+ parent.leftchild = B;
+ parent.rightchild = grandparent;
+ grandparent.leftchild = C;
+ } else { // both right
+ treenode B = parent.leftchild;
+ treenode C = current.leftchild;
+
+ current.leftchild = parent;
+ parent.leftchild = grandparent;
+ parent.rightchild = C;
+ grandparent.rightchild = B;
+ }
+ } else { // zig-zag
+ if (grandside) { // left-right
+ treenode B = current.leftchild;
+ treenode C = current.rightchild;
+
+ current.leftchild = parent;
+ current.rightchild = grandparent;
+ parent.rightchild = B;
+ grandparent.leftchild = C;
+ } else { //right-left
+ treenode B = current.leftchild;
+ treenode C = current.rightchild;
+
+ current.leftchild = grandparent;
+ current.rightchild = parent;
+ grandparent.rightchild = B;
+ parent.leftchild = C;
+ }
+ }
+ }
+
+ if (ancestors.length > 0) {
+ ancestors.pop();
+ if (current == root.leftchild) {
+ treenode B = current.rightchild;
+ current.rightchild = root;
+ root.leftchild = B;
+ } else {
+ treenode B = current.leftchild;
+ current.leftchild = root;
+ root.rightchild = B;
+ }
+ }
+
+ return current;
+}
+
+struct SplayTree_T {
+ private treenode root = null;
+ restricted int size = 0;
+ private bool operator < (T a, T b);
+ private T emptyresponse;
+
+ void operator init(bool lessthan(T,T), T emptyresponse) {
+ operator< = lessthan;
+ this.emptyresponse = emptyresponse;
+ }
+
+ int size() {
+ return size;
+ }
+
+ bool empty() {
+ assert((root == null) == (size == 0));
+ return root == null;
+ }
+
+ bool contains(T value) {
+ treenode[] parentStack = new treenode[0];
+ parentStack.cyclic = true;
+ parentStack.push(root);
+ while (true) {
+ treenode current = parentStack[-1];
+ if (current == null) {
+ parentStack.pop();
+ root = splay(parentStack, operator<);
+ return false;
+ }
+ if (value < current.value) {
+ parentStack.push(current.leftchild);
+ } else if (current.value < value) {
+ parentStack.push(current.rightchild);
+ } else break;
+ }
+ root = splay(parentStack, operator<);
+ return true;
+ }
+
+ T after(T item) {
+ treenode[] parentStack = new treenode[0];
+ parentStack.cyclic = true;
+ parentStack.push(root);
+ T strictUpperBound = emptyresponse;
+ bool found = false;
+ while (true) {
+ treenode current = parentStack[-1];
+ if (current == null) {
+ parentStack.pop();
+ root = splay(parentStack, operator<);
+ return strictUpperBound;
+ }
+ if (found || item < current.value) {
+ strictUpperBound = current.value;
+ parentStack.push(current.leftchild);
+ } else {
+ parentStack.push(current.rightchild);
+ if (!(current.value < item))
+ found = true;
+ }
+ }
+ assert(false, "Unreachable code");
+ return emptyresponse;
+ }
+
+ T before(T item) {
+ treenode[] parentStack = new treenode[0];
+ parentStack.cyclic = true;
+ parentStack.push(root);
+ T strictLowerBound = emptyresponse;
+ bool found = false;
+ while (true) {
+ treenode current = parentStack[-1];
+ if (current == null) {
+ parentStack.pop();
+ root = splay(parentStack, operator<);
+ return strictLowerBound;
+ }
+ if (found || current.value < item) {
+ strictLowerBound = current.value;
+ parentStack.push(current.rightchild);
+ } else {
+ parentStack.push(current.leftchild);
+ if (!(item < current.value))
+ found = true;
+ }
+ }
+ assert(false, "Unreachable code");
+ return emptyresponse;
+ }
+
+ T firstGEQ(T item) {
+ treenode[] parentStack = new treenode[0];
+ parentStack.cyclic = true;
+ parentStack.push(root);
+ T upperBound = emptyresponse;
+ while (true) {
+ treenode current = parentStack[-1];
+ if (current == null) {
+ parentStack.pop();
+ root = splay(parentStack, operator<);
+ return upperBound;
+ }
+ if (current.value < item) {
+ parentStack.push(current.rightchild);
+ } else if (item < current.value) {
+ upperBound = current.value;
+ parentStack.push(current.leftchild);
+ } else {
+ root = splay(parentStack, operator<);
+ return current.value;
+ }
+ }
+ assert(false, "Unreachable code");
+ return emptyresponse;
+ }
+
+ T firstLEQ(T item) {
+ treenode[] parentStack = new treenode[0];
+ parentStack.cyclic = true;
+ parentStack.push(root);
+ T lowerBound = emptyresponse;
+ while (true) {
+ treenode current = parentStack[-1];
+ if (current == null) {
+ parentStack.pop();
+ root = splay(parentStack, operator<);
+ return lowerBound;
+ }
+ if (item < current.value) {
+ parentStack.push(current.leftchild);
+ } else if (current.value < item) {
+ lowerBound = current.value;
+ parentStack.push(current.rightchild);
+ } else {
+ root = splay(parentStack, operator<);
+ return current.value;
+ }
+ }
+ assert(false, "Unreachable code");
+ return emptyresponse;
+ }
+
+ T min() {
+ if (root == null) return emptyresponse;
+ treenode[] ancestors = new treenode[0];
+ ancestors.cyclic = true;
+ treenode current = root;
+ while (current != null) {
+ ancestors.push(current);
+ current = current.leftchild;
+ }
+ root = splay(ancestors, operator<);
+ return root.value;
+ }
+
+ T popMin() {
+ if (root == null) return emptyresponse;
+ treenode[] ancestors = new treenode[0];
+ ancestors.cyclic = true;
+ treenode current = root;
+ while (current != null) {
+ ancestors.push(current);
+ current = current.leftchild;
+ }
+ root = splay(ancestors, operator<);
+ T toReturn = root.value;
+ root = root.rightchild;
+ --size;
+ return toReturn;
+ }
+
+ T max() {
+ if (root == null) return emptyresponse;
+ treenode[] ancestors = new treenode[0];
+ ancestors.cyclic = true;
+ treenode current = root;
+ while (current != null) {
+ ancestors.push(current);
+ current = current.rightchild;
+ }
+ root = splay(ancestors, operator<);
+ return root.value;
+ }
+
+ T popMax() {
+ if (root == null) return emptyresponse;
+ treenode[] ancestors = new treenode[0];
+ ancestors.cyclic = true;
+ treenode current = root;
+ while (current != null) {
+ ancestors.push(current);
+ current = current.rightchild;
+ }
+ root = splay(ancestors, operator<);
+ T toReturn = root.value;
+ root = root.leftchild;
+ --size;
+ return toReturn;
+ }
+
+ /*
+ * returns true iff the tree was modified
+ */
+ bool insert(T value) {
+ if (root == null) {
+ root = treenode(value);
+ ++size;
+ return true;
+ }
+ treenode[] ancestors = new treenode[0];
+ ancestors.cyclic = true;
+ ancestors.push(root);
+
+ bool toReturn = false;
+
+ while (!toReturn) {
+ treenode current = ancestors[-1];
+ if (value < current.value) {
+ if (current.leftchild == null) {
+ current.leftchild = treenode(value);
+ toReturn = true;
+ }
+ ancestors.push(current.leftchild);
+ } else if (current.value < value) {
+ if (current.rightchild == null) {
+ current.rightchild = treenode(value);
+ toReturn = true;
+ }
+ ancestors.push(current.rightchild);
+ } else {
+ root = splay(ancestors, operator<);
+ return false;
+ }
+ }
+
+ root = splay(ancestors, operator<);
+ ++size;
+ return true;
+ }
+
+ T replace(T item) {
+ if (root == null) {
+ insert(item);
+ return emptyresponse;
+ }
+ treenode[] ancestors = new treenode[0];
+ ancestors.cyclic = true;
+ ancestors.push(root);
+ treenode current = root;
+ while (true) {
+ if (item < current.value) {
+ if (current.leftchild == null) {
+ current.leftchild = treenode(item);
+ ancestors.push(current.leftchild);
+ break;
+ }
+ ancestors.push(current.leftchild);
+ current = current.leftchild;
+ } else if (current.value < item) {
+ if (current.rightchild == null) {
+ current.rightchild = treenode(item);
+ ancestors.push(current.rightchild);
+ break;
+ }
+ ancestors.push(current.rightchild);
+ current = current.rightchild;
+ } else {
+ T toReturn = current.value;
+ current.value = item;
+ root = splay(ancestors, operator<);
+ return toReturn;
+ }
+ }
+ root = splay(ancestors, operator<);
+ ++size;
+ return emptyresponse;
+ }
+
+ T get(T item) {
+ if (root == null) return emptyresponse;
+ treenode[] parentStack = new treenode[0];
+ parentStack.cyclic = true;
+ parentStack.push(root);
+ while (true) {
+ treenode current = parentStack[-1];
+ if (current == null) {
+ parentStack.pop();
+ root = splay(parentStack, operator<);
+ return emptyresponse;
+ }
+ if (item < current.value) {
+ parentStack.push(current.leftchild);
+ } else if (current.value < item) {
+ parentStack.push(current.rightchild);
+ } else {
+ root = splay(parentStack, operator<);
+ return current.value;
+ }
+ }
+ assert(false, "Unreachable code");
+ return emptyresponse;
+ }
+
+ /*
+ * returns true iff the tree was modified
+ */
+ bool delete(T value) {
+ treenode[] ancestors = new treenode[0];
+ ancestors.cyclic = true; // Makes ancestors[-1] refer to the last entry.
+ ancestors.push(root);
+
+ while (true) {
+ treenode current = ancestors[-1];
+ if (current == null) {
+ ancestors.pop();
+ root = splay(ancestors, operator<);
+ return false;
+ }
+ if (value < current.value)
+ ancestors.push(current.leftchild);
+ else if (current.value < value)
+ ancestors.push(current.rightchild);
+ else break;
+ }
+
+ treenode toDelete = ancestors.pop();
+ treenode parent = null;
+ if (ancestors.length > 0) parent = ancestors[-1];
+
+ if (toDelete.leftchild == null) {
+ if (parent != null) {
+ if (parent.rightchild == toDelete) {
+ parent.rightchild = toDelete.rightchild;
+ } else {
+ parent.leftchild = toDelete.rightchild;
+ }
+ } else root = toDelete.rightchild;
+ } else if (toDelete.rightchild == null) {
+ if (parent == null) {
+ root = toDelete.leftchild;
+ } else if (parent.rightchild == toDelete) {
+ parent.rightchild = toDelete.leftchild;
+ } else parent.leftchild = toDelete.leftchild;
+ } else {
+ treenode[] innerStack = new treenode[0];
+ innerStack.cyclic = true;
+ treenode current = toDelete.rightchild;
+ while (current != null) {
+ innerStack.push(current);
+ current = current.leftchild;
+ }
+ toDelete.rightchild = splay(innerStack, operator<);
+ toDelete.value = toDelete.rightchild.value;
+ toDelete.rightchild = toDelete.rightchild.rightchild;
+ }
+
+ if (parent != null) root = splay(ancestors, operator<);
+ --size;
+ return true;
+ }
+
+ void forEach(bool run(T)) {
+ inOrderNonRecursive(root, run);
+ }
+
+}
+
+SortedSet_T operator cast(SplayTree_T splaytree) {
+ SortedSet_T result = new SortedSet_T;
+ result.size = splaytree.size;
+ result.empty = splaytree.empty;
+ result.contains = splaytree.contains;
+ result.after = splaytree.after;
+ result.before = splaytree.before;
+ result.firstGEQ = splaytree.firstGEQ;
+ result.firstLEQ = splaytree.firstLEQ;
+ result.min = splaytree.min;
+ result.popMin = splaytree.popMin;
+ result.max = splaytree.max;
+ result.popMax = splaytree.popMax;
+ result.insert = splaytree.insert;
+ result.replace = splaytree.replace;
+ result.get = splaytree.get;
+ result.delete = splaytree.delete;
+ result.forEach = splaytree.forEach;
+ return result;
+}
+
+Set_T operator cast(SplayTree_T splaytree) {
+ return (SortedSet_T)splaytree;
+}
+
+T[] operator cast(SplayTree_T splaytree) {
+ return (SortedSet_T)splaytree;
+} \ No newline at end of file
diff --git a/graphics/asymptote/tests/template/imports/structTemplate.asy b/graphics/asymptote/tests/template/imports/structTemplate.asy
new file mode 100644
index 0000000000..5894d2e280
--- /dev/null
+++ b/graphics/asymptote/tests/template/imports/structTemplate.asy
@@ -0,0 +1,36 @@
+// Assumption: T is a struct with a static int `global` and a non-static int
+// `local`. Lib is a struct with a static string `testName`.
+typedef import(T, Lib);
+import TestLib;
+
+StartTest('Accessing static testName');
+Lib.testName;
+EndTest();
+
+StartTest(Lib.testName + ': new');
+new T;
+EndTest();
+
+StartTest(Lib.testName + ': Unspecified Declaration');
+T a;
+EndTest();
+
+StartTest(Lib.testName + ': Initializing to null');
+T b = null;
+EndTest();
+
+StartTest(Lib.testName + ': Initializing to new');
+T c = new T;
+EndTest();
+
+StartTest(Lib.testName + ': Access static member');
+int d = T.global;
+EndTest();
+
+StartTest(Lib.testName + ': Access non-static member');
+int e = c.local;
+EndTest();
+
+StartTest(Lib.testName + ': Access static member from instance');
+int f = c.global;
+EndTest();
diff --git a/graphics/asymptote/tests/template/imports/zip.asy b/graphics/asymptote/tests/template/imports/zip.asy
new file mode 100644
index 0000000000..4d02f98b6a
--- /dev/null
+++ b/graphics/asymptote/tests/template/imports/zip.asy
@@ -0,0 +1,5 @@
+typedef import(T);
+
+T[][] zip(...T[][] arrays) {
+ return transpose(arrays);
+} \ No newline at end of file
diff --git a/graphics/asymptote/tests/template/initTest.asy b/graphics/asymptote/tests/template/initTest.asy
new file mode 100644
index 0000000000..7def279138
--- /dev/null
+++ b/graphics/asymptote/tests/template/initTest.asy
@@ -0,0 +1,23 @@
+access "template/imports/A"(T=int) as a;
+unravel a;
+access "template/imports/B"(T=A) as b;
+unravel b;
+
+import TestLib;
+
+StartTest("init");
+A c;
+EndTest();
+
+StartTest("new");
+struct X {
+ struct A {
+ int x=1;
+ }
+}
+
+X x;
+
+access "template/imports/C"(T=x.A) as p;
+
+EndTest();
diff --git a/graphics/asymptote/tests/template/multiImport.asy b/graphics/asymptote/tests/template/multiImport.asy
new file mode 100644
index 0000000000..94d5c30feb
--- /dev/null
+++ b/graphics/asymptote/tests/template/multiImport.asy
@@ -0,0 +1,25 @@
+import TestLib;
+
+StartTest('multiple_imports');
+struct A {int x=1;}
+access "template/imports/C"(T=A) as p;
+assert(p.global == 17);
+p.global = 42;
+access "template/imports/C"(T=A) as q;
+assert(q.global == 42);
+EndTest();
+
+StartTest('import_in_function');
+struct B {int x=1;}
+void f(int expected, int newValue) {
+ // Importing inside a function is not recommended practice, but it should
+ // work.
+ access "template/imports/C"(T=B) as p;
+ assert(p.global == expected);
+ p.global = newValue;
+}
+f(17, 23);
+f(23, 27);
+access "template/imports/C"(T=B) as p;
+assert(p.global == 27);
+EndTest();
diff --git a/graphics/asymptote/tests/template/sortedsetTest.asy b/graphics/asymptote/tests/template/sortedsetTest.asy
new file mode 100644
index 0000000000..66dbb88ec1
--- /dev/null
+++ b/graphics/asymptote/tests/template/sortedsetTest.asy
@@ -0,0 +1,254 @@
+import TestLib;
+
+StartTest("NaiveSortedSet");
+
+from "template/imports/wrapper"(T=int) access
+ Wrapper_T as wrapped_int,
+ wrap,
+ alias;
+
+bool operator < (wrapped_int a, wrapped_int b) {
+ return a.t < b.t;
+}
+
+bool operator == (wrapped_int a, wrapped_int b) {
+ return a.t == b.t;
+}
+
+from "template/imports/pureset"(T=wrapped_int) access
+ Set_T as Set_wrapped_int,
+ makeNaiveSet;
+
+from "template/imports/sortedset"(T=wrapped_int) access
+ SortedSet_T as SortedSet_wrapped_int,
+ makeNaiveSortedSet,
+ operator cast,
+ unSort;
+
+struct ActionEnum {
+ static restricted int numActions = 0;
+ static private int next() {
+ return ++numActions - 1;
+ }
+ static restricted int INSERT = next();
+ static restricted int REPLACE = next();
+ static restricted int DELETE = next();
+ static restricted int CONTAINS = next();
+ static restricted int DELETE_CONTAINS = next();
+}
+
+from "template/imports/zip"(T=int) access zip;
+from mapArray(Src=wrapped_int, Dst=int) access map;
+int get(wrapped_int a) {
+ return a.t;
+}
+
+int[] operator cast(wrapped_int[] a) {
+ for (wrapped_int x : a) {
+ assert(!alias(x, null), 'Null element in array');
+ }
+ return map(get, a);
+}
+
+string differences(Set_wrapped_int a, Set_wrapped_int b) {
+ if (a.size() != b.size()) {
+ return 'Different sizes: ' + string(a.size()) + ' vs ' + string(b.size());
+ }
+ wrapped_int[] aArray = sort(a, operator<);
+ int[] aIntArray = map(get, aArray);
+ wrapped_int[] bArray = sort(b, operator<);
+ int[] bIntArray = map(get, bArray);
+ string arrayValues = '[\n';
+ bool different = false;
+ for (int i = 0; i < aIntArray.length; ++i) {
+ arrayValues += ' [' + format('%5d', aIntArray[i]) + ','
+ + format('%5d', bIntArray[i]) + ']';
+ if (!alias(aArray[i], bArray[i])) {
+ arrayValues += ' <---';
+ different = true;
+ }
+ arrayValues += '\n';
+ }
+ arrayValues += ']';
+ // write(arrayValues + '\n');
+ if (different) {
+ return arrayValues;
+ }
+ return '';
+}
+
+string string(int[] a) {
+ string result = '[';
+ for (int i = 0; i < a.length; ++i) {
+ if (i > 0) {
+ result += ', ';
+ }
+ result += string(a[i]);
+ }
+ result += ']';
+ return result;
+}
+
+string string(bool[] a) {
+ string result = '[';
+ for (int i = 0; i < a.length; ++i) {
+ if (i > 0) {
+ result += ', ';
+ }
+ result += a[i] ? 'true' : 'false';
+ }
+ result += ']';
+ return result;
+}
+
+typedef void Action(int ...Set_wrapped_int[]);
+
+Action[] actions = new Action[ActionEnum.numActions];
+actions[ActionEnum.INSERT] = new void(int maxItem ...Set_wrapped_int[] sets) {
+ wrapped_int toInsert = wrap(rand() % maxItem);
+ // write('Inserting ' + string(toInsert.t) + '\n');
+ for (Set_wrapped_int s : sets) {
+ s.insert(toInsert);
+ }
+};
+actions[ActionEnum.REPLACE] = new void(int maxItem ...Set_wrapped_int[] sets) {
+ wrapped_int toReplace = wrap(rand() % maxItem);
+ // write('Replacing ' + string(toReplace.t) + '\n');
+ wrapped_int[] results = new wrapped_int[];
+ for (Set_wrapped_int s : sets) {
+ results.push(s.replace(toReplace));
+ }
+ if (results.length > 0) {
+ wrapped_int expected = results[0];
+ for (wrapped_int r : results) {
+ if (!alias(r, expected)) {
+ assert(false, 'Different results: ' + string(results));
+ }
+ }
+ }
+};
+actions[ActionEnum.DELETE] = new void(int maxItem ...Set_wrapped_int[] sets) {
+ wrapped_int toDelete = wrap(rand() % maxItem);
+ // write('Deleting ' + string(toDelete.t) + '\n');
+ bool[] results = new bool[];
+ for (Set_wrapped_int s : sets) {
+ results.push(s.delete(toDelete));
+ }
+ if (results.length > 0) {
+ bool expected = results[0];
+ for (bool r : results) {
+ assert(r == expected, 'Different results: ' + string(results));
+ }
+ }
+};
+actions[ActionEnum.CONTAINS] = new void(int maxItem ...Set_wrapped_int[] sets)
+{
+ int toCheck = rand() % maxItem;
+ // write('Checking ' + string(toCheck) + '\n');
+ bool[] results = new bool[];
+ for (Set_wrapped_int s : sets) {
+ results.push(s.contains(wrap(toCheck)));
+ }
+ if (results.length > 0) {
+ bool expected = results[0];
+ for (bool r : results) {
+ assert(r == expected, 'Different results: ' + string(results));
+ }
+ }
+};
+actions[ActionEnum.DELETE_CONTAINS] = new void(int ...Set_wrapped_int[] sets) {
+ if (sets.length == 0) {
+ return;
+ }
+ int initialSize = sets[0].size();
+ if (initialSize == 0) {
+ return;
+ }
+ int indexToDelete = rand() % initialSize;
+ int i = 0;
+ wrapped_int toDelete = null;
+ bool process(wrapped_int a) {
+ if (i == indexToDelete) {
+ toDelete = wrap(a.t);
+ return false;
+ }
+ ++i;
+ return true;
+ }
+ sets[0].forEach(process);
+ assert(i < initialSize, 'Index out of range');
+ // write('Deleting ' + string(toDelete.t) + '\n');
+ int i = 0;
+ for (Set_wrapped_int s : sets) {
+ assert(s.contains(toDelete), 'Contains failed ' + string(i));
+ assert(s.delete(toDelete), 'Delete failed');
+ assert(!s.contains(toDelete), 'Contains failed');
+ assert(s.size() == initialSize - 1, 'Size failed');
+ ++i;
+ }
+};
+real[] increasingProbs = new real[ActionEnum.numActions];
+increasingProbs[ActionEnum.INSERT] = 0.7;
+increasingProbs[ActionEnum.REPLACE] = 0.1;
+increasingProbs[ActionEnum.DELETE] = 0.05;
+increasingProbs[ActionEnum.CONTAINS] = 0.1;
+increasingProbs[ActionEnum.DELETE_CONTAINS] = 0.05;
+assert(sum(increasingProbs) == 1, 'Probabilities do not sum to 1');
+
+real[] decreasingProbs = new real[ActionEnum.numActions];
+decreasingProbs[ActionEnum.INSERT] = 0.1;
+decreasingProbs[ActionEnum.REPLACE] = 0.1;
+decreasingProbs[ActionEnum.DELETE] = 0.4;
+decreasingProbs[ActionEnum.CONTAINS] = 0.1;
+decreasingProbs[ActionEnum.DELETE_CONTAINS] = 0.3;
+assert(sum(decreasingProbs) == 1, 'Probabilities do not sum to 1');
+
+Set_wrapped_int pure_set = makeNaiveSet(operator ==, (wrapped_int)null);
+SortedSet_wrapped_int sorted_set =
+ makeNaiveSortedSet(operator <, (wrapped_int)null);
+
+int chooseAction(real[] probs) {
+ real r = unitrand();
+ real sum = 0;
+ for (int i = 0; i < probs.length; ++i) {
+ sum += probs[i];
+ if (r < sum) {
+ return i;
+ }
+ }
+ return probs.length - 1;
+}
+
+bool isStrictlySorted(wrapped_int[] arr) {
+ for (int i = 1; i < arr.length; ++i) {
+ if (!(arr[i - 1] < arr[i])) {
+ return false;
+ }
+ }
+ return true;
+}
+
+int maxSize = 0;
+for (int i = 0; i < 2000; ++i) {
+ real[] probs = i < 800 ? increasingProbs : decreasingProbs;
+ int choice = chooseAction(probs);
+ actions[choice](100, pure_set, sorted_set);
+ string diffs = differences(pure_set, sorted_set);
+ assert(diffs == '', 'Pure vs sorted: \n' + diffs);
+ assert(isStrictlySorted(sorted_set), 'Not sorted');
+ maxSize = max(maxSize, pure_set.size());
+}
+// write('Max size: ' + string(maxSize) + '\n');
+
+// int maxSize = 0;
+// for (int i = 0; i < 2000; ++i) {
+// real[] probs = i < 800 ? increasingProbs : decreasingProbs;
+// int choice = chooseAction(probs);
+// actions[choice](1000, pure_set, unSort(sorted_set));
+// string diffs = differences(pure_set, sorted_set);
+// assert(diffs == '', 'Pure vs sorted: \n' + diffs);
+// maxSize = max(maxSize, pure_set.size());
+// }
+// write('Max size: ' + string(maxSize) + '\n');
+
+EndTest(); \ No newline at end of file
diff --git a/graphics/asymptote/tests/template/splaytreeTest.asy b/graphics/asymptote/tests/template/splaytreeTest.asy
new file mode 100644
index 0000000000..3ad5811f26
--- /dev/null
+++ b/graphics/asymptote/tests/template/splaytreeTest.asy
@@ -0,0 +1,553 @@
+
+import TestLib;
+
+StartTest("SplayTree_as_Set");
+
+from "template/imports/wrapper"(T=int) access
+ Wrapper_T as wrapped_int,
+ wrap,
+ alias;
+
+bool operator < (wrapped_int a, wrapped_int b) {
+ return a.t < b.t;
+}
+
+bool operator == (wrapped_int a, wrapped_int b) {
+ return a.t == b.t;
+}
+
+from "template/imports/sortedset"(T=wrapped_int) access
+ makeNaiveSortedSet,
+ SortedSet_T as SortedSet_wrapped_int;
+
+from "template/imports/splaytree"(T=wrapped_int) access
+ SplayTree_T as SplayTree_wrapped_int,
+ operator cast;
+
+struct ActionEnum {
+ static restricted int numActions = 0;
+ static private int next() {
+ return ++numActions - 1;
+ }
+ static restricted int INSERT = next();
+ static restricted int REPLACE = next();
+ static restricted int DELETE = next();
+ static restricted int CONTAINS = next();
+ static restricted int DELETE_CONTAINS = next();
+}
+
+from mapArray(Src=wrapped_int, Dst=int) access map;
+int get(wrapped_int a) {
+ return a.t;
+}
+
+int[] operator cast(wrapped_int[] a) {
+ for (wrapped_int x : a) {
+ assert(!alias(x, null), 'Null element in array');
+ }
+ return map(get, a);
+}
+
+string differences(SortedSet_wrapped_int a, SortedSet_wrapped_int b) {
+ if (a.size() != b.size()) {
+ return 'Different sizes: ' + string(a.size()) + ' vs ' + string(b.size());
+ }
+ wrapped_int[] aArray = a;
+ int[] aIntArray = aArray;
+ wrapped_int[] bArray = b;
+ int[] bIntArray = bArray;
+ string arrayValues = '[\n';
+ bool different = false;
+ for (int i = 0; i < aIntArray.length; ++i) {
+ arrayValues += ' [' + format('%5d', aIntArray[i]) + ','
+ + format('%5d', bIntArray[i]) + ']';
+ if (!alias(aArray[i], bArray[i])) {
+ arrayValues += ' <---';
+ different = true;
+ }
+ arrayValues += '\n';
+ }
+ arrayValues += ']';
+ // write(arrayValues + '\n');
+ if (different) {
+ return arrayValues;
+ }
+ return '';
+}
+
+string string(int[] a) {
+ string result = '[';
+ for (int i = 0; i < a.length; ++i) {
+ if (i > 0) {
+ result += ', ';
+ }
+ result += string(a[i]);
+ }
+ result += ']';
+ return result;
+}
+
+string string(bool[] a) {
+ string result = '[';
+ for (int i = 0; i < a.length; ++i) {
+ if (i > 0) {
+ result += ', ';
+ }
+ result += a[i] ? 'true' : 'false';
+ }
+ result += ']';
+ return result;
+}
+
+typedef void Action(int ...SortedSet_wrapped_int[]);
+
+Action[] actions = new Action[ActionEnum.numActions];
+actions[ActionEnum.INSERT] =
+ new void(int maxItem ...SortedSet_wrapped_int[] sets) {
+ wrapped_int toInsert = wrap(rand() % maxItem);
+ // write('Inserting ' + string(toInsert.t) + '\n');
+ for (SortedSet_wrapped_int s : sets) {
+ s.insert(toInsert);
+ }
+ };
+actions[ActionEnum.REPLACE] =
+ new void(int maxItem ...SortedSet_wrapped_int[] sets) {
+ wrapped_int toReplace = wrap(rand() % maxItem);
+ // write('Replacing ' + string(toReplace.t) + '\n');
+ wrapped_int[] results = new wrapped_int[];
+ for (SortedSet_wrapped_int s : sets) {
+ results.push(s.replace(toReplace));
+ }
+ if (results.length > 0) {
+ wrapped_int expected = results[0];
+ for (wrapped_int r : results) {
+ if (!alias(r, expected)) {
+ assert(false, 'Different results: ' + string(results));
+ }
+ }
+ }
+ };
+actions[ActionEnum.DELETE] =
+ new void(int maxItem ...SortedSet_wrapped_int[] sets) {
+ wrapped_int toDelete = wrap(rand() % maxItem);
+ // write('Deleting ' + string(toDelete.t) + '\n');
+ bool[] results = new bool[];
+ for (SortedSet_wrapped_int s : sets) {
+ results.push(s.delete(toDelete));
+ }
+ if (results.length > 0) {
+ bool expected = results[0];
+ for (bool r : results) {
+ assert(r == expected, 'Different results: ' + string(results));
+ }
+ }
+ };
+actions[ActionEnum.CONTAINS] =
+ new void(int maxItem ...SortedSet_wrapped_int[] sets) {
+ int toCheck = rand() % maxItem;
+ // write('Checking ' + string(toCheck) + '\n');
+ bool[] results = new bool[];
+ for (SortedSet_wrapped_int s : sets) {
+ results.push(s.contains(wrap(toCheck)));
+ }
+ if (results.length > 0) {
+ bool expected = results[0];
+ for (bool r : results) {
+ assert(r == expected, 'Different results: ' + string(results));
+ }
+ }
+ };
+actions[ActionEnum.DELETE_CONTAINS] =
+ new void(int ...SortedSet_wrapped_int[] sets) {
+ if (sets.length == 0) {
+ return;
+ }
+ int initialSize = sets[0].size();
+ if (initialSize == 0) {
+ return;
+ }
+ int indexToDelete = rand() % initialSize;
+ int i = 0;
+ wrapped_int toDelete = null;
+ bool process(wrapped_int a) {
+ if (i == indexToDelete) {
+ toDelete = wrap(a.t);
+ return false;
+ }
+ ++i;
+ return true;
+ }
+ sets[0].forEach(process);
+ assert(i < initialSize, 'Index out of range');
+ // write('Deleting ' + string(toDelete.t) + '\n');
+ int i = 0;
+ for (SortedSet_wrapped_int s : sets) {
+ assert(s.contains(toDelete), 'Contains failed ' + string(i));
+ assert(s.delete(toDelete), 'Delete failed');
+ assert(!s.contains(toDelete), 'Contains failed');
+ assert(s.size() == initialSize - 1, 'Size failed');
+ ++i;
+ }
+ };
+real[] increasingProbs = new real[ActionEnum.numActions];
+increasingProbs[ActionEnum.INSERT] = 0.7;
+increasingProbs[ActionEnum.REPLACE] = 0.1;
+increasingProbs[ActionEnum.DELETE] = 0.05;
+increasingProbs[ActionEnum.CONTAINS] = 0.1;
+increasingProbs[ActionEnum.DELETE_CONTAINS] = 0.05;
+assert(sum(increasingProbs) == 1, 'Probabilities do not sum to 1');
+
+real[] decreasingProbs = new real[ActionEnum.numActions];
+decreasingProbs[ActionEnum.INSERT] = 0.1;
+decreasingProbs[ActionEnum.REPLACE] = 0.1;
+decreasingProbs[ActionEnum.DELETE] = 0.4;
+decreasingProbs[ActionEnum.CONTAINS] = 0.1;
+decreasingProbs[ActionEnum.DELETE_CONTAINS] = 0.3;
+assert(sum(decreasingProbs) == 1, 'Probabilities do not sum to 1');
+
+SortedSet_wrapped_int sorted_set =
+ makeNaiveSortedSet(operator <, (wrapped_int)null);
+SplayTree_wrapped_int splayset =
+ SplayTree_wrapped_int(operator <, (wrapped_int)null);
+
+int chooseAction(real[] probs) {
+ real r = unitrand();
+ real sum = 0;
+ for (int i = 0; i < probs.length; ++i) {
+ sum += probs[i];
+ if (r < sum) {
+ return i;
+ }
+ }
+ return probs.length - 1;
+}
+
+bool isStrictlySorted(wrapped_int[] arr) {
+ for (int i = 1; i < arr.length; ++i) {
+ if (!(arr[i - 1] < arr[i])) {
+ return false;
+ }
+ }
+ return true;
+}
+
+int maxSize = 0;
+for (int i = 0; i < 2000; ++i) {
+ real[] probs = i < 800 ? increasingProbs : decreasingProbs;
+ int choice = chooseAction(probs);
+ actions[choice](100, sorted_set, splayset);
+ string diffs = differences(sorted_set, splayset);
+ assert(diffs == '', 'Naive vs splayset: \n' + diffs);
+ assert(isStrictlySorted(splayset), 'Not sorted');
+ maxSize = max(maxSize, splayset.size());
+}
+EndTest();
+
+StartTest("SplayTree_as_SortedSet");
+
+struct ActionEnum {
+ static restricted int numActions = 0;
+ static private int next() {
+ return ++numActions - 1;
+ }
+ static restricted int CONTAINS = next();
+ static restricted int AFTER = next();
+ static restricted int BEFORE = next();
+ static restricted int FIRST_GEQ = next();
+ static restricted int FIRST_LEQ = next();
+ static restricted int MIN = next();
+ static restricted int POP_MIN = next();
+ static restricted int MAX = next();
+ static restricted int POP_MAX = next();
+ static restricted int INSERT = next();
+ static restricted int REPLACE = next();
+ static restricted int GET = next();
+ static restricted int DELETE = next();
+ static restricted int DELETE_CONTAINS = next();
+}
+
+Action[] actions = new Action[ActionEnum.numActions];
+actions[ActionEnum.CONTAINS] =
+ new void(int maxItem ...SortedSet_wrapped_int[] sets) {
+ int toCheck = rand() % maxItem;
+ // write('Checking ' + string(toCheck) + '\n');
+ bool[] results = new bool[];
+ for (SortedSet_wrapped_int s : sets) {
+ results.push(s.contains(wrap(toCheck)));
+ }
+ if (results.length > 0) {
+ bool expected = results[0];
+ for (bool r : results) {
+ assert(r == expected, 'Different results: ' + string(results));
+ }
+ }
+ };
+actions[ActionEnum.AFTER] =
+ new void(int maxItem ...SortedSet_wrapped_int[] sets) {
+ int toCheck = rand() % maxItem;
+ // write('After ' + string(toCheck) + '\n');
+ wrapped_int[] results = new wrapped_int[];
+ for (SortedSet_wrapped_int s : sets) {
+ results.push(s.after(wrap(toCheck)));
+ }
+ if (results.length > 0) {
+ wrapped_int expected = results[0];
+ for (wrapped_int r : results) {
+ if (!alias(r, expected)) {
+ assert(false, 'Different results: ' + string(results));
+ }
+ }
+ }
+ };
+actions[ActionEnum.BEFORE] =
+ new void(int maxItem ...SortedSet_wrapped_int[] sets) {
+ int toCheck = rand() % maxItem;
+ // write('Before ' + string(toCheck) + '\n');
+ wrapped_int[] results = new wrapped_int[];
+ for (SortedSet_wrapped_int s : sets) {
+ results.push(s.before(wrap(toCheck)));
+ }
+ if (results.length > 0) {
+ wrapped_int expected = results[0];
+ for (wrapped_int r : results) {
+ if (!alias(r, expected)) {
+ assert(false, 'Different results: ' + string(results));
+ }
+ }
+ }
+ };
+actions[ActionEnum.FIRST_GEQ] =
+ new void(int maxItem ...SortedSet_wrapped_int[] sets) {
+ int toCheck = rand() % maxItem;
+ // write('First greater or equal ' + string(toCheck) + '\n');
+ wrapped_int[] results = new wrapped_int[];
+ for (SortedSet_wrapped_int s : sets) {
+ results.push(s.firstGEQ(wrap(toCheck)));
+ }
+ if (results.length > 0) {
+ wrapped_int expected = results[0];
+ for (wrapped_int r : results) {
+ if (!alias(r, expected)) {
+ assert(false, 'Different results: ' + string(results));
+ }
+ }
+ }
+ };
+actions[ActionEnum.FIRST_LEQ] =
+ new void(int maxItem ...SortedSet_wrapped_int[] sets) {
+ int toCheck = rand() % maxItem;
+ // write('First less or equal ' + string(toCheck) + '\n');
+ wrapped_int[] results = new wrapped_int[];
+ for (SortedSet_wrapped_int s : sets) {
+ results.push(s.firstLEQ(wrap(toCheck)));
+ }
+ if (results.length > 0) {
+ wrapped_int expected = results[0];
+ for (wrapped_int r : results) {
+ if (!alias(r, expected)) {
+ assert(false, 'Different results: ' + string(results));
+ }
+ }
+ }
+ };
+actions[ActionEnum.MIN] = new void(int ...SortedSet_wrapped_int[] sets) {
+ // write('Min\n');
+ wrapped_int[] results = new wrapped_int[];
+ for (SortedSet_wrapped_int s : sets) {
+ results.push(s.min());
+ }
+ if (results.length > 0) {
+ wrapped_int expected = results[0];
+ for (wrapped_int r : results) {
+ if (!alias(r, expected)) {
+ assert(false, 'Different results: ' + string(results));
+ }
+ }
+ }
+};
+actions[ActionEnum.POP_MIN] = new void(int ...SortedSet_wrapped_int[] sets) {
+ // write('Pop min\n');
+ wrapped_int[] results = new wrapped_int[];
+ for (SortedSet_wrapped_int s : sets) {
+ results.push(s.popMin());
+ }
+ if (results.length > 0) {
+ wrapped_int expected = results[0];
+ for (wrapped_int r : results) {
+ if (!alias(r, expected)) {
+ assert(false, 'Different results: ' + string(results));
+ }
+ }
+ }
+};
+actions[ActionEnum.MAX] = new void(int ...SortedSet_wrapped_int[] sets) {
+ // write('Max\n');
+ wrapped_int[] results = new wrapped_int[];
+ for (SortedSet_wrapped_int s : sets) {
+ results.push(s.max());
+ }
+ if (results.length > 0) {
+ wrapped_int expected = results[0];
+ for (wrapped_int r : results) {
+ if (!alias(r, expected)) {
+ assert(false, 'Different results: ' + string(results));
+ }
+ }
+ }
+};
+actions[ActionEnum.POP_MAX] = new void(int ...SortedSet_wrapped_int[] sets) {
+ // write('Pop max\n');
+ wrapped_int[] results = new wrapped_int[];
+ for (SortedSet_wrapped_int s : sets) {
+ results.push(s.popMax());
+ }
+ if (results.length > 0) {
+ wrapped_int expected = results[0];
+ for (wrapped_int r : results) {
+ if (!alias(r, expected)) {
+ assert(false, 'Different results: ' + string(results));
+ }
+ }
+ }
+};
+actions[ActionEnum.INSERT] =
+ new void(int maxItem ...SortedSet_wrapped_int[] sets) {
+ wrapped_int toInsert = wrap(rand() % maxItem);
+ // write('Inserting ' + string(toInsert.t) + '\n');
+ for (SortedSet_wrapped_int s : sets) {
+ s.insert(toInsert);
+ }
+ };
+actions[ActionEnum.REPLACE] =
+ new void(int maxItem ...SortedSet_wrapped_int[] sets) {
+ wrapped_int toReplace = wrap(rand() % maxItem);
+ // write('Replacing ' + string(toReplace.t) + '\n');
+ wrapped_int[] results = new wrapped_int[];
+ for (SortedSet_wrapped_int s : sets) {
+ results.push(s.replace(toReplace));
+ }
+ if (results.length > 0) {
+ wrapped_int expected = results[0];
+ for (wrapped_int r : results) {
+ if (!alias(r, expected)) {
+ assert(false, 'Different results: ' + string(results));
+ }
+ }
+ }
+ };
+actions[ActionEnum.GET] = new void(int maxItem ...SortedSet_wrapped_int[] sets)
+{
+ wrapped_int toGet = wrap(rand() % maxItem);
+ // write('Getting ' + string(toGet) + '\n');
+ wrapped_int[] results = new wrapped_int[];
+ for (SortedSet_wrapped_int s : sets) {
+ results.push(s.get(toGet));
+ }
+ if (results.length > 0) {
+ wrapped_int expected = results[0];
+ for (wrapped_int r : results) {
+ if (!alias(r, expected)) {
+ assert(false, 'Different results: ' + string(results));
+ }
+ }
+ }
+};
+actions[ActionEnum.DELETE] =
+ new void(int maxItem ...SortedSet_wrapped_int[] sets) {
+ wrapped_int toDelete = wrap(rand() % maxItem);
+ // write('Deleting ' + string(toDelete.t) + '\n');
+ bool[] results = new bool[];
+ for (SortedSet_wrapped_int s : sets) {
+ results.push(s.delete(toDelete));
+ }
+ if (results.length > 0) {
+ bool expected = results[0];
+ for (bool r : results) {
+ assert(r == expected, 'Different results: ' + string(results));
+ }
+ }
+ };
+actions[ActionEnum.DELETE_CONTAINS] =
+ new void(int ...SortedSet_wrapped_int[] sets) {
+ if (sets.length == 0) {
+ return;
+ }
+ int initialSize = sets[0].size();
+ if (initialSize == 0) {
+ return;
+ }
+ int indexToDelete = rand() % initialSize;
+ int i = 0;
+ wrapped_int toDelete = null;
+ bool process(wrapped_int a) {
+ if (i == indexToDelete) {
+ toDelete = wrap(a.t);
+ return false;
+ }
+ ++i;
+ return true;
+ }
+ sets[0].forEach(process);
+ assert(i < initialSize, 'Index out of range');
+ // write('Deleting ' + string(toDelete.t) + '\n');
+ int i = 0;
+ for (SortedSet_wrapped_int s : sets) {
+ assert(s.delete(toDelete), 'Delete failed');
+ assert(!s.contains(toDelete), 'Contains failed');
+ assert(s.size() == initialSize - 1, 'Size failed');
+ ++i;
+ }
+ };
+
+real[] increasingProbs = array(n=ActionEnum.numActions, value=0.0);
+// Actions that don't modify the set (except for rebalancing):
+increasingProbs[ActionEnum.CONTAINS] = 1 / 2^5;
+increasingProbs[ActionEnum.AFTER] = 1 / 2^5;
+increasingProbs[ActionEnum.BEFORE] = 1 / 2^5;
+increasingProbs[ActionEnum.FIRST_GEQ] = 1 / 2^5;
+increasingProbs[ActionEnum.FIRST_LEQ] = 1 / 2^5;
+increasingProbs[ActionEnum.MIN] = 1 / 2^5;
+increasingProbs[ActionEnum.MAX] = 1 / 2^5;
+increasingProbs[ActionEnum.GET] = 1 / 2^5;
+// 1/4 probability of this sort of action:
+assert(sum(increasingProbs) == 8 / 2^5);
+// Actions that might add an element:
+increasingProbs[ActionEnum.INSERT] = 1 / 4;
+increasingProbs[ActionEnum.REPLACE] = 1 / 4;
+assert(sum(increasingProbs) == 3/4);
+// Actions that might remove an element:
+increasingProbs[ActionEnum.POP_MIN] = 1 / 16;
+increasingProbs[ActionEnum.POP_MAX] = 1 / 16;
+increasingProbs[ActionEnum.DELETE] = 1 / 16;
+increasingProbs[ActionEnum.DELETE_CONTAINS] = 1 / 16;
+assert(sum(increasingProbs) == 1, 'Probabilities do not sum to 1');
+
+real[] decreasingProbs = copy(increasingProbs);
+// Actions that might add an element:
+decreasingProbs[ActionEnum.INSERT] = 1 / 8;
+decreasingProbs[ActionEnum.REPLACE] = 1 / 8;
+// Actions that might remove an element:
+decreasingProbs[ActionEnum.POP_MIN] = 1 / 8;
+decreasingProbs[ActionEnum.POP_MAX] = 1 / 8;
+decreasingProbs[ActionEnum.DELETE] = 1 / 8;
+decreasingProbs[ActionEnum.DELETE_CONTAINS] = 1 / 8;
+assert(sum(decreasingProbs) == 1, 'Probabilities do not sum to 1');
+
+SortedSet_wrapped_int sorted_set =
+ makeNaiveSortedSet(operator <, (wrapped_int)null);
+SplayTree_wrapped_int splayset =
+ SplayTree_wrapped_int(operator <, (wrapped_int)null);
+
+
+int maxSize = 0;
+for (int i = 0; i < 2000; ++i) {
+ real[] probs = i < 800 ? increasingProbs : decreasingProbs;
+ int choice = chooseAction(probs);
+ actions[choice](100, sorted_set, splayset);
+ string diffs = differences(sorted_set, splayset);
+ assert(diffs == '', 'Naive vs splayset: \n' + diffs);
+ assert(isStrictlySorted(splayset), 'Not sorted');
+ maxSize = max(maxSize, splayset.size());
+}
+
+EndTest(); \ No newline at end of file
diff --git a/graphics/asymptote/tests/template/structTest.asy b/graphics/asymptote/tests/template/structTest.asy
new file mode 100644
index 0000000000..e961397e9f
--- /dev/null
+++ b/graphics/asymptote/tests/template/structTest.asy
@@ -0,0 +1,64 @@
+struct BareStruct {
+ static string testName = "bare struct";
+}
+struct A {
+ static int global = 17;
+ int local = 3;
+}
+access 'template/imports/structTemplate'(T=A, Lib=BareStruct) as bareStruct;
+
+struct NestedStruct {
+ static string testName = "nested struct";
+}
+struct B {
+ static struct C {
+ static int global = 17;
+ int local = 3;
+ }
+}
+access 'template/imports/structTemplate'(T=B.C, Lib=NestedStruct)
+ as nestedStruct;
+
+struct InnerStruct {
+ static string testName = "inner struct";
+}
+struct D {
+ struct E {
+ static int global = 17;
+ int local = 3;
+ }
+}
+D d;
+access 'template/imports/structTemplate'(T=d.E, Lib=InnerStruct)
+ as innerStruct;
+
+struct DeeplyNestedStruct {
+ static string testName = "deeply nested struct";
+}
+
+struct G {
+ struct H {
+ static struct I {
+ static int global = 17;
+ int local = 3;
+ }
+ }
+}
+G g;
+
+access 'template/imports/structTemplate'(T=g.H.I, Lib=DeeplyNestedStruct)
+ as deeplyNestedStruct;
+
+struct ImportedStruct {
+ static string testName = "imported struct";
+}
+access 'template/imports/notTemplate' as notTemplate;
+access 'template/imports/structTemplate'(T=notTemplate.A, Lib=ImportedStruct)
+ as importedStruct;
+
+struct NestedImport {
+ static string testName = "nested import";
+}
+access 'template/imports/notTemplate2' as notTemplate2;
+access 'template/imports/structTemplate'(T=notTemplate2.b.A, Lib=NestedImport)
+ as nestedImport; \ No newline at end of file
diff --git a/graphics/asymptote/v3dheadertypes.h b/graphics/asymptote/v3dheadertypes.h
index bc83414a7d..3e29f8469f 100644
--- a/graphics/asymptote/v3dheadertypes.h
+++ b/graphics/asymptote/v3dheadertypes.h
@@ -1,6 +1,6 @@
// Enum class for v3dheadertypes
// AUTO-GENERATED from v3dheadertypes.csv
-// Generated at 2024-03-23 21:30:36
+// Generated at 2024-06-21 17:44:46+00:00
namespace camp
{
diff --git a/graphics/asymptote/v3dheadertypes.py b/graphics/asymptote/v3dheadertypes.py
index 2c354159fb..988128ff44 100644
--- a/graphics/asymptote/v3dheadertypes.py
+++ b/graphics/asymptote/v3dheadertypes.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
# Enum class for v3dheadertypes
""" AUTO-GENERATED from v3dheadertypes.csv """
-# Generated at 2024-03-23 21:31:00
+# Generated at 2024-06-21 17:45:18+00:00
class v3dheadertypes:
v3dheadertypes_canvasWidth=1
diff --git a/graphics/asymptote/v3dtypes.h b/graphics/asymptote/v3dtypes.h
index 9236375f63..9713798875 100644
--- a/graphics/asymptote/v3dtypes.h
+++ b/graphics/asymptote/v3dtypes.h
@@ -1,6 +1,6 @@
// Enum class for v3dtypes
// AUTO-GENERATED from v3dtypes.csv
-// Generated at 2024-03-23 21:30:36
+// Generated at 2024-06-21 17:44:46+00:00
namespace camp
{
diff --git a/graphics/asymptote/v3dtypes.py b/graphics/asymptote/v3dtypes.py
index e4fab69f57..9dab614b51 100644
--- a/graphics/asymptote/v3dtypes.py
+++ b/graphics/asymptote/v3dtypes.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
# Enum class for v3dtypes
""" AUTO-GENERATED from v3dtypes.csv """
-# Generated at 2024-03-23 21:31:00
+# Generated at 2024-06-21 17:45:18+00:00
class v3dtypes:
v3dtypes_material=1
diff --git a/graphics/circuit_macros/CHANGES b/graphics/circuit_macros/CHANGES
index 020a7de9e7..efb7f7a0e7 100644
--- a/graphics/circuit_macros/CHANGES
+++ b/graphics/circuit_macros/CHANGES
@@ -1,8 +1,12 @@
CHANGES
+Version 10.6: New macro geiger. Corrected dpv .txt files.
+ Tweaked macros ColoredV, ShadeObject, ebox, shadowed, shadedball, addtaps.
+ Options for macros delay, resistor, source, relaycoil. List of macros
+ reformatted in the manual.
Version 10.5: Options for numersous element macros: sfgarc, sfgline,
sfgself, LCintersect, LEintersect, and others. Systematic facilities
- for Filling and customizing element bodies. New macros ColoredV,
+ for filling and customizing element bodies. New macros ColoredV,
cangle, definergbcolor. Added dpictools.pic macros to the manual.
Removed obsolete macros. Edits of the manual.
Version 10.4: New options for source, sarrow, darrow routines.
diff --git a/graphics/circuit_macros/Copying b/graphics/circuit_macros/Copying
index 2e951040b8..7ec3b487d5 100644
--- a/graphics/circuit_macros/Copying
+++ b/graphics/circuit_macros/Copying
@@ -1,4 +1,4 @@
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
diff --git a/graphics/circuit_macros/README b/graphics/circuit_macros/README
index a9f7f75c86..708d190f89 100644
--- a/graphics/circuit_macros/README
+++ b/graphics/circuit_macros/README
@@ -1,5 +1,5 @@
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
@@ -17,14 +17,15 @@
and non-WYSIWYG. Graphical interfaces are available for specific
operating systems.
- The macros are to be processed by an m4 macro processor, and evaluate to
- drawing commands in the pic "little language," which is easy to read and
- learn. The diagram is then automatically translated into TiKZ, PSTricks,
- or other formats for processing by LaTeX or other applications. Pic
- is well suited to line drawings requiring parametric or conditional
- components, fine adjustment, geometric calculations, repetition, or
- recursion. Arbitrary text for formatting by LaTeX can be included.
- Free interpreters for m4 and pic are readily available.
+ The macros are to be processed by an m4 macro processor, and evaluate
+ to drawing commands in the pic "little language," which is easy to
+ read and learn. The diagram is then automatically translated into
+ TiKZ, PSTricks, or other formats for processing by LaTeX or other
+ applications. Pic is well suited to line drawings requiring parametric
+ or conditional components, fine adjustment, geometric calculations
+ (it is Turing complete), repetition, or recursion. Arbitrary text
+ for formatting by LaTeX can be included. Free interpreters for m4
+ and pic are readily available.
Sources are available as a git repository at
https://gitlab.com/aplevich/Circuit_macros
@@ -110,14 +111,14 @@ USAGE
m4 gpic.m4 cct.m4 | gpic -t > cct.tex
- The basic commands given above suffice for documents of moderate
- size and complexity; otherwise, a "make" facility or equivalent should
- be used or, for modest documents, diagram processing can be controlled
+ The basic commands given above suffice for documents of moderate size
+ and complexity; otherwise, a "make" facility or equivalent should be
+ used or, for modest documents, diagram processing can be controlled
from within the tex document source as described in the manual. For
- near-immediate viewing of the basic process, three windows can be kept
- open: one in which to edit the source, one to process the source and
- produce postscript or pdf, and a viewer such as GSview 5.0, which updates
- when clicked.
+ near-immediate viewing of the results, three windows can be kept open:
+ one in which to edit the source, one to process the source and produce
+ postscript or pdf, and a viewer such as gv or GSview 5.0. A window
+ displaying the manual is also useful for composing a significant diagram.
INSTALLATION AND TESTING: See the INSTALL file.
@@ -148,7 +149,7 @@ DPIC:
Several Linux distributions will install dpic by command but the version
may not be the latest. A git repository containing complete source is at
https://gitlab.com/aplevich/dpic
- and source plus a Windows executable can be obtaied from
+ and source plus a Windows executable can be obtained from
http://ece.uwaterloo.ca/~aplevich/dpic/
The best advice is to obtain the newest version.
@@ -176,23 +177,24 @@ SVG output, Inkscape:
SVG is the native file format for the Inkscape graphics editor.
Therefore, elements defined by these macros can be output by dpic -v in
- svg format for later manipulation by Inkscape. A very basic palette of
- circuit elements for Inkscape is found in examples/paletteSVG.m4.
- In the examples subdirectory, type "make paletteSVG.svg", read the resulting
- file into Inkscape, and then ungroup the elements as desired. You would
- probably wish to add to or customize these elements for extensive use.
+ svg format for later manipulation by Inkscape. A basic palette of
+ circuit elements for Inkscape is found in examples/dpv/palettePDV.m4.
+ In the examples/dpv subdirectory, type "make paletteDPV.svg", read
+ the resulting file into Inkscape, and then ungroup the elements as
+ desired. You would probably wish to add to or customize these elements
+ for extensive use.
EXAMPLES
- A set of examples is included in this distribution, showing electric
- circuits, block diagrams, flow charts, signal-flow graphs, basic
- use of colour and fill, and other applications. Some of the examples
+ Numerous examples are included in this distribution, showing electric
+ circuits, block diagrams, flow charts, signal-flow graphs, basic use
+ of colour and fill, and other applications. Some of the examples
test the boundaries of the domain of application of dpic with m4
- macros. Read the manual Circuit_macros.pdf and view examples.pdf
- in the examples directory or make and view the html file in the
- examples/svg directory. For the curious, there are additional source
- files in the examples directory that are not shown in examples.pdf.
- Try http://ece.uwaterloo.ca/~aplevich/Circuit_macros/
- for the possibly unstable development version of these macros.
+ macros. Read the manual Circuit_macros.pdf and view examples.pdf in the
+ examples directory or make and view the html file in the examples/dpv
+ directory. For the curious, there are additional source files in
+ the examples/extras directory that are not shown in examples.pdf.
+ Try http://ece.uwaterloo.ca/~aplevich/Circuit_macros/ for the possibly
+ unstable development version of these macros.
The examples directory Makefile automates the generation of .ps, .eps,
.png, and .pdf files for individual diagrams. Subdirectories of the
@@ -220,10 +222,10 @@ INTEGRATION WITH OTHER TOOLS:
representative but keep in mind that systems and installations evolve
over time:
- A Python-based GUI called PyCirkuit is
- at https://pypi.org/project/pycirkuit/ and
- https://github.com/orestesmas/pycirkuit. For an
- introduction, look at the FOSDEM video by Orestes Mas:
+ A Python-based GUI called PyCirkuit is at
+ https://pypi.org/project/pycirkuit/ and
+ https://github.com/orestesmas/pycirkuit. For an introduction, look at
+ the FOSDEM video by Orestes Mas:
https://archive.fosdem.org/2020/schedule/event/pycirkuit/
A python build-automation tool, m4cm, by Peter Jan Randewijk is at
@@ -242,9 +244,10 @@ INTEGRATION WITH OTHER TOOLS:
https://www.youtube.com/watch?time_continue=53&v=pFRIBvUJHS4
A git repository of a KDE interface by Andrew G. for Linux is at
- https://github.com/ag-ckt/cirkuit/tree/V0.5.0.
+ https://github.com/ag-ckt/cirkuit/tree/V0.5.0 but it seems to be
+ unmaintained.
- Another recent introduction is at
+ A recent elementary introduction to Circuit_macros is at
https://www.root.cz/clanky/publikovanie-elektrickych-schem-a-diagramov-pomocou-circuit-macros/
It is in Czech but Google translate works well.
@@ -254,6 +257,10 @@ INTEGRATION WITH OTHER TOOLS:
A Windows batch file for Circuit_macros is found at
http://someonehasdonethis.blogspot.ca/2012/12/a-solution-for-drawing-circuit-diagrams.html
+ The eschpic package on Github contains macro definitions targeted at
+ IEC-style electrical drawings for industrial and automation purposes:
+ https://github.com/xwhatsit/eschpic
+
Mac users:
Descriptions of Mac installations have been published from time to time;
for example:
@@ -261,17 +268,15 @@ INTEGRATION WITH OTHER TOOLS:
VARIATIONS
Macros such as these will be modified inevitably to suit individual
- needs and taste. They continue to evolve in my own library as I use
- them and as others send comments. No such collection can hope to
- include all possible circuit-related symbols, so you will probably
- find yourself writing your own macros or adapting some of these.
- Be careful to rename modified macros to avoid confusion. The learning
- curve compares well to other packages, but there is no trivially
- easy way to produce high-quality graphics. (If "a picture is worth a
- thousand words," ask yourself how long it would take to write, revise,
- and perfect a thousand words.)
-
- See eschpic on Github for IEC-style electrical drawings.
+ needs and taste. They continue to evolve in my own library as I
+ use them and as others send comments. No such collection can hope to
+ include all possible circuit-related symbols, so you will probably find
+ yourself writing your own macros or adapting some of these. The example
+ files might be a good place to start. Be careful to rename modified
+ macros to avoid confusion. The learning curve compares well to other
+ packages, but there is no trivially easy way to produce high-quality
+ graphics. (If "a picture is worth a thousand words," ask yourself
+ how long it would take to write, revise, and perfect a thousand words.)
The pic language dates from the 1980s and was first developed
as a preprocessor for the *roff family of Unix wordprocessors.
@@ -318,15 +323,16 @@ Xfig:
LIBRARIES:
The file libgen.m4 contains general-purpose macros and is read
- automatically by other libraries. The file libcct.m4 defines basic
- circuit elements. Binary logic-circuit elements are in liblog.m4 and
- additional single-line elements are in libSLD.m4. Macros for drawing 3D
- projections are in lib3D.m4, and some macros for drawing double-line
- arrows are in darrow.m4. The file dpictools.pic contains pic macros
- and is read automatically by some of the examples.
-
-Feel free to contact me with comments or questions. I have retired
-from full-time work but continue the hobby of maintaining these files.
+ automatically by other libraries and the macro gen_init. The file
+ libcct.m4 defines basic circuit elements. Binary logic-circuit
+ elements are in liblog.m4 and additional single-line elements are
+ in libSLD.m4. Macros for drawing 3D projections are in lib3D.m4, and
+ some macros for drawing double-line arrows are in darrow.m4. The file
+ dpictools.pic contains dpic macros and is read automatically by some
+ of the examples.
+
+Feel free to contact me with comments or questions. I have retired from
+full-time professorship but continue the hobby of maintaining these files.
I may now be able to spend more time on individual requests but I may
not reply instantly to email.
diff --git a/graphics/circuit_macros/darrow.m4 b/graphics/circuit_macros/darrow.m4
index 49f8c9a878..da57311215 100644
--- a/graphics/circuit_macros/darrow.m4
+++ b/graphics/circuit_macros/darrow.m4
@@ -1,7 +1,7 @@
divert(-1)
darrow.m4 Macros for double lines and arrows
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
diff --git a/graphics/circuit_macros/doc/AlogixMan.m4 b/graphics/circuit_macros/doc/AlogixMan.m4
index b524f555ee..1b51abd477 100644
--- a/graphics/circuit_macros/doc/AlogixMan.m4
+++ b/graphics/circuit_macros/doc/AlogixMan.m4
@@ -20,7 +20,7 @@ A: Autologix(
# replaced by NOT gates.
B: Autologix(Or(And(B,Not(C)),And(Not(A),B,C)),N) \
with .sw at A.e+(0.4,0.25)
- "{\sl Out}" at B.Out above ljust
+ "{\sl B.Out}" at B.Out above ljust
`"\shortstack[l]{\tt B: Autologix( \\ \tt \
Or(And(B,Not(C)),And(Not(A),B,C)),N)}"' \
wid 242pt__ ht 20pt__ at B.s+(0,-0.2)
diff --git a/graphics/circuit_macros/doc/AmpTableMan.m4 b/graphics/circuit_macros/doc/AmpTableMan.m4
index e820f8d1a9..e83bcdbe4a 100644
--- a/graphics/circuit_macros/doc/AmpTableMan.m4
+++ b/graphics/circuit_macros/doc/AmpTableMan.m4
@@ -1,23 +1,25 @@
.PS
# `AmptableMan.m4'
cct_init
+divert(-1)
+
+divert(0)dnl
+
movewid = 2pt__
-{
+{
{amp ; move ; "{\tt `amp'}" ljust}
- move down 0.4; right_
- {amp(,0.3) ; move ; "\tt `amp'(,0.3)" ljust}
- }
move right_ 2.0
-{ {delay(,,fill_(0.9)) ; move ;
- "`\tt\shortstack[l]{delay(,{,}\\ fill\_(0.9))}'" ljust}
- move down 0.4; right_
- {delay(,0.2) ; move ; "{\tt `delay'(,0.2)}" ljust}
- }
-
+ {amp(,5mm__) ; move ; "\tt `amp'(,5mm\_\_)" ljust}
move right_ 2.0
-{ {integrator ; move ; "\tt `integrator'" ljust}
+ {integrator ; move ; "\tt `integrator'" ljust}
+ }
move down 0.5; right_
- {integrator(,0.3) ; move ; "\tt `integrator'(,0.3)" wid 82pt__ ljust}
- }
+{
+ {delay(,,fill_(0.9)) ; move ;
+ "`\tt\shortstack[l]{delay(,{,}\\ fill\_(0.9))}'" ljust}
+ move right_ 2.0
+ {delay(,,type=S;body=shaded "blue!25"); move
+ "{\tt `delay'(,,type=S;}" ljust "{\tt body=shaded \"blue!25\")}" ljust}
+ }
.PE
diff --git a/graphics/circuit_macros/doc/Circuit_macros.pdf b/graphics/circuit_macros/doc/Circuit_macros.pdf
index 85a2703bc7..f20e440b8c 100644
--- a/graphics/circuit_macros/doc/Circuit_macros.pdf
+++ b/graphics/circuit_macros/doc/Circuit_macros.pdf
Binary files differ
diff --git a/graphics/circuit_macros/doc/Circuit_macros.tex b/graphics/circuit_macros/doc/Circuit_macros.tex
index a5529a90f9..9df6ca528d 100644
--- a/graphics/circuit_macros/doc/Circuit_macros.tex
+++ b/graphics/circuit_macros/doc/Circuit_macros.tex
@@ -58,11 +58,10 @@
{\normalfont\normalsize\bfseries%
\let\@@tmp\@svsec\def\@svsec{\llap{\@@tmp}}%
}}
+\makeatother
\renewcommand\contentsname{Contents, \Version}
-\makeatother
-
\hypersetup{
pdflang=English,
unicode=true,
diff --git a/graphics/circuit_macros/doc/FF.m4 b/graphics/circuit_macros/doc/FF.m4
index e8bdafe239..a0725dc29d 100644
--- a/graphics/circuit_macros/doc/FF.m4
+++ b/graphics/circuit_macros/doc/FF.m4
@@ -1,11 +1,11 @@
.PS
# `FF.m4'
log_init
-S: NOR_gate
+Sg: NOR_gate
left_
-R: NOR_gate at S+(0,-L_unit*(AND_ht+1))
- line from S.Out right L_unit*3 then down S.Out.y-R.In2.y then to R.In2
- line from R.Out left L_unit*3 then up S.In2.y-R.Out.y then to S.In2
- line left 4*L_unit from S.In1 ; "$S$sp_" rjust
- line right 4*L_unit from R.In1 ; "sp_$R$" ljust
+Rg: NOR_gate at Sg+(0,-L_unit*(AND_ht+1))
+ line from Sg.Out right L_unit*3 then down Sg.Out.y-Rg.In2.y then to Rg.In2
+ line from Rg.Out left L_unit*3 then up Sg.In2.y-Rg.Out.y then to Sg.In2
+ line left 4*L_unit from Sg.In1 ; "$S$" rjust
+ line right 4*L_unit from Rg.In1 ; "$R$" ljust
.PE
diff --git a/graphics/circuit_macros/doc/Makefile b/graphics/circuit_macros/doc/Makefile
index 0f0a596447..75b244f934 100644
--- a/graphics/circuit_macros/doc/Makefile
+++ b/graphics/circuit_macros/doc/Makefile
@@ -40,6 +40,9 @@ BOXDIMS = AntennasMan.tex bi_trans.tex ConfigA.tex ConfigB.tex ConfigC.tex \
LATEX = latex
LATEX = latex --quiet
+
+BIBTEX=BIBINPUTS=. bibtex
+
M4 = m4 -I $(LIBDIR)
# If M4PATH has been set:
M4 = m4
@@ -90,13 +93,13 @@ $(DOC).ps:
$(DOC).$(SFX): mode.tex citations $(PICTEX)
@printf "\n $(DOC).SFX=$(DOC).$(SFX):\n\n"
- $(LATEX) $(DOC) ; bibtex $(DOC)
+ $(LATEX) $(DOC) ; $(BIBTEX) $(DOC)
-@if grep -s "Warning: Reference " $(DOC).log ; then \
@printf "\n Warning:\n\n" ; \
- $(LATEX) $(DOC) ; bibtex $(DOC) ; \
+ $(LATEX) $(DOC) ; $(BIBTEX) $(DOC) ; \
elif test ! -f $(DOC).$(SFX) ; then\
@printf "\n No file $(DOC).$(SFX)\n\n" ; \
- $(LATEX) $(DOC) ; bibtex $(DOC) ; fi
+ $(LATEX) $(DOC) ; $(BIBTEX) $(DOC) ; fi
ACsymbol.tex DCsymbol.tex:
touch $(DOC).dim
@@ -105,16 +108,16 @@ ACsymbol.tex DCsymbol.tex:
citations: mode.tex $(DOC).bbl $(PICTEX)
@printf "\n citations:\n\n"
- $(LATEX) $(DOC) ; bibtex $(DOC)
+ $(LATEX) $(DOC) ; $(BIBTEX) $(DOC)
touch citations
$(DOC).bbl: $(DOC).bib $(DOC).aux
- bibtex $(DOC)
+ $(BIBTEX) $(DOC)
# $(DOC).aux: mode.tex $(DOCSRC) heading.tex $(VERBATIM) $(PICTEX)
$(DOC).aux: mode.tex $(DOCSRC) $(VERBATIM) $(PICTEX)
@printf "\n $(DOC).aux:\n\n"
- $(LATEX) $(DOC) ; bibtex $(DOC)
+ $(LATEX) $(DOC) ; $(BIBTEX) $(DOC)
rm -f $(BOXDIMS)
make $(BOXDIMS)
diff --git a/graphics/circuit_macros/doc/QTrans.m4 b/graphics/circuit_macros/doc/QTrans.m4
index 1bc3a15a0a..9eb1e0bfd6 100644
--- a/graphics/circuit_macros/doc/QTrans.m4
+++ b/graphics/circuit_macros/doc/QTrans.m4
@@ -2,17 +2,16 @@
#QTrans.m4
cct_init
elen = 0.75
- Origin: Here
Vs: source(up_ elen,S); llabel(-,V_s,+)
resistor(right_ elen); rlabel(,R_s)
dot
- { capacitor(down_ to (Here,Origin))
+ { capacitor(down_ to (Here,Vs.start))
rlabel(+,V,-); llabel(,{1\over{j\omega C}},)
dot }
arrowline(right_ elen*2/3); llabel(,I)
T1: transformer(down_ Vs.len,,6,,4) with .P1 at Here # Place P1
"$T1$" at last [].n above
- line from T1.P2 to Origin
+ line from T1.P2 to Vs.start
line from T1.S1 up_ to (T1.S1,Vs.end) then right_ elen*2/3
resistor(down_ Vs.len); rlabel(,R_L); b_current(I_L,rjust)
line to (T1.S2,Here) then to T1.S2
diff --git a/graphics/circuit_macros/doc/ResistorsMan.m4 b/graphics/circuit_macros/doc/ResistorsMan.m4
index d13795283d..b3a228c5b7 100644
--- a/graphics/circuit_macros/doc/ResistorsMan.m4
+++ b/graphics/circuit_macros/doc/ResistorsMan.m4
@@ -5,36 +5,32 @@ cct_init
movewid = 2 pt__
hm = 2.05
vm = 0.28
-{ {resistor ; move ;"`{\tt resistor}'" ljust}
+{ {A:resistor ; move ;"`{\tt resistor}'" ljust}
move right_ hm
- {resistor(,,Q) ; move ;"`\tt resistor(,{,}Q) '" ljust}
+ {Q:resistor(,5,Q) ; move ;"`\tt $\ldots$(,5{,}Q) '" ljust}
move right_ hm
- {resistor(,,V) ; move ;"`{\tt resistor(,{,}V)}'" ljust}
+ {V:resistor(,,V) ; move ;"`{\tt $\ldots$(,{,}V)}'" ljust}
}
move down vm; right_
-{ {resistor(,,ES) ; move ;"`\tt resistor(,{,}ES) '" ljust}
+{ {ES:resistor(,,ES); move ;"`\tt $\ldots$(,{,}ES) '" ljust}
move right_ hm
- {resistor(,,H) ; move ;"`\tt resistor(,{,}H) '" ljust}
+ {H:resistor(,4,H) ; move ;"`\tt $\ldots$(,4{,}H) '" ljust}
move right_ hm
- {resistor(,,AC) ; move ;"`{\tt resistor(,{,}AC)}'" ljust}
+ {AC:resistor(,,AC) ; move ;"`{\tt $\ldots$(,{,}AC)}'" ljust}
}
move down vm; right_
-{ {resistor(,5,B) ; move ;"`{\tt resistor(,5,B)}'" ljust}
+{ {B:resistor(,,B) ; move ;"`{\tt $\ldots$(,{,}B)}'" ljust}
move right_ hm
- {resistor(,,E) ; move
- "`\shortstack[l]{\tt resistor(,{,}E)\\ {\tt $\equiv$ ebox}}'" ljust}
+ {F:resistor(,,F) ; move ;"`\tt $\ldots$(,{,}F) '" ljust}
move right_ hm
- {ebox(,0.5,0.3) ; move ;"`{\tt ebox(,0.5,0.3)}'" ljust}
+ {E:resistor(,,E) ; move ; "`\tt $\ldots$(,{,}E) $\equiv$ ebox'" ljust}
}
- move down vm; right_
+ move down vm*1.1; right_
{ {ebox(,,,0.9) ; move ;"`{\tt ebox(,{,},0.9)}'" ljust}
move right_ hm
- {ebox(,,,,shaded "green") ; move
- "`{\tt ebox(,{,},{,}shaded \"green\")}'" ljust}
-}
- move down vm; right_
-{ {ebox(,wdth=0.2;box=dashed shaded "green";text="X") ; move
- "`{\tt ebox(,wdth=0.2;box=dashed shaded \"green\";text=\"X\")}'" ljust}
+ {ebox(,wdth=0.2;box=dashed shaded "green";text="H") ; move
+ "`\shortstack[l]{\tt ebox(,wdth=0.2;box=dashed shaded \"green\";\\' \
+ `\tt text=\"H\")}'" ljust}
}
.PE
diff --git a/graphics/circuit_macros/doc/SourcesMan.m4 b/graphics/circuit_macros/doc/SourcesMan.m4
index 6647a84d1d..e4c491e80d 100644
--- a/graphics/circuit_macros/doc/SourcesMan.m4
+++ b/graphics/circuit_macros/doc/SourcesMan.m4
@@ -19,18 +19,17 @@ define(`NL',`; move down $1; right_')
{source(,SC) ; move ; "`\tt source(,SC)'" ljust} NL
{source(,AC); move ; "`\tt source(,AC)'" ljust} NL
{source(,X) ; move ; "`\tt source(,X)'" ljust} NL
- {source(,F) ; move ; "`\tt source(,F)'" ljust} NL
{source(,G) ; move ; "`\tt source(,G)'" ljust} NL
{source(,Q) ; move ; "`\tt source(,Q)'" ljust} NL #(0.3)
+ {source(,F) ; move ; "`\tt source(,F)'" ljust} NL
+ {geiger(,,,,fill_(0.9)); move;
+ "`\tt \shortstack[l]{geiger(,{,},{,}\\ fill\_(0.9))}'" ljust} NL
}
move right_ 2.0
{
-# {source(,,0.4) ; move ; "`\tt source(,{,}0.4)'" ljust} NL(0.35)
{source(,,0.4,,shaded "yellow") ; move ;
"`\tt\shortstack[l]{source(,{,}0.4,{,}\\ shaded \"yellow\")}'" ljust} NL(0.35)
-# {source(,P) ; move ; "`\tt source(,P)'" ljust} NL
- {source(,P,,,fill_(0.9)) ; move ;
- "`\tt\shortstack[l]{source(,P,{,},\\ fill\_(0.9))}'" ljust} NL
+ {source(,P) ; move ; "`\tt source(,P)'" ljust} NL
{source(,U) ; move ; "`\tt source(,U)'" ljust} NL
{source(,H) ; move ; "`\tt source(,H)'" ljust} NL
{source(,R) ; move ; "`\tt source(,R)'" ljust} NL
@@ -38,18 +37,18 @@ define(`NL',`; move down $1; right_')
{source(,SCr) ; move ; "`\tt source(,SCr)'" ljust} NL
{source(,T) ; move ; "`\tt source(,T)'" ljust} NL
{source(,L) ; move ; "`\tt source(,L)'" ljust} NL
- {source(,B) ; move ; "`\tt source(,B)'" ljust} NL
+ {source(,B) ; move ; "`\tt source(,B)'" ljust} NL(moveht*0.8)
{nullator ; move ; "`\tt nullator'" ljust} NL(moveht*0.8)
{norator ; move ; "`\tt norator'" ljust} NL(moveht*0.9)
{ttmotor(,G) ; move ; "`\tt ttmotor(,G)'" ljust} NL(moveht*1.1)
- {proximity ; move ;
- "`\tt \shortstack[l]{proximity\\ = consource(,P)}'" ljust}
+ {battery ; move ; "`\tt battery'" ljust} NL(0.3)
+ {battery(,3,R) ; move ; "`\tt battery(,3,R)'" ljust} #NL(0.35)
}
move right_ 2.0
{source(,N) ; move ; "`\tt source(,N)'" ljust} NL
+ {source(,NA) ; move ; "`\tt source(,NA)'" ljust} NL
+ {source(,NB) ; move ; "`\tt source(,NB)'" ljust} NL
{source(,"\rm mA");move; "`\tt source(,\"mA\")'" ljust} NL(0.31)
-# {source(,"mA");move; "`\tt source(,'" ljust \
-# "`\tt \enskip \"mA\")'" ljust} NL(0.31)
{consource ; move ; "`\tt consource'" ljust} NL(0.32)
{consource(,I) ; move ; "`\tt consource(,I)'" ljust} NL(0.32)
{consource(,i) ; move ; "`\tt consource(,i)'" ljust} NL(0.32)
@@ -58,8 +57,8 @@ define(`NL',`; move down $1; right_')
{consource(,V) ; move ; "`\tt consource(,V)'" ljust} NL(0.32)
{consource(,v) ; move ; "`\tt consource(,v)'" ljust} NL(0.3)
{consource(,tv) ; move ; "`\tt consource(,tv)'" ljust} NL(0.3)
- {battery ; move ; "`\tt battery'" ljust} NL(0.3)
- {battery(,3,R) ; move ; "`\tt battery(,3,R)'" ljust} #NL(0.35)
+ {proximity ; move ;
+ "`\tt \shortstack[l]{proximity\\ = consource(,P)}'" ljust} NL(0.35)
iflatex(`ifpsfrag(,`latexcommand(})')')
.PE
diff --git a/graphics/circuit_macros/doc/Taps.m4 b/graphics/circuit_macros/doc/Taps.m4
index aa6b59251b..57d1ea792a 100644
--- a/graphics/circuit_macros/doc/Taps.m4
+++ b/graphics/circuit_macros/doc/Taps.m4
@@ -9,7 +9,7 @@ cct_init
"\sl R1.end" at R1.end above
"\sl Tap1" at Tap1 rjust
"\sl Tap2" at Tap2 ljust
- `"\tt right\_; t = 0.2in\_\_" ljust \
+ `"\tt right\_; t = 0.2 in\_\_" ljust \
"\tt R1:$\;$resistor(,{,}E)" ljust \
"\tt addtaps(<-,0.2,-t,0.8,t)" ljust' at R1.end+(0.3,0)
diff --git a/graphics/circuit_macros/doc/Version.tex b/graphics/circuit_macros/doc/Version.tex
index 4a5d56e9c4..0c66604489 100644
--- a/graphics/circuit_macros/doc/Version.tex
+++ b/graphics/circuit_macros/doc/Version.tex
@@ -1 +1 @@
-Version 10.5
+Version 10.6
diff --git a/graphics/circuit_macros/doc/body.tex b/graphics/circuit_macros/doc/body.tex
index b6b9ca0dde..79827bb2e4 100644
--- a/graphics/circuit_macros/doc/body.tex
+++ b/graphics/circuit_macros/doc/body.tex
@@ -64,7 +64,7 @@ processed by \Mfour and a \pic processor to
convert them to \TPGF, \PSTricks, other \latex-compatible code, \SVG,
or other formats.
In its basic usage, the method has the advantages and disadvantages of
-\tex itself, since it is macro-based and non-WYSIWYG,
+\tex itself since it is macro-based and non-WYSIWYG,
with ordinary text input. The book from which the above quotation
is taken correctly points out that the payoff can be in quality of
diagrams at the price of the time spent in drawing them.
@@ -73,7 +73,7 @@ A collection of basic components, most based on IEC and IEEE
standards~\cite{IECstd,IEEEstd},
and conventions for their internal
structure are described. Macros such as these are only a starting
-point, since it is often convenient to customize elements or to package
+point since it is often convenient to customize elements or to package
combinations of them for particular drawings or contexts,
a process for which \Mfour\ and \pic\ are well suited.
@@ -126,11 +126,11 @@ in \FR{quick} to illustrate the language and the production of basic
labeled circuits.
\begin{figure}[ht]
\parbox{\textwidth}{\small\verbatiminput{quick.m4}}%
- \hfill\llap{\raise-1.15in\hbox{\input quick }}%
- \vspace*{-\baselineskip}%
+ \hfill\llap{\raise-1in\hbox{\input quick }}%
+% \vspace*{-\baselineskip}%
\caption{The file {\tt quick.m4} and resulting diagram.
There are several ways of drawing the same picture; for example,
- nodes (such as {\tt Origin}) can be defined and circuit branches
+ nodes (example: {\tt Origin: Here}) can be defined and circuit branches
drawn between them; or absolute coordinates can be used (e.g.,
{\tt source(up\_ from (0,0) to (0,0.75))} ). Element sizes
can be varied and non-two-terminal elements included (\FR{QTrans})
@@ -501,7 +501,8 @@ truncates the line by {\tt x} at the start and {\tt y} at the end.
Any of the above means of specifying line (or arrow) direction and length
will be called a \linespec.
-Lines can be concatenated. For example, to draw a triangle:
+Lines can be concatenated to create multsegmented objects.
+For example, to draw a triangle:
{\tt line up\_ sqrt(3) right\_ 1 then down\_ sqrt(3) right\_ 1 then left\_ 2}
@@ -903,11 +904,11 @@ The first macro argument specifies the
\begin{figure}[H]
\input ResistorsMan
\caption{Resistors drawn by the macro
- {\tt resistor({\sl linespec, n}|E, {\sl chars}, {\sl cycle wid})}.
- The second argument is either an integer to specify number of cycles,
- the letter {\tt E}, or blank. The third argument specifies the desired
- variant.
- The default {\tt ebox} element designates a resistor.}
+ {\tt resistor({\sl linespec, n}, {\sl chars}, {\sl cycle wid})}.
+ The second argument is either an integer to specify number of cycles
+% the letter {\tt E},
+ or blank. The third argument specifies the desired variant.
+ The default {\tt ebox} element designates a box resistor.}
\label{Resistors}
\end{figure}
\noindent%
@@ -936,7 +937,7 @@ See \SR{Composite:} for the {\tt variable} macro.
\label{Capacitors}
\end{figure}
-Basic inductors are illustrated in \FR{Inductors}.
+Inductors are illustrated in \FR{Inductors}.
\begin{figure}[H]
\input InductorsMan
\caption{Basic inductors created with the
@@ -992,7 +993,8 @@ to draw a single cycle of a sinusoid or approximate sinusoid.
\begin{figure}[hbt]
\input SourcesMan
\caption{Sources and source-like elements. An argument of each
- element allows customization such as shading.}
+ element allows customization such as shading. The {\tt geiger}
+ macro is a wrapper for {\tt source}.}
\label{Sources}
\end{figure}
As a convenience,
@@ -1270,6 +1272,8 @@ The macro {\tt eleminit\_} in the two-terminal elements invokes
to establish element length and direction.
As shown in \FR{Oblique},
+``{\tt Point\_(-30); resistor}'' draws a resistor
+along a line with slope of~-30 degrees,
\begin{figure}[hbt]
\vspace{-\baselineskip}
\parbox{4.5in}{\small \verbatiminput{Oblique.m4}}%
@@ -1278,8 +1282,7 @@ As shown in \FR{Oblique},
\caption{Illustrating elements drawn at oblique angles.}
\label{Oblique}
\end{figure}
-``{\tt Point\_(-30); resistor}'' draws a resistor
-along a line with slope of~-30 degrees, and ``{\tt rpoint\_(to Z)}'' sets
+and ``{\tt rpoint\_(to Z)}'' sets
the current direction cosines to point from the current location to location Z.
Macro {\tt vec\_(x,y)}
evaluates to the position {\tt (x,y)} rotated as defined by the
@@ -1419,19 +1422,22 @@ the {\tt ground} macro, for example:
include a transformer, a composite element described in detail below,
followed by code for the figure.
\begin{figure}[H]
-% \vspace*{-\baselineskip}
-% \parbox{4in}{\small \verbatiminput{QTrans.m4}}%
-% \hspace*{-0.45in}\raise-0.15in\hbox{\input QTrans }
-% \vspace*{-\baselineskip}
\input Qtrans
\caption{The file {\tt quick.m4} modified to include a composite
element, the transformer, which is positioned by placing an
- internal point.}
-% transformer, of which the length and orientation of connectors
-% is given by the first argument, and which is positioned in this
-% example by placing the internal position {\sl P1.}}
+ internal point, thus:
+ {\tt T1:~transformer(down\_ Vs.len,{},6,{},4) with .P1 at Here}.}
\label{QTrans}
\end{figure}
+%\begin{figure}[H]
+% \parbox{\textwidth}{\small\verbatiminput{Qtrans.m4}}%
+% \hfill\llap{\raise-1in\hbox{\input Qtrans }}%
+% \caption{The file {\tt quick.m4} modified to include a composite
+% element, the transformer, which is positioned by placing an
+% internal point, thus:
+% {\tt T1:~transformer(down\_ Vs.len,{},6,{},4) with .P1 at Here}.}
+% \label{QTrans}
+% \end{figure}
\FR{Xform} shows variants of the transformer macro,
which has predefined internal locations
@@ -1457,12 +1463,12 @@ puts dots at opposite ends.
\end{figure}
The code for \FR{QTrans} is reproduced in the following.
-Label {\sl Vs} has been added for later reference.
-The transformer is positioned by placing internal position {\sl P1.}
+%Label {\sl Vs} has been added for later reference.
+The transformer is positioned by placing internal point {\sl P1.}
\verbatiminput{QTrans.m4}
-The macro {\tt
- potentiometer(\linespec,{\sl cycles},{\sl fractional pos},{\sl length},
+Another composite element,
+ {\tt potentiometer(\linespec,{\sl cycles},{\sl fractional pos},{\sl length},
$\ldots$)},
shown in \FR{Potentiometers},
first draws a resistor along the specified line, then adds arrows for taps
@@ -1983,6 +1989,7 @@ A macro is also provided for colored fills:
\noindent%
These macros depend heavily on the postprocessor and are intended only for
\PSTricks, \TPGF, \MetaPost, \SVG, and the Postscript or PDF output of \dpic.
+Their effects are fragile in some situations.
Basic \Pic\ objects are probably best colored and filled as discussed
in \SR{Planarobjects:}.
@@ -2056,7 +2063,9 @@ of input locations {\tt In1,} $\ldots$ {\tt In}$N,$ as illustrated
for the NOR gate in the figure. By default, $N=2$ except for macros
{\tt NOT\_gate} and {\tt BUFFER\_gate}, which have one input {\tt In1}
unless they are given a first argument, which is treated as the line
-specification of a two-terminal element.
+specification of a two-terminal element. Alternately, the first argument
+can be a sequence of letters {\tt P} or {\tt N} to define a number of
+normal or negated ({\tt Not}-circled) inputs.
\begin{figure}[H]
\vspace*{-0.5\baselineskip}
\input LogicMan
@@ -3068,7 +3077,7 @@ respectively, and {\tt custombox} evaluates to
{\tt B1:\ box wid (2) ht (boxht) "Hello"}.
The key prefix {\tt m4} of the automatically created parameter macros can be
-redefined if necessary, since it is given in the distribution by the line
+redefined if necessary since it is given in the distribution by the line
{\tt define(`key\_prefix',`m4')}.
@@ -3550,10 +3559,10 @@ packages available these days? It would depend on the context, but
and read but powerful enough (that is, Turing-complete) for coding the
geometrical calculations required for precise component sizing and
placement. It would be nice if arbitrary rotations and scaling were
-simpler and if a general path element with clipping were available
-as in \Postscript. However, all the power of \Postscript or \TPGF,
-for example, remains available, as arbitrary postprocessor code can be
-included with \pic code.
+simpler, if a general path element with clipping were available as in
+\Postscript, and if adding color across postprocessors were easier.
+However, all the power of \Postscript or \TPGF, for example, remains
+available, as arbitrary postprocessor code can be included with \pic code.
The \dpic interpreter has several output-format options that may be
useful. The {\tt eepicemu} and {\tt pict2e} extensions of the
@@ -3568,13 +3577,12 @@ editor, but SVG can also be used directly for web pages.
\Dpic will also generate low-level \MetaPost or \Postscript code, so
that diagrams defined using \pic can be manipulated and combined with
others.
-I learned to great benefit that the \Postscript output can be imported into
-CorelDraw and Adobe Illustrator for further processing,
-so that detailed diagram components produced by pic program can be combined
-with effects best acheived using a wysiwyg drawing program.
-With raw \Postscript, \PDF, and \SVG output however, the user is
-responsible for ensuring that the correct fonts are provided and for
-formatting the text.
+I learned to great benefit that the \Postscript output can be imported
+into CorelDraw and Adobe Illustrator for further processing, so that
+detailed diagram components produced by pic program can be combined
+with effects best acheived using a wysiwyg drawing program. With raw
+\Postscript, \PDF, and \SVG output however, the user is responsible for
+ensuring that the correct fonts are provided and for formatting the text.
Many thanks to the people who continue to send comments, questions,
and, occasionally, bug fixes. What began as a tool for my own use changed
@@ -3759,6 +3767,12 @@ Note that the loop index variable {\tt m4x} is automatically defined.
\noindent The cure is to add single quotes in pairs as necessary.
+ If text containing single quote characters causes difficulties
+ then replace the \LaTeX\ single quote by {\tt \bsl{}char39}
+ or disable the m4 quote characters temporarily as shown:
+
+ {\tt changequote(,)} {\sl text containing single quotes} {\tt changequote(`,)}
+
The only subtlety required in writing
\Mfour macros is deciding when to quote macro arguments. In the context
of circuits it seemed best to assume that arguments would not
diff --git a/graphics/circuit_macros/doc/defines.tex b/graphics/circuit_macros/doc/defines.tex
index 0c9c67bfbf..6cb3a997c7 100644
--- a/graphics/circuit_macros/doc/defines.tex
+++ b/graphics/circuit_macros/doc/defines.tex
@@ -1,6 +1,6 @@
%
-\newdimen{\leftwid}\setlength{\leftwid}{2in}
-\newdimen{\libwid}\setlength{\libwid}{0.5in}
+\newdimen{\leftwid}\setlength{\leftwid}{140pt}
+\newdimen{\libwid}\setlength{\libwid}{35pt}
\newdimen\rightwid
\setlength{\rightwid}{\textwidth}
\addtolength{\rightwid}{-\leftwid}
@@ -11,31 +11,31 @@
%\newcommand{\macx}[2]{%
% \phantomsection\pdfbookmark[subsection]{#1}{#2}#1}
-\newcommand{\macrodef}[5]{%\begin{minipage}[b]{\textwidth}%
-\phantomsection\pdfbookmark[subsubsection]{#1}{#2}%
-\setbox\Defbox=\hbox{\tt #1#3}%
+% This is alchemy but good enough for now.
+\newcommand{\macrodef}[5]{\paragraph*{\hfill}\noindent%
+ \phantomsection\pdfbookmark[subsubsection]{#1}{#2}\hspace*{-\parindent}%
+ \setbox\Defbox=\hbox{\tt #1#3}%
\ifdim\wd\Defbox>\textwidth%
- \setbox\Defbox=\hbox{\parbox{\textwidth}{\tt #1#3}}\fi
+ \setbox\Defbox=\hbox{\parbox[t]{\textwidth}{\tt #1#3}}\fi%
+ \nopagebreak%
\ifdim\wd\Defbox>\leftwid%
- \box\Defbox\hfill\break\hspace*{\leftwid}%
+ \box\Defbox\hfill\break\hspace*{-1ex}\hbox to \leftwid{\hfill}%
\else\hbox to \leftwid{\box\Defbox\hfill}\fi%
- \nopagebreak
- \hbox to \libwid{#4\hfill}\parbox[t]{\rightwid}%
- {\raggedright #5}%
- %\end{minipage}%
- \vspace{\parsep}\\}%
+ \hbox to \libwid{#4\hfill}%
+ \begin{minipage}[t]{\rightwid}\raggedright#5\end{minipage}}%
\newcommand{\seesect}[1]{ (\SR{#1})}
\newcommand{\Letter}[1]{\noindent%
\pdfbookmark[subsection]{#1}{#1}%
- \hskip-2em\hbox to 2em{#1\label{#1}\hfill}\relax}%
+ \hskip-2em\hbox to 2em{\par#1\label{#1}}\relax}%
\newcommand{\LR}[1]{\hyperref[#1]{{#1}}\hskip1em}
+\newcommand{\fra}[1]{\hbox{\sl frac#1}}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\raggedbottom
+%\raggedbottom
\vspace{\abovedisplayskip}
\noindent
\LR{A} \LR{B} \LR{C} \LR{D} \LR{E} \LR{F} \LR{G} \LR{H} \LR{I} \LR{J}
@@ -50,7 +50,7 @@
\macrodef{abs\_}{abs_}{({\sl number})}%
{gen}%
{absolute value function}%
-\macrodef{ACsymbol}{ACsymbol}{(at {\sl position, len, ht,}%
+\macrodef{ACsymbol}{ACsymbol}{(at {\sl position, len, ht,} %
[n:][A]U|D|L|R|{\sl degrees}) }%
{cct}%
{draw a stack of $n$ (default 1) AC symbols
@@ -58,12 +58,12 @@
are used. The current drawing direction is default, otherwise Up, Down,
Left, Right, or at {\sl degrees} slant; \seesect{Twoterminal:} e.g.,\\
{\tt ebox; $\lbrace$ACsymbol(at last [],{,}dimen\_/8)$\rbrace$}}%
-\macrodef{adc}{adc}{({\sl width,height,nIn,nN,nOut,nS})}%
+\macrodef{adc}{adc}{({\sl width, height, nIn, nN, nOut, nS})}%
{cct}%
{Analog-digital converter with defined width, height, and number of
inputs {\tt In$i$}, top terminals {\tt N$i$}, ouputs {\tt Out$i$},
and bottom terminals~{\tt S$i$}}%
-\macrodef{addtaps}{addtaps}{[{\sl arrowhd}%
+\macrodef{addtaps}{addtaps}{([{\sl arrowhd}%
| type={\sl arrowhd};name={\sl Name}],
{\sl fraction, length, fraction, length,} $\cdots$)}%
{cct}%
@@ -81,7 +81,7 @@
\macrodef{Along\_}{Along_}{({\sl LinearObj,distance,}[R])}%
{gen}%
{Position arg2 (default all the way) along a linear object
- from {\tt .start} to {\tt .end}%
+ from {\tt .start} to {\tt .end}
(from {\tt .end} to {\tt .start} if arg3={\tt R}) }%
\macrodef{amp}{amp}{(\linespec, {\sl size}, {\sl attributes})}%
{cct}%
@@ -89,7 +89,7 @@
\macrodef{And, Or, Not, Nand, Nor, Xor, Nxor, Buffer}%
{And, Or, Not, Nand, Nor, Xor, Nxor, Buffer}{}%
{log}%
- {Wrappers of {\tt AND\_gate}, $\ldots$ for use in the {\tt Autologix}%
+ {Wrappers of {\tt AND\_gate}, $\ldots$ for use in the {\tt Autologix}
macro}%
\macrodef{AND\_gate}{AND_gate}{({\tt {\sl n}, [N][B],
[{\sl wid}, [{\sl ht}]], {\sl attributes}})}%
@@ -106,11 +106,11 @@
{\sl attributes})}%
{log}%
{general AND gate: $n$=number of inputs $(0\leq n\leq 16)$;
- {\sl chars:}%
+ {\sl chars:}
B=base and straight sides; A=Arc;
[N]NE,[N]SE,[N]I,[N]N,[N]S=inputs or circles;
[N]O=output; C=center.
- Otherwise, arg1 can be a sequence of letters {\tt P|N}%
+ Otherwise, arg1 can be a sequence of letters {\tt P|N}
to define normal or negated inputs; arg2 is as above except that
{\tt [N]I} is ignored. Arg 5 contains body attributes.}%
\macrodef{AND\_ht}{AND_ht}{}%
@@ -170,8 +170,8 @@
the macro affect the arc only,
e.g., {\tt arcr(A,r,0,pi\_/2,->) dotted ->}%
\seesect{Positions:}}%
-\macrodef{arcto}{arcto}{({\sl position 1},{\sl position 2},{\sl
- radius},[dashed|dotted])}%
+\macrodef{arcto}{arcto}{({\sl position 1}, {\sl position 2},
+ {\sl radius}, [dashed|dotted])}%
{gen}%
{line toward position 1 with rounded corner toward position 2}%
\macrodef{array}{array}{({\sl variable, expr1, expr2, \ldots})}%
@@ -181,15 +181,15 @@
\macrodef{array2}{array2}{({\sl variable, expr1, expr2, \ldots})}%
{dpictools}%
{$\;\;$ Populate a doubly-subscripted array:
- {\tt {\sl var}[{\sl expr1},1]={\sl expr2;}%
+ {\tt {\sl var}[{\sl expr1},1]={\sl expr2;}
{\sl var}[{\sl expr1},2]={\sl expr3;} \ldots}.}%
\macrodef{arraymax}{arraymax}{({\sl data array, n, index name, value})}%
{dpictools}%
{$\;\;$ Find the index in {\sl array[1:n]} of the first occurrence
of the maximum array element value. The value is assigned if arg4 is
nonblank; example:
- {\tt array(x,4,9,8,6); arraymax( x,4,i )}%
- assigns 2 to {\sl i,} and {\tt arraymax( x,4,i,m )}%
+ {\tt array(x,4,9,8,6); arraymax( x,4,i )}
+ assigns 2 to {\sl i,} and {\tt arraymax( x,4,i,m )}
assigns 2 to {\sl i} and 9 to {\sl m.}}%
\macrodef{arraymin}{arraymin}{({\sl data array, n, index name, value})}%
{dpictools}%
@@ -197,37 +197,36 @@
of the minimum array element value. The value is assigned if arg4 is
nonblank; see {\tt arraymax}.}%
\macrodef{arrester}{arrester}{(\linespec,{\sl chars},
- {\sl len}[:arrowhead ht],
- {\sl ht}[:arrowhead wid],
+ {\sl len}[:{\sl arrowhead ht}],
+ {\sl ht}[:{\sl arrowhead wid}],
{\sl attributes} )}%
{cct}%
-{ Arg2 {\sl chars:}\\
- {\tt G=} spark gap (default)\\
- {\tt g=} general (dots)\\
- {\tt E=} gas discharge\\
- {\tt S=} box enclosure\\
- {\tt C=} carbon block\\
- {\tt A=} electrolytic cell\\
- {\tt H=} horn gap\\
- {\tt P=} protective gap\\
- {\tt s=} sphere gap\\
- {\tt F=} film element\\
- {\tt M=} multigap\\
- {\sl Modifiers in arg2:}\\
- {\tt R=} right orientation\\
- {\tt L=} left orientation\\
- {\tt D=} 3-terminal element for {\tt S, E}
- only, with terminals {\sl A, B, G}\\
- Arg5 applies to options C, E, S
- \seesect{Twoterminal:}}%
+{Arg2 {\sl chars:}\\
+ {\tt G=} spark gap (default)\\
+ {\tt g=} general (dots)\\
+ {\tt E=} gas discharge\\
+ {\tt S=} box enclosure\\
+ {\tt C=} carbon block\\
+ {\tt A=} electrolytic cell\\
+ {\tt H=} horn gap\\
+ {\tt P=} protective gap\\
+ {\tt s=} sphere gap\\
+ {\tt F=} film element\\
+ {\tt M=} multigap\\
+ {\sl Modifiers appended to arg2:}\\
+ {\tt R=} right orientation\\
+ {\tt L=} left orientation\\
+ {\tt D=} add terminals {\sl A, B, G} for {\tt S, E} only\\
+ Arg5 applies to options C, E, S
+ \seesect{Twoterminal:}}%
\macrodef{arrowline}{arrowline}{(\linespec)}%
{cct}%
{line (dotted, dashed permissible) with centred arrowhead
\seesect{Twoterminal:}}%
-\macrodef{assign3}{assign3}{({\sl var name,var name,var name,arg4,arg5,arg6})}%
+\macrodef{assign3}{assign3}{({\sl name, name, name, arg4, arg5, arg6})}%
{gen}%
{Assigns \$1 = arg4 if \$1 is nonblank; similarly \$2 = arg5 and \$3 = arg6}%
-\macrodef{AutoGate}{AutoGate}{}%
+\macrodef{AutoGate}{AutoGate}{\relax}%
{log}%
{Draw the tree for a gate as in the {\tt Autologix} macro. No inputs
or external connections are drawn. The names of the internal gate
@@ -239,17 +238,18 @@
{Draw the Boolean expressions defined in function notation.
The first argument is a semicolon (;)-separated sequence of
Boolean function specifications using the functions
- {\tt And, Or, Not, Buffer, Xor, Nand, Nor, Nxor}%
+ {\tt And, Or, Not, Buffer, Xor, Nand, Nor, Nxor}
with variables, e.g.,
- {\tt Autologix(And(Or(x1,~x2),Or(~x1,x2)));}.
- Each function specification is of the form
+ {\tt Autologix(And(Or(x1,\~{}x2),Or(\~{}x1,x2)));}.\\
+ Each function specification is of the form\\
{\tt {\sl function}({\sl arguments}) [@{\sl attributes}]}.
\par
Function outputs are aligned vertically but appending
- {\tt@}{\sl attributes} to a function can be used to place it.
+ {\tt@}{\sl attributes} to a function can be used to place it; e.g.,
+ {\tt Nand(\~{}A,B) @with .n at last [].s+(0,-2bp\_\_).}
\par
The function arguments are variable names or nested Boolean functions.
- Each unique variable {\sl var} causes an input point {\tt In}{\sl var}%
+ Each unique variable {\sl var} causes an input point {\tt In}{\sl var}
to be defined. Preceding the variable by a {\tt \~{}} causes a NOT gate
to be drawn at the input.
The inputs are drawn in a row at the upper left by default.
@@ -264,15 +264,15 @@
Each variable {\sl var} corresponds also to one of the input array
points with label {\tt In}{\sl var}.
Setting {\tt offset=}{\sl value} displaces the
- drawn input list in order to disambiguate the input connections when {\tt L}%
+ drawn input list in order to disambiguate the input connections when {\tt L}
is used.
\par
In the (possibly rare) case where one or more inputs of a normal function
gate is to have a NOT-circle, an additional first argument of the function
- is inserted, of the form {\tt [{\sl charseq}]}, where {\sl charseq}%
+ is inserted, of the form {\tt [{\sl charseq}]}, where {\sl charseq}
is a string containing the characters {\tt P} for a normal input or
{\tt N} for a negated input, the length of the string equal to the number
- of gate inputs. For example:
+ of gate inputs. Example:
{\tt Autologix(Xor([PN],And(x,y),And(x,y)),LRV)}}%
\Letter{B}%
@@ -287,8 +287,8 @@
\macrodef{b\_}{b_}{}%
{gen}%
{blue color value}%
-\macrodef{b\_current}{b_current}{({\sl label},{\sl pos},In|Out,Start|End,{\sl
- frac})}%
+\macrodef{b\_current}{b_current}{({\sl label}, {\sl pos}, In|Out, Start|End,
+ {\sl frac})}%
{cct}%
{labelled branch-current arrow to {\sl frac} between branch end and body
\seesect{Branchcurrent:}}%
@@ -343,14 +343,14 @@
{cct}%
{left or right, N- or P-type bipolar transistor, without or with envelope
\seesect{Semiconductors:}}%
-\macrodef{boxcoord}{boxcoord}{({\sl planar obj},{\sl x fraction},{\sl y
- fraction})}%
+\macrodef{boxcoord}{boxcoord}{({\sl planar obj}, {\sl x fraction},
+ {\sl y fraction})}%
{gen}%
{internal point in a planar object}%
\macrodef{boxdim}{boxdim}{({\sl name},h|w|d|v,{\sl default})}%
{gen}%
- {evaluate, e.g.\ {\sl name}{\tt \_w} if defined, else {\sl default\/}%
- if given, else 0 {\tt v} gives sum of {\tt d} and {\tt h} values
+ {Evaluate, e.g.\ {\sl name}{\tt \_w} if defined, else {\sl default\/}
+ if given, else 0. {\tt v} gives sum of {\tt d} and {\tt h} values
\seesect{Interaction:}}%
\macrodef{BOX\_gate}{BOX_gate}{({\sl inputs, output, swid, sht, label,
attributes })}%
@@ -378,12 +378,12 @@
{log}%
{general buffer, {\sl chars:}\\
{\tt T}: triangle,\\
- {\tt [N]O}: output location {\tt Out}%
+ {\tt [N]O}: output location {\tt Out}
({\tt NO} draws circle {\tt N\_Out});\\
{\tt [N]I, [N]N, [N]S, [N]NE, [N]SE} input locations;\\
{\tt C}: centre location.\\
Args 4-6 allow alternative
- definitions of respective {\tt In, NE,}%
+ definitions of respective {\tt In, NE,}
and {\tt SE} argument sequences }%
\macrodef{BUF\_ht}{BUF_ht}{}%
{log}%
@@ -395,6 +395,7 @@
{cct}%
{buzzer, {\sl In1} to {\sl In3} defined, C=curved
\seesect{Composite:}}%
+
\Letter{C}%
\macrodef{cangle}{cangle}{({\sl Start, End},[d])}%
{gen}%
@@ -427,7 +428,7 @@
\seesect{Twoterminal:}}%
\macrodef{case}{case}{({\sl i, alt1, alt2, \ldots})}%
{dpictools}%
- {$\;\;$ Case statement for dpic; execute alternative {\sl i.}%
+ {$\;\;$ Case statement for dpic; execute alternative {\sl i.}
Example: {\tt case( 2, x=5, x=10, x=15 )} sets {\tt x} to 10.
Note: this is a macro so {\tt \${}n} refers to the {\sl n}-th
argument of {\tt case}.}%
@@ -453,19 +454,17 @@
\macrodef{Cintersect}{Cintersect}{({\sl Pos1, Pos2, rad1, rad2,} [R])}%
{gen}%
{Upper (lower if arg5={\tt R}) intersection of circles at
- {\sl Pos1} and {\sl Pos2}, radius {\sl rad1} and {\sl rad2}}%
-\macrodef{clabel}{clabel}{({\sl label},{\sl label},{\sl label},[{\sl arg4}],%
- [{\sl block name}])}%
+ {\sl Pos1} and {\sl Pos2}, radius {\sl rad1} and {\sl rad2}}
+\macrodef{clabel}{clabel}{( {\sl label}, {\sl label}, {\sl label},
+ {\sl relative position}, {\sl block name})}%
{cct}%
{Triple label along the drawing axis of the body of an element in the
current direction \seesect{Labels:}. Labels are placed at the
- beginning, centre, and end of the last {\tt []} block (or a named
- {\tt []} block). Each label is treated as math by default, but is
- copied literally if it is in double quotes or sprintf.
- {\sl Arg4} can be {\tt above,} {\tt below,} {\tt left,} or {\tt
- right} to supplement the default relative position. The fifth
- argument is the optional name of the {\tt []} block to be labelled,
- which is {\tt last []} by default.}%
+ beginning, centre, and end of the last {\tt []} block (or a {\tt
+ []} block named or enumerated in arg5). Each label is treated as
+ math by default, but is copied literally if it is in double quotes
+ or sprintf. {\sl Arg4} can be {\tt above,} {\tt below,} {\tt left,}
+ or {\tt right} to supplement the default relative position.}%
\macrodef{cm\_\_}{cm__}{}%
{gen}%
{absolute centimetres}%
@@ -477,19 +476,29 @@
{voltage or current controlled source with alternate forms;
{\tt R}: reversed polarity\seesect{Twoterminal:}}%
\macrodef{ColoredV}{ColoredV}{%
- (box|circle|ellipse,({\sl r,g,b})|(({\sl colorseq})),{\sl attributes})}%
+ (box|circle|ellipse,({\sl r,g,b})|(({\sl colorseq}))[:{\sl nlines}],%
+ {\sl attributes})}%
{gen}%
{box (default), circle, or ellipse in a {\tt []} block.
- If arg2 is blank then all formatting is in arg3. If arg2 is blank
+ If arg2 is blank
then all formatting is in arg3; if parenthesized r,g,b, the object
is shaded top to bottom white to the specified rgb color; if a
- double-parenthesized colorseq then the colorseq defines the internal
+ double-parenthesized {\sl colorseq} then the {\sl colorseq}
+ defines the internal
shading top to bottom. A {\sl colorseq} is of the form
- 0, r0,g0,b0, {\sl frac1},r1,g1,b1, {\sl frac2},r2,g2,b2,
- \ldots 1,rn,gn,bn with $0 < \hbox{\sl frac1} < \hbox{\sl frac2} \ldots 1$.
+ {\sl 0,r0,g0,b0,\\
+ frac1,r1,g1,b1,\\
+ frac2,r2,g2,b2,\\
+ \ldots\\
+ 1,rn,gn,bn}\\
+ with $0 < \hbox{\sl frac1} < \hbox{\sl frac2} \ldots 1$.
+ The number of {\sl colorseq} lines can be specified with the colon
+ (default {\tt height/(line thickness)*2)}.
Examples: {\tt ColoredV(circle,(1,0,0));
- ColoredV(ellipse,(1,0.04,1),wid 0.75 ht 1 outlined "magenta" "Goodbye");
- ColoredV(box,(1,0,0),outlined "blue" rad 0.1, (0,1,1,0, 1,0,0,1)).} }%
+ ColoredV(ellipse,(1,0.04,1),wid 0.75 ht 1 \textbackslash\\
+ $\;$ outlined "magenta" "Goodbye");
+ ColoredV(box,((0,1,1,0, 1,0,0,1)):50, \\
+ $\;$ outlined "blue" rad 0.1).} }%
\macrodef{contact}{contact}{({\sl chars})}%
{cct}%
{single-pole contact:
@@ -515,14 +524,14 @@
\seesect{Composite:}}%
\macrodef{contline}{contline}{({\sl line})}%
{gen}%
- {evaluates to {\tt continue}%
+ {evaluates to {\tt continue}
if processor is {\bf dpic}, otherwise to first arg (default {\tt line})}%
\macrodef{copy3}{copy3}{({\sl vector1,vector2})}%
{dpictools}%
{$\;\;$ Copy vector1 into vector named by arg2.}%
\macrodef{copythru}{copythru}{({\sl dpic macro name,} "{\sl file name}")}%
{dpictools}%
- {$\;\;$ Implements the gpic {\tt copy {\sl filename} thru {\sl macro-name}}%
+ {$\;\;$ Implements the gpic {\tt copy {\sl filename} thru {\sl macro-name}}
for file data separated by commas, spaces, or tabs.}%
\macrodef{corner}{corner}{({\sl line thickness,attributes,turn radians})}%
{gen}%
@@ -559,15 +568,17 @@
{\tt size={\sl expr};},
{\tt line={\sl attributes};} }%
\macrodef{crossover}{crossover}{(\linespec, [L|R][:{\sl line attributes}],
- Line1, Line2, .{.}.)}%
+ {\sl Linename1, Linename2,} $\ldots$)}%
{cct}%
- {line jumping left or right over ordered named lines\seesect{Semiconductors:}}%
+ {line jumping left or right over ordered named
+ lines\seesect{Semiconductors:}}%
\macrodef{crosswd\_}{crosswd_}{}%
{gen}%
{cross dimension}%
\macrodef{csdim\_}{csdim_}{}%
{cct}%
{controlled-source width}%
+
\Letter{D}%
\macrodef{dabove}{dabove}{(at {\sl location})}%
{darrow}%
@@ -583,12 +594,13 @@
{darrow}%
{Wrapper for {\tt darc}.
CCW arc in {\tt dline} style, with closed ends or (dpic only) arrowheads.
- Semicolon-separated {\sl parameters}:
- {\tt thick=}{\sl value}, {\tt wid=}{\sl value}, {\tt ends=}%
- {\sl x}{\tt -},
+ Semicolon-separated {\sl parameters}:\\
+ {\tt thick=}{\sl value};\\
+ {\tt wid=}{\sl value};\\
+ {\tt ends=} {\sl x}{\tt -},
{\tt -}{\sl x}, {\sl x}{\tt -}{\sl x}, {\tt ->}, {\sl x}{\tt ->},
- {\tt <-}, {\tt <-}{\sl x}, {\tt <->}%
- where {\sl x} means {\tt |} or (half-thickness line) {\tt !}.}%
+ {\tt <-}, {\tt <-}{\sl x}, {\tt <->},
+ where {\sl x} is {\tt |} or (half-thickness line) {\tt !}.}%
\macrodef{darc}{darc}{({\sl center position},
{\sl radius}, {\sl start radians}, {\sl end radians}, {\sl dline thickness},
{\sl arrowhead wid}, {\sl arrowhead ht},
@@ -599,8 +611,8 @@
Permissible {\sl end symbols}:
{\sl x}{\tt -},
{\tt -}{\sl x}, {\sl x}{\tt -}{\sl x}, {\tt ->}, {\sl x}{\tt ->},
- {\tt <-}, {\tt <-}{\sl x}, {\tt <->}%
- where {\sl x} means {\tt |} or (half-thickness line) {\tt !}.
+ {\tt <-}, {\tt <-}{\sl x}, {\tt <->}
+ where {\sl x} is {\tt |} or (half-thickness line) {\tt !}.
An inner arc is drawn overlaying the outer arc.
Example: {\tt darc(,{,},{,},{,},{,}outlined "red",outlined "yellow")}.}%
\macrodef{Darlington}{Darlington}{(L|R,{\sl chars})}%
@@ -616,14 +628,15 @@
Z= zener bias diode
\seesect{Semiconductors:}}%
\macrodef{darrow}{darrow}{(\linespec,
- t,t,{\sl width},{\sl arrowhd wd},{\sl arrowhd ht},{\sl parameters},
+ t, t, {\sl width}, {\sl arrowhd wd}, {\sl arrowhd ht}, {\sl parameters},
{\sl color attributes})}%
{darrow}%
{See also {\tt Darrow}.
Double arrow, truncated at beginning (arg2={\tt t}) or
end (arg3={\tt t}), specified sizes,
with arrowhead and optional closed stem. The parameters (arg7) are
- {\tt {\sl x}-} or {\tt ->} or {\tt {\sl x}->} or {\tt <-} or {\tt <-{\sl x}}%
+ {\tt {\sl x}-} or {\tt ->} or {\tt {\sl x}->} or {\tt <-} or
+ {\tt <-{\sl x}}
or {\tt <->} where {\sl x} is {\tt |} or {\tt !}.
The {\tt !-} or {\tt -!} parameters close
the stem with half-thickness lines to simplify butting to other objects.
@@ -639,7 +652,7 @@
{\tt thick=}{\sl val}; (total thicknes, ie width)\\
{\tt wid=}{\sl val}; (arrowhead width)\\
{\tt ht=}{\sl val}; (arrowhead height)\\
- {\tt ends=}%
+ {\tt ends=}
{\sl x}{\tt -}{\sl x} or
{\tt -}{\sl x} or
{\sl x}{\tt -} where {\sl x} is {\tt !} (half-width line)
@@ -669,30 +682,30 @@
{A DC symbol (a dashed line below a solid line).
The current drawing direction is default, otherwise Up, Down,
Left, Right, or at {\sl degrees} slant; e.g.,
- {\tt source(up\_ dimen\_); $\lbrace$ DCsymbol(at last [],{},{},R) $\rbrace$}%
+ {\tt source(up\_ dimen\_); $\lbrace$ DCsymbol(at last [],{},{},R) $\rbrace$}
\seesect{Twoterminal:} }%
\macrodef{DefineCMYKColor}{DefineCMYKColor}{({\sl color-name, c, m, y, k})}%
{dpictools}%
{$\;\;$ Like {\tt DefineRGBColor} but takes arguments in percent, i.e.,
- the range $[0,100].$ Define dpic macro {\sl colorname}%
+ the range $[0,100].$ Define dpic macro {\sl colorname}
according to the postprocessor specified by dpic command-line option.
The macro evaluates to a string.}%
\macrodef{DefineHSVColor}{DefineHSVColor}{({\sl color-name, h, s, v})}%
{dpictools}%
{$\;\;$ Like {\tt DefineRGBColor} but takes argument {\sl h} in the
range $[0,360],$ {\sl s} in $[0,1],$ and {\sl v} in $[0,1].$
- Define dpic macro {\sl colorname}%
+ Define dpic macro {\sl colorname}
according to the postprocessor specified by dpic command-line option.
The macro evaluates to a string.}%
\macrodef{DefineRGBColor}{DefineRGBColor}{({\sl color-name, r, g, b})}%
{dpictools}%
- {$\;\;$ Arguments are in the range 0 to 1. Define dpic macro {\sl colorname}%
+ {$\;\;$ Arguments are in the range 0 to 1. Define dpic macro {\sl colorname}
according to the postprocessor specified by dpic command-line option.
The macro evaluates to a string.}%
\macrodef{definergbcolor}{definergbcolor}{({\sl color-name, r, g, b})}%
{gen}%
{Arguments are in the range 0 to 1. Define color name
- according to the postprocessor. Similar to dpictools {\tt DefineRGBColor}%
+ according to the postprocessor. Similar to dpictools {\tt DefineRGBColor}
but the color name is an m4 macro, not a string.}%
\macrodef{delay}{delay}{(\linespec,{\sl size},{\sl attributes})}%
{cct}%
@@ -707,7 +720,7 @@
U|D|L|R|{\sl degrees}) (default {\tt U} for up)}%
{cct}%
{Delta symbol for power-system diagrams.
- {\sl keys:} {\tt size={\sl expression;}}%
+ {\sl keys:} {\tt size={\sl expression;}}
{\tt type=C|O} (default {\tt C} for closed;
{\tt O} draws an ``open'' symbol); }%
\macrodef{Demux}{Demux}{({\sl n},{\sl label},
@@ -727,9 +740,9 @@
\macrodef{dend}{dend}{(at {\sl location},
{\sl line thickness}{\tt |}{\sl attributes})}%
{darrow}%
- {Close (or start) double line (Note specifying {\tt dends=} for {\tt Dline}%
- is a similar function. Arg2 is dline thickness or atributes:
- {\tt thick={\sl expression};} (dline thickness in drawing units)
+ {Close (or start) double line (Note specifying {\tt dends=} for {\tt Dline}
+ is a similar function. Arg2 is dline thickness or atributes:\\
+ {\tt thick={\sl expression};} (dline thickness in drawing units)\\
{\tt outline=({\sl r,g,b})|"{\sl color}";}}%
\macrodef{d\_fet}{d_fet}{(\linespec,R,P,E|S)}%
{cct}%
@@ -744,10 +757,10 @@
$\hbox{\sl vec3} = \hbox{\sl vec1} - \hbox{\sl vec2}$.}%
\macrodef{dfitcurve}{dfitcurve}{({\sl Name, n, linetype, m})}%
{dpictools}%
- {$\;\;$ Draw a spline through {\sl Name}{\tt [m],} \ldots {\sl Name}{\tt [n]}%
+ {$\;\;$ Draw a spline through {\sl Name}{\tt [m],} \ldots {\sl Name}{\tt [n]}
with attribute {\sl linetype} {\tt dotted,} for example.
The calculated control points {\sl P[i]} satisfy approximately:
- {\sl P[0] = V[0];} {\sl P[i-1]/8 + P[i]*3/4 + P[i+1]/8 = V[i];}%
+ {\sl P[0] = V[0];} {\sl P[i-1]/8 + P[i]*3/4 + P[i+1]/8 = V[i];}
{\sl P[n] = V[n].} See m4 macro {\tt fitcurve.}}%
\macrodef{dfitpoints}{dfitpoints}{({\sl V,n,m,P,mp})}%
{dpictools}%
@@ -766,10 +779,9 @@
\macrodef{dimension\_}{dimension_}{(\linespec,{\sl offset},{\sl label},
D|H|W|{\sl blank width},{\sl tic offset},{\sl arrowhead })}%
{gen}%
- {macro for dimensioning diagrams;
- {\sl arrowhead=}{\tt -> | <-}}%
-\macrodef{diode}{diode}{(\linespec,%
-B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
+ {macro for dimensioning diagrams; {\sl arrowhead=}{\tt -> | <-}}%
+\macrodef{diode}{diode}{(\linespec,
+B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,
[R][E])}%
{cct}%
{diode:
@@ -815,7 +827,7 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
\macrodef{dlabel}{dlabel}{({\sl long},{\sl lat},{\sl label},{\sl
label},{\sl label},{\sl chars})}%
{cct}%
- {general triple label; {\sl chars:}%
+ {general triple label; {\sl chars:}
$X$ displacement {\tt {\sl long, lat}} with respect to the drawing
direction is from the centre of the last
line rather than the centre of the last {\tt [ ]};
@@ -825,8 +837,8 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
{\sl attributes})}%
{darrow}%
{Double line left turn 90 degrees. Attributes can be
- {\tt outline=({\sl r, g, b})|"{\sl color}";}%
- {\tt innershade=({\sl r, g, b})|"{\sl color}";}%
+ {\tt outline=({\sl r, g, b})|"{\sl color}";}
+ {\tt innershade=({\sl r, g, b})|"{\sl color}";}
where rgb values in parentheses or a defined color is specified.}%
\macrodef{Dline}{Dline}{(\linespec, {\sl parameters})}%
{darrow}%
@@ -847,7 +859,7 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
{See also {\tt Dline}.
Double line, truncated by half width at either end, closed
at either or both ends.
- {\sl parameters=}%
+ {\sl parameters=}
{\sl x}{\tt -}{\sl x} or
{\tt -}{\sl x} or
{\sl x}{\tt -} where {\sl x} is {\tt !} (half-width line)
@@ -900,9 +912,9 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
\macrodef{dright}{dright}{({\tt at} {\sl position}, {\sl line thickness},
{\sl attributes})}%
{darrow}%
- {Double line right turn 90 degrees. Attributes can be
- {\tt outline=({\sl r, g, b})|"{\sl color}";}%
- {\tt innershade=({\sl r, g, b})|"{\sl color}";}%
+ {Double line right turn 90 degrees. Attributes can be\\
+ {\tt outline=({\sl r, g, b})|"{\sl color}";}\\
+ {\tt innershade=({\sl r, g, b})|"{\sl color}";}\\
where rgb values in parentheses or a defined color is specified.}%
\macrodef{drjust}{drjust}{(at {\sl location})}%
{darrow}%
@@ -944,8 +956,8 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
{\tt diam={\sl expr};
circle={\sl circle attribs};}\\
{\tt GX}: box control mechanism, attribs:
- {\tt lgth={\sl expr}; wdth={\sl expr}; %
- box={\sl box attr};}%
+ {\tt lgth={\sl expr}; wdth={\sl expr};
+ box={\sl box attr};}
{\tt text={\sl char};}\\
{\tt H}: time delay closing\\
{\tt uH}: time delay opening\\
@@ -980,7 +992,7 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
\{ darrow(down\_,t) \}; darrow(right\_,t)}.
The attributes are
{\tt thick={\sl expr};} (line thickness in drawing units),
- {\tt innershade=({\sl r,g,b})|"{\sl color}";}%
+ {\tt innershade=({\sl r,g,b})|"{\sl color}";}
{\tt outline=({\sl r,g,b})|"{\sl color}";}. }%
\macrodef{dtor\_}{dtor_}{}%
{gen}%
@@ -990,11 +1002,12 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
{darrow}%
{Tturn dline arg1 degrees left (ccw).
Attributes can be
- {\tt outline=({\sl r, g, b})|"{\sl color}";}%
- {\tt innershade=({\sl r, g, b})|"{\sl color}";}%
+ {\tt outline=({\sl r, g, b})|"{\sl color}";}
+ {\tt innershade=({\sl r, g, b})|"{\sl color}";}
where rgb values in parentheses or a defined color is specified.}%
-%
+
\Letter{E}%
+
\macrodef{earphone}{earphone}{( U|D|L|R|{\sl degrees, size})}%
{cct}%
{earphone, {\sl In1} to {\sl In3} defined
@@ -1064,8 +1077,9 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
\macrodef{expe}{expe}{}%
{gen}%
{exponential, base $e$}%
-%
+
\Letter{F}%
+
\macrodef{f\_box}{f_box}{({\sl boxspecs},{\sl text},{\sl expr1},$\cdots$)}%
{gen}%
{like {\tt s\_box} but the text is overlaid on a box of identical size.
@@ -1111,7 +1125,7 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
{log}%
{General flipflop.
Arg 1 modifies the box (labelled Chip) default specification.
- Each of args 3 to 6 is null or a string of {\sl pinspecs}%
+ Each of args 3 to 6 is null or a string of {\sl pinspecs}
separated by semicolons ({\tt;}). A {\sl Pinspec} is either empty
or of the form
{\tt[}{\sl pinopts}{\tt]:[}{\sl label}{\tt[:}{\sl Picname}{\tt]]}.
@@ -1119,10 +1133,10 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
Pins are placed top to bottom or left to right along the box edges with
null {\sl pinspecs} counted for placement. Pins are named by side and number
by default; eg {\tt W1, W2, ..., N1, N2, ..., E1, ..., S1, ...} ; however,
- if {\tt:}{\sl Picname} is present in a {\sl pinspec} then {\sl Picname}%
+ if {\tt:}{\sl Picname} is present in a {\sl pinspec} then {\sl Picname}
replaces the default name.
A {\sl pinspec} label is text placed at the pin base. Semicolons are
- not allowed in labels; use, e.g., {\tt \char92{}char59\char123\char125}%
+ not allowed in labels; use, e.g., {\tt \char92{}char59\char123\char125}
instead.
To put a bar over a label, use {\tt lg\_bartxt(}{\sl label}{\tt)}.
The {\sl pinopts} are {\tt[N|L|M][E]};
@@ -1131,8 +1145,8 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
{\tt M}: active low in;
{\tt E}: edge trigger \seesect{Logicgates:}.\\
Optional arg 7 is the length of pins}%
-\macrodef{foreach\_}{foreach_}{(`{\sl variable}',{\sl actions},{\sl
- value1, value2, $\ldots$})}%
+\macrodef{foreach\_}{foreach_}{(`{\sl variable}',{\sl actions},%
+ {\sl value1, value2, $\ldots$})}%
{gen}%
{Clone of Loopover\_ by a different name:
Repeat {\sl actions} with {\sl variable} set successively to
@@ -1144,7 +1158,8 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
\macrodef{FTcap}{FTcap}{({\sl chars})}%
{cct}%
{Feed-through capacitor; example of a composite element derived from
- a two-terminal element. Defined points: {\sl .Start, .End, .C .T1 .T2 T}%
+ a two-terminal element. Defined points:
+ {\sl .Start, .End, .C, .T1, .T2, T}\\
Arg 1: {\tt A}: type A (default),
{\tt B}: type B,
{\tt C}: type C
@@ -1153,8 +1168,9 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
{cct}%
{fuse symbol, type$=$
{\tt A|B|C|D|S|HB|HC|SB} or {\tt dA=D}\seesect{Twoterminal:}}%
-%
+
\Letter{G}%
+
\macrodef{gap}{gap}{(\linespec,{\sl fill},A)}%
{cct}%
{gap with (filled) dots, A=chopped arrow between dots\seesect{Twoterminal:}}%
@@ -1172,13 +1188,18 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
\macrodef{G\_hht}{G_hht}{}%
{log}%
{gate half-height in {\tt L\_unit}s}%
-\macrodef{glabel\_}{glabel_}{}%
+\macrodef{geiger}{geiger}{(\linespec, r, {\sl diameter}, R,
+ {\sl body attributes, body name})}%
{cct}%
- {internal general labeller}%
+ {Wrapper that calls {\tt source} with identical arguments except
+ arg2, which is blank or {\tt r} for right orientation.}
+%\macrodef{glabel\_}{glabel_}{}%
+% {cct}%
+% {internal general labeller}%
%\macrodef{gpar\_}{gpar_}{({\sl element},{\sl element},{\sl separation})}%
% {cct}%
% {two same-direction elements in parallel}%
-\macrodef{gpolyline\_}{gpolyline_}{({\sl fraction},{\sl location}, ...)}%
+\macrodef{gpolyline\_}{gpolyline_}{({\sl fraction}, {\sl location}, ...)}%
{gen}%
{internal to {\tt gshade}}%
\macrodef{graystring}{graystring}{({\sl gray value})}%
@@ -1209,11 +1230,12 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
vertices, attempting to avoid sharp corners}%
\macrodef{gyrator}{gyrator}{({\sl box specs,space ratio,pin lgth,}[N][V])}%
{cct}%
- {Gyrator two-port wrapper for {\tt nport}, {\tt N} omits pin dots; {\tt V}%
+ {Gyrator two-port wrapper for {\tt nport}, {\tt N} omits pin dots; {\tt V}
gives a vertical orientation
\seesect{Composite:}}%
-%
+
\Letter{H}%
+
\macrodef{hatchbox}{hatchbox}{({\sl boxspec,hashsep,hatchspec,angle})
{\rm or} hatchbox({\sl keys})}%
{gen}%
@@ -1227,7 +1249,7 @@ B|b|CR|D|G|L|LE[R]|P[R]|S|Sh|T|U|V|v|w|Z|chars,%
{\tt fillcolor="{\sl color}"|({\sl r,g,b});}\\
{\tt hatchsep={\sl expr};}\\
{\tt hatchspec={\sl attributes};}\\
- {\tt angle={\sl expr};}%
+ {\tt angle={\sl expr};}
e.g.,
{\tt hatchbox(outlined "blue",{},dashed outlined "green" thick 0.4)};\\
also
@@ -1251,26 +1273,26 @@ n|e|s|w,{\sl length})}%
{Heater element with curved sides\seesect{Twoterminal:}.
{\tt R} means right orientation;
{\tt T} truncates leads to the width of the body.
- The {\sl keys} for the body are
- {\tt lgth={\sl expr};}%
+ The {\sl keys} for the body are\\
+ {\tt lgth={\sl expr};}
{\tt wdth={\sl expr};} (default {\tt lgth*2/5});
{\tt cycles={\sl expr};}%
{\tt line={\sl attributes};} (e.g., {\tt dotted, dashed, outlined})}%
\macrodef{heater}{heater}{({\sl linespec, ndivisions|keys, wid, ht,
boxspec}|[E[R][T]])}%
{cct}%
- {Heater element\seesect{Twoterminal:}. If arg 5 contains {\tt E,}%
- draws an {\tt heatere({\sl linespec, keys,} [R][T]),}%
+ {Heater element\seesect{Twoterminal:}. If arg 5 contains {\tt E,}
+ draws an {\tt heatere({\sl linespec, keys,} [R][T]),}
otherwise a
{\tt heatert({\sl linespec, nparts, wid, ht, boxspec})}}%
\macrodef{heatert}{heatert}{({\sl linespec, nparts|keys, wid, ht, boxspec})}%
{cct}%
{Two-terminal rectangular heater element\seesect{Twoterminal:}.
The {\sl keys} for the body are
- {\tt parts={\sl expr};}%
- {\tt lgth={\sl expr};}%
+ {\tt parts={\sl expr};}
+ {\tt lgth={\sl expr};}
{\tt wdth={\sl expr};} (default {\tt lgth*2/5});
- {\tt box={\sl body attributes};}%
+ {\tt box={\sl body attributes};}
(e.g., {\tt dotted, dashed, outlined, shaded}).
Args 3--5 are unused if any key is given}%
\macrodef{hexadecimal\_}{hexadecimal_}{($n$, [$m$])}%
@@ -1301,8 +1323,9 @@ n|e|s|w,{\sl length})}%
\macrodef{ht\_}{ht_}{}%
{gen}%
{height relative to current direction}%
-%
+
\Letter{I}%
+
\macrodef{ifdpic}{ifdpic}{({\sl if true},{\sl if false})}%
{gen}%
{test if dpic has been specified as pic processor}%
@@ -1314,8 +1337,7 @@ n|e|s|w,{\sl length})}%
{gen}%
{test if the second argument is a substring of the first; also
{\tt ifinstr({\sl string},{\sl string},{\sl if true},{\sl
- string},{\sl string},{\sl if true}, $\ldots$ {\sl if false})}%
- }%
+ string},{\sl string},{\sl if true}, $\ldots$ {\sl if false})} }%
\macrodef{ifmfpic}{ifmfpic}{({\sl if true},{\sl if false})}%
{gen}%
{test if mfpic has been specified as pic post-processor}%
@@ -1381,12 +1403,13 @@ n|e|s|w,{\sl length})}%
{corrected (old) gpic $int()$ function}%
\macrodef{IOdefs}{IOdefs}{(\linespec,{\sl label},[P|N]*,L|R) }%
{log}%
- {Define locations {\sl label}{\tt 1}, $\ldots$ {\sl label}{\tt n}%
+ {Define locations {\sl label}{\tt 1}, $\ldots$ {\sl label}{\tt n}
along the line; {\tt P}: label only;
{\tt N}: with {\tt NOT\_circle};
{\tt R}: circle to right of current direction }%
-%
+
\Letter{J}%
+
\macrodef{jack}{jack}{(U|D|L|R|{\sl degrees},{\sl chars})}%
{cct}%
{arg1: drawing direction; string arg2: {\tt R}: right orientation,
@@ -1402,9 +1425,9 @@ n|e|s|w,{\sl length})}%
{ Two-terminal solder jumper with named body parts.
The {\sl chars} character sequence specifies the jumper components,
and normally begins with {\tt C} and ends with {\tt D.} The character
- {\tt E} is an empty (blank) gap, {\tt J} is a filled gap, {\tt B}%
- is a box component. The components are named {\sl T1, T2, \ldots}%
- Examples: {\tt CED} is a simple open jumper (the default); {\tt CJD}%
+ {\tt E} is an empty (blank) gap, {\tt J} is a filled gap, {\tt B}
+ is a box component. The components are named {\sl T1, T2, \ldots}
+ Examples: {\tt CED} is a simple open jumper (the default); {\tt CJD}
closed; {\tt CEBED} three-contact open; {\tt CJBED} three-contact
open and closed.
The {\sl keys} are: {\tt type=}{\sl chars} as previously;
@@ -1412,21 +1435,23 @@ n|e|s|w,{\sl length})}%
{\tt wdth=}{\sl expr};
{\tt name=}{\sl chars} (the body name)%
\seesect{Twoterminal:}}%
-%
+
\Letter{K}%
+
\macrodef{KelvinR}{KelvinR}{({\sl cycles},[R],{\sl cycle wid})}%
{cct}%
- {IEEE resistor in a {\tt [ ]} block with Kelvin taps {\sl T1} and {\sl T2}%
+ {IEEE resistor in a {\tt [ ]} block with Kelvin taps {\sl T1} and {\sl T2}
\seesect{Composite:}}%
-%
+
\Letter{L}%
+
\macrodef{lamp}{lamp}{(\linespec, [R][T])}%
{cct}%
{Two-terminal incandescent lamp. {\tt T} truncates leads to the body width.
\seesect{Twoterminal:}}%
\macrodef{langle}{langle}{({\sl Start, End})}%
{gen}%
- {Angle in radians from horizontal of the line from {\sl Start}%
+ {Angle in radians from horizontal of the line from {\sl Start}
to {\sl End}.}%
\macrodef{larrow}{larrow}{({\sl label},{\tt ->|<-},{\sl dist})}%
{cct}%
@@ -1459,7 +1484,7 @@ n|e|s|w,{\sl length})}%
\macrodef{length3D}{length3D}{(x,y,z)}%
{3D}%
{Euclidean length of triple x,y,z}%
-\macrodef{LEtangent}{LEtangent}{({\sl Pos1, Centre, ellips wid, ellipse ht}%
+\macrodef{LEtangent}{LEtangent}{({\sl Pos1, Centre, ellips wid, ellipse ht,}
[R])}%
{gen}%
{ Left (right if arg5=R) tangent point of line
@@ -1498,23 +1523,21 @@ n|e|s|w,{\sl length})}%
{set line thickness in points}%
\macrodef{lin\_leng}{lin_leng}{({\sl line-reference})}%
{gen}%
- {length of a line, equivalent to {\sl line-reference}{\tt .len}%
+ {length of a line, equivalent to {\sl line-reference}{\tt .len}
with dpic}%
\macrodef{ljust\_}{ljust_}{}%
{gen}%
{ljust with respect to current direction}%
-\macrodef{llabel}{llabel}{({\sl label},{\sl label},{\sl label},[{\sl arg4}],%
- [{\sl block name}])}%
+\macrodef{llabel}{llabel}{( {\sl label}, {\sl label}, {\sl label},
+ {\sl relative position}, {\sl block name})}%
{cct}%
{Triple label on the left of the body of an element with respect to the
current direction \seesect{Labels:}. Labels are placed at the
- beginning, centre, and end of the last {\tt []} block (or a named
- {\tt []} block). Each label is treated as math by default, but is
- copied literally if it is in double quotes or defined by sprintf.
- {\sl Arg4} can be {\tt above,} {\tt below,} {\tt left,} or {\tt
- right} to supplement the default relative position. The fifth
- argument is the optional name of the {\tt []} block to be labelled,
- which is {\tt last []} by default}%
+ beginning, centre, and end of the last {\tt []} block (or a {\tt []} block
+ named or enumerated in arg5). Each label is treated as math by
+ default, but is copied literally if it is in double quotes or defined
+ by sprintf. {\sl Arg4} can be {\tt above,} {\tt below,} {\tt left,}
+ or {\tt right} to supplement the default relative position.}%
\macrodef{loc\_}{loc_}{({\sl x}, {\sl y})}%
{gen}%
{location adjusted for current direction}%
@@ -1531,7 +1554,7 @@ n|e|s|w,{\sl length})}%
\macrodef{loop}{loop}{({\sl initial assignments, test, loop end, statements})}%
{dpictools}%
{$\;\;$ C-like loop. Commas in arg3 and arg4 must
- be in quotes or parentheses. Example:
+ be in quotes or parentheses. Example:\\
{\tt loop(i=1, i<=3, i+=1, print i)} prints 1, 2, 3.}%
\macrodef{Loopover\_}{Loopover_}{(`{\sl variable}',{\sl actions},{\sl
value1, value2, $\ldots$})}%
@@ -1543,7 +1566,7 @@ n|e|s|w,{\sl length})}%
{\sl fill},
{\sl zero ht})} {gen}%
{for lollipop graphs: filled circle with stem to
- (xcoord,zeroht)}%
+ {\tt ({\sl xcoord,zeroht})}}%
\macrodef{lp\_xy}{lp_xy}{}%
{log}%
{coordinates used by {\tt lg\_pin}}%
@@ -1564,8 +1587,9 @@ n|e|s|w,{\sl length})}%
\macrodef{L\_unit}{L_unit}{}%
{log}%
{logic-element grid size}%
-%
+
\Letter{M}%
+
\macrodef{m4\_arrow}{m4_arrow}{(\linespec,{\sl ht},{\sl wid})}%
{gen}%
{arrow with adjustable head, filled when possible}%
@@ -1597,8 +1621,7 @@ n|e|s|w,{\sl length})}%
{memristor element\seesect{Twoterminal:}}%
\macrodef{microphone}{microphone}{( A|U|D|L|R|{\sl degrees, size, attributes})}%
{cct}%
- {microphone; if arg1 = A: upright mic, otherwise arg1 sets
- direction
+ {microphone; if arg1 = A: upright mic, otherwise arg1 sets direction
of standard microphone with {\sl In1} to {\sl In3} defined
\seesect{Composite:}}%
\macrodef{Min}{Min}{({\sl arg, arg, $\ldots$})}%
@@ -1615,7 +1638,7 @@ n|e|s|w,{\sl length})}%
({\sl Position1,Position2,Position3,length,line attributes})}%
{gen}%
{e.g., {\tt mitre\_(A,B,C)} draws angle ABC with legs
- of length arg4 (default {\tt linethick bp\_\_/2}); sets {\tt Here}%
+ of length arg4 (default {\tt linethick bp\_\_/2}); sets {\tt Here}
to Position2
\seesect{Corners:}}%
\macrodef{mm\_\_}{mm__}{}%
@@ -1656,7 +1679,7 @@ n|e|s|w,{\sl length})}%
numbers, {\tt H} display hexadecimal pin numbers, {\tt X} do not
print pin numbers, {\tt N[{\sl n}]} puts Sel or Sel$0$ .. Sel$n$
at the top (i.e., to the left of the drawing direction), {\tt
- S[{\sl n}]} puts the Sel inputs at the bottom (default) {\tt OE}%
+ S[{\sl n}]} puts the Sel inputs at the bottom (default) {\tt OE}
({\tt N}: negated) {\tt OE} pin \seesect{Logicgates:}}%
\macrodef{Mux\_wid}{Mux_wid}{}%
{cct}%
@@ -1664,8 +1687,9 @@ n|e|s|w,{\sl length})}%
\macrodef{Mx\_pins}{Mx_pins}{}%
{log}%
{max number of gate inputs without wings}%
-%
+
\Letter{N}%
+
\macrodef{NAND\_gate}{NAND_gate}{({\tt {\sl n}, [N][B],
[{\sl wid}, [{\sl ht}]], {\sl attributes}})}%
{log}%
@@ -1756,8 +1780,9 @@ nw,nn,ne,ns,pin lgth,style, other commands})}%
Otherwise, arg1 can be a sequence of letters {\tt P|N} to define
normal or negated inputs.
\seesect{Logicgates:}}%
-%
+
\Letter{O}%
+
\macrodef{opamp}{opamp}{\tt (\linespec,{\sl label, label, size|keys, chars,
other commands})}%
{cct}%
@@ -1794,13 +1819,14 @@ nw,nn,ne,ns,pin lgth,style, other commands})}%
{\tt [N]P}: XOR arc;\\
{\tt [N]O}: output; C=center.\\
Otherwise, arg1 can be a sequence of letters {\tt P|N} to define
- normal or negated inputs. If arg5 contains {\tt shaded rgbstring(...)}%
+ normal or negated inputs. If arg5 contains {\tt shaded rgbstring(...)}
the arguments of {\tt rgbstring} may not contain parentheses.}%
\macrodef{OR\_rad}{OR_rad}{}%
{log}%
{radius of OR input face in {\tt L\_unit}s}%
-%
+
\Letter{P}%
+
\macrodef{parallel\_}{parallel_}{(\char96{\sl elementspec}\char39,%
\char96{\sl elementspec}\char39 $\ldots$)}%
{cct}%
@@ -1843,10 +1869,10 @@ nw,nn,ne,ns,pin lgth,style, other commands})}%
\macrodef{pi\_}{pi_}{}%
{gen}%
{$\pi$}%
-\macrodef{plug}{plug}{(U|D|L|R|{\sl degrees},[2|3][R])}%
+\macrodef{plug}{plug}{\smash{(U|D|L|R|{\sl degrees},[2|3][R])}}%
{cct}%
- {arg1: drawing direction; string arg2: {\tt R} right orientation,
- {\tt 2|3} number of conductors \seesect{Composite:}}%
+ {Phone plug; arg1: drawing direction; arg2: {\tt R} right orientation,
+ {\tt 2|3} number of conductors\seesect{Composite:}}%
\macrodef{pmod}{pmod}{({\sl integer}, {\sl integer})}%
{gen}%
{+ve $\hbox{mod}(M,N)$ e.g., $\hbox{\tt pmod}(-3,5)=2$}%
@@ -1865,19 +1891,22 @@ nw,nn,ne,ns,pin lgth,style, other commands})}%
{\tt line={\sl line attributes};} (e.g., {\tt dashed shaded "blue"}),
{\tt rot={\sl degrees};} (angle of first internal vertex {\tt V[0]}),
{\tt side|rad={\sl expression};} size by side length or by radius.
+ {\tt radv={\sl expression};} radius of rounded vertices. If this is
+ nonzero then any fill has to be by {\tt rgbfill(r,g,b,polygon(...)).}
The internal defined points are the centre {\tt C} and vertices
- {\tt V[0]} $\ldots$ {\tt V[{\sl n}-1]}. }%
+ {\tt V[0]} $\ldots$ {\tt V[{\sl n}]}. }%
\macrodef{posarray}{posarray}{({\sl Name, Position1, Position2, \ldots})}%
{dpictools}%
{$\;\;$ Populate a singly-subscripted array of positions:
- {\tt {\sl Name}[1]:{\sl Position1;}%
+ {\tt {\sl Name}[1]:{\sl Position1;}
{\sl Name}[2]={\sl Position2;} \ldots}.}%
\macrodef{posarray2}{posarray2}{({\sl Name, expr, Position1, Position2,
\ldots})}%
{dpictools}%
{$\;\;$ Populate a doubly-subscripted array of positions:
- {\tt {\sl Name}[{\sl expr},1]={\sl Position1;}%
+ {\tt {\sl Name}[{\sl expr},1]={\sl Position1;}
{\sl Name}[{\sl expr},2]={\sl Position2;} \ldots}.}%
+
\macrodef{potentiometer}{potentiometer}{(\linespec,%
{\sl cycles},{\sl fractional pos},{\sl length},$\cdots$)} {cct}%
{resistor with taps T1, T2, $\ldots$
@@ -1905,7 +1934,7 @@ nw,nn,ne,ns,pin lgth,style, other commands})}%
\macrodef{PtoL}{PtoL}{({\sl position}, U|D|L|R|{\sl degrees}, {\sl length}) }%
{gen}%
{Evaluates to {\tt from {\sl position} to
- {\sl position} + Rect\_({\sl length, angle}) }%
+ {\sl position} + Rect\_({\sl length, angle}) }
from the polar-coordinate data in the arguments }%
\macrodef{pt\_\_}{pt__}{}%
{gen}%
@@ -1918,7 +1947,7 @@ nw,nn,ne,ns,pin lgth,style, other commands})}%
{gen}%
{Key-value definition.
If {\sl string} contains the substring
- {\sl key}{\tt =}{\sl expr} then macro {\tt m4{\sl key}}%
+ {\sl key}{\tt =}{\sl expr} then macro {\tt m4{\sl key}}
is defined using {\tt pushdef()} to
expand to {\tt ({\sl expr})}, or to {\tt ({\sl default value})} if the
substring is missing. Arg 1 can contain several such substrings separated
@@ -1927,10 +1956,15 @@ nw,nn,ne,ns,pin lgth,style, other commands})}%
\seesect{Macroarguments:}}%
\macrodef{pushkeys\_}{pushkeys_}{({\sl string, key sequence})}%
{gen}%
- {Multiple key-value definitions. Arg 2 is a semicolon-separated
- sequence of terms of the form {\tt {\sl key}:{\sl default value}:[N]}%
+ {Multiple key-value definitions. Arg2 is a semicolon-separated
+ sequence of terms of the form {\tt {\sl key}:{\sl default-value}[:N]}
which must contain no semicolons and the default values contain no colons.
+ A key may not be the tail of another key.
Macro {\tt pushkey\_} is applied to each of the terms in order.
+ Quote arg2 for robustness and, if an argument depends on a previous
+ argument, add quotes to delay expansion; for example
+ {\tt pushkeys\_(\char96\$1\char39,\char96{}hght:0.5;
+ wdth:m4\char96\char39hght/2\char39)}.
\seesect{Macroarguments:}}%
\macrodef{pvcell}{pvcell}{({\sl linespec, width, height, attributes})}%
{cct}%
@@ -1938,8 +1972,9 @@ nw,nn,ne,ns,pin lgth,style, other commands})}%
\macrodef{px\_\_}{px__}{}%
{gen}%
{absolute SVG screen pixels}%
-%
+
\Letter{R}%
+
\macrodef{randn}{randn}{({\sl array name, $n,$ mean, stddev})}%
{dpictools}%
{$\;\;$ Assign $n$ Gaussian random numbers in array
@@ -1973,6 +2008,7 @@ degrees, attributes})}%
{\tt SOR}: slow operating and release;\\
{\tt SR}: slow release;\\
{\tt HS}: high speed;\\
+ {\tt S}: diagonal slash;\\
{\tt NAC}: unaffected by AC current;\\
{\tt AC}: AC current;\\
{\tt ML}: mechanically latched;\\
@@ -1997,19 +2033,20 @@ degrees, attributes})}%
\macrodef{resetrgb}{resetrgb}{}%
{gen}%
{cancel {\tt r\_, g\_, b\_} color definitions}%
-\macrodef{resistor}{resistor}{(\linespec, n|E, {\sl chars}, {\sl cycle wid})}%
+\macrodef{resistor}{resistor}{(\linespec, n, {\sl chars}, {\sl cycle wid})}%
{cct}%
{resistor, n cycles (default 3), {\sl chars:}\\
{\tt AC}: general complex element,\\
{\tt E}: {\tt ebox},\\
{\tt ES}: {\tt ebox} with slash,\\
+ {\tt F}: FDNR (frequency-dependent negative resistor),\\
{\tt Q}: offset,\\
{\tt H}: squared,\\
{\tt N}: IEEE,\\
{\tt B}: not burnable,\\
{\tt V}: varistor variant,\\
- {\tt R}: right-oriented,\\
- {\sl cycle width} (default {\tt dimen\_}$/6$)
+ {\tt R}: right-oriented;\\
+ Arg4: {\sl cycle width} (default {\tt dimen\_}$/6$)
\seesect{Twoterminal:}}%
\macrodef{resized}{resized}{({\sl factor},`{\sl macro name}',args)}%
{cct}%
@@ -2048,38 +2085,37 @@ degrees, attributes})}%
{dpictools}%
{$\;\;$ rgb color triple to hsv with {\sl h} range 0 to 360.}%
\macrodef{RightAngle}{RightAngle}{({\sl Pos1, Pos2, Pos3, line len,
- attributes})} {gen}%
- {Draw a right-angle symbol at {\sl Pos2}, of size
- given by arg4. Arg5 =
- line attributes, e.g., {\tt outlined "gray"}}%
+ attributes})}%
+ {gen}%
+ {Draw a right-angle symbol at {\sl Pos2}, of size given by arg4.
+ Arg5 = line attributes, e.g., {\tt outlined "gray"} or e.g. to add a dot,
+ {\tt ;dot(at last line.c)}}%
\macrodef{right\_}{right_}{}%
{gen}%
{set current direction right \seesect{Placing:}}%
\macrodef{rjust\_}{rjust_}{}%
{gen}%
{right justify with respect to current direction}%
-\macrodef{rlabel}{rlabel}{({\sl label},{\sl label},{\sl label},[{\sl arg4}],%
- [{\sl block name}])}%
+\macrodef{rlabel}{rlabel}{( {\sl label}, {\sl label}, {\sl label},
+ {\sl relative position}, {\sl block name})}%
{cct}%
{Triple label on the right of the body of an element with respect to the
current direction \seesect{Labels:}. Labels are placed at the
- beginning, centre, and end of the last {\tt []} block (or a named
- {\tt []} block). Each label is treated as math by default, but is
- copied literally if it is in double quotes or defined by sprintf.
- {\sl Arg4} can be {\tt above,} {\tt below,} {\tt left,} or {\tt
- right} to supplement the default relative position. The fifth
- argument is the optional name of the {\tt []} block to be labelled,
- which is {\tt last []} by default}%
+ beginning, centre, and end of the last {\tt []} block (or a {\tt []} block
+ named or enumerated in arg5). Each label is treated as math by
+ default, but is copied literally if it is in double quotes or defined
+ by sprintf. {\sl Arg4} can be {\tt above,} {\tt below,} {\tt left,}
+ or {\tt right} to supplement the default relative position.}%
\macrodef{rot3Dx}{rot3Dx}{({\sl radians,x,y,z})}%
{3D} {rotates x,y,z about x axis}%
\macrodef{rot3Dy}{rot3Dy}{({\sl radians,x,y,z})}%
{3D} {rotates x,y,z about y axis}%
\macrodef{rot3Dz}{rot3Dz}{({\sl radians,x,y,z})}%
{3D} {rotates x,y,z about z axis}%
-\macrodef{rotbox}{rotbox}{({\sl wid,ht,type},[r|t={\sl val}])}%
+\macrodef{rotbox}{rotbox}{({\sl wid,ht,attributes},[r|t={\sl val}])}%
{gen}%
{box oriented in current direction in {\tt [ ]} block;
- {\sl type=} e.g. {\tt dotted shaded "green".} Defined internal
+ {\sl attributes:} e.g. {\tt dotted shaded "green".} Defined internal
locations: N, E, S, W (and NE, SE, NW, SW if arg4 is blank). If arg4
is {\tt r=}{\sl val} then corners have radius {\sl val}. If arg4 is
{\tt t=}{\sl val} then a spline with tension {\sl val} is used to draw
@@ -2097,8 +2133,7 @@ degrees, attributes})}%
{rotate {\sl x,y} by theta radians}%
\macrodef{round}{round}{(at {\sl location,line thickness,attributes})}%
{gen}%
- {filled circle for rounded corners; attributes={\tt colored
- "gray"}%
+ {filled circle for rounded corners; attributes={\tt colored "gray"}
for example; leaves {\tt Here} unchanged if arg1 is blank
\seesect{Corners:}}%
\macrodef{rpoint\_}{rpoint_}{(\linespec)}%
@@ -2148,13 +2183,14 @@ degrees, attributes})}%
\macrodef{rvec\_}{rvec_}{({\sl x},{\sl y})}%
{gen}%
{location relative to current direction}%
-%
+
\Letter{S}%
+
\macrodef{sarrow}{sarrow}{(\linespec,{\sl keys})}%
{gen}%
{Single-segment, single-headed special arrows with {\sl keys}:\\
{\tt type=}{\tt O[pen]} (default)
- | {\tt D[iamond]} | {\tt C[rowfoot]} | {\tt P[lain]}%
+ | {\tt D[iamond]} | {\tt C[rowfoot]} | {\tt P[lain]}
| {\tt R[ight]} | {\tt L[eft]} {\tt ;}\\
{\tt wdth=}{\sl expression}{\tt ;} (default {\tt arrowwid})\\
{\tt lgth=}{\sl expression}{\tt ;} (default {\tt arrowht})\\
@@ -2169,8 +2205,9 @@ degrees, attributes})}%
\macrodef{s\_box}{s_box}{({\sl text},{\sl expr1},$\cdots$)}%
{gen}%
{generate dimensioned text string using {\tt\char92{}boxdims} from
- {\tt boxdims.sty}. Two or more args are passed to {\tt sprintf()}%
+ {\tt boxdims.sty}. Two or more args are passed to {\tt sprintf()}
(default 90) degrees \seesect{Interaction:}}%
+
\macrodef{sbs}{sbs}{({\sl linespec, chars, label})}%
{cct}%
{Wrapper to place an SBS thyristor as a two-terminal element with
@@ -2191,17 +2228,22 @@ degrees, attributes})}%
\seesect{Semiconductors:}}%
\macrodef{s\_dp}{s_dp}{({\sl name},{\sl default})}%
{gen}%
- {depth of the most recent (or named) {\tt s\_box}%
+ {depth of the most recent (or named) {\tt s\_box}
\seesect{Interaction:}}%
\macrodef{series\_}{series_}{({\sl elementspec}, {\sl elementspec},
$\ldots$)}%
{cct}%
{ Series combination in a {\tt []} block of elements
- with shortened default length. An {\sl elementspec} is of the
- form {\tt [{\sl Label}:] {\sl element}; [{\sl attributes}]},
- where an {\sl attribute} is of the form {\tt [llabel($\ldots$);] |
- [rlabel($\ldots$);] [b\_current($\ldots$);]}. Internal points {\tt
- Start}, {\tt End}, and {\tt C} are defined
+ with shortened default length.
+ Each argument is an elementspec of the form\\
+ {\tt[Sep={\sl val};][{\sl Label}:]{\sl element};[{\sl attributes}]} where
+ an {\sl attribute} is of the form\\
+ {\tt[llabel($\ldots$);]|[rlabel($\ldots$);]|[b\_current($\ldots$);]}.\\
+ An argument may also be {\tt series\_($\ldots$)} or {\tt
+ parallel\_($\ldots$)} {\em without} attributes or quotes.
+ An element may have normal arguments but should not
+ change the drawing direction.
+ Internal points {\tt Start}, {\tt End}, and {\tt C} are defined
\seesect{Seriesandparallel:} }%
\macrodef{se\_}{se_}{}%
{gen}%
@@ -2217,7 +2259,7 @@ $\ldots$)}%
\macrodef{setkey\_}{setkey_}{({\sl string, key, default,}[N])}%
{gen}%
{Key-value definition, like {\tt pushkey\_()} but the resulting
- macro is defined using {\tt define()} rather than {\tt pushdef().}%
+ macro is defined using {\tt define()} rather than {\tt pushdef().}
\seesect{Macroarguments:}}%
\macrodef{setkeys\_}{setkeys_}{({\sl string, key sequence})}%
{gen}%
@@ -2251,11 +2293,10 @@ justification},cw|ccw,
\macrodef{sfgbelow}{sfgbelow}{}%
{cct}%
{like below but with extra space}%
-\macrodef{sfg\_init}{sfg_init}{({\sl default line len, node rad,
-arrowhd len,
- arrowhd wid}), (reads {\tt libcct.m4})} {cct}%
- {initialization of signal
- flow graph macros}%
+\macrodef{sfg\_init}{sfg_init}{({\sl default line len, node rad, arrowhd len,
+ arrowhd wid}), (reads {\tt libcct.m4})}
+ {cct}%
+ {initialization of signal flow graph macros}%
\macrodef{sfgline}{sfgline}{(\linespec,{\sl text},{\tt
sfgabove|sfgbelow|ljust|rjust},{\sl line attributes})}%
{cct}%
@@ -2265,7 +2306,7 @@ arrowhd len,
circle attributes})}%
{cct}%
{small circle default white interior, with text label. The default
- label position is inside if the diameter is bigger than {\tt textht}%
+ label position is inside if the diameter is bigger than {\tt textht}
and {\tt textwid}; otherwise it is {\tt sfgabove.} Options such as
color, fill, or line thickness can be given, e.g.,
{\tt thick 0.8 outlined "red" shaded "orange"}. }%
@@ -2279,11 +2320,19 @@ arrowhd len,
\macrodef{shade}{shade}{({\sl gray value},{\sl closed line specs})}%
{gen}%
{Fill arbitrary closed curve. Note: when producing pdf via pdflatex, line
- thickness changes within this macro must be made via the {\tt linethick}%
+ thickness changes within this macro must be made via the {\tt linethick}
environment variable rather than by the {\tt thickness} line attribute}%
\macrodef{shadebox}{shadebox}{(box {\sl attributes, shade width})}%
{gen}%
{Box with edge shading. Arg2 is in points. See also {\tt shaded} }%
+\macrodef{shadedball}{shadedball}{({\sl radius, highlight radius,
+ highlight degrees, initial gray, final gray} | ({\sl rf,gf,bf}))}%
+ {3D}%
+ { Shaded ball in {\tt [ ]} box.
+ The highlight is by default at {\sl radius}*3/5 and angle 110 deg
+ (or arg2 deg); if setlight has been invoked then its azimuth and
+ elevation arguments determine highlight position. Arg5 can be a
+ parenthesized rgb color.}
\macrodef{ShadedPolygon}{ShadedPolygon}{({\sl vertexseq, line attributes,
degrees, colorseq})} {gen}%
{Draws the polygon specified in arg1 and
@@ -2293,35 +2342,49 @@ arrowhd len,
(or names) of the polygon in cw or ccw order. A {\sl colorseq} is of
the form 0, r0,g0,b0, {\sl frac1},r1,g1,b1, {\sl frac2},r2,g2,b2,
\ldots 1,rn,gn,bn with $0 < \hbox{\sl frac1} < \hbox{\sl frac2} \ldots 1$ }%
-\macrodef{ShadeObject}{ShadeObject}{({\sl drawroutine name, n, colorseq})}%
+\macrodef{ShadeObject}{ShadeObject}{({\sl drawroutine, n, colorseq})}%
{dpictools}%
- {$\;\;$ Fill an area in a {\tt []} block with graded color
+ {$\;\;$
+ Fill an area in a {\tt []} block with graded color
defined by {\sl colorseq,} an indexed sequence of rgb colors:
- {\sl 0,r0,g0,b0,}%
- {\sl frac1,r1,g1,b1,}%
- {\sl frac2,r2,g2,b2,}%
+ \fra{0}{\sl,r0,g0,b0,}
+ \fra{1}{\sl,r1,g1,b1,}
\ldots
- {\sl 1,rn,gn,bn}%
- with $0 < \hbox{\sl frac1}$ $< \hbox{\sl frac2} <$ $\ldots < 1.$ The macro
- {\sl drawroutine{\tt(}frac, r, g, b{\tt)}} typically draws a colored line
+ \fra{n}{\sl,rn,gn,bn} with\\
+ $0 \leq \fra{0} < \fra{1}$
+ $< \fra{2} <$
+ $\ldots$
+ $\fra{n} \leq 1.$\\
+ (Often $\fra{0} = 0$ and $\fra{n} = 1.$)
+ The dpic macro\\
+ {\sl drawroutine{\tt(}frac, r, g, b{\tt)}}\\
+ typically draws a colored line
and must be defined according to the area to be filled.
- The routine is called $n{+}1$ times for
- $\hbox{\sl frac}= 0, 1/n, 2/n, \ldots 1$ with rgb arguments interpolated
- in hsv space between {\sl colorseq} points.
+ This routine is called $n{+}1$ times for
+ $\fra{}= \fra{0},\;$
+ $\fra{0} + 1/n\times(\fra{n}{-}\fra{0}),$
+ $\fra{0} + 2/n\times(\fra{n}{-}\fra{0}),$
+ \ldots
+ \fra{n}\\
+ (i.e., often
+ $\fra{} = 0, 1/n, 2/n, \ldots 1$)\\
+ with rgb
+ arguments interpolated in hsv space between {\sl colorseq} points
+ (which are specified in rgb-space).
Example (shade a box with 101 graded-color lines):\\
{\tt B: box\\
define HorizShade \lbr\ line right B.wid \textbackslash\\
- $\;$ thick B.ht/100/(1bp\_\_) from (0,-(\$1)*B.ht) \textbackslash\\
- $\;$ outlined rgbstring(\$2,\$3,\$4) \rbr;}%
- {\tt ShadeObject(HorizShade,100, 0,1,0,0, 1,0,0,1) \textbackslash\\
- $\;$ at B}.}%
+ $\;$ from (0,-(\char36{}1)*B.ht) \textbackslash\\
+ $\;$ outlined rgbstring(\char36{}2,\char36{}3,\char36{}4) \rbr;}\\
+ {\tt ShadeObject(HorizShade, B.ht/lthick, 0,1,0,0, 1,0,0,1) at B}.
+ }%
\macrodef{shadowed}{shadowed}{(box|circle|ellipse|line,
{\sl position spec, keys})}%
{gen}%
{ Object with specified shadow. {\sl possspec} is e.g.,
{\tt with .w at ...} or {\tt at} {\sl position}.
The {\sl keys} are
- {\tt attrib=}{\sl object attributes}{\tt ;}%
+ {\tt attrib=}{\sl object attributes}{\tt ;}
{\tt shadowthick=}{\sl expr}{\tt ;} (default {\tt linethick*)}5/4),
{\tt shadowcolor=}{\sl string}{\tt ;} (default {\tt "gray"}),
{\tt shadowangle=}{\sl expr}{\tt ;} (default $-45$)
@@ -2370,6 +2433,7 @@ arrowhd len,
e.g., to draw a dashed sine curve, amplitude {\sl a},
of {\sl n} cycles of length {\sl x} from {\sl A}, {\tt
sinusoid(a,twopi\_*n/x,-pi\_/2,0,x,dashed) with .Start at A}}%
+
\macrodef{sl\_box}{sl_box}{({\sl stem linespec, keys, stem object})}%
{SLD}%
{One-terminal SLD element: argument 1 is a \linespec\ to define the stem
@@ -2402,7 +2466,7 @@ arrowhd len,
{\tt C} for a curved breaker; adding a {\tt D} puts drawout elements
in the input and output leads.
Otherwise, the arguments are as for
- \MR{sl_ttbox}{\tt sl\_ttbox}%
+ \MR{sl_ttbox}{\tt sl\_ttbox}
\seesect{SingleLine:}}%
\macrodef{sl\_busbar}{sl_busbar}{({\sl linespec, np, keys})}%
{SLD}%
@@ -2469,19 +2533,19 @@ arrowhd len,
Argument 3 is null for no breaker in the stem, {\tt C} for a default
closed breaker, {\tt O} for an open breaker, {\tt X,} {\tt /,} or \bsl\ for
these marks, or
- \MR{sl_ttbox}{\tt sl\_ttbox}%
+ \MR{sl_ttbox}{\tt sl\_ttbox}
key-value pairs defining box attributes for the breaker
(default name {\sl Br})
- \label{sl_disk}%
+ \label{sl_disk}
\seesect{SingleLine:}}%
\macrodef{sl\_drawout}{sl_drawout}{({\sl linespec, keys,} R)}%
{SLD}%
{Two-terminal SLD element: argument 1 is a \linespec\ as for ordinary
two-terminal elements.
- Argument 2 contains semicolon (;)-separated key-value body attributes:
+ Argument 2 contains semicolon (;)-separated key-value body attributes:\\
{\tt type=T} (for truncated leads);
- {\tt lgth={\sl{}expr},}%
+ {\tt lgth={\sl{}expr},}
{\tt wdth={\sl{}expr}} (body size);
{\tt name={\sl{}Name}} (default {\sl Body});
{\tt line={\sl{}pic line attributes}}; (e.g., {\tt thick 2})
@@ -2498,7 +2562,7 @@ arrowhd len,
Argument 3 is null for no breaker in the stem, {\tt C} for a default
closed breaker, {\tt O} for an open breaker, {\tt X,} {\tt /,} or \bsl\ for
these marks, or
- \MR{sl_ttbox}{\tt sl\_ttbox}%
+ \MR{sl_ttbox}{\tt sl\_ttbox}
key-value pairs defining box attributes for the breaker
(default name {\sl Br})
\seesect{SingleLine:}}%
@@ -2518,19 +2582,20 @@ arrowhd len,
Argument 3 is null for no breaker in the stem, {\tt C} for a default
closed breaker, {\tt O} for an open breaker, {\tt X,} {\tt /,} or \bsl\ for
these marks, or
- \MR{sl_ttbox}{\tt sl\_ttbox}%
+ \MR{sl_ttbox}{\tt sl\_ttbox}
key-value pairs defining box attributes for the breaker
(default name {\sl Br})
\seesect{SingleLine:}}%
\macrodef{sl\_inverter}{sl_inverter}{({\sl ttbox args})}%
{SLD}%
{Two-terminal SLD element: the arguments are as for
- \MR{sl_ttbox}{\tt sl\_ttbox}%
+ \MR{sl_ttbox}{\tt sl\_ttbox}
\seesect{SingleLine:}}%
+
\macrodef{sl\_lamp}{sl_lamp}{({\sl stem linespec, keys, breaker})}%
{SLD}%
{One-terminal SLD element: the arguments are as for
- \MR{sl_disk}{\tt sl\_disk}%
+ \MR{sl_disk}{\tt sl\_disk}
\seesect{SingleLine:}}%
\macrodef{sl\_load}{sl_load}{({\sl stem linespec, keys, breaker})}%
{SLD}%
@@ -2549,7 +2614,7 @@ arrowhd len,
Argument 3 is null for no breaker in the stem, {\tt C} for a default
closed breaker, {\tt O} for an open breaker, {\tt X,} {\tt /,} or \bsl\ for
these marks, or
- \MR{sl_ttbox}{\tt sl\_ttbox}%
+ \MR{sl_ttbox}{\tt sl\_ttbox}
key-value pairs defining box attributes for the breaker
(default name {\sl Br})
\seesect{SingleLine:}}%
@@ -2571,7 +2636,7 @@ arrowhd len,
Argument 3 is null for no breaker in the stem, {\tt C} for a default
closed breaker, {\tt O} for an open breaker, {\tt X,} {\tt /,} or \bsl\ for
these marks, or
- \MR{sl_ttbox}{\tt sl\_ttbox}%
+ \MR{sl_ttbox}{\tt sl\_ttbox}
key-value pairs defining box attributes for the breaker
(default name {\sl Br})
\seesect{SingleLine:}}%
@@ -2587,8 +2652,7 @@ arrowhd len,
Argument 3 is null for no breaker in the input lead, {\tt C} for a default
closed breaker, {\tt O} for an open breaker, {\tt X,} {\tt /,} or \bsl\ for
- these marks, or
- key-value pairs as above defining breaker attributes
+ these marks, or key-value pairs as above defining breaker attributes
except that the default breaker name is {\sl BrI}.
Argument 4 defines the breaker in the output lead as for argument 3
@@ -2597,7 +2661,7 @@ arrowhd len,
\macrodef{sl\_rectifier}{sl_rectifier}{({\sl ttbox args})}%
{SLD}%
{Two-terminal SLD element: the arguments are as for
- \MR{sl_ttbox}{\tt sl\_ttbox}%
+ \MR{sl_ttbox}{\tt sl\_ttbox}
\seesect{SingleLine:}}%
\macrodef{sl\_slash}{sl_slash}{(at {\sl position, keys,}%
[$n$:]R|L|U|D|{\sl degrees})}%
@@ -2625,8 +2689,8 @@ arrowhd len,
Argument 3 is colon (:)-separated sequence of up to three breaker
attribute specifications for the input, output, and teriary breaker
- in order. A null or blank means no breaker, {\tt tt\_breaker}%
- specifications otherwise. Default breaker names are {\sl BrI}%
+ in order. A null or blank means no breaker, {\tt tt\_breaker}
+ specifications otherwise. Default breaker names are {\sl BrI}
and {\sl BrO} as for
{\tt sl\_transformer,} and {\sl Br} for the third breaker.
@@ -2699,7 +2763,7 @@ arrowhd len,
Argument 4 defines the breaker in the output lead as for argument 3
except that the default breaker name is {\sl BrO}.
- \label{sl_ttbox}%
+ \label{sl_ttbox}
\seesect{SingleLine:}}%
\macrodef{s\_name}{s_name}{}%
{gen}%
@@ -2713,37 +2777,39 @@ arrowhd len,
{dpictools}%
{$\;\;$ Trapezoid formed from a box with top corners displaced right by
$x$ offset and right corners displaced up by $y$ offset.}%
-\macrodef{source}{source}{(\linespec,
- V|v|tv|I|i|ti|ii|AC|B|F|G|H|J|Q|L|N|P|S[C[r]]|E[r]]|T|X|U|{\sl other}, {\sl
- diameter},R)}%
+\macrodef{source}{source}{(\linespec, {\sl char or chars}, {\sl diameter},R,
+ {\sl body attributes, body name})}%
{cct}%
- {source, arg2 blank or:\\
- {\tt V}: voltage source;\\
- {\tt v}: alternate voltage source;\\
- {\tt tv}: truncated-bar alternate voltage source;\\
- {\tt I}: current source;\\
- {\tt i}: alternate current source;\\
- {\tt ti}: truncated-bar alternate current source;\\
- {\tt ii}: double arrow current source; AC: AC source;\\
+ {Source; arg2 blank or:\\
+ {\tt AC}: AC source;\\
{\tt B}: bulb;\\
{\tt F}: fluorescent;\\
{\tt G}: generator;\\
{\tt H}: step function;\\
+ {\tt I}: current source;\\
+ {\tt i}: alternate current source;\\
+ {\tt ii}: double arrow current source;\\
+ {\tt ti}: truncated-bar alternate current source;\\
{\tt L}: lamp;\\
{\tt N}: neon;\\
+ {\tt NA}: neon 2;\\
+ {\tt NB}: neon 3;\\
{\tt P}: pulse;\\
{\tt Q}: charge;\\
{\tt R}: ramp;
- {\tt r}: right orientation;
{\tt S}: sinusoid;\\
- {\tt SC}: quarter arc;\\
- {\tt SE}: arc;\\
+ {\tt SC}: quarter arc, {\tt SCr} right orientation;\\
+ {\tt SE}: arc, {\tt SEr} right orientation;\\
{\tt T}: triangle;\\
{\tt U}: square-wave;\\
+ {\tt V}: voltage source;\\
{\tt X}: interior X;\\
+ {\tt v}: alternate voltage source;\\
+ {\tt tv}: truncated-bar alternate voltage source;\\
other: custom interior label or waveform;\\
arg 4: R: reversed polarity;\\
- arg 5 modifies the circle with e.g., color or fill
+ arg 5 modifies the circle (body) with e.g., color or fill;\\
+ arg 6 names the body {\tt [ ]} block
\seesect{Twoterminal:}}%
\macrodef{speaker}{speaker}{( U|D|L|R|{\sl degrees},{\sl size},H,attributes)}%
{cct}%
@@ -2775,8 +2841,7 @@ arrowhd len,
{Stack arg 2, arg 3, ... onto the named stack up to a blank arg}%
\macrodef{stackcopy\_}{stackcopy_}{(`{\sl name 1}',`{\sl name 2}')}%
{gen}%
- {Copy stack 1 into stack 2, preserving the order of pushed
- elements}%
+ {Copy stack 1 into stack 2, preserving the order of pushed elements}%
\macrodef{stackdo\_}{stackdo}{(`{\sl stackname}',{\sl commands})}%
{gen}%
{Empty the stack to the first blank entry, performing arg 2}%
@@ -2838,8 +2903,9 @@ arrowhd len,
\macrodef{sw\_}{sw_}{}%
{gen}%
{.sw with respect to current direction}%
-%
+
\Letter{T}%
+
\macrodef{tapped}{tapped}{(`{\sl two-terminal element}',
[{\sl arrowhd} | type={\sl arrowhd};name={\sl Name}],
{\sl fraction, length, fraction, length,} $\cdots$)}%
@@ -2871,13 +2937,13 @@ arrowhd len,
block. The permissible {\sl chars} are:
{\tt > | >{}> | < | <{}< | A | AA | M | O | OF}.
Type {\tt O} draws a node (circle); {\tt OF} a filled circle.
- Type {\tt M} is a black bar; {\tt A} is an open arc end; type {\tt AA}%
+ Type {\tt M} is a black bar; {\tt A} is an open arc end; type {\tt AA}
a double open arc. Type {\tt >} (the default) is an arrow-like output
connector; {\tt <} and {\tt <<} input connectors. Arg 3 is arrowhead
width or circle diameter when key-value pairs are not used.
If keys are specified, they are {\tt type=}{\sl chars} as previously;
{\tt wdth=}{\sl expr}; {\tt lgth=}{\sl expr}; {\tt sep=}{\sl expr};
- {\tt head=}{\sl attributes except} {\tt lgth, wdth.}%
+ {\tt head=}{\sl attributes except} {\tt lgth, wdth.}
The key {\tt sep=} is the double-head separation
\seesect{Composite:}}%
\macrodef{testexpr}{testexpr}{({\sl variable, expr1, expr2, \ldots})}%
@@ -2894,8 +2960,8 @@ arrowhd len,
{cct}%
{ Thermocouple drawn to the left (by default) of the
{\sl linespec} line. A {\tt T} argument truncates the leads so
- only the two branches appear. {\tt R=}%
- right orientation. \seesect{Twoterminal:}}%
+ only the two branches appear. {\tt R=} right orientation.
+ \seesect{Twoterminal:}}%
\macrodef{thicklines\_}{thicklines_}{({\sl number})}%
{gen}%
{set line thickness in points}%
@@ -2972,7 +3038,7 @@ arrowhd len,
{terminal strip, chars:
I (invisible terminals), C (default circle terminals), D (dot terminals),
O (omitted separator lines), {\tt wid=}value{\tt ;} total strip width,
- {\tt ht=}value{\tt ;} strip height, {\tt box={\sl shaded etc.};}%
+ {\tt ht=}value{\tt ;} strip height, {\tt box={\sl shaded etc.};}
\seesect{Composite:}}%
\macrodef{ttmotor}{ttmotor}{({\sl linespec, string, diameter, brushwid,
brushht})}%
@@ -2981,8 +3047,9 @@ brushht})}%
\macrodef{twopi\_}{twopi_}{}%
{gen}%
{$2\pi$}%
-%
+
\Letter{U}%
+
\macrodef{ujt}{ujt}{(\linespec,R,P,E)}%
{cct}%
{unijunction transistor, right, P-channel, envelope
@@ -2995,8 +3062,9 @@ brushht})}%
\macrodef{up\_}{up_}{}%
{gen}%
{set current direction up \seesect{Placing:}}%
-%
+
\Letter{V}%
+
\macrodef{variable}{variable}{(`{\sl element}', {\sl chars}, [+|-]{\sl angle},
{\sl length}, at position)}%
% {\tt [A|P|L|[u]N|[u]NN][C|S]},
@@ -3019,8 +3087,7 @@ brushht})}%
{The $x, y$ coordinate pair of the position}%
\macrodef{Vdiff\_}{Vdiff_}{({\sl position},{\sl position})}%
{gen}%
- {{\tt Vdiff\_(A,B)} evaluates to {\tt A-(B)} with dpic, {\tt
- A-(B.x,B.y)}%
+ {{\tt Vdiff\_(A,B)} evaluates to {\tt A-(B)} with dpic, {\tt A-(B.x,B.y)}
with gpic}%
\macrodef{vec\_}{vec_}{({\sl x},{\sl y})}%
{gen}%
@@ -3041,8 +3108,7 @@ brushht})}%
{unit-vector pair CCW-perpendicular to linear object}%
\macrodef{Vperp}{Vperp}{({\sl position name}, {\sl position name})}%
{gen}%
- {unit-vector pair CCW-perpendicular to line joining two named
- positions}%
+ {unit-vector pair CCW-perpendicular to line joining two named positions}%
\macrodef{vrot\_}{vrot_}{({\sl x},{\sl y},{\sl xcosine},{\sl ycosine})}%
{gen}%
{rotation operator}%
@@ -3054,11 +3120,11 @@ brushht})}%
{The vector in arg 1 multiplied by the scalar in arg 2}%
\macrodef{Vsum\_}{Vsum_}{({\sl position},{\sl position})}%
{gen}%
- {{\tt Vsum\_(A,B)} evaluates to {\tt A+B} with dpic, {\tt
- A+(B.x,B.y)}%
+ {{\tt Vsum\_(A,B)} evaluates to {\tt A+B} with dpic, {\tt A+(B.x,B.y)}
with gpic}%
-%
+
\Letter{W}%
+
\macrodef{while\_}{while_}{(`{\sl test}',`{\sl actions}')}%
{gen}%
{Integer m4 while loop}%
@@ -3082,8 +3148,9 @@ brushht})}%
\macrodef{XOR\_off}{XOR_off}{}%
{log}%
{XOR and NXOR offset of input face}%
-%
+
\Letter{X}%
+
\macrodef{xtal}{xtal}{(\linespec,{\sl keys})}%
{cct}%
{Quartz crystal. The {\sl keys} are
@@ -3102,7 +3169,9 @@ brushht})}%
\macrodef{xtract}{xtract}{({\sl string, substr1, substr2, $\ldots$})}%
{gen}%
{returns substrings if present}%
+
\Letter{Y}%
+
\macrodef{Ysymbol}{Ysymbol}{(at {\sl position},keys,
U|D|L|R|{\sl degrees}) (default {\tt U} for up)}%
{cct}%
diff --git a/graphics/circuit_macros/doc/quick.m4 b/graphics/circuit_macros/doc/quick.m4
index 7de2399601..1d849e2809 100644
--- a/graphics/circuit_macros/doc/quick.m4
+++ b/graphics/circuit_macros/doc/quick.m4
@@ -1,16 +1,14 @@
.PS # Pic input begins with .PS
cct_init # Read in macro definitions and set defaults
elen = 0.75 # Variables are allowed; default units are inches
-Origin: Here # Position names are capitalized
- source(up_ elen); llabel(-,v_s,+)
- resistor(right_ elen); rlabel(,R,)
+Vs: source(up_ elen); llabel(-,v_s,+) # Name and label the source
+ resistor(right_ elen); rlabel(,R,) # Semicolon and line end are equivalent
dot
{ # Save the current position and direction
- capacitor(down_ to (Here,Origin)) #(Here,Origin) = (Here.x,Origin.y)
- rlabel(+,v,-); llabel(,C,)
+ capacitor(down_ Vs.len); rlabel(+,v,-); llabel(,C,)
dot
} # Restore position and direction
line right_ elen*2/3
- inductor(down_ Here.y-Origin.y); rlabel(,L,); b_current(i)
- line to Origin
+ inductor(down_ Vs.len); rlabel(,L,); b_current(i)
+ line to (Vs,Here) # (Vs,Here) = (Vs.x,Here.y)
.PE # Pic input ends
diff --git a/graphics/circuit_macros/doc/relaycoilMan.m4 b/graphics/circuit_macros/doc/relaycoilMan.m4
index 962b0732b9..0d0641b2ad 100644
--- a/graphics/circuit_macros/doc/relaycoilMan.m4
+++ b/graphics/circuit_macros/doc/relaycoilMan.m4
@@ -1,44 +1,46 @@
+
.PS
-# relaycoil.m4
+# relaycoilMan.m4
cct_init
spc = dimen_/3
{ relaycoil; S: `"\tt relaycoil"' at last [].s+(0,-16bp__)
- {`"\sl V1"' wid 10bp__ at last [].V1 rjust
- `"\sl V2"' at last [].V2 ljust }
- K: relaycoil(NX,,,,fill_(0.9)) with .nw at last [].ne+(spc*4,0)
- `"\tt (NX,{,},{,}"' at (last [],S) `"\tt fill\_(0.9))"'
+ { "\sl V1" wid 10bp__ at last [].V1 rjust
+ "\sl V2" at last [].V2 ljust }
+ relaycoil(S) with .nw at last [].ne+(spc*2,0); "\tt (S)" at (last [],S)
+ K: relaycoil(NX) with .nw at last [].ne+(spc*3,0); "\tt (NX)" at (last [],S)
{ thinlines_
- spline <- from K.A1 left 7bp__ then up 4bp__ left 4bp__;`"\sl A1"' rjust
- arrow <- from K.A2 left 10bp__;`"\sl A2"' rjust
- spline <- from K.A3 left 7bp__ then down 4bp__ left 4bp__;`"\sl A3"' rjust
- spline <- from K.B1 right 7bp__ then up 4bp__ right 4bp__;`"\sl B1"' ljust
- arrow <- from K.B2 right 10bp__;`"\sl B2"' ljust
- spline <- from K.B3 right 7bp__ then down 4bp__ right 4bp__;`"\sl B3"' ljust
+ spline <- from K.A1 left 7bp__ then up 4bp__ left 4bp__; "\sl A1" rjust
+ arrow <- from K.A2 left 10bp__; "\sl A2" rjust
+ spline <- from K.A3 left 7bp__ then down 4bp__ left 4bp__; "\sl A3" rjust
+ spline <- from K.B1 right 7bp__ then up 4bp__ right 4bp__; "\sl B1" ljust
+ arrow <- from K.B2 right 10bp__; "\sl B2" ljust
+ spline <- from K.B3 right 7bp__ then down 4bp__ right 4bp__; "\sl B3" ljust
thicklines_
}
- relaycoil(AXSR) with .nw at last [].ne+(spc*5,0);`"\tt (AXSR)"' at (last [],S)
- {`"\sl V1"' at last [].V1 rjust;`"\sl V2"' at last [].V2 rjust }
- relaycoil(BXSR) with .nw at last [].ne+(spc*2,0);`"\tt (BXSR)"' at (last [],S)
- {`"\sl V1"' at last [].V1 ljust;`"\sl V2"' at last [].V2 ljust }
- relaycoil(SR) with .nw at last [].ne+(spc*3,0);`"\tt (SR)"' at (last [],S)
- relaycoil(SO) with .nw at last [].ne+(spc,0);`"\tt (SO)"' at (last [],S)
- relaycoil(SOR) with .nw at last [].ne+(spc,0);`"\tt (SOR)"' at (last [],S)
- relaycoil(PC) with .nw at last [].ne+(spc,0);`"\tt (PC)"' at (last [],S)
+ relaycoil(AXSR) with .nw at last [].ne+(spc*4,0); "\tt (AXSR)" at (last [],S)
+ { "\sl V1" at last [].V1 rjust; "\sl V2" at last [].V2 rjust }
+ relaycoil(BXSR) with .nw at last [].ne+(spc*2,0); "\tt (BXSR)" at (last [],S)
+ { "\sl V1" at last [].V1 ljust; "\sl V2" at last [].V2 ljust }
+ relaycoil(SR) with .nw at last [].ne+(spc*2,0); "\tt (SR)" at (last [],S)
+ spx = spc*3/4
+ relaycoil(SO) with .nw at last [].ne+(spx,0); "\tt (SO)" at (last [],S)
+ relaycoil(SOR) with .nw at last [].ne+(spx,0); "\tt (SOR)" at (last [],S)
+ relaycoil(PC) with .nw at last [].ne+(spx,0); "\tt (PC)" at (last [],S)
}
spc = dimen_/4
{
move down_ 3/4; right_
- relaycoil(HS); S:`"\tt (HS)"' at last [].s+(0,-12bp__)
- relaycoil(NAC) with .nw at last [].ne+(spc,0);`"\tt (NAC)"' at (last [],S)
- relaycoil(AC) with .nw at last [].ne+(spc,0);`"\tt (AC)"' at (last [],S)
- relaycoil(ML) with .nw at last [].ne+(spc,0);`"\tt (ML)"' at (last [],S)
- relaycoil(PO) with .nw at last [].ne+(spc,0);`"\tt (PO)"' at (last [],S)
- relaycoil(RM) with .nw at last [].ne+(spc,0);`"\tt (RM)"' at (last [],S)
- relaycoil(RH) with .nw at last [].ne+(spc,0);`"\tt (RH)"' at (last [],S)
- relaycoil(TH) with .nw at last [].ne+(spc,0);`"\tt (TH)"' at (last [],S)
- relaycoil(EL) with .nw at last [].ne+(spc,0);`"\tt (EL)"' at (last [],S)
- relaycoil(MR) with .sw at last [].se+(spc,0);`"\tt (MR)"' at (last [],S)
+ relaycoil(HS); S: "\tt (HS)" at last [].s+(0,-12bp__)
+ relaycoil(NAC) with .nw at last [].ne+(spc,0); "\tt (NAC)" at (last [],S)
+ relaycoil(AC) with .nw at last [].ne+(spc,0); "\tt (AC)" at (last [],S)
+ relaycoil(ML) with .nw at last [].ne+(spc,0); "\tt (ML)" at (last [],S)
+ relaycoil(PO) with .nw at last [].ne+(spc,0); "\tt (PO)" at (last [],S)
+ relaycoil(RM) with .nw at last [].ne+(spc,0); "\tt (RM)" at (last [],S)
+ relaycoil(RH) with .nw at last [].ne+(spc,0); "\tt (RH)" at (last [],S)
+ relaycoil(TH) with .nw at last [].ne+(spc,0); "\tt (TH)" at (last [],S)
+ relaycoil(EL) with .nw at last [].ne+(spc,0); "\tt (EL)" at (last [],S)
+ relaycoil(MR) with .sw at last [].se+(spc,0); "\tt (MR)" at (last [],S)
}
.PE
diff --git a/graphics/circuit_macros/dpictools.pic b/graphics/circuit_macros/dpictools.pic
index c6ba472200..415cd0329a 100644
--- a/graphics/circuit_macros/dpictools.pic
+++ b/graphics/circuit_macros/dpictools.pic
@@ -3,7 +3,7 @@
# m4 macro NeedDpicTools or the pic statement copy "HOMELIB_/dpictools.pic"
# when HOMELIB_ is defined or, generically, copy "<path>dpictools.pic"
-# Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under #
+# Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under #
# the LaTeX Project Public Licence in file Licence.txt. The files of #
# this distribution may be redistributed or modified provided that this #
# copyright notice is included and provided that modifications are clearly #
@@ -370,52 +370,57 @@ define DefineCMYKColor { cmyktorgb($2,$3,$4,r_CMYKRGB,g_CMYKRGB,b_CMYKRGB)
DefineRGBColor($1,r_CMYKRGB,g_CMYKRGB,b_CMYKRGB) }
# ShadeObject(DrawRoutineName, n, colorseq)
-# colorseq = 0,r0,g0,b0,
-# frac1,r1,g1,b1,
-# frac2,r2,g2,b2,
+# colorseq = frac0,r0,g0,b0,
+# frac1,r1,g1,b1,
# ...
-# 1,rn,gn,bn
-# with 0 < frac1 < frac2 < ... < 1
+# fracn,rn,gn,bn
+# with 0 <= frac0 < frac1 < ... < fracn <= 1
+# (Often frac0 = 0 and fracn = 1)
#
# calls DrawRoutineName(frac,r,g,b)
-# n+1 times for frac = 0, 1/n, 2/n, ... 1
+# n+1 times for frac =
+# frac0, frac0+1/n*(fracn-frac0),
+# frac0+2/n*(fracn-frac0), ... fracn
+# (i.e., often frac = 0, 1/n, 2/n, ... 1)
# with rgb args interpolated (in hsv space)
# between colorseq points
-#
# eg B: box; define HorizShade { line right B.wid thick B.ht/100/(1bp__) \
# from (0,-($1)*B.ht) outlined rgbstring($2,$3,$4) }
# ShadeObject(HorizShade, 100, 0,1,0,0, 1,0,0,1) at B
#
-define ShadeObject { [ Origin: Here; nSteps = abs($2)
- nextP = $3; nextR = $4; nextG = $5; nextB = $6
+define ShadeObject { [ Origin: Here; nSteps = max(abs($2),1)
+ nextF = $3; nextR = $4; nextG = $5; nextB = $6; lastF = nextF; frac0 = nextF
+ fracn = frac0; nextarg = 3; for done = 0 to 1 do { if nextarg < $+ then \
+ { exec sprintf("fracn = $%g",nextarg); nextarg +=4; done = 0 } }
+ if frac0 <= fracn then { $1(frac0,nextR,nextG,nextB) }
nextarg = 7
- thisP = nextP
- if $2 < 0 then { rgbtohsv(nextR,nextG,nextB,nextH,nextS,nextV) } \
- else { rgbtohsv(nextR^2,nextG^2,nextB^2,nextH,nextS,nextV) }
- if nextP*nSteps >= 1 then { nextP = 0 }
- $1(nextP,nextR,nextG,nextB)
- for stepnum = 1 to nSteps do {
- if stepnum > nextP*nSteps then {
- thisP = nextP; thisH = nextH; thisS = nextS; thisV = nextV
- exec sprintf("nextP = $%g; nextR = $%g; nextG = $%g; nextB = $%g",\
- nextarg,nextarg+1,nextarg+2,nextarg+3);
- nextarg +=4 }
- if nextP != thisP then {
- rgbtohsv(nextR^2,nextG^2,nextB^2,nextH,nextS,nextV)
- if thisS == 0 then { thisH = nextH }
- if nextS == 0 then { nextH = thisH }
- if thisH-nextH > 180 then { nextH += 360 } \
- else { if nextH-thisH > 180 then { thisH +=360 } } }
- if nextP > thisP then {
- x = (stepnum/nSteps-thisP)/(nextP-thisP)
- currP = thisP*(1-x) + nextP*x
- currH = thisH*(1-x) + nextH*x
- currS = thisS*(1-x) + nextS*x
- currV = thisV*(1-x) + nextV*x
- hsvtorgb(currH,currS,currV,cRsq,cGsq,cBsq)
- if $2 < 0 then { $1(currP,cRsq,cGsq,cBsq) } \
- else { $1(currP,sqrt(cRsq),sqrt(cGsq),sqrt(cBsq)) } }
- }
+ if $2 < 0 then { rgbtohsv(nextR,nextG,nextB, nextH,nextS,nextV) } \
+ else { rgbtohsv(nextR^2,nextG^2,nextB^2, nextH,nextS,nextV) }
+ for stepnum = 0 to nSteps do {
+ currF = frac0+stepnum/nSteps*(fracn-frac0)
+ if currF >= nextF then {
+ if nextarg >= $+ then { stepnum = nSteps } \
+ else { lastF = nextF; lastH = nextH; lastS = nextS; lastV = nextV
+ exec sprintf("nextF = $%g; nextR = $%g; nextG = $%g; nextB = $%g",\
+ nextarg,nextarg+1,nextarg+2,nextarg+3);
+ nextarg +=4 } }
+ if stepnum <= nSteps then {
+ if nextF != lastF then {
+ rgbtohsv(nextR^2,nextG^2,nextB^2,nextH,nextS,nextV)
+ if lastS == 0 then { lastH = nextH }
+ if nextS == 0 then { nextH = lastH }
+ if lastH-nextH > 180 then { nextH += 360 } \
+ else { if nextH-lastH > 180 then { lastH +=360 } } }
+ if nextF > lastF then {
+ x = (currF-lastF)/(nextF-lastF)
+ currH = lastH*(1-x) + nextH*x
+ currS = lastS*(1-x) + nextS*x
+ currV = lastV*(1-x) + nextV*x
+ hsvtorgb(currH,currS,currV,cRsq,cGsq,cBsq)
+ if (currF >= frac0) && (currF <= fracn) then {
+ if $2 < 0 then { $1(currF,cRsq,cGsq,cBsq) } \
+ else { $1(currF,sqrt(abs(cRsq)),sqrt(abs(cGsq)),sqrt(abs(cBsq))) } } }
+ } }
exec sprintf("$%g",nextarg)
] }
diff --git a/graphics/circuit_macros/examples/Alogix.m4 b/graphics/circuit_macros/examples/Alogix.m4
index f77a159875..b22f5bf5f4 100644
--- a/graphics/circuit_macros/examples/Alogix.m4
+++ b/graphics/circuit_macros/examples/Alogix.m4
@@ -19,14 +19,14 @@ A: Autologix(
# Draw a tree of gates only. The ~ has been
# replaced by NOT gates.
definergbcolor(lightblue,0.72,0.72,0.9)
-B: Autologix(Or(And(B,Not(C)),And(Not(A),B,C)),N,shaded "lightblue") \
+G: Autologix(Or(And(B,Not(C)),And(Not(A),B,C)),N,shaded "lightblue") \
with .sw at A.e+(1.3,-0.5)
- "{\sl Out}" at B.Out above ljust
- `"\shortstack[l]{\tt B: Autologix( \\ \tt \
+ "{\sl G.Out}" at G.Out above ljust
+ `"\shortstack[l]{\tt G: Autologix( \\ \tt \
Or(And(B,Not(C)),And(Not(A),B,C)),N,\\ \tt \
- shaded \"lightblue\")}"' wid 242pt__ ht 20pt__ at B.s+(0,-0.3)
- for_(1,4,1,`"{\sf\small\sl B.In`'m4x}" at B.In`'m4x rjust')
- "{\sf\small\sl B.In5}" at B.In5+(0,-1.5bp__) rjust
+ shaded \"lightblue\")}"' wid 242pt__ ht 20pt__ at G.s+(0,-0.3)
+ for_(1,4,1,`"{\sf\small\sl G.In`'m4x}" at G.In`'m4x rjust')
+ "{\sf\small\sl G.In5}" at G.In5+(0,-1.5bp__) rjust
# Here is how to include an arbitrary circuit
# (an SR-flipflop, for example)
diff --git a/graphics/circuit_macros/examples/AmpTable.m4 b/graphics/circuit_macros/examples/AmpTable.m4
index 023533c634..b7ff904cfc 100644
--- a/graphics/circuit_macros/examples/AmpTable.m4
+++ b/graphics/circuit_macros/examples/AmpTable.m4
@@ -1,23 +1,25 @@
.PS
# `Amptable.m4'
cct_init
+divert(-1)
+
+divert(0)dnl
+
movewid = 2pt__
-{
+{
{amp ; move ; "{\tt `amp'}" ljust}
- move down 0.4; right_
- {amp(,0.3) ; move ; "\tt `amp'(,0.3)" ljust}
- }
move right_ 2.0
-{ {delay(,,fill_(0.9)) ; move ;
- "`\tt\shortstack[l]{delay(,{,}\\ fill\_(0.9))}'" ljust}
- move down 0.4; right_
- {delay(,0.2) ; move ; "{\tt `delay'(,0.2)}" ljust}
- }
-
+ {amp(,5mm__) ; move ; "\tt `amp'(,5mm\_\_)" ljust}
move right_ 2.0
-{ {integrator ; move ; "\tt `integrator'" ljust}
+ {integrator ; move ; "\tt `integrator'" ljust}
+ }
move down 0.5; right_
- {integrator(,0.3) ; move ; "\tt `integrator'(,0.3)" wid 82pt__ ljust}
- }
+{
+ {delay(,,fill_(0.9)) ; move ;
+ "`\tt\shortstack[l]{delay(,{,}\\ fill\_(0.9))}'" ljust}
+ move right_ 2.0
+ {delay(,,type=S;body=shaded "blue!25"); move
+ "{\tt `delay'(,,type=S;}" ljust "{\tt body=shaded \"blue!25\")}" ljust}
+ }
.PE
diff --git a/graphics/circuit_macros/examples/Buttons.m4 b/graphics/circuit_macros/examples/Buttons.m4
index e7e5b004dc..7ccea6c28a 100644
--- a/graphics/circuit_macros/examples/Buttons.m4
+++ b/graphics/circuit_macros/examples/Buttons.m4
@@ -3,7 +3,6 @@
gen_init
NeedDpicTools
-
divert(-1)
#################################################################
@@ -67,36 +66,21 @@ define(`BoxButton',`[
linedensity = ifelse(`$4',,150/scale,`$4')
nsteps=10
define BxBshadow {
- box ht boxh wid boxw rad boxh/2 \
+ B: box ht boxh wid boxw rad boxh/2 \
outlined rgbstring($`'2,$`'3,$`'4) at (0,($`'1)*4*linethick bp__)
}
Q: ShadeObject(BxBshadow,nsteps,
0, 1,1,1,
1, r3,g3,b3)
# Shaded body
- lthk = boxh/nsteps/(1bp__)
- define BxBshade {
- v = boxh*(1-($`'1))
- h = (boxw-boxh)/2+sqrt((boxh/2)^2-(v-boxh/2)^2)
- line from (-h,v) to (h,v) thick lthk outlined rgbstring($`'2,$`'3,$`'4)
- }
- nsteps = boxh*linedensity
- C: ShadeObject(BxBshade,nsteps,
- 0, r1, g1, b1,
- 0.45,r2, g2, b2,
- 1, r3, g3, b3) with .n at Q.n
+ C: ColoredV(box,
+ (( 0,r1,g1,b1, 0.45,r2,g2,b2, 1,r3,g3,b3)):boxh/(Q.B.thick bp__)*2,
+ wid boxw ht boxh rad boxh/2 invis) with .n at Q.n
# Shaded highlight
- bh = boxh*0.4
- bw = boxw*4/4.5
- define BxBhighlight {
- v = bh*(1-($`'1)); h = (bw-bh)/2+sqrt((bh/2)^2-(v-bh/2)^2)
- line from (-h,v) to (h,v) thick lthk outlined rgbstring($`'2,$`'3,$`'4)
- }
- nsteps = bh*linedensity
- ShadeObject(BxBhighlight,nsteps,
- 0,1,1,1,
- 8/nsteps,1,1,1,
- 1, r2,g2,b2) with .n at Q.n+(0,-boxh/20)
+ bh = boxht*0.4
+ ColoredV(box,((0,1,1,1, 8/(bh*linedensity),1,1,1, 1,r2,g2,b2)),
+ ht bh wid boxw*4/4.5 rad bh/2 invis) \
+ with .n at Q.n+(0,-boxh/20)
`$5']')
#################################################################
diff --git a/graphics/circuit_macros/examples/Chips.m4 b/graphics/circuit_macros/examples/Chips.m4
index 57f9e29e97..7718cfc095 100644
--- a/graphics/circuit_macros/examples/Chips.m4
+++ b/graphics/circuit_macros/examples/Chips.m4
@@ -9,8 +9,11 @@ Chips: [
ic4017
{"\sf 4017" at last [].Chip.sw below ljust}
move
- ic4510
- {"\sf 4510" at last [].Chip.sw below ljust}
+# ic4510
+# {"\sf 4510" at last [].Chip.sw below ljust}
+# move
+ ic555
+ {"\sf 555" at last [].Chip.sw below ljust}
move
icVS1053
{"\sf VS1053" at last [].Chip.sw below ljust}
diff --git a/graphics/circuit_macros/examples/Consumption.m4 b/graphics/circuit_macros/examples/Consumption.m4
index 3b165abb7f..5ae20e31c3 100644
--- a/graphics/circuit_macros/examples/Consumption.m4
+++ b/graphics/circuit_macros/examples/Consumption.m4
@@ -473,14 +473,18 @@ Cl: s_box(Coal) at dtop(2000,0.36+3pt__)
rs_box(Population) at dtop(1975,0.9)
define(`text_ang',90)
+ command "\newcommand{\pct}{$\mskip\thinmuskip$\char37}"
brpos = 2016
Q:s_box(`$\left.\vbox to 1.50in{}\right\}$') with .w at dtop(brpos,1.04)
- Label: rs_box(`\shortstack{90\,\%\\ nonrenewable}') with .w at Q.e
+# Label: rs_box(`\shortstack{90\,\%\\ nonrenewable}') with .w at Q.e
+ Label: rs_box(`90\pct') at Q.e+(5bp__,0)
+ rs_box(`nonrenewable') with .w at last "".e+(2bp__,0)
s_box(`$\left.\vbox to 0.2in{}\right\}$') with .w at dtop(brpos+0.5,0.1)
- rs_box(`\shortstack[l]{10\,\%\\ renewable}') \
- with .sw at (Label.w,dtop(brpos,0.05))
+# rs_box(`\shortstack[l]{10\,\%\\ renewable}')
+ rs_box(`10\pct') with .sw at (Label.w,dtop(brpos,0.05))
+ rs_box(`renewable') with .sw at last "".se+(2bp__,0)
linethick_(0.6)
arrow <- from dtop(1998,1.55) left 0.15 up 0.2
@@ -519,6 +523,6 @@ Q: NPopulation.end + (-1.25,-0.1)
#print maxpswid-(last [].wid-maxx)
#print (last [].wid,last [].ht)
-showbox_
+#showbox_
}
.PE
diff --git a/graphics/circuit_macros/examples/Dini.m4 b/graphics/circuit_macros/examples/Dini.m4
index 85bf0d30c7..4b272ae2f1 100644
--- a/graphics/circuit_macros/examples/Dini.m4
+++ b/graphics/circuit_macros/examples/Dini.m4
@@ -6,7 +6,7 @@
# https://tex.stackexchange.com/questions/516734/plot-dinis-surface
threeD_init
NeedDpicTools
-scale = 1.5
+scale = 2.0
[
viewazimuth = 0 # View angles in degrees
viewelevation = 20
@@ -190,5 +190,58 @@ array2(h,m4inx,53,54,55,58,59,57)
for_(2,5,1,`to Project((v[x[m4x],1]),(v[x[m4x],2]),(v[x[m4x],3]))\')\
to Project((v[x[1],1]),(v[x[1],2]),(v[x[1],3])) thick 0.2 fill_(0)
}
-] scaled 2.5 with .sw at last [].se+(1,0)
+] scaled 2.5 with .sw at last [].se+(0.5,0)
+[
+#.PE
+#.PS
+## BlueBall.m4
+## https://latex.org/forum/viewtopic.php?f=5&t=30639
+#threeD_init
+#NeedDpicTools
+
+ ballrad = 2.5
+ cylrad = ballrad*0.87
+ hht =sqrt(ballrad^2-cylrad^2)
+ azimuth = 0
+ elevation = atan2(hht,cylrad)*rtod_ # disks touch at C
+ setview(azimuth,elevation)
+ sinelev = sind(elevation)
+
+ linethick_(1)
+ C: shadedball(ballrad,,,,(0,1,1)) at (0,0)
+ Op: C+Project(0,0,hht)
+ O: C+Project(0,0,-hht)
+ line dashed from Op+( cylrad,0) down Op.y-O.y
+ line dashed from Op+(-cylrad,0) down Op.y-O.y
+
+ define(`Normal',`cosd(`$1')*cylrad,sind(`$1')*cylrad,-hht')
+ define Cylvis { $`'2 = dot3D(Normal($`'1),View3D) }
+ findroot(Cylvis,5,170,1e-8,rA)
+ A: Project(Normal(rA))
+ B: O+(-(A.x-O.x),A.y-O.y)
+ aA = atan2(A.y-O.y,(A.x-O.x)*sinelev)
+ ellipsearc(cylrad*2,cylrad*2*sinelev,aA,-pi_-aA,0,cw) with .C at O
+ ellipsearc(cylrad*2,cylrad*2*sinelev,-pi_-aA-4*dtor_,aA+4*dtor_,,cw,dashed) \
+ with .C at O
+ ellipsearc(cylrad*2,cylrad*2*sinelev,-aA,pi_+aA,0,cw) with .C at Op
+ ellipsearc(cylrad*2,cylrad*2*sinelev,pi_+aA+4*dtor_,-aA-4*dtor_,,cw,dashed) \
+ with .C at Op
+
+ dot(at C); # "$T$" at last [].w rjust below
+ dot(at O); # "$O$" at last [].s below
+ dot(at A); # "$A$" at last [].s ljust below
+ dot(at B); # "$B$" at last [].s rjust below
+ dot(at Op); # "$O'$" at last [].n above
+ Ap: dot(at Op+(A-O)); # "$A'$" at Ap.n ljust above
+ Bp: dot(at Op+(B-O)); # "$B'$" at Bp.n rjust above
+
+ linethick_(0.4)
+ line dashed from Ap to A then to O then to Op
+ line dashed from A to C
+ line dashed from Bp to B
+ V: Between_(O,A,0.15)
+ U: C+Project(0,0,-hht+0.15)
+ line from U to U+(V-O) then to V
+ ] with .w at last [].e+(0.5,0)
+
.PE
diff --git a/graphics/circuit_macros/examples/EVplugs.m4 b/graphics/circuit_macros/examples/EVplugs.m4
index d3e40c8dd2..50afde5355 100644
--- a/graphics/circuit_macros/examples/EVplugs.m4
+++ b/graphics/circuit_macros/examples/EVplugs.m4
@@ -14,7 +14,7 @@ divert(-1)
twdth=expr; # tab width
thgt=expr; # tab hght
thick=expr; # outer line thickness (pt)
- inthick=expr; # inner line thickness (pt)
+ thickin=expr; # inner line thickness (pt)
BG=attributes; # shaded gray etc
L1=attributes; # L1 attributes ...
N=attributes;
@@ -23,21 +23,21 @@ divert(-1)
CP=attributes; '
define(`pEVskale',25.4) dnl default plug size (20 mm)
define(`EV_J1772',`[ pushkeys_(`$1', `wdth:20/pEVskale;
- twdth:3.5/20*m4wdth; thgt:1.5/20*m4wdth; diamLNP:6/20*m4wdth;
- thick:2; inthick:1.5; BG::N; L1::N; N::N; PE::N; PP::N; CP::N; ')
+ twdth:3.5/20*m4`'wdth; thgt:1.5/20*m4`'wdth; diamLNP:6/20*m4`'wdth;
+ thick:2; thickin:1.5; BG::N; L1::N; N::N; PE::N; PP::N; CP::N; ')
tang = atan2(m4twdth/2,m4wdth/2)*rtod_
TS: (Rect_(m4wdth/2,-90-tang)); TE: (Rect_(m4wdth/2,-90+tang))
Tab: line thick m4thick from TS down_ m4thgt \
then to TE-(0,m4thgt) then to TE m4BG
Arc: arc thick m4thick to TS with .c at (0,0) m4BG
round(at TS,last arc.thick); round(at TE,last arc.thick)
- L1: circle diam m4diamLNP thick m4inthick at (Rect_(m4wdth/4,150)) m4L1
- N: circle diam m4diamLNP thick m4inthick at (Rect_(m4wdth/4, 30)) m4N
- PE: circle diam m4diamLNP thick m4inthick at (0,-m4wdth/4) m4PE
- PP: circle diam m4diamLNP*0.55 thick m4inthick at (Rect_(m4wdth/3,210)) m4PP
- CP: circle diam m4diamLNP*0.55 thick m4inthick at (Rect_(m4wdth/3,-30)) m4CP
+ L1: circle diam m4diamLNP thick m4thickin at (Rect_(m4wdth/4,150)) m4L1
+ N: circle diam m4diamLNP thick m4thickin at (Rect_(m4wdth/4, 30)) m4N
+ PE: circle diam m4diamLNP thick m4thickin at (0,-m4wdth/4) m4PE
+ PP: circle diam m4diamLNP*0.55 thick m4thickin at (Rect_(m4wdth/3,210)) m4PP
+ CP: circle diam m4diamLNP*0.55 thick m4thickin at (Rect_(m4wdth/3,-30)) m4CP
`$2' popdef(`m4CP',`m4PP',`m4PE',`m4N',`m4L1',`m4BG',
- `m4wdth',`m4diamLNP',`m4twdth',`m4thgt',`m4thick',`m4inthick') ]')
+ `m4wdth',`m4diamLNP',`m4twdth',`m4thgt',`m4thick',`m4thickin') ]')
`EV_J3068(keys,shade)
EV charging plug in a [] block
@@ -46,7 +46,7 @@ define(`EV_J1772',`[ pushkeys_(`$1', `wdth:20/pEVskale;
twdth=expr; # tab width
thgt=expr; # tab hght
thick=expr; # outer line thickness (pt)
- inthick=expr; # inner line thickness (pt)
+ thickin=expr; # inner line thickness (pt)
BG=attributes; # shaded gray etc
L1|L2|L3=attributes; # pin attributes ...
N=attributes;
@@ -55,7 +55,7 @@ define(`EV_J1772',`[ pushkeys_(`$1', `wdth:20/pEVskale;
CP=attributes;
arg2= R:G:B background fill color '
define(`EV_J3068',`[ pushkeys_(`$1',
- `wdth:25/pEVskale; diamLNP:m4wdth*0.25; thick:2; inthick:1.5;
+ `wdth:25/pEVskale; diamLNP:m4`'wdth*0.25; thick:2; thickin:1.5;
BG::N; L1::N; L2::N; L3::N; N::N; PE::N; PP::N; CP::N; ')
C: Here
NE: C+(Rect_(m4wdth/2,45)); NW: C+(Rect_(m4wdth/2,135))
@@ -68,14 +68,14 @@ define(`EV_J3068',`[ pushkeys_(`$1',
arc thick m4thick to Ac+(0,m4diamLNP/2) with .c at Ac m4BG
Top: line thick m4thick to (NW+NE-Ac, Here) m4BG
arc thick m4thick to NW with .c at Here+(0,-m4diamLNP/2) m4BG
- PE: circle diam m4diamLNP thick m4inthick at C m4PE
- PP: circle diam m4diamLNP*0.55 thick m4inthick at C+(Rect_(m4wdth/3,45)) m4PP
- CP: circle diam m4diamLNP*0.55 thick m4inthick at C+(Rect_(m4wdth/3,135)) m4CP
- L1: circle diam m4diamLNP thick m4inthick at C+(m4wdth*.3,0) m4L1
- L2: circle diam m4diamLNP thick m4inthick at C+(Rect_(m4wdth*.3,-60)) m4L2
- L3: circle diam m4diamLNP thick m4inthick at C+(Rect_(m4wdth*.3,-120)) m4L3
- N: circle diam m4diamLNP thick m4inthick at C-(m4wdth*.3,0) m4N
- `$3' popdef(`m4wdth',`m4diamLNP',`m4thick',`m4inthick',
+ PE: circle diam m4diamLNP thick m4thickin at C m4PE
+ PP: circle diam m4diamLNP*0.55 thick m4thickin at C+(Rect_(m4wdth/3,45)) m4PP
+ CP: circle diam m4diamLNP*0.55 thick m4thickin at C+(Rect_(m4wdth/3,135)) m4CP
+ L1: circle diam m4diamLNP thick m4thickin at C+(m4wdth*.3,0) m4L1
+ L2: circle diam m4diamLNP thick m4thickin at C+(Rect_(m4wdth*.3,-60)) m4L2
+ L3: circle diam m4diamLNP thick m4thickin at C+(Rect_(m4wdth*.3,-120)) m4L3
+ N: circle diam m4diamLNP thick m4thickin at C-(m4wdth*.3,0) m4N
+ `$3' popdef(`m4wdth',`m4diamLNP',`m4thick',`m4thickin',
`m4BG',`m4L1',`m4L2',`m4L3',`m4N',`m4PE',`m4PP',`m4CP') ]')
`EV_CCS1(J1772 keys,DC keys)
@@ -84,20 +84,20 @@ define(`EV_J3068',`[ pushkeys_(`$1',
diamPM=expr; # diam of DC+, DC- circles
sep=expr; # separation of Jack and DC
thick=expr; # outer line thickness (pt)
- inthick=expr; # inner line thickness (pt)
+ thickin=expr; # inner line thickness (pt)
BG=attributes; # shaded gray etc
DCplus=attributes;
DCminus=attributes; '
define(`EV_CCS1',`[
J: EV_J1772(`$1')
- pushkeys_(`$2',`wdth:J.wid:23.5/20; hght:J.wid*11/20; diamPM:m4hght*7/11;
- sep:J.wid*3/30; thick:J.Arc.thick; inthick:J.PE.thick;
+ pushkeys_(`$2',`wdth:J.wid:23.5/20; hght:J.wid*11/20; diamPM:m4`'hght*7/11;
+ sep:J.wid*3/30; thick:J.Arc.thick; thickin:J.PE.thick;
BG::N; DCplus::N; DCminus::N;')
DC: [ Box: box thick m4thick wid m4wdth ht m4hght rad m4hght/2 m4BG
- DCplus: circle thick m4inthick diam m4diamPM at Box.w+(m4hght/2,0) m4DCplus
- DCminus:circle thick m4inthick diam m4diamPM at Box.e-(m4hght/2,0) m4DCminus
+ DCplus: circle thick m4thickin diam m4diamPM at Box.w+(m4hght/2,0) m4DCplus
+ DCminus:circle thick m4thickin diam m4diamPM at Box.e-(m4hght/2,0) m4DCminus
] with .n at J.s+(0,-m4sep)
- popdef(`m4wdth',`m4hght',`m4diamPM',`m4sep',`m4thick',`m4inthick',`m4BG',
+ popdef(`m4wdth',`m4hght',`m4diamPM',`m4sep',`m4thick',`m4thickin',`m4BG',
`m4DCplus',`m4DCminus')
]')
@@ -107,22 +107,22 @@ define(`EV_CCS1',`[
diamPM=expr; # diam of DC+, DC- circles
sep=expr; # separation of Jack and DC
thick=expr; # outer line thickness (pt)
- inthick=expr; # inner line thickness (pt)
+ thickin=expr; # inner line thickness (pt)
BG=attributes; # shaded gray etc
DCplus=attributes;
DCminus=attributes;
arg2= R:G:B background fill color '
define(`EV_CCS2',`[
J: EV_J3068(`$1',`$2')
- pushkeys_(`$3',`wdth:J.wid:23.5/20; hght:J.wid*11/20; diamPM:m4hght*7/11;
- sep:J.wid*3/30; thick:J.Arc.thick; inthick:J.PE.thick;
+ pushkeys_(`$3',`wdth:J.wid:23.5/20; hght:J.wid*11/20; diamPM:m4`'hght*7/11;
+ sep:J.wid*3/30; thick:J.Arc.thick; thickin:J.PE.thick;
BG::N; DCplus::N; DCminus::N;')
DC: [ Box: box thick m4thick wid m4wdth ht m4hght rad m4hght/2 dnl
m4BG ifelse(`$2',,,`shaded rgbstring(patsubst(`$2',:,`,'))')
- DCplus: circle thick m4inthick diam m4diamPM at Box.w+(m4hght/2,0) m4DCplus
- DCminus:circle thick m4inthick diam m4diamPM at Box.e-(m4hght/2,0) m4DCminus
+ DCplus: circle thick m4thickin diam m4diamPM at Box.w+(m4hght/2,0) m4DCplus
+ DCminus:circle thick m4thickin diam m4diamPM at Box.e-(m4hght/2,0) m4DCminus
] with .n at J.s+(0,-m4sep)
- popdef(`m4wdth',`m4hght',`m4diamPM',`m4sep',`m4thick',`m4inthick',`m4BG',
+ popdef(`m4wdth',`m4hght',`m4diamPM',`m4sep',`m4thick',`m4thickin',`m4BG',
`m4DCplus',`m4DCminus')
]')
@@ -130,12 +130,12 @@ define(`EV_CCS2',`[
EV charging plug in a [] block
keys: wdth=expr; # plug width
thick=expr; # outer line thickness (pt)
- inthick=expr; # inner line thickness (pt)
+ thickin=expr; # inner line thickness (pt)
BG=attributes; # background shaded gray etc
DCplus=|DCminusNS=|FG=|NC=|SS1=|DCP=|PP=|
CL=|CH=|SS2=attributes # pin attributes ...'
define(`EV_CHAdeMO',`[ pushdef(`m4sk',33/140/pEVskale) pushkeys_(`$1',
- `wdth:140*m4sk; thick:m4wdth*9/140/(1bp__); inthick:m4thick*1.5/9;
+ `wdth:140*m4sk; thick:m4`'wdth*9/140/(1bp__); thickin:m4`'thick*1.5/9;
BG::N; DCplus::N; DCminus::N;N::N;S::N;
FG::N; NC::N; SS1::N; DCP::N; PP::N; CL::N; CH::N; SS2::N')
C: circle thick m4thick diam m4wdth-m4thick bp__ m4BG
@@ -144,18 +144,18 @@ define(`EV_CHAdeMO',`[ pushdef(`m4sk',33/140/pEVskale) pushkeys_(`$1',
line thick m4thick*0.6 from C+(Rect_(C.rad+m4thick bp__*3/4,138)) \
to C+(Rect_(C.rad+m4thick bp__*3/4,130)) then right m4thick bp__ m4BG
idiam = (m4wdth-m4thick bp__*2)*47/(27+47*2)
- N: circle diam idiam thick m4inthick with .n at C.n-(0,m4thick bp__/2) m4N
- S: circle diam idiam thick m4inthick with .s at C.s+(0,m4thick bp__/2) m4S
- E: circle diam idiam thick m4inthick at Cintersect(N,N.diam,S,S.diam) m4DCminus
- W: circle diam idiam thick m4inthick at Cintersect(S,S.diam,N,N.diam) m4DCplus
+ N: circle diam idiam thick m4thickin with .n at C.n-(0,m4thick bp__/2) m4N
+ S: circle diam idiam thick m4thickin with .s at C.s+(0,m4thick bp__/2) m4S
+ E: circle diam idiam thick m4thickin at Cintersect(N,N.diam,S,S.diam) m4DCminus
+ W: circle diam idiam thick m4thickin at Cintersect(S,S.diam,N,N.diam) m4DCplus
foreach_(`Z',
- `line thick m4inthick up Z.diam*0.6 right Z.diam*0.6 with .c at Z
- line thick m4inthick up Z.diam*0.6 left Z.diam*0.6 with .c at Z',N,S)
+ `line thick m4thickin up Z.diam*0.6 right Z.diam*0.6 with .c at Z
+ line thick m4thickin up Z.diam*0.6 left Z.diam*0.6 with .c at Z',N,S)
foreach_(`L',`L: circle diam idiam/4 thick linethick/2 \
at N+(Rect_(idiam/4,90*m4Lx)) m4xpand(m4`'L)',FG,NC,DCP,SS1)
foreach_(`L',`L: circle diam idiam/4 thick linethick/2 \
at S+(Rect_(idiam/4,90*m4Lx)) m4xpand(m4`'L)',PP,CL,SS2,CH)
- `$3' popdef(`m4sk',`m4wdth',`m4thick',`m4inthick',`m4BG',
+ `$3' popdef(`m4sk',`m4wdth',`m4thick',`m4thickin',`m4BG',
`m4DCplus',`m4DCminus',`m4N',`m4S',
`m4FG',`m4NC',`m4SS1',`m4DCP',`m4PP',`m4CL',`m4CH',`m4SS2') ]')
@@ -173,7 +173,7 @@ define(`EV_CHAdeMO',`[ pushdef(`m4sk',33/140/pEVskale) pushkeys_(`$1',
Gndinner=attributes;
PP=attributes;
CP=attributes; '
-define(`EV_NAC',`[ pushkeys_(`$1', `wdth:1.6; diamL:m4wdth*0.28; BG::N;
+define(`EV_NAC',`[ pushkeys_(`$1', `wdth:1.6; diamL:m4`'wdth*0.28; BG::N;
L1::N; L1inner::N; L2::N; L2inner::N; Gndinner::N; inner::N;
Gnd::N; PP::N; CP::N; ')
sN = 1/pEVskale*m4wdth/1.6 # drawing coord scale factor
diff --git a/graphics/circuit_macros/examples/Fuses.m4 b/graphics/circuit_macros/examples/Fuses.m4
index 68629f407d..dcffba66cb 100644
--- a/graphics/circuit_macros/examples/Fuses.m4
+++ b/graphics/circuit_macros/examples/Fuses.m4
@@ -42,7 +42,7 @@ movewid = 0.25
jumper(,CJBED) ; {"`\tt $\ldots$(,CJBED)'" at last line.c+(0,-0.2) }
move
jumper(,body=outlined "gray" shaded "gray";)
- "`\tt $\ldots$(,body=outlined \"gray\" \textbackslash'" \
+ "`\tt $\ldots$(,body=outlined \"gray\" \textbackslash'" wid 168bp__ \
at last line.start+(0,-20bp__) ljust \
"`\tt \hphantom{body=}shaded \"gray\";)'" ljust
}
diff --git a/graphics/circuit_macros/examples/Geometry.m4 b/graphics/circuit_macros/examples/Geometry.m4
index 3a50622603..df026547fe 100644
--- a/graphics/circuit_macros/examples/Geometry.m4
+++ b/graphics/circuit_macros/examples/Geometry.m4
@@ -144,7 +144,7 @@ Fig4: [ ls = 2/3 # local scale
Y: LCintersect(HZ,CC4,C4.rad,R); "$Y$" at Y above
X: LCintersect(HZ,CC2,C2.rad); "$X$" at X above rjust
- Loopover_(`P',`dot(at P)',X,Y,Z)
+ foreach_(`P',`dot(at P)',X,Y,Z)
line dashed from X to Y chop -linewid/2
RightAngle(A,Z,Y)
diff --git a/graphics/circuit_macros/examples/Incleps.m4 b/graphics/circuit_macros/examples/Incleps.m4
index 7f02f308c1..28543ca6f3 100644
--- a/graphics/circuit_macros/examples/Incleps.m4
+++ b/graphics/circuit_macros/examples/Incleps.m4
@@ -10,6 +10,9 @@ sinclude(examples.dim) # Change examples to the name of the main LaTeX file.
define(`backarrow',`darrow(`$1',,,2pt__,6pt__,6pt__,<-|)')
S: s_box(`\includegraphics[width=3in]{Incl}')
+# A blank box the size of the included eps figure:
+#S: s_box("\hskip %gin\vrule width 0pt height %gin",\
+# boxdim(InclA,w),boxdim(InclA,v))
ifgpic(`S: box invis ht s_ht wid s_wd with .c at S.n')
thinlines_
diff --git a/graphics/circuit_macros/examples/Makefile b/graphics/circuit_macros/examples/Makefile
index 252fe33fe9..f2f54e02d0 100644
--- a/graphics/circuit_macros/examples/Makefile
+++ b/graphics/circuit_macros/examples/Makefile
@@ -36,6 +36,11 @@ PIC = dpic
#PIC = $$HOME/dpic/pascaldev/test/dpic
#PIC = $$HOME/dpic/pascal/test/dpic
+# Quiet mode for MiKTeX:
+# QLATEX = latex --quiet
+# Quiet mode for texlive:
+QLATEX = latex -interaction=batchmode
+
#MODE = -p
MODE = -g
@@ -62,11 +67,11 @@ TEXPICS = \
Audio.tex Bip.tex Btree.tex Buttons.tex Byte.tex \
Capacitors.tex CanLogic.tex Chips.tex Conn.tex Connectors.tex \
Contacts.tex Contact.tex control.tex Crow.tex \
- csc.tex Csource.tex Decoder.tex \
+ cbresistor.tex csc.tex Csource.tex Decoder.tex \
Demultiplexer.tex diamond.tex Dini.tex Diodes.tex Drive.tex \
EEP.tex Emarrows.tex Escher.tex EVplugs.tex \
- ex00.tex ex01.tex ex02.tex ex03.tex ex04.tex ex05.tex ex06.tex ex08.tex \
- ex09.tex ex10.tex ex11.tex ex12.tex ex15.tex ex16.tex ex17.tex ex18.tex \
+ ex01.tex ex02.tex ex03.tex ex04.tex ex05.tex ex06.tex ex08.tex \
+ ex09.tex ex10.tex ex11.tex ex12.tex ex15.tex ex16.tex ex18.tex \
ex21.tex exp.tex fet.tex Flow.tex Fuses.tex \
Geometry.tex GrayCode.tex graysurf.tex Grounds.tex \
Headers.tex Heathkit.tex \
@@ -78,9 +83,9 @@ TEXPICS = \
Quantum.tex quick.tex \
random.tex Rectifiers.tex recycle.tex relaycoil.tex Relay.tex \
Resistors.tex Rotbox.tex \
- Schottky.tex sfg.tex shadowed.tex shapes.tex ShiftR.tex Sierpinski.tex \
- Sixpole.tex \
- Smithchart.tex Sources.tex SQUID.tex Switches.tex \
+ Schottky.tex Sevensegment.tex sfg.tex Shadowed.tex shapes.tex \
+ ShiftR.tex Sierpinski.tex Sixpole.tex \
+ Smithchart.tex Sources.tex Switches.tex \
Tgate.tex Three.tex thyristor.tex TTLnand.tex Tubediags.tex \
UNO.tex ujt.tex Variable.tex Windings.tex worm.tex Xform.tex XOR.tex
@@ -135,10 +140,10 @@ LTXFILE=printf "|documentclass[11pt]{article}\n\
@touch $(DIMFILE) F_$*.dim
$(M4) pstricks.m4 $(DIMFILE) F_$*.dim $*.m4 | $(PIC) -p > $*.tex
@$(LTXFILE) > F_$*.tex
- latex --quiet F_$*
+ $(QLATEX) F_$*
touch F_$*.dim $(DIMFILE)
$(M4) pstricks.m4 $(DIMFILE) F_$*.dim $*.m4 | $(PIC) -p > $*.tex
- latex --quiet F_$*
+ $(QLATEX) F_$*
mv F_$*.dvi $*.dvi
rm -f F_*
.dvi.ps:
@@ -148,7 +153,7 @@ LTXFILE=printf "|documentclass[11pt]{article}\n\
@touch $(DIMFILE) F_$*.dim
$(M4) pstricks.m4 $(DIMFILE) F_$*.dim $*.m4 | $(PIC) -p > $*.tex
@$(LTXFILE) > F_$*.tex
- latex --quiet F_$*
+ $(QLATEX) F_$*
dvips $(DVIPSOPTS) F_$* -o $*.ps
chmod 644 $*.ps
rm -f F_*
@@ -156,9 +161,9 @@ LTXFILE=printf "|documentclass[11pt]{article}\n\
@touch $(DIMFILE) F_$*.dim
$(M4) pstricks.m4 $(DIMFILE) F_$*.dim $*.m4 | $(PIC) -p > $*.tex
@$(LTXFILE) > F_$*.tex
- latex --quiet F_$*
+ $(QLATEX) F_$*
$(M4) pstricks.m4 $(DIMFILE) F_$*.dim $*.m4 | $(PIC) -p > $*.tex
- latex --quiet F_$*
+ $(QLATEX) F_$*
dvips F_$* -T128cm,28cm -o $*.ps
# Recent changes to PSTricks(?) have clashed with the use of TeXtoEPS
# so use ps2epsi
@@ -171,9 +176,9 @@ LTXFILE=printf "|documentclass[11pt]{article}\n\
@touch $(DIMFILE) F_$*.dim
$(M4) pgf.m4 $(DIMFILE) F_$*.dim $*.m4 | $(PIC) -g > $*.tex
@$(PDFLTXSRC) > F_$*.tex
- pdflatex --quiet F_$*
+ pdf$(QLATEX) F_$*
$(M4) pgf.m4 $(DIMFILE) F_$*.dim $*.m4 | $(PIC) -g > $*.tex
- pdflatex --quiet F_$*
+ pdf$(QLATEX) F_$*
mv F_$*.pdf $*.pdf
rm -f F_*
.m4.png:
@@ -192,7 +197,8 @@ LTXFILE=printf "|documentclass[11pt]{article}\n\
# rm $*.pdf
.m4.svg:
make $*.pdf
- dvisvgm --pdf $*.pdf $*.svg
+# dvisvgm --pdf $*.pdf $*.svg
+ pdf2svg $*.pdf $*.svg
chmod 644 $*.svg
# rm $*.pdf
@@ -244,25 +250,25 @@ $(DOC).dvi: $(DOC).tex files.tex header.tex psmode
tst:
@$(LTXFILE) | sed -e 's/{\.tex}/{test.tex}/' > tst.tex
- make CONF=pstricks.m4 PIC=dpic MODE=-p test.tex; latex --quiet tst
+ make CONF=pstricks.m4 PIC=dpic MODE=-p test.tex; $(QLATEX) tst
rm -f test.tex test.pic
- make CONF=pstricks.m4 PIC=dpic MODE=-p test.tex; latex --quiet tst
+ make CONF=pstricks.m4 PIC=dpic MODE=-p test.tex; $(QLATEX) tst
dvips $(DVIPSOPTS) tst -o tst.ps
tst1:
@$(LTXFILE) | sed -e 's/{\.tex}/{test.tex}/' > tst.tex
- make CONF=pstricks.m4 PIC=dpic MODE=-p test.tex; latex --quiet tst
+ make CONF=pstricks.m4 PIC=dpic MODE=-p test.tex; $(QLATEX) tst
dvips $(DVIPSOPTS) tst -o tst.ps
tikz:
@$(LTXFILE) | sed -e 's/{\.tex}/{test.tex}/' -e 's/pstricks/tikz/' > tst.tex
- make CONF=pgf.m4 PIC=dpic MODE=-g test.tex; latex --quiet tst
+ make CONF=pgf.m4 PIC=dpic MODE=-g test.tex; $(QLATEX) tst
dvips $(DVIPSOPTS) tst -o tst.ps
gpic:
@$(LTXFILE) | sed -e 's/{\.tex}/{test.tex}/' > tst.tex
rm -f test.tex test.pic
- make CONF=gpic.m4 PIC=pic MODE=-t test.tex; latex --quiet tst
+ make CONF=gpic.m4 PIC=pic MODE=-t test.tex; $(QLATEX) tst
dvips $(DVIPSOPTS) tst -o tst.ps
echopics:
diff --git a/graphics/circuit_macros/examples/MoreTable.m4 b/graphics/circuit_macros/examples/MoreTable.m4
index cc198c198b..d1c7be02c9 100644
--- a/graphics/circuit_macros/examples/MoreTable.m4
+++ b/graphics/circuit_macros/examples/MoreTable.m4
@@ -72,5 +72,5 @@ vm = 0.28
{xtal(,type=R;outerdiam=0.2) ; move ;"`{\tt xtal(,type=R)}'" ljust}
}
-] with .nw at Heater.sw+(0,-0.3)
+] with .nw at Heater.sw+(0,-0.4)
.PE
diff --git a/graphics/circuit_macros/examples/Quantum.m4 b/graphics/circuit_macros/examples/Quantum.m4
index 9de7aeddab..02826d9768 100644
--- a/graphics/circuit_macros/examples/Quantum.m4
+++ b/graphics/circuit_macros/examples/Quantum.m4
@@ -17,6 +17,7 @@ define(`Meter',`[ Box: box wid boxwid*3/2 fill_(1)
arc cw from C+(-r,0) to C+(r,0) with .c at C
arrow from C+(-r/4,0) to C+(0.9*r,0.9*r) ]')
+[
X: Bus(,shaded rgbstring(0.5,0.5,1) "X")
A1: Bus(from X.start+(0,-boxht*3/2), shaded "red" "A")
A2: Bus(from 2 between X.start and A1.start,shaded "red" "A")
@@ -27,5 +28,27 @@ A2: Bus(from 2 between X.start and A1.start,shaded "red" "A")
Meter with .e at X.end
box wid boxwid*1.2 ht boxht*1.2 fill_(1) "$R_{\psi}^{\pi/2}$" \
at A2.end-(4.5*boxwid,0)
+]
+
+#.PE
+#.PS
+# SQUID.m4
+cct_init
+
+[
+down_
+#source
+S1: SQUID
+ "J1" at S1.J1 above rjust
+ "J2" at S1.J2 above ljust
+
+S2: SQUID(3,dimen_*1.5,-120) at S1.e+(elen_,0)
+ "J1" at S2.J1 above rjust
+ "J2" at S2.J2 below ljust
+ "J3" at S2.J3 above ljust
+ arcrad = S2.C.rad*0.7
+ arc from S2.c+(Rect_(arcrad,-135)) to S2.c+(Rect_(arcrad,-45)) \
+ with .c at S2.C ->
+ ] with .w at last [].e+(boxht,0)
.PE
diff --git a/graphics/circuit_macros/examples/Resistors.m4 b/graphics/circuit_macros/examples/Resistors.m4
index 5e96f95822..8dd31005c8 100644
--- a/graphics/circuit_macros/examples/Resistors.m4
+++ b/graphics/circuit_macros/examples/Resistors.m4
@@ -5,36 +5,32 @@ cct_init
movewid = 2 pt__
hm = 2.05
vm = 0.28
-{ {resistor ; move ;"`{\tt resistor}'" ljust}
+{ {A:resistor ; move ;"`{\tt resistor}'" ljust}
move right_ hm
- {resistor(,,Q) ; move ;"`\tt resistor(,{,}Q) '" ljust}
+ {Q:resistor(,5,Q) ; move ;"`\tt $\ldots$(,5{,}Q) '" ljust}
move right_ hm
- {resistor(,,V) ; move ;"`{\tt resistor(,{,}V)}'" ljust}
+ {V:resistor(,,V) ; move ;"`{\tt $\ldots$(,{,}V)}'" ljust}
}
move down vm; right_
-{ {resistor(,,ES) ; move ;"`\tt resistor(,{,}ES) '" ljust}
+{ {ES:resistor(,,ES); move ;"`\tt $\ldots$(,{,}ES) '" ljust}
move right_ hm
- {resistor(,,H) ; move ;"`\tt resistor(,{,}H) '" ljust}
+ {H:resistor(,4,H) ; move ;"`\tt $\ldots$(,4{,}H) '" ljust}
move right_ hm
- {resistor(,,AC) ; move ;"`{\tt resistor(,{,}AC)}'" ljust}
+ {AC:resistor(,,AC) ; move ;"`{\tt $\ldots$(,{,}AC)}'" ljust}
}
move down vm; right_
-{ {resistor(,5,B) ; move ;"`{\tt resistor(,5,B)}'" ljust}
+{ {B:resistor(,,B) ; move ;"`{\tt $\ldots$(,{,}B)}'" ljust}
move right_ hm
- {resistor(,,E) ; move
- "`\shortstack[l]{\tt resistor(,{,}E)\\ {\tt $\equiv$ ebox}}'" ljust}
+ {F:resistor(,,F) ; move ;"`\tt $\ldots$(,{,}F) '" ljust}
move right_ hm
- {ebox(,0.5,0.3) ; move ;"`{\tt ebox(,0.5,0.3)}'" ljust}
+ {E:resistor(,,E) ; move ; "`\tt $\ldots$(,{,}E) $\equiv$ ebox'" ljust}
}
- move down vm; right_
+ move down vm*1.1; right_
{ {ebox(,,,0.9) ; move ;"`{\tt ebox(,{,},0.9)}'" ljust}
move right_ hm
- {ebox(,,,,shaded "yellow") ; move
- "`{\tt ebox(,{,},{,}shaded \"yellow\")}'" ljust}
-}
- move down vm; right_
-{ {ebox(,wdth=0.2;box=dashed shaded "green";text="X") ; move
- "`{\tt ebox(,wdth=0.2;box=dashed shaded \"green\";text=\"X\")}'" ljust}
+ {ebox(,wdth=0.2;box=dashed shaded "green";text="H") ; move
+ "`\shortstack[l]{\tt ebox(,wdth=0.2;box=dashed shaded \"green\";\\' \
+ `\tt text=\"H\")}'" ljust}
}
.PE
diff --git a/graphics/circuit_macros/examples/SQUID.m4 b/graphics/circuit_macros/examples/SQUID.m4
deleted file mode 100644
index 54f50f9fa6..0000000000
--- a/graphics/circuit_macros/examples/SQUID.m4
+++ /dev/null
@@ -1,22 +0,0 @@
-.PS
-# SQUID.m4
-cct_init
-
-divert(-1)
-divert(0)dnl
-
-down_
-#source
-S1: SQUID
- "J1" at S1.J1 above rjust
- "J2" at S1.J2 above ljust
-
-S2: SQUID(3,dimen_*1.5,-120) at S1.e+(elen_,0)
- "J1" at S2.J1 above rjust
- "J2" at S2.J2 below ljust
- "J3" at S2.J3 above ljust
- arcrad = S2.C.rad*0.7
- arc from S2.c+(Rect_(arcrad,-135)) to S2.c+(Rect_(arcrad,-45)) \
- with .c at S2.C ->
-
-.PE
diff --git a/graphics/circuit_macros/examples/Sevensegment.m4 b/graphics/circuit_macros/examples/Sevensegment.m4
new file mode 100644
index 0000000000..af45f48edb
--- /dev/null
+++ b/graphics/circuit_macros/examples/Sevensegment.m4
@@ -0,0 +1,82 @@
+.PS
+# Sevensegment.m4
+# https://tex.stackexchange.com/questions/644009/seven-segments-anchors-how-to-use-them
+gen_init
+divert(-1)
+ `sevensegment(keys)
+ Seven-segment display in a [] block. keys:
+ hght=expr; (default boxht)
+ wdth=expr; (default hght*3.3/5.85)
+ slant=fraction; top is skewed slant fraction of ht
+ segwid=expr; segment width
+ gap=expr; gap between segments
+ bevel=fraction; corner truncation
+ on=attributes; "on" segment attributes
+ off=attributes; "off" segment attributes
+ code=[0-8][.]; displayed number .=decimal point
+ or
+ code=Xddddddd[.] where each d=0 or 1 to define
+ Segment1 to Segment7 off or on
+ Segments are labeled Seg1 Seg2 ... Seg7
+ and the decimal point is Seg8'
+define(`sevensegment', # hght, wdth, slant, segwid, gap, bevel, on, off, code
+ `[ pushkeys_(`$1',`hght:boxht; wdth:m4`'hght*3.3/5.85; slant:0;
+ segwid:0.75/3.2*m4`'wdth; gap:0.12/3.2*m4`'wdth; bevel:0.4;
+ on:outlined "red" shaded "red":N; off:outlined "lightgray":N;
+ code:00000010:N;')
+ gapch = m4gap/2*sqrt(2)
+ ifinstr(m4code,.,`define(`m4tmp',substr(m4code,0,decr(len(m4code))))dnl
+ pushdef(`dodp',1)poppushdef(`m4code',m4tmp)')dnl
+ ifinstr(m4code,X,`pushdef(`opcode',substr(m4code,1))',
+ `foreach_(`m4cd',`pushdef(`Cd'decr(m4Lx),m4cd)',1111110,0110000,1101101,
+ 1111001,0110011,1011011,1011111,1110000,1111111,1111011)dnl
+ pushdef(`opcode',Cd`'m4code)')dnl
+ for_(1,7,1,`pushdef(`attrib'm4x,
+ ifelse(substr(opcode,decr(m4x),1),1,`m4on',`m4off'))')dnl
+ Seg1: m4segment(R,m4bevel,m4bevel,attrib1) \
+ with .S at m4slu(0,m4hght-m4segwid)
+ inner = distance(Seg1.SW,Seg1.SE) + gapch*2
+ Seg2: m4segment(D,0.5,m4bevel,attrib2) with .S at \
+ m4slu(m4wdth/2-m4segwid,m4hght-m4segwid-inner/2)
+ Seg3: m4segment(D,m4bevel,0.5,attrib3) with .S at \
+ m4slu(m4wdth/2-m4segwid,m4segwid+inner/2)
+ Seg4: m4segment(L,m4bevel,m4bevel,attrib4) with .S at m4slu(0,m4segwid)
+ Seg5: m4segment(U,0.5,m4bevel,attrib5) with .S at \
+ m4slu(-m4wdth/2+m4segwid,m4segwid+inner/2)
+ Seg6: m4segment(U,m4bevel,0.5,attrib6) with .S at \
+ m4slu(-m4wdth/2+m4segwid,m4hght-m4segwid-inner/2)
+ Seg7: m4segment(R,0.5,0.5,attrib7) with .c at m4slu(0,m4hght/2)
+ ifelse(dodp,1,`Seg8: circle diam m4segwid m4on \
+ at m4slu(Seg3.e.x+m4segwid/2+m4gap,Seg4.s.y+m4segwid/2)') popdef(`dodp')
+ popdef(`m4hght',`m4wdth',`m4slant',`m4segwid',`m4gap',`m4bevel',
+ `m4on',`m4off',`m4code',`opcode')dnl
+ for_(1,7,1,`popdef(`attrib'm4x)') for_(0,9,1,`popdef(`Cd'm4x)')dnl
+ ]')
+define(`m4segment',`[ setdir_(`$1')
+ m4seven_pos(SE,E,NE,,`$2'); m4seven_pos(SW,W,NW,-,`$3')
+ resetdir_
+ S: 1/2 between SW and SE
+ Line: line from m4slu(S.x,S.y) to m4slu(SE.x,SE.y) then to m4slu(E.x,E.y) \
+ then to m4slu(NE.x,NE.y) then to m4slu(NW.x,NW.y) then to m4slu(W.x,W.y) \
+ then to m4slu(SW.x,SW.y) then to m4slu(S.x,S.y) `$4' ] ')
+define(`m4seven_pos',
+ `AA: (`$4'(m4wdth/2-m4segwid-gapch),0); `$1': rot_(AA.x,AA.y,rp_ang)
+ BA: AA + (`$4'1,1)*m4segwid*(1-`$5'); `$2': rot_(BA.x,BA.y,rp_ang)
+ CA: BA - (`$4'1,-1)*m4segwid*`$5'; `$3': rot_(CA.x,CA.y,rp_ang) ')
+define(`m4slu',`(`$1'+(`$2')*m4slant,`$2')')
+
+divert(0)dnl
+
+
+[
+ S: sevensegment(code=4.;hght=1)
+ { for_(1,8,1,`"m4x" at S.Seg`'m4x') }
+ move right 0.25
+ P: sevensegment(code=X1100011;off=invis;hght=1)
+ ]
+[
+ for_(0,9,1,`sevensegment(code=m4x`'ifelse(m4x,1,.);slant=1/4;off=invis)
+ move movewid/4')
+ ] with .nw at last [].sw+(0,-boxht/3)
+
+.PE
diff --git a/graphics/circuit_macros/examples/shadowed.m4 b/graphics/circuit_macros/examples/Shadowed.m4
index 1f26d36049..fbac6a5b5d 100644
--- a/graphics/circuit_macros/examples/shadowed.m4
+++ b/graphics/circuit_macros/examples/Shadowed.m4
@@ -1,15 +1,12 @@
.PS
-# shadowed.m4
+# Shadowed.m4
gen_init
NeedDpicTools
-divert(-1)
-
-divert(0)dnl
Boxes: [
movewid = movewid/2
B1: shadowed(,,
- rad=0bp__; shadowthick=lthick*4; shadowcolor="lightgray"; shadowangle=-60; \
+ shadowthick=lthick*4; shadowcolor="lightgray"; shadowangle=-60; \
attrib=fill_(0.85) "box")
move
@@ -55,6 +52,12 @@ move
move
ColoredV(ellipse,,outlined "magenta" shaded "yellow" "Goodbye")
+
+move
+ ColoredV(box,
+ ((0,0,0,0, 0.25,0,0,0, 0.251,1,1,1, 0.8,1,1,1, 0.801,1,0,0, 1,1,0,0)),
+ ht 3/4 wid 1 rad 3/32)
+ "\textcolor{white}{Heading}" at last [].n below
] with .nw at Boxes.sw #+(0,-moveht)
.PE
diff --git a/graphics/circuit_macros/examples/Sources.m4 b/graphics/circuit_macros/examples/Sources.m4
index 8c4f9634db..ceeea28cb0 100644
--- a/graphics/circuit_macros/examples/Sources.m4
+++ b/graphics/circuit_macros/examples/Sources.m4
@@ -19,18 +19,17 @@ define(`NL',`; move down $1; right_')
{source(,SC) ; move ; "`\tt source(,SC)'" ljust} NL
{source(,AC); move ; "`\tt source(,AC)'" ljust} NL
{source(,X) ; move ; "`\tt source(,X)'" ljust} NL
- {source(,F) ; move ; "`\tt source(,F)'" ljust} NL
{source(,G) ; move ; "`\tt source(,G)'" ljust} NL
{source(,Q) ; move ; "`\tt source(,Q)'" ljust} NL #(0.3)
+ {source(,F) ; move ; "`\tt source(,F)'" ljust} NL
+ {geiger(,,,,fill_(0.9)); move;
+ "`\tt \shortstack[l]{geiger(,{,},{,}\\ fill\_(0.9))}'" ljust} NL
}
move right_ 2.0
{
-# {source(,,0.4) ; move ; "`\tt source(,{,}0.4)'" ljust} NL(0.35)
{source(,,0.4,,shaded "yellow") ; move ;
"`\tt\shortstack[l]{source(,{,}0.4,{,}\\ shaded \"yellow\")}'" ljust} NL(0.35)
-# {source(,P) ; move ; "`\tt source(,P)'" ljust} NL
- {source(,P,,,fill_(0.9)) ; move ;
- "`\tt\shortstack[l]{source(,P,{,},\\ fill\_(0.9))}'" ljust} NL
+ {source(,P) ; move ; "`\tt source(,P)'" ljust} NL
{source(,U) ; move ; "`\tt source(,U)'" ljust} NL
{source(,H) ; move ; "`\tt source(,H)'" ljust} NL
{source(,R) ; move ; "`\tt source(,R)'" ljust} NL
@@ -38,17 +37,18 @@ define(`NL',`; move down $1; right_')
{source(,SCr) ; move ; "`\tt source(,SCr)'" ljust} NL
{source(,T) ; move ; "`\tt source(,T)'" ljust} NL
{source(,L) ; move ; "`\tt source(,L)'" ljust} NL
- {source(,B) ; move ; "`\tt source(,B)'" ljust} NL
+ {source(,B) ; move ; "`\tt source(,B)'" ljust} NL(moveht*0.8)
{nullator ; move ; "`\tt nullator'" ljust} NL(moveht*0.8)
{norator ; move ; "`\tt norator'" ljust} NL(moveht*0.9)
{ttmotor(,G) ; move ; "`\tt ttmotor(,G)'" ljust} NL(moveht*1.1)
- {proximity ; move ; "`\tt \shortstack[l]{proximity\\ = consource(,P)}'" ljust}
+ {battery ; move ; "`\tt battery'" ljust} NL(0.3)
+ {battery(,3,R) ; move ; "`\tt battery(,3,R)'" ljust} #NL(0.35)
}
move right_ 2.0
{source(,N) ; move ; "`\tt source(,N)'" ljust} NL
+ {source(,NA) ; move ; "`\tt source(,NA)'" ljust} NL
+ {source(,NB) ; move ; "`\tt source(,NB)'" ljust} NL
{source(,"\rm mA");move; "`\tt source(,\"mA\")'" ljust} NL(0.31)
-# {source(,"mA");move; "`\tt source(,'" ljust \
-# "`\tt \enskip \"mA\")'" ljust} NL(0.31)
{consource ; move ; "`\tt consource'" ljust} NL(0.32)
{consource(,I) ; move ; "`\tt consource(,I)'" ljust} NL(0.32)
{consource(,i) ; move ; "`\tt consource(,i)'" ljust} NL(0.32)
@@ -57,8 +57,8 @@ define(`NL',`; move down $1; right_')
{consource(,V) ; move ; "`\tt consource(,V)'" ljust} NL(0.32)
{consource(,v) ; move ; "`\tt consource(,v)'" ljust} NL(0.3)
{consource(,tv) ; move ; "`\tt consource(,tv)'" ljust} NL(0.3)
- {battery ; move ; "`\tt battery'" ljust} NL(0.3)
- {battery(,3,R) ; move ; "`\tt battery(,3,R)'" ljust} #NL(0.35)
+ {proximity ; move ;
+ "`\tt \shortstack[l]{proximity\\ = consource(,P)}'" ljust} NL(0.35)
iflatex(`ifpsfrag(,`latexcommand(})')')
.PE
diff --git a/graphics/circuit_macros/examples/Switches.m4 b/graphics/circuit_macros/examples/Switches.m4
index 0b2d00d0e0..7b25160394 100644
--- a/graphics/circuit_macros/examples/Switches.m4
+++ b/graphics/circuit_macros/examples/Switches.m4
@@ -138,7 +138,7 @@ movewid = 0.25
"\tt circle=\"M\")" ljust}
move right_
dswitch(,,WBcDIGC,circle="M")
- {"\tt (,{,}WBcDIGC," ljust at last line.start+(0,-15bp__) \
+ {"\tt (,{,}WBcDIGC," wid 72bp__ ljust at last line.start+(0,-15bp__) \
"\tt circle=\"M\")" ljust}
}
diff --git a/graphics/circuit_macros/examples/cbresistor.m4 b/graphics/circuit_macros/examples/cbresistor.m4
new file mode 100644
index 0000000000..152e42758c
--- /dev/null
+++ b/graphics/circuit_macros/examples/cbresistor.m4
@@ -0,0 +1,80 @@
+.PS
+# cbresistor.m4
+# https://tex.stackexchange.com/questions/709339/create-command-with-decoration-in-tikz
+# https://www.google.com/search?client=firefox-b-d&q=resistor+color+code
+cct_init
+divert(-1)
+
+ `cbresistor(linespec, keys)
+ keys:
+ lgth=expr; wdth=expr;
+ body=body attributes, e.g. shaded "green"
+ type=A|B; pinched body shape
+ colors=color:color:...;
+ Up to 6 colors, a color may be nul '
+define(`cbresistor',`eleminit_(`$1')
+ pushkeys_(`$2',`lgth:dimen_/2; wdth:dimen_/5; body::N; colors::N; type::N')dnl
+{line to rvec_(max(0,rp_len/2-m4lgth/2),0) thick linethick*3/2; M4cbW: Here
+ ifelse(m4type,B,
+ `[L:rotbox(m4lgth*3/23, m4wdth, shaded "darkgray" m4body,r=m4wdth/20)
+ C:rotbox(m4lgth*17/23, m4wdth*9/10, shaded "darkgray" m4body) \
+ with .W at L.E
+ R:rotbox(m4lgth*3/23, m4wdth, shaded "darkgray" m4body,r=m4wdth/20) \
+ with .W at C.E] with .L.W at Here; move to last [].R.E',
+ `rotbox(m4lgth, m4wdth, shaded "darkgray" m4body) with .W at Here')
+ ifelse(m4colors,,,`define(`m4bw',(m4lgth/23))dnl
+ definergbcolor(silver,0.75,0.75,0.75)
+ definergbcolor(gold,1,215/255,0)
+ stacksplit_(`cbrstack',m4colors,:)stackreverse_(`cbrstack')dnl
+ stackargs_(`m4pos',22,17,12,7,5,2)dnl
+ stackdo_(`cbrstack',`ifelse(cbrstack,nul,,
+ `{ move to M4cbW+vec_(m4pos*m4bw-m4bw/2,0)
+ define(`m4ctr',ifelse(m4type,B,eval((m4pos>3)*(m4pos<20)),0))dnl
+ line m4colorfix(outlined,cbrstack) thick m4bw*1.8/(1bp__) \
+ from rvec_(0,-ifelse(m4ctr,1,0.9*)m4wdth/2) \
+ to rvec_(0, ifelse(m4ctr,1,0.9*)m4wdth/2)
+ ifelse(ifelse(cbrstack,silver,1,cbrstack,gold,1),1,
+ `line outlined rgbstring(0.8,0.8,0.8) thick last line.thick \
+ from 0.2 along_(last line) to 0.4 along_(last line)
+ line outlined "white" thick last line.thick \
+ from 0.25 along_(2nd last line) to 0.3 along_(2nd last line)')
+ }')
+ popdef(`m4pos')') stackdo_(`m4pos')')
+ line to rvec_(max(0,rp_len/2-m4lgth/2),0) thick linethick*3/2}
+ popdef(`m4lgth',`m4wdth',`m4body',`m4colors',`m4type')dnl
+ line to rvec_(rp_len,0) invis ')
+
+divert(0)dnl
+
+linewid = 3/2*linewid
+ifsvg(definergbcolor(Dandelion,0.95,0.65,0.2))
+ifsvg(definergbcolor(Peach,0.76,0.5,0.1))
+
+define(`dpr',
+ `{ cbresistor(,type=B;
+ body=m4colorfix(shaded,Dandelion) m4colorfix(outlined,Peach);
+ colors=`$2') }
+ {iflatex(`sprintf("\SI{%g}{\ohm}",`$1')')ifsvg("``$1'svg_Omega'") \
+ at last line.end+(10bp__,-5bp__) rjust}
+ move right_ moveht*5/6; down_ ')
+
+ define(`elen_',(3/2*linewid))
+ define(`dimen_',(5/4*linewid))
+ down_
+ foreach_(`pair',`dpr(patsubst(pair,-,`,'):nul:black:silver)',
+ 10-brown:black,
+ 12-brown:red,
+ 15-brown:green,
+ 18-brown:gray,
+ 22-red:red,
+ 27-red:Violet,
+ 33-orange:orange,
+ 39-orange:white,
+ 47-yellow:Violet,
+ 56-green:blue,
+ 68-blue:gray,
+ 82-gray:red)
+ dpr(100,brown:black:nul:brown:gold)
+ {"iflatex(\SI{5}{\percent},5 %)" at last line.end+(10bp__,-15bp__) rjust}
+
+.PE
diff --git a/graphics/circuit_macros/examples/dpv/AmpTableDPV.m4 b/graphics/circuit_macros/examples/dpv/AmpTableDPV.m4
index 2850ff5ad7..ab6d34b9e2 100644
--- a/graphics/circuit_macros/examples/dpv/AmpTableDPV.m4
+++ b/graphics/circuit_macros/examples/dpv/AmpTableDPV.m4
@@ -1,25 +1,24 @@
.PS
-# `Amptable.m4'
+# `AmptableDPV.m4'
cct_init(svg_font(sans-serif,11bp__))
textwid = 0.7
movewid = 2pt__
-{
+{
{amp ; move ; "`amp'" ljust}
- move down 0.4; right_
- {amp(,0.3) ; move ; "`amp'(,0.3)" ljust}
- }
move right_ 2.0
-{ {delay ; move ; "`delay'" ljust}
- move down 0.4; right_
- {delay(,0.2) ; move ; "`delay'(,0.2)" ljust}
- }
-
+ {amp(,5mm__) ; move ; "`amp(,5mm__)'" ljust}
move right_ 2.0
-{ {integrator ; move ; "`integrator'" ljust}
+ {integrator ; move ; "`integrator'" ljust}
+ }
move down 0.5; right_
- {integrator(,0.3) ; move ; "`integrator'(,0.3)" wid 1.2 at Here ljust}
- }
+{
+ {delay(,,fill_(0.9)) ; move ;
+ "`delay(,,'" ljust "`fill_(0.9))'" ljust}
+ move right_ 2.0
+ {delay(,,type=S;body=shaded rgbstring(0.75,0.75,1)); move
+ "`delay(,,type=S;" ljust "body=shaded rgbstring(0.75,0.75,1)')" ljust}
+ }
command "</g>" # end font
.PE
diff --git a/graphics/circuit_macros/examples/dpv/DiniDPV.m4 b/graphics/circuit_macros/examples/dpv/DiniDPV.m4
index 1846917a4a..7d48ca590d 100644
--- a/graphics/circuit_macros/examples/dpv/DiniDPV.m4
+++ b/graphics/circuit_macros/examples/dpv/DiniDPV.m4
@@ -3,9 +3,10 @@
# This diagram can be produced using, e.g.
# m4 pdf.m4 Dini.m4 | dpic -d > Dini.pdf
+# https://tex.stackexchange.com/questions/516734/plot-dinis-surface
threeD_init
NeedDpicTools
-scale = 1.5
+scale = 2.0
[
viewazimuth = 0 # View angles in degrees
viewelevation = 20
@@ -189,5 +190,58 @@ array2(h,m4inx,53,54,55,58,59,57)
for_(2,5,1,`to Project((v[x[m4x],1]),(v[x[m4x],2]),(v[x[m4x],3]))\')\
to Project((v[x[1],1]),(v[x[1],2]),(v[x[1],3])) thick 0.2 fill_(0)
}
-] scaled 2.5 with .sw at last [].se+(1,0)
+] scaled 2.5 with .sw at last [].se+(0.5,0)
+[
+#.PE
+#.PS
+## BlueBall.m4
+## https://latex.org/forum/viewtopic.php?f=5&t=30639
+#threeD_init
+#NeedDpicTools
+
+ ballrad = 2.5
+ cylrad = ballrad*0.87
+ hht =sqrt(ballrad^2-cylrad^2)
+ azimuth = 0
+ elevation = atan2(hht,cylrad)
+ setview(azimuth,elevation*rtod_)
+ sinelev = sin(elevation)
+
+ linethick_(1)
+ C: shadedball(ballrad,,,,(0,1,1)) at (0,0)
+ Op: C+Project(0,0,hht)
+ O: C+Project(0,0,-hht)
+ line dashed from Op+( cylrad,0) down Op.y-O.y
+ line dashed from Op+(-cylrad,0) down Op.y-O.y
+
+ define(`Normal',`cosd(`$1')*cylrad,sind(`$1')*cylrad,-hht')
+ define Cylvis { $`'2 = dot3D(Normal($`'1),View3D) }
+ findroot(Cylvis,5,170,1e-8,rA)
+ A: Project(Normal(rA))
+ B: O+(-(A.x-O.x),A.y-O.y)
+ aA = atan2(A.y-O.y,(A.x-O.x)*sinelev)
+ ellipsearc(cylrad*2,cylrad*2*sinelev,aA,-pi_-aA,0,cw) with .C at O
+ ellipsearc(cylrad*2,cylrad*2*sinelev,-pi_-aA-4*dtor_,aA+4*dtor_,,cw,dashed) \
+ with .C at O
+ ellipsearc(cylrad*2,cylrad*2*sinelev,-aA,pi_+aA,0,cw) with .C at Op
+ ellipsearc(cylrad*2,cylrad*2*sinelev,pi_+aA+4*dtor_,-aA-4*dtor_,,cw,dashed) \
+ with .C at Op
+
+ dot(at C); # "$T$" at last [].w rjust below
+ dot(at O); # "$O$" at last [].s below
+ dot(at A); # "$A$" at last [].s ljust below
+ dot(at B); # "$B$" at last [].s rjust below
+ dot(at Op); # "$O'$" at last [].n above
+ Ap: dot(at Op+(A-O)); # "$A'$" at Ap.n ljust above
+ Bp: dot(at Op+(B-O)); # "$B'$" at Bp.n rjust above
+
+ linethick_(0.4)
+ line dashed from Ap to A then to O then to Op
+ line dashed from A to C
+ line dashed from Bp to B
+ V: Between_(O,A,0.15)
+ U: C+Project(0,0,-hht+0.15)
+ line from U to U+(V-O) then to V
+ ] with .w at last [].e+(0.5,0)
+
.PE
diff --git a/graphics/circuit_macros/examples/dpv/EVplugsDPV.m4 b/graphics/circuit_macros/examples/dpv/EVplugsDPV.m4
index d3e40c8dd2..50afde5355 100644
--- a/graphics/circuit_macros/examples/dpv/EVplugsDPV.m4
+++ b/graphics/circuit_macros/examples/dpv/EVplugsDPV.m4
@@ -14,7 +14,7 @@ divert(-1)
twdth=expr; # tab width
thgt=expr; # tab hght
thick=expr; # outer line thickness (pt)
- inthick=expr; # inner line thickness (pt)
+ thickin=expr; # inner line thickness (pt)
BG=attributes; # shaded gray etc
L1=attributes; # L1 attributes ...
N=attributes;
@@ -23,21 +23,21 @@ divert(-1)
CP=attributes; '
define(`pEVskale',25.4) dnl default plug size (20 mm)
define(`EV_J1772',`[ pushkeys_(`$1', `wdth:20/pEVskale;
- twdth:3.5/20*m4wdth; thgt:1.5/20*m4wdth; diamLNP:6/20*m4wdth;
- thick:2; inthick:1.5; BG::N; L1::N; N::N; PE::N; PP::N; CP::N; ')
+ twdth:3.5/20*m4`'wdth; thgt:1.5/20*m4`'wdth; diamLNP:6/20*m4`'wdth;
+ thick:2; thickin:1.5; BG::N; L1::N; N::N; PE::N; PP::N; CP::N; ')
tang = atan2(m4twdth/2,m4wdth/2)*rtod_
TS: (Rect_(m4wdth/2,-90-tang)); TE: (Rect_(m4wdth/2,-90+tang))
Tab: line thick m4thick from TS down_ m4thgt \
then to TE-(0,m4thgt) then to TE m4BG
Arc: arc thick m4thick to TS with .c at (0,0) m4BG
round(at TS,last arc.thick); round(at TE,last arc.thick)
- L1: circle diam m4diamLNP thick m4inthick at (Rect_(m4wdth/4,150)) m4L1
- N: circle diam m4diamLNP thick m4inthick at (Rect_(m4wdth/4, 30)) m4N
- PE: circle diam m4diamLNP thick m4inthick at (0,-m4wdth/4) m4PE
- PP: circle diam m4diamLNP*0.55 thick m4inthick at (Rect_(m4wdth/3,210)) m4PP
- CP: circle diam m4diamLNP*0.55 thick m4inthick at (Rect_(m4wdth/3,-30)) m4CP
+ L1: circle diam m4diamLNP thick m4thickin at (Rect_(m4wdth/4,150)) m4L1
+ N: circle diam m4diamLNP thick m4thickin at (Rect_(m4wdth/4, 30)) m4N
+ PE: circle diam m4diamLNP thick m4thickin at (0,-m4wdth/4) m4PE
+ PP: circle diam m4diamLNP*0.55 thick m4thickin at (Rect_(m4wdth/3,210)) m4PP
+ CP: circle diam m4diamLNP*0.55 thick m4thickin at (Rect_(m4wdth/3,-30)) m4CP
`$2' popdef(`m4CP',`m4PP',`m4PE',`m4N',`m4L1',`m4BG',
- `m4wdth',`m4diamLNP',`m4twdth',`m4thgt',`m4thick',`m4inthick') ]')
+ `m4wdth',`m4diamLNP',`m4twdth',`m4thgt',`m4thick',`m4thickin') ]')
`EV_J3068(keys,shade)
EV charging plug in a [] block
@@ -46,7 +46,7 @@ define(`EV_J1772',`[ pushkeys_(`$1', `wdth:20/pEVskale;
twdth=expr; # tab width
thgt=expr; # tab hght
thick=expr; # outer line thickness (pt)
- inthick=expr; # inner line thickness (pt)
+ thickin=expr; # inner line thickness (pt)
BG=attributes; # shaded gray etc
L1|L2|L3=attributes; # pin attributes ...
N=attributes;
@@ -55,7 +55,7 @@ define(`EV_J1772',`[ pushkeys_(`$1', `wdth:20/pEVskale;
CP=attributes;
arg2= R:G:B background fill color '
define(`EV_J3068',`[ pushkeys_(`$1',
- `wdth:25/pEVskale; diamLNP:m4wdth*0.25; thick:2; inthick:1.5;
+ `wdth:25/pEVskale; diamLNP:m4`'wdth*0.25; thick:2; thickin:1.5;
BG::N; L1::N; L2::N; L3::N; N::N; PE::N; PP::N; CP::N; ')
C: Here
NE: C+(Rect_(m4wdth/2,45)); NW: C+(Rect_(m4wdth/2,135))
@@ -68,14 +68,14 @@ define(`EV_J3068',`[ pushkeys_(`$1',
arc thick m4thick to Ac+(0,m4diamLNP/2) with .c at Ac m4BG
Top: line thick m4thick to (NW+NE-Ac, Here) m4BG
arc thick m4thick to NW with .c at Here+(0,-m4diamLNP/2) m4BG
- PE: circle diam m4diamLNP thick m4inthick at C m4PE
- PP: circle diam m4diamLNP*0.55 thick m4inthick at C+(Rect_(m4wdth/3,45)) m4PP
- CP: circle diam m4diamLNP*0.55 thick m4inthick at C+(Rect_(m4wdth/3,135)) m4CP
- L1: circle diam m4diamLNP thick m4inthick at C+(m4wdth*.3,0) m4L1
- L2: circle diam m4diamLNP thick m4inthick at C+(Rect_(m4wdth*.3,-60)) m4L2
- L3: circle diam m4diamLNP thick m4inthick at C+(Rect_(m4wdth*.3,-120)) m4L3
- N: circle diam m4diamLNP thick m4inthick at C-(m4wdth*.3,0) m4N
- `$3' popdef(`m4wdth',`m4diamLNP',`m4thick',`m4inthick',
+ PE: circle diam m4diamLNP thick m4thickin at C m4PE
+ PP: circle diam m4diamLNP*0.55 thick m4thickin at C+(Rect_(m4wdth/3,45)) m4PP
+ CP: circle diam m4diamLNP*0.55 thick m4thickin at C+(Rect_(m4wdth/3,135)) m4CP
+ L1: circle diam m4diamLNP thick m4thickin at C+(m4wdth*.3,0) m4L1
+ L2: circle diam m4diamLNP thick m4thickin at C+(Rect_(m4wdth*.3,-60)) m4L2
+ L3: circle diam m4diamLNP thick m4thickin at C+(Rect_(m4wdth*.3,-120)) m4L3
+ N: circle diam m4diamLNP thick m4thickin at C-(m4wdth*.3,0) m4N
+ `$3' popdef(`m4wdth',`m4diamLNP',`m4thick',`m4thickin',
`m4BG',`m4L1',`m4L2',`m4L3',`m4N',`m4PE',`m4PP',`m4CP') ]')
`EV_CCS1(J1772 keys,DC keys)
@@ -84,20 +84,20 @@ define(`EV_J3068',`[ pushkeys_(`$1',
diamPM=expr; # diam of DC+, DC- circles
sep=expr; # separation of Jack and DC
thick=expr; # outer line thickness (pt)
- inthick=expr; # inner line thickness (pt)
+ thickin=expr; # inner line thickness (pt)
BG=attributes; # shaded gray etc
DCplus=attributes;
DCminus=attributes; '
define(`EV_CCS1',`[
J: EV_J1772(`$1')
- pushkeys_(`$2',`wdth:J.wid:23.5/20; hght:J.wid*11/20; diamPM:m4hght*7/11;
- sep:J.wid*3/30; thick:J.Arc.thick; inthick:J.PE.thick;
+ pushkeys_(`$2',`wdth:J.wid:23.5/20; hght:J.wid*11/20; diamPM:m4`'hght*7/11;
+ sep:J.wid*3/30; thick:J.Arc.thick; thickin:J.PE.thick;
BG::N; DCplus::N; DCminus::N;')
DC: [ Box: box thick m4thick wid m4wdth ht m4hght rad m4hght/2 m4BG
- DCplus: circle thick m4inthick diam m4diamPM at Box.w+(m4hght/2,0) m4DCplus
- DCminus:circle thick m4inthick diam m4diamPM at Box.e-(m4hght/2,0) m4DCminus
+ DCplus: circle thick m4thickin diam m4diamPM at Box.w+(m4hght/2,0) m4DCplus
+ DCminus:circle thick m4thickin diam m4diamPM at Box.e-(m4hght/2,0) m4DCminus
] with .n at J.s+(0,-m4sep)
- popdef(`m4wdth',`m4hght',`m4diamPM',`m4sep',`m4thick',`m4inthick',`m4BG',
+ popdef(`m4wdth',`m4hght',`m4diamPM',`m4sep',`m4thick',`m4thickin',`m4BG',
`m4DCplus',`m4DCminus')
]')
@@ -107,22 +107,22 @@ define(`EV_CCS1',`[
diamPM=expr; # diam of DC+, DC- circles
sep=expr; # separation of Jack and DC
thick=expr; # outer line thickness (pt)
- inthick=expr; # inner line thickness (pt)
+ thickin=expr; # inner line thickness (pt)
BG=attributes; # shaded gray etc
DCplus=attributes;
DCminus=attributes;
arg2= R:G:B background fill color '
define(`EV_CCS2',`[
J: EV_J3068(`$1',`$2')
- pushkeys_(`$3',`wdth:J.wid:23.5/20; hght:J.wid*11/20; diamPM:m4hght*7/11;
- sep:J.wid*3/30; thick:J.Arc.thick; inthick:J.PE.thick;
+ pushkeys_(`$3',`wdth:J.wid:23.5/20; hght:J.wid*11/20; diamPM:m4`'hght*7/11;
+ sep:J.wid*3/30; thick:J.Arc.thick; thickin:J.PE.thick;
BG::N; DCplus::N; DCminus::N;')
DC: [ Box: box thick m4thick wid m4wdth ht m4hght rad m4hght/2 dnl
m4BG ifelse(`$2',,,`shaded rgbstring(patsubst(`$2',:,`,'))')
- DCplus: circle thick m4inthick diam m4diamPM at Box.w+(m4hght/2,0) m4DCplus
- DCminus:circle thick m4inthick diam m4diamPM at Box.e-(m4hght/2,0) m4DCminus
+ DCplus: circle thick m4thickin diam m4diamPM at Box.w+(m4hght/2,0) m4DCplus
+ DCminus:circle thick m4thickin diam m4diamPM at Box.e-(m4hght/2,0) m4DCminus
] with .n at J.s+(0,-m4sep)
- popdef(`m4wdth',`m4hght',`m4diamPM',`m4sep',`m4thick',`m4inthick',`m4BG',
+ popdef(`m4wdth',`m4hght',`m4diamPM',`m4sep',`m4thick',`m4thickin',`m4BG',
`m4DCplus',`m4DCminus')
]')
@@ -130,12 +130,12 @@ define(`EV_CCS2',`[
EV charging plug in a [] block
keys: wdth=expr; # plug width
thick=expr; # outer line thickness (pt)
- inthick=expr; # inner line thickness (pt)
+ thickin=expr; # inner line thickness (pt)
BG=attributes; # background shaded gray etc
DCplus=|DCminusNS=|FG=|NC=|SS1=|DCP=|PP=|
CL=|CH=|SS2=attributes # pin attributes ...'
define(`EV_CHAdeMO',`[ pushdef(`m4sk',33/140/pEVskale) pushkeys_(`$1',
- `wdth:140*m4sk; thick:m4wdth*9/140/(1bp__); inthick:m4thick*1.5/9;
+ `wdth:140*m4sk; thick:m4`'wdth*9/140/(1bp__); thickin:m4`'thick*1.5/9;
BG::N; DCplus::N; DCminus::N;N::N;S::N;
FG::N; NC::N; SS1::N; DCP::N; PP::N; CL::N; CH::N; SS2::N')
C: circle thick m4thick diam m4wdth-m4thick bp__ m4BG
@@ -144,18 +144,18 @@ define(`EV_CHAdeMO',`[ pushdef(`m4sk',33/140/pEVskale) pushkeys_(`$1',
line thick m4thick*0.6 from C+(Rect_(C.rad+m4thick bp__*3/4,138)) \
to C+(Rect_(C.rad+m4thick bp__*3/4,130)) then right m4thick bp__ m4BG
idiam = (m4wdth-m4thick bp__*2)*47/(27+47*2)
- N: circle diam idiam thick m4inthick with .n at C.n-(0,m4thick bp__/2) m4N
- S: circle diam idiam thick m4inthick with .s at C.s+(0,m4thick bp__/2) m4S
- E: circle diam idiam thick m4inthick at Cintersect(N,N.diam,S,S.diam) m4DCminus
- W: circle diam idiam thick m4inthick at Cintersect(S,S.diam,N,N.diam) m4DCplus
+ N: circle diam idiam thick m4thickin with .n at C.n-(0,m4thick bp__/2) m4N
+ S: circle diam idiam thick m4thickin with .s at C.s+(0,m4thick bp__/2) m4S
+ E: circle diam idiam thick m4thickin at Cintersect(N,N.diam,S,S.diam) m4DCminus
+ W: circle diam idiam thick m4thickin at Cintersect(S,S.diam,N,N.diam) m4DCplus
foreach_(`Z',
- `line thick m4inthick up Z.diam*0.6 right Z.diam*0.6 with .c at Z
- line thick m4inthick up Z.diam*0.6 left Z.diam*0.6 with .c at Z',N,S)
+ `line thick m4thickin up Z.diam*0.6 right Z.diam*0.6 with .c at Z
+ line thick m4thickin up Z.diam*0.6 left Z.diam*0.6 with .c at Z',N,S)
foreach_(`L',`L: circle diam idiam/4 thick linethick/2 \
at N+(Rect_(idiam/4,90*m4Lx)) m4xpand(m4`'L)',FG,NC,DCP,SS1)
foreach_(`L',`L: circle diam idiam/4 thick linethick/2 \
at S+(Rect_(idiam/4,90*m4Lx)) m4xpand(m4`'L)',PP,CL,SS2,CH)
- `$3' popdef(`m4sk',`m4wdth',`m4thick',`m4inthick',`m4BG',
+ `$3' popdef(`m4sk',`m4wdth',`m4thick',`m4thickin',`m4BG',
`m4DCplus',`m4DCminus',`m4N',`m4S',
`m4FG',`m4NC',`m4SS1',`m4DCP',`m4PP',`m4CL',`m4CH',`m4SS2') ]')
@@ -173,7 +173,7 @@ define(`EV_CHAdeMO',`[ pushdef(`m4sk',33/140/pEVskale) pushkeys_(`$1',
Gndinner=attributes;
PP=attributes;
CP=attributes; '
-define(`EV_NAC',`[ pushkeys_(`$1', `wdth:1.6; diamL:m4wdth*0.28; BG::N;
+define(`EV_NAC',`[ pushkeys_(`$1', `wdth:1.6; diamL:m4`'wdth*0.28; BG::N;
L1::N; L1inner::N; L2::N; L2inner::N; Gndinner::N; inner::N;
Gnd::N; PP::N; CP::N; ')
sN = 1/pEVskale*m4wdth/1.6 # drawing coord scale factor
diff --git a/graphics/circuit_macros/examples/dpv/GeometryDPV.m4 b/graphics/circuit_macros/examples/dpv/GeometryDPV.m4
index 18e0cb2fcd..eb87bd8f45 100644
--- a/graphics/circuit_macros/examples/dpv/GeometryDPV.m4
+++ b/graphics/circuit_macros/examples/dpv/GeometryDPV.m4
@@ -145,7 +145,7 @@ Fig4: [ ls = 2/3 # local scale
Y: LCintersect(HZ,CC4,C4.rad,R); "Y" at Y above
X: LCintersect(HZ,CC2,C2.rad); "X" at X above rjust
- Loopover_(`P',`dot(at P)',X,Y,Z)
+ foreach_(`P',`dot(at P)',X,Y,Z)
line dashed from X to Y chop -linewid/2
RightAngle(A,Z,Y)
diff --git a/graphics/circuit_macros/examples/dpv/Makefile b/graphics/circuit_macros/examples/dpv/Makefile
index 30cd004402..f9e04756c7 100644
--- a/graphics/circuit_macros/examples/dpv/Makefile
+++ b/graphics/circuit_macros/examples/dpv/Makefile
@@ -4,9 +4,9 @@ LIBDIR = $$HOME/lib
M4LIBS = svg.m4 DPVconfig.m4
M4LIBS = svg.m4
M4 = m4
-# PDFCONVERT = pdf2svg
+PDFCONVERT = pdf2svg
# The current dvisvgm outputs CRLF line endings
-PDFCONVERT = dvisvgm
+# PDFCONVERT = dvisvgm
# To process a single file, copy it to test.m4 and type "make tst"
# to produce tstDPV.html
@@ -17,6 +17,10 @@ DPIC = dpic
#DPIC = ../dpic/bison/dpic
#DPIC = ../dpic/bi*dev/dpic
+# Quiet mode for MiKTeX or texlive
+# QLATEX = latex --quiet
+QLATEX = latex -interaction=batchmode
+
# To test the Windows executable. Change these as needed for the operating
# system. NOTE: cscDPV.m4 and Connectors.m4 use awk and sed which
# do not work at present with the Windows version.
@@ -41,13 +45,15 @@ DPIC = dpic
echo "\begin{document}" >> F_$*.tex
echo "\input $*.tex" >> F_$*.tex
echo "\end{document}" >> F_$*.tex
- pdflatex --quiet F_$*
+ pdf$(QLATEX) F_$*
$(M4) pgf.m4 F_$*.dim $*.m4 > $*.pic
$(DPIC) -g $*.pic >> $*.tex
- pdflatex --quiet F_$*
+ pdf$(QLATEX) F_$*
if test "$(PDFCONVERT)" = "pdf2svg" ; then \
+ echo "Using pdf2svg" ; \
pdf2svg F_$*.pdf $*.xsvg && cat $*.xsvg | tr -d '\r' > $*.svg ; \
else \
+ echo "Using dvisvgm" ; \
dvisvgm --pdf F_$*.pdf && cat F_$**.svg | tr -d '\r' > $*.svg ; \
cp $*.svg $*.xsvg ; \
fi
@@ -72,14 +78,14 @@ CCTDPV = \
NLGDPV.svg NPDTDPV.svg NportDPV.svg OpampDPV.svg OptoisoDPV.svg \
PconnDPV.svg PlateDPV.svg PushPullDPV.svg QuantumDPV.svg \
RectifiersDPV.svg RelayDPV.svg ResistorsDPV.svg RotboxDPV.svg\
- SchottkyDPV.svg ShiftRDPV.svg SierpinskiDPV.svg \
- SixpoleDPV.svg SourcesDPV.svg SQUIDDPV.svg SwitchesDPV.svg \
+ SchottkyDPV.svg SevensegmentDPV.svg ShiftRDPV.svg SierpinskiDPV.svg \
+ SixpoleDPV.svg SourcesDPV.svg Spec555DPV.svg SwitchesDPV.svg \
TTLnandDPV.svg TgateDPV.svg ThreeDPV.svg \
TubediagsDPV.svg VariableDPV.svg WindingsDPV.svg XformDPV.svg \
- controlDPV.svg cscDPV.svg diamondDPV.svg ex00DPV.svg \
+ cbresistorDPV.svg controlDPV.svg cscDPV.svg diamondDPV.svg \
ex01DPV.svg ex02DPV.svg ex03DPV.svg ex04DPV.svg ex05DPV.svg ex06DPV.svg \
ex08DPV.svg ex09DPV.svg ex10DPV.svg ex11DPV.svg ex12DPV.svg \
- ex15DPV.svg ex16DPV.svg ex17DPV.svg ex18DPV.svg ex21DPV.svg \
+ ex15DPV.svg ex16DPV.svg ex18DPV.svg ex21DPV.svg \
expDPV.svg fetDPV.svg graysurfDPV.svg keyboardDPV.svg lcctDPV.svg \
pwrsupplyDPV.svg quickDPV.svg randomDPV.svg recycleDPV.svg relaycoilDPV.svg \
roseDPV.svg sfgDPV.svg shapesDPV.svg SmithchartDPV.svg paletteDPV.svg \
diff --git a/graphics/circuit_macros/examples/dpv/QuantumDPV.m4 b/graphics/circuit_macros/examples/dpv/QuantumDPV.m4
index 7d2de93cbd..49ed173ffd 100644
--- a/graphics/circuit_macros/examples/dpv/QuantumDPV.m4
+++ b/graphics/circuit_macros/examples/dpv/QuantumDPV.m4
@@ -17,6 +17,7 @@ define(`Meter',`[ Box: box wid boxwid*3/2 fill_(1)
arc cw from C+(-r,0) to C+(r,0) with .c at C
arrow from C+(-r/4,0) to C+(0.9*r,0.9*r) ]')
+[
X: Bus(,shaded rgbstring(0.5,0.5,1) "X")
A1: Bus(from X.start+(0,-boxht*3/2), shaded "red" "A")
A2: Bus(from 2 between X.start and A1.start, shaded "red" "A")
@@ -27,5 +28,27 @@ A2: Bus(from 2 between X.start and A1.start, shaded "red" "A")
Meter with .e at X.end
box wid boxwid*1.2 ht boxht*1.2 fill_(1) at A2.end-(4.5*boxwid,0) \
"svg_it(R)svg_sub(svg_psi)svg_sup(svg_pi/2,,,-1.2ex)"
+ ]
+#.PE
+#.PS
+# SQUIDDPV.m4
+[
+cct_init(svg_font(sans-serif,11bp__))
+
+down_
+S1: SQUID
+ "J1" at S1.J1 above rjust wid 15bp__
+ "J2" at S1.J2 above ljust
+
+S2: SQUID(3,dimen_*1.5,-120) at S1.e+(elen_,0)
+ "J1" at S2.J1 above rjust
+ "J2" at S2.J2 below ljust
+ "J3" at S2.J3 above ljust
+ arcrad = S2.C.rad*0.7
+ arc from S2.c+(Rect_(arcrad,-135)) to S2.c+(Rect_(arcrad,-45)) \
+ with .c at S2.C ->
+ ] with .w at last [].e+(boxht,0)
+
+ command "</g>" # end font
.PE
diff --git a/graphics/circuit_macros/examples/dpv/ResistorsDPV.m4 b/graphics/circuit_macros/examples/dpv/ResistorsDPV.m4
index e9f54c3399..793128e2ea 100644
--- a/graphics/circuit_macros/examples/dpv/ResistorsDPV.m4
+++ b/graphics/circuit_macros/examples/dpv/ResistorsDPV.m4
@@ -2,46 +2,37 @@
# `ResistorsDPV.m4'
cct_init(svg_font(sans-serif,11pt__))
textwid = 1.5
+
movewid = 2 pt__
hm = 2.1
vm = 0.28
-
-hm = 2.05
-vm = 0.28
{
{resistor ; move ; svgLink(NportDPV.svg,"`resistor'" ljust)}
move right_ hm
- {resistor(,,Q) ; move ; "`resistor(,,Q) '" ljust}
+ {resistor(,5,Q) ; move ;"`...(,5,Q) '" ljust}
move right_ hm
- {resistor(,,V) ; move ; "`resistor(,,V) '" ljust}
+ {resistor(,,V) ; move ;"`...(,,V)'" ljust}
}
move down vm; right_
-{
- {resistor(,,ES) ; move ; "`resistor(,,ES) '" ljust}
+{ {resistor(,,ES) ; move ;"`...(,,ES) '" ljust}
move right_ hm
- {resistor(,,H) ; move ; "`resistor(,,H) '" ljust}
+ {resistor(,4,H) ; move ;"`...(,4,H) '" ljust}
move right_ hm
- {resistor(,,AC) ; move ; "`resistor(,,AC) '" ljust}
+ {resistor(,,AC) ; move ;"`...(,,AC)'" ljust}
}
move down vm; right_
-{
- {resistor(,5,B) ; move ; "`resistor(,5,B) '" ljust}
+{ {resistor(,,B) ; move ;"`...(,,B)'" ljust}
move right_ hm
- {resistor(,,E) ; move
- "`resistor(,,E)'" ljust " svg_equiv `ebox'" ljust}
+ {resistor(,,F) ; move ;"`...(,,F) '" ljust}
move right_ hm
- {ebox(,0.5,0.3) ; move ;"`ebox(,0.5,0.3) '" ljust}
+ {resistor(,,E) ; move ;"`...(,,E) svg_equiv ebox'" ljust}
}
- move down vm; right_
-{
- {ebox(,,,0.6) ; move ; "`ebox(,,,0.6) '" ljust}
+ move down vm*1.1; right_
+{ {ebox(,,,0.9) ; move ;"`ebox(,,,0.9)'" ljust}
move right_ hm
- {ebox(,,,,shaded "yellow") ; move ;"`ebox(,,,,shaded \"yellow\") '" ljust}
-}
- move down vm; right_
-{
{ebox(,wdth=0.2;box=dashed shaded "green";text="X") ; move
- "`ebox(,wdth=0.2;box=dashed shaded \"green\";text=\"X\")'" ljust}
+ "`ebox(,wdth=0.2;box=dashed shaded \"green\";'" ljust \
+ "`text=\"X\")'" ljust}
}
command "</g>" # end font
diff --git a/graphics/circuit_macros/examples/dpv/SQUIDDPV.m4 b/graphics/circuit_macros/examples/dpv/SQUIDDPV.m4
deleted file mode 100644
index a6beabbfe0..0000000000
--- a/graphics/circuit_macros/examples/dpv/SQUIDDPV.m4
+++ /dev/null
@@ -1,19 +0,0 @@
-.PS
-# SQUIDDPV.m4
-cct_init(svg_font(sans-serif,11bp__))
-
-down_
-S1: SQUID
- "J1" at S1.J1 above rjust wid 15bp__
- "J2" at S1.J2 above ljust
-
-S2: SQUID(3,dimen_*1.5,-120) at S1.e+(elen_,0)
- "J1" at S2.J1 above rjust
- "J2" at S2.J2 below ljust
- "J3" at S2.J3 above ljust
- arcrad = S2.C.rad*0.7
- arc from S2.c+(Rect_(arcrad,-135)) to S2.c+(Rect_(arcrad,-45)) \
- with .c at S2.C ->
-
- command "</g>" # end font
-.PE
diff --git a/graphics/circuit_macros/examples/dpv/SevensegmentDPV.m4 b/graphics/circuit_macros/examples/dpv/SevensegmentDPV.m4
new file mode 100644
index 0000000000..af45f48edb
--- /dev/null
+++ b/graphics/circuit_macros/examples/dpv/SevensegmentDPV.m4
@@ -0,0 +1,82 @@
+.PS
+# Sevensegment.m4
+# https://tex.stackexchange.com/questions/644009/seven-segments-anchors-how-to-use-them
+gen_init
+divert(-1)
+ `sevensegment(keys)
+ Seven-segment display in a [] block. keys:
+ hght=expr; (default boxht)
+ wdth=expr; (default hght*3.3/5.85)
+ slant=fraction; top is skewed slant fraction of ht
+ segwid=expr; segment width
+ gap=expr; gap between segments
+ bevel=fraction; corner truncation
+ on=attributes; "on" segment attributes
+ off=attributes; "off" segment attributes
+ code=[0-8][.]; displayed number .=decimal point
+ or
+ code=Xddddddd[.] where each d=0 or 1 to define
+ Segment1 to Segment7 off or on
+ Segments are labeled Seg1 Seg2 ... Seg7
+ and the decimal point is Seg8'
+define(`sevensegment', # hght, wdth, slant, segwid, gap, bevel, on, off, code
+ `[ pushkeys_(`$1',`hght:boxht; wdth:m4`'hght*3.3/5.85; slant:0;
+ segwid:0.75/3.2*m4`'wdth; gap:0.12/3.2*m4`'wdth; bevel:0.4;
+ on:outlined "red" shaded "red":N; off:outlined "lightgray":N;
+ code:00000010:N;')
+ gapch = m4gap/2*sqrt(2)
+ ifinstr(m4code,.,`define(`m4tmp',substr(m4code,0,decr(len(m4code))))dnl
+ pushdef(`dodp',1)poppushdef(`m4code',m4tmp)')dnl
+ ifinstr(m4code,X,`pushdef(`opcode',substr(m4code,1))',
+ `foreach_(`m4cd',`pushdef(`Cd'decr(m4Lx),m4cd)',1111110,0110000,1101101,
+ 1111001,0110011,1011011,1011111,1110000,1111111,1111011)dnl
+ pushdef(`opcode',Cd`'m4code)')dnl
+ for_(1,7,1,`pushdef(`attrib'm4x,
+ ifelse(substr(opcode,decr(m4x),1),1,`m4on',`m4off'))')dnl
+ Seg1: m4segment(R,m4bevel,m4bevel,attrib1) \
+ with .S at m4slu(0,m4hght-m4segwid)
+ inner = distance(Seg1.SW,Seg1.SE) + gapch*2
+ Seg2: m4segment(D,0.5,m4bevel,attrib2) with .S at \
+ m4slu(m4wdth/2-m4segwid,m4hght-m4segwid-inner/2)
+ Seg3: m4segment(D,m4bevel,0.5,attrib3) with .S at \
+ m4slu(m4wdth/2-m4segwid,m4segwid+inner/2)
+ Seg4: m4segment(L,m4bevel,m4bevel,attrib4) with .S at m4slu(0,m4segwid)
+ Seg5: m4segment(U,0.5,m4bevel,attrib5) with .S at \
+ m4slu(-m4wdth/2+m4segwid,m4segwid+inner/2)
+ Seg6: m4segment(U,m4bevel,0.5,attrib6) with .S at \
+ m4slu(-m4wdth/2+m4segwid,m4hght-m4segwid-inner/2)
+ Seg7: m4segment(R,0.5,0.5,attrib7) with .c at m4slu(0,m4hght/2)
+ ifelse(dodp,1,`Seg8: circle diam m4segwid m4on \
+ at m4slu(Seg3.e.x+m4segwid/2+m4gap,Seg4.s.y+m4segwid/2)') popdef(`dodp')
+ popdef(`m4hght',`m4wdth',`m4slant',`m4segwid',`m4gap',`m4bevel',
+ `m4on',`m4off',`m4code',`opcode')dnl
+ for_(1,7,1,`popdef(`attrib'm4x)') for_(0,9,1,`popdef(`Cd'm4x)')dnl
+ ]')
+define(`m4segment',`[ setdir_(`$1')
+ m4seven_pos(SE,E,NE,,`$2'); m4seven_pos(SW,W,NW,-,`$3')
+ resetdir_
+ S: 1/2 between SW and SE
+ Line: line from m4slu(S.x,S.y) to m4slu(SE.x,SE.y) then to m4slu(E.x,E.y) \
+ then to m4slu(NE.x,NE.y) then to m4slu(NW.x,NW.y) then to m4slu(W.x,W.y) \
+ then to m4slu(SW.x,SW.y) then to m4slu(S.x,S.y) `$4' ] ')
+define(`m4seven_pos',
+ `AA: (`$4'(m4wdth/2-m4segwid-gapch),0); `$1': rot_(AA.x,AA.y,rp_ang)
+ BA: AA + (`$4'1,1)*m4segwid*(1-`$5'); `$2': rot_(BA.x,BA.y,rp_ang)
+ CA: BA - (`$4'1,-1)*m4segwid*`$5'; `$3': rot_(CA.x,CA.y,rp_ang) ')
+define(`m4slu',`(`$1'+(`$2')*m4slant,`$2')')
+
+divert(0)dnl
+
+
+[
+ S: sevensegment(code=4.;hght=1)
+ { for_(1,8,1,`"m4x" at S.Seg`'m4x') }
+ move right 0.25
+ P: sevensegment(code=X1100011;off=invis;hght=1)
+ ]
+[
+ for_(0,9,1,`sevensegment(code=m4x`'ifelse(m4x,1,.);slant=1/4;off=invis)
+ move movewid/4')
+ ] with .nw at last [].sw+(0,-boxht/3)
+
+.PE
diff --git a/graphics/circuit_macros/examples/dpv/SourcesDPV.m4 b/graphics/circuit_macros/examples/dpv/SourcesDPV.m4
index ac6769e6ef..94326ce8d6 100644
--- a/graphics/circuit_macros/examples/dpv/SourcesDPV.m4
+++ b/graphics/circuit_macros/examples/dpv/SourcesDPV.m4
@@ -8,51 +8,57 @@ define(`NL',`; move down $1; right_')
{
{source ; move ; "`source'" ljust} NL
{source(,I) ; move ; "`source(,I)'" ljust} NL
- {source(,i) ; move ; "`source(,i)'" ljust} NL
- {source(,ti) ; move ; "`source(,ti)'" ljust} NL
- {source(,i) ; move ; "`source(,ii)'" ljust} NL
+ {C:source(,i) ; move ; "`source(,i)'" ljust} NL
+ {D:source(,ti) ; move ; "`source(,ti)'" ljust} NL
+ {source(,ii) ; move ; "`source(,ii)'" ljust} NL
{source(,V) ; move ; "`source(,V)'" ljust} NL
{source(,v) ; move ; "`source(,v)'" ljust} NL
{source(,tv) ; move ; "`source(,tv)'" ljust} NL
+ {source(,SC) ; move ; "`source(,SC)'" ljust} NL
{source(,AC); move ; "`source(,AC)'" ljust} NL
{source(,X) ; move ; "`source(,X)'" ljust} NL
- {source(,F) ; move ; "`source(,F)'" ljust} NL
{source(,G) ; move ; "`source(,G)'" ljust} NL
- {source(,Q) ; move ; "`source(,Q)'" ljust}
+ {source(,Q) ; move ; "`source(,Q)'" ljust} NL #(0.3)
+ {source(,F) ; move ; "`source(,F)'" ljust} NL
+ {geiger(,,,,fill_(0.9)); move;
+ "`geiger(,,,,'" ljust "`fill_(0.9))'" ljust} NL
}
move right_ 2.0
+
{
-# {source(,,0.4) ; move ; "`source(,,0.4)'" ljust} NL(0.35)
{source(,,0.4,,shaded "yellow") ; move ;
- "`source(,,0.4,," ljust "shaded \"yellow\")'" ljust} NL(0.35)
-# {source(,P) ; move ; "`source(,P)'" ljust} NL
- {source(,P,,,fill_(0.9)) ; move ;
- "`source(,P,,," ljust "fill_(0.9))'" ljust} NL
+ "`source(,,0.4,,'" ljust "`shaded \"yellow\")'" ljust} NL(0.35)
+ {source(,P) ; move ; "`source(,P)'" ljust} NL
{source(,U) ; move ; "`source(,U)'" ljust} NL
{source(,H) ; move ; "`source(,H)'" ljust} NL
{source(,R) ; move ; "`source(,R)'" ljust} NL
{source(,S) ; move ; "`source(,S)'" ljust} NL
+ {source(,SCr) ; move ; "`source(,SCr)'" ljust} NL
{source(,T) ; move ; "`source(,T)'" ljust} NL
{source(,L) ; move ; "`source(,L)'" ljust} NL
- {source(,B) ; move ; "`source(,B)'" ljust} NL
+ {source(,B) ; move ; "`source(,B)'" ljust} NL(moveht*0.8)
{nullator ; move ; "`nullator'" ljust} NL(moveht*0.8)
{norator ; move ; "`norator'" ljust} NL(moveht*0.9)
{ttmotor(,G) ; move ; "`ttmotor(,G)'" ljust} NL(moveht*1.1)
- {proximity ; move ; "`proximity" ljust "= consource(,P)'" ljust}
+ {battery ; move ; "`battery'" ljust} NL(0.3)
+ {battery(,3,R) ; move ; "`battery(,3,R)'" ljust}
+
}
move right_ 2.0
{source(,N) ; move ; "`source(,N)'" ljust} NL
- {source(,"svg_micro(A)"); move; "`source(,\"svg_micro(A)\")'" \
- wid 1.7 at Here ljust}NL(0.31)
- {consource ; move ; "`consource'" ljust } NL(0.32)
+ {source(,NA) ; move ; "`source(,NA)'" ljust} NL
+ {source(,NB) ; move ; "`source(,NB)'" ljust} NL
+ {source(,"mA");move; "`source(,\"mA\")'" ljust} NL(0.31)
+ {consource ; move ; "`consource'" ljust} NL(0.32)
{consource(,I) ; move ; "`consource(,I)'" ljust} NL(0.32)
{consource(,i) ; move ; "`consource(,i)'" ljust} NL(0.32)
{consource(,ti) ; move ; "`consource(,ti)'" ljust} NL(0.32)
+ {source(,SE) ; move ; "`source(,SE)'" ljust} NL
{consource(,V) ; move ; "`consource(,V)'" ljust} NL(0.32)
{consource(,v) ; move ; "`consource(,v)'" ljust} NL(0.3)
{consource(,tv) ; move ; "`consource(,tv)'" ljust} NL(0.3)
- {battery ; move ; "`battery'" ljust} NL(0.3)
- {battery(,3,R) ; move ; "`battery(,3,R)'" ljust} NL(0.35)
+ {proximity ; move ;
+ "`proximity'" ljust "` = consource(,P)'" wid 80bp__ ljust} NL(0.35)
command "</g>" # end font
.PE
diff --git a/graphics/circuit_macros/examples/dpv/Spec555DPV.m4 b/graphics/circuit_macros/examples/dpv/Spec555DPV.m4
new file mode 100644
index 0000000000..7a49b002b3
--- /dev/null
+++ b/graphics/circuit_macros/examples/dpv/Spec555DPV.m4
@@ -0,0 +1,57 @@
+.PS
+# Spec555.m4
+# https://tex.stackexchange.com/questions/64801/display-ics-with-circuitikz?rq=1
+log_init
+
+define(`spec555',`[ Chip: box wid 8*lg_pinsep ht 10*lg_pinsep fill_(0.9)
+ svg_font(sans-serif,8bp__)
+ P1: 3/4<Chip.sw,Chip.se>; {"1" below rjust at P1}; "GND" above at P1
+ P5: Chip.s; {"5" below rjust at P5}; "CTRL" above at P5
+ P2: 1/8<Chip.sw,Chip.nw>; {"2" above rjust at P2}; "TRG" ljust at P2
+ P6: 3/8<Chip.sw,Chip.nw>; {"6" above rjust at P6}; "THR" ljust at P6
+ P7: 7/8<Chip.sw,Chip.nw>; {"7" above rjust at P7}; "DIS" ljust at P7
+ P3: Chip.e; {"3" above ljust at P3}; "OUT" rjust at P3
+ P4: 3/4<Chip.nw,Chip.ne>; {"4" above rjust at P4}; "svg_emsp`'RESET" below \
+ at P4
+ P8: Chip.n; {"8" above rjust at P8}; "Vcc" below at P8
+ "NE-555" at Chip.c "TIMER"
+ command "</g>"
+ line left dimen_ from P7; X:dot
+ { R1:resistor(up_ P7.y-P6.y); rlabel(,68 k`'svg_ohm); dot }
+ R2:resistor(down_ P7.y-P6.y); llabel(,68 k`'svg_ohm); dot; {line to P6}
+ line to (Here,P2); SW: dot; {line to P2}
+ line from P8 to (P8,R1.end); dot ]')
+
+ svg_font(sans-serif,10bp__)
+ T1: spec555; "U1" at T1.Chip.nw above ljust
+ T2: spec555 with .Chip.w at T1.Chip.e+(2.5*dimen_,0)
+ "U2" at T2.Chip.nw above ljust
+ {line left_ dimen_/2 from (T1.X,T1.P7); diode(down_ T1.P7.y-T1.P6.y)
+ {"D1" wid 15bp__ rjust at last [].w "1N4148" rjust wid 36bp__}
+ line to (T1.X,Here); dot}
+ capacitor(down_ elen_*1.2 from T1.SW,E+); llabel(,10 uF); dot
+ dot(at Here-(dimen_/2,0),,1); G: dot(,,1); "GND" rjust at G.w
+ capacitor(from T1.P5 to (T1.P5,G),E+); rlabel(,0.01 nF); dot
+ line from T1.P1 to (T1.P1,G); dot
+ Vcc: dot(at (G,T1.R1.end),,1); "Vcc" wid 0.3 rjust at Vcc.w
+ dot(at (T1.P4,Vcc)); line to T1.P4
+ line right_ dimen_/2 from T1.P3;
+ R3: resistor(down_ to (Here,T2.s-(0,dimen_/4))); llabel(,10 k`'svg_ohm)
+ line to (T2.P5,Here) then to T2.P5
+ dot(at (T2.X,G)); ground
+ reversed(`capacitor',up_ to (Here,T2.P5),E+); rlabel(,100 nF)
+ line to (Here,T2.P2)
+ line from T2.P1 to (T2.P1,G); dot
+ line from T2.P4 to (T2.P4,Vcc) then to Vcc chop 0 chop dotrad_
+ dot(at (T2.X,T2.R1.end)+(0,dimen_/2),,1); {line to T2.R1.end chop dotrad_}
+ "+5 V to +15V" at last [].n above
+ capacitor(right_ dimen_ from T2.P3,C); llabel(," 100 uF")
+ Pot1: potentiometer(down_ (Here.y-G.y)/2) with .Start at Here
+ "Rx" wid 0.2 at Pot1.T1 ljust
+ Sp: speaker(R,,,fill_(0.9)) with .In5 at Pot1.End
+ "1" above rjust at Sp.In5; "2" below rjust at Sp.In7
+ "E1" at Sp.In2 rjust "Speaker" rjust
+ line from Sp.In7 to (Sp.In7,G) then to G chop 0 chop dotrad_
+ command "</g>"
+
+.PE
diff --git a/graphics/circuit_macros/examples/dpv/cbresistorDPV.m4 b/graphics/circuit_macros/examples/dpv/cbresistorDPV.m4
new file mode 100644
index 0000000000..c03122377c
--- /dev/null
+++ b/graphics/circuit_macros/examples/dpv/cbresistorDPV.m4
@@ -0,0 +1,82 @@
+.PS
+# cbresistor.m4
+# https://tex.stackexchange.com/questions/709339/create-command-with-decoration-in-tikz
+# https://www.google.com/search?client=firefox-b-d&q=resistor+color+code
+cct_init
+divert(-1)
+
+ `cbresistor(linespec, keys)
+ keys:
+ lgth=expr; wdth=expr;
+ body=body attributes, e.g. shaded "green"
+ type=A|B; pinched body shape
+ colors=color:color:...;
+ Up to 6 colors, a color may be nul '
+define(`cbresistor',`eleminit_(`$1')
+ pushkeys_(`$2',`lgth:dimen_/2; wdth:dimen_/5; body::N; colors::N; type::N')dnl
+{line to rvec_(max(0,rp_len/2-m4lgth/2),0) thick linethick*3/2; M4cbW: Here
+ ifelse(m4type,B,
+ `[L:rotbox(m4lgth*3/23, m4wdth, shaded "darkgray" m4body,r=m4wdth/20)
+ C:rotbox(m4lgth*17/23, m4wdth*9/10, shaded "darkgray" m4body) \
+ with .W at L.E
+ R:rotbox(m4lgth*3/23, m4wdth, shaded "darkgray" m4body,r=m4wdth/20) \
+ with .W at C.E] with .L.W at Here; move to last [].R.E',
+ `rotbox(m4lgth, m4wdth, shaded "darkgray" m4body) with .W at Here')
+ ifelse(m4colors,,,`define(`m4bw',(m4lgth/23))dnl
+ definergbcolor(silver,0.75,0.75,0.75)
+ definergbcolor(gold,1,215/255,0)
+ stacksplit_(`cbrstack',m4colors,:)stackreverse_(`cbrstack')dnl
+ stackargs_(`m4pos',22,17,12,7,5,2)dnl
+ stackdo_(`cbrstack',`ifelse(cbrstack,nul,,
+ `{ move to M4cbW+vec_(m4pos*m4bw-m4bw/2,0)
+ define(`m4ctr',ifelse(m4type,B,eval((m4pos>3)*(m4pos<20)),0))dnl
+ line m4colorfix(outlined,cbrstack) thick m4bw*1.8/(1bp__) \
+ from rvec_(0,-ifelse(m4ctr,1,0.9*)m4wdth/2) \
+ to rvec_(0, ifelse(m4ctr,1,0.9*)m4wdth/2)
+ ifelse(ifelse(cbrstack,silver,1,cbrstack,gold,1),1,
+ `line outlined rgbstring(0.8,0.8,0.8) thick last line.thick \
+ from 0.2 along_(last line) to 0.4 along_(last line)
+ line outlined "white" thick last line.thick \
+ from 0.25 along_(2nd last line) to 0.3 along_(2nd last line)')
+ }')
+ popdef(`m4pos')') stackdo_(`m4pos')')
+ line to rvec_(max(0,rp_len/2-m4lgth/2),0) thick linethick*3/2}
+ popdef(`m4lgth',`m4wdth',`m4body',`m4colors',`m4type')dnl
+ line to rvec_(rp_len,0) invis ')
+
+divert(0)dnl
+
+linewid = 3/2*linewid
+ifsvg(definergbcolor(Dandelion,0.95,0.65,0.2))
+ifsvg(definergbcolor(Peach,0.76,0.5,0.1))
+
+define(`dpr',
+ `{ cbresistor(,type=B;
+ body=m4colorfix(shaded,Dandelion) m4colorfix(outlined,Peach);
+ colors=`$2') }
+ {iflatex(`sprintf("\SI{%g}{\ohm}",`$1')')ifsvg("``$1'svg_Omega'") \
+ at last line.end+(10bp__,-5bp__) rjust}
+ move right_ moveht*5/6; down_ ')
+
+ define(`elen_',(3/2*linewid))
+ define(`dimen_',(5/4*linewid))
+[]
+[ down_
+ foreach_(`pair',`dpr(patsubst(pair,-,`,'):nul:black:silver)',
+ 10-brown:black,
+ 12-brown:red,
+ 15-brown:green,
+ 18-brown:gray,
+ 22-red:red,
+ 27-red:Violet,
+ 33-orange:orange,
+ 39-orange:white,
+ 47-yellow:Violet,
+ 56-green:blue,
+ 68-blue:gray,
+ 82-gray:red)
+ dpr(100,brown:black:nul:brown:gold)
+ {"iflatex(\SI{5}{\percent},5 %)" at last line.end+(10bp__,-15bp__) rjust}
+ ] with .nw at last [].ne+(30bp__,0)
+
+.PE
diff --git a/graphics/circuit_macros/examples/dpv/ex00DPV.m4 b/graphics/circuit_macros/examples/dpv/ex00DPV.m4
deleted file mode 100644
index 97c5268725..0000000000
--- a/graphics/circuit_macros/examples/dpv/ex00DPV.m4
+++ /dev/null
@@ -1,94 +0,0 @@
-.PS
-# ex00.m4
-gen_init(svg_font(sans-serif,11bp__))
-
-[
-thicklines_
-ewid = 2
-eht = 0.5
-E: ellipse wid ewid ht eht
-
- [ narrows = 5
- de = ewid/narrows
- for i=0 to narrows do {
- arrow down from i*de,0 }
- ] with .s at E.n+(0,0.25)
-
- "svg_bf(B)svg_it((t))" at last [].c
-
-thinlines_
- arrow from E.c to E.ne
- box invis fill_(1) ht 0.12 wid 0.12 with .c at last arrow.c "svg_it(r)"
-
- command "</g>" # end font
-]
-[
-# ex07.m4
-#gen_init
-
-Barrel: box invis ht 0.4 wid 1.5
- up
-Face: arc rad 2.6 from Barrel.e+(2.4,-1.7/2) to Barrel.e+(2.4,1.7/2)
-
- eps = 0.03
- arc ccw rad 2.6 from Face.start-(eps,0) to Face.end-(eps,0) \
- with .c at Face.c-(eps,0)
- line from Barrel.nw to Barrel.ne then to Face.end
- line from Barrel.sw to Barrel.se then to Face.start
- arc cw from Barrel.sw to Barrel.nw rad Barrel.ht*1.2
-
-Cathode: Barrel.w+(0.3,0)
-Term: Barrel.w+(-0.25,0)
- dcath = 0.13
- dan = 0.12
-
- line from Cathode up dcath/2 left dcath/2 then to Term.x,Cathode.y+dcath/2
- dot
- line from Cathode down dcath/2 left dcath/2 then to Term.x,Cathode.y-dcath/2
- dot
-
- hole = 0.06
-Hole: line invis up hole from Cathode+(0.5,-hole/2)
- line from Hole.end up dan-hole/2 then to Term.x,Cathode.y+dan; dot
- line from Hole.start down dan-hole/2 then to Term.x,Cathode.y-dan; dot
-
- platewid = 0.25
- platesep = 0.15
-Plates: box invis wid platewid ht platesep at Barrel.e+(-platewid/2,0)
- line right platewid from Plates.nw
- line right platewid from Plates.sw
- line up 0.3 from Plates.n
- line down 0.3 from Plates.s
-
-linethick_(1.4)
-
- move to Cathode+(0.03,0)
-Spot: 0.9<Face.start,Face.end>
- arcto(Plates.c,Spot,(Plates.c.x-Cathode.x)*0.90,outlined "lightgrey" thick 2)
- line to Spot chop 0 chop -0.02 outlined "lightgrey" thick 2
-
-thinlines_
-
- arrow <- from Cathode+(0.2,0.06) up 0.5 left 0.3
- "electron" above "gun" above
-
- arrow <- from Plates.nw+(0,0.06) up 0.5 left 0.3
- "deflection" above "plates" above
-
- arrow <- from 0.5<Plates.e,Spot>+(0,0.06) up 0.5 left 0.3
- "electron beam" at Here+(-0.3,0) above
-
- spline <- from 1.015<Plates.e,Spot> right 0.1 up 0.1 then up 0.1 \
- then up 0.1 left 0.1
- "spot of light" rjust
-
- "vacuum" at 0.5<Face.start,Face.end>+(-0.4,0) rjust
-
- arrow <- from Face.start+(0.1,0.5) left 0.6*1.4 down 0.3*1.4
- "phosphor coating" rjust
-
- arrow <- from 0.2<Barrel.se,Face.start> left 0.6 down 0.3
- "glass enclosure (tube)" rjust
-
-] with .sw at last [].se+(0.5,0)
-.PE
diff --git a/graphics/circuit_macros/examples/dpv/examplesDPV.htmx b/graphics/circuit_macros/examples/dpv/examplesDPV.htmx
index 52f7b939b8..3406d8ec8a 100644
--- a/graphics/circuit_macros/examples/dpv/examplesDPV.htmx
+++ b/graphics/circuit_macros/examples/dpv/examplesDPV.htmx
@@ -71,18 +71,13 @@ ifinstr(`$3',y,,`<hr>')')
<hr>
<p>
- This file shows diagrams in .svg format produced without the use of
- LaTeX or equivalent.
-<!--
- <A HREF="examples.html">png</A>
- versions are also available.
- The PDF equivalent can be found in examples.pdf of the distribution.
+ This file shows diagrams in .svg format produced
+ without the use of LaTeX or equivalent.
+ The diagrams have been selected and adapted from the Circuit_macros
+ examples in order to test the svg output of dpic.
</p>
-
<p>
--->
-The diagrams have been adapted from the Circuit_macros
-examples in order to test the svg output of dpic. Generating svg line
+Generating svg line
art is straightforward but formatting text is not because TeX, LaTeX,
and related word processors do not produce svg directly. Either
less-sophisticated text formatting must be employed for svg or an
@@ -136,7 +131,8 @@ There are other issues:
Change font face and dpic m4tt`'textht</g>, m4tt`'dptextratio</g>,
and m4tt`'textoffset</g> parameters.
If arg4 is blank, the font is changed and
- requires m4tt`'command "&lt;/g&gt;"</g> to cancel the font change.
+ requires m4tt`'command "&lt;/g&gt;"</g> at the end
+ to cancel the font change.
<br>
Note:
Nominal height = text height in drawing units; actual height =
@@ -305,7 +301,8 @@ SVG produced by dpic changecom(,)&`#'8194;changecom(`#')
<br><br>
(<a href="quick.txt" TYPE="text/plain" TARGET="_blank"
alt="quick">quick.m4</a>):
-SVG produced from quick.pdf by dvisvgm changecom(,)&`#'8194;changecom(`#')
+SVG produced from quick.pdf by dvisvgm or pdf2svg
+ changecom(,)&`#'8194;changecom(`#')
</p>
</td>
</table>
@@ -390,6 +387,9 @@ cfig(ConnDPV,
cfig(PconnDPV,
The m4tt`'pconnex</g> macro)
+cfig(cbresistorDPV,
+ Color-coded through-hole resistors)
+
cfig(EVplugsDPV,
Electric vehicle charging plug patterns make extensive
use of key=value pairs to set options)
@@ -430,6 +430,9 @@ cfig(WindingsDPV,
The macro
m4tt`'winding(L|R`,'diam`,'pitch`,'turns`,'core wid`,'core color)</g>)
+cfig(Spec555DPV,
+ A 555 timer example)
+
cfig(ex01DPV,
Two simple labeled circuits)
@@ -448,9 +451,6 @@ cfig(PushPullDPV,
cfig(QuantumDPV,
A quantum circuit)
-cfig(SQUIDDPV,
- Superconducting quantum interface device (drawing direction down))
-
cfig(SixpoleDPV,
A six-pole filter)
@@ -469,10 +469,6 @@ cfig(ThreeDPV,
cfig(MCDPV,
A three-phase switched AC-AC converter and a DC-DC converter)
-cfig(ex17DPV,
- A repetitive network created by Pic looping and
- a skewed circuit used to test the macro m4tt`'parallel_</g>)
-
cfig(ex12DPV,
A CMOS NAND gate`,' a test circuit`,' and an XMOSFET example)
@@ -586,9 +582,6 @@ cfig(ABlogixDPV,
cfig(XORDPV,
Realizations of the XOR function using m4tt`'Autologix</g>)
-cfig(ex00DPV,
- Line diagrams)
-
cfig(EEPDPV,
Part of a single-line diagram of a power distribution system
using draft elements)
@@ -603,6 +596,10 @@ cfig(GrayCodeDPV,
cfig(controlDPV,
Control-system block diagrams)
+cfig(SevensegmentDPV,
+ A customizable seven-segment display showing the numbered segments with
+ a custom shape and the numerals from 0 to 9)
+
cfig(ByteDPV,
Elementary splines)
@@ -690,7 +687,7 @@ cfig(keyboardDPV,
More objects drawn in relief)
cfig(DiniDPV,
- Dini surface and an icosahedron)
+ Dini surface`,' an icosahedron`,' and a sphere with inscribed cylinder)
cfig(SierpinskiDPV,
The Sierpinski triangle and a Cayley graph:
diff --git a/graphics/circuit_macros/examples/dpv/examplesDPVs.htmx b/graphics/circuit_macros/examples/dpv/examplesDPVs.htmx
index a52445d744..96a572b462 100644
--- a/graphics/circuit_macros/examples/dpv/examplesDPVs.htmx
+++ b/graphics/circuit_macros/examples/dpv/examplesDPVs.htmx
@@ -1,14 +1,3 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<HTML>
-<HEAD>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<!--meta http-equiv="Content-Script-Type" content="text/javascript"-->
-<TITLE>SVG Examples: Circuit_macros Version XXX</TITLE>
-<meta name="keywords" content="HTML"
-content='Circuit elements, basic circuits, logic circuits and other diagrams,
-electric circuits, resistor, capacitor, inductor, diode, sources, amplifier,
-integrator, fuse, switch, antenna, opamp, transformer, relay, contact, jack,
plug, FET, UJT, thyristor, bipolar transistor, nport, windings, timer,
optical isolator, rectifier, bistable, oscillator, CMOS, MOSFET, power supply,
NAND gate, controlled source, synchronous machine, digital circuit, signal-flow
@@ -132,7 +121,8 @@ There are other issues:
Change font face and dpic m4tt`'textht</g>, m4tt`'dptextratio</g>,
and m4tt`'textoffset</g> parameters.
If arg4 is blank, the font is changed and
- requires m4tt`'command "&lt;/g&gt;"</g> to cancel the font change.
+ requires m4tt`'command "&lt;/g&gt;"</g> at the end
+ to cancel the font change.
<br>
Note:
Nominal height = text height in drawing units; actual height =
@@ -384,6 +374,9 @@ cfig(ConnDPV,
cfig(PconnDPV,
The m4tt`'pconnex</g> macro)
+cfig(cbresistorDPV,
+ Color-coded through-hole resistors)
+
cfig(EVplugsDPV,
Electric vehicle charging plug patterns make extensive
use of key=value pairs to set options)
@@ -448,9 +441,6 @@ cfig(PushPullDPV,
cfig(QuantumDPV,
A quantum circuit)
-cfig(SQUIDDPV,
- Superconducting quantum interface device (drawing direction down))
-
cfig(SixpoleDPV,
A six-pole filter)
@@ -469,10 +459,6 @@ cfig(ThreeDPV,
cfig(MCDPV,
A three-phase switched AC-AC converter and a DC-DC converter)
-cfig(ex17DPV,
- A repetitive network created by Pic looping and
- a skewed circuit used to test the macro m4tt`'parallel_</g>)
-
cfig(ex12DPV,
A CMOS NAND gate`,' a test circuit`,' and an XMOSFET example)
@@ -590,9 +576,6 @@ cfig(ABlogixDPV,
cfig(XORDPV,
Realizations of the XOR function using m4tt`'Autologix</g>)
-cfig(ex00DPV,
- Line diagrams)
-
')
cfig(EEPDPV,
Part of a single-line diagram of a power distribution system
@@ -613,6 +596,10 @@ cfig(controlDPV,
cfig(ByteDPV,
Elementary splines)
+cfig(SevensegmentDPV,
+ A customizable seven-segment display showing the numbered segments with
+ a custom shape and the numerals from 0 to 9)
+
ifelse(0,1,`
cfig(RotboxDPV,
The macro
@@ -698,7 +685,7 @@ cfig(keyboardDPV,
More objects drawn in relief)
cfig(DiniDPV,
- Dini surface and an icosahedron)
+ Dini surface`,' an icosahedron`,' and a sphere with inscribed cylinder)
cfig(SierpinskiDPV,
The Sierpinski triangle and a Cayley graph:
diff --git a/graphics/circuit_macros/examples/dpv/quickDPV.m4 b/graphics/circuit_macros/examples/dpv/quickDPV.m4
index 65a181f214..db9c15ce9d 100644
--- a/graphics/circuit_macros/examples/dpv/quickDPV.m4
+++ b/graphics/circuit_macros/examples/dpv/quickDPV.m4
@@ -4,18 +4,16 @@ cct_init # Set defaults
elen = 0.75 # Variables are allowed; default units are inches
move right 0.4
-Origin: Here # Position names are capitalized
- svgLink(SourcesDPV.svg,source(up_ elen))
+ svgLink(SourcesDPV.svg,Vs: source(up_ elen))
llabel(-,svg_it(v`'svg_sub(s)),+)
svgLink(ResistorsDPV.svg,resistor(right_ elen)); rlabel(,svg_it(R),)
dot
{ # Save current position and direction
- capacitor(down_ to (Here,Origin)) #(Here,Origin) = (Here.x,Origin.y)
- rlabel(+,svg_it(v),-); llabel(,svg_it(C))
+ capacitor(down_ Vs.len); rlabel(+,svg_it(v),-); llabel(,svg_it(C))
dot
} # Restore position and direction
line right_ elen*2/3
{move right 0.2}
- inductor(down_ Here.y-Origin.y); rlabel(,svg_it(L),); b_current("svg_it(i)")
- line to Origin
+ inductor(down_ Vs.len); rlabel(,svg_it(L),); b_current("svg_it(i)")
+ line to (Vs,Here) # (Vs,Here) = (Vs.x,Here.y)
.PE # Pic input ends
diff --git a/graphics/circuit_macros/examples/dpv/relaycoilDPV.m4 b/graphics/circuit_macros/examples/dpv/relaycoilDPV.m4
index fc2bc2738f..5ecd5aeec4 100644
--- a/graphics/circuit_macros/examples/dpv/relaycoilDPV.m4
+++ b/graphics/circuit_macros/examples/dpv/relaycoilDPV.m4
@@ -1,12 +1,13 @@
.PS
-# relaycoil.m4
+# relaycoilDPV.m4
cct_init
spc = dimen_/3
{ relaycoil; S: "svg_tt(`relaycoil')" at last [].s+(0,-20bp__)
{ "svg_it(V1)" wid 15bp__ at last [].V1 rjust
"svg_it(V2)" at last [].V2 ljust }
- K: relaycoil(NX) with .nw at last [].ne+(spc*4,0); "svg_tt((NX))" \
+ relaycoil(S) with .nw at last [].ne+(spc*2,0); "svg_tt((S))" at (last [],S)
+ K: relaycoil(NX) with .nw at last [].ne+(spc*3,0); "svg_tt((NX))" \
at (last [],S)
{ thinlines_
spline <- from K.A1 left 7bp__ then up 4bp__ left 4bp__
@@ -21,27 +22,30 @@ cct_init
"svg_it(B3)" ljust
thicklines_
}
- relaycoil(AXSR) with .nw at last [].ne+(spc*5,0); "svg_tt((AXSR))" \
+ relaycoil(AXSR) with .nw at last [].ne+(spc*4,0); "svg_tt((AXSR))" \
at (last [],S)
{ "svg_it(V1)" at last [].V1 rjust; "svg_it(V2)" at last [].V2 rjust }
relaycoil(BXSR) with .nw at last [].ne+(spc*2,0); "svg_tt((BXSR))" \
at (last [],S)
{ "svg_it(V1)" at last [].V1 ljust; "svg_it(V2)" at last [].V2 ljust }
- relaycoil(SR) with .nw at last [].ne+(spc*4,0); "svg_tt((SR))" at (last [],S)
- relaycoil(SO) with .nw at last [].ne+(spc,0); "svg_tt((SO))" at (last [],S)
- relaycoil(SOR) with .nw at last [].ne+(spc,0); "svg_tt((SOR))" at (last [],S)
+ relaycoil(SR) with .nw at last [].ne+(spc*2,0); "svg_tt((SR))" at (last [],S)
+ spx = spc*3/4
+ relaycoil(SO) with .nw at last [].ne+(spx,0); "svg_tt((SO))" at (last [],S)
+ relaycoil(SOR) with .nw at last [].ne+(spx,0); "svg_tt((SOR))" at (last [],S)
+ relaycoil(PC) with .nw at last [].ne+(spx,0); "svg_tt((PC))" at (last [],S)
}
{
move down_ 3/4; right_
relaycoil(HS); S: "svg_tt((HS))" at last [].s+(0,-12bp__)
- relaycoil(NAC) with .nw at last [].ne+(spc,0); "svg_tt((NAC))" at (last [],S)
- relaycoil(AC) with .nw at last [].ne+(spc,0); "svg_tt((AC))" at (last [],S)
- relaycoil(ML) with .nw at last [].ne+(spc,0); "svg_tt((ML))" at (last [],S)
- relaycoil(PO) with .nw at last [].ne+(spc,0); "svg_tt((PO))" at (last [],S)
- relaycoil(RM) with .nw at last [].ne+(spc,0); "svg_tt((RM))" at (last [],S)
- relaycoil(RH) with .nw at last [].ne+(spc,0); "svg_tt((RH))" at (last [],S)
- relaycoil(TH) with .nw at last [].ne+(spc,0); "svg_tt((TH))" at (last [],S)
- relaycoil(EL) with .nw at last [].ne+(spc,0); "svg_tt((EL))" at (last [],S)
+ relaycoil(NAC) with .nw at last [].ne+(spx,0); "svg_tt((NAC))" at (last [],S)
+ relaycoil(AC) with .nw at last [].ne+(spx,0); "svg_tt((AC))" at (last [],S)
+ relaycoil(ML) with .nw at last [].ne+(spx,0); "svg_tt((ML))" at (last [],S)
+ relaycoil(PO) with .nw at last [].ne+(spx,0); "svg_tt((PO))" at (last [],S)
+ relaycoil(RM) with .nw at last [].ne+(spx,0); "svg_tt((RM))" at (last [],S)
+ relaycoil(RH) with .nw at last [].ne+(spx,0); "svg_tt((RH))" at (last [],S)
+ relaycoil(TH) with .nw at last [].ne+(spx,0); "svg_tt((TH))" at (last [],S)
+ relaycoil(EL) with .nw at last [].ne+(spx,0); "svg_tt((EL))" at (last [],S)
+ relaycoil(MR) with .sw at last [].se+(spx,0); "svg_tt((MR))" at (last [],S)
}
.PE
diff --git a/graphics/circuit_macros/examples/ex00.m4 b/graphics/circuit_macros/examples/ex00.m4
deleted file mode 100644
index 21131aa8a1..0000000000
--- a/graphics/circuit_macros/examples/ex00.m4
+++ /dev/null
@@ -1,91 +0,0 @@
-.PS
-# ex00.m4
-gen_init
-
-[
-thicklines_
-ewid = 2
-eht = 0.5
-E: ellipse wid ewid ht eht
-
- [ narrows = 5
- de = ewid/narrows
- for i=0 to narrows do {
- arrow down from i*de,0 }
- ] with .s at E.n+(0,0.25)
-
- "{\bf B$(t)$}" at last [].c
-
-thinlines_
- arrow from E.c to E.ne
- box invis fill_(1) ht 0.12 wid 0.12 with .c at last arrow.c "$r$"
-]
-[
-# ex07.m4
-# gen_init
-
-Barrel: box invis ht 0.4 wid 1.5
- up
-Face: arc rad 2.6 from Barrel.e+(2.4,-1.7/2) to Barrel.e+(2.4,1.7/2)
-
- eps = 0.03
- arc ccw rad 2.6 from Face.start-(eps,0) to Face.end-(eps,0) \
- with .c at Face.c-(eps,0)
- line from Barrel.nw to Barrel.ne then to Face.end
- line from Barrel.sw to Barrel.se then to Face.start
- arc cw from Barrel.sw to Barrel.nw rad Barrel.ht*1.2
-
-Cathode: Barrel.w+(0.3,0)
-Term: Barrel.w+(-0.25,0)
- dcath = 0.13
- dan = 0.12
-
- line from Cathode up dcath/2 left dcath/2 then to Term.x,Cathode.y+dcath/2
- dot
- line from Cathode down dcath/2 left dcath/2 then to Term.x,Cathode.y-dcath/2
- dot
-
- hole = 0.06
-Hole: line invis up hole from Cathode+(0.5,-hole/2)
- line from Hole.end up dan-hole/2 then to Term.x,Cathode.y+dan; dot
- line from Hole.start down dan-hole/2 then to Term.x,Cathode.y-dan; dot
-
- platewid = 0.25
- platesep = 0.15
-Plates: box invis wid platewid ht platesep at Barrel.e+(-platewid/2,0)
- line right platewid from Plates.nw
- line right platewid from Plates.sw
- line up 0.3 from Plates.n
- line down 0.3 from Plates.s
-
-linethick_(1.4)
- move to Cathode+(0.03,0)
-Spot: 0.9<Face.start,Face.end>
- arcto(Plates.c,Spot,(Plates.c.x-Cathode.x)*0.90,outlined "gray")
- line to Spot chop 0 chop -0.02 outlined "gray"
-
-thinlines_
-
- arrow <- from Cathode+(0.2,0.06) up 0.5 left 0.3
- "{\sl electron}" above "{\sl gun}" above
-
- arrow <- from Plates.nw+(0,0.06) up 0.5 left 0.3
- "{\sl deflection}" above "{\sl plates}" above
-
- arrow <- from 0.5<Plates.e,Spot>+(0,0.06) up 0.5 left 0.3
- "{\sl electron beam}" at Here+(-0.3,0) above
-
- spline <- from 1.015<Plates.e,Spot> right 0.1 up 0.1 then up 0.1 \
- then up 0.1 left 0.1
- "{\sl spot of light}sp_" rjust
-
- "{\sl vacuum}sp_" at 0.5<Face.start,Face.end>+(-0.4,0) rjust
-
- arrow <- from Face.start+(0.1,0.5) left 0.6*1.4 down 0.3*1.4
- "{\sl phosphor coating}sp_" rjust
-
- arrow <- from 0.2<Barrel.se,Face.start> left 0.6 down 0.3
- "{\sl glass enclosure (tube)}sp_" rjust
-
-] with .sw at last [].se+(0.5,0)
-.PE
diff --git a/graphics/circuit_macros/examples/examples.pdf b/graphics/circuit_macros/examples/examples.pdf
index c89e3360f3..dd6c413740 100644
--- a/graphics/circuit_macros/examples/examples.pdf
+++ b/graphics/circuit_macros/examples/examples.pdf
Binary files differ
diff --git a/graphics/circuit_macros/examples/extras/Ant.m4 b/graphics/circuit_macros/examples/extras/Ant.m4
deleted file mode 100644
index f4a22226a2..0000000000
--- a/graphics/circuit_macros/examples/extras/Ant.m4
+++ /dev/null
@@ -1,30 +0,0 @@
-.PS
-# Ant.m4 (Langton's ant)
-# https://tex.stackexchange.com/questions/361838/how-to-create-a-langtons-ant-in-latex/361891
-# https://en.wikipedia.org/wiki/Langton%27s_ant
-gen_init
-NeedDpicTools
- picwid = 5
- D: (0,0); DD: (1,0); t[D] = 0
- minx = 0; miny = 0; maxx = 0; maxy = 0
- for i = 0 to 10500 do {
- if (t[D]%2) == 0 then { DD: (-DD.y,DD.x) } else { DD: (DD.y,-DD.x) }
- t[D] += 1
- D: D+DD
- if D.x > maxx then { maxx = D.x; for y = miny to maxy do { t[maxx,y] = 0 }} \
- else { if D.x < minx then {
- minx = D.x; for y = miny to maxy do { t[minx,y] = 0 }}}
- if D.y > maxy then { maxy = D.y; for x = minx to maxx do { t[x,maxy] = 0 }} \
- else { if D.y < miny then {
- miny = D.y; for x = minx to maxx do { t[x,miny] = 0 }}}
- }
- boxwid = picwid/(maxx-minx)
- boxht = picwid/(maxy-miny)
- if boxht > boxwid then { boxht = boxwid } else { boxwid = boxht }
- circlerad = boxht/2
- hue = 240; val = 1
- for i = minx to maxx do { for j = miny to maxy do {
- if t[i,j]!=0 then { sat = (t[i,j]%20)/20
- hsvtorgb(hue,sat,val,r,g,b)
- circle colored rgbstring(r,g,b) at (-i,j)*boxwid } }}
-.PE
diff --git a/graphics/circuit_macros/examples/extras/Asymptotes.m4 b/graphics/circuit_macros/examples/extras/Asymptotes.m4
new file mode 100644
index 0000000000..4afd0f5758
--- /dev/null
+++ b/graphics/circuit_macros/examples/extras/Asymptotes.m4
@@ -0,0 +1,93 @@
+.PS
+# Asymptotes.m4
+# https://tex.stackexchange.com/questions/706340/create-an-asymptotes-summary-diagram-for-a-function
+gen_init
+
+definergbcolor(armygreen,0.29,0.33,0.13)
+definergbcolor(vlightgray,0.95,0.95,0.95)
+boxrad = 7bp__
+
+define(`greenbox',`box wid 90bp__ \
+ outlined "armygreen!90" shaded "armygreen!90" \
+ "{\color{white} `$1'}" ')
+
+define(`graybox',`box thick 0.4 outlined "gray" shaded "vlightgray" \
+ `$1'')
+
+ changequote(,) command "\newcommand{\eace}{\'e}
+ \newcommand{\squote}{\char39}
+ \newcommand{\dequation}{d'\'equation}"
+ changequote(`,)
+
+foreach_(`txt',`L`'m4Lx: graybox(wid 72bp__ ht 130 bp__ \
+ "\parbox{72bp}{\begin{centering}
+ {\sf txt \\ \vfill\vbox{}}
+ \end{centering}}")
+ ifelse(m4Lx,6,,`move 10bp__')',
+
+ `$(C_f)$ admet\\ Une asymptote\\ horizontale\\ \dequation:\\
+ $y = a$\\ au voisinage\\ de $\infty$',
+
+ `$(C_f)$ admet\\ Une asymptote\\ oblique\\ \dequation:\\
+ $y = ax+b$\\ au voisinage\\ de $\infty$',
+
+ `\hbox{}\vspace*{0.5\baselineskip}
+ $(C_f)$ admet\\ Une branche\\ parabolique\\ de direction\\
+ la droite\\ \dequation:\\
+ $y = ax$\\ au voisinage\\ de $\infty$',
+
+ `$(C_f)$ admet\\ Une branche\\ parabolique\\ de direction\\
+ l\squote{}axe des\\ ordonn\eace{}s\\ au voisinage\\ de $\infty$',
+
+ `$(C_f)$ admet\\ Une branche\\ parabolique\\ de direction\\
+ l\squote{}axe des\\ abscisses\\ au voisinage\\ de $\infty$',
+
+ `\vspace*{1ex}$(C_f)$ admet\\ Une \\ asymptote\\ verticale\\
+ \dequation:\\[1ex]
+ $x = a$\\ \hbox{}\hfill\hbox{}')
+
+ M: [ M1: graybox(wid 105bp__ \
+ "$\lim\limits_{x\rightarrow\infty} [f(x)-ax] = b$")
+ move 3bp__
+ M2: graybox(wid 105bp__ \
+ "$\lim\limits_{x\rightarrow\infty} [f(x)-ax] = \infty$")
+ ] with .s at ((L2.x+L4.x)/2,L2.n.y+boxht)
+
+ U:[ foreach_(`txt',`U`'m4Lx:graybox(wid 100bp__ ifelse(m4Lx,1,`+20bp__') "txt")
+ ifelse(m4Lx,4,,`move 2bp__')',
+ `$\lim\limits_{x\rightarrow\infty} [f(x)-(ax{+}b)] = 0$',
+ `\(\lim\limits_{x\rightarrow\infty} \frac{f(x)}{x} =
+ \raisebox{-0.5ex}{$a \atop {(a \neq 0)}$}\)',
+ `\(\lim\limits_{x\rightarrow\infty} \frac{f(x)}{x} = \infty \)',
+ `\(\lim\limits_{x\rightarrow\infty} \frac{f(x)}{x} = 0 \)')
+ ] with .s at ((L1.x+L6.x)/2,M.n.y+boxht)
+
+ T1: greenbox($\lim\limits_{x\rightarrow\infty} f(x) = a$) \
+ with .s at (L1.x,U.n.y+boxht)
+ T2: greenbox($\lim\limits_{x\rightarrow\infty} f(x) = \infty$) \
+ with .s at ((L1.x+L6.x)/2,T1.s.y)
+ T3: greenbox($\lim\limits_{x\rightarrow a} f(x) = \infty$) \
+ with .e at (L6.e.x,T2.y)
+
+ linethick_(1)
+ arrow from (U.w.x-5bp__,T1.s.y) down T1.s.y-L1.n.y
+ A: (T2.w.x,T2.s.y+boxrad); B1: U.U1.n+(boxht,0)
+ move to A; arcto((B1,A),B1,boxrad*3/2); arrow to B1
+ A: (U.U3.w.x+boxrad,T2.s.y); arrow from A to (A,U.U3.n)
+ B2: (1/2 between M.M1.e and M.M2.w,U.U2.n)
+ line from A+(-5bp__,0) down_ 10bp__ then left 10bp__
+ arcto((B2,Here),B2,boxrad*3/2); arrow to B2
+ B3: (L5.e.x-2*boxrad,U.U4.n.y)
+ line from A+( 5bp__,0) down_ 10bp__ then right_ 10 bp__
+ arcto((B3,Here),B3,boxrad*3/2); arrow to B3
+ arrow from (B3,U.U4.s) to (B3,L5.n)
+ arrow from (U.U4.e.x+5bp__,T3.s.y) down T3.s.y-L6.n.y
+ line from U.U2.s+(-5bp__,0) down_ 10bp__ then left_ 10bp__
+ arcto((M.M1.n,Here),M.M1.n,boxrad*3/2); arrow to M.M1.n
+ arrow from (Here,M.M1.s) down M.M1.s.y-L2.n.y
+ line from U.U2.s+( 5bp__,0) down_ 10bp__ then right_ 10bp__
+ arcto((M.M2.n,Here),M.M2.n,boxrad*3/2); arrow to M.M2.n
+ arrow from (L3.e.x-boxrad*3/2,M.M2.s.y) down M.M2.s.y-L3.n.y
+ arrow from (M.M2.e.x+5bp__,U.U3.s.y) down U.U3.s.y-L4.n.y
+ arrow from (M.w.x-5bp__,U.U1.s.y) down U.U1.s.y-L2.n.y
+.PE
diff --git a/graphics/circuit_macros/examples/extras/birds.m4 b/graphics/circuit_macros/examples/extras/Birds.m4
index 4b42ea35af..4b42ea35af 100644
--- a/graphics/circuit_macros/examples/extras/birds.m4
+++ b/graphics/circuit_macros/examples/extras/Birds.m4
diff --git a/graphics/circuit_macros/examples/extras/bistable.m4 b/graphics/circuit_macros/examples/extras/Bistable.m4
index ac49023863..ac49023863 100644
--- a/graphics/circuit_macros/examples/extras/bistable.m4
+++ b/graphics/circuit_macros/examples/extras/Bistable.m4
diff --git a/graphics/circuit_macros/examples/extras/brace.m4 b/graphics/circuit_macros/examples/extras/Brace.m4
index b0089fe96d..b0089fe96d 100644
--- a/graphics/circuit_macros/examples/extras/brace.m4
+++ b/graphics/circuit_macros/examples/extras/Brace.m4
diff --git a/graphics/circuit_macros/examples/extras/Ccurve.m4 b/graphics/circuit_macros/examples/extras/Ccurve.m4
deleted file mode 100644
index 6f3b537aac..0000000000
--- a/graphics/circuit_macros/examples/extras/Ccurve.m4
+++ /dev/null
@@ -1,14 +0,0 @@
-.PS
-# Ccurve.m4
-gen_init
-scale = 1.5
-# Gosper C curve
-
-`define' c_curve {if $3==0 then { continue by ($1,$2) } else {
- c_curve( ($1-$2)/2, ($1+$2)/2, $3-1)
- c_curve( ($1+$2)/2, ($2-$1)/2, $3-1)}}
-
-line from 0,4 to 0,4
-c_curve(0,4,10)
-
-.PE
diff --git a/graphics/circuit_macros/examples/extras/chaos.m4 b/graphics/circuit_macros/examples/extras/Chaos.m4
index 17ae070e58..17ae070e58 100644
--- a/graphics/circuit_macros/examples/extras/chaos.m4
+++ b/graphics/circuit_macros/examples/extras/Chaos.m4
diff --git a/graphics/circuit_macros/examples/extras/Chuck.m4 b/graphics/circuit_macros/examples/extras/Chuck.m4
index df83a8ce0e..3d85390e80 100644
--- a/graphics/circuit_macros/examples/extras/Chuck.m4
+++ b/graphics/circuit_macros/examples/extras/Chuck.m4
@@ -216,11 +216,5 @@ dimension_thick
r_dimen(from D[3]+(0,-14) right 35,0,35)
r_dimen(from (0,D[3].y-14) right 35,0,35)
-# arrow <- down 30 left 30 from D[3] chop 16/2 chop 0 then left 5
-# "16 DRILL 23 CBORE" rjust "4 HOLES" rjust
-
-# arrow <- from (-305/2,30.6+10+2) up 5 left 5 then up 13
-# s_box(SEE (A)) with .sw at Here+(-5pt__,2pt__)
-
command "}%"
.PE
diff --git a/graphics/circuit_macros/examples/extras/ClassDAmp.m4 b/graphics/circuit_macros/examples/extras/ClassDAmp.m4
index b8e845cf06..93f73a17cb 100644
--- a/graphics/circuit_macros/examples/extras/ClassDAmp.m4
+++ b/graphics/circuit_macros/examples/extras/ClassDAmp.m4
@@ -9,7 +9,7 @@ Q1: mosfet(down_ dimen_*5/4,R,TFSDdPyQdB)
dot(at Q1.S)
{ line up_ dimen_/4
dot(,,1); "ifsvg(`svg_it(V)svg_sub(DD)',`$V_{\hbox{\scriptsize DD}}$')" \
- at last [].n+(0,0.05) above }
+ at last [].e ljust }
line left_ dimen_*2/3
SW: switch(left_ dimen_,`$1',D); ifelse(`$1',,`rlabel(,SW1)',`llabel(,SW2)')
Q2: mosfet(up_ dimen_*5/4,,TFSDPyQuB) with .D at Q1.D
@@ -27,7 +27,7 @@ T: dot; right_
]')
S1: String
-S2: String(R) with .Q1.S at S1.Q2.D+(0,-2*elen_)
+S2: String(R) with .Q1.S at S1.Q2.D+(0,-3/2*elen_)
I1: line left_ dimen_/2 from S1.Comp.In1
sinusoid(dimen_/4,twopi_/(dimen_/2),-pi_/2,0,dimen_/2) \
with .Start at I1.end-(textoffset,0)
@@ -51,7 +51,7 @@ NO: dot(at N.Out+(dimen_/12,0))
dot
{ line up_ dimen_/2; diode(to (NO,Here),Z); line to NO }
{ capacitor(down_ dimen_); ground(,T,S)
- llabel(,iflatex(C_{\hbox{\scriptsize On}},ifsvg(svg_it(R)`'svg_sub(On)))) }
+ llabel(iflatex(C_{\hbox{\scriptsize On}},ifsvg(svg_it(R)`'svg_sub(On)))) }
line dashed to (S1.SW,Here)
arrow <-> dashed from S1.SW to S2.SW chop dimen_/4
diff --git a/graphics/circuit_macros/examples/extras/Cruller.m4 b/graphics/circuit_macros/examples/extras/Cruller.m4
deleted file mode 100644
index d2c215ae13..0000000000
--- a/graphics/circuit_macros/examples/extras/Cruller.m4
+++ /dev/null
@@ -1,67 +0,0 @@
-.PS
-# Cruller.m4
-threeD_init
-NeedDpicTools
-scale = 2.54
-
-define(`lobe',`(sind(6*(`$1'))+4)/5*2.25')
-
- viewazimuth = 20 # Set view angles in degrees
- viewelevation = 30
- setview(viewazimuth,viewelevation,0)
-
- dt = 3 # major angle degrees per facet
- ds = 10 # minor angle degrees per facet
-
- tradius = 6
-define(`cruller',`rot3Dz((`$1')*dtor_,
- sum3D(0,tradius,0,0,Rect_(lobe(`$2'+2*(`$1')),`$2')))')
-
-define(`tvisible',`dot3D(View3D,
- cross3D(diff3D(cruller(`$1'+dt/2,`$2'),cruller(`$1',`$2')),
- diff3D(cruller(`$1',`$2'+ds/2),cruller(`$1',`$2'))))')
-
- # create the arrays and sort
- n = 0
- for t = dt to 360+dt/2 by dt do {
- for s=ds/2 to 360.1 by ds do {
- if tvisible(t,s) > -0.01 then {
- n +=1
- t[n] = t
- s[n] = s
- d[n] = dot3D(cruller(t,s),view3D1,view3D2,view3D3) # view distance
- ix[n] = n
- }
- } }
-# prval(n)
- dpquicksort(d,1,n,ix)
-
- # Background
-Bne: (9,6)
-Bsw: (-9,-6)
-B: 0.5 between Bne and Bsw
-iflatex(`line fill_(0.75) \
- from (Bsw,Bne) to Bsw then to (Bne,Bsw) then to Bne then to (Bsw,Bne)',
- `ShadedPolygon((Bsw,Bne):Bsw:(Bne,Bsw):Bne,,-30,
- 0,1,1,1,
- .5,.1,.4,0,
- 1,0,0,0) at B')
- # draw the facets
-thinlines_
-[
- rgbtohsv(0.6,0.4,0,h,s,v)
- for i = 1 to n do {
- tc = t[ix[i]]; sc = s[ix[i]]
- SE: (Project(cruller(tc+dt/2,sc-ds/2)))
- SW: (Project(cruller(tc-dt/2,sc-ds/2)))
- NW: (Project(cruller(tc-dt/2,sc+ds/2)))
- NE: (Project(cruller(tc+dt/2,sc+ds/2)))
- f = ((dcosine3D(3,cruller(tc,sc))/2.25+1)/2)^2
- hsvtorgb(h,(1-f)*s,1,r,g,b)
- line outlined rgbstring(r,g,b) shaded rgbstring(r,g,b) ifpdf( invis ) \
- from SE to SW then to NW then to NE then to SE }
- ] at B
-
-thicklines_
-
-.PE
diff --git a/graphics/circuit_macros/examples/extras/Cylinder.m4 b/graphics/circuit_macros/examples/extras/Cylinder.m4
deleted file mode 100644
index abe9a9bac7..0000000000
--- a/graphics/circuit_macros/examples/extras/Cylinder.m4
+++ /dev/null
@@ -1,43 +0,0 @@
-.PS
-# Cylinder.m4
-gen_init(SIdefaults) # lengths are in mm
-
-define(`cylinder',`[ angle = ifelse(`$3',,20,`$3')
- w = ifelse(`$1',,boxwid,`$1')
- h = ifelse(`$2',,boxht,`$2')
- B: ellipse wid w ht sind(angle)*w
- S: box invis wid w ht h fill_(1) with .s at B
- line from S.nw to S.sw
- line from S.ne to S.se
- T: ellipse wid w ht sind(angle)*w at B+(0,h)
- ]')
-
-define Cylinder { [ dtor = atan2(1,0)/90
- if "$1"=="" then { w = boxwid } else { w = $1 }
- if "$2"=="" then { h = boxht } else { h = $2 }
- if "$3"=="" then { angle = 20 } else { angle = $3 }
- B: ellipse wid w ht sin(angle*dtor)*w
- S: box invis wid w ht h fill 1 with .s at B
- line from S.nw to S.sw
- line from S.ne to S.se
- T: ellipse wid w ht sin(angle*dtor)*w at B+(0,h)
- ] }
-
-M4: [
- cylinder
- move
- cylinder(,,15)
- move
- cylinder(3,50)
- ]
-"M4 macro" at last [].s below
-
-Pic: [
- Cylinder
- move
- Cylinder(,,15)
- move
- Cylinder(3,50)
- ] with .w at M4.e+(5,0)
-"pic macro" at last [].s below
-.PE
diff --git a/graphics/circuit_macros/examples/extras/hsv.m4 b/graphics/circuit_macros/examples/extras/HSV.m4
index 662184dd7d..662184dd7d 100644
--- a/graphics/circuit_macros/examples/extras/hsv.m4
+++ b/graphics/circuit_macros/examples/extras/HSV.m4
diff --git a/graphics/circuit_macros/examples/extras/Highgain.m4 b/graphics/circuit_macros/examples/extras/Highgain.m4
index 06bc62985e..71cbc74a49 100644
--- a/graphics/circuit_macros/examples/extras/Highgain.m4
+++ b/graphics/circuit_macros/examples/extras/Highgain.m4
@@ -48,23 +48,23 @@ define(`vectorsize',
[
R: darrow(right linewid,,,,,,|-)
- { s_box($R$) dabove(at R.start+(5pt__,0)) }
+ { "$R$" dabove(at R.start+(5pt__,0)) }
Sum: circle invis "$\sum$"
darrow(right_ linewid*5/4)
- { s_box($E$) dabove(at last line) }
+ { "$E$" dabove(at last line) }
vectorsize(p,at 1/4 along_(last line))
Gain: shadebox(box "$G = \diag\mat{g_i}$" wid boxwid*1.5 ht boxht*0.75 )
darrow(,,,,,,!-)
- { s_box($U^{\prime}$) dabove(at last line) }
+ { "$U^{\prime}$" dabove(at last line) }
Compensator: shadebox(box wid boxwid*1.5 "\sl Compensator" "$K(s)$")
darrow(right_ linewid*5/4,,,,,,!-)
vectorsize(m,at 1/4 along_(last line))
- { s_box($U$) dabove(at last line) }
+ { "$U$" dabove(at last line) }
Plant: shadebox(box "\sl Plant" "$H(s)$" )
dline(right_ linewid*3/4 from Plant.e,,,,!-)
vectorsize(p,at last line)
Y: dtee(R)
- {s_box($Y$) dabove}
+ {"$Y$" dabove}
darrow(right_ linewid*2/3,t)
dline(down boxht from Y,t)
diff --git a/graphics/circuit_macros/examples/extras/Koch.m4 b/graphics/circuit_macros/examples/extras/Koch.m4
deleted file mode 100644
index cb122c10b6..0000000000
--- a/graphics/circuit_macros/examples/extras/Koch.m4
+++ /dev/null
@@ -1,33 +0,0 @@
-.PS
-# Koch snowflake
-gen_init
-
- leng = 4
- X: 3,5
- nsides = 3; rot[1] = 0; rot[2] = -120; rot[3] = -120
- depth=4
-
- for i=1 to depth do {
- for j=1 to nsides do { tmp[j] = rot[j] }
- leng = leng/3
- k = 0
- for j=1 to nsides do {
- rot[k+1] = tmp[j]
- rot[k+2] = 60
- rot[k+3] = -120
- rot[k+4] = 60
- k += 4
- }
- nsides = k
- }
-
- a = 0
- line from X to X
- for i=1 to nsides do {
- a += rot[i]
-# X: X+(Rect_(leng,a))
-# continue to X
- continue by (Rect_(leng,a))
- }
-
-.PE
diff --git a/graphics/circuit_macros/examples/extras/Makefile b/graphics/circuit_macros/examples/extras/Makefile
index efc8a2b23e..a29b0a81fd 100644
--- a/graphics/circuit_macros/examples/extras/Makefile
+++ b/graphics/circuit_macros/examples/extras/Makefile
@@ -51,7 +51,7 @@ BOXDIMS =
DVIPSOPTS = -G0 -t letter
DIMFILE = $(DOC).dim
-BS = tr '|' '\134'
+TRSLASH = tr '|' '\134'
# Might be needed (change latex commands to $(LTX) )
# LTX = latex --shell-escape
@@ -62,13 +62,13 @@ XTRASRC=printf "|documentclass[11pt]{article}\n\
|usepackage{times,boxdims,siunitx,amssymb,tikz}\n\
|setlength{|textwidth}{8in} |setlength{|textheight}{10.5in}\n\
|setlength{|hoffset}{-2cm} |setlength{|voffset}{-3cm}\n\
-|begin{document}\n" | $(BS)
+|begin{document}\n" | $(TRSLASH)
PDFLTXSRC=printf "|documentclass[11pt]{standalone}\n\
|usepackage{times,boxdims,siunitx,amssymb,tikz,geometry}\n\
|geometry{paperwidth=15in,paperheight=14in,margin=1in}\n\
|pagestyle{empty}|thispagestyle{empty}\n\
-|begin{document}|noindent|input{"$*".tex}|end{document}\n" | $(BS)
+|begin{document}|noindent|input{"$*".tex}|end{document}\n" | $(TRSLASH)
LTXFILE=printf "|documentclass[11pt]{article}\n\
|usepackage[dvipsnames]{xcolor}\n\
@@ -81,7 +81,7 @@ LTXFILE=printf "|documentclass[11pt]{article}\n\
|newbox|graph\n\
|begin{document}\n\
|noindent|input{"$*".tex}|box|graph\n\
-|end{document}\n" | $(BS)
+|end{document}\n" | $(TRSLASH)
.SUFFIXES: .ps .dvi .tex .m4 .pic .eps .png .pdf .svg .tif .gif
.m4.pic:
@@ -158,33 +158,39 @@ LTXFILE=printf "|documentclass[11pt]{article}\n\
#########################################################################
-$(DOC).pdf:
+$(DOC).pdf: texfiles
@$(XTRASRC) > extras.tex
touch extras.dim
-for fl in `ls *.m4` ; do \
file=`basename $$fl .m4` ; \
- echo $$file.m4 ; \
- $(M4) pgf.m4 extras.dim $$file.m4 | $(PIC) -g > $$file.tex ; \
- printf "\n\n|noindent|parbox{|textwidth}{\n" | $(BS) >> extras.tex ; \
- printf "|input{$$file.tex}\n" | $(BS) >> extras.tex ; \
+ printf "\n\n|noindent|parbox{|textwidth}{\n" | $(TRSLASH) >> extras.tex; \
+ printf "|input{$$file.tex}\n" | $(TRSLASH) >> extras.tex ; \
printf "\n $$file.m4\n}\n|vspace{|baselineskip}" \
- | sed -e 's/_/|_/g' | $(BS) >> extras.tex ; \
- done
- printf "\n|end{document}\n" | $(BS) >> extras.tex
- pdflatex extras
- -for file in $(XBOXDIMS) ; do \
- rm -f $$file.tex ; \
- $(M4) pgf.m4 extras.dim $$file.m4 | $(PIC) -g > $$file.tex ; \
+ | sed -e 's/_/|_/g' | $(TRSLASH) >> extras.tex ; \
done
+ printf "\n|end{document}\n" | $(TRSLASH) >> extras.tex
pdflatex extras
+# -for file in $(XBOXDIMS) ; do \
+# rm -f $$file.tex ; \
+# $(M4) pgf.m4 extras.dim $$file.m4 | $(PIC) -g > $$file.tex ; \
+# done
+# pdflatex extras
+
+texfiles:
+ touch extras.dim
+ for fl in `ls *.m4` ; do \
+ file=`basename $$fl .m4` ; \
+ echo $$file.m4 ; \
+ $(M4) pgf.m4 extras.dim $$file.m4 | $(PIC) -g > $$file.tex ; done
+ touch texfiles
$(DOC).ps: psmode $(DOC).dvi
psmode:
- printf "|usepackage{pstricks,pst-grad}\n" | $(BS) > mode.tex
+ printf "|usepackage{pstricks,pst-grad}\n" | $(TRSLASH) > mode.tex
pdfmode:
- printf "|usepackage{tikz}\n" | $(BS) > mode.tex
+ printf "|usepackage{tikz}\n" | $(TRSLASH) > mode.tex
$(DOC).dvi: $(DOC).tex files.tex header.tex psmode
touch $(DOC).dim
@@ -208,4 +214,4 @@ tst1:
dvips $(DVIPSOPTS) tst -o tst.ps
clean:
- rm -f *.ps *.pdf *.tex *.dim *.pic *.log *.dms *.aux *.svg
+ rm -f *.ps *.pdf *.tex *.dim *.pic *.log *.dms *.aux *.svg texfiles
diff --git a/graphics/circuit_macros/examples/extras/Parallel-series.m4 b/graphics/circuit_macros/examples/extras/Parallel-series.m4
new file mode 100644
index 0000000000..fb20cc21eb
--- /dev/null
+++ b/graphics/circuit_macros/examples/extras/Parallel-series.m4
@@ -0,0 +1,15 @@
+.PS
+# parallel-series.m4
+# https://tex.stackexchange.com/questions/709074/how-to-plot-a-block-diagram-with-tikz
+cct_init
+
+ dot; line right_ dimen_/2
+ parallel_(
+ parallel_(
+ `ebox(,wdth=0.2;text="$x_1$")',
+ `Sep=dimen_*3/4;ebox(,wdth=0.2;text="$x_2$")'),
+ Sep=dimen_;series_(
+ `ebox(,wdth=0.2;text="$x_3$")',
+ `ebox(,wdth=0.2;text="$x_4$")'))
+ line right_ dimen_/2; dot
+.PE
diff --git a/graphics/circuit_macros/examples/extras/person.m4 b/graphics/circuit_macros/examples/extras/Person.m4
index 4fdf09d387..4fdf09d387 100644
--- a/graphics/circuit_macros/examples/extras/person.m4
+++ b/graphics/circuit_macros/examples/extras/Person.m4
diff --git a/graphics/circuit_macros/examples/extras/README_extras b/graphics/circuit_macros/examples/extras/README_extras
index 45074a49b2..ebef7cfcd1 100644
--- a/graphics/circuit_macros/examples/extras/README_extras
+++ b/graphics/circuit_macros/examples/extras/README_extras
@@ -11,4 +11,4 @@ often be done reasonably in several possible languages.
This directory is assumed to be a subdirectory of the examples directory
in order to include the necessary definition files.
-Type "make" and, to clean up, "make clean".
+Type "make" to create extras.pdf and, to clean up, "make clean".
diff --git a/graphics/circuit_macros/examples/extras/rotellipse.m4 b/graphics/circuit_macros/examples/extras/Rotellipse.m4
index a49ce308b3..a49ce308b3 100644
--- a/graphics/circuit_macros/examples/extras/rotellipse.m4
+++ b/graphics/circuit_macros/examples/extras/Rotellipse.m4
diff --git a/graphics/circuit_macros/examples/extras/SampleFlow.m4 b/graphics/circuit_macros/examples/extras/SampleFlow.m4
index 077a0ba6e3..94e334c46a 100644
--- a/graphics/circuit_macros/examples/extras/SampleFlow.m4
+++ b/graphics/circuit_macros/examples/extras/SampleFlow.m4
@@ -2,11 +2,11 @@
# SampleFlow.m4
darrow_init
-boxwid = 1.9
-boxht = 1.0
+boxwid = 1.15
+boxht = 0.6
linethick = 1.2
- define(`dlthick',0.25)
+ define(`dlthick',0.125)
define(`dfillcolor',`0.7,0.7,0.7')
define rbox {box rad boxht/10}
@@ -17,7 +17,7 @@ linethick = 1.2
dleft
darrow(to last box.w) } }
- command "{\sf\huge"
+ command "{\sf"
B1: rbox
{ "Sample" ljust indent "Acquisition" ljust }
diff --git a/graphics/circuit_macros/examples/extras/Spec555.m4 b/graphics/circuit_macros/examples/extras/Spec555.m4
new file mode 100644
index 0000000000..713ccb2967
--- /dev/null
+++ b/graphics/circuit_macros/examples/extras/Spec555.m4
@@ -0,0 +1,56 @@
+.PS
+# Spec555.m4
+# https://tex.stackexchange.com/questions/64801/display-ics-with-circuitikz?rq=1
+log_init
+
+define(`spec555',`[ Chip: box wid 8*lg_pinsep ht 10*lg_pinsep fill_(0.9)
+ command "{\scriptsize\sf"
+ P1: "1" at 3/4<Chip.sw,Chip.se> below rjust; "GND" above
+ P5: "5" at Chip.s below rjust ; "CTRL" above
+ P2: "2" at 1/8<Chip.sw,Chip.nw> above rjust; "TRG" ljust
+ P6: "6" at 3/8<Chip.sw,Chip.nw> above rjust; "THR" ljust
+ P7: "7" at 7/8<Chip.sw,Chip.nw> above rjust; "DIS" ljust
+ P3: "3" at Chip.e above ljust ; "OUT" rjust
+ P4: "4" at 3/4<Chip.nw,Chip.ne> above rjust; "\phantom{M}RESET" below
+ P8: "8" at Chip.n above rjust ; "Vcc" below
+ "NE-555" at Chip.c "TIMER"
+ command "}%"
+ line left dimen_ from P7; X:dot
+ { R1:resistor(up_ P7.y-P6.y); rlabel(,\SI{68}{\kilo\ohm}); dot }
+ R2:resistor(down_ P7.y-P6.y); llabel(,\SI{68}{\kilo\ohm}); dot; {line to P6}
+ line to (Here,P2); SW: dot; {line to P2}
+ line from P8 to (P8,R1.end); dot ]')
+
+ command "{\small\sf"
+ T1: spec555; "U1" at T1.Chip.nw above ljust
+ T2: spec555 with .Chip.w at T1.Chip.e+(2.5*dimen_,0)
+ "U2" at T2.Chip.nw above ljust
+ {line left_ dimen_/2 from (T1.X,T1.P7); diode(down_ T1.P7.y-T1.P6.y)
+ rlabel(,\shortstack{D1\\1N4148})
+ line to (T1.X,Here); dot}
+ capacitor(down_ elen_ from T1.SW,E+); llabel(,\SI{10}{\micro\farad}); dot
+ dot(at Here-(dimen_/2,0),,1); G: dot(,,1); "GND" rjust at G.w
+ capacitor(from T1.P5 to (T1.P5,G),E+); rlabel(,\SI{0.01}{\nano\farad}); dot
+ line from T1.P1 to (T1.P1,G); dot
+ Vcc: dot(at (G,T1.R1.end),,1); "Vcc" rjust at Vcc.w
+ dot(at (T1.P4,Vcc)); line to T1.P4
+ line right_ dimen_/2 from T1.P3;
+ R3: resistor(down_ to (Here,T2.s-(0,dimen_/4))); llabel(,\SI{10}{\kilo\ohm})
+ line to (T2.P5,Here) then to T2.P5
+ dot(at (T2.X,G)); ground
+ reversed(`capacitor',up_ to (Here,T2.P5),E+); rlabel(,\SI{100}{\nano\farad})
+ line to (Here,T2.P2)
+ line from T2.P1 to (T2.P1,G); dot
+ line from T2.P4 to (T2.P4,Vcc) then to Vcc chop 0 chop dotrad_
+ dot(at (T2.X,T2.R1.end)+(0,dimen_/2),,1); {line to T2.R1.end chop dotrad_}
+ "$+$\SI{5}{\volt} to $+$\SI{15}{\volt}" at last [].n above
+ capacitor(right_ dimen_ from T2.P3,C); llabel(,\SI{100}{\micro\farad})
+ Pot1: potentiometer(down_ (Here.y-G.y)/2) with .Start at Here
+ "Rx" at Pot1.T1 ljust
+ Sp: speaker(R,,,fill_(0.9)) with .In5 at Pot1.End
+ "1" above rjust at Sp.In5; "2" below rjust at Sp.In7
+ "\shortstack{E1\\Speaker}" at Sp.In2 rjust
+ line from Sp.In7 to (Sp.In7,G) then to G chop 0 chop dotrad_
+ command "}%"
+
+.PE
diff --git a/graphics/circuit_macros/examples/extras/squiggle.m4 b/graphics/circuit_macros/examples/extras/Squiggle.m4
index 671ae2addd..671ae2addd 100644
--- a/graphics/circuit_macros/examples/extras/squiggle.m4
+++ b/graphics/circuit_macros/examples/extras/Squiggle.m4
diff --git a/graphics/circuit_macros/examples/extras/venus.m4 b/graphics/circuit_macros/examples/extras/Venus.m4
index 676cd98143..676cd98143 100644
--- a/graphics/circuit_macros/examples/extras/venus.m4
+++ b/graphics/circuit_macros/examples/extras/Venus.m4
diff --git a/graphics/circuit_macros/examples/ex17.m4 b/graphics/circuit_macros/examples/extras/ex17.m4
index a304d7359b..a304d7359b 100644
--- a/graphics/circuit_macros/examples/ex17.m4
+++ b/graphics/circuit_macros/examples/extras/ex17.m4
diff --git a/graphics/circuit_macros/examples/files.tex b/graphics/circuit_macros/examples/files.tex
index 37bff79b12..45000c231b 100644
--- a/graphics/circuit_macros/examples/files.tex
+++ b/graphics/circuit_macros/examples/files.tex
@@ -158,6 +158,14 @@
\src{Pconn.m4}.}
}
+\ifmpost\else\bfig{
+ \centerline{\getpic{cbresistor}}
+ \caption{Color-coded through-hole resistors. All are
+ 10 percent tolerance except for the last,
+ which illustrates 5 percent
+ \src{cbresistor.m4}.}
+ }\fi
+
\ifmpost\else\ifpostscript\else\bfig{
\centerline{\getpic{EVplugs}}
\caption{Electric vehicle charging plug patterns make extensive
@@ -265,17 +273,12 @@
\bfig{
\centerline{\getpic{Quantum}}
- \caption{A quantum circuit
+ \caption{A quantum circuit and a
+ superconducting quantum interface device (drawing direction down)
\src{Quantum.m4}.}
}
\bfig{
- \centerline{\getpic{SQUID}}
- \caption{Superconducting quantum interface device (drawing direction down)
- \src{SQUID.m4}.}
- }
-
-\bfig{
\centerline{\getpic{Sixpole}}
\caption{A six-pole filter
\src{Sixpole.m4}.}
@@ -308,13 +311,6 @@
}
\bfig{
- \centerline{\getpic{ex17}}
- \caption{A repetitive network created by Pic looping and
- a skewed circuit used to test the macro {\tt parallel\_}
- \src{ex17.m4}.}
- }
-
-\bfig{
\centerline{\getpic{ex12}}
\caption{ A CMOS NAND gate, a test circuit, and an XMOSFET example
\src{ex12.m4}.}
@@ -521,12 +517,6 @@
\src{XOR.m4}.}
}
-\bfig{
- \centerline{\getpic{ex00}}
- \caption{Line diagrams
- \src{ex00.m4}.}
- }
-
\ifmpost\else\ifpostscript\else\bfig{
\centerline{\getpic{EEP}}
\caption{A test of experimental single-line diagram macros
@@ -541,8 +531,8 @@
\bfig{
\centerline{\getpic{GrayCode}}
- \caption{Gray code 10-bit encoder disk pattern and a crossbar switch
- illustrating the power of looping and branching
+ \caption{The power of looping and branching:
+ Gray code 10-bit encoder disk pattern and a crossbar switch
\src{GrayCode.m4}.}
}
@@ -559,6 +549,13 @@
}
\bfig{
+ \centerline{\getpic{Sevensegment}}
+ \caption{A customizable seven-segment display showing the
+ numbered segments, a custom shape, and the numerals from 0 to 9
+ \src{Sevensegment.m4}.}
+ }
+
+\bfig{
\centerline{\getpic{Rotbox}}
\caption{The macro
{\tt rotbox(}{\sl wid,ht,type,}{\tt [r|t=}{\sl val}{\tt ])}
@@ -567,12 +564,12 @@
}
\ifmpost\else\ifpostscript\else\bfig{
- \centerline{\getpic{shadowed}}
+ \centerline{\getpic{Shadowed}}
\caption{Embellishments: the top row illustrates
{\tt shadowed(box|circle|ellipse|line,[at {\sl position}],{\sl keys})}
and the second row
{\tt ColoredV(box|circle|ellipse,({\sl r,g,b})|(({\sl colorseq})),{\sl attributes})}
- \src{shadowed.m4}.}
+ \src{Shadowed.m4}.}
}\fi\fi
\bfig{
@@ -661,7 +658,7 @@
\ifpostscript%
\bfig{% For psfrag
\includegraphics[width=\textwidth]{rose.eps} %\centerline{\getpic{rose}}%ignore%
- \caption{The left object, used for testing {\tt dipic,} is redrawn from%ignore%
+ \caption{The left object, used for testing {\tt dpic,} is redrawn from%ignore%
a detail of the set design for the musical {\it Dracula.} This %ignore%
consumes much \LaTeX\ main memory but can be produced directly %ignore%
as pdf using \hbox{\tt dpic -d}, as svg using \hbox{\tt dpic -v}, %ignore%
@@ -712,7 +709,7 @@
\bfig{
\centerline{\getpic{Dini}}
- \caption{Dini surface and an icosahedron
+ \caption{Dini surface, an icosahedron, and a sphere with inscribed cylinder
\src{Dini.m4}.}
}
@@ -789,10 +786,10 @@
\caption{Overlaying a figure with line graphics %ignore%
\src{Incleps.m4}.}
}
-\else\ifpostscript\else% Postscript with psfrag (.eps.gz not allowed)
+\else\ifpostscript\else% Postscript with psfrag (.eps.gz not allowed)
\bfig{%
\centerline{\boxdims{InclA}{%ignore%
- \includegraphics[width=3in]{Incl.eps}}%
+ \includegraphics[width=3in]{Incl.eps}}% the background picture
\hspace*{-3in}\includegraphics{Incleps.eps}}%
\caption{Overlaying a figure with line graphics %ignore%
\src{Incleps.m4}.}}
diff --git a/graphics/circuit_macros/examples/ics.m4 b/graphics/circuit_macros/examples/ics.m4
index 42286d5a8f..5db6a17cea 100644
--- a/graphics/circuit_macros/examples/ics.m4
+++ b/graphics/circuit_macros/examples/ics.m4
@@ -78,29 +78,38 @@ define(`ic74LS138',`[ Chip: box wid_ lg_chipwd ht_ 11*lg_pinsep
lg_pin(Chip.se_+(0,9*lg_pinsep),Y7,Pin7,eN,7)
`$1']')
+define(`ic555',`[ Chip: DIP_chip_outline(8)
+ foreach_(`x',
+ `lg_pin(Chip.nw-(0,lg_pinsep*m4Lx),x,Pin`'m4Lx,w,m4Lx)',
+ GND, TR, OUT, RESET)
+ foreach_(`x',
+ `lg_pin(Chip.se+(0,lg_pinsep*m4Lx),x,Pin`'eval(m4Lx+4),e,eval(m4Lx+4))',
+ CTRL, THR, DIS, Vcc)
+ `$1']')
+
define(`ic4017',`[ Chip: DIP_chip_outline(16)
- Loopover_(`x',
+ foreach_(`x',
`lg_pin(Chip.nw-(0,lg_pinsep*m4Lx),x,Pin`'m4Lx,w,m4Lx)',
PL, Q3, I3, I0, CLE, Q0, TC, GND)
- Loopover_(`x',
+ foreach_(`x',
`lg_pin(Chip.se+(0,lg_pinsep*m4Lx),x,Pin`'eval(m4Lx+8),e,eval(m4Lx+8))',
MR, U/D, Q1, I1, I2, Q2, CLK, Vcc)
`$1']')
define(`ic4510',`[ Chip: DIP_chip_outline(16)
- Loopover_(`x',
+ foreach_(`x',
`lg_pin(Chip.nw-(0,lg_pinsep*m4Lx),x,Pin`'m4Lx,w,m4Lx)',
PL, Q3, I3, I0, CLE, Q0, TC, GND)
- Loopover_(`x',
+ foreach_(`x',
`lg_pin(Chip.se+(0,lg_pinsep*m4Lx),x,Pin`'eval(m4Lx+8),e,eval(m4Lx+8))',
MR, U/D, Q1, I1, I2, Q2, CLK, Vcc)
`$1']')
define(`icVS1053',`[ Chip: DIP_chip_outline(32)
- Loopover_(`x',
+ foreach_(`x',
`lg_pin(Chip.nw-(0,lg_pinsep*m4Lx),x,Pin`'m4Lx,w,m4Lx)',
LOUT,ROUT,GBUF,AGND,AGND,DREG,Vcc,3V3,GND,MISO,MOSI,sclk,RST,CS,DCS,DCS)
- Loopover_(`x',
+ foreach_(`x',
`lg_pin(Chip.se+(0,lg_pinsep*m4Lx),x,Pin`'eval(m4Lx+16),e,eval(m4Lx+16))',
SDCD,RX,TX,7,6,5,4,3,2,1,0,GND,3V3,AGND,MIC`$-$',MIC`$+$')
`$1']')
@@ -114,13 +123,13 @@ define(`ArduinoUno',`[
#
plen = ifelse(`$4',,`2*L_unit',`$4')
#
-Loopover_(`x',`ifelse(x,nul,,
+foreach_(`x',`ifelse(x,nul,,
`Pin`'eval(5+m4Lx): line left_ plen from Connector.nw-(0,(5+m4Lx)*lg_pinsep)
{ "x" ljust at last line.start }')',
IOREF, RESET,$+${3}V3,$+${5}V, GND, GND, VIN,
nul, A0, A1, A2, A3, A4, A5)
#
-Loopover_(`x',`ifelse(x,nul,,
+foreach_(`x',`ifelse(x,nul,,
`Pin`'eval(22-m4Lx): line right_ plen from Connector.ne-(0,m4Lx*lg_pinsep)
{ "x" rjust at last line.start }')',
SCL, SDA, AREF, GND, D13, D12, ic_tilde`'D11, ic_tilde`'D10, ic_tilde`'D9, D8,
@@ -137,22 +146,22 @@ define(`ArduinoLeonardo',`[
#
plen = ifelse(`$4',,`2*L_unit',`$4')
#
-Loopover_(`x',`ifelse(x,nul,,
+foreach_(`x',`ifelse(x,nul,,
`Pin`'eval(5+m4Lx): line left_ plen from Connector.nw-(0,(5+m4Lx)*lg_pinsep)
{ "x" ljust at last line.start }')',
IOREF, RESET,$+${3}V3,$+${5}V, GND, GND, VIN,
nul, A0, A1, A2, A3, A4, A5)
#
-Loopover_(`x',`ifelse(x,nul,,
+foreach_(`x',`ifelse(x,nul,,
`Pin`'eval(22-m4Lx): line right_ plen from Connector.ne-(0,m4Lx*lg_pinsep)
{ "x" rjust at last line.start }')',
SCL, SDA, AREF, GND,
ic_tilde`'D13, D12, ic_tilde`'D11, ic_tilde`'D10, ic_tilde`'D9, D8,
nul, D7, ic_tilde`'D6, ic_tilde`'D5, D4, ic_tilde`'D3, D2, TX D1, RX D0)
#
- `$4'] ')
+ `$4'] ') # `ArduinoLeonardo'
- `RPi( wid,ht,pinlen )'
+ `RPi( wid,ht,pinlen )' # Raspberry Pi connector
define(`RPi',`[
define(`m4bwid',`ifelse(`$1',,`34*L_unit',`$1')')dnl
define(`m4bht',`ifelse(`$2',,`21*lg_pinsep',`$2')')dnl
@@ -160,13 +169,13 @@ define(`RPi',`[
GPIO: box wid m4bwid ht m4bht
plen = ifelse(`$4',,`6*L_unit',`$4')
#
-define A_LeftGPIO {
+define A_LeftGPIO { dnl pin downcount, internal label , pin no above line
exec sprintf("Pin%g: line left_ plen from GPIO.nw-(0,%g)",\
2*(`$'1)-1,(`$'1)*lg_pinsep)
{ "`$'3" ljust at last line.start }
"`$'2" at last line.c above }
#
-Loopover_(`x',`ifelse(x,nul,,`A_LeftGPIO(m4Lx,patsubst(x,;,`,'))')',
+foreach_(`x',`ifelse(x,nul,,`A_LeftGPIO(m4Lx,patsubst(x,;,`,'))')',
;3V3,
2;SDA1, 3;SCL1, 4;GPIO\_GCLK,
;GND,
@@ -178,13 +187,13 @@ Loopover_(`x',`ifelse(x,nul,,`A_LeftGPIO(m4Lx,patsubst(x,;,`,'))')',
5;, 6;, 13;, 19;, 26;,
;GND )
#
-define A_RightGPIO {
+define A_RightGPIO { dnl pin downcount, internal label , pin no above line
exec sprintf("Pin%g: line right_ plen from GPIO.ne-(0,%g)",\
2*(`$'1),(`$'1)*lg_pinsep)
{ "`$'3" rjust at last line.start }
"`$'2" at last line.c above }
#
-Loopover_(`x',`ifelse(x,nul,,`A_RightGPIO(m4Lx,patsubst(x,;,`,'))')',
+foreach_(`x',`ifelse(x,nul,,`A_RightGPIO(m4Lx,patsubst(x,;,`,'))')',
;5V,
;5V,
;GND,
@@ -199,7 +208,7 @@ Loopover_(`x',`ifelse(x,nul,,`A_RightGPIO(m4Lx,patsubst(x,;,`,'))')',
;GND,
16;, 20;, 21; )
#
- `$4'] ')
+ `$4'] ') # `RPi'
`USB_C_Socket( wid, ht, pinlen )'
define(`USB_C_Socket',`[
@@ -209,14 +218,14 @@ define(`USB_C_Socket',`[
Base: box wid m4bwid ht m4bht rad 5/3*lg_pinsep
plen = ifelse(`$4',,`6*L_unit',`$4')
#
- Loopover_(`x',
+ foreach_(`x',
`B`'eval(13-m4Lx): dnl
line left_ plen from Base.n-(m4bwid/2,(m4Lx+0.5)*lg_pinsep)
{"x" ljust at last line.start}',
GND, RX1`$+$', RX1`$-$', VBUS, SBU2, D`$-$', D`$+$', CC2, VBUS, TX2`$-$',
TX2`$+$', GND)
#
- Loopover_(`x',
+ foreach_(`x',
`A`'m4Lx: line right_ plen from Base.n+(m4bwid/2,-(m4Lx+0.5)*lg_pinsep)
{"x" rjust at last line.start}',
GND, TX1`$+$', TX1`$-$', VBUS, CC1, D`$+$', D`$-$', SBU1, VBUS, RX2`$-$',
@@ -235,7 +244,7 @@ define(`HDMI_micro',`[
then left m4bwid*2/3 then to Here]
plen = ifelse(`$4',,`6*L_unit',`$4')
#
- Loopover_(`x',
+ foreach_(`x',
`Pin`'m4Lx: line left_ plen from Base.nw-(0,m4bwid/3+m4Lx*lg_pinsep)
{"x" ljust at last line.start}
"m4Lx" at last line.c above',
diff --git a/graphics/circuit_macros/examples/keyboard.m4 b/graphics/circuit_macros/examples/keyboard.m4
index 7966a7aa3b..613ab9c21c 100644
--- a/graphics/circuit_macros/examples/keyboard.m4
+++ b/graphics/circuit_macros/examples/keyboard.m4
@@ -19,8 +19,8 @@ define(`kbdshadewid',`(kbd_u/9)')
top=attribs; # top attributes '
define(`kbdkey',
`pushkeys_(`$2',
- wdth:kbd_u; hght:kbd_u*14/13+lthick; rad:kbd_u/10;
- shadewid:kbdshadewid; base:fill_(0.3):N; top:fill_(0.9):N)dnl
+ `wdth:kbd_u; hght:kbd_u*14/13+lthick; rad:kbd_u/10;
+ shadewid:kbdshadewid; base:fill_(0.3):N; top:fill_(0.9):N')dnl
[ Base: box wid m4wdth ht m4hght rad m4rad m4base
Top: box wid m4wdth-2*m4shadewid ht m4hght-m4shadewid-lthick \
rad m4rad*(kbd_u-2*m4shadewid)/(kbd_u) with .n \
@@ -53,14 +53,14 @@ define(`stkbdkey',
top=attribs; # top attributes '
define(`enterkey',
`pushkeys_(`$2',
- wdth:kbd_u*2.26;
+ `wdth:kbd_u*2.26;
hght:kbd_u*14/13*2+kbdrowsep+linethick bp__;
bhght: kbd_u*14/13;
twdth: kbd_u*3/2;
rad:kbd_u/10;
shadewid:kbdshadewid;
base:fill_(0.3):N;
- top:fill_(0.9):N)dnl
+ top:fill_(0.9):N')dnl
[ ltx = lthick; r = m4rad*(kbd_u-2*m4shadewid)/(kbd_u)
# thick outer
linethick = (m4shadewid+r)/(1bp__); lth2 = lthick/2
diff --git a/graphics/circuit_macros/examples/mf/cct.mf b/graphics/circuit_macros/examples/mf/cct.mf
index fc30c9dbad..37b64057d3 100644
--- a/graphics/circuit_macros/examples/mf/cct.mf
+++ b/graphics/circuit_macros/examples/mf/cct.mf
@@ -1,5 +1,5 @@
% cct.mf, generated by Mfpic, v1.10 2012/12/03,
-% from TeX source "font" on 2024/01/01 at 16:59
+% from TeX source "font" on 2024/05/30 at 10:30
numeric mfpicversion; mfpicversion := 110;
if unknown mode: mode := localfont; fi
if unknown mag: mag := 1000/1000; fi
@@ -299,7 +299,7 @@ resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((-0.3084,-0),0.002767);
+circle ((-0.3084,0),0.002767);
resizedrawpen (0.8bp);
@@ -426,7 +426,7 @@ endmfpic; % (8) line 123 in the TeX source.
%----------------------------<9>
unitlen := 1.0pt#;
xscale := 72; yscale := 72;
-bounds (0, 0.333333, -0, 0.03125);
+bounds (0, 0.333333, 0, 0.03125);
beginmfpic(9); % line 124 in the TeX source.
@@ -441,19 +441,19 @@ polyline (false)
store (curpath)
drawn
-arcplr ((0.072917,0),-180,-360,0.03125);
+arcplr ((0.072917,0),180,0,0.03125);
store (curpath)
drawn
-arcplr ((0.135417,0),-180,-360,0.03125);
+arcplr ((0.135417,0),180,0,0.03125);
store (curpath)
drawn
-arcplr ((0.197917,0),180,-0,0.03125);
+arcplr ((0.197917,0),180,0,0.03125);
store (curpath)
drawn
-arcplr ((0.260417,0),-180,-360,0.03125);
+arcplr ((0.260417,0),180,0,0.03125);
store (curpath)
drawn
@@ -491,11 +491,11 @@ arcplr ((0,-0.135417),90,-90,0.03125);
store (curpath)
drawn
-arcplr ((-0,-0.197917),90,-90,0.03125);
+arcplr ((0,-0.197917),90,-90,0.03125);
store (curpath)
drawn
-arcplr ((-0,-0.260417),90,-90,0.03125);
+arcplr ((0,-0.260417),90,-90,0.03125);
store (curpath)
drawn
@@ -525,7 +525,7 @@ polyline (false)
store (curpath)
drawn
-arcplr ((-0.072917,0),0,-180,0.03125);
+arcplr ((-0.072917,0),-0,-180,0.03125);
store (curpath)
drawn
@@ -1402,12 +1402,12 @@ polyline (false)
store (curpath)
drawn
polyline (false)
-((0.145833,0),
-(0.145833,0.0625),
-(0.1875,0.0625),
-(0.1875,-0.0625),
-(0.145833,-0.0625),
-(0.145833,0));
+((0.104167,0),
+(0.104167,0.0625),
+(0.229167,0.0625),
+(0.229167,-0.0625),
+(0.104167,-0.0625),
+(0.104167,0));
store (curpath)
drawn
@@ -1450,12 +1450,12 @@ polyline (false)
store (curpath)
drawn
polyline (false)
-((0,-0.145833),
-(0.0625,-0.145833),
-(0.0625,-0.1875),
-(-0.0625,-0.1875),
-(-0.0625,-0.145833),
-(0,-0.145833));
+((0,-0.104167),
+(0.0625,-0.104167),
+(0.0625,-0.229167),
+(-0.0625,-0.229167),
+(-0.0625,-0.104167),
+(0,-0.104167));
store (curpath)
drawn
@@ -3197,7 +3197,7 @@ polyline (false)
store (curpath)
drawn
-arcplr ((0,0.1375),-180,-360,0.175);
+arcplr ((0,0.1375),180,0,0.175);
store (curpath)
drawn
@@ -3379,19 +3379,19 @@ polyline (false)
store (curpath)
drawn
-arcplr ((0.072917,-0.104167),-180,-360,0.03125);
+arcplr ((0.072917,-0.104167),180,0,0.03125);
store (curpath)
drawn
-arcplr ((0.135417,-0.104167),-180,-360,0.03125);
+arcplr ((0.135417,-0.104167),180,0,0.03125);
store (curpath)
drawn
-arcplr ((0.197917,-0.104167),180,-0,0.03125);
+arcplr ((0.197917,-0.104167),180,0,0.03125);
store (curpath)
drawn
-arcplr ((0.260417,-0.104167),-180,-360,0.03125);
+arcplr ((0.260417,-0.104167),180,0,0.03125);
store (curpath)
drawn
@@ -3423,15 +3423,15 @@ arcplr ((0.260417,0.104167),-0,-180,0.03125);
store (curpath)
drawn
-arcplr ((0.197917,0.104167),0,-180,0.03125);
+arcplr ((0.197917,0.104167),-0,-180,0.03125);
store (curpath)
drawn
-arcplr ((0.135417,0.104167),0,-180,0.03125);
+arcplr ((0.135417,0.104167),-0,-180,0.03125);
store (curpath)
drawn
-arcplr ((0.072917,0.104167),0,-180,0.03125);
+arcplr ((0.072917,0.104167),-0,-180,0.03125);
store (curpath)
drawn
@@ -4844,7 +4844,7 @@ arcplr ((-0.310672,-0.001089),25.772366,-25.376934,0.35);
store (curpath)
drawn
polyline (false)
-((0,-0.151089),
+((-0,-0.151089),
(0.122222,-0.151089));
store (curpath)
@@ -5204,7 +5204,7 @@ arcplr ((-0.310672,-0.001089),25.772366,-25.376934,0.35);
store (curpath)
drawn
polyline (false)
-((0,-0.151089),
+((-0,-0.151089),
(0.122222,-0.151089));
store (curpath)
diff --git a/graphics/circuit_macros/examples/quick.m4 b/graphics/circuit_macros/examples/quick.m4
index 7de2399601..1d849e2809 100644
--- a/graphics/circuit_macros/examples/quick.m4
+++ b/graphics/circuit_macros/examples/quick.m4
@@ -1,16 +1,14 @@
.PS # Pic input begins with .PS
cct_init # Read in macro definitions and set defaults
elen = 0.75 # Variables are allowed; default units are inches
-Origin: Here # Position names are capitalized
- source(up_ elen); llabel(-,v_s,+)
- resistor(right_ elen); rlabel(,R,)
+Vs: source(up_ elen); llabel(-,v_s,+) # Name and label the source
+ resistor(right_ elen); rlabel(,R,) # Semicolon and line end are equivalent
dot
{ # Save the current position and direction
- capacitor(down_ to (Here,Origin)) #(Here,Origin) = (Here.x,Origin.y)
- rlabel(+,v,-); llabel(,C,)
+ capacitor(down_ Vs.len); rlabel(+,v,-); llabel(,C,)
dot
} # Restore position and direction
line right_ elen*2/3
- inductor(down_ Here.y-Origin.y); rlabel(,L,); b_current(i)
- line to Origin
+ inductor(down_ Vs.len); rlabel(,L,); b_current(i)
+ line to (Vs,Here) # (Vs,Here) = (Vs.x,Here.y)
.PE # Pic input ends
diff --git a/graphics/circuit_macros/examples/relaycoil.m4 b/graphics/circuit_macros/examples/relaycoil.m4
index 7966a32294..9a30b21795 100644
--- a/graphics/circuit_macros/examples/relaycoil.m4
+++ b/graphics/circuit_macros/examples/relaycoil.m4
@@ -6,7 +6,8 @@ cct_init
{ relaycoil; S: `"\tt relaycoil"' at last [].s+(0,-16bp__)
{ "\sl V1" wid 10bp__ at last [].V1 rjust
"\sl V2" at last [].V2 ljust }
- K: relaycoil(NX) with .nw at last [].ne+(spc*4,0); "\tt (NX)" at (last [],S)
+ relaycoil(S) with .nw at last [].ne+(spc*2,0); "\tt (S)" at (last [],S)
+ K: relaycoil(NX) with .nw at last [].ne+(spc*3,0); "\tt (NX)" at (last [],S)
{ thinlines_
spline <- from K.A1 left 7bp__ then up 4bp__ left 4bp__; "\sl A1" rjust
arrow <- from K.A2 left 10bp__; "\sl A2" rjust
@@ -16,14 +17,15 @@ cct_init
spline <- from K.B3 right 7bp__ then down 4bp__ right 4bp__; "\sl B3" ljust
thicklines_
}
- relaycoil(AXSR) with .nw at last [].ne+(spc*5,0); "\tt (AXSR)" at (last [],S)
+ relaycoil(AXSR) with .nw at last [].ne+(spc*4,0); "\tt (AXSR)" at (last [],S)
{ "\sl V1" at last [].V1 rjust; "\sl V2" at last [].V2 rjust }
relaycoil(BXSR) with .nw at last [].ne+(spc*2,0); "\tt (BXSR)" at (last [],S)
{ "\sl V1" at last [].V1 ljust; "\sl V2" at last [].V2 ljust }
- relaycoil(SR) with .nw at last [].ne+(spc*3,0); "\tt (SR)" at (last [],S)
- relaycoil(SO) with .nw at last [].ne+(spc,0); "\tt (SO)" at (last [],S)
- relaycoil(SOR) with .nw at last [].ne+(spc,0); "\tt (SOR)" at (last [],S)
- relaycoil(PC) with .nw at last [].ne+(spc,0); "\tt (PC)" at (last [],S)
+ relaycoil(SR) with .nw at last [].ne+(spc*2,0); "\tt (SR)" at (last [],S)
+ spx = spc*3/4
+ relaycoil(SO) with .nw at last [].ne+(spx,0); "\tt (SO)" at (last [],S)
+ relaycoil(SOR) with .nw at last [].ne+(spx,0); "\tt (SOR)" at (last [],S)
+ relaycoil(PC) with .nw at last [].ne+(spx,0); "\tt (PC)" at (last [],S)
}
spc = dimen_/4
{
diff --git a/graphics/circuit_macros/examples/xfig/xfiglib.fig b/graphics/circuit_macros/examples/xfig/xfiglib.fig
index 91a4e52740..d67703acc6 100644
--- a/graphics/circuit_macros/examples/xfig/xfiglib.fig
+++ b/graphics/circuit_macros/examples/xfig/xfiglib.fig
@@ -75,7 +75,7 @@ Single
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 1500 263 1500 300 1463 263 1500 225
-6
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
- 1437 525 1438 225
+ 1437 525 1437 225
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
1400 525 1400 225
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
@@ -135,11 +135,11 @@ Single
6 3300 75 3450 675
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
3375 675 3375 425
-6 3300 325 3450 425
+6 3300 300 3450 450
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
3425 425 3325 425
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 6
- 3375 400 3300 400 3300 350 3450 350 3450 400 3375 400
+ 3375 450 3300 450 3300 300 3450 300 3450 450 3375 450
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
3425 325 3325 325
-6
@@ -297,9 +297,11 @@ Single
6 1650 1575 2250 2025
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
1650 1800 1775 1800
+6 1775 1590 2125 2010
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 4
1915 2010 1775 2010 1775 1590 1915 1590
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 1915 1800 1915 1590 2125 1800 1915 2010
+-6
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
2125 1800 2250 1800
-6
diff --git a/graphics/circuit_macros/gpic.m4 b/graphics/circuit_macros/gpic.m4
index 4a69dcd786..b53634ead2 100644
--- a/graphics/circuit_macros/gpic.m4
+++ b/graphics/circuit_macros/gpic.m4
@@ -1,7 +1,7 @@
divert(-1)
gpic.m4 Initialization for gpic.
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
diff --git a/graphics/circuit_macros/lib3D.m4 b/graphics/circuit_macros/lib3D.m4
index a7f3d95ac2..7cc49756ec 100644
--- a/graphics/circuit_macros/lib3D.m4
+++ b/graphics/circuit_macros/lib3D.m4
@@ -3,7 +3,7 @@ lib3D.m4 Macros for rotation, projection, and other
operations on argument triples representing
3D vectors or colors.
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
@@ -244,26 +244,34 @@ define(`M4F_P',
`shadedball( rad,
highlight rad, highlight degrees,
- initial shade, final shade )
+ initial gray, final gray | (rf,gf,bf) )
The highlight is by default at
radius rad*3/5 and angle 110 deg
(or arg2 deg); if setlight has been
- invoked then the highlight is as
- given by its azimuth and elevation arguments'
+ invoked then its azimuth and elevation arguments
+ determine highlight position.
+ Arg5 can be a parenthesized rgb color '
define(`shadedball',`[ C: (0,0); r = ifelse(`$1',,circlerad,`$1')
ifdef(`setlight_',
`H: (project(sprod3D(r,light3D1,light3D2,light3D3)))
hr = distance(C,H)',
`hr = ifelse(`$2',,r*3/5,`$2'); ha = ifelse(`$3',,110,`$3')
H: (cosd(ha)*hr,sind(ha)*hr)')
- u0 = ifelse(`$4',,1,`$4'); uf = ifelse(`$5',,0.25,`$5')
+ rgbtohsv(ifelse(`$4',,`1,1,1',``$4',`$4',`$4''),h0,s0,v0)
+ pushdef(`rgbf',`ifelse(`$5',,`(0.25,0.25,0.25)pushdef(`oneshade',1)',
+ substr(`$5',0,1)substr(`$5',decr(len(`$5')),1),(),`$5'pushdef(`oneshade',0),
+ `(`$5',`$5',`$5')pushdef(`oneshade',1)')')
+ rgbtohsv(patsubst(rgbf,`^ *('\|`) *$'),hf,sf,vf)
rm = r+hr; n = int(rm/(linethick bp__))
- for i=1 to n-1 do { x = i/n*rm; u = u0+(i/n)^2*(uf-u0)
+ for i=1 to n-1 do { x = i/n*rm; ifelse(oneshade,1,
+ `hs = h0+(i/n)^2*(hf-h0); ss = s0+(i/n)^2*(sf-s0); vs = v0+(i/n)^2*(vf-v0)
+ hsvtorgb(hs,ss,vs,ri,gi,bi)',
+ `hsvtorgb(hf,(i/n)^2,vf,ri,gi,bi)')
if x <= (r-hr) then {
- circle rad x thick linethick*1.6 outlined rgbstring(u,u,u) at H } \
- else { arc cw thick linethick*ifpgf(2,1.6) outlined rgbstring(u,u,u) \
+ circle rad x thick linethick*1.6 outlined rgbstring(ri,gi,bi) at H } \
+ else { arc cw thick linethick*ifpgf(2,1.6) outlined rgbstring(ri,gi,bi) \
from Cintersect(H,x,C,r) to Cintersect(H,x,C,r,R) with .c at H } }
- circle rad r ifpgf(+linethick bp__/2) at C
- `$6']')
+ circle rad r ifpgf(+linethick bp__/2) outlined rgbstring(ri,gi,bi) at C
+ `$6' popdef(`rgbf',`oneshade') ]')
divert(0)dnl
diff --git a/graphics/circuit_macros/libSLD.m4 b/graphics/circuit_macros/libSLD.m4
index d13d57a51b..c2b29ddcf8 100644
--- a/graphics/circuit_macros/libSLD.m4
+++ b/graphics/circuit_macros/libSLD.m4
@@ -2,7 +2,7 @@ divert(-1)
libSLD.m4 Draft macros for single-line diagram elements
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
diff --git a/graphics/circuit_macros/libcct.m4 b/graphics/circuit_macros/libcct.m4
index 463ff4515e..d46990f88a 100644
--- a/graphics/circuit_macros/libcct.m4
+++ b/graphics/circuit_macros/libcct.m4
@@ -1,7 +1,7 @@
divert(-1)
libcct.m4
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
@@ -206,132 +206,126 @@ define(`capacitor',
{[box invis ht_ m4cht wid_ m4cwd ] at rvec_(rp_len/2,0)}
line to rvec_(rp_len,0) invis ')')
- `resistor( linespec, cycles, chars, cycle wid)
- cycles: default 3
- chars : AC: complex element
- E: ebox
- ES: ebox with slash
- Q: offset
- H: squared
- N: IEEE (default)
- B: not burnable
- V: varistor variant
- R: to right of drawing direction
- arg4: cycle width (default dimen_/6)'
+ `resistor( linespec, cycles, chars, cycle wid )
+ chars: AC: complex element
+ E: ebox
+ ES: ebox with slash
+ F: FDNR (freq-dependent neg resistor)
+ Q: offset
+ H: squared
+ N: IEEE (default)
+ B: not burnable
+ V: varistor variant
+ R: to right of drawing direction'
define(`resistor',
-`define(`m4h',`ifelse(`$4',,`dimen_/6',`($4)')/4')dnl
- ifinstr(
- `$2',E, # This is obsolete but kept for now
+`eleminit_(`$1'); M4S: last line.start; M4E: last line.end
+ define(`m4type',ifelse(`$3',,N,`$3',R,N,`$3')`')dnl
+ define(`m4neg',sc_draw(`m4type',R,-))dnl
+ define(`m4cycles',`ifelse(`$2',,3,(`$2'))')dnl
+ define(`m4cyclewid',`ifelse(`$4',,(dimen_/6),`($4)')')dnl
+ define(`m4lgth',`(m4cycles*m4cyclewid)')dnl
+ ifelse(
+ `$2',E, # This is obsolete but kept for now
`ebox(`$1',shift(shift($@)))',
- `$3',ES,
- `ebox(`$1')
- {line from last line.c+vec_( m4lgth*0.3, m4wdth/2) \
- to last line.c+vec_(-m4lgth*0.3,-m4wdth/2)}
- line invis from 2nd last line.start to 2nd last line.end',
- `$3',E,
- `ebox(`$1')',
- `$3',V,
- `M4_varistor($@)',
- `$3',AC,
- `ebox(`$1')
- { ACsymbol(at last [],m4h*3.5,m4h*2,R)
- [] wid 2nd last [].wid ht 2nd last [].ht at 2nd last [] }',
- `define(`dna_',ifelse(`$3',,N,`$3',R,N,`$3')`')dnl
- eleminit_(`$1')
- sc_draw(`dna_',N,
- `define(`m4n',`ifelse(`$2',,6,`eval(2*($2))')')dnl Default resistor:
- define(`m4v',2)dnl
- if m4h*m4n*2 > rp_len then { eleminit_(to rvec_(m4h*m4n*2,0)) }
- tr_xy_init(last line.c, m4h, sc_draw(`dna_',R,-))dnl
- { line from last line.start to tr_xy(-m4n,0)\
- for_(2,m4n,2,
- `then to tr_xy(eval(2*m4x-3-m4n), m4v) \
- then to tr_xy(eval(2*m4x-1-m4n),-m4v) \')dnl
- then to tr_xy(m4n, 0) \
- then to last line.end
- [box invis ht_ m4h*m4v*2 wid_ m4h*m4n*2] at 2nd last line.c
- }')
- sc_draw(`dna_',Q,
- `define(`m4n',`ifelse(`$2',,6,`eval(2*($2))')')dnl
- define(`m4v',2)dnl
- if m4h*m4n*2 > rp_len then { eleminit_(to rvec_(m4h*m4n*2,0)) }
- tr_xy_init(last line.c, m4h, sc_draw(`dna_',R,-))dnl
- { line from last line.start to tr_xy(-m4n,0)\
- for_(2,m4n,2,
- `then to tr_xy(eval(2*m4x-2-m4n), m4v*2) \
- then to tr_xy(eval(2*m4x-m4n),0) \')dnl
- then to tr_xy(m4n, 0) \
- then to last line.end
- [box invis ht_ m4h*m4v*2 wid_ m4h*m4n*2] at 2nd last line.c + ta_xy(0,m4v)
- }')
- sc_draw(`dna_',H,
- `define(`m4n',`ifelse(`$2',,5,`eval(2*($2)-1)')')dnl
- define(`m4hh',`m4h*6/5')dnl
- define(`m4v',7/3)dnl
- if m4hh*m4n*2 > rp_len then { eleminit_(to rvec_(m4hh*m4n*2,0)) }
- tr_xy_init(last line.c, m4hh, sc_draw(`dna_',R,-))dnl
- { line from last line.start to tr_xy(-m4n,0)\
- for_(-m4n,m4n,2,
- `ifelse(eval(((m4x+m4n)/2)%2),0,
- `then to tr_xy(m4x,m4v) \
- then to tr_xy(eval(m4x+2),m4v) \',
- `then to tr_xy(m4x,0) \
- ifelse(m4x,m4n,,`then to tr_xy(eval(m4x+2),0)')\')')dnl
- then to tr_xy(m4n, 0) \
- then to last line.end
- [box invis ht_ m4hh*m4v wid_ m4hh*m4n*2] at 2nd last line.c+(0,m4hh*m4v/2)
- }')
- sc_draw(`dna_',B,
- `resistor(`$1',`$2',dna_,`$4'); M4LBC: last line.c
- m4lbwd = last [].wid_+lthick*2; m4lbht = last [].ht_+lthick*2
- [lbox(m4lbwd,m4lbht,thick 0.4)] with .c at M4LBC
- [lbox(m4lbwd+2bp__,m4lbht+2bp__,thick 0.4)] with .c at M4LBC ')
-#
- line invis from 2nd last line.start to 2nd last line.end ')')
-
-define(`M4_varistor',`eleminit_(`$1')
- define(`m4wd',`dimen_/2')dnl
- define(`m4ht',`dimen_/4')dnl
- {line to rvec_(max(0,rp_len/2-m4wd/2),0)
- {m4fshade(m4fill,line to rvec_(0,ifinstr(`$3',R,,-)m4ht/2) \
- then to rvec_(m4wd/2,0) \
- then to Here)}
- move to rvec_(m4wd,0)
- m4fshade(m4fill,line to rvec_(0,ifinstr(`$3',R,-)m4ht/2) \
- then to rvec_(-m4wd/2,0) \
- then to Here)
- line to rvec_(max(0,rp_len/2-m4wd/2),0) }
- {[box invis ht_ m4ht wid_ m4wd] at rvec_(rp_len/2,0)}
- line to rvec_(rp_len,0) invis ')
+ m4type,N,
+ `define(`m4nN',`eval(2*m4cycles)')dnl Default resistor:
+ define(`m4v',2)dnl
+ if m4lgth > rp_len then { eleminit_(to rvec_(m4lgth,0)) }
+ tr_xy_init(last line.c, m4cyclewid/4, m4neg)dnl
+ { line from last line.start to tr_xy(-m4nN,0)\
+ for_(2,m4nN,2,
+ `then to tr_xy(eval(2*m4x-3-m4nN), m4v) \
+ then to tr_xy(eval(2*m4x-1-m4nN),-m4v) \')dnl
+ then to tr_xy(m4nN, 0) \
+ then to last line.end # This could be replaced for obtuse directions:
+ [box invis ht_ m4cyclewid*m4v/2 wid_ m4cyclewid*m4nN/2] at 2nd last line.c
+ }',
+ m4type,Q,
+ `define(`m4nQ',`eval(2*m4cycles)') define(`m4v',2)dnl
+ if m4cyclewid*m4nQ/2 > rp_len then {
+ eleminit_(to rvec_(m4cyclewid*m4nQ/2,0)) }
+ tr_xy_init(last line.c, m4cyclewid/4, m4neg)dnl
+ { line from last line.start to tr_xy(-m4nQ,0)\
+ for_(2,m4nQ,2,
+ `then to tr_xy(eval(2*m4x-2-m4nQ), m4v*2) \
+ then to tr_xy(eval(2*m4x-m4nQ),0) \')dnl
+ then to tr_xy(m4nQ, 0) \
+ then to last line.end
+ [box invis ht_ m4cyclewid*m4v/2 wid_ m4cyclewid*m4nQ/2] \
+ at 2nd last line.c + ta_xy(0,m4v)
+ }',
+ m4type,ES,
+ `ebox(`$1',m4lgth,dimen_/5)
+ {line from last line.c+vec_( dimen_/2*0.3, dimen_/5/2) \
+ to last line.c+vec_(-dimen_/2*0.3,-dimen_/5/2)}',
+ m4type,F,
+ `define(`m4cht',`dimen_/3') define(`m4cwd',`m4cht*0.9')dnl
+ {line to rvec_(rp_len/2-m4cwd/2,0)
+ {[for i=0 to m4cycles do {line from vec_(i*m4cwd/m4cycles,0) \
+ to vec_(i*m4cwd/m4cycles,m4cht)}] at rvec_(m4cwd/2,0)}
+ line from rvec_(m4cwd,0) to rvec_(rp_len/2+m4cwd/2,0)}',
+ m4type,H,
+ `define(`m4nH',`eval(2*m4cycles-1)')dnl
+ define(`m4hh',`m4cyclewid*6/5/4') define(`m4v',7/3)dnl
+ if m4hh*m4nH/2 > rp_len then { eleminit_(to rvec_(m4hh*m4nH/2,0)) }
+ tr_xy_init(last line.c, m4hh, m4neg)dnl
+ { line from last line.start to tr_xy(-m4nH,0)\
+ for_(-m4nH,m4nH,2,
+ `ifelse(eval(((m4x+m4nH)/2)%2),0,
+ `then to tr_xy(m4x,m4v) \
+ then to tr_xy(eval(m4x+2),m4v) \',
+ `then to tr_xy(m4x,0) \
+ ifelse(m4x,m4nH,,`then to tr_xy(eval(m4x+2),0)')\')')dnl
+ then to last line.end
+ [move from tr_xy(-m4nH,0) to tr_xy(m4nH,0) \
+ then to tr_xy(m4nH,m4v) then to tr_xy(-m4nH,m4v)] \
+ at 2nd last line.c+vec_(0,m4neg`'m4hh*m4v/2) }',
+ m4type,V,
+ `define(`m4ht',`(m4lgth/2)')dnl
+ {line to rvec_(max(0,rp_len/2-m4lgth/2),0)
+ {[m4fshade(m4fill,line to rvec_(0,ifinstr(`$3',R,,-)m4ht/2) \
+ then to rvec_(m4lgth,ifinstr(`$3',R,-)m4ht/2) \
+ then to rvec_(m4lgth,0) then to Here)] at rvec_(m4lgth/2,0) }
+ line from rvec_(m4lgth,0) to rvec_(max(0,rp_len/2+m4lgth/2),0) } ',
+ m4type,B,
+ `resistor(`$1',`$2',sc_draw(`m4type',B),`$4'); M4LBC: last line.c
+ m4lbwd = last [].wid_+lthick*2; m4lbht = last [].ht_+lthick*2
+ [lbox(m4lbwd,m4lbht,thick 0.4)] with .c at M4LBC
+ [lbox(m4lbwd+lthick*4,m4lbht+lthick*4,thick linethick/2)] with .c at M4LBC',
+ m4type,AC,
+ `ebox(`$1')
+ { ACsymbol(at last [],m4cyclewid*3.5/4,m4cyclewid/2,R)
+ [] wid 2nd last [].wid ht 2nd last [].ht at 2nd last [] } ')
+ ifelse(m4type,E,`ebox(`$1')',
+ `line invis from M4S to M4E') ')
`potentiometer(linespec, cycles,
fractional pos, length, fractional pos, length,...)
Resistor in a block, tapped at fractional positions
with specified (possibly negative) arrow lengths.
- Taps are labelled T1, T2, ...
- Uses side effects of resistor macro'
+ Taps are labelled T1, T2, ...'
define(`potentiometer',`[R: resistor(`$1',`$2')
- Start: R.start; End: R.end; C: 0.5 between Start and End
+ define(`m4n',`ifelse(`$2',,3,(`$2'))')dnl
+ Start: R.start; End: R.end; C: R.c
m4pot_arrows(1,ifelse(`$3',,0.5,`$3'),ifelse(`$4',,`dimen_*5/12',`$4'),
- shift(shift(shift(shift($@)))))] ')
-define(`m4pot_arrows',`ifelse(`$2',,,`
- x = (`$2')*2*m4n+1; x = (int(x)%4)+(x-int(x))
- M4_Tmp: `$2' between last [].c-vec_(prod_(m4n,m4h),0) \
- and last [].c+vec_(prod_(m4n,m4h),0)
- T`$1': M4_Tmp + vec_(0,ifelse(`$3',,`dimen_*5/12',`$3'))
- { arrow from T`$1' to M4_Tmp+vec_(0,m4h*m4v*(1-(x-2)*sign(x-2))) }
+ shift(shift(shift(shift($@)))))] ')
+define(`m4pot_arrows',`ifelse(`$2',,,`FrP: C+vec_((`$2'-0.5)*m4n*dimen_/6,0)
+ T`$1': FrP + vec_(0,ifelse(`$3',,`dimen_*5/12',`$3'))
+ x = (`$2')*4*m4n+1; x = (int(x)%4)+(x-int(x))
+ {arrow from T`$1' to FrP+vec_(0,dimen_/12*(1-(x-2)*sign(x-2)))}
m4pot_arrows(incr($1),shift(shift(shift($@))))')')
`KelvinR(cycles,[R],cycle wid)
IEEE resistor with kelvin taps added
- if arg1 is blank then a [] block is used'
+ if arg1 is blank then a [] block is used
+ Uses m4nN and tr_xy from resistor'
define(`KelvinR',`[
- M4R: resistor(,`$1',,`$3') define(`m4kRm',`ifinstr(`$2',R,-,+)')
- { dot(at tr_xy(-m4n,0),lthick)
- line to tr_xy(-m4n-1,m4kRm`'2) then to tr_xy(-m4n-1,m4kRm`'4)
+ M4R: resistor(,`$1',,`$3') define(`m4KRm',`ifinstr(`$2',R,-,+)')
+ { dot(at tr_xy(-m4nN,0),lthick)
+ line to tr_xy(-m4nN-1,m4KRm`'2) then to tr_xy(-m4nN-1,m4KRm`'4)
T1: Here
- dot(at tr_xy(m4n,0),lthick)
- line to tr_xy(m4n+1,m4kRm`'2) then to tr_xy(m4n+1,m4kRm`'4)
+ dot(at tr_xy(m4nN,0),lthick)
+ line to tr_xy(m4nN+1,m4KRm`'2) then to tr_xy(m4nN+1,m4KRm`'4)
T2: Here }
Start: M4R.start; End: M4R.end; C: M4R.c
`$4' ]') ')
@@ -375,20 +369,21 @@ define(`FTcap',`[ define(`FTctyp',`ifelse(`$1',,A,`$1')')dnl
`addtaps([ahead | type=ahead;name=Name],
fractional pos, length, fractional pos, length,...)
+ ahead = blank or one of . - <- -> <->
Tap names are Tap1, Tap2, ... or
- Name1, Name2, ... if specified
- ahead = blank or one of . - <- -> <-> '
+ Name1, Name2, ... if specified'
define(`addtaps',`
ifelse(`$2',,`undefine(`m4tap_x')popdef(`m4type',`m4name')',
`ifdef(`m4tap_x',`define(`m4tap_x',incr(m4tap_x))',
- `define(`m4tap_x',1) M4tap_w: last [].w_; M4tap_e: last [].e_
+ `define(`m4tap_x',1) dnl 1st time through
+ M4tap_w: last [].w_; M4tap_e: last [].e_
pushkeys_(`$1',type::N; name:Tap:N)dnl
- ifelse(m4type,,`ifinstr(`$1',=,,`define(`m4type',`$1')')')dnl
+ ifelse(m4type,,`ifinstr(`$1',=,,`poppushdef(`m4type',`$1')')')dnl
M4tap_xy: (last [].wid_,last [].ht_)')
{define(`m4tapl',`ifelse(`$3',,`dimen_/3',`$3')')dnl
move to (`$2' between M4tap_w and M4tap_e) + vec_(0,sign(m4tapl)*M4tap_xy.y/2)
- ifinstr(m4type,.,`{dot(,lthick)}define(`m4type')');dnl
- line ifelse(m4type,-,,m4type) to rvec_(0,m4tapl)
+ ifinstr(m4type,.,`{dot(,lthick)}');dnl
+ line ifelse(m4type,.,,m4type,-,,m4type) to rvec_(0,m4tapl)
m4name`'m4tap_x: Here }
addtaps(,shift(shift(shift($@))))')')
@@ -565,20 +560,30 @@ define(`transformer', `[ P1: Here define(`m4drt',m4_dir_)
define(`m4trdot',`{`$6'dot(at (0.5 between `$1' and `$2') \
+vec_(`$3'(`$4'+m4hlw)/2,`$5'dimen_/16), dotrad_/2)}')
- `delay( linespec, width, attributes )'
+ `delay( linespec, width, attributes or keys )
+ keys:
+ wdth=expr;
+ lgth=expr;
+ type=A|S;
+ body=attributes; e.g. shaded '
define(`delay',`eleminit_(`$1')
- define(`m4ht',`ifelse(`$2',,`delay_rad_*2',`($2)')')dnl
- define(`m4wd',`m4ht*5/6')dnl
- { line to rvec_(rp_len/2-m4wd/2,0)
- { line from rvec_(m4ht/3,-m4ht/2) \
- to rvec_(0,-m4ht/2)\
- then to rvec_(0,m4ht/2) \
- then to rvec_(m4ht/3,m4ht/2) `$3'
- arc cw from Here to rvec_(0,-m4ht) with .c at rvec_(0,-m4ht/2) `$3' }
- move to rvec_(m4wd,0)
- line to rvec_(rp_len/2-m4wd/2,0) }
- { [box invis ht_ m4ht wid_ m4wd ] at rvec_(rp_len/2,0)}
- line to rvec_(rp_len,0) invis ')
+ pushkeys_(`$3',`wdth:ifelse(`$2',,delay_rad_*2,`$2'); lgth:m4`'wdth*5/6;
+ type:A:N; body::N;') dnl
+ ifinstr(`$3',=,,`ifelse(m4body,,`poppushdef(`m4body',`$3')')')dnl
+ ifelse(m4type,S,`popdef(`m4lgth',`m4wdth')dnl
+ pushkeys_(`$3',`lgth:dimen_*6/5; wdth:m4`'lgth/4')')dnl
+ { line to rvec_(rp_len/2-m4lgth/2,0)
+ {ifelse(m4type,A,`[ W: Here
+ line from rvec_(m4wdth/3,-m4wdth/2) to rvec_(0,-m4wdth/2) \
+ then to rvec_(0,m4wdth/2) then to rvec_(m4wdth/3,m4wdth/2) m4body
+ arc cw to rvec_(0,-m4wdth) with .c at rvec_(0,-m4wdth/2) m4body ]',
+ m4type,S,
+ `rotbox(m4lgth,m4wdth,m4body,r=m4wdth/2,
+ {rotbox(m4wdth/4,m4wdth,) with .W at rvec_(-m4lgth+m4wdth/2,0)})')\
+ with .W at Here }
+ line from rvec_(m4lgth,0) to rvec_(rp_len/2+m4lgth/2,0) }
+ line to rvec_(rp_len,0) invis dnl
+ popdef(`m4wd',`m4wdth',`m4type',`m4body') ')
`xtal( linespec, keys ) (2-terminal crystal)
keys:
@@ -594,15 +599,15 @@ define(`delay',`eleminit_(`$1')
outer= outer circle attributes; (dotted ...)
inner= inner circle attributes; (shaded ...)'
define(`xtal',`eleminit_(`$1') pushkey_(`$2',type,N,N)
- ifelse(m4type,R,`pushkeys_(`$2',`outerdiam:dimen_/3; innerdiam:m4outerdiam*0.4;
- outer::N; inner::N') define(`m4wd',m4outerdiam) ',
+ ifelse(m4type,R,`pushkeys_(`$2',`outerdia:dimen_/3;innerdia:m4`'outerdia*0.4;
+ outer::N; inner::N;') define(`m4wd',m4outerdia) ',
`pushkeys_(`$2',`wdth:dimen_/4; lgth:m4wdth*2/3; bxwd:m4lgth/2; box::N;')dnl
define(`m4wd',m4lgth) ')
{ line to rvec_(rp_len/2-m4wd/2,0)
{[ Orig: Here; ifelse(m4type,R,
- `{circle diam m4outerdiam at rvec_(m4outerdiam/2,0) m4outer}
- {circle diam m4innerdiam at rvec_(m4outerdiam/2,0) m4inner}
- popdef(`m4type',`m4outerdiam',`m4innerdiam',`m4outer',`m4inner') ',
+ `{circle diam m4outerdia at rvec_(m4outerdia/2,0) m4outer}
+ {circle diam m4innerdia at rvec_(m4outerdia/2,0) m4inner}
+ popdef(`m4type',`m4outerdia',`m4innerdia',`m4outer',`m4inner') ',
`{line from rvec_(0,-m4wdth/3) \
to rvec_(0,m4wdth/3)}
{ move to rvec_(m4lgth/2-m4bxwd/2,0)
@@ -631,7 +636,8 @@ define(`xtal',`eleminit_(`$1') pushkey_(`$2',type,N,N)
ii = double arrowhead current source;
AC = AC source; B = bulb; F = fluorescent; G =
generator; H = step function; L = lamp;
- N = neon; P = pulse; Q = charge; R = ramp; r = right
+ N = neon; NA = neon 2; NB = neon 3;
+ P = pulse; Q = charge; R = ramp; r = right
orientation; S = sinusoid; SC = quarter arc; SE =
arc; T = triangle; U = square-wave; X = interior X;
other = custom interior label or waveform;
@@ -691,14 +697,28 @@ define(`source',`ifelse(`$4',R,
then to rvec_(m4h/2,0)
round
line to rvec_(m4h*3/4,0)}',
+ `$2',NA,`{ line from rvec_(-m4h,0) \
+ to rvec_(-m4h/5,0)
+ { line to rvec_(0,m4h) with .c at Here } }
+ { line from rvec_(m4h,0) \
+ to rvec_(m4h/5,0)
+ { line to rvec_(0,m4h) with .c at Here } }
+ { dot(at rvec_(-m4h/2,-m4h/2)) } ',
+ `$2',NB,`{ line from rvec_(-m4h,0) \
+ to rvec_(-m4h/2,0)
+ { line to rvec_(0,m4h) with .c at Here } }
+ { line from rvec_(m4h,0) \
+ to rvec_(m4h/2,0)
+ { dot(,,1) } }
+ { dot(at rvec_(0,-m4h/2)) } ',
`$2',N,`{ {line from rvec_(-m4h,0) \
to rvec_(-m4h/2,0)}
for_(70,250,180,
`{ line from rvec_(Rect_(m4h/2,-m4x)) \
- to rvec_(Rect_(m4h/2,m4x))
+ to rvec_(Rect_(m4h/2,m4x))
round }
{ arc cw from rvec_(Rect_(m4h/2,m4x)) \
- to rvec_(Rect_(m4h/2,-m4x)) \
+ to rvec_(Rect_(m4h/2,-m4x)) \
with .c at Here
round }')
{line from rvec_(m4h/2,0) \
@@ -834,6 +854,18 @@ define(`consource',`ifelse(`$3',R,
{[box invis ht_ 2*csdim_ wid_ 2*csdim_] at rvec_(rp_len/2,0)}
line to rvec_(rp_len,0) invis ')')
+ `geiger( linespec, r, diameter, R, attributes, body name)
+ Arguments as for source except arg2 r = right orientation '
+define(`geiger',`pushdef(`m4h',ifelse(`$3',,`sourcerad_',`($3)/2'))dnl
+ pushdef(`m4R',`ifelse(`$4',R,+180)')dnl
+ source(`$1',F,shift(shift($@)))
+ {dot(at rvec_(-rp_len/2,0)+vec_(Rect_(m4h*2/3,ifelse(`$2',r,,-)110 m4R)))}
+ {"iflatex($+$,+)" at rvec_(-rp_len/2,0) \
+ +vec_(Rect_(m4h*3/2,ifelse(`$2',r,,-)30 m4R))}
+ {em_arrows(ND,rp_ang*rtod_ ifelse(`$2',r,+,-)135 m4R,m4h) with .Head \
+ at rvec_(-rp_len/2,0)+vec_(Rect_(m4h*5/4,ifelse(`$2',r,-)45 m4R))} dnl
+ popdef(`m4h',`m4R') ')
+
`Proxim(size, U|D|L|R|degrees, attributes)
Proximity symbol
Arg2 default: current direction'
@@ -888,7 +920,7 @@ define(`battery',`ifelse(`$3',R,
`ebox(linespec, length, ht, greyvalue,
box attributes)
- Length and ht (of the elemet) are relative to
+ Length and ht (of the element) are relative to
the direction of linespec'
Alternative:
`ebox(linespec, keys)
@@ -902,23 +934,23 @@ define(`ebox',`eleminit_(`$1')
line to rvec_(max(0,rp_len/2-m4lgth/2),0); M4ebC: rvec_(m4lgth/2,0)
lbox(m4lgth,m4wdth,m4box)
ifelse(m4text,,,`{m4text at M4ebC};')',
- `define(`m4lgth',`ifelse(`$2',,dimen_/2,`$2')')dnl
- define(`m4wdth',`ifelse(`$3',,dimen_/5,`$3')')dnl
+ `pushdef(`m4lgth',`ifelse(`$2',,dimen_/2,`$2')')dnl
+ pushdef(`m4wdth',`ifelse(`$3',,dimen_/5,`$3')')dnl
line to rvec_(max(0,rp_len/2-m4lgth/2),0)
ifelse(`$4',,`lbox(m4lgth,m4wdth,`$5')',
`m4fshade(`$4',lbox(m4lgth,m4wdth,`$5'))')')
line to rvec_(max(0,rp_len/2-m4lgth/2),0)}
{[ box invis ht_ m4wdth wid_ m4lgth ] at rvec_(rp_len/2,0)}
- ifinstr(`$2',=,`popdef(`m4lgth',`m4wdth',`m4text',`m4box')')dnl
+ popdef(`m4wdth',`m4lgth')ifinstr(`$2',=,`popdef(`m4text',`m4box')')dnl
line to rvec_(rp_len,0) invis ')
`fuse( linespec, chars, wid, ht, attributes )
chars dA|B|C|D|S|SB|HB|HC or dA (=D)'
define(`fuse',`eleminit_(`$1')
- define(`m4fusetype',`ifelse(`$2',,A,`$2',D,dA,`$2')')dnl
- define(`m4ht',ifelse(`$4',,`dimen_/5'ifinstr(`$2',H,*5/3),`($4)'))dnl
- define(`m4d',ifinstr(`$2',H,`m4ht/5',0))dnl
- define(`m4wd',ifelse(`$3',,`m4ht*2',`($3)'))dnl
+ pushdef(`m4fusetype',`ifelse(`$2',,A,`$2',D,dA,`$2')')dnl
+ pushdef(`m4ht',ifelse(`$4',,`dimen_/5'ifinstr(`$2',H,*5/3),`($4)'))dnl
+ pushdef(`m4d',ifinstr(`$2',H,`m4ht/5',0))dnl
+ pushdef(`m4wd',ifelse(`$3',,`m4ht*2',`($3)'))dnl
{line to rvec_(max(0,rp_len/2-m4wd/2),0)
sc_draw(`m4fusetype',HB,
`{move to rvec_(m4d,0); lbox(m4wd-2*m4d,m4ht-2*m4d)}
@@ -959,6 +991,7 @@ define(`fuse',`eleminit_(`$1')
move to rvec_(m4wd,0); line to rvec_(max(0,rp_len/2-m4wd/2),0)')
}
{[box invis ht_ m4ht wid_ m4wd] at rvec_(rp_len/2,0)}
+ popdef(`m4wd',`m4d',`m4ht',`m4fusetype')dnl
line to rvec_(rp_len,0) invis ')
`arrester( linespec, [G|E|S][D[L|R]],
@@ -1113,7 +1146,7 @@ define(`heater',`ifinstr(`$5',E,
cycles=expr;
line=attributes'
define(`heatere',
-`pushkeys_(`$2',`lgth:dimen_/2; wdth:m4lgth*2/5; cycles:3; line::N;')dnl
+`pushkeys_(`$2',`lgth:dimen_/2; wdth:m4`'lgth*2/5; cycles:3; line::N;')dnl
ifinstr(`$3',R,`pushdef(`m4ng',-)pushdef(`m4cw')pushdef(`m4ccw',cw)',
`pushdef(`m4ng') pushdef(`m4cw',cw)pushdef(`m4ccw')')dnl
eleminit_(ifinstr(`$3',T,m4wdth,`$1'))
@@ -1738,16 +1771,16 @@ define(`amp',`eleminit_(`$1') define(`m4wd',`ifelse(`$2',,`dimen_',`($2)')')dnl
`integrator( linespec,size,attributes )'
define(`integrator',`eleminit_(`$1')
define(`m4wd',`ifelse(`$2',,`dimen_',`($2)')')dnl
- {line from rvec_(m4wd/4,m4wd/2) \
+ {[ In: Here
+ {line from rvec_(m4wd/4,m4wd/2) \
to rvec_(0,m4wd/2) \
then to rvec_(0,-m4wd/2) \
then to rvec_(m4wd/4,-m4wd/2) `$3' }
- {line from rvec_(m4wd*5/4,0) \
- to rvec_(m4wd/4,m4wd/2) \
- then to rvec_(m4wd/4,-m4wd/2) \
- then to rvec_(m4wd*5/4,0) `$3' }
+ line from rvec_(m4wd*5/4,0) \
+ to rvec_(m4wd/4,m4wd/2) \
+ then to rvec_(m4wd/4,-m4wd/2) \
+ then to rvec_(m4wd*5/4,0) `$3' ; Out: Here ] with .In at Here}
{line from rvec_(m4wd*5/4,0) to rvec_(max(rp_len,m4wd*5/4),0) }
- { [box invis ht_ m4wd wid_ m4wd*5/4] at rvec_(m4wd*5/8,0) }
line to rvec_(max(rp_len,m4wd*5/4),0) invis ')
`opamp(linespec,
@@ -1765,7 +1798,7 @@ define(`integrator',`eleminit_(`$1')
T: truncated point '
define(`opamp',
`[ pushdef(`m4dlgth',`ifinstr(`$4',=,dimen_,ifelse(`$4',,dimen_,`($4)'))')dnl
- pushkeys_(`$4',body::N; lgth:m4dlgth; wdth:m4lgth;)dnl
+ pushkeys_(`$4',`body::N; lgth:m4dlgth; wdth:m4`'lgth;')dnl
pushdef(`dna_',`$5')dnl
eleminit_(`$1',max(elen_-m4lgth/4,m4lgth))
W: Here
@@ -2224,23 +2257,23 @@ define(`sbs',`eleminit_(`$1'); M4_sbsS: last line.start; M4_sbsE: last line.end
`tgate( linespec, [B][R|L] ) Transmission gate
B= box form
L= left orientation'
-define(`tgate',`[ eleminit_(`$1') define(`m4tgm',ifinstr(`$2',L,-))
+define(`tgate',`[ eleminit_(`$1') pushdef(`m4tgm',ifinstr(`$2',L,-))
A: last line.start
B: last line.end
C: last line.center
ifinstr(`$2',B,
- `ebox(from A to B)
- Gb: C+vec_(0,m4tgm`'m4wdth/2)
+ `ebox(from A to B,,dimen_/5)
+ Gb: C+vec_(0,m4tgm`'dimen_/5/2)
L1: line from 2 between Gb and C to 4 between Gb and C',
- `m4gen_d(uLAQuR)
+ `m4gen_d(uLAQuR) pushdef(`m4dv',`dimen_/6')pushdef(`m4dh',sqrt(3)*m4dv/2)
Circle: circle thick max(4pt__,linethick/2) rad m4dh/4 \
at C+vec_(0,m4tgm`'m4dh/4*4/3)
L2: line from last circle+vec_(0,m4tgm`'m4dh/4) \
to C+vec_(0,m4tgm`'m4dh*3/2)
Gb: Here
- L3: line from C to C-vec_(0,m4tgm`'m4dh) ')
+ L3: line from C to C-vec_(0,m4tgm`'m4dh) popdef(`m4dv',`m4dh')')
G: Here
- `$3']')
+ `$3' popdef(`m4tgm')]')
`ptrans( linespec, [R|L] ) Pass transistor
L= left orientation'
define(`ptrans',`[ eleminit_(`$1') define(`m4ptm',ifinstr(`$2',L,-))
@@ -2739,7 +2772,9 @@ define(`$1',substr($1,0,m4I_)`'substr($1,m4t))')')dnl
sc_draw(dna string, chars, iftrue, iffalse)'
define(`sc_draw',`m4_dna(`$1',`$2')ifelse(m4I_,-1,`$4',`$3')')
- `Element labels at the start, centre, and end
+ `(r|l|c)label( label, label, label,
+ relative position, block name )
+ Element labels at the start, centre, and end
of the last [] block (or a named [] block)
in the current direction. Labels are
spaced and treated as math, but copied
@@ -2799,16 +2834,16 @@ define(`dlabel',`ifsvg(`changecom(,)')dnl
ifinstr(`$6',L,ljust,`$6',R,rjust) dnl
ifinstr(`$6',A,above,`$6',B,below) };') ifsvg(`changecom(`#',)')')
- `eleminit_( linespec, default length )
- compute element direction and length.
- Eleminit_ defines the position, length,
- and angle of two-terminal elements. It calls
- rpoint_ with its linespec or circuit-element
- default. The rpoint_ macro draws the invisible
- line determined by its argument, calculates the
- length and angle, and gives the angle to the
- point_ macro to set the rotation parameters used
- by vec_ and rvec_.'
+ `eleminit_( linespec, default length )
+ compute element direction and length.
+ eleminit_ defines the position, length,
+ and angle of two-terminal elements. It calls
+ rpoint_ with its linespec or circuit-element
+ default. The rpoint_ macro draws the invisible
+ line determined by its argument, calculates the
+ length and angle, and gives the angle to the
+ point_ macro to set the rotation parameters used
+ by vec_ and rvec_.'
define(`eleminit_',
`rpoint_(ifelse(`$1',,`to rvec_(ifelse(`$2',,`elen_',`$2'),0)',`$1'))')
@@ -2866,48 +2901,6 @@ define(`parallel_',
] with .Start at Here; move to last [].End
')
-ifelse(0,1,` dnl ignore the following two macro defs ##################
- `par_( element, element, separation )
- Parallel combination of two branches that have
- the same direction and length. The
- branch arguments must be quoted, e.g.
- par_(`resistor',`capacitor',dimen_)'
-` ***WARNING: this macro is considered obsolete'
-define(`par_',`[Start: Here; r = ifelse(`$3',,`dimen_',`$3')
- { move to Start + vec_(0,r/2); $1 }
- line from Start + vec_(0,r/2) \
- to Start + vec_(0,-r/2) ; $2
- line to rvec_(0,r)
- End: last line.c; `$4'] with .Start at Here
- move to last [].End')
-
- `gpar_( element, element, separation )
- Parallel combination of two branches that have
- the same direction, e.g.:
- down_; gpar_(
- resistor;llabel(,R_1);resistor;llabel(,R_2),
- capacitor;rlabel(,C))
- This macro trades simplicity for generality
- and robustness to gpic'
-` ***WARNING: this macro is considered obsolete'
-define(`gpar_',
- `[ M4_B1: Here; `$1'; M4_E1: Here
- M4_C: 0.5 between M4_B1 and M4_E1; eleminit_(from M4_B1 to M4_E1)
- E2:[ M4_B: Here; `$2'; M4_E: Here; `$4'] \
- with .c at M4_C + (rect_(ifelse(`$3',,`dimen_',`$3'),rp_ang-pi_/2))
- M4_B2: E2.M4_B; M4_E2: E2.M4_E
- s = distance(M4_B2,M4_E2)
- if rp_len*s == 0 then { r = 1 } else { r = (1+max(rp_len/s, s/rp_len))/2 }
- if rp_len < s then { Tmp:M4_B2; M4_B2:M4_B1; M4_B1:Tmp
- Tmp:M4_E2; M4_E2:M4_E1; M4_E1:Tmp }
- line from M4_B2 to r between M4_E2 and M4_B2
- Start: 0.5 between Here and M4_B1; line to M4_B1
- line from M4_E2 to r between M4_B2 and M4_E2
- End: 0.5 between Here and M4_E1
- C: 0.5 between Start and End; line to M4_E1 ] with .Start at Here
- move to last [].End ')
-') dnl end of ignore ########################
-
define(`m4sepdefault',`dimen_') `Default separation in the parallel_ macro'
define(`m4lendefault',`dimen_') `Default length in the series_ macro'
@@ -3180,6 +3173,7 @@ define(`contact',`[ dnl
SO slow operating
SOR slow operating and release
SR slow release
+ S diagonal slash
HS high speed
NAC unaffected by AC current
AC AC current
@@ -3230,6 +3224,8 @@ define(`relaycoil',`[ ifelse(`$4',,,`setdir_(`$4')')
sc_draw(`rcdna_',HS,
`{ move to rvec_(0,-(m4ht*5/8)); lbox(m4wd,m4ht/4) }
{ move to rvec_(m4wd/2,-(m4ht/2)); line to rvec_(0,-m4ht/4)} ')
+ sc_draw(`rcdna_',S,
+ `{ line from rvec_(0,m4ht/2) to rvec_(m4wd,-m4ht/2)}')
sc_draw(`rcdna_',NAC,
`{ m4fshade(0,lbox(m4wd/4,m4ht)) }
{ move to rvec_(m4wd*3/4,0); m4fshade(0,lbox(m4wd/4,m4ht)) } ')
@@ -3549,8 +3545,8 @@ define(`nport',`[Box: box `$1'
move to Box.nw+(0,-d); down_
m4portpins(-plg,d*r,d,W,`$8')
# `North side'
- ifelse(`$3',,,`define(`m4n',`($3)')
- d = Box.wid/(m4n*(r+1)+1)
+ define(`m4n',`($3)')
+ ifelse(`$3',,,`d = Box.wid/(m4n*(r+1)+1)
move to Box.nw+(d,0); right_
m4portpins(plg,d*r,d,N,`$8')')
# `East side'
@@ -3559,11 +3555,11 @@ define(`nport',`[Box: box `$1'
move to Box.ne+(0,-d); down_
m4portpins(plg,d*r,d,E,`$8')
# `South side'
- ifelse(`$5',,,`define(`m4n',`($5)')
- d = Box.wid/(m4n*(r+1)+1)
+ define(`m4n',`($5)')
+ ifelse(`$5',,,`d = Box.wid/(m4n*(r+1)+1)
move to Box.sw+(d,0); right_
m4portpins(-plg,d*r,d,S,`$8')')
- `$9']')
+ `$9' undefine(`m4n')]')
define(`m4portpins',`for_(1,m4n,1,
`{ if (`$1' != 0) then { line to rvec_(0,`$1') }
`$4'`'m4x`'a: ifelse(xtract(`$5',N),N,Here,`dot') }
@@ -3599,8 +3595,8 @@ define(`gyrator',
define(`proximity',`consource(`$1',P)')
`nullator(linespec, wid, ht, attributes)'
define(`nullator',`eleminit_(`$1')
- define(`m4wd',ifelse(`$2',,`dimen_/2',`($2)'))dnl
- define(`m4ht',ifelse(`$3',,`dimen_/4',`($3)'))dnl
+ pushdef(`m4wd',ifelse(`$2',,`dimen_/2',`($2)'))dnl
+ pushdef(`m4ht',ifelse(`$3',,`dimen_/4',`($3)'))dnl
{line to rvec_(max(0,rp_len/2-m4wd/2),0)
move to rvec_(m4wd/2,0)
{ spline ifdpic(0.58) from rvec_(ifdpic(0,-m4wd/20),m4ht/2) \
@@ -3617,11 +3613,11 @@ define(`nullator',`eleminit_(`$1')
line from rvec_(m4wd/2,0) \
to rvec_(max(0,rp_len/2),0)}
{[box invis ht_ m4ht wid_ m4wd] at rvec_(rp_len/2,0)}
- line to rvec_(rp_len,0) invis ')
+ line to rvec_(rp_len,0) invis popdef(`m4wd',`m4ht') ')
`norator(linespec, wid, ht, attributes)'
define(`norator',`eleminit_(`$1')
- define(`m4wd',ifelse(`$2',,`dimen_/2',`($2)'))dnl
- define(`m4ht',ifelse(`$3',,`dimen_/4',`($3)'))dnl
+ pushdef(`m4wd',ifelse(`$2',,`dimen_/2',`($2)'))dnl
+ pushdef(`m4ht',ifelse(`$3',,`dimen_/4',`($3)'))dnl
{line to rvec_(max(0,rp_len/2-m4wd/2),0)
move to rvec_(m4wd/2,0)
for i=-1 to 1 by 2 do { {
@@ -3633,7 +3629,7 @@ define(`norator',`eleminit_(`$1')
line from rvec_(m4wd/2,0) \
to rvec_(max(0,rp_len/2),0)}
{[box invis ht_ m4ht wid_ m4wd] at rvec_(rp_len/2,0)}
- line to rvec_(rp_len,0) invis ')
+ line to rvec_(rp_len,0) invis popdef(`m4wd',`m4ht') ')
`ACsymbol(at position, len, ht, [n:][A]U|D|L|R|degrees,
attributes)
@@ -3736,8 +3732,8 @@ define(`nterm',`[Box: box ifelse(`$1',,wid dimen_ ht dimen_*2/3,`$1')
move to Box.nw+(0,-d); down_
m4termpins(-plg,d,W,`$7')
# `North side'
- ifelse(`$3',,,`define(`m4n',`($3)')
- d = Box.wid/(m4n+1)
+ define(`m4n',`($3)') ifelse(`$3',,,
+ `d = Box.wid/(m4n+1)
move to Box.nw+(d,0); right_
m4termpins(plg,d,N,`$7')')
# `East side'
@@ -3750,7 +3746,7 @@ define(`nterm',`[Box: box ifelse(`$1',,wid dimen_ ht dimen_*2/3,`$1')
d = Box.wid/(m4n+1)
move to Box.sw+(d,0); right_
m4termpins(-plg,d,S,`$7')
- `$8']')
+ `$8' undefine(`m4n')]')
define(`m4termpins',`for_(1,m4n,1,
`{ if (`$1' != 0) then { line to rvec_(0,`$1') }
`$3'`'m4x: ifelse(xtract(`$4',N),N,Here,`dot') }
@@ -3759,8 +3755,8 @@ define(`m4termpins',`for_(1,m4n,1,
`speaker(U|D|L|R|degrees, vert size, type, attributes)
type=H horn'
define(`speaker',`[setdir_($1,R)
- define(`m4v',`ifelse(`$2',,`dimen_/3',`($2)/4')')dnl
- define(`m4h',`m4v*sqrt(2)')dnl
+ pushdef(`m4v',`ifelse(`$2',,`dimen_/3',`($2)/4')')dnl
+ pushdef(`m4h',`m4v*sqrt(2)')dnl
ifelse(`$3',H,
`{H1: line from rvec_(m4h,m4v/2) \
to rvec_(m4h*3/2,m4v*7/8) \
@@ -3779,24 +3775,24 @@ define(`speaker',`[setdir_($1,R)
In5: rvec_(m4h*3/4,m4v)
In6: rvec_(m4h/4,-m4v)
In7: rvec_(m4h*3/4,-m4v)
- `$5'; resetdir_ ]')
+ `$5'; resetdir_ popdef(`m4v',`m4h') ]')
`bell(U|D|L|R|degrees, vert size, attributes)'
define(`bell',`[setdir_($1,R)
- define(`m4h',`ifelse(`$2',,`dimen_/2',`($2)')')dnl
+ pushdef(`m4h',`ifelse(`$2',,`dimen_/2',`($2)')')dnl
{lbox(m4h,m4h,`$3')}
{Box: box invis ht_ m4h wid_ m4h at rvec_(m4h/2,0)}
{Circle: circle diameter m4h at rvec_(m4h*3/2,0) `$3'}
In1: rvec_(0,m4h/4)
In2: Here
In3: rvec_(0,-m4h/4)
- `$4'; resetdir_ ]')
+ `$4'; resetdir_ popdef(`m4h') ]')
`microphone(A|U|D|L|R|degrees, vert size,
attributes)
Arg1= A, upright mic
Thanks to Arnold Knott'
define(`microphone',`ifinstr(`$1',A,
- `[ define(`m4sfact',`(ifelse(`$2',,dimen_,(`$2'))*8/5)')
+ `[ pushdef(`m4sfact',`(ifelse(`$2',,dimen_,(`$2'))*8/5)')
circlerad = m4sfact/1000
cspace = m4sfact/100
bwd = m4sfact/10
@@ -3812,22 +3808,22 @@ define(`microphone',`ifinstr(`$1',A,
for j=-1 to 1 do {
{ circle at Here+(3*j*cspace,(abs(j)-3)*cspace) }
if j != 0 then {{ circle at Here+(j*3/2*cspace,0) }} }
- move up 5*cspace }; ]',
+ move up 5*cspace }; popdef(`m4sfact')]',
`[setdir_($1,R)
- define(`m4h',`ifelse(`$2',,`dimen_/2',`($2)')')dnl
+ pushdef(`m4h',`ifelse(`$2',,`dimen_/2',`($2)')')dnl
{L1: line from rvec_(m4h,-m4h/2) \
to rvec_(m4h,m4h/2)}
{Circle: circle diameter m4h at rvec_(m4h/2,0) `$3'}
In1: rvec_(m4h*(2-sqrt(3))/4,m4h/4)
In2: Here
In3: rvec_(m4h*(2-sqrt(3))/4,-m4h/4)
- `$4'; resetdir_ ]')')
+ `$4'; resetdir_ popdef(`m4h') ]')')
`buzzer(U|D|L|R|degrees, vert size,[C],
attributes)'
define(`buzzer',`[setdir_($1,R)
ifelse(`$3',,
- `define(`m4h',`ifelse(`$2',,`dimen_/2',`($2)')')dnl
+ `pushdef(`m4h',`ifelse(`$2',,`dimen_/2',`($2)')')dnl
{L1: line from rvec_(m4h,0) \
to rvec_(m4h,m4h/2) \
then to rvec_(0,m4h/2) \
@@ -3839,20 +3835,20 @@ define(`buzzer',`[setdir_($1,R)
to rvec_(m4h,m4h/2)+vec_(Rect_(m4h,-75))}
In1: rvec_(0,m4h/4)
In2: Here
- In3: rvec_(0,-m4h/4)',
- `$3',C,`define(`m4h',`ifelse(`$2',,`(dimen_/3)',`(($2)/2)')')dnl
+ In3: rvec_(0,-m4h/4) popdef(`m4h')',
+ `$3',C,`pushdef(`m4h',`ifelse(`$2',,`(dimen_/3)',`(($2)/2)')')dnl
{Face: line from rvec_(m4h,-m4h) \
to rvec_(m4h,m4h)}
{arc ccw from Face.end to Face.start with .c at Face.c `$4'}
In1: rvec_(m4h-sqrt(m4h^2-(m4h/3)^2),m4h/3)
In2: Here
- In3: rvec_(m4h-sqrt(m4h^2-(m4h/3)^2),-m4h/3)')
+ In3: rvec_(m4h-sqrt(m4h^2-(m4h/3)^2),-m4h/3) popdef(`m4h') ')
`$5'; resetdir_ ]')
`earphone(U|D|L|R|degrees, size, [C][R],
attributes)
earphone pair if arg3 contains C'
define(`earphone',`[ setdir_($1,R)
- define(`m4h',`ifelse(`$2',,`dimen_',`($2)')')dnl
+ pushdef(`m4h',`ifelse(`$2',,`dimen_',`($2)')')dnl
ifinstr(`$3',C,
`L: circle diam m4h*0.4 `$4'
R: circle diam m4h*0.4 at L+vec_(m4h,0) `$4'
@@ -3868,7 +3864,7 @@ define(`earphone',`[ setdir_($1,R)
In1: rvec_(0,m4h/8)
In2: Here
In3: rvec_(0,-m4h/8)')
- `$5'; resetdir_ ]')
+ `$5'; resetdir_ popdef(`m4h') ]')
`Signal-flow graph macros: labeled node,
directed labeled chopped straight line,
@@ -4023,9 +4019,7 @@ define(`winding',`[ define(`m4rt',`ifinstr(`$1',R,-)')
define(`tstrip',`[ setdir_(`$1')
define(`m4n',`ifelse(`$2',,4,`eval($2)')')dnl
ifelse(eval(m4n<1),1,`define(`m4n',1)')dnl
- pushkeys_(`$3',ht:dimen_/2; wid:m4n*m4ht*0.6; box::N;)
-# pushkey_(`$3',ht,dimen_/2)dnl
-# pushkey_(`$3',wid,m4n*m4ht*0.6)dnl
+ pushkeys_(`$3',`ht:dimen_/2; wid:m4n*m4`'ht*0.6; box::N;')
{Box: [shade(1,lbox(m4wid,m4ht,m4box))] }
bw = m4wid/(m4n)
ifinstr(`$3',O,,`for i=1 to m4n-1 do {
@@ -4122,12 +4116,11 @@ define(`plug',`[ setdir_(`$1')
with respect to the current drawing direction. The
default diameter is dimen_'
define(`SQUID',
-`[ define(`m4sqn',`ifelse(`$1',,2,`$1')')dnl
- define(`m4ssz',`ifelse(`$2',,`dimen_',`$2')')dnl
- define(`m4sof',`ifelse(`$3',,-90,`$3')')dnl
- define(`m4ssg',`ifelse(`$4',,+,`$4',ccw,+,-)(m4x-1)/(m4sqn)*360')dnl
- define(`m4sxlen',C.rad/4)dnl
-
+`[ pushdef(`m4sqn',`ifelse(`$1',,2,`$1')')dnl
+ pushdef(`m4ssz',`ifelse(`$2',,`dimen_',`$2')')dnl
+ pushdef(`m4sof',`ifelse(`$3',,-90,`$3')')dnl
+ pushdef(`m4ssg',`ifelse(`$4',,+,`$4',ccw,+,-)(m4x-1)/(m4sqn)*360')dnl
+ pushdef(`m4sxlen',C.rad/4)dnl
C: circle diam m4ssz
for_(1,m4sqn,1,
`move to C+vec_(Rect_(C.rad,m4sof`'m4ssg))
@@ -4136,7 +4129,7 @@ define(`SQUID',
to rvec_(Rect_(m4sxlen,m4sof`'m4ssg+225)) }
{ line from rvec_(Rect_(m4sxlen,m4sof`'m4ssg-45)) \
to rvec_(Rect_(m4sxlen,m4sof`'m4ssg-225)) }')
- `$5' ]')
+ `$5' popdef(`m4sqn',`m4ssz',`m4sof',`m4ssg',`m4sxlen') ]')
`==============================================================================
Customizations:
diff --git a/graphics/circuit_macros/libgen.m4 b/graphics/circuit_macros/libgen.m4
index c37bb1359d..f5f1be0d34 100644
--- a/graphics/circuit_macros/libgen.m4
+++ b/graphics/circuit_macros/libgen.m4
@@ -2,7 +2,7 @@ divert(-1)
libgen.m4 Base macros for dpic and gpic diagrams
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
@@ -156,7 +156,7 @@ ifdef(`threeD_init',,
hght=expr; arrowhead height
wdth=expr; arrowhead width'
define(`sfg_init',`cct_init
- pushkeys_(`$1',blen:m4bxx; rad:m4rxx; hght:m4hxx; wdth:m4wxx)dnl
+ pushkeys_(`$1',`blen:m4bxx; rad:m4rxx; hght:m4hxx; wdth:m4wxx')dnl
sfg_wid = ifelse(m4blen,(m4bxx),ifelse(`$1',,linewid/3*2.75,`$1'),m4blen)
sfg_rad = ifelse(m4rad,(m4rxx),ifelse(`$2',,1/32,`$2'),m4rad)
sfg_aht = ifelse(m4hght,(m4hxx),ifelse(`$3',,1/16,`$3'),m4hght)
@@ -192,7 +192,7 @@ define(`latexcommand',
`$2')')
define(`m4announceprocessor',`dnl Do not change the format of the next line:
-`#' `$1' Version 10.5: ifelse(m4picprocessor,gpic,`Gpic',
+`#' `$1' Version 10.6: ifelse(m4picprocessor,gpic,`Gpic',
m4postprocessor,pstricks,`PSTricks',
m4postprocessor,pgf,`TikZ PGF',
m4postprocessor,mfpic,`Mfpic',
@@ -872,7 +872,8 @@ define(`poppushdef',`popdef(`$1')pushdef(`$1',`$2')')
identifier:default value:N
containing up to 3 fields separated by arg 4
(default :). The separators may not appear
- elsewhere in the terms.'
+ elsewhere in the terms and a key must not
+ be the tail of another key.'
define(`pushkeys_',`Loopover_(`M4Z',
`pushkey_(`$1',patsubst(M4Z,ifelse(`$4',,:,`$4'),`,'))dnl',
patsubst(`$2',ifelse(`$3',,;,`$3'),`,'))')
@@ -884,7 +885,8 @@ define(`pushkeys_',`Loopover_(`M4Z',
identifier:default value:N
containing up to 3 fields separated by arg 4
(default :). The separators may not appear
- elsewhere in the terms.'
+ elsewhere in the terms and a key must not
+ be the tail of another key.'
define(`setkeys_',`Loopover_(`M4Z',
`setkey_(`$1',patsubst(M4Z,ifelse(`$4',,:,`$4'),`,'))dnl',
patsubst(`$2',ifelse(`$3',,;,`$3'),`,'))')
@@ -960,7 +962,7 @@ define(`f_box',`box ifelse(`$2',,
circle=attributes; '
define(`dotrad_',(0.02*scale))
define(`dot',`[ define(`m4ft',`ifelse(`$3',,0,(`$3'))')dnl
- pushkeys_(`$2',rad:m4nul:N;circle:fill_(m4ft):N)dnl
+ pushkeys_(`$2',`rad:m4nul:N;circle:fill_(m4ft):N')dnl
ifelse(m4rad,m4nul,`popdef(`m4rad')pushdef(`m4rad',
`ifinstr(`$2',=,`dotrad_',`ifelse(`$2',,`dotrad_',(`$2'))')')')dnl
ifdef(`r_',`rgbfill(r_+(1-r_)*m4ft, g_+(1-g_)*m4ft, b_+(1-b_)*m4ft,
@@ -973,7 +975,7 @@ define(`dot',`[ define(`m4ft',`ifelse(`$3',,0,(`$3'))')dnl
keys: size=expr;
line=attributes; (line attributes) '
define(`cross',`[
- pushkeys_(`$2',size:m4nul:N;line::N)dnl
+ pushkeys_(`$2',`size:m4nul:N;line::N')dnl
ifelse(m4size,m4nul,`popdef(`m4size')pushdef(`m4size',
`ifinstr(`$2',=,(0.05*scale),ifelse(`$2',,(0.05*scale),(`$2')))')')dnl
line from (0,-m4size/2) to (0,m4size/2) m4line
@@ -1009,25 +1011,28 @@ define(`shadebox',`ifelse(`$1',,box,`$1')
shadowed(box shaded "yellow" rad 0.1 "Text",
shadowthick=3bp__;shadowcolor="lightgray")'
define(`shadowed',`define(`m4object',`ifelse(`$1',,box,`$1')')dnl
- pushkeys_(`$3',attrib::N; rad:;
- shadowthick:lthick*5/4; shadowcolor:"gray":N; shadowangle:-45 )dnl
- ifelse(m4object,box,`box m4attrib ifelse(m4rad,,,`rad m4rad invis') `$2'
+ pushkeys_(`$3',`attrib::N; rad:;
+ shadowthick:lthick*5/4; shadowcolor:"gray":N; shadowangle:-45')dnl
+ ifelse(m4object,box,
+ `box m4attrib ifelse(m4rad,,,`rad m4rad invis') `$2'
if last box.thick < 0 then { m4shv = (m4shadowthick+lthick)/2 } \
else { m4shv=(m4shadowthick+last box.thick bp__)/2 }
+ M4T: (Rect_(m4shv,m4shadowangle))
ifelse(m4rad,,`{ line thick m4shadowthick/(1bp__) outlined m4shadowcolor \
- from last box.sw+(m4shv,-m4shv) to last box.se+(m4shv,-m4shv) \
- then to last box.ne+(m4shv,-m4shv) } ',
+ from last box.sw+(M4T.x,M4T.y) to last box.se+(M4T.x,M4T.y) \
+ then to last box.ne+(M4T.x,M4T.y) }
+ box fill_(1) m4attrib at last box.c ',
`M4C: last box.c
{ box m4attrib thick m4shadowthick/(1bp__) outlined m4shadowcolor \
- rad m4rad solid at M4C+(Rect_(m4shv,m4shadowangle)) }
+ rad m4rad solid at M4C+(M4T.x,M4T.y) }
box fill_(1) rad m4rad m4attrib at M4C ') ',
- `m4object m4attrib invis `$2'
- M4C: last m4object.c
- if last m4object.thick < 0 then { m4shv = (m4shadowthick+lthick)/2 } \
- else { m4shv=(m4shadowthick+last m4object.thick bp__)/2 }
- { m4object m4attrib thick m4shadowthick/(1bp__) outlined m4shadowcolor \
- solid at M4C+(Rect_(m4shv,m4shadowangle)) }
- m4object ifelse(m4object,line,,fill_(1)) m4attrib at M4C ')dnl
+ `m4object m4attrib invis `$2'
+ M4C: last m4object.c
+ if last m4object.thick < 0 then { m4shv = (m4shadowthick+lthick)/2 } \
+ else { m4shv=(m4shadowthick+last m4object.thick bp__)/2 }
+ { m4object m4attrib thick m4shadowthick/(1bp__) outlined m4shadowcolor \
+ solid at M4C+(Rect_(m4shv,m4shadowangle)) }
+ m4object ifelse(m4object,line,,fill_(1)) m4attrib at M4C ')dnl
popdef(`m4attrib',`m4rad',`m4shadowthick',`m4shadowcolor',`m4shadowangle') ')
`hatchbox(boxspec,hatchsep,hatchspec,angle)
@@ -1042,8 +1047,9 @@ define(`shadowed',`define(`m4object',`ifelse(`$1',,box,`$1')')dnl
hatchsep=expr;
hatchspec=attributes;
angle=expr; '
-define(`hatchbox',`[pushkeys_(`$1',wid:boxwid:N;ht:boxht:N;box::N;fillcolor::N;
- hatchsep:0.075*scale;hatchspec::N;angle:45)
+define(`hatchbox',`[
+ pushkeys_(`$1',`wid:boxwid:N; ht:boxht:N; box::N;fillcolor::N;
+ hatchsep:0.075*scale; hatchspec::N; angle:45')
b = ifelse(`$4',,m4angle,`$4')
a = pmod((ifelse(b,,45,b)+90),180)-90
if a >=0 then { B: box ifinstr(`$1',=,`wid m4wid ht m4ht m4box dnl
@@ -1099,12 +1105,12 @@ define(`lbox',`pushdef(`m4bwd',ifelse(`$1',,boxwid,(`$1')))dnl
then to rvec_(0,neg_(m4bht)/2) \
then to rvec_(m4bwd,neg_(m4bht)/2) \
then to rvec_(m4bwd,0) `$3' dnl
- popdef(`m4bwd')popdef(`m4bht') ')
+ popdef(`m4bwd',`m4bht') ')
`rotbox(wid,ht,type attribs,[r=val|t=val])
box oriented in current direction in [] block;
wd and ht are distances between line centers.
- type=attributes eg dotted shaded "green"
+ attributes: eg dotted shaded "green"
if arg4 is r=val then the corner radius is val
if arg4 is t=val then a "superellipse"
is drawn using a spline of tension val
@@ -1174,24 +1180,29 @@ define(`rotellipse',
e.g. ellipsearc(2,1,0,pi_,pi_/4,,dashed)
arg5 is the angle of the ellipse wid axis
Internal locations Start, End, C'
+
+ `ellipsearc(wid,ht,startrads,endrads,
+ rotangle,cw|ccw,linetype)
+ e.g. ellipsearc(2,1,0,pi_,pi_/4,,dashed)
+ arg5 is the angle of the ellipse wid axis
+ Internal locations Start, End, C'
define(`ellipsearc',`[ C: (0,0)
- a_earc = ifelse(`$1',,ellipsewid,`($1)')/2
- b_earc = ifelse(`$2',,ellipseht,`($2)')/2
- sa_earc = ifelse(`$3',,0,`$3')
- ea_earc = ifelse(`$4',,pi_/2,`$4')
- define(`m4ca',`ifelse(`$5',,1,cos(`$5'))')dnl
- define(`m4sa',`ifelse(`$5',,0,sin(`$5'))')dnl
- ifinstr(`$6',ccw,`define(`m4cw',ccw)',
- `ifinstr(`$6',cw,`define(`m4cw',cw)',`define(`m4cw',ccw)')')
+ a = ifelse(`$1',,ellipsewid,`($1)')/2
+ b = ifelse(`$2',,ellipseht,`($2)')/2
+ sa = ifelse(`$3',,0,`$3')
+ ea = ifelse(`$4',,pi_/2,`$4')
+ pushdef(`m4ca',`ifelse(`$5',,1,cos(`$5'))')dnl
+ pushdef(`m4sa',`ifelse(`$5',,0,sin(`$5'))')dnl
+ pushdef(`m4cw',`ifinstr(`$6',ccw,c,`$6',cw,,c)'cw)dnl
ifelse(m4cw,ccw,
- `if ea_earc < sa_earc then { ea_earc += twopi_ }',
- `if ea_earc > sa_earc then { ea_earc -= twopi_ }')
- n = max(4,floor(abs((ea_earc-sa_earc)/(10*dtor_)))+1)
- for i=0 to n do { aa_earc = sa_earc+i/n*(ea_earc-sa_earc)
- P[i]: (vrot_(a_earc*cos(aa_earc),b_earc*sin(aa_earc),m4ca,m4sa)) }
+ `if ea < sa then { ea += twopi_ }',
+ `if ea > sa then { ea -= twopi_ }')
+ n = max(4,floor(abs((ea-sa)/(10*dtor_)))+1)
+ for i=0 to n do { aa = sa+i/n*(ea-sa)
+ P[i]: (vrot_(a*cos(aa),b*sin(aa),m4ca,m4sa)) }
Start: P[0]
End: P[n]
- fitcurve(P,n,`$7') ]')
+ fitcurve(P,n,`$7') `$8' popdef(`m4cw',`m4sa',`m4ca') ]')
Small space for string justification
#efine(`sp_',`ifgpic(`\hbox{$\:$}')iflatex(`\hbox{$\;$}')')
@@ -1288,19 +1299,26 @@ define(`arcdimension_',`arc invis `$1' ; {
to M4ArcC+(rect_(m4hr,m4eang)) rad m4hr with .c at M4ArcC } }
ifelse(`$3',,,`m4lstring(`$3',"`$3'") at M4ArcC+(rect_(m4hr,m4hang))')
}')
+
`polygon(nsides,keys) regular polygon in [] block
keys: line=attribs; e.g. dashed shaded "red"
rot=degrees; angle of first vertex V[0]
side|rad=expr; size by radius or side
- Defined points: C, V[0], ... V[nsides-1]'
+ radv=expr; vertex radius
+ Defined internal points: C, V[0], ... V[nsides]'
define(`polygon',`[ C: Here; nsides=ifelse(`$1',,3,`$1')
a=360/nsides; b=(180-a)/2 # interior angles
pushkeys_(`$2',
- `line::N; rot:90; side:linewid; rad:m4side*sind(b)/sind(a);')dnl
+ `line::N; rot:90; side:linewid; radv:0; rad:m4`'side*sind(b)/sind(a);')dnl
for i=0 to nsides-1 do { V[i]: Rect_(m4rad,m4rot+a*i) }
V[nsides]: 0.5 between V[nsides-1] and V[0]
- line m4line from V[nsides] to V[0]; for i=1 to nsides do { continue to V[i] }
- `$3' popdef(`m4line',`m4rot',`m4side',`m4rad') ]')
+#for i=0 to nsides do { sprintf("%g",i) at V[i] above }
+ if m4radv!=0 then { move to V[nsides]
+ for i=0 to nsides-1 do { arcto(V[i],V[i+1],m4radv,m4line) }
+ line m4line to V[nsides] } \
+ else { line m4line from V[nsides] to V[0]; for i=1 to nsides do {
+ continue to V[i] } }
+ `$3' popdef(`m4line',`m4rot',`m4side',`m4radv',`m4rad') ]')
`shade(gray value,closed line specs)
Fill an arbitray closed curve with a gray value
@@ -1447,8 +1465,8 @@ m4postprocessor,xfig,
head= attributes (shaded etc)
name=Name (default Sarrow_)'
define(`sarrow',
- `pushkeys_(`$2',
- type:O:N;head::N;shaft:m4head:N;wdth:arrowwid;lgth:arrowht;name:Sarrow_:N)dnl
+ `pushkeys_(`$2',`type:O:N; head::N; shaft:m4`'head:N; wdth:arrowwid;
+ lgth:arrowht; name:Sarrow_:N')dnl
arrow `$1' m4head invis
m4_dx = last arrow.end.x-last arrow.start.x
m4_dy = last arrow.end.y-last arrow.start.y
@@ -1681,7 +1699,8 @@ define(`ArcAngle',`arcr(`$2',ifelse(`$4',,arcrad,`$4'),
`RightAngle(Pos1,Pos2,Pos3,linelen,attributes)
Draw a right angle symbol at Pos2
arg4: size
- arg5: line attributes, e.g. outlined "gray"'
+ arg5: line attributes, e.g. outlined "gray" or
+ e.g., ;dot(at last line.c)'
define(`RightAngle',
`RightA_C: `$1'; RightA_N: `$2'; RightA_B: `$3'
define(`m4AngleLen',`ifelse(`$4',,linewid/5,`$4')')
@@ -1859,7 +1878,8 @@ define(`sinusoid',
`graystring(value in [0,1])'
define(`graystring',`rgbstring(`$1',`$1',`$1')')
- `ColoredV(box|circle|ellipse,(r,g,b)|((colorseq)),
+ `ColoredV(box|circle|ellipse,
+ (r,g,b) | ((colorseq))[:nlines],
attributes)
box or circle or ellipse in a [] block.
If arg2 is blank then all formatting is in
@@ -1873,10 +1893,12 @@ define(`graystring',`rgbstring(`$1',`$1',`$1')')
frac2,r2,g2,b2,
...
1,rn,gn,bn
+ The number of colorseq lines drawn can be specified
+ with the colon (default height/lthick*2).
Examples: ColoredV(circle,(1,0,0))
ColoredV(ellipse,(1,0.04,1),
wid 0.75 ht 1 outlined "magenta" "Goodbye")
- ColoredV(box,((0,1,1,0, 1,0,0,1)),
+ ColoredV(box,((0,1,1,0, 1,0,0,1)):50,
outlined "blue" rad 0.1)'
define(`ColoredV',`[NeedDpicTools pushdef(`m4obj',ifelse(`$1',,box,`$1'))
C: m4obj `$3' ifsvg(,invis) # To avoid invalid svg
@@ -1889,13 +1911,15 @@ define(`ColoredV',`[NeedDpicTools pushdef(`m4obj',ifelse(`$1',,box,`$1'))
with .c at C.n-(0,C.ht*($`'1))}',
`define m4SObjLine {line outlined rgbstring($`'2,$`'3,$`'4) right \
C.wid*sqrt(abs(1-(1-($`'1)*2)^2)) with .c at C.n-(0,C.ht*($`'1))}')
- ShadeObject(m4SObjLine,int(C.ht/lthick*5/4),\
- ifelse(index(`$2',`(('),0,`patsubst(`$2',^ *`(('\|`))' *$)',
- `0,1,1,1,1,patsubst(`$2',^ *`('\|`)' *$)')) at C')
- m4obj ifelse(`$2',,,`m4colorfix(outlined,`$2')') `$3' with .c at C
- `$5' popdef(`m4obj') ]')
-
- `rgbstring(color triple: values in [0,1])
+ pushdef(`linect',`ifinstr(`$2',:,`patsubst(`$2',^.*:\(.*\)$,\1)',
+ `int(C.ht/lthick*2)')')
+ ShadeObject(m4SObjLine,linect,ifelse(index(`$2',`(('),0,
+ `patsubst(`$2',`(('\|`))'.*$)',`0,1,1,1,1,patsubst(`$2',^ *`('\|`)' *$)')) \
+ with .n at C.n') popdef(`linect')
+ m4obj ifelse(`$2',,,index(`$2',`(('),0,,`m4colorfix(outlined,`$2')') `$3' at C
+ `$4' popdef(`m4obj') ]')
+
+ `rgbstring(color triple with values in [0,1])
(example rgbstring(0.2,0.3,0.4) )
or, when allowed by the postprocessor,
rgbstring(color name)
@@ -2017,16 +2041,21 @@ define(`definergbcolor',
`ifpdf(`define(`$1',``'`$2' `$3' `$4'`'')',
`ifmpost(`command \
sprintf("color `$1'; `$1':=(%7.5f,%7.5f,%7.5f);",`$2',`$3',`$4')',
+`ifsvg(`define(`$1',`rgbstring(`$2',`$3',`$4')')',
`command \
sprintf("\definecolor{`$1'}{rgb}{%7.5f,%7.5f,%7.5f}%%",`$2',`$3',`$4')')')')')
+')
Pstricks conditional command
define(`psset_',`ifpstricks(`dnl
command sprintf("\psset{$@}%%")
')')
Internal color adjustments
- `m4colorfix(outlined|shaded,
- "colorname"|colorname|(r,g,b),sprintf(...))'
+ `m4colorfix(outlined|shaded|colored,
+ "colorname"|colorname|(r,g,b),sprintf(...))
+ Not really necessary most of the time; e.g.,
+ colored rgbstring(r,g,b)" works fine for tikz, pstricks,
+ and svg'
define(`m4colorfix',`ifelse(`$1',,,
`ifelse(`$2',,``$1' "grey"',index(`$2',`"'),0,``$1' `$2'',
index(`$2',sprintf),0,``$1' `$2'',
diff --git a/graphics/circuit_macros/liblog.m4 b/graphics/circuit_macros/liblog.m4
index 9c68aff0e2..31dd9b2aca 100644
--- a/graphics/circuit_macros/liblog.m4
+++ b/graphics/circuit_macros/liblog.m4
@@ -1,7 +1,7 @@
divert(-1)
liblog.m4 Logic gates
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
diff --git a/graphics/circuit_macros/mfpic.m4 b/graphics/circuit_macros/mfpic.m4
index aa24fb7d34..2754139ec0 100644
--- a/graphics/circuit_macros/mfpic.m4
+++ b/graphics/circuit_macros/mfpic.m4
@@ -1,7 +1,7 @@
divert(-1)
mfpic.m4 Initialization for mfpic.
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
diff --git a/graphics/circuit_macros/mpost.m4 b/graphics/circuit_macros/mpost.m4
index d6e0f1ed59..02a2375c27 100644
--- a/graphics/circuit_macros/mpost.m4
+++ b/graphics/circuit_macros/mpost.m4
@@ -1,7 +1,7 @@
divert(-1)
mpost.m4 Initialization for metapost.
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
diff --git a/graphics/circuit_macros/pdf.m4 b/graphics/circuit_macros/pdf.m4
index 375c41e4a5..71916a2f3d 100644
--- a/graphics/circuit_macros/pdf.m4
+++ b/graphics/circuit_macros/pdf.m4
@@ -1,7 +1,7 @@
divert(-1)
pdf.m4 Initialization for pdf output.
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
diff --git a/graphics/circuit_macros/pgf.m4 b/graphics/circuit_macros/pgf.m4
index 4ffc956930..845427083c 100644
--- a/graphics/circuit_macros/pgf.m4
+++ b/graphics/circuit_macros/pgf.m4
@@ -1,7 +1,7 @@
divert(-1)
pgf.m4 Initialization for Tikz-pgf.
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
diff --git a/graphics/circuit_macros/postscript.m4 b/graphics/circuit_macros/postscript.m4
index 033e753d2d..7e4882451d 100644
--- a/graphics/circuit_macros/postscript.m4
+++ b/graphics/circuit_macros/postscript.m4
@@ -1,7 +1,7 @@
divert(-1)
postscript.m4 Initialization for Postscript output.
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
diff --git a/graphics/circuit_macros/psfrag.m4 b/graphics/circuit_macros/psfrag.m4
index 86956e45b4..31eff163d0 100644
--- a/graphics/circuit_macros/psfrag.m4
+++ b/graphics/circuit_macros/psfrag.m4
@@ -2,7 +2,7 @@ divert(-1)
psfrag.m4 Initialization for dpic -f processing:
Postscript with psfrag strings
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
diff --git a/graphics/circuit_macros/pstricks.m4 b/graphics/circuit_macros/pstricks.m4
index 7012c2c9b3..528fdcd147 100644
--- a/graphics/circuit_macros/pstricks.m4
+++ b/graphics/circuit_macros/pstricks.m4
@@ -1,7 +1,7 @@
divert(-1)
pstricks.m4 Initialization for PSTricks.
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
diff --git a/graphics/circuit_macros/svg.m4 b/graphics/circuit_macros/svg.m4
index 30d832a9ea..4c3adb994b 100644
--- a/graphics/circuit_macros/svg.m4
+++ b/graphics/circuit_macros/svg.m4
@@ -1,7 +1,7 @@
divert(-1)
svg.m4 Initialization for svg output.
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
diff --git a/graphics/circuit_macros/xfig.m4 b/graphics/circuit_macros/xfig.m4
index b437249f14..c98819df7f 100644
--- a/graphics/circuit_macros/xfig.m4
+++ b/graphics/circuit_macros/xfig.m4
@@ -1,7 +1,7 @@
divert(-1)
xfig.m4 Initialization for xfig.
-* Circuit_macros Version 10.5, copyright (c) 2024 J. D. Aplevich under *
+* Circuit_macros Version 10.6, copyright (c) 2024 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
diff --git a/graphics/pgf/contrib/argumentation/README.md b/graphics/pgf/contrib/argumentation/README.md
index 3e6a97e5ec..b0df71dbd0 100644
--- a/graphics/pgf/contrib/argumentation/README.md
+++ b/graphics/pgf/contrib/argumentation/README.md
@@ -4,5 +4,5 @@ The argumentation package provides utility to create abstract argumentation fram
For bug reports and feedback, please contact:
Lars Bengel <lars.bengel@fernuni-hagen.de>
-Version: 1.1 [2023/12/03]
+Version: 1.2 [2024/06/07]
This package is subject to the LaTeX Project Public License 1.3c \ No newline at end of file
diff --git a/graphics/pgf/contrib/argumentation/argumentation-doc.pdf b/graphics/pgf/contrib/argumentation/argumentation-doc.pdf
index 39c89e37e3..48f396a1fe 100644
--- a/graphics/pgf/contrib/argumentation/argumentation-doc.pdf
+++ b/graphics/pgf/contrib/argumentation/argumentation-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/argumentation/argumentation-doc.tex b/graphics/pgf/contrib/argumentation/argumentation-doc.tex
index 128765d43c..d524e50afd 100644
--- a/graphics/pgf/contrib/argumentation/argumentation-doc.tex
+++ b/graphics/pgf/contrib/argumentation/argumentation-doc.tex
@@ -2,7 +2,7 @@
\title{The \argumentation Package}
\author{Lars Bengel\footnote{Please report any issues at \url{https://github.com/aig-hagen/tikz_argumentation}}\\\small lars.bengel@fernuni-hagen.de}
-\date{Version 1.1 [2023/12/03]}
+\date{Version 1.2 [2024/06/07]}
%%%%%%%%% IMPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[]{argumentation} % Main Package
@@ -12,6 +12,8 @@
\usepackage[hidelinks]{hyperref} % Hyperlinks
\usepackage{subcaption} % For two-part figures
+%%% Various commands used in the document
+\newcommand{\todo}[1]{\textcolor{magenta}{TODO: #1}} % for todos
\newcommand{\tikzname}{Ti\emph{k}Z\xspace}
\newcommand{\argumentation}{\texttt{argumentation}\xspace}
\newcommand{\opt}[2][red]{\ensuremath{\textcolor{#1}{\langle #2\rangle}}}
@@ -21,43 +23,135 @@
\begin{document}
\maketitle
+\begin{minipage}{.28\textwidth}
+ \centering
+ \begin{af}
+ \argument{$a$}
+ \argument[right=of a1]{$b$}
+ \argument[below=of a1]{$c$}
+ \argument[right=of a3]{$d$}
+
+ \attack{a1}{a2}
+ \attack{a2}{a3}
+ \attack[bend right]{a3}{a4}
+ \end{af}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{verbatim}
+ \begin{af}
+ \argument{$a$}
+ \argument[right=of a1]{$b$}
+ \argument[below=of a1]{$c$}
+ \argument[right=of a3]{$d$}
+
+ \attack{a1}{a2}
+ \attack{a2}{a3}
+ \attack[bend right]{a3}{a4}
+ \end{af}
+ \end{verbatim}
+\end{minipage}
+
+
\tableofcontents
\newpage
-\section{Example}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Quick Guide}\label{sec:quick}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\noindent
+To create an argumentation framework in your \LaTeX document, you have to import the \argumentation package:\\
+
+\vspace{-0.3cm}
+\verb|\usepackage{argumentation}|\\
+
+\noindent
+You can then create a new \texttt{af} environment in which the argumentation framework can then be built:\\
+
+\vspace{-0.3cm}
+\verb|\begin{af}|
+
+\quad\opt[green]{environment~content}
+
+\verb|\end{af}|\\
+
+\noindent
+You may want to wrap the \texttt{af} environment in a \texttt{figure} environment in order to add a caption and reference label.
+The easiest way to create an argument in the argumentation framework is:\\
+
+\vspace{-0.3cm}
+\verb|\argument{|\opt{name}\verb|}|\\
+
+\noindent
+Here, \opt{name} is the name of the argument displayed in the graph and the argument is automatically assigned an \emph{identifier} of the form: $a1$, $a2$, \dots.
+
+To properly add further arguments, you also need to specify a position.
+The \argumentation package offers two easy ways of doing that:\\
+
+\vspace{-0.3cm}
+\verb|\argument[|\opt{dir}\verb|=of |\opt{arg\_id}\verb|]{|\opt{name}\verb|}|
+
+\verb|\argument{|\opt{name}\verb|}| \verb|at (|\opt{posX},\opt{posY}\verb|)|\\
+
+\noindent
+The first instance is \emph{relative position} where \opt{dir} is the direction of placement relative to the argument with the identifier \opt{arg\_id}, with \opt{dir} typically being one of the values: \textsf{right}, \textsf{left}, \textsf{above}, \textsf{below}.
+
+The second instance is \emph{absolute positioning} where (\opt{posX}, \opt{posY}) is a set of coordinates, for example something like $(2, 0)$, $(0, -2)$ or $(2, 4)$.\\
+
+\noindent
+To create an attack between two arguments, you simply use the command:\\
+
+\vspace{-0.3cm}
+\verb|\attack{|\opt{a1}\verb|}{|\opt{a2}\verb|}|\\
+
+\noindent
+Substitute \opt{a1} and \opt{a2} with the identifier of the two arguments.
+Alternatively, you can also directly create bidirectional attacks and self-attacks with the following two commands:\\
+
+\vspace{-0.3cm}
+\verb|\dualattack{|\opt{a1}\verb|}{|\opt{a2}\verb|}|
+
+\verb|\selfattack{|\opt{a1}\verb|}|\\
+
+\noindent
+To customize the look of the arguments and attacks and for a detailed overview over all options and commands provided by this package, please refer to the following example or to the full documentation in Section~\ref{sec:documentation}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\section{Example}\label{sec:example}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\vspace{-0.7cm}
\begin{figure}[ht]
\centering
\begin{af}
- \argument{args1}{a}
- \argument[right=of args1]{args2}{b}
- \argument[right=of args2]{args3}{c}
- \argument[right=of args3]{args4}{d}
- \argument[right=of args4,incomplete]{args5}{e}
- \argument[below=of args1]{args6}{f}
- \argument[inactive,right=of args6]{args7}{g}
- \argument[inactive,argin,right=of args7]{args8}{h}
- \argument[right=of args8]{args9}{i}
- \argument[right=of args9]{args10}{j}
-
- %\annotation[right]{args5}{$a\lor b$}
-
- \afname[left of=args1,yshift=-0.8cm,xshift=-0.2cm]{cap}{\textbf{F:}}
-
- \selfattack{args1}
- \dualattack{args1}{args6}
- \dualattack[inactive]{args6}{args7}
+ \argument{a}
+ \argument[right=of a1]{b}
+ \argument[right=of a2]{c}
+ \argument[right=of a3]{d}
+ \argument[right=of a4,incomplete]{e}
+ \argument[below=of a1]{f}
+ \argument[inactive,right=of a6]{g}
+ \argument[inactive,argin,right=of a7]{h}
+ \argument[right=of a8]{i}
+ \argument[right=of a9]{j}
+
+ %\annotation[right]{a5}{$a\lor b$}
+
+ \afname[left of=a1,yshift=-0.8cm,xshift=-0.2cm]{\textbf{F:}}
+
+ \selfattack{a1}
+ \dualattack{a1}{a6}
+ \dualattack[inactive]{a6}{a7}
- \attack[inactive]{args8}{args7}
- \attack[inactive]{args7}{args2}
- \annotatedattack{args3}{args2}{$3$}
- \attack[incomplete]{args4}{args5}
- \attack{args5}{args10}
- \attack{args10}{args9}
- \attack{args9}{args4}
-
- \support{args4}{args3}
- \support{args9}{args3}
+ \attack[inactive]{a8}{a7}
+ \attack[inactive]{a7}{a2}
+ \annotatedattack{a3}{a2}{$3$}
+ \attack[incomplete]{a4}{a5}
+ \attack{a5}{a10}
+ \attack{a10}{a9}
+ \attack{a9}{a4}
+
+ \support{a4}{a3}
+ \support{a9}{a3}
\end{af}
\caption{An exemplary AF created with the \argumentation package.}
\label{fig:example}
@@ -68,95 +162,170 @@
\begin{figure}[ht]
\centering
\begin{af}
- \argument{args1}{a}
- \argument[right=of args1]{args2}{b}
- \argument[right=of args2]{args3}{c}
- \argument[right=of args3]{args4}{d}
- \argument[right=of args4,incomplete]{args5}{e}
- \argument[below=of args1]{args6}{f}
- \argument[inactive,right=of args6]{args7}{g}
- \argument[inactive,argin,right=of args7]{args8}{h}
- \argument[right=of args8]{args9}{i}
- \argument[right=of args9]{args10}{j}
-
- \afname[left of=args1,yshift=-0.8cm,xshift=-0.2cm]{cap}{\textbf{F:}}
-
- \selfattack{args1}
- \dualattack{args1}{args6}
- \dualattack[inactive]{args6}{args7}
+ \argument{a}
+ \argument[right=of a1]{b}
+ \argument[right=of a2]{c}
+ \argument[right=of a3]{d}
+ \argument[right=of a4,incomplete]{e}
+ \argument[below=of a1]{f}
+ \argument[inactive,right=of a6]{g}
+ \argument[inactive,argin,right=of a7]{h}
+ \argument[right=of a8]{i}
+ \argument[right=of a9]{j}
+
+ \afname[left of=a1,yshift=-0.8cm,xshift=-0.2cm]{\textbf{F:}}
+
+ \selfattack{a1}
+ \dualattack{a1}{a6}
+ \dualattack[inactive]{a6}{a7}
- \attack[inactive]{args8}{args7}
- \attack[inactive]{args7}{args2}
- \annotatedattack{args3}{args2}{$3$}
- \attack[incomplete]{args4}{args5}
- \attack{args5}{args10}
- \attack{args10}{args9}
- \attack{args9}{args4}
-
- \support{args4}{args3}
- \support{args9}{args3}
+ \attack[inactive]{a8}{a7}
+ \attack[inactive]{a7}{a2}
+ \annotatedattack{a3}{a2}{$3$}
+ \attack[incomplete]{a4}{a5}
+ \attack{a5}{a10}
+ \attack{a10}{a9}
+ \attack{a9}{a4}
+
+ \support{a4}{a3}
+ \support{a9}{a3}
\end{af}
\caption{An exemplary AF created with the \argumentation package.}
\label{fig:example}
\end{figure}
\end{verbatim}
-\section{Documentation for Version 1.1 [2023/12/03]}
-In the following, we give an overview over the functionality of the \argumentation package.
-In general, the functionality provided by this package is fully compatible with \tikzname.
-Meaning every command from this package can be used inside the \textsf{tikzpicture} environment and every \tikzname command or option can be used inside the \texttt{af} environment or in context of the argument nodes and attack edges.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage\section{Documentation for Version 1.2 [2024/06/07]}\label{sec:documentation}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\subsection{Package Options}
- The \argumentation package can be imported via the command
+The \argumentation package provides an easy way for creating argumentation frameworks\footnote{Dung, P. M. (1995). On the acceptability of arguments and its fundamental role in nonmonotonic reasoning, logic programming and n-person games. Artificial intelligence.} in \LaTeX documents.
+It builds on the \tikzname package for drawing the graphs and provides simplified syntax while keeping the same customisation options and keeping full compatibility with all \tikzname commands.
+The package comes with multiple predefined style options for arguments, attacks and supports.
+In the following, we give an overview over the functionality of the \argumentation package.
+The \argumentation package can be imported via the command
- \noindent
\verb|\usepackage{argumentation}|
+ \noindent
Alternatively, one can also adjust the appearance by providing some package options via
- \noindent
\verb|\usepackage[|\opt{options}\verb|]{argumentation}|
-
+
+\subsection{Style Options}\label{sec:style}
\begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
- \item The package provides the following \emph{optional} options to customize the look of the argumentation frameworks.
+ \item The \argumentation package provides the following options to customize the look of the argumentation frameworks. They can both be set globally (as an option for the \emph{usepackage} command) and also locally for each \texttt{af} environment (see Section~\ref{sec:af}).
\end{list}
+ \vspace{-0.3cm}
\begin{align*}
- \mathsf{namestyle} &\quad \text{Customizes the font of the argument names.}\\
- \mathsf{argumentstyle} &\quad \text{Customizes the appearance of the argument nodes.}\\
- \mathsf{attackstyle} &\quad \text{Customizes the appearance of the attack edges.}\\
- \mathsf{supportstyle} &\quad \text{Customizes the appearance of the support edges.}\\
+ \mathsf{argumentstyle} &\quad \text{Customizes the appearance of argument nodes.}\\
+ \mathsf{attackstyle} &\quad \text{Customizes the appearance of attack edges.}\\
+ \mathsf{supportstyle} &\quad \text{Customizes the appearance of support edges.}\\
+ \mathsf{namestyle} &\quad \text{Customizes the font style of the argument names.}\\
\end{align*}
In the following, we list the available options for each of the style parameters.\\
-\noindent\texttt{namestyle=}\opt{option}
-
- The \textsf{namestyle} parameter accepts three different options
- \begin{align*}
- \mathsf{normal} &\quad \text{(default) The argument name is rendered normally.}\\
- \mathsf{italics} &\quad \text{The argument name is rendered in \emph{italics}.}\\
- \mathsf{bold} &\quad \text{The argument name is rendered in \textbf{bold}.}\\
- \mathsf{bolditalics} &\quad \text{The argument name is rendered with \textbf{\emph{both}}.}\\
- \mathsf{monospace} &\quad \text{The argument name is rendered in \texttt{monospace} font.}\\
- \end{align*}
-
\noindent\texttt{argumentstyle=}\opt{option}
- The \textsf{argumentstyle} parameter accepts two options
+ The \textsf{argumentstyle} parameter accepts three options
\begin{align*}
\mathsf{standard} &\quad \text{(default) Standard style for the argument nodes.}\\
- %\mathsf{retro} &\quad \text{Thicker outline and slightly larger nodes.}\\
+ \mathsf{large} &\quad \text{Same node size, but larger font.}\\
+ \mathsf{thick} &\quad \text{Same node size, thicker outline.}\\
\end{align*}
+\begin{figure}[!h]
+ \begin{subfigure}{0.32\textwidth}
+ \centering
+ \begin{af}[argumentstyle=standard]
+ \argument{a}
+ \argument[right=of a1]{b}
+
+ \attack[]{a1}{a2}
+ \label{af:test}
+ \end{af}
+ \caption{\textsf{argumentstyle}=\textit{standard}}
+ \label{fig:argumentstyle_standard}
+ \end{subfigure}
+ \hfill
+ \begin{subfigure}{0.3\textwidth}
+ \centering
+ \begin{af}[argumentstyle=large]
+ \argument{a}
+ \argument[right=of a1]{b}
+
+ \attack[]{a1}{a2}
+ \end{af}
+ \caption{\textsf{argumentstyle}=\textit{large}}
+ \label{fig:argumentstyle_large}
+ \end{subfigure}
+ \hfill
+ \begin{subfigure}{0.3\textwidth}
+ \centering
+ \begin{af}[argumentstyle=thick]
+ \argument{a}
+ \argument[right=of a1]{b}
+
+ \attack[]{a1}{a2}
+ \end{af}
+ \caption{\textsf{argumentstyle}=\textit{thick}}
+ \label{fig:argumentstyle_thick}
+ \end{subfigure}
+ \caption{The available options for \textsf{argumentstyle}.}
+ \label{fig:argumentstyle}
+\end{figure}
+
\newpage
\noindent\texttt{attackstyle=}\opt{option}
- The \textsf{attackstyle} parameter accepts two options
+ The \textsf{attackstyle} parameter accepts three options
\begin{align*}
\mathsf{standard} &\quad \text{(default) Standard style for the attack arrow tips.}\\
- \mathsf{large} &\quad \text{Alternative style, arrow tip is larger and sharper.}\\
+ \mathsf{large} &\quad \text{Arrow tip is larger and sharper.}\\
+ \mathsf{modern} &\quad \text{\tikzname ModernCS arrow tip.}\\
\end{align*}
+\begin{figure}[!h]
+ \begin{subfigure}{0.32\textwidth}
+ \centering
+ \begin{af}[attackstyle=standard]
+ \argument{a}
+ \argument[right=of a1]{b}
+
+ \attack[]{a1}{a2}
+ \end{af}
+ \caption{\textsf{attackstyle}=\textit{standard}}
+ \label{fig:attackstyle_standard}
+ \end{subfigure}
+ \hfill
+ \begin{subfigure}{0.3\textwidth}
+ \centering
+ \begin{af}[attackstyle=large]
+ \argument{a}
+ \argument[right=of a1]{b}
+
+ \attack[]{a1}{a2}
+ \end{af}
+ \caption{\textsf{attackstyle}=\textit{large}}
+ \label{fig:attackstyle_large}
+ \end{subfigure}
+ \hfill
+ \begin{subfigure}{0.3\textwidth}
+ \centering
+ \begin{af}[attackstyle=modern]
+ \argument{a}
+ \argument[right=of a1]{b}
+
+ \attack[]{a1}{a2}
+ \end{af}
+ \caption{\textsf{attackstyle}=\textit{modern}}
+ \label{fig:attackstyle_thick}
+ \end{subfigure}
+ \caption{The available options for \textsf{attackstyle}.}
+ \label{fig:attackstyle}
+\end{figure}
+
\noindent\texttt{supportstyle=}\opt{option}
The \textsf{supportstyle} parameter accepts three options
@@ -166,25 +335,131 @@ Meaning every command from this package can be used inside the \textsf{tikzpictu
\mathsf{double} &\quad \text{Double arrow line and large flat tip.}\\
\end{align*}
-You can override the \textsf{argumentstyle}, \textsf{attackstyle} and \textsf{supportstyle} parameters and set a custom style via the following commands respectively.
-
-\noindent
-\verb|\setargumentstyle{|\opt{style}\verb|}|
+\begin{figure}[!h]
+ \begin{subfigure}{0.32\textwidth}
+ \centering
+ \begin{af}[supportstyle=standard]
+ \argument{a}
+ \argument[right=of a1]{b}
+
+ \support[]{a1}{a2}
+ \end{af}
+ \caption{\textsf{supportstyle}=\textit{standard}}
+ \label{fig:supportstyle_standard}
+ \end{subfigure}
+ \hfill
+ \begin{subfigure}{0.3\textwidth}
+ \centering
+ \begin{af}[supportstyle=dashed]
+ \argument{a}
+ \argument[right=of a1]{b}
+
+ \support[]{a1}{a2}
+ \end{af}
+ \caption{\textsf{supportstyle}=\textit{dashed}}
+ \label{fig:supportstyle_dashed}
+ \end{subfigure}
+ \hfill
+ \begin{subfigure}{0.3\textwidth}
+ \centering
+ \begin{af}[supportstyle=double]
+ \argument{a}
+ \argument[right=of a1]{b}
+
+ \support[]{a1}{a2}
+ \end{af}
+ \caption{\textsf{supportstyle}=\textit{double}}
+ \label{fig:supportstyle_double}
+ \end{subfigure}
+ \caption{The available options for \textsf{supportstyle}. Note that for \textit{standard} and \textit{dashed} the arrow tip of the selected \textsf{attackstyle} will be used.}
+ \label{fig:supportstyle}
+\end{figure}
-\noindent
-\verb|\setattackstyle{|\opt{style}\verb|}|
+\newpage
+\noindent\texttt{namestyle=}\opt{option}
+
+ The \textsf{namestyle} parameter offers five different options
+ \begin{align*}
+ \mathsf{none} &\quad \text{(default) No effect applied to argument name.}\\
+ \mathsf{math} &\quad \text{The argument name is rendered as $math$ text.}\\
+ &\quad\quad \text{(name must be given without mathmode).}\\
+ \mathsf{italics} &\quad \text{The argument name is rendered in \textit{italics}.}\\
+ &\quad\quad \text{(name must be given in mathmode to apply effect).}\\
+ \mathsf{bold} &\quad \text{The argument name is rendered in $\boldsymbol{bold}$.}\\
+ &\quad\quad \text{(name must be given in mathmode to apply effect).}\\
+ \mathsf{monospace} &\quad \text{The argument name is rendered in \texttt{monospace} font.}\\
+ &\quad\quad \text{(name must be given in mathmode to apply effect).}\\
+ \end{align*}
-\noindent
-\verb|\setsupportstyle{|\opt{style}\verb|}|
-\begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
- \item
- where \opt{style} is a list of \tikzname style parameters.
-\end{list}
+\begin{figure}[!h]
+ \begin{subfigure}{0.3\textwidth}
+ \centering
+ \begin{af}[namestyle=none]
+ \argument{a}
+ \argument[right=of a1]{b}
+
+ \attack[]{a1}{a2}
+ \end{af}
+ \caption{\textsf{namestyle}=\textit{none}}
+ \label{fig:namestyle_none}
+ \end{subfigure}
+ \hfill
+ \begin{subfigure}{0.3\textwidth}
+ \centering
+ \begin{af}[namestyle=math]
+ \argument{a}
+ \argument[right=of a1]{b}
+
+ \attack[]{a1}{a2}
+ \end{af}
+ \caption{\textsf{namestyle}=\textit{math}}
+ \label{fig:namestyle_math}
+ \end{subfigure}
+ \hfill
+ \begin{subfigure}{0.3\textwidth}
+ \centering
+ \begin{af}[namestyle=italics]
+ \argument{$a$}
+ \argument[right=of a1]{$b$}
+
+ \attack[]{a1}{a2}
+ \end{af}
+ \caption{\textsf{namestyle}=\textit{italics}}
+ \label{fig:namestyle_italics}
+ \end{subfigure}
+ \par\bigskip
+ \begin{subfigure}{0.49\textwidth}
+ \centering
+ \begin{af}[namestyle=bold]
+ \argument{$a$}
+ \argument[right=of a1]{$b$}
+
+ \attack[]{a1}{a2}
+ \end{af}
+ \caption{\textsf{namestyle}=\textit{bold}}
+ \label{fig:namestyle_bold}
+ \end{subfigure}
+ \hfill
+ \begin{subfigure}{0.49\textwidth}
+ \centering
+ \begin{af}[namestyle=monospace]
+ \argument{$a$}
+ \argument[right=of a1]{$b$}
+
+ \attack[]{a1}{a2}
+ \end{af}
+ \caption{\textsf{namestyle}=\textit{monospace}}
+ \label{fig:namestyle_monospace}
+ \end{subfigure}
+ \caption{The available options for \textsf{namestyle}. You can of course apply any formatting yourself when using the default \textsf{namestyle}=\textit{none}.}
+ \label{fig:namestyle}
+\end{figure}
-\subsection{The \texttt{af} Environment}
-The \argumentation package provides an environment for creating abstract argumentation frameworks and bipolar argumentation frameworks in \LaTeX-documents.\\
+\subsection{The \texttt{af} Environment}\label{sec:af}
+The \argumentation package provides an environment for creating abstract argumentation frameworks and many of its extensions in \LaTeX-documents.\\
+\vspace{-0.2cm}
\noindent
\verb|\begin{af}[|\opt{options}\verb|]|
@@ -195,54 +470,58 @@ The \argumentation package provides an environment for creating abstract argumen
\begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
\item
- The \argumentation package provides the \texttt{af} environment for creating abstract argumentation framework.
+ The above described style options can be set locally for each instance of the \texttt{af} environment by setting the respective parameters in the options of the environment.
+ Local settings override the defaults and globally set values (See Section~\ref{sec:style}
+ for examples).
+
The \texttt{af} environment extends the \textsf{tikzpicture} environment, meaning all \tikzname commands can be used inside the \texttt{af} environment as well.
- Furthermore, all options for the \textsf{tikzpicture} environment can be used for the \texttt{af} environment as well.
- For instance, the option parameter \verb|node distance|, which is set to \verb|1cm| per default.
+ Furthermore, all options for the \textsf{tikzpicture} environment can be used for the \texttt{af} environment as well, e.\,g the option \verb|node distance|, which is set to \verb|1cm| per default.
- If you want to create an argumentation framework with limited space available, you can provide one of the following predefined options for the environment. This is especially useful for two-column layout documents.
+ If you want to create an argumentation framework with limited space available, you can use one of the following predefined options for the \texttt{af} environment.
+ This is especially useful for two-column layout documents.
\begin{align*}
\mathsf{tiny} &\quad \text{\textsf{node distance} is set to $0.35cm$ and nodes are smaller.}\\
- \mathsf{small} &\quad \text{\textsf{node distance} is set to $0.55cm$ and nodes are smaller.}\\
+ \mathsf{small} &\quad \text{\textsf{node distance} is set to $0.55cm$ and nodes are smaller.}
+ %TODO:& argument size as parameter
\end{align*}
- \begin{example}
- Consider the two AFs in Figure~\ref{fig:mini_afs} created with the \textsf{small} and \textsf{tiny} option respectively.
- \end{example}
+ %\begin{example}
+ % Consider the two AFs in Figure~\ref{fig:mini_afs} created with the \textsf{small} and \textsf{tiny} option respectively.
+ %\end{example}
\end{list}
\begin{figure}[ht]
\begin{subfigure}{0.48\textwidth}
\centering
\begin{af}[small]
- \argument{args1}{a}
- \argument[right=of args1]{args2}{b}
- \argument[right=of args2]{args3}{c}
- \argument[right=of args3]{args4}{d}
- \argument[right=of args4]{args5}{e}
- \argument[below=of args1]{args6}{f}
- \argument[inactive,right=of args6]{args7}{g}
- \argument[inactive,argin,right=of args7]{args8}{h}
- \argument[right=of args8]{args9}{i}
- \argument[right=of args9]{args10}{j}
-
- \afname[left of=args1,yshift=-0.5cm,xshift=-0.2cm]{cap}{\textbf{F:}}
-
- \selfattack{args1}
- \dualattack[]{args1}{args6}
- \dualattack[inactive]{args6}{args7}
- \attack[inactive]{args8}{args7}
-
- \attack[inactive]{args7}{args2}
- \attack[]{args3}{args2}
-
- \support[]{args4}{args3}
- \support[]{args9}{args3}
-
- \attack[]{args4}{args5}
- \attack[]{args5}{args10}
- \attack[]{args10}{args9}
- \attack[]{args9}{args4}
+ \argument{a}
+ \argument[right=of a1]{b}
+ \argument[right=of a2]{c}
+ \argument[right=of a3]{d}
+ \argument[right=of a4]{e}
+ \argument[below=of a1]{f}
+ \argument[inactive,right=of a6]{g}
+ \argument[inactive,argin,right=of a7]{h}
+ \argument[right=of a8]{i}
+ \argument[right=of a9]{j}
+
+ \afname[left of=a1,yshift=-0.55cm,xshift=-0.2cm]{\textbf{F:}}
+
+ \selfattack{a1}
+ \dualattack[]{a1}{a6}
+ \dualattack[inactive]{a6}{a7}
+ \attack[inactive]{a8}{a7}
+
+ \attack[inactive]{a7}{a2}
+ \attack[]{a3}{a2}
+
+ \support[]{a4}{a3}
+ \support[]{a9}{a3}
+
+ \attack[]{a4}{a5}
+ \attack[]{a5}{a10}
+ \attack[]{a10}{a9}
+ \attack[]{a9}{a4}
\end{af}
\caption{An exemplary AF created with the \textsf{small} option set.}
\label{fig:example_small}
@@ -251,65 +530,90 @@ The \argumentation package provides an environment for creating abstract argumen
\begin{subfigure}{0.48\textwidth}
\centering
\begin{af}[tiny]
- \argument{args1}{a}
- \argument[right=of args1]{args2}{b}
- \argument[right=of args2]{args3}{c}
- \argument[right=of args3]{args4}{d}
- \argument[right=of args4]{args5}{e}
- \argument[below=of args1]{args6}{f}
- \argument[inactive,right=of args6]{args7}{g}
- \argument[inactive,argin,right=of args7]{args8}{h}
- \argument[right=of args8]{args9}{i}
- \argument[right=of args9]{args10}{j}
-
- \afname[left of=args1,yshift=-0.5cm,xshift=-0.2cm]{cap}{\textbf{F:}}
-
- \selfattack{args1}
- \dualattack[]{args1}{args6}
- \dualattack[inactive]{args6}{args7}
- \attack[inactive]{args8}{args7}
-
- \attack[inactive]{args7}{args2}
- \attack[]{args3}{args2}
-
- \support[]{args4}{args3}
- \support[]{args9}{args3}
-
- \attack[]{args4}{args5}
- \attack[]{args5}{args10}
- \attack[]{args10}{args9}
- \attack[]{args9}{args4}
+ \argument{a}
+ \argument[right=of a1]{b}
+ \argument[right=of a2]{c}
+ \argument[right=of a3]{d}
+ \argument[right=of a4]{e}
+ \argument[below=of a1]{f}
+ \argument[inactive,right=of a6]{g}
+ \argument[inactive,argin,right=of a7]{h}
+ \argument[right=of a8]{i}
+ \argument[right=of a9]{j}
+
+ \afname[left of=a1,yshift=-0.4cm,xshift=-0.2cm]{\textbf{F:}}
+
+ \selfattack{a1}
+ \dualattack[]{a1}{a6}
+ \dualattack[inactive]{a6}{a7}
+ \attack[inactive]{a8}{a7}
+
+ \attack[inactive]{a7}{a2}
+ \attack[]{a3}{a2}
+
+ \support[]{a4}{a3}
+ \support[]{a9}{a3}
+
+ \attack[]{a4}{a5}
+ \attack[]{a5}{a10}
+ \attack[]{a10}{a9}
+ \attack[]{a9}{a4}
\end{af}
\caption{An exemplary AF created with the \textsf{tiny} option set.}
\label{fig:example_tiny}
\end{subfigure}
\caption{Two AFs with smaller nodes, created by using the \textsf{small} and \textsf{tiny} options of the \texttt{af} environment.}
\label{fig:mini_afs}
-
\end{figure}
While the following commands are intended to be used inside the \texttt{af} environment, they can also be used inside the \textsf{tikzpicture} environment.
-\subsection{Arguments}
- Arguments can be created with the following command\\
-
- \noindent
- \verb|\argument{|\opt{id}\verb|}{|\opt{name}\verb|}|
+\subsection{Creating Arguments}
+ Arguments can be created with the \verb|\argument| command.
+ The full command is defined as follows\\
- \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
- \item\opt{id}~ is the identifier of the new argument
- \item\opt{name}~ is the displayed name of the argument
- \item To create an argument, you must provide a unique identifier and the name to be displayed in the picture.
- The \opt{id} of an argument is then referred to when creating attacks as well as for the relative positioning of other arguments.
+ \noindent
+ \verb|\argument[|\opt{options}\verb|](|\opt{id}\verb|){|\opt{name}\verb|}| \verb|at| (\opt{posX}, \opt{posY})
+ \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
+ \item\opt{options}~ (optional) a list of \tikzname style parameters and/or relative positioning information (see Section~\ref{sec:relpos}).
+ \item\opt{id}~ (optional) the identifier of the new argument. When omitted, arguments will automatically be assigned an identifier of the form: $a1, a2, a3,...$
+ \item\opt{name}~ the displayed name of the argument.
+ \item\opt{posX}, \opt{posY}~ (optional) the coordinates where the argument is placed. Should be omitted if relative positioning is used.
+
+ \item When creating an argument you only have to provide the \opt{name}, all other parameters are optional.
+ The \opt{id} of an argument is used for referencing, e.\,g., when creating attacks or for the relative positioning of other arguments.
\end{list}
-\subsubsection{Relative Positioning}
- This package supports relative placement of the arguments via the \tikzname-library \textsf{positioning}.
- The relative positioning information is provided as an optional parameter via\\
+\newpage
+\begin{example}~
+ \begin{verbatim}
+ \begin{af}
+ \argument{$a$}
+ \argument{$b$} at (1, 1)
+ \argument[right=of a2]{$c$}
+ \argument(argD){$d$} at (-2, 0)
+ \argument[above=of argD]{$e$}
+ \end{af}
+ \end{verbatim}
+
+ \begin{center}
+ \begin{af}
+ \argument{$a$}
+ \argument{$b$} at (1, 1)
+ \argument[right=of a2]{$c$}
+ \argument(argD){$d$} at (-2, 0)
+ \argument[above=of argD]{$e$}
+ \end{af}
+ \end{center}
+\end{example}
+
+\subsubsection{Relative Positioning}\label{sec:relpos}
+ Placement of argument nodes with the \argumentation package relies on relative placement via the \tikzname-library \textsf{positioning}.
+ The relative positioning information is provided as an optional parameter as follows\\
\noindent
- \verb|\argument[|\opt{dir}\verb|=of |\opt{arg\_id}\verb|]{|\opt{id}\verb|}{|\opt{name}\verb|}|
+ \verb|\argument[|\opt{dir}\verb|=of |\opt{arg\_id}\verb|](|\opt{id}\verb|){|\opt{name}\verb|}|
\begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
\item\opt{dir}~ has to be one of: \emph{right}, \emph{left}, \emph{below} and \emph{above}
@@ -323,36 +627,44 @@ While the following commands are intended to be used inside the \texttt{af} envi
\begin{verbatim}
\begin{af}
- \argument{arg1}{a}
- \argument[below=of arg1]{arg2}{b}
- \argument[right=of arg1, yshift=-24pt,xshift=-8pt]{arg3}{c}
- \argument[right=of arg3, xshift=-0.5cm]{arg4}{d}
- \argument[right=of arg4, yshift=5ex]{arg4}{e}
+ \argument{a}
+ \argument[below=of a1]{b}
+ \argument[right=of a1, yshift=-24pt,xshift=-8pt]{c}
+ \argument[right=of a3, xshift=-0.5cm]{d}
+ \argument[right=of a4, yshift=5ex]{e}
\end{af}
\end{verbatim}
\begin{center}
\begin{af}
- \argument{arg1}{a}
- \argument[below=of arg1]{arg2}{b}
- \argument[right=of arg1, yshift=-24pt,xshift=-8pt]{arg3}{c}
- \argument[right=of arg3, xshift=-0.5cm]{arg4}{d}
- \argument[right=of arg4, yshift=5ex]{arg4}{e}
+ \argument{a}
+ \argument[below=of a1]{b}
+ \argument[right=of a1, yshift=-24pt,xshift=-8pt]{c}
+ \argument[right=of a3, xshift=-0.5cm]{d}
+ \argument[right=of a4, yshift=5ex]{e}
\end{af}
\end{center}
\end{example}
-\subsubsection{Argument Styling}
+%\subsubsection{Absolute Positioning}
+
+\subsubsection{Argument Identifiers}
+ When creating an argument, it is automatically assigned an identifier for the sake of simplicity.
+ You can override this identifier by giving another identifier in parenthesis to the \verb|\argument| command.
+ Per default, the argument identifiers will be numerical of the form $a1, a2, a3, \dots$ based on their order of creation inside the \texttt{af} environment.
+ If you preferred alphabetical identifiers, you can set the package option \textsf{indexing}=\emph{alphabetic} and the argument identifiers will instead be $a, b, c, \dots$.
+
+\subsubsection{Additional Argument Styles}
Furthermore, you can provide optional parameters to adjust the style of the argument node.
For that you can use all \tikzname-style options and additionally the following predefined style parameters:
\begin{align*}
\mathsf{inactive} &\quad \text{The argument is displayed with grey outline and text.}\\
\mathsf{incomplete} &\quad \text{The argument is displayed with a dotted outline.}\\
\mathsf{invisible} &\quad \text{The argument node is completely transparent.}\\
- \mathsf{argin} &\quad \text{The argument is displayed with green background color.}\\
- \mathsf{argout} &\quad \text{The argument is displayed with red background color.}\\
- \mathsf{argundec} &\quad \text{The argument is displayed with cyan background color.}\\
+ \mathsf{accepted} &\quad \text{The argument is displayed with green background color.}\\
+ \mathsf{rejected} &\quad \text{The argument is displayed with red background color.}\\
+ \mathsf{undecided} &\quad \text{The argument is displayed with cyan background color.}\\
\end{align*}
%Some relevant \tikzname style-parameters are
@@ -369,7 +681,7 @@ While the following commands are intended to be used inside the \texttt{af} envi
%\end{align*}
-\subsection{Attacks}
+\subsection{Creating Attacks}
Attacks between two arguments can be created with the command\\
\noindent
@@ -380,7 +692,7 @@ While the following commands are intended to be used inside the \texttt{af} envi
\end{list}
-\subsubsection{Attack Styling}
+\subsubsection{Additional Attack Styles}
To customize an attack you can provide additional optional parameters:
\begin{align*}
\mathsf{inactive} &\quad \text{The attack is displayed in grey.}\\
@@ -389,7 +701,7 @@ While the following commands are intended to be used inside the \texttt{af} envi
\mathsf{selfattack} &\quad \text{Use if source and target of the attack are the same node.}\\
\mathsf{bend~right} &\quad \text{The attack arrow is bent to the right.}\\
&\quad \text{Can additionally provide the angle, e.\,g., \textsf{bend~right=40}.}\\
- \mathsf{bend~left} &\quad \text{The attack arrow is bent to the left. Can also provide an angle.}\\
+ \mathsf{bend~left} &\quad \text{The attack arrow is bent to the left. Can also provide an angle.}
\end{align*}
Of course, all \tikzname style parameters can be used here as well.
@@ -397,27 +709,27 @@ While the following commands are intended to be used inside the \texttt{af} envi
\begin{example}~
\begin{verbatim}
\begin{af}
- \argument{arg1}{a}
- \argument[right=of arg1]{arg2}{b}
- \argument[right=of arg2]{arg3}{c}
- \argument[right=of arg3]{arg4}{d}
-
- \attack{arg1}{arg2}
- \attack[bend right]{arg2}{arg3}
- \attack[bend left=10,inactive]{arg3}{arg4}
- \end{af}
+ \argument{a}
+ \argument[right=of a1]{b}
+ \argument[right=of a2]{c}
+ \argument[right=of a3]{d}
+
+ \attack{a1}{a2}
+ \attack[bend right]{a2}{a3}
+ \attack[bend left=10,inactive]{a3}{a4}
+ \end{af}
\end{verbatim}
\begin{center}
\begin{af}
- \argument{arg1}{a}
- \argument[right=of arg1]{arg2}{b}
- \argument[right=of arg2]{arg3}{c}
- \argument[right=of arg3]{arg4}{d}
-
- \attack{arg1}{arg2}
- \attack[bend right]{arg2}{arg3}
- \attack[bend left=10,inactive]{arg3}{arg4}
+ \argument{a}
+ \argument[right=of a1]{b}
+ \argument[right=of a2]{c}
+ \argument[right=of a3]{d}
+
+ \attack{a1}{a2}
+ \attack[bend right]{a2}{a3}
+ \attack[bend left=10,inactive]{a3}{a4}
\end{af}
\end{center}
\end{example}
@@ -439,27 +751,27 @@ While the following commands are intended to be used inside the \texttt{af} envi
\begin{example}~
\begin{verbatim}
\begin{af}
- \argument{arg1}{a}
- \argument[right=of arg1]{arg2}{b}
+ \argument{a}
+ \argument[right=of a1]{b}
- \selfattack{arg1}
- \dualattack{arg1}{arg2}
- \end{af}
+ \selfattack{a2}
+ \dualattack{a1}{a2}
+ \end{af}
\end{verbatim}
\begin{center}
\begin{af}
- \argument{arg1}{a}
- \argument[right=of arg1]{arg2}{b}
+ \argument{a}
+ \argument[right=of a1]{b}
- \selfattack{arg2}
- \dualattack{arg1}{arg2}
+ \selfattack{a2}
+ \dualattack{a1}{a2}
\end{af}
\end{center}
\end{example}
-\subsection{Supports}
+\subsection{Creating Support Relations}
You can create a support relation between two arguments with the command\\
\noindent
@@ -473,23 +785,23 @@ While the following commands are intended to be used inside the \texttt{af} envi
\begin{example}~
\begin{verbatim}
\begin{af}
- \argument{arg1}{a}
- \argument[right=of arg1]{arg2}{b}
- \argument[right=of arg2]{arg3}{c}
+ \argument{a}
+ \argument[right=of a1]{b}
+ \argument[right=of a2]{c}
- \support{arg1}{arg2}
- \support[bend right]{arg2}{arg3}
- \end{af}
+ \support{a1}{a2}
+ \support[bend right]{a2}{a3}
+ \end{af}
\end{verbatim}
\begin{center}
\begin{af}
- \argument{arg1}{a}
- \argument[right=of arg1]{arg2}{b}
- \argument[right=of arg2]{arg3}{c}
+ \argument{a}
+ \argument[right=of a1]{b}
+ \argument[right=of a2]{c}
- \support{arg1}{arg2}
- \support[bend right]{arg2}{arg3}
+ \support{a1}{a2}
+ \support[bend right]{a2}{a3}
\end{af}
\end{center}
\end{example}
@@ -498,55 +810,63 @@ While the following commands are intended to be used inside the \texttt{af} envi
Many extensions of the original abstract argumentation framework rely on attacks with an associated value.
This may, for instance, be probabilities in the case of probabilistic argumentation frameworks or numerical weights in the case of weighted argumentation frameworks.
These annotations can be added manually via \tikzname or via the following command\\
-
+
\noindent
- \verb|\annotatedattack{|\opt{arg1}\verb|}{|\opt{arg2}\verb|}{|\opt{value}\verb|}|
+ \verb|\annotatedattack[|\opt{position}\verb|]{|\opt{arg1}\verb|}{|\opt{arg2}\verb|}{|\opt{value}\verb|}|
\begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
- \item where \opt{arg1} and \opt{arg2} are the identifiers of two previously defined arguments and \opt{value} is the number or string that should be annotated to the attack.
- With this command, the annotation is placed above the attack arrow.
+ \item where \opt{arg1} and \opt{arg2} are the identifiers of two previously defined arguments and \opt{value} is the text or number that should be annotated to the attack.
+ \opt{position} specifies where the annotation should be placed relative to the attack arrow and should be one of: \textsf{above}, \textsf{below}, \textsf{left}, \textsf{right}.
\end{list}
\begin{example}~
\begin{verbatim}
\begin{af}
- \argument{arg1}{a}
- \argument[right=of arg1]{arg2}{b}
- \argument[right=of arg2]{arg3}{c}
+ \argument{a}
+ \argument[right=of a1]{b}
+ \argument[right=of a2]{c}
- \annotatedattack{arg1}{arg2}{$x$}
- \annotatedattack[bend right]{arg2}{arg3}{$0.6$}
- \end{af}
+ \annotatedattack[below]{a1}{a2}{$x$}
+ \annotatedattack[above,bend right]{a2}{a3}{$0.6$}
+ \end{af}
\end{verbatim}
\begin{center}
\begin{af}
- \argument{arg1}{a}
- \argument[right=of arg1]{arg2}{b}
- \argument[right=of arg2]{arg3}{c}
+ \argument{a}
+ \argument[right=of a1]{b}
+ \argument[right=of a2]{c}
- \annotatedattack{arg1}{arg2}{$x$}
- \annotatedattack[bend right]{arg2}{arg3}{$0.6$}
- \end{af}
+ \annotatedattack[below]{a1}{a2}{$x$}
+ \annotatedattack[above,bend right]{a2}{a3}{$0.6$}
+ \end{af}
\end{center}
\end{example}
\subsection{Further Commands}
- If you want to display an identifier for your argumentation framework in the picture, you can use the command\\
+ If you want to display an name (or some other text) for your argumentation framework in the picture, you can use the \verb|\afname| command.
+ Just like the \verb|\argument| command it can include an optional identifier and supports both relative and absolute positioning.
+ Some example usages:\\
- \noindent
- \verb|\afname{|\opt{id}\verb|}{|\opt{name}\verb|}|
+ \vspace{-0.25cm}
+ \noindent\verb|\afname{|\opt{name}\verb|}|
+
+ \noindent\verb|\afname(|\opt{id}\verb|){|\opt{name}\verb|}|
+
+ \noindent\verb|\afname[|\opt{relPos}\verb|]{|\opt{name}\verb|}|
+
+ \noindent\verb|\afname{|\opt{name}\verb|}| \verb|at (|\opt{posX},\opt{posY}\verb|)|
\begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
- \item where \opt{id} is an identifier for the created node and \opt{name} is the text displayed in the picture.
- Additionally, positioning information can be provided via the optional parameters.
+ \item where \opt{id} is an (optional) identifier for the created node (if omitted, the default identifier will be \textit{cap}) and \opt{name} is the text displayed in the picture.
+ Additional positioning information, via \textsf{xshift} or \textsf{yshift}, can be provided via the optional parameters.
\end{list}
\noindent
To create an annotation, e.\,g., an acceptance condition or a weight, next to an argument, the following command can be used.\\
\noindent
- \verb|\annotation{|\opt{arg\_id}\verb|}{|\opt{text}\verb|}|
+ \verb|\annotation[|\opt{optional}\verb|]{|\opt{arg\_id}\verb|}{|\opt{text}\verb|}|
\begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
\item where \opt{arg\_id} is the identifier of some argument and \opt{text} is the text to be displayed.
@@ -556,35 +876,58 @@ While the following commands are intended to be used inside the \texttt{af} envi
\begin{example}~
\begin{verbatim}
\begin{af}
- \argument{arg1}{a}
- \argument[right=of arg1]{arg2}{b}
- \afname[left=of arg1]{caption}{$F:$}
- \annotation[yshift=-0.4cm,xshift=0.4cm]{arg2}{$\neg a$}
+ \argument{a}
+ \argument[right=of a1]{b}
+ \afname{$F:$} at (-1,0)
+ \annotation[yshift=-0.4cm,xshift=0.4cm]{a2}{$\neg a$}
- \attack{arg1}{arg2}
- \end{af}
+ \support{a1}{a2}
+ \end{af}
\end{verbatim}
\begin{center}
\begin{af}
- \argument{arg1}{a}
- \argument[right=of arg1]{arg2}{b}
- \afname[left=of arg1]{caption}{$F:$}
- \annotation[yshift=-0.4cm,xshift=0.4cm]{arg2}{$\neg a$}
+ \argument{a}
+ \argument[right=of a1]{b}
+ \afname{$F:$} at (-1,0)
+ \annotation[yshift=-0.4cm,xshift=0.4cm]{a2}{$\neg a$}
- \support{arg1}{arg2}
- \end{af}
+ \support{a1}{a2}
+ \end{af}
\end{center}
\end{example}
+ You can manually override the \textsf{argumentstyle}, \textsf{attackstyle} and \textsf{supportstyle} parameters and set a custom style globally via the following commands respectively.\\
+
+ \vspace{-0.3cm}
+ \noindent
+ \verb|\setargumentstyle{|\opt{style}\verb|}|
+
+ \noindent
+ \verb|\setattackstyle{|\opt{style}\verb|}|
+
+ \noindent
+ \verb|\setsupportstyle{|\opt{style}\verb|}|
+
+ \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
+ \item
+ where \opt{style} is a list of \tikzname style parameters.
+ \end{list}
+
%\section{Style Definitions}
\newpage
-\section{Version History}
+\section{Version History}\label{sec:history}
-\subsection*{[v1.0 2023/11/05]}
+\subsection*{[v1.2 2024/06/07]}
\begin{itemize}
- \item First Version.
+ \item Changed Syntax of \verb|\argument| command. The \textit{id} parameter is now given inside parenthesis instead of curly braces and is optional.
+ \item Added absolute positioning to \verb|\argument| command, like for \tikzname nodes.
+ \item Added package option $\textsf{indexing}$ to toggle automatic generation of identifiers for created argument nodes. Can be set to \textit{none}, or selected between \textit{alphabetic} and \textit{numeric} (default).
+ \item All package style options can now also be set locally in the \texttt{af} environment.
+ \item Adjusted \verb|\annotatedattack| to require position parameter.
+ \item Various minor bugfixes regarding the \textsf{namestyle} package option.
+ \item Added new argumentstyle \textsf{large}.
\end{itemize}
\subsection*{[v1.1 2023/12/03]}
@@ -596,4 +939,9 @@ While the following commands are intended to be used inside the \texttt{af} envi
\item Updated and improved documentation.
\end{itemize}
+\subsection*{[v1.0 2023/11/05]}
+\begin{itemize}
+ \item First Version.
+\end{itemize}
+
\end{document}
diff --git a/graphics/pgf/contrib/argumentation/argumentation.sty b/graphics/pgf/contrib/argumentation/argumentation.sty
index 7cd678de3c..f247cd959a 100644
--- a/graphics/pgf/contrib/argumentation/argumentation.sty
+++ b/graphics/pgf/contrib/argumentation/argumentation.sty
@@ -1,5 +1,5 @@
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{argumentation}[2023/12/03 Argumentation]
+\ProvidesPackage{argumentation}[2024/05/03 Argumentation]
% Author: Lars Bengel
% E-Mail: lars.bengel@fernuni-hagen.de
% Version: 1.1
@@ -7,77 +7,195 @@
% License: LaTeX Project Public License 1.3c
%%%%%%%%%%% Package Requirements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{amsbsy,amsmath} % For proper bold letters in math mode
\RequirePackage{pgfopts} % For managing package options
\RequirePackage{tikz} % For drawing the argumentation frameworks
\usetikzlibrary{positioning} % For relative node positioning
\usetikzlibrary{arrows.meta} % For directed edges / attack arrows
\usetikzlibrary{arrows} % For directed edges / attack arrows
\usetikzlibrary{decorations.markings} % For creating the support edge markings
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%% Package Tikz Style Definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcounter{argument}
+%\newcommand{\argument}{\relax}
+\newcommand{\argstyle}[1]{#1} % Defines the font style in which argument names are displayed
+
+%%% Argument Style Definitions
+\tikzset{ % global base styles
+ argument size/.style={minimum size=0.7cm}, % Standard size of argument nodes
+ argument/.style={}, % Base style for argument nodes
+ argument standard/.style={circle,draw=black,inner sep=0,outer sep=0, argument size},
+ argument large/.style={circle,draw=black,inner sep=0,outer sep=0, argument size, font=\large},
+ argument thick/.style={circle,draw=black,inner sep=0,outer sep=0, argument size, thick},
+}
-\newcommand{\argstyle}[1]{#1} % Defines the font style in which argument names are displayed
+%%% Attack/Support Edge Definitions
+\tikzset{ % global base styles
+ attack/.style={}, % Base style for attack arrow
+ attack standard/.style={-{stealth'}}, % Standard attack arrow
+ attack large/.style={-{Stealth[scale=1.25]}}, % Larger arrow tip
+ attack modern/.style={-{To[sharp,length=0.9mm,line width=0.7pt]}}, % Mordern rightarrow style tip
+ support/.style={},
+ support standard/.style = {attack, postaction = {decorate,decoration={markings,mark=at position 0.36 with {\draw[-] (0,-0.1) -- (0.1,0.1);}}}}, % Standard support arrow
+ support dashed/.style={attack,densely dashed},
+ support double/.style={-{Classical TikZ Rightarrow},double},
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%% Package Options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\pgfkeys{/argumentation/argumentstyle/.is choice,
- /argumentation/argumentstyle/standard/.code={\tikzset{argument/.style={circle,draw=black,inner sep=0,outer sep=0}}},
- /argumentation/argumentstyle/custom/.code={},
- /argumentation/argumentstyle=standard,
+%%% Options for style of the argument node itself
+\pgfkeys{/tikz/.cd,
+ argumentstyle/.is choice,
+ argumentstyle/standard/.code={\tikzset{argument/.style={argument standard}}},
+ argumentstyle/large/.code={\tikzset{argument/.style={argument large}}},
+ argumentstyle/thick/.code={\tikzset{argument/.style={argument thick}}},
+}
+\pgfkeys{/argumentation/.cd,
+ .unknown/.code={},
+ argumentstyle/.is choice,
+ argumentstyle/standard/.code={\tikzset{argument/.style={argument standard}}},
+ argumentstyle/large/.code={\tikzset{argument/.style={argument large}}},
+ argumentstyle/thick/.code={\tikzset{argument/.style={argument thick}}},
+ argumentstyle=standard,
}
-\pgfkeys{/argumentation/attackstyle/.is choice,
- /argumentation/attackstyle/standard/.code={\tikzset{attack/.style={-{stealth'}}}},
- /argumentation/attackstyle/large/.code={\tikzset{attack/.style={-{Stealth[scale=1.25]}}}},
- /argumentation/attackstyle=standard,
+%%% Options for the style of the attack edges
+\pgfkeys{/tikz/.cd,
+ attackstyle/.is choice,
+ attackstyle/standard/.code={\tikzset{attack/.style={attack standard}}},
+ attackstyle/large/.code={\tikzset{attack/.style={attack large}}},
+ attackstyle/modern/.code={\tikzset{attack/.style={attack modern}}},
+ attackstyle=standard,
+}
+\pgfkeys{/argumentation/.cd,
+ attackstyle/.is choice,
+ attackstyle/standard/.code={\tikzset{attack/.style={attack standard}}},
+ attackstyle/large/.code={\tikzset{attack/.style={attack large}}},
+ attackstyle/modern/.code={\tikzset{attack/.style={attack modern}}},
+ attackstyle=standard,
+}
+
+%%% Options for the style of the support edges
+\pgfkeys{/tikz/.cd,
+ supportstyle/.is choice,
+ supportstyle/standard/.code={\tikzset{support/.style={support standard}}},
+ supportstyle/dashed/.code={\tikzset{support/.style={support dashed}}},
+ supportstyle/double/.code={\tikzset{support/.style={support double}}},
+ supportstyle=standard,
+}
+\pgfkeys{/argumentation/.cd,
+ supportstyle/.is choice,
+ supportstyle/standard/.code={\tikzset{support/.style={support standard}}},
+ supportstyle/dashed/.code={\tikzset{support/.style={support dashed}}},
+ supportstyle/double/.code={\tikzset{support/.style={support double}}},
+ supportstyle=standard,
}
-\pgfkeys{/argumentation/supportstyle/.is choice,
- /argumentation/supportstyle/standard/.code={\tikzset{support/.style = {attack,postaction = {decorate,decoration={markings,mark=at position 0.36 with {\draw[-] (0,-0.1) -- (0.1,0.1);}}}}}},
- /argumentation/supportstyle/dashed/.code={\tikzset{support/.style = {attack,densely dashed}}},
- /argumentation/supportstyle/double/.code={\tikzstyle{support}=[-{Classical TikZ Rightarrow},double]},
- /argumentation/supportstyle=standard,
+%%% Options for the automatic text formatting for the argument names
+\pgfkeys{/tikz/.cd,
+ namestyle/.is choice,
+ namestyle/none/.code={\renewcommand{\argstyle}[1]{##1}},
+ namestyle/math/.code={\renewcommand{\argstyle}[1]{\ensuremath{##1}}},
+ namestyle/italics/.code={\renewcommand{\argstyle}[1]{\ensuremath{\mathit{\text{##1}}}}},
+ namestyle/bold/.code={\renewcommand{\argstyle}[1]{\ensuremath{\boldsymbol{\text{##1}}}}},
+ namestyle/monospace/.code={\renewcommand{\argstyle}[1]{\ensuremath{\mathtt{\text{##1}}}}},
+ namestyle=none,
+}
+\pgfkeys{/argumentation/.cd,
+ namestyle/.is choice,
+ namestyle/none/.code={\renewcommand{\argstyle}[1]{##1}},
+ namestyle/math/.code={\renewcommand{\argstyle}[1]{\ensuremath{##1}}},
+ namestyle/italics/.code={\renewcommand{\argstyle}[1]{\ensuremath{\mathit{##1}}}},
+ namestyle/bold/.code={\renewcommand{\argstyle}[1]{\ensuremath{\boldsymbol{\text{##1}}}}},
+ namestyle/monospace/.code={\renewcommand{\argstyle}[1]{\ensuremath{\mathtt{##1}}}},
+ namestyle=none,
}
-\pgfkeys{/argumentation/namestyle/.is choice,
- /argumentation/namestyle/normal/.code={\relax},
- /argumentation/namestyle/italics/.code={\renewcommand{\argstyle}[1]{\emph{#1}}},
- /argumentation/namestyle/bold/.code={\renewcommand{\argstyle}[1]{\textbf{#1}}},
- /argumentation/namestyle/bolditalics/.code={\renewcommand{\argstyle}[1]{\emph{\textbf{#1}}}},
- /argumentation/namestyle/monospace/.code={\renewcommand{\argstyle}[1]{\texttt{#1}}},
- /argumentation/namestyle=normal,
+%%% Options for automatic indexing (and naming) of argument nodes
+\NewDocumentCommand { \argument } {} {\relax}
+\pgfkeys{/argumentation/.cd,
+ indexing/.is choice,
+ indexing/none/.code={
+ \RenewDocumentCommand { \argument } {O{} r() m dat d()} {
+ \IfNoValueTF {##5}{%
+ \node[argument size,argument,##1](##2) {\argstyle{##3}};
+ }{%
+ \node[argument size,argument,##1](##2) at (##5) {\argstyle{##3}};
+ }
+ }
+ },
+ indexing/numeric/.code={
+ \RenewDocumentCommand { \argument } {O{} d() m dat d()} {
+ \stepcounter{argument}
+ \IfNoValueTF {##2}{%
+ \IfNoValueTF {##5}{%
+ \node[argument size,argument,##1](a\arabic{argument}) {\argstyle{##3}};
+ }{%
+ \node[argument size,argument,##1](a\arabic{argument}) at (##5) {\argstyle{##3}};
+ }
+ }{%
+ \IfNoValueTF {##5}{%
+ \node[argument size,argument,##1](##2) {\argstyle{##3}};
+ }{%
+ \node[argument size,argument,##1](##2) at (##5) {\argstyle{##3}};
+ }
+ }
+ }
+ },
+ indexing/alphabetic/.code={
+ \RenewDocumentCommand { \argument } {O{} d() m dat d()} {
+ \stepcounter{argument}
+ \IfNoValueTF {##2}{%
+ \IfNoValueTF {##5}{%
+ \node[argument size,argument,##1](\alph{argument}) {\argstyle{##3}};
+ }{%
+ \node[argument size,argument,##1](\alph{argument}) at (##5) {\argstyle{##3}};
+ }
+ }{%
+ \IfNoValueTF {##5}{%
+ \node[argument size,argument,##1](##2) {\argstyle{##3}};
+ }{%
+ \node[argument size,argument,##1](##2) at (##5) {\argstyle{##3}};
+ }
+ }
+ }
+ },
+ indexing/.default=numeric,
+ indexing=numeric,
}
\ProcessPgfPackageOptions{/argumentation}
-%%%%%%%%%% Package Content %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%% AF Environment %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Additional AF Style Parameters
\tikzset{ % global predefined tikz-styles
- argument size/.style={minimum size=0.7cm}, % Standard size of argument nodes
selfattack/.style={loop,min distance=2mm,in=0,out=60,looseness=5}, % Standard style for self-attacks
- inactive/.style={draw=black!30, text=black!40}, % Make a node or edge inactive, i.e., greyed out
+ inactive/.style={draw=black!30,text=black!40}, % Make a node or edge inactive, i.e., greyed out
incomplete/.style={densely dashed}, % Style for displaying incomplete nodes or attacks
- argin/.style={fill=green}, % Color an argument that is labelled in
- argout/.style={fill=red}, % Color an argument that is labelled out
- argundec/.style={fill=cyan}, % Color an argument that is labelled undecided
+ accepted/.style={fill=green}, % Color an argument that is labelled in
+ rejected/.style={fill=red}, % Color an argument that is labelled out
+ undecided/.style={fill=cyan}, % Color an argument that is labelled undecided
caption/.style={draw=none}, % Style for displaying AF name in Figure
invisible/.style={draw=none,text=black!0}, % Make a node or edge invisible
- annotation/.style={above,font=\small},
+ annotation/.style={font=\small}, % text annotation style
+ argin/.style={accepted},
+ argout/.style={rejected},
+ argundec/.style={undecided},
}
-% Commands for setting custom tikz-style parameters (experimental)
-\newcommand{\setargumentstyle}[1]{\tikzset{argument/.style={#1}}}
-\newcommand{\setattackstyle}[1]{\tikzset{attack/.style={#1}}}
-\newcommand{\setsupportstyle}[1]{\tikzset{support/.style={#1}}}
-
-%\newcommand{\setloopstyle}[1]{\tikzset{selfattack/.style={#1}}}
-%\newcommand{\adjustargumentstyle}[1]{\tikzset{argument/.append style={#1}}}
-%\newcommand{\adjustattackstyle}[1]{\tikzset{attack/.append style={#1}}}
-
-
-%%%%%%%%%%%%%%% Environment %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\pgfkeys{
- /tikz/small/.style = {node distance=0.55cm,argument size/.style={minimum size=0.55cm},caption/.append style={font=\small}},
- /tikz/tiny/.style = {node distance=0.35cm,argument size/.style={font=\small, minimum size=0.4cm},caption/.append style={font=\small}},
+%%% Options for af environment
+\pgfkeys{/tikz/.cd,
+ small/.style = {node distance=0.55cm,argument size/.style={minimum size=0.55cm},caption/.append style={font=\small}},
+ tiny/.style = {node distance=0.35cm,argument size/.style={minimum size=0.4cm,font=\small},caption/.append style={font=\small}},
}
+%%% Initializing the af environment
+\newcounter{af}
\newenvironment{af}[1][]{
+ \refstepcounter{af}
+ \setcounter{argument}{0}
+ \pgfkeys{/argumentation/.cd, #1}
\tikzpicture[#1]
}{%
\endtikzpicture
@@ -86,13 +204,17 @@
%%%%%%%%%%%%%%%% Commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Creates a node displaying the name of the AF
-\newcommand{\afname}[3][]{\node[caption,#1](#2){#3};}
+\NewDocumentCommand { \afname } { O{} D(){caption} m dat d()} {
+ \IfNoValueTF {#5}{%
+ \node[caption,#1](#2){#3};
+ }{%
+ \node[caption,#1](#2) at (#5) {#3};
+ }
+
+}
\newcommand{\annotation}[3][]{\node[annotation,above of=#2,#1](an_#2){#3};}
-% Creates an argument node
-\newcommand{\argument}[3][]{\node[argument,argument size,#1](#2){\argstyle{#3}};}
-
% Creates an attack edge
\newcommand{\attack}[3][]{\path(#2) edge [attack,#1] (#3);}
@@ -107,3 +229,14 @@
% Creates a support edge between two arguments
\newcommand{\support}[3][]{\path(#2) edge [support=0.35,#1] (#3);}
+
+%%% Commands for setting custom tikz-style parameters
+\newcommand{\setargumentstyle}[1]{\tikzset{argument/.style={#1}}}
+\newcommand{\setattackstyle}[1]{\tikzset{attack/.style={#1}}}
+\newcommand{\setsupportstyle}[1]{\tikzset{support/.style={#1}}}
+\newcommand{\setannotationstyle}[1]{\tikzset{annotation/.style={#1}}}
+
+%\newcommand{\setloopstyle}[1]{\tikzset{selfattack/.style={#1}}}
+%\newcommand{\adjustargumentstyle}[1]{\tikzset{argument/.append style={#1}}}
+%\newcommand{\adjustattackstyle}[1]{\tikzset{attack/.append style={#1}}}
+
diff --git a/graphics/pgf/contrib/circuitikz/doc/changelog.tex b/graphics/pgf/contrib/circuitikz/doc/changelog.tex
index d9594dc1fc..0806a20b78 100644
--- a/graphics/pgf/contrib/circuitikz/doc/changelog.tex
+++ b/graphics/pgf/contrib/circuitikz/doc/changelog.tex
@@ -5,6 +5,35 @@ full list of changes.
\begin{itemize}
\item
+ Version 1.6.9 (2024-05-25)
+
+ Several new components and a bug fix for a nasty long-standing bug
+ about switching diode types.
+
+ \begin{itemize}
+ \tightlist
+ \item
+ Added a Relais-Shape (contributed by
+ \href{https://github.com/circuitikz/circuitikz/pull/795}{Jakob
+ ``DraUX'' on GitHub}
+ \item
+ Added a center tap anchor for tube filament (suggested by
+ \href{https://github.com/circuitikz/circuitikz/issues/792}{user
+ bogger33 on GitHub})
+ \item
+ Added neon lamps (two versions, suggested by
+ \href{https://github.com/circuitikz/circuitikz/issues/793}{user
+ bogger33 on GitHub})
+ \item
+ Added a configurable spark gap (suggested by
+ \href{https://github.com/circuitikz/circuitikz/issues/800}{user
+ bogger33 on GitHub})
+ \item
+ Fix a long-standing problem when
+ \href{https://github.com/circuitikz/circuitikz/issues/794}{(locally)
+ switching diode type}
+ \end{itemize}
+\item
Version 1.6.8 (2024-05-05)
Several new components, more anchors, a bit of documentation
diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf b/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf
index d4f9bc36a2..cc6865c72f 100644
--- a/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf
+++ b/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf
index 9d1e52303d..9f3d2b57e0 100644
--- a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf
+++ b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex
index 20a79f3d68..ac116af09e 100644
--- a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex
+++ b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex
@@ -3266,6 +3266,8 @@ Here you'll find bipoles that are not easily grouped in the categories above.
\circuitdescbip*{fuse}{Fuse}{}
\circuitdescbip*{afuse}{Asymmetric fuse}{asymmetric fuse}
\circuitdescbip{wfuse}{``wiggly'' fuse}{wiggly fuse}()[left/110/0.2, right/70/0.2]
+ \circuitdescbip*{relais}{Relais\footnotemark}{}
+ \footnotetext{Contributed by \href{https://github.com/circuitikz/circuitikz/pull/795}{Jakob «DraUX»}}
\circuitdescbip{squid}{Squid}{}
\circuitdescbip{barrier}{Barrier}{}
\circuitdescbip{openbarrier}{Open barrier}{}
@@ -3287,6 +3289,13 @@ If otherwise \texttt{americangfsurgearrester} option is active (or the style \te
\begin{groupdesc}
\circuitdescbip*{lamp}{Lamp}{}
\circuitdescbip*{bulb}{Bulb}{}
+ \circuitdescbip*{neonlampcc}{Neon lamp\footnotemark\ (double cathode style)}{}
+ \footnotetext{The neon lamps have been added in \texttt{v1.6.9} thanks to a suggestion by \href{https://github.com/circuitikz/circuitikz/issues/793}{user bogger33 on GitHub}.}
+ \circuitdescbip*{neonlampac}{Neon lamp (anode and cathode style)}{}
+ \circuitdescbip*{sparkgap}{Spark gap\footnotemark (unenclosed)}{}
+ \footnotetext{The spark gap has been added in \texttt{v1.6.9} thanks to a suggestion by \href{https://github.com/circuitikz/circuitikz/issues/800}{user bogger33 on GitHub}.}
+ \circuitdescbip*[sparkgap]{sparkgap, sparkgap/circle}{Spark gap}{}
+ \circuitdescbip*[sparkgap]{sparkgap, sparkgap/dot, sparkgap/circle}{Spark gap (gas filled)}{}
\circuitdescbip*{loudspeaker}{loudspeaker}{}( north/90/0.4, ne/45/0.4, east/0/0.4, se/-45/0.4, south/-90/0.4, sw/-135/0.4, west/180/0.4, nw/135/0.4, left/135/0.2, right/45/0.2, center/-135/0.2)
\circuitdescbip*{mic}{mic}{}( north/90/0.4, east/0/0.4, south/-90/0.4, west/180/0.4, left/135/0.2, right/45/0.2, center/-135/0.2)
\circuitdescbip*{tlmic}{tail-less mic\footnotemark}{}( north/90/0.4, east/0/0.4, south/-90/0.4, west/180/0.4, left/135/0.2, right/45/0.2, center/-135/0.2)
@@ -3324,9 +3333,9 @@ You have two types of microphones; \texttt{mic} has protruding connection and \t
\subsubsection{Miscellaneous element customization}\label{sec:tweak-misc}
-You can change the scale of all the miscellaneous elements by setting the key \texttt{misc/scale} to something different from the default \texttt{1.0}.
+You can change the scale of all the miscellaneous elements by setting the key \texttt{misc/scale} to something different from the default \texttt{1.0}; relative thickness can be controlled with \texttt{misc/thickness}.
-\paragraph{Wiggly fuses} can have (or not have) poles; you can switch between the two forms by setting to \texttt{true} or \texttt{false} (default \texttt{true}) the key \texttt{bipoles/wfuse/dots}; if they have poles, you can choose any of the pole shapes with the key \texttt{bipoles/wfuse/shape}.
+\paragraph{Wiggly fuses.} Wiggly fuses can have (or not have) poles; you can switch between the two forms by setting to \texttt{true} or \texttt{false} (default \texttt{true}) the key \texttt{bipoles/wfuse/dots}; if they have poles, you can choose any of the pole shapes with the key \texttt{bipoles/wfuse/shape}.
The pole nodes are named \texttt{-left} and \texttt{-right} so that you can access their borders.
\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily]
@@ -3342,6 +3351,30 @@ The pole nodes are named \texttt{-left} and \texttt{-right} so that you can acce
\end{circuitikz}
\end{LTXexample}
+\paragraph{Neon lamps.} Neon lamp ``dot'' size is the same as the size of poles (\texttt{circ} and \texttt{ocirc}), and they can be changed locally:
+\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily]
+\begin{tikzpicture}
+ \draw (0,0) to[neonlampcc, nodes width=0.03] ++(2,0)
+ to[neonlampac, misc/thickness=3] ++(2,0);
+\end{tikzpicture}
+\end{LTXexample}
+
+\paragraph{Spark gap.} The \texttt{sparkgap} component is similar to the (American) surge arrester, but it's more configurable; it will render bare (unenclosed) by default, but you can add a (fillable) enclosure with the key \texttt{sparkgap/circle} and a dot with \texttt{sparkgap/dot} (they are boolean keys, false by default).
+Moreover, the arrows are configurable like other arrows in the package (see~\ref{sec:tunablearrows}) using the \texttt{sparkgap end arrow} key (default \texttt{Triangle[scale=2]}). The gap is tunable with \texttt{sparkgap/gap} (default \texttt{0.05}).
+\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily]
+\begin{tikzpicture}
+ \draw (0,2) to[sparkgap, l=gap\textsubscript{1}] ++(2,0)
+ to[sparkgap, sparkgap/circle,
+ sparkgap/dot, l=S2] ++(2,0);
+ \ctikzset{sparkgap end arrow={Kite[scale=1.5]}}
+ \draw (0,0) to[sparkgap, l=S3] ++(2,0)
+ to[sparkgap, l=S4, sparkgap/circle,
+ sparkgap/gap=0.15] ++(2,0);
+\end{tikzpicture}
+\end{LTXexample}
+As in neon lamps, the dot (if activated by the key \texttt{sparkgap/dot}) follows the size of poles and can be changed locally.
+
+
\subsection{Multiple wires (buses)}
These are simple drawings to indicate multiple wires.
@@ -4827,7 +4860,8 @@ Note that the \verb|diodetube| is used as component name to avoid clashes with t
Normally, the filament is not drawn. If you want a filament, put the \verb|filament| option in the node description:
\begin{groupdesc}
- \circuitdesc*{diodetube,filament}{Tube Diode}{}(anode/90/0.2, filament 1/-135/0.2, filament 2/-45/0.2 )
+ \circuitdesc*{diodetube,filament}{Tube Diode\footnotemark}{}(anode/90/0.2, filament 1/-90/0.4, filament 2/-45/0.2, filament center/0/0.5 )
+ \footnotetext{The \texttt{filament center} anchor has been added in \texttt{v1.6.9} thanks to a suggestion by \href{https://github.com/circuitikz/circuitikz/issues/792}{user bogger33 on GitHub}.}
\end{groupdesc}
Sometimes, you don't want the cathode to be drawn (but you do want the filament). Use the \verb|nocathode| option in the node description:
@@ -4869,18 +4903,27 @@ fully configurable, and the attributes are described below:
\verb|tubes/filament angle| & \verb|15| & angle from the centerpoint \\
\end{tabular}
-Conventionally, the model of the tube is indicated at the \verb|east| anchor:
+Conventionally, the model of the tube is indicated at the \verb|east| anchor, and you can access filament anchors if you need them:
-\begin{LTXexample}[varwidth]
-\ctikzset{tubes/width=1.4}
-\ctikzset{tubes/height=1}
-\begin{circuitikz}
-\draw (0,0) node[triode] (Tri) {};
-\draw (Tri.east) node[right] {12AX7};
-\end{circuitikz}
+\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily]
+\ctikzset{tubes/width=1.4, tubes/height=1}
+\begin{circuitikz}
+ \draw (0,2) node[triode, filament] (Tri) {};
+ \draw (Tri.east) node[right] {12AX7};
+ \ctikzset{tubes/filament angle=40,
+ tubes/filament distance=0.2}
+ \draw (0,0) node[triode, filament] (Pent) {};
+ \draw (Pent.east) node[right] {BOH};
+ \path (Tri.filament 1) node[red,ocirc]{};
+ \path (Pent.filament 1) node[red,ocirc]{};
+ \path (Tri.filament center) node[blue,ocirc]{};
+ \draw (Pent.filament center) -- ++(0,-1) node[tlground]{};
+ \end{circuitikz}
\end{LTXexample}
+
+
Example triode amplifier:
\begin{lstlisting}
diff --git a/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty b/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty
index 69ce1bbddd..afa91d4b2b 100644
--- a/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty
+++ b/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty
@@ -16,8 +16,8 @@
\providecommand\DeclareRelease[3]{}
\providecommand\DeclareCurrentRelease[2]{}
-\def\pgfcircversion{1.6.8}
-\def\pgfcircversiondate{2024/05/05}
+\def\pgfcircversion{1.6.9}
+\def\pgfcircversiondate{2024/05/25}
\DeclareRelease{0.4}{2012/12/20}{circuitikz-0.4-body.tex}
\DeclareRelease{v0.4}{2012/12/20}{circuitikz-0.4-body.tex}
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex
index 4978311dca..626ed28812 100644
--- a/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex
@@ -3696,9 +3696,9 @@
\pgf@circuit@fulldiodefalse
\ctikzset{diode/.is choice}
-\ctikzset{diode/empty/.code = \pgf@circuit@fulldiodefalse\pgf@circuit@strokediodefalse}%default
-\ctikzset{diode/full/.code = \pgf@circuit@fulldiodetrue }
-\ctikzset{diode/stroke/.code = \pgf@circuit@strokediodetrue}
+\ctikzset{diode/empty/.code = \pgf@circuit@fulldiodefalse\pgf@circuit@strokediodefalse}%default
+\ctikzset{diode/full/.code = \pgf@circuit@fulldiodetrue\pgf@circuit@strokediodefalse}
+\ctikzset{diode/stroke/.code = \pgf@circuit@fulldiodefalse\pgf@circuit@strokediodetrue}
\tikzset{full diodes/.style = { \circuitikzbasekey/diode = full}}
\tikzset{empty diodes/.style = { \circuitikzbasekey/diode = empty}}
@@ -6977,7 +6977,7 @@
\ctikzset{bipoles/tlmic/width/.initial=.5}% it MUST be mic width *5/8
\ctikzset{bipoles/mic/bar thickness/.initial=1}
-% arresters, fuses, lamps, etc
+% arresters, fuses, relais, lamps, etc
\ctikzset{bipoles/european gas filled surge arrester/height/.initial=.30}
\ctikzset{bipoles/european gas filled surge arrester/width/.initial=.80}
@@ -6994,6 +6994,7 @@
\ctikzset{bipoles/afuse/height/.initial=.20}
\ctikzset{bipoles/afuse/width/.initial=.50}
\ctikzset{bipoles/lamp/height/.initial=.60}
+\ctikzset{bipoles/lamp/width/.initial=.60}
\ctikzset{bipoles/wfuse/height/.initial=.20}
\ctikzset{bipoles/wfuse/width/.initial=.50}
\ctikzset{bipoles/wfuse/shape/.initial=ocirc}
@@ -7001,9 +7002,22 @@
\ctikzset{bipoles/wfuse/dots/.is choice}
\ctikzset{bipoles/wfuse/dots/.is if=pgf@circ@wfuse@dots}
%
-\ctikzset{bipoles/lamp/width/.initial=.60}
+\ctikzset{bipoles/relais/height/.initial=.8}
+\ctikzset{bipoles/relais/width/.initial=.3}
+%
\ctikzset{bipoles/bulb/height/.initial=.8}
\ctikzset{bipoles/bulb/width/.initial=.8}
+% suggested by @bogger33, see https://github.com/circuitikz/circuitikz/issues/793
+\ctikzset{bipoles/neonlampcc/height/.initial=.60}
+\ctikzset{bipoles/neonlampac/height/.initial=.60}
+\pgf@circ@declare@family@arrows{sparkgap}
+\newif\ifpgf@sparkgap@dot
+\newif\ifpgf@sparkgap@circle
+\ctikzset{sparkgap/circle/.is if=pgf@sparkgap@circle}
+\ctikzset{sparkgap/dot/.is if=pgf@sparkgap@dot}
+\ctikzset{sparkgap/gap/.initial=.05}
+\ctikzset{bipoles/sparkgap/height/.initial=.60}
+%
\ctikzset{bipoles/squid/height/.initial=.60}
\ctikzset{bipoles/squid/width/.initial=.60}
\ctikzset{bipoles/barrier/height/.initial=.60}
@@ -7233,6 +7247,25 @@
\pgfnode{\cshape}{center}{}{\thisshape-right}{\pgfusepath{draw}}
\fi
}
+
+%% Relais
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/relais/height}}
+{relais}
+{\ctikzvalof{bipoles/relais/height}}
+{\ctikzvalof{bipoles/relais/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
%% SQUID added by Cor Molenaar 5 March 2010
\pgfcircdeclarebipolescaled{misc}
{}
@@ -7340,11 +7373,116 @@
\pgfsetbeveljoin
\pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
\pgfusepath{draw}
-}% %>>>
+}%
+% neon lamps, suggested by @bogger33 https://github.com/circuitikz/circuitikz/issues/793
+% implemented by Romano
+% double-cathode (capacitor) style
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/neonlampcc/height}}
+{neonlampcc}
+{\ctikzvalof{bipoles/neonlampcc/height}}
+{\ctikzvalof{bipoles/neonlampcc/height}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ %% leads in
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \def\@@w{0.2}\def\@@h{0.6}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\@@w\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\@@w\pgf@circ@res@right}{0pt}}
+ %% "capacitor style" symbol
+ \pgfusepath{draw}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\@@w\pgf@circ@res@right}{\@@h\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\@@w\pgf@circ@res@right}{\@@h\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\@@w\pgf@circ@res@left}{\@@h\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\@@w\pgf@circ@res@left}{\@@h\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ %% dot
+ \pgftransformshift{\pgfpoint{\@@w\pgf@circ@res@left-3*\ctikzvalof{nodes width}\pgf@circ@Rlen}
+ {\@@h\pgf@circ@res@down + 2*\ctikzvalof{nodes width}\pgf@circ@Rlen}}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{draw,fill}}
+}
+% anode-cathode style
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/neonlampac/height}}
+{neonlampac}
+{\ctikzvalof{bipoles/neonlampac/height}}
+{\ctikzvalof{bipoles/neonlampac/height}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ %% leads in
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \def\@@w{0.5}\def\@@h{0.5}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\@@w\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\@@w\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ %% one terminal is a straight plate
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\@@w\pgf@circ@res@left}{\@@h\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\@@w\pgf@circ@res@left}{\@@h\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ %% the other is an "ocirc" shape
+ \pgftransformshift{\pgfpoint{\@@w\pgf@circ@res@right}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw,fill}}
+ %% dot
+ \pgftransformshift{\pgfpoint{-\@@w\pgf@circ@res@right}{\@@h\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{draw,fill}}
+}
+% spark gap, suggested by @bogger33 https://github.com/circuitikz/circuitikz/issues/800
+\pgfcircdeclarebipolescaled{misc}
+{
+ \savedmacro{\changeh}{\edef\changeh{\ifpgf@sparkgap@circle 1 \else 0.5 \fi}}
+ \pgfcirc@border@extend@updown{\changeh}{\changeh}
+}
+{\ctikzvalof{bipoles/sparkgap/height}}
+{sparkgap}
+{\ctikzvalof{bipoles/sparkgap/height}}
+{\ctikzvalof{bipoles/sparkgap/height}}{
+ % circle (if requested)
+ \pgfscope
+ \ifpgf@sparkgap@circle
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpointorigin}{\pgf@circ@res@up}
+ \pgf@circ@draworfill
+ \fi
+ \endpgfscope
+ % arrows
+ \pgfscope
+ \pgfcirc@set@arrows{sparkgap}{}{Triangle[scale=2]}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{sparkgap/gap}\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{sparkgap/gap}\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope{}
+ % dot (if requested)
+ \ifpgf@sparkgap@dot
+ \pgftransformshift{\pgfpoint
+ {\ctikzvalof{sparkgap/gap}\pgf@circ@res@left-1*\ctikzvalof{nodes width}\pgf@circ@Rlen}
+ {-4*\ctikzvalof{nodes width}\pgf@circ@Rlen}}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{draw,fill}}
+ \fi
+}
+
+%>>>
%% Path definitions for Miscellaneous%<<<
\pgfcirc@activate@bipole@simple{l}{lamp}
+\pgfcirc@activate@bipole@simple{l}{neonlampcc}
+\pgfcirc@activate@bipole@simple{l}{neonlampac}
+\pgfcirc@activate@bipole@simple{l}{sparkgap}
\pgfcirc@activate@bipole@simple{l}{bulb}
\pgfcirc@activate@bipole@simple{l}{squid}
\pgfcirc@activate@bipole@simple{l}{barrier}
@@ -7355,6 +7493,7 @@
\pgfcirc@style@to@style{asymmetric fuse}{afuse}
\pgfcirc@activate@bipole@simple{l}{wfuse}
\pgfcirc@activate@bipole{l}{wfuse}{wfuse}{wiggly fuse}
+\pgfcirc@activate@bipole@simple{l}{relais}
\def\pgf@circ@gfsurgearrester@path#1{\ifpgf@circuit@europeangfsurgearrester\pgf@circ@europeangfsurgearrester@path{#1}\else\pgf@circ@americangfsurgearrester@path{#1}\fi}
\pgfcirc@activate@bipole{l}{europeangfsurgearrester}{european gas filled surge arrester}{european gas filled surge arrester}
\pgfcirc@activate@bipole{l}{americangfsurgearrester}{american gas filled surge arrester}{american gas filled surge arrester}
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcirctripoles.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcirctripoles.tex
index 7457dabb46..d8d089dd92 100644
--- a/graphics/pgf/contrib/circuitikz/tex/pgfcirctripoles.tex
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcirctripoles.tex
@@ -4025,6 +4025,8 @@
\pgfmathsetmacro{\@@BDscale}{\ctikzvalof{tripoles/#1/bodydiode scale}* \ctikzvalof{\ctikzclass/scale}/\ctikzvalof{diodes/scale}}
\pgftransformscale{\@@BDscale}
\ifpgf@circuit@fulldiode
+ % I'm not sure why this is needed, but...
+ \pgf@circ@maybe@color{transistor bodydiode/color}
\pgfnode{fulldiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
\else
\pgfnode{emptydiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
@@ -8613,6 +8615,11 @@
\pgf@y=\pgf@circ@res@up\advance\pgf@y by -\pgf@circ@res@right
\fi
}
+ \savedmacro{\tubes@filament@angle}{\edef\tubes@filament@angle{\ctikzvalof{tubes/filament angle}}}
+ \savedmacro{\tubes@filament@distance}{\edef\tubes@filament@distance{\ctikzvalof{tubes/filament distance}}}
+ \savedmacro{\tubes@tube@radius}{\edef\tubes@tube@radius{\ctikzvalof{tubes/tube radius}}}
+ \savedmacro{\tubes@cathode@width}{\edef\tubes@cathode@width{\ctikzvalof{tubes/cathode width}}}
+ \savedmacro{\tubes@cathode@distance}{\edef\tubes@cathode@distance{\ctikzvalof{tubes/cathode distance}}}
\anchor{tube ne}{\tubene}
\anchor{tubesq ne}{\tubesquarene}
% tube shape anchors: geo
@@ -8647,30 +8654,37 @@
\anchor{cathode}{%
\northwest
\pgf@y=-\pgf@y
- \pgf@x=\ctikzvalof{tubes/cathode width}\pgf@x
+ \pgf@x=\tubes@cathode@width\pgf@x
}
\anchor{cathode 1}{%
\northwest
\pgf@y=-\pgf@y
- \pgf@x=\ctikzvalof{tubes/cathode width}\pgf@x
+ \pgf@x=\tubes@cathode@width\pgf@x
}
\anchor{cathode 2}{%
\northwest
\pgf@y=-\pgf@y
- \pgf@x=-\ctikzvalof{tubes/cathode width}\pgf@x
+ \pgf@x=-\tubes@cathode@width\pgf@x
}
\anchor{filament 1}{%
\northwest
- \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})}
+ \pgfmathparse{(\tubes@tube@radius*sin(\tubes@filament@angle)}
\pgf@x=\pgfmathresult\pgf@x
\pgf@y=-\pgf@y
}
\anchor{filament 2}{%
\northwest
- \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})}
+ \pgfmathparse{(\tubes@tube@radius*sin(\tubes@filament@angle)}
\pgf@x=-\pgfmathresult\pgf@x
\pgf@y=-\pgf@y
}
+ \anchor{filament center}{%
+ \northwest
+ \pgf@ya=0.5\pgf@y
+ \pgf@ya=-\tubes@cathode@distance\pgf@y
+ \advance\pgf@ya by -\tubes@filament@distance\pgf@y
+ \pgf@x=0pt\pgf@y=\pgf@ya
+ }
% Extra anchors
#2%
diff --git a/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex b/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex
index a738c664ea..4e4861071f 100644
--- a/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex
+++ b/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex
@@ -16,8 +16,8 @@
\startmodule[circuitikz]
\usemodule[tikz]
-\def\pgfcircversion{1.6.8}
-\def\pgfcircversiondate{2024/05/05}
+\def\pgfcircversion{1.6.9}
+\def\pgfcircversiondate{2024/05/25}
\writestatus{loading}{\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion}
diff --git a/graphics/pgf/contrib/pgfgantt/README b/graphics/pgf/contrib/pgfgantt/README
index b46f25054c..017c065fc6 100644
--- a/graphics/pgf/contrib/pgfgantt/README
+++ b/graphics/pgf/contrib/pgfgantt/README
@@ -1,19 +1,22 @@
-The pgfgantt package v5.0
+The pgfgantt package v5.0a
------------------------------------------------------------------------------
This package is released under the LaTeX Project Public License v1.3c or later
-(see http://www.latex-project.org/lppl.txt).
+(see https://www.latex-project.org/lppl.txt).
The pgfgantt package provides the ganttchart environment, which
draws a Gantt chart within a TikZ picture. The user may add various
-elements to the chart, for example, titles, bars, groups, milestones and different
-links between these elements. The appearance of the chart elements
+elements to the chart, for example, titles, bars, groups, milestones and
+different links between these elements. The appearance of the chart elements
is highly customizable, and even new chart elements may be defined.
-The package makes use of pgf/TikZ (http://tug.ctan.org/pkg/pgf).
+The package requires pgf/TikZ (https://ctan.org/pkg/pgf).
Installation: Run pgfgantt.ins through LaTeX and follow the instructions.
+This package is unmaintained. If you want to volunteer to take over
+the maintenance, contact me at https://wolfgang.esser-skala.at/contact/ .
+
--
-Wolfgang Skala
-10th January 2018
+Wolfgang Esser-Skala
+2024-06-19
diff --git a/graphics/pgf/contrib/pgfgantt/pgfgantt-doc.pdf b/graphics/pgf/contrib/pgfgantt/pgfgantt-doc.pdf
new file mode 100644
index 0000000000..62c09d84c7
--- /dev/null
+++ b/graphics/pgf/contrib/pgfgantt/pgfgantt-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgfgantt/pgfgantt.dtx b/graphics/pgf/contrib/pgfgantt/pgfgantt.dtx
index 7bb4d52138..e734668f59 100644
--- a/graphics/pgf/contrib/pgfgantt/pgfgantt.dtx
+++ b/graphics/pgf/contrib/pgfgantt/pgfgantt.dtx
@@ -1,19 +1,19 @@
% \iffalse meta-comment
%
-% Copyright (C) 2018 by Wolfgang Skala
+% Copyright (C) 2024 by Wolfgang Esser-Skala
%
% 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
+% https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2008/05/04 or later.
%
% \fi
%
% \iffalse
-%<pgfgantt>\ProvidesPackage{pgfgantt}[2018/01/10 v5.0 Draw Gantt diagrams with TikZ]
+%<pgfgantt>\ProvidesPackage{pgfgantt}[2024/06/19 v5.0a Draw Gantt diagrams with TikZ]
%<pgfgantt>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%
%<*driver>
@@ -181,30 +181,10 @@
\ignorespaces}
\let\endoption\endmacro
\let\endintmacro\endmacro
-\renewenvironment{theglossary}{\glossary@prologue\GlossaryParms\let\item\@idxitem\ignorespaces}{}
\makeatother
\AtBeginDocument{\lstMakeShortInline|}
-\begingroup
- \makeatletter
- \def\x\begingroup#1\@nil{%
- \endgroup
- \def\DoNotIndex{%
- \begingroup
- \@makeother\#%
- \@makeother\$%
- \@makeother\%%
- \@makeother\^%
- \@makeother\_%
- \@makeother\~%
- \@makeother\ %
- \@makeother\&%
- #1%
- }%
- }%
-\expandafter\x\DoNotIndex\@nil
-
\usepackage[
hyperfootnotes=false,
bookmarksnumbered,%
@@ -237,27 +217,13 @@
\def\TikZ{Ti\textit{k}Z}
\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
-\def\GlossaryParms{%
- \def\pfill##1{}
- \parindent 0pt
- \parskip 0pt plus 1pt
- \small\raggedright
- \def\@idxitem{\par\hangindent 30pt}%
- \def\subitem{\@idxitem\hspace*{15pt}}%
- \def\subsubitem{\@idxitem\hspace*{25pt}}%
- \def\indexspace{\par\vspace{10pt plus 2pt minus 3pt}}%
-}
-
\usepackage{pgfgantt}
\usetikzlibrary{shadows,shadings,decorations.pathmorphing,shapes.misc}
\EnableCrossrefs
\CodelineIndex
-\RecordChanges
\IndexPrologue{\clearpage\section{Index}\markboth{Index}{Index}Bold numbers refer to the page where the corresponding entry is described; italic numbers refer to the code line of the definition; upright numbers refer to the code lines where the entry is used.}
-\GlossaryPrologue{\clearpage\section{Change History}\markboth{Change history}{Change history}}
-
\setkomafont{title}{\rmfamily\bfseries}
\addtokomafont{sectioning}{\rmfamily}
@@ -270,34 +236,15 @@
%</driver>
% \fi
%
-% \CheckSum{2245}
-%
-% \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 \~}
-%
-%
% \GetFileInfo{pgfgantt.sty}
%
% \DoNotIndex{\@auxout,\@empty,\@firstoftwo,\@ifundefined,\@namedef,\@nameuse,\@tempa,\@tempb,\@tempc,\@tempcnta,\@tempcntb,\@tempdima,\advance,\anchor,\backgroundpath,\begin,\begingroup,\bfseries,\breakforeach,\clip,\csname,\def,\divide,\draw,\edef,\else,\end,\endcsname,\endgroup,\expandafter,\fi,\foreach,\global,\i,\ifcase,\ifdate,\ifdim,\ifnum,\ifx,\inheritanchor,\inheritanchorborder,\inheritbackgroundpath,\inheritsavedanchors,\itshape,\kernel@ifnextchar,\let,\multiply,\newcommand,\newcount,\newenvironment,\newif,\node,\normalcolor,\normalfont,\normalsize,\northeast,\outernortheast,\PackageError,\PackageWarning,\path,\pgf@process,\pgf@x,\pgf@y,\pgf@xa,\pgf@xb,\pgf@xc,\pgf@ya,\pgf@yb,\pgf@yc,\pgfcalendar,\pgfcalendarbeginjulian,\pgfcalendarcurrentday,\pgfcalendarcurrentjulian,\pgfcalendarcurrentmonth,\pgfcalendarcurrentweekday,\pgfcalendarcurrentyear,\pgfcalendardatetojulian,\pgfcalendarendiso,\pgfcalendarifdateday,\pgfcalendarifdatemonth,\pgfcalendarifdateyear,\pgfcalendarjuliantodate,\pgfcalendarmatchestrue,\pgfdeclareshape,\pgfextractx,\pgfkeys,\pgfkeyscurrentname,\pgfkeyssetvalue,\pgfkeysvalueof,\pgfmathparse,\pgfmathprintnumber,\pgfmathresult,\pgfmathsetlength,\pgfmathsetmacro,\pgfpathclose,\pgfpathlineto,\pgfpathmoveto,\pgfpoint,\pgfpointadd,\pgfpointanchor,\pgfpointdiff,\pgfpointscale,\pgfqkeys,\protected@write,\relax,\RequirePackage,\savedanchor,\scriptsize,\setcounter,\small,\southwest,\stepcounter,\string,\strut,\t,\the,\tikz@align@newline,\usetikzlibrary,\value,\x,\xdef}
%
-%
+%
% \title{Drawing Gantt Charts in \LaTeX\\with \TikZ}
% \subtitle{The \texttt{pgfgantt} Package}
-% \author{Wolfgang Skala\thanks{Department of Biosciences, University of Salzburg, Austria; \texttt{Wolfgang.Skala@sbg.ac.at}}}
-% \date{\fileversion\\\filedate}
+% \author{\texorpdfstring{Wolfgang Esser-Skala\thanks{Computational Systems Biology Group, Department of Biosciences and Medical Biology, University of Salzburg, Austria; \texttt{Wolfgang.Esser-Skala@plus.ac.at}}}{Wolfgang Esser-Skala}}
+% \date{\fileversion\\\filedate}
% \maketitle
%
% \begin{abstract}
@@ -305,72 +252,13 @@
% \end{abstract}
%
% \clearpage\tableofcontents
-% \changes{v5.0}{2018/01/10}{\cs{gantttitlecalendar} now recognizes the \texttt{decade} key.}
-% \changes{v5.0}{2018/01/10}{Key \texttt{compress calendar} has been replaced by \texttt{time slot unit} to allow an additional level of compression (year).}
-% \changes{v5.0}{2018/01/10}{The command \cs{ganttvrule} allows to draw general vertical rules (similar to the today rule). The keys \texttt{vrule}, \texttt{vrule offset}, \texttt{vrule label font} and \texttt{vrule label text} configure those rules.}
-% \changes{v5.0}{2018/01/10}{The key \texttt{expand chart} was added, which specifies that a chart should expand horizontally to a given dimension.}
-% \changes{v5.0}{2018/01/10}{The key \texttt{title label text} was added to allow fine-tuning of title label formatting.}
-% \changes{v5.0}{2018/01/10}{Made \pack{pgfgantt} robust to \pack{amsgen}'s redefinition of \cs{@ifstar}.}
-% \changes{v4.0}{2013/06/01}{The key \texttt{link label anchor} was renamed to \texttt{link label node}.}
-% \changes{v4.0}{2013/06/01}{\cs{newganttchartelement} defines completely new chart elements.}
-% \changes{v4.0}{2013/06/01}{The key \texttt{progress label anchor} was replaced by \texttt{bar}/\texttt{group}/\texttt{milestone progress label node}.}
-% \changes{v4.0}{2013/06/01}{The keys \texttt{bar}/\texttt{group}/\texttt{milestone progress label anchor} were added.}
-% \changes{v4.0}{2013/06/01}{The key \texttt{progress label font} was replaced by the keys \texttt{bar}/\texttt{group}/\texttt{milestone progress label font}.}
-% \changes{v4.0}{2013/06/01}{The key \texttt{incomplete} was removed.}
-% \changes{v4.0}{2013/06/01}{The keys \texttt{group right}/\texttt{left peak} and \texttt{group peaks} were replaced by \texttt{group right}/\texttt{left peak tip position}, \texttt{group peaks tip position}, \texttt{group right}/\texttt{left peak width}, \texttt{group peaks width}, \texttt{group right}/\texttt{left peak height} and \texttt{group peaks height}.}
-% \changes{v4.0}{2013/06/01}{Chart elements are now nodes, so the corresponding styles must specify a node shape.}
-% \changes{v4.0}{2013/06/01}{The key \texttt{time slot modifier} was renamed to \texttt{chart element start border}.}
-% \changes{v4.0}{2013/06/01}{The keys \texttt{bar}/\texttt{group}/\texttt{milestone label inline anchor} were renamed to \texttt{bar}/\texttt{group}/\texttt{milestone inline label node}.}
-% \changes{v4.0}{2013/06/01}{The keys \texttt{bar}/\texttt{group}/\texttt{milestone label shape anchor} were renamed to \texttt{bar}/\texttt{group}/\texttt{milestone inline label anchor}.}
-% \changes{v4.0}{2013/06/01}{The keys \texttt{bar}/\texttt{group}/\texttt{milestone label anchor} were renamed to \texttt{bar}/\texttt{group}/\texttt{milestone label node}.}
-% \changes{v4.0}{2013/06/01}{The key \texttt{title label anchor} was renamed to \texttt{title label node}.}
-% \changes{v4.0}{2013/06/01}{\cs{gantttitlecalendar} prints a title calendar.}
-% \changes{v4.0}{2013/06/01}{The keys \texttt{calendar week text} and \texttt{compress calendar} were added.}
-% \changes{v4.0}{2013/06/01}{The key \texttt{newline shortcut} determines whether the shortcut for line breaks is defined in the chart. In this case, \cs{ganttalignnewline} allows line breaks in the node text.}
-% \changes{v4.0}{2013/06/01}{The keys \texttt{today offset}, \texttt{today label font} and \texttt{today label node} were added.}
-% \changes{v4.0}{2013/06/01}{The key \texttt{today} accepts a time slot specifier.}
-% \changes{v4.0}{2013/06/01}{The canvas is now a node with shape \texttt{rectangle} by default.}
-% \changes{v4.0}{2013/06/01}{\cs{newgantttimeslotformat} allows the user to define custom time slot formats.}
-% \changes{v4.0}{2013/06/01}{The key \texttt{time slot format/start date} specifies the internal date representation of digit 1 in the \texttt{simple} time slot format.}
-% \changes{v4.0}{2013/06/01}{The key \texttt{time slot format/base century} provides the century for autocompletion of two-digit years.}
-% \changes{v4.0}{2013/06/01}{The key \texttt{time slot format} changes the format of time slot specifiers.}
-% \changes{v4.0}{2013/06/01}{The \texttt{ganttchart} environment now requires two mandatory arguments.}
-%
-% \changes{v3.0}{2012/01/25}{\cs{setganttlinklabel} specifies the label for all links of a certain type. The \texttt{link label} key locally overrides any label set by this command.}
-% \changes{v3.0}{2012/01/25}{The \texttt{chart element} shape supports four additional anchors (\texttt{on left}, \texttt{on top}, \texttt{on right} and \texttt{on bottom}).}
-% \changes{v3.0}{2012/01/25}{\cs{@gtt@get} has been renamed to \cs{ganttvalueof} to provide a convenient access for link type authors.}
-% \changes{v3.0}{2012/01/25}{\cs{@gtt@keydef} and \cs{@gtt@stylekeydef} have been rewritten to support \texttt{pgfkey}'s abilities to store key values.}
-% \changes{v3.0}{2012/01/25}{New auxiliary macros for \cs{newganttlinkstyle}: \cs{xLeft}, \cs{xRight}, \cs{yUpper}, \cs{yLower}, \cs{ganttsetstartanchor}, \cs{ganttsetendanchor} and \cs{ganttlinklabel}.}
-% \changes{v3.0}{2012/01/25}{Completely rewrote the code for links (again). Definition of new link types is now possible (via \cs{newganttlinktype} and \cs{newganttlinktypealias}).}
-% \changes{v3.0}{2012/01/25}{The \texttt{bar/group/milestone label shape anchor} keys allow for a fine-tuned placement of chart element labels.}
-% \changes{v3.0}{2012/01/25}{All style keys (\texttt{canvas}, \texttt{bar} etc.) only support the common \TikZ\ style key syntax.}
-% \changes{v2.1}{2011/11/10}{The \texttt{inline} key moves labels close to their respective chart elements.}
-% \changes{v2.1}{2011/11/10}{Added three keys (\texttt{bar/group/milestone label inline anchor}) for placing inline labels.}
-% \changes{v2.1}{2011/11/10}{The \texttt{ganttchart} environment may be used outside a \texttt{tikzpicture}.}
-% \changes{v2.0}{2011/10/10}{The syntax of \cs{ganttlink} was completely changed. The command now takes one optional and \textit{two} mandatory arguments. The latter specify the name of the chart elements to be linked. Consequently, the keys \texttt{b-b}, \texttt{b-m}, \texttt{m-b} and \texttt{m-m} were removed. The keys \texttt{s-s}, \texttt{s-f}, \texttt{f-s} and \texttt{f-f} are now values for the \texttt{link type} key.}
-% \changes{v2.0}{2011/10/10}{The optional argument of \cs{ganttnewline} now also accepts a style.}
-% \changes{v2.0}{2011/10/10}{Removed the \texttt{hgrid shift} and \texttt{last line height} keys.}
-% \changes{v2.0}{2011/10/10}{Removed the \texttt{vgrid lines list} key, as its behaviour can be simulated by an appropriate \meta{style list} for \texttt{vgrid}.}
-% \changes{v2.0}{2011/10/10}{Added style lists for the horizontal and vertical grid.}
-% \changes{v2.0}{2011/10/10}{Removed the \texttt{vgrid style} key.}
-% \changes{v2.0}{2011/10/10}{Completely rewrote the calculation of coordinates.}
-% \changes{v2.0}{2011/10/10}{The \texttt{x unit}, \texttt{y unit title} and \texttt{y unit chart} keys specify the width of time slots and the height of title or chart lines, respectively. Thus, one can draw titles whose height differs from the rest of the chart. Furthermore, the $x$- and $y$-dimensions of the chart are independent of the dimensions of the surrounding \texttt{tikzpicture}.}
-% \changes{v1.1}{2011/04/18}{\texttt{link tolerance} decides whether a five- or a three-part link is drawn.}
-% \changes{v1.1}{2011/04/18}{\texttt{milestone label text} configures the text of a milestone label.}
-% \changes{v1.1}{2011/04/18}{\texttt{bar label text} configures the text of a bar label.}
-% \changes{v1.1}{2011/04/18}{The \texttt{time slot modifier} key has been added. If set to zero, all $x$-coordinates are interpreted as given, without regarding them as time slots.}
-% \changes{v1.1}{2011/04/18}{The \texttt{vgrid lines list} key determines the number of vertical grid lines drawn.}
-% \changes{v1.1}{2011/04/18}{The introduction clarifies what I mean by ``a current \textsc{pgf} installation''.}
-% \changes{v1.1}{2011/04/18}{\texttt{group label text} configures the text of a group label.}
-% \changes{v1.0}{2011/03/01}{Initial release}
-%
%
% \clearpage\section{Introduction}
%
-% The \pack{pgfgantt} package allows you to draw Gantt charts in \LaTeX. Thus, you can describe simple project schedules without having to include images produced by external programs. Similar to Martin Kumm's \pack{gantt} package\footnote{\url{http://www.martin-kumm.de/tex_gantt_package.php}} (which inspired \pack{pgfgantt}'s fundamental aspects), \pack{pgfgantt} bases upon \textsc{pgf} and its \TikZ\ frontend\footnote{\url{http://ctan.org/tex-archive/graphics/pgf/}}. Besides, it provides a comprehensive (and portable) alternative to \pack{pst-gantt}\footnote{\url{http://ctan.org/tex-archive/graphics/pstricks/contrib/pst-gantt/}}.
+% The \pack{pgfgantt} package allows you to draw Gantt charts in \LaTeX. Thus, you can describe simple project schedules without having to include images produced by external programs. Similar to Martin Kumm's \pack{gantt} package\footnote{\url{https://www.martin-kumm.de/tex_gantt_package.php}} (which inspired \pack{pgfgantt}'s fundamental aspects), \pack{pgfgantt} bases upon \textsc{pgf} and its \TikZ\ frontend\footnote{\url{https://ctan.org/pkg/pgf/}}. Besides, it provides a comprehensive (and portable) alternative to \pack{pst-gantt}\footnote{\url{https://ctan.org/pkg/pst-gantt/}}.
%
% \paragraph{Requirements} \pack{pgfgantt} requires a \textit{current} \textsc{pgf} installation. Note that the version number must at least be 2.10, dated October 25th, 2010. Furthermore, \pack{pgfgantt}~\fileversion\ and above is not fully downwards compatible.
-%
+%
% \paragraph{Suggestions} Please report any suggestions and improvements at the project's GitHub page (\url{https://github.com/skafdasschaf/latex-pgfgantt}).
%
% \paragraph{Acknowledgements} I would like to thank the following people for their ideas concerning new features:
@@ -425,7 +313,7 @@
% \end{ganttchart}
% \end{center}
%
-%
+%
% \subsection{Specifying Keys}
%
% \textit{Keys} (sometimes called \textit{options}) modify the output from \pack{pgfgantt}'s commands. You may specify a key in two ways: (1) Pass it to the optional argument present in each command, e.\,g.
@@ -439,7 +327,7 @@
% Since \pack{pgfgantt} uses the \pack{pgfkeys} package for key management, all its keys reside in the |/pgfgantt/| path. However, if you set your keys by one of the methods explained above, this path is automatically prepended to each key.
%
% \subsection{The Canvas}
-%
+%
% Let us have a look at the basic anatomy of a Gantt chart and define some common terms. Each \textit{chart} consists of several \textit{lines}, which may contain one or more \textit{title elements} (at the top) or \textit{chart elements} (such as bars, groups and milestones). From left to right, the chart is divided into an integer number of \textit{time slots} that represent the basic $x$-unit.
%
% The \DescribeEnv{ganttchart}|ganttchart| environment draws a single Gantt chart:
@@ -449,7 +337,7 @@
% \end{ganttchart}
% \end{texcode}
% The environment has one optional argument, which specifies the \meta{options} for the chart, and two mandatory arguments, which indicate the start and end time slot specifier. Although you will often put a |ganttchart| into a |tikzpicture| environment, you may actually use this environment on its own. \pack{pgfgantt} checks whether a chart is surrounded by a |tikzpicture| and adds this environment if necessary.
-%
+%
% \begin{key}{time slot format}{\meta{format}}{simple}
% Sets the \meta{format} of time slot specifiers. A \textbf{time slot specifier} (abbreviated ``tss'') denotes a certain time slot along the horizontal axis. \pack{pgfgantt} defines a range of formats:
% \begin{itemize}
@@ -469,23 +357,23 @@
% \textit{Examples:} \texttt{2013-03-14}, \texttt{13/03/14}, \texttt{2013.3.14}
% \end{itemize}
% \end{key}
-%
+%
% \noindent Two subkeys of \opt{time slot format} let you configure \pack{pgfgantt}'s behavior regarding automatic completion of abbreviated dates:
-%
+%
% \begin{key}{time slot format/base century}{\meta{year}}{2000}
% Sets the century for auto-completion of two-digit years (used by the time slot formats \texttt{little-endian}, \texttt{middle-endian} and \texttt{big-endian}). Consequently, default settings convert a year like \texttt{13} to \texttt{2013}.
% \end{key}
-%
+%
% \begin{key}{time slot format/start date}{\meta{ISO-standard date}}{2000-01-01}
% Numbers denoting time slots in the \texttt{simple} format are internally converted to a date, where \texttt{1} is converted to \meta{ISO-standard date}, \texttt{2} to $\meta{ISO-standard date} + 1$ etc.
% \end{key}
-%
+%
% \bigskip\noindent Advanced users may add their own time slot \DescribeMacro{\newgantttimeslotformat}formats:
% \begin{texcode}
% \newgantttimeslotformat`\marg{name}\marg{converter code}'
% \end{texcode}
% Defines a new time slot format called \meta{name}. The \meta{converter code} must convert the time slot specifier stored in |#1| to its corresponding Julian day number (see section~57 of the \TikZ\ manual) and assign this number to the count register |#2|. The \meta{converter code} is executed within a \TeX\ group, so you may use temporary macros like |\@tempa|, counts like |\@tempcnta| etc.
-%
+%
% For example, we would like to create a format called \texttt{stardate}, where dates are given as ``\meta{year}\texttt{.}\meta{day of year}''. Thus, we will enter 24th February 2259 as ``\texttt{2259.55}''. To this end, we write the following code:
% \par\bigskip\noindent
% \begin{texcode}[numbers=left]
@@ -498,10 +386,10 @@
% \advance#2 by-1\relax%
% \advance#2 by\stardateday\relax%
% }
-%
+%
% \begin{ganttchart}[
% hgrid,
-% vgrid,
+% vgrid,
% time slot format=stardate
% ]{2259.55}{2259.67}
% \gantttitlecalendar{year, month=name, day} \\
@@ -517,18 +405,18 @@
% \advance#2 by-1\relax%
% \advance#2 by\stardateday\relax%
% }
-%
+%
% \begin{ganttchart}[
% hgrid,
-% vgrid,
+% vgrid,
% time slot format=stardate
% ]{2259.55}{2259.67}
% \gantttitlecalendar{year, month=name, day} \\
% \end{ganttchart}
% \end{center}
-%
+%
% \noindent The macro |\decomposestardate| (lines 2--4) has two delimited arguments: The first one is delimited by a period and the second one by |\relax|. The call in line 5 decomposes the tss stored in |#1| and saves the day in |\stardateday| and the year in |\stardateyear|. |\pgfcalendardatetojulian| (section~57.1.1 of the \TikZ\ manual) calculates the Julian date of the first day of |\stardateyear| and stores it in |#2| (line 6). We then subtract 1 from |#2| (line 7) and add the |\stardateday| (line 8).
-%
+%
% \begin{key}[./style=]{canvas}{\meta{style}}{shape=rectangle, draw, fill=white}
% The \opt{canvas} key changes the appearance of the canvas. \meta{style} is a list of \TikZ\ keys suitable for the \meta{options} of a \TikZ\ node (such as |shape=rectangle|, |fill| or |draw|; see chapter~16 of the \TikZ\ manual). By default, the canvas is a white rectangle with a black frame.
% \par\bigskip\noindent
@@ -617,9 +505,9 @@
% \opt{hgrid} draws a horizontal grid which starts immediately below the last title element. The key can be specified in four different ways: Firstly, \opt{hgrid}|=false| eliminates the horizontal grid. You may omit this declaration, since it is the default. Secondly, both \opt{hgrid} and \opt{hgrid}|=true| activate the horizontal grid, which is then drawn in the default style |dotted|. Finally, \opt{hgrid}|=|\meta{style list} draws the horizontal grid in the given \meta{style list} (see below).
%
% \opt{hgrid style} changes the style of single horizontal grid lines that are drawn with |\ganttnewline[grid]| (see section~\ref{ssc:LineBreaks}).
-%
+%
% The \opt{vgrid} key governs the vertical grid; otherwise, use it exactly like \opt{hgrid}.
-%
+%
% \textit{Style lists} allow you to draw the grid lines in different styles. Each style list consists of several \textit{style list items} separated by a comma. A style list item has the general syntax |*{|\meta{n}|}{|\meta{style}|}| and orders the package to repeat the \meta{style} \meta{n}-times. (This syntax is reminiscent of column specifications in a |tabular| environment.) Thus, the list |*2{red}, *1{green}, *{10}{blue, dashed}| instructs \pack{pgfgantt} to draw first two red vertical grid lines, then a green one and finally ten dashed blue lines. If any grid lines remain to be drawn at the end of the list, the package starts again at the beginning of the list.
% \par\bigskip\noindent
% \begin{texcode}
@@ -642,7 +530,7 @@
% \ganttbar{}{9}{20}
% \end{ganttchart}
% \end{center}
-%
+%
% In most situations, you can omit the multiplier |*1|. Hence, the following style lists are equal:\\
% |{*1{red}, *1{blue, dashed}}|\\
% |{{red}, {blue, dashed}}|\\
@@ -653,7 +541,7 @@
% \begin{minipage}[t]{.45\textwidth}
% \begin{texcode}
% % wrong code
-%
+%
% \begin{ganttchart}[
% hgrid=true,
% vgrid={{red, dotted}}
@@ -667,7 +555,7 @@
% \begin{minipage}[t]{.45\textwidth}
% \begin{texcode}
% % correct code
-%
+%
% \begin{ganttchart}[
% hgrid=true,
% vgrid={*1{red, dotted}}
@@ -717,7 +605,7 @@
% \end{ganttchart}
% \end{center}
% \end{key}
-%
+%
% \begin{key}{today}{\meta{tss}}{none}
% \keyline{today offset}{\meta{number}}{1}
% \keyline[/.style=]{today rule}{\meta{style}}{dashed, line width=1pt}
@@ -787,13 +675,13 @@
% \end{ganttchart}
% \end{center}
% \end{key}
-%
-%
+%
+%
% \subsection{Line Breaks between Chart Elements}
% \label{ssc:LineBreaks}
%
% \pack{pgfgantt} does not automatically begin a new line after finishing a \DescribeMacro{\ganttnewline}chart element. Instead, you must insert an explicit line break with |\ganttnewline|.
-%
+%
% \begin{key}{newline shortcut}{\meta{boolean}}{true}
% If true, \DescribeMacro{\\}|\\| is defined as a shortcut for |\ganttnewline| within a |ganttchart| environment, so that the syntax is reminiscent of \LaTeX's |tabular| enviroment.
% \par\bigskip\noindent
@@ -868,7 +756,7 @@
% }{1}{3}
% \end{ganttchart}
% \end{center}
-%
+%
% Even if you prefer a canvas without a horizontal grid, you may nevertheless want to separate certain lines by a grid rule. For this purpose, specify the optional argument |[grid]| for |\ganttnewline| (or |\\|), which draws a grid rule in \opt{hgrid style} between the current and the new line. Alternatively, directly give the desired style as optional argument.
% \par\bigskip\noindent
% \begin{texcode}
@@ -921,7 +809,7 @@
% \gantttitlelist`\oarg{options}\marg{pgffor list}\marg{length of each element}'
% \end{texcode}
% This macro generates one title element for each element of the \meta{pgffor list}. The second mandatory argument specifies the \meta{length of each element}. Refer to section~56 of the \TikZ\ manual for the detailed syntax for the \meta{pgffor list}.
-%
+%
% A simple application is to draw twelve title elements that contain the numbers from 1 to 12. The \meta{pgffor list} is |1,...,12|.
% \par\bigskip\noindent
% \begin{texcode}
@@ -942,9 +830,9 @@
% \begin{texcode}
% \gantttitle{1}{1} \gantttitle{2}{1} `\dots' \gantttitle{12}{1} \\
% \end{texcode}
-%
+%
% As an advanced example, we will draw seven title elements containing the names of the weekdays (``Mon'' to ``Sun''). To this end, we introduce an additional key:
-%
+%
% \begin{key}{title list options}{\meta{pgffor options}}{var=\string\x, evaluate=\string\x}
% Changes the \meta{pgffor options} of the |\foreach| command called by |\gantttitlelist| (see section~56 of the \TikZ\ manual). The macro that yields the labels to be printed by |\gantttitlelist| must be called |\x|.
% \par\bigskip\noindent\shorthandoff{"}
@@ -971,7 +859,7 @@
% \end{ganttchart}
% \end{center}\shorthandon{"}
% \end{key}
-%
+%
% \bigskip While you actually may build any chart title with the two commands described previously, \DescribeMacro{\gantttitlecalendar}|\gantttitlecalendar| saves a lot of time when you wish to create elaborate calendars:
% \begin{texcode}
% \gantttitlecalendar`\oarg{options}\marg{calendar lines}'
@@ -999,7 +887,7 @@
% \bottomrule
% \end{tabular}
% \end{center}
-%
+%
% The \meta{number} for the \texttt{week} line type is the number of the first week in the calendar.
% \par\bigskip\noindent
% \begin{texcode}
@@ -1024,16 +912,16 @@
% \ganttbar{}{2013-01-14}{2013-01-17}
% \end{ganttchart}\hspace*{-51.4pt}
% \end{center}
-%
+%
% You can easily add new output formats for \texttt{month} and \texttt{weekday}. The predefined ones use the macros described in section~57.1.3 of the \TikZ\ manual. For example, |weekday=name| calls |\pgfcalendarweekdayname|. Thus, new macros called |\pgfcalendarmonth|\textcolor{RoyalBlue}{\meta{output format}} or |\pgfcalendarweekday|\textcolor{RoyalBlue}{\meta{output format}} will provide additional \meta{output format}s for |month| and |weekday|, respectively.
-%
+%
% A weekday output format called |letter|, which displays a weekday as single letter, might be implemented as follows:
% \par\bigskip\noindent
% \begin{texcode}
% \def\pgfcalendarweekdayletter#1{%
% \ifcase#1M\or T\or W\or T\or F\or S\or S\fi%
% }
-%
+%
% \begin{ganttchart}[
% hgrid,
% vgrid,
@@ -1050,7 +938,7 @@
% \def\pgfcalendarweekdayletter#1{%
% \ifcase#1M\or T\or W\or T\or F\or S\or S\fi%
% }
-%
+%
% \begin{ganttchart}[
% hgrid,
% vgrid,
@@ -1063,7 +951,7 @@
% }
% \end{ganttchart}
% \end{center}
-%
+%
% \begin{key}{calendar week text}{\meta{format}}{Week\string~\string\currentweek}
% Changes the text displayed in a week title element. In \meta{format}, four additional macros are available: \DescribeMacro{\currentweek}|\currentweek| is the current week number; \DescribeMacro{\startyear}|\startyear|, \DescribeMacro{\startmonth}|\startmonth| and \DescribeMacro{\startday}|\startday| expand to the year, month and day of the current week's Monday.
% \par\bigskip\noindent
@@ -1100,7 +988,7 @@
% \end{ganttchart}
% \end{center}
% \end{key}
-%
+%
% \begin{key}{time slot unit}{\texttt{day}\space\textbar\space\texttt{month}\space\textbar\space\texttt{year}}{day}
% By default, one \textit{calendar day} is one time slot wide. With \opt{time slot unit}\texttt{=month}, one \textit{month} corresponds to one time slot. Consequently, in such calendars only |year| and |month| are sensible line types for |\gantttitlecalendar|, and the time slot format \texttt{isodate-yearmonth} is especially suited.
% \par\bigskip\noindent
@@ -1226,7 +1114,7 @@
% \end{ganttchart}
% \end{center}
% \end{key}
-%
+%
% \begin{key}{title left shift}{\meta{factor}}{0}
% \keyline{title right shift}{\meta{factor}}{0}
% \keyline{title top shift}{\meta{factor}}{0}
@@ -1394,7 +1282,7 @@
%
%
% \subsection{Predefined Chart Elements}
-%
+%
% \pack{pgfgantt} predefines three chart elements:
% \begin{enumerate}
% \item \DescribeMacro{\ganttbar}\textit{Bars} indicate the duration of a task or one of its parts.
@@ -1411,7 +1299,7 @@
% \end{texcode}
% \end{enumerate}
% Each of these macros draws a \meta{label}ed chart element from the \meta{start tss} to the \meta{end tss} (or at the given \meta{tss} in case of |\ganttmilestone|).
-%
+%
% \par\bigskip\noindent
% \begin{texcode}
% \begin{ganttchart}[vgrid, hgrid]{1}{12}
@@ -1443,7 +1331,7 @@
% \begin{minipage}[t]{.49\textwidth}
% \begin{texcode}
% % Short version
-%
+%
% \begin{ganttchart}[
% vgrid,
% hgrid
@@ -1459,7 +1347,7 @@
% \begin{minipage}[t]{.47\textwidth}
% \begin{texcode}
% % Long version
-%
+%
% \begin{ganttchart}[
% vgrid,
% hgrid
@@ -1475,7 +1363,7 @@
% \end{ganttchart}
% \end{texcode}
% \end{minipage}
-%
+%
% \begin{center}
% \begin{ganttchart}[
% vgrid,
@@ -1488,7 +1376,7 @@
% \ganttlinkedbar{Task 3}{7}{11}
% \end{ganttchart}
% \end{center}
-%
+%
% \begin{key}{chart element start border}{\texttt{left}\space\textbar\space\texttt{right}}{left}
% Determines which border of the start time slot a chart element touches. \texttt{left} is the behavior usually expected, while \texttt{right} strictly interprets the start time slot as an $x$-coordinate.
% \par\bigskip\noindent
@@ -1511,10 +1399,10 @@
% \end{ganttchart}
% \end{center}
% \end{key}
-%
-%
+%
+%
% \subsubsection{Options: Chart Element Appearance}
-%
+%
% The following options are similar for all predefined (and user-defined) chart elements:
%
% \begin{key}[/.style=]{bar}{\meta{style}}{shape=ganttbar, inner sep=0pt, draw, fill=white}
@@ -1558,9 +1446,9 @@
% \end{center}
% \end{key}
%
-%
+%
% \subsubsection{Options: Label Formatting}
-%
+%
% \begin{key}{bar label text}{\meta{text}}{\string\strut\#1}
% \keyline{group label text}{\meta{text}}{\string\strut\#1}
% \keyline{milestone label text}{\meta{text}}{\string\strut\#1}
@@ -1611,7 +1499,7 @@
% \end{ganttchart}
% \end{center}
% \end{key}
-%
+%
% \begin{key}{inline}{\meta{boolean}}{false}
% \keyline{bar inline label anchor}{\meta{anchor}}{center}
% \keyline{group inline label anchor}{\meta{anchor}}{center}
@@ -1650,10 +1538,10 @@
% \end{ganttchart}
% \end{center}
% \end{key}
-%
-%
+%
+%
% \subsubsection{Options: Chart Element Positioning}
-%
+%
% \begin{key}{bar left shift}{\meta{factor}}{0}
% \keyline{bar right shift}{\meta{factor}}{0}
% \keyline{bar top shift}{\meta{factor}}{.3}
@@ -1667,7 +1555,7 @@
% \keyline{milestone top shift}{\meta{factor}}{.3}
% \keyline{milestone height}{\meta{factor}}{.4}
% Shift the coordinates of a chart element's borders (\opt{\dots\ shift}) and change its height (\opt{\dots\ height}).
-%
+%
% \begin{center}
% \begin{tikzpicture}[x=.5cm, y=1cm]
% \begin{ganttchart}[vgrid, hgrid]{1}{8}
@@ -1701,7 +1589,7 @@
% \draw[-latex,teal] (8,-4.2) node[right] {End time slot (6)} -- (6,-3.8);
% \end{tikzpicture}
% \end{center}
-%
+%
% The three following figures illustrate the distances modified by these keys. The first figure shows a Gantt chart with a bar, two lines and one time slot.
% \begin{center}
% \begin{tikzpicture}[x=8cm, y=2cm]
@@ -1809,7 +1697,7 @@
% -- (.4,-.85);
% \end{tikzpicture}
% \end{center}
-%
+%
% \begin{key}{group right peak tip position}{\meta{fraction}}{0.5}
% \keyline{group right peak width}{\meta{factor}}{0.4}
% \keyline{group right peak height}{\meta{factor}}{0.1}
@@ -1820,7 +1708,7 @@
% \keyline{group peaks width}{\meta{factor}}{\textrm{(none)}}
% \keyline{group peaks height}{\meta{factor}}{\textrm{(none)}}
% Change the appearance of the peaks at both ends of a group. By default, both the left and right peak are 0.4~units wide and 0.1~units high, their tips lie between the peak sides. The \opt{group peaks \dots} keys set the dimensions for both peaks simultaneously. The figure below exemplifies the keys that apply to the left peak.
-%
+%
% \begin{center}
% \begin{tikzpicture}[x=8cm, y=2cm]
% \small
@@ -1845,7 +1733,7 @@
% \end{tikzpicture}
% \end{center}
% \end{key}
-%
+%
% For example, you might devise the following layout: Bars are small and rounded; they do not touch the borders of their start and end time slots. Groups stay within the start and end time slot, and the peaks are more acute.
% \par\bigskip\noindent
% \begin{texcode}
@@ -1887,12 +1775,12 @@
% \end{ganttchart}
% \end{center}
% \end{key}
-%
-%
+%
+%
% \subsubsection{Options: Progress}
-%
+%
% The \textit{progress} of a chart element illustrates the extent to which this element has been completed.
-%
+%
% \begin{key}{progress}{\texttt{none}\space\textbar\space\texttt{today}\space\textbar\space\meta{number}}{none}
% Indicates that a chart element is \meta{number} percent complete. The value \texttt{none} turns progress calculations off.
% \par\bigskip\noindent
@@ -1950,7 +1838,7 @@
% \end{ganttchart}
% \end{center}
% \end{key}
-%
+%
% \begin{key}[/.style=]{bar incomplete}{\meta{style}}{/pgfgantt/bar, fill=black!25}
% \keyline[/.style=]{group incomplete}{\meta{style}}{/pgfgantt/group, fill=black!25}
% \keyline[/.style=]{milestone incomplete}{\meta{style}}{/pgfgantt/milestone, fill=black!25}
@@ -1993,7 +1881,7 @@
% \end{ganttchart}
% \end{center}
% \end{key}
-%
+%
% \begin{key}{progress label text}{\meta{text}}{\string\pgfmathprintnumber[precision=0, verbatim]\{\#1\}\string\% complete}
% \keyline{bar progress label anchor}{\meta{anchor}}{east}
% \keyline{bar progress label font}{\meta{font commands}}{\string\scriptsize}
@@ -2047,16 +1935,16 @@
% \end{ganttchart}
% \end{center}
% \end{key}
-%
-%
+%
+%
% \subsubsection{New Node Shapes}
% \label{sss:NewNodeShapes}
-%
+%
% \pack{pgfgantt} defines three new node shapes:
-%
+%
% \bigskip\noindent
% (1) The \texttt{ganttbar} node shape derives from shape \texttt{rectangle} (section~48.2 of the \TikZ\ manual). It provides four additional anchors: \texttt{on top}, \texttt{on bottom}, \texttt{on left} and \texttt{on right}. The \meta{fraction} set by the following keys indicates a position between the left and right (for \texttt{on top} and \texttt{on bottom}) or upper and lower border (for \texttt{on left} and \texttt{on right}), similarly to the \opt{/tikz/pos} key.
-%
+%
% \begin{key}{on top fraction}{\meta{fraction}}{0.5}
% \keyline{on bottom fraction}{\meta{fraction}}{0.5}
% \keyline{on left fraction}{\meta{fraction}}{0.5}
@@ -2097,7 +1985,7 @@
% \end{tikzpicture}
% \end{center}
% \end{key}
-%
+%
% \bigskip\noindent
% (2) The \texttt{ganttgroup} node shape also derives from shape \texttt{rectangle}. It provides the additional anchors \texttt{on top}, \texttt{on bottom}, \texttt{on left}, \texttt{on right} (same as above), \texttt{left peak} and \texttt{right peak}.
% \begin{center}
@@ -2138,7 +2026,7 @@
% node [\placement] {\scriptsize\texttt{(s.\anchor)}};
% \end{tikzpicture}
% \end{center}
-%
+%
% \bigskip\noindent
% (3) The \texttt{ganttmilestone} node shape derives from shape \texttt{diamond} (section~48.3 of the \TikZ\ manual), but does not consider any aspect ratio. It provides the additional anchors \texttt{on top}, \texttt{on bottom}, \texttt{on left} and \texttt{on right} (same as above).
% \begin{center}
@@ -2172,19 +2060,19 @@
% node [\placement] {\scriptsize\texttt{(s.\anchor)}};
% \end{tikzpicture}
% \end{center}
-%
-%
+%
+%
% \subsection{Defining Custom Chart Elements}
-%
+%
% You may define completely new chart elements with
% \begin{texcode}
% \newganttchartelement`\marg{name}\marg{new default key values}'
% \newganttchartelement*`\marg{name}\marg{new default key values}'
% \end{texcode}
% \DescribeMacro{\newganttchartelement}|\newganttchartelement| (unstarred) defines a new chart element |\gantt|\textcolor{RoyalBlue}{\meta{name}} and the corresponding |\ganttlinked|\textcolor{RoyalBlue}{\meta{name}}. These chart element macros take one optional argument \meta{options} and \textit{three} mandatory arguments \meta{label}, \meta{start tss} and \meta{end tss} (like |\ganttbar|).
-%
+%
% Chart element macros defined by the starred form, \DescribeMacro{\newganttchartelement*}|\newganttchartelement*|, take the same single optional argument, but \textit{two} mandatory arguments \meta{label} and \meta{tss} (like |\ganttmilestone|).
-%
+%
% For each new chart element, |\newganttchartelement| also introduces a set of nine value-storing keys and five style keys and assigns default values to them:
% \begin{center}
% \begin{tabular}{l >{\ttfamily}l}
@@ -2212,13 +2100,13 @@
% \end{tabular}\hspace*{-120pt}
% \end{center}
% Consequently, a new chart element will look like the standard |\ganttbar| unless you introduce some \meta{new default key values}.
-%
+%
% Let us define a new chart element called ``foobar'', which is basically a fancy-colored and -shaped bar:
% \par\bigskip\noindent
% \begin{texcode}
% \definecolor{foobarblue}{RGB}{0,153,255}
% \definecolor{foobaryellow}{RGB}{234,187,0}
-%
+%
% \newganttchartelement{foobar}{
% foobar/.style={
% shape=rounded rectangle,
@@ -2237,7 +2125,7 @@
% foobar left shift=-.1,
% foobar right shift=.1
% }
-%
+%
% \begin{ganttchart}[
% vgrid,
% progress=today,
@@ -2253,7 +2141,7 @@
% \begin{center}
% \definecolor{foobarblue}{RGB}{0,153,255}
% \definecolor{foobaryellow}{RGB}{234,187,0}
-%
+%
% \newganttchartelement{foobar}{
% foobar/.style={
% shape=rounded rectangle,
@@ -2272,7 +2160,7 @@
% foobar left shift=-.1,
% foobar right shift=.1
% }
-%
+%
% \begin{ganttchart}[
% vgrid,
% progress=today,
@@ -2285,7 +2173,7 @@
% \ganttlinkedfoobar{Foobar 3}{9}{12}
% \end{ganttchart}
% \end{center}
-%
+%
%
% \subsection{Links}
% \label{ssc:Links}
@@ -2294,7 +2182,7 @@
% \begin{texcode}
% \ganttlink`\oarg{options}\marg{start element name}\marg{end element name}'
% \end{texcode}
-%
+%
% \begin{key}{name}{\meta{name}}{\textrm{(empty)}}
% The \DescribeMacro{\ganttlink}|\ganttlink| macro connects two elements, which are specified by their \meta{name}s. By default, chart elements are named automatically: The first one receives the name \texttt{elem0}, the second one is called \texttt{elem1} and so on. However, the \opt{name} key allows you to assign a name to each chart element.
% \par\bigskip\noindent
@@ -2348,7 +2236,7 @@
% \end{ganttchart}
% \end{center}
% \end{key}
-%
+%
% \begin{key}[/.style=]{link}{\meta{style}}{-latex, rounded corners=1pt}
% Sets the appearance of the link.
% \par\bigskip\noindent
@@ -2490,7 +2378,7 @@
% \DescribeMacro{\newganttlinktype}It defines a new link \meta{type} which is drawn by the given \meta{TikZ code}. When you write this code, you do not have to know the final absolute coordinates of each link type instance. On the contrary, several commands that are only available in the second argument of |\newganttlinktype| help you to design generic link types:
% \begin{itemize}
% \item First, you have to choose the border points of the chart elements the link will connect. For this purpose, \DescribeMacro{\ganttsetstartanchor}|\ganttsetstartanchor{|\meta{anchor}|}| and \DescribeMacro{\ganttsetendanchor}|\ganttsetendanchor{|\meta{anchor}|}| select an \meta{anchor} of the start and end element, respectively. See the figures in section~\ref{sss:NewNodeShapes} for possible \meta{anchor}s of the default chart element shapes. You may specify a certain \meta{fraction} for anchors like \texttt{on top} by |\ganttsetstartanchor{on top=|\meta{fraction}|}|.
-%
+%
% \pack{pgfgantt} sets the default anchors to |\ganttsetstartanchor{east}| and |\ganttsetendanchor{west}|, so you even may omit these two commands.
% \item The two macro pairs \DescribeMacro{\xLeft}|\xLeft|/\DescribeMacro{\yUpper}|\yUpper| and \DescribeMacro{\xRight}|\xRight|/\DescribeMacro{\yLower}|\yLower| provide the $x$- and $y$-coordinates of the link start and end points, respectively.
% \begin{center}\makeatletter
@@ -2509,7 +2397,7 @@
% \end{itemize}
% \end{enumerate}
% \end{key}
-%
+%
% \begin{texcode}
% \newganttlinktypealias`\marg{new type}\marg{existing type}'
% \end{texcode}
@@ -2524,7 +2412,7 @@
% \newganttlinktypealias{sta-to-sta}{s-s}
% \newganttlinktypealias{fin-to-fin}{f-f}
% \setganttlinklabel{fin-to-fin}{f2f}
-%
+%
% \begin{ganttchart}[vgrid, hgrid]{1}{12}
% \gantttitle{Title}{12} \\
% \ganttbar{Task 1}{2}{3} \\
@@ -2538,7 +2426,7 @@
% \newganttlinktypealias{sta-to-sta}{s-s}
% \newganttlinktypealias{fin-to-fin}{f-f}
% \setganttlinklabel{fin-to-fin}{f2f}
-%
+%
% \begin{ganttchart}[vgrid, hgrid]{1}{12}
% \gantttitle{Title}{12} \\
% \ganttbar{Task 1}{2}{3} \\
@@ -2552,7 +2440,7 @@
% \par\bigskip\noindent
% \begin{texcode}
% \usetikzlibrary{decorations.pathmorphing}
-%
+%
% \newganttlinktype{zigzag}{
% \ganttsetstartanchor{on right=1}
% \ganttsetendanchor{on left=0}
@@ -2560,7 +2448,7 @@
% (\xLeft, \yUpper) --
% (\xRight, \yLower);
% }
-%
+%
% \begin{ganttchart}[vgrid, hgrid]{1}{12}
% \gantttitle{Title}{12} \\
% \ganttbar{Task 1}{2}{3} \\
@@ -2612,7 +2500,7 @@
% (\xRight, \yLower);
% }
% \setganttlinklabel{drur}{a fancy link}
-%
+%
% \begin{ganttchart}[
% vgrid,
% hgrid,
@@ -2648,7 +2536,7 @@
% (\xRight, \yLower);
% }
% \setganttlinklabel{drur}{a fancy link}
-%
+%
% \begin{ganttchart}[
% vgrid,
% hgrid,
@@ -2663,7 +2551,7 @@
% \end{ganttchart}
% \end{center}
% (Please remove the comments if you copy the code above -- they will confuse \TikZ\ and generate tons of errors.)
-%
+%
% \begin{key}{link label}{\meta{label}}{\textrm{(empty)}}
% \keyline{link label font}{\meta{font commands}}{\string\scriptsize\string\itshape}
% \keyline[/.style=]{link label node}{\meta{options}}{anchor=west, font=\string\ganttvalueof\{link label font\}}
@@ -2812,9 +2700,9 @@
% \ganttlink[link mid=.159]{pp}{T2A}
% \end{ganttchart}
% \end{center}
-%
+%
% \bigskip
-% The second example demonstrates that \pack{pgfgantt} is really flexible: Even an appearance quite different from the standard layout is possible. (More precisely, the code below tries to reproduce the Gantt chart from the English Wikipedia site, see \url{http://en.wikipedia.org/wiki/Gantt_chart}.)
+% The second example demonstrates that \pack{pgfgantt} is really flexible: Even an appearance quite different from the standard layout is possible. (More precisely, the code below tries to reproduce the Gantt chart from the English Wikipedia site, see \url{https://en.wikipedia.org/wiki/Gantt_chart}.)
% \par\bigskip\noindent
% \begin{texcode}
% \definecolor{barblue}{RGB}{153,204,254}
@@ -2967,8 +2855,8 @@
% \end{ganttchart}
% \end{center}
%
-%
-% \StopEventually{\PrintIndex\PrintChanges}
+%
+% \StopEventually{\PrintIndex}
% \lstDeleteShortInline|
% \MakeShortVerb{\|}
% \clearpage\section{Implementation}
@@ -3050,7 +2938,7 @@
%
%
% \subsection{The Horizontal and Vertical Grid}
-%
+%
% \begin{intmacro}{\gtt@currentline}
% \begin{intmacro}{\gtt@lasttitleline}
% \begin{intmacro}{\gtt@currgrid}
@@ -3202,7 +3090,7 @@
%
%
% \subsection{Time Slot Formats}
-%
+%
% \begin{intmacro}{\gtt@smugglecount}
% |\gtt@smugglecount|\marg{count} smuggles the local value of a count register over the end of a \TeX\ group.
% \begin{macrocode}
@@ -3390,11 +3278,11 @@
% \end{macrocode}
% \end{intmacro}
% \end{option}
-%
-%
+%
+%
% \subsection{The Main Environment}
% \label{ssc:ImplMain}
-%
+%
% \begin{option}{x unit}
% \begin{option}{y unit title}
% \begin{option}{y unit chart}
@@ -4222,10 +4110,10 @@
}
% \end{macrocode}
-%
-%
+%
+%
% \subsection{Chart Elements}
-%
+%
% \begin{option}{progress}
% \begin{intmacro}{\gtt@progress}
% \begin{option}{progress label text}
@@ -4606,7 +4494,7 @@
% \end{option}
% \end{macro}
% \end{macro}
-% \clearpage
+% \clearpage
% \begin{macro}{\ganttgroup}
% \begin{macro}{\ganttlinkedgroup}
% \begin{option}{group}
@@ -4772,10 +4660,10 @@
% \end{option}
% \end{macro}
% \end{macro}
-%
-%
+%
+%
% \subsection{Node Shapes}
-%
+%
% \begin{option}{on top fraction}
% \begin{option}{on bottom fraction}
% \begin{option}{on left fraction}
@@ -5067,11 +4955,11 @@
}
% \end{macrocode}
-%
+%
%
% \subsection{Links}
% \label{ssc:ImplLinks}
-%
+%
% \begin{option}{link}
% \begin{option}{link type}
% \begin{option}{link label}
@@ -5302,7 +5190,7 @@
% \end{macrocode}
% \end{intmacro}
% \begin{intmacro}{\@gtt@link@anchor}
-% We need the following keys for setting the start and end anchor of a link: Whenever a key |/pgfgantt/link anchor/|\meta{anchor} is undefined, \pack{pgfgantt} stores \meta{anchor} in |\@gtt@link@anchor|.
+% We need the following keys for setting the start and end anchor of a link: Whenever a key |/pgfgantt/link anchor/|\meta{anchor} is undefined, \pack{pgfgantt} stores \meta{anchor} in |\@gtt@link@anchor|.
% \begin{macrocode}
\ganttset{%
link anchor/.unknown/.code={%
diff --git a/graphics/pgf/contrib/pgfgantt/pgfgantt.ins b/graphics/pgf/contrib/pgfgantt/pgfgantt.ins
index 6e4aa0dd2b..2c6c6a4c03 100644
--- a/graphics/pgf/contrib/pgfgantt/pgfgantt.ins
+++ b/graphics/pgf/contrib/pgfgantt/pgfgantt.ins
@@ -1,6 +1,6 @@
%% pgfgantt.ins
%%
-%% Copyright (C) 2083 by Wolfgang Skala
+%% Copyright (C) 2024 by Wolfgang Esser-Skala
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
@@ -10,9 +10,7 @@
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2008/05/04 or later.
%%
-%% This work has the LPPL maintenance status `maintained'.
-%%
-%% The Current Maintainer of this work is Wolfgang Skala.
+%% This work has the LPPL maintenance status `unmaintained'.
%%
%% This work consists of the files pgfgantt.dtx and pgfgantt.ins
%% and the derived file pgfgantt.sty.
@@ -24,7 +22,7 @@
\preamble
-Copyright (C) 2018 by Wolfgang Skala
+Copyright (C) 2024 by Wolfgang Esser-Skala
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3c
@@ -51,11 +49,10 @@ version 2008/05/04 or later.
\Msg{*}
\Msg{* pdflatex pgfgantt.dtx}
\Msg{* makeindex -s gind.ist -o pgfgantt.ind pgfgantt.idx}
-\Msg{* makeindex -s gglo.ist -o pgfgantt.gls pgfgantt.glo}
\Msg{* pdflatex pgfgantt.dtx (2x)}
\Msg{*}
\Msg{* Happy TeXing!}
\Msg{*}
\Msg{****************************************************}
-\endbatchfile \ No newline at end of file
+\endbatchfile
diff --git a/graphics/pgf/contrib/pgfgantt/pgfgantt.pdf b/graphics/pgf/contrib/pgfgantt/pgfgantt.pdf
deleted file mode 100644
index 5536734a4c..0000000000
--- a/graphics/pgf/contrib/pgfgantt/pgfgantt.pdf
+++ /dev/null
Binary files differ
diff --git a/graphics/pmdraw/README.md b/graphics/pgf/contrib/pmdraw/README.md
index dd9954a495..dfc3e2924d 100644
--- a/graphics/pmdraw/README.md
+++ b/graphics/pgf/contrib/pmdraw/README.md
@@ -1,12 +1,12 @@
pmdraw
======
-*README V1.3 2024-04-09*
+*README V1.4 2024-06-02*
<!--
*------------------------------*
-|0````````````````````````````8|
+|6````````````````````````````5|
|`````____````____`````````````|
|````|MFMF\ /MFMF|````````````|
|````|MF|MF\/MF|MF|````````````|
@@ -18,7 +18,7 @@ pmdraw
|``````````````|MF|````````````|
|``````````````|MF|````````````|
|``````````````|MF|````````````|
-|1````````````````````````````3|
+|4````````````````````````````1|
*------------------------------*
-->
diff --git a/graphics/pmdraw/examples/example-1.tex b/graphics/pgf/contrib/pmdraw/examples/example-1.tex
index 402c418a15..402c418a15 100644
--- a/graphics/pmdraw/examples/example-1.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-1.tex
diff --git a/graphics/pmdraw/examples/example-10.tex b/graphics/pgf/contrib/pmdraw/examples/example-10.tex
index 01d1502f32..01d1502f32 100644
--- a/graphics/pmdraw/examples/example-10.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-10.tex
diff --git a/graphics/pmdraw/examples/example-11.tex b/graphics/pgf/contrib/pmdraw/examples/example-11.tex
index 9729320f40..9729320f40 100644
--- a/graphics/pmdraw/examples/example-11.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-11.tex
diff --git a/graphics/pmdraw/examples/example-12.tex b/graphics/pgf/contrib/pmdraw/examples/example-12.tex
index f21946849f..f21946849f 100644
--- a/graphics/pmdraw/examples/example-12.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-12.tex
diff --git a/graphics/pmdraw/examples/example-13.tex b/graphics/pgf/contrib/pmdraw/examples/example-13.tex
index c3a189e202..c3a189e202 100644
--- a/graphics/pmdraw/examples/example-13.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-13.tex
diff --git a/graphics/pmdraw/examples/example-14.tex b/graphics/pgf/contrib/pmdraw/examples/example-14.tex
index 0ad77f546d..0ad77f546d 100644
--- a/graphics/pmdraw/examples/example-14.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-14.tex
diff --git a/graphics/pmdraw/examples/example-15.tex b/graphics/pgf/contrib/pmdraw/examples/example-15.tex
index 672965eb13..672965eb13 100644
--- a/graphics/pmdraw/examples/example-15.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-15.tex
diff --git a/graphics/pmdraw/examples/example-16.tex b/graphics/pgf/contrib/pmdraw/examples/example-16.tex
index efacb4d246..efacb4d246 100644
--- a/graphics/pmdraw/examples/example-16.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-16.tex
diff --git a/graphics/pmdraw/examples/example-17.tex b/graphics/pgf/contrib/pmdraw/examples/example-17.tex
index 97c6052f8a..97c6052f8a 100644
--- a/graphics/pmdraw/examples/example-17.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-17.tex
diff --git a/graphics/pmdraw/examples/example-18.tex b/graphics/pgf/contrib/pmdraw/examples/example-18.tex
index 2d1014a1cb..2d1014a1cb 100644
--- a/graphics/pmdraw/examples/example-18.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-18.tex
diff --git a/graphics/pmdraw/examples/example-19.tex b/graphics/pgf/contrib/pmdraw/examples/example-19.tex
index 32c24bcf23..32c24bcf23 100644
--- a/graphics/pmdraw/examples/example-19.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-19.tex
diff --git a/graphics/pmdraw/examples/example-2.tex b/graphics/pgf/contrib/pmdraw/examples/example-2.tex
index c80de8e5a3..c80de8e5a3 100644
--- a/graphics/pmdraw/examples/example-2.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-2.tex
diff --git a/graphics/pmdraw/examples/example-20.tex b/graphics/pgf/contrib/pmdraw/examples/example-20.tex
index 8d0bc25cb3..8d0bc25cb3 100644
--- a/graphics/pmdraw/examples/example-20.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-20.tex
diff --git a/graphics/pmdraw/examples/example-21.tex b/graphics/pgf/contrib/pmdraw/examples/example-21.tex
index e4bd9556cc..e4bd9556cc 100644
--- a/graphics/pmdraw/examples/example-21.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-21.tex
diff --git a/graphics/pmdraw/examples/example-22.tex b/graphics/pgf/contrib/pmdraw/examples/example-22.tex
index c7aa5c4cba..c7aa5c4cba 100644
--- a/graphics/pmdraw/examples/example-22.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-22.tex
diff --git a/graphics/pmdraw/examples/example-23.tex b/graphics/pgf/contrib/pmdraw/examples/example-23.tex
index d2ae85c4e7..d2ae85c4e7 100644
--- a/graphics/pmdraw/examples/example-23.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-23.tex
diff --git a/graphics/pmdraw/examples/example-24.tex b/graphics/pgf/contrib/pmdraw/examples/example-24.tex
index 7b93adc805..7b93adc805 100644
--- a/graphics/pmdraw/examples/example-24.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-24.tex
diff --git a/graphics/pmdraw/examples/example-25.tex b/graphics/pgf/contrib/pmdraw/examples/example-25.tex
index bea76db2f3..bea76db2f3 100644
--- a/graphics/pmdraw/examples/example-25.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-25.tex
diff --git a/graphics/pmdraw/examples/example-3.tex b/graphics/pgf/contrib/pmdraw/examples/example-3.tex
index 09a5256eac..09a5256eac 100644
--- a/graphics/pmdraw/examples/example-3.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-3.tex
diff --git a/graphics/pmdraw/examples/example-4.tex b/graphics/pgf/contrib/pmdraw/examples/example-4.tex
index bbbf5bd819..bbbf5bd819 100644
--- a/graphics/pmdraw/examples/example-4.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-4.tex
diff --git a/graphics/pmdraw/examples/example-5.tex b/graphics/pgf/contrib/pmdraw/examples/example-5.tex
index e7a9c63e96..e7a9c63e96 100644
--- a/graphics/pmdraw/examples/example-5.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-5.tex
diff --git a/graphics/pmdraw/examples/example-6.tex b/graphics/pgf/contrib/pmdraw/examples/example-6.tex
index 18a47a794c..18a47a794c 100644
--- a/graphics/pmdraw/examples/example-6.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-6.tex
diff --git a/graphics/pmdraw/examples/example-7.tex b/graphics/pgf/contrib/pmdraw/examples/example-7.tex
index 171bf113a4..171bf113a4 100644
--- a/graphics/pmdraw/examples/example-7.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-7.tex
diff --git a/graphics/pmdraw/examples/example-8.tex b/graphics/pgf/contrib/pmdraw/examples/example-8.tex
index 6ed2f2cf5c..6ed2f2cf5c 100644
--- a/graphics/pmdraw/examples/example-8.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-8.tex
diff --git a/graphics/pmdraw/examples/example-9.tex b/graphics/pgf/contrib/pmdraw/examples/example-9.tex
index 8e7d87023f..8e7d87023f 100644
--- a/graphics/pmdraw/examples/example-9.tex
+++ b/graphics/pgf/contrib/pmdraw/examples/example-9.tex
diff --git a/graphics/pmdraw/pmdraw.pdf b/graphics/pgf/contrib/pmdraw/pmdraw.pdf
index 4809713987..1cc4de9135 100644
--- a/graphics/pmdraw/pmdraw.pdf
+++ b/graphics/pgf/contrib/pmdraw/pmdraw.pdf
Binary files differ
diff --git a/graphics/pmdraw/pmdraw.sty b/graphics/pgf/contrib/pmdraw/pmdraw.sty
index 0cfa1f2709..36f506b51f 100644
--- a/graphics/pmdraw/pmdraw.sty
+++ b/graphics/pgf/contrib/pmdraw/pmdraw.sty
@@ -1,8 +1,8 @@
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{pmdraw}[2024-04-09 v1.3 pmdraw]
+\ProvidesPackage{pmdraw}[2024-06-02 v1.4 pmdraw]
% *------------------------------*
-% |2````````````````````````````3|
+% |7````````````````````````````4|
% |`````____````____`````````````|
% |````|MFMF\ /MFMF|````````````|
% |````|MF|MF\/MF|MF|````````````|
@@ -14,7 +14,7 @@
% |``````````````|MF|````````````|
% |``````````````|MF|````````````|
% |``````````````|MF|````````````|
-% |1````````````````````````````1|
+% |3````````````````````````````4|
% *------------------------------*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -42,8 +42,28 @@
\newcommand{\pmdraw@drawAedgesOptions}{}% Draw options for added edges in product diagram
\newcommand{\pmdraw@drawAedges}[2]{% Draws added edges in product diagram from #1 vertex to #2 vertex, assumes #1<#2
- \foreach \x in {#1,...,#2} {% For each vertex in range
- \draw[dotted,thick,apply style/.expand once=\pmdraw@drawAedgesOptions] (\x,0) -- (\x,-\pmdraw@diagSep);% Draw concatenation edge
+ \@ifclassloaded{beamer}{% If in beamer
+ \uncover<\pmdraw@edgesAddedUncover>{% Uncovers added edges
+ \foreach \x in {#1,...,#2} {% For each vertex in range
+ \ifnum\value{pmdraw@ifEdgesAdded}=0% If drawing added edges
+ \draw[dotted,thick,apply style/.expand once=\pmdraw@drawAedgesOptions] (\x,0) -- (\x,-\pmdraw@diagSep);% Draw concatenation edge
+ \else% If hiding top vertices
+ \phantom{%
+ \draw[dotted,thick,apply style/.expand once=\pmdraw@drawAedgesOptions] (\x,0) -- (\x,-\pmdraw@diagSep);% Draw concatenation edge
+ }%
+ \fi%
+ }%
+ }%
+ }{% If not in beamer
+ \foreach \x in {#1,...,#2} {% For each vertex in range
+ \ifnum\value{pmdraw@ifEdgesAdded}=0% If drawing added edges
+ \draw[dotted,thick,apply style/.expand once=\pmdraw@drawAedgesOptions] (\x,0) -- (\x,-\pmdraw@diagSep);% Draw concatenation edge
+ \else% If hiding top vertices
+ \phantom{%
+ \draw[dotted,thick,apply style/.expand once=\pmdraw@drawAedgesOptions] (\x,0) -- (\x,-\pmdraw@diagSep);% Draw concatenation edge
+ }%
+ \fi%
+ }%
}%
\pmdraw@AedgesLoop% Restart for loop
}
@@ -111,6 +131,44 @@
}
\let\pmdraw@drawLedgesDraw\pmdraw@drawLedgesDrawDefault% Draws lower non-transversal edge from #1 vertex to #2 vertex, assumes #1<#2
+\newcommand{\pmdraw@drawNoLabelBa}{-1}% 1st vertex to skip label in bottom row
+\newcommand{\pmdraw@drawNoLabelBb}{-1}% 2nd vertex to skip label in bottom row
+\newcommand{\pmdraw@drawNoLabelBc}{-1}% 3rd vertex to skip label in bottom row
+\newcommand{\pmdraw@drawNoLabelBd}{-1}% 4th vertex to skip label in bottom row
+\newcommand{\pmdraw@drawNoLabelBe}{-1}% 5th vertex to skip label in bottom row
+\newcommand{\pmdraw@drawNoLabelBf}{-1}% 6th vertex to skip label in bottom row
+\newcommand{\pmdraw@drawNoLabelBg}{-1}% 7th vertex to skip label in bottom row
+\newcommand{\pmdraw@drawNoLabelBh}{-1}% 8th vertex to skip label in bottom row
+\newcommand{\pmdraw@drawNoLabelBi}{-1}% 9th vertex to skip label in bottom row
+\newcommand{\pmdraw@drawNoLabelTa}{-1}% 1st vertex to skip label in top row
+\newcommand{\pmdraw@drawNoLabelTb}{-1}% 2nd vertex to skip label in top row
+\newcommand{\pmdraw@drawNoLabelTc}{-1}% 3rd vertex to skip label in top row
+\newcommand{\pmdraw@drawNoLabelTd}{-1}% 4th vertex to skip label in top row
+\newcommand{\pmdraw@drawNoLabelTe}{-1}% 5th vertex to skip label in top row
+\newcommand{\pmdraw@drawNoLabelTf}{-1}% 6th vertex to skip label in top row
+\newcommand{\pmdraw@drawNoLabelTg}{-1}% 7th vertex to skip label in top row
+\newcommand{\pmdraw@drawNoLabelTh}{-1}% 8th vertex to skip label in top row
+\newcommand{\pmdraw@drawNoLabelTi}{-1}% 9th vertex to skip label in top row
+
+\newcommand{\pmdraw@drawNoVertexBa}{-1}% 1st vertex to skip in bottom row
+\newcommand{\pmdraw@drawNoVertexBb}{-1}% 2nd vertex to skip in bottom row
+\newcommand{\pmdraw@drawNoVertexBc}{-1}% 3rd vertex to skip in bottom row
+\newcommand{\pmdraw@drawNoVertexBd}{-1}% 4th vertex to skip in bottom row
+\newcommand{\pmdraw@drawNoVertexBe}{-1}% 5th vertex to skip in bottom row
+\newcommand{\pmdraw@drawNoVertexBf}{-1}% 6th vertex to skip in bottom row
+\newcommand{\pmdraw@drawNoVertexBg}{-1}% 7th vertex to skip in bottom row
+\newcommand{\pmdraw@drawNoVertexBh}{-1}% 8th vertex to skip in bottom row
+\newcommand{\pmdraw@drawNoVertexBi}{-1}% 9th vertex to skip in bottom row
+\newcommand{\pmdraw@drawNoVertexTa}{-1}% 1st vertex to skip in top row
+\newcommand{\pmdraw@drawNoVertexTb}{-1}% 2nd vertex to skip in top row
+\newcommand{\pmdraw@drawNoVertexTc}{-1}% 3rd vertex to skip in top row
+\newcommand{\pmdraw@drawNoVertexTd}{-1}% 4th vertex to skip in top row
+\newcommand{\pmdraw@drawNoVertexTe}{-1}% 5th vertex to skip in top row
+\newcommand{\pmdraw@drawNoVertexTf}{-1}% 6th vertex to skip in top row
+\newcommand{\pmdraw@drawNoVertexTg}{-1}% 7th vertex to skip in top row
+\newcommand{\pmdraw@drawNoVertexTh}{-1}% 8th vertex to skip in top row
+\newcommand{\pmdraw@drawNoVertexTi}{-1}% 9th vertex to skip in top row
+
\newcommand{\pmdraw@drawTedgesDrawOptions}{}% Draw options for transversal edges
\newcommand{\pmdraw@drawTedgesDrawDefault}[2]{% Draws transversal edge from #1 vertex in top row to #2 vertex in bottom row - DEFAULT
\ifnum\pmdraw@ifTedgeHorizontal=0% If drawing a straight line edge
@@ -145,6 +203,10 @@
\fill[apply style/.expand once=\pmdraw@drawVertexOptions] (#1,#2) circle (.17);%
}
+\newcommand{\pmdraw@edgeUncover}{1-}% Sets the uncover options of edge
+\newcommand{\pmdraw@edgesAddedUncover}{1-}% Sets the uncover options of added edges
+\newcommand{\pmdraw@edgesUncover}{1-}% Sets the uncover options of edges
+
\newcommand{\pmdraw@hookAfterBrick}{}% Hook after drawing a brick
\newcommand{\pmdraw@hookAfterDiagram}{}% Hook after drawing a diagram
\newcommand{\pmdraw@hookBeforeBrick}{}% Hook before drawing a brick
@@ -165,6 +227,7 @@
\renewcommand{\pmdraw@diagSep}{1}% Resets vertical space between product diagrams
\renewcommand{\pmdraw@drawAedgesOptions}{}% Resets draw options for added edges in product diagram
\let\pmdraw@drawDots\pmdraw@drawDotsDefault% Resets drawing of dots between bricks
+ \renewcommand{\pmdraw@edgesAddedUncover}{1-}% Resets the uncover options of added edges
\renewcommand{\pmdraw@hookAfterDiagram}{}% Clears hook after drawing a diagram
\renewcommand{\pmdraw@hookBeforeDiagram}{}% Clears hook before drawing a diagram
\renewcommand{\pmdraw@ifGrid}{0}% Hides grid
@@ -177,12 +240,16 @@
\setcounter{pmdraw@bottomShift}{0}% Resets shift on right end of bottom row of brick
\setcounter{pmdraw@topShift}{0}% Resets shift on right end of top row of brick
\setcounter{pmdraw@ifDiagWDotsFirst}{1}% Reset if drawing first brick of diagram
+ \setcounter{pmdraw@ifEdgesAdded}{0}% Resets boolean if hiding added edges
}
\newcommand{\pmdraw@rowSep}{2}% Vertical separation between rows of vertices in brick
\newcommand{\pmdraw@tikz}{}% Tikz options
+\newcommand{\pmdraw@verticesBottomUncover}{1-}% Sets the uncover options of bottom vertices
+\newcommand{\pmdraw@verticesTopUncover}{1-}% Sets the uncover options of top vertices
+
\newcommand{\pmdraw@vertexSep}{0}% Vertical separation between bottom row of top diagram and top row of bottom diagram in product diagram not for added edges
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -210,6 +277,18 @@
\newcounter{pmdraw@ifDiagWDotsFirst}% In drawing with dots, boolean if drawing first brick of diagram
\setcounter{pmdraw@ifDiagWDotsFirst}{1}
+\newcounter{pmdraw@ifEdge}% Boolean if hiding edge
+\setcounter{pmdraw@ifEdge}{0}
+\newcounter{pmdraw@ifEdgesAdded}% Boolean if hiding added edges
+\setcounter{pmdraw@ifEdgesAdded}{0}
+\newcounter{pmdraw@ifEdges}% Boolean if hiding edges
+\setcounter{pmdraw@ifEdges}{0}
+
+\newcounter{pmdraw@ifVerticesBottom}% Boolean if hiding bottom row of vertices
+\setcounter{pmdraw@ifVerticesBottom}{0}
+\newcounter{pmdraw@ifVerticesTop}% Boolean if hiding top row of vertices
+\setcounter{pmdraw@ifVerticesTop}{0}
+
\newcounter{pmdraw@labelStartB}% Starting value of labels of vertices in bottom row
\setcounter{pmdraw@labelStartB}{1}
\newcounter{pmdraw@labelStartT}% Starting value of labels of vertices in top row
@@ -257,6 +336,61 @@
\define@key{pmdraw@brick}{vertices}{% Sets the draw options of vertices
\renewcommand{\pmdraw@drawVertexOptions}{#1}%
}
+\define@key{pmdraw@brick}{no vertex bottom 1}{% Sets 1st vertex to skip in bottom row
+ \renewcommand{\pmdraw@drawNoVertexBa}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex bottom 2}{% Sets 2nd vertex to skip in bottom row
+ \renewcommand{\pmdraw@drawNoVertexBb}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex bottom 3}{% Sets 3rd vertex to skip in bottom row
+ \renewcommand{\pmdraw@drawNoVertexBc}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex bottom 4}{% Sets 4th vertex to skip in bottom row
+ \renewcommand{\pmdraw@drawNoVertexBd}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex bottom 5}{% Sets 5th vertex to skip in bottom row
+ \renewcommand{\pmdraw@drawNoVertexBe}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex bottom 6}{% Sets 6th vertex to skip in bottom row
+ \renewcommand{\pmdraw@drawNoVertexBf}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex bottom 7}{% Sets 7th vertex to skip in bottom row
+ \renewcommand{\pmdraw@drawNoVertexBg}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex bottom 8}{% Sets 8th vertex to skip in bottom row
+ \renewcommand{\pmdraw@drawNoVertexBh}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex bottom 9}{% Sets 9th vertex to skip in bottom row
+ \renewcommand{\pmdraw@drawNoVertexBi}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex top 1}{% Sets 1st vertex to skip in top row
+ \renewcommand{\pmdraw@drawNoVertexTa}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex top 2}{% Sets 2nd vertex to skip in top row
+ \renewcommand{\pmdraw@drawNoVertexTb}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex top 3}{% Sets 3rd vertex to skip in top row
+ \renewcommand{\pmdraw@drawNoVertexTc}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex top 4}{% Sets 4th vertex to skip in top row
+ \renewcommand{\pmdraw@drawNoVertexTd}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex top 5}{% Sets 5th vertex to skip in top row
+ \renewcommand{\pmdraw@drawNoVertexTe}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex top 6}{% Sets 6th vertex to skip in top row
+ \renewcommand{\pmdraw@drawNoVertexTf}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex top 7}{% Sets 7th vertex to skip in top row
+ \renewcommand{\pmdraw@drawNoVertexTg}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex top 8}{% Sets 8th vertex to skip in top row
+ \renewcommand{\pmdraw@drawNoVertexTh}{#1}%
+}
+\define@key{pmdraw@brick}{no vertex top 9}{% Sets 9th vertex to skip in top row
+ \renewcommand{\pmdraw@drawNoVertexTi}{#1}%
+}
+
\define@key{pmdraw@brick}{vertices options}{% Sets the draw command of vertices
\renewcommand{\pmdraw@drawVertex}[2]{#1}%
}
@@ -283,6 +417,61 @@
\setcounter{pmdraw@labelStartT}{#1}%
}
+\define@key{pmdraw@brick}{no label bottom 1}{% Sets 1st label to skip in bottom row
+ \renewcommand{\pmdraw@drawNoLabelBa}{#1}%
+}
+\define@key{pmdraw@brick}{no label bottom 2}{% Sets 2nd label to skip in bottom row
+ \renewcommand{\pmdraw@drawNoLabelBb}{#1}%
+}
+\define@key{pmdraw@brick}{no label bottom 3}{% Sets 3rd label to skip in bottom row
+ \renewcommand{\pmdraw@drawNoLabelBc}{#1}%
+}
+\define@key{pmdraw@brick}{no label bottom 4}{% Sets 4th label to skip in bottom row
+ \renewcommand{\pmdraw@drawNoLabelBd}{#1}%
+}
+\define@key{pmdraw@brick}{no label bottom 5}{% Sets 5th label to skip in bottom row
+ \renewcommand{\pmdraw@drawNoLabelBe}{#1}%
+}
+\define@key{pmdraw@brick}{no label bottom 6}{% Sets 6th label to skip in bottom row
+ \renewcommand{\pmdraw@drawNoLabelBf}{#1}%
+}
+\define@key{pmdraw@brick}{no label bottom 7}{% Sets 7th label to skip in bottom row
+ \renewcommand{\pmdraw@drawNoLabelBg}{#1}%
+}
+\define@key{pmdraw@brick}{no label bottom 8}{% Sets 8th label to skip in bottom row
+ \renewcommand{\pmdraw@drawNoLabelBh}{#1}%
+}
+\define@key{pmdraw@brick}{no label bottom 9}{% Sets 9th label to skip in bottom row
+ \renewcommand{\pmdraw@drawNoLabelBi}{#1}%
+}
+\define@key{pmdraw@brick}{no label top 1}{% Sets 1st label to skip in top row
+ \renewcommand{\pmdraw@drawNoLabelTa}{#1}%
+}
+\define@key{pmdraw@brick}{no label top 2}{% Sets 2nd label to skip in top row
+ \renewcommand{\pmdraw@drawNoLabelTb}{#1}%
+}
+\define@key{pmdraw@brick}{no label top 3}{% Sets 3rd label to skip in top row
+ \renewcommand{\pmdraw@drawNoLabelTc}{#1}%
+}
+\define@key{pmdraw@brick}{no label top 4}{% Sets 4th label to skip in top row
+ \renewcommand{\pmdraw@drawNoLabelTd}{#1}%
+}
+\define@key{pmdraw@brick}{no label top 5}{% Sets 5th label to skip in top row
+ \renewcommand{\pmdraw@drawNoLabelTe}{#1}%
+}
+\define@key{pmdraw@brick}{no label top 6}{% Sets 6th label to skip in top row
+ \renewcommand{\pmdraw@drawNoLabelTf}{#1}%
+}
+\define@key{pmdraw@brick}{no label top 7}{% Sets 7th label to skip in top row
+ \renewcommand{\pmdraw@drawNoLabelTg}{#1}%
+}
+\define@key{pmdraw@brick}{no label top 8}{% Sets 8th label to skip in top row
+ \renewcommand{\pmdraw@drawNoLabelTh}{#1}%
+}
+\define@key{pmdraw@brick}{no label top 9}{% Sets 9th label to skip in top row
+ \renewcommand{\pmdraw@drawNoLabelTi}{#1}%
+}
+
\define@key{pmdraw@brick}{labels bottom draw}{% Sets the draw options for labels of bottom vertices
\renewcommand{\pmdraw@drawLabelBDrawOptions}{#1}%
}
@@ -299,7 +488,7 @@
\define@key{pmdraw@brick}{labels bottom options}{% Sets the draw command of labels of bottom vertices
\renewcommand{\pmdraw@drawLabelBottom}[3]{#1}%
}
-\define@key{pmdraw@brick}{labels top options}{% Sets the draw command of labels of bottom vertices
+\define@key{pmdraw@brick}{labels top options}{% Sets the draw command of labels of top vertices
\renewcommand{\pmdraw@drawLabelTop}[3]{#1}%
}
@@ -314,6 +503,20 @@
\renewcommand{\pmdraw@drawDotsNodeOptions}{#1}%
}
+\define@key{pmdraw@brick}{vertices bottom phantom}[]{% Does not draw bottom vertices
+ \setcounter{pmdraw@ifVerticesBottom}{1}%
+}
+\define@key{pmdraw@brick}{vertices top phantom}[]{% Does not draw top vertices
+ \setcounter{pmdraw@ifVerticesTop}{1}%
+}
+
+\define@key{pmdraw@brick}{vertices bottom uncover}{% Sets the uncover options of bottom vertices
+ \renewcommand{\pmdraw@verticesBottomUncover}{#1}%
+}
+\define@key{pmdraw@brick}{vertices top uncover}{% Sets the uncover options of top vertices
+ \renewcommand{\pmdraw@verticesTopUncover}{#1}%
+}
+
\define@key{pmdraw@brick}{levels}[1]{% Sets number of horizontal levels for non-transversal edges and evenly spaces them
\tikzmath{%
\pmdraw{edgeSepU} = (0.5*\pmdraw@rowSep)/(#1 + 1);% Calculates vertical separation between each edge
@@ -374,6 +577,14 @@
\renewcommand{\pmdraw@ifTedgesFirst}{1}%
}
+\define@key{pmdraw@brick}{edges phantom}[]{% Does not draw edges
+ \setcounter{pmdraw@ifEdges}{1}%
+}
+
+\define@key{pmdraw@brick}{edges uncover}{% Sets the uncover options of edges
+ \renewcommand{\pmdraw@edgesUncover}{#1}%
+}
+
\define@key{pmdraw@brick}{brace}{% Draws a brace
\setkeys{pmdraw@brace}{#1}% Processes details of brace
\pmdraw@drawBrace{\value{pmdraw@braceL}}{\value{pmdraw@braceR}}{\pmdraw@braceLabel}% Draws brace
@@ -414,6 +625,12 @@
\renewcommand{\pmdraw@drawUedgesDraw}[2]{#1}%
\renewcommand{\pmdraw@drawLedgesDraw}[2]{#1}%
}
+\define@key{pmdraw@NTedges}{phantom}[]{% Does not draw edge
+ \setcounter{pmdraw@ifEdge}{1}%
+}
+\define@key{pmdraw@NTedges}{uncover}{% Sets the uncover options of edge
+ \renewcommand{\pmdraw@edgeUncover}{#1}%
+}
\define@key{pmdraw@Tedges}{height}{% Sets manual height of transversal edge
\tikzmath{%
\pmdraw{Tlevel} = #1;%
@@ -426,6 +643,12 @@
\define@key{pmdraw@Tedges}{options}{% Sets the draw command of transversal edge
\renewcommand{\pmdraw@drawTedgesDraw}[2]{#1}%
}
+\define@key{pmdraw@Tedges}{phantom}[]{% Does not draw edge
+ \setcounter{pmdraw@ifEdge}{1}%
+}
+\define@key{pmdraw@Tedges}{uncover}{% Sets the uncover options of edge
+ \renewcommand{\pmdraw@edgeUncover}{#1}%
+}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
@@ -485,6 +708,12 @@
\define@key{pmdraw@diagram}{edges added}{% Sets the draw options for drawing of added edges in product diagram
\renewcommand{\pmdraw@drawAedgesOptions}{#1}%
}
+\define@key{pmdraw@diagram}{edges added phantom}[]{% Does not draw added edges
+ \setcounter{pmdraw@ifEdgesAdded}{1}%
+}
+\define@key{pmdraw@diagram}{edges added uncover}{% Sets the uncover options of added edges
+ \renewcommand{\pmdraw@edgesAddedUncover}{#1}%
+}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
@@ -684,11 +913,47 @@
\fi%
\fi%
\foreach \x in {1,...,\value{pmdraw@degreeB}} {% For each vertex in row
- \pmdraw@drawVertex{\x + \value{pmdraw@blankB}}{0}% Draw lower vertex
- \ifnum\pmdraw@ifLabelsB=1% If drawing labels
- \pmdraw@drawLabelBottom{\x + \value{pmdraw@blankT}}{0}{\thepmdraw@labelStartB}% Draw label
- \stepcounter{pmdraw@labelStartB}% Update label counter
+ \ifnum\pmdraw@drawNoVertexBa=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexBb=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexBc=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexBd=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexBe=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexBf=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexBg=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexBh=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexBi=\x\else% If not skipping vertex
+ \pmdraw@drawVertex{\x + \value{pmdraw@blankB}}{0}% Draw lower vertex
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
\fi%
+ \ifnum\pmdraw@drawNoLabelBa=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelBb=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelBc=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelBd=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelBe=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelBf=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelBg=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelBh=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelBi=\x\else% If not skipping label
+ \ifnum\pmdraw@ifLabelsB=1% If drawing labels
+ \pmdraw@drawLabelBottom{\x + \value{pmdraw@blankT}}{0}{\thepmdraw@labelStartB}% Draw label
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \stepcounter{pmdraw@labelStartB}% Update label counter
}%
}
\newcommand{\pmdraw@drawBrickInit}[1]{% Initialises the drawing of a brick
@@ -708,53 +973,269 @@
\setkeys{pmdraw@brick}{levels,#1}% Processes options and set default levels
\pmdraw@hookBeforeBrick% Hook before drawing brick
\ifnum\pmdraw@ifEdgesFirst=0% If drawing vertices first
- \pmdraw@drawTopVertices% Draw base diagram
- \pmdraw@drawBottomVertices% Draw base diagram
- \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
- \pmdraw@UedgesLoop% Draws upper edges
- #2%
- \pmdEmpty%
- \pmdraw@LedgesLoop% Draws lower edges
- #3%
- \pmdEmpty%
- \pmdraw@TedgesLoop% Draws transversals
- #4%
- \pmdEmpty%
- \else% If drawing transversal first
- \pmdraw@TedgesLoop% Draws transversals
- #4%
- \pmdEmpty%
- \pmdraw@UedgesLoop% Draws upper edges
- #2%
- \pmdEmpty%
- \pmdraw@LedgesLoop% Draws lower edges
- #3%
- \pmdEmpty%
- \fi%
+ \@ifclassloaded{beamer}{% If in beamer
+ \uncover<\pmdraw@verticesTopUncover>{% Uncovers top vertices
+ \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices
+ \pmdraw@drawTopVertices% Draw base diagram
+ \else% If hiding top vertices
+ \phantom{%
+ \pmdraw@drawTopVertices% Draw base diagram
+ }%
+ \fi%
+ }%
+ \uncover<\pmdraw@verticesBottomUncover>{% Uncovers bottom vertices
+ \ifnum\value{pmdraw@ifVerticesBottom}=0% If drawing bottom vertices
+ \pmdraw@drawBottomVertices% Draw base diagram
+ \else% If hiding top vertices
+ \phantom{%
+ \pmdraw@drawBottomVertices% Draw base diagram
+ }%
+ \fi%
+ }%
+ \uncover<\pmdraw@edgesUncover>{% Uncovers edges
+ \ifnum\value{pmdraw@ifEdges}=0% If drawing edges
+ \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \else% If drawing transversal first
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \fi%
+ \else% If hiding edges
+ \phantom{%
+ \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \else% If drawing transversal first
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \fi%
+ }%
+ \fi%
+ }%
+ }{% If not in beamer
+ \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices
+ \pmdraw@drawTopVertices% Draw base diagram
+ \else% If hiding top vertices
+ \phantom{%
+ \pmdraw@drawTopVertices% Draw base diagram
+ }%
+ \fi%
+ \ifnum\value{pmdraw@ifVerticesBottom}=0% If drawing bottom vertices
+ \pmdraw@drawBottomVertices% Draw base diagram
+ \else% If hiding top vertices
+ \phantom{%
+ \pmdraw@drawBottomVertices% Draw base diagram
+ }%
+ \fi%
+ \ifnum\value{pmdraw@ifEdges}=0% If drawing edges
+ \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \else% If drawing transversal first
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \fi%
+ \else% If hiding edges
+ \phantom{%
+ \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \else% If drawing transversal first
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \fi%
+ }%
+ \fi%
+ }%
\else% If drawing edges first
- \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
- \pmdraw@UedgesLoop% Draws upper edges
- #2%
- \pmdEmpty%
- \pmdraw@LedgesLoop% Draws lower edges
- #3%
- \pmdEmpty%
- \pmdraw@TedgesLoop% Draws transversals
- #4%
- \pmdEmpty%
- \else% If drawing transversal first
- \pmdraw@TedgesLoop% Draws transversals
- #4%
- \pmdEmpty%
- \pmdraw@UedgesLoop% Draws upper edges
- #2%
- \pmdEmpty%
- \pmdraw@LedgesLoop% Draws lower edges
- #3%
- \pmdEmpty%
- \fi%
- \pmdraw@drawTopVertices% Draw base diagram
- \pmdraw@drawBottomVertices% Draw base diagram
+ \@ifclassloaded{beamer}{% If in beamer
+ \uncover<\pmdraw@edgesUncover>{% Uncovers edges
+ \ifnum\value{pmdraw@ifEdges}=0% If drawing edges
+ \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \else% If drawing transversal first
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \fi%
+ \else% If hiding edges
+ \phantom{%
+ \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \else% If drawing transversal first
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \fi%
+ }%
+ \fi%
+ }%
+ \uncover<\pmdraw@verticesTopUncover>{% Uncovers top vertices
+ \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices
+ \pmdraw@drawTopVertices% Draw base diagram
+ \else% If hiding top vertices
+ \phantom{%
+ \pmdraw@drawTopVertices% Draw base diagram
+ }%
+ \fi%
+ }%
+ \uncover<\pmdraw@verticesBottomUncover>{% Uncovers bottm vertices
+ \ifnum\value{pmdraw@ifVerticesBottom}=0% If drawing bottom vertices
+ \pmdraw@drawBottomVertices% Draw base diagram
+ \else% If hiding top vertices
+ \phantom{%
+ \pmdraw@drawBottomVertices% Draw base diagram
+ }%
+ \fi%
+ }%
+ }{% If not in beamer
+ \ifnum\value{pmdraw@ifEdges}=0% If drawing edges
+ \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \else% If drawing transversal first
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \fi%
+ \else% If hiding edges
+ \phantom{%
+ \ifnum\pmdraw@ifTedgesFirst=0% If drawing non-transversals first
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \else% If drawing transversal first
+ \pmdraw@TedgesLoop% Draws transversals
+ #4%
+ \pmdEmpty%
+ \pmdraw@UedgesLoop% Draws upper edges
+ #2%
+ \pmdEmpty%
+ \pmdraw@LedgesLoop% Draws lower edges
+ #3%
+ \pmdEmpty%
+ \fi%
+ }%
+ \fi%
+ \ifnum\value{pmdraw@ifVerticesTop}=0% If drawing top vertices
+ \pmdraw@drawTopVertices% Draw base diagram
+ \else% If hiding top vertices
+ \phantom{%
+ \pmdraw@drawTopVertices% Draw base diagram
+ }%
+ \fi%
+ \ifnum\value{pmdraw@ifVerticesBottom}=0% If drawing bottom vertices
+ \pmdraw@drawBottomVertices% Draw base diagram
+ \else% If hiding top vertices
+ \phantom{%
+ \pmdraw@drawBottomVertices% Draw base diagram
+ }%
+ \fi%
+ }%
\fi%
\pmdraw@hookAfterBrick% Hook after drawing brick
% Resets user keys and other flags to default values
@@ -767,6 +1248,42 @@
\renewcommand{\pmdraw@drawLabelTDrawOptions}{}%
\renewcommand{\pmdraw@drawLabelTNodeOptions}{}%
\renewcommand{\pmdraw@drawLedgesDrawOptions}{}%
+ \renewcommand{\pmdraw@drawNoLabelBa}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelBb}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelBc}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelBd}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelBe}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelBf}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelBg}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelBh}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelBi}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelTa}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelTb}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelTc}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelTd}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelTe}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelTf}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelTg}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelTh}{-1}%
+ \renewcommand{\pmdraw@drawNoLabelTi}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexBa}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexBb}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexBc}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexBd}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexBe}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexBf}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexBg}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexBh}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexBi}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexTa}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexTb}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexTc}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexTd}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexTe}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexTf}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexTg}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexTh}{-1}%
+ \renewcommand{\pmdraw@drawNoVertexTi}{-1}%
\renewcommand{\pmdraw@drawTedgesDrawOptions}{}%
\renewcommand{\pmdraw@drawUedgesDrawOptions}{}%
\renewcommand{\pmdraw@drawVertexOptions}{}%
@@ -776,6 +1293,9 @@
\renewcommand{\pmdraw@ifLabelsB}{0}%
\renewcommand{\pmdraw@ifLabelsT}{0}%
\renewcommand{\pmdraw@ifTedgesFirst}{0}%
+ \renewcommand{\pmdraw@edgesUncover}{1-}%
+ \renewcommand{\pmdraw@verticesBottomUncover}{1-}%
+ \renewcommand{\pmdraw@verticesTopUncover}{1-}%
\let\pmdraw@drawLabelBottom\pmdraw@drawLabelBottomDefault%
\let\pmdraw@drawLabelTop\pmdraw@drawLabelTopDefault%
\let\pmdraw@drawLabelBottom\pmdraw@drawLabelBottomDefault%
@@ -783,6 +1303,9 @@
\setcounter{pmdraw@blankT}{0}%
\setcounter{pmdraw@labelStartB}{1}%
\setcounter{pmdraw@labelStartT}{1}%
+ \setcounter{pmdraw@ifEdges}{0}%
+ \setcounter{pmdraw@ifVerticesBottom}{0}%
+ \setcounter{pmdraw@ifVerticesTop}{0}%
}
\newcommand{\pmdraw@drawLedges}[3][]{% Draws lower non-transversal edge, #1 options, #2 L vertex, #3 R vertex
\setcounter{pmdraw@NTlevel}{1}% Store default level of edge
@@ -796,28 +1319,105 @@
\pmdraw{edgeHeight}=\pmdraw@NTedgesHeight;% Set manual height
}%
\fi%
- \pmdraw@drawLedgesDraw{#2}{#3}% Draw edge
+ \@ifclassloaded{beamer}{% If in beamer
+ \uncover<\pmdraw@edgeUncover>{% Uncovers edge
+ \ifnum\value{pmdraw@ifEdge}=0% If drawing edge
+ \pmdraw@drawLedgesDraw{#2}{#3}% Draw edge
+ \else% If hiding edge
+ \phantom{%
+ \pmdraw@drawLedgesDraw{#2}{#3}% Draw edge
+ }%
+ \fi%
+ }%
+ }{% If not in beamer
+ \ifnum\value{pmdraw@ifEdge}=0% If drawing edge
+ \pmdraw@drawLedgesDraw{#2}{#3}% Draw edge
+ \else% If hiding edge
+ \phantom{%
+ \pmdraw@drawLedgesDraw{#2}{#3}% Draw edge
+ }%
+ \fi%
+ }%
% Resets user keys and other flags to default values
\renewcommand{\pmdraw@NTedgesHeight}{-1000}%
+ \renewcommand{\pmdraw@edgeUncover}{1-}%
+ \setcounter{pmdraw@ifEdge}{0}%
\let\pmdraw@drawLedgesDraw\pmdraw@drawLedgesDrawDefault%
\pmdraw@LedgesLoop% Restart for loop
}
\newcommand{\pmdraw@drawTedges}[3][]{% Draws transversal edge, #1 options, #2 upper vertex, #3 lower vertex
\setkeys{pmdraw@Tedges}{#1}% Processes options
- \pmdraw@drawTedgesDraw{#2}{#3}% Draw edge
- \let\pmdraw@drawTedgesDraw\pmdraw@drawTedgesDrawDefault% Resets user keys and other flags to default values
+ \@ifclassloaded{beamer}{% If in beamer
+ \uncover<\pmdraw@edgeUncover>{% Uncovers edge
+ \ifnum\value{pmdraw@ifEdge}=0% If drawing edge
+ \pmdraw@drawTedgesDraw{#2}{#3}% Draw edge
+ \else% If hiding edge
+ \phantom{%
+ \pmdraw@drawTedgesDraw{#2}{#3}% Draw edge
+ }%
+ \fi%
+ }%
+ }{% If not in beamer
+ \ifnum\value{pmdraw@ifEdge}=0% If drawing edge
+ \pmdraw@drawTedgesDraw{#2}{#3}% Draw edge
+ \else% If hiding edge
+ \phantom{%
+ \pmdraw@drawTedgesDraw{#2}{#3}% Draw edge
+ }%
+ \fi%
+ }%
+ % Resets user keys and other flags to default values
+ \renewcommand{\pmdraw@edgeUncover}{1-}%
+ \setcounter{pmdraw@ifEdge}{0}%
+ \let\pmdraw@drawTedgesDraw\pmdraw@drawTedgesDrawDefault%
\pmdraw@TedgesLoop% Restart for loop
}
\newcommand{\pmdraw@drawTopVertices}{% Draws top row of vertices
- \setcounter{pmdraw@topTotal}{\value{pmdraw@blankT}}% Store size of top row of vertices
- \addtocounter{pmdraw@topTotal}{\value{pmdraw@degreeT}}% Store size of top row of vertices
- \foreach \x in {1,...,\value{pmdraw@degreeT}} {% For each vertex in row
- \pmdraw@drawVertex{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw upper vertex
- \ifnum\pmdraw@ifLabelsT=1% If drawing labels
- \pmdraw@drawLabelTop{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}{\thepmdraw@labelStartT}% Draw label
- \stepcounter{pmdraw@labelStartT}% Update label counter
- \fi%
- }%
+ \setcounter{pmdraw@topTotal}{\value{pmdraw@blankT}}% Store size of top row of vertices
+ \addtocounter{pmdraw@topTotal}{\value{pmdraw@degreeT}}% Store size of top row of vertices
+ \foreach \x in {1,...,\value{pmdraw@degreeT}} {% For each vertex in row
+ \ifnum\pmdraw@drawNoVertexTa=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexTb=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexTc=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexTd=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexTe=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexTf=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexTg=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexTh=\x\else% If not skipping vertex
+ \ifnum\pmdraw@drawNoVertexTi=\x\else% If not skipping vertex
+ \pmdraw@drawVertex{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}% Draw upper vertex
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \ifnum\pmdraw@drawNoLabelTa=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelTb=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelTc=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelTd=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelTe=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelTf=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelTg=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelTh=\x\else% If not skipping label
+ \ifnum\pmdraw@drawNoLabelTi=\x\else% If not skipping label
+ \ifnum\pmdraw@ifLabelsT=1% If drawing labels
+ \pmdraw@drawLabelTop{\x + \value{pmdraw@blankT}}{\pmdraw@rowSep}{\thepmdraw@labelStartT}% Draw label
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \stepcounter{pmdraw@labelStartT}% Update label counter
+ }%
}
\newcommand{\pmdraw@drawUedges}[3][]{% Draws upper non-transversal edge, #1 options, #2 L vertex, #3 R vertex
\setcounter{pmdraw@NTlevel}{1}% Store default level of edge
@@ -831,9 +1431,29 @@
\pmdraw{edgeHeight}=\pmdraw@rowSep-\pmdraw@NTedgesHeight;% Set manual height
}%
\fi%
- \pmdraw@drawUedgesDraw{#2}{#3}% Draw edge
+ \@ifclassloaded{beamer}{% If in beamer
+ \uncover<\pmdraw@edgeUncover>{% Uncovers edge
+ \ifnum\value{pmdraw@ifEdge}=0% If drawing edge
+ \pmdraw@drawUedgesDraw{#2}{#3}% Draw edge
+ \else% If hiding edge
+ \phantom{%
+ \pmdraw@drawUedgesDraw{#2}{#3}% Draw edge
+ }%
+ \fi%
+ }%
+ }{% If not in beamer
+ \ifnum\value{pmdraw@ifEdge}=0% If drawing edge
+ \pmdraw@drawUedgesDraw{#2}{#3}% Draw edge
+ \else% If hiding edge
+ \phantom{%
+ \pmdraw@drawUedgesDraw{#2}{#3}% Draw edge
+ }%
+ \fi%
+ }%
% Resets user keys and other flags to default values
\renewcommand{\pmdraw@NTedgesHeight}{-1000}%
+ \renewcommand{\pmdraw@edgeUncover}{1-}%
+ \setcounter{pmdraw@ifEdge}{0}%
\let\pmdraw@drawLedgesDraw\pmdraw@drawLedgesDrawDefault%
\let\pmdraw@drawUedgesDraw\pmdraw@drawUedgesDrawDefault%
\pmdraw@UedgesLoop% Restart for loop
diff --git a/graphics/pmdraw/pmdraw.tex b/graphics/pgf/contrib/pmdraw/pmdraw.tex
index bba50fdd59..b4111bcff2 100644
--- a/graphics/pmdraw/pmdraw.tex
+++ b/graphics/pgf/contrib/pmdraw/pmdraw.tex
@@ -1,7 +1,7 @@
\documentclass{ltxdoc}
% *------------------------------*
-% |7````````````````````````````6|
+% |6````````````````````````````2|
% |`````____````____`````````````|
% |````|MFMF\ /MFMF|````````````|
% |````|MF|MF\/MF|MF|````````````|
@@ -13,7 +13,7 @@
% |``````````````|MF|````````````|
% |``````````````|MF|````````````|
% |``````````````|MF|````````````|
-% |8````````````````````````````4|
+% |3````````````````````````````0|
% *------------------------------*
\usepackage{pmdraw}
@@ -26,7 +26,7 @@
\hypersetup{colorlinks, linkcolor=blue, urlcolor=blue}
\title{The \textsf{pmdraw} package\thanks{This document
- corresponds to \textsf{pmdraw}~v1.3, 2024-04-09.}}
+ corresponds to \textsf{pmdraw}~v1.4, 2024-06-02.}}
\author{Matthias Fresacher \\ \texttt{matthias.ypg37@slmail.me}}
\maketitle
@@ -773,6 +773,63 @@ passes through options to the \verb`\draw` command of vertices. The default is n
\end{minipage}%
\end{center}
+\DescribeMacro{no vertex bottom 1}
+\DescribeMacro{ \vdots}
+\DescribeMacro{no vertex bottom 9}
+\DescribeMacro{no vertex top 1}
+\DescribeMacro{ \vdots}
+\DescribeMacro{no vertex top 9}
+specifies a vertex that is not drawn. Any of the nine available keys can be used in any order. It can be used to draw single vertices that are different to the others. If more than nine vertices need to be excluded, simply draw multiple bricks next to each other. The default is no argument.
+\begin{center}
+ \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax}
+ \begin{minipage}[c]{0.4\linewidth}
+\begin{verbatim}
+\pmdBrick[ % Options
+ degree=5,
+ no vertex top 1=2,
+ no vertex top 2=3,
+ no vertex bottom 1=4,
+ decorate after={
+ \fill[red] (4,0) circle (.1);
+ }
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+\end{verbatim}
+ \end{minipage}
+ \hfill
+ \begin{minipage}[c]{0.4\linewidth}
+ \end{minipage}
+ \end{minipage}%
+\end{center}
+\begin{center}
+\pmdBrick[ % Options
+ degree=5,
+ no vertex top 1=2,
+ no vertex top 2=3,
+ no vertex bottom 1=4,
+ decorate after={
+ \fill[red] (4,0) circle (.1);
+ }
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+\end{center}
+
\DescribeMacro{vertices options}
allows for the redefinition of the command that draws the vertices. It has two arguments, the \( x \) and \( y \)-position of the vertex. The default is
\begin{verbatim}
@@ -907,6 +964,65 @@ sets the starting value of the labels for the vertices. The default is one.
\end{minipage}%
\end{center}
+\DescribeMacro{no labels bottom 1}
+\DescribeMacro{ \vdots}
+\DescribeMacro{no labels bottom 9}
+\DescribeMacro{no labels top 1}
+\DescribeMacro{ \vdots}
+\DescribeMacro{no labels top 9}
+specifies a vertex for which no label is drawn. Any of the nine available keys can be used in any order. It can be used to insert single unique labels that are different to the others. If more than nine labels need to be excluded, simply draw multiple bricks next to each other. The default is no argument.
+\begin{center}
+ \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax}
+ \begin{minipage}[c]{0.4\linewidth}
+\begin{verbatim}
+\pmdBrick[ % Options
+ degree=5,
+ labels,
+ no label top 1=2,
+ no label top 2=3,
+ no label bottom 1=4,
+ decorate after={
+ \draw (3,2) node[above=6pt,red] {\(x\)};
+ }
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+\end{verbatim}
+ \end{minipage}
+ \hfill
+ \begin{minipage}[c]{0.4\linewidth}
+ \end{minipage}
+ \end{minipage}%
+\end{center}
+\begin{center}
+\pmdBrick[ % Options
+ degree=5,
+ labels,
+ no label top 1=2,
+ no label top 2=3,
+ no label bottom 1=4,
+ decorate after={
+ \draw (3,2) node[above=6pt,red] {\(x\)};
+ }
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+\end{center}
+
\DescribeMacro{labels top draw}\DescribeMacro{labels top node}\DescribeMacro{labels bottom draw}\DescribeMacro{labels bottom node}
passes through options to the \verb`\draw` and \verb`node` command of the labels of vertices. The default is no argument.
\begin{center}
@@ -1164,6 +1280,89 @@ passes through options to the \verb`\draw` and \verb`node` command of the dots.
}
\end{center}
+\DescribeMacro{vertices top phantom}\DescribeMacro{vertices bottom phantom}
+These flags allow for all of the top or bottom vertices to be hidden using the \texttt{phantom} command. Simply wraps the vertex drawing macros with a \texttt{phantom} command. This hiding will also apply to the labels of that row (top or bottom) of vertices. To only hide a selected number of vertices, use seperate bricks. The default is false.
+\begin{center}
+ \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax}
+ \begin{minipage}[c]{0.4\linewidth}
+\begin{verbatim}
+\pmdBrick[ % Options
+ degree=5,
+ vertices top phantom,
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+\end{verbatim}
+ \end{minipage}
+ \hfill
+ \begin{minipage}[c]{0.4\linewidth}
+\pmdBrick[ % Options
+ degree=5,
+ vertices top phantom
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+ \end{minipage}
+ \end{minipage}%
+\end{center}
+
+\DescribeMacro{vertices top uncover}\DescribeMacro{vertices bottom uncover}
+allows for all of the top or bottom vertices to be uncovered in a \texttt{beamer} presentation using the command \verb`\uncover<n->{text}`. Simply passes the slide uncover information \verb`<n->` to the embedded \texttt{uncover} command within the vertex drawing macros. This uncover will also apply to the labels of that row (top or bottom) of vertices. To only uncover a selected number of vertices, use seperate bricks. The default is~\texttt{1-}.
+\begin{center}
+ \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax}
+ \begin{minipage}[c]{0.4\linewidth}
+\begin{verbatim}
+\pmdBrick[ % Options
+ degree=5,
+ vertices top uncover={2,4-7,9-},
+ vertices bottom uncover={3-}
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+\end{verbatim}
+ \end{minipage}
+ \hfill
+ \begin{minipage}[c]{0.4\linewidth}
+\pmdBrick[ % Options
+ degree=5,
+ vertices top uncover={2,4-7,9-},
+ vertices bottom uncover={3-}
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+ \end{minipage}
+ \end{minipage}%
+\end{center}
+
+
\subsubsection{Edge options}
These options should be read in conjunction with Section~\ref{sec: edge/options}.
@@ -1472,6 +1671,86 @@ flag ensures transversal edges are drawn before non-transversal edges. The defau
\end{minipage}%
\end{center}
+\DescribeMacro{edges phantom}
+This flag allows for all edges to be hidden using the \texttt{phantom} command. Simply wraps the edge drawing macros with a \texttt{phantom} command. The default is false.
+\begin{center}
+ \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax}
+ \begin{minipage}[c]{0.4\linewidth}
+\begin{verbatim}
+\pmdBrick[ % Options
+ degree=5,
+ edges phantom
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+\end{verbatim}
+ \end{minipage}
+ \hfill
+ \begin{minipage}[c]{0.4\linewidth}
+\pmdBrick[ % Options
+ degree=5,
+ edges phantom
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+ \end{minipage}
+ \end{minipage}%
+\end{center}
+
+\DescribeMacro{edges uncover}
+allows for all edges to be uncovered in a \texttt{beamer} presentation using the command \verb`\uncover<n->{text}`. Simply passes the slide uncover information \verb`<n->` to the embedded \texttt{uncover} command within the edge drawing macros. The default is~\texttt{1-}.
+\begin{center}
+ \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax}
+ \begin{minipage}[c]{0.4\linewidth}
+\begin{verbatim}
+\pmdBrick[ % Options
+ degree=5,
+ edges uncover={2,4-7,9-}
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+\end{verbatim}
+ \end{minipage}
+ \hfill
+ \begin{minipage}[c]{0.4\linewidth}
+\pmdBrick[ % Options
+ degree=5,
+ edges uncover={2,4-7,9-}
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+ \end{minipage}
+ \end{minipage}%
+\end{center}
+
\subsubsection{Brace}
\DescribeMacro{brace}
@@ -1893,16 +2172,33 @@ passes through options to the \verb`\draw` command of the edge. The default is n
\DescribeMacro{options}
allows for the redefinition of the command that draws the non-transversal edge. It has two arguments, the start and end \( x \)-position of the edge. The default for an upper non-transversal is
\begin{verbatim}
- \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1,\pmdraw@rowSep) arc (180:270:\pmdraw{edgeHeight});% Draw left arch
- \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1+\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight});% Draw straight line
- \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight}) arc (270:360:\pmdraw{edgeHeight});% Draw right arc
+ \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions,
+ apply style/.expand once=\pmdraw@drawEdgeDrawOptions]
+ (#1,\pmdraw@rowSep) arc (180:270:\pmdraw{edgeHeight});% Draw left arch
+ \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions,
+ apply style/.expand once=\pmdraw@drawEdgeDrawOptions]
+ (#1+\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight})
+ -- (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight});
+ % Draw straight line
+ \draw[apply style/.expand once=\pmdraw@drawUedgesDrawOptions,
+ apply style/.expand once=\pmdraw@drawEdgeDrawOptions]
+ (#2-\pmdraw{edgeHeight},\pmdraw@rowSep-\pmdraw{edgeHeight})
+ arc (270:360:\pmdraw{edgeHeight});% Draw right arc
\renewcommand{\pmdraw@drawEdgeDrawOptions}{}% Reset draw options for edge
\end{verbatim}
and for a lower non-transversal
\begin{verbatim}
- \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1,0) arc (180:90:\pmdraw{edgeHeight});% Draw left arch
- \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#1+\pmdraw{edgeHeight},\pmdraw{edgeHeight}) -- (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight});% Draw straight line
- \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions,apply style/.expand once=\pmdraw@drawEdgeDrawOptions] (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight}) arc (90:0:\pmdraw{edgeHeight});% Draw right arc
+ \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions,
+ apply style/.expand once=\pmdraw@drawEdgeDrawOptions]
+ (#1,0) arc (180:90:\pmdraw{edgeHeight});% Draw left arch
+ \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions,
+ apply style/.expand once=\pmdraw@drawEdgeDrawOptions]
+ (#1+\pmdraw{edgeHeight},\pmdraw{edgeHeight})
+ -- (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight});% Draw straight line
+ \draw[apply style/.expand once=\pmdraw@drawLedgesDrawOptions,
+ apply style/.expand once=\pmdraw@drawEdgeDrawOptions]
+ (#2-\pmdraw{edgeHeight},\pmdraw{edgeHeight})
+ arc (90:0:\pmdraw{edgeHeight});% Draw right arc
\renewcommand{\pmdraw@drawEdgeDrawOptions}{}% Reset draw options for edge
\end{verbatim}
An example use is
@@ -1948,6 +2244,82 @@ An example use is
}
\end{center}
+\DescribeMacro{phantom}
+This flag allows for the edge to be hidden using the \texttt{phantom} command. Simply wraps the edge drawing macros with a \texttt{phantom} command. The default is false.
+\begin{center}
+ \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax}
+ \begin{minipage}[c]{0.4\linewidth}
+\begin{verbatim}
+\pmdBrick[ % Options
+ degree=5
+]{ % Upper non-transversal edges
+ [phantom]{1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ [phantom]{1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+\end{verbatim}
+ \end{minipage}
+ \hfill
+ \begin{minipage}[c]{0.4\linewidth}
+\pmdBrick[ % Options
+ degree=5
+]{ % Upper non-transversal edges
+ [phantom]{1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ [phantom]{1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+ \end{minipage}
+ \end{minipage}%
+\end{center}
+
+\DescribeMacro{uncover}
+allows for that edge to be uncovered in a \texttt{beamer} presentation using the command \verb`\uncover<n->{text}`. Simply passes the slide uncover information \verb`<n->` to the embedded \texttt{uncover} command within the edge drawing macros. This uncover is nested inside the \texttt{edges uncover} and hence the limitations of nested uncovers are present here. For example, an individual edge will not uncover until the \texttt{edges uncover} has been uncovered. In such instances only use individual uncovers for each edge. The default is~\texttt{1-}.
+\begin{center}
+ \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax}
+ \begin{minipage}[c]{0.4\linewidth}
+\begin{verbatim}
+\pmdBrick[ % Options
+ degree=5
+]{ % Upper non-transversal edges
+ [uncover={2,4-7,9-}]{1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ [uncover={3-}]{1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+\end{verbatim}
+ \end{minipage}
+ \hfill
+ \begin{minipage}[c]{0.4\linewidth}
+\pmdBrick[ % Options
+ degree=5
+]{ % Upper non-transversal edges
+ [uncover={2,4-7,9-}]{1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ [uncover={3-}]{1}{2}
+ {3}{4}
+}{ % Transversal edges
+ {1}{1}
+ {3}{4}
+}
+ \end{minipage}
+ \end{minipage}%
+\end{center}
+
\subsubsection{Transversal edge options} \label{sec: T edge/options}
\DescribeMacro{height}
@@ -2178,6 +2550,81 @@ An example use is
}
\end{center}
+\DescribeMacro{phantom}
+This flag allows for the edge to be hidden using the \texttt{phantom} command. Simply wraps the edge drawing macros with a \texttt{phantom} command. The default is false.
+\begin{center}
+ \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax}
+ \begin{minipage}[c]{0.4\linewidth}
+\begin{verbatim}
+\pmdBrick[ % Options
+ degree=5
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ [phantom]{1}{1}
+ {3}{4}
+}
+\end{verbatim}
+ \end{minipage}
+ \hfill
+ \begin{minipage}[c]{0.4\linewidth}
+\pmdBrick[ % Options
+ degree=5
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ [phantom]{1}{1}
+ {3}{4}
+}
+ \end{minipage}
+ \end{minipage}%
+\end{center}
+
+\DescribeMacro{uncover}
+allows for that edge to be uncovered in a \texttt{beamer} presentation using the command \verb`\uncover<n->{text}`. Simply passes the slide uncover information \verb`<n->` to the embedded \texttt{uncover} command within the edge drawing macros. This uncover is nested inside the \texttt{edges uncover} and hence the limitations of nested uncovers are present here. For example, an individual edge will not uncover until the \texttt{edges uncover} has been uncovered. In such instances only use individual uncovers for each edge. The default is~\texttt{1-}.
+\begin{center}
+ \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax}
+ \begin{minipage}[c]{0.4\linewidth}
+\begin{verbatim}
+\pmdBrick[ % Options
+ degree=5
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ [uncover={2,4-7,9-}]{1}{1}
+ {3}{4}
+}
+\end{verbatim}
+ \end{minipage}
+ \hfill
+ \begin{minipage}[c]{0.4\linewidth}
+\pmdBrick[ % Options
+ degree=5
+]{ % Upper non-transversal edges
+ {1}{2}
+ {2}{5}
+}{ % Lower non-transversal edges
+ {1}{2}
+ {3}{4}
+}{ % Transversal edges
+ [uncover={2,4-7,9-}]{1}{1}
+ {3}{4}
+}
+ \end{minipage}
+ \end{minipage}%
+\end{center}
\subsection{Brace} \label{sec: brace}
@@ -3020,6 +3467,178 @@ passes through options to the \verb`\draw` command of the added edges. The defau
}
\end{center}
+\DescribeMacro{edges added phantom}
+This flag allows for the added edges to be hidden using the \texttt{phantom} command. Simply wraps the edge drawing macros with a \texttt{phantom} command. The default is false.
+\begin{center}
+ \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax}
+ \begin{minipage}[c]{0.4\linewidth}
+\begin{verbatim}
+\pmdProduct[ % Options
+ edges added phantom
+]{ % Added edges
+ {1}{5}
+}{ % Top diagram
+ { % Brick 1
+ [ % Options
+ degree=5
+ ]{ % Upper non-transversal edges
+ \pmdEmpty
+ }{ % Lower non-transversal edges
+ \pmdEmpty
+ }{ % Transversal edges
+ {1}{1}
+ {2}{2}
+ {3}{3}
+ {4}{4}
+ {5}{5}
+ }
+ }
+}{ % Bottom diagram
+ { % Brick 1
+ [ % Options
+ degree=5
+ ]{ % Upper non-transversal edges
+ {2}{3}
+ {4}{5}
+ }{ % Lower non-transversal edges
+ {2}{3}
+ {4}{5}
+ }{ % Transversal edges
+ {1}{1}
+ }
+ }
+}
+\end{verbatim}
+ \end{minipage}
+ \hfill
+ \begin{minipage}[c]{0.4\linewidth}
+ \end{minipage}
+ \end{minipage}%
+\end{center}
+\begin{center}
+\pmdProduct[ % Options
+ edges added phantom
+]{ % Added edges
+ {1}{5}
+}{ % Top diagram
+ { % Brick 1
+ [ % Options
+ degree=5
+ ]{ % Upper non-transversal edges
+ \pmdEmpty
+ }{ % Lower non-transversal edges
+ \pmdEmpty
+ }{ % Transversal edges
+ {1}{1}
+ {2}{2}
+ {3}{3}
+ {4}{4}
+ {5}{5}
+ }
+ }
+}{ % Bottom diagram
+ { % Brick 1
+ [ % Options
+ degree=5
+ ]{ % Upper non-transversal edges
+ {2}{3}
+ {4}{5}
+ }{ % Lower non-transversal edges
+ {2}{3}
+ {4}{5}
+ }{ % Transversal edges
+ {1}{1}
+ }
+ }
+}
+\end{center}
+
+\DescribeMacro{edges added uncover}
+allows for the added edges to be uncovered in a \texttt{beamer} presentation using the command \verb`\uncover<n->{text}`. Simply passes the slide uncover information \verb`<n->` to the embedded \texttt{uncover} command within the added edge drawing macros. The default is~\texttt{1-}.
+\begin{center}
+ \begin{minipage}{\dimexpr0.85\textwidth-2\fboxrule-2\fboxsep\relax}
+ \begin{minipage}[c]{0.4\linewidth}
+\begin{verbatim}
+\pmdProduct[ % Options
+ edges added uncover={2,4-7,9-}
+]{ % Added edges
+ {1}{5}
+}{ % Top diagram
+ { % Brick 1
+ [ % Options
+ degree=5
+ ]{ % Upper non-transversal edges
+ \pmdEmpty
+ }{ % Lower non-transversal edges
+ \pmdEmpty
+ }{ % Transversal edges
+ {1}{1}
+ {2}{2}
+ {3}{3}
+ {4}{4}
+ {5}{5}
+ }
+ }
+}{ % Bottom diagram
+ { % Brick 1
+ [ % Options
+ degree=5
+ ]{ % Upper non-transversal edges
+ {2}{3}
+ {4}{5}
+ }{ % Lower non-transversal edges
+ {2}{3}
+ {4}{5}
+ }{ % Transversal edges
+ {1}{1}
+ }
+ }
+}
+\end{verbatim}
+ \end{minipage}
+ \hfill
+ \begin{minipage}[c]{0.4\linewidth}
+ \end{minipage}
+ \end{minipage}%
+\end{center}
+\begin{center}
+\pmdProduct[ % Options
+ edges added uncover={2,4-7,9-}
+]{ % Added edges
+ {1}{5}
+}{ % Top diagram
+ { % Brick 1
+ [ % Options
+ degree=5
+ ]{ % Upper non-transversal edges
+ \pmdEmpty
+ }{ % Lower non-transversal edges
+ \pmdEmpty
+ }{ % Transversal edges
+ {1}{1}
+ {2}{2}
+ {3}{3}
+ {4}{4}
+ {5}{5}
+ }
+ }
+}{ % Bottom diagram
+ { % Brick 1
+ [ % Options
+ degree=5
+ ]{ % Upper non-transversal edges
+ {2}{3}
+ {4}{5}
+ }{ % Lower non-transversal edges
+ {2}{3}
+ {4}{5}
+ }{ % Transversal edges
+ {1}{1}
+ }
+ }
+}
+\end{center}
+
\section{Future features/work}
I have attempted to make most use cases easy to use with dedicated functionality that does not require significant \LaTeX\ knowledge whilst at the same time provide more advanced interfaces to allow for hopefully almost complete customisability for those who put in the effort.
@@ -3032,13 +3651,16 @@ The following are some of the aims for the future for this package:
\item Add warning and error messages to log.
\item Allow all brick keys to work as diagram keys that apply to all bricks in a diagram. This will require setting up a flag for each key so that the diagram key sets the brick key but the brick key is not reset after drawing the first brick. This process also will need to be able to handle when a single brick has a custom special different key value and that this is reset to the digram key value and not the global default key value.
\item Allow appropriate diagram keys to work as brick keys. Notably the \texttt{grid} key.
- \item The creation of user profiles that allows for fast and efficient setting of default key values that are different to the package defaults. Hence within a diagram, there can be a number of different diagram styles that can be accessed with one command.
+ \item The creation of user profiles that allows for fast and efficient setting of default key values that are different to the package defaults. Hence within a diagram, there can be a number of different diagram styles that can be accessed with one command. That is, in the options for a diagram, have this profile key.
+ \item Have global settings so that all diagrams in a document have the specified options.
\item Allow for adjusting the horizontal spacing of vertices. Need to think about making that a simple scale factor so that integer interface for edge positions is the same but then hooks will have very messy coordinates or keep it as absolute coordinates with messy edges. Alternatively, do both, allowing the user to choose which option to do and somehow distinguish between the two in the background.
\item Create \texttt{pmdMirror} command that mirrors all upper non-transversals into lower non-transversals.
\item Create \texttt{invert} key for bricks, diagrams and product diagrams that inverts everything. Probably easiest done with a \texttt{scope} environment around everything and \texttt{yscale=-1}.
\item For product diagram, have interface where you input diagram instead of bricks so that you have access to diagram options.
\item Create a transversal edge key \texttt{identity} so that all edges in between the two values are straight vertical edges. Thus eliminating the need to write out each edge manually.
\item Create \texttt{shift} key for edges that shifts horizontal position.
+ \item Decouple the uncover of labels from \texttt{vertices top uncover}/\texttt{vertices bottom uncover}.
+ \item Decouple the phantom of labels from \texttt{vertices top phantom}/\texttt{vertices bottom phantom}.
\end{enumerate}
\section{Examples}
diff --git a/graphics/pgf/contrib/spath3/README b/graphics/pgf/contrib/spath3/README.txt
index dad3e28a92..b1104b7f4d 100644
--- a/graphics/pgf/contrib/spath3/README
+++ b/graphics/pgf/contrib/spath3/README.txt
@@ -1,6 +1,6 @@
----------------------------------------------------------------
spath3 --- LaTeX3 functions for manipulating PGF soft paths
-E-mail: loopspace@mathforge.org
+E-mail: Andrew Stacey <loopspace@mathforge.org>
Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
----------------------------------------------------------------
diff --git a/graphics/pgf/contrib/spath3/spath3.pdf b/graphics/pgf/contrib/spath3/spath3.pdf
index 9282e0adfe..6ade2656ac 100644
--- a/graphics/pgf/contrib/spath3/spath3.pdf
+++ b/graphics/pgf/contrib/spath3/spath3.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spath3/spath3.tex b/graphics/pgf/contrib/spath3/spath3.tex
index c8e9d65af7..897f5f7b3d 100644
--- a/graphics/pgf/contrib/spath3/spath3.tex
+++ b/graphics/pgf/contrib/spath3/spath3.tex
@@ -1,5 +1,5 @@
\RequirePackage{shellesc}
-\immediate\write18{tex spath3_code.dtx}
+%\immediate\write18{tex spath3_code.dtx}
\documentclass{l3doc}
\usepackage{tikz}
\usetikzlibrary{
@@ -50,27 +50,29 @@
\title{The \textsf{spath3} Package: Documentation}
\author{Andrew Stacey \\ \url{loopspace@mathforge.org}}
- \date{\fileversion~from \filedate}
+\date{\fileversion~from \filedate}
- \begin{document}
+\let\OriginalBar=|
- \maketitle
+\begin{document}
+
+\maketitle
\tableofcontents
- \section{Introduction}
+\section{Introduction}
- The \texttt{spath3} package was originally designed as a low-level package for manipulating the \emph{soft paths} defined by PGF/TikZ.
- Soft paths form one stage of the stack of translations between what the author writes in the \texttt{tikzpicture} environments in their \LaTeX\ document and what is eventually written to the output file.
- Most of the complicated processing has been done by the time a soft path is constructed, but it is still very definitely a \TeX\ object and there has not, for example, been any consideration as to what the eventual output file format is (such as PDF, DVI, or SVG).
- So it is very amenable to being modified at this stage and this package provides a set of routines for doing so.
+The \texttt{spath3} package was originally designed as a low-level package for manipulating the \emph{soft paths} defined by PGF/TikZ.
+Soft paths form one stage of the stack of translations between what the author writes in the \texttt{tikzpicture} environments in their \LaTeX\ document and what is eventually written to the output file.
+Most of the complicated processing has been done by the time a soft path is constructed, but it is still very definitely a \TeX\ object and there has not, for example, been any consideration as to what the eventual output file format is (such as PDF, DVI, or SVG).
+So it is very amenable to being modified at this stage and this package provides a set of routines for doing so.
- The original purpose was to provide a common core on which other packages would be built.
- Indeed, the packages \texttt{calligraphy}, \texttt{knots}, and \texttt{penrose} all use this package.
- However, over time I've found myself wanting to use the routines of this package at a higher level and so have designed some user-level interfaces.
- This document documents those.
+The original purpose was to provide a common core on which other packages would be built.
+Indeed, the packages \texttt{calligraphy}, \texttt{knots}, and \texttt{tilings} all use this package.
+However, over time I've found myself wanting to use the routines of this package at a higher level and so have designed some user-level interfaces.
+This document documents those.
- To clarify some terminology used in this document (and more generally, this package), I regard paths as being composed of \emph{segments} and \emph{components}.
+To clarify some terminology used in this document (and more generally, this package), I regard paths as being composed of \emph{segments} and \emph{components}.
A \emph{segment} is a minimal drawing piece.
Thus it might be a straight line or a B\'ezier curve.
A \emph{component} is a minimal connected section of the path.
@@ -634,6 +636,24 @@ The ones that keep the middle need two parameters to specify the break points.
\end{function}
+\begin{function}{
+ arrow shortening
+}
+\begin{syntax}
+|arrow shortening|
+|arrow shortening=|\marg{true{\OriginalBar}false}
+\end{syntax}
+
+When an arrow is added to a path then the path is shortened so that the arrow tip is at the end of where the path should end up.
+Placing an arrow, therefore, has two effects: modifying the path and rendering the arrow.
+The former should happen before a soft path is manipulated, the latter afterwards.
+This key allows for the necessary separation to occur.
+Invoking it when the path is used disables the shortening at that juncture.
+
+Note that if the path (or its last segment) is very short then when the arrow is eventually placed it may end up pointing backwards.
+Fixing this is on the \emph{ToDo} list!
+\end{function}
+
\subsection{Exporting Paths}
There are two keys to export a path.
@@ -908,6 +928,21 @@ The intention with the second key is that it is similar to what happens with the
\end{tikzpicture}
\end{example}
+\begin{example}
+\begin{tikzpicture}[>=Latex, line width=5pt]
+% Just a simple line
+\draw (0,1) to[bend left] +(5,0);
+% Same line but with arrows, also save the path
+\draw[->.>, spath/save=arrow] (0,0) to[bend left] +(5,0);
+% Let's redraw that path without the arrows - it's short! But also distorted
+\draw[spath/use={arrow,transform={yshift=-1cm}}];
+% So if we redraw it with arrows it gets doubly shortened
+\draw[->.>,spath/use={arrow,transform={yshift=-2cm}}];
+% If we disable the shortening, the arrows end up in the right place
+\draw[->.>,spath/use={arrow,transform={yshift=-3cm}}, spath/arrow shortening=false];
+\end{tikzpicture}
+\end{example}
+
\item Intersections.
One of the main motivations for implementing the intersection routines was to provide a different way of drawing knots and links and similar diagrams.
diff --git a/graphics/pgf/contrib/spath3/spath3_code.dtx b/graphics/pgf/contrib/spath3/spath3_code.dtx
index 031c0e7bd3..3b0178db5a 100644
--- a/graphics/pgf/contrib/spath3/spath3_code.dtx
+++ b/graphics/pgf/contrib/spath3/spath3_code.dtx
@@ -5,7 +5,7 @@
%<*readme>
----------------------------------------------------------------
spath3 --- LaTeX3 functions for manipulating PGF soft paths
-E-mail: loopspace@mathforge.org
+E-mail: Andrew Stacey <loopspace@mathforge.org>
Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
----------------------------------------------------------------
@@ -27,7 +27,7 @@ As applications of its use, included are a package for drawing calligraphic path
\preamble
----------------------------------------------------------------
spath3 --- Functions for manipulating PGF soft paths
-E-mail: loopspace@mathforge.org
+E-mail: Andrew Stacey <loopspace@mathforge.org>
Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
----------------------------------------------------------------
@@ -35,7 +35,7 @@ See http://www.latex-project.org/lppl.txt
\endpreamble
\postamble
-Copyright (C) 2011-2021 by Andrew Stacey <loopspace@mathforge.org>
+Copyright (C) 2011-2024 by Andrew Stacey <loopspace@mathforge.org>
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License (LPPL), either
@@ -60,7 +60,7 @@ and the derived files spath3.ins,
calligraphy.pdf
knots.pdf
spath3.pdf
- README
+ README.txt
\endpostamble
\usedir{tex/latex/spath3}
@@ -143,7 +143,7 @@ and the derived files spath3.ins,
%</driver>
% \fi
%
-% \CheckSum{10189}
+% \CheckSum{10278}
%
% \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
@@ -171,6 +171,7 @@ and the derived files spath3.ins,
% \changes{2.4}{2021/02/21}{Rejigged how the routines for using paths were implemented, added some more routines for joining paths.}
% \changes{2.6}{2021/11/23}{Modified core routines to cope with a "true rectangle" path; added routines for splitting at a parametrised point.}
% \changes{2.7}{2022/08/24}{Bug fixes}
+% \changes{2.8}{2024/05/31}{Routine to disable arrow shortening, bug fixes}
%
% \DoNotIndex{\newcommand,\newenvironment}
%
@@ -198,7 +199,7 @@ and the derived files spath3.ins,
% It was originally not really intended for use by end users but as a foundation on which other packages can be built.
% However, over the years I've found myself using it at ever higher levels and so a set of interfaces has been designed using TikZ keys.
%
-% It also provides the engine that drives a few other packages, such as the \Verb+calligraphy+, \Verb+knot+, and \Verb+penrose+ packages.
+% It also provides the engine that drives a few other packages, such as the \Verb+calligraphy+, \Verb+knot+, and \Verb+tilings+ (formerly, \Verb+penrose+) packages.
% The first two of these are subpackages of this one.
% The \Verb+calligraphy+ package simulates a calligraphic pen stroking a path.
% The \Verb+knots+ package can be used to draw knot (and similar) diagrams.
@@ -208,7 +209,7 @@ and the derived files spath3.ins,
% \begin{itemize}
% \item \Verb+calligraphy+
% \item \Verb+knots+
-% \item \Verb+penrose+
+% \item \Verb+tilings+
% \item \Verb+spath3+ (\emph{this} document is the code, there's another which focusses on usage)
% \end{itemize}
%
@@ -259,7 +260,7 @@ and the derived files spath3.ins,
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\RequirePackage{pgf}
-\ProvidesExplPackage {spath3} {2022/08/24} {2.7} {Functions for
+\ProvidesExplPackage {spath3} {2024/05/31} {2.8} {Functions for
manipulating PGF soft paths}
\RequirePackage{xparse}
% \end{macrocode}
@@ -375,6 +376,13 @@ manipulating PGF soft paths}
\bool_new:N \l_spath_movetorelevant_bool
% \end{macrocode}
%
+% When manipulating soft paths, we might need to separate the shortening due to an arrow from when the path is rendered.
+%
+% \begin{macrocode}
+\bool_new:N \l_spath_arrow_shortening_bool
+\bool_set_true:N \l_spath_arrow_shortening_bool
+% \end{macrocode}
+%
% The intersection routine can't happen inside a group so we need two token lists to hold the paths that we'll intersect.
%
% \begin{macrocode}
@@ -457,7 +465,7 @@ manipulating PGF soft paths}
{
\tl_set:Nx \l_@@_tmpc_tl {\tl_head:N \l_@@_tmpa_tl}
\tl_set:Nx \l_@@_tmpa_tl {\tl_tail:N \l_@@_tmpa_tl}
- \tl_case:NnF \l_@@_tmpc_tl
+ \token_case_meaning:NnF \l_@@_tmpc_tl
{
\c_spath_moveto_tl
{
@@ -718,7 +726,7 @@ manipulating PGF soft paths}
\int_set:Nn \l_@@_tmpa_int {0}
\tl_map_inline:nn {#1} {
\tl_set:Nn \l_@@_tmpa_tl {##1}
- \tl_case:NnT \l_@@_tmpa_tl
+ \token_case_meaning:NnT \l_@@_tmpa_tl
{
\c_spath_lineto_tl {}
\c_spath_curveto_tl {}
@@ -763,7 +771,7 @@ manipulating PGF soft paths}
\int_set:Nn \l_@@_tmpa_int {0}
\tl_map_inline:nn {#1} {
\tl_set:Nn \l_@@_tmpa_tl {##1}
- \tl_case:Nn \l_@@_tmpa_tl
+ \token_case_meaning:Nn \l_@@_tmpa_tl
{
\c_spath_moveto_tl
{
@@ -910,7 +918,7 @@ manipulating PGF soft paths}
}
{
\tl_set:Nx \l_@@_tmpb_tl {\tl_head:N \l_@@_tmpa_tl}
- \tl_case:Nn \l_@@_tmpb_tl
+ \token_case_meaning:Nn \l_@@_tmpb_tl
{
\c_spath_moveto_tl
{
@@ -1102,7 +1110,7 @@ manipulating PGF soft paths}
}
{
\tl_set:Nx \l_@@_tmpb_tl {\tl_head:N \l_@@_tmpa_tl}
- \tl_case:Nn \l_@@_tmpb_tl
+ \token_case_meaning:Nn \l_@@_tmpb_tl
{
\c_spath_moveto_tl
{
@@ -1229,7 +1237,7 @@ manipulating PGF soft paths}
\tl_set:Nx \l_@@_tmpc_tl {\tl_head:N \l_@@_tmpa_tl}
\bool_set_false:N \l_@@_rect_bool
- \tl_case:NnTF \l_@@_tmpc_tl
+ \token_case_meaning:NnTF \l_@@_tmpc_tl
{
\c_spath_moveto_tl {
@@ -1679,8 +1687,8 @@ manipulating PGF soft paths}
\tl_clear:N \l_@@_tmpa_tl
\tl_put_right:Nn \l_@@_tmpa_tl {
\ExplSyntaxOn
- \tl_clear_new:N #1
- \tl_set:Nn #1 {#2}
+ \tl_gclear_new:N #1
+ \tl_gset:Nn #1 {#2}
\ExplSyntaxOff
}
\protected@write\@auxout{}{
@@ -3054,6 +3062,35 @@ manipulating PGF soft paths}
}
\cs_generate_variant:Nn \spath_gbake_shorten:N {c}
% \end{macrocode}
+%
+% Shortening the path when it is baked can cause issues with arrows.
+% Putting an arrow in a path definition affects the path because the path gets shortened so that the arrow ends where the path was meant to end.
+% So an arrow affects the path definition, but the arrow is not itself part of the path so if an arrow is used when the path is defined and again when the path is used, the path will be shortened twice which might not be what is intended.
+% Therefore it is useful to have a way to disable the shortening and place an arrow tip at the actual end of the line.
+% The following code achieves that.
+%
+% Save the original command that computes the arrow shortening.
+% \begin{macrocode}
+\cs_set_eq:Nc \@@_pgf_arrow_compute_shortening:n {pgf@arrow@compute@shortening}
+% \end{macrocode}
+%
+% After \verb+\pgf@arrow@compute@shortening+ then \verb+\pgf@xa+ is the amount to shorten the line by, so we will be setting that to 0pt.
+% Then \verb+\pgf@xb+ is the length of the arrow head which is used to position the arrow and so before zeroing \verb+\pgf@xa+ we subtract it from \verb+\pgf@xb+ so that the arrow is placed so that its back point is at the current position.
+%
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_arrow_compute_shortening:n #1
+{
+ \@@_pgf_arrow_compute_shortening:n {#1}
+ \bool_if:NF \l_spath_arrow_shortening_bool
+ {
+ \dim_sub:cn {pgf@xb} {\dim_use:c {pgf@xa}}
+ \dim_zero:c {pgf@xa}
+ }
+}
+
+\cs_set_eq:cN {pgf@arrow@compute@shortening} \@@_arrow_compute_shortening:n
+% \end{macrocode}
+%
% \end{macro}
%
% \begin{macro}[internal]{
@@ -3209,7 +3246,7 @@ manipulating PGF soft paths}
\tl_set:Nx \l_@@_tmpc_tl {\tl_head:N \l_@@_tmpa_tl}
\tl_set:Nx \l_@@_tmpa_tl {\tl_tail:N \l_@@_tmpa_tl}
- \tl_case:NnF \l_@@_tmpc_tl
+ \token_case_meaning:NnF \l_@@_tmpc_tl
{
\c_spath_closepath_tl {
@@ -3930,7 +3967,7 @@ manipulating PGF soft paths}
}
{
\tl_set:Nx \l_@@_tmpc_tl {\tl_head:N \l_@@_tmpa_tl}
- \tl_case:NnF \l_@@_tmpc_tl
+ \token_case_meaning:NnF \l_@@_tmpc_tl
{
\c_spath_curvetoa_tl
{
@@ -4225,7 +4262,7 @@ manipulating PGF soft paths}
{
\tl_set:Nx \l_@@_tmpf_tl {\tl_head:N \l_@@_tmpe_tl}
\tl_set:Nx \l_@@_tmpe_tl {\tl_tail:N \l_@@_tmpe_tl }
- \tl_case:Nn \l_@@_tmpf_tl
+ \token_case_meaning:Nn \l_@@_tmpf_tl
{
\c_spath_lineto_tl
{
@@ -4279,7 +4316,7 @@ manipulating PGF soft paths}
}
{
- \tl_case:Nn \l_@@_tmpf_tl
+ \token_case_meaning:Nn \l_@@_tmpf_tl
{
\c_spath_lineto_tl
{
@@ -5018,7 +5055,7 @@ manipulating PGF soft paths}
\tl_clear:N \l_@@_tmpc_tl
- \tl_case:Nn \l_@@_tmpb_tl
+ \token_case_meaning:Nn \l_@@_tmpb_tl
{
\c_spath_moveto_tl
{
@@ -5263,7 +5300,7 @@ manipulating PGF soft paths}
\tl_clear:N \l_@@_tmpc_tl
- \tl_case:Nn \l_@@_tmpb_tl
+ \token_case_meaning:Nn \l_@@_tmpb_tl
{
\c_spath_moveto_tl
{
@@ -6383,7 +6420,7 @@ manipulating PGF soft paths}
\tl_map_inline:nn {#1}
{
\tl_set:Nn \l_@@_tmpb_tl {##1}
- \tl_case:NnF \l_@@_tmpb_tl
+ \token_case_meaning:NnF \l_@@_tmpb_tl
{
\c_spath_moveto_tl
{
@@ -6516,10 +6553,14 @@ manipulating PGF soft paths}
\cs_new_protected_nopar:Npn \spath_protocol_path:n #1
{
\spath_minbb:Nn \l_@@_tmpa_tl {#1}
- \exp_last_unbraced:NV \pgf@protocolsizes\l_@@_tmpa_tl
+ \dim_set:Nn \l_@@_tmpa_dim {\tl_item:Nn \l_@@_tmpa_tl {1}}
+ \dim_set:Nn \l_@@_tmpb_dim {\tl_item:Nn \l_@@_tmpa_tl {2}}
+ \pgf@protocolsizes\l_@@_tmpa_dim\l_@@_tmpb_dim
\spath_maxbb:Nn \l_@@_tmpa_tl {#1}
- \exp_last_unbraced:NV \pgf@protocolsizes\l_@@_tmpa_tl
+ \dim_set:Nn \l_@@_tmpa_dim {\tl_item:Nn \l_@@_tmpa_tl {1}}
+ \dim_set:Nn \l_@@_tmpb_dim {\tl_item:Nn \l_@@_tmpa_tl {2}}
+ \pgf@protocolsizes\l_@@_tmpa_dim\l_@@_tmpb_dim
}
\cs_generate_variant:Nn \spath_protocol_path:n {V}
% \end{macrocode}
@@ -6880,7 +6921,7 @@ manipulating PGF soft paths}
}
}
{
- \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+ \msg_warning:nnx { spath3 } { missing soft path } { #2 }
}
\tl_use:N \l_@@_check_tl
}
@@ -9027,12 +9068,8 @@ manipulating PGF soft paths}
% This puts a conditional around the \texttt{spot weld} key because when figuring out a knot drawing then we will initially want to render it without the spot weld to keep the number of components constant.
%
% \begin{macrocode}
- draft~ mode/.is~ choice,
- draft~ mode/true/.code={
- \bool_set_true:N \l_@@_draft_bool
- },
- draft~ mode/false/.code={
- \bool_set_false:N \l_@@_draft_bool
+ draft~ mode/.code={
+ \@@_set_bool:Nn \l_@@_draft_bool {#1}
},
maybe~ spot~ weld/.code={
\bool_if:NF \l_@@_draft_bool
@@ -9113,6 +9150,12 @@ manipulating PGF soft paths}
},
% \end{macrocode}
%
+% \begin{macrocode}
+ arrow~ shortening/.code={
+ \@@_set_bool:Nn \l_spath_arrow_shortening_bool {#1}
+ },
+% \end{macrocode}
+%
% For single argument commands which take a path as their argument, set the default to be \Verb+current+ so that they use the current path.
%
% \begin{macrocode}
@@ -9616,7 +9659,7 @@ manipulating PGF soft paths}
\dim_set:Nn \l_@@_tmpb_dim {\tl_item:Nn \l_@@_tmpa_tl {3}}
\tl_set:Nx \l_@@_tmpb_tl {\tl_item:Nn \l_@@_tmpa_tl {4}}
- \tl_case:NnF \l_@@_tmpb_tl
+ \token_case_meaning:NnF \l_@@_tmpb_tl
{
\c_spath_lineto_tl
{
@@ -9668,7 +9711,7 @@ manipulating PGF soft paths}
\dim_set:Nn \l_@@_tmpb_dim {\tl_item:Nn \l_@@_tmpa_tl {-1}}
\tl_set:Nx \l_@@_tmpb_tl {\tl_item:Nn \l_@@_tmpa_tl {-3}}
- \tl_case:NnF \l_@@_tmpb_tl
+ \token_case_meaning:NnF \l_@@_tmpb_tl
{
\c_spath_lineto_tl
{
@@ -10411,6 +10454,15 @@ manipulating PGF soft paths}
}
}
+\cs_new_nopar:Npn \knot_show_strand:n #1
+{
+ \bool_if:NT \l_@@_debugging_bool
+ {
+ \iow_term:n {===Knot~ debug: #1===}
+ \spath_show:v {knot #1}
+ }
+}
+
\cs_generate_variant:Nn \knot_debug:n {x}
% \end{macrocode}
% \end{macro}
@@ -10592,6 +10644,7 @@ manipulating PGF soft paths}
knot~ diagram/only~ when~ rendering/.try,
only~ when~ rendering/.try,
}
+ \knot_show_strand:n {strand #1}
\spath_tikz_path:Vv \l_@@_tmpa_tl {knot strand #1}
\group_end:
\endpgfscope
@@ -10629,6 +10682,7 @@ manipulating PGF soft paths}
}
{
\tl_clear:N \l_@@_tmpa_tl
+ \spath_remove_empty_components:c {knot strand #1}
\spath_initialpoint:Nv \l_@@_tmpa_tl {knot strand #1}
\tl_put_left:NV \l_@@_tmpa_tl \c_spath_moveto_tl
\spath_segments_to_seq:Nv \l_@@_segments_seq {knot strand #1}
@@ -10649,7 +10703,7 @@ manipulating PGF soft paths}
{
\knot_debug:n {knot~ split~ self~ intersects}
\tl_set:Nx \l_@@_tmpc_tl {\tl_item:nn {#1} {4}}
- \tl_case:NnF \l_@@_tmpc_tl
+ \token_case_meaning:NnF \l_@@_tmpc_tl
{
\c_spath_curvetoa_tl
{
@@ -11271,6 +11325,7 @@ manipulating PGF soft paths}
\int_set_eq:NN \l_@@_component_start_int \g_@@_filaments_int
\int_incr:N \l_@@_component_start_int
\tl_set_eq:Nc \l_@@_tmpa_tl {l_@@_options_strand #1}
+ \spath_remove_empty_components:c {knot strand #1}
\spath_segments_to_seq:Nv \l_@@_segments_seq {knot strand #1}
\seq_map_function:NN \l_@@_segments_seq \knot_save_filament:N
}
@@ -11284,7 +11339,7 @@ manipulating PGF soft paths}
{
\knot_debug:n {knot~ save~ filament}
\tl_set:Nx \l_@@_tmpb_tl {\tl_item:nn {#1} {4}}
- \tl_case:NnF \l_@@_tmpb_tl
+ \token_case_meaning:NnF \l_@@_tmpb_tl
{
\c_spath_moveto_tl
{
diff --git a/graphics/pgf/contrib/spath3/spath3_code.pdf b/graphics/pgf/contrib/spath3/spath3_code.pdf
index f773a0b534..840b7842d3 100644
--- a/graphics/pgf/contrib/spath3/spath3_code.pdf
+++ b/graphics/pgf/contrib/spath3/spath3_code.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.pdf b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.pdf
new file mode 100644
index 0000000000..6ef7f59476
--- /dev/null
+++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.tex b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.tex
new file mode 100644
index 0000000000..88e9abb16a
--- /dev/null
+++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-en.tex
@@ -0,0 +1,1712 @@
+% !TeX TXS-program:compile = txs:///arara
+% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode}
+% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')
+
+\documentclass[11pt,a4paper]{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[english]{tkz-grapheur}
+\usepackage{amsmath}
+\usepackage{fancyvrb}
+\usepackage{fancyhdr}
+\usepackage{hyperref}
+\usepackage{nicefrac}
+\usepackage{fontawesome5}
+\usepackage{tcolorbox}
+\tcbuselibrary{skins,minted}
+\fancyhf{}
+\renewcommand{\headrulewidth}{0pt}
+\lfoot{\sffamily\small [tkz-grapheur]}
+\rfoot{\sffamily\small - \thepage{} -}
+\usepackage{hologo}
+\providecommand\tikzlogo{Ti\textit{k}Z}
+\providecommand\TeXLive{\TeX{}Live\xspace}
+\providecommand\PSTricks{\textsf{PSTricks}\xspace}
+\let\pstricks\PSTricks
+\let\TikZ\tikzlogo
+
+\urlstyle{same}
+\hypersetup{pdfborder=0 0 0}
+\usepackage[margin=2cm]{geometry}
+\setlength{\parindent}{0pt}
+\def\TPversion{0.1.5}
+\def\TPdate{22/06/2024}
+\usepackage{soul}
+\usepackage{codehigh}
+\usepackage{tabularray}
+\sethlcolor{lightgray!25}
+\NewDocumentCommand\MontreCode{ m }{%
+ \hl{\vphantom{\texttt{pf}}\texttt{#1}}%
+}
+\usepackage[english]{babel}
+
+\renewcommand{\footnoterule}{\vfill\kern -3pt \hrule width 0.4\columnwidth \kern 2.6pt}
+
+\begin{document}
+
+\pagestyle{fancy}
+
+\thispagestyle{empty}
+
+\begin{center}
+ \begin{minipage}{0.88\linewidth}
+ \begin{tcolorbox}[colframe=yellow,colback=yellow!15]
+ \begin{center}
+ \begin{tabular}{c}
+ {\Huge \texttt{tkz-grapheur [en]}}\\
+ \\
+ {\LARGE A grapher, based}\\
+ \\
+ {\LARGE on \textsf{\TikZ} and \textsf{xint}.}\\
+ \\
+ {\small \texttt{Version \TPversion{} -- \TPdate}}
+ \end{tabular}
+ \end{center}
+ \end{tcolorbox}
+\end{minipage}
+\end{center}
+
+\begin{center}
+ \begin{tabular}{c}
+ \texttt{Cédric Pierquet}\\
+ {\ttfamily c pierquet -- at -- outlook . fr}\\
+ \texttt{\url{https://forge.apps.education.fr/pierquetcedric/package-latex-tkz-grapheur}} \\
+\end{tabular}
+\end{center}
+
+\hrule
+
+\vfill
+
+\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5,halign=center]
+\begin{GraphTikz}[x=0.85cm,y=0.35cm,Xmin=0,Xmax=10,Ymin=0,Ymax=16]
+ %préparation de la fenêtre
+ \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{0,1,...,10}{0,2,...,16}
+ %déf des fonctions avec nom courbe + nom fonction + expression
+ \DefineCurve[Name=cf]<f>{3*x-6}
+ \DefineCurve[Name=cg]<g>{-(x-6)^2+12}
+ %antécédents et intersection
+ \FindIntersections[Disp=false,Name=K]{cf}{cg}
+ \FindCounterimage[DispLine,Color=orange,Name=I]{cg}{8}
+ \FindCounterimage[Disp=false,Name=J]{cg}{0}
+ %intégrale sous une courbe, avec intersection
+ \DrawIntegral%
+ [Colors=blue/purple,Bounds=nodes,Style=hatch,Hatch=bricks]%
+ {g(x)}%
+ {(I-2)}{(J-2)}
+ %intégrale entre les deux courbes
+ \DrawIntegral[Bounds=nodes,Type=fct/fct]{f(x)}[g(x)]{(K-1)}{(K-2)}
+ %tracé des courbes et des points
+ \DrawCurve[Color=red]{f(x)}
+ \DrawCurve[Color=teal]{g(x)}
+ \MarkPts<\small>{(K-1)/below right/L,(K-2)/above left/M}%
+ \MarkPts[violet]<\small>{(I-1)/above left/D,(I-2)/above right/E}%
+ %essai de tangente
+ \DrawTangent[Colors=pink!75!black/yellow,OffsetL=2,OffsetR=2,DispPt]{g}{5}
+ %essai d'image
+ \DrawRanges[Colors=cyan]{g}{7,7.25,7.5}
+ %surimpression des axes
+ \DrawAxisGrids[Grads=false,Grid=false,Enlarge=2.5mm]{0,1,...,10}{0,2,...,16}
+\end{GraphTikz}
+\end{tcolorbox}
+
+\vspace*{5mm}
+
+\begin{tcolorbox}[colframe=lightgray,colback=lightgray!5,halign=center]
+\begin{GraphTikz}%
+ [x=3.5cm,y=4cm,
+ Xmin=0,Xmax=3.5,Xgrid=pi/12,Xgrids=pi/24,
+ Ymin=-1.05,Ymax=1.05,Ygrid=0.2,Ygrids=0.05]
+ %préparation de la fenêtre
+ \DrawAxisGrids[Grads=false,Enlarge=2.5mm,Format=ntrig/nsqrt]%
+ {pi/6,pi/4,pi/3,pi/2,2*pi/3,3*pi/4,5*pi/6,pi}
+ {0,sqrt(2)/2,1/2,sqrt(3)/2,1,-1,-sqrt(3)/2,-1/2,-sqrt(2)/2}
+ %rajouter des valeurs
+ \AddXvalues{0.25,1.4,3.3}{\num{0.25},\num{1.4},\num{3.3}}
+ %fonction trigo (déf + tracé)
+ \DefineCurve[Name=ccos,Start=0,End=pi]<fcos>{cos(x)}
+ \DefineCurve[Name=csin,Start=0,End=pi]<fsin>{sin(x)}
+ %intégrale
+ \FindIntersections[Disp=false,Name=JKL]{ccos}{csin}
+ %\DefinirPts{FIN/pi/0}
+ \DrawIntegral%
+ [Bounds=node/abs,Type=fct/fct,Colors=cyan/cyan!50]%
+ {fsin(x)}[fcos(x)]%
+ {(JKL-1)}{pi}
+ %tracé des courbes
+ \DrawCurve[Color=red,Start=0,End=pi]{fcos(x)}
+ \DrawCurve[Color=olive,Start=0,End=pi]{fsin(x)}
+ %antécédent(s)
+ \DrawCounterimage[Color=blue/teal!50!black,Lines]{ccos}{-0.25}
+ \DrawCounterimage[Colors=red/magenta!50!black,Lines]{csin}{0.5}
+ \DrawCounterimage[Colors=orange/orange!50!black,Lines]{csin}{sqrt(2)/2}
+ \DrawCounterimage[Colors=green!50!black/green,Lines]{csin}{sqrt(3)/2}
+ %surimpression axes
+ \DrawAxisGrids[Grid=false,Enlarge=2.5mm,Format=ntrig/nsqrt]%
+ {pi/6,pi/4,pi/3,pi/2,2*pi/3,3*pi/4,5*pi/6,pi}
+ {0,sqrt(2)/2,1/2,sqrt(3)/2,1,-1,-sqrt(3)/2,-1/2,-sqrt(2)/2}
+\end{GraphTikz}
+\end{tcolorbox}
+
+\vfill
+
+\hfill{\footnotesize\textit{\ttfamily To my Dad.}}
+
+\vspace*{5mm}
+
+\pagebreak
+
+\phantomsection
+
+\hypertarget{matoc}{}
+
+\tableofcontents
+
+\vspace*{5mm}
+
+\hrule
+
+\vspace*{5mm}
+
+\pagebreak
+
+\section{Introduction}
+
+\subsection{Description and general ideas}
+
+With this modest package, far from the capabilities offered by the excellent packages \MontreCode{tkz-*}\footnote{for example tkz-base \url{https://ctan.org/pkg/tkz-base} and tkz- fct \url{https://ctan.org/pkg/tkz-fct}.} (by Alain Matthes) or \MontreCode{tzplot}\footnote{CTAN: \url{https://ctan.org/pkg/ tzplot}.} (by In-Sung Cho), it is possible to work on function graphs, in \TikZ\ language, in an \textit{intuitive} and \textit{explicit} way.
+
+\smallskip
+
+Concerning the overall operation:
+
+\smallskip
+
+\begin{itemize}
+ \item particular styles for the objects used have been defined, but they can be modified locally;
+ \item the name of the commands is in \textit{operational} form, so that the construction of the graphic elements has an almost \textit{algorithmic} form.
+\end{itemize}
+
+\subsection{Overall operation}
+
+To schematize, it \textit{is enough}:
+
+\smallskip
+
+\begin{itemize}
+ \item to declare the parameters of the graphics window (\textbf{units in cm !});
+ \item to display grid/axes/graduations;
+ \item to declare functions or interpolation curves;
+ \item to possibly declare particular points;
+ \item to place a point scatter.
+\end{itemize}
+
+\smallskip
+
+It will then be possible:
+
+\begin{itemize}
+ \item to draw curves;
+ \item to graphically determine images or backgrounds;
+ \item to add elements of derivation (tangents) or integration (domain);
+ \item to draw a linear fit line or the curve of another fit.
+\end{itemize}
+
+\subsection{Packages used, and package options}
+
+The package uses:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{tikz}, with the libraries \MontreCode{calc,intersections,patterns,patterns.meta,bbox};
+ \item \MontreCode{simplekv}, \MontreCode{xintexpr}, \MontreCode{xstring}, \MontreCode{listofitems};
+ \item \MontreCode{xint-regression}\footnote{CTAN: \url{https://ctan.org/pkg/xint-regression}.} (for regressions, switchable via \MontreCode{[noxintreg]}).
+\end{itemize}
+
+\smallskip
+
+The package also loads \MontreCode{siunitx} with the classic options, but it is possible not to load it using the \MontreCode{[nosiunitx]} option.
+
+\smallskip
+
+The package also loads the \TikZ\ \MontreCode{babel} library, but it is possible not to load it using the \MontreCode{[notikzbabel]} option.
+
+\smallskip
+
+The different options are obviously cumulative.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%loading by default, with french setup of siunitx
+\usepackage{tkz-grapheur}
+%loading by default, with normal setup of siunitx
+\usepackage[english]{tkz-grapheur}
+
+%loading without sinuitx, to be loaded manually
+\usepackage[nosiunitx]{tkz-grapheur}
+
+%loading without tikz.babel
+\usepackage[notikzbabel]{tkz-grapheur}
+\end{tcblisting}
+
+Also note that certain commands can use packages like \MontreCode{nicefrac}, which will therefore have to be loaded if necessary.
+
+\smallskip
+
+Concerning the \textit{calculations} and \textit{plots} part, the \MontreCode{xint} package takes care of it.
+
+\subsection{Warnings}
+
+It is possible, due to the (multiple) calculations carried out internally, that the compilation time may be a little \textit{long}.
+
+\smallskip
+
+The precision of the (determination) results seems to be around $10^{-4}$, which should normally guarantee \textit{satisfactory} plots and readings. It is still advisable to be cautious about the results obtained and those expected.
+
+\subsection{Introductory example}
+
+For example, we can start from the following example to \textit{illustrate} the flow of the commands for this package. The commands and syntax will be detailed in the following sections!
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\begin{GraphTikz}%
+ [x=7.5cm,y=7.5cm,Xmin=0,Xmax=1.001,Xgrid=0.1,Xgrids=0.02,
+ Ymin=0,Ymax=1.001,Ygrid=0.1,Ygrids=0.02]
+ \DrawAxisGrids[Enlarge=2.5mm,Font=\small]%
+ {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1}
+ {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1}
+ \DefineCurve[Name=cf,Start=0,End=1]<f>{x*exp(x-1)}
+ \DefineCurve[Name=delta,Start=0,End=1]<D>{x}
+ \DrawIntegral[Type=fct/fct]{f(x)}[D(x)]{0}{1}
+ \DrawCurve[Color=red]{f(x)}
+ \DrawCurve[Color=teal]{D(x)}
+ \DrawRanges[Colors=blue/cyan,Lines]{f}{0.8,0.9}
+ \DrawCounterimage[Colors=green!50!black/olive,Lines]{cf}{0.5}
+\end{GraphTikz}
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,text only}
+ \begin{GraphTikz}%
+ [x=7.5cm,y=7.5cm,Xmin=0,Xmax=1.001,Xgrid=0.1,Xgrids=0.02,
+ Ymin=0,Ymax=1.001,Ygrid=0.1,Ygrids=0.02]
+ \DrawAxisGrids[Enlarge=2.5mm,Font=\small]%
+ {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1}
+ {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1}
+ \DefineCurve[Name=cf,Start=0,End=1]<f>{x*exp(x-1)}
+ \DefineCurve[Name=delta,Start=0,End=1]<D>{x}
+ \DrawIntegral[Type=fct/fct]{f(x)}[D(x)]{0}{1}
+ \DrawCurve[Color=red]{f(x)}
+ \DrawCurve[Color=teal]{D(x)}
+ \DrawRanges[Colors=blue/cyan,Lines]{f}{0.8,0.9}
+ \DrawCounterimage[Colors=green!50!black/olive,Lines]{cf}{0.5}
+ \end{GraphTikz}
+\end{tcblisting}
+
+\newpage
+
+\section{Basic Styles and Environment Creation}
+
+\subsection{Basic Styles}
+
+The styles used for plots are given below.
+
+\smallskip
+
+For \textit{simplicity} purposes, only the color of the elements can be configured, but if the user wishes, he can redefine the proposed styles.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%parameters declared and stored (usable in the environment a posteriori)
+\tikzset{
+ Xmin/.store in=\pflxmin,Xmin/.default=-3,Xmin=-3,
+ Xmax/.store in=\pflxmax,Xmax/.default=3,Xmax=3,
+ Ymin/.store in=\pflymin,Ymin/.default=-3,Ymin=-3,
+ Ymax/.store in=\pflymax,Ymax/.default=3,Ymax=3,
+ Origx/.store in=\pflOx,Origx/.default=0,Origx=0,
+ Origy/.store in=\pflOy,Origy/.default=0,Origy=0,
+ Xgrid/.store in=\pflgrillex,Xgrid/.default=1,Xgrid=1,
+ Xgrids/.store in=\pflgrillexs,Xgrids/.default=0.5,Xgrids=0.5,
+ Ygrid/.store in=\pflgrilley,Ygrid/.default=1,Ygrid=1,
+ Ygrids/.store in=\pflgrilleys,Ygrids/.default=0.5,Ygrids=0.5
+}
+\end{tcblisting}
+
+We therefore find:
+
+\smallskip
+
+\begin{itemize}
+ \item the origin of the mark (\MontreCode{Origx}/\MontreCode{Origy});
+ \item the extreme values of the axes (\MontreCode{Xmin}/\MontreCode{Xmax}/\MontreCode{Ymin}/\MontreCode{Ymax});
+ \item the parameters of the main and secondary grids (\MontreCode{Xgrid}/\MontreCode{Xgrids}/\MontreCode{Ygrid}/\MontreCode{Ygrids}).
+\end{itemize}
+
+\smallskip
+
+Concerning the styles of \textit{objects}, they are given below.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\tikzset{tkzgrphnode/.style={}}
+\tikzset{tkzgrphpoint/.style={line width=0.95pt}}
+\tikzset{tkzgrphpointc/.style={radius=1.75pt}}
+\tikzset{tkzgrphscatter/.style={radius=1.75pt}}
+\tikzset{tkzgrphframe/.style={line width=0.8pt,gray}}
+\tikzset{tkzgrphcurve/.style={line width=1.05pt}}
+\tikzset{tkzgrphline/.style={line width=0.8pt}}
+\tikzset{tkzgrpharrowl/.style={<-,>=latex}}
+\tikzset{tkzgrpharrowr/.style={->,>=latex}}
+\tikzset{tkzgrpharrowlr/.style={<->,>=latex}}
+\tikzset{tkzgrphcounterimage/.style={line width=0.9pt,densely dashed}}
+\tikzset{tkzgrphrange/.style={line width=0.9pt,densely dashed,->,>=latex}}
+\tikzset{tkzgrphgridp/.style={thin,lightgray}}
+\tikzset{tkzgrphgrids/.style={very thin,lightgray}}
+\tikzset{tkzgrphaxes/.style={line width=0.8pt,->,>=latex}}
+\end{tcblisting}
+
+The idea is therefore to be able to redefine styles globally or locally, and possibly add elements, using \mintinline{latex}|mystyle/.append style={...}|.
+
+\subsection{Creating the environment}\label{creaenvt}
+
+The proposed environment is based on \TikZ, so that any \textit{classic} command linked to \TikZ\ can be used alongside the package commands!
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\begin{GraphTikz}[tikz options]<keys>
+ %code(s)
+\end{GraphTikz}
+\end{tcblisting}
+
+The \MontreCode{[tikz options]} are the \textit{classic} options that can be passed to a \TikZ\ environment, as well as the \textsf{axes/grids/window} keys presented previously.
+
+\smallskip
+
+The specific (and optional) \MontreCode{<keys>} are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{ThickGrad}: size of the axis graduations (\MontreCode{3pt} for 3pt \textit{above} and 3pt \textit{below});
+ \item \MontreCode{Frame}: boolean (\MontreCode{false} by default) to display a frame which delimits the graphic window (excluding possible graduations).
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}
+ [x=0.075cm,y=0.03cm,Xmin=0,Xmax=160,Xgrid=20,Xgrids=10,
+ Origy=250,Ymin=250,Ymax=400,Ygrid=25,Ygrids=5]
+ <Frame>
+\end{GraphTikz}
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4,
+ Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40]
+ <Frame>
+\end{GraphTikz}
+\end{tcblisting}
+
+It will obviously be more meaningful with the added graphic elements!
+
+\pagebreak
+
+\subsection{Grids and axes}\label{creaaxesgr}
+
+The first command \textit{useful} will allow you to create the grids, axes and graduations.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\DrawAxisGrids[keys]{gradX}{gradY}
+\end{tcblisting}
+
+The optional \MontreCode{[keys]} available are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Grid}: boolean (\MontreCode{true} by default) to display the grids (for a single grid, simply set the identical parameters for \MontreCode{Xgrid}/\MontreCode{Xgrids} or \MontreCode {Ygrid}/\MontreCode{Ygrids});
+ \item \MontreCode{Enlarge}: addition at the end of the axes (\MontreCode{0} by default);
+ \item \MontreCode{Grads}: boolean (\MontreCode{true} by default) for graduations;
+ \item \MontreCode{Font}: global font for graduations {\MontreCode{empty} by default};
+ \item \MontreCode{Format}: special formatting (see below) of the axis values.
+\end{itemize}
+
+\smallskip
+
+Concerning the \MontreCode{Format} key, it allows you to specify a specific setting for the axis values.
+
+\smallskip
+
+It can be given in the form \MontreCode{fmt} for combined formatting, or in the form \MontreCode{fmtX/fmtY} to differentiate the formatting.
+
+\smallskip
+
+The possible options are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{num}: format with \textsf{siunitx};
+ \item \MontreCode{year}: format in year;
+ \item \MontreCode{frac}: format as fraction \textsf{frac};
+ \item \MontreCode{dfrac}: format as fraction \textsf{dfrac};
+ \item \MontreCode{nfrac}: format as fraction \textsf{nicefrac};\hfill (to load!)
+ \item \MontreCode{trig}: format in trig with \textsf{frac};
+ \item \MontreCode{dtrig}: format in trig with \textsf{dfrac};
+ \item \MontreCode{ntrig}: format in trig with \textsf{nfrac};
+ \item \MontreCode{sqrt}: format in root with \textsf{frac};
+ \item \MontreCode{dsqrt}: format in root with \textsf{dfrac};
+ \item \MontreCode{nsqrt}: format in root with \textsf{nicefrac}.
+\end{itemize}
+
+\smallskip
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}
+ [x=0.075cm,y=0.03cm,Xmin=0,Xmax=160,Xgrid=20,Xgrids=10,
+ Origy=250,Ymin=250,Ymax=400,Ygrid=25,Ygrids=5]
+ \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{0,10,...,160}{250,275,...,400}
+\end{GraphTikz}
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4,
+ Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40]
+ \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56}
+\end{GraphTikz}
+\end{tcblisting}
+
+Note that there are the Boolean keys \MontreCode{[Behind]} (without the graduations) and \MontreCode{[Above]} (without the grid) to display the axes in \textit{under/over}-printing mode in the case of integrals for example.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=2.75cm,y=3cm,
+ Xmin=0,Xmax=3.5,Xgrid=pi/12,Xgrids=pi/24,
+ Ymin=-1.05,Ymax=1.05,Ygrid=0.2,Ygrids=0.05]
+ \DrawAxisGrids[Enlarge=2.5mm,Format=dtrig/nsqrt,Font=\footnotesize]%
+ {pi/6,pi/4,pi/3,pi/2,2*pi/3,3*pi/4,5*pi/6,pi}
+ {0,sqrt(2)/2,1/2,sqrt(3)/2,1,-1,-sqrt(3)/2,-1/2,-sqrt(2)/2}
+\end{GraphTikz}
+\end{tcblisting}
+
+In the case where the formatting does not give satisfactory result(s), it is possible to use a generic command for placing the graduations.
+
+\subsection{Adding values manually}\label{additionvals}
+
+It is also possible to use a specific command to place values on the axes, independently of an \textit{automated} formatting system.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+in the environment
+\AddXvalues[keys]{grads}{formatted values}
+\AddYvalues[keys]{grads}{formatted values}
+\end{tcblisting}
+
+The optional \MontreCode{[keys]} available are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Font}: global font for graduations {\MontreCode{empty} by default};
+ \item \MontreCode{Lines}: boolean to add the tick marks {\MontreCode{true} by default}.
+\end{itemize}
+
+\smallskip
+
+The mandatory arguments correspond to the x-coordinates (in \TikZ\ language) and to the labels (in \LaTeX\ language) of the graduations.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=2.75cm,y=3cm,
+ Xmin=0,Xmax=3.5,Xgrid=pi/12,Xgrids=pi/24,
+ Ymin=-1.05,Ymax=1.05,Ygrid=0.2,Ygrids=0.05]
+ \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{}{}
+ \AddXvalues
+ {0.15,0.6,pi/2,2.8284}
+ {\num{0.15},$\frac35$,$\displaystyle\frac{\pi}{2}$,$\sqrt{8}$}
+ \AddYvalues
+ {-1,0.175,0.3,sqrt(3)/2}
+ {\num{-1},\num{0.175},$\nicefrac{3}{10}$,$\frac{\sqrt{3}}{2}$}
+\end{GraphTikz}
+\end{tcblisting}
+
+\pagebreak
+
+\section{Specific definition commands}
+
+\subsection{Draw a line}\label{tracstraight}
+
+The idea is to propose a command to draw a line, from:
+
+\begin{itemize}
+ \item of two points (or nodes);
+ \item of a point (or node) and the slope.
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\DrawLine[keys]{point or node}{point or node or slope}
+\end{tcblisting}
+
+The optional \MontreCode{[keys]} available are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Name}: possible name of the plot (for reuse);
+ \item \MontreCode{Slope}: boolean to specify that the slope is used (\MontreCode{false} by default);
+ \item \MontreCode{Start}: start of the plot (\MontreCode{\textbackslash pflxmin} by default);
+ \item \MontreCode{End}: end of the plot (\MontreCode{\textbackslash pflxmax} by default);
+ \item \MontreCode{Color}: color of the trace (\MontreCode{black} by default).
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto}
+ \DefinePts[Mark,Color=gray]{A/-4/3,B/2/0,C/0/-1}
+ \DrawLine[Color=red]{(-2,-1)}{(2,4)}
+ \DrawLine[Color=blue,Start=-5,End=3]{(A)}{(B)}
+ \DrawLine[Color=olive,Slope]{(C)}{0.25}
+\end{GraphTikz}
+\end{tcblisting}
+
+\pagebreak
+
+\subsection{Define a function, draw the curve of a function}\label{deftracfct}
+
+The idea is to define a function, for later reuse. This command \textit{creates} the function, without tracing it, because in certain cases elements will have to be traced beforehand.
+
+\smallskip
+
+There is also a command to plot the curve of a previously defined function.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\DefineCurve[keys]<fct name>{xint formula}
+\DrawCurve[keys]{xint formula}
+\end{tcblisting}
+
+The optional \MontreCode{[keys]} for definition or tracing are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Start}: lower bound of the definition set (\MontreCode{\textbackslash pflxmin} by default);
+ \item \MontreCode{End}: lower bound of the definition set (\MontreCode{\textbackslash pflxmax} by default);
+ \item \MontreCode{Name}: name of the curve (important for the rest!);
+ \item \MontreCode{Color}: color of the trace (\MontreCode{black} by default);
+ \item \MontreCode{Step}: plot step (it is determined \textit{automatically} at the start but can be modified);
+ \item \MontreCode{Trace}: boolean to also trace the curve (\MontreCode{false} by default).
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4,
+ Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40]
+ \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56}
+ %definition of the function + drawing of the curve
+ \DefineCurve[Name=cf,Start=5,End=19]<f>{-2*x+3+24*log(2*x)}
+ \DrawCurve[Color=red,Start=5,End=19]{f(x)}
+ %or in a single command if "sufficient"
+ %\DefineCurve[Name=cf,Start=5,End=19,Trace]<f>{-2*x+3+24*log(2*x)}
+\end{GraphTikz}
+\end{tcblisting}
+
+\pagebreak
+
+\subsection{Define/draw an interpolation curve (simple)}\label{deftracinterpo}
+
+It is also possible to define a curve via support points, therefore a simple interpolation curve.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\DefineInterpoCurve[keys]{list of support points}
+\DrawInterpoCurve[keys]{list of support points}
+\end{tcblisting}
+
+The optional \MontreCode{[keys]} for definition or tracing are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Name}: name of the interpolation curve (important for the rest!);
+ \item \MontreCode{Color}: color of the trace (\MontreCode{black} by default);
+ \item \MontreCode{Tension}: setting the \textit{tension} of the interpolation plot (\MontreCode{0.5} by default);
+ \item \MontreCode{Trace}: boolean to also trace the curve (\MontreCode{false} by default).
+\end{itemize}
+
+The mandatory argument allows you to specify the list of support points in the form \MontreCode{(x1,y1)(x2,y2)...}.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ %simple interpolation curves (with diff tension)
+ \DefineInterpoCurve[Name=interpotest,Color=blue,Trace]%
+ {(-6,4)(-2,-2)(3,3.5)}
+ \DefineInterpoCurve[Name=interpotest,Color=red,Trace,Tension=1]%
+ {(-6,4)(-2,-2)(3,3.5)}
+\end{GraphTikz}
+\end{tcblisting}
+
+\newpage
+
+\subsection{Define/draw an interpolation curve (Hermite)}\label{deftracfctspline}
+
+It is also possible to define a curve via support points, therefore an interpolation curve with derivative control.
+
+\smallskip
+
+Some operations require different techniques depending on the type of function used, a \textsf{Boolean} key \MontreCode{Spline} will allow the code to adapt its calculations depending on the object used.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\DefineSplineCurve[keys]{list of support points}[\macronomspline]
+\DrawSplineCurve[keys]{list of support points}[\macronomspline]
+\end{tcblisting}
+
+The optional \MontreCode{[keys]} for definition or tracing are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Name}: name of the interpolation curve (important for the rest!);
+ \item \MontreCode{Coeffs}: modify (see the \textsf{ProfLycee}\footnote{CTAN documentation: \url{https://ctan.org/pkg/proflycee}} the \textit{coefficients} of the spline;
+ \item \MontreCode{Color}: color of the trace (\MontreCode{black} by default);
+ \item \MontreCode{Trace}: boolean to also trace the curve (\MontreCode{false} by default).
+\end{itemize}
+
+The mandatory argument allows you to specify the list of support points in the form \MontreCode{x1/y1/f'1§x2/y2/f'2§...} with:
+
+\begin{itemize}
+ \item \MontreCode{xi/yi} the coordinates of the point;
+ \item \MontreCode{f'i} the derivative at the support point.
+\end{itemize}
+
+\smallskip
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ %definition of the list of spline support points
+ \def\LISTETEST{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}
+ %definition and plot of the cubic spline
+ \DefineSplineCurve[Name=splinetest,Trace,Color=olive]{\LISTETEST}
+\end{GraphTikz}
+\end{tcblisting}
+
+\pagebreak
+
+\subsection{Define points as nodes}\label{defpts}
+
+The second idea is to work with \TikZ nodes, which could be useful for tangent plots, representations of integrals$\ldots$
+
+\smallskip
+
+It is also possible to define nodes for \textit{image} points.
+
+\smallskip
+
+Certain commands (explained later) allow you to determine particular points of curves in the form of nodes, so it seems interesting to be able to define them directly.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%by coordinates
+\DefinePts[keys]{Name1/x1/y1,Name2/x2/y2,...}
+\end{tcblisting}
+
+The optional \MontreCode{[keys]} available are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Mark}: boolean to mark points (\MontreCode{false} by default);
+ \item \MontreCode{Color}: color of the points, if \MontreCode{Mark=true} (\MontreCode{black} by default).
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%as image
+\DefineRange[keys]{object}{abscissa}
+\end{tcblisting}
+
+The optional \MontreCode{[keys]} available are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Name}: node name (\MontreCode{empty} by default);
+ \item \MontreCode{Spline}: boolean to specify that a spline is used (\MontreCode{false} by default).
+\end{itemize}
+
+The first mandatory argument is the \textit{object} considered (name of the curve for the spline, function otherwise); the second is the abscissa of the point considered.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4,
+ Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40]
+ \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56}
+ %definition of the function + drawing of the curve
+ \DefineFunction[Name=cf,Start=5,End=19,Trace,Color=red]<f>{-2*x+3+24*log(2*x)}
+ %manual nodes
+ \DefinePts[Mark,Color=brown]{A/7/42,B/16/49}
+ %imagenode
+ \DefineRange[Name=IMGf]{f}{14}
+ \MarkPts*[Style=x,Color=blue]{(IMGf)} %see next section ;-)
+\end{GraphTikz}
+\end{tcblisting}
+
+\pagebreak
+
+\subsection{Mark Points}\label{markpts}
+
+The idea is to offer something to score points with a particular style.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\MarkPts(*)[keys]<font>{list}
+\end{tcblisting}
+
+The \textit{starred} version scores the points without the \textit{names}, while the \textit{unstarred} version displays them:
+
+\begin{itemize}
+ \item in the case of the \textit{starred} version, the list should be given in the form \MontreCode{(ptA),(ptB),...};
+ \item otherwise, the list should be given in the form \MontreCode{(ptA)/poslabelA/labelA,...}.
+\end{itemize}
+
+\smallskip
+
+The optional \MontreCode{[keys]} available are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Color}: color (\MontreCode{black} by default);
+ \item \MontreCode{Style}: style of marks (\MontreCode{o} by default).
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}[x=1.5cm,y=1.5cm,Ymin=-2]
+ \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto}
+ \DefinePts{A/1.75,-1.25}\MarkPts[Color=pink]{(A)/below/A} %round (default)
+ \MarkPts[Color=teal]{(1,1)/below/M}
+ \MarkPts[Color=red,Style=x]{(1.25,1)/below/$A$} %cross
+ \MarkPts[Color=orange,Style=+]<\small\sffamily>{(1.5,1)/below/K} %plus
+ \MarkPts[Color=blue,Style=c]{(1.75,1)/below/P} %square
+ \MarkPts[Color=gray,Style=d]{(2,1)/below/P} %diamond
+ \MarkPts*[Color=orange/yellow]{(2,2),(2.5,2.25)} %two-tone round
+ \MarkPts*[Style=+,Color=red]{(1,2)}
+ \MarkPts*[Style=x,Color=blue]{(2.25,1)}
+ \MarkPts*[Style=c,Color=magenta]{(-2,-1)}
+ \MarkPts[Color=red,Style=x]{(-1,1)/below/$A$,(-2,2)/below left/$B$}
+\end{GraphTikz}
+\end{tcblisting}
+
+Note that it is also possible to modify the size of the \MontreCode{o/x/+/c} marks via the \MontreCode{[keys]}:
+
+\begin{itemize}
+ \item \MontreCode{Sizex=...} (\MontreCode{2pt} by default) for points \textit{cross};
+ \item \MontreCode{Sizeo=...} (\MontreCode{1.75pt} by default) for the points \textit{circle};
+ \item \MontreCode{Sizec=...} (\MontreCode{2pt} by default) for the \textit{square} points.
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}[x=1cm,y=1cm,Xmin=0,Ymin=0]
+ \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto}
+ \MarkPts[Color=red,Style=x,Size=3.5pt]{(1.25,1.25)/below/$A$}
+ \MarkPts[Color=teal,Size=2.5pt]{(2,2)/right/$A$}
+ \MarkPts*[Color=orange,Style=c,Size=4pt]{(0.5,2.5)}
+\end{GraphTikz}
+\end{tcblisting}
+
+\subsection{Retrieve node coordinates}\label{recupcoordo}
+
+It is also possible, with a view to reusing coordinates, to recover the coordinates of a node (defined or determined).
+
+\smallskip
+
+The calculations are carried out by floating according to the (re)calculated units, the values are therefore approximated !
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\GetXcoord{node}[\macrox]
+\GetYcoord{node}[\macroy]
+\GetXYcoord{node}[\macrox][\macroy]
+\end{tcblisting}
+
+\subsection{Place text}\label{placetxt}
+
+Note that a text placement command is available.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\DrawTxt[keys]{(node or coordinates)}{text}
+\end{tcblisting}
+
+The available \MontreCode{[keys]} are:
+
+\begin{itemize}
+ \item \MontreCode{Font=...} (\MontreCode{\textbackslash normalsize\textbackslash normalfont} by default) for the font;
+ \item \MontreCode{Color=...} (\MontreCode{black} by default) for the color;
+ \item \MontreCode{Position=...} (\MontreCode{empty} by default) for the position of the text relative to the coordinates.
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}[x=1cm,y=1cm,Xmin=0,Xmax=5,Ymin=0,Ymax=1]
+ \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto}
+ \DrawTxt[Color=red,Font=\LARGE,Position=right]{(1.5,0.5)}{curve $C_1$}
+\end{GraphTikz}
+\end{tcblisting}
+
+\section{Specific commands for using curves}
+
+\subsection{Image placement}\label{images}
+
+It is possible to place points (images) on a curve, with possible construction lines.
+
+The function/curve used must have been declared previously for this command to work.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\DrawRanges[keys]{function or curve}{list of abscissa}
+\end{tcblisting}
+
+The optional \MontreCode{[keys]} available are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Lines}: boolean to display construction traits (\MontreCode{false} by default);
+ \item \MontreCode{Colors}: color of the points/lines, in the form \MontreCode{Couleurs} or \MontreCode{ColPoint/ColLines};
+ \item \MontreCode{Spline}: boolean to specify that the curve used is defined as a \textsf{spline} (\MontreCode{false} by default).
+\end{itemize}
+
+\smallskip
+
+The first mandatory argument allows you to specify:
+
+\smallskip
+
+\begin{itemize}
+ \item the name of the curve in the case \MontreCode{Spline=true};
+ \item the name of the function otherwise.
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4,
+ Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40]
+ \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56}
+ %definition of the function + drawing of the curve
+ \DefineCurve[Name=cf,Start=5,End=19,Trace,Color=red]<f>{-2*x+3+24*log(2*x)}
+ %images
+ \DrawRanges[Lines,Colors=teal/blue]{f}{6,7,8,9,10}
+\end{GraphTikz}
+\end{tcblisting}
+
+\pagebreak
+
+\subsection{Antecedent determination}\label{defanteced}
+
+It is possible to graphically determine the antecedents of a given reality.
+
+The function/curve used must have been declared previously for this command to work.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\FindCounterimage[keys]{curve}{k}
+\end{tcblisting}
+
+The optional \MontreCode{[keys]} available are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Name}: base of the name of the \textbf{nodes} intersection (\MontreCode{S} by default, which will give \textsf{S-1}, \textsf{S-2}, etc);
+ \item \MontreCode{Disp}: boolean to display the points (\MontreCode{true} by default);
+ \item \MontreCode{Color}: color of the points (\MontreCode{black} by default);
+ \item \MontreCode{DispLine}: boolean to display the horizontal line (\MontreCode{false} by default).
+\end{itemize}
+
+\smallskip
+
+The first mandatory argument allows you to specify the \textbf{name} of the curve.
+
+\smallskip
+
+The second mandatory argument allows you to specify the value to reach.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4,
+ Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40]
+ \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56}
+ %definition of the function + drawing of the curve
+ \DefineCurve[Name=cf,Start=5,End=19,Trace,Color=red]<f>{-2*x+3+24*log(2*x)}
+ %history
+ \FindCounterimage[Color=teal,DispLine,Disp]{cf}{53}
+ %the two antecedents are at nodes (S-1) and (S-2)
+\end{GraphTikz}
+\end{tcblisting}
+
+\pagebreak
+
+\subsection{Antecedent construction}\label{tracanteced}
+
+It is possible to graphically construct the antecedents.
+
+The function/curve used must have been declared previously for this command to work.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\DrawCounterimage[keys]{curve}{k}
+\end{tcblisting}
+
+The optional \MontreCode{[keys]} available are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Colors}: color of the points/lines, in the form \MontreCode{Color} or \MontreCode{ColPoint/ColLines};
+ \item \MontreCode{Name}: name \textit{possible} for the intersection points linked to the antecedents (\MontreCode{empty} by default);
+ \item \MontreCode{Lines}: boolean to display construction traits (\MontreCode{false} by default).
+\end{itemize}
+
+\smallskip
+
+The first mandatory argument allows you to specify the \textbf{name} of the curve.
+
+\smallskip
+
+The second mandatory argument allows you to specify the value to reach.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4,
+ Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40]
+ \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56}
+ %definition of the function + drawing of the curve
+ \DefineCurve[Name=cf,Start=5,End=19,Trace,Color=red]<f>{-2*x+3+24*log(2*x)}
+ %history
+ \DrawCounterimage[Colors=teal/cyan,Lines,Name=PO]{cf}{53}
+ \GetXcoord{(PO-1)}[\premsol]
+ \GetXcoord{(PO-2)}[\deuxsol]
+\end{GraphTikz}
+
+Graphically, the antecedents of 53 are (approximately):
+
+\begin{itemize}
+ \item \num{\premsol}
+ \item \num{\deuxsol}
+\end{itemize}
+\end{tcblisting}
+
+\pagebreak
+
+\subsection{Intersections of two curves}\label{intersect}
+
+It is also possible to determine (in the form of nodes) the possible points of intersection of two previously defined curves.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\FindIntersections[keys]{curve1}{curve2}
+\end{tcblisting}
+
+The optional \MontreCode{[keys]} available are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Name}: base of the name of the \textbf{nodes} intersection (\MontreCode{S} by default, which will give \textsf{S-1}, \textsf{S-2}, etc);
+ \item \MontreCode{Disp}: boolean to display the points (\MontreCode{true} by default);
+ \item \MontreCode{Color}: color of the points (\MontreCode{black} by default).
+\end{itemize}
+
+\smallskip
+
+The first mandatory argument allows you to specify the \textbf{name} of the first curve.
+
+\smallskip
+
+The first mandatory argument allows you to specify the \textbf{name} of the second curve.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4,
+ Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40]
+ \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56}
+ \DefineCurve[Name=cf,Start=5,End=19,Trace,Color=red]<f>{-2*x+3+24*log(2*x)}
+ \DefineCurve[Name=cg,Start=5,End=19,Trace,Color=blue]<g>{0.25*(x-12)^2+46}
+ %intersections, named (TT-1) and (TT-2)
+ \FindIntersections[Name=TT,Color=darkgray,Display,Lines]{cf}{cg}
+ %recovery of intersection points
+ \GetXYcoord{(TT-1)}[\alphaA][\betaA]
+ \GetXYcoord{(TT-2)}[\alphaB][\betaB]
+\end{GraphTikz}\\
+The solutions of $f(x)=g(x)$ are $\alpha \approx \num{\alphaA}$ and
+$\beta \approx \num{\alphaB}$.\\
+The points of intersection of the curves of $f$ and $g$ are therefore
+$(\RoundNb[2]{\alphaA};\RoundNb[2]{\betaA})$ and
+$(\RoundNb[2]{\alphaB};\RoundNb[2]{\betaB})$.
+\end{tcblisting}
+
+\pagebreak
+
+\subsection{Extrema}\label{maximum}\label{minimum}
+
+The idea (still \textit{experimental}) is to offer commands to extract the extrema of a curve defined by the package.
+
+The command creates the corresponding node, and it is therefore possible to retrieve its coordinates for later use.
+
+\smallskip
+
+It is possible, by specifying it, to work on the different curves managed by the package (function, interpolation, spline).
+
+For singular curves, it is possible that the results are not quite those expected\ldots
+
+\smallskip
+
+{\small\faBomb} For the moment, the \textit{limitations} are:
+
+\begin{itemize}
+ \item no management of multiple extrema (only the first will be processed)\ldots
+ \item no management of extrema at the boundaries of the route\ldots
+ \item no automatic recovery of curve definition parameters\ldots
+ \item compilation time may be longer\ldots
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\FindMax[keys]{object}[node created]
+\FindMin[keys]{object}[node created]
+\end{tcblisting}
+
+The optional \MontreCode{[keys]} available are:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Method}: method, among \MontreCode{function/interpo/spline} for calculations (\MontreCode{function} by default);
+ \item \MontreCode{Start}: start of the plot (\MontreCode{\textbackslash pflxmin} by default);
+ \item \MontreCode{End}: end of the plot (\MontreCode{\textbackslash pflxmax} by default);
+ \item \MontreCode{Step}: not in the plot if \MontreCode{function} (it is determined \textit{automatically} at the start but can be modified);
+ \item \MontreCode{Coeffs}: modify the \textit{coefficients} of the spline if \MontreCode{spline};
+ \item \MontreCode{Tension}: setting the \textit{tension} of the interpolation plot if \MontreCode{interpo}(\MontreCode{0.5} by default).
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}[x=1cm,y=1cm,Xmin=-1,Xmax=5,Ymin=-1,Ymax=3]
+ \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto}
+ \DefineCurve[Name=cf,Start=0.35,End=4.2,Trace]%
+ <f>{0.6*cos(4.5*(x-4)+2.1)-1.2*sin(x-4)+0.1*x+0.2}
+ \FindMax[Start=0.35,End=4.2]{f}[cf-max]
+ \FindMax[Start=3,End=4]{f}[cf-maxlocal]
+ \FindMin[Start=1,End=2]{f}[cf-minlocal]
+ \MarkPts*[Color=red,Lines]{(cf-max)}
+ \MarkPts*[Color=blue,Lines]{(cf-maxlocal)}
+ \MarkPts*[Color=olive,Lines]{(cf-minlocal)}
+ \GetXYcoord{(cf-max)}[\MyMaxX][\MyMaxY]
+\end{GraphTikz}\\
+The maximum is $M\approx\RoundNb{\MyMaxY}$, reached in $x\approx\RoundNb{\MyMaxX}$
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}[x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefineInterpoCurve[Name=interpotest,Color=red,Trace,Tension=1]%
+ {(-6,4)(-2,-2)(3,3.5)}
+ \FindMin[Method=interpo,Tension=1]{(-6,4)(-2,-2)(3,3.5)}[interpo-min]
+ \MarkPts*[Color=blue]{(interpo-min)}
+ \GetXYcoord{(interpo-min)}[\MinInterpoX][\MinInterpoY]
+\end{GraphTikz}\\
+The minimum is $M\approx\RoundNb[3]{\MinInterpoY}$, reached at $x\approx\RoundNb[3]{\MinInterpoX}$
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=1.2cm,y=1.6cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=3,Ygrid=0.5,Ygrids=0.25]
+ \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto}
+ \def\LISTETEST{-6/2/0§-1/-2/0§2/1/0§3.5/0/-1}
+ \DefineSplineCurve[Name=splinetest,Trace]{\LISTETEST}
+ \FindMin[Method=spline]{\LISTETEST}[spline-min]
+ \MarkPts*[Color=red]{(spline-min)}
+\end{GraphTikz}
+\end{tcblisting}
+
+\pagebreak
+
+\subsection{Integrals (improved version)}\label{integr}
+
+We can also work with integrals.
+
+In this case it is preferable to highlight the domain \textbf{before} the plots, to avoid overprinting in relation to the curves/points.
+
+\smallskip
+
+It is possible to :
+
+\begin{itemize}
+ \item represent an integral \textbf{under} a defined curve;
+ \item represent an integral \textbf{between} two curves;
+ \item the integration limits can be x-coordinates and/or nodes.
+\end{itemize}
+
+\smallskip
+
+{\small\faBomb} Given the differences in processing between formula curves, simple interpolation curves or cubic interpolation curves, the arguments and keys may differ depending on the configuration!
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\DrawIntegral[keys]<specific options>{object1}[object2]{A}{B}
+\end{tcblisting}
+
+The optional \MontreCode{[keys]} for definition or tracing are:
+
+\begin{itemize}
+ \item \MontreCode{Colors} =: colors of the filling, in the form \MontreCode{Col} or \MontreCode{ColBorder/ColBg} (\MontreCode{gray} by default);
+ \item \MontreCode{Style}: type of filling, among \MontreCode{fill}/\MontreCode{hatch} (\MontreCode{fill} by default);
+ \item \MontreCode{Opacity}: opacity (\MontreCode{0.5} by default) of the filling;
+ \item \MontreCode{Hatch}: style (\MontreCode{north west lines} by default) of the hatch filling;
+ \item \MontreCode{Type}: type of integral among
+ \begin{itemize}
+ \item \MontreCode{fct} (default) for an integral under a curve defined by a formula;
+ \item \MontreCode{spl} for an integral under a curve defined by a cubic spline;
+ \item \MontreCode{itp} for an integral under a curve defined by interpolation ;
+ \item \MontreCode{fct/fct} for an integral between two curves defined by a formula;
+ \item \MontreCode{fct/spl} for an integral between a curve (above) defined by a formula and a curve (below) defined by a spline cubic;
+ \item etc.
+ \end{itemize}
+ \item \MontreCode{Step}: steps (calculated by default otherwise) for the plot;
+ \item \MontreCode{Junction}: junction of segments (\MontreCode{bevel} by default);
+ \item \MontreCode{Bounds}: type of terminals among:
+ \begin{itemize}
+ \item \MontreCode{abs} for the limits given by the abscissa;
+ \item \MontreCode{nodes} for the limits given by the nodes;
+ \item \MontreCode{abs/node} for the limits given by abscissa and node;
+ \item \MontreCode{node/abs} for the limits given by node and abscissa;
+ \end{itemize}
+ \item \MontreCode{Border}: boolean (\MontreCode{true} by default) to display the side lines,%
+ \item \MontreCode{SplineName}: macro (important!) of the spline generated previously for a higher version spline;
+ \item \MontreCode{SplineNameB}: macro (important!) of the spline generated previously for a lower version spline;
+ \item \MontreCode{InterpoName}: name (important!) of the interpolation curve generated previously, in higher version;
+ \item \MontreCode{InterpoBName}: name (important!) of the interpolation curve generated previously, in lower version;
+ \item \MontreCode{Tension}: Tension for the interpolation curve generated previously, in higher version;
+ \item \MontreCode{TensionB}: Tension of the interpolation curve generated previously, in lower version.
+\end{itemize}
+
+\smallskip
+
+The first required argument is the spline function or curve or list of interpolation points.
+
+\smallskip
+
+The next optional argument is the spline function or curve or list of interpolation points.
+
+\smallskip
+
+The last two mandatory arguments are the limits of the integral, given in a form consistent with the key \MontreCode{Bounds}.
+
+\pagebreak
+
+In the case of curves defined by \textit{points}, it is necessary to work on intervals on which the first curve is \textbf{above} the second.
+
+It will undoubtedly be interesting to work with \textit{intersections} in this case.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.6cm,y=0.06cm,
+ Xmin=0,Xmax=21,Xgrid=1,Xgrids=0.5,
+ Ymin=0,Ymax=155,Ygrid=10,Ygrids=5]
+ \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{}{}
+ \DefineCurve[Name=cf,Start=1,End=20,Color=red]<f>{80*x*exp(-0.2*x)}
+ \DrawIntegral
+ [Bounds=abs,Colors=blue/cyan!50]%
+ {f(x)}{3}{12}
+ \DrawCurve[Color=red,Start=1,End=20]{f(x)}
+ \DrawAxisGrids%
+ [Grid=false,Enlarge=2.5mm,Font=\small]{0,1,...,20}{0,10,...,150}
+\end{GraphTikz}
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=1.2cm,y=1.6cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=3,Ygrid=0.5,Ygrids=0.25]
+ \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{}{}
+ \def\LISTETEST{-6/2/0§-1/-2/0§2/1/0§3.5/0/-1}
+ \DefineSplineCurve[Name=splinetest]{\LISTETEST}
+ \DrawIntegral[Type=spl,Style=hatch,Colors=purple]{splinetest}{-5.75}{-4.75}
+ \DrawIntegral[Type=spl,Colors=blue]{splinetest}{-2}{-1}
+ \DrawIntegral[Type=spl,Colors=orange]{splinetest}{1}{3}
+ \DrawSplineCurve[Color=olive]{\LISTETEST}
+ \DrawAxisGrids[Grid=false,Enlarge=2.5mm]
+ {-7,-6,...,4}%
+ {-3,-2.5,...,3}
+\end{GraphTikz}
+\end{tcblisting}
+
+\pagebreak
+
+\subsection{Tangents}\label{tgte}
+
+The idea of this command is to draw the tangent to a previously defined curve, specifying:
+
+\begin{itemize}
+ \item the point (abscissa or node) at which we wish to work;
+ \item possibly the direction (in the case of a discontinuity or a terminal);
+ \item possibly the step ($h$) of the calculation;
+ \item the \textit{lateral spacings} to draw the tangent.
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\DrawTangent[keys]{function or curve}{point}<line options>
+\end{tcblisting}
+
+The optional \MontreCode{[keys]} for definition or tracing are:
+
+\begin{itemize}
+ \item \MontreCode{Colors} =: colors of the plots, in the form \MontreCode{Col} or \MontreCode{ColLine/ColPoint} (\MontreCode{black} by default);
+ \item \MontreCode{OffsetL} =: left horizontal spacing to start the trace (\MontreCode{1} by default);
+ \item \MontreCode{OffsetR} =: left horizontal spacing to start the trace (\MontreCode{1} by default);
+ \item \MontreCode{DispPt}: boolean to display the support point (\MontreCode{false} by default);
+ \item \MontreCode{Spline}: boolean to specify that a spline is used (\MontreCode{false} by default);
+ \item \MontreCode{h}: delta $h$ used for calculations (\MontreCode{0.01} by default);
+ \item \MontreCode{Direction}: allows you to specify the \textit{direction} of the tangent, among \MontreCode{lr}/\MontreCode{l}/\MontreCode{r} (\MontreCode{lr} by default);
+ \item \MontreCode{Node}: boolean to specify that a node is used (\MontreCode{false} by default).
+\end{itemize}
+
+\smallskip
+
+The first required argument is the spline function or curve (if applicable).
+
+\smallskip
+
+The last mandatory argument is the work point (abscissa version or node following the key \MontreCode{Node}).
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4,
+ Ymin=40,Ymax=56,Ygrid=2,Ygrids=1,Origy=40]
+ \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{4,5,...,20}{40,42,...,56}
+ \DefineCurve[Name=cf,Start=5,End=19,Color=red,Trace]<f>{-2*x+3+24*log(2*x)}
+ \FindCounterimage[Color=teal,Name=JKL,Disp=false]{cf}{53}
+ %tangent
+ \DrawTangent%
+ [Colors=cyan/gray,OffsetL=2.5,OffsetR=2.5,Node,DispPt]{f}{(JKL-1)}
+\end{GraphTikz}
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \def\LISTETEST{-6/4/-0.5§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}
+ \DefineSplineCurve[Name=splinetest,Trace,Color=olive]{\LISTETEST}
+ \DrawTangent[Colors=red,Spline,DispPt]{splinetest}{1}
+ \DrawTangent%
+ [Colors=blue,Spline,OffsetL=1.5,OffsetR=1.5,DispPt]{splinetest}{-3}%
+ <tkzgrpharrowlr>
+ \DrawTangent[Direction=l,Colors=orange,Spline,OffsetL=1.5,DispPt]{splinetest}{3}
+ \DrawTangent[Direction=r,Colors=purple,Spline,OffsetR=1.5,DispPt]{splinetest}{-6}
+\end{GraphTikz}
+\end{tcblisting}
+
+\pagebreak
+
+%\section{Specific commands for density functions}
+%
+%\subsection{Normal distribution}\label{normal distribution}
+%
+%The idea is to provide something to work with standard deviation.
+%
+%\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+% %in the GraphiqueTikz environment
+% \DefineNormalDistribution[keys]<fct name>{mu}{sigma}
+% \TraceNormalDistribution[keys]{fct(x)}
+%\end{tcblisting}
+%
+%The optional \MontreCode{[keys]} available are:
+%
+%\smallskip
+%
+%\begin{itemize}
+% \item \MontreCode{Name}: name of the plot (\MontreCode{Gaussian} by default);
+% \item \MontreCode{Trace}: boolean to trace the curve (\MontreCode{false} by default);
+% \item \MontreCode{Couleur}: color of the trace, if requested (\MontreCode{black} by default);
+% \item \MontreCode{Debut}: lower bound of the definition set (\MontreCode{\textbackslash pflxmin} by default);
+% \item \MontreCode{End}: lower bound of the definition set (\MontreCode{\textbackslash pflxmax} by default);
+% \item \MontreCode{Pas}: plot step (it is determined \textit{automatically} at the start but can be modified).
+%\end{itemize}
+%
+%Note that the vertical axis must be adapted according to the parameters of the normal law.
+%
+%\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+% \begin{GraphTikz}%
+% [x=1.25cm,y=15cm,Origx=5,Xmin=5,Xmax=15,Ymin=0,Ymax=0.3,
+% Ygrid=0.1,Ygrids=0.05]
+% \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto}
+% \DefineNormalDistribution[Name=Gaussian]<phi>{10}{1.5}
+% \TracerIntegral
+% [Terminals=abs, Colors=blue/cyan!50]%
+% {phi(x)}{7}{13}
+% \TraceNormalLaw[Color=purple,Start=5,End=15]{phi(x)}
+% \end{GraphTikz}
+%\end{tcblisting}
+%
+%\pagebreak
+%
+%\subsection{Chi-square law}\label{loikhideux}
+%
+%The idea is to provide something to work with normal laws.
+%
+%\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+% %in the GraphiqueTikz environment
+% \DefineKhiTwoLaw[keys]<fct name>{k}
+% \TraceLawKhiTwo[keys]{fct(x)}
+%\end{tcblisting}
+%
+%The optional \MontreCode{[keys]} available are:
+%
+%\smallskip
+%
+%\begin{itemize}
+% \item \MontreCode{Name}: name of the plot (\MontreCode{Gaussian} by default);
+% \item \MontreCode{Trace}: boolean to trace the curve (\MontreCode{false} by default);
+% \item \MontreCode{Couleur}: color of the trace, if requested (\MontreCode{black} by default);
+% \item \MontreCode{Debut}: lower bound of the definition set (\MontreCode{\textbackslash pflxmin} by default);
+% \item \MontreCode{End}: lower bound of the definition set (\MontreCode{\textbackslash pflxmax} by default);
+% \item \MontreCode{Pas}: plot step (it is determined \textit{automatically} at the start but can be modified).
+%\end{itemize}
+%
+%Note that the vertical axis must be adapted according to the parameter of the chi-square law.
+%
+%\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+% \begin{GraphTikz}[
+% x=1.5cm,y=7.5cm,
+% Xmin=0,Xmax=8,Xgrid=1,Xgrids=0.5,
+% Ymin=0,Ymax=0.5,Ygrid=0.1,Ygrids=0.05
+% ]
+% \DrawAxisGrids[Enlarge=2.5mm]{auto}{auto}
+% \DefineKhiTwoLaw[Color=red,Start=0.25,Trace]<phiA>{1}
+% \DefineKhiTwoLaw[Color=blue,Trace]<phiB>{2}
+% \DefineLawKhiDeux[Color=orange,Trace]<phiC>{3}
+% \DefineKhiTwoLaw[Color=purple,Trace]<phiD>{4}
+% \DefineKhiTwoLaw[Color=yellow,Trace]<phiE>{5}
+% \DefineKhiTwoLaw[Color=teal,Trace]<phiF>{6}
+% \end{GraphTikz}
+%\end{tcblisting}
+
+\pagebreak
+
+\section{Commands specific to two-variable statistics}
+
+\subsection{The point cloud}\label{scatter}
+
+In addition to commands linked to functions, it is also possible to represent double statistical series.
+
+\smallskip
+
+The following paragraph shows that adding a key allows you to add the linear adjustment line.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%in the GraphiqueTikz environment
+\DrawScatter[keys]{ListX}{ListY}
+\end{tcblisting}
+
+The optional \MontreCode{[key]} is:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{ColorScatter}: color of the cloud points (\MontreCode{black} by default).
+\end{itemize}
+
+\smallskip
+
+The mandatory arguments allow you to specify:
+
+\smallskip
+
+\begin{itemize}
+ \item the list of x;
+ \item the list of y.
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.075cm,y=0.03cm,Xmin=0,Xmax=160,Xgrid=20,Xgrids=10,
+ Origy=250,Ymin=250,Ymax=400,Ygrid=25,Ygrids=5]
+ %window preparation
+ \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{0,10,...,160}{250,275,...,400}
+ %A cloud of dots
+ \DrawScatter[Style=x,ColorScatter=red]{0,50,100,140}{275,290,315,350}
+\end{GraphTikz}
+\end{tcblisting}
+
+\subsection{The regression line}\label{reglin}
+
+The linear regression line (obtained by the least squares method) can easily be added, using the key \MontreCode{DrawLine}.
+
+\smallskip
+
+In this case, new keys are available:
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{ColorLine}: color of the line (\MontreCode{black} by default);
+ \item \MontreCode{Rounds}: precision of coefficients (\MontreCode{empty} by default);
+ \item \MontreCode{Start}: initial abscissa of the plot (\MontreCode{\textbackslash pflxmin} by default);
+ \item \MontreCode{End}: terminal abscissa of the plot (\MontreCode{\textbackslash pflxmax} by default);
+ \item \MontreCode{Name}: name of the line, for later use (\MontreCode{reglin} by default).
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.075cm,y=0.03cm,Xmin=0,Xmax=160,Xgrid=20,Xgrids=10,
+ Origy=250,Ymin=250,Ymax=400,Ygrid=25,Ygrids=5]
+ \DrawAxisGrids[Enlarge=2.5mm,Font=\small]{0,10,...,160}{250,275,...,400}
+ %cloud and right
+ \DrawScatter%
+ [ColorScatter=red,ColorLine=brown,DrawLine]%
+ {0,50,100,140}{275,290,315,350}
+ %picture
+ \DrawRanges[Colors=cyan/magenta,Lines]{d}{120}
+ %history
+ \DrawCounterimage[Style=x,Colors=blue/green!50!black,Lines]{reglin}{300}
+\end{GraphTikz}
+\end{tcblisting}
+
+\subsection{Other regressions}\label{regressions}
+
+In partnership with the \MontreCode{xint-regression} package, loaded by the package (but \textit{can be deactivated} via the \MontreCode{[noxintreg]} option), it is possible to work on other types of regression:
+
+\begin{itemize}
+ \item linear \fbox{$ax+b$};
+ \item quadratic \fbox{$ax^2+bx+c$};
+ \item cubic \fbox{$ax^3+bx^2+cx+d$};
+ \item power \fbox{$ax^b$};
+ \item exponential \fbox{$ab^x$} or \fbox{$e^{ax+b}$} or \fbox{$b e^{ax}$} or \fbox{$C + be^{ax} $};
+ \item logarithmic \fbox{$a+b\ln(x)$};
+ \item hyperbolic \fbox{$a+\displaystyle\frac{b}{x}$}.
+\end{itemize}
+
+The command, similar to that of defining a curve, is:
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\DrawRegression[keys]<no fct>{type}<rounded>{listex}{listey}
+\end{tcblisting}
+
+The \MontreCode{[keys]} available are, classically:
+
+\begin{itemize}
+ \item \MontreCode{Start}: lower bound of the definition set (\MontreCode{\textbackslash pflxmin} by default);
+ \item \MontreCode{End}: lower bound of the definition set (\MontreCode{\textbackslash pflxmax} by default);
+ \item \MontreCode{Name}: name of the curve (important for the rest!);
+ \item \MontreCode{Color}: color of the trace (\MontreCode{black} by default);
+ \item \MontreCode{Step}: plot step (it is determined \textit{automatically} at the start but can be modified).
+\end{itemize}
+
+\pagebreak
+
+The second argument, optional and between \MontreCode{<...>}, allows you to name the regression function.
+
+The third argument, mandatory and between \MontreCode{\{...\}} allows you to choose the type of regression, among:
+
+\begin{itemize}
+ \item \MontreCode{lin}: linear \fbox{$ax+b$};
+ \item \MontreCode{quad}: quadratic \fbox{$ax^2+bx+c$};
+ \item \MontreCode{cub}: cubic \fbox{$ax^3+bx^2+cx+d$};
+ \item \MontreCode{pow}: power \fbox{$ax^b$};
+ \item \MontreCode{expab}: exponential \fbox{$ab^x$}
+ \item \MontreCode{hyp}: hyperbolic \fbox{$a+\displaystyle\frac{b}{x}$};
+ \item \MontreCode{log}: logarithmic \fbox{$a+b\ln(x)$};
+ \item \MontreCode{exp}: exponential \fbox{$e^{ax+b}$};
+ \item \MontreCode{expalt}: exponential \fbox{$be^{ax}$};
+ \item \MontreCode{expoff=C}: exponential \fbox{$C + be^{ax}$}.
+\end{itemize}
+
+The fourth argument, optional and between \MontreCode{<...>}, allows you to specify the rounding(s) for the coefficients of the regression function.
+
+The last two arguments are the lists of values of X and Y.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\def\LISTEXX{0,50,100,140}\def\LISTEYY{275,290,315,350}%
+ListX := \LISTEXX\\
+ListY := \LISTEYY
+
+\begin{GraphTikz}
+ [x=0.05cm,y=0.04cm,Xmin=0,Xmax=160,Xgrid=20,Xgrids=10,
+ Origy=250,Ymin=250,Ymax=400,Ygrid=25,Ygrids=5]
+ %window preparation
+ \DrawAxisGrids[Enlarge=2.5mm,Font=\footnotesize]{auto}{auto}
+ %A cloud of dots
+ \DrawScatter[Style=o,ColorScatter=red]{\LISTEXX}{\LISTEYY}
+ %adjustment expoffset
+ \DrawRegression[Color=blue,Name=adjust]<adjust>{expoff=250}{\LISTEXX}{\LISTEYY}
+ %holdings
+ \DrawRanges[Colors=cyan/magenta,Lines]{adjust}{80}
+ \DrawCounterimage[Style=x,Colors=blue/green!50!black,Lines]{adjust}{325}
+\end{GraphTikz}
+
+\xintexpoffreg[offset=250,round=3/1]{\LISTEXX}{\LISTEYY}%
+We obtain $y=250+\num{\expregoffb}\text{e}^{\num{\expregoffa}x}$
+\end{tcblisting}
+
+\newpage
+
+\section{Auxiliary commands}
+
+\subsection{Intro}
+
+In addition to purely \textit{graphic} commands, some auxiliary commands are available:
+
+\begin{itemize}
+ \item a to format a number with a given precision;
+ \item one for working on random numbers, with constraints.
+\end{itemize}
+
+\subsection{Formatted rounding}\label{round number}
+
+The \MontreCode{\textbackslash RoundNb} command allows you to format, using the \MontreCode{siunitx} package, a number (or a calculation), with a given precision. This can be \textit{useful} for formatting results obtained using coordinate retrieval commands, for example.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\RoundNb[precision]{xint calculation}
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\RoundNb{1/3}\\
+\RoundNb{16.1}\\
+\RoundNb[3]{log(10)}\\
+\end{tcblisting}
+
+\subsection{Random number under constraints}\label{nbalea}
+
+The idea of this second command is to be able to determine a random number:
+
+\begin{itemize}
+ \item integer or decimal;
+ \item under constraints (between two fixed values).
+\end{itemize}
+
+This can allow, for example, to work on curves with \textit{random} points, but respecting certain constraints.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\PickRandomNb(*)[precision (def 0)]{lower limit}{upper limit}[\macro]
+\end{tcblisting}
+
+The star version takes the constraints in strict form ($\text{lower bound} < \text{macro} < \text{upper bound}$) while the normal version takes the constraints in broad form ($\text{lower bound) } \leq \text{macro} \leq \text{upper bound}$).
+
+\smallskip
+
+Note that the \textit{terminals} can be existing \textit{macros}!
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%a number (2 digits after the decimal point) between 0.75 and 0.95
+%a number (2 digits after the decimal point) between 0.05 and 0.25
+%a number (2 decimal places) between 0.55 and \YrandMax
+%a number (2 decimal places) between \YrandMin and 0.45
+\PickRandomNb[2]{0.75}{0.95}[\YrandMax]%
+\PickRandomNb[2]{0.05}{0.25}[\YrandMin]%
+\PickRandomNb*[2]{0.55}{\YrandMax}[\YrandA]%
+\PickRandomNb*[2]{\YrandMin}{0.45}[\YrandB]%
+%verification
+\num{\YrandMax} \& \num{\YrandMin} \& \num{\YrandA} \& \num{\YrandB}
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%a number (2 digits after the decimal point) between 0.75 and 0.95
+%a number (2 digits after the decimal point) between 0.05 and 0.25
+%a number (2 decimal places) between 0.55 and \YrandMax
+%a number (2 decimal places) between \YrandMin and 0.45
+\PickRandomNb[2]{0.75}{0.95}[\YrandMax]%
+\PickRandomNb[2]{0.05}{0.25}[\YrandMin]%
+\PickRandomNb*[2]{0.55}{\YrandMax}[\YrandA]%
+\PickRandomNb*[2]{\YrandMin}{0.45}[\YrandB]%
+%verification
+\num{\YrandMax} \& \num{\YrandMin} \& \num{\YrandA} \& \num{\YrandB}
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%the curve is designed so that there are 3 antecedents
+\PickRandomNb[2]{0.75}{0.95}[\YrandMax]%
+\PickRandomNb[2]{0.05}{0.25}[\YrandMin]%
+\PickRandomNb*[2]{0.55}{\YrandMax}[\YrandA]%
+\PickRandomNb*[2]{\YrandMin}{0.45}[\YrandB]%
+
+\begin{GraphTikz}
+ [x=0.075cm,y=7.5cm,Xmin=0,Xmax=150,Xgrid=10,Xgrids=5,
+ Ymin=0,Ymax=1,Ygrid=0.1,Ygrids=0.05]
+ \DrawAxisGrids[Last,Enlarge=2.5mm]{auto}{auto}
+ \DefineInterpoCurve[Color=red,Trace,Name=functiontest,Tension=0.75]
+ {(0,\YrandA)(40,\YrandMin)(90,\YrandMax)(140,\YrandB)}
+ \FindCounterimage[Disp=false,Name=ANTECED]{functiontest}{0.5}
+ \DrawCounterimage[Colors=blue/teal,Lines]{functiontest}{0.5}
+ \GetXcoord{(ANTECED-1)}[\Aalpha]
+ \GetXcoord{(ANTECED-2)}[\Bbeta]
+ \GetXcoord
+ {(ANTECED-3)}[\Cgamma]
+\end{GraphTikz}
+
+The solutions of $f(x)=\num{0.5}$ are, by graphic reading:
+$\begin{cases}
+ \alpha \approx \RoundNb[0]{\Aalpha} \\
+ \beta \approx \RoundNb[0]{\Bbeta} \\
+ \gamma \approx \RoundNb[0]{\Cgamma}
+\end{cases}$.
+\end{tcblisting}
+%
+%\newpage
+%
+%\section{Liste des commandes}
+%
+%Les commandes disponibles sont :
+%
+%\NewDocumentCommand\lstcmd{ m m m }{%
+% \item[\texttt{#1}] : \mintinline{latex}|#2|\hfill{}page \pageref{#3}
+%}
+%
+%\begin{description}
+% \lstcmd{environnement~~}{\begin{GraphiqueTikz}...\end{GraphiqueTikz}}{creaenvt}
+% \lstcmd{axes et grilles}{\TracerAxesGrille}{creaaxesgr}
+% \lstcmd{aj val axes X~~}{\RajouterValeursAxeX}{ajoutvals}
+% \lstcmd{aj val axes Y~~}{\RajouterValeursAxeY}{ajoutvals}
+% \lstcmd{def fonction~~~}{\DefineCurve}{deftracfct}
+% \lstcmd{tracé courbe~~~}{\DrawCurve}{deftracfct}
+% \lstcmd{def interpo~~~~}{\DefineCurveInterpo}{deftracinterpo}
+% \lstcmd{tracé interpo~~}{\DrawCurveInterpo}{deftracinterpo}
+% \lstcmd{def spline~~~~~}{\DefineSplineCurve}{deftracfctspline}
+% \lstcmd{tracé spline~~~}{\DrawSplineCurve}{deftracfctspline}
+% \lstcmd{tracé droite~~~}{\TracerDroite}{tracdroite}
+% \lstcmd{def points~~~~~}{\DefinirPts}{defpts}
+% \lstcmd{def image~~~~~~}{\DefinirImage}{defpts}
+% \lstcmd{marq pts~~~~~~~}{\MarquerPts}{markpts}
+% \lstcmd{placer txt~~~~~}{\PlacerTexte}{placetxt}
+% \lstcmd{récup absc~~~~~}{\RecupererAbscisse}{recupcoordo}
+% \lstcmd{récup ordo~~~~~}{\RecupererOrdonnee}{recupcoordo}
+% \lstcmd{récup coordos~~}{\RecupererCoordonnees}{recupcoordo}
+% \lstcmd{images~~~~~~~~~}{\PlacerImages}{images}
+% \lstcmd{antécédents~~~~}{\TrouverAntecedents}{defanteced}
+% \lstcmd{antécédents~~~~}{\PlacerAntecedents}{tracanteced}
+% \lstcmd{intersection~~~}{\TrouverIntersections}{intersect}
+% \lstcmd{maximum~~~~~~~~}{\TrouverMaximum}{maximum}
+% \lstcmd{minimum~~~~~~~~}{\TrouverMinimum}{minimum}
+% \lstcmd{intégrale~~~~~~}{\DrawIntegral}{integr}
+% \lstcmd{tangente~~~~~~~}{\DrawTangente}{tgte}
+% \lstcmd{loi normale~~~~}{\DefinirLoiNormale}{loinormale}
+% \lstcmd{loi normale~~~~}{\TracerLoiNormale}{loinormale}
+% \lstcmd{loi khideux~~~~}{\DefinirLoiKhiDeux}{loikhideux}
+% \lstcmd{loi khideux~~~~}{\TracerLoiKhiDeux}{loikhideux}
+% \lstcmd{stats 2 var~~~~}{\TracerNuage}{nuage}
+% \lstcmd{regressions~~~~}{\TracerAjustement}{regressions}
+% \lstcmd{arrondi~~~~~~~~}{\RoundNb}{numarrond}
+% \lstcmd{nb aléat~~~~~~~}{\ChoisirNbAlea}{nbalea}
+%\end{description}
+
+\pagebreak
+
+\section{History}
+
+\begin{quote}
+\begin{verbatim}
+0.1.5 : Initial version [en]
+\end{verbatim}
+\end{quote}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.pdf b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.pdf
index b97f1cf998..c53d69179c 100644
--- a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.pdf
+++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex
index e845f5c4d1..9ea6b13200 100644
--- a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex
+++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-doc-fr.tex
@@ -11,6 +11,7 @@
\usepackage{fancyhdr}
\usepackage{hyperref}
\usepackage{nicefrac}
+\usepackage{fontawesome5}
\usepackage{tcolorbox}
\tcbuselibrary{skins,minted}
\fancyhf{}
@@ -28,8 +29,8 @@
\hypersetup{pdfborder=0 0 0}
\usepackage[margin=2cm]{geometry}
\setlength{\parindent}{0pt}
-\def\TPversion{0.1.0}
-\def\TPdate{11/05/2024}
+\def\TPversion{0.1.5}
+\def\TPdate{22/06/2024}
\usepackage{soul}
\usepackage{codehigh}
\usepackage{tabularray}
@@ -54,7 +55,9 @@
\begin{tabular}{c}
{\Huge \texttt{tkz-grapheur [fr]}}\\
\\
- {\LARGE Un système de grapheur, basé sur \TikZ.}\\
+ {\LARGE Un système de grapheur,}\\
+ \\
+ {\LARGE basé sur \textsf{\TikZ} et \textsf{xint}.}\\
\\
{\small \texttt{Version \TPversion{} -- \TPdate}}
\end{tabular}
@@ -67,7 +70,7 @@
\begin{tabular}{c}
\texttt{Cédric Pierquet}\\
{\ttfamily c pierquet -- at -- outlook . fr}\\
- \texttt{\url{https://github.com/cpierquet/tkz-grapheur}} \\
+ \texttt{\url{https://forge.apps.education.fr/pierquetcedric/package-latex-tkz-grapheur}} \\
\end{tabular}
\end{center}
@@ -80,8 +83,8 @@
%préparation de la fenêtre
\TracerAxesGrilles[Elargir=2.5mm,Police=\small]{0,1,...,10}{0,2,...,16}
%déf des fonctions avec nom courbe + nom fonction + expression
- \DefinirFonction[Nom=cf]<f>{3*x-6}
- \DefinirFonction[Nom=cg]<g>{-(x-6)^2+12}
+ \DefinirCourbe[Nom=cf]<f>{3*x-6}
+ \DefinirCourbe[Nom=cg]<g>{-(x-6)^2+12}
%antécédents et intersection
\TrouverIntersections[Aff=false,Nom=K]{cf}{cg}
\TrouverAntecedents[AffDroite,Couleur=orange,Nom=I]{cg}{8}
@@ -92,7 +95,7 @@
{g(x)}%
{(I-2)}{(J-2)}
%intégrale entre les deux courbes
- \TracerIntegrale[Bornes=noeuds,Type=entre]{f(x)}[g(x)]{(K-1)}{(K-2)}
+ \TracerIntegrale[Bornes=noeuds,Type=fct/fct]{f(x)}[g(x)]{(K-1)}{(K-2)}
%tracé des courbes et des points
\TracerCourbe[Couleur=red]{f(x)}
\TracerCourbe[Couleur=teal]{g(x)}
@@ -121,13 +124,13 @@
%rajouter des valeurs
\RajouterValeursAxeX{0.25,1.4,3.3}{\num{0.25},\num{1.4},\num{3.3}}
%fonction trigo (déf + tracé)
- \DefinirFonction[Nom=ccos,Debut=0,Fin=pi]<fcos>{cos(x)}
- \DefinirFonction[Nom=csin,Debut=0,Fin=pi]<fsin>{sin(x)}
+ \DefinirCourbe[Nom=ccos,Debut=0,Fin=pi]<fcos>{cos(x)}
+ \DefinirCourbe[Nom=csin,Debut=0,Fin=pi]<fsin>{sin(x)}
%intégrale
\TrouverIntersections[Aff=false,Nom=JKL]{ccos}{csin}
%\DefinirPts{FIN/pi/0}
\TracerIntegrale%
- [Bornes=noeud/abs,Type=entre,Couleurs=cyan/cyan!50]%
+ [Bornes=noeud/abs,Type=fct/fct,Couleurs=cyan/cyan!50]%
{fsin(x)}[fcos(x)]%
{(JKL-1)}{pi}
%tracé des courbes
@@ -147,6 +150,7 @@
\vfill
+\hfill{\footnotesize\textit{\ttfamily À mon papa.}}
\vspace*{5mm}
@@ -205,7 +209,7 @@ Il sera ensuite possible :
\item de tracer des courbes ;
\item de déterminer graphiquement des images ou des antécédents ;
\item de rajouter des éléments de dérivation (tangentes) ou d'intégration (domaine) ;
- \item de tracer une droite d'ajustement linéaire.
+ \item de tracer une droite d'ajustement linéaire ou la courbe d'un autre ajustement.
\end{itemize}
\subsection{Packages utilisés, et options du package}
@@ -215,11 +219,9 @@ Le package utilise :
\smallskip
\begin{itemize}
- \item \MontreCode{tikz}, avec les librairies \MontreCode{calc,intersections,patterns,patterns.meta} ;
- \item \MontreCode{simplekv} ;
- \item \MontreCode{xintexpr} ;
- \item \MontreCode{xstring} ;
- \item \MontreCode{listofitems}.
+ \item \MontreCode{tikz}, avec les librairies \MontreCode{calc,intersections,patterns,patterns.meta,bbox} ;
+ \item \MontreCode{simplekv}, \MontreCode{xintexpr}, \MontreCode{xstring}, \MontreCode{listofitems} ;
+ \item \MontreCode{xint-regression}\footnote{CTAN : \url{https://ctan.org/pkg/xint-regression}.} (pour les régressions, désactivable via \MontreCode{[nonxintreg]}).
\end{itemize}
\smallskip
@@ -228,7 +230,7 @@ Le package charge également \MontreCode{siunitx} avec les options classiques \t
\smallskip
-Le package charge également la librairie \TikZ\ \MontreCode{babel}, mais il est possible de ne pas le charger en utilisant l'option \MontreCode{[nontikzbabel]}.
+Le package charge également la librairie \TikZ\ \MontreCode{babel}, mais il est possible de ne pas la charger en utilisant l'option \MontreCode{[nontikzbabel]}.
\smallskip
@@ -272,9 +274,9 @@ On peut par exemple partir de l'exemple suivant, pour \textit{illustrer} le chem
\TracerAxesGrilles[Elargir=2.5mm,Police=\small]%
{0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1}
{0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1}
- \DefinirFonction[Nom=cf,Debut=0,Fin=1]<f>{x*exp(x-1)}
- \DefinirFonction[Nom=delta,Debut=0,Fin=1]<D>{x}
- \TracerIntegrale[Type=entre]{f(x)}[D(x)]{0}{1}
+ \DefinirCourbe[Nom=cf,Debut=0,Fin=1]<f>{x*exp(x-1)}
+ \DefinirCourbe[Nom=delta,Debut=0,Fin=1]<D>{x}
+ \TracerIntegrale[Type=fct/fct]{f(x)}[D(x)]{0}{1}
\TracerCourbe[Couleur=red]{f(x)}
\TracerCourbe[Couleur=teal]{D(x)}
\PlacerImages[Couleurs=blue/cyan,Traits]{f}{0.8,0.9}
@@ -330,9 +332,11 @@ Concernant les styles des \textit{objets}, ils sont donnés ci-dessous.
\tikzset{pflgrilles/.style={very thin,lightgray}}
\tikzset{pflaxes/.style={line width=0.8pt,->,>=latex}}
-%style des points (courbe / nuage)
+%style des points (courbe / nuage /labels)
+\tikzset{pflpoint/.style={line width=0.95pt}}
\tikzset{pflpointc/.style={radius=1.75pt}}
\tikzset{pflpointnuage/.style={radius=1.75pt}}
+\tikzset{pflnoeud/.style={}} %pour les inner sep par exemple :-)
%style des courbes
\tikzset{pflcourbe/.style={line width=1.05pt}}
@@ -399,7 +403,7 @@ La première commande \textit{utile} va permettre de créer les grilles, les axe
\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
%dans l'environnement GraphiqueTikz
-\TracerAxesGrille[clés]{gradX}{gradY}
+\TracerAxesGrilles[clés]{gradX}{gradY}
\end{tcblisting}
Les \MontreCode{[clés]}, optionnelles, disponibles sont :
@@ -460,6 +464,8 @@ Les options possible sont :
\end{GraphiqueTikz}
\end{tcblisting}
+À noter qu'il existe les clés booléennes \MontreCode{[Derriere]} (sans les graduations) et \MontreCode{[Devant]} (sans la grille) pour afficher les axes en mode \textit{sous/sur}-impression dans le cas d'intégrales par exemple.
+
\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
\begin{GraphiqueTikz}%
[x=2.75cm,y=3cm,
@@ -529,9 +535,48 @@ Les arguments obligatoires correspondent aux abscisses (en langage\TikZ) et aux
\section{Commandes spécifiques de définitions}
+\subsection{Tracer une droite}\label{tracdroite}
+
+L'idée est de proposer une commande pour tracer une droite, à partir :
+
+\begin{itemize}
+ \item de deux points (ou nœuds) ;
+ \item d'un point (ou nœud) et de la pente.
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%dans l'environnement GraphiqueTikz
+\TracerDroite[clés]{point ou nœud}{point ou noeud ou pente}
+\end{tcblisting}
+
+Les \MontreCode{[clés]}, optionnelles, disponibles sont :
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Nom} : nom éventuel du tracé (pour réutilisation) ;
+ \item \MontreCode{Pente} : booléen pour préciser que la pente est utilisée (\MontreCode{false} par défaut) ;
+ \item \MontreCode{Debut} : début du tracé (\MontreCode{\textbackslash pflxmin} par défaut) ;
+ \item \MontreCode{Fin} : fin du tracé (\MontreCode{\textbackslash pflxmax} par défaut) ;
+ \item \MontreCode{Couleur} : couleur du tracé (\MontreCode{black} par défaut).
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto}
+ \DefinirPts[Aff,Couleur=gray]{A/-4/3,B/2/0,C/0/-1}
+ \TracerDroite[Couleur=red]{(-2,-1)}{(2,4)}
+ \TracerDroite[Couleur=blue,Debut=-5,Fin=3]{(A)}{(B)}
+ \TracerDroite[Couleur=olive,Pente]{(C)}{0.25}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\pagebreak
+
\subsection{Définir une fonction, tracer la courbe d'une fonction}\label{deftracfct}
-La première idée est de définir une fonction, pour réutilisation ultérieure. Cette commande \textit{crée} la fonction, sans la tracer, car dans certains cas des éléments devront être tracés au préalable.
+L'idée est de définir une fonction, pour réutilisation ultérieure. Cette commande \textit{crée} la fonction, sans la tracer, car dans certains cas des éléments devront être tracés au préalable.
\smallskip
@@ -539,7 +584,7 @@ Il existe également une commande pour tracer la courbe d'une fonction précéde
\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
%dans l'environnement GraphiqueTikz
-\DefinirFonction[clés]<nom fct>{formule xint}
+\DefinirCourbe[clés]<nom fct>{formule xint}
\TracerCourbe[clés]{formule xint}
\end{tcblisting}
@@ -550,9 +595,9 @@ Les \MontreCode{[clés]} pour la définition ou le tracé, optionnelles, disponi
\begin{itemize}
\item \MontreCode{Debut} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmin} par défaut) ;
\item \MontreCode{Fin} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmax} par défaut) ;
- \item \MontreCode{Nom} : = nom de la courbe (important pour la suite !) ;
- \item \MontreCode{Couleur} : = couleur du tracé (\MontreCode{black} par défaut) ;
- \item \MontreCode{Pas} : = pas du tracé (il est déterminé \textit{automatiquement} au départ mais peut être modifié) ;
+ \item \MontreCode{Nom} : nom de la courbe (important pour la suite !) ;
+ \item \MontreCode{Couleur} : couleur du tracé (\MontreCode{black} par défaut) ;
+ \item \MontreCode{Pas} : pas du tracé (il est déterminé \textit{automatiquement} au départ mais peut être modifié) ;
\item \MontreCode{Trace} : booléen pour tracer également la courbe (\MontreCode{false} par défaut).
\end{itemize}
@@ -562,10 +607,11 @@ Les \MontreCode{[clés]} pour la définition ou le tracé, optionnelles, disponi
Ymin=40,Ymax=56,Ygrille=2,Ygrilles=1,Origy=40]
\TracerAxesGrilles[Elargir=2.5mm,Police=\small]{4,5,...,20}{40,42,...,56}
%définition de la fonction + tracé de la courbe
- \DefinirFonction[Nom=cf,Debut=5,Fin=19]<f>{-2*x+3+24*log(2*x)}
+ %la fonction ln a été créée pour xint !
+ \DefinirCourbe[Nom=cf,Debut=5,Fin=19]<f>{-2*x+3+24*ln(2*x)}
\TracerCourbe[Couleur=red,Debut=5,Fin=19]{f(x)}
%ou en une seule commande si "suffisant"
- %\DefinirFonction[Nom=cf,Debut=5,Fin=19,Trace]<f>{-2*x+3+24*log(2*x)}
+ %\DefinirCourbe[Nom=cf,Debut=5,Fin=19,Trace]<f>{-2*x+3+24*ln(2*x)}
\end{GraphiqueTikz}
\end{tcblisting}
@@ -618,8 +664,8 @@ Certaines exploitations demandant des techniques différentes suivant le type de
\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
%dans l'environnement GraphiqueTikz
-\DefinirSpline[clés]{liste des points support}[\macronomspline]
-\TracerSpline[clés]{liste des points support}[\macronomspline]
+\DefinirCourbeSpline[clés]{liste des points support}[\macronomspline]
+\TracerCourbeSpline[clés]{liste des points support}[\macronomspline]
\end{tcblisting}
Les \MontreCode{[clés]} pour la définition ou le tracé, optionnelles, disponibles sont :
@@ -627,9 +673,9 @@ Les \MontreCode{[clés]} pour la définition ou le tracé, optionnelles, disponi
\smallskip
\begin{itemize}
- \item \MontreCode{Nom} : = nom de la courbe d'interpolation (important pour la suite !) ;
+ \item \MontreCode{Nom} : nom de la courbe d'interpolation (important pour la suite !) ;
\item \MontreCode{Coeffs} : modifier (voir la documentation de \textsf{ProfLycee}\footnote{CTAN : \url{https://ctan.org/pkg/proflycee}} les \textit{coefficients} du spline ;
- \item \MontreCode{Couleur} : = couleur du tracé (\MontreCode{black} par défaut) ;
+ \item \MontreCode{Couleur} : couleur du tracé (\MontreCode{black} par défaut) ;
\item \MontreCode{Trace} : booléen pour tracer également la courbe (\MontreCode{false} par défaut).
\end{itemize}
@@ -649,7 +695,7 @@ L'argument obligatoire permet quant à lui de spécifier la liste des points sup
%définition de la liste des points support du spline
\def\LISTETEST{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}
%définition et tracé du spline cubique
- \DefinirSpline[Nom=splinetest,Trace,Couleur=olive]{\LISTETEST}
+ \DefinirCourbeSpline[Nom=splinetest,Trace,Couleur=olive]{\LISTETEST}
\end{GraphiqueTikz}
\end{tcblisting}
@@ -661,10 +707,14 @@ La seconde idée est de travailler avec des nœuds \TikZ, qui pourront être uti
\smallskip
+Il est également possible de définir des nœuds pour des points \textit{image}.
+
+\smallskip
+
Certaines commandes (explicités ultérieurement) permettent de déterminer des points particuliers des courbes sous forme de nœuds, donc il semble intéressant de pouvoir en définir directement.
\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
-%dans l'environnement GraphiqueTikz
+%par les coordonnées
\DefinirPts[clés]{Nom1/x1/y1,Nom2/x2/y2,...}
\end{tcblisting}
@@ -677,6 +727,22 @@ Les \MontreCode{[clés]}, optionnelles, disponibles sont :
\item \MontreCode{Couleur} : couleur des points, si \MontreCode{Aff=true} (\MontreCode{black} par défaut).
\end{itemize}
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%sous forme d'image
+\DefinirImage[clés]{objet}{abscisse}
+\end{tcblisting}
+
+Les \MontreCode{[clés]}, optionnelles, disponibles sont :
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Nom} : nom du nœud (\MontreCode{vide} par défaut) ;
+ \item \MontreCode{Spline} : booléen pour spécifier qu'un spline est utilisé (\MontreCode{false} par défaut).
+\end{itemize}
+
+Le premier argument obligatoire est l'\textit{objet} considéré (nom de la courbe pour le spline, fonction sinon) ; le second est l'abscisse du point considéré.
+
\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
\begin{GraphiqueTikz}%
[x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4,
@@ -686,6 +752,74 @@ Les \MontreCode{[clés]}, optionnelles, disponibles sont :
\DefinirFonction[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)}
%nœuds manuels
\DefinirPts[Aff,Couleur=brown]{A/7/42,B/16/49}
+ %nœud image
+ \DefinirImage[Nom=IMGf]{f}{14}
+ \MarquerPts*[Style=x,Couleur=blue]{(IMGf)}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\pagebreak
+
+\subsection{Marquage de points}\label{markpts}
+
+L'idée est de proposer de quoi marquer des points avec un style particulier.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%dans l'environnement GraphiqueTikz
+\MarquerPts(*)[clés]<police>{liste}
+\end{tcblisting}
+
+La version \textit{étoilée} marque les points sans les \og noms \fg, alors que la version \textit{non étoilée} les affiche :
+
+\begin{itemize}
+ \item dans le cas de la version \textit{étoilée}, la liste est à donner sous la forme \MontreCode{(ptA),(ptB),...} ;
+ \item sinon, la liste est à donner sous la forme \MontreCode{(ptA)/labelA/poslabelA,...}.
+\end{itemize}
+
+\smallskip
+
+Les \MontreCode{[clés]}, optionnelles, disponibles sont :
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Couleur} : couleur (\MontreCode{black} par défaut) ;
+ \item \MontreCode{Style} : style des marques (\MontreCode{o} par défaut).
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}[x=1.5cm,y=1.5cm,Ymin=-2]
+ \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto}
+ \DefinirPts{A/1.75,-1.25}\MarquerPts[Couleur=pink]{(A)/A/below} %rond (par défaut)
+ \MarquerPts[Couleur=teal]{(1,1)/M/below}
+ \MarquerPts[Couleur=red,Style=x]{(1.25,1)/$A$/below} %croix
+ \MarquerPts[Couleur=orange,Style=+]<\small\sffamily>{(1.5,1)/K/below} %plus
+ \MarquerPts[Couleur=blue,Style=c]{(1.75,1)/P/below} %carré
+ \MarquerPts[Couleur=gray,Style=d]{(2,1)/P/below} %diamant
+ \MarquerPts*[Couleur=orange/yellow]{(2,2),(2.5,2.25)} %rond bicolore
+ \MarquerPts*[Style=+,Couleur=red]{(1,2)}
+ \MarquerPts*[Style=x,Couleur=blue]{(2.25,1)}
+ \MarquerPts*[Style=c,Couleur=magenta]{(-2,-1)}
+ \MarquerPts[Couleur=red,Style=x]{(-1,1)/$A$/below,(-2,2)/$B$/below left}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+À noter qu'il est également possible de modifier la taille des marques \MontreCode{o/x/+/c} via les \MontreCode{[clés]} :
+
+\begin{itemize}
+ \item \MontreCode{Taillex=...} (\MontreCode{2pt} par défaut) pour les points \textit{croix} ;
+ \item \MontreCode{Tailleo=...} (\MontreCode{1.75pt} par défaut) pour les points \textit{cercle} ;
+ \item \MontreCode{Taillec=...} (\MontreCode{2pt} par défaut) pour les points \textit{carré}.
+\end{itemize}
+
+\pagebreak
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}[x=1cm,y=1cm,Xmin=0,Ymin=0]
+ \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto}
+ \MarquerPts[Couleur=red,Style=x,Taillex=3.5pt]{(1.25,1.25)/$A$/below}
+ \MarquerPts[Couleur=teal,Tailleo=2.5pt]{(2,2)/$A$/right}
+ \MarquerPts*[Couleur=orange,Style=c,Taillec=4pt]{(0.5,2.5)}
\end{GraphiqueTikz}
\end{tcblisting}
@@ -704,6 +838,30 @@ Les calculs étant effectués en flottant en fonction des unités (re)calculées
\RecupererCoordonnees{nœud}[\macrox][\macroy]
\end{tcblisting}
+\subsection{Placer du texte}\label{placetxt}
+
+À noter qu'une commande de placement de texte est disponible.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%dans l'environnement GraphiqueTikz
+\PlacerTexte[clés]{(nœud ou coordonnées)}{texte}
+\end{tcblisting}
+
+Les \MontreCode{[clés]} disponibles sont :
+
+\begin{itemize}
+ \item \MontreCode{Police=...} (\MontreCode{\textbackslash normalsize\textbackslash normalfont} par défaut) pour la police ;
+ \item \MontreCode{Couleur=...} (\MontreCode{black} par défaut) pour la couleur ;
+ \item \MontreCode{Position=...} (\MontreCode{vide} par défaut) pour la position du texte par rapport aux coordonnées.
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+ \begin{GraphiqueTikz}[x=1cm,y=1cm,Xmin=0,Xmax=5,Ymin=0,Ymax=1]
+ \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto}
+ \PlacerTexte[Couleur=red,Police=\LARGE,Position=right]{(1.5,0.5)}{courbe $C_1$}
+ \end{GraphiqueTikz}
+\end{tcblisting}
+
\pagebreak
\section{Commandes spécifiques d'exploitation des courbes}
@@ -716,7 +874,7 @@ La fonction/courbe utilisée doit avoir été déclarée précédemment pour que
\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
%dans l'environnement GraphiqueTikz
-\PlacerImages[clés]{focntion ou courbe}{liste d'abscisses}
+\PlacerImages[clés]{fonction ou courbe}{liste d'abscisses}
\end{tcblisting}
Les \MontreCode{[clés]}, optionnelles, disponibles sont :
@@ -746,7 +904,7 @@ Le premier argument obligatoire, permet de spécifier :
Ymin=40,Ymax=56,Ygrille=2,Ygrilles=1,Origy=40]
\TracerAxesGrilles[Elargir=2.5mm,Police=\small]{4,5,...,20}{40,42,...,56}
%définition de la fonction + tracé de la courbe
- \DefinirFonction[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)}
+ \DefinirCourbe[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)}
%images
\PlacerImages[Traits,Couleurs=teal/blue]{f}{6,7,8,9,10}
\end{GraphiqueTikz}
@@ -790,23 +948,23 @@ Le second argument obligatoire, permet de spécifier la valeur à atteindre.
Ymin=40,Ymax=56,Ygrille=2,Ygrilles=1,Origy=40]
\TracerAxesGrilles[Elargir=2.5mm,Police=\small]{4,5,...,20}{40,42,...,56}
%définition de la fonction + tracé de la courbe
- \DefinirFonction[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)}
+ \DefinirCourbe[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)}
%antécédents
\TrouverAntecedents[Couleur=teal,AffDroite,Aff]{cf}{53}
%les deux antécédents sont aux nœuds (S-1) et (S-2)
\end{GraphiqueTikz}
\end{tcblisting}
-Les \MontreCode{[clés]}, optionnelles, disponibles sont :
-
-\smallskip
-
-\begin{itemize}
- \item \MontreCode{Nom} : base du nom des \textbf{nœuds} intersection (\MontreCode{S} par défaut, ce qui donnera \textsf{S-1}, \textsf{S-2}, etc) ;
- \item \MontreCode{Aff} : booleen pour afficher les points (\MontreCode{true} par défaut) ;
- \item \MontreCode{Couleur} : couleur des points (\MontreCode{black} par défaut) ;
- \item \MontreCode{AffDroite} : booleen pour afficher la droite horizontale (\MontreCode{false} par défaut).
-\end{itemize}
+%Les \MontreCode{[clés]}, optionnelles, disponibles sont :
+%
+%\smallskip
+%
+%\begin{itemize}
+% \item \MontreCode{Nom} : base du nom des \textbf{nœuds} intersection (\MontreCode{S} par défaut, ce qui donnera \textsf{S-1}, \textsf{S-2}, etc) ;
+% \item \MontreCode{Aff} : booleen pour afficher les points (\MontreCode{true} par défaut) ;
+% \item \MontreCode{Couleur} : couleur des points (\MontreCode{black} par défaut) ;
+% \item \MontreCode{AffDroite} : booleen pour afficher la droite horizontale (\MontreCode{false} par défaut).
+%\end{itemize}
\pagebreak
@@ -845,7 +1003,7 @@ Le second argument obligatoire, permet de spécifier la valeur à atteindre.
Ymin=40,Ymax=56,Ygrille=2,Ygrilles=1,Origy=40]
\TracerAxesGrilles[Elargir=2.5mm,Police=\small]{4,5,...,20}{40,42,...,56}
%définition de la fonction + tracé de la courbe
- \DefinirFonction[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)}
+ \DefinirCourbe[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)}
%antécédents
\PlacerAntecedents[Couleurs=teal/cyan,Traits,Nom=PO]{cf}{53}
\RecupererAbscisse{(PO-1)}[\premsol]
@@ -894,8 +1052,8 @@ Le premier argument obligatoire, permet de spécifier le \textbf{nom} de la seco
[x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4,
Ymin=40,Ymax=56,Ygrille=2,Ygrilles=1,Origy=40]
\TracerAxesGrilles[Elargir=2.5mm,Police=\small]{4,5,...,20}{40,42,...,56}
- \DefinirFonction[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)}
- \DefinirFonction[Nom=cg,Debut=5,Fin=19,Trace,Couleur=blue]<f>{0.25*(x-12)^2+46}
+ \DefinirCourbe[Nom=cf,Debut=5,Fin=19,Trace,Couleur=red]<f>{-2*x+3+24*log(2*x)}
+ \DefinirCourbe[Nom=cg,Debut=5,Fin=19,Trace,Couleur=blue]<g>{0.25*(x-12)^2+46}
%intersections, nommées (TT-1) et (TT-2)
\TrouverIntersections[Nom=TT,Couleur=darkgray,Aff,Traits]{cf}{cg}
%récupération des points d'intersection
@@ -911,7 +1069,90 @@ $(\ArrondirNum[2]{\alphaB};\ArrondirNum[2]{\betaB})$.
\pagebreak
-\subsection{Intégrales}\label{integr}
+\subsection{Extremums}\label{maximum}\label{minimum}
+
+L'idée (encore \textit{expérimentale}) est de proposer des commandes pour extraire les extremums d'une courbe définie par le package.
+
+La commande crée le nœud correspondant, et il est du coup possible de récupérer ses coordonnées pour exploitation ultérieure.
+
+\smallskip
+
+Il est possible, en le spécifiant, de travailler sur les différentes courbes gérées par le package (fonction, interpolation, spline).
+
+Pour des courbes singulières, il est possible que les résultats ne soient pas tout à fait ceux attendus\ldots
+
+\smallskip
+
+{\small\faBomb} Pour le moment, les \textit{limitations} sont :
+
+\begin{itemize}
+ \item pas de gestion d'extremums multiples (seul le premier sera traité)\ldots
+ \item pas de gestion d'extremums aux bornes du tracé\ldots
+ \item pas de récupération automatique des paramètres de définition des courbes\ldots
+ \item le temps de compilation peut être plus long\ldots
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%dans l'environnement GraphiqueTikz
+\TrouverMaximum[clés]{objet}[nœud créé]
+\TrouverMinimum[clés]{objet}[nœud créé]
+\end{tcblisting}
+
+Les \MontreCode{[clés]}, optionnelles, disponibles sont :
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Methode} : méthode, parmi \MontreCode{fonction/interpo/spline} pour les calculs (\MontreCode{fonction} par défaut) ;
+ \item \MontreCode{Debut} : début du tracé (\MontreCode{\textbackslash pflxmin} par défaut) ;
+ \item \MontreCode{Fin} : fin du tracé (\MontreCode{\textbackslash pflxmax} par défaut) ;
+ \item \MontreCode{Pas} : pas du tracé si \MontreCode{fonction} (il est déterminé \textit{automatiquement} au départ mais peut être modifié) ;
+ \item \MontreCode{Coeffs} : modifier les \textit{coefficients} du spline si \MontreCode{spline} ;
+ \item \MontreCode{Tension} : paramétrage de la \textit{tension} du tracé d'interpolation si \MontreCode{interpo}(\MontreCode{0.5} par défaut).
+\end{itemize}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}[x=1cm,y=1cm,Xmin=-1,Xmax=5,Ymin=-1,Ymax=3]
+ \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto}
+ \DefinirCourbe[Nom=cf,Debut=0.35,Fin=4.2,Trace]%
+ <f>{0.6*cos(4.5*(x-4)+2.1)-1.2*sin(x-4)+0.1*x+0.2}
+ \TrouverMaximum[Debut=0.35,Fin=4.2]{f}[cf-max]
+ \TrouverMaximum[Debut=3,Fin=4]{f}[cf-maxlocal]
+ \TrouverMinimum[Debut=1,Fin=2]{f}[cf-minlocal]
+ \MarquerPts*[Couleur=red,Traits]{(cf-max)}
+ \MarquerPts*[Couleur=blue,Traits]{(cf-maxlocal)}
+ \MarquerPts*[Couleur=olive,Traits]{(cf-minlocal)}
+ \RecupererCoordonnees{(cf-max)}[\MonMaxX][\MonMaxY]
+\end{GraphiqueTikz}\\
+Le maximum est $M\approx\ArrondirNum{\MonMaxY}$, atteint en $x\approx\ArrondirNum{\MonMaxX}$
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}[x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \TracerAxesGrilles[Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefinirCourbeInterpo[Nom=interpotest,Couleur=red,Trace,Tension=1]%
+ {(-6,4)(-2,-2)(3,3.5)}
+ \TrouverMinimum[Methode=interpo,Tension=1]{(-6,4)(-2,-2)(3,3.5)}[interpo-min]
+ \MarquerPts*[Couleur=blue]{(interpo-min)}
+ \RecupererCoordonnees{(interpo-min)}[\MinInterpoX][\MinInterpoY]
+\end{GraphiqueTikz}\\
+Le minimum est $M\approx\ArrondirNum[3]{\MinInterpoY}$, atteint en $x\approx\ArrondirNum[3]{\MinInterpoX}$
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=1.2cm,y=1.6cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=3,Ygrille=0.5,Ygrilles=0.25]
+ \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto}
+ \def\LISTETEST{-6/2/0§-1/-2/0§2/1/0§3.5/0/-1}
+ \DefinirCourbeSpline[Nom=splinetest,Trace]{\LISTETEST}
+ \TrouverMinimum[Methode=spline]{\LISTETEST}[spline-min]
+ \MarquerPts*[Couleur=red]{(spline-min)}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\pagebreak
+
+\subsection{Intégrales (version améliorée)}\label{integr}
On peut également travailler avec des intégrales.
@@ -923,13 +1164,17 @@ Il est possible de :
\begin{itemize}
\item représenter une intégrale \textbf{sous} une courbe définie ;
- \item représenter une intégrale \textbf{entre} deux courbes (sauf avec des splines\ldots) ;
+ \item représenter une intégrale \textbf{entre} deux courbes ;
\item les bornes d'intégration peuvent être des abscisses et/ou des nœuds.
\end{itemize}
+\smallskip
+
+{\small\faBomb} Compte-tenu des différences de traitement entre les courbes par formule, les courbes par interpolation simple ou les courbes par interpolation cubique, les arguments et clés peuvent différer suivant la configuration !
+
\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
%dans l'environnement GraphiqueTikz
-\TracerIntegrale[clés]<options spécifiques>{fonction ou spline}[courbe inf]{A}{B}
+\TracerIntegrale[clés]<options spécifiques>{objet1}[objet2]{A}{B}
\end{tcblisting}
Les \MontreCode{[clés]} pour la définition ou le tracé, optionnelles, disponibles sont :
@@ -939,7 +1184,14 @@ Les \MontreCode{[clés]} pour la définition ou le tracé, optionnelles, disponi
\item \MontreCode{Style} : type de remplissage, parmi \MontreCode{remplissage}/\MontreCode{hachures} (\MontreCode{remplissage} par défaut) ;
\item \MontreCode{Opacite} : opacité (\MontreCode{0.5} par défaut) du remplissage ;
\item \MontreCode{Hachures} : style (\MontreCode{north west lines} par défaut) du remplissage hachures ;
- \item \MontreCode{Type} : type d'intégrale parmi \MontreCode{dessous}/\MontreCode{entre} (\MontreCode{dessous} par défaut) ;
+ \item \MontreCode{Type} : type d'intégrale parmi
+ \begin{itemize}
+ \item \MontreCode{fct} (défaut) pour une intégrale sous une courbe définie par une formule ;
+ \item \MontreCode{spl} pour une intégrale sous une courbe définie par un spline cublique ;
+ \item \MontreCode{fct/fct} pour une intégrale entre deux courbes définie par une formule ;
+ \item \MontreCode{fct/spl} pour une intégrale entre une courbe (dessus) définie par une formule et une courbe (dessous) définie par un spline cubique ;
+ \item etc
+ \end{itemize}
\item \MontreCode{Pas} : pas (calculé par défaut sinon) pour le tracé ;
\item \MontreCode{Jonction} : jonction des segments (\MontreCode{bevel} par défaut) ;
\item \MontreCode{Bornes} : type des bornes parmi :
@@ -950,18 +1202,32 @@ Les \MontreCode{[clés]} pour la définition ou le tracé, optionnelles, disponi
\item \MontreCode{noeud/abs} pour les bornes données par nœud et abscisse ;
\end{itemize}
\item \MontreCode{Bord} : booléen (\MontreCode{true} par défaut) pour afficher les traits latéraux,%
- \item \MontreCode{Spline} : booléen (\MontreCode{false} par défaut) pour préciser qu'un spline est utilisé ;
- \item \MontreCode{NomSpline} : nom (important !) du spline généré précédemment \MontreCode{\textbackslash monspline}.
+ \item \MontreCode{NomSpline} : macro (important !) du spline généré précédemment pour un spline en version supérieure ;
+ \item \MontreCode{NomSplineB} : macro (important !) du spline généré précédemment pour un spline en version inférieure ;
+ \item \MontreCode{NomInterpo} : nom (important !) de la courbe d'interpolation générée précédemment, en version supérieure ;
+ \item \MontreCode{NomInterpoB} : nom (important !) de la courbe d'interpolation générée précédemment, en version inférieure ;
+ \item \MontreCode{Tension} : tension pour la courbe d'interpolation générée précédemment, en version supérieure ;
+ \item \MontreCode{TensionB} : tension de la courbe d'interpolation générée précédemment, en version inférieure.
\end{itemize}
\smallskip
-Le premier argument obligatoire est la fonction ou la courbe du spline.
+Le premier argument obligatoire est la fonction ou la courbe du spline ou la liste de points d'interpolation.
+
+\smallskip
+
+L'argument suivant, optionnel, est la fonction ou la courbe du spline ou la liste de points d'interpolation.
\smallskip
Les deux derniers arguments obligatoires sont les bornes de l'intégrale, données sous une forme en adéquation avec la clé \MontreCode{Bornes}.
+\pagebreak
+
+Dans le cas de courbes définies par des \textit{points}, il est nécessaire de travailler sur des intervalles sur lesquels la première courbe est \textbf{au-dessus} de la deuxième.
+
+Il sera sans doute intéressant de travailler avec les \textit{intersections} dans ce cas.
+
\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
\begin{GraphiqueTikz}%
[x=0.6cm,y=0.06cm,
@@ -969,7 +1235,7 @@ Les deux derniers arguments obligatoires sont les bornes de l'intégrale, donné
Ymin=0,Ymax=155,Ygrille=10,Ygrilles=5]
\TracerAxesGrilles%
[Grads=false,Elargir=2.5mm]{}{}
- \DefinirFonction[Nom=cf,Debut=1,Fin=20,Couleur=red]<f>{80*x*exp(-0.2*x)}
+ \DefinirCourbe[Nom=cf,Debut=1,Fin=20,Couleur=red]<f>{80*x*exp(-0.2*x)}
\TracerIntegrale
[Bornes=abs,Couleurs=blue/cyan!50]%
{f(x)}{3}{12}
@@ -984,11 +1250,11 @@ Les deux derniers arguments obligatoires sont les bornes de l'intégrale, donné
[x=1.2cm,y=1.6cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=3,Ygrille=0.5,Ygrilles=0.25]
\TracerAxesGrilles[Grads=false,Elargir=2.5mm]{}{}
\def\LISTETEST{-6/2/0§-1/-2/0§2/1/0§3.5/0/-1}
- \DefinirSpline[Nom=splinetest]{\LISTETEST}
- \TracerIntegrale[Spline,Style=hachures,Couleurs=purple]{splinetest}{-5.75}{-4.75}
- \TracerIntegrale[Spline,Couleurs=blue]{splinetest}{-2}{-1}
- \TracerIntegrale[Spline,Couleurs=orange]{splinetest}{1}{3}
- \TracerSpline[Couleur=olive]{\LISTETEST}
+ \DefinirCourbeSpline[Nom=splinetest]{\LISTETEST}
+ \TracerIntegrale[Type=spl,Style=hachures,Couleurs=purple]{splinetest}{-5.75}{-4.75}
+ \TracerIntegrale[Type=spl,Couleurs=blue]{splinetest}{-2}{-1}
+ \TracerIntegrale[Type=spl,Couleurs=orange]{splinetest}{1}{3}
+ \TracerCourbeSpline[Couleur=olive]{\LISTETEST}
\TracerAxesGrilles[Grille=false,Elargir=2.5mm]
{-7,-6,...,4}%
{-3,-2.5,...,3}
@@ -1039,7 +1305,7 @@ Le dernier argument obligatoire est le point de travail (version abscisse ou nœ
[x=0.9cm,y=0.425cm,Xmin=4,Xmax=20,Origx=4,
Ymin=40,Ymax=56,Ygrille=2,Ygrilles=1,Origy=40]
\TracerAxesGrilles[Elargir=2.5mm,Police=\small]{4,5,...,20}{40,42,...,56}
- \DefinirFonction[Nom=cf,Debut=5,Fin=19,Couleur=red,Trace]<f>{-2*x+3+24*log(2*x)}
+ \DefinirCourbe[Nom=cf,Debut=5,Fin=19,Couleur=red,Trace]<f>{-2*x+3+24*log(2*x)}
\TrouverAntecedents[Couleur=teal,Nom=JKL,Aff=false]{cf}{53}
%tangente
\TracerTangente%
@@ -1052,7 +1318,7 @@ Le dernier argument obligatoire est le point de travail (version abscisse ou nœ
[x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
\TracerAxesGrilles[Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
\def\LISTETEST{-6/4/-0.5§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}
- \DefinirSpline[Nom=splinetest,Trace,Couleur=olive]{\LISTETEST}
+ \DefinirCourbeSpline[Nom=splinetest,Trace,Couleur=olive]{\LISTETEST}
\TracerTangente[Couleurs=red,Spline,AffPoint]{splinetest}{1}
\TracerTangente%
[Couleurs=blue,Spline,DecG=1.5,DecD=1.5,AffPoint]{splinetest}{-3}%
@@ -1064,6 +1330,91 @@ Le dernier argument obligatoire est le point de travail (version abscisse ou nœ
\pagebreak
+\section{Commandes spécifiques des fonctions de densité}
+
+\subsection{Loi normale}\label{loinormale}
+
+L'idée est de proposer de quoi travailler avec des lois normales.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%dans l'environnement GraphiqueTikz
+\DefinirLoiNormale[clés]<nom fct>{mu}{sigma}
+\TracerLoiNormale[clés]{fct(x)}
+\end{tcblisting}
+
+Les \MontreCode{[clés]}, optionnelles, disponibles sont :
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Nom} : nom du tracé (\MontreCode{gaussienne} par défaut) ;
+ \item \MontreCode{Trace} : booléen pour tracer la courbe(\MontreCode{false} par défaut) ;
+ \item \MontreCode{Couleur} : couleur du tracé, si demandé (\MontreCode{black} par défaut) ;
+ \item \MontreCode{Debut} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmin} par défaut) ;
+ \item \MontreCode{Fin} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmax} par défaut) ;
+ \item \MontreCode{Pas} : pas du tracé (il est déterminé \textit{automatiquement} au départ mais peut être modifié).
+\end{itemize}
+
+À noter que l'axe vertical est à adapter en fonction des paramètres de la loi normale.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=1.25cm,y=15cm,Origx=5,Xmin=5,Xmax=15,Ymin=0,Ymax=0.3,
+ Ygrille=0.1,Ygrilles=0.05]
+ \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto}
+ \DefinirLoiNormale[Nom=gaussienne]<phi>{10}{1.5}
+ \TracerIntegrale
+ [Bornes=abs,Couleurs=blue/cyan!50]%
+ {phi(x)}{7}{13}
+ \TracerLoiNormale[Couleur=violet,Debut=5,Fin=15]{phi(x)}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\pagebreak
+
+\subsection{Loi du khi deux}\label{loikhideux}
+
+L'idée est de proposer de quoi travailler avec des lois normales.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%dans l'environnement GraphiqueTikz
+\DefinirLoiKhiDeux[clés]<nom fct>{k}
+\TracerLoiKhiDeux[clés]{fct(x)}
+\end{tcblisting}
+
+Les \MontreCode{[clés]}, optionnelles, disponibles sont :
+
+\smallskip
+
+\begin{itemize}
+ \item \MontreCode{Nom} : nom du tracé (\MontreCode{gaussienne} par défaut) ;
+ \item \MontreCode{Trace} : booléen pour tracer la courbe(\MontreCode{false} par défaut) ;
+ \item \MontreCode{Couleur} : couleur du tracé, si demandé (\MontreCode{black} par défaut) ;
+ \item \MontreCode{Debut} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmin} par défaut) ;
+ \item \MontreCode{Fin} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmax} par défaut) ;
+ \item \MontreCode{Pas} : pas du tracé (il est déterminé \textit{automatiquement} au départ mais peut être modifié).
+\end{itemize}
+
+À noter que l'axe vertical est à adapter en fonction du paramètre de la loi du khi deux.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}[
+ x=1.5cm,y=7.5cm,
+ Xmin=0,Xmax=8,Xgrille=1,Xgrilles=0.5,
+ Ymin=0,Ymax=0.5,Ygrille=0.1,Ygrilles=0.05
+ ]
+ \TracerAxesGrilles[Elargir=2.5mm]{auto}{auto}
+ \DefinirLoiKhiDeux[Couleur=red,Debut=0.25,Trace]<phiA>{1}
+ \DefinirLoiKhiDeux[Couleur=blue,Trace]<phiB>{2}
+ \DefinirLoiKhiDeux[Couleur=orange,Trace]<phiC>{3}
+ \DefinirLoiKhiDeux[Couleur=violet,Trace]<phiD>{4}
+ \DefinirLoiKhiDeux[Couleur=yellow,Trace]<phiE>{5}
+ \DefinirLoiKhiDeux[Couleur=teal,Trace]<phiF>{6}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\pagebreak
+
\section{Commandes spécifiques des statistiques à deux variables}
\subsection{Le nuage de points}\label{nuage}
@@ -1105,7 +1456,7 @@ Les arguments, obligatoires, permettent de spécifier :
%préparation de la fenêtre
\TracerAxesGrilles[Elargir=2.5mm,Police=\small]{0,10,...,160}{250,275,...,400}
%nuage de points
- \TracerNuage[CouleurNuage=red]{0,50,100,140}{275,290,315,350}
+ \TracerNuage[Style=x,CouleurNuage=red]{0,50,100,140}{275,290,315,350}
\end{GraphiqueTikz}
\end{tcblisting}
@@ -1134,13 +1485,89 @@ Dans ce cas, de nouvelles clés sont disponibles :
\TracerAxesGrilles[Elargir=2.5mm,Police=\small]{0,10,...,160}{250,275,...,400}
%nuage et droite
\TracerNuage%
- [CouleurDroite=red,CouleurDroite=brown,TracerDroite]%
+ [CouleurNuage=red,CouleurDroite=brown,TracerDroite]%
{0,50,100,140}{275,290,315,350}
%image
\PlacerImages[Couleurs=cyan/magenta,Traits]{d}{120}
%antécédents
- \PlacerAntecedents[Couleurs=blue/green!50!black,Traits]{reglin}{300}
+ \PlacerAntecedents[Style=x,Couleurs=blue/green!50!black,Traits]{reglin}{300}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\subsection{Autres régressions}\label{regressions}
+
+En partenariat avec le package \MontreCode{xint-regression}, chargé par le package (mais \textit{désactivable} via l'option \MontreCode{[nonxintreg]}), il est possible de travailler sur d'autres types de régression :
+
+\begin{itemize}
+ \item linéaire \fbox{$ax+b$} ;
+ \item quadratique \fbox{$ax^2+bx+c$} ;
+ \item cubique \fbox{$ax^3+bx^2+cx+d$} ;
+ \item puissance \fbox{$ax^b$} ;
+ \item exponentielle \fbox{$ab^x$} ou \fbox{$e^{ax+b}$} ou \fbox{$b e^{ax}$} ou \fbox{$C + be^{ax}$} ;
+ \item logarithmique \fbox{$a+b\ln(x)$} ;
+ \item hyperbolique \fbox{$a+\displaystyle\frac{b}{x}$}.
+\end{itemize}
+
+La commande, similaire à celle de définition d'une courbe, est :
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+\TracerAjustement[clés]<non fct>{type}<arrondis>{listex}{listey}
+\end{tcblisting}
+
+Les \MontreCode{[clés]} disponibles sont, de manière classique :
+
+\begin{itemize}
+ \item \MontreCode{Debut} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmin} par défaut) ;
+ \item \MontreCode{Fin} : borne inférieure de l'ensemble de définition (\MontreCode{\textbackslash pflxmax} par défaut) ;
+ \item \MontreCode{Nom} : nom de la courbe (important pour la suite !) ;
+ \item \MontreCode{Couleur} : couleur du tracé (\MontreCode{black} par défaut) ;
+ \item \MontreCode{Pas} : pas du tracé (il est déterminé \textit{automatiquement} au départ mais peut être modifié).
+\end{itemize}
+
+\pagebreak
+
+Le deuxième argument, optionnel et entre \MontreCode{<...>} permet de nommer la fonction de régression.
+
+Le troisième argument, obligatoire et entre \MontreCode{\{...\}} permet de choisir le type de régression, parmi :
+
+\begin{itemize}
+ \item \MontreCode{lin} : linéaire \fbox{$ax+b$} ;
+ \item \MontreCode{quad} : quadratique \fbox{$ax^2+bx+c$} ;
+ \item \MontreCode{cub} : cubique \fbox{$ax^3+bx^2+cx+d$} ;
+ \item \MontreCode{pow} : puissance \fbox{$ax^b$} ;
+ \item \MontreCode{expab} : exponentielle \fbox{$ab^x$}
+ \item \MontreCode{hyp} : hyperbolique \fbox{$a+\displaystyle\frac{b}{x}$} ;
+ \item \MontreCode{log} : logarithmique \fbox{$a+b\ln(x)$} ;
+ \item \MontreCode{exp} : exponentielle \fbox{$e^{ax+b}$} ;
+ \item \MontreCode{expalt} : exponentielle \fbox{$be^{ax}$} ;
+ \item \MontreCode{expoff=C} : exponentielle \fbox{$C + be^{ax}$}.
+\end{itemize}
+
+Le quatrième argument, optionnel et entre \MontreCode{<...>} permet de spécifier le ou les arrondis pour les coefficients de la fonction de régression.
+
+Les deux derniers arguments sont les listes des valeurs de X et de Y.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\def\LISTEXX{0,50,100,140}\def\LISTEYY{275,290,315,350}%
+ListeX := \LISTEXX\\
+ListeY := \LISTEYY
+
+\begin{GraphiqueTikz}
+ [x=0.05cm,y=0.04cm,Xmin=0,Xmax=160,Xgrille=20,Xgrilles=10,
+ Origy=250,Ymin=250,Ymax=400,Ygrille=25,Ygrilles=5]
+ %préparation de la fenêtre
+ \TracerAxesGrilles[Elargir=2.5mm,Police=\footnotesize]{auto}{auto}
+ %nuage de points
+ \TracerNuage[Style=o,CouleurNuage=red]{\LISTEXX}{\LISTEYY}
+ %ajustement expoffset
+ \TracerAjustement[Couleur=blue,Nom=ajust]<ajust>{expoff=250}{\LISTEXX}{\LISTEYY}
+ %exploitations
+ \PlacerImages[Couleurs=cyan/magenta,Traits]{ajust}{80}
+ \PlacerAntecedents[Style=x,Couleurs=blue/green!50!black,Traits]{ajust}{325}
\end{GraphiqueTikz}
+
+\xintexpoffreg[offset=250,round=3/1]{\LISTEXX}{\LISTEYY}%
+On obtient $y=250+\num{\expregoffb}\text{e}^{\num{\expregoffa}x}$
\end{tcblisting}
\pagebreak
@@ -1150,10 +1577,10 @@ Dans ce cas, de nouvelles clés sont disponibles :
\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
\begin{GraphiqueTikz}[x=0.85cm,y=0.35cm,Xmin=0,Xmax=10,Ymin=0,Ymax=16]
%préparation de la fenêtre
- \TracerAxesGrilles[Elargir=2.5mm,Police=\small]{0,1,...,10}{0,2,...,16}
+ \TracerAxesGrilles[Derriere,Elargir=2.5mm,Police=\small]{0,1,...,10}{0,2,...,16}
%déf des fonctions avec nom courbe + nom fonction + expression (tracés à la fin !)
- \DefinirFonction[Nom=cf]<f>{3*x-6}
- \DefinirFonction[Nom=cg]<g>{-(x-6)^2+12}
+ \DefinirCourbe[Nom=cf]<f>{3*x-6}
+ \DefinirCourbe[Nom=cg]<g>{-(x-6)^2+12}
%antécédents et intersection
\TrouverIntersections[Aff=false,Nom=K]{cf}{cg}
\TrouverAntecedents[AffDroite,Couleur=orange,Nom=I]{cg}{8}
@@ -1164,7 +1591,7 @@ Dans ce cas, de nouvelles clés sont disponibles :
{g(x)}%
{(I-2)}{(J-2)}
%intégrale entre les deux courbes
- \TracerIntegrale[Bornes=noeuds,Type=entre]%
+ \TracerIntegrale[Bornes=noeuds,Type=fct/fct]%
{f(x)}[g(x)]%
{(K-1)}{(K-2)}
%tracé des courbes et des points
@@ -1177,7 +1604,7 @@ Dans ce cas, de nouvelles clés sont disponibles :
%images
\PlacerImages[Couleurs=cyan]{g}{7,7.25,7.5}
%surimpression des axes
- \TracerAxesGrilles[Grads=false,Grille=false,Elargir=2.5mm]{0,1,...,10}{0,2,...,16}
+ \TracerAxesGrilles[Devant,Elargir=2.5mm]{0,1,...,10}{0,2,...,16}
\end{GraphiqueTikz}
\end{tcblisting}
@@ -1189,18 +1616,16 @@ Dans ce cas, de nouvelles clés sont disponibles :
Xmin=0,Xmax=3.5,Xgrille=pi/12,Xgrilles=pi/24,
Ymin=-1.05,Ymax=1.05,Ygrille=0.2,Ygrilles=0.05]
%préparation de la fenêtre
- \TracerAxesGrilles[Grads=false,Elargir=2.5mm,Format=ntrig/nsqrt]%
- {pi/6,pi/4,pi/3,pi/2,2*pi/3,3*pi/4,5*pi/6,pi}
- {0,sqrt(2)/2,1/2,sqrt(3)/2,1,-1,-sqrt(3)/2,-1/2,-sqrt(2)/2}
+ \TracerAxesGrilles[Derriere,Elargir=2.5mm,Format=ntrig/nsqrt]{}{}
%rajouter des valeurs
\RajouterValeursAxeX{0.25,1.4,3.3}{\num{0.25},\num{1.4},\num{3.3}}
%fonction trigo (déf + tracé)
- \DefinirFonction[Nom=ccos,Debut=0,Fin=pi]<fcos>{cos(x)}
- \DefinirFonction[Nom=csin,Debut=0,Fin=pi]<fsin>{sin(x)}
+ \DefinirCourbe[Nom=ccos,Debut=0,Fin=pi]<fcos>{cos(x)}
+ \DefinirCourbe[Nom=csin,Debut=0,Fin=pi]<fsin>{sin(x)}
%intégrale
\TrouverIntersections[Aff=false,Nom=JKL]{ccos}{csin}
\TracerIntegrale%
- [Bornes=noeud/abs,Type=entre,Couleurs=cyan/cyan!50]%
+ [Bornes=noeud/abs,Type=fct/fct,Couleurs=cyan/cyan!50]%
{fsin(x)}[fcos(x)]%
{(JKL-1)}{pi}
%tracé des courbes
@@ -1212,7 +1637,7 @@ Dans ce cas, de nouvelles clés sont disponibles :
\PlacerAntecedents[Couleurs=orange/orange!50!black,Traits]{csin}{sqrt(2)/2}
\PlacerAntecedents[Couleurs=green!50!black/green,Traits]{csin}{sqrt(3)/2}
%surimpression axes
- \TracerAxesGrilles[Grille=false,Elargir=2.5mm,Format=ntrig/nsqrt]%
+ \TracerAxesGrilles[Devant,Format=ntrig/nsqrt]%
{pi/6,pi/4,pi/3,pi/2,2*pi/3,3*pi/4,5*pi/6,pi}
{0,sqrt(2)/2,1/2,sqrt(3)/2,1,-1,-sqrt(3)/2,-1/2,-sqrt(2)/2}
\end{GraphiqueTikz}
@@ -1326,7 +1751,7 @@ $\begin{cases}
Les commandes disponibles sont :
-\NewDocumentCommand\lstcmd{ m m m}{%
+\NewDocumentCommand\lstcmd{ m m m }{%
\item[\texttt{#1}] : \mintinline{latex}|#2|\hfill{}page \pageref{#3}
}
@@ -1335,13 +1760,17 @@ Les commandes disponibles sont :
\lstcmd{axes et grilles}{\TracerAxesGrille}{creaaxesgr}
\lstcmd{aj val axes X~~}{\RajouterValeursAxeX}{ajoutvals}
\lstcmd{aj val axes Y~~}{\RajouterValeursAxeY}{ajoutvals}
- \lstcmd{def fonction~~~}{\DefinirFonction}{deftracfct}
+ \lstcmd{def fonction~~~}{\DefinirCourbe}{deftracfct}
\lstcmd{tracé courbe~~~}{\TracerCourbe}{deftracfct}
\lstcmd{def interpo~~~~}{\DefinirCourbeInterpo}{deftracinterpo}
\lstcmd{tracé interpo~~}{\TracerCourbeInterpo}{deftracinterpo}
- \lstcmd{def spline~~~~~}{\DefinirSpline}{deftracfctspline}
- \lstcmd{tracé spline~~~}{\TracerSpline}{deftracfctspline}
+ \lstcmd{def spline~~~~~}{\DefinirCourbeSpline}{deftracfctspline}
+ \lstcmd{tracé spline~~~}{\TracerCourbeSpline}{deftracfctspline}
+ \lstcmd{tracé droite~~~}{\TracerDroite}{tracdroite}
\lstcmd{def points~~~~~}{\DefinirPts}{defpts}
+ \lstcmd{def image~~~~~~}{\DefinirImage}{defpts}
+ \lstcmd{marq pts~~~~~~~}{\MarquerPts}{markpts}
+ \lstcmd{placer txt~~~~~}{\PlacerTexte}{placetxt}
\lstcmd{récup absc~~~~~}{\RecupererAbscisse}{recupcoordo}
\lstcmd{récup ordo~~~~~}{\RecupererOrdonnee}{recupcoordo}
\lstcmd{récup coordos~~}{\RecupererCoordonnees}{recupcoordo}
@@ -1349,9 +1778,16 @@ Les commandes disponibles sont :
\lstcmd{antécédents~~~~}{\TrouverAntecedents}{defanteced}
\lstcmd{antécédents~~~~}{\PlacerAntecedents}{tracanteced}
\lstcmd{intersection~~~}{\TrouverIntersections}{intersect}
+ \lstcmd{maximum~~~~~~~~}{\TrouverMaximum}{maximum}
+ \lstcmd{minimum~~~~~~~~}{\TrouverMinimum}{minimum}
\lstcmd{intégrale~~~~~~}{\TracerIntegrale}{integr}
\lstcmd{tangente~~~~~~~}{\TracerTangente}{tgte}
+ \lstcmd{loi normale~~~~}{\DefinirLoiNormale}{loinormale}
+ \lstcmd{loi normale~~~~}{\TracerLoiNormale}{loinormale}
+ \lstcmd{loi khideux~~~~}{\DefinirLoiKhiDeux}{loikhideux}
+ \lstcmd{loi khideux~~~~}{\TracerLoiKhiDeux}{loikhideux}
\lstcmd{stats 2 var~~~~}{\TracerNuage}{nuage}
+ \lstcmd{regressions~~~~}{\TracerAjustement}{regressions}
\lstcmd{arrondi~~~~~~~~}{\ArrondirNum}{numarrond}
\lstcmd{nb aléat~~~~~~~}{\ChoisirNbAlea}{nbalea}
\end{description}
@@ -1362,6 +1798,11 @@ Les commandes disponibles sont :
\begin{quote}
\begin{verbatim}
+0.1.5 : Correction d'un bug sur les rajouts de valeurs + Nœud pour une image + [en] version !
+0.1.4 : Placement de texte
+0.1.3 : Ajout de régressions avec le package xint-regression
+0.1.2 : Droites + Extremums
+0.1.1 : Densité loi normale et khi deux + Marquage points + Améliorations
0.1.0 : Version initiale
\end{verbatim}
\end{quote}
diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-examples-integrals.pdf b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-examples-integrals.pdf
new file mode 100644
index 0000000000..917caaab19
--- /dev/null
+++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-examples-integrals.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-examples-integrals.tex b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-examples-integrals.tex
new file mode 100644
index 0000000000..068ba103eb
--- /dev/null
+++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-examples-integrals.tex
@@ -0,0 +1,251 @@
+% !TeX TXS-program:compile = txs:///arara
+% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode}
+
+\documentclass[a4paper,english,11pt]{article}
+\usepackage[margin=1cm,includefoot]{geometry}
+\usepackage[english]{tkz-grapheur}
+\usepackage{tcolorbox}
+\tcbuselibrary{skins,minted}
+\usepackage{babel}
+
+\begin{document}
+
+\part*{Integrals examples}
+
+\section{Below cruve, by default}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Behind,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefineCurve[Name=ch]<h>{0.25*(x+2)^2+1}
+ \DrawIntegral%
+ [Colors=blue/cyan,Style=fill]%
+ {h(x)} %formula
+ {-5.25}{1.5}
+ \DrawCurve[Color=red]{h(x)}
+ \DrawAxisGrids[Above,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphTikz}
+\end{tcblisting}
+
+\section{Behind interpolation curve}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefineLstInterpol{(-6,4)(-2,-2)(3,3.5)}[\interpoA]
+ \DefineInterpoCurve[Name=interpotest,Tension=1.05]{\interpoA}
+ \DrawIntegral%
+ [NameInterpo=interpotest,Colors=blue/cyan,Style=fill,Type=itp,Tension=1.05]%
+ {\interpoA} %pointsinterpo
+ {-5.25}{1.5}
+ \DrawInterpoCurve[Color=red,Tension=1.05]{\interpoA}
+ \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphTikz}
+\end{tcblisting}
+
+\section{Behind cubic spline}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefineLstSpline{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}[\lstsplineA]
+ \DefineSplineCurve[Name=splinetest]{\lstsplineA}<\SplineTeal>
+ \DrawIntegral%
+ [NameSpline=\SplineTeal,Type=spl,Colors=blue/purple,Style=hatch]%
+ {splinetest} %namesplinecurve
+ {-5}{2}
+ \DrawSplineCurve[Color=teal]{\lstsplineA}
+ \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphTikz}
+\end{tcblisting}
+
+\section{Between curves}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefineCurve[Name=ch]<h>{0.25*(x+2)^2-1}
+ \DefineCurve[Name=ck]<k>{-0.25*x+1}
+ \FindIntersections[Name=ITSC,Disp=false]{ch}{ck}
+ \DrawIntegral%
+ [Colors=olive/pink,Style=fill,Type=fct/fct,Bounds=node/abs]%
+ {h(x)}[k(x)] %formules
+ {(ITSC-1)}{1.5}
+ \DrawCurve[Color=red]{h(x)}
+ \DrawCurve[Color=blue]{k(x)}
+ \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphTikz}
+\end{tcblisting}
+
+\section{Between splines}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefineLstSpline{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}[\lstsplineA]
+ \DefineLstSpline{-6/-2/3§-2/4/0§3/-1/0}[\lstsplineB]
+ \DefineSplineCurve[Name=splinetestolive]{\lstsplineA}<\SplineOlive>
+ \DefineSplineCurve[Name=splinetestteal]{\lstsplineB}<\SplineTeal>
+ \FindIntersections[Name=ITT,Disp=false]{splinetestteal}{splinetestolive}
+ \DrawIntegral%
+ [NameSpline=\SplineTeal,NameSplineB=\SplineOlive,Type=spl/spl,Colors=blue/purple,Bounds=nodes]%
+ {splinetestolive} %Namecourbespline
+ [splinetestteal] %Namecourbespline
+ {(ITT-1)}{(ITT-2)}
+ \DrawSplineCurve[Color=teal]{\lstsplineA}
+ \DrawSplineCurve[Color=olive]{\lstsplineB}
+ \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphTikz}
+\end{tcblisting}
+
+\section{Between interpolations}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefineLstInterpol{(-6,4)(-2,-2)(3,3.5)}[\interpoA]
+ \DefineInterpoCurve[Name=interpotest]{\interpoA}
+ \DefineLstInterpol{(-6,-2)(-1,4)(3,0)}[\interpoB]
+ \DefineInterpoCurve[Name=interpotesta]{\interpoB}
+ \DrawIntegral%
+ [NameInterpo=interpotesta,NameInterpoB=interpotest,Type=itp/itp,Colors=olive/pink]%
+ {\interpoB} %pointsinterpo
+ [\interpoA] %pointsinterpo
+ {-2}{1}
+ \DrawInterpoCurve[Color=red]{\interpoA}
+ \DrawInterpoCurve[Color=blue]{\interpoB}
+ \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphTikz}
+\end{tcblisting}
+
+\section{Betweend function and spline}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefineCurve[Name=ch]<h>{-0.25*(x+2)^2+3.5}
+ \DefineLstSpline{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}[\lstsplineA]
+ \DefineSplineCurve[Name=splineblue]{\lstsplineA}<\Splineblue>
+ \DrawIntegral%
+ [NameSplineB=\Splineblue,Type=fct/spl,Colors=olive/pink]%
+ {h(x)} %formule
+ [splineblue] %Namecourbespline
+ {-3}{0}
+ \DrawCurve[Color=red]{h(x)}
+ \DrawSplineCurve[Color=blue]{\lstsplineA}
+ \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphTikz}
+\end{tcblisting}
+
+\section{Between spline and function}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefineCurve[Name=ch]<h>{0.25*(x+2)^2-2}
+ \DefineLstSpline{-6/4/2§-5/-2/-2§-4/0/2§-2/2/0§1/-2/-2§3/3.5/-0.5}[\lstsplineA]
+ \DefineSplineCurve[Name=splineblue]{\lstsplineA}<\Splineblue>
+ \DrawIntegral%
+ [NameSpline=\Splineblue,Type=spl/fct,Colors=olive/pink]%
+ {splineblue} %Namecourbespline
+ [h(x)] %formule
+ {-3}{-1}
+ \DrawCurve[Color=red]{h(x)}
+ \DrawSplineCurve[Color=blue]{\lstsplineA}
+ \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphTikz}
+\end{tcblisting}
+
+\section{Between function and interpo}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefineCurve[Name=cm]<m>{-0.25*(x+2)^2+4}
+ \DefineLstInterpol{(-6,4)(-5,-2)(-2,1)(1,-2)(3,3)}[\interpoB]
+ \DefineInterpoCurve[Name=interpotestb]{\interpoB}
+ \DrawIntegral%
+ [NameInterpoB=interpotestb,Type=fct/itp,Colors=olive/pink]%
+ {m(x)} %formule
+ [\interpoB] %pointsinterpo
+ {-4}{1}
+ \DrawCurve[Color=red]{m(x)}
+ \DrawInterpoCurve[Color=blue]{\interpoB}
+ \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphTikz}
+\end{tcblisting}
+
+\section{Between interpo and function}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefineCurve[Name=courbeQ]<q>{0.25*(x+2)^2-2.5}
+ \DefineLstInterpol{(-6,-2)(-5,4)(-2,-1)(1,2)(3,-2)}[\interpoA]
+ \DefineInterpoCurve[Name=interpotest]{\interpoA}
+ \FindIntersections[Name=FGH,Disp]{interpotest}{courbeQ}
+ \DrawIntegral%
+ [NameInterpo=interpotest,Type=itp/fct,Colors=olive/pink,Bounds=nodes]%
+ {\interpoA} %pointsinterpo
+ [q(x)] %formule
+ {(FGH-1)}{(FGH-2)}
+ \DrawCurve[Color=red]{q(x)}
+ \DrawInterpoCurve[Color=blue]{\interpoA}
+ \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphTikz}
+\end{tcblisting}
+
+\section{Between spline and interpo}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefineLstSpline{-6/-2/2§-3/4/0§3/-2/0}[\lstsplineA]
+ \DefineSplineCurve[Name=splinered]{\lstsplineA}<\Splinered>
+ \DefineLstInterpol{(-6,4)(-5,-2)(-2,1)(1,-2)(3,3)}[\interpoB]
+ \DefineInterpoCurve[Name=interpotestb]{\interpoB}
+ \DrawIntegral%
+ [NameInterpoB=interpotestb,NameSpline=\Splinered,Type=spl/itp,Colors=olive/pink]%
+ {splinered} %Namecourbespline
+ [\interpoB] %pointsinterpo
+ {-4}{-2}
+ \DrawSplineCurve[Color=red]{\lstsplineA}
+ \DrawInterpoCurve[Color=blue]{\interpoB}
+ \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphTikz}
+\end{tcblisting}
+
+\section{Between interpo and spline}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \DrawAxisGrids[Grads=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefineLstSpline{-6/4/-2§-3/-2.25/0§3/3/0}[\lstsplineB]
+ \DefineSplineCurve[Name=splineblue]{\lstsplineB}<\Splineblue>
+ \DefineLstInterpol{(-6,-2)(-5,4)(-2,-1)(1,2)(3,-2.5)}[\interpoA]
+ \DefineInterpoCurve[Name=interpotest]{\interpoA}
+ \FindIntersections[Name=UIO,Disp]{interpotest}{splineblue}
+ \DrawIntegral%
+ [NameInterpo=interpotest,NameSplineB=\Splineblue,Type=itp/spl,Colors=olive/pink,Bounds=nodes]%
+ {\interpoA} %pointsinterpo
+ [splineblue] %Namecourbespline
+ {(UIO-1)}{(UIO-2)}
+ \DrawSplineCurve[Color=blue]{\lstsplineB}
+ \DrawInterpoCurve[Color=red]{\interpoA}
+ \DrawAxisGrids[Grid=false,Enlarge=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphTikz}
+\end{tcblisting}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-exemples-integrales.pdf b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-exemples-integrales.pdf
new file mode 100644
index 0000000000..985d09c617
--- /dev/null
+++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-exemples-integrales.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-exemples-integrales.tex b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-exemples-integrales.tex
new file mode 100644
index 0000000000..58fc6473f8
--- /dev/null
+++ b/graphics/pgf/contrib/tkz-grapheur/doc/tkz-grapheur-exemples-integrales.tex
@@ -0,0 +1,251 @@
+% !TeX TXS-program:compile = txs:///arara
+% arara: pdflatex: {shell: yes, synctex: no, interaction: batchmode}
+
+\documentclass[a4paper,french,11pt]{article}
+\usepackage[margin=1cm,includefoot]{geometry}
+\usepackage{tkz-grapheur}
+\usepackage{tcolorbox}
+\tcbuselibrary{skins,minted}
+\usepackage{babel}
+
+\begin{document}
+
+\part*{Exemples des différents cas d'intégrales}
+
+\section{Sous courbe, par défaut}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \TracerAxesGrilles[Derriere,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefinirCourbe[Nom=ch]<h>{0.25*(x+2)^2+1}
+ \TracerIntegrale%
+ [Couleurs=blue/cyan,Style=remplissage]%
+ {h(x)} %formule
+ {-5.25}{1.5}
+ \TracerCourbe[Couleur=red]{h(x)}
+ \TracerAxesGrilles[Devant,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\section{Sous courbe d'interpolation}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefinirListeInterpo{(-6,4)(-2,-2)(3,3.5)}[\interpoA]
+ \DefinirCourbeInterpo[Nom=interpotest,Tension=1.05]{\interpoA}
+ \TracerIntegrale%
+ [NomInterpo=interpotest,Couleurs=blue/cyan,Style=remplissage,Type=itp,Tension=1.05]%
+ {\interpoA} %pointsinterpo
+ {-5.25}{1.5}
+ \TracerCourbeInterpo[Couleur=red,Tension=1.05]{\interpoA}
+ \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\section{Sous spline cubique}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefinirListeSpline{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}[\lstsplineA]
+ \DefinirCourbeSpline[Nom=splinetest]{\lstsplineA}<\SplineTeal>
+ \TracerIntegrale%
+ [NomSpline=\SplineTeal,Type=spl,Couleurs=blue/purple,Style=hachures]%
+ {splinetest} %nomcourbespline
+ {-5}{2}
+ \TracerCourbeSpline[Couleur=teal]{\lstsplineA}
+ \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\section{Entre courbes}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefinirCourbe[Nom=ch]<h>{0.25*(x+2)^2-1}
+ \DefinirCourbe[Nom=ck]<k>{-0.25*x+1}
+ \TrouverIntersections[Nom=ITSC,Aff=false]{ch}{ck}
+ \TracerIntegrale%
+ [Couleurs=olive/pink,Style=remplissage,Type=fct/fct,Bornes=noeud/abs]%
+ {h(x)}[k(x)] %formules
+ {(ITSC-1)}{1.5}
+ \TracerCourbe[Couleur=red]{h(x)}
+ \TracerCourbe[Couleur=blue]{k(x)}
+ \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\section{Entre splines}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefinirListeSpline{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}[\lstsplineA]
+ \DefinirListeSpline{-6/-2/3§-2/4/0§3/-1/0}[\lstsplineB]
+ \DefinirCourbeSpline[Nom=splinetestolive]{\lstsplineA}<\SplineOlive>
+ \DefinirCourbeSpline[Nom=splinetestteal]{\lstsplineB}<\SplineTeal>
+ \TrouverIntersections[Nom=ITT,Aff=false]{splinetestteal}{splinetestolive}
+ \TracerIntegrale%
+ [NomSpline=\SplineTeal,NomSplineB=\SplineOlive,Type=spl/spl,Couleurs=blue/purple,Bornes=noeuds]%
+ {splinetestolive} %nomcourbespline
+ [splinetestteal] %nomcourbespline
+ {(ITT-1)}{(ITT-2)}
+ \TracerCourbeSpline[Couleur=teal]{\lstsplineA}
+ \TracerCourbeSpline[Couleur=olive]{\lstsplineB}
+ \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\section{Entre interpolations}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefinirListeInterpo{(-6,4)(-2,-2)(3,3.5)}[\interpoA]
+ \DefinirCourbeInterpo[Nom=interpotest]{\interpoA}
+ \DefinirListeInterpo{(-6,-2)(-1,4)(3,0)}[\interpoB]
+ \DefinirCourbeInterpo[Nom=interpotesta]{\interpoB}
+ \TracerIntegrale%
+ [NomInterpo=interpotesta,NomInterpoB=interpotest,Type=itp/itp,Couleurs=olive/pink]%
+ {\interpoB} %pointsinterpo
+ [\interpoA] %pointsinterpo
+ {-2}{1}
+ \TracerCourbeInterpo[Couleur=red]{\interpoA}
+ \TracerCourbeInterpo[Couleur=blue]{\interpoB}
+ \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\section{Entre fonction et spline}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefinirCourbe[Nom=ch]<h>{-0.25*(x+2)^2+3.5}
+ \DefinirListeSpline{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}[\lstsplineA]
+ \DefinirCourbeSpline[Nom=splineblue]{\lstsplineA}<\Splineblue>
+ \TracerIntegrale%
+ [NomSplineB=\Splineblue,Type=fct/spl,Couleurs=olive/pink]%
+ {h(x)} %formule
+ [splineblue] %nomcourbespline
+ {-3}{0}
+ \TracerCourbe[Couleur=red]{h(x)}
+ \TracerCourbeSpline[Couleur=blue]{\lstsplineA}
+ \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\section{Entre spline et fonction}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefinirCourbe[Nom=ch]<h>{0.25*(x+2)^2-2}
+ \DefinirListeSpline{-6/4/2§-5/-2/-2§-4/0/2§-2/2/0§1/-2/-2§3/3.5/-0.5}[\lstsplineA]
+ \DefinirCourbeSpline[Nom=splineblue]{\lstsplineA}<\Splineblue>
+ \TracerIntegrale%
+ [NomSpline=\Splineblue,Type=spl/fct,Couleurs=olive/pink]%
+ {splineblue} %nomcourbespline
+ [h(x)] %formule
+ {-3}{-1}
+ \TracerCourbe[Couleur=red]{h(x)}
+ \TracerCourbeSpline[Couleur=blue]{\lstsplineA}
+ \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\section{Entre fonction et interpo}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefinirCourbe[Nom=cm]<m>{-0.25*(x+2)^2+4}
+ \DefinirListeInterpo{(-6,4)(-5,-2)(-2,1)(1,-2)(3,3)}[\interpoB]
+ \DefinirCourbeInterpo[Nom=interpotestb]{\interpoB}
+ \TracerIntegrale%
+ [NomInterpoB=interpotestb,Type=fct/itp,Couleurs=olive/pink]%
+ {m(x)} %formule
+ [\interpoB] %pointsinterpo
+ {-4}{1}
+ \TracerCourbe[Couleur=red]{m(x)}
+ \TracerCourbeInterpo[Couleur=blue]{\interpoB}
+ \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\section{Entre interpo et fonction}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefinirCourbe[Nom=courbeQ]<q>{0.25*(x+2)^2-2.5}
+ \DefinirListeInterpo{(-6,-2)(-5,4)(-2,-1)(1,2)(3,-2)}[\interpoA]
+ \DefinirCourbeInterpo[Nom=interpotest]{\interpoA}
+ \TrouverIntersections[Nom=FGH,Aff]{interpotest}{courbeQ}
+ \TracerIntegrale%
+ [NomInterpo=interpotest,Type=itp/fct,Couleurs=olive/pink,Bornes=noeuds]%
+ {\interpoA} %pointsinterpo
+ [q(x)] %formule
+ {(FGH-1)}{(FGH-2)}
+ \TracerCourbe[Couleur=red]{q(x)}
+ \TracerCourbeInterpo[Couleur=blue]{\interpoA}
+ \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\section{Entre spline et interpo}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefinirListeSpline{-6/-2/2§-3/4/0§3/-2/0}[\lstsplineA]
+ \DefinirCourbeSpline[Nom=splinered]{\lstsplineA}<\Splinered>
+ \DefinirListeInterpo{(-6,4)(-5,-2)(-2,1)(1,-2)(3,3)}[\interpoB]
+ \DefinirCourbeInterpo[Nom=interpotestb]{\interpoB}
+ \TracerIntegrale%
+ [NomInterpoB=interpotestb,NomSpline=\Splinered,Type=spl/itp,Couleurs=olive/pink]%
+ {splinered} %nomcourbespline
+ [\interpoB] %pointsinterpo
+ {-4}{-2}
+ \TracerCourbeSpline[Couleur=red]{\lstsplineA}
+ \TracerCourbeInterpo[Couleur=blue]{\interpoB}
+ \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\section{Entre interpo et spline}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+\begin{GraphiqueTikz}%
+ [x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+ \TracerAxesGrilles[Grads=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+ \DefinirListeSpline{-6/4/-2§-3/-2.25/0§3/3/0}[\lstsplineB]
+ \DefinirCourbeSpline[Nom=splineblue]{\lstsplineB}<\Splineblue>
+ \DefinirListeInterpo{(-6,-2)(-5,4)(-2,-1)(1,2)(3,-2.5)}[\interpoA]
+ \DefinirCourbeInterpo[Nom=interpotest]{\interpoA}
+ \TrouverIntersections[Nom=UIO,Aff]{interpotest}{splineblue}
+ \TracerIntegrale%
+ [NomInterpo=interpotest,NomSplineB=\Splineblue,Type=itp/spl,Couleurs=olive/pink,Bornes=noeuds]%
+ {\interpoA} %pointsinterpo
+ [splineblue] %nomcourbespline
+ {(UIO-1)}{(UIO-2)}
+ \TracerCourbeSpline[Couleur=blue]{\lstsplineB}
+ \TracerCourbeInterpo[Couleur=red]{\interpoA}
+ \TracerAxesGrilles[Grille=false,Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
+\end{GraphiqueTikz}
+\end{tcblisting}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tkz-grapheur/tex/tkz-grapheur.sty b/graphics/pgf/contrib/tkz-grapheur/tex/tkz-grapheur.sty
index 1630132db3..3de4286c8e 100644
--- a/graphics/pgf/contrib/tkz-grapheur/tex/tkz-grapheur.sty
+++ b/graphics/pgf/contrib/tkz-grapheur/tex/tkz-grapheur.sty
@@ -2,32 +2,55 @@
% licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{tkz-grapheur}[2024/05/11 0.1.0 Des outils en TikZ pour travailler comme avec un grapheur]
+\ProvidesPackage{tkz-grapheur}[2024/06/22 0.1.5.Des outils en TikZ pour travailler comme avec un grapheur]
%====HISTORIQUE
+% v 0.1.5 Correction d'un bug avec les valeurs manuelles + Nœud pour une image + [en] version !
+% v 0.1.4 Ajout des placements de textes
+% v 0.1.3 Régressions, avec xintreg (désactivable)
+% v 0.1.2 Max/Min + Droites
+% v 0.1.1 Densité loi normale + khi deux + Améliorations diverses
% v 0.1.0 Version initiale [fr]
-%====OPTION
+%====OPTIONS
\newif\if@loadsiunitx \@loadsiunitxtrue
\DeclareOption{nonsiunitx}{\@loadsiunitxfalse}%
+\DeclareOption{nosiunitx}{\@loadsiunitxfalse}%
+
\newif\if@loadtikzbabel \@loadtikzbabeltrue
\DeclareOption{nontikzbabel}{\@loadtikzbabelfalse}%
+\DeclareOption{notikzbabel}{\@loadtikzbabelfalse}%
+
+\newif\if@loadxintreg \@loadxintregtrue
+\DeclareOption{nonxintreg}{\@loadxintregfalse}%
+\DeclareOption{noxintreg}{\@loadxintregfalse}%
+
+\newif\if@lngenglish \@lngenglishfalse
+\DeclareOption{english}{\@lngenglishtrue}%
+
\DeclareOption*{}
\ProcessOptions\relax
%====BASE
\RequirePackage{tikz}
\RequirePackage{ifthen}
-\usetikzlibrary{calc,intersections,patterns,patterns.meta}
+\usetikzlibrary{calc,intersections,patterns,patterns.meta,bbox}
\RequirePackage{simplekv}
\RequirePackage{xintexpr}
\RequirePackage{xstring}
\RequirePackage{listofitems}
+\if@loadxintreg
+ \RequirePackage{xint-regression}
+\fi
-%====SIUNITX
+%====SIUNITX + [en]
\if@loadsiunitx
\RequirePackage{siunitx}
- \sisetup{locale=FR,output-decimal-marker={,},mode=match,propagate-math-font=true,reset-math-version=false,reset-text-family=false,reset-text-series=false,reset-text-shape=false,text-family-to-math=true,text-series-to-math=true}
+ \if@lngenglish
+ \sisetup{mode=match,propagate-math-font=true,reset-math-version=false,reset-text-family=false,reset-text-series=false,reset-text-shape=false,text-family-to-math=true,text-series-to-math=true}
+ \else
+ \sisetup{locale=FR,output-decimal-marker={,},mode=match,propagate-math-font=true,reset-math-version=false,reset-text-family=false,reset-text-series=false,reset-text-shape=false,text-family-to-math=true,text-series-to-math=true}
+ \fi
\fi
%====TIKZ.BABEL
@@ -35,6 +58,10 @@
\usetikzlibrary{babel}
\fi
+%++++++++++++++++++++++++++
+%+++++++++FRANÇAIS+++++++++
+%++++++++++++++++++++++++++
+
%====COMMANDE POUR NB DECIMAL ALEA ENTRE BORNES
\NewDocumentCommand\ChoisirNbAlea{ s O{0} m m O{\monbnalea} }{%
\def\tmpborneinf{\xinteval{floor(#3)}}%inf=\tmpborneinf\par%
@@ -77,6 +104,8 @@
}%
%====STYLES DE BASE
+\tikzset{pflnoeud/.style={}}
+\tikzset{pflpoint/.style={line width=0.95pt}}
\tikzset{pflpointc/.style={radius=1.75pt}}
\tikzset{pflpointnuage/.style={radius=1.75pt}}
\tikzset{pflcadre/.style={line width=0.8pt,gray}}
@@ -102,10 +131,30 @@
Ygrille/.store in=\pflgrilley,Ygrille/.default=1,Ygrille=1,
Ygrilles/.store in=\pflgrilleys,Ygrilles/.default=0.5,Ygrilles=0.5
}
+\tikzset{%
+ pics/pflptcroix/.style args={#1/#2}{
+ code={
+ \draw[pflpoint,rotate=#2] (-#1,0) -- (#1,0);
+ \draw[pflpoint,rotate=#2] (0,-#1) -- (0, #1);
+ }
+ },
+ pics/pflptcroix/.default={2pt/45}
+}
+\tikzset{%
+ pics/pflptcarre/.style args={#1/#2}{
+ code={
+ \filldraw[draw=none,pflpoint,rotate=#2] (-#1,-#1) rectangle (#1,#1) ;
+ }
+ },
+ pics/pflptcarre/.default={2pt/0}
+}
%====CONSTANTE PI pour xint, à voir si incompatibilité...
\xintdefvar pi:=3.141592653589793238462643;
+%====focntion ln, en langage xint
+\xintdeffloatfunc ln(x) := log(x);
+
%===COMMANDE INTERNE POUR FORMATER EN FRACTIONS
\NewDocumentCommand\FormatterFraction{ s O{} m }{%
%*=moins sur le numérateur
@@ -315,7 +364,9 @@
Police={},%
Format=num,%
Traits=true,%
- Dernier=false
+ Dernier=false,%
+ Derriere=false,%
+ Devant=false
}
\NewDocumentCommand\FormatterValeurAxex{ m m }{%
@@ -353,6 +404,18 @@
\NewDocumentCommand\TracerAxesGrilles{ s O{} m D<>{#3} m D<>{#5} }{%
\restoreKV[GraphiqueTikzAxes]%
\setKV[GraphiqueTikzAxes]{#2}%
+ %cas particuliers sous/sur impression
+ \ifboolKV[GraphiqueTikzAxes]{Derriere}%
+ {%
+ \setKV[GraphiqueTikzAxes]{Grads=false}
+ }%
+ {}%
+ \ifboolKV[GraphiqueTikzAxes]{Devant}%
+ {%
+ \setKV[GraphiqueTikzAxes]{Grille=false}
+ }%
+ {}%
+ %suite
\IfSubStr{\pflformataxes}{/}%
{%
\StrCut{\pflformataxes}{/}{\pflformataxex}{\pflformataxey}%
@@ -397,7 +460,7 @@
%origine
\ifboolKV[GraphiqueTikzAxes]{Origine}%
{%
- \draw ({\pflOx},{\pflOy}) node[below left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxex{\pflformataxex}{\plfOx}} ;
+ \draw ({\pflOx},{\pflOy}) node[pflnoeud,below left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxex{\pflformataxex}{\pflOx}} ;
%\draw (\pflOx,\pflOy) node[below left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\ifboolKV[GraphiqueTikzAxes]{Num}{\num{\pflOx}}{\pflOx}} ;
}%
{}%
@@ -405,22 +468,22 @@
\foreach \x in \tmprangexvalues {%
\IfBooleanTF{#1}%
{%
- \xintifboolexpr{\x == \pflOx}{}{\draw ([yshift=-\pflthickgrad]{\x},{\pflOy}) node[below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxex{\pflformataxex}{\x}} ;}
+ \xintifboolexpr{\x == \pflOx}{}{\draw ([yshift=-\pflthickgrad]{\x},{\pflOy}) node[pflnoeud,below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxex{\pflformataxex}{\x}} ;}
%\xintifboolexpr{\x == \pflOx}{}{\draw ([yshift=-\pflthickgrad]\x,\pflOy) node[below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\ifboolKV[GraphiqueTikzAxes]{Num}{\num{\x}}{\x}} ;}
}%
{%
- \draw ([yshift=-\pflthickgrad]{\x},{\pflOy}) node[below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxex{\pflformataxex}{\x}} ;
+ \draw ([yshift=-\pflthickgrad]{\x},{\pflOy}) node[pflnoeud,below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxex{\pflformataxex}{\x}} ;
%\draw ([yshift=-\pflthickgrad]\x,\pflOy) node[below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\ifboolKV[GraphiqueTikzAxes]{Num}{\num{\x}}{\x}} ;
}%
}%
\foreach \y in \tmprangeyvalues {%
\IfBooleanTF{#1}%
{%
- \xintifboolexpr{\y == \pflOy}{}{\draw ([xshift=-\pflthickgrad]{\pflOx},{\y}) node[left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxey{\pflformataxey}{\y}} ;}
+ \xintifboolexpr{\y == \pflOy}{}{\draw ([xshift=-\pflthickgrad]{\pflOx},{\y}) node[pflnoeud,left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxey{\pflformataxey}{\y}} ;}
%\xintifboolexpr{\y == \pflOy}{}{\draw ([xshift=-\pflthickgrad]\pflOx,\y) node[left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\ifboolKV[GraphiqueTikzAxes]{Num}{\num{\y}}{\y}} ;}
}%
{%
- \draw ([xshift=-\pflthickgrad]{\pflOx},{\y}) node[left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxey{\pflformataxey}{\y}} ;
+ \draw ([xshift=-\pflthickgrad]{\pflOx},{\y}) node[pflnoeud,left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\FormatterValeurAxey{\pflformataxey}{\y}} ;
%\draw ([xshift=-\pflthickgrad]\pflOx,\y) node[left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\ifboolKV[GraphiqueTikzAxes]{Num}{\num{\y}}{\y}} ;
}%
}%
@@ -429,7 +492,7 @@
}
%===DEFINIR POINTS
-\setKVdefault[GraphiqueTikzDefPoints]{Couleur=black,Aff=false}
+\setKVdefault[GraphiqueTikzDefPoints]{Couleur=black,Aff=false,Style=o}
\NewDocumentCommand\DefinirPts{ O{} m }{%
\restoreKV[GraphiqueTikzDefPoints]%
@@ -438,12 +501,186 @@
\coordinate (\tmpnamept) at ({\tmpxpt},{\tmpypt}) ;
\ifboolKV[GraphiqueTikzDefPoints]{Aff}%
{%
- \filldraw[{\useKV[GraphiqueTikzDefPoints]{Couleur}}] (\tmpnamept) circle[pflpointc] ;
+ \MarquerPts*[Style={\useKV[GraphiqueTikzDefPoints]{Style}},Couleur={\useKV[GraphiqueTikzDefPoints]{Couleur}}]{(\tmpnamept)}
+ %\filldraw[{\useKV[GraphiqueTikzDefPoints]{Couleur}}] (\tmpnamept) circle[pflpointc] ;
}%
{}%
}
}
+\defKV[GraphiqueTikzMarkPoints]{%
+ Couleur=\def\pflcouleurpoints{#1},%
+ Style=\def\pflstylepoints{#1}
+}
+\setKVdefault[GraphiqueTikzMarkPoints]{%
+ Couleur=black,%
+ Taillec=2pt,%
+ Taillex=2pt,%
+ Tailleo=1.75pt,%
+ Style=o,%
+ Traits=false
+}
+\NewDocumentCommand\MarquerPts{ s O{} D<>{\normalfont\normalsize} m }{%
+ %étoilée = sans label
+ %2=clés
+ %3=points
+ \restoreKV[GraphiqueTikzMarkPoints]%
+ \setKV[GraphiqueTikzMarkPoints]{#2}%
+ \IfBooleanTF{#1}%
+ {%
+ \IfStrEq{\pflstylepoints}{x}%
+ {%
+ \foreach \Point in {#4} {%
+ \ifboolKV[GraphiqueTikzMarkPoints]{Traits}%
+ {%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcroix={\useKV[GraphiqueTikzMarkPoints]{Taillex}}/45} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{+}%
+ {%
+ \foreach \Point in {#4} {%
+ \ifboolKV[GraphiqueTikzMarkPoints]{Traits}%
+ {%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcroix={\useKV[GraphiqueTikzMarkPoints]{Taillex}}/90} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{c}%
+ {%
+ \foreach \Point in {#4} {%
+ \ifboolKV[GraphiqueTikzMarkPoints]{Traits}%
+ {%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \filldraw[draw=none,fill={\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcarre={\useKV[GraphiqueTikzMarkPoints]{Taillec}}/0} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{d}%
+ {%
+ \foreach \Point in {#4} {%
+ \ifboolKV[GraphiqueTikzMarkPoints]{Traits}%
+ {%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \filldraw[draw=none,fill={\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcarre={\useKV[GraphiqueTikzMarkPoints]{Tailleo}}/45} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{o}%
+ {%
+ \IfSubStr{\pflcouleurpoints}{/}%
+ {%
+ \StrCut{\pflcouleurpoints}{/}{\pflcouleurpointsA}{\pflcouleurpointsB}%
+ \foreach \Point in {#4} {%
+ \ifboolKV[GraphiqueTikzMarkPoints]{Traits}%
+ {%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \filldraw[pfltrait,fill=\pflcouleurpointsB,draw=\pflcouleurpointsA] \Point circle[radius={\useKV[GraphiqueTikzMarkPoints]{Tailleo}}] ;
+ }%
+ }%
+ {%
+ \foreach \Point in {#4} {%
+ \ifboolKV[GraphiqueTikzMarkPoints]{Traits}%
+ {%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \filldraw[\pflcouleurpoints] \Point circle[radius={\useKV[GraphiqueTikzMarkPoints]{Tailleo}}] ;
+ }%
+ }%
+ }%
+ {}%
+ }%
+ {%avec label
+ \IfStrEq{\pflstylepoints}{x}%
+ {%
+ \foreach \Point/\Label/\Pos in {#4} {%
+ \ifboolKV[GraphiqueTikzMarkPoints]{Traits}%
+ {%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcroix={\useKV[GraphiqueTikzMarkPoints]{Taillex}}/45} node[pflnoeud,\Pos,font=#3] {\Label} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{+}%
+ {%
+ \foreach \Point/\Label/\Pos in {#4} {%
+ \ifboolKV[GraphiqueTikzMarkPoints]{Traits}%
+ {%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcroix={\useKV[GraphiqueTikzMarkPoints]{Taillex}}/90} node[pflnoeud,\Pos,font=#3] {\Label} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{c}%
+ {%
+ \foreach \Point/\Label/\Pos in {#4} {%
+ \ifboolKV[GraphiqueTikzMarkPoints]{Traits}%
+ {%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \filldraw[draw=none,fill={\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcarre={\useKV[GraphiqueTikzMarkPoints]{Taillec}}/0} node[pflnoeud,\Pos,{\useKV[GraphiqueTikzMarkPoints]{Couleur}},font=#3] {\Label} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{d}%
+ {%
+ \foreach \Point/\Label/\Pos in {#4} {%
+ \ifboolKV[GraphiqueTikzMarkPoints]{Traits}%
+ {%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \filldraw[draw=none,fill={\useKV[GraphiqueTikzMarkPoints]{Couleur}}] \Point pic{pflptcarre={\useKV[GraphiqueTikzMarkPoints]{Tailleo}}/45} node[pflnoeud,\Pos,{\useKV[GraphiqueTikzMarkPoints]{Couleur}},font=#3] {\Label} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{o}%
+ {%
+ \IfSubStr{\pflcouleurpoints}{/}%
+ {%
+ \StrCut{\pflcouleurpoints}{/}{\pflcouleurpointsA}{\pflcouleurpointsB}%
+ \foreach \Point/\Label/\Pos in {#4} {%
+ \ifboolKV[GraphiqueTikzMarkPoints]{Traits}%
+ {%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \draw[pfltrait,\pflcouleurpointsA,fill=\pflcouleurpointsB] \Point circle[radius={\useKV[GraphiqueTikzMarkPoints]{Tailleo}}] node[pflnoeud,\Pos,font=#3] {\Label} ;
+ }%
+ }%
+ {%
+ \foreach \Point/\Label/\Pos in {#4} {%
+ \ifboolKV[GraphiqueTikzMarkPoints]{Traits}%
+ {%
+ \draw[{\useKV[GraphiqueTikzMarkPoints]{Couleur}},pfltraitantec] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \filldraw[\pflcouleurpoints] \Point circle[radius={\useKV[GraphiqueTikzMarkPoints]{Tailleo}}] node[pflnoeud,\Pos,font=#3] {\Label} ;
+ }%
+ }%
+ }%
+ {}%
+ }%
+}
+
%===AJOUTER DES VALEURS MANUELLEMENT
\NewDocumentCommand\RajouterValeursAxeX{ O{} m m }{%
\restoreKV[GraphiqueTikzAxes]%
@@ -454,7 +691,7 @@
\foreach \i in {1,...,\LstValXlen}{%
\itemtomacro\LstValX[\i]\mavalx%
\itemtomacro\LstValFmtX[\i]\mavalfmtx%
- \draw ([yshift=-\pflthickgrad]{\mavalx},{\pflOy}) node[below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\mavalfmtx} ;
+ \draw ([yshift=-\pflthickgrad]{\mavalx},{\pflOy}) node[pflnoeud,below,font={\useKV[GraphiqueTikzAxes]{Police}}] {\mavalfmtx} ;
}%
}
@@ -464,14 +701,14 @@
\ifboolKV[GraphiqueTikzAxes]{Traits}{\foreach \y in {#2}{\draw[pfltrait] ([xshift=\pflthickgrad]{\pflOx},{\y})--++({-2*\pflthickgrad},0) ;}}{}%
\readlist*\LstValY{#2}%
\readlist*\LstValFmtY{#3}%
- \foreach \i in {1,...,\LstValXlen}{%
+ \foreach \i in {1,...,\LstValYlen}{%
\itemtomacro\LstValY[\i]\mavaly%
\itemtomacro\LstValFmtY[\i]\mavalfmty%
- \draw ([xshift=-\pflthickgrad]{\pflOx},{\mavaly}) node[left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\mavalfmty} ;
+ \draw ([xshift=-\pflthickgrad]{\pflOx},{\mavaly}) node[pflnoeud,left,font={\useKV[GraphiqueTikzAxes]{Police}}] {\mavalfmty} ;
}%
}
-%====FONCTION ET COURBE
+%====FONCTIONS ET COURBES 'classique + interpo + spline'
\defKV[GraphiqueTikzCourbe]{%
Pas=\def\pflstepcurve{#1},%
Nom=\def\pflnamecurve{#1}
@@ -487,15 +724,44 @@
Tension=0.5
}
-\NewDocumentCommand\DefinirFonction{ O{} D<>{f} m }{%
+\NewDocumentCommand\DefinirFonction{ O{} D<>{f} m }{%old version
\restoreKV[GraphiqueTikzCourbe]%
\setKV[GraphiqueTikzCourbe]{#1}%
\xintdeffloatfunc #2(x) := #3 ;
\IfStrEq{\pflstepcurve}{}%
- {%
- \xdef\pflstepcurve{\xintfloateval{((\useKV[GraphiqueTikzCourbe]{Fin})-(\useKV[GraphiqueTikzCourbe]{Debut}))/100}}%
- }%
- {}%
+ {%
+ \xdef\pflstepcurve{\xintfloateval{((\useKV[GraphiqueTikzCourbe]{Fin})-(\useKV[GraphiqueTikzCourbe]{Debut}))/100}}%
+ }%
+ {}%
+ \ifboolKV[GraphiqueTikzCourbe]{Clip}{\begin{scope}\clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});}{}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \ifboolKV[GraphiqueTikzCourbe]{Trace}%
+ {%
+ \path[draw,pflcourbe,{\useKV[GraphiqueTikzCourbe]{Couleur}},name path global=\pflnamecurve] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphiqueTikzCourbe]{Debut}}..[\pflstepcurve]..{\useKV[GraphiqueTikzCourbe]{Fin}},{\useKV[GraphiqueTikzCourbe]{Fin}})
+ \relax
+ };
+ }%
+ {%
+ \path[draw=none,pflcourbe,{\useKV[GraphiqueTikzCourbe]{Couleur}},name path global=\pflnamecurve] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphiqueTikzCourbe]{Debut}}..[\pflstepcurve]..{\useKV[GraphiqueTikzCourbe]{Fin}},{\useKV[GraphiqueTikzCourbe]{Fin}})
+ \relax
+ };
+ }%
+ \ifboolKV[GraphiqueTikzCourbe]{Clip}{\end{scope}}{}
+}
+
+\NewDocumentCommand\DefinirCourbe{ O{} D<>{f} m }{%
+ \restoreKV[GraphiqueTikzCourbe]%
+ \setKV[GraphiqueTikzCourbe]{#1}%
+ \xintdeffloatfunc #2(x) := #3 ;
+ \IfStrEq{\pflstepcurve}{}%
+ {%
+ \xdef\pflstepcurve{\xintfloateval{((\useKV[GraphiqueTikzCourbe]{Fin})-(\useKV[GraphiqueTikzCourbe]{Debut}))/100}}%
+ }%
+ {}%
\ifboolKV[GraphiqueTikzCourbe]{Clip}{\begin{scope}\clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});}{}
\clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
\ifboolKV[GraphiqueTikzCourbe]{Trace}%
@@ -543,6 +809,10 @@
\ifboolKV[GraphiqueTikzCourbe]{Clip}{\end{scope}}{}
}
+\NewDocumentCommand\DefinirListeInterpo{ m O{\malisteinterpo} }{%
+ \def#2{#1}%
+}
+
\NewDocumentCommand\DefinirCourbeInterpo{ O{} m }{%
\restoreKV[GraphiqueTikzCourbe]%
\setKV[GraphiqueTikzCourbe]{#1}%
@@ -566,6 +836,120 @@
\end{scope}
}
+\NewDocumentCommand\DefinirListeSpline{ m O{\malistespline} }{%
+ \def#2{#1}%
+}
+
+\newcommand\pflextractcoeff[2]{%1=liste,2=numero
+ \setsepchar{§}%
+ \readlist*\lcoeffs{#1}
+ \ifnum \lcoeffslen=1
+ \def\COEFFA{#1}
+ \def\COEFFB{#1}
+ \else
+ \itemtomacro\lcoeffs[#2]\COEFF
+ \IfSubStr{\COEFF}{/}%
+ {\StrCut{\COEFF}{/}{\COEFFA}{\COEFFB}}%
+ {\def\COEFFA{\COEFF}\def\COEFFB{\COEFF}}
+ \fi
+}
+
+\defKV[GraphiqueTikzSpline]{%
+ Nom=\def\pflsplinename{#1},%
+ Coeffs=\def\pflsplinecoeffs{#1}
+}
+
+\setKVdefault[GraphiqueTikzSpline]{%
+ Nom=spline,%
+ Couleur=black,%
+ Coeffs=3,%
+ Trace=false
+}
+
+\NewDocumentCommand\GenererSpline{ m m O{\monspline} }{%
+ %1=liste
+ \setsepchar[.]{§./}%
+ \readlist*\SPLlistepoints{#1}%
+ %les données
+ \def\tmpsplinenumdeb{1}
+ \def\tmpsplinenumfin{\SPLlistepointslen}%
+ \pflextractcoeff{#2}{\tmpsplinenumdeb}%
+ %nb de calculs
+ \def\SPLnbsplines{\inteval{\tmpsplinenumfin-1}}%
+ %extraction des coordonnées
+ \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,1]\xa%
+ \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,2]\ya%
+ \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,3]\fprimea%
+ \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,1]\xb%
+ \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,2]\yb%
+ \itemtomacro\SPLlistepoints[\tmpsplinenumdeb,3]\fprimeb%
+ \xdef#3{(\xa,\ya) ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFA}).. (\xb,\yb)}%
+ \foreach \i in {\tmpsplinenumdeb,...,\SPLnbsplines}{%
+ %extraction des coeffs de compensation
+ \pflextractcoeff{#2}{\i}%
+ \def\j{\inteval{\i+1}}%
+ \itemtomacro\SPLlistepoints[\i,1]\xa%
+ \itemtomacro\SPLlistepoints[\i,2]\ya%
+ \itemtomacro\SPLlistepoints[\i,3]\fprimea%
+ \itemtomacro\SPLlistepoints[\j,1]\xb%
+ \itemtomacro\SPLlistepoints[\j,2]\yb%
+ \itemtomacro\SPLlistepoints[\j,3]\fprimeb%
+ \xdef#3{#3 ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFB}).. (\xb,\yb)}%
+ }%
+}
+
+\NewDocumentCommand\DefinirCourbeSpline{ O{} m D<>{\monspline} }{%
+ %1=liste
+ \restoreKV[GraphiqueTikzSpline]%
+ \setKV[GraphiqueTikzSpline]{#1}%
+ \GenererSpline{#2}{\pflsplinecoeffs}[#3]%
+ \begin{scope}
+ \ifboolKV[GraphiqueTikzSpline]{Trace}%
+ {%
+ \path[draw,pflcourbe,{\useKV[GraphiqueTikzSpline]{Couleur}},name path global=\pflsplinename] #3 ;
+ }%
+ {%
+ \path[draw=none,pflcourbe,name path global=\pflsplinename] #3 ;
+ }%
+ \end{scope}
+}
+
+\NewDocumentCommand\DefinirSpline{ O{} m D<>{\monspline} }{%old version
+ %1=liste
+ \restoreKV[GraphiqueTikzSpline]%
+ \setKV[GraphiqueTikzSpline]{#1}%
+ \GenererSpline{#2}{\pflsplinecoeffs}[#3]%
+ \begin{scope}
+ \ifboolKV[GraphiqueTikzSpline]{Trace}%
+ {%
+ \path[draw,pflcourbe,{\useKV[GraphiqueTikzSpline]{Couleur}},name path global=\pflsplinename] #3 ;
+ }%
+ {%
+ \path[draw=none,pflcourbe,name path global=\pflsplinename] #3 ;
+ }%
+ \end{scope}
+}
+
+\NewDocumentCommand\TracerCourbeSpline{ O{} m D<>{\monspline} }{%
+ %1=liste
+ \restoreKV[GraphiqueTikzSpline]%
+ \setKV[GraphiqueTikzSpline]{#1}%
+ \GenererSpline{#2}{\pflsplinecoeffs}[#3]%
+ \begin{scope}
+ \draw[pflcourbe,{\useKV[GraphiqueTikzSpline]{Couleur}}] #3 ;
+ \end{scope}
+}
+
+\NewDocumentCommand\TracerSpline{ O{} m D<>{\monspline} }{%old version
+ %1=liste
+ \restoreKV[GraphiqueTikzSpline]%
+ \setKV[GraphiqueTikzSpline]{#1}%
+ \GenererSpline{#2}{\pflsplinecoeffs}[#3]%
+ \begin{scope}
+ \draw[pflcourbe,{\useKV[GraphiqueTikzSpline]{Couleur}}] #3 ;
+ \end{scope}
+}
+
%===INTERSECTION & ANTÉCÉDENTS
\defKV[GraphiqueTikzIntersect]{%
Nom=\def\pflintercurves{#1}
@@ -575,7 +959,8 @@
Aff=true,
Couleur=black,
AffDroite=false,%
- Traits=false
+ Traits=false,%
+ Style=o
}
\NewDocumentCommand\TrouverIntersections{ O{} m m D<>{\myt} }{%
@@ -592,7 +977,8 @@
\draw[pfltraitimg,{\useKV[GraphiqueTikzIntersect]{Couleur}}]let \p1 = (\pflintercurves-\i) in (\pflintercurves-\i) -- ({\x1},{\pflOy}) ;
}%
{}%
- \filldraw[{\useKV[GraphiqueTikzIntersect]{Couleur}}] (\pflintercurves-\i) circle[pflpointc] ;
+ \MarquerPts*[Style={\useKV[GraphiqueTikzIntersect]{Style}},Couleur={\useKV[GraphiqueTikzIntersect]{Couleur}}]{(\pflintercurves-\i)}
+ %\filldraw[{\useKV[GraphiqueTikzIntersect]{Couleur}}] (\pflintercurves-\i) circle[pflpointc] ;
}
}%
}%
@@ -617,7 +1003,8 @@
\xintifboolexpr{#4 == 0}{}%
{%
\foreach \i in {1,...,#4}{%
- \filldraw[{\useKV[GraphiqueTikzIntersect]{Couleur}}] (\pflintercurves-\i) circle[pflpointc] ;
+ \MarquerPts*[Style={\useKV[GraphiqueTikzIntersect]{Style}},Couleur={\useKV[GraphiqueTikzIntersect]{Couleur}}]{(\pflintercurves-\i)}
+ %\filldraw[{\useKV[GraphiqueTikzIntersect]{Couleur}}] (\pflintercurves-\i) circle[pflpointc] ;
}
}%
}%
@@ -626,6 +1013,7 @@
}
%====INTÉGRALES
+%v2 avec modification de la clé [Type=...] ?
\defKV[GraphiqueTikzIntegr]{%
Couleurs=\def\pfldomtikzcolors{#1},%
Style=\def\pfldomtikzstyle{#1},%
@@ -635,20 +1023,29 @@
Pas=\def\pflstepcurve{#1},%
Bornes=\def\pflintbornes{#1},%
Jonction=\def\pfldomtikzjoin{#1},%
- NomSpline=\def\pfldomtikznamespline{#1}
+ NomInterpo=\def\pfldomtikznameinterpo{#1},%
+ NomInterpoB=\def\pfldomtikznameinterpob{#1},%
+ NomSpline=\def\pfldomtikznamespline{#1},%
+ NomSplineB=\def\pfldomtikznamesplineb{#1}
}
\setKVdefault[GraphiqueTikzIntegr]{%
Couleurs=gray,%
Style=remplissage,%
Opacite=0.5,%
Hachures={north west lines},%
- Type=dessous,%
+ Type=fct,%
Pas={},%
Jonction=bevel,%
Bornes=abs,%
Bord=true,%
Spline=false,%
- NomSpline={\monspline}
+ SplineB=false,%
+ NomInterpo={\moninterpo},%
+ NomInterpoB={\moninterpoB},%
+ NomSpline={\monspline},%
+ NomSplineB={\monsplineB},%
+ Tension=0.5,%
+ TensionB=0.5
}
\NewDocumentCommand\TracerIntegrale{ O{} D<>{} m O{0} m m }{%
@@ -675,15 +1072,15 @@
\tikzset{integralebordtikzstyle/.style={draw=none}}
}%
\IfStrEq{\pfldomtikzstyle}{hachures}%
- {%
- \tikzset{integraletikzstyle/.style={pfltrait,pattern=\pfldomtikzhatch,pattern color=\pfldomtikzcolorfond,line join=\pfldomtikzjoin}}
- }%
- {}%
+ {%
+ \tikzset{integraletikzstyle/.style={pfltrait,pattern=\pfldomtikzhatch,pattern color=\pfldomtikzcolorfond,line join=\pfldomtikzjoin}}
+ }%
+ {}%
\IfStrEq{\pfldomtikzstyle}{remplissage}%
- {%
- \tikzset{integraletikzstyle/.style={pfltrait,fill=\pfldomtikzcolorfond,fill opacity=\pfldomtikzopac,line join=\pfldomtikzjoin}}
- }%
- {}%
+ {%
+ \tikzset{integraletikzstyle/.style={pfltrait,fill=\pfldomtikzcolorfond,fill opacity=\pfldomtikzopac,line join=\pfldomtikzjoin}}
+ }%
+ {}%
%extraction des infos x/y
\IfStrEqCase{\pflintbornes}{%
{abs}%
@@ -715,43 +1112,193 @@
\xdef\absnoeudB{#6}%
}%
}%
- %suite
+ %suite avec les nbs points
\IfStrEq{\pflstepcurve}{}%
{%
\xdef\pflstepcurve{\xintfloateval{((\absnoeudB)-(\absnoeudA))/100}}%
}%
{}%
- \IfStrEq{\pfldomtikztype}{dessous}%
- {%
- \ifboolKV[GraphiqueTikzIntegr]{Spline}%
- {%
- \begin{scope}
- \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
- \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflOy}) -- cycle ;
- \end{scope}
- \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
- \path[name intersections={of=#3 and tmpintbornea,name=YYY}] ;
- \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudA},{\pflOy})-- (YYY-1) ;
- \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
- \path[name intersections={of=#3 and tmpintborneb,name=ZZZ}] ;
- \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudB},{\pflOy})-- (ZZZ-1) ;
- }%
- {%
- \begin{scope}
- \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
- \draw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflOy}) -- cycle ;
- \end{scope}
- }%
- }%
- {}%
- \IfStrEq{\pfldomtikztype}{entre}%
- {%
- \begin{scope}
- \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
- \draw[integraletikzstyle,integralebordtikzstyle,#2] plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#4),x=\absnoeudB..[-(\pflstepcurve)]..\absnoeudA,\absnoeudA)\relax} -- cycle ;
- \end{scope}
- }%
- {}%
+ %TRACÉSen fonction des types de courbes
+ \IfStrEq{\pfldomtikztype}{fct}%
+ {%OK
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \draw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflOy}) -- cycle ;
+ \end{scope}
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{spl}%avec 3=courbe spline + clé [Spline] à utiliser !
+ {%OK
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflOy}) -- cycle ;
+ \end{scope}
+ \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[name intersections={of=#3 and tmpintbornea,name=YYY}] ;
+ \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudA},{\pflOy})-- (YYY-1) ;
+ \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=#3 and tmpintborneb,name=ZZZ}] ;
+ \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudB},{\pflOy})-- (ZZZ-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{itp}%avec 3=courbe interpo
+ {%OK
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- plot [smooth,tension={\useKV[GraphiqueTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflOy}) -- cycle ;
+ \end{scope}
+ \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=YYY}] ;
+ \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudA},{\pflOy})-- (YYY-1) ;
+ \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=ZZZ}] ;
+ \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudB},{\pflOy})-- (ZZZ-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{fct/fct}%avec #3=formule et #4=formule
+ {%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \draw[integraletikzstyle,integralebordtikzstyle,#2] plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#4),x=\absnoeudB..[-(\pflstepcurve)]..\absnoeudA,\absnoeudA)\relax} -- cycle ;
+ \end{scope}
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{spl/spl}%avec #3=cbe spline + #4=cbe splineB
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymin}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflymin}) -- cycle ;
+ \clip ({\absnoeudA},{\pflymax}) -- \pfldomtikznamesplineb -- ({\absnoeudB},{\pflymax}) -- cycle ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[name intersections={of=#3 and tmpintbornea,name=YYYA}] ;
+ \path[name intersections={of=#4 and tmpintbornea,name=ZZZA}] ;
+ \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=#3 and tmpintborneb,name=YYYB}] ;
+ \path[name intersections={of=#4 and tmpintborneb,name=ZZZB}] ;
+ \draw[\pfldomtikzcolorbord,pfltrait] (YYYA-1)-- (ZZZA-1) ;
+ \draw[\pfldomtikzcolorbord,pfltrait] (YYYB-1)-- (ZZZB-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{itp/itp}%avec #3=cbe interpo + #4=cbe interpoB
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymin}) -- plot [smooth,tension={\useKV[GraphiqueTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflymin}) ;
+ \clip ({\absnoeudA},{\pflymax}) -- plot [smooth,tension={\useKV[GraphiqueTikzIntegr]{TensionB}}] coordinates {#4} -- ({\absnoeudB},{\pflymax}) ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=YYYA}] ;
+ \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpob,name=ZZZA}] ;
+ \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=YYYB}] ;
+ \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpob,name=ZZZB}] ;
+ \draw[\pfldomtikzcolorbord,pfltrait] (YYYA-1)-- (ZZZA-1) ;
+ \draw[\pfldomtikzcolorbord,pfltrait] (YYYB-1)-- (ZZZB-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{fct/spl}%avec #3=formule + #4=spline
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymin}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymin}) -- cycle ;
+ \clip ({\absnoeudA},{\pflymax}) -- \pfldomtikznamesplineb -- ({\absnoeudB},{\pflymax}) -- cycle ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[name intersections={of=tmpintbornea and #4,name=ZZZA}] ;
+ \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=tmpintborneb and #4,name=ZZZB}] ;
+ \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudA},{\xintfloateval{subs(#3,x=\absnoeudA)}})-- (ZZZA-1) ;
+ \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudB},{\xintfloateval{subs(#3,x=\absnoeudB)}})-- (ZZZB-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{spl/fct}%avec #3=spline + #4=fct
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymax}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#4),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymax}) -- cycle ;
+ \clip ({\absnoeudA},{\pflymin}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflymin}) -- cycle ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[name intersections={of=tmpintbornea and #3,name=ZZZA}] ;
+ \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=tmpintborneb and #3,name=ZZZB}] ;
+ \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudA},{\xintfloateval{subs(#4,x=\absnoeudA)}})-- (ZZZA-1) ;
+ \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudB},{\xintfloateval{subs(#4,x=\absnoeudB)}})-- (ZZZB-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{fct/itp}%avec #3=formule + #4=liste interpo
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymin}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymin}) -- cycle ;
+ \clip ({\absnoeudA},{\pflymax}) -- plot [smooth,tension={\useKV[GraphiqueTikzIntegr]{TensionB}}] coordinates {#4} -- ({\absnoeudB},{\pflymax}) ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpob,name=ZZZAA}] ;
+ \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpob,name=ZZZAB}] ;
+ \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudA},{\xintfloateval{subs(#3,x=\absnoeudA)}})-- (ZZZAA-1) ;
+ \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudB},{\xintfloateval{subs(#3,x=\absnoeudB)}})-- (ZZZAB-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{itp/fct}%
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymax}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#4),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymax}) -- cycle ;
+ \clip ({\absnoeudA},{\pflymin}) -- plot [smooth,tension={\useKV[GraphiqueTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflymin}) ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=ZZZAA}] ;
+ \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=ZZZAB}] ;
+ \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudA},{\xintfloateval{subs(#4,x=\absnoeudA)}})-- (ZZZAA-1) ;
+ \draw[\pfldomtikzcolorbord,pfltrait] ({\absnoeudB},{\xintfloateval{subs(#4,x=\absnoeudB)}})-- (ZZZAB-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{itp/spl}%
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymin}) -- plot [smooth,tension={\useKV[GraphiqueTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflymin}) ;
+ \clip ({\absnoeudA},{\pflymax}) -- \pfldomtikznamesplineb -- ({\absnoeudB},{\pflymax}) -- cycle ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;%borne inf
+ \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;%borne sup
+ \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=YYYKAA}] ;
+ \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=YYYKBB}] ;
+ \path[name intersections={of=tmpintbornea and #4,name=ZZZKAA}] ;
+ \path[name intersections={of=tmpintborneb and #4,name=ZZZKBB}] ;
+ \draw[\pfldomtikzcolorbord,pfltrait] (YYYKAA-1)-- (ZZZKAA-1) ;
+ \draw[\pfldomtikzcolorbord,pfltrait] (YYYKBB-1)-- (ZZZKBB-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{spl/itp}%
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymax}) -- plot [smooth,tension={\useKV[GraphiqueTikzIntegr]{TensionB}}] coordinates {#4} -- ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymin}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflymin}) -- cycle ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,pflcourbe,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;%borne inf
+ \path[draw=none,pflcourbe,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;%borne sup
+ \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpob,name=YYYKAA}] ;
+ \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpob,name=YYYKBB}] ;
+ \path[name intersections={of=tmpintbornea and #3,name=ZZZKAA}] ;
+ \path[name intersections={of=tmpintborneb and #3,name=ZZZKBB}] ;
+ \draw[\pfldomtikzcolorbord,pfltrait] (YYYKAA-1)-- (ZZZKAA-1) ;
+ \draw[\pfldomtikzcolorbord,pfltrait] (YYYKBB-1)-- (ZZZKBB-1) ;
+ }%
+ {}%
}
\NewDocumentCommand\PlacerPoints{ s O{black} D<>{\normalfont\normalsize} m }{%
@@ -763,7 +1310,7 @@
}%
{%
\foreach \Point/\Pos/\Label in {#4}{%
- \filldraw[#2] \Point circle[pflpointc] node[\Pos,font=#3] {\Label} ;
+ \filldraw[#2] \Point circle[pflpointc] node[pflnoeud,\Pos,font=#3] {\Label} ;
}
}%
}
@@ -772,17 +1319,22 @@
\defKV[GraphiqueTikzRegLin]{%
Arrondis=\def\pflarrondisreglin{#1},
Nom=\def\pflnamereglin{#1},
+ NomPara=\def\pflnameregquad{#1},
Debut=\def\pflreglinmin{#1},
Fin=\def\pflreglinmax{#1}
}
\setKVdefault[GraphiqueTikzRegLin]{
CouleurNuage=black,
CouleurDroite=black,
+ CouleurPara=black,
Arrondis={},
Debut={\pflxmin},
Fin={\pflxmax},
- Nom=reglin,
- TracerDroite=false
+ Nom=reglin,%
+ NomPara=quadreg,%
+ TracerDroite=false,%
+ TracerParabole=false,%
+ Style=o
}
\NewDocumentCommand\TracerNuage{ O{} D<>{d} m m }{%
@@ -797,14 +1349,13 @@
\def\LNB{\inteval{\LXlen}}
%nuage
\foreach \i in {1,...,\LXlen}{%
- \filldraw[{\useKV[GraphiqueTikzRegLin]{CouleurNuage}}] ({\LX[\i]},{\LY[\i]}) circle[pflpointnuage] ;
+ \itemtomacro\LX[\i]\tmpmavalx%
+ \itemtomacro\LY[\i]\tmpmavaly%
+ \MarquerPts*[Style={\useKV[GraphiqueTikzRegLin]{Style}},Couleur={\useKV[GraphiqueTikzRegLin]{CouleurNuage}}]{(\tmpmavalx,\tmpmavaly)}%
}
%droite de régression
\ifboolKV[GraphiqueTikzRegLin]{TracerDroite}%
{%
- %mini LX
- \def\tmpxminreglin{\fpeval{min(#2)}}
- \def\tmpxmaxreglin{\fpeval{max(#2)}}
%somme des LX et des LY OK
\xdef\LXSomme{0}
\xdef\LYSomme{0}
@@ -859,19 +1410,158 @@
\end{scope}
}%
{}%
+ \ifboolKV[GraphiqueTikzRegLin]{TracerParabole}%
+ {%
+ %somme importantes
+ \xdef\LXSomme{0}%
+ \xdef\LXCSomme{0}%
+ \xdef\LYSomme{0}%
+ \xdef\LXXSomme{0}%
+ \xdef\LXYSomme{0}%
+ \xdef\LXXCSomme{0}%
+ \xdef\LXCXCSomme{0}%
+ \xdef\LXCYSomme{0}%
+ %calculs
+ \foreach \i in {1,2,...,\LNB}{%
+ \xdef\LXSomme{\xintfloateval{\LXSomme+\LX[\i]}}%
+ \xdef\LXCSomme{\xintfloateval{\LXCSomme+(\LX[\i])^2}}%
+ }%
+ \foreach \i in {1,2,...,\LNB}{%
+ \xdef\LYSomme{\xintfloateval{\LYSomme+\LY[\i]}}%
+ }%
+ \xdef\LXmoy{\xintfloateval{\LXSomme/\LNB}}%
+ \xdef\LYmoy{\xintfloateval{\LYSomme/\LNB}}%
+ \xdef\LXCmoy{\xintfloateval{\LXCSomme/\LNB}}%
+ %calculs suites
+ \foreach \i in {1,2,...,\LNB}{%
+ \xdef\LXXSomme{\xintfloateval{\LXXSomme+(\LX[\i]-\LXmoy)^2}}%
+ \xdef\LXYSomme{\xintfloateval{\LXYSomme+(\LX[\i]-\LXmoy)*(\LY[\i]-\LYmoy)}}%
+ \xdef\LXXCSomme{\xintfloateval{\LXXCSomme+(\LX[\i]-\LXmoy)*((\LX[\i])*(\LX[\i])-\LXCmoy)}}%
+ \xdef\LXCXCSomme{\xintfloateval{\LXCXCSomme+((\LX[\i])^2-\LXCmoy)^2}}%
+ \xdef\LXCYSomme{\xintfloateval{\LXCYSomme+((\LX[\i])^2-\LXCmoy)*(\LY[\i]-\LYmoy)}}%
+ }%
+ %COEFFS OK
+ \IfStrEq{\pflarrondisreglin}{}%
+ {%
+ \xdef\tmpcoeffregquadb{\xintfloateval{(\LXYSomme*\LXCXCSomme-\LXCYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2)}}
+ \xdef\tmpcoeffregquada{\xintfloateval{(\LXCYSomme*\LXXSomme-\LXYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2)}}
+ \xdef\tmpcoeffregquadc{\xintfloateval{\LYmoy-\tmpcoeffregquadb*\LXmoy-\tmpcoeffregquada*\LXCmoy}}
+ }%
+ {%
+ \xdef\tmpcoeffregquadb{\xintfloateval{round((\LXYSomme*\LXCXCSomme-\LXCYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2),\pflarrondisreglin)}}
+ \xdef\tmpcoeffregquada{\xintfloateval{round((\LXCYSomme*\LXXSomme-\LXYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2),\pflarrondisreglin)}}
+ \xdef\tmpcoeffregquadc{\xintfloateval{round(\LYmoy-\tmpcoeffregquadb*\LXmoy-\tmpcoeffregquada*\LXCmoy,\pflarrondisreglin)}}
+ }%
+ \xintdeffloatfunc #2(x) := (\tmpcoeffregquada)*x^2+(\tmpcoeffregquadb)*x+\tmpcoeffregquadc ;
+ %tracé
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \draw[pflcourbe,{\useKV[GraphiqueTikzRegLin]{CouleurPara}},name path global=\pflnameregquad,samples=250,domain=\pflreglinmin:\pflreglinmax] plot (\x,{\tmpcoeffregquada*(\x)^2+\tmpcoeffregquadb*\x+\tmpcoeffregquadc}) ;
+ \end{scope}
+ }%
+ {}%
}
+\if@loadxintreg
+%régressions alternatives
+\NewDocumentCommand\TracerAjustement{ O{} D<>{cbajust} m D<>{} m m }{%
+ %1=options de tracés
+ %2=nom courbe
+ %3=type
+ %4=arrondis
+ %5=liste X
+ %6=liste Y
+ \IfStrEq{#3}{lin}%
+ {%
+ \xintlinreg[round={#4}]{#5}{#6}%
+ \DefinirFonction[#1,Trace]<#2>{\linrega*x+\linregb}%
+ }%
+ {}%
+ \IfStrEq{#3}{quad}%
+ {%
+ \xintquadreg[round={#4}]{#5}{#6}%
+ \DefinirFonction[#1,Trace]<#2>{\quadrega*x^2+\quadregb*x+\quadregc}%
+ }%
+ {}%
+ \IfStrEq{#3}{pow}%
+ {%
+ \xintpowreg[round={#4}]{#5}{#6}%
+ \DefinirFonction[#1,Trace]<#2>{\powrega*x^(\powregb)}%
+ }%
+ {}%
+ \IfStrEq{#3}{expab}%
+ {%
+ \xintexpabreg[round={#4}]{#5}{#6}%
+ \DefinirFonction[#1,Trace]<#2>{\expabrega*(\expabregb)^x}%
+ }%
+ {}%
+ \IfStrEq{#3}{hyp}%
+ {%
+ \xinthypreg[round={#4}]{#5}{#6}%
+ \DefinirFonction[#1,Trace]<#2>{\hyprega+(\hypregb)/x}%
+ }%
+ {}%
+ \IfStrEq{#3}{log}%
+ {%
+ \xintlogreg[round={#4}]{#5}{#6}%
+ \DefinirFonction[#1,Trace]<#2>{\logrega+(\logregb)*log(x)}%
+ }%
+ {}%
+ \IfStrEq{#3}{exp}%
+ {%
+ \xintexpreg[round={#4}]{#5}{#6}%
+ \DefinirFonction[#1,Trace]<#2>{exp(\exprega*x+\expregb)}%
+ }%
+ {}%
+ \IfStrEq{#3}{expalt}%
+ {%
+ \xintexpreg[Alt,round={#4}]{#5}{#6}%
+ \DefinirFonction[#1,Trace]<#2>{\expregb*exp(\exprega*x)}%
+ }%
+ {}%
+ \IfStrEq{#3}{cub}%
+ {%
+ \xintcubreg[round={#4}]{#5}{#6}%
+ \DefinirFonction[#1,Trace]<#2>{\cubrega*x^3+\cubregb*x^2+\cubregc*x+\cubregd}%
+ }%
+ {}%
+ \IfSubStr{#3}{expoff}%
+ {%
+ \StrBehind{#3}{=}[\expoffset]%
+ \xintexpoffreg[round={#4},offset=\expoffset]{#5}{#6}%
+ \DefinirFonction[#1,Trace]<#2>{\expoffset+\expregoffb*exp(\expregoffa*x)}%
+ }%
+ {}%
+}
+\fi
+
%===IMAGES & ANTÉCÉDENTS
\defKV[GraphiqueTikzImg]{
Couleurs=\def\pflimgcolors{#1},%
- Nom=\def\pflantecednoms{#1}
+ Nom=\def\pflantecednoms{#1}%
}
\setKVdefault[GraphiqueTikzImg]{
- Couleurs=black,
- Traits=false,
+ Couleurs=black,%
+ Traits=false,%
Spline=false,%
- Nom={}
+ Nom={},%
+ Style=o
+}
+
+\NewDocumentCommand\DefinirImage{ O{} m m }{%
+ \useKVdefault[GraphiqueTikzImg]%
+ \setKV[GraphiqueTikzImg]{#1}%
+ \ifboolKV[GraphiqueTikzImg]{Spline}%
+ {%
+ \path[draw=none,pflcourbe,name path=tmpimage] ({#3},{\pflymin})--({#3},{\pflymax}) ;
+ \path[name intersections={of=#2 and tmpimage,name=ZZZZ}] ;
+ \coordinate (\pflantecednoms) at (ZZZZ-1) ;
+ }%
+ {%
+ \xdef\tmpresimg{\xintfloateval{#2(#3)}}%
+ \coordinate (\pflantecednoms) at ({#3},{\tmpresimg}) ;
+ }%
}
\NewDocumentCommand\PlacerImages{ O{} m m }{%
@@ -894,7 +1584,8 @@
\draw[\pflimgcolorline,pfltraitimg] let \p1 = (ZZ-1) in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
}%
{}%
- \filldraw[\pflimgcolorpt] (ZZ-1) circle[radius=2pt] ;
+ \MarquerPts*[Style={\useKV[GraphiqueTikzImg]{Style}},Couleur=\pflimgcolorpt]{(ZZ-1)}
+ %\filldraw[\pflimgcolorpt] (ZZ-1) circle[radius=2pt] ;
}
}%
{%
@@ -905,9 +1596,10 @@
\draw[\pflimgcolorline,pfltraitimg] ({\i},{\pflOy}) |- ({\pflOx},{\tmpresimg}) ;
}%
{}%
- \filldraw[\pflimgcolorpt] ({\i},{\tmpresimg}) circle[radius=2pt] ;
+ \MarquerPts*[Style={\useKV[GraphiqueTikzImg]{Style}},Couleur=\pflimgcolorpt]{({\i},{\tmpresimg})}
+ %\filldraw[\pflimgcolorpt] ({\i},{\tmpresimg}) circle[radius=2pt] ;
}%
- }
+ }%
}
\NewDocumentCommand\PlacerAntecedents{ O{} m m }{%avec le nom de la courbe...
@@ -943,14 +1635,1210 @@
\draw[\pflimgcolorline,pfltraitimg] let \p1 = (ZZ-\i) in (ZZ-\i) -- ({\x1},{\pflOy}) ;
}%
{}%
- \filldraw[\pflimgcolorpt] (ZZ-\i) circle[radius=2pt] ;
+ \MarquerPts*[Style={\useKV[GraphiqueTikzImg]{Style}},Couleur=\pflimgcolorpt]{(ZZ-\i)}
+ %\filldraw[\pflimgcolorpt] (ZZ-\i) circle[radius=2pt] ;
}%
}%
\end{scope}
}
-%====SPLINES CUBIQUES
-\newcommand\pflextractcoeff[2]{%1=liste,2=numero
+%===NOMBRE DÉRIVÉ ET TANGENTE (EXPÉRIEMENTAL)
+\NewDocumentCommand\CalculerNbDerive{ s m m m }{%*=gauche+nomfct+abspt+h
+ \IfBooleanTF{#1}%
+ {%
+ \xdef\TmpResNbDeriv{\xintfloateval{(#2(#3)-#2(#3-#4))/(#4)}}%
+ }%
+ {%
+ \xdef\TmpResNbDeriv{\xintfloateval{(#2(#3+#4)-#2(#3))/(#4)}}%
+ }%
+}
+
+\defKV[GraphiqueTikzTgte]{%
+ Couleurs=\def\pfltgttikzcolors{#1},%
+ DecG=\def\pfltgttikzkl{#1},%
+ DecD=\def\pfltgttikzkr{#1},%
+ h=\def\pfltgttikzh{#1},%
+ Sens=\def\pfltgttikzsens{#1},%
+ Delta=\def\tmptgtedelta{#1}
+}
+\setKVdefault[GraphiqueTikzTgte]{%
+ Couleurs=black,%
+ DecG=1,%
+ DecD=1,%
+ AffPoint=false,%
+ Spline=false,%
+ h=0.1,%
+ Sens=gd,%
+ Noeud=false,%
+ Delta=0.01,%
+ Style=o
+}
+
+\NewDocumentCommand\TracerTangente{ O{} m m D<>{} }{%
+ \restoreKV[GraphiqueTikzTgte]%
+ \setKV[GraphiqueTikzTgte]{#1}%
+ %en fonction de la gestion de l'abscisse
+ \ifboolKV[GraphiqueTikzTgte]{Noeud}%
+ {%
+ \path #3;
+ \pgfgetlastxy{\macrox}{\macroy}%
+ \xdef\pfltgttikzx{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}%
+ }%
+ {%
+ \xdef\pfltgttikzx{#3}%
+ }%
+ %parties communes
+ \IfSubStr{\pfltgttikzcolors}{/}%
+ {%
+ \StrCut{\pfltgttikzcolors}{/}{\pfltgttikzline}{\pfltgttikzpoint}
+ }%
+ {%
+ \xdef\pfltgttikzline{\pfltgttikzcolors}\xdef\pfltgttikzpoint{\pfltgttikzcolors}
+ }%
+ \xdef\tmptgtdeb{\xintfloateval{\pfltgttikzx-(\pfltgttikzkl)}}%
+ \xdef\tmptgtfin{\xintfloateval{\pfltgttikzx+(\pfltgttikzkr)}}%
+ %suivant le type de courbe
+ \ifboolKV[GraphiqueTikzTgte]{Spline}%
+ {%
+ \path[name path=tmpimage] ({\pfltgttikzx},{\pflymin})--({\pfltgttikzx},{\pflymax}) ;
+ \path[name intersections={of=#2 and tmpimage,name=TANp}] ;
+ \IfStrEq{\pfltgttikzsens}{gd}%
+ {%
+ \path[name path=L-vline] ({\pfltgttikzx-\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx-\tmptgtedelta},{\pflymax}) ;
+ \path[name path=R-vline] ({\pfltgttikzx+\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx+\tmptgtedelta},{\pflymax}) ;
+ %\coordinate (LXcoor) at ($(TANp-1)+({-\tmptgtedelta},0)$) ;
+ %\coordinate (RXcoor) at ($(TANp-1)+({\tmptgtedelta},0)$) ;
+ }%
+ {}%
+ \IfStrEq{\pfltgttikzsens}{g}%
+ {%
+ \path[name path=L-vline] ({\pfltgttikzx-\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx-\tmptgtedelta},{\pflymax}) ;
+ \path[name path=R-vline] ({\pfltgttikzx},{\pflymin}) -- ({\pfltgttikzx},{\pflymax}) ;
+ %\coordinate (LXcoor) at ($(TANp-1)+({-\tmptgtedelta},0)$) ;
+ %\coordinate (RXcoor) at (TANp-1) ;
+ \def\tmptgtfin{\pfltgttikzx}%
+ }%
+ {}%
+ \IfStrEq{\pfltgttikzsens}{d}%
+ {%
+ \path[name path=L-vline] ({\pfltgttikzx},{\pflymin}) -- ({\pfltgttikzx},{\pflymax}) ;
+ \path[name path=R-vline] ({\pfltgttikzx+\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx+\tmptgtedelta},{\pflymax}) ;
+ \def\tmptgtdeb{\pfltgttikzx}%
+ }%
+ {}%
+ \path[name intersections={of=#2 and L-vline,name=LXcut}] ;
+ \path[name intersections={of=#2 and R-vline,name=RXcut}] ;
+ \coordinate (tzXproj) at ($(LXcut-1)!(TANp-1)!(RXcut-1)$) ; % projection
+ \coordinate (LLpoint) at ($(LXcut-1)+(TANp-1)-(tzXproj)$) ; % move
+ \coordinate (RRpoint) at ($(RXcut-1)+(TANp-1)-(tzXproj)$) ; % move
+ \path (LLpoint);
+ \pgfgetlastxy{\macrox}{\macroy}%
+ \xdef\tzTANLLX{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}%
+ \xdef\tzTANLLY{\xintfloateval{(\ConvertirPtToCm{\macroy})/(\pflyunit)}}%
+ \path (RRpoint);
+ \pgfgetlastxy{\macrox}{\macroy}%
+ \xdef\tzTANRRX{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}%
+ \xdef\tzTANRRY{\xintfloateval{(\ConvertirPtToCm{\macroy})/(\pflyunit)}}%
+ \def\tztangentLFn{(\tzTANRRY-\tzTANLLY)/(\tzTANRRX-\tzTANLLX)*(\x-\tzTANLLX)+\tzTANLLY}%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}) ;
+ \draw[pfltrait,\pfltgttikzline,domain=\tmptgtdeb:\tmptgtfin,samples=2,#4] plot (\x,{\tztangentLFn}) ;
+ \end{scope}
+ }%
+ {%
+ \IfStrEq{\pfltgttikzsens}{g}%
+ {%
+ \CalculerNbDerive*{#2}{\pfltgttikzx}{\pfltgttikzh}%
+ }%
+ {%
+ \CalculerNbDerive{#2}{\pfltgttikzx}{\pfltgttikzh}%
+ }%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}) ;
+ \draw[pfltrait,\pfltgttikzline,#4] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,\TmpResNbDeriv*(x-(\pfltgttikzx))+#2(\pfltgttikzx)),x=\tmptgtdeb,\tmptgtfin)
+ \relax
+ };
+ \end{scope}
+ }%
+ \ifboolKV[GraphiqueTikzTgte]{AffPoint}%
+ {%
+ \ifboolKV[GraphiqueTikzTgte]{Spline}%
+ {%
+ \MarquerPts*[Style={\useKV[GraphiqueTikzTgte]{Style}},Couleur=\pfltgttikzpoint]{(TANp-1)}
+ %\filldraw[] (TANp-1) circle[pflpointc] ;
+ }%
+ {%
+ \xdef\tmpimgtgt{\xintfloateval{#2(\pfltgttikzx)}}%
+ \MarquerPts*[Style={\useKV[GraphiqueTikzTgte]{Style}},Couleur=\pfltgttikzpoint]{({\pfltgttikzx},\tmpimgtgt)}
+ %\filldraw[\pfltgttikzpoint] ({\pfltgttikzx},\tmpimgtgt) circle[pflpointc] ;
+ }%
+ }%
+ {}%
+}
+
+%====loi normale
+\defKV[GraphiqueTikzGaussienne]{%
+ Pas=\def\pflgaussstep{#1},%
+ Nom=\def\pflgaussname{#1}
+}
+
+\setKVdefault[GraphiqueTikzGaussienne]{%
+ Nom=gaussienne,%
+ Couleur=black,%
+ Trace=false,%
+ Pas={},%
+ Debut={\pflxmin},%
+ Fin={\pflxmax}
+}
+
+\NewDocumentCommand\DefinirLoiNormale{ O{} D<>{phi} m m }{%
+ %1=options
+ %2=mu
+ %3=sigma
+ \restoreKV[GraphiqueTikzGaussienne]%
+ \setKV[GraphiqueTikzGaussienne]{#1}%
+ \xintdeffloatfunc #2(x) := 1/((#4)*sqrt(2*pi))*exp(-0.5*((x-(#3))/(#4))^2) ;%
+ \IfStrEq{\pflgaussstep}{}%
+ {%
+ \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphiqueTikzGaussienne]{Fin})-(\useKV[GraphiqueTikzGaussienne]{Debut}))/100}}%
+ }%
+ {}%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \ifboolKV[GraphiqueTikzGaussienne]{Trace}%
+ {%
+ \path[draw,pflcourbe,{\useKV[GraphiqueTikzGaussienne]{Couleur}},name path global=\pflgaussname] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphiqueTikzGaussienne]{Debut}}..[\pflgaussstep]..{\useKV[GraphiqueTikzGaussienne]{Fin}},{\useKV[GraphiqueTikzGaussienne]{Fin}})
+ \relax
+ } ;
+ }%
+ {%
+ \path[draw=none,pflcourbe,name path global=\pflgaussname] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphiqueTikzGaussienne]{Debut}}..[\pflgaussstep]..{\useKV[GraphiqueTikzGaussienne]{Fin}},{\useKV[GraphiqueTikzGaussienne]{Fin}})
+ \relax
+ } ;
+ }%
+ \end{scope}
+}
+
+\NewDocumentCommand\TracerLoiNormale{ O{} m }{%
+ %1=options
+ %2=mu
+ %3=sigma
+ \restoreKV[GraphiqueTikzGaussienne]%
+ \setKV[GraphiqueTikzGaussienne]{#1}%
+ \IfStrEq{\pflgaussstep}{}%
+ {%
+ \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphiqueTikzGaussienne]{Fin})-(\useKV[GraphiqueTikzGaussienne]{Debut}))/100}}%
+ }%
+ {}%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \draw[pflcourbe,{\useKV[GraphiqueTikzGaussienne]{Couleur}}] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2),x={\useKV[GraphiqueTikzGaussienne]{Debut}}..[\pflgaussstep]..{\useKV[GraphiqueTikzGaussienne]{Fin}},{\useKV[GraphiqueTikzGaussienne]{Fin}})
+ \relax
+ } ;
+ \end{scope}
+}
+
+%==== DENSITÉ KHIDEUX
+\xintdeffloatfunc pflrecigamma(x) := x+0.577215664901*x^2-0.65587807152056*x^3-0.042002635033944*x^4+0.16653861138228*x^5-0.042197734555571*x^6;
+\xintdeffloatfunc pflgamma(x) := (x==1)?{1}{(abs(x)<=0.5)?{1/pflrecigamma(x)}{(x-1)*pflgamma(x-1)}};
+\xintdeffloatfunc pflkhideux(x,k) := (x<0)?{0}{(1/(2^(k/2)*pflgamma(k/2)))*x^(k/2-1)*exp(-x/2)};
+
+\NewDocumentCommand\DefinirLoiKhiDeux{ O{} D<>{khi} m }{%
+ %1=options
+ %2=mu
+ %3=sigma
+ \restoreKV[GraphiqueTikzGaussienne]%
+ \setKV[GraphiqueTikzGaussienne]{#1}%
+ \xintdeffloatfunc #2(x) := (x<0)?{0}{(1/(2^((#3)/2)*pflgamma((#3)/2)))*x^((#3)/2-1)*exp(-x/2)};
+ \IfStrEq{\pflgaussstep}{}%
+ {%
+ \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphiqueTikzGaussienne]{Fin})-(\useKV[GraphiqueTikzGaussienne]{Debut}))/100}}%
+ }%
+ {}%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \ifboolKV[GraphiqueTikzGaussienne]{Trace}%
+ {%
+ \path[draw,pflcourbe,{\useKV[GraphiqueTikzGaussienne]{Couleur}},name path global=\pflgaussname] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphiqueTikzGaussienne]{Debut}}..[\pflgaussstep]..{\useKV[GraphiqueTikzGaussienne]{Fin}},{\useKV[GraphiqueTikzGaussienne]{Fin}})
+ \relax
+ } ;
+ }%
+ {%
+ \path[draw=none,pflcourbe,name path global=\pflgaussname] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphiqueTikzGaussienne]{Debut}}..[\pflgaussstep]..{\useKV[GraphiqueTikzGaussienne]{Fin}},{\useKV[GraphiqueTikzGaussienne]{Fin}})
+ \relax
+ } ;
+ }%
+ \end{scope}
+}
+
+\NewDocumentCommand\TracerLoiKhiDeux{ O{} m }{%
+ %1=options
+ %2=mu
+ %3=sigma
+ \restoreKV[GraphiqueTikzGaussienne]%
+ \setKV[GraphiqueTikzGaussienne]{#1}%
+ \IfStrEq{\pflgaussstep}{}%
+ {%
+ \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphiqueTikzGaussienne]{Fin})-(\useKV[GraphiqueTikzGaussienne]{Debut}))/100}}%
+ }%
+ {}%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \draw[pflcourbe,{\useKV[GraphiqueTikzGaussienne]{Couleur}}] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2),x={\useKV[GraphiqueTikzGaussienne]{Debut}}..[\pflgaussstep]..{\useKV[GraphiqueTikzGaussienne]{Fin}},{\useKV[GraphiqueTikzGaussienne]{Fin}})
+ \relax
+ } ;
+ \end{scope}
+}
+
+%====droite
+\defKV[GraphiquetikzDroite]{%
+ Nom=\def\pfldroitename{#1}
+}
+
+\setKVdefault[GraphiquetikzDroite]{%
+ Pente=false,%
+ Couleur=black,%
+ Debut={\pflxmin},%
+ Fin={\pflxmax},%
+ Nom={}
+}
+
+\NewDocumentCommand\TracerDroite{ O{} m m D<>{} }{%
+ \restoreKV[GraphiquetikzDroite]%
+ \setKV[GraphiquetikzDroite]{#1}%
+ %1er point
+ \path #2;%
+ \pgfgetlastxy{\macrox}{\macroy}%
+ \xdef\pfldtetikzxA{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}%
+ \xdef\pfldtetikzyA{\xintfloateval{(\ConvertirPtToCm{\macroy})/(\pflyunit)}}%
+ %2ème point si besoin
+ \ifboolKV[GraphiquetikzDroite]{Pente}%
+ {%
+ \xdef\pfldtepente{\xintfloateval{#3}}%
+ }%
+ {%
+ \path #3;%
+ \pgfgetlastxy{\macrox}{\macroy}%
+ \xdef\pfldtetikzxB{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}%
+ \xdef\pfldtetikzyB{\xintfloateval{(\ConvertirPtToCm{\macroy})/(\pflyunit)}}%
+ \xdef\pfldtepente{\xintfloateval{(\pfldtetikzyB-\pfldtetikzyA)/(\pfldtetikzxB-\pfldtetikzxA)}}%
+ }%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}) ;
+ \xintifboolexpr{\pfldtetikzxA == \pfldtetikzxB}%
+ {%
+ \IfEq{\pfldroitename}{}%
+ {%
+ \draw[pfltrait,{\useKV[GraphiquetikzDroite]{Couleur}},#4] (\pfldtetikzxA,\pflymin) -- (\pfldtetikzxA,\pflymax) ;
+ }%
+ {%
+ \draw[pfltrait,{\useKV[GraphiquetikzDroite]{Couleur}},#4,name path global=\pfldroitename] (\pfldtetikzxA,\pflymin) -- (\pfldtetikzxA,\pflymax) ;
+ }%
+ }%
+ {%
+ \IfEq{\pfldroitename}{}%
+ {%
+ \draw[pfltrait,{\useKV[GraphiquetikzDroite]{Couleur}},domain={\useKV[GraphiquetikzDroite]{Debut}}:{\useKV[GraphiquetikzDroite]{Fin}},samples=2,#4] plot (\x,{\pfldtepente*(\x-\pfldtetikzxA)+\pfldtetikzyA}) ;
+ }%
+ {%
+ \draw[pfltrait,{\useKV[GraphiquetikzDroite]{Couleur}},domain={\useKV[GraphiquetikzDroite]{Debut}}:{\useKV[GraphiquetikzDroite]{Fin}},samples=2,name path global=\pfldroitename,#4] plot (\x,{\pfldtepente*(\x-\pfldtetikzxA)+\pfldtetikzyA}) ;
+ }%
+ }%
+ \end{scope}
+}
+
+\defKV[GraphiqueTikzMinMax]{%
+ Pas=\def\pflminmaxstep{#1},%
+ Methode=\def\pflminmaxmethode{#1},%
+ Coeffs=\def\pflminmaxcoeffs{#1}
+}
+\setKVdefault[GraphiqueTikzMinMax]{%
+ Debut={\pflxmin},%
+ Fin={\pflxmax},%
+ Pas={},%
+ Tension=0.5,%
+ Methode=fonction,%
+ Coeffs=3
+}
+
+\NewDocumentCommand\TrouverMaximum{ O{} m O{c-max} }{%
+ %1=clés
+ %2=paramètres en fonction de [Methode]
+ \restoreKV[GraphiqueTikzMinMax]%
+ \setKV[GraphiqueTikzMinMax]{#1}%
+ \IfStrEq{\pflstepcurve}{}%
+ {%
+ \xdef\pflminmaxstep{\xintfloateval{((\useKV[GraphiqueTikzMinMax]{Fin})-(\useKV[GraphiqueTikzMinMax]{Debut}))/100}}%
+ }%
+ {}%
+ \begin{scope}[bezier bounding box,local bounding box=bbtmpmax]
+ \IfStrEq{\pflminmaxmethode}{fonction}%
+ {%
+ \path[draw=none,name path=curvetmpmax] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphiqueTikzMinMax]{Debut}}..[\pflstepcurve]..{\useKV[GraphiqueTikzMinMax]{Fin}},{\useKV[GraphiqueTikzMinMax]{Fin}})
+ \relax
+ };
+ }%
+ {}%
+ \IfStrEq{\pflminmaxmethode}{interpo}%
+ {%
+ \path[draw=none,name path=curvetmpmax] plot[smooth,tension={\useKV[GraphiqueTikzMinMax]{Tension}}] coordinates {#2};
+ }%
+ {}%
+ \IfStrEq{\pflminmaxmethode}{spline}%
+ {%
+ \GenererSpline{#2}{\pflminmaxcoeffs}[\tmpsplineminmax]%
+ \path[draw=none,name path=curvetmpmax] \tmpsplineminmax ;
+ }%
+ {}%
+ %retour
+ \path[name path=tmpmax] ([yshift=-0.25\pgflinewidth]bbtmpmax.north east) -- ([yshift=-0.25\pgflinewidth]bbtmpmax.north west) ;
+ \path[name intersections={of=curvetmpmax and tmpmax,name=#3}] ;
+ \coordinate (#3) at ($0.5*(#3-1)+0.5*(#3-2)+(0,0.25\pgflinewidth)$) ;
+ \end{scope}
+}
+
+\NewDocumentCommand\TrouverMinimum{ O{} m O{c-min} }{%
+ %1=clés
+ %2=paramètres en fonction de [Methode]
+ \restoreKV[GraphiqueTikzMinMax]%
+ \setKV[GraphiqueTikzMinMax]{#1}%
+ \IfStrEq{\pflstepcurve}{}%
+ {%
+ \xdef\pflminmaxstep{\xintfloateval{((\useKV[GraphiqueTikzMinMax]{Fin})-(\useKV[GraphiqueTikzMinMax]{Debut}))/100}}%
+ }%
+ {}%
+ \begin{scope}[bezier bounding box,local bounding box=bbtmpmin]
+ \IfStrEq{\pflminmaxmethode}{fonction}%
+ {%
+ \path[draw=none,name path=curvetmpmin] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphiqueTikzMinMax]{Debut}}..[\pflstepcurve]..{\useKV[GraphiqueTikzMinMax]{Fin}},{\useKV[GraphiqueTikzMinMax]{Fin}})
+ \relax
+ };
+ }%
+ {}%
+ \IfStrEq{\pflminmaxmethode}{interpo}%
+ {%
+ \path[draw=none,name path=curvetmpmin] plot[smooth,tension={\useKV[GraphiqueTikzMinMax]{Tension}}] coordinates {#2};
+ }%
+ {}%
+ \IfStrEq{\pflminmaxmethode}{spline}%
+ {%
+ \GenererSpline{#2}{\pflminmaxcoeffs}[\tmpsplineminmax]%
+ \path[draw=none,name path=curvetmpmin] \tmpsplineminmax ;
+ }%
+ {}%
+ %retour
+ \path[name path=tmpmin] ([yshift=0.25\pgflinewidth]bbtmpmin.south east) -- ([yshift=0.25\pgflinewidth]bbtmpmin.south west) ;
+ \path[name intersections={of=curvetmpmin and tmpmin,name=#3}] ;
+ \coordinate (#3) at ($0.5*(#3-1)+0.5*(#3-2)+(0,-0.25\pgflinewidth)$) ;
+ \end{scope}
+}
+
+%====TEXTES
+\defKV[GraphiqueTikzNode]{%
+ Couleur=\def\pflnodecol{#1},%
+ Police=\def\pflnodefonte{#1},%
+ Position=\def\pfnodepos{#1}
+}
+\setKVdefault[GraphiqueTikzNode]{%
+ Couleur=black,%
+ Debut={\normalfont\normalsize},%
+ Position={}
+}
+\NewDocumentCommand\PlacerTexte{ O{} m m }{%
+ \restoreKV[GraphiqueTikzNode]%
+ \setKV[GraphiqueTikzNode]{#1}%
+ \draw #2 node[pflnoeud,font=\pflnodefonte,text=\pflnodecol,\pfnodepos] {#3} ;
+}
+
+%++++++++++++++++++++++++++
+%++++++++++ENGLISH+++++++++
+%++++++++++++++++++++++++++
+
+%====COMMANDE POUR NB DECIMAL ALEA ENTRE BORNES
+\NewDocumentCommand\PickRandomNb{ s O{0} m m O{\mmyrandomnb} }{%
+ \def\tmpborneinf{\xinteval{floor(#3)}}%inf=\tmpborneinf\par%
+ \def\tmpbornesup{\xinteval{ceil(#4)}}%sup=\tmpbornesup\par%
+ \xintifboolexpr{#2 == 0}%
+ {%
+ \xdef#5{\fpeval{randint(\tmpborneinf,\tmpbornesup)}}%
+ }%
+ {%
+ \def\tmptest{0}%
+ \whiledo{\tmptest=0}{%
+ \xintifboolexpr{(\tmpbornesup-\tmpborneinf) == 1}%
+ {%
+ \xdef\tmpresalea{\fpeval{\tmpborneinf+round(rand(),#2)}}%
+ }%
+ {%
+ \xdef\tmpresalea{\fpeval{round(randint(\tmpborneinf,\tmpbornesup)+rand(),#2)}}%
+ }%
+ %essai=\tmpresalea\par
+ \IfBooleanTF{#1}%
+ {%
+ \xintifboolexpr{\tmpresalea < #4 'and' \tmpresalea > #3 }{\def\tmptest{1}}{\def\tmptest{0}}%
+ }%
+ {%
+ \xintifboolexpr{\tmpresalea <= #4 'and' \tmpresalea >= #3 }{\def\tmptest{1}}{\def\tmptest{0}}%
+ }%
+ }%
+ \xdef#5{\tmpresalea}%
+ %res=%
+ }%
+}
+
+%====PATCH NUM
+\@ifundefined{RoundNb}%
+ {%
+ \NewDocumentCommand\RoundNb{ O{2} m}{\num{\xintfloateval{round(#2,#1)}}\relax}%
+ }%
+ {%
+ \RenewDocumentCommand\RoundNb{ O{2} m}{\num{\xintfloateval{round(#2,#1)}}\relax}%
+ }%
+
+%====STYLES DE BASE
+\tikzset{tkzgrphnode/.style={}}
+\tikzset{tkzgrphpoint/.style={line width=0.95pt}}
+\tikzset{tkzgrphpointc/.style={radius=1.75pt}}
+\tikzset{tkzgrphscatter/.style={radius=1.75pt}}
+\tikzset{tkzgrphframe/.style={line width=0.8pt,gray}}
+\tikzset{tkzgrphcurve/.style={line width=1.05pt}}
+\tikzset{tkzgrphline/.style={line width=0.8pt}}
+\tikzset{tkzgrpharrowl/.style={<-,>=latex}}
+\tikzset{tkzgrpharrowr/.style={->,>=latex}}
+\tikzset{tkzgrpharrowlr/.style={<->,>=latex}}
+\tikzset{tkzgrphcounterimage/.style={line width=0.9pt,densely dashed}}
+\tikzset{tkzgrphrange/.style={line width=0.9pt,densely dashed,->,>=latex}}
+\tikzset{tkzgrphgridp/.style={thin,lightgray}}
+\tikzset{tkzgrphgrids/.style={very thin,lightgray}}
+\tikzset{tkzgrphaxes/.style={line width=0.8pt,->,>=latex}}
+\tikzset{
+ Xgrid/.store in=\pflgrillex,Xgrid/.default=1,Xgrid=1,
+ Xgrids/.store in=\pflgrillexs,Xgrids/.default=0.5,Xgrids=0.5,
+ Ygrid/.store in=\pflgrilley,Ygrid/.default=1,Ygrid=1,
+ Ygrids/.store in=\pflgrilleys,Ygrids/.default=0.5,Ygrids=0.5
+}
+\tikzset{%
+ pics/tkzgraphcross/.style args={#1/#2}{
+ code={
+ \draw[tkzgrphpoint,rotate=#2] (-#1,0) -- (#1,0);
+ \draw[tkzgrphpoint,rotate=#2] (0,-#1) -- (0, #1);
+ }
+ },
+ pics/tkzgraphcross/.default={2pt/45}
+}
+\tikzset{%
+ pics/tkzgraphsquare/.style args={#1/#2}{
+ code={
+ \filldraw[draw=none,tkzgrphpoint,rotate=#2] (-#1,-#1) rectangle (#1,#1) ;
+ }
+ },
+ pics/tkzgraphsquare/.default={2pt/0}
+}
+
+%===COMMANDE INTERNE POUR FORMATER EN FRACTIONS
+\NewDocumentCommand\FormatFraction{ s O{} m }{%
+ %*=moins sur le numérateur
+ %2=argument.optionnel[d/t/dec=...]
+ %3=argument mandataire {calcul ou fraction}
+ \def\calculargument{\xintPRaw{\xintIrr{\xinteval{#3}}}}%on calcule et on transforme en A/B
+ \IfSubStr{\calculargument}{/}%on teste si le symbole / apparaît
+ {%si oui := fraction
+ \StrBefore{\calculargument}{/}[\numerateur]%on extrait le numérateur
+ \StrBehind{\calculargument}{/}[\denominateur]%on extrait le dénominateur
+ \ifblank{#2}%
+ {%
+ \IfBooleanTF{#1}%
+ {\ensuremath{\frac{\num{\numerateur}}{\num{\denominateur}}}}%
+ {%
+ \ifthenelse{\numerateur < 0}%
+ {\ensuremath{-\frac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}%
+ {\ensuremath{\frac{\num{\numerateur}}{\num{\denominateur}}}}%
+ }%
+ }%
+ {}%si l'argument optionnel est vide
+ \IfStrEq{#2}{d}%
+ {%
+ \IfBooleanTF{#1}%
+ {\ensuremath{\displaystyle\frac{\num{\numerateur}}{\num{\denominateur}}}}%
+ {%
+ \ifthenelse{\numerateur < 0}%
+ {\ensuremath{-\displaystyle\frac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}%
+ {\ensuremath{\displaystyle\frac{\num{\numerateur}}{\num{\denominateur}}}}%
+ }%
+ }%
+ {}%si l'argument optionnel est vide
+ \IfStrEq{#2}{t}%
+ {%
+ \IfBooleanTF{#1}%
+ {\ensuremath{\tfrac{\num{\numerateur}}{\num{\denominateur}}}}%
+ {%
+ \ifthenelse{\numerateur < 0}%
+ {\ensuremath{-\frac{\num{\fpeval{abs(\numerateur)}}}{\num{\denominateur}}}}%
+ {\ensuremath{\frac{\num{\numerateur}}{\num{\denominateur}}}}%
+ }%
+ }%
+ {}%si l'argument optionnel est vide
+ \IfStrEq{#2}{n}%
+ {%
+ \ensuremath{\nicefrac{\num{\numerateur}}{\num{\denominateur}}}%
+ }%
+ {}%si l'argument optionnel est vide
+ }{%si non := entier
+ \num{\calculargument}%on affiche l'entier, avec le package siunitx
+ }%
+}
+
+%affichage d'un label en radians
+\NewDocumentCommand\FormatTrig{ O{t} m }{%étoilée en dfrac
+ \IfStrEq{#2}{0}%cas où l'argument vaut 0
+ {\def\restmp{0}}%
+ {%
+ \StrDel{#2}{*}[\restmpsansmoins]%
+ \StrSubstitute{\restmpsansmoins}{pi}{\pi}[\restmppi]%
+ \IfSubStr{#2}{/}%
+ {%
+ \StrCut{\restmppi}{/}\tmpnum\tmpdenom%
+ \IfSubStr{\tmpnum}{-}%
+ {%
+ \StrDel{\tmpnum}{-}[\restmppinum]%
+ \IfStrEqCase{#1}{%
+ {t}{\def\restmp{-\frac{\restmppinum}{\tmpdenom}}}%
+ {d}{\def\restmp{-\displaystyle\frac{\restmppinum}{\tmpdenom}}}%
+ {n}{\def\restmp{\nicefrac{-\restmppinum}{\tmpdenom}}}%
+ }%
+ }%
+ {%
+ \IfStrEqCase{#1}{%
+ {t}{\def\restmp{\frac{\tmpnum}{\tmpdenom}}}%
+ {d}{\def\restmp{\displaystyle\frac{\tmpnum}{\tmpdenom}}}%
+ {n}{\def\restmp{\nicefrac{\tmpnum}{\tmpdenom}}}%
+ }%
+ }%
+ }%
+ {%
+ \def\restmp{\restmppi}%
+ }%
+ }%
+ \ensuremath{\restmp}%
+}
+
+%====FORMATAGE DES RACINES SIMPLES
+\NewDocumentCommand\FormatSqrt{ O{t} m }{%
+ \IfStrEq{#2}{0}%cas où l'argument vaut 0
+ {\ensuremath{0}}%
+ {%
+ \IfSubStr{#2}{sqrt}%
+ {%
+ \StrDel{#2}{*}[\tmpargbrut]%
+ \StrBetween[1,1]{\tmpargbrut}{sqrt(}{)}[\tmpargnumrac]%
+ \StrBefore{\tmpargbrut}{sqrt}[\tmparavantrac]%
+ \IfStrEqCase{\tmparavantrac}{
+ {}{\xdef\tmparavantrac{}}%
+ {-}{\xdef\tmparavantrac{-}}%
+ }[\xdef\tmparavantrac{\num{\tmparavantrac}}]%
+ \IfSubStr{\tmpargbrut}{/}%
+ {%
+ \StrBehind{\tmpargbrut}{/}[\tmpargdenomrac]%
+ \IfStrEqCase{#1}{%
+ {d}{%
+ \ensuremath{\displaystyle\frac{\tmparavantrac\sqrt{\num{\tmpargnumrac}}}{\num{\tmpargdenomrac}}}%
+ }%
+ {t}{%
+ \ensuremath{\frac{\tmparavantrac\sqrt{\num{\tmpargnumrac}}}{\num{\tmpargdenomrac}}}%
+ }%
+ {n}{%
+ \ensuremath{\nicefrac{\tmparavantrac\sqrt{\num{\tmpargnumrac}}}{\num{\tmpargdenomrac}}}%
+ }%
+ }%
+ }%
+ {%
+ \ensuremath{\tmparavantrac\sqrt{\num{\tmpargnumrac}}}%
+ }%
+ }%
+ {%
+ \FormatFraction[#1]{#2}%
+ }%
+ }%
+}
+
+%====COMMANDE INTERNE DE CONVERSION
+\ExplSyntaxOn
+ \NewDocumentCommand\ConvertPtToCm{ m } { \dim_to_decimal_in_unit:nn { #1 } { 1 cm } }
+\ExplSyntaxOff
+
+%====RECUPERER COORDONNEES NOEUD
+\NewDocumentCommand\GetXcoord{ m O{\myxcoord} }{%
+ \path #1;
+ \pgfgetlastxy{\macrox}{\macroy}%
+ \xdef#2{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}%
+}
+\NewDocumentCommand\GetYcoord{ m O{\myycoord} }{%
+ \path #1;
+ \pgfgetlastxy{\macrox}{\macroy}%
+ \xdef#2{\xintfloateval{(\ConvertPtToCm{\macroy})/(\pflyunit)}}%
+}
+
+\NewDocumentCommand\GetXYcoord{ m O{\myxcoord} O{\myycoord} }{%
+ \GetXcoord{#1}[#2]%
+ \GetYcoord{#1}[#3]%
+}
+
+%===UNITÉS
+\newcommand\DistBetweenNodes[3][\MyTmpDist]{%
+ \pgfpointdiff{\pgfpointanchor{#2}{center}}
+ {\pgfpointanchor{#3}{center}}
+ % no need to use a new dimen
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ % to convert from pt to cm
+ \pgfmathparse{veclen(\pgf@xa,\pgf@ya)/28.45274}
+ \global\let#1\pgfmathresult %macro globale
+}
+
+\newcommand\TikZUnits{
+ \coordinate (@0) at (0,0) ;
+ \coordinate (@X) at (1,0) ;
+ \coordinate (@Y) at (0,1) ;
+ \DistBetweenNodes[\pflxunit]{@0}{@X}
+ \DistBetweenNodes[\pflyunit]{@0}{@Y}
+}
+
+%====ENVIRONNEMENT
+\defKV[GraphicTikz]{%
+ GradThick=\def\pflthickgrad{#1}
+}
+\setKVdefault[GraphicTikz]{%
+ Frame=false,%
+ GradThick=3pt
+}
+
+\NewDocumentEnvironment{GraphTikz}{ O{} D<>{} }%
+%1 = options tikz, classiques
+%2 = clés spécifiques
+{%
+ \restoreKV[GraphicTikz]%
+ \setKV[GraphicTikz]{#2}%
+ %l'environnement
+ \begin{tikzpicture}[#1]%
+ %unités x/y pour des calculs de coordonnées
+ \TikZUnits
+ %noeuds
+ \coordinate (bbxTop) at (current bounding box.north) ;
+ \coordinate (bbxBottom) at (current bounding box.south) ;
+ \ifboolKV[GraphicTikz]{Frame}{\draw[tkzgrphframe] ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}) ;}{}%
+ %back to normal
+}%
+{%
+ \end{tikzpicture}%
+}
+
+%====AXES
+\defKV[GraphicTikzAxis]{
+ Format=\def\pflformataxes{#1}
+}
+\setKVdefault[GraphicTikzAxis]{%
+ Grid=true,%
+ Enlarge=0,%
+ Grads=true,%
+ Origin=false,%
+ Font={},%
+ Format=num,%
+ Lines=true,%
+ Last=false,%
+ Behind=false,%
+ Above=false
+}
+
+\NewDocumentCommand\FormatXaxisValues{ m m }{%
+ \IfStrEqCase{#1}{%
+ {num}{\num{#2}}%
+ {year}{#2}%
+ {frac}{\FormatFrac{#2}}%
+ {dfrac}{\FormatFrac[d]{#2}}%
+ {nfrac}{\FormatFrac[n]{#2}}%
+ {trig}{\FormatTrig{#2}}%
+ {dtrig}{\FormatTrig[d]{#2}}%
+ {ntrig}{\FormatTrig[n]{#2}}%
+ {sqrt}{\FormatSqrt{#2}}%
+ {dsqrt}{\FormatSqrt[d]{#2}}%
+ {nsqrt}{\FormatSqrt[n]{#2}}%
+ }[#2]%
+}
+
+\NewDocumentCommand\FormatYaxisValues{ m m }{%
+ \IfStrEqCase{#1}{%
+ {num}{\num{#2}}%
+ {year}{#2}%
+ {frac}{\FormatSqrt{#2}}%
+ {dfrac}{\FormatFrac[d]{#2}}%
+ {nfrac}{\FormatFrac[n]{#2}}%
+ {trig}{\FormatTrig{#2}}%
+ {dtrig}{\FormatTrig[d]{#2}}%
+ {ntrig}{\FormatTrig[n]{#2}}%
+ {sqrt}{\FormatSqrt{#2}}%
+ {dsqrt}{\FormatSqrt[d]{#2}}%
+ {nsqrt}{\FormatSqrt[n]{#2}}%
+ }[#2]%
+}
+
+\NewDocumentCommand\DrawAxisGrids{ s O{} m D<>{#3} m D<>{#5} }{%
+ \restoreKV[GraphicTikzAxis]%
+ \setKV[GraphicTikzAxis]{#2}%
+ %cas particuliers sous/sur impression
+ \ifboolKV[GraphicTikzAxis]{Behind}%
+ {%
+ \setKV[GraphicTikzAxis]{Grads=false}
+ }%
+ {}%
+ \ifboolKV[GraphicTikzAxis]{Above}%
+ {%
+ \setKV[GraphicTikzAxis]{Grid=false}
+ }%
+ {}%
+ %suite
+ \IfSubStr{\pflformataxes}{/}%
+ {%
+ \StrCut{\pflformataxes}{/}{\pflformataxex}{\pflformataxey}%
+ }%
+ {%
+ \xdef\pflformataxex{\pflformataxes}\xdef\pflformataxey{\pflformataxes}%
+ }%
+ \ifboolKV[GraphicTikzAxis]{Grid}%
+ {%
+ \draw[tkzgrphgrids,xstep=\pflgrillexs,ystep=\pflgrilleys] ({\pflxmin},{\pflymin}) grid ({\pflxmax},{\pflymax});
+ \draw[tkzgrphgridp,xstep=\pflgrillex,ystep=\pflgrilley] ({\pflxmin},{\pflymin}) grid ({\pflxmax},{\pflymax});
+ \ifboolKV[GraphicTikzAxis]{Last}%
+ {%
+ \draw[tkzgrphgridp] ({\pflxmin},{\pflymax})--({\pflxmax},{\pflymax}) ;
+ \draw[tkzgrphgridp] ({\pflxmax},{\pflymin})--({\pflxmax},{\pflymax}) ;
+ }%
+ {}%
+ }%
+ {}%
+ \draw[tkzgrphaxes] ({\pflxmin},{\pflOy}) -- ([xshift={\useKV[GraphicTikzAxis]{Enlarge}}]{\pflxmax},{\pflOy}) ;
+ \draw[tkzgrphaxes] ({\pflOx},{\pflymin}) -- ([yshift={\useKV[GraphicTikzAxis]{Enlarge}}]{\pflOx},{\pflymax}) ;
+ \IfEq{#3}{auto}%
+ {%
+ \xdef\tmprangexvalues{\xintfloateval{seq(i,i=\pflxmin..[\pflgrillex]..\pflxmax)}}\StrDel{\tmprangexvalues}{ }[\tmprangexvalues]%
+ \xdef\pflformataxex{num}%
+ }%
+ {%
+ \xdef\tmprangexvalues{#3}%
+ }%
+ \IfEq{#5}{auto}%
+ {%
+ \xdef\tmprangeyvalues{\xintfloateval{seq(i,i=\pflymin..[\pflgrilley]..\pflymax)}}\StrDel{\tmprangeyvalues}{ }[\tmprangeyvalues]%
+ \xdef\pflformataxey{num}%
+ }%
+ {%
+ \xdef\tmprangeyvalues{#5}%
+ }%
+ \foreach \x in \tmprangexvalues {\draw[tkzgrphline] ([yshift=\pflthickgrad]{\x},{\pflOy})--++(0,{-2*\pflthickgrad}) ;}
+ \foreach \y in \tmprangeyvalues {\draw[tkzgrphline] ([xshift=\pflthickgrad]{\pflOx},{\y})--++({-2*\pflthickgrad},0) ;}
+ \ifboolKV[GraphicTikzAxis]{Grads}%
+ {%
+ %origine
+ \ifboolKV[GraphicTikzAxis]{Origin}%
+ {%
+ \draw ({\pflOx},{\pflOy}) node[tkzgrphnode,below left,font={\useKV[GraphicTikzAxis]{Font}}] {\FormatXaxisValues{\pflformataxex}{\pflOx}} ;
+ %\draw (\pflOx,\pflOy) node[below left,font={\useKV[GraphicTikzAxis]{Font}}] {\ifboolKV[GraphicTikzAxis]{Num}{\num{\pflOx}}{\pflOx}} ;
+ }%
+ {}%
+ %graduations x, sauf si auto...
+ \foreach \x in \tmprangexvalues {%
+ \IfBooleanTF{#1}%
+ {%
+ \xintifboolexpr{\x == \pflOx}{}{\draw ([yshift=-\pflthickgrad]{\x},{\pflOy}) node[tkzgrphnode,below,font={\useKV[GraphicTikzAxis]{Font}}] {\FormatXaxisValues{\pflformataxex}{\x}} ;}
+ %\xintifboolexpr{\x == \pflOx}{}{\draw ([yshift=-\pflthickgrad]\x,\pflOy) node[below,font={\useKV[GraphicTikzAxis]{Font}}] {\ifboolKV[GraphicTikzAxis]{Num}{\num{\x}}{\x}} ;}
+ }%
+ {%
+ \draw ([yshift=-\pflthickgrad]{\x},{\pflOy}) node[tkzgrphnode,below,font={\useKV[GraphicTikzAxis]{Font}}] {\FormatXaxisValues{\pflformataxex}{\x}} ;
+ %\draw ([yshift=-\pflthickgrad]\x,\pflOy) node[below,font={\useKV[GraphicTikzAxis]{Font}}] {\ifboolKV[GraphicTikzAxis]{Num}{\num{\x}}{\x}} ;
+ }%
+ }%
+ \foreach \y in \tmprangeyvalues {%
+ \IfBooleanTF{#1}%
+ {%
+ \xintifboolexpr{\y == \pflOy}{}{\draw ([xshift=-\pflthickgrad]{\pflOx},{\y}) node[tkzgrphnode,left,font={\useKV[GraphicTikzAxis]{Font}}] {\FormatYaxisValues{\pflformataxey}{\y}} ;}
+ %\xintifboolexpr{\y == \pflOy}{}{\draw ([xshift=-\pflthickgrad]\pflOx,\y) node[left,font={\useKV[GraphicTikzAxis]{Font}}] {\ifboolKV[GraphicTikzAxis]{Num}{\num{\y}}{\y}} ;}
+ }%
+ {%
+ \draw ([xshift=-\pflthickgrad]{\pflOx},{\y}) node[tkzgrphnode,left,font={\useKV[GraphicTikzAxis]{Font}}] {\FormatYaxisValues{\pflformataxey}{\y}} ;
+ %\draw ([xshift=-\pflthickgrad]\pflOx,\y) node[left,font={\useKV[GraphicTikzAxis]{Font}}] {\ifboolKV[GraphicTikzAxis]{Num}{\num{\y}}{\y}} ;
+ }%
+ }%
+ }%
+ {}%
+}
+
+%===DEFINIR POINTS
+\setKVdefault[GraphicTikzDefPoints]{Color=black,Mark=false,Style=o}
+
+\NewDocumentCommand\DefinePts{ O{} m }{%
+ \restoreKV[GraphicTikzDefPoints]%
+ \setKV[GraphicTikzDefPoints]{#1}%
+ \foreach \tmpnamept/\tmpxpt/\tmpypt in {#2}{%
+ \coordinate (\tmpnamept) at ({\tmpxpt},{\tmpypt}) ;
+ \ifboolKV[GraphicTikzDefPoints]{Mark}%
+ {%
+ \MarkPts*[Style={\useKV[GraphicTikzDefPoints]{Style}},Color={\useKV[GraphicTikzDefPoints]{Color}}]{(\tmpnamept)}
+ %\filldraw[{\useKV[GraphicTikzDefPoints]{Color}}] (\tmpnamept) circle[tkzgrphpointc] ;
+ }%
+ {}%
+ }
+}
+
+\defKV[GraphicTikzMarkPoints]{%
+ Color=\def\pflcouleurpoints{#1},%
+ Style=\def\pflstylepoints{#1}
+}
+\setKVdefault[GraphicTikzMarkPoints]{%
+ Color=black,%
+ Sizec=2pt,%
+ Sizex=2pt,%
+ Sizeo=1.75pt,%
+ Style=o,%
+ Lines=false
+}
+\NewDocumentCommand\MarkPts{ s O{} D<>{\normalfont\normalsize} m }{%
+ %étoilée = sans label
+ %2=clés
+ %3=points
+ \restoreKV[GraphicTikzMarkPoints]%
+ \setKV[GraphicTikzMarkPoints]{#2}%
+ \IfBooleanTF{#1}%
+ {%
+ \IfStrEq{\pflstylepoints}{x}%
+ {%
+ \foreach \Point in {#4} {%
+ \ifboolKV[GraphicTikzMarkPoints]{Lines}%
+ {%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphcross={\useKV[GraphicTikzMarkPoints]{Sizex}}/45} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{+}%
+ {%
+ \foreach \Point in {#4} {%
+ \ifboolKV[GraphicTikzMarkPoints]{Lines}%
+ {%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphcross={\useKV[GraphicTikzMarkPoints]{Sizex}}/90} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{c}%
+ {%
+ \foreach \Point in {#4} {%
+ \ifboolKV[GraphicTikzMarkPoints]{Lines}%
+ {%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \filldraw[draw=none,fill={\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphsquare={\useKV[GraphicTikzMarkPoints]{Sizec}}/0} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{d}%
+ {%
+ \foreach \Point in {#4} {%
+ \ifboolKV[GraphicTikzMarkPoints]{Lines}%
+ {%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \filldraw[draw=none,fill={\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphsquare={\useKV[GraphicTikzMarkPoints]{Sizeo}}/45} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{o}%
+ {%
+ \IfSubStr{\pflcouleurpoints}{/}%
+ {%
+ \StrCut{\pflcouleurpoints}{/}{\pflcouleurpointsA}{\pflcouleurpointsB}%
+ \foreach \Point in {#4} {%
+ \ifboolKV[GraphicTikzMarkPoints]{Lines}%
+ {%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \filldraw[tkzgrphline,fill=\pflcouleurpointsB,draw=\pflcouleurpointsA] \Point circle[radius={\useKV[GraphicTikzMarkPoints]{Sizeo}}] ;
+ }%
+ }%
+ {%
+ \foreach \Point in {#4} {%
+ \ifboolKV[GraphicTikzMarkPoints]{Lines}%
+ {%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \filldraw[\pflcouleurpoints] \Point circle[radius={\useKV[GraphicTikzMarkPoints]{Sizeo}}] ;
+ }%
+ }%
+ }%
+ {}%
+ }%
+ {%avec label
+ \IfStrEq{\pflstylepoints}{x}%
+ {%
+ \foreach \Point/\Pos/\Label in {#4} {%
+ \ifboolKV[GraphicTikzMarkPoints]{Lines}%
+ {%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphcross={\useKV[GraphicTikzMarkPoints]{Sizex}}/45} node[tkzgrphnode,\Pos,font=#3] {\Label} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{+}%
+ {%
+ \foreach \Point/\Pos/\Label in {#4} {%
+ \ifboolKV[GraphicTikzMarkPoints]{Lines}%
+ {%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphcross={\useKV[GraphicTikzMarkPoints]{Sizex}}/90} node[tkzgrphnode,\Pos,font=#3] {\Label} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{c}%
+ {%
+ \foreach \Point/\Pos/\Label in {#4} {%
+ \ifboolKV[GraphicTikzMarkPoints]{Lines}%
+ {%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \filldraw[draw=none,fill={\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphsquare={\useKV[GraphicTikzMarkPoints]{Sizec}}/0} node[tkzgrphnode,\Pos,{\useKV[GraphicTikzMarkPoints]{Color}},font=#3] {\Label} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{d}%
+ {%
+ \foreach \Point/\Pos/\Label in {#4} {%
+ \ifboolKV[GraphicTikzMarkPoints]{Lines}%
+ {%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \filldraw[draw=none,fill={\useKV[GraphicTikzMarkPoints]{Color}}] \Point pic{tkzgraphsquare={\useKV[GraphicTikzMarkPoints]{Sizeo}}/45} node[tkzgrphnode,\Pos,{\useKV[GraphicTikzMarkPoints]{Color}},font=#3] {\Label} ;
+ }%
+ }%
+ {}%
+ \IfStrEq{\pflstylepoints}{o}%
+ {%
+ \IfSubStr{\pflcouleurpoints}{/}%
+ {%
+ \StrCut{\pflcouleurpoints}{/}{\pflcouleurpointsA}{\pflcouleurpointsB}%
+ \foreach \Point/\Pos/\Label in {#4} {%
+ \ifboolKV[GraphicTikzMarkPoints]{Lines}%
+ {%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \draw[tkzgrphline,\pflcouleurpointsA,fill=\pflcouleurpointsB] \Point circle[radius={\useKV[GraphicTikzMarkPoints]{Sizeo}}] node[tkzgrphnode,\Pos,font=#3] {\Label} ;
+ }%
+ }%
+ {%
+ \foreach \Point/\Pos/\Label in {#4} {%
+ \ifboolKV[GraphicTikzMarkPoints]{Lines}%
+ {%
+ \draw[{\useKV[GraphicTikzMarkPoints]{Color}},tkzgrphcounterimage] let \p1 = \Point in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \filldraw[\pflcouleurpoints] \Point circle[radius={\useKV[GraphicTikzMarkPoints]{Sizeo}}] node[tkzgrphnode,\Pos,font=#3] {\Label} ;
+ }%
+ }%
+ }%
+ {}%
+ }%
+}
+
+%===AJOUTER DES VALEURS MANUELLEMENT
+\NewDocumentCommand\AddXvalues{ O{} m m }{%
+ \restoreKV[GraphicTikzAxis]%
+ \setKV[GraphicTikzAxis]{#1}%
+ \ifboolKV[GraphicTikzAxis]{Lines}{\foreach \x in {#2}{\draw[tkzgrphline] ([yshift=\pflthickgrad]{\x},{\pflOy})--++(0,{-2*\pflthickgrad}) ;}}{}%
+ \readlist*\LstValX{#2}%
+ \readlist*\LstValFmtX{#3}%
+ \foreach \i in {1,...,\LstValXlen}{%
+ \itemtomacro\LstValX[\i]\mavalx%
+ \itemtomacro\LstValFmtX[\i]\mavalfmtx%
+ \draw ([yshift=-\pflthickgrad]{\mavalx},{\pflOy}) node[tkzgrphnode,below,font={\useKV[GraphicTikzAxis]{Font}}] {\mavalfmtx} ;
+ }%
+}
+
+\NewDocumentCommand\AddYvalues{ O{} m m }{%
+ \restoreKV[GraphicTikzAxis]%
+ \setKV[GraphicTikzAxis]{#1}%
+ \ifboolKV[GraphicTikzAxis]{Lines}{\foreach \y in {#2}{\draw[tkzgrphline] ([xshift=\pflthickgrad]{\pflOx},{\y})--++({-2*\pflthickgrad},0) ;}}{}%
+ \readlist*\LstValY{#2}%
+ \readlist*\LstValFmtY{#3}%
+ \foreach \i in {1,...,\LstValYlen}{%
+ \itemtomacro\LstValY[\i]\mavaly%
+ \itemtomacro\LstValFmtY[\i]\mavalfmty%
+ \draw ([xshift=-\pflthickgrad]{\pflOx},{\mavaly}) node[tkzgrphnode,left,font={\useKV[GraphicTikzAxis]{Font}}] {\mavalfmty} ;
+ }%
+}
+
+%====FONCTIONS ET COURBES 'classique + interpo + spline'
+\defKV[GraphicTikzCourbe]{%
+ Step=\def\pflstepcurve{#1},%
+ Name=\def\pflnamecurve{#1}
+}
+\setKVdefault[GraphicTikzCourbe]{%
+ Color=black,%
+ Start={\pflxmin},%
+ End={\pflxmax},%
+ Step={},%
+ Clip=true,%
+ Name={},%
+ Trace=false,%
+ Tension=0.5
+}
+
+\NewDocumentCommand\DefineFunction{ O{} D<>{f} m }{%old version
+ \restoreKV[GraphicTikzCourbe]%
+ \setKV[GraphicTikzCourbe]{#1}%
+ \xintdeffloatfunc #2(x) := #3 ;
+ \IfStrEq{\pflstepcurve}{}%
+ {%
+ \xdef\pflstepcurve{\xintfloateval{((\useKV[GraphicTikzCourbe]{End})-(\useKV[GraphicTikzCourbe]{Start}))/100}}%
+ }%
+ {}%
+ \ifboolKV[GraphicTikzCourbe]{Clip}{\begin{scope}\clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});}{}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \ifboolKV[GraphicTikzCourbe]{Trace}%
+ {%
+ \path[draw,tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}},name path global=\pflnamecurve] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphicTikzCourbe]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzCourbe]{End}},{\useKV[GraphicTikzCourbe]{End}})
+ \relax
+ };
+ }%
+ {%
+ \path[draw=none,tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}},name path global=\pflnamecurve] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphicTikzCourbe]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzCourbe]{End}},{\useKV[GraphicTikzCourbe]{End}})
+ \relax
+ };
+ }%
+ \ifboolKV[GraphicTikzCourbe]{Clip}{\end{scope}}{}
+}
+
+\NewDocumentCommand\DefineCurve{ O{} D<>{f} m }{%
+ \restoreKV[GraphicTikzCourbe]%
+ \setKV[GraphicTikzCourbe]{#1}%
+ \xintdeffloatfunc #2(x) := #3 ;
+ \IfStrEq{\pflstepcurve}{}%
+ {%
+ \xdef\pflstepcurve{\xintfloateval{((\useKV[GraphicTikzCourbe]{End})-(\useKV[GraphicTikzCourbe]{Start}))/100}}%
+ }%
+ {}%
+ \ifboolKV[GraphicTikzCourbe]{Clip}{\begin{scope}\clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});}{}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \ifboolKV[GraphicTikzCourbe]{Trace}%
+ {%
+ \path[draw,tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}},name path global=\pflnamecurve] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphicTikzCourbe]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzCourbe]{End}},{\useKV[GraphicTikzCourbe]{End}})
+ \relax
+ };
+ }%
+ {%
+ \path[draw=none,tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}},name path global=\pflnamecurve] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphicTikzCourbe]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzCourbe]{End}},{\useKV[GraphicTikzCourbe]{End}})
+ \relax
+ };
+ }%
+ \ifboolKV[GraphicTikzCourbe]{Clip}{\end{scope}}{}
+}
+
+\NewDocumentCommand\DrawCurve{ O{} D<>{} m }{%
+ \restoreKV[GraphicTikzCourbe]%
+ \setKV[GraphicTikzCourbe]{#1}%
+ \IfStrEq{\pflstepcurve}{}%
+ {%
+ \xdef\pflstepcurve{\xintfloateval{((\useKV[GraphicTikzCourbe]{End})-(\useKV[GraphicTikzCourbe]{Start}))/100}}%
+ }%
+ {}%
+ \ifboolKV[GraphicTikzCourbe]{Clip}{\begin{scope}\clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});}{}
+ \IfEq{\pflnamecurve}{}%
+ {%
+ \draw[tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}}] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#3),x={\useKV[GraphicTikzCourbe]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzCourbe]{End}},{\useKV[GraphicTikzCourbe]{End}})
+ \relax
+ };
+ }%
+ {%
+ \path[draw,tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}},name path global=\pflnamecurve] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#3),x={\useKV[GraphicTikzCourbe]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzCourbe]{End}},{\useKV[GraphicTikzCourbe]{End}})
+ \relax
+ };
+ }%
+ \ifboolKV[GraphicTikzCourbe]{Clip}{\end{scope}}{}
+}
+
+\NewDocumentCommand\DefineLstInterpol{ m O{\myinterpolist} }{%
+ \def#2{#1}%
+}
+
+\NewDocumentCommand\DefineInterpoCurve{ O{} m }{%
+ \restoreKV[GraphicTikzCourbe]%
+ \setKV[GraphicTikzCourbe]{#1}%
+ \begin{scope}
+ \ifboolKV[GraphicTikzCourbe]{Trace}%
+ {%
+ \path[draw,tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}},name path global=\pflnamecurve] plot[smooth,tension={\useKV[GraphicTikzCourbe]{Tension}}] coordinates {#2};
+ }%
+ {%
+ \path[draw=none,tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}},name path global=\pflnamecurve] plot[smooth,tension={\useKV[GraphicTikzCourbe]{Tension}}] coordinates {#2};
+ }%
+ \end{scope}
+}
+
+\NewDocumentCommand\DrawInterpoCurve{ O{} m }{%
+ %2=liste
+ \restoreKV[GraphicTikzCourbe]%
+ \setKV[GraphicTikzCourbe]{#1}%
+ \begin{scope}
+ \draw[tkzgrphcurve,{\useKV[GraphicTikzCourbe]{Color}}] plot [smooth,tension={\useKV[GraphicTikzCourbe]{Tension}}] coordinates {#2} ;
+ \end{scope}
+}
+
+\NewDocumentCommand\DefineLstSpline{ m O{\mysplinelst} }{%
+ \def#2{#1}%
+}
+
+\newcommand\tkzextractcoeff[2]{%1=liste,2=numero
\setsepchar{§}%
\readlist*\lcoeffs{#1}
\ifnum \lcoeffslen=1
@@ -964,26 +2852,26 @@
\fi
}
-\defKV[GraphiqueTikzSpline]{%
- Nom=\def\pflsplinename{#1},%
+\defKV[GraphicTikzSpline]{%
+ Name=\def\pflsplinename{#1},%
Coeffs=\def\pflsplinecoeffs{#1}
}
-\setKVdefault[GraphiqueTikzSpline]{%
- Nom=spline,%
- Couleur=black,%
+\setKVdefault[GraphicTikzSpline]{%
+ Name=spline,%
+ Color=black,%
Coeffs=3,%
Trace=false
}
-\NewDocumentCommand\GenererSpline{ m m O{\monspline} }{%
+\NewDocumentCommand\GenerateSpline{ m m O{\myspline} }{%
%1=liste
\setsepchar[.]{§./}%
\readlist*\SPLlistepoints{#1}%
%les données
\def\tmpsplinenumdeb{1}
\def\tmpsplinenumfin{\SPLlistepointslen}%
- \pflextractcoeff{#2}{\tmpsplinenumdeb}%
+ \tkzextractcoeff{#2}{\tmpsplinenumdeb}%
%nb de calculs
\def\SPLnbsplines{\inteval{\tmpsplinenumfin-1}}%
%extraction des coordonnées
@@ -996,7 +2884,7 @@
\xdef#3{(\xa,\ya) ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFA}).. (\xb,\yb)}%
\foreach \i in {\tmpsplinenumdeb,...,\SPLnbsplines}{%
%extraction des coeffs de compensation
- \pflextractcoeff{#2}{\i}%
+ \tkzextractcoeff{#2}{\i}%
\def\j{\inteval{\i+1}}%
\itemtomacro\SPLlistepoints[\i,1]\xa%
\itemtomacro\SPLlistepoints[\i,2]\ya%
@@ -1008,34 +2896,752 @@
}%
}
-\NewDocumentCommand\DefinirSpline{ O{} m D<>{\monspline} }{%
+\NewDocumentCommand\DefineSplineCurve{ O{} m D<>{\myspline} }{%
%1=liste
- \restoreKV[GraphiqueTikzSpline]%
- \setKV[GraphiqueTikzSpline]{#1}%
- \GenererSpline{#2}{\pflsplinecoeffs}<#3>%
+ \restoreKV[GraphicTikzSpline]%
+ \setKV[GraphicTikzSpline]{#1}%
+ \GenerateSpline{#2}{\pflsplinecoeffs}[#3]%
\begin{scope}
- \ifboolKV[GraphiqueTikzSpline]{Trace}%
+ \ifboolKV[GraphicTikzSpline]{Trace}%
{%
- \path[draw,pflcourbe,{\useKV[GraphiqueTikzSpline]{Couleur}},name path global=\pflsplinename] #3 ;
+ \path[draw,tkzgrphcurve,{\useKV[GraphicTikzSpline]{Color}},name path global=\pflsplinename] #3 ;
}%
{%
- \path[draw=none,pflcourbe,name path global=\pflsplinename] #3 ;
+ \path[draw=none,tkzgrphcurve,name path global=\pflsplinename] #3 ;
}%
\end{scope}
}
-\NewDocumentCommand\TracerSpline{ O{} m D<>{\monspline} }{%
+\NewDocumentCommand\DefineSpline{ O{} m D<>{\myspline} }{%old version
%1=liste
- \restoreKV[GraphiqueTikzSpline]%
- \setKV[GraphiqueTikzSpline]{#1}%
- \GenererSpline{#2}{\pflsplinecoeffs}<#3>%
+ \restoreKV[GraphicTikzSpline]%
+ \setKV[GraphicTikzSpline]{#1}%
+ \GenerateSpline{#2}{\pflsplinecoeffs}[#3]%
\begin{scope}
- \draw[pflcourbe,{\useKV[GraphiqueTikzSpline]{Couleur}}] #3 ;
+ \ifboolKV[GraphicTikzSpline]{Trace}%
+ {%
+ \path[draw,tkzgrphcurve,{\useKV[GraphicTikzSpline]{Color}},name path global=\pflsplinename] #3 ;
+ }%
+ {%
+ \path[draw=none,tkzgrphcurve,name path global=\pflsplinename] #3 ;
+ }%
+ \end{scope}
+}
+
+\NewDocumentCommand\DrawSplineCurve{ O{} m D<>{\myspline} }{%
+ %1=liste
+ \restoreKV[GraphicTikzSpline]%
+ \setKV[GraphicTikzSpline]{#1}%
+ \GenerateSpline{#2}{\pflsplinecoeffs}[#3]%
+ \begin{scope}
+ \draw[tkzgrphcurve,{\useKV[GraphicTikzSpline]{Color}}] #3 ;
+ \end{scope}
+}
+
+\NewDocumentCommand\DrawSpline{ O{} m D<>{\myspline} }{%old version
+ %1=liste
+ \restoreKV[GraphicTikzSpline]%
+ \setKV[GraphicTikzSpline]{#1}%
+ \GenerateSpline{#2}{\pflsplinecoeffs}[#3]%
+ \begin{scope}
+ \draw[tkzgrphcurve,{\useKV[GraphicTikzSpline]{Color}}] #3 ;
+ \end{scope}
+}
+
+%===INTERSECTION & ANTÉCÉDENTS
+\defKV[GraphicTikzIntersect]{%
+ Name=\def\pflintercurves{#1}
+}
+\setKVdefault[GraphicTikzIntersect]{%
+ Name=S,
+ Disp=true,
+ Color=black,
+ DispLine=false,%
+ Lines=false,%
+ Style=o
+}
+
+\NewDocumentCommand\FindIntersections{ O{} m m D<>{\myt} }{%
+ \restoreKV[GraphicTikzIntersect]%
+ \setKV[GraphicTikzIntersect]{#1}%
+ \path[name intersections={of=#2 and #3,name=\pflintercurves,total=\t}] \pgfextra{\xdef#4{\t}};
+ \ifboolKV[GraphicTikzIntersect]{Disp}%
+ {%
+ \xintifboolexpr{#4 == 0}{}%
+ {%
+ \foreach \i in {1,...,#4}{%
+ \ifboolKV[GraphicTikzIntersect]{Lines}%
+ {%
+ \draw[tkzgrphrange,{\useKV[GraphicTikzIntersect]{Color}}]let \p1 = (\pflintercurves-\i) in (\pflintercurves-\i) -- ({\x1},{\pflOy}) ;
+ }%
+ {}%
+ \MarkPts*[Style={\useKV[GraphicTikzIntersect]{Style}},Color={\useKV[GraphicTikzIntersect]{Color}}]{(\pflintercurves-\i)}
+ %\filldraw[{\useKV[GraphicTikzIntersect]{Color}}] (\pflintercurves-\i) circle[tkzgrphpointc] ;
+ }
+ }%
+ }%
+ {}%
+}
+
+\NewDocumentCommand\FindCounterimage{ O{} m m D<>{\myantec} }{%
+ \restoreKV[GraphicTikzIntersect]%
+ \setKV[GraphicTikzIntersect]{#1}%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \ifboolKV[GraphicTikzIntersect]{DispLine}%
+ {%
+ \path[draw,{\useKV[GraphicTikzIntersect]{Color}},tkzgrphcurve,name path=tmpanteced] ({\pflxmin},{#3})--({\pflxmax},{#3}) ;
+ }%
+ {%
+ \path[draw=none,tkzgrphcurve,name path=tmpanteced] ({\pflxmin},{#3})--({\pflxmax},{#3}) ;
+ }%
+ \path[name intersections={of=#2 and tmpanteced,name=\pflintercurves,total=\t}] \pgfextra{\xdef#4{\t}};
+ \ifboolKV[GraphicTikzIntersect]{Disp}%
+ {%
+ \xintifboolexpr{#4 == 0}{}%
+ {%
+ \foreach \i in {1,...,#4}{%
+ \MarkPts*[Style={\useKV[GraphicTikzIntersect]{Style}},Color={\useKV[GraphicTikzIntersect]{Color}}]{(\pflintercurves-\i)}
+ %\filldraw[{\useKV[GraphicTikzIntersect]{Color}}] (\pflintercurves-\i) circle[tkzgrphpointc] ;
+ }
+ }%
+ }%
+ {}%
+ \end{scope}
+}
+
+%====INTÉGRALES
+%v2 avec modification de la clé [Type=...] ?
+\defKV[GraphicTikzIntegr]{%
+ Colors=\def\pfldomtikzcolors{#1},%
+ Style=\def\pfldomtikzstyle{#1},%
+ Opacity=\def\pfldomtikzopac{#1},%
+ Hatch=\def\pfldomtikzhatch{#1},%
+ Type=\def\pfldomtikztype{#1},%
+ Step=\def\pflstepcurve{#1},%
+ Bounds=\def\pflintbornes{#1},%
+ Junction=\def\pfldomtikzjoin{#1},%
+ NameInterpo=\def\pfldomtikznameinterpo{#1},%
+ NameInterpoB=\def\pfldomtikznameinterpob{#1},%
+ NameSpline=\def\pfldomtikznamespline{#1},%
+ NameSplineB=\def\pfldomtikznamesplineb{#1}
+}
+\setKVdefault[GraphicTikzIntegr]{%
+ Colors=gray,%
+ Style=fill,%
+ Opacity=0.5,%
+ Hatch={north west lines},%
+ Type=fct,%
+ Step={},%
+ Junction=bevel,%
+ Bounds=abs,%
+ Border=true,%
+ Spline=false,%
+ SplineB=false,%
+ NameInterpo={\myinterpo},%
+ NameInterpoB={\myinterpoB},%
+ NameSpline={\myspline},%
+ NameSplineB={\myplineB},%
+ Tension=0.5,%
+ TensionB=0.5
+}
+
+\NewDocumentCommand\DrawIntegral{ O{} D<>{} m O{0} m m }{%
+ %1 = clés
+ %2 = options particulières tikz
+ %3 = fonction, en tikz
+ %4 = fonction n°2 éventuelle
+ %de #5 à #6
+ \restoreKV[GraphicTikzIntegr]% revenir au valeurs par défaut
+ \setKV[GraphicTikzIntegr]{#1}% lit les arguments optionnels
+ %les couleurs
+ \IfSubStr{\pfldomtikzcolors}{/}%
+ {%
+ \StrCut{\pfldomtikzcolors}{/}{\pfldomtikzcolorbord}{\pfldomtikzcolorfond}
+ }%
+ {%
+ \xdef\pfldomtikzcolorbord{\pfldomtikzcolors}\xdef\pfldomtikzcolorfond{\pfldomtikzcolors}
+ }%
+ \ifboolKV[GraphicTikzIntegr]{Border}%
+ {%
+ \tikzset{integralebordtikzstyle/.style={draw=\pfldomtikzcolorbord}}
+ }%
+ {%
+ \tikzset{integralebordtikzstyle/.style={draw=none}}
+ }%
+ \IfStrEq{\pfldomtikzstyle}{hatch}%
+ {%
+ \tikzset{integraletikzstyle/.style={tkzgrphline,pattern=\pfldomtikzhatch,pattern color=\pfldomtikzcolorfond,line join=\pfldomtikzjoin}}
+ }%
+ {}%
+ \IfStrEq{\pfldomtikzstyle}{fill}%
+ {%
+ \tikzset{integraletikzstyle/.style={tkzgrphline,fill=\pfldomtikzcolorfond,fill opacity=\pfldomtikzopac,line join=\pfldomtikzjoin}}
+ }%
+ {}%
+ %extraction des infos x/y
+ \IfStrEqCase{\pflintbornes}{%
+ {abs}%
+ {%
+ \xdef\absnoeudA{#5}%
+ \xdef\absnoeudB{#6}%
+ }%
+ {nodes}%
+ {%
+ \path #5;
+ \pgfgetlastxy{\macrox}{\macroy}%
+ \xdef\absnoeudA{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}%
+ \path #6;
+ \pgfgetlastxy{\macrox}{\macroy}%
+ \xdef\absnoeudB{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}%
+ }%
+ {abs/node}%
+ {%
+ \xdef\absnoeudA{#5}%
+ \path #6;
+ \pgfgetlastxy{\macrox}{\macroy}%
+ \xdef\absnoeudB{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}%
+ }%
+ {node/abs}%
+ {%
+ \path #5;
+ \pgfgetlastxy{\macrox}{\macroy}%
+ \xdef\absnoeudA{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}%
+ \xdef\absnoeudB{#6}%
+ }%
+ }%
+ %suite avec les nbs points
+ \IfStrEq{\pflstepcurve}{}%
+ {%
+ \xdef\pflstepcurve{\xintfloateval{((\absnoeudB)-(\absnoeudA))/100}}%
+ }%
+ {}%
+ %TRACÉSen fonction des types de courbes
+ \IfStrEq{\pfldomtikztype}{fct}%
+ {%OK
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \draw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflOy}) -- cycle ;
+ \end{scope}
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{spl}%avec 3=courbe spline + clé [Spline] à utiliser !
+ {%OK
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflOy}) -- cycle ;
+ \end{scope}
+ \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[name intersections={of=#3 and tmpintbornea,name=YYY}] ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudA},{\pflOy})-- (YYY-1) ;
+ \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=#3 and tmpintborneb,name=ZZZ}] ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudB},{\pflOy})-- (ZZZ-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{itp}%avec 3=courbe interpo
+ {%OK
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflOy}) -- plot [smooth,tension={\useKV[GraphicTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflOy}) -- cycle ;
+ \end{scope}
+ \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=YYY}] ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudA},{\pflOy})-- (YYY-1) ;
+ \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=ZZZ}] ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudB},{\pflOy})-- (ZZZ-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{fct/fct}%avec #3=formule et #4=formule
+ {%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \draw[integraletikzstyle,integralebordtikzstyle,#2] plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#4),x=\absnoeudB..[-(\pflstepcurve)]..\absnoeudA,\absnoeudA)\relax} -- cycle ;
+ \end{scope}
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{spl/spl}%avec #3=cbe spline + #4=cbe splineB
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymin}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflymin}) -- cycle ;
+ \clip ({\absnoeudA},{\pflymax}) -- \pfldomtikznamesplineb -- ({\absnoeudB},{\pflymax}) -- cycle ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[name intersections={of=#3 and tmpintbornea,name=YYYA}] ;
+ \path[name intersections={of=#4 and tmpintbornea,name=ZZZA}] ;
+ \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=#3 and tmpintborneb,name=YYYB}] ;
+ \path[name intersections={of=#4 and tmpintborneb,name=ZZZB}] ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYA-1)-- (ZZZA-1) ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYB-1)-- (ZZZB-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{itp/itp}%avec #3=cbe interpo + #4=cbe interpoB
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymin}) -- plot [smooth,tension={\useKV[GraphicTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflymin}) ;
+ \clip ({\absnoeudA},{\pflymax}) -- plot [smooth,tension={\useKV[GraphicTikzIntegr]{TensionB}}] coordinates {#4} -- ({\absnoeudB},{\pflymax}) ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=YYYA}] ;
+ \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpob,name=ZZZA}] ;
+ \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=YYYB}] ;
+ \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpob,name=ZZZB}] ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYA-1)-- (ZZZA-1) ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYB-1)-- (ZZZB-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{fct/spl}%avec #3=formule + #4=spline
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymin}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymin}) -- cycle ;
+ \clip ({\absnoeudA},{\pflymax}) -- \pfldomtikznamesplineb -- ({\absnoeudB},{\pflymax}) -- cycle ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[name intersections={of=tmpintbornea and #4,name=ZZZA}] ;
+ \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=tmpintborneb and #4,name=ZZZB}] ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudA},{\xintfloateval{subs(#3,x=\absnoeudA)}})-- (ZZZA-1) ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudB},{\xintfloateval{subs(#3,x=\absnoeudB)}})-- (ZZZB-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{spl/fct}%avec #3=spline + #4=fct
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymax}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#4),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymax}) -- cycle ;
+ \clip ({\absnoeudA},{\pflymin}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflymin}) -- cycle ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[name intersections={of=tmpintbornea and #3,name=ZZZA}] ;
+ \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=tmpintborneb and #3,name=ZZZB}] ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudA},{\xintfloateval{subs(#4,x=\absnoeudA)}})-- (ZZZA-1) ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudB},{\xintfloateval{subs(#4,x=\absnoeudB)}})-- (ZZZB-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{fct/itp}%avec #3=formule + #4=liste interpo
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymin}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#3),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymin}) -- cycle ;
+ \clip ({\absnoeudA},{\pflymax}) -- plot [smooth,tension={\useKV[GraphicTikzIntegr]{TensionB}}] coordinates {#4} -- ({\absnoeudB},{\pflymax}) ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpob,name=ZZZAA}] ;
+ \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpob,name=ZZZAB}] ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudA},{\xintfloateval{subs(#3,x=\absnoeudA)}})-- (ZZZAA-1) ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudB},{\xintfloateval{subs(#3,x=\absnoeudB)}})-- (ZZZAB-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{itp/fct}%
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymax}) -- plot[smooth] coordinates {\xintthecoords\xintfloatexpr seq((x,#4),x=\absnoeudA..[\pflstepcurve]..\absnoeudB,\absnoeudB)\relax} -- ({\absnoeudB},{\pflymax}) -- cycle ;
+ \clip ({\absnoeudA},{\pflymin}) -- plot [smooth,tension={\useKV[GraphicTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflymin}) ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;
+ \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;
+ \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=ZZZAA}] ;
+ \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=ZZZAB}] ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudA},{\xintfloateval{subs(#4,x=\absnoeudA)}})-- (ZZZAA-1) ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] ({\absnoeudB},{\xintfloateval{subs(#4,x=\absnoeudB)}})-- (ZZZAB-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{itp/spl}%
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymin}) -- plot [smooth,tension={\useKV[GraphicTikzIntegr]{Tension}}] coordinates {#3} -- ({\absnoeudB},{\pflymin}) ;
+ \clip ({\absnoeudA},{\pflymax}) -- \pfldomtikznamesplineb -- ({\absnoeudB},{\pflymax}) -- cycle ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;%borne inf
+ \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;%borne sup
+ \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpo,name=YYYKAA}] ;
+ \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpo,name=YYYKBB}] ;
+ \path[name intersections={of=tmpintbornea and #4,name=ZZZKAA}] ;
+ \path[name intersections={of=tmpintborneb and #4,name=ZZZKBB}] ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYKAA-1)-- (ZZZKAA-1) ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYKBB-1)-- (ZZZKBB-1) ;
+ }%
+ {}%
+ \IfStrEq{\pfldomtikztype}{spl/itp}%
+ {%
+ \begin{scope}
+ \clip ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymax}) -- plot [smooth,tension={\useKV[GraphicTikzIntegr]{TensionB}}] coordinates {#4} -- ({\absnoeudB},{\pflymax}) ;
+ \clip ({\absnoeudA},{\pflymin}) -- \pfldomtikznamespline -- ({\absnoeudB},{\pflymin}) -- cycle ;
+ \filldraw[integraletikzstyle,integralebordtikzstyle,#2] ({\absnoeudA},{\pflymin}) rectangle ({\absnoeudB},{\pflymax}) ;
+ \end{scope}
+ \path[draw=none,tkzgrphcurve,name path=tmpintbornea] ({\absnoeudA},{\pflymin})--({\absnoeudA},{\pflymax}) ;%borne inf
+ \path[draw=none,tkzgrphcurve,name path=tmpintborneb] ({\absnoeudB},{\pflymin})--({\absnoeudB},{\pflymax}) ;%borne sup
+ \path[name intersections={of=tmpintbornea and \pfldomtikznameinterpob,name=YYYKAA}] ;
+ \path[name intersections={of=tmpintborneb and \pfldomtikznameinterpob,name=YYYKBB}] ;
+ \path[name intersections={of=tmpintbornea and #3,name=ZZZKAA}] ;
+ \path[name intersections={of=tmpintborneb and #3,name=ZZZKBB}] ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYKAA-1)-- (ZZZKAA-1) ;
+ \draw[\pfldomtikzcolorbord,tkzgrphline] (YYYKBB-1)-- (ZZZKBB-1) ;
+ }%
+ {}%
+}
+
+\NewDocumentCommand\DrawPts{ s O{black} D<>{\normalfont\normalsize} m }{%
+ \IfBooleanTF{#1}%
+ {%
+ \foreach \Point in {#4}{%
+ \filldraw[#2] \Point circle[tkzgrphpointc] ;
+ }
+ }%
+ {%
+ \foreach \Point/\Pos/\Label in {#4}{%
+ \filldraw[#2] \Point circle[tkzgrphpointc] node[tkzgrphnode,\Pos,font=#3] {\Label} ;
+ }
+ }%
+}
+
+% %====STATS À 2 VARIABLES
+\defKV[GraphicTikzRegLin]{%
+ Rounds=\def\pflarrondisreglin{#1},
+ Name=\def\pflnamereglin{#1},
+ NameParab=\def\pflnameregquad{#1},
+ Start=\def\pflreglinmin{#1},
+ End=\def\pflreglinmax{#1}
+}
+\setKVdefault[GraphicTikzRegLin]{
+ ColorScatter=black,
+ ColorLine=black,
+ ColorParab=black,
+ Rounds={},
+ Start={\pflxmin},
+ End={\pflxmax},
+ Name=reglin,%
+ NameParab=quadreg,%
+ DrawLine=false,%
+ DrawParab=false,%
+ Style=o
+}
+
+\NewDocumentCommand\DrawScatter{ O{} D<>{d} m m }{%
+ \useKVdefault[GraphicTikzRegLin]%
+ \setKV[GraphicTikzRegLin]{#1}% on paramètres les nouvelles clés et on les simplifie
+ %listes des données
+ \def\xliste{#3}
+ \def\yliste{#4}
+ \readlist*\LX{\xliste}
+ \readlist*\LY{\yliste}
+ %taille des listes
+ \def\LNB{\inteval{\LXlen}}
+ %nuage
+ \foreach \i in {1,...,\LXlen}{%
+ \itemtomacro\LX[\i]\tmpmavalx%
+ \itemtomacro\LY[\i]\tmpmavaly%
+ \MarkPts*[Style={\useKV[GraphicTikzRegLin]{Style}},Color={\useKV[GraphicTikzRegLin]{ColorScatter}}]{(\tmpmavalx,\tmpmavaly)}%
+ }
+ %droite de régression
+ \ifboolKV[GraphicTikzRegLin]{DrawLine}%
+ {%
+ %somme des LX et des LY OK
+ \xdef\LXSomme{0}
+ \xdef\LYSomme{0}
+ \foreach \i in {1,2,...,\LNB}{
+ \xdef\LXSomme{\xintfloateval{\LXSomme+\LX[\i]}}
+ }
+ \foreach \i in {1,2,...,\LNB}{
+ \xdef\LYSomme{\xintfloateval{\LYSomme+\LY[\i]}}
+ }
+ %moyenne des LX et des LY OK
+ \xdef\LXmoy{\xintfloateval{\LXSomme/\LNB}}
+ \xdef\LYmoy{\xintfloateval{\LYSomme/\LNB}}
+ %variance des LX et des LY OK
+ \xdef\LXvar{0}
+ \foreach \i in {1,2,...,\LNB}{
+ \xdef\LXvar{\xintfloateval{\LXvar+(\LX[\i]-\LXmoy)*(\LX[\i]-\LXmoy)}}
+ }
+ \xdef\LXvar{\xintfloateval{\LXvar/\LNB}}
+ \xdef\LYvar{0}
+ \foreach \i in {1,2,...,\LNB}{
+ \xdef\LYvar{\xintfloateval{\LYvar+(\LY[\i]-\LYmoy)*(\LY[\i]-\LYmoy)}}
+ }
+ \xdef\LYvar{\xintfloateval{\LYvar/\LNB}}
+ %covariance des XY OK
+ \xdef\LXYvar{0}
+ \foreach \i in {1,2,...,\LNB}{
+ \xdef\LXYvar{\xintfloateval{\LXYvar+(\LX[\i]-\LXmoy)*(\LY[\i]-\LYmoy)}}
+ }
+ \xdef\LXYvar{\xintfloateval{\LXYvar/\LNB}}
+ %COEFFS OK
+ \IfStrEq{\pflarrondisreglin}{}%
+ {%
+ \xdef\tmpcoeffreglina{\xintfloateval{\LXYvar/\LXvar}}
+ \xdef\tmpcoeffreglinb{\xintfloateval{\LYmoy-\tmpcoeffreglina*\LXmoy}}
+ }%
+ {%
+ \IfSubStr{\pflarrondisreglin}{/}%
+ {%
+ \StrCut{\pflarrondisreglin}{/}{\pflarrondisreglina}{\pflarrondisreglinb}
+ }%
+ {%
+ \xdef\pflarrondisreglina{\pflarrondisreglin}\xdef\pflarrondisreglinb{\pflarrondisreglin}
+ }%
+ \xdef\tmpcoeffreglina{\xintfloateval{round(\LXYvar/\LXvar,\pflarrondisreglina)}}
+ \xdef\tmpcoeffreglinb{\xintfloateval{round(\LYmoy-\tmpcoeffreglina*\LXmoy,\pflarrondisreglinb)}}
+ }%
+ \xintdeffloatfunc #2(x) := (\tmpcoeffreglina)*x+(\tmpcoeffreglinb) ;
+ %tracé
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \draw[tkzgrphcurve,{\useKV[GraphicTikzRegLin]{ColorLine}},name path global=\pflnamereglin,samples=2,domain=\pflreglinmin:\pflreglinmax] plot (\x,{\tmpcoeffreglina*\x+\tmpcoeffreglinb}) ;
+ \end{scope}
+ }%
+ {}%
+ \ifboolKV[GraphicTikzRegLin]{DrawParab}%
+ {%
+ %somme importantes
+ \xdef\LXSomme{0}%
+ \xdef\LXCSomme{0}%
+ \xdef\LYSomme{0}%
+ \xdef\LXXSomme{0}%
+ \xdef\LXYSomme{0}%
+ \xdef\LXXCSomme{0}%
+ \xdef\LXCXCSomme{0}%
+ \xdef\LXCYSomme{0}%
+ %calculs
+ \foreach \i in {1,2,...,\LNB}{%
+ \xdef\LXSomme{\xintfloateval{\LXSomme+\LX[\i]}}%
+ \xdef\LXCSomme{\xintfloateval{\LXCSomme+(\LX[\i])^2}}%
+ }%
+ \foreach \i in {1,2,...,\LNB}{%
+ \xdef\LYSomme{\xintfloateval{\LYSomme+\LY[\i]}}%
+ }%
+ \xdef\LXmoy{\xintfloateval{\LXSomme/\LNB}}%
+ \xdef\LYmoy{\xintfloateval{\LYSomme/\LNB}}%
+ \xdef\LXCmoy{\xintfloateval{\LXCSomme/\LNB}}%
+ %calculs suites
+ \foreach \i in {1,2,...,\LNB}{%
+ \xdef\LXXSomme{\xintfloateval{\LXXSomme+(\LX[\i]-\LXmoy)^2}}%
+ \xdef\LXYSomme{\xintfloateval{\LXYSomme+(\LX[\i]-\LXmoy)*(\LY[\i]-\LYmoy)}}%
+ \xdef\LXXCSomme{\xintfloateval{\LXXCSomme+(\LX[\i]-\LXmoy)*((\LX[\i])*(\LX[\i])-\LXCmoy)}}%
+ \xdef\LXCXCSomme{\xintfloateval{\LXCXCSomme+((\LX[\i])^2-\LXCmoy)^2}}%
+ \xdef\LXCYSomme{\xintfloateval{\LXCYSomme+((\LX[\i])^2-\LXCmoy)*(\LY[\i]-\LYmoy)}}%
+ }%
+ %COEFFS OK
+ \IfStrEq{\pflarrondisreglin}{}%
+ {%
+ \xdef\tmpcoeffregquadb{\xintfloateval{(\LXYSomme*\LXCXCSomme-\LXCYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2)}}
+ \xdef\tmpcoeffregquada{\xintfloateval{(\LXCYSomme*\LXXSomme-\LXYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2)}}
+ \xdef\tmpcoeffregquadc{\xintfloateval{\LYmoy-\tmpcoeffregquadb*\LXmoy-\tmpcoeffregquada*\LXCmoy}}
+ }%
+ {%
+ \xdef\tmpcoeffregquadb{\xintfloateval{round((\LXYSomme*\LXCXCSomme-\LXCYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2),\pflarrondisreglin)}}
+ \xdef\tmpcoeffregquada{\xintfloateval{round((\LXCYSomme*\LXXSomme-\LXYSomme*\LXXCSomme)/(\LXXSomme*\LXCXCSomme-(\LXXCSomme)^2),\pflarrondisreglin)}}
+ \xdef\tmpcoeffregquadc{\xintfloateval{round(\LYmoy-\tmpcoeffregquadb*\LXmoy-\tmpcoeffregquada*\LXCmoy,\pflarrondisreglin)}}
+ }%
+ \xintdeffloatfunc #2(x) := (\tmpcoeffregquada)*x^2+(\tmpcoeffregquadb)*x+\tmpcoeffregquadc ;
+ %tracé
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \draw[tkzgrphcurve,{\useKV[GraphicTikzRegLin]{ColorParab}},name path global=\pflnameregquad,samples=250,domain=\pflreglinmin:\pflreglinmax] plot (\x,{\tmpcoeffregquada*(\x)^2+\tmpcoeffregquadb*\x+\tmpcoeffregquadc}) ;
+ \end{scope}
+ }%
+ {}%
+}
+
+\if@loadxintreg
+%régressions alternatives
+\NewDocumentCommand\DrawRegression{ O{} D<>{curvajust} m D<>{} m m }{%
+ %1=options de tracés
+ %2=nom courbe
+ %3=type
+ %4=arrondis
+ %5=liste X
+ %6=liste Y
+ \IfStrEq{#3}{lin}%
+ {%
+ \xintlinreg[round={#4}]{#5}{#6}%
+ \DefineFunction[#1,Trace]<#2>{\linrega*x+\linregb}%
+ }%
+ {}%
+ \IfStrEq{#3}{quad}%
+ {%
+ \xintquadreg[round={#4}]{#5}{#6}%
+ \DefineFunction[#1,Trace]<#2>{\quadrega*x^2+\quadregb*x+\quadregc}%
+ }%
+ {}%
+ \IfStrEq{#3}{pow}%
+ {%
+ \xintpowreg[round={#4}]{#5}{#6}%
+ \DefineFunction[#1,Trace]<#2>{\powrega*x^(\powregb)}%
+ }%
+ {}%
+ \IfStrEq{#3}{expab}%
+ {%
+ \xintexpabreg[round={#4}]{#5}{#6}%
+ \DefineFunction[#1,Trace]<#2>{\expabrega*(\expabregb)^x}%
+ }%
+ {}%
+ \IfStrEq{#3}{hyp}%
+ {%
+ \xinthypreg[round={#4}]{#5}{#6}%
+ \DefineFunction[#1,Trace]<#2>{\hyprega+(\hypregb)/x}%
+ }%
+ {}%
+ \IfStrEq{#3}{log}%
+ {%
+ \xintlogreg[round={#4}]{#5}{#6}%
+ \DefineFunction[#1,Trace]<#2>{\logrega+(\logregb)*log(x)}%
+ }%
+ {}%
+ \IfStrEq{#3}{exp}%
+ {%
+ \xintexpreg[round={#4}]{#5}{#6}%
+ \DefineFunction[#1,Trace]<#2>{exp(\exprega*x+\expregb)}%
+ }%
+ {}%
+ \IfStrEq{#3}{expalt}%
+ {%
+ \xintexpreg[Alt,round={#4}]{#5}{#6}%
+ \DefineFunction[#1,Trace]<#2>{\expregb*exp(\exprega*x)}%
+ }%
+ {}%
+ \IfStrEq{#3}{cub}%
+ {%
+ \xintcubreg[round={#4}]{#5}{#6}%
+ \DefineFunction[#1,Trace]<#2>{\cubrega*x^3+\cubregb*x^2+\cubregc*x+\cubregd}%
+ }%
+ {}%
+ \IfSubStr{#3}{expoff}%
+ {%
+ \StrBehind{#3}{=}[\expoffset]%
+ \xintexpoffreg[round={#4},offset=\expoffset]{#5}{#6}%
+ \DefineFunction[#1,Trace]<#2>{\expoffset+\expregoffb*exp(\expregoffa*x)}%
+ }%
+ {}%
+}
+\fi
+
+%===IMAGES & ANTÉCÉDENTS
+\defKV[GraphicTikzImg]{
+ Colors=\def\pflimgcolors{#1},%
+ Name=\def\pflantecednoms{#1}%
+}
+
+\setKVdefault[GraphicTikzImg]{
+ Colors=black,%
+ Lines=false,%
+ Spline=false,%
+ Name={},%
+ Style=o
+}
+
+\NewDocumentCommand\DefineRange{ O{} m m }{%
+ \useKVdefault[GraphicTikzImg]%
+ \setKV[GraphicTikzImg]{#1}%
+ \ifboolKV[GraphicTikzImg]{Spline}%
+ {%
+ \path[draw=none,tkzgrphcurve,name path=tmpimage] ({#3},{\pflymin})--({#3},{\pflymax}) ;
+ \path[name intersections={of=#2 and tmpimage,name=ZZZZ}] ;
+ \coordinate (\pflantecednoms) at (ZZZZ-1) ;
+ }%
+ {%
+ \xdef\tmpresimg{\xintfloateval{#2(#3)}}%
+ \coordinate (\pflantecednoms) at ({#3},{\tmpresimg}) ;
+ }%
+}
+
+\NewDocumentCommand\DrawRanges{ O{} m m }{%
+ \useKVdefault[GraphicTikzImg]%
+ \setKV[GraphicTikzImg]{#1}%
+ \IfSubStr{\pflimgcolors}{/}%
+ {%
+ \StrCut{\pflimgcolors}{/}{\pflimgcolorpt}{\pflimgcolorline}
+ }%
+ {%
+ \xdef\pflimgcolorpt{\pflimgcolors}\xdef\pflimgcolorline{\pflimgcolors}
+ }%
+ \ifboolKV[GraphicTikzImg]{Spline}%
+ {%
+ \foreach \i in {#3}{%
+ \path[draw=none,tkzgrphcurve,name path=tmpimage] ({\i},{\pflymin})--({\i},{\pflymax}) ;
+ \path[name intersections={of=#2 and tmpimage,name=ZZ}] ;
+ \ifboolKV[GraphicTikzImg]{Lines}%
+ {%
+ \draw[\pflimgcolorline,tkzgrphrange] let \p1 = (ZZ-1) in ({\x1},{\pflOy}) |- ({\pflOx},{\y1}) ;
+ }%
+ {}%
+ \MarkPts*[Style={\useKV[GraphicTikzImg]{Style}},Color=\pflimgcolorpt]{(ZZ-1)}
+ %\filldraw[\pflimgcolorpt] (ZZ-1) circle[radius=2pt] ;
+ }
+ }%
+ {%
+ \foreach \i in {#3}{%
+ \xdef\tmpresimg{\xintfloateval{#2(\i)}}%
+ \ifboolKV[GraphicTikzImg]{Lines}%
+ {%
+ \draw[\pflimgcolorline,tkzgrphrange] ({\i},{\pflOy}) |- ({\pflOx},{\tmpresimg}) ;
+ }%
+ {}%
+ \MarkPts*[Style={\useKV[GraphicTikzImg]{Style}},Color=\pflimgcolorpt]{({\i},{\tmpresimg})}
+ %\filldraw[\pflimgcolorpt] ({\i},{\tmpresimg}) circle[radius=2pt] ;
+ }%
+ }%
+}
+
+\NewDocumentCommand\DrawCounterimage{ O{} m m }{%avec le nom de la courbe...
+ \useKVdefault[GraphicTikzImg]%
+ \setKV[GraphicTikzImg]{#1}%
+ \xdef\pflstepcurve{\xintfloateval{0.1*\pflgrillexs}}
+ \IfSubStr{\pflimgcolors}{/}%
+ {%
+ \StrCut{\pflimgcolors}{/}{\pflimgcolorpt}{\pflimgcolorline}%
+ }%
+ {%
+ \xdef\pflimgcolorpt{\pflimgcolors}\xdef\pflimgcolorline{\pflimgcolors}%
+ }%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \path[draw=none,tkzgrphcurve,name path=tmpanteced] ({\pflxmin},{#3})--({\pflxmax},{#3}) ;
+ \path[name intersections={of=#2 and tmpanteced,name=ZZ,total=\t}] \pgfextra{\xdef\tmptotanteced{\t}};
+ \xintifboolexpr{\tmptotanteced == 0}{}%
+ {%
+ \ifboolKV[GraphicTikzImg]{Lines}%
+ {%
+ \draw[\pflimgcolorline,tkzgrphcounterimage] ({\pflxmin},{#3})--({\pflxmax},{#3}) ;
+ }%
+ {}%
+ \foreach \i in {1,...,\tmptotanteced}{%
+ \IfStrEq{\pflantecednoms}{}%
+ {}%
+ {%
+ \coordinate (\pflantecednoms-\i) at (ZZ-\i) ;
+ }%
+ \ifboolKV[GraphicTikzImg]{Lines}%
+ {%
+ \draw[\pflimgcolorline,tkzgrphrange] let \p1 = (ZZ-\i) in (ZZ-\i) -- ({\x1},{\pflOy}) ;
+ }%
+ {}%
+ \MarkPts*[Style={\useKV[GraphicTikzImg]{Style}},Color=\pflimgcolorpt]{(ZZ-\i)}
+ %\filldraw[\pflimgcolorpt] (ZZ-\i) circle[radius=2pt] ;
+ }%
+ }%
\end{scope}
}
%===NOMBRE DÉRIVÉ ET TANGENTE (EXPÉRIEMENTAL)
-\NewDocumentCommand\CalculerNbDerive{ s m m m }{%*=gauche+nomfct+abspt+h
+\NewDocumentCommand\CalcDerivate{ s m m m }{%*=gauche+nomfct+abspt+h
\IfBooleanTF{#1}%
{%
\xdef\TmpResNbDeriv{\xintfloateval{(#2(#3)-#2(#3-#4))/(#4)}}%
@@ -1045,35 +3651,36 @@
}%
}
-\defKV[GraphiqueTikzTgte]{%
- Couleurs=\def\pfltgttikzcolors{#1},%
- DecG=\def\pfltgttikzkl{#1},%
- DecD=\def\pfltgttikzkr{#1},%
+\defKV[GraphicTikzTgte]{%
+ Colors=\def\pfltgttikzcolors{#1},%
+ OffsetL=\def\pfltgttikzkl{#1},%
+ OffsetR=\def\pfltgttikzkr{#1},%
h=\def\pfltgttikzh{#1},%
- Sens=\def\pfltgttikzsens{#1},%
+ Direction=\def\pfltgttikzsens{#1},%
Delta=\def\tmptgtedelta{#1}
}
-\setKVdefault[GraphiqueTikzTgte]{%
- Couleurs=black,%
- DecG=1,%
- DecD=1,%
- AffPoint=false,%
+\setKVdefault[GraphicTikzTgte]{%
+ Colors=black,%
+ OffsetL=1,%
+ OffsetR=1,%
+ DispPt=false,%
Spline=false,%
h=0.1,%
- Sens=gd,%
- Noeud=false,%
- Delta=0.01
+ Direction=lr,%
+ Node=false,%
+ Delta=0.01,%
+ Style=o
}
-\NewDocumentCommand\TracerTangente{ O{} m m D<>{} }{%
- \restoreKV[GraphiqueTikzTgte]%
- \setKV[GraphiqueTikzTgte]{#1}%
+\NewDocumentCommand\DrawTangent{ O{} m m D<>{} }{%
+ \restoreKV[GraphicTikzTgte]%
+ \setKV[GraphicTikzTgte]{#1}%
%en fonction de la gestion de l'abscisse
- \ifboolKV[GraphiqueTikzTgte]{Noeud}%
+ \ifboolKV[GraphicTikzTgte]{Node}%
{%
\path #3;
\pgfgetlastxy{\macrox}{\macroy}%
- \xdef\pfltgttikzx{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}%
+ \xdef\pfltgttikzx{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}%
}%
{%
\xdef\pfltgttikzx{#3}%
@@ -1089,11 +3696,11 @@
\xdef\tmptgtdeb{\xintfloateval{\pfltgttikzx-(\pfltgttikzkl)}}%
\xdef\tmptgtfin{\xintfloateval{\pfltgttikzx+(\pfltgttikzkr)}}%
%suivant le type de courbe
- \ifboolKV[GraphiqueTikzTgte]{Spline}%
+ \ifboolKV[GraphicTikzTgte]{Spline}%
{%
\path[name path=tmpimage] ({\pfltgttikzx},{\pflymin})--({\pfltgttikzx},{\pflymax}) ;
\path[name intersections={of=#2 and tmpimage,name=TANp}] ;
- \IfStrEq{\pfltgttikzsens}{gd}%
+ \IfStrEq{\pfltgttikzsens}{lr}%
{%
\path[name path=L-vline] ({\pfltgttikzx-\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx-\tmptgtedelta},{\pflymax}) ;
\path[name path=R-vline] ({\pfltgttikzx+\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx+\tmptgtedelta},{\pflymax}) ;
@@ -1101,7 +3708,7 @@
%\coordinate (RXcoor) at ($(TANp-1)+({\tmptgtedelta},0)$) ;
}%
{}%
- \IfStrEq{\pfltgttikzsens}{g}%
+ \IfStrEq{\pfltgttikzsens}{l}%
{%
\path[name path=L-vline] ({\pfltgttikzx-\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx-\tmptgtedelta},{\pflymax}) ;
\path[name path=R-vline] ({\pfltgttikzx},{\pflymin}) -- ({\pfltgttikzx},{\pflymax}) ;
@@ -1110,7 +3717,7 @@
\def\tmptgtfin{\pfltgttikzx}%
}%
{}%
- \IfStrEq{\pfltgttikzsens}{d}%
+ \IfStrEq{\pfltgttikzsens}{r}%
{%
\path[name path=L-vline] ({\pfltgttikzx},{\pflymin}) -- ({\pfltgttikzx},{\pflymax}) ;
\path[name path=R-vline] ({\pfltgttikzx+\tmptgtedelta},{\pflymin}) -- ({\pfltgttikzx+\tmptgtedelta},{\pflymax}) ;
@@ -1124,47 +3731,334 @@
\coordinate (RRpoint) at ($(RXcut-1)+(TANp-1)-(tzXproj)$) ; % move
\path (LLpoint);
\pgfgetlastxy{\macrox}{\macroy}%
- \xdef\tzTANLLX{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}%
- \xdef\tzTANLLY{\xintfloateval{(\ConvertirPtToCm{\macroy})/(\pflyunit)}}%
+ \xdef\tzTANLLX{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}%
+ \xdef\tzTANLLY{\xintfloateval{(\ConvertPtToCm{\macroy})/(\pflyunit)}}%
\path (RRpoint);
\pgfgetlastxy{\macrox}{\macroy}%
- \xdef\tzTANRRX{\xintfloateval{(\ConvertirPtToCm{\macrox})/(\pflxunit)}}%
- \xdef\tzTANRRY{\xintfloateval{(\ConvertirPtToCm{\macroy})/(\pflyunit)}}%
+ \xdef\tzTANRRX{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}%
+ \xdef\tzTANRRY{\xintfloateval{(\ConvertPtToCm{\macroy})/(\pflyunit)}}%
\def\tztangentLFn{(\tzTANRRY-\tzTANLLY)/(\tzTANRRX-\tzTANLLX)*(\x-\tzTANLLX)+\tzTANLLY}%
\begin{scope}
\clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}) ;
- \draw[pfltrait,\pfltgttikzline,domain=\tmptgtdeb:\tmptgtfin,samples=2,#4] plot (\x,{\tztangentLFn}) ;
+ \draw[tkzgrphline,\pfltgttikzline,domain=\tmptgtdeb:\tmptgtfin,samples=2,#4] plot (\x,{\tztangentLFn}) ;
\end{scope}
}%
{%
- \IfStrEq{\pfltgttikzsens}{g}%
+ \IfStrEq{\pfltgttikzsens}{l}%
{%
- \CalculerNbDerive*{#2}{\pfltgttikzx}{\pfltgttikzh}%
+ \CalcDerivate*{#2}{\pfltgttikzx}{\pfltgttikzh}%
}%
{%
- \CalculerNbDerive{#2}{\pfltgttikzx}{\pfltgttikzh}%
+ \CalcDerivate{#2}{\pfltgttikzx}{\pfltgttikzh}%
}%
\begin{scope}
\clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}) ;
- \draw[pfltrait,\pfltgttikzline,#4] plot[smooth] coordinates {%
+ \draw[tkzgrphline,\pfltgttikzline,#4] plot[smooth] coordinates {%
\xintthecoords\xintfloatexpr
seq((x,\TmpResNbDeriv*(x-(\pfltgttikzx))+#2(\pfltgttikzx)),x=\tmptgtdeb,\tmptgtfin)
\relax
};
\end{scope}
}%
- \ifboolKV[GraphiqueTikzTgte]{AffPoint}%
+ \ifboolKV[GraphicTikzTgte]{DispPt}%
{%
- \ifboolKV[GraphiqueTikzTgte]{Spline}%
+ \ifboolKV[GraphicTikzTgte]{Spline}%
{%
- \filldraw[\pfltgttikzpoint] (TANp-1) circle[pflpointc] ;
+ \MarkPts*[Style={\useKV[GraphicTikzTgte]{Style}},Color=\pfltgttikzpoint]{(TANp-1)}
+ %\filldraw[] (TANp-1) circle[tkzgrphpointc] ;
}%
{%
\xdef\tmpimgtgt{\xintfloateval{#2(\pfltgttikzx)}}%
- \filldraw[\pfltgttikzpoint] ({\pfltgttikzx},\tmpimgtgt) circle[pflpointc] ;
+ \MarkPts*[Style={\useKV[GraphicTikzTgte]{Style}},Color=\pfltgttikzpoint]{({\pfltgttikzx},\tmpimgtgt)}
+ %\filldraw[\pfltgttikzpoint] ({\pfltgttikzx},\tmpimgtgt) circle[tkzgrphpointc] ;
}%
}%
{}%
}
+%====loi normale
+\defKV[GraphicTikzGaussienne]{%
+ Step=\def\pflgaussstep{#1},%
+ Name=\def\pflgaussname{#1}
+}
+
+\setKVdefault[GraphicTikzGaussienne]{%
+ Name=gaussian,%
+ Color=black,%
+ Trace=false,%
+ Step={},%
+ Start={\pflxmin},%
+ End={\pflxmax}
+}
+
+\NewDocumentCommand\DefineStandartDeviation{ O{} D<>{phi} m m }{%
+ %1=options
+ %2=mu
+ %3=sigma
+ \restoreKV[GraphicTikzGaussienne]%
+ \setKV[GraphicTikzGaussienne]{#1}%
+ \xintdeffloatfunc #2(x) := 1/((#4)*sqrt(2*pi))*exp(-0.5*((x-(#3))/(#4))^2) ;%
+ \IfStrEq{\pflgaussstep}{}%
+ {%
+ \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphicTikzGaussienne]{End})-(\useKV[GraphicTikzGaussienne]{Start}))/100}}%
+ }%
+ {}%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \ifboolKV[GraphicTikzGaussienne]{Trace}%
+ {%
+ \path[draw,tkzgrphcurve,{\useKV[GraphicTikzGaussienne]{Color}},name path global=\pflgaussname] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphicTikzGaussienne]{Start}}..[\pflgaussstep]..{\useKV[GraphicTikzGaussienne]{End}},{\useKV[GraphicTikzGaussienne]{End}})
+ \relax
+ } ;
+ }%
+ {%
+ \path[draw=none,tkzgrphcurve,name path global=\pflgaussname] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphicTikzGaussienne]{Start}}..[\pflgaussstep]..{\useKV[GraphicTikzGaussienne]{End}},{\useKV[GraphicTikzGaussienne]{End}})
+ \relax
+ } ;
+ }%
+ \end{scope}
+}
+
+\NewDocumentCommand\DrawStandartDeviation{ O{} m }{%
+ %1=options
+ %2=mu
+ %3=sigma
+ \restoreKV[GraphicTikzGaussienne]%
+ \setKV[GraphicTikzGaussienne]{#1}%
+ \IfStrEq{\pflgaussstep}{}%
+ {%
+ \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphicTikzGaussienne]{End})-(\useKV[GraphicTikzGaussienne]{Start}))/100}}%
+ }%
+ {}%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \draw[tkzgrphcurve,{\useKV[GraphicTikzGaussienne]{Color}}] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2),x={\useKV[GraphicTikzGaussienne]{Start}}..[\pflgaussstep]..{\useKV[GraphicTikzGaussienne]{End}},{\useKV[GraphicTikzGaussienne]{End}})
+ \relax
+ } ;
+ \end{scope}
+}
+
+\NewDocumentCommand\DefineKhiSquared{ O{} D<>{khi} m }{%
+ %1=options
+ %2=mu
+ %3=sigma
+ \restoreKV[GraphicTikzGaussienne]%
+ \setKV[GraphicTikzGaussienne]{#1}%
+ \xintdeffloatfunc #2(x) := (x<0)?{0}{(1/(2^((#3)/2)*pflgamma((#3)/2)))*x^((#3)/2-1)*exp(-x/2)};
+ \IfStrEq{\pflgaussstep}{}%
+ {%
+ \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphicTikzGaussienne]{End})-(\useKV[GraphicTikzGaussienne]{Start}))/100}}%
+ }%
+ {}%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \ifboolKV[GraphicTikzGaussienne]{Trace}%
+ {%
+ \path[draw,tkzgrphcurve,{\useKV[GraphicTikzGaussienne]{Color}},name path global=\pflgaussname] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphicTikzGaussienne]{Start}}..[\pflgaussstep]..{\useKV[GraphicTikzGaussienne]{End}},{\useKV[GraphicTikzGaussienne]{End}})
+ \relax
+ } ;
+ }%
+ {%
+ \path[draw=none,tkzgrphcurve,name path global=\pflgaussname] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphicTikzGaussienne]{Start}}..[\pflgaussstep]..{\useKV[GraphicTikzGaussienne]{End}},{\useKV[GraphicTikzGaussienne]{End}})
+ \relax
+ } ;
+ }%
+ \end{scope}
+}
+
+\NewDocumentCommand\DrawKhiSquared{ O{} m }{%
+ %1=options
+ %2=mu
+ %3=sigma
+ \restoreKV[GraphicTikzGaussienne]%
+ \setKV[GraphicTikzGaussienne]{#1}%
+ \IfStrEq{\pflgaussstep}{}%
+ {%
+ \xdef\pflgaussstep{\xintfloateval{((\useKV[GraphicTikzGaussienne]{End})-(\useKV[GraphicTikzGaussienne]{Start}))/100}}%
+ }%
+ {}%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax});
+ \draw[tkzgrphcurve,{\useKV[GraphicTikzGaussienne]{Color}}] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2),x={\useKV[GraphicTikzGaussienne]{Start}}..[\pflgaussstep]..{\useKV[GraphicTikzGaussienne]{End}},{\useKV[GraphicTikzGaussienne]{End}})
+ \relax
+ } ;
+ \end{scope}
+}
+
+%====droite
+\defKV[GraphiquetikzDroite]{%
+ Name=\def\pfldroitename{#1}
+}
+
+\setKVdefault[GraphiquetikzDroite]{%
+ Slope=false,%
+ Color=black,%
+ Start={\pflxmin},%
+ End={\pflxmax},%
+ Name={}
+}
+
+\NewDocumentCommand\DrawLine{ O{} m m D<>{} }{%
+ \restoreKV[GraphiquetikzDroite]%
+ \setKV[GraphiquetikzDroite]{#1}%
+ %1er point
+ \path #2;%
+ \pgfgetlastxy{\macrox}{\macroy}%
+ \xdef\pfldtetikzxA{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}%
+ \xdef\pfldtetikzyA{\xintfloateval{(\ConvertPtToCm{\macroy})/(\pflyunit)}}%
+ %2ème point si besoin
+ \ifboolKV[GraphiquetikzDroite]{Slope}%
+ {%
+ \xdef\pfldtepente{\xintfloateval{#3}}%
+ }%
+ {%
+ \path #3;%
+ \pgfgetlastxy{\macrox}{\macroy}%
+ \xdef\pfldtetikzxB{\xintfloateval{(\ConvertPtToCm{\macrox})/(\pflxunit)}}%
+ \xdef\pfldtetikzyB{\xintfloateval{(\ConvertPtToCm{\macroy})/(\pflyunit)}}%
+ \xdef\pfldtepente{\xintfloateval{(\pfldtetikzyB-\pfldtetikzyA)/(\pfldtetikzxB-\pfldtetikzxA)}}%
+ }%
+ \begin{scope}
+ \clip ({\pflxmin},{\pflymin}) rectangle ({\pflxmax},{\pflymax}) ;
+ \xintifboolexpr{\pfldtetikzxA == \pfldtetikzxB}%
+ {%
+ \IfEq{\pfldroitename}{}%
+ {%
+ \draw[tkzgrphline,{\useKV[GraphiquetikzDroite]{Color}},#4] (\pfldtetikzxA,\pflymin) -- (\pfldtetikzxA,\pflymax) ;
+ }%
+ {%
+ \draw[tkzgrphline,{\useKV[GraphiquetikzDroite]{Color}},#4,name path global=\pfldroitename] (\pfldtetikzxA,\pflymin) -- (\pfldtetikzxA,\pflymax) ;
+ }%
+ }%
+ {%
+ \IfEq{\pfldroitename}{}%
+ {%
+ \draw[tkzgrphline,{\useKV[GraphiquetikzDroite]{Color}},domain={\useKV[GraphiquetikzDroite]{Start}}:{\useKV[GraphiquetikzDroite]{End}},samples=2,#4] plot (\x,{\pfldtepente*(\x-\pfldtetikzxA)+\pfldtetikzyA}) ;
+ }%
+ {%
+ \draw[tkzgrphline,{\useKV[GraphiquetikzDroite]{Color}},domain={\useKV[GraphiquetikzDroite]{Start}}:{\useKV[GraphiquetikzDroite]{End}},samples=2,name path global=\pfldroitename,#4] plot (\x,{\pfldtepente*(\x-\pfldtetikzxA)+\pfldtetikzyA}) ;
+ }%
+ }%
+ \end{scope}
+}
+
+\defKV[GraphicTikzMinMax]{%
+ Pas=\def\pflminmaxstep{#1},%
+ Method=\def\pflminmaxmethode{#1},%
+ Coeffs=\def\pflminmaxcoeffs{#1}
+}
+\setKVdefault[GraphicTikzMinMax]{%
+ Start={\pflxmin},%
+ End={\pflxmax},%
+ Pas={},%
+ Tension=0.5,%
+ Method=function,%
+ Coeffs=3
+}
+
+\NewDocumentCommand\FindMax{ O{} m O{c-max} }{%
+ %1=clés
+ %2=paramètres en fonction de [Methode]
+ \restoreKV[GraphicTikzMinMax]%
+ \setKV[GraphicTikzMinMax]{#1}%
+ \IfStrEq{\pflstepcurve}{}%
+ {%
+ \xdef\pflminmaxstep{\xintfloateval{((\useKV[GraphicTikzMinMax]{End})-(\useKV[GraphicTikzMinMax]{Start}))/100}}%
+ }%
+ {}%
+ \begin{scope}[bezier bounding box,local bounding box=bbtmpmax]
+ \IfStrEq{\pflminmaxmethode}{function}%
+ {%
+ \path[draw=none,name path=curvetmpmax] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphicTikzMinMax]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzMinMax]{End}},{\useKV[GraphicTikzMinMax]{End}})
+ \relax
+ };
+ }%
+ {}%
+ \IfStrEq{\pflminmaxmethode}{interpo}%
+ {%
+ \path[draw=none,name path=curvetmpmax] plot[smooth,tension={\useKV[GraphicTikzMinMax]{Tension}}] coordinates {#2};
+ }%
+ {}%
+ \IfStrEq{\pflminmaxmethode}{spline}%
+ {%
+ \GenerateSpline{#2}{\pflminmaxcoeffs}[\tmpsplineminmax]%
+ \path[draw=none,name path=curvetmpmax] \tmpsplineminmax ;
+ }%
+ {}%
+ %retour
+ \path[name path=tmpmax] ([yshift=-0.25\pgflinewidth]bbtmpmax.north east) -- ([yshift=-0.25\pgflinewidth]bbtmpmax.north west) ;
+ \path[name intersections={of=curvetmpmax and tmpmax,name=#3}] ;
+ \coordinate (#3) at ($0.5*(#3-1)+0.5*(#3-2)+(0,0.25\pgflinewidth)$) ;
+ \end{scope}
+}
+
+\NewDocumentCommand\FindMin{ O{} m O{c-min} }{%
+ %1=clés
+ %2=paramètres en fonction de [Methode]
+ \restoreKV[GraphicTikzMinMax]%
+ \setKV[GraphicTikzMinMax]{#1}%
+ \IfStrEq{\pflstepcurve}{}%
+ {%
+ \xdef\pflminmaxstep{\xintfloateval{((\useKV[GraphicTikzMinMax]{End})-(\useKV[GraphicTikzMinMax]{Start}))/100}}%
+ }%
+ {}%
+ \begin{scope}[bezier bounding box,local bounding box=bbtmpmin]
+ \IfStrEq{\pflminmaxmethode}{function}%
+ {%
+ \path[draw=none,name path=curvetmpmin] plot[smooth] coordinates {%
+ \xintthecoords\xintfloatexpr
+ seq((x,#2(x)),x={\useKV[GraphicTikzMinMax]{Start}}..[\pflstepcurve]..{\useKV[GraphicTikzMinMax]{End}},{\useKV[GraphicTikzMinMax]{End}})
+ \relax
+ };
+ }%
+ {}%
+ \IfStrEq{\pflminmaxmethode}{interpo}%
+ {%
+ \path[draw=none,name path=curvetmpmin] plot[smooth,tension={\useKV[GraphicTikzMinMax]{Tension}}] coordinates {#2};
+ }%
+ {}%
+ \IfStrEq{\pflminmaxmethode}{spline}%
+ {%
+ \GenerateSpline{#2}{\pflminmaxcoeffs}[\tmpsplineminmax]%
+ \path[draw=none,name path=curvetmpmin] \tmpsplineminmax ;
+ }%
+ {}%
+ %retour
+ \path[name path=tmpmin] ([yshift=0.25\pgflinewidth]bbtmpmin.south east) -- ([yshift=0.25\pgflinewidth]bbtmpmin.south west) ;
+ \path[name intersections={of=curvetmpmin and tmpmin,name=#3}] ;
+ \coordinate (#3) at ($0.5*(#3-1)+0.5*(#3-2)+(0,-0.25\pgflinewidth)$) ;
+ \end{scope}
+}
+
+%====TEXTES
+\defKV[GraphicTikzNode]{%
+ Color=\def\pflnodecol{#1},%
+ Font=\def\pflnodefonte{#1},%
+ Position=\def\pfnodepos{#1}
+}
+\setKVdefault[GraphicTikzNode]{%
+ Color=black,%
+ Start={\normalfont\normalsize},%
+ Position={}
+}
+\NewDocumentCommand\DrawTxt{ O{} m m }{%
+ \restoreKV[GraphicTikzNode]%
+ \setKV[GraphicTikzNode]{#1}%
+ \draw #2 node[tkzgrphnode,font=\pflnodefonte,text=\pflnodecol,\pfnodepos] {#3} ;
+}
+
\endinput \ No newline at end of file
diff --git a/graphics/pstricks/contrib/pst-optic/Changes b/graphics/pstricks/contrib/pst-optic/Changes
index 9d04151b68..e51864d848 100644
--- a/graphics/pstricks/contrib/pst-optic/Changes
+++ b/graphics/pstricks/contrib/pst-optic/Changes
@@ -1,4 +1,5 @@
---- pst-optic.tex
+1.04 2024-06-02 - small fixes to code and documentation
1.03 2024-05-17 - small fixes to code and documentation
1.02a 2023-05-07 - fix documentation for \psRefractionRay
1.02 2016-07-10 - added option onlyrays, preset to false
diff --git a/graphics/pstricks/contrib/pst-optic/README b/graphics/pstricks/contrib/pst-optic/README
index 47b0c29eb1..0f33952022 100644
--- a/graphics/pstricks/contrib/pst-optic/README
+++ b/graphics/pstricks/contrib/pst-optic/README
@@ -3,7 +3,7 @@
%% Manuel Luque <Mluque5130@aol.com> (France)
%% Herbert Voss <hvoss@tug.org> (Germany)
%%
-%% 2023-05-07
+%% 2024-06-02
%%
Save the files
@@ -21,5 +21,6 @@ dvips pst-optic-doc.dvi
to get a PostScript file. But pay attention, that the pst-optic
files are saved in the above mentioned way, before you run
-latex on the documentation file.
+latex on the documentation file. Or simply use lualatex to get
+directly the pdf.
diff --git a/graphics/pstricks/contrib/pst-optic/doc/pst-optic-doc.bib b/graphics/pstricks/contrib/pst-optic/doc/pst-optic-doc.bib
index 740cf6db59..6eea964780 100644
--- a/graphics/pstricks/contrib/pst-optic/doc/pst-optic-doc.bib
+++ b/graphics/pstricks/contrib/pst-optic/doc/pst-optic-doc.bib
@@ -96,7 +96,7 @@
@Article{dtk02.1:voss:mathematischen,
- author = {Herbert Voß},
+ author = {Herbert Vo{\ss}},
title = {Die mathematischen {F}unktionen von {P}ostscript},
journal = dtk,
year = 2002,
@@ -105,7 +105,7 @@
altnumber = 14,
month = mar,
pages = {40--47},
- annote = "Bretter, die die Welt bedeuten",
+ annote = bretter,
abstract = { \PS, faktisch genauso alt wie {\TeX}, ist im
Verh{\"a}ltnis dazu allgemein noch weniger bekannt, wenn es
darum geht zu beurteilen, was es denn nun im eigentlichen
@@ -117,3 +117,10 @@
gezeigt. }
}
+@ctan{pstlens:2001,
+ Title = {PST-lens - {\PS} macros for Generic TeX},
+ Author = {Denis Girou and Manuel Luque},
+ url = {/graphics/pstricks/contrib/pst-lens/},
+ year = 2001,
+}
+
diff --git a/graphics/pstricks/contrib/pst-optic/doc/pst-optic-doc.pdf b/graphics/pstricks/contrib/pst-optic/doc/pst-optic-doc.pdf
index 35ec09b5b8..182863a16e 100644
--- a/graphics/pstricks/contrib/pst-optic/doc/pst-optic-doc.pdf
+++ b/graphics/pstricks/contrib/pst-optic/doc/pst-optic-doc.pdf
Binary files differ
diff --git a/graphics/pstricks/contrib/pst-optic/doc/pst-optic-doc.tex b/graphics/pstricks/contrib/pst-optic/doc/pst-optic-doc.tex
index 96ca28bbec..5ec11a0297 100644
--- a/graphics/pstricks/contrib/pst-optic/doc/pst-optic-doc.tex
+++ b/graphics/pstricks/contrib/pst-optic/doc/pst-optic-doc.tex
@@ -1,4 +1,4 @@
-%% $Id: pst-optic-doc.tex 896 2024-05-17 10:13:27Z herbert $
+%% $Id: pst-optic-doc.tex 903 2024-06-02 06:16:43Z herbert $
\DocumentMetadata{}
\documentclass[11pt,english,bibliography=totoc,parskip=false,headings=small,
@@ -132,7 +132,7 @@ There are macros for the convergent and divergent lens
\begin{BDef}
\Lcs{lens}\OptArgs\\
\Lcs{lensCVG} \% \textbf{C}on\textbf{v}er\textbf{g}ent (Collecting lens ) -- default\\
-\Lcs{lensDVG} \% \textbf{D}i\textbf{v}er\textbf{g}ent (Scatter lens )
+\Lcs{lensDVG} \% \textbf{D}i\textbf{v}er\textbf{g}ent (Scatter lens )\\
\Lcs{pslensCVG}\OptArgs \Largb{lens width}\Largb{lens height}\\
\Lcs{pslensDVG}\OptArgs \Largb{lens width}\Largb{lens height}\\
\end{BDef}
@@ -148,7 +148,7 @@ The predefined options for \Lcs{lens} are \texttt{xLeft=-7.5, xRight=7.5, yBotto
\subsection{Short forms}
-The two macros \Lcs{lensCVG} and \Lcs{lensDVG} are only short forms of the main macro \Lcs{lens}
+The two macros \Lcs{lensCVG} and \Lcs{lensDVG} draw some more rays as the main macro \Lcs{lens}
with the setting \Lkeyval{lensType}\texttt{=CVG|DVG}.
The only valid arguments are \Lkeyword{lensScale}, \Lkeyword{lensWidth}, and \Lkeyword{lensHeight},
which must be set by \Lcs{psset}.
@@ -235,16 +235,17 @@ Using \Lcs{lens}\OptArg{\Lkeyword{lensType}=\ldots} gives the in figures \ref{fi
Lense width in cm & \Lkeyword{lensWidth} & 0.5cm\footnotemark\\
vertical scale (obsolet) & \Lkeyword{lensScale} & 1\\
View the lens & \Lkeyword{lensGlass} & \true\\
- show onyl the rays & \Lkeyword{onlyrays} & \false\\
+ show only the rays & \Lkeyword{onlyrays} & \false\\
Second lens & \Lkeyword{lensTwo} & \false\\
Focus in cm & \Lkeyword{focus} & 2\\
- Distance $\mathrm{\overline{OA}}$& \Lkeyword{OA} & -4\\
- Distance $\mathrm{\overline{AB}}$& \Lkeyword{AB} & 1.5\\
- Lens color & \Lkeyword{lenscolor} & \black\\
- Arrow length in cm & \Lkeyword{lensarrowsize} & 0.2\\
- Arrow inset in cm & \Lkeyword{lensarrowinset} & 0.5\\
+ Distance $\mathrm{\overline{OA}}$& \Lkeyword{OA} & -3\\
+ Distance $\mathrm{\overline{AB}}$& \Lkeyword{AB} & 1\\
+ Lens color & \Lkeyword{lenscolor}\footnotemark & \black\\
+ Arrow length in cm & \Lkeyword{lensArrowSize}${}^2$ & 0.2\\
+ Arrow inset in cm & \Lkeyword{lensArrowInset}${}^2$ & 0.5\\
\end{tabular}
\footnotetext{\textsuperscript{1} only for \Lkeyset{lensGlass=true}, otherwise set to \texttt{2\textbackslash pslinewidth}}
+\footnotetext{\textsuperscript{2} only for \Lkeyset{lensGlass=false}}
\end{minipage}
\end{table}
diff --git a/graphics/pstricks/contrib/pst-optic/tex/pst-optic.tex b/graphics/pstricks/contrib/pst-optic/tex/pst-optic.tex
index f145993fc6..0c06f849b3 100644
--- a/graphics/pstricks/contrib/pst-optic/tex/pst-optic.tex
+++ b/graphics/pstricks/contrib/pst-optic/tex/pst-optic.tex
@@ -1,4 +1,4 @@
-%%%% $Id: pst-optic.tex 896 2024-05-17 10:13:27Z herbert $
+%%%% $Id: pst-optic.tex 903 2024-06-02 06:16:43Z herbert $
%% This is file `pst-optic.tex',
%%
%% IMPORTANT NOTICE:
@@ -8,7 +8,7 @@
%% Manuel Luque <Mluque5130@aol.com> (France)
%% Herbert Voss <hvoss@tug.org> (Germany)
%%
-%% 2024-05-17
+%% 2024-06-02
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN archives
@@ -30,8 +30,8 @@
\ifx\PSTMultidoLoaded\endinput\else\input multido.tex\fi
\ifx\PSTXKeyLoaded\endinput\else \input pst-xkey\fi
%
-\def\fileversion{1.03}
-\def\filedate{2024/05/17}
+\def\fileversion{1.04}
+\def\filedate{2024/06/02}
\message{`PST-Optic' v\fileversion, \filedate\space (Manuel Luque and Herbert Voss)}
%
\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax
@@ -798,13 +798,19 @@
\begingroup%
\ifPst@lensGlass
\rput(! XO YO){%
- \ifx\psk@optic@lensType\lensTypeCVG\lensCVG%
- \else\ifx\psk@optic@lensType\lensTypePCVG\lensCVG
- \else\lensDVG\fi\fi}%
- \else%
- \ifx\psk@optic@lensType\lensTypeDVG\psset{arrows=>-<}\else
- \ifx\psk@optic@lensType\lensTypePDVG\psset{arrows=>-<}\else\psset{arrows=<->}
- \fi\fi
+ \ifx\psk@optic@lensType\lensTypeCVG \lensCVG%
+ \else\ifx\psk@optic@lensType\lensTypePCVG \lensCVG
+ \else\lensDVG
+ \fi\fi}%
+ \else
+ \ifx\psk@optic@lensType\lensTypeDVG
+ \psset{arrows=>-<}
+ \else
+ \ifx\psk@optic@lensType\lensTypePDVG
+ \psset{arrows=>-<}%
+ \else
+ \psset{arrows=<->}%
+ \fi\fi
\psline[linecolor=\psk@optic@lensColor,
linewidth=\psk@optic@lensWidth,arrowsize=\psk@optic@lensArrowSize,
arrowinset=\psk@optic@lensArrowInset]%