summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-06-04 03:02:48 +0000
committerNorbert Preining <norbert@preining.info>2021-06-04 03:02:48 +0000
commita5ae129f3aa3a3a0aeaa21c55b75a1d543fe4111 (patch)
treefe5e1e212aec203e668df8581a17374cdde352a1
parentd231c6331f53a048d29c2f847254a9f56d5ee2dd (diff)
CTAN sync 202106040302
-rw-r--r--FILES.byname2589
-rw-r--r--FILES.byname.gzbin2317277 -> 2318051 bytes
-rw-r--r--FILES.last07days1645
-rw-r--r--fonts/newtx/README6
-rw-r--r--fonts/newtx/tex/newtxmath.sty10
-rw-r--r--fonts/newtx/tfm/ntxmi05.tfmbin3296 -> 3312 bytes
-rw-r--r--fonts/newtx/tfm/ntxmi07.tfmbin3316 -> 3336 bytes
-rw-r--r--fonts/newtx/tfm/ntxmi15.tfmbin3304 -> 3320 bytes
-rw-r--r--fonts/newtx/tfm/ntxmi17.tfmbin3320 -> 3340 bytes
-rw-r--r--fonts/newtx/tfm/ntxmi5.tfmbin3296 -> 3308 bytes
-rw-r--r--fonts/newtx/tfm/ntxmi7.tfmbin3316 -> 3332 bytes
-rw-r--r--fonts/newtx/vf/ntxmi05.vfbin2588 -> 2576 bytes
-rw-r--r--fonts/newtx/vf/ntxmi07.vfbin2588 -> 2576 bytes
-rw-r--r--fonts/newtx/vf/ntxmi15.vfbin2588 -> 2576 bytes
-rw-r--r--fonts/newtx/vf/ntxmi17.vfbin2588 -> 2576 bytes
-rw-r--r--fonts/newtx/vf/ntxmi5.vfbin2580 -> 2576 bytes
-rw-r--r--fonts/newtx/vf/ntxmi7.vfbin2580 -> 2576 bytes
-rw-r--r--graphics/circuit_macros/CHANGES5
-rw-r--r--graphics/circuit_macros/Copying2
-rw-r--r--graphics/circuit_macros/README17
-rw-r--r--graphics/circuit_macros/darrow.m42
-rw-r--r--graphics/circuit_macros/doc/CapacitorsMan.m441
-rw-r--r--graphics/circuit_macros/doc/Capture.JPGbin25460 -> 0 bytes
-rw-r--r--graphics/circuit_macros/doc/CctTable.tex858
-rw-r--r--graphics/circuit_macros/doc/CctTableMan.m492
-rw-r--r--graphics/circuit_macros/doc/Circuit_macros.bib9
-rw-r--r--graphics/circuit_macros/doc/Circuit_macros.pdfbin973887 -> 973559 bytes
-rw-r--r--graphics/circuit_macros/doc/Circuit_macros.tex11
-rw-r--r--graphics/circuit_macros/doc/InductorsMan.m447
-rw-r--r--graphics/circuit_macros/doc/Makefile22
-rw-r--r--graphics/circuit_macros/doc/MoreTableMan.m436
-rw-r--r--graphics/circuit_macros/doc/Oblique.m44
-rw-r--r--graphics/circuit_macros/doc/ResistorsMan.m430
-rw-r--r--graphics/circuit_macros/doc/SourcesMan.m47
-rw-r--r--graphics/circuit_macros/doc/SwitchesMan.m435
-rw-r--r--graphics/circuit_macros/doc/VariableMan.m417
-rw-r--r--graphics/circuit_macros/doc/Version.tex2
-rw-r--r--graphics/circuit_macros/doc/body.tex635
-rw-r--r--graphics/circuit_macros/doc/currents.m44
-rw-r--r--graphics/circuit_macros/doc/defines.tex762
-rw-r--r--graphics/circuit_macros/doc/fetMan.m4185
-rw-r--r--graphics/circuit_macros/doc/oax.m45
-rw-r--r--graphics/circuit_macros/doc/opampex.m45
-rw-r--r--graphics/circuit_macros/doc/opampexbody.m4 (renamed from graphics/circuit_macros/doc/oaxbody.m4)0
-rw-r--r--graphics/circuit_macros/doc/relaycoilMan.m47
-rw-r--r--graphics/circuit_macros/dpictools.pic6
-rw-r--r--graphics/circuit_macros/examples/AntiqueClock.m4149
-rw-r--r--graphics/circuit_macros/examples/ArrowFn.m455
-rw-r--r--graphics/circuit_macros/examples/Ball.m440
-rw-r--r--graphics/circuit_macros/examples/Buttons.m41
-rw-r--r--graphics/circuit_macros/examples/Capacitors.m438
-rw-r--r--graphics/circuit_macros/examples/CctTable.m493
-rw-r--r--graphics/circuit_macros/examples/Chips.m445
-rw-r--r--graphics/circuit_macros/examples/Chuck.m42
-rw-r--r--graphics/circuit_macros/examples/Conn.m41
-rw-r--r--graphics/circuit_macros/examples/Connectors.m43
-rw-r--r--graphics/circuit_macros/examples/Cruller.m48
-rw-r--r--graphics/circuit_macros/examples/Dini.m420
-rw-r--r--graphics/circuit_macros/examples/Escher.m4185
-rw-r--r--graphics/circuit_macros/examples/Euro.m411
-rw-r--r--graphics/circuit_macros/examples/Geometry.m432
-rw-r--r--graphics/circuit_macros/examples/Heathkit.m44
-rw-r--r--graphics/circuit_macros/examples/Inductors.m447
-rw-r--r--graphics/circuit_macros/examples/Lyap.m430
-rw-r--r--graphics/circuit_macros/examples/Makefile250
-rw-r--r--graphics/circuit_macros/examples/MoreTable.m436
-rw-r--r--graphics/circuit_macros/examples/Orbits.m42
-rw-r--r--graphics/circuit_macros/examples/Planes.m48
-rw-r--r--graphics/circuit_macros/examples/Plate.m4 (renamed from graphics/circuit_macros/examples/svg/Y14-5SVG.m4)5
-rw-r--r--graphics/circuit_macros/examples/README-examples4
-rw-r--r--graphics/circuit_macros/examples/Resistors.m430
-rw-r--r--graphics/circuit_macros/examples/control.m493
-rw-r--r--graphics/circuit_macros/examples/csc.m4172
-rw-r--r--graphics/circuit_macros/examples/examples.pdfbin876504 -> 893291 bytes
-rw-r--r--graphics/circuit_macros/examples/examples.tex21
-rw-r--r--graphics/circuit_macros/examples/exp.m494
-rw-r--r--graphics/circuit_macros/examples/fet.m4183
-rw-r--r--graphics/circuit_macros/examples/files.tex47
-rw-r--r--graphics/circuit_macros/examples/graysurf.m458
-rw-r--r--graphics/circuit_macros/examples/ics.m4112
-rw-r--r--graphics/circuit_macros/examples/lcct.m41
-rw-r--r--graphics/circuit_macros/examples/mf/cct.mf812
-rw-r--r--graphics/circuit_macros/examples/mf/cct.tfmbin776 -> 764 bytes
-rw-r--r--graphics/circuit_macros/examples/person.m45
-rw-r--r--graphics/circuit_macros/examples/relaycoil.m47
-rw-r--r--graphics/circuit_macros/examples/shapes.m422
-rw-r--r--graphics/circuit_macros/examples/svg/AlogixSVG.m46
-rw-r--r--graphics/circuit_macros/examples/svg/AntiqueClockSVG.m4156
-rw-r--r--graphics/circuit_macros/examples/svg/ArrowFnSVG.m459
-rw-r--r--graphics/circuit_macros/examples/svg/BtreeSVG.m48
-rw-r--r--graphics/circuit_macros/examples/svg/CapacitorsSVG.m438
-rw-r--r--graphics/circuit_macros/examples/svg/ChipsSVG.m444
-rw-r--r--graphics/circuit_macros/examples/svg/CrossbarSVG.m454
-rw-r--r--graphics/circuit_macros/examples/svg/CrullerSVG.m48
-rw-r--r--graphics/circuit_macros/examples/svg/DiniSVG.m420
-rw-r--r--graphics/circuit_macros/examples/svg/EEPSVG.m4553
-rw-r--r--graphics/circuit_macros/examples/svg/EscherSVG.m4188
-rw-r--r--graphics/circuit_macros/examples/svg/GeometrySVG.m4164
-rw-r--r--graphics/circuit_macros/examples/svg/GrayCodeSVG.m459
-rw-r--r--graphics/circuit_macros/examples/svg/InductorsSVG.m447
-rw-r--r--graphics/circuit_macros/examples/svg/LyapSVG.m4159
-rw-r--r--graphics/circuit_macros/examples/svg/Makefile37
-rw-r--r--graphics/circuit_macros/examples/svg/MoreTableSVG.m441
-rw-r--r--graphics/circuit_macros/examples/svg/MultiplexerSVG.m41
-rw-r--r--graphics/circuit_macros/examples/svg/PlateSVG.m4173
-rw-r--r--graphics/circuit_macros/examples/svg/PushPullSVG.m42
-rw-r--r--graphics/circuit_macros/examples/svg/ResistorsSVG.m434
-rw-r--r--graphics/circuit_macros/examples/svg/ShiftRSVG.m47
-rw-r--r--graphics/circuit_macros/examples/svg/TTLnandSVG.m43
-rw-r--r--graphics/circuit_macros/examples/svg/UNO.m4265
-rw-r--r--graphics/circuit_macros/examples/svg/UNOSVG.m44
-rw-r--r--graphics/circuit_macros/examples/svg/WindingsSVG.m42
-rw-r--r--graphics/circuit_macros/examples/svg/controlSVG.m4217
-rw-r--r--graphics/circuit_macros/examples/svg/cscSVG.m4175
-rw-r--r--graphics/circuit_macros/examples/svg/ex21SVG.m45
-rw-r--r--graphics/circuit_macros/examples/svg/examplesSVG.htmx64
-rw-r--r--graphics/circuit_macros/examples/svg/expSVG.m494
-rw-r--r--graphics/circuit_macros/examples/svg/fetSVG.m4208
-rw-r--r--graphics/circuit_macros/examples/svg/graysurfSVG.m458
-rw-r--r--graphics/circuit_macros/examples/svg/icsSVG.m4193
-rw-r--r--graphics/circuit_macros/examples/svg/paletteSVG.m412
-rw-r--r--graphics/circuit_macros/examples/svg/roseSVG.m439
-rw-r--r--graphics/circuit_macros/examples/svg/shapesSVG.m424
-rw-r--r--graphics/circuit_macros/examples/svg/sldtestsSVG.m4104
-rw-r--r--graphics/circuit_macros/examples/svg/tstSVG.htmx6
-rw-r--r--graphics/circuit_macros/examples/tikz.tex15
-rw-r--r--graphics/circuit_macros/examples/tst.tex33
-rw-r--r--graphics/circuit_macros/examples/tsttikz.tex19
-rw-r--r--graphics/circuit_macros/examples/venus.m473
-rw-r--r--graphics/circuit_macros/examples/xfig/xfiglib.fig60
-rw-r--r--graphics/circuit_macros/gpic.m42
-rw-r--r--graphics/circuit_macros/lib3D.m4125
-rw-r--r--graphics/circuit_macros/libcct.m4449
-rw-r--r--graphics/circuit_macros/libgen.m4184
-rw-r--r--graphics/circuit_macros/liblog.m46
-rw-r--r--graphics/circuit_macros/mfpic.m42
-rw-r--r--graphics/circuit_macros/mpost.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.m440
-rw-r--r--graphics/circuit_macros/xfig.m42
-rw-r--r--info/dtk-bibliography/README.md2
-rw-r--r--info/dtk-bibliography/dtk-bibliography.bib137
-rw-r--r--info/dtk-bibliography/dtk-bibliography.pdfbin365686 -> 366387 bytes
-rw-r--r--info/tex-nutshell/tex-nutshell.pdfbin236470 -> 258588 bytes
-rw-r--r--info/tex-nutshell/tex-nutshell.tex106
-rw-r--r--language/japanese/uplatex/LICENSE2
-rw-r--r--language/japanese/uplatex/Makefile79
-rw-r--r--language/japanese/uplatex/README.md2
-rw-r--r--language/japanese/uplatex/ukinsoku.dtx10
-rw-r--r--language/japanese/uplatex/uplatex-en.pdfbin113178 -> 113529 bytes
-rw-r--r--language/japanese/uplatex/uplatex.dtx30
-rw-r--r--language/japanese/uplatex/uplatex.pdfbin190137 -> 191844 bytes
-rw-r--r--language/japanese/uplatex/upldoc.pdfbin473882 -> 473667 bytes
-rw-r--r--macros/generic/expkv-cs/README.md2
-rw-r--r--macros/generic/expkv-cs/expkv-cs.dtx47
-rw-r--r--macros/generic/expkv-cs/expkv-cs.pdfbin363784 -> 361934 bytes
-rw-r--r--macros/generic/expkv/README.md2
-rw-r--r--macros/generic/expkv/expkv.dtx68
-rw-r--r--macros/generic/expkv/expkv.pdfbin481077 -> 480586 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/README.md2
-rw-r--r--macros/latex/contrib/bjfuthesis/bjfuthesis.cls2
-rw-r--r--macros/latex/contrib/bjfuthesis/example/contents/abstract.tex4
-rw-r--r--macros/latex/contrib/bjfuthesis/example/contents/acknowledge.tex2
-rw-r--r--macros/latex/contrib/bjfuthesis/example/contents/mainbody.tex374
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/admin-knowledge-graph.pngbin0 -> 445624 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/admin-movie.pngbin78535 -> 88861 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/admin-navigation.pngbin0 -> 180215 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/anonymous-category.pngbin459450 -> 716372 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/anonymous-details.pngbin537913 -> 545274 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/anonymous-index.pngbin601638 -> 762316 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/anonymous-search.pngbin0 -> 515568 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/general-details.pngbin485746 -> 503309 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/illustration-of-ripple-sets.pngbin176707 -> 181066 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/jwt.pdfbin65241 -> 41248 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/recommendation-procedure.pdfbin64728 -> 42328 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/sign-up.pngbin215155 -> 0 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/figures/use-case.pdfbin36761 -> 32548 bytes
-rw-r--r--macros/latex/contrib/bjfuthesis/example/thesis.pdfbin3700466 -> 4808696 bytes
-rw-r--r--macros/latex/contrib/derivative/README.md2
-rw-r--r--macros/latex/contrib/derivative/derivative.pdfbin179298 -> 180462 bytes
-rw-r--r--macros/latex/contrib/derivative/derivative.sty123
-rw-r--r--macros/latex/contrib/derivative/derivative.tex157
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx150
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin315453 -> 315318 bytes
-rw-r--r--macros/latex/contrib/ocgx2/ChangeLog9
-rw-r--r--macros/latex/contrib/ocgx2/ocgbase.sty387
-rw-r--r--macros/latex/contrib/ocgx2/ocgx2.sty1509
-rw-r--r--macros/latex/contrib/tuda-ci/README.md4
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdfbin574086 -> 574086 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdfbin622116 -> 622116 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdfbin594960 -> 594959 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdfbin583234 -> 583234 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdfbin589930 -> 590183 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdfbin655441 -> 655529 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdfbin558963 -> 558963 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdfbin682564 -> 682661 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdfbin550551 -> 550646 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdfbin586895 -> 586895 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdfbin647234 -> 647323 bytes
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudabeamer.cls10
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudacolors.def6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudacolors.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaexercise.cls12
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudafonts.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaletter.cls6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudaposter.cls8
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudapub.cls12
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudarules.sty6
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudasciposter.cls10
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo2
-rw-r--r--macros/latex/contrib/tuda-ci/tex/tudathesis.cfg6
-rw-r--r--macros/optex/README10
-rw-r--r--macros/optex/base/alloc.opm2
-rw-r--r--macros/optex/base/basic-macros.opm7
-rw-r--r--macros/optex/base/cite-bib.opm4
-rw-r--r--macros/optex/base/colors.opm30
-rw-r--r--macros/optex/base/doc.opm150
-rw-r--r--macros/optex/base/f-erewhon.opm31
-rw-r--r--macros/optex/base/f-heros.opm7
-rw-r--r--macros/optex/base/f-lmfonts.opm2
-rw-r--r--macros/optex/base/fams-ini.opm5
-rw-r--r--macros/optex/base/fnotes.opm2
-rw-r--r--macros/optex/base/fonts-opmac.opm2
-rw-r--r--macros/optex/base/fonts-preload.opm2
-rw-r--r--macros/optex/base/fonts-resize.opm151
-rw-r--r--macros/optex/base/fonts-select.opm314
-rw-r--r--macros/optex/base/hyperlinks.opm203
-rw-r--r--macros/optex/base/languages.opm7
-rw-r--r--macros/optex/base/makeindex.opm2
-rw-r--r--macros/optex/base/math-macros.opm1
-rw-r--r--macros/optex/base/multicolumns.opm9
-rw-r--r--macros/optex/base/optex.ini2
-rw-r--r--macros/optex/base/optex.lua2
-rw-r--r--macros/optex/base/styles.opm62
-rw-r--r--macros/optex/base/table.opm94
-rw-r--r--macros/optex/base/usebib.opm5
-rw-r--r--macros/optex/doc/mte-doc.tex26
-rw-r--r--macros/optex/doc/optex-doc.pdfbin1405606 -> 1383214 bytes
-rw-r--r--macros/optex/doc/optex-doc.tex11
-rw-r--r--macros/optex/doc/optex-techdoc.tex6
-rw-r--r--macros/optex/doc/optex-userdoc.tex12
-rw-r--r--macros/optex/pkg/emoji.opm4
-rw-r--r--macros/optex/pkg/mte.opm685
-rw-r--r--macros/optex/pkg/vlna.opm4
-rw-r--r--support/TeX4ht/source/tex4ht-html4.tex42
-rw-r--r--support/texlab/CHANGELOG.md18
-rw-r--r--support/texlab/Cargo.lock33
-rw-r--r--support/texlab/Cargo.toml22
-rw-r--r--support/texlab/README.md5
-rw-r--r--support/texlab/docs/options.md36
-rw-r--r--support/texlab/src/citation.rs2
-rw-r--r--support/texlab/src/diagnostics/bibtex.rs12
-rw-r--r--support/texlab/src/diagnostics/latex.rs22
-rw-r--r--support/texlab/src/features/completion.rs36
-rw-r--r--support/texlab/src/features/completion/acronym_ref.rs16
-rw-r--r--support/texlab/src/features/completion/citation.rs74
-rw-r--r--support/texlab/src/features/completion/color.rs11
-rw-r--r--support/texlab/src/features/completion/color_model.rs31
-rw-r--r--support/texlab/src/features/completion/component_environment.rs20
-rw-r--r--support/texlab/src/features/completion/field.rs2
-rw-r--r--support/texlab/src/features/completion/glossary_ref.rs18
-rw-r--r--support/texlab/src/features/completion/import.rs13
-rw-r--r--support/texlab/src/features/completion/include.rs11
-rw-r--r--support/texlab/src/features/completion/label.rs60
-rw-r--r--support/texlab/src/features/completion/theorem.rs21
-rw-r--r--support/texlab/src/features/completion/tikz_library.rs12
-rw-r--r--support/texlab/src/features/completion/types.rs8
-rw-r--r--support/texlab/src/features/completion/user_environment.rs21
-rw-r--r--support/texlab/src/features/cursor.rs110
-rw-r--r--support/texlab/src/features/definition/entry.rs12
-rw-r--r--support/texlab/src/features/definition/label.rs13
-rw-r--r--support/texlab/src/features/formatting.rs6
-rw-r--r--support/texlab/src/features/formatting/bibtex_internal.rs2
-rw-r--r--support/texlab/src/features/formatting/latexindent.rs96
-rw-r--r--support/texlab/src/features/highlight.rs7
-rw-r--r--support/texlab/src/features/highlight/label.rs61
-rw-r--r--support/texlab/src/features/hover/label.rs4
-rw-r--r--support/texlab/src/features/reference/entry.rs10
-rw-r--r--support/texlab/src/features/reference/label.rs2
-rw-r--r--support/texlab/src/features/rename/entry.rs35
-rw-r--r--support/texlab/src/features/rename/label.rs37
-rw-r--r--support/texlab/src/features/symbol/bibtex.rs4
-rw-r--r--support/texlab/src/features/symbol/latex.rs22
-rw-r--r--support/texlab/src/label.rs13
-rw-r--r--support/texlab/src/line_index.rs2
-rw-r--r--support/texlab/src/line_index_ext.rs2
-rw-r--r--support/texlab/src/options.rs28
-rw-r--r--support/texlab/src/syntax/bibtex/cst.rs36
-rw-r--r--support/texlab/src/syntax/bibtex/kind.rs1
-rw-r--r--support/texlab/src/syntax/bibtex/parser.rs14
-rw-r--r--support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_complete_parens.snap3
-rw-r--r--support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields.snap3
-rw-r--r--support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields_missing_comma.snap3
-rw-r--r--support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field.snap3
-rw-r--r--support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_number_key.snap3
-rw-r--r--support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_trailing_comma.snap3
-rw-r--r--support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields.snap3
-rw-r--r--support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields_incomplete.snap3
-rw-r--r--support/texlab/src/syntax/latex/analysis/environment.rs2
-rw-r--r--support/texlab/src/syntax/latex/analysis/explicit_link.rs20
-rw-r--r--support/texlab/src/syntax/latex/analysis/label_name.rs24
-rw-r--r--support/texlab/src/syntax/latex/analysis/label_number.rs2
-rw-r--r--support/texlab/src/syntax/latex/analysis/theorem.rs2
-rw-r--r--support/texlab/src/syntax/latex/analysis/types.rs6
-rw-r--r--support/texlab/src/syntax/latex/cst.rs52
-rw-r--r--support/texlab/src/syntax/latex/parser.rs108
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acronym_declaration.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_options.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_options.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_options.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__bibtex_include_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_figure.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_missing_brace.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_multiple_keys.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote_postnote.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_redundant_comma.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_star.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_options.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_definition_simple.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_reference_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error1.snap15
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error2.snap9
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error3.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_simple.snap18
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_definition.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested.snap12
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested_missing_braces.snap31
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_simple.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_label_reference_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_begin.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_end.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_definition_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_options.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_options.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_incomplete.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_simple.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_options.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_definition_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_number.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_multiple.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_error.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_incomplete.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_simple.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_include_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_input_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_multiple.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_options.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__pgf_library_import_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_enum_item.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_options.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_full.snap9
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_counter.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description_and_counter.snap6
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_only_name.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__tikz_library_import_simple.snap3
-rw-r--r--support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__verbatim_include_simple.snap3
-rw-r--r--support/texlab/tests/integration/completion.rs34
-rw-r--r--support/texlab/tests/integration/snapshots/integration__completion__latex__citation_multi_word.snap34
-rw-r--r--support/texlab/texlab.pdfbin84894 -> 26161 bytes
-rw-r--r--support/texlab/texlab.tex78
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl4
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb338
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.md52
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha5122
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc14
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2309948 -> 2310352 bytes
-rw-r--r--systems/win32/miktex/tm/packages/files.csv.lzmabin579430 -> 577467 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/files.csv.lzmabin579539 -> 576903 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini10
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini12
-rw-r--r--systems/win32/w32tex/ChangeLog42
-rw-r--r--timestamp2
418 files changed, 13921 insertions, 7717 deletions
diff --git a/FILES.byname b/FILES.byname
index fcb23df541..2cc00703c6 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -1903,7 +1903,7 @@
1989/12/11 | 6196 | biblio/tib/tib.man
1989/03/29 | 23265 | biblio/tib/vitaMake
2005/12/15 | 366385 | biblio/tib.zip
-2021/06/01 | 16673 | CTAN.sites
+2021/06/03 | 16796 | CTAN.sites
1990/10/03 | 5032 | dviware/beebe/00readme.txt
1990/10/03 | 479 | dviware/beebe/doc/00dir.cmd
1990/10/03 | 1209 | dviware/beebe/doc/00dir.lst
@@ -5087,7 +5087,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2021/06/02 | 167179 | FILES.last07days
+2021/06/03 | 160161 | FILES.last07days
2020/08/14 | 104065 | fonts/academicons/academicons.pdf
2020/08/14 | 17247 | fonts/academicons/academicons.sty
2020/08/14 | 6546 | fonts/academicons/academicons.tex
@@ -81984,7 +81984,7 @@
2020/02/29 | 179548 | fonts/newtx/opentype/TeXGyreTermesX-Bold.otf
2020/02/29 | 186612 | fonts/newtx/opentype/TeXGyreTermesX-Italic.otf
2020/03/01 | 185476 | fonts/newtx/opentype/TeXGyreTermesX-Regular.otf
-2021/06/01 | 38874 | fonts/newtx/README
+2021/06/02 | 39092 | fonts/newtx/README
2018/06/07 | 312975 | fonts/newtxsf/doc/newtxsf-doc.pdf
2018/06/07 | 6059 | fonts/newtxsf/doc/newtxsf-doc.tex
2014/09/30 | 43780 | fonts/newtxsf/doc/OFL-FAQ.txt
@@ -82027,7 +82027,7 @@
2012/05/01 | 1516 | fonts/newtx/tex/ly1ntxtt.fd
2019/10/01 | 164 | fonts/newtx/tex/newtx-ebgaramond-subs.tex
2019/10/01 | 149 | fonts/newtx/tex/newtx-libertine-subs.tex
-2021/03/27 | 135953 | fonts/newtx/tex/newtxmath.sty
+2021/06/02 | 136037 | fonts/newtx/tex/newtxmath.sty
2020/12/19 | 144 | fonts/newtx/tex/newtx-subs.tex
2021/05/25 | 11425 | fonts/newtx/tex/newtxtext.sty
2019/10/23 | 818 | fonts/newtx/tex/omlntxebgmi.fd
@@ -82135,19 +82135,19 @@
2013/05/26 | 816 | fonts/newtx/tfm/ntxbexmods.tfm
2013/05/26 | 1176 | fonts/newtx/tfm/ntxbex.tfm
2021/03/21 | 1784 | fonts/newtx/tfm/ntxbexx.tfm
-2021/06/01 | 1904 | fonts/newtx/tfm/ntxbmi05.tfm
-2021/06/01 | 3332 | fonts/newtx/tfm/ntxbmi07.tfm
-2021/06/01 | 4176 | fonts/newtx/tfm/ntxbmi0.tfm
-2021/06/01 | 3380 | fonts/newtx/tfm/ntxbmi15.tfm
-2021/06/01 | 3340 | fonts/newtx/tfm/ntxbmi17.tfm
-2021/06/01 | 4184 | fonts/newtx/tfm/ntxbmi1.tfm
+2021/06/02 | 1904 | fonts/newtx/tfm/ntxbmi05.tfm
+2021/06/02 | 3332 | fonts/newtx/tfm/ntxbmi07.tfm
+2021/06/02 | 4176 | fonts/newtx/tfm/ntxbmi0.tfm
+2021/06/02 | 3380 | fonts/newtx/tfm/ntxbmi15.tfm
+2021/06/02 | 3340 | fonts/newtx/tfm/ntxbmi17.tfm
+2021/06/02 | 4184 | fonts/newtx/tfm/ntxbmi1.tfm
2013/02/14 | 2292 | fonts/newtx/tfm/ntxbmi1x.tfm
-2021/06/01 | 3376 | fonts/newtx/tfm/ntxbmi5.tfm
-2021/06/01 | 3336 | fonts/newtx/tfm/ntxbmi7.tfm
+2021/06/02 | 3376 | fonts/newtx/tfm/ntxbmi5.tfm
+2021/06/02 | 3336 | fonts/newtx/tfm/ntxbmi7.tfm
2012/05/04 | 2400 | fonts/newtx/tfm/ntxbmial1.tfm
2012/05/04 | 2424 | fonts/newtx/tfm/ntxbmials.tfm
2021/03/21 | 2656 | fonts/newtx/tfm/ntxbmia.tfm
-2021/06/01 | 4168 | fonts/newtx/tfm/ntxbmi.tfm
+2021/06/02 | 4168 | fonts/newtx/tfm/ntxbmi.tfm
2020/11/03 | 7232 | fonts/newtx/tfm/ntx-BoldItalic-lf-ly1.tfm
2019/10/29 | 3124 | fonts/newtx/tfm/ntx-BoldItalic-lf-ot1r.tfm
2020/11/03 | 3112 | fonts/newtx/tfm/ntx-BoldItalic-lf-ot1.tfm
@@ -82284,16 +82284,16 @@
2020/11/03 | 3428 | fonts/newtx/tfm/ntx-Italic-tosf-sc-ot1.tfm
2020/11/03 | 12552 | fonts/newtx/tfm/ntx-Italic-tosf-sc-t1.tfm
2020/11/03 | 11252 | fonts/newtx/tfm/ntx-Italic-tosf-t1.tfm
-2021/06/01 | 3296 | fonts/newtx/tfm/ntxmi05.tfm
-2021/06/01 | 3316 | fonts/newtx/tfm/ntxmi07.tfm
-2021/06/01 | 4180 | fonts/newtx/tfm/ntxmi0.tfm
-2021/06/01 | 3304 | fonts/newtx/tfm/ntxmi15.tfm
-2021/06/01 | 3320 | fonts/newtx/tfm/ntxmi17.tfm
-2021/06/01 | 4176 | fonts/newtx/tfm/ntxmi1.tfm
-2021/06/01 | 3296 | fonts/newtx/tfm/ntxmi5.tfm
-2021/06/01 | 3316 | fonts/newtx/tfm/ntxmi7.tfm
+2021/06/02 | 3312 | fonts/newtx/tfm/ntxmi05.tfm
+2021/06/02 | 3336 | fonts/newtx/tfm/ntxmi07.tfm
+2021/06/02 | 4180 | fonts/newtx/tfm/ntxmi0.tfm
+2021/06/02 | 3320 | fonts/newtx/tfm/ntxmi15.tfm
+2021/06/02 | 3340 | fonts/newtx/tfm/ntxmi17.tfm
+2021/06/02 | 4176 | fonts/newtx/tfm/ntxmi1.tfm
+2021/06/02 | 3308 | fonts/newtx/tfm/ntxmi5.tfm
+2021/06/02 | 3332 | fonts/newtx/tfm/ntxmi7.tfm
2021/03/21 | 2640 | fonts/newtx/tfm/ntxmia.tfm
-2021/06/01 | 4172 | fonts/newtx/tfm/ntxmi.tfm
+2021/06/02 | 4172 | fonts/newtx/tfm/ntxmi.tfm
2020/11/03 | 7276 | fonts/newtx/tfm/ntx-Regular-lf-ly1.tfm
2020/11/03 | 3040 | fonts/newtx/tfm/ntx-Regular-lf-ot1r.tfm
2020/11/03 | 3044 | fonts/newtx/tfm/ntx-Regular-lf-ot1.tfm
@@ -82751,17 +82751,17 @@
2020/05/18 | 580 | fonts/newtx/vf/ntxbexa.vf
2013/05/26 | 1072 | fonts/newtx/vf/ntxbex.vf
2021/03/21 | 1620 | fonts/newtx/vf/ntxbexx.vf
-2021/06/01 | 1828 | fonts/newtx/vf/ntxbmi05.vf
-2021/06/01 | 2704 | fonts/newtx/vf/ntxbmi07.vf
-2021/06/01 | 2740 | fonts/newtx/vf/ntxbmi0.vf
-2021/06/01 | 2708 | fonts/newtx/vf/ntxbmi15.vf
-2021/06/01 | 2708 | fonts/newtx/vf/ntxbmi17.vf
-2021/06/01 | 2740 | fonts/newtx/vf/ntxbmi1.vf
+2021/06/02 | 1828 | fonts/newtx/vf/ntxbmi05.vf
+2021/06/02 | 2704 | fonts/newtx/vf/ntxbmi07.vf
+2021/06/02 | 2740 | fonts/newtx/vf/ntxbmi0.vf
+2021/06/02 | 2708 | fonts/newtx/vf/ntxbmi15.vf
+2021/06/02 | 2708 | fonts/newtx/vf/ntxbmi17.vf
+2021/06/02 | 2740 | fonts/newtx/vf/ntxbmi1.vf
2013/02/14 | 1632 | fonts/newtx/vf/ntxbmi1x.vf
-2021/06/01 | 2700 | fonts/newtx/vf/ntxbmi5.vf
-2021/06/01 | 2700 | fonts/newtx/vf/ntxbmi7.vf
+2021/06/02 | 2700 | fonts/newtx/vf/ntxbmi5.vf
+2021/06/02 | 2700 | fonts/newtx/vf/ntxbmi7.vf
2021/03/21 | 2140 | fonts/newtx/vf/ntxbmia.vf
-2021/06/01 | 2744 | fonts/newtx/vf/ntxbmi.vf
+2021/06/02 | 2744 | fonts/newtx/vf/ntxbmi.vf
2020/09/18 | 960 | fonts/newtx/vf/ntx-BoldItalic-lf-ot1.vf
2020/09/18 | 960 | fonts/newtx/vf/ntx-BoldItalic-osf-ot1.vf
2020/09/18 | 960 | fonts/newtx/vf/ntx-BoldItalic-tlf-ot1.vf
@@ -82785,16 +82785,16 @@
2020/09/18 | 956 | fonts/newtx/vf/ntx-Italic-osf-ot1.vf
2020/09/18 | 956 | fonts/newtx/vf/ntx-Italic-tlf-ot1.vf
2020/09/18 | 960 | fonts/newtx/vf/ntx-Italic-tosf-ot1.vf
-2021/06/01 | 2588 | fonts/newtx/vf/ntxmi05.vf
-2021/06/01 | 2588 | fonts/newtx/vf/ntxmi07.vf
-2021/06/01 | 2604 | fonts/newtx/vf/ntxmi0.vf
-2021/06/01 | 2588 | fonts/newtx/vf/ntxmi15.vf
-2021/06/01 | 2588 | fonts/newtx/vf/ntxmi17.vf
-2021/06/01 | 2604 | fonts/newtx/vf/ntxmi1.vf
-2021/06/01 | 2580 | fonts/newtx/vf/ntxmi5.vf
-2021/06/01 | 2580 | fonts/newtx/vf/ntxmi7.vf
+2021/06/02 | 2576 | fonts/newtx/vf/ntxmi05.vf
+2021/06/02 | 2576 | fonts/newtx/vf/ntxmi07.vf
+2021/06/02 | 2604 | fonts/newtx/vf/ntxmi0.vf
+2021/06/02 | 2576 | fonts/newtx/vf/ntxmi15.vf
+2021/06/02 | 2576 | fonts/newtx/vf/ntxmi17.vf
+2021/06/02 | 2604 | fonts/newtx/vf/ntxmi1.vf
+2021/06/02 | 2576 | fonts/newtx/vf/ntxmi5.vf
+2021/06/02 | 2576 | fonts/newtx/vf/ntxmi7.vf
2021/03/21 | 2140 | fonts/newtx/vf/ntxmia.vf
-2021/06/01 | 2612 | fonts/newtx/vf/ntxmi.vf
+2021/06/02 | 2612 | fonts/newtx/vf/ntxmi.vf
2020/09/18 | 956 | fonts/newtx/vf/ntx-Regular-lf-ot1.vf
2020/09/18 | 956 | fonts/newtx/vf/ntx-Regular-osf-ot1.vf
2020/09/18 | 956 | fonts/newtx/vf/ntx-Regular-tlf-ot1.vf
@@ -82868,7 +82868,7 @@
2019/11/02 | 2656 | fonts/newtx/vf/zutbmi.vf
2021/03/22 | 2176 | fonts/newtx/vf/zutmia.vf
2019/11/02 | 2552 | fonts/newtx/vf/zutmi.vf
-2021/06/01 | 8397699 | fonts/newtx.zip
+2021/06/03 | 8397894 | fonts/newtx.zip
2005/10/24 | 6224 | fonts/niceframe/afm/bbding10.afm
2005/10/24 | 2299 | fonts/niceframe/afm/dingbat.afm
2005/10/24 | 9099 | fonts/niceframe/afm/karta15.afm
@@ -136177,456 +136177,468 @@
2020/05/24 | 7475 | graphics/bookshelf/README.md
2020/05/24 | 41 | graphics/bookshelf/VERSION
2020/05/24 | 1783280 | graphics/bookshelf.zip
-2021/01/03 | 1185 | graphics/circuit_macros/boxdims.sty
-2021/01/03 | 12541 | graphics/circuit_macros/CHANGES
-2021/01/03 | 462 | graphics/circuit_macros/Copying
-2021/01/03 | 14287 | graphics/circuit_macros/darrow.m4
-2021/01/03 | 26 | graphics/circuit_macros/doc/ACsymbol.m4
-2021/01/03 | 494 | graphics/circuit_macros/doc/AmpTableMan.m4
-2021/01/03 | 1940 | graphics/circuit_macros/doc/AmpTable.tex
-2021/01/03 | 1230 | graphics/circuit_macros/doc/AntennasMan.m4
-2021/01/03 | 1618 | graphics/circuit_macros/doc/ArrestersMan.m4
-2021/01/03 | 2634 | graphics/circuit_macros/doc/AudioMan.m4
-2021/01/03 | 10164 | graphics/circuit_macros/doc/Audio.tex
-2021/01/03 | 131 | graphics/circuit_macros/doc/Axes.m4
-2021/01/03 | 614 | graphics/circuit_macros/doc/BigResistor.m4
-2021/01/03 | 1619 | graphics/circuit_macros/doc/BipMan.m4
-2021/01/03 | 5545 | graphics/circuit_macros/doc/Bip.tex
-2021/01/03 | 1074 | graphics/circuit_macros/doc/bistableMan.m4
-2021/01/03 | 1860 | graphics/circuit_macros/doc/bi_trans.m4
-2021/01/03 | 130 | graphics/circuit_macros/doc/bitrbody.m4
-2021/01/03 | 50 | graphics/circuit_macros/doc/bitr.m4
-2021/01/03 | 136967 | graphics/circuit_macros/doc/body.tex
-2021/01/03 | 1953 | graphics/circuit_macros/doc/Buffer.m4
-2021/01/03 | 25460 | graphics/circuit_macros/doc/Capture.JPG
-2021/01/03 | 2735 | graphics/circuit_macros/doc/CctTableMan.m4
-2021/01/03 | 29074 | graphics/circuit_macros/doc/CctTable.tex
-2021/01/03 | 4073 | graphics/circuit_macros/doc/Circuit_macros.bib
-2021/01/03 | 973887 | graphics/circuit_macros/doc/Circuit_macros.pdf
-2021/01/03 | 2859 | graphics/circuit_macros/doc/Circuit_macros.tex
-2021/01/03 | 1857 | graphics/circuit_macros/doc/Composite.m4
-2021/01/03 | 1120 | graphics/circuit_macros/doc/ConfigA.m4
-2021/01/03 | 1257 | graphics/circuit_macros/doc/ConfigB.m4
-2021/01/03 | 1291 | graphics/circuit_macros/doc/ConfigC.m4
-2021/01/03 | 2179 | graphics/circuit_macros/doc/ConnMan.m4
-2021/01/03 | 6550 | graphics/circuit_macros/doc/Conn.tex
-2021/01/03 | 3326 | graphics/circuit_macros/doc/ContactMan.m4
-2021/01/03 | 1585 | graphics/circuit_macros/doc/ContactsMan.m4
-2021/01/03 | 6067 | graphics/circuit_macros/doc/Contacts.tex
-2021/01/03 | 13833 | graphics/circuit_macros/doc/Contact.tex
-2021/01/03 | 1995 | graphics/circuit_macros/doc/Corners.m4
-2021/01/03 | 1329 | graphics/circuit_macros/doc/currents.m4
-2021/01/03 | 2389 | graphics/circuit_macros/doc/Dac.m4
-2021/01/03 | 1151 | graphics/circuit_macros/doc/Darlington.m4
-2021/01/03 | 26 | graphics/circuit_macros/doc/DCsymbol.m4
-2021/01/03 | 81656 | graphics/circuit_macros/doc/defines.tex
-2021/01/03 | 1485 | graphics/circuit_macros/doc/DemultiplexerMan.m4
-2021/01/03 | 4817 | graphics/circuit_macros/doc/Demultiplexer.tex
-2021/01/03 | 1467 | graphics/circuit_macros/doc/DiodesMan.m4
-2021/01/03 | 12050 | graphics/circuit_macros/doc/Diodes.tex
-2021/01/03 | 483 | graphics/circuit_macros/doc/eboxdims.m4
-2021/01/03 | 980 | graphics/circuit_macros/doc/EmarrowsMan.m4
-2021/01/03 | 5502 | graphics/circuit_macros/doc/Emarrows.tex
-2021/01/03 | 1229 | graphics/circuit_macros/doc/fbfilter.m4
-2021/01/03 | 4489 | graphics/circuit_macros/doc/fetMan.m4
-2021/01/03 | 16420 | graphics/circuit_macros/doc/fet.tex
-2021/01/03 | 329 | graphics/circuit_macros/doc/FF.m4
-2021/01/03 | 1975 | graphics/circuit_macros/doc/FlipFlop.m4
-2021/01/03 | 960 | graphics/circuit_macros/doc/Flowdiag.m4
-2021/01/03 | 999 | graphics/circuit_macros/doc/FusesMan.m4
-2021/01/03 | 4789 | graphics/circuit_macros/doc/Fuses.tex
-2021/01/03 | 831 | graphics/circuit_macros/doc/GroundsMan.m4
-2021/01/03 | 2661 | graphics/circuit_macros/doc/Grounds.tex
-2021/01/03 | 1132 | graphics/circuit_macros/doc/HeadersMan.m4
-2021/01/03 | 7503 | graphics/circuit_macros/doc/Headers.tex
-2021/01/03 | 2013 | graphics/circuit_macros/doc/HybridPi.m4
-2021/01/03 | 2362 | graphics/circuit_macros/doc/JackMan.m4
-2021/01/03 | 12006 | graphics/circuit_macros/doc/Jack.tex
-2021/01/03 | 2119 | graphics/circuit_macros/doc/LogicMan.m4
-2021/01/03 | 7533 | graphics/circuit_macros/doc/Logic.tex
-2021/01/03 | 269 | graphics/circuit_macros/doc/Loop.m4
-2021/01/03 | 387 | graphics/circuit_macros/doc/lrarrows.m4
-2021/01/03 | 4756 | graphics/circuit_macros/doc/Makefile
-2021/01/03 | 1575 | graphics/circuit_macros/doc/mplex.m4
-2021/01/03 | 1400 | graphics/circuit_macros/doc/MultiplexerMan.m4
-2021/01/03 | 4964 | graphics/circuit_macros/doc/Multiplexer.tex
-2021/01/03 | 499 | graphics/circuit_macros/doc/NLGMan.m4
-2021/01/03 | 3183 | graphics/circuit_macros/doc/NLG.tex
-2021/01/03 | 1128 | graphics/circuit_macros/doc/NPDTMan.m4
-2021/01/03 | 5137 | graphics/circuit_macros/doc/NPDT.tex
-2021/01/03 | 1040 | graphics/circuit_macros/doc/NportMan.m4
-2021/01/03 | 4666 | graphics/circuit_macros/doc/Nport.tex
-2021/01/03 | 137 | graphics/circuit_macros/doc/oaxbody.m4
-2021/01/03 | 48 | graphics/circuit_macros/doc/oax.m4
-2021/01/03 | 782 | graphics/circuit_macros/doc/Oblique.m4
-2021/01/03 | 1433 | graphics/circuit_macros/doc/OpampMan.m4
-2021/01/03 | 835 | graphics/circuit_macros/doc/Opto.m4
-2021/01/03 | 1624 | graphics/circuit_macros/doc/ParSeries.m4
-2021/01/03 | 1802 | graphics/circuit_macros/doc/PconnMan.m4
-2021/01/03 | 15033 | graphics/circuit_macros/doc/Pconn.tex
-2021/01/03 | 801 | graphics/circuit_macros/doc/Potentiometers.m4
-2021/01/03 | 774 | graphics/circuit_macros/doc/quick.m4
-2021/01/03 | 1921 | graphics/circuit_macros/doc/relaycoilMan.m4
-2021/01/03 | 1259 | graphics/circuit_macros/doc/RelayMan.m4
-2021/01/03 | 7316 | graphics/circuit_macros/doc/Relay.tex
-2021/01/03 | 369 | graphics/circuit_macros/doc/sampleIC.m4
-2021/01/03 | 404 | graphics/circuit_macros/doc/Series.m4
-2021/01/03 | 1406 | graphics/circuit_macros/doc/ShiftRMan.m4
-2021/01/03 | 9425 | graphics/circuit_macros/doc/ShiftR.tex
-2021/01/03 | 421 | graphics/circuit_macros/doc/Sinus.m4
-2021/01/03 | 2165 | graphics/circuit_macros/doc/SourcesMan.m4
-2021/01/03 | 15388 | graphics/circuit_macros/doc/Sources.tex
-2021/01/03 | 217 | graphics/circuit_macros/doc/stringdims.m4
-2021/01/03 | 3973 | graphics/circuit_macros/doc/SwitchesMan.m4
-2021/01/03 | 19142 | graphics/circuit_macros/doc/Switches.tex
-2021/01/03 | 1464 | graphics/circuit_macros/doc/Taps.m4
-2021/01/03 | 11 | graphics/circuit_macros/doc/test.tex
-2021/01/03 | 1022 | graphics/circuit_macros/doc/TgateMan.m4
-2021/01/03 | 4178 | graphics/circuit_macros/doc/Tgate.tex
-2021/01/03 | 144 | graphics/circuit_macros/doc/Thermal.m4
-2021/01/03 | 3321 | graphics/circuit_macros/doc/thyristorMan.m4
-2021/01/03 | 20418 | graphics/circuit_macros/doc/thyristor.tex
-2021/01/03 | 535 | graphics/circuit_macros/doc/Tline.m4
-2021/01/03 | 165 | graphics/circuit_macros/doc/tranbody.m4
-2021/01/03 | 660 | graphics/circuit_macros/doc/ujtMan.m4
-2021/01/03 | 2441 | graphics/circuit_macros/doc/ujt.tex
-2021/01/03 | 926 | graphics/circuit_macros/doc/VariableMan.m4
-2021/01/03 | 10401 | graphics/circuit_macros/doc/Variable.tex
-2021/01/03 | 12 | graphics/circuit_macros/doc/Version.tex
-2021/01/03 | 3346 | graphics/circuit_macros/doc/WindingsMan.m4
-2021/01/03 | 449 | graphics/circuit_macros/doc/woodchips.m4
-2021/01/03 | 2912 | graphics/circuit_macros/doc/Workflow.m4
-2021/01/03 | 1526 | graphics/circuit_macros/doc/XformMan.m4
-2021/01/03 | 25849 | graphics/circuit_macros/doc/Xform.tex
-2021/01/03 | 19250 | graphics/circuit_macros/dpictools.pic
-2021/01/03 | 1730 | graphics/circuit_macros/examples/ABlogix.m4
-2021/01/03 | 2402 | graphics/circuit_macros/examples/Adder.m4
-2021/01/03 | 4205 | graphics/circuit_macros/examples/Alogix.m4
-2021/01/03 | 494 | graphics/circuit_macros/examples/AmpTable.m4
-2021/01/03 | 1230 | graphics/circuit_macros/examples/Antennas.m4
-2021/01/03 | 5042 | graphics/circuit_macros/examples/AntiqueClock.m4
-2021/01/03 | 777 | graphics/circuit_macros/examples/Arrester.m4
-2021/01/03 | 6243 | graphics/circuit_macros/examples/ASME_Y14-5.m4
-2021/01/03 | 771 | graphics/circuit_macros/examples/Attention.m4
-2021/01/03 | 2634 | graphics/circuit_macros/examples/Audio.m4
-2021/01/03 | 2517 | graphics/circuit_macros/examples/Autoencoder.m4
-2021/01/03 | 1962 | graphics/circuit_macros/examples/Autologix.m4
-2021/01/03 | 4638 | graphics/circuit_macros/examples/Ball.m4
-2021/01/03 | 1619 | graphics/circuit_macros/examples/Bip.m4
-2021/01/03 | 905 | graphics/circuit_macros/examples/birds.m4
-2021/01/03 | 1075 | graphics/circuit_macros/examples/bistable.m4
-2021/01/03 | 3175 | graphics/circuit_macros/examples/Blogix.m4
-2021/01/03 | 2542 | graphics/circuit_macros/examples/brace.m4
-2021/01/03 | 1024 | graphics/circuit_macros/examples/Btree.m4
-2021/01/03 | 3508 | graphics/circuit_macros/examples/Buttons.m4
-2021/01/03 | 991 | graphics/circuit_macros/examples/Byte.m4
-2021/01/03 | 6371 | graphics/circuit_macros/examples/CanLogic.m4
-2021/01/03 | 2736 | graphics/circuit_macros/examples/CctTable.m4
-2021/01/03 | 233 | graphics/circuit_macros/examples/Ccurve.m4
-2021/01/03 | 1039 | graphics/circuit_macros/examples/chaos.m4
-2021/01/03 | 7673 | graphics/circuit_macros/examples/Chuck.m4
-2021/01/03 | 482 | graphics/circuit_macros/examples/clock.m4
-2021/01/03 | 746 | graphics/circuit_macros/examples/Connectors.m4
-2021/01/03 | 2179 | graphics/circuit_macros/examples/Conn.m4
-2021/01/03 | 3326 | graphics/circuit_macros/examples/Contact.m4
-2021/01/03 | 1585 | graphics/circuit_macros/examples/Contacts.m4
-2021/01/03 | 4288 | graphics/circuit_macros/examples/control.m4
-2021/01/03 | 551 | graphics/circuit_macros/examples/Counting.m4
-2021/01/03 | 1521 | graphics/circuit_macros/examples/Coxeter.m4
-2021/01/03 | 1358 | graphics/circuit_macros/examples/Crossbar.m4
-2021/01/03 | 2520 | graphics/circuit_macros/examples/Crow.m4
-2021/01/03 | 1879 | graphics/circuit_macros/examples/Cruller.m4
-2021/01/03 | 2295 | graphics/circuit_macros/examples/csc.m4
-2021/01/03 | 6003 | graphics/circuit_macros/examples/CSlight.m4
-2021/01/03 | 5890 | graphics/circuit_macros/examples/Csource.m4
-2021/01/03 | 460 | graphics/circuit_macros/examples/debug1.tex
-2021/01/03 | 1959 | graphics/circuit_macros/examples/debug2.m4
-2021/01/03 | 655 | graphics/circuit_macros/examples/Decoder.m4
-2021/01/03 | 1485 | graphics/circuit_macros/examples/Demultiplexer.m4
-2021/01/03 | 654 | graphics/circuit_macros/examples/diamond.m4
-2021/01/03 | 6854 | graphics/circuit_macros/examples/Dini.m4
-2021/01/03 | 1467 | graphics/circuit_macros/examples/Diodes.m4
-2021/01/03 | 1966 | graphics/circuit_macros/examples/Drive.m4
-2021/01/03 | 980 | graphics/circuit_macros/examples/Emarrows.m4
-2021/01/03 | 2584 | graphics/circuit_macros/examples/Escher.m4
-2021/01/03 | 4305 | graphics/circuit_macros/examples/Euro.m4
-2021/01/03 | 2412 | graphics/circuit_macros/examples/ex00.m4
-2021/01/03 | 2279 | graphics/circuit_macros/examples/ex01.m4
-2021/01/03 | 1100 | graphics/circuit_macros/examples/ex02.m4
-2021/01/03 | 673 | graphics/circuit_macros/examples/ex03.m4
-2021/01/03 | 1654 | graphics/circuit_macros/examples/ex04.m4
-2021/01/03 | 1608 | graphics/circuit_macros/examples/ex05.m4
-2021/01/03 | 2170 | graphics/circuit_macros/examples/ex06.m4
-2021/01/03 | 2556 | graphics/circuit_macros/examples/ex08.m4
-2021/01/03 | 4313 | graphics/circuit_macros/examples/ex09.m4
-2021/01/03 | 1492 | graphics/circuit_macros/examples/ex10.m4
-2021/01/03 | 2361 | graphics/circuit_macros/examples/ex11.m4
-2021/01/03 | 3339 | graphics/circuit_macros/examples/ex12.m4
-2021/01/03 | 1003 | graphics/circuit_macros/examples/ex15.m4
-2021/01/03 | 1865 | graphics/circuit_macros/examples/ex16.m4
-2021/01/03 | 1126 | graphics/circuit_macros/examples/ex17.m4
-2021/01/03 | 865 | graphics/circuit_macros/examples/ex18.m4
-2021/01/03 | 2000 | graphics/circuit_macros/examples/ex21.m4
-2021/01/03 | 876504 | graphics/circuit_macros/examples/examples.pdf
-2021/01/03 | 1765 | graphics/circuit_macros/examples/examples.tex
-2021/01/03 | 8372 | graphics/circuit_macros/examples/exp.m4
-2021/01/03 | 4489 | graphics/circuit_macros/examples/fet.m4
-2021/01/03 | 17196 | graphics/circuit_macros/examples/files.tex
-2021/01/03 | 645 | graphics/circuit_macros/examples/Floor.m4
-2021/01/03 | 11270 | graphics/circuit_macros/examples/FlowchartDefs.m4
-2021/01/03 | 4751 | graphics/circuit_macros/examples/Flow.m4
-2021/01/03 | 999 | graphics/circuit_macros/examples/Fuses.m4
-2021/01/03 | 1250 | graphics/circuit_macros/examples/Geometry.m4
-2021/01/03 | 421 | graphics/circuit_macros/examples/GrayCode.m4
-2021/01/03 | 5478 | graphics/circuit_macros/examples/graysurf.m4
-2021/01/03 | 828 | graphics/circuit_macros/examples/Grounds.m4
-2021/01/03 | 1132 | graphics/circuit_macros/examples/Headers.m4
-2021/01/03 | 1458 | graphics/circuit_macros/examples/header.tex
-2021/01/03 | 13324 | graphics/circuit_macros/examples/Heathkit.m4
-2021/01/03 | 2068 | graphics/circuit_macros/examples/I2L.m4
-2021/01/03 | 1668 | graphics/circuit_macros/examples/IC10107.m4
-2021/01/03 | 9686 | graphics/circuit_macros/examples/ics.m4
-2021/01/03 | 32 | graphics/circuit_macros/examples/Incl.eps.bb
-2021/01/03 | 45323 | graphics/circuit_macros/examples/Incl.eps.gz
-2021/01/03 | 741 | graphics/circuit_macros/examples/Incleps.m4
-2021/01/03 | 29772 | graphics/circuit_macros/examples/Incl.pdf
-2021/01/03 | 709 | graphics/circuit_macros/examples/Inclpdf.m4
-2021/01/03 | 2362 | graphics/circuit_macros/examples/Jack.m4
-2021/01/03 | 2696 | graphics/circuit_macros/examples/keyval.m4
-2021/01/03 | 489 | graphics/circuit_macros/examples/Koch.m4
-2021/01/03 | 7113 | graphics/circuit_macros/examples/lcct.m4
-2021/01/03 | 2119 | graphics/circuit_macros/examples/Logic.m4
-2021/01/03 | 2304 | graphics/circuit_macros/examples/Loglog.m4
-2021/01/03 | 4459 | graphics/circuit_macros/examples/Lyap.m4
-2021/01/03 | 9800 | graphics/circuit_macros/examples/Makefile
-2021/01/03 | 2986 | graphics/circuit_macros/examples/MC.m4
-2021/01/03 | 94474 | graphics/circuit_macros/examples/mf/cct.mf
-2021/01/03 | 776 | graphics/circuit_macros/examples/mf/cct.tfm
-2021/01/03 | 4615 | graphics/circuit_macros/examples/mf/font.m4
-2021/01/03 | 1529 | graphics/circuit_macros/examples/mf/Makefile
-2021/01/03 | 1076 | graphics/circuit_macros/examples/mf/mftest
-2021/01/03 | 3785 | graphics/circuit_macros/examples/Mixer.m4
-2021/01/03 | 1922 | graphics/circuit_macros/examples/MotorControl.m4
-2021/01/03 | 409 | graphics/circuit_macros/examples/mpost/examplesmpost.tex
-2021/01/03 | 4247 | graphics/circuit_macros/examples/mpost/Makefile
-2021/01/03 | 685 | graphics/circuit_macros/examples/mpost/mptest
-2021/01/03 | 703 | graphics/circuit_macros/examples/mpost/README-mpost
-2021/01/03 | 418 | graphics/circuit_macros/examples/mpost/tstmpost.tex
-2021/01/03 | 1400 | graphics/circuit_macros/examples/Multiplexer.m4
-2021/01/03 | 499 | graphics/circuit_macros/examples/NLG.m4
-2021/01/03 | 1128 | graphics/circuit_macros/examples/NPDT.m4
-2021/01/03 | 1040 | graphics/circuit_macros/examples/Nport.m4
-2021/01/03 | 2792 | graphics/circuit_macros/examples/OpAmpFilter.m4
-2021/01/03 | 1433 | graphics/circuit_macros/examples/Opamp.m4
-2021/01/03 | 2442 | graphics/circuit_macros/examples/Optoiso.m4
-2021/01/03 | 1852 | graphics/circuit_macros/examples/Orbits.m4
-2021/01/03 | 1802 | graphics/circuit_macros/examples/Pconn.m4
-2021/01/03 | 1375 | graphics/circuit_macros/examples/person.m4
-2021/01/03 | 2674 | graphics/circuit_macros/examples/Planes.m4
-2021/01/03 | 1174 | graphics/circuit_macros/examples/PPA.m4
-2021/01/03 | 715 | graphics/circuit_macros/examples/psfrag/examplespsfrag.tex
-2021/01/03 | 4683 | graphics/circuit_macros/examples/psfrag/Makefile
-2021/01/03 | 317 | graphics/circuit_macros/examples/psfrag/README-psfrag.txt
-2021/01/03 | 371 | graphics/circuit_macros/examples/psfrag/tstpsfrag.tex
-2021/01/03 | 3954 | graphics/circuit_macros/examples/PushPull.m4
-2021/01/03 | 2014 | graphics/circuit_macros/examples/pwrsupply.m4
-2021/01/03 | 918 | graphics/circuit_macros/examples/Quantum.m4
-2021/01/03 | 774 | graphics/circuit_macros/examples/quick.m4
-2021/01/03 | 3727 | graphics/circuit_macros/examples/random.m4
-2021/01/03 | 2828 | graphics/circuit_macros/examples/README-examples
-2021/01/03 | 7006 | graphics/circuit_macros/examples/Rectifiers.m4
-2021/01/03 | 3825 | graphics/circuit_macros/examples/recycle.m4
-2021/01/03 | 1921 | graphics/circuit_macros/examples/relaycoil.m4
-2021/01/03 | 1259 | graphics/circuit_macros/examples/Relay.m4
-2021/01/03 | 1443 | graphics/circuit_macros/examples/Resolver.m4
-2021/01/03 | 4569 | graphics/circuit_macros/examples/rose.m4
-2021/01/03 | 221 | graphics/circuit_macros/examples/rotate.tex
-2021/01/03 | 1525 | graphics/circuit_macros/examples/rotatetext.m4
-2021/01/03 | 518 | graphics/circuit_macros/examples/Rotbox.m4
-2021/01/03 | 365 | graphics/circuit_macros/examples/rotellipse.m4
-2021/01/03 | 740 | graphics/circuit_macros/examples/SampleFlow.m4
-2021/01/03 | 1778 | graphics/circuit_macros/examples/Schottky.m4
-2021/01/03 | 2761 | graphics/circuit_macros/examples/sfg.m4
-2021/01/03 | 4751 | graphics/circuit_macros/examples/Shaky.m4
-2021/01/03 | 7721 | graphics/circuit_macros/examples/shapes.m4
-2021/01/03 | 1406 | graphics/circuit_macros/examples/ShiftR.m4
-2021/01/03 | 1331 | graphics/circuit_macros/examples/Sierpinski.m4
-2021/01/03 | 419 | graphics/circuit_macros/examples/Sixpole.m4
-2021/01/03 | 370 | graphics/circuit_macros/examples/snake.m4
-2021/01/03 | 2165 | graphics/circuit_macros/examples/Sources.m4
-2021/01/03 | 1906 | graphics/circuit_macros/examples/SPM.m4
-2021/01/03 | 380 | graphics/circuit_macros/examples/SQUID.m4
-2021/01/03 | 947 | graphics/circuit_macros/examples/squiggle.m4
-2021/01/03 | 1955 | graphics/circuit_macros/examples/svg/ABlogixSVG.m4
-2021/01/03 | 2528 | graphics/circuit_macros/examples/svg/AdderSVG.m4
-2021/01/03 | 4337 | graphics/circuit_macros/examples/svg/AlogixSVG.m4
-2021/01/03 | 538 | graphics/circuit_macros/examples/svg/AmpTableSVG.m4
-2021/01/03 | 1090 | graphics/circuit_macros/examples/svg/AntennasSVG.m4
-2021/01/03 | 5044 | graphics/circuit_macros/examples/svg/AntiqueClockSVG.m4
-2021/01/03 | 2720 | graphics/circuit_macros/examples/svg/AudioSVG.m4
-2021/01/03 | 2989 | graphics/circuit_macros/examples/svg/AutoencoderSVG.m4
-2021/01/03 | 1668 | graphics/circuit_macros/examples/svg/Banking.m4
-2021/01/03 | 1812 | graphics/circuit_macros/examples/svg/BipSVG.m4
-2021/01/03 | 4258 | graphics/circuit_macros/examples/svg/BtreeSVG.m4
-2021/01/03 | 3567 | graphics/circuit_macros/examples/svg/ButtonsSVG.m4
-2021/01/03 | 937 | graphics/circuit_macros/examples/svg/ByteSVG.m4
-2021/01/03 | 6413 | graphics/circuit_macros/examples/svg/CanLogicSVG.m4
-2021/01/03 | 2661 | graphics/circuit_macros/examples/svg/CctTableSVG.m4
-2021/01/03 | 715 | graphics/circuit_macros/examples/svg/ConnectorsSVG.m4
-2021/01/03 | 2111 | graphics/circuit_macros/examples/svg/ConnSVG.m4
-2021/01/03 | 1737 | graphics/circuit_macros/examples/svg/ContactsSVG.m4
-2021/01/03 | 3646 | graphics/circuit_macros/examples/svg/ContactSVG.m4
-2021/01/03 | 3206 | graphics/circuit_macros/examples/svg/controlSVG.m4
-2021/01/03 | 793 | graphics/circuit_macros/examples/svg/CountingSVG.m4
-2021/01/03 | 1387 | graphics/circuit_macros/examples/svg/CrossbarSVG.m4
-2021/01/03 | 2525 | graphics/circuit_macros/examples/svg/CrowSVG.m4
-2021/01/03 | 1882 | graphics/circuit_macros/examples/svg/CrullerSVG.m4
-2021/01/03 | 2324 | graphics/circuit_macros/examples/svg/cscSVG.m4
-2021/01/03 | 7418 | graphics/circuit_macros/examples/svg/CsourceSVG.m4
-2021/01/03 | 745 | graphics/circuit_macros/examples/svg/DecoderSVG.m4
-2021/01/03 | 1373 | graphics/circuit_macros/examples/svg/DemultiplexerSVG.m4
-2021/01/03 | 609 | graphics/circuit_macros/examples/svg/diamondSVG.m4
-2021/01/03 | 6854 | graphics/circuit_macros/examples/svg/DiniSVG.m4
-2021/01/03 | 1429 | graphics/circuit_macros/examples/svg/DiodesSVG.m4
-2021/01/03 | 1966 | graphics/circuit_macros/examples/svg/DriveSVG.m4
-2021/01/03 | 1070 | graphics/circuit_macros/examples/svg/EmarrowsSVG.m4
-2021/01/03 | 2443 | graphics/circuit_macros/examples/svg/ex00SVG.m4
-2021/01/03 | 2625 | graphics/circuit_macros/examples/svg/ex01SVG.m4
-2021/01/03 | 1093 | graphics/circuit_macros/examples/svg/ex02SVG.m4
-2021/01/03 | 855 | graphics/circuit_macros/examples/svg/ex03SVG.m4
-2021/01/03 | 1891 | graphics/circuit_macros/examples/svg/ex04SVG.m4
-2021/01/03 | 3390 | graphics/circuit_macros/examples/svg/ex05SVG.m4
-2021/01/03 | 2018 | graphics/circuit_macros/examples/svg/ex06SVG.m4
-2021/01/03 | 2559 | graphics/circuit_macros/examples/svg/ex08SVG.m4
-2021/01/03 | 4119 | graphics/circuit_macros/examples/svg/ex09SVG.m4
-2021/01/03 | 1699 | graphics/circuit_macros/examples/svg/ex10SVG.m4
-2021/01/03 | 2685 | graphics/circuit_macros/examples/svg/ex11SVG.m4
-2021/01/03 | 3522 | graphics/circuit_macros/examples/svg/ex12SVG.m4
-2021/01/03 | 970 | graphics/circuit_macros/examples/svg/ex15SVG.m4
-2021/01/03 | 1893 | graphics/circuit_macros/examples/svg/ex16SVG.m4
-2021/01/03 | 1204 | graphics/circuit_macros/examples/svg/ex17SVG.m4
-2021/01/03 | 1065 | graphics/circuit_macros/examples/svg/ex18SVG.m4
-2021/01/03 | 2177 | graphics/circuit_macros/examples/svg/ex21SVG.m4
-2021/01/03 | 23972 | graphics/circuit_macros/examples/svg/examplesSVG.htmx
-2021/01/03 | 10589 | graphics/circuit_macros/examples/svg/expSVG.m4
-2021/01/03 | 3836 | graphics/circuit_macros/examples/svg/fetSVG.m4
-2021/01/03 | 5171 | graphics/circuit_macros/examples/svg/FlowSVG.m4
-2021/01/03 | 538 | graphics/circuit_macros/examples/svg/FontsSVG.m4
-2021/01/03 | 1992 | graphics/circuit_macros/examples/svg/FourbarSVG.m4
-2021/01/03 | 959 | graphics/circuit_macros/examples/svg/FusesSVG.m4
-2021/01/03 | 1250 | graphics/circuit_macros/examples/svg/GeometrySVG.m4
-2021/01/03 | 422 | graphics/circuit_macros/examples/svg/GrayCodeSVG.m4
-2021/01/03 | 5521 | graphics/circuit_macros/examples/svg/graysurfSVG.m4
-2021/01/03 | 810 | graphics/circuit_macros/examples/svg/GroundsSVG.m4
-2021/01/03 | 1265 | graphics/circuit_macros/examples/svg/HeadersSVG.m4
-2021/01/03 | 12711 | graphics/circuit_macros/examples/svg/HeathkitSVG.m4
-2021/01/03 | 2171 | graphics/circuit_macros/examples/svg/I2LSVG.m4
-2021/01/03 | 9276 | graphics/circuit_macros/examples/svg/icsSVG.m4
-2021/01/03 | 4003 | graphics/circuit_macros/examples/svg/InclepsSVG.m4
-2021/01/03 | 21384 | graphics/circuit_macros/examples/svg/Incl.jpg
-2021/01/03 | 2051 | graphics/circuit_macros/examples/svg/JackSVG.m4
-2021/01/03 | 7203 | graphics/circuit_macros/examples/svg/lcctSVG.m4
-2021/01/03 | 6216 | graphics/circuit_macros/examples/svg/LgateSVG.m4
-2021/01/03 | 63 | graphics/circuit_macros/examples/svg/local_init.m4
-2021/01/03 | 1931 | graphics/circuit_macros/examples/svg/LogicSVG.m4
-2021/01/03 | 2241 | graphics/circuit_macros/examples/svg/LoglogSVG.m4
-2021/01/03 | 4521 | graphics/circuit_macros/examples/svg/LyapSVG.m4
-2021/01/03 | 5424 | graphics/circuit_macros/examples/svg/Makefile
-2021/01/03 | 3473 | graphics/circuit_macros/examples/svg/MCSVG.m4
-2021/01/03 | 3489 | graphics/circuit_macros/examples/svg/MixerSVG.m4
-2021/01/03 | 1953 | graphics/circuit_macros/examples/svg/MotorControlSVG.m4
-2021/01/03 | 1467 | graphics/circuit_macros/examples/svg/MultiplexerSVG.m4
-2021/01/03 | 532 | graphics/circuit_macros/examples/svg/NLGSVG.m4
-2021/01/03 | 1157 | graphics/circuit_macros/examples/svg/NPDTSVG.m4
-2021/01/03 | 748 | graphics/circuit_macros/examples/svg/Np.m4
-2021/01/03 | 1238 | graphics/circuit_macros/examples/svg/NportSVG.m4
-2021/01/03 | 1034 | graphics/circuit_macros/examples/svg/OpampSVG.m4
-2021/01/03 | 2551 | graphics/circuit_macros/examples/svg/OptoisoSVG.m4
-2021/01/03 | 10447 | graphics/circuit_macros/examples/svg/paletteSVG.m4
-2021/01/03 | 1776 | graphics/circuit_macros/examples/svg/PconnSVG.m4
-2021/01/03 | 3779 | graphics/circuit_macros/examples/svg/PushPullSVG.m4
-2021/01/03 | 2027 | graphics/circuit_macros/examples/svg/pwrsupplySVG.m4
-2021/01/03 | 947 | graphics/circuit_macros/examples/svg/QuantumSVG.m4
-2021/01/03 | 886 | graphics/circuit_macros/examples/svg/quickSVG.m4
-2021/01/03 | 3756 | graphics/circuit_macros/examples/svg/randomSVG.m4
-2021/01/03 | 7546 | graphics/circuit_macros/examples/svg/RectifiersSVG.m4
-2021/01/03 | 3825 | graphics/circuit_macros/examples/svg/recycleSVG.m4
-2021/01/03 | 2069 | graphics/circuit_macros/examples/svg/relaycoilSVG.m4
-2021/01/03 | 1431 | graphics/circuit_macros/examples/svg/RelaySVG.m4
-2021/01/03 | 4624 | graphics/circuit_macros/examples/svg/roseSVG.m4
-2021/01/03 | 545 | graphics/circuit_macros/examples/svg/RotboxSVG.m4
-2021/01/03 | 1837 | graphics/circuit_macros/examples/svg/SchottkySVG.m4
-2021/01/03 | 3290 | graphics/circuit_macros/examples/svg/sfgSVG.m4
-2021/01/03 | 7526 | graphics/circuit_macros/examples/svg/shapesSVG.m4
-2021/01/03 | 1446 | graphics/circuit_macros/examples/svg/ShiftRSVG.m4
-2021/01/03 | 1331 | graphics/circuit_macros/examples/svg/SierpinskiSVG.m4
-2021/01/03 | 419 | graphics/circuit_macros/examples/svg/SixpoleSVG.m4
-2021/01/03 | 1907 | graphics/circuit_macros/examples/svg/SourcesSVG.m4
-2021/01/03 | 417 | graphics/circuit_macros/examples/svg/SQUIDSVG.m4
-2021/01/03 | 1050 | graphics/circuit_macros/examples/svg/SVGconfig.m4
-2021/01/03 | 4309 | graphics/circuit_macros/examples/svg/SwitchesSVG.m4
-2021/01/03 | 1055 | graphics/circuit_macros/examples/svg/TgateSVG.m4
-2021/01/03 | 1444 | graphics/circuit_macros/examples/svg/ThreeSVG.m4
-2021/01/03 | 3310 | graphics/circuit_macros/examples/svg/thyristorSVG.m4
-2021/01/03 | 1612 | graphics/circuit_macros/examples/svg/TimerSVG.m4
-2021/01/03 | 9380 | graphics/circuit_macros/examples/svg/tstSVG.htmx
-2021/01/03 | 1675 | graphics/circuit_macros/examples/svg/TTLnandSVG.m4
-2021/01/03 | 3091 | graphics/circuit_macros/examples/svg/TtreeSVG.m4
-2021/01/03 | 12478 | graphics/circuit_macros/examples/svg/TubediagsSVG.m4
-2021/01/03 | 682 | graphics/circuit_macros/examples/svg/ujtSVG.m4
-2021/01/03 | 9747 | graphics/circuit_macros/examples/svg/UNO.m4
-2021/01/03 | 24133 | graphics/circuit_macros/examples/svg/UNOSVG.m4
-2021/01/03 | 988 | graphics/circuit_macros/examples/svg/VariableSVG.m4
-2021/01/03 | 2994 | graphics/circuit_macros/examples/svg/WindingsSVG.m4
-2021/01/03 | 353 | graphics/circuit_macros/examples/svg/windows.m4
-2021/01/03 | 3631 | graphics/circuit_macros/examples/svg/wormSVG.m4
-2021/01/03 | 1559 | graphics/circuit_macros/examples/svg/XformSVG.m4
-2021/01/03 | 1985 | graphics/circuit_macros/examples/svg/XORSVG.m4
-2021/01/03 | 1546 | graphics/circuit_macros/examples/svg/Xtest.m4
-2021/01/03 | 6150 | graphics/circuit_macros/examples/svg/Y14-5SVG.m4
-2021/01/03 | 3973 | graphics/circuit_macros/examples/Switches.m4
-2021/01/03 | 591 | graphics/circuit_macros/examples/test.m4
-2021/01/03 | 416 | graphics/circuit_macros/examples/testpdf.tex
-2021/01/03 | 1022 | graphics/circuit_macros/examples/Tgate.m4
-2021/01/03 | 1287 | graphics/circuit_macros/examples/Three.m4
-2021/01/03 | 3321 | graphics/circuit_macros/examples/thyristor.m4
-2021/01/03 | 382 | graphics/circuit_macros/examples/tikz.tex
-2021/01/03 | 219 | graphics/circuit_macros/examples/tst1.tex
-2021/01/03 | 613 | graphics/circuit_macros/examples/tst.tex
-2021/01/03 | 1558 | graphics/circuit_macros/examples/TTLnand.m4
-2021/01/03 | 2097 | graphics/circuit_macros/examples/Ttree.m4
-2021/01/03 | 9840 | graphics/circuit_macros/examples/tubedefs.m4
-2021/01/03 | 13264 | graphics/circuit_macros/examples/Tubediags.m4
-2021/01/03 | 660 | graphics/circuit_macros/examples/ujt.m4
-2021/01/03 | 932 | graphics/circuit_macros/examples/Variable.m4
-2021/01/03 | 442 | graphics/circuit_macros/examples/Wheat.m4
-2021/01/03 | 3346 | graphics/circuit_macros/examples/Windings.m4
-2021/01/03 | 353 | graphics/circuit_macros/examples/windows.m4
-2021/01/03 | 2799 | graphics/circuit_macros/examples/worm.m4
-2021/01/03 | 337 | graphics/circuit_macros/examples/xfig/Makefile
-2021/01/03 | 21230 | graphics/circuit_macros/examples/xfig/xfiglib.fig
-2021/01/03 | 5969 | graphics/circuit_macros/examples/xfig/xfiglib.m4
-2021/01/03 | 1526 | graphics/circuit_macros/examples/Xform.m4
-2021/01/03 | 1823 | graphics/circuit_macros/examples/XOR.m4
-2021/01/03 | 656 | graphics/circuit_macros/examples/Zcos.m4
-2021/01/03 | 1019 | graphics/circuit_macros/gpic.m4
-2021/01/03 | 4079 | graphics/circuit_macros/INSTALL
-2021/01/03 | 11566 | graphics/circuit_macros/lib3D.m4
-2021/01/03 | 164867 | graphics/circuit_macros/libcct.m4
-2021/01/03 | 81576 | graphics/circuit_macros/libgen.m4
-2021/01/03 | 47768 | graphics/circuit_macros/liblog.m4
-2021/01/03 | 19176 | graphics/circuit_macros/Licence.txt
-2021/01/03 | 1639 | graphics/circuit_macros/Makefile
-2021/01/03 | 1114 | graphics/circuit_macros/mfpic.m4
-2021/01/03 | 1640 | graphics/circuit_macros/mpost.m4
-2021/01/03 | 2085 | graphics/circuit_macros/pgf.m4
-2021/01/03 | 2834 | graphics/circuit_macros/postscript.m4
-2021/01/03 | 706 | graphics/circuit_macros/psfrag.m4
-2021/01/03 | 2099 | graphics/circuit_macros/pstricks.m4
-2021/01/03 | 16205 | graphics/circuit_macros/README
-2021/01/03 | 10059 | graphics/circuit_macros/svg.m4
-2021/01/03 | 1029 | graphics/circuit_macros/xfig.m4
-2021/01/03 | 2514606 | graphics/circuit_macros.zip
+2021/06/02 | 1185 | graphics/circuit_macros/boxdims.sty
+2021/06/02 | 12856 | graphics/circuit_macros/CHANGES
+2021/06/02 | 462 | graphics/circuit_macros/Copying
+2021/06/02 | 14287 | graphics/circuit_macros/darrow.m4
+2021/06/02 | 26 | graphics/circuit_macros/doc/ACsymbol.m4
+2021/06/02 | 494 | graphics/circuit_macros/doc/AmpTableMan.m4
+2021/06/02 | 1940 | graphics/circuit_macros/doc/AmpTable.tex
+2021/06/02 | 1230 | graphics/circuit_macros/doc/AntennasMan.m4
+2021/06/02 | 1618 | graphics/circuit_macros/doc/ArrestersMan.m4
+2021/06/02 | 2634 | graphics/circuit_macros/doc/AudioMan.m4
+2021/06/02 | 10164 | graphics/circuit_macros/doc/Audio.tex
+2021/06/02 | 131 | graphics/circuit_macros/doc/Axes.m4
+2021/06/02 | 614 | graphics/circuit_macros/doc/BigResistor.m4
+2021/06/02 | 1619 | graphics/circuit_macros/doc/BipMan.m4
+2021/06/02 | 5545 | graphics/circuit_macros/doc/Bip.tex
+2021/06/02 | 1074 | graphics/circuit_macros/doc/bistableMan.m4
+2021/06/02 | 1860 | graphics/circuit_macros/doc/bi_trans.m4
+2021/06/02 | 130 | graphics/circuit_macros/doc/bitrbody.m4
+2021/06/02 | 50 | graphics/circuit_macros/doc/bitr.m4
+2021/06/02 | 141843 | graphics/circuit_macros/doc/body.tex
+2021/06/02 | 1953 | graphics/circuit_macros/doc/Buffer.m4
+2021/06/02 | 1074 | graphics/circuit_macros/doc/CapacitorsMan.m4
+2021/06/02 | 4312 | graphics/circuit_macros/doc/Circuit_macros.bib
+2021/06/02 | 973559 | graphics/circuit_macros/doc/Circuit_macros.pdf
+2021/06/02 | 3000 | graphics/circuit_macros/doc/Circuit_macros.tex
+2021/06/02 | 1857 | graphics/circuit_macros/doc/Composite.m4
+2021/06/02 | 1120 | graphics/circuit_macros/doc/ConfigA.m4
+2021/06/02 | 1257 | graphics/circuit_macros/doc/ConfigB.m4
+2021/06/02 | 1291 | graphics/circuit_macros/doc/ConfigC.m4
+2021/06/02 | 2179 | graphics/circuit_macros/doc/ConnMan.m4
+2021/06/02 | 6550 | graphics/circuit_macros/doc/Conn.tex
+2021/06/02 | 3326 | graphics/circuit_macros/doc/ContactMan.m4
+2021/06/02 | 1585 | graphics/circuit_macros/doc/ContactsMan.m4
+2021/06/02 | 6067 | graphics/circuit_macros/doc/Contacts.tex
+2021/06/02 | 13833 | graphics/circuit_macros/doc/Contact.tex
+2021/06/02 | 1995 | graphics/circuit_macros/doc/Corners.m4
+2021/06/02 | 1329 | graphics/circuit_macros/doc/currents.m4
+2021/06/02 | 2389 | graphics/circuit_macros/doc/Dac.m4
+2021/06/02 | 1151 | graphics/circuit_macros/doc/Darlington.m4
+2021/06/02 | 26 | graphics/circuit_macros/doc/DCsymbol.m4
+2021/06/02 | 85915 | graphics/circuit_macros/doc/defines.tex
+2021/06/02 | 1485 | graphics/circuit_macros/doc/DemultiplexerMan.m4
+2021/06/02 | 4817 | graphics/circuit_macros/doc/Demultiplexer.tex
+2021/06/02 | 1467 | graphics/circuit_macros/doc/DiodesMan.m4
+2021/06/02 | 12050 | graphics/circuit_macros/doc/Diodes.tex
+2021/06/02 | 483 | graphics/circuit_macros/doc/eboxdims.m4
+2021/06/02 | 980 | graphics/circuit_macros/doc/EmarrowsMan.m4
+2021/06/02 | 5502 | graphics/circuit_macros/doc/Emarrows.tex
+2021/06/02 | 1229 | graphics/circuit_macros/doc/fbfilter.m4
+2021/06/02 | 5315 | graphics/circuit_macros/doc/fetMan.m4
+2021/06/02 | 16420 | graphics/circuit_macros/doc/fet.tex
+2021/06/02 | 329 | graphics/circuit_macros/doc/FF.m4
+2021/06/02 | 1975 | graphics/circuit_macros/doc/FlipFlop.m4
+2021/06/02 | 960 | graphics/circuit_macros/doc/Flowdiag.m4
+2021/06/02 | 999 | graphics/circuit_macros/doc/FusesMan.m4
+2021/06/02 | 4789 | graphics/circuit_macros/doc/Fuses.tex
+2021/06/02 | 831 | graphics/circuit_macros/doc/GroundsMan.m4
+2021/06/02 | 2661 | graphics/circuit_macros/doc/Grounds.tex
+2021/06/02 | 1132 | graphics/circuit_macros/doc/HeadersMan.m4
+2021/06/02 | 7503 | graphics/circuit_macros/doc/Headers.tex
+2021/06/02 | 2013 | graphics/circuit_macros/doc/HybridPi.m4
+2021/06/02 | 1342 | graphics/circuit_macros/doc/InductorsMan.m4
+2021/06/02 | 2362 | graphics/circuit_macros/doc/JackMan.m4
+2021/06/02 | 12006 | graphics/circuit_macros/doc/Jack.tex
+2021/06/02 | 2119 | graphics/circuit_macros/doc/LogicMan.m4
+2021/06/02 | 7533 | graphics/circuit_macros/doc/Logic.tex
+2021/06/02 | 269 | graphics/circuit_macros/doc/Loop.m4
+2021/06/02 | 387 | graphics/circuit_macros/doc/lrarrows.m4
+2021/06/02 | 4828 | graphics/circuit_macros/doc/Makefile
+2021/06/02 | 893 | graphics/circuit_macros/doc/MoreTableMan.m4
+2021/06/02 | 1575 | graphics/circuit_macros/doc/mplex.m4
+2021/06/02 | 1400 | graphics/circuit_macros/doc/MultiplexerMan.m4
+2021/06/02 | 4964 | graphics/circuit_macros/doc/Multiplexer.tex
+2021/06/02 | 499 | graphics/circuit_macros/doc/NLGMan.m4
+2021/06/02 | 3183 | graphics/circuit_macros/doc/NLG.tex
+2021/06/02 | 1128 | graphics/circuit_macros/doc/NPDTMan.m4
+2021/06/02 | 5137 | graphics/circuit_macros/doc/NPDT.tex
+2021/06/02 | 1040 | graphics/circuit_macros/doc/NportMan.m4
+2021/06/02 | 4666 | graphics/circuit_macros/doc/Nport.tex
+2021/06/02 | 783 | graphics/circuit_macros/doc/Oblique.m4
+2021/06/02 | 137 | graphics/circuit_macros/doc/opampexbody.m4
+2021/06/02 | 56 | graphics/circuit_macros/doc/opampex.m4
+2021/06/02 | 1433 | graphics/circuit_macros/doc/OpampMan.m4
+2021/06/02 | 835 | graphics/circuit_macros/doc/Opto.m4
+2021/06/02 | 1624 | graphics/circuit_macros/doc/ParSeries.m4
+2021/06/02 | 1802 | graphics/circuit_macros/doc/PconnMan.m4
+2021/06/02 | 15033 | graphics/circuit_macros/doc/Pconn.tex
+2021/06/02 | 801 | graphics/circuit_macros/doc/Potentiometers.m4
+2021/06/02 | 774 | graphics/circuit_macros/doc/quick.m4
+2021/06/02 | 2086 | graphics/circuit_macros/doc/relaycoilMan.m4
+2021/06/02 | 1259 | graphics/circuit_macros/doc/RelayMan.m4
+2021/06/02 | 7316 | graphics/circuit_macros/doc/Relay.tex
+2021/06/02 | 812 | graphics/circuit_macros/doc/ResistorsMan.m4
+2021/06/02 | 369 | graphics/circuit_macros/doc/sampleIC.m4
+2021/06/02 | 404 | graphics/circuit_macros/doc/Series.m4
+2021/06/02 | 1406 | graphics/circuit_macros/doc/ShiftRMan.m4
+2021/06/02 | 9425 | graphics/circuit_macros/doc/ShiftR.tex
+2021/06/02 | 421 | graphics/circuit_macros/doc/Sinus.m4
+2021/06/02 | 2225 | graphics/circuit_macros/doc/SourcesMan.m4
+2021/06/02 | 15388 | graphics/circuit_macros/doc/Sources.tex
+2021/06/02 | 217 | graphics/circuit_macros/doc/stringdims.m4
+2021/06/02 | 4015 | graphics/circuit_macros/doc/SwitchesMan.m4
+2021/06/02 | 19142 | graphics/circuit_macros/doc/Switches.tex
+2021/06/02 | 1464 | graphics/circuit_macros/doc/Taps.m4
+2021/06/02 | 11 | graphics/circuit_macros/doc/test.tex
+2021/06/02 | 1022 | graphics/circuit_macros/doc/TgateMan.m4
+2021/06/02 | 4178 | graphics/circuit_macros/doc/Tgate.tex
+2021/06/02 | 144 | graphics/circuit_macros/doc/Thermal.m4
+2021/06/02 | 3321 | graphics/circuit_macros/doc/thyristorMan.m4
+2021/06/02 | 20418 | graphics/circuit_macros/doc/thyristor.tex
+2021/06/02 | 535 | graphics/circuit_macros/doc/Tline.m4
+2021/06/02 | 165 | graphics/circuit_macros/doc/tranbody.m4
+2021/06/02 | 660 | graphics/circuit_macros/doc/ujtMan.m4
+2021/06/02 | 2441 | graphics/circuit_macros/doc/ujt.tex
+2021/06/02 | 944 | graphics/circuit_macros/doc/VariableMan.m4
+2021/06/02 | 10401 | graphics/circuit_macros/doc/Variable.tex
+2021/06/02 | 12 | graphics/circuit_macros/doc/Version.tex
+2021/06/02 | 3346 | graphics/circuit_macros/doc/WindingsMan.m4
+2021/06/02 | 449 | graphics/circuit_macros/doc/woodchips.m4
+2021/06/02 | 2912 | graphics/circuit_macros/doc/Workflow.m4
+2021/06/02 | 1526 | graphics/circuit_macros/doc/XformMan.m4
+2021/06/02 | 25849 | graphics/circuit_macros/doc/Xform.tex
+2021/06/02 | 19250 | graphics/circuit_macros/dpictools.pic
+2021/06/02 | 1730 | graphics/circuit_macros/examples/ABlogix.m4
+2021/06/02 | 2402 | graphics/circuit_macros/examples/Adder.m4
+2021/06/02 | 4205 | graphics/circuit_macros/examples/Alogix.m4
+2021/06/02 | 494 | graphics/circuit_macros/examples/AmpTable.m4
+2021/06/02 | 1230 | graphics/circuit_macros/examples/Antennas.m4
+2021/06/02 | 777 | graphics/circuit_macros/examples/Arrester.m4
+2021/06/02 | 1767 | graphics/circuit_macros/examples/ArrowFn.m4
+2021/06/02 | 6243 | graphics/circuit_macros/examples/ASME_Y14-5.m4
+2021/06/02 | 771 | graphics/circuit_macros/examples/Attention.m4
+2021/06/02 | 2634 | graphics/circuit_macros/examples/Audio.m4
+2021/06/02 | 2517 | graphics/circuit_macros/examples/Autoencoder.m4
+2021/06/02 | 1962 | graphics/circuit_macros/examples/Autologix.m4
+2021/06/02 | 4638 | graphics/circuit_macros/examples/Ball.m4
+2021/06/02 | 1619 | graphics/circuit_macros/examples/Bip.m4
+2021/06/02 | 905 | graphics/circuit_macros/examples/birds.m4
+2021/06/02 | 1075 | graphics/circuit_macros/examples/bistable.m4
+2021/06/02 | 3175 | graphics/circuit_macros/examples/Blogix.m4
+2021/06/02 | 2542 | graphics/circuit_macros/examples/brace.m4
+2021/06/02 | 1024 | graphics/circuit_macros/examples/Btree.m4
+2021/06/02 | 3509 | graphics/circuit_macros/examples/Buttons.m4
+2021/06/02 | 991 | graphics/circuit_macros/examples/Byte.m4
+2021/06/02 | 6371 | graphics/circuit_macros/examples/CanLogic.m4
+2021/06/02 | 1046 | graphics/circuit_macros/examples/Capacitors.m4
+2021/06/02 | 233 | graphics/circuit_macros/examples/Ccurve.m4
+2021/06/02 | 1039 | graphics/circuit_macros/examples/chaos.m4
+2021/06/02 | 1175 | graphics/circuit_macros/examples/Chips.m4
+2021/06/02 | 7670 | graphics/circuit_macros/examples/Chuck.m4
+2021/06/02 | 482 | graphics/circuit_macros/examples/clock.m4
+2021/06/02 | 750 | graphics/circuit_macros/examples/Connectors.m4
+2021/06/02 | 2178 | graphics/circuit_macros/examples/Conn.m4
+2021/06/02 | 3326 | graphics/circuit_macros/examples/Contact.m4
+2021/06/02 | 1585 | graphics/circuit_macros/examples/Contacts.m4
+2021/06/02 | 7065 | graphics/circuit_macros/examples/control.m4
+2021/06/02 | 551 | graphics/circuit_macros/examples/Counting.m4
+2021/06/02 | 1521 | graphics/circuit_macros/examples/Coxeter.m4
+2021/06/02 | 1358 | graphics/circuit_macros/examples/Crossbar.m4
+2021/06/02 | 2520 | graphics/circuit_macros/examples/Crow.m4
+2021/06/02 | 1879 | graphics/circuit_macros/examples/Cruller.m4
+2021/06/02 | 7434 | graphics/circuit_macros/examples/csc.m4
+2021/06/02 | 6003 | graphics/circuit_macros/examples/CSlight.m4
+2021/06/02 | 5890 | graphics/circuit_macros/examples/Csource.m4
+2021/06/02 | 460 | graphics/circuit_macros/examples/debug1.tex
+2021/06/02 | 1959 | graphics/circuit_macros/examples/debug2.m4
+2021/06/02 | 655 | graphics/circuit_macros/examples/Decoder.m4
+2021/06/02 | 1485 | graphics/circuit_macros/examples/Demultiplexer.m4
+2021/06/02 | 654 | graphics/circuit_macros/examples/diamond.m4
+2021/06/02 | 6854 | graphics/circuit_macros/examples/Dini.m4
+2021/06/02 | 1467 | graphics/circuit_macros/examples/Diodes.m4
+2021/06/02 | 1966 | graphics/circuit_macros/examples/Drive.m4
+2021/06/02 | 980 | graphics/circuit_macros/examples/Emarrows.m4
+2021/06/02 | 6498 | graphics/circuit_macros/examples/Escher.m4
+2021/06/02 | 4023 | graphics/circuit_macros/examples/Euro.m4
+2021/06/02 | 2412 | graphics/circuit_macros/examples/ex00.m4
+2021/06/02 | 2279 | graphics/circuit_macros/examples/ex01.m4
+2021/06/02 | 1100 | graphics/circuit_macros/examples/ex02.m4
+2021/06/02 | 673 | graphics/circuit_macros/examples/ex03.m4
+2021/06/02 | 1654 | graphics/circuit_macros/examples/ex04.m4
+2021/06/02 | 1608 | graphics/circuit_macros/examples/ex05.m4
+2021/06/02 | 2170 | graphics/circuit_macros/examples/ex06.m4
+2021/06/02 | 2556 | graphics/circuit_macros/examples/ex08.m4
+2021/06/02 | 4313 | graphics/circuit_macros/examples/ex09.m4
+2021/06/02 | 1492 | graphics/circuit_macros/examples/ex10.m4
+2021/06/02 | 2361 | graphics/circuit_macros/examples/ex11.m4
+2021/06/02 | 3339 | graphics/circuit_macros/examples/ex12.m4
+2021/06/02 | 1003 | graphics/circuit_macros/examples/ex15.m4
+2021/06/02 | 1865 | graphics/circuit_macros/examples/ex16.m4
+2021/06/02 | 1126 | graphics/circuit_macros/examples/ex17.m4
+2021/06/02 | 865 | graphics/circuit_macros/examples/ex18.m4
+2021/06/02 | 2000 | graphics/circuit_macros/examples/ex21.m4
+2021/06/02 | 893291 | graphics/circuit_macros/examples/examples.pdf
+2021/06/02 | 1720 | graphics/circuit_macros/examples/examples.tex
+2021/06/02 | 8372 | graphics/circuit_macros/examples/exp.m4
+2021/06/02 | 5311 | graphics/circuit_macros/examples/fet.m4
+2021/06/02 | 17711 | graphics/circuit_macros/examples/files.tex
+2021/06/02 | 645 | graphics/circuit_macros/examples/Floor.m4
+2021/06/02 | 11270 | graphics/circuit_macros/examples/FlowchartDefs.m4
+2021/06/02 | 4751 | graphics/circuit_macros/examples/Flow.m4
+2021/06/02 | 999 | graphics/circuit_macros/examples/Fuses.m4
+2021/06/02 | 2262 | graphics/circuit_macros/examples/Geometry.m4
+2021/06/02 | 421 | graphics/circuit_macros/examples/GrayCode.m4
+2021/06/02 | 5486 | graphics/circuit_macros/examples/graysurf.m4
+2021/06/02 | 828 | graphics/circuit_macros/examples/Grounds.m4
+2021/06/02 | 1132 | graphics/circuit_macros/examples/Headers.m4
+2021/06/02 | 1458 | graphics/circuit_macros/examples/header.tex
+2021/06/02 | 13330 | graphics/circuit_macros/examples/Heathkit.m4
+2021/06/02 | 2068 | graphics/circuit_macros/examples/I2L.m4
+2021/06/02 | 1668 | graphics/circuit_macros/examples/IC10107.m4
+2021/06/02 | 11426 | graphics/circuit_macros/examples/ics.m4
+2021/06/02 | 32 | graphics/circuit_macros/examples/Incl.eps.bb
+2021/06/02 | 45323 | graphics/circuit_macros/examples/Incl.eps.gz
+2021/06/02 | 741 | graphics/circuit_macros/examples/Incleps.m4
+2021/06/02 | 29772 | graphics/circuit_macros/examples/Incl.pdf
+2021/06/02 | 709 | graphics/circuit_macros/examples/Inclpdf.m4
+2021/06/02 | 1342 | graphics/circuit_macros/examples/Inductors.m4
+2021/06/02 | 2362 | graphics/circuit_macros/examples/Jack.m4
+2021/06/02 | 2696 | graphics/circuit_macros/examples/keyval.m4
+2021/06/02 | 489 | graphics/circuit_macros/examples/Koch.m4
+2021/06/02 | 7127 | graphics/circuit_macros/examples/lcct.m4
+2021/06/02 | 2119 | graphics/circuit_macros/examples/Logic.m4
+2021/06/02 | 2304 | graphics/circuit_macros/examples/Loglog.m4
+2021/06/02 | 4459 | graphics/circuit_macros/examples/Lyap.m4
+2021/06/02 | 9080 | graphics/circuit_macros/examples/Makefile
+2021/06/02 | 2986 | graphics/circuit_macros/examples/MC.m4
+2021/06/02 | 95156 | graphics/circuit_macros/examples/mf/cct.mf
+2021/06/02 | 764 | graphics/circuit_macros/examples/mf/cct.tfm
+2021/06/02 | 4615 | graphics/circuit_macros/examples/mf/font.m4
+2021/06/02 | 1529 | graphics/circuit_macros/examples/mf/Makefile
+2021/06/02 | 1076 | graphics/circuit_macros/examples/mf/mftest
+2021/06/02 | 3785 | graphics/circuit_macros/examples/Mixer.m4
+2021/06/02 | 893 | graphics/circuit_macros/examples/MoreTable.m4
+2021/06/02 | 1922 | graphics/circuit_macros/examples/MotorControl.m4
+2021/06/02 | 409 | graphics/circuit_macros/examples/mpost/examplesmpost.tex
+2021/06/02 | 4247 | graphics/circuit_macros/examples/mpost/Makefile
+2021/06/02 | 685 | graphics/circuit_macros/examples/mpost/mptest
+2021/06/02 | 703 | graphics/circuit_macros/examples/mpost/README-mpost
+2021/06/02 | 418 | graphics/circuit_macros/examples/mpost/tstmpost.tex
+2021/06/02 | 1400 | graphics/circuit_macros/examples/Multiplexer.m4
+2021/06/02 | 499 | graphics/circuit_macros/examples/NLG.m4
+2021/06/02 | 1128 | graphics/circuit_macros/examples/NPDT.m4
+2021/06/02 | 1040 | graphics/circuit_macros/examples/Nport.m4
+2021/06/02 | 2792 | graphics/circuit_macros/examples/OpAmpFilter.m4
+2021/06/02 | 1433 | graphics/circuit_macros/examples/Opamp.m4
+2021/06/02 | 2442 | graphics/circuit_macros/examples/Optoiso.m4
+2021/06/02 | 1852 | graphics/circuit_macros/examples/Orbits.m4
+2021/06/02 | 1802 | graphics/circuit_macros/examples/Pconn.m4
+2021/06/02 | 1419 | graphics/circuit_macros/examples/person.m4
+2021/06/02 | 2674 | graphics/circuit_macros/examples/Planes.m4
+2021/06/02 | 6160 | graphics/circuit_macros/examples/Plate.m4
+2021/06/02 | 1174 | graphics/circuit_macros/examples/PPA.m4
+2021/06/02 | 715 | graphics/circuit_macros/examples/psfrag/examplespsfrag.tex
+2021/06/02 | 4683 | graphics/circuit_macros/examples/psfrag/Makefile
+2021/06/02 | 317 | graphics/circuit_macros/examples/psfrag/README-psfrag.txt
+2021/06/02 | 371 | graphics/circuit_macros/examples/psfrag/tstpsfrag.tex
+2021/06/02 | 3954 | graphics/circuit_macros/examples/PushPull.m4
+2021/06/02 | 2014 | graphics/circuit_macros/examples/pwrsupply.m4
+2021/06/02 | 918 | graphics/circuit_macros/examples/Quantum.m4
+2021/06/02 | 774 | graphics/circuit_macros/examples/quick.m4
+2021/06/02 | 3727 | graphics/circuit_macros/examples/random.m4
+2021/06/02 | 2817 | graphics/circuit_macros/examples/README-examples
+2021/06/02 | 7006 | graphics/circuit_macros/examples/Rectifiers.m4
+2021/06/02 | 3825 | graphics/circuit_macros/examples/recycle.m4
+2021/06/02 | 2086 | graphics/circuit_macros/examples/relaycoil.m4
+2021/06/02 | 1259 | graphics/circuit_macros/examples/Relay.m4
+2021/06/02 | 807 | graphics/circuit_macros/examples/Resistors.m4
+2021/06/02 | 1443 | graphics/circuit_macros/examples/Resolver.m4
+2021/06/02 | 4569 | graphics/circuit_macros/examples/rose.m4
+2021/06/02 | 221 | graphics/circuit_macros/examples/rotate.tex
+2021/06/02 | 1525 | graphics/circuit_macros/examples/rotatetext.m4
+2021/06/02 | 518 | graphics/circuit_macros/examples/Rotbox.m4
+2021/06/02 | 365 | graphics/circuit_macros/examples/rotellipse.m4
+2021/06/02 | 740 | graphics/circuit_macros/examples/SampleFlow.m4
+2021/06/02 | 1778 | graphics/circuit_macros/examples/Schottky.m4
+2021/06/02 | 2761 | graphics/circuit_macros/examples/sfg.m4
+2021/06/02 | 4751 | graphics/circuit_macros/examples/Shaky.m4
+2021/06/02 | 7721 | graphics/circuit_macros/examples/shapes.m4
+2021/06/02 | 1406 | graphics/circuit_macros/examples/ShiftR.m4
+2021/06/02 | 1331 | graphics/circuit_macros/examples/Sierpinski.m4
+2021/06/02 | 419 | graphics/circuit_macros/examples/Sixpole.m4
+2021/06/02 | 370 | graphics/circuit_macros/examples/snake.m4
+2021/06/02 | 2165 | graphics/circuit_macros/examples/Sources.m4
+2021/06/02 | 1906 | graphics/circuit_macros/examples/SPM.m4
+2021/06/02 | 380 | graphics/circuit_macros/examples/SQUID.m4
+2021/06/02 | 947 | graphics/circuit_macros/examples/squiggle.m4
+2021/06/02 | 1955 | graphics/circuit_macros/examples/svg/ABlogixSVG.m4
+2021/06/02 | 2528 | graphics/circuit_macros/examples/svg/AdderSVG.m4
+2021/06/02 | 4340 | graphics/circuit_macros/examples/svg/AlogixSVG.m4
+2021/06/02 | 538 | graphics/circuit_macros/examples/svg/AmpTableSVG.m4
+2021/06/02 | 1090 | graphics/circuit_macros/examples/svg/AntennasSVG.m4
+2021/06/02 | 1894 | graphics/circuit_macros/examples/svg/ArrowFnSVG.m4
+2021/06/02 | 2720 | graphics/circuit_macros/examples/svg/AudioSVG.m4
+2021/06/02 | 2989 | graphics/circuit_macros/examples/svg/AutoencoderSVG.m4
+2021/06/02 | 1668 | graphics/circuit_macros/examples/svg/Banking.m4
+2021/06/02 | 1812 | graphics/circuit_macros/examples/svg/BipSVG.m4
+2021/06/02 | 4289 | graphics/circuit_macros/examples/svg/BtreeSVG.m4
+2021/06/02 | 3567 | graphics/circuit_macros/examples/svg/ButtonsSVG.m4
+2021/06/02 | 937 | graphics/circuit_macros/examples/svg/ByteSVG.m4
+2021/06/02 | 6413 | graphics/circuit_macros/examples/svg/CanLogicSVG.m4
+2021/06/02 | 925 | graphics/circuit_macros/examples/svg/CapacitorsSVG.m4
+2021/06/02 | 2661 | graphics/circuit_macros/examples/svg/CctTableSVG.m4
+2021/06/02 | 1209 | graphics/circuit_macros/examples/svg/ChipsSVG.m4
+2021/06/02 | 715 | graphics/circuit_macros/examples/svg/ConnectorsSVG.m4
+2021/06/02 | 2111 | graphics/circuit_macros/examples/svg/ConnSVG.m4
+2021/06/02 | 1737 | graphics/circuit_macros/examples/svg/ContactsSVG.m4
+2021/06/02 | 3646 | graphics/circuit_macros/examples/svg/ContactSVG.m4
+2021/06/02 | 8006 | graphics/circuit_macros/examples/svg/controlSVG.m4
+2021/06/02 | 793 | graphics/circuit_macros/examples/svg/CountingSVG.m4
+2021/06/02 | 2525 | graphics/circuit_macros/examples/svg/CrowSVG.m4
+2021/06/02 | 1874 | graphics/circuit_macros/examples/svg/CrullerSVG.m4
+2021/06/02 | 7485 | graphics/circuit_macros/examples/svg/cscSVG.m4
+2021/06/02 | 7418 | graphics/circuit_macros/examples/svg/CsourceSVG.m4
+2021/06/02 | 745 | graphics/circuit_macros/examples/svg/DecoderSVG.m4
+2021/06/02 | 1373 | graphics/circuit_macros/examples/svg/DemultiplexerSVG.m4
+2021/06/02 | 609 | graphics/circuit_macros/examples/svg/diamondSVG.m4
+2021/06/02 | 6854 | graphics/circuit_macros/examples/svg/DiniSVG.m4
+2021/06/02 | 1429 | graphics/circuit_macros/examples/svg/DiodesSVG.m4
+2021/06/02 | 1966 | graphics/circuit_macros/examples/svg/DriveSVG.m4
+2021/06/02 | 24726 | graphics/circuit_macros/examples/svg/EEPSVG.m4
+2021/06/02 | 1070 | graphics/circuit_macros/examples/svg/EmarrowsSVG.m4
+2021/06/02 | 6501 | graphics/circuit_macros/examples/svg/EscherSVG.m4
+2021/06/02 | 2443 | graphics/circuit_macros/examples/svg/ex00SVG.m4
+2021/06/02 | 2625 | graphics/circuit_macros/examples/svg/ex01SVG.m4
+2021/06/02 | 1093 | graphics/circuit_macros/examples/svg/ex02SVG.m4
+2021/06/02 | 855 | graphics/circuit_macros/examples/svg/ex03SVG.m4
+2021/06/02 | 1891 | graphics/circuit_macros/examples/svg/ex04SVG.m4
+2021/06/02 | 3390 | graphics/circuit_macros/examples/svg/ex05SVG.m4
+2021/06/02 | 2018 | graphics/circuit_macros/examples/svg/ex06SVG.m4
+2021/06/02 | 2559 | graphics/circuit_macros/examples/svg/ex08SVG.m4
+2021/06/02 | 4119 | graphics/circuit_macros/examples/svg/ex09SVG.m4
+2021/06/02 | 1699 | graphics/circuit_macros/examples/svg/ex10SVG.m4
+2021/06/02 | 2685 | graphics/circuit_macros/examples/svg/ex11SVG.m4
+2021/06/02 | 3522 | graphics/circuit_macros/examples/svg/ex12SVG.m4
+2021/06/02 | 970 | graphics/circuit_macros/examples/svg/ex15SVG.m4
+2021/06/02 | 1893 | graphics/circuit_macros/examples/svg/ex16SVG.m4
+2021/06/02 | 1204 | graphics/circuit_macros/examples/svg/ex17SVG.m4
+2021/06/02 | 1065 | graphics/circuit_macros/examples/svg/ex18SVG.m4
+2021/06/02 | 1882 | graphics/circuit_macros/examples/svg/ex21SVG.m4
+2021/06/02 | 24911 | graphics/circuit_macros/examples/svg/examplesSVG.htmx
+2021/06/02 | 10589 | graphics/circuit_macros/examples/svg/expSVG.m4
+2021/06/02 | 5365 | graphics/circuit_macros/examples/svg/fetSVG.m4
+2021/06/02 | 5171 | graphics/circuit_macros/examples/svg/FlowSVG.m4
+2021/06/02 | 538 | graphics/circuit_macros/examples/svg/FontsSVG.m4
+2021/06/02 | 1992 | graphics/circuit_macros/examples/svg/FourbarSVG.m4
+2021/06/02 | 959 | graphics/circuit_macros/examples/svg/FusesSVG.m4
+2021/06/02 | 5847 | graphics/circuit_macros/examples/svg/GeometrySVG.m4
+2021/06/02 | 1875 | graphics/circuit_macros/examples/svg/GrayCodeSVG.m4
+2021/06/02 | 5469 | graphics/circuit_macros/examples/svg/graysurfSVG.m4
+2021/06/02 | 810 | graphics/circuit_macros/examples/svg/GroundsSVG.m4
+2021/06/02 | 1265 | graphics/circuit_macros/examples/svg/HeadersSVG.m4
+2021/06/02 | 12711 | graphics/circuit_macros/examples/svg/HeathkitSVG.m4
+2021/06/02 | 2171 | graphics/circuit_macros/examples/svg/I2LSVG.m4
+2021/06/02 | 11593 | graphics/circuit_macros/examples/svg/icsSVG.m4
+2021/06/02 | 4003 | graphics/circuit_macros/examples/svg/InclepsSVG.m4
+2021/06/02 | 21384 | graphics/circuit_macros/examples/svg/Incl.jpg
+2021/06/02 | 1343 | graphics/circuit_macros/examples/svg/InductorsSVG.m4
+2021/06/02 | 2051 | graphics/circuit_macros/examples/svg/JackSVG.m4
+2021/06/02 | 7203 | graphics/circuit_macros/examples/svg/lcctSVG.m4
+2021/06/02 | 6216 | graphics/circuit_macros/examples/svg/LgateSVG.m4
+2021/06/02 | 63 | graphics/circuit_macros/examples/svg/local_init.m4
+2021/06/02 | 1931 | graphics/circuit_macros/examples/svg/LogicSVG.m4
+2021/06/02 | 2241 | graphics/circuit_macros/examples/svg/LoglogSVG.m4
+2021/06/02 | 5106 | graphics/circuit_macros/examples/svg/Makefile
+2021/06/02 | 3473 | graphics/circuit_macros/examples/svg/MCSVG.m4
+2021/06/02 | 3489 | graphics/circuit_macros/examples/svg/MixerSVG.m4
+2021/06/02 | 921 | graphics/circuit_macros/examples/svg/MoreTableSVG.m4
+2021/06/02 | 1953 | graphics/circuit_macros/examples/svg/MotorControlSVG.m4
+2021/06/02 | 1403 | graphics/circuit_macros/examples/svg/MultiplexerSVG.m4
+2021/06/02 | 532 | graphics/circuit_macros/examples/svg/NLGSVG.m4
+2021/06/02 | 1157 | graphics/circuit_macros/examples/svg/NPDTSVG.m4
+2021/06/02 | 748 | graphics/circuit_macros/examples/svg/Np.m4
+2021/06/02 | 1238 | graphics/circuit_macros/examples/svg/NportSVG.m4
+2021/06/02 | 1034 | graphics/circuit_macros/examples/svg/OpampSVG.m4
+2021/06/02 | 2551 | graphics/circuit_macros/examples/svg/OptoisoSVG.m4
+2021/06/02 | 10193 | graphics/circuit_macros/examples/svg/paletteSVG.m4
+2021/06/02 | 1776 | graphics/circuit_macros/examples/svg/PconnSVG.m4
+2021/06/02 | 6153 | graphics/circuit_macros/examples/svg/PlateSVG.m4
+2021/06/02 | 3778 | graphics/circuit_macros/examples/svg/PushPullSVG.m4
+2021/06/02 | 2027 | graphics/circuit_macros/examples/svg/pwrsupplySVG.m4
+2021/06/02 | 947 | graphics/circuit_macros/examples/svg/QuantumSVG.m4
+2021/06/02 | 886 | graphics/circuit_macros/examples/svg/quickSVG.m4
+2021/06/02 | 3756 | graphics/circuit_macros/examples/svg/randomSVG.m4
+2021/06/02 | 7546 | graphics/circuit_macros/examples/svg/RectifiersSVG.m4
+2021/06/02 | 3825 | graphics/circuit_macros/examples/svg/recycleSVG.m4
+2021/06/02 | 2069 | graphics/circuit_macros/examples/svg/relaycoilSVG.m4
+2021/06/02 | 1431 | graphics/circuit_macros/examples/svg/RelaySVG.m4
+2021/06/02 | 864 | graphics/circuit_macros/examples/svg/ResistorsSVG.m4
+2021/06/02 | 5412 | graphics/circuit_macros/examples/svg/roseSVG.m4
+2021/06/02 | 545 | graphics/circuit_macros/examples/svg/RotboxSVG.m4
+2021/06/02 | 1837 | graphics/circuit_macros/examples/svg/SchottkySVG.m4
+2021/06/02 | 3290 | graphics/circuit_macros/examples/svg/sfgSVG.m4
+2021/06/02 | 7507 | graphics/circuit_macros/examples/svg/shapesSVG.m4
+2021/06/02 | 1313 | graphics/circuit_macros/examples/svg/ShiftRSVG.m4
+2021/06/02 | 1331 | graphics/circuit_macros/examples/svg/SierpinskiSVG.m4
+2021/06/02 | 419 | graphics/circuit_macros/examples/svg/SixpoleSVG.m4
+2021/06/02 | 4277 | graphics/circuit_macros/examples/svg/sldtestsSVG.m4
+2021/06/02 | 1907 | graphics/circuit_macros/examples/svg/SourcesSVG.m4
+2021/06/02 | 417 | graphics/circuit_macros/examples/svg/SQUIDSVG.m4
+2021/06/02 | 1050 | graphics/circuit_macros/examples/svg/SVGconfig.m4
+2021/06/02 | 4309 | graphics/circuit_macros/examples/svg/SwitchesSVG.m4
+2021/06/02 | 1055 | graphics/circuit_macros/examples/svg/TgateSVG.m4
+2021/06/02 | 1444 | graphics/circuit_macros/examples/svg/ThreeSVG.m4
+2021/06/02 | 3310 | graphics/circuit_macros/examples/svg/thyristorSVG.m4
+2021/06/02 | 1612 | graphics/circuit_macros/examples/svg/TimerSVG.m4
+2021/06/02 | 9752 | graphics/circuit_macros/examples/svg/tstSVG.htmx
+2021/06/02 | 1630 | graphics/circuit_macros/examples/svg/TTLnandSVG.m4
+2021/06/02 | 3091 | graphics/circuit_macros/examples/svg/TtreeSVG.m4
+2021/06/02 | 12478 | graphics/circuit_macros/examples/svg/TubediagsSVG.m4
+2021/06/02 | 682 | graphics/circuit_macros/examples/svg/ujtSVG.m4
+2021/06/02 | 24141 | graphics/circuit_macros/examples/svg/UNOSVG.m4
+2021/06/02 | 988 | graphics/circuit_macros/examples/svg/VariableSVG.m4
+2021/06/02 | 2994 | graphics/circuit_macros/examples/svg/WindingsSVG.m4
+2021/06/02 | 353 | graphics/circuit_macros/examples/svg/windows.m4
+2021/06/02 | 3631 | graphics/circuit_macros/examples/svg/wormSVG.m4
+2021/06/02 | 1559 | graphics/circuit_macros/examples/svg/XformSVG.m4
+2021/06/02 | 1985 | graphics/circuit_macros/examples/svg/XORSVG.m4
+2021/06/02 | 1546 | graphics/circuit_macros/examples/svg/Xtest.m4
+2021/06/02 | 3973 | graphics/circuit_macros/examples/Switches.m4
+2021/06/02 | 591 | graphics/circuit_macros/examples/test.m4
+2021/06/02 | 416 | graphics/circuit_macros/examples/testpdf.tex
+2021/06/02 | 1022 | graphics/circuit_macros/examples/Tgate.m4
+2021/06/02 | 1287 | graphics/circuit_macros/examples/Three.m4
+2021/06/02 | 3321 | graphics/circuit_macros/examples/thyristor.m4
+2021/06/02 | 219 | graphics/circuit_macros/examples/tst1.tex
+2021/06/02 | 409 | graphics/circuit_macros/examples/tst.tex
+2021/06/02 | 464 | graphics/circuit_macros/examples/tsttikz.tex
+2021/06/02 | 1558 | graphics/circuit_macros/examples/TTLnand.m4
+2021/06/02 | 2097 | graphics/circuit_macros/examples/Ttree.m4
+2021/06/02 | 9840 | graphics/circuit_macros/examples/tubedefs.m4
+2021/06/02 | 13264 | graphics/circuit_macros/examples/Tubediags.m4
+2021/06/02 | 660 | graphics/circuit_macros/examples/ujt.m4
+2021/06/02 | 932 | graphics/circuit_macros/examples/Variable.m4
+2021/06/02 | 1906 | graphics/circuit_macros/examples/venus.m4
+2021/06/02 | 442 | graphics/circuit_macros/examples/Wheat.m4
+2021/06/02 | 3346 | graphics/circuit_macros/examples/Windings.m4
+2021/06/02 | 353 | graphics/circuit_macros/examples/windows.m4
+2021/06/02 | 2799 | graphics/circuit_macros/examples/worm.m4
+2021/06/02 | 337 | graphics/circuit_macros/examples/xfig/Makefile
+2021/06/02 | 21374 | graphics/circuit_macros/examples/xfig/xfiglib.fig
+2021/06/02 | 5969 | graphics/circuit_macros/examples/xfig/xfiglib.m4
+2021/06/02 | 1526 | graphics/circuit_macros/examples/Xform.m4
+2021/06/02 | 1823 | graphics/circuit_macros/examples/XOR.m4
+2021/06/02 | 656 | graphics/circuit_macros/examples/Zcos.m4
+2021/06/02 | 1019 | graphics/circuit_macros/gpic.m4
+2021/06/02 | 4079 | graphics/circuit_macros/INSTALL
+2021/06/02 | 12765 | graphics/circuit_macros/lib3D.m4
+2021/06/02 | 171777 | graphics/circuit_macros/libcct.m4
+2021/06/02 | 85790 | graphics/circuit_macros/libgen.m4
+2021/06/02 | 47795 | graphics/circuit_macros/liblog.m4
+2021/06/02 | 19176 | graphics/circuit_macros/Licence.txt
+2021/06/02 | 1639 | graphics/circuit_macros/Makefile
+2021/06/02 | 1114 | graphics/circuit_macros/mfpic.m4
+2021/06/02 | 1640 | graphics/circuit_macros/mpost.m4
+2021/06/02 | 2085 | graphics/circuit_macros/pgf.m4
+2021/06/02 | 2834 | graphics/circuit_macros/postscript.m4
+2021/06/02 | 706 | graphics/circuit_macros/psfrag.m4
+2021/06/02 | 2099 | graphics/circuit_macros/pstricks.m4
+2021/06/02 | 16309 | graphics/circuit_macros/README
+2021/06/02 | 11556 | graphics/circuit_macros/svg.m4
+2021/06/02 | 1029 | graphics/circuit_macros/xfig.m4
+2021/06/03 | 2537816 | graphics/circuit_macros.zip
2018/09/22 | 49163 | graphics/coloremoji/coloremoji.sty
2018/09/22 | 15169 | graphics/coloremoji/emoji_images/hires/1F004.pdf
2018/09/22 | 24318 | graphics/coloremoji/emoji_images/hires/1F0CF.pdf
@@ -151569,13 +151581,13 @@
2021/01/09 | 86520 | info/docsurvey/docsurvey.tex
2021/01/09 | 804 | info/docsurvey/README.txt
2021/01/09 | 359183 | info/docsurvey.zip
-2021/03/07 | 1869 | info/dtk-bibliography/dtk-authoryear.bbx
-2021/03/07 | 520 | info/dtk-bibliography/dtk-authoryear.dbx
-2021/03/07 | 515714 | info/dtk-bibliography/dtk-bibliography.bib
-2021/03/07 | 365686 | info/dtk-bibliography/dtk-bibliography.pdf
-2021/03/07 | 862 | info/dtk-bibliography/dtk-bibliography.tex
-2021/03/07 | 654 | info/dtk-bibliography/README.md
-2021/03/07 | 422564 | info/dtk-bibliography.zip
+2021/06/03 | 1869 | info/dtk-bibliography/dtk-authoryear.bbx
+2021/06/03 | 520 | info/dtk-bibliography/dtk-authoryear.dbx
+2021/06/03 | 519245 | info/dtk-bibliography/dtk-bibliography.bib
+2021/06/03 | 366387 | info/dtk-bibliography/dtk-bibliography.pdf
+2021/06/03 | 862 | info/dtk-bibliography/dtk-bibliography.tex
+2021/06/03 | 654 | info/dtk-bibliography/README.md
+2021/06/03 | 423573 | info/dtk-bibliography.zip
2007/08/06 | 1426 | info/dtxgallery/conditional-code.dtx
2007/08/06 | 47941 | info/dtxgallery/conditional-code.pdf
2007/08/06 | 6401 | info/dtxgallery/dtxgallery.dtx
@@ -171582,9 +171594,9 @@
1992/09/27 | 8502 | info/tex-for-pictures.txt
1999/05/31 | 135 | info/texlive/README
2020/04/01 | 458 | info/tex-nutshell/README
-2021/03/17 | 236470 | info/tex-nutshell/tex-nutshell.pdf
-2021/03/17 | 113324 | info/tex-nutshell/tex-nutshell.tex
-2021/03/17 | 266993 | info/tex-nutshell.zip
+2021/06/03 | 258588 | info/tex-nutshell/tex-nutshell.pdf
+2021/06/03 | 114700 | info/tex-nutshell/tex-nutshell.tex
+2021/06/03 | 287273 | info/tex-nutshell.zip
2019/04/18 | 360 | info/texonly/README.md
2019/04/18 | 70552 | info/texonly/texonly2.pdf
2019/04/18 | 10714 | info/texonly/texonly2.tex
@@ -172843,16 +172855,16 @@
2017/03/09 | 168862 | install/language/hebrew/cjhebrew.tds.zip
2021/05/28 | 10938667 | install/language/japanese/jlreq.tds.zip
2021/05/31 | 1823866 | install/language/japanese/platex.tds.zip
-2020/09/30 | 905184 | install/language/japanese/uplatex.tds.zip
+2021/05/31 | 907477 | install/language/japanese/uplatex.tds.zip
2013/05/18 | 7628531 | install/language/vietnamese/vntex.tds.zip
2020/07/04 | 1531858 | install/macros/eplain.tds.zip
2012/03/29 | 378358 | install/macros/generic/bitelist.tds.zip
2015/11/14 | 558928 | install/macros/generic/catcodes.tds.zip
2015/11/16 | 603358 | install/macros/generic/commado.tds.zip
2015/11/14 | 1248858 | install/macros/generic/dowith.tds.zip
-2021/05/24 | 379753 | install/macros/generic/expkv-cs.tds.zip
+2021/06/03 | 377210 | install/macros/generic/expkv-cs.tds.zip
2021/05/24 | 418865 | install/macros/generic/expkv-def.tds.zip
-2021/05/24 | 503688 | install/macros/generic/expkv.tds.zip
+2021/06/03 | 503390 | install/macros/generic/expkv.tds.zip
2020/03/06 | 222075 | install/macros/generic/iftex.tds.zip
2012/09/20 | 321508 | install/macros/generic/langcode.tds.zip
2020/09/14 | 619816 | install/macros/generic/markdown.tds.zip
@@ -173077,7 +173089,7 @@
2011/09/20 | 179685 | install/macros/latex/contrib/nowidow.tds.zip
2020/03/18 | 8001668 | install/macros/latex/contrib/nwejm.tds.zip
2020/09/03 | 13476366 | install/macros/latex/contrib/oberdiek.tds.zip
-2021/01/25 | 22953 | install/macros/latex/contrib/ocgx2.tds.zip
+2021/06/03 | 33569 | install/macros/latex/contrib/ocgx2.tds.zip
2012/12/08 | 1025300 | install/macros/latex/contrib/ocgx.tds.zip
2017/05/29 | 424133 | install/macros/latex/contrib/pagecolor.tds.zip
2009/09/03 | 151471 | install/macros/latex/contrib/pagenote.tds.zip
@@ -183074,23 +183086,23 @@
2020/02/08 | 663432 | language/japanese/pxufont/vf/zu-uprubyminr-v.vf
2020/02/08 | 18511157 | language/japanese/pxufont.zip
1995/12/03 | 222 | language/japanese/README.CJK
-2020/09/30 | 1586 | language/japanese/uplatex/LICENSE
-2020/09/30 | 3863 | language/japanese/uplatex/Makefile
-2020/09/30 | 626 | language/japanese/uplatex/README.md
-2020/09/30 | 1958 | language/japanese/uplatex/README_uplatex.txt
-2020/09/30 | 168266 | language/japanese/uplatex/ujclasses.dtx
-2020/09/30 | 16398 | language/japanese/uplatex/ukinsoku.dtx
-2020/09/30 | 48647 | language/japanese/uplatex/uplatex.dtx
-2020/09/30 | 113178 | language/japanese/uplatex/uplatex-en.pdf
-2020/09/30 | 251 | language/japanese/uplatex/uplatex.ini
-2020/09/30 | 190137 | language/japanese/uplatex/uplatex.pdf
-2020/09/30 | 1569 | language/japanese/uplatex/uplcls.ins
-2020/09/30 | 473882 | language/japanese/uplatex/upldoc.pdf
-2020/09/30 | 555 | language/japanese/uplatex/upldocs.ins
-2020/09/30 | 934 | language/japanese/uplatex/uplfmt.ins
-2020/09/30 | 17699 | language/japanese/uplatex/uplfonts.dtx
-2020/09/30 | 8288 | language/japanese/uplatex/uplvers.dtx
-2020/09/30 | 827228 | language/japanese/uplatex.zip
+2021/05/31 | 1586 | language/japanese/uplatex/LICENSE
+2021/05/31 | 4410 | language/japanese/uplatex/Makefile
+2021/05/31 | 626 | language/japanese/uplatex/README.md
+2021/05/31 | 1958 | language/japanese/uplatex/README_uplatex.txt
+2021/05/31 | 168266 | language/japanese/uplatex/ujclasses.dtx
+2021/05/31 | 16704 | language/japanese/uplatex/ukinsoku.dtx
+2021/05/31 | 49517 | language/japanese/uplatex/uplatex.dtx
+2021/05/31 | 113529 | language/japanese/uplatex/uplatex-en.pdf
+2021/05/31 | 251 | language/japanese/uplatex/uplatex.ini
+2021/05/31 | 191844 | language/japanese/uplatex/uplatex.pdf
+2021/05/31 | 1569 | language/japanese/uplatex/uplcls.ins
+2021/05/31 | 473667 | language/japanese/uplatex/upldoc.pdf
+2021/05/31 | 555 | language/japanese/uplatex/upldocs.ins
+2021/05/31 | 934 | language/japanese/uplatex/uplfmt.ins
+2021/05/31 | 17699 | language/japanese/uplatex/uplfonts.dtx
+2021/05/31 | 8288 | language/japanese/uplatex/uplvers.dtx
+2021/06/03 | 829434 | language/japanese/uplatex.zip
2021/05/31 | 895 | language/japanese/uptex-base/00readme_uptex.txt
2021/05/31 | 35309 | language/japanese/uptex-base/01uptex_doc_utf8.txt
2021/05/31 | 33370 | language/japanese/uptex-base/02uptex_changelog_utf8.txt
@@ -187076,23 +187088,23 @@
2017/05/25 | 50653 | macros/generic/expex/expex.tex
2017/05/25 | 1673 | macros/generic/expex/README
2017/05/26 | 498764 | macros/generic/expex.zip
-2021/05/24 | 84163 | macros/generic/expkv-cs/expkv-cs.dtx
-2021/05/24 | 363784 | macros/generic/expkv-cs/expkv-cs.pdf
-2021/05/24 | 1296 | macros/generic/expkv-cs/README.md
-2021/05/24 | 373867 | macros/generic/expkv-cs.zip
+2021/06/03 | 83266 | macros/generic/expkv-cs/expkv-cs.dtx
+2021/06/03 | 361934 | macros/generic/expkv-cs/expkv-cs.pdf
+2021/06/03 | 1297 | macros/generic/expkv-cs/README.md
+2021/06/03 | 371347 | macros/generic/expkv-cs.zip
2021/05/24 | 78490 | macros/generic/expkv-def/expkv-def.dtx
2021/05/24 | 406256 | macros/generic/expkv-def/expkv-def.pdf
2021/05/24 | 1269 | macros/generic/expkv-def/README.md
2021/05/24 | 412328 | macros/generic/expkv-def.zip
-2021/05/24 | 109400 | macros/generic/expkv/expkv.dtx
-2021/05/24 | 481077 | macros/generic/expkv/expkv.pdf
+2021/06/03 | 109774 | macros/generic/expkv/expkv.dtx
+2021/06/03 | 480586 | macros/generic/expkv/expkv.pdf
2021/04/05 | 29651 | macros/generic/expkv-opt/expkv-opt-2020-10-10.dtx
2021/04/05 | 33095 | macros/generic/expkv-opt/expkv-opt.dtx
2021/04/05 | 268534 | macros/generic/expkv-opt/expkv-opt.pdf
2021/04/05 | 1126 | macros/generic/expkv-opt/README.md
2021/04/05 | 279098 | macros/generic/expkv-opt.zip
-2021/05/24 | 1430 | macros/generic/expkv/README.md
-2021/05/24 | 497557 | macros/generic/expkv.zip
+2021/06/03 | 1431 | macros/generic/expkv/README.md
+2021/06/03 | 497236 | macros/generic/expkv.zip
2007/04/19 | 1285 | macros/generic/fenixpar/fenixpar.sty
2011/11/18 | 8382 | macros/generic/fenixpar/fenixtok.sty
2011/11/18 | 312 | macros/generic/fenixpar/README
@@ -193721,34 +193733,36 @@
2009/04/21 | 84073 | macros/latex/contrib/bizcard/bizcard.pdf
2009/04/21 | 12046 | macros/latex/contrib/bizcard/bizex.pdf
2009/04/29 | 80997 | macros/latex/contrib/bizcard.zip
-2021/05/30 | 4904 | macros/latex/contrib/bjfuthesis/bjfuthesis.cls
-2021/05/30 | 145720 | macros/latex/contrib/bjfuthesis/documentation/bjfuthesis.pdf
-2021/05/29 | 240 | macros/latex/contrib/bjfuthesis/documentation/bjfuthesis.tex
-2021/05/29 | 802 | macros/latex/contrib/bjfuthesis/documentation/contents/doc-abstract.tex
-2021/05/29 | 75 | macros/latex/contrib/bjfuthesis/documentation/contents/doc-acknowledge.tex
-2021/05/29 | 4030 | macros/latex/contrib/bjfuthesis/documentation/contents/doc-mainbody.tex
-2021/05/28 | 10909 | macros/latex/contrib/bjfuthesis/example/bibliography.bib
-2021/05/28 | 3815 | macros/latex/contrib/bjfuthesis/example/contents/abstract.tex
-2021/05/28 | 1274 | macros/latex/contrib/bjfuthesis/example/contents/acknowledge.tex
-2021/05/28 | 62584 | macros/latex/contrib/bjfuthesis/example/contents/mainbody.tex
-2021/05/16 | 207622 | macros/latex/contrib/bjfuthesis/example/cover.pdf
-2021/05/16 | 78535 | macros/latex/contrib/bjfuthesis/example/figures/admin-movie.png
-2021/05/16 | 459450 | macros/latex/contrib/bjfuthesis/example/figures/anonymous-category.png
-2021/05/15 | 537913 | macros/latex/contrib/bjfuthesis/example/figures/anonymous-details.png
-2021/05/15 | 601638 | macros/latex/contrib/bjfuthesis/example/figures/anonymous-index.png
-2021/05/14 | 108191 | macros/latex/contrib/bjfuthesis/example/figures/enhanced-recommendation.png
-2021/05/16 | 485746 | macros/latex/contrib/bjfuthesis/example/figures/general-details.png
-2021/05/22 | 176707 | macros/latex/contrib/bjfuthesis/example/figures/illustration-of-ripple-sets.png
-2021/05/17 | 65241 | macros/latex/contrib/bjfuthesis/example/figures/jwt.pdf
-2021/05/17 | 64728 | macros/latex/contrib/bjfuthesis/example/figures/recommendation-procedure.pdf
-2021/05/22 | 586912 | macros/latex/contrib/bjfuthesis/example/figures/ripplenet-framework.png
-2021/05/15 | 215155 | macros/latex/contrib/bjfuthesis/example/figures/sign-up.png
-2021/05/16 | 36761 | macros/latex/contrib/bjfuthesis/example/figures/use-case.pdf
-2021/05/30 | 3700466 | macros/latex/contrib/bjfuthesis/example/thesis.pdf
-2021/05/28 | 224 | macros/latex/contrib/bjfuthesis/example/thesis.tex
-2021/05/28 | 35149 | macros/latex/contrib/bjfuthesis/LICENSE
-2021/05/30 | 2079 | macros/latex/contrib/bjfuthesis/README.md
-2021/05/30 | 7362570 | macros/latex/contrib/bjfuthesis.zip
+2021/06/02 | 4957 | macros/latex/contrib/bjfuthesis/bjfuthesis.cls
+2021/06/02 | 145720 | macros/latex/contrib/bjfuthesis/documentation/bjfuthesis.pdf
+2021/06/02 | 240 | macros/latex/contrib/bjfuthesis/documentation/bjfuthesis.tex
+2021/06/02 | 802 | macros/latex/contrib/bjfuthesis/documentation/contents/doc-abstract.tex
+2021/06/02 | 75 | macros/latex/contrib/bjfuthesis/documentation/contents/doc-acknowledge.tex
+2021/06/02 | 4030 | macros/latex/contrib/bjfuthesis/documentation/contents/doc-mainbody.tex
+2021/06/02 | 10909 | macros/latex/contrib/bjfuthesis/example/bibliography.bib
+2021/06/02 | 3776 | macros/latex/contrib/bjfuthesis/example/contents/abstract.tex
+2021/06/02 | 1268 | macros/latex/contrib/bjfuthesis/example/contents/acknowledge.tex
+2021/06/02 | 64462 | macros/latex/contrib/bjfuthesis/example/contents/mainbody.tex
+2021/06/02 | 207622 | macros/latex/contrib/bjfuthesis/example/cover.pdf
+2021/06/02 | 445624 | macros/latex/contrib/bjfuthesis/example/figures/admin-knowledge-graph.png
+2021/06/02 | 88861 | macros/latex/contrib/bjfuthesis/example/figures/admin-movie.png
+2021/06/02 | 180215 | macros/latex/contrib/bjfuthesis/example/figures/admin-navigation.png
+2021/06/02 | 716372 | macros/latex/contrib/bjfuthesis/example/figures/anonymous-category.png
+2021/06/02 | 545274 | macros/latex/contrib/bjfuthesis/example/figures/anonymous-details.png
+2021/06/02 | 762316 | macros/latex/contrib/bjfuthesis/example/figures/anonymous-index.png
+2021/06/02 | 515568 | macros/latex/contrib/bjfuthesis/example/figures/anonymous-search.png
+2021/06/02 | 108191 | macros/latex/contrib/bjfuthesis/example/figures/enhanced-recommendation.png
+2021/06/02 | 503309 | macros/latex/contrib/bjfuthesis/example/figures/general-details.png
+2021/06/02 | 181066 | macros/latex/contrib/bjfuthesis/example/figures/illustration-of-ripple-sets.png
+2021/06/02 | 41248 | macros/latex/contrib/bjfuthesis/example/figures/jwt.pdf
+2021/06/02 | 42328 | macros/latex/contrib/bjfuthesis/example/figures/recommendation-procedure.pdf
+2021/06/02 | 586912 | macros/latex/contrib/bjfuthesis/example/figures/ripplenet-framework.png
+2021/06/02 | 32548 | macros/latex/contrib/bjfuthesis/example/figures/use-case.pdf
+2021/06/02 | 4808696 | macros/latex/contrib/bjfuthesis/example/thesis.pdf
+2021/06/02 | 224 | macros/latex/contrib/bjfuthesis/example/thesis.tex
+2021/06/02 | 35149 | macros/latex/contrib/bjfuthesis/LICENSE
+2021/06/04 | 2079 | macros/latex/contrib/bjfuthesis/README.md
+2021/06/03 | 9796467 | macros/latex/contrib/bjfuthesis.zip
2012/01/06 | 5782 | macros/latex/contrib/blindtext/blindtext_american.dtx
2012/01/06 | 5088 | macros/latex/contrib/blindtext/blindtext_catalan.dtx
2012/01/06 | 38613 | macros/latex/contrib/blindtext/blindtext.dtx
@@ -196723,11 +196737,11 @@
2020/10/14 | 82745 | macros/latex/contrib/denisbdoc/denisbdoc.dtx
2020/10/14 | 483 | macros/latex/contrib/denisbdoc/README.md
2020/10/14 | 23510 | macros/latex/contrib/denisbdoc.zip
-2021/05/28 | 179298 | macros/latex/contrib/derivative/derivative.pdf
-2021/05/28 | 45779 | macros/latex/contrib/derivative/derivative.sty
-2021/05/28 | 101962 | macros/latex/contrib/derivative/derivative.tex
-2021/05/28 | 1491 | macros/latex/contrib/derivative/README.md
-2021/05/28 | 203888 | macros/latex/contrib/derivative.zip
+2021/06/03 | 180462 | macros/latex/contrib/derivative/derivative.pdf
+2021/06/03 | 47332 | macros/latex/contrib/derivative/derivative.sty
+2021/06/03 | 103642 | macros/latex/contrib/derivative/derivative.tex
+2021/06/03 | 1490 | macros/latex/contrib/derivative/README.md
+2021/06/03 | 205706 | macros/latex/contrib/derivative.zip
2012/09/17 | 4069 | macros/latex/contrib/designcon/DesignCon.bib
2012/09/17 | 2766 | macros/latex/contrib/designcon/designcon.cls
2012/09/17 | 3697 | macros/latex/contrib/designcon/designcon.layout
@@ -197559,11 +197573,11 @@
2008/02/10 | 19110 | macros/latex/contrib/ean13isbn/License.txt
2021/01/24 | 422 | macros/latex/contrib/ean13isbn/README
2021/01/24 | 322624 | macros/latex/contrib/ean13isbn.zip
-2021/06/02 | 128301 | macros/latex/contrib/easybook/easybook.dtx
+2021/06/03 | 128064 | macros/latex/contrib/easybook/easybook.dtx
2021/06/02 | 738 | macros/latex/contrib/easybook/easybook.ins
-2021/06/02 | 315453 | macros/latex/contrib/easybook/easybook.pdf
+2021/06/03 | 315318 | macros/latex/contrib/easybook/easybook.pdf
2021/05/15 | 3043 | macros/latex/contrib/easybook/README.md
-2021/06/02 | 347731 | macros/latex/contrib/easybook.zip
+2021/06/03 | 347724 | macros/latex/contrib/easybook.zip
2009/06/17 | 82589 | macros/latex/contrib/easy/doc/docbib.pdf
2009/06/17 | 78378 | macros/latex/contrib/easy/doc/docbmat.pdf
2009/06/17 | 99132 | macros/latex/contrib/easy/doc/doceqn.pdf
@@ -207503,12 +207517,12 @@
2013/08/11 | 265647 | macros/latex/contrib/ocgtools/ocgtools.pdf
2010/12/16 | 906 | macros/latex/contrib/ocgtools/README
2013/08/11 | 5062086 | macros/latex/contrib/ocgtools.zip
-2021/01/21 | 6609 | macros/latex/contrib/ocgx2/ChangeLog
+2021/06/03 | 6764 | macros/latex/contrib/ocgx2/ChangeLog
2020/03/15 | 585 | macros/latex/contrib/ocgx2/fixocgx.sty
-2021/01/25 | 12551 | macros/latex/contrib/ocgx2/ocgbase.sty
-2021/01/25 | 52131 | macros/latex/contrib/ocgx2/ocgx2.sty
+2021/06/03 | 25872 | macros/latex/contrib/ocgx2/ocgbase.sty
+2021/06/03 | 104723 | macros/latex/contrib/ocgx2/ocgx2.sty
2020/03/15 | 9976 | macros/latex/contrib/ocgx2/README.md
-2021/01/25 | 21894 | macros/latex/contrib/ocgx2.zip
+2021/06/03 | 32510 | macros/latex/contrib/ocgx2.zip
2012/12/08 | 693034 | macros/latex/contrib/ocgx/demo-ocgx.pdf
2012/12/08 | 14592 | macros/latex/contrib/ocgx/demo-ocgx.tex
2012/12/08 | 156 | macros/latex/contrib/ocgx/ocgx-example-1.tex
@@ -215841,60 +215855,60 @@
2010/12/07 | 1604 | macros/latex/contrib/tucv/tucv.ins
2010/12/07 | 180557 | macros/latex/contrib/tucv/tucv.pdf
2010/12/06 | 260987 | macros/latex/contrib/tucv.zip
-2021/05/26 | 574086 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf
-2021/05/26 | 622116 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
-2021/05/26 | 594960 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf
-2021/05/26 | 583234 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
-2021/05/26 | 589930 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf
-2021/05/26 | 655441 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
-2021/05/26 | 558963 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
-2021/05/26 | 682564 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
-2021/05/26 | 550551 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
-2021/05/26 | 586895 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
-2021/05/26 | 647234 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
-2021/05/26 | 3175 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex
-2021/05/26 | 7336 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex
-2021/05/26 | 2644 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib
-2021/05/26 | 16613 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex
-2021/05/26 | 3871 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
-2021/05/26 | 6881 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex
-2021/05/26 | 5170 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex
-2021/05/26 | 26972 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex
-2021/05/26 | 5859 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex
-2021/05/26 | 28400 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex
-2021/05/26 | 2350 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex
-2021/05/26 | 8703 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex
-2021/05/26 | 26637 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex
-2021/05/26 | 15237 | macros/latex/contrib/tuda-ci/README.md
-2021/05/26 | 3815 | macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty
-2021/05/26 | 2180 | macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
-2021/05/26 | 8237 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
-2021/05/26 | 9383 | macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty
-2021/05/26 | 10078 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty
-2021/05/26 | 2172 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty
-2021/05/26 | 1676 | macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo
-2021/05/26 | 1681 | macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo
-2021/05/26 | 1680 | macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo
-2021/05/26 | 1682 | macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo
-2021/05/26 | 1684 | macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo
-2021/05/26 | 1686 | macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo
-2021/05/26 | 6647 | macros/latex/contrib/tuda-ci/tex/tudabeamer.cls
-2021/05/26 | 4441 | macros/latex/contrib/tuda-ci/tex/tudacolors.def
-2021/05/26 | 5817 | macros/latex/contrib/tuda-ci/tex/tudacolors.sty
-2021/05/26 | 32159 | macros/latex/contrib/tuda-ci/tex/tudaexercise.cls
-2021/05/26 | 3243 | macros/latex/contrib/tuda-ci/tex/tudafonts.sty
-2021/05/26 | 13710 | macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls
-2021/05/26 | 16688 | macros/latex/contrib/tuda-ci/tex/tudaletter.cls
-2021/05/26 | 5381 | macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo
-2021/05/26 | 9622 | macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg
-2021/05/26 | 4328 | macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty
-2021/05/26 | 17395 | macros/latex/contrib/tuda-ci/tex/tudaposter.cls
-2021/05/26 | 41542 | macros/latex/contrib/tuda-ci/tex/tudapub.cls
-2021/05/26 | 6365 | macros/latex/contrib/tuda-ci/tex/tudarules.sty
-2021/05/26 | 18889 | macros/latex/contrib/tuda-ci/tex/tudasciposter.cls
-2021/05/26 | 5789 | macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo
-2021/05/26 | 30816 | macros/latex/contrib/tuda-ci/tex/tudathesis.cfg
-2021/05/26 | 6464385 | macros/latex/contrib/tuda-ci.zip
+2021/06/03 | 574086 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf
+2021/06/03 | 622116 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
+2021/06/03 | 594959 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf
+2021/06/03 | 583234 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
+2021/06/03 | 590183 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf
+2021/06/03 | 655529 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
+2021/06/03 | 558963 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
+2021/06/03 | 682661 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
+2021/06/03 | 550646 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
+2021/06/03 | 586895 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
+2021/06/03 | 647323 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
+2021/06/03 | 3175 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex
+2021/06/03 | 7336 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex
+2021/06/03 | 2644 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib
+2021/06/03 | 16613 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex
+2021/06/03 | 3871 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
+2021/06/03 | 6881 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex
+2021/06/03 | 5170 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex
+2021/06/03 | 26972 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex
+2021/06/03 | 5859 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex
+2021/06/03 | 28400 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex
+2021/06/03 | 2350 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex
+2021/06/03 | 8703 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex
+2021/06/03 | 26637 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex
+2021/06/03 | 15323 | macros/latex/contrib/tuda-ci/README.md
+2021/06/03 | 3815 | macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty
+2021/06/03 | 2180 | macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
+2021/06/03 | 8237 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
+2021/06/03 | 9383 | macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty
+2021/06/03 | 10078 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty
+2021/06/03 | 2172 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty
+2021/06/03 | 1676 | macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo
+2021/06/03 | 1681 | macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo
+2021/06/03 | 1680 | macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo
+2021/06/03 | 1682 | macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo
+2021/06/03 | 1684 | macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo
+2021/06/03 | 1686 | macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo
+2021/06/03 | 6673 | macros/latex/contrib/tuda-ci/tex/tudabeamer.cls
+2021/06/03 | 4441 | macros/latex/contrib/tuda-ci/tex/tudacolors.def
+2021/06/03 | 5817 | macros/latex/contrib/tuda-ci/tex/tudacolors.sty
+2021/06/03 | 32198 | macros/latex/contrib/tuda-ci/tex/tudaexercise.cls
+2021/06/03 | 3243 | macros/latex/contrib/tuda-ci/tex/tudafonts.sty
+2021/06/03 | 13710 | macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls
+2021/06/03 | 16688 | macros/latex/contrib/tuda-ci/tex/tudaletter.cls
+2021/06/03 | 5381 | macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo
+2021/06/03 | 9622 | macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg
+2021/06/03 | 4328 | macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty
+2021/06/03 | 17408 | macros/latex/contrib/tuda-ci/tex/tudaposter.cls
+2021/06/03 | 41581 | macros/latex/contrib/tuda-ci/tex/tudapub.cls
+2021/06/03 | 6365 | macros/latex/contrib/tuda-ci/tex/tudarules.sty
+2021/06/03 | 18915 | macros/latex/contrib/tuda-ci/tex/tudasciposter.cls
+2021/06/03 | 5789 | macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo
+2021/06/03 | 30816 | macros/latex/contrib/tuda-ci/tex/tudathesis.cfg
+2021/06/03 | 6465091 | macros/latex/contrib/tuda-ci.zip
2021/03/31 | 1398 | macros/latex/contrib/tudscr/doc/LICENSE.md
2021/03/31 | 1099181 | macros/latex/contrib/tudscr/doc/tudscr.pdf
2021/03/31 | 1083765 | macros/latex/contrib/tudscr/doc/tudscr_print.pdf
@@ -224889,44 +224903,45 @@
2007/07/13 | 9394 | macros/omega/latex/contrib/tamil-omega/yudit/Tamil2.my
2007/07/13 | 11462 | macros/omega/latex/contrib/tamil-omega/yudit/yudit.properties
2007/12/12 | 900761 | macros/omega/latex/contrib/tamil-omega.zip
-2021/02/15 | 6136 | macros/optex/base/alloc.opm
-2021/02/06 | 5044 | macros/optex/base/basic-macros.opm
+2021/05/16 | 6139 | macros/optex/base/alloc.opm
+2021/05/16 | 5173 | macros/optex/base/basic-macros.opm
2021/04/07 | 33294 | macros/optex/base/bib-iso690.opm
2021/04/07 | 5800 | macros/optex/base/bib-simple.opm
-2021/04/13 | 13893 | macros/optex/base/cite-bib.opm
-2021/01/11 | 17869 | macros/optex/base/colors.opm
-2021/01/22 | 10461 | macros/optex/base/doc.opm
+2021/05/16 | 13887 | macros/optex/base/cite-bib.opm
+2021/05/28 | 18830 | macros/optex/base/colors.opm
+2021/05/16 | 14452 | macros/optex/base/doc.opm
2021/04/22 | 657 | macros/optex/base/f-adventor.opm
-2021/04/19 | 9269 | macros/optex/base/fams-ini.opm
+2021/06/03 | 9407 | macros/optex/base/fams-ini.opm
2021/04/22 | 1156 | macros/optex/base/f-antt.opm
2021/04/22 | 665 | macros/optex/base/f-baskerville.opm
2021/04/22 | 679 | macros/optex/base/f-bonum.opm
2021/01/07 | 718 | macros/optex/base/f-comicneue.opm
2021/04/22 | 646 | macros/optex/base/f-cursor.opm
-2021/01/07 | 1191 | macros/optex/base/f-dejavu.opm
+2021/04/27 | 1191 | macros/optex/base/f-dejavu.opm
2021/04/22 | 1265 | macros/optex/base/f-ebgaramond.opm
+2021/05/21 | 959 | macros/optex/base/f-erewhon.opm
2021/04/22 | 882 | macros/optex/base/f-garamondl.opm
2021/04/22 | 635 | macros/optex/base/f-gfsbodoni.opm
-2021/04/22 | 10059 | macros/optex/base/f-heros.opm
+2021/04/30 | 10138 | macros/optex/base/f-heros.opm
2021/01/07 | 1201 | macros/optex/base/f-kerkis.opm
-2021/04/22 | 1468 | macros/optex/base/f-kpfonts.opm
-2021/04/22 | 2393 | macros/optex/base/f-libertine.opm
+2021/04/27 | 1468 | macros/optex/base/f-kpfonts.opm
+2021/04/27 | 2393 | macros/optex/base/f-libertine.opm
2021/04/22 | 2167 | macros/optex/base/f-libertine-s.opm
-2021/04/22 | 1527 | macros/optex/base/f-libertinus.opm
+2021/04/27 | 1527 | macros/optex/base/f-libertinus.opm
2021/04/22 | 658 | macros/optex/base/f-librecaslon.opm
2021/01/07 | 1536 | macros/optex/base/f-lido.opm
-2021/03/26 | 8811 | macros/optex/base/f-lmfonts.opm
+2021/04/28 | 8821 | macros/optex/base/f-lmfonts.opm
2021/04/22 | 1200 | macros/optex/base/f-merriweather.opm
-2021/04/22 | 1337 | macros/optex/base/f-newcm.opm
-2021/04/03 | 8928 | macros/optex/base/fnotes.opm
+2021/04/27 | 1337 | macros/optex/base/f-newcm.opm
+2021/05/20 | 8931 | macros/optex/base/fnotes.opm
2021/01/07 | 4446 | macros/optex/base/fonts-catalog.opm
-2021/03/10 | 9449 | macros/optex/base/fonts-opmac.opm
-2021/01/06 | 1668 | macros/optex/base/fonts-preload.opm
-2021/04/17 | 15721 | macros/optex/base/fonts-resize.opm
-2021/04/25 | 37646 | macros/optex/base/fonts-select.opm
+2021/05/16 | 9452 | macros/optex/base/fonts-opmac.opm
+2021/05/16 | 1671 | macros/optex/base/fonts-preload.opm
+2021/05/02 | 10066 | macros/optex/base/fonts-resize.opm
+2021/05/23 | 45799 | macros/optex/base/fonts-select.opm
2021/04/22 | 694 | macros/optex/base/f-pagella.opm
2021/04/22 | 1515 | macros/optex/base/f-poltawski.opm
-2021/04/22 | 2617 | macros/optex/base/f-roboto.opm
+2021/04/27 | 2617 | macros/optex/base/f-roboto.opm
2021/04/22 | 690 | macros/optex/base/f-schola.opm
2021/04/22 | 1525 | macros/optex/base/f-sourcepro.opm
2021/04/22 | 1115 | macros/optex/base/f-technika.opm
@@ -224938,25 +224953,25 @@
2021/01/11 | 9690 | macros/optex/base/hi-syntax.opm
2021/01/07 | 3018 | macros/optex/base/hisyntax-python.opm
2021/01/07 | 1566 | macros/optex/base/hisyntax-tex.opm
-2021/04/17 | 7704 | macros/optex/base/hyperlinks.opm
+2021/05/21 | 9828 | macros/optex/base/hyperlinks.opm
2021/03/29 | 11861 | macros/optex/base/hyphen-lan.opm
2021/02/08 | 12374 | macros/optex/base/if-macros.opm
2021/01/06 | 3270 | macros/optex/base/keyval.opm
-2021/04/06 | 9395 | macros/optex/base/languages.opm
+2021/05/23 | 9424 | macros/optex/base/languages.opm
2021/03/10 | 5218 | macros/optex/base/lists.opm
2021/01/11 | 2377 | macros/optex/base/logos.opm
2021/04/06 | 7398 | macros/optex/base/luatex-ini.opm
-2021/02/15 | 19133 | macros/optex/base/makeindex.opm
+2021/05/16 | 19136 | macros/optex/base/makeindex.opm
2021/02/09 | 6432 | macros/optex/base/maketoc.opm
2021/03/15 | 3770 | macros/optex/base/margins.opm
2021/04/20 | 13569 | macros/optex/base/mathclass.opm
-2021/04/25 | 44514 | macros/optex/base/math-macros.opm
+2021/05/13 | 44569 | macros/optex/base/math-macros.opm
2021/01/26 | 9694 | macros/optex/base/math-preload.opm
2021/04/04 | 11389 | macros/optex/base/math-unicode.opm
2021/04/25 | 12400 | macros/optex/base/more-macros.opm
-2021/01/07 | 4756 | macros/optex/base/multicolumns.opm
-2021/04/25 | 4061 | macros/optex/base/optex.ini
-2021/03/05 | 12714 | macros/optex/base/optex.lua
+2021/05/20 | 4856 | macros/optex/base/multicolumns.opm
+2021/06/03 | 4061 | macros/optex/base/optex.ini
+2021/05/11 | 12712 | macros/optex/base/optex.lua
2021/02/06 | 3741 | macros/optex/base/others.opm
2021/02/15 | 4624 | macros/optex/base/outlines.opm
2021/03/15 | 11575 | macros/optex/base/output.opm
@@ -224969,34 +224984,36 @@
2021/04/13 | 6005 | macros/optex/base/ref-file.opm
2021/03/24 | 20821 | macros/optex/base/sections.opm
2021/04/22 | 13063 | macros/optex/base/slides.opm
-2021/03/10 | 3865 | macros/optex/base/styles.opm
-2021/04/12 | 24509 | macros/optex/base/table.opm
+2021/05/16 | 2752 | macros/optex/base/styles.opm
+2021/06/03 | 26718 | macros/optex/base/table.opm
2021/04/13 | 122831 | macros/optex/base/uni-lcuc.opm
2021/04/25 | 19640 | macros/optex/base/unimath-codes.opm
2021/01/31 | 241445 | macros/optex/base/unimath-table.opm
-2021/04/14 | 16023 | macros/optex/base/usebib.opm
+2021/04/30 | 16097 | macros/optex/base/usebib.opm
2021/04/18 | 17054 | macros/optex/base/verbatim.opm
2020/12/05 | 9599 | macros/optex/demo/op-biblist.bib
-2021/01/22 | 3498 | macros/optex/demo/op-demo.tex
+2021/05/19 | 3498 | macros/optex/demo/op-demo.tex
2021/01/07 | 1192 | macros/optex/demo/op-letter-cs.tex
2021/01/07 | 573 | macros/optex/demo/op-letter-en.tex
2021/04/08 | 8265 | macros/optex/demo/op-mathalign.tex
2020/05/16 | 512984 | macros/optex/demo/op-ring.png
2020/05/17 | 62385 | macros/optex/demo/op-slides-bg.png
2021/04/13 | 10355 | macros/optex/demo/op-slides.tex
+2021/05/27 | 518 | macros/optex/doc/mte-doc.tex
2021/04/17 | 34526 | macros/optex/doc/omls.tex
2020/05/16 | 1460 | macros/optex/doc/optex.1
-2021/04/25 | 1405606 | macros/optex/doc/optex-doc.pdf
-2021/04/25 | 3958 | macros/optex/doc/optex-doc.tex
+2021/06/03 | 1383214 | macros/optex/doc/optex-doc.pdf
+2021/06/03 | 4476 | macros/optex/doc/optex-doc.tex
2021/04/02 | 69264 | macros/optex/doc/optex-math.tex
-2021/04/07 | 8079 | macros/optex/doc/optex-techdoc.tex
-2021/04/13 | 86515 | macros/optex/doc/optex-userdoc.tex
-2021/04/25 | 1950 | macros/optex/pkg/emoji.opm
+2021/04/28 | 8279 | macros/optex/doc/optex-techdoc.tex
+2021/05/27 | 86959 | macros/optex/doc/optex-userdoc.tex
+2021/05/02 | 1949 | macros/optex/pkg/emoji.opm
+2021/05/27 | 21561 | macros/optex/pkg/mte.opm
2020/12/20 | 1087 | macros/optex/pkg/plain-at.opm
2020/11/11 | 85045 | macros/optex/pkg/qrcode.opm
-2021/01/08 | 7598 | macros/optex/pkg/vlna.opm
-2021/04/25 | 5869 | macros/optex/README
-2021/04/26 | 2348904 | macros/optex.zip
+2021/05/02 | 7597 | macros/optex/pkg/vlna.opm
+2021/06/03 | 6196 | macros/optex/README
+2021/06/03 | 2340500 | macros/optex.zip
2021/01/05 | 732 | macros/pdftex/mptopdf/doc/context/scripts/mkii/mptopdf.man
2021/01/05 | 4557 | macros/pdftex/mptopdf/scripts/context/perl/mptopdf.pl
2021/01/05 | 4608 | macros/pdftex/mptopdf/scripts/context/stubs/mswin/mptopdf.exe
@@ -262156,340 +262173,342 @@
1994/01/18 | 7272 | support/tex-it/texitrc.unx
1994/01/18 | 25068 | support/tex-it/texit.tex
2006/03/12 | 50172 | support/tex-it.zip
-2021/05/22 | 159 | support/texlab/build.rs
-2021/05/22 | 65697 | support/texlab/Cargo.lock
-2021/05/22 | 2217 | support/texlab/Cargo.toml
-2021/05/22 | 13757 | support/texlab/CHANGELOG.md
-2021/05/22 | 183 | support/texlab/CONTRIBUTING.md
-2021/05/22 | 24234835 | support/texlab/data/components.json
-2021/05/22 | 57018 | support/texlab/data/lang_data.json
-2021/05/22 | 2021 | support/texlab/docs/custom_messages.md
-2021/05/22 | 380190 | support/texlab/docs/demo.gif
-2021/05/22 | 2250 | support/texlab/docs/lsp_kinds.md
-2021/05/22 | 2988 | support/texlab/docs/options.md
-2021/05/22 | 6092 | support/texlab/docs/previewing.md
-2021/05/22 | 745 | support/texlab/docs/tectonic.md
-2021/05/22 | 35149 | support/texlab/LICENSE
-2021/05/22 | 4533 | support/texlab/README.md
-2021/05/22 | 6 | support/texlab/rust-toolchain
-2021/05/22 | 4994 | support/texlab/src/capabilities.rs
-2021/05/22 | 56296 | support/texlab/src/citation/apa.csl
-2021/05/22 | 4729 | support/texlab/src/citation/bibutils.rs
-2021/05/22 | 4294 | support/texlab/src/citation/name/parser.lalrpop
-2021/05/22 | 8414 | support/texlab/src/citation/name.rs
-2021/05/22 | 16188 | support/texlab/src/citation/ris.rs
-2021/05/22 | 4587 | support/texlab/src/citation.rs
-2021/05/22 | 1593 | support/texlab/src/client.rs
-2021/05/22 | 4218 | support/texlab/src/component_db.rs
-2021/05/22 | 2801 | support/texlab/src/config.rs
-2021/05/22 | 883 | support/texlab/src/context.rs
-2021/05/22 | 4561 | support/texlab/src/diagnostics/bibtex.rs
-2021/05/22 | 2070 | support/texlab/src/diagnostics/build_log.rs
-2021/05/22 | 3167 | support/texlab/src/diagnostics/chktex.rs
-2021/05/22 | 2240 | support/texlab/src/diagnostics/debouncer.rs
-2021/05/22 | 4195 | support/texlab/src/diagnostics/latex.rs
-2021/05/22 | 1780 | support/texlab/src/diagnostics.rs
-2021/05/22 | 2084 | support/texlab/src/dispatch.rs
-2021/05/22 | 2019 | support/texlab/src/distro/kpsewhich.rs
-2021/05/22 | 2620 | support/texlab/src/distro/miktex.rs
-2021/05/22 | 2108 | support/texlab/src/distro.rs
-2021/05/22 | 1074 | support/texlab/src/distro/texlive.rs
-2021/05/22 | 3627 | support/texlab/src/features/build.rs
-2021/05/22 | 5204 | support/texlab/src/features/completion/acronym_ref.rs
-2021/05/22 | 5650 | support/texlab/src/features/completion/argument.rs
-2021/05/22 | 2337 | support/texlab/src/features/completion/begin_command.rs
-2021/05/22 | 7200 | support/texlab/src/features/completion/citation.rs
-2021/05/22 | 5640 | support/texlab/src/features/completion/color_model.rs
-2021/05/22 | 3389 | support/texlab/src/features/completion/color.rs
-2021/05/22 | 5361 | support/texlab/src/features/completion/component_command.rs
-2021/05/22 | 5190 | support/texlab/src/features/completion/component_environment.rs
-2021/05/22 | 6955 | support/texlab/src/features/completion/entry_type.rs
-2021/05/22 | 5895 | support/texlab/src/features/completion/field.rs
-2021/05/22 | 4496 | support/texlab/src/features/completion/glossary_ref.rs
-2021/05/22 | 5917 | support/texlab/src/features/completion/import.rs
-2021/05/22 | 5485 | support/texlab/src/features/completion/include.rs
-2021/05/22 | 6850 | support/texlab/src/features/completion/label.rs
-2021/05/22 | 23209 | support/texlab/src/features/completion.rs
-2021/05/22 | 4482 | support/texlab/src/features/completion/theorem.rs
-2021/05/22 | 5051 | support/texlab/src/features/completion/tikz_library.rs
-2021/05/22 | 3471 | support/texlab/src/features/completion/types.rs
-2021/05/22 | 2874 | support/texlab/src/features/completion/user_command.rs
-2021/05/22 | 3308 | support/texlab/src/features/completion/user_environment.rs
-2021/05/22 | 1789 | support/texlab/src/features/completion/util.rs
-2021/05/22 | 7230 | support/texlab/src/features/cursor.rs
-2021/05/22 | 3982 | support/texlab/src/features/definition/command.rs
-2021/05/22 | 3615 | support/texlab/src/features/definition/document.rs
-2021/05/22 | 3856 | support/texlab/src/features/definition/entry.rs
-2021/05/22 | 2688 | support/texlab/src/features/definition/label.rs
-2021/05/22 | 1084 | support/texlab/src/features/definition.rs
-2021/05/22 | 5296 | support/texlab/src/features/definition/string.rs
-2021/05/22 | 7067 | support/texlab/src/features/folding.rs
-2021/05/22 | 12483 | support/texlab/src/features/formatting/bibtex_internal.rs
-2021/05/22 | 1457 | support/texlab/src/features/formatting/latexindent.rs
-2021/05/22 | 745 | support/texlab/src/features/formatting.rs
-2021/05/22 | 117 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__command.snap
-2021/05/22 | 124 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__concatenation.snap
-2021/05/22 | 114 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__insert_braces.snap
-2021/05/22 | 565 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__multiple_entries.snap
-2021/05/22 | 102 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__parens.snap
-2021/05/22 | 111 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__preamble.snap
-2021/05/22 | 107 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__string.snap
-2021/05/22 | 114 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__trailing_comma.snap
-2021/05/22 | 299 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__wrap_long_lines.snap
-2021/05/22 | 3317 | support/texlab/src/features/forward_search.rs
-2021/05/22 | 5131 | support/texlab/src/features/highlight/label.rs
-2021/05/22 | 381 | support/texlab/src/features/highlight.rs
-2021/05/22 | 4010 | support/texlab/src/features/hover/citation.rs
-2021/05/22 | 3043 | support/texlab/src/features/hover/component.rs
-2021/05/22 | 3670 | support/texlab/src/features/hover/entry_type.rs
-2021/05/22 | 3693 | support/texlab/src/features/hover/field.rs
-2021/05/22 | 2246 | support/texlab/src/features/hover/label.rs
-2021/05/22 | 1265 | support/texlab/src/features/hover.rs
-2021/05/22 | 4060 | support/texlab/src/features/hover/string_ref.rs
-2021/05/22 | 3409 | support/texlab/src/features/link.rs
-2021/05/22 | 3993 | support/texlab/src/features/lsp_kinds.rs
-2021/05/22 | 6832 | support/texlab/src/features/reference/entry.rs
-2021/05/22 | 6188 | support/texlab/src/features/reference/label.rs
-2021/05/22 | 821 | support/texlab/src/features/reference.rs
-2021/05/22 | 6618 | support/texlab/src/features/reference/string.rs
-2021/05/22 | 3072 | support/texlab/src/features/rename/command.rs
-2021/05/22 | 5460 | support/texlab/src/features/rename/entry.rs
-2021/05/22 | 4912 | support/texlab/src/features/rename/label.rs
-2021/05/22 | 1138 | support/texlab/src/features/rename.rs
-2021/05/22 | 9399 | support/texlab/src/features.rs
-2021/05/22 | 10438 | support/texlab/src/features/semantic/bibtex.rs
-2021/05/22 | 2361 | support/texlab/src/features/semantic/legend.rs
-2021/05/22 | 559 | support/texlab/src/features/semantic.rs
-2021/05/22 | 3370 | support/texlab/src/features/symbol/bibtex.rs
-2021/05/22 | 14204 | support/texlab/src/features/symbol/latex.rs
-2021/05/22 | 6888 | support/texlab/src/features/symbol/project_order.rs
-2021/05/22 | 3553 | support/texlab/src/features/symbol.rs
-2021/05/22 | 3707 | support/texlab/src/features/symbol/types.rs
-2021/05/22 | 8660 | support/texlab/src/label.rs
-2021/05/22 | 1998 | support/texlab/src/lang_data.rs
-2021/05/22 | 923 | support/texlab/src/language.rs
-2021/05/22 | 688 | support/texlab/src/lib.rs
-2021/05/22 | 1270 | support/texlab/src/line_index_ext.rs
-2021/05/22 | 6484 | support/texlab/src/line_index.rs
-2021/05/22 | 1914 | support/texlab/src/main.rs
-2021/05/22 | 2045 | support/texlab/src/options.rs
-2021/05/22 | 488 | support/texlab/src/range.rs
-2021/05/22 | 361 | support/texlab/src/req_queue.rs
-2021/05/22 | 29437 | support/texlab/src/server.rs
-2021/05/22 | 5847 | support/texlab/src/syntax/bibtex/cst.rs
-2021/05/22 | 846 | support/texlab/src/syntax/bibtex/kind.rs
-2021/05/22 | 1662 | support/texlab/src/syntax/bibtex/lexer.rs
-2021/05/22 | 10375 | support/texlab/src/syntax/bibtex/parser.rs
-2021/05/22 | 802 | support/texlab/src/syntax/bibtex.rs
-2021/05/22 | 85 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__empty.snap
-2021/05/22 | 989 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_complete_parens.snap
-2021/05/22 | 209 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields_missing_comma.snap
-2021/05/22 | 231 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields.snap
-2021/05/22 | 640 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_number_key.snap
-2021/05/22 | 632 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field.snap
-2021/05/22 | 654 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_trailing_comma.snap
-2021/05/22 | 769 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields_incomplete.snap
-2021/05/22 | 1061 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields.snap
-2021/05/22 | 181 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__junk.snap
-2021/05/22 | 480 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__preamble_casing.snap
-2021/05/22 | 480 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__preamble_complete.snap
-2021/05/22 | 446 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__preamble_missing_end.snap
-2021/05/22 | 519 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__string_casing.snap
-2021/05/22 | 519 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__string_complete.snap
-2021/05/22 | 1038 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__string_concatenation.snap
-2021/05/22 | 517 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__string_incomplete.snap
-2021/05/22 | 517 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__string_missing_quote.snap
-2021/05/22 | 51420 | support/texlab/src/syntax/build_log.rs
-2021/05/22 | 341 | support/texlab/src/syntax/latex/analysis/command.rs
-2021/05/22 | 2171 | support/texlab/src/syntax/latex/analysis/distro_file.rs
-2021/05/22 | 362 | support/texlab/src/syntax/latex/analysis/environment.rs
-2021/05/22 | 2335 | support/texlab/src/syntax/latex/analysis/explicit_link.rs
-2021/05/22 | 1578 | support/texlab/src/syntax/latex/analysis/implicit_link.rs
-2021/05/22 | 1910 | support/texlab/src/syntax/latex/analysis/label_name.rs
-2021/05/22 | 637 | support/texlab/src/syntax/latex/analysis/label_number.rs
-2021/05/22 | 1141 | support/texlab/src/syntax/latex/analysis.rs
-2021/05/22 | 586 | support/texlab/src/syntax/latex/analysis/theorem.rs
-2021/05/22 | 1862 | support/texlab/src/syntax/latex/analysis/types.rs
-2021/05/22 | 16759 | support/texlab/src/syntax/latex/cst.rs
-2021/05/22 | 4380 | support/texlab/src/syntax/latex/kind.rs
-2021/05/22 | 6927 | support/texlab/src/syntax/latex/lexer.rs
-2021/05/22 | 45753 | support/texlab/src/syntax/latex/parser.rs
-2021/05/22 | 833 | support/texlab/src/syntax/latex.rs
-2021/05/22 | 575 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__command_with_parameter.snap
-2021/05/22 | 277 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__command_with_star.snap
-2021/05/22 | 425 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__comment.snap
-2021/05/22 | 901 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__delimiters.snap
-2021/05/22 | 76 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__empty.snap
-2021/05/22 | 234 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__escape_sequence.snap
-2021/05/22 | 614 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__formula.snap
-2021/05/22 | 123 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__invalid_parameter.snap
-2021/05/22 | 1454 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acronym_declaration.snap
-2021/05/22 | 1353 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_options.snap
-2021/05/22 | 721 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_simple.snap
-2021/05/22 | 765 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_options.snap
-2021/05/22 | 310 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_simple.snap
-2021/05/22 | 822 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_options.snap
-2021/05/22 | 334 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_simple.snap
-2021/05/22 | 318 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__bibtex_include_simple.snap
-2021/05/22 | 281 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__brace_group_missing_end.snap
-2021/05/22 | 283 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__brace_group_simple.snap
-2021/05/22 | 621 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_error.snap
-2021/05/22 | 727 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_figure.snap
-2021/05/22 | 489 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_minimal_error.snap
-2021/05/22 | 491 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_minimal.snap
-2021/05/22 | 623 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption.snap
-2021/05/22 | 243 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_empty.snap
-2021/05/22 | 268 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_missing_brace.snap
-2021/05/22 | 361 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_multiple_keys.snap
-2021/05/22 | 537 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote_postnote.snap
-2021/05/22 | 405 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote.snap
-2021/05/22 | 327 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_redundant_comma.snap
-2021/05/22 | 275 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_simple.snap
-2021/05/22 | 275 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_star.snap
-2021/05/22 | 281 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_empty.snap
-2021/05/22 | 1029 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_options.snap
-2021/05/22 | 318 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_simple.snap
-2021/05/22 | 668 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_definition_simple.snap
-2021/05/22 | 292 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_reference_simple.snap
-2021/05/22 | 750 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error1.snap
-2021/05/22 | 546 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error2.snap
-2021/05/22 | 455 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error3.snap
-2021/05/22 | 302 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error4.snap
-2021/05/22 | 841 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_simple.snap
-2021/05/22 | 464 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_no_argc.snap
-2021/05/22 | 354 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_no_impl_error.snap
-2021/05/22 | 356 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_no_impl.snap
-2021/05/22 | 595 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_simple.snap
-2021/05/22 | 100 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__empty.snap
-2021/05/22 | 1073 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_definition.snap
-2021/05/22 | 1191 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested_missing_braces.snap
-2021/05/22 | 1041 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested.snap
-2021/05/22 | 682 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_simple.snap
-2021/05/22 | 293 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_label_reference_simple.snap
-2021/05/22 | 764 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_begin.snap
-2021/05/22 | 795 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_end.snap
-2021/05/22 | 360 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation.snap
-2021/05/22 | 354 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__escaped_brackets.snap
-2021/05/22 | 425 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__generic_command_args.snap
-2021/05/22 | 170 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__generic_command_empty.snap
-2021/05/22 | 166 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__generic_command_escape.snap
-2021/05/22 | 923 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_definition_simple.snap
-2021/05/22 | 854 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_options.snap
-2021/05/22 | 295 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_simple.snap
-2021/05/22 | 675 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_options.snap
-2021/05/22 | 336 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_simple.snap
-2021/05/22 | 205 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__hello_world.snap
-2021/05/22 | 294 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_incomplete.snap
-2021/05/22 | 387 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_simple.snap
-2021/05/22 | 647 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_options.snap
-2021/05/22 | 308 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_simple.snap
-2021/05/22 | 630 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inline_double_dollar.snap
-2021/05/22 | 624 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inline.snap
-2021/05/22 | 290 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_definition_simple.snap
-2021/05/22 | 537 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_number.snap
-2021/05/22 | 371 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_multiple.snap
-2021/05/22 | 426 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_error.snap
-2021/05/22 | 337 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_incomplete.snap
-2021/05/22 | 428 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_simple.snap
-2021/05/22 | 282 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_simple.snap
-2021/05/22 | 301 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_include_simple.snap
-2021/05/22 | 305 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_input_simple.snap
-2021/05/22 | 364 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__math_operator_no_impl.snap
-2021/05/22 | 472 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__math_operator_simple.snap
-2021/05/22 | 279 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_empty.snap
-2021/05/22 | 408 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_multiple.snap
-2021/05/22 | 1027 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_options.snap
-2021/05/22 | 316 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_simple.snap
-2021/05/22 | 124 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__parameter_error.snap
-2021/05/22 | 126 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__parameter.snap
-2021/05/22 | 322 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__pgf_library_import_simple.snap
-2021/05/22 | 1237 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_enum_item.snap
-2021/05/22 | 521 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_invalid_nesting.snap
-2021/05/22 | 1791 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_nested.snap
-2021/05/22 | 677 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_siblings.snap
-2021/05/22 | 655 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_options.snap
-2021/05/22 | 316 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_simple.snap
-2021/05/22 | 671 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_full.snap
-2021/05/22 | 448 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_counter.snap
-2021/05/22 | 556 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description_and_counter.snap
-2021/05/22 | 441 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description.snap
-2021/05/22 | 333 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_only_name.snap
-2021/05/22 | 324 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__tikz_library_import_simple.snap
-2021/05/22 | 206 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__unmatched_braces.snap
-2021/05/22 | 206 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__unmatched_brackets.snap
-2021/05/22 | 285 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__unmatched_brackets_with_group.snap
-2021/05/22 | 332 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__verbatim_include_simple.snap
-2021/05/22 | 342 | support/texlab/src/syntax.rs
-2021/05/22 | 1886 | support/texlab/src/uri.rs
-2021/05/22 | 2209 | support/texlab/src/workspace/api.rs
-2021/05/22 | 2564 | support/texlab/src/workspace/children_expand.rs
-2021/05/22 | 3243 | support/texlab/src/workspace/document.rs
-2021/05/22 | 3596 | support/texlab/src/workspace/parent_expand.rs
-2021/05/22 | 869 | support/texlab/src/workspace.rs
-2021/05/22 | 3994 | support/texlab/src/workspace/storage.rs
-2021/05/22 | 2984 | support/texlab/src/workspace/watch.rs
-2021/05/22 | 11495 | support/texlab/tests/integration/common.rs
-2021/05/22 | 21810 | support/texlab/tests/integration/completion.rs
-2021/05/22 | 11519 | support/texlab/tests/integration/document_symbol.rs
-2021/05/22 | 2218 | support/texlab/tests/integration/hover.rs
-2021/05/22 | 1243 | support/texlab/tests/integration/issues.rs
-2021/05/22 | 125 | support/texlab/tests/integration/main.rs
-2021/05/22 | 2906 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__command_complete_entry.snap
-2021/05/22 | 2906 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__command_incomplete_entry.snap
-2021/05/22 | 148 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__empty_document.snap
-2021/05/22 | 1080 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__entry_type_complete.snap
-2021/05/22 | 148 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__entry_type_empty_name_before.snap
-2021/05/22 | 4165 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__entry_type_empty_name.snap
-2021/05/22 | 2221 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__entry_type_incomplete.snap
-2021/05/22 | 4190 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__field_complete_entry.snap
-2021/05/22 | 4190 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__field_incomplete_entry.snap
-2021/05/22 | 148 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__junk.snap
-2021/05/22 | 9420 | support/texlab/tests/integration/snapshots/integration__completion__latex__begin_command.snap
-2021/05/22 | 152 | support/texlab/tests/integration/snapshots/integration__completion__latex__citation_after.snap
-2021/05/22 | 763 | support/texlab/tests/integration/snapshots/integration__completion__latex__citation_open_brace.snap
-2021/05/22 | 1210 | support/texlab/tests/integration/snapshots/integration__completion__latex__citation.snap
-2021/05/22 | 2897 | support/texlab/tests/integration/snapshots/integration__completion__latex__class_command.snap
-2021/05/22 | 540 | support/texlab/tests/integration/snapshots/integration__completion__latex__class_environment.snap
-2021/05/22 | 4948 | support/texlab/tests/integration/snapshots/integration__completion__latex__class_import.snap
-2021/05/22 | 1209 | support/texlab/tests/integration/snapshots/integration__completion__latex__color_model_define_color_set.snap
-2021/05/22 | 1917 | support/texlab/tests/integration/snapshots/integration__completion__latex__color_model_define_color.snap
-2021/05/22 | 2658 | support/texlab/tests/integration/snapshots/integration__completion__latex__color_name.snap
-2021/05/22 | 148 | support/texlab/tests/integration/snapshots/integration__completion__latex__empty_document.snap
-2021/05/22 | 540 | support/texlab/tests/integration/snapshots/integration__completion__latex__kernel_command_environment.snap
-2021/05/22 | 3400 | support/texlab/tests/integration/snapshots/integration__completion__latex__kernel_command_glyph.snap
-2021/05/22 | 549 | support/texlab/tests/integration/snapshots/integration__completion__latex__kernel_command.snap
-2021/05/22 | 2903 | support/texlab/tests/integration/snapshots/integration__completion__latex__label.snap
-2021/05/22 | 2773 | support/texlab/tests/integration/snapshots/integration__completion__latex__package_command.snap
-2021/05/22 | 2873 | support/texlab/tests/integration/snapshots/integration__completion__latex__package_environment.snap
-2021/05/22 | 4053 | support/texlab/tests/integration/snapshots/integration__completion__latex__package_import.snap
-2021/05/22 | 2825 | support/texlab/tests/integration/snapshots/integration__completion__latex__pgf_library.snap
-2021/05/22 | 2863 | support/texlab/tests/integration/snapshots/integration__completion__latex__preselect_environment.snap
-2021/05/22 | 2478 | support/texlab/tests/integration/snapshots/integration__completion__latex__theorem_environment.snap
-2021/05/22 | 538 | support/texlab/tests/integration/snapshots/integration__completion__latex__user_command.snap
-2021/05/22 | 928 | support/texlab/tests/integration/snapshots/integration__completion__latex__user_environment.snap
-2021/05/22 | 1687 | support/texlab/tests/integration/snapshots/integration__document_symbol__enumerate_flat.snap
-2021/05/22 | 2657 | support/texlab/tests/integration/snapshots/integration__document_symbol__enumerate_nested.snap
-2021/05/22 | 1074 | support/texlab/tests/integration/snapshots/integration__document_symbol__equation_flat.snap
-2021/05/22 | 1405 | support/texlab/tests/integration/snapshots/integration__document_symbol__equation_nested.snap
-2021/05/22 | 1078 | support/texlab/tests/integration/snapshots/integration__document_symbol__float_flat.snap
-2021/05/22 | 1413 | support/texlab/tests/integration/snapshots/integration__document_symbol__float_nested.snap
-2021/05/22 | 1051 | support/texlab/tests/integration/snapshots/integration__document_symbol__section_flat.snap
-2021/05/22 | 1494 | support/texlab/tests/integration/snapshots/integration__document_symbol__section_nested.snap
-2021/05/22 | 1398 | support/texlab/tests/integration/snapshots/integration__document_symbol__theorem_flat.snap
-2021/05/22 | 1854 | support/texlab/tests/integration/snapshots/integration__document_symbol__theorem_nested.snap
-2021/05/22 | 88 | support/texlab/tests/integration/snapshots/integration__hover__empty_bibtex_document.snap
-2021/05/22 | 88 | support/texlab/tests/integration/snapshots/integration__hover__empty_labtex_document.snap
-2021/05/22 | 297 | support/texlab/tests/integration/snapshots/integration__hover__label_theorem_child_file_mumber.snap
-2021/05/22 | 289 | support/texlab/tests/integration/snapshots/integration__hover__label_theorem_child_file.snap
-2021/05/22 | 721 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_bibtex.snap
-2021/05/22 | 416 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_type_figure.snap
-2021/05/22 | 1035 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_type_item.snap
-2021/05/22 | 741 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_type_math.snap
-2021/05/22 | 1365 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_type_section.snap
-2021/05/22 | 3181 | support/texlab/tests/integration/workspace_symbol.rs
-2021/05/22 | 643 | support/texlab/texlab.1
-2021/05/22 | 84894 | support/texlab/texlab.pdf
-2021/05/22 | 7691144 | support/texlab.zip
+2021/06/03 | 159 | support/texlab/build.rs
+2021/06/03 | 65446 | support/texlab/Cargo.lock
+2021/06/03 | 2257 | support/texlab/Cargo.toml
+2021/06/03 | 14708 | support/texlab/CHANGELOG.md
+2021/06/03 | 183 | support/texlab/CONTRIBUTING.md
+2021/06/03 | 24234835 | support/texlab/data/components.json
+2021/06/03 | 57018 | support/texlab/data/lang_data.json
+2021/06/03 | 2021 | support/texlab/docs/custom_messages.md
+2021/06/03 | 380190 | support/texlab/docs/demo.gif
+2021/06/03 | 2250 | support/texlab/docs/lsp_kinds.md
+2021/06/03 | 3779 | support/texlab/docs/options.md
+2021/06/03 | 6092 | support/texlab/docs/previewing.md
+2021/06/03 | 745 | support/texlab/docs/tectonic.md
+2021/06/03 | 35149 | support/texlab/LICENSE
+2021/06/03 | 4427 | support/texlab/README.md
+2021/06/03 | 6 | support/texlab/rust-toolchain
+2021/06/03 | 4994 | support/texlab/src/capabilities.rs
+2021/06/03 | 56296 | support/texlab/src/citation/apa.csl
+2021/06/03 | 4729 | support/texlab/src/citation/bibutils.rs
+2021/06/03 | 4294 | support/texlab/src/citation/name/parser.lalrpop
+2021/06/03 | 8414 | support/texlab/src/citation/name.rs
+2021/06/03 | 16188 | support/texlab/src/citation/ris.rs
+2021/06/03 | 4603 | support/texlab/src/citation.rs
+2021/06/03 | 1593 | support/texlab/src/client.rs
+2021/06/03 | 4218 | support/texlab/src/component_db.rs
+2021/06/03 | 2801 | support/texlab/src/config.rs
+2021/06/03 | 883 | support/texlab/src/context.rs
+2021/06/03 | 4712 | support/texlab/src/diagnostics/bibtex.rs
+2021/06/03 | 2070 | support/texlab/src/diagnostics/build_log.rs
+2021/06/03 | 3167 | support/texlab/src/diagnostics/chktex.rs
+2021/06/03 | 2240 | support/texlab/src/diagnostics/debouncer.rs
+2021/06/03 | 4314 | support/texlab/src/diagnostics/latex.rs
+2021/06/03 | 1780 | support/texlab/src/diagnostics.rs
+2021/06/03 | 2084 | support/texlab/src/dispatch.rs
+2021/06/03 | 2019 | support/texlab/src/distro/kpsewhich.rs
+2021/06/03 | 2620 | support/texlab/src/distro/miktex.rs
+2021/06/03 | 2108 | support/texlab/src/distro.rs
+2021/06/03 | 1074 | support/texlab/src/distro/texlive.rs
+2021/06/03 | 3627 | support/texlab/src/features/build.rs
+2021/06/03 | 4940 | support/texlab/src/features/completion/acronym_ref.rs
+2021/06/03 | 5650 | support/texlab/src/features/completion/argument.rs
+2021/06/03 | 2337 | support/texlab/src/features/completion/begin_command.rs
+2021/06/03 | 8762 | support/texlab/src/features/completion/citation.rs
+2021/06/03 | 5267 | support/texlab/src/features/completion/color_model.rs
+2021/06/03 | 3122 | support/texlab/src/features/completion/color.rs
+2021/06/03 | 5361 | support/texlab/src/features/completion/component_command.rs
+2021/06/03 | 4769 | support/texlab/src/features/completion/component_environment.rs
+2021/06/03 | 6955 | support/texlab/src/features/completion/entry_type.rs
+2021/06/03 | 5896 | support/texlab/src/features/completion/field.rs
+2021/06/03 | 4238 | support/texlab/src/features/completion/glossary_ref.rs
+2021/06/03 | 5679 | support/texlab/src/features/completion/import.rs
+2021/06/03 | 5217 | support/texlab/src/features/completion/include.rs
+2021/06/03 | 7281 | support/texlab/src/features/completion/label.rs
+2021/06/03 | 23660 | support/texlab/src/features/completion.rs
+2021/06/03 | 4091 | support/texlab/src/features/completion/theorem.rs
+2021/06/03 | 4814 | support/texlab/src/features/completion/tikz_library.rs
+2021/06/03 | 3467 | support/texlab/src/features/completion/types.rs
+2021/06/03 | 2874 | support/texlab/src/features/completion/user_command.rs
+2021/06/03 | 2878 | support/texlab/src/features/completion/user_environment.rs
+2021/06/03 | 1789 | support/texlab/src/features/completion/util.rs
+2021/06/03 | 9462 | support/texlab/src/features/cursor.rs
+2021/06/03 | 3982 | support/texlab/src/features/definition/command.rs
+2021/06/03 | 3615 | support/texlab/src/features/definition/document.rs
+2021/06/03 | 3928 | support/texlab/src/features/definition/entry.rs
+2021/06/03 | 2717 | support/texlab/src/features/definition/label.rs
+2021/06/03 | 1084 | support/texlab/src/features/definition.rs
+2021/06/03 | 5296 | support/texlab/src/features/definition/string.rs
+2021/06/03 | 7067 | support/texlab/src/features/folding.rs
+2021/06/03 | 12489 | support/texlab/src/features/formatting/bibtex_internal.rs
+2021/06/03 | 2614 | support/texlab/src/features/formatting/latexindent.rs
+2021/06/03 | 909 | support/texlab/src/features/formatting.rs
+2021/06/03 | 117 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__command.snap
+2021/06/03 | 124 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__concatenation.snap
+2021/06/03 | 114 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__insert_braces.snap
+2021/06/03 | 565 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__multiple_entries.snap
+2021/06/03 | 102 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__parens.snap
+2021/06/03 | 111 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__preamble.snap
+2021/06/03 | 107 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__string.snap
+2021/06/03 | 114 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__trailing_comma.snap
+2021/06/03 | 299 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__wrap_long_lines.snap
+2021/06/03 | 3317 | support/texlab/src/features/forward_search.rs
+2021/06/03 | 4916 | support/texlab/src/features/highlight/label.rs
+2021/06/03 | 479 | support/texlab/src/features/highlight.rs
+2021/06/03 | 4010 | support/texlab/src/features/hover/citation.rs
+2021/06/03 | 3043 | support/texlab/src/features/hover/component.rs
+2021/06/03 | 3670 | support/texlab/src/features/hover/entry_type.rs
+2021/06/03 | 3693 | support/texlab/src/features/hover/field.rs
+2021/06/03 | 2246 | support/texlab/src/features/hover/label.rs
+2021/06/03 | 1265 | support/texlab/src/features/hover.rs
+2021/06/03 | 4060 | support/texlab/src/features/hover/string_ref.rs
+2021/06/03 | 3409 | support/texlab/src/features/link.rs
+2021/06/03 | 3993 | support/texlab/src/features/lsp_kinds.rs
+2021/06/03 | 6843 | support/texlab/src/features/reference/entry.rs
+2021/06/03 | 6187 | support/texlab/src/features/reference/label.rs
+2021/06/03 | 821 | support/texlab/src/features/reference.rs
+2021/06/03 | 6618 | support/texlab/src/features/reference/string.rs
+2021/06/03 | 3072 | support/texlab/src/features/rename/command.rs
+2021/06/03 | 5041 | support/texlab/src/features/rename/entry.rs
+2021/06/03 | 4736 | support/texlab/src/features/rename/label.rs
+2021/06/03 | 1138 | support/texlab/src/features/rename.rs
+2021/06/03 | 9399 | support/texlab/src/features.rs
+2021/06/03 | 10438 | support/texlab/src/features/semantic/bibtex.rs
+2021/06/03 | 2361 | support/texlab/src/features/semantic/legend.rs
+2021/06/03 | 559 | support/texlab/src/features/semantic.rs
+2021/06/03 | 3364 | support/texlab/src/features/symbol/bibtex.rs
+2021/06/03 | 14223 | support/texlab/src/features/symbol/latex.rs
+2021/06/03 | 6888 | support/texlab/src/features/symbol/project_order.rs
+2021/06/03 | 3553 | support/texlab/src/features/symbol.rs
+2021/06/03 | 3707 | support/texlab/src/features/symbol/types.rs
+2021/06/03 | 8705 | support/texlab/src/label.rs
+2021/06/03 | 1998 | support/texlab/src/lang_data.rs
+2021/06/03 | 923 | support/texlab/src/language.rs
+2021/06/03 | 688 | support/texlab/src/lib.rs
+2021/06/03 | 1269 | support/texlab/src/line_index_ext.rs
+2021/06/03 | 6485 | support/texlab/src/line_index.rs
+2021/06/03 | 1914 | support/texlab/src/main.rs
+2021/06/03 | 2662 | support/texlab/src/options.rs
+2021/06/03 | 488 | support/texlab/src/range.rs
+2021/06/03 | 361 | support/texlab/src/req_queue.rs
+2021/06/03 | 29437 | support/texlab/src/server.rs
+2021/06/03 | 6579 | support/texlab/src/syntax/bibtex/cst.rs
+2021/06/03 | 855 | support/texlab/src/syntax/bibtex/kind.rs
+2021/06/03 | 1662 | support/texlab/src/syntax/bibtex/lexer.rs
+2021/06/03 | 10656 | support/texlab/src/syntax/bibtex/parser.rs
+2021/06/03 | 802 | support/texlab/src/syntax/bibtex.rs
+2021/06/03 | 85 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__empty.snap
+2021/06/03 | 1005 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_complete_parens.snap
+2021/06/03 | 225 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields_missing_comma.snap
+2021/06/03 | 247 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields.snap
+2021/06/03 | 656 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_number_key.snap
+2021/06/03 | 648 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field.snap
+2021/06/03 | 670 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_trailing_comma.snap
+2021/06/03 | 785 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields_incomplete.snap
+2021/06/03 | 1077 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields.snap
+2021/06/03 | 181 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__junk.snap
+2021/06/03 | 480 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__preamble_casing.snap
+2021/06/03 | 480 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__preamble_complete.snap
+2021/06/03 | 446 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__preamble_missing_end.snap
+2021/06/03 | 519 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__string_casing.snap
+2021/06/03 | 519 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__string_complete.snap
+2021/06/03 | 1038 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__string_concatenation.snap
+2021/06/03 | 517 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__string_incomplete.snap
+2021/06/03 | 517 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__string_missing_quote.snap
+2021/06/03 | 51420 | support/texlab/src/syntax/build_log.rs
+2021/06/03 | 341 | support/texlab/src/syntax/latex/analysis/command.rs
+2021/06/03 | 2171 | support/texlab/src/syntax/latex/analysis/distro_file.rs
+2021/06/03 | 366 | support/texlab/src/syntax/latex/analysis/environment.rs
+2021/06/03 | 2353 | support/texlab/src/syntax/latex/analysis/explicit_link.rs
+2021/06/03 | 1578 | support/texlab/src/syntax/latex/analysis/implicit_link.rs
+2021/06/03 | 1930 | support/texlab/src/syntax/latex/analysis/label_name.rs
+2021/06/03 | 634 | support/texlab/src/syntax/latex/analysis/label_number.rs
+2021/06/03 | 1141 | support/texlab/src/syntax/latex/analysis.rs
+2021/06/03 | 583 | support/texlab/src/syntax/latex/analysis/theorem.rs
+2021/06/03 | 1859 | support/texlab/src/syntax/latex/analysis/types.rs
+2021/06/03 | 17242 | support/texlab/src/syntax/latex/cst.rs
+2021/06/03 | 4380 | support/texlab/src/syntax/latex/kind.rs
+2021/06/03 | 6927 | support/texlab/src/syntax/latex/lexer.rs
+2021/06/03 | 45906 | support/texlab/src/syntax/latex/parser.rs
+2021/06/03 | 833 | support/texlab/src/syntax/latex.rs
+2021/06/03 | 575 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__command_with_parameter.snap
+2021/06/03 | 277 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__command_with_star.snap
+2021/06/03 | 425 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__comment.snap
+2021/06/03 | 901 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__delimiters.snap
+2021/06/03 | 76 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__empty.snap
+2021/06/03 | 234 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__escape_sequence.snap
+2021/06/03 | 614 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__formula.snap
+2021/06/03 | 123 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__invalid_parameter.snap
+2021/06/03 | 1475 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acronym_declaration.snap
+2021/06/03 | 1374 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_options.snap
+2021/06/03 | 742 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_simple.snap
+2021/06/03 | 786 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_options.snap
+2021/06/03 | 331 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_simple.snap
+2021/06/03 | 843 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_options.snap
+2021/06/03 | 355 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_simple.snap
+2021/06/03 | 339 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__bibtex_include_simple.snap
+2021/06/03 | 281 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__brace_group_missing_end.snap
+2021/06/03 | 283 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__brace_group_simple.snap
+2021/06/03 | 621 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_error.snap
+2021/06/03 | 772 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_figure.snap
+2021/06/03 | 489 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_minimal_error.snap
+2021/06/03 | 491 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_minimal.snap
+2021/06/03 | 623 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption.snap
+2021/06/03 | 243 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_empty.snap
+2021/06/03 | 287 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_missing_brace.snap
+2021/06/03 | 401 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_multiple_keys.snap
+2021/06/03 | 558 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote_postnote.snap
+2021/06/03 | 426 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote.snap
+2021/06/03 | 347 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_redundant_comma.snap
+2021/06/03 | 294 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_simple.snap
+2021/06/03 | 294 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_star.snap
+2021/06/03 | 281 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_empty.snap
+2021/06/03 | 1050 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_options.snap
+2021/06/03 | 339 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_simple.snap
+2021/06/03 | 710 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_definition_simple.snap
+2021/06/03 | 312 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_reference_simple.snap
+2021/06/03 | 855 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error1.snap
+2021/06/03 | 609 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error2.snap
+2021/06/03 | 497 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error3.snap
+2021/06/03 | 302 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error4.snap
+2021/06/03 | 967 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_simple.snap
+2021/06/03 | 464 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_no_argc.snap
+2021/06/03 | 354 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_no_impl_error.snap
+2021/06/03 | 356 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_no_impl.snap
+2021/06/03 | 616 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_simple.snap
+2021/06/03 | 100 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__empty.snap
+2021/06/03 | 1115 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_definition.snap
+2021/06/03 | 1286 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested_missing_braces.snap
+2021/06/03 | 1136 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested.snap
+2021/06/03 | 727 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_simple.snap
+2021/06/03 | 313 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_label_reference_simple.snap
+2021/06/03 | 808 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_begin.snap
+2021/06/03 | 839 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_end.snap
+2021/06/03 | 360 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation.snap
+2021/06/03 | 354 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__escaped_brackets.snap
+2021/06/03 | 425 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__generic_command_args.snap
+2021/06/03 | 170 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__generic_command_empty.snap
+2021/06/03 | 166 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__generic_command_escape.snap
+2021/06/03 | 944 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_definition_simple.snap
+2021/06/03 | 875 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_options.snap
+2021/06/03 | 314 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_simple.snap
+2021/06/03 | 696 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_options.snap
+2021/06/03 | 357 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_simple.snap
+2021/06/03 | 205 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__hello_world.snap
+2021/06/03 | 314 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_incomplete.snap
+2021/06/03 | 428 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_simple.snap
+2021/06/03 | 668 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_options.snap
+2021/06/03 | 329 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_simple.snap
+2021/06/03 | 630 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inline_double_dollar.snap
+2021/06/03 | 624 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inline.snap
+2021/06/03 | 310 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_definition_simple.snap
+2021/06/03 | 558 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_number.snap
+2021/06/03 | 411 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_multiple.snap
+2021/06/03 | 468 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_error.snap
+2021/06/03 | 358 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_incomplete.snap
+2021/06/03 | 470 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_simple.snap
+2021/06/03 | 301 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_simple.snap
+2021/06/03 | 321 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_include_simple.snap
+2021/06/03 | 325 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_input_simple.snap
+2021/06/03 | 364 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__math_operator_no_impl.snap
+2021/06/03 | 472 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__math_operator_simple.snap
+2021/06/03 | 279 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_empty.snap
+2021/06/03 | 450 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_multiple.snap
+2021/06/03 | 1048 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_options.snap
+2021/06/03 | 337 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_simple.snap
+2021/06/03 | 124 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__parameter_error.snap
+2021/06/03 | 126 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__parameter.snap
+2021/06/03 | 343 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__pgf_library_import_simple.snap
+2021/06/03 | 1282 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_enum_item.snap
+2021/06/03 | 521 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_invalid_nesting.snap
+2021/06/03 | 1791 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_nested.snap
+2021/06/03 | 677 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_siblings.snap
+2021/06/03 | 676 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_options.snap
+2021/06/03 | 337 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_simple.snap
+2021/06/03 | 734 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_full.snap
+2021/06/03 | 490 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_counter.snap
+2021/06/03 | 598 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description_and_counter.snap
+2021/06/03 | 462 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description.snap
+2021/06/03 | 354 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_only_name.snap
+2021/06/03 | 345 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__tikz_library_import_simple.snap
+2021/06/03 | 206 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__unmatched_braces.snap
+2021/06/03 | 206 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__unmatched_brackets.snap
+2021/06/03 | 285 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__unmatched_brackets_with_group.snap
+2021/06/03 | 353 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__verbatim_include_simple.snap
+2021/06/03 | 342 | support/texlab/src/syntax.rs
+2021/06/03 | 1886 | support/texlab/src/uri.rs
+2021/06/03 | 2209 | support/texlab/src/workspace/api.rs
+2021/06/03 | 2564 | support/texlab/src/workspace/children_expand.rs
+2021/06/03 | 3243 | support/texlab/src/workspace/document.rs
+2021/06/03 | 3596 | support/texlab/src/workspace/parent_expand.rs
+2021/06/03 | 869 | support/texlab/src/workspace.rs
+2021/06/03 | 3994 | support/texlab/src/workspace/storage.rs
+2021/06/03 | 2984 | support/texlab/src/workspace/watch.rs
+2021/06/03 | 11495 | support/texlab/tests/integration/common.rs
+2021/06/03 | 22741 | support/texlab/tests/integration/completion.rs
+2021/06/03 | 11519 | support/texlab/tests/integration/document_symbol.rs
+2021/06/03 | 2218 | support/texlab/tests/integration/hover.rs
+2021/06/03 | 1243 | support/texlab/tests/integration/issues.rs
+2021/06/03 | 125 | support/texlab/tests/integration/main.rs
+2021/06/03 | 2906 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__command_complete_entry.snap
+2021/06/03 | 2906 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__command_incomplete_entry.snap
+2021/06/03 | 148 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__empty_document.snap
+2021/06/03 | 1080 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__entry_type_complete.snap
+2021/06/03 | 148 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__entry_type_empty_name_before.snap
+2021/06/03 | 4165 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__entry_type_empty_name.snap
+2021/06/03 | 2221 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__entry_type_incomplete.snap
+2021/06/03 | 4190 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__field_complete_entry.snap
+2021/06/03 | 4190 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__field_incomplete_entry.snap
+2021/06/03 | 148 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__junk.snap
+2021/06/03 | 9420 | support/texlab/tests/integration/snapshots/integration__completion__latex__begin_command.snap
+2021/06/03 | 152 | support/texlab/tests/integration/snapshots/integration__completion__latex__citation_after.snap
+2021/06/03 | 776 | support/texlab/tests/integration/snapshots/integration__completion__latex__citation_multi_word.snap
+2021/06/03 | 763 | support/texlab/tests/integration/snapshots/integration__completion__latex__citation_open_brace.snap
+2021/06/03 | 1210 | support/texlab/tests/integration/snapshots/integration__completion__latex__citation.snap
+2021/06/03 | 2897 | support/texlab/tests/integration/snapshots/integration__completion__latex__class_command.snap
+2021/06/03 | 540 | support/texlab/tests/integration/snapshots/integration__completion__latex__class_environment.snap
+2021/06/03 | 4948 | support/texlab/tests/integration/snapshots/integration__completion__latex__class_import.snap
+2021/06/03 | 1209 | support/texlab/tests/integration/snapshots/integration__completion__latex__color_model_define_color_set.snap
+2021/06/03 | 1917 | support/texlab/tests/integration/snapshots/integration__completion__latex__color_model_define_color.snap
+2021/06/03 | 2658 | support/texlab/tests/integration/snapshots/integration__completion__latex__color_name.snap
+2021/06/03 | 148 | support/texlab/tests/integration/snapshots/integration__completion__latex__empty_document.snap
+2021/06/03 | 540 | support/texlab/tests/integration/snapshots/integration__completion__latex__kernel_command_environment.snap
+2021/06/03 | 3400 | support/texlab/tests/integration/snapshots/integration__completion__latex__kernel_command_glyph.snap
+2021/06/03 | 549 | support/texlab/tests/integration/snapshots/integration__completion__latex__kernel_command.snap
+2021/06/03 | 2903 | support/texlab/tests/integration/snapshots/integration__completion__latex__label.snap
+2021/06/03 | 2773 | support/texlab/tests/integration/snapshots/integration__completion__latex__package_command.snap
+2021/06/03 | 2873 | support/texlab/tests/integration/snapshots/integration__completion__latex__package_environment.snap
+2021/06/03 | 4053 | support/texlab/tests/integration/snapshots/integration__completion__latex__package_import.snap
+2021/06/03 | 2825 | support/texlab/tests/integration/snapshots/integration__completion__latex__pgf_library.snap
+2021/06/03 | 2863 | support/texlab/tests/integration/snapshots/integration__completion__latex__preselect_environment.snap
+2021/06/03 | 2478 | support/texlab/tests/integration/snapshots/integration__completion__latex__theorem_environment.snap
+2021/06/03 | 538 | support/texlab/tests/integration/snapshots/integration__completion__latex__user_command.snap
+2021/06/03 | 928 | support/texlab/tests/integration/snapshots/integration__completion__latex__user_environment.snap
+2021/06/03 | 1687 | support/texlab/tests/integration/snapshots/integration__document_symbol__enumerate_flat.snap
+2021/06/03 | 2657 | support/texlab/tests/integration/snapshots/integration__document_symbol__enumerate_nested.snap
+2021/06/03 | 1074 | support/texlab/tests/integration/snapshots/integration__document_symbol__equation_flat.snap
+2021/06/03 | 1405 | support/texlab/tests/integration/snapshots/integration__document_symbol__equation_nested.snap
+2021/06/03 | 1078 | support/texlab/tests/integration/snapshots/integration__document_symbol__float_flat.snap
+2021/06/03 | 1413 | support/texlab/tests/integration/snapshots/integration__document_symbol__float_nested.snap
+2021/06/03 | 1051 | support/texlab/tests/integration/snapshots/integration__document_symbol__section_flat.snap
+2021/06/03 | 1494 | support/texlab/tests/integration/snapshots/integration__document_symbol__section_nested.snap
+2021/06/03 | 1398 | support/texlab/tests/integration/snapshots/integration__document_symbol__theorem_flat.snap
+2021/06/03 | 1854 | support/texlab/tests/integration/snapshots/integration__document_symbol__theorem_nested.snap
+2021/06/03 | 88 | support/texlab/tests/integration/snapshots/integration__hover__empty_bibtex_document.snap
+2021/06/03 | 88 | support/texlab/tests/integration/snapshots/integration__hover__empty_labtex_document.snap
+2021/06/03 | 297 | support/texlab/tests/integration/snapshots/integration__hover__label_theorem_child_file_mumber.snap
+2021/06/03 | 289 | support/texlab/tests/integration/snapshots/integration__hover__label_theorem_child_file.snap
+2021/06/03 | 721 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_bibtex.snap
+2021/06/03 | 416 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_type_figure.snap
+2021/06/03 | 1035 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_type_item.snap
+2021/06/03 | 741 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_type_math.snap
+2021/06/03 | 1365 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_type_section.snap
+2021/06/03 | 3181 | support/texlab/tests/integration/workspace_symbol.rs
+2021/06/03 | 643 | support/texlab/texlab.1
+2021/06/03 | 26161 | support/texlab/texlab.pdf
+2021/06/03 | 2586 | support/texlab/texlab.tex
+2021/06/03 | 7634618 | support/texlab.zip
2011/11/27 | 456 | support/texlipse/plugin/1.5.0/README.TXT
2011/11/27 | 1726937 | support/texlipse/plugin/1.5.0/texlipse_1.5.0 src.zip
1999/01/30 | 6077 | support/texlist/README
@@ -265786,11 +265805,11 @@
2019/02/28 | 272 | systems/texlive/tlnet/archive/amsldoc-it.r45662.tar.xz
2019/02/28 | 1169692 | systems/texlive/tlnet/archive/amsldoc-vn.doc.r21855.tar.xz
2019/02/28 | 428 | systems/texlive/tlnet/archive/amsldoc-vn.r21855.tar.xz
-2020/10/03 | 2351400 | systems/texlive/tlnet/archive/amsmath.doc.r56514.tar.xz
+2021/06/03 | 2393920 | systems/texlive/tlnet/archive/amsmath.doc.r59441.tar.xz
2019/02/28 | 13716 | systems/texlive/tlnet/archive/amsmath-it.doc.r22930.tar.xz
2019/02/28 | 428 | systems/texlive/tlnet/archive/amsmath-it.r22930.tar.xz
-2020/10/03 | 30860 | systems/texlive/tlnet/archive/amsmath.r56514.tar.xz
-2020/10/03 | 65388 | systems/texlive/tlnet/archive/amsmath.source.r56514.tar.xz
+2021/06/03 | 30856 | systems/texlive/tlnet/archive/amsmath.r59441.tar.xz
+2021/06/03 | 65424 | systems/texlive/tlnet/archive/amsmath.source.r59441.tar.xz
2019/02/28 | 1938800 | systems/texlive/tlnet/archive/amsrefs.doc.r30646.tar.xz
2019/02/28 | 27428 | systems/texlive/tlnet/archive/amsrefs.r30646.tar.xz
2019/02/28 | 102004 | systems/texlive/tlnet/archive/amsrefs.source.r30646.tar.xz
@@ -266208,7 +266227,7 @@
2021/02/07 | 136588 | systems/texlive/tlnet/archive/babel-danish.doc.r57642.tar.xz
2021/02/07 | 2488 | systems/texlive/tlnet/archive/babel-danish.r57642.tar.xz
2021/02/07 | 5792 | systems/texlive/tlnet/archive/babel-danish.source.r57642.tar.xz
-2021/05/17 | 830360 | systems/texlive/tlnet/archive/babel.doc.r59229.tar.xz
+2021/06/03 | 830168 | systems/texlive/tlnet/archive/babel.doc.r59439.tar.xz
2020/11/02 | 149932 | systems/texlive/tlnet/archive/babel-dutch.doc.r56827.tar.xz
2020/11/02 | 2900 | systems/texlive/tlnet/archive/babel-dutch.r56827.tar.xz
2020/11/02 | 7920 | systems/texlive/tlnet/archive/babel-dutch.source.r56827.tar.xz
@@ -266294,7 +266313,7 @@
2021/02/07 | 154112 | systems/texlive/tlnet/archive/babel-portuges.doc.r57644.tar.xz
2021/02/07 | 2828 | systems/texlive/tlnet/archive/babel-portuges.r57644.tar.xz
2021/02/07 | 6688 | systems/texlive/tlnet/archive/babel-portuges.source.r57644.tar.xz
-2021/05/17 | 179988 | systems/texlive/tlnet/archive/babel.r59229.tar.xz
+2021/06/03 | 179752 | systems/texlive/tlnet/archive/babel.r59439.tar.xz
2021/04/07 | 113056 | systems/texlive/tlnet/archive/babel-romanian.doc.r58776.tar.xz
2021/04/07 | 2124 | systems/texlive/tlnet/archive/babel-romanian.r58776.tar.xz
2021/04/07 | 4308 | systems/texlive/tlnet/archive/babel-romanian.source.r58776.tar.xz
@@ -266325,7 +266344,7 @@
2021/02/07 | 210456 | systems/texlive/tlnet/archive/babel-sorbian.doc.r57646.tar.xz
2021/02/07 | 3156 | systems/texlive/tlnet/archive/babel-sorbian.r57646.tar.xz
2021/02/07 | 6328 | systems/texlive/tlnet/archive/babel-sorbian.source.r57646.tar.xz
-2021/05/17 | 685196 | systems/texlive/tlnet/archive/babel.source.r59229.tar.xz
+2021/06/03 | 685752 | systems/texlive/tlnet/archive/babel.source.r59439.tar.xz
2021/05/28 | 183140 | systems/texlive/tlnet/archive/babel-spanish.doc.r59367.tar.xz
2021/05/28 | 8876 | systems/texlive/tlnet/archive/babel-spanish.r59367.tar.xz
2021/05/28 | 29800 | systems/texlive/tlnet/archive/babel-spanish.source.r59367.tar.xz
@@ -266631,6 +266650,8 @@
2021/04/05 | 101696 | systems/texlive/tlnet/archive/biblatex-chicago.r58715.tar.xz
2019/02/28 | 90108 | systems/texlive/tlnet/archive/biblatex-claves.doc.r43723.tar.xz
2019/02/28 | 2184 | systems/texlive/tlnet/archive/biblatex-claves.r43723.tar.xz
+2021/06/03 | 167160 | systems/texlive/tlnet/archive/biblatex-cv.doc.r59433.tar.xz
+2021/06/03 | 10060 | systems/texlive/tlnet/archive/biblatex-cv.r59433.tar.xz
2021/01/01 | 7209940 | systems/texlive/tlnet/archive/biblatex.doc.r57272.tar.xz
2019/02/28 | 1124296 | systems/texlive/tlnet/archive/biblatex-dw.doc.r42649.tar.xz
2019/02/28 | 16432 | systems/texlive/tlnet/archive/biblatex-dw.r42649.tar.xz
@@ -267652,7 +267673,7 @@
2020/09/08 | 2876 | systems/texlive/tlnet/archive/collectbox.r56291.tar.xz
2020/09/08 | 8064 | systems/texlive/tlnet/archive/collectbox.source.r56291.tar.xz
2021/05/11 | 624 | systems/texlive/tlnet/archive/collection-basic.r59159.tar.xz
-2021/03/17 | 1228 | systems/texlive/tlnet/archive/collection-bibtexextra.r58437.tar.xz
+2021/06/03 | 1232 | systems/texlive/tlnet/archive/collection-bibtexextra.r59433.tar.xz
2020/09/16 | 944 | systems/texlive/tlnet/archive/collection-binextra.r56352.tar.xz
2020/03/04 | 596 | systems/texlive/tlnet/archive/collection-context.r54074.tar.xz
2021/03/11 | 1912 | systems/texlive/tlnet/archive/collection-fontsextra.r58253.tar.xz
@@ -267868,8 +267889,8 @@
2019/02/28 | 648 | systems/texlive/tlnet/archive/context-typescripts.doc.r47085.tar.xz
2019/02/28 | 9224 | systems/texlive/tlnet/archive/context-typescripts.r47085.tar.xz
2021/02/25 | 472 | systems/texlive/tlnet/archive/context.universal-darwin.r57908.tar.xz
-2021/05/26 | 10796 | systems/texlive/tlnet/archive/context-vim.doc.r59356.tar.xz
-2021/05/26 | 10120 | systems/texlive/tlnet/archive/context-vim.r59356.tar.xz
+2021/06/03 | 10808 | systems/texlive/tlnet/archive/context-vim.doc.r59432.tar.xz
+2021/06/03 | 10120 | systems/texlive/tlnet/archive/context-vim.r59432.tar.xz
2019/02/28 | 263536 | systems/texlive/tlnet/archive/context-visualcounter.doc.r47085.tar.xz
2019/02/28 | 3992 | systems/texlive/tlnet/archive/context-visualcounter.r47085.tar.xz
2019/02/28 | 6744 | systems/texlive/tlnet/archive/context-visualcounter.source.r47085.tar.xz
@@ -269006,9 +269027,9 @@
2021/01/25 | 1828 | systems/texlive/tlnet/archive/ean13isbn.r57514.tar.xz
2019/02/28 | 948 | systems/texlive/tlnet/archive/ean.doc.r20851.tar.xz
2019/02/28 | 3148 | systems/texlive/tlnet/archive/ean.r20851.tar.xz
-2021/06/02 | 312620 | systems/texlive/tlnet/archive/easybook.doc.r59422.tar.xz
-2021/06/02 | 13880 | systems/texlive/tlnet/archive/easybook.r59422.tar.xz
-2021/06/02 | 30344 | systems/texlive/tlnet/archive/easybook.source.r59422.tar.xz
+2021/06/03 | 314752 | systems/texlive/tlnet/archive/easybook.doc.r59434.tar.xz
+2021/06/03 | 14100 | systems/texlive/tlnet/archive/easybook.r59434.tar.xz
+2021/06/03 | 30768 | systems/texlive/tlnet/archive/easybook.source.r59434.tar.xz
2019/02/28 | 4540 | systems/texlive/tlnet/archive/easy.doc.r19440.tar.xz
2020/09/08 | 175976 | systems/texlive/tlnet/archive/easyfig.doc.r56291.tar.xz
2020/09/08 | 1936 | systems/texlive/tlnet/archive/easyfig.r56291.tar.xz
@@ -270440,8 +270461,8 @@
2019/02/28 | 8612 | systems/texlive/tlnet/archive/graphbox.source.r46360.tar.xz
2019/02/28 | 876 | systems/texlive/tlnet/archive/graphics-cfg.doc.r41448.tar.xz
2019/02/28 | 1160 | systems/texlive/tlnet/archive/graphics-cfg.r41448.tar.xz
-2021/05/28 | 604 | systems/texlive/tlnet/archive/graphics-def.doc.r59369.tar.xz
-2021/05/28 | 10936 | systems/texlive/tlnet/archive/graphics-def.r59369.tar.xz
+2021/06/03 | 608 | systems/texlive/tlnet/archive/graphics-def.doc.r59435.tar.xz
+2021/06/03 | 10936 | systems/texlive/tlnet/archive/graphics-def.r59435.tar.xz
2021/06/02 | 2027860 | systems/texlive/tlnet/archive/graphics.doc.r59424.tar.xz
2020/11/01 | 2228 | systems/texlive/tlnet/archive/graphics-pln.doc.r56823.tar.xz
2020/11/01 | 8740 | systems/texlive/tlnet/archive/graphics-pln.r56823.tar.xz
@@ -270648,9 +270669,9 @@
2019/02/28 | 1800 | systems/texlive/tlnet/archive/hep.doc.r15878.tar.xz
2019/02/28 | 975796 | systems/texlive/tlnet/archive/hepnames.doc.r35722.tar.xz
2019/02/28 | 6660 | systems/texlive/tlnet/archive/hepnames.r35722.tar.xz
-2020/12/02 | 1359472 | systems/texlive/tlnet/archive/hep-paper.doc.r57045.tar.xz
-2020/12/02 | 8820 | systems/texlive/tlnet/archive/hep-paper.r57045.tar.xz
-2020/12/02 | 23384 | systems/texlive/tlnet/archive/hep-paper.source.r57045.tar.xz
+2021/06/03 | 1352244 | systems/texlive/tlnet/archive/hep-paper.doc.r59436.tar.xz
+2021/06/03 | 10640 | systems/texlive/tlnet/archive/hep-paper.r59436.tar.xz
+2021/06/03 | 25592 | systems/texlive/tlnet/archive/hep-paper.source.r59436.tar.xz
2019/02/28 | 83952 | systems/texlive/tlnet/archive/hepparticles.doc.r35723.tar.xz
2019/02/28 | 4448 | systems/texlive/tlnet/archive/hepparticles.r35723.tar.xz
2019/02/28 | 2124 | systems/texlive/tlnet/archive/hep.r15878.tar.xz
@@ -271611,7 +271632,7 @@
2019/02/28 | 384 | systems/texlive/tlnet/archive/latexdiff.x86_64-solaris.r18442.tar.xz
2021/01/04 | 186924 | systems/texlive/tlnet/archive/latex-doc-ptr.doc.r57311.tar.xz
2021/01/04 | 520 | systems/texlive/tlnet/archive/latex-doc-ptr.r57311.tar.xz
-2021/06/02 | 27577052 | systems/texlive/tlnet/archive/latex.doc.r59424.tar.xz
+2021/06/03 | 27577780 | systems/texlive/tlnet/archive/latex.doc.r59440.tar.xz
2019/02/28 | 8008 | systems/texlive/tlnet/archive/latexfileinfo-pkgs.doc.r26760.tar.xz
2019/02/28 | 856 | systems/texlive/tlnet/archive/latexfileinfo-pkgs.r26760.tar.xz
2019/02/28 | 8120 | systems/texlive/tlnet/archive/latexfileinfo-pkgs.source.r26760.tar.xz
@@ -271744,10 +271765,10 @@
2019/02/28 | 348 | systems/texlive/tlnet/archive/latex-papersize.x86_64-linuxmusl.r46840.tar.xz
2019/02/28 | 344 | systems/texlive/tlnet/archive/latex-papersize.x86_64-linux.r42296.tar.xz
2019/02/28 | 348 | systems/texlive/tlnet/archive/latex-papersize.x86_64-solaris.r42296.tar.xz
-2021/06/02 | 215980 | systems/texlive/tlnet/archive/latex.r59424.tar.xz
+2021/06/03 | 216000 | systems/texlive/tlnet/archive/latex.r59440.tar.xz
2019/02/28 | 5020492 | systems/texlive/tlnet/archive/latex-refsheet.doc.r45076.tar.xz
2019/02/28 | 480 | systems/texlive/tlnet/archive/latex-refsheet.r45076.tar.xz
-2021/06/02 | 665180 | systems/texlive/tlnet/archive/latex.source.r59424.tar.xz
+2021/06/03 | 665160 | systems/texlive/tlnet/archive/latex.source.r59440.tar.xz
2021/05/05 | 5280832 | systems/texlive/tlnet/archive/latex-tools-dev.doc.r59080.tar.xz
2021/05/05 | 42452 | systems/texlive/tlnet/archive/latex-tools-dev.r59080.tar.xz
2021/05/05 | 227844 | systems/texlive/tlnet/archive/latex-tools-dev.source.r59080.tar.xz
@@ -271875,8 +271896,8 @@
2021/01/13 | 593988 | systems/texlive/tlnet/archive/libertinus-otf.doc.r57398.tar.xz
2021/01/13 | 3724 | systems/texlive/tlnet/archive/libertinus-otf.r57398.tar.xz
2020/05/08 | 972 | systems/texlive/tlnet/archive/libertinus.r55064.tar.xz
-2021/05/18 | 1329888 | systems/texlive/tlnet/archive/libertinust1math.doc.r59241.tar.xz
-2021/05/18 | 1011384 | systems/texlive/tlnet/archive/libertinust1math.r59241.tar.xz
+2021/06/03 | 1432140 | systems/texlive/tlnet/archive/libertinust1math.doc.r59430.tar.xz
+2021/06/03 | 1011400 | systems/texlive/tlnet/archive/libertinust1math.r59430.tar.xz
2021/02/16 | 1407044 | systems/texlive/tlnet/archive/libertinus-type1.doc.r57754.tar.xz
2021/02/16 | 8791732 | systems/texlive/tlnet/archive/libertinus-type1.r57754.tar.xz
2019/02/28 | 46148 | systems/texlive/tlnet/archive/libgreek.doc.r27789.tar.xz
@@ -273419,8 +273440,8 @@
2021/03/08 | 61332 | systems/texlive/tlnet/archive/newpax.doc.r58212.tar.xz
2021/03/08 | 8444 | systems/texlive/tlnet/archive/newpax.r58212.tar.xz
2021/03/08 | 8676 | systems/texlive/tlnet/archive/newpax.source.r58212.tar.xz
-2021/06/02 | 455176 | systems/texlive/tlnet/archive/newpx.doc.r59419.tar.xz
-2021/06/02 | 2168152 | systems/texlive/tlnet/archive/newpx.r59419.tar.xz
+2021/06/03 | 455288 | systems/texlive/tlnet/archive/newpx.doc.r59431.tar.xz
+2021/06/03 | 2168204 | systems/texlive/tlnet/archive/newpx.r59431.tar.xz
2019/02/28 | 137580 | systems/texlive/tlnet/archive/newsletr.doc.r15878.tar.xz
2019/02/28 | 16788 | systems/texlive/tlnet/archive/newsletr.r15878.tar.xz
2019/02/28 | 196212 | systems/texlive/tlnet/archive/newspaper.doc.r15878.tar.xz
@@ -275743,9 +275764,9 @@
2019/02/28 | 250180 | systems/texlive/tlnet/archive/SIunits.doc.r15878.tar.xz
2019/02/28 | 6064 | systems/texlive/tlnet/archive/SIunits.r15878.tar.xz
2019/02/28 | 34544 | systems/texlive/tlnet/archive/SIunits.source.r15878.tar.xz
-2021/06/01 | 1961812 | systems/texlive/tlnet/archive/siunitx.doc.r59410.tar.xz
-2021/06/01 | 60804 | systems/texlive/tlnet/archive/siunitx.r59410.tar.xz
-2021/06/01 | 103508 | systems/texlive/tlnet/archive/siunitx.source.r59410.tar.xz
+2021/06/03 | 2391164 | systems/texlive/tlnet/archive/siunitx.doc.r59437.tar.xz
+2021/06/03 | 60808 | systems/texlive/tlnet/archive/siunitx.r59437.tar.xz
+2021/06/03 | 104160 | systems/texlive/tlnet/archive/siunitx.source.r59437.tar.xz
2019/02/28 | 200108 | systems/texlive/tlnet/archive/skak.doc.r46259.tar.xz
2019/02/28 | 316212 | systems/texlive/tlnet/archive/skaknew.doc.r20031.tar.xz
2019/02/28 | 160064 | systems/texlive/tlnet/archive/skaknew.r20031.tar.xz
@@ -276604,7 +276625,7 @@
2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.amd64-freebsd.r55172.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.amd64-netbsd.r55172.tar.xz
2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.armhf-linux.r55172.tar.xz
-2021/06/02 | 397440 | systems/texlive/tlnet/archive/texlive-scripts.doc.r59417.tar.xz
+2021/06/03 | 397312 | systems/texlive/tlnet/archive/texlive-scripts.doc.r59428.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.aarch64-linux.r53577.tar.xz
2020/01/27 | 924 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-freebsd.r53577.tar.xz
2020/01/27 | 916 | systems/texlive/tlnet/archive/texlive-scripts-extra.amd64-netbsd.r53577.tar.xz
@@ -276628,7 +276649,7 @@
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-linux.r55172.tar.xz
2020/05/17 | 592 | systems/texlive/tlnet/archive/texlive-scripts.i386-netbsd.r55172.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.i386-solaris.r55172.tar.xz
-2021/06/02 | 108000 | systems/texlive/tlnet/archive/texlive-scripts.r59417.tar.xz
+2021/06/03 | 107992 | systems/texlive/tlnet/archive/texlive-scripts.r59428.tar.xz
2021/02/25 | 572 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r57908.tar.xz
2021/04/12 | 36308 | systems/texlive/tlnet/archive/texlive-scripts.win32.r58829.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r55172.tar.xz
@@ -277044,8 +277065,8 @@
2021/04/28 | 10100 | systems/texlive/tlnet/archive/tipauni.source.r59009.tar.xz
2019/02/28 | 381176 | systems/texlive/tlnet/archive/tipfr.doc.r38646.tar.xz
2019/02/28 | 5880 | systems/texlive/tlnet/archive/tipfr.r38646.tar.xz
-2021/05/22 | 123776 | systems/texlive/tlnet/archive/tiscreen.doc.r59297.tar.xz
-2021/05/22 | 1072 | systems/texlive/tlnet/archive/tiscreen.r59297.tar.xz
+2021/06/03 | 133880 | systems/texlive/tlnet/archive/tiscreen.doc.r59438.tar.xz
+2021/06/03 | 1140 | systems/texlive/tlnet/archive/tiscreen.r59438.tar.xz
2019/02/28 | 261184 | systems/texlive/tlnet/archive/titlecaps.doc.r36170.tar.xz
2019/02/28 | 4148 | systems/texlive/tlnet/archive/titlecaps.r36170.tar.xz
2019/02/28 | 2928 | systems/texlive/tlnet/archive/titlefoot.r15878.tar.xz
@@ -278330,16 +278351,16 @@
2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz
2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz
2021/05/02 | 105152 | systems/texlive/tlnet/install-tl
-2021/06/02 | 6812279 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2021/06/02 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2021/06/02 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2021/06/03 | 6812806 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2021/06/03 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2021/06/03 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2021/04/11 | 4945 | systems/texlive/tlnet/install-tl-windows.bat
-2021/06/02 | 20809172 | systems/texlive/tlnet/install-tl-windows.exe
-2021/06/02 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2021/06/02 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2021/06/02 | 25584672 | systems/texlive/tlnet/install-tl.zip
-2021/06/02 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2021/06/02 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2021/06/03 | 20808127 | systems/texlive/tlnet/install-tl-windows.exe
+2021/06/03 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2021/06/03 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2021/06/03 | 25584654 | systems/texlive/tlnet/install-tl.zip
+2021/06/03 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2021/06/03 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2021/04/01 | 1229 | systems/texlive/tlnet/README.md
2021/04/01 | 0 | systems/texlive/tlnet/TEXLIVE_2021
2021/03/15 | 6571 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -278349,7 +278370,7 @@
2021/03/15 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2021/05/26 | 49548 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2021/06/01 | 6880 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2021/06/02 | 6807 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2020/04/15 | 223687 | systems/texlive/tlnet/tlpkg/installer/curl/curl-ca-bundle.crt
2020/04/15 | 2606592 | systems/texlive/tlnet/tlpkg/installer/curl/curl.exe
2017/04/16 | 2629 | systems/texlive/tlnet/tlpkg/installer/installer-options.txt
@@ -278391,12 +278412,12 @@
2021/05/16 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2021/05/16 | 5402 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2021/05/16 | 27555 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2021/06/02 | 17266457 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2021/06/02 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2021/06/03 | 17268234 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2021/06/03 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2021/05/16 | 86511 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2021/06/02 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2021/06/02 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2021/06/02 | 2309420 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2021/06/03 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2021/06/03 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2021/06/03 | 2309948 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2021/05/16 | 58801 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2021/05/16 | 42084 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2021/05/16 | 16103 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -281870,7 +281891,7 @@
2020/06/02 | 1474580 | systems/win32/miktex/tm/packages/amscls.tar.lzma
2013/02/01 | 4896571 | systems/win32/miktex/tm/packages/amsfonts.tar.lzma
2013/02/01 | 568955 | systems/win32/miktex/tm/packages/amslatex-primer.tar.lzma
-2020/10/04 | 2452797 | systems/win32/miktex/tm/packages/amsmath.tar.lzma
+2021/06/03 | 2486184 | systems/win32/miktex/tm/packages/amsmath.tar.lzma
2013/03/11 | 2065077 | systems/win32/miktex/tm/packages/amsrefs.tar.lzma
2011/06/23 | 385532 | systems/win32/miktex/tm/packages/amstex.tar.lzma
2008/12/23 | 68780 | systems/win32/miktex/tm/packages/analogclock.tar.lzma
@@ -282033,7 +282054,7 @@
2015/05/25 | 5256 | systems/win32/miktex/tm/packages/babel-spanglish.tar.lzma
2021/05/29 | 222183 | systems/win32/miktex/tm/packages/babel-spanish.tar.lzma
2021/02/10 | 148420 | systems/win32/miktex/tm/packages/babel-swedish.tar.lzma
-2021/05/18 | 1704741 | systems/win32/miktex/tm/packages/babel.tar.lzma
+2021/06/03 | 1705213 | systems/win32/miktex/tm/packages/babel.tar.lzma
2014/05/21 | 234101 | systems/win32/miktex/tm/packages/babel-thai.tar.lzma
2019/07/06 | 309208 | systems/win32/miktex/tm/packages/babel-turkish.tar.lzma
2021/01/17 | 159246 | systems/win32/miktex/tm/packages/babel-ukrainian.tar.lzma
@@ -282146,6 +282167,7 @@
2021/03/03 | 923770 | systems/win32/miktex/tm/packages/biblatex-chem.tar.lzma
2021/04/07 | 2926629 | systems/win32/miktex/tm/packages/biblatex-chicago.tar.lzma
2017/04/11 | 92574 | systems/win32/miktex/tm/packages/biblatex-claves.tar.lzma
+2021/06/03 | 179773 | systems/win32/miktex/tm/packages/biblatex-cv.tar.lzma
2016/12/09 | 1140816 | systems/win32/miktex/tm/packages/biblatex-dw.tar.lzma
2017/06/18 | 10024 | systems/win32/miktex/tm/packages/biblatex-enc.tar.lzma
2021/04/23 | 895400 | systems/win32/miktex/tm/packages/biblatex-ext.tar.lzma
@@ -282226,7 +282248,7 @@
2019/12/13 | 638837 | systems/win32/miktex/tm/packages/bitset.tar.lzma
2020/08/09 | 208062 | systems/win32/miktex/tm/packages/bitter.tar.lzma
2016/07/15 | 79382 | systems/win32/miktex/tm/packages/bizcard.tar.lzma
-2021/05/29 | 6714324 | systems/win32/miktex/tm/packages/bjfuthesis.tar.lzma
+2021/06/03 | 7072375 | systems/win32/miktex/tm/packages/bjfuthesis.tar.lzma
2016/07/28 | 61174 | systems/win32/miktex/tm/packages/blacklettert1.tar.lzma
2012/01/10 | 371537 | systems/win32/miktex/tm/packages/blindtext.tar.lzma
2015/03/10 | 313529 | systems/win32/miktex/tm/packages/blkarray.tar.lzma
@@ -282375,7 +282397,7 @@
2009/10/16 | 61449 | systems/win32/miktex/tm/packages/changelayout.tar.lzma
2020/09/06 | 167773 | systems/win32/miktex/tm/packages/changelog.tar.lzma
2009/10/21 | 283425 | systems/win32/miktex/tm/packages/changepage.tar.lzma
-2021/05/18 | 2462156 | systems/win32/miktex/tm/packages/changes.tar.lzma
+2021/06/03 | 2516989 | systems/win32/miktex/tm/packages/changes.tar.lzma
2006/05/19 | 197978 | systems/win32/miktex/tm/packages/chappg.cab
2005/12/16 | 8486 | systems/win32/miktex/tm/packages/chapterfolder.cab
2020/07/27 | 1998399 | systems/win32/miktex/tm/packages/charissil.tar.lzma
@@ -282432,7 +282454,7 @@
2020/01/13 | 419261 | systems/win32/miktex/tm/packages/circledsteps.tar.lzma
2010/03/08 | 182332 | systems/win32/miktex/tm/packages/circle.tar.lzma
2009/07/13 | 270032 | systems/win32/miktex/tm/packages/circ.tar.lzma
-2021/05/18 | 1624911 | systems/win32/miktex/tm/packages/circuitikz.tar.lzma
+2021/06/03 | 1658914 | systems/win32/miktex/tm/packages/circuitikz.tar.lzma
2004/11/28 | 18758 | systems/win32/miktex/tm/packages/cirth.cab
2017/12/04 | 112354 | systems/win32/miktex/tm/packages/citeall.tar.lzma
2018/04/09 | 67716 | systems/win32/miktex/tm/packages/citeref.tar.lzma
@@ -283074,7 +283096,7 @@
2020/10/03 | 318630 | systems/win32/miktex/tm/packages/filehook.tar.lzma
2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma
2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma
-2021/06/02 | 579430 | systems/win32/miktex/tm/packages/files.csv.lzma
+2021/06/03 | 577467 | systems/win32/miktex/tm/packages/files.csv.lzma
2001/05/14 | 5617 | systems/win32/miktex/tm/packages/finbib.tar.lzma
2015/10/20 | 44379 | systems/win32/miktex/tm/packages/findhyph.tar.lzma
2011/10/21 | 89323 | systems/win32/miktex/tm/packages/fink.tar.lzma
@@ -283323,9 +283345,9 @@
2018/04/22 | 2148339 | systems/win32/miktex/tm/packages/graph35.tar.lzma
2018/01/18 | 284778 | systems/win32/miktex/tm/packages/graphbox.tar.lzma
2016/11/04 | 1845 | systems/win32/miktex/tm/packages/graphics-cfg.tar.lzma
-2021/05/29 | 11352 | systems/win32/miktex/tm/packages/graphics-def.tar.lzma
+2021/06/03 | 11355 | systems/win32/miktex/tm/packages/graphics-def.tar.lzma
2020/10/31 | 10588 | systems/win32/miktex/tm/packages/graphics-pln.tar.lzma
-2020/10/03 | 2069382 | systems/win32/miktex/tm/packages/graphics.tar.lzma
+2021/06/03 | 2092269 | systems/win32/miktex/tm/packages/graphics.tar.lzma
2014/01/14 | 985128 | systems/win32/miktex/tm/packages/graphicxbox.tar.lzma
2021/01/07 | 410801 | systems/win32/miktex/tm/packages/graphicxpsd.tar.lzma
2020/11/24 | 89188 | systems/win32/miktex/tm/packages/graphicx-psmin.tar.lzma
@@ -283403,7 +283425,7 @@
2006/09/28 | 745459 | systems/win32/miktex/tm/packages/helvetic.cab
2005/12/16 | 3444 | systems/win32/miktex/tm/packages/hep.cab
2014/12/22 | 985855 | systems/win32/miktex/tm/packages/hepnames.tar.lzma
-2020/12/05 | 1386871 | systems/win32/miktex/tm/packages/hep-paper.tar.lzma
+2021/06/03 | 1384346 | systems/win32/miktex/tm/packages/hep-paper.tar.lzma
2014/12/22 | 88816 | systems/win32/miktex/tm/packages/hepparticles.tar.lzma
2017/12/14 | 699188 | systems/win32/miktex/tm/packages/hepthesis.tar.lzma
2020/04/15 | 102068 | systems/win32/miktex/tm/packages/hepunits.tar.lzma
@@ -283444,8 +283466,8 @@
2016/07/28 | 46253 | systems/win32/miktex/tm/packages/humanist.tar.lzma
2016/07/28 | 127569 | systems/win32/miktex/tm/packages/huncial.tar.lzma
2016/11/28 | 817841 | systems/win32/miktex/tm/packages/hustthesis.tar.lzma
-2020/06/11 | 152335 | systems/win32/miktex/tm/packages/hvarabic.tar.lzma
-2021/05/20 | 8626662 | systems/win32/miktex/tm/packages/hvfloat.tar.lzma
+2021/06/03 | 152237 | systems/win32/miktex/tm/packages/hvarabic.tar.lzma
+2021/06/03 | 7408980 | systems/win32/miktex/tm/packages/hvfloat.tar.lzma
2017/12/14 | 78242 | systems/win32/miktex/tm/packages/hvindex.tar.lzma
2016/07/19 | 9825 | systems/win32/miktex/tm/packages/hvmath.tar.lzma
2021/05/20 | 106879 | systems/win32/miktex/tm/packages/hvqrurl.tar.lzma
@@ -283604,7 +283626,7 @@
2004/04/22 | 672120 | systems/win32/miktex/tm/packages/kerntest.cab
2019/12/31 | 14443571 | systems/win32/miktex/tm/packages/ketcindy.tar.lzma
2010/05/10 | 363388 | systems/win32/miktex/tm/packages/keycommand.tar.lzma
-2019/09/24 | 1077315 | systems/win32/miktex/tm/packages/keyfloat.tar.lzma
+2021/06/03 | 1049268 | systems/win32/miktex/tm/packages/keyfloat.tar.lzma
2019/04/07 | 150914 | systems/win32/miktex/tm/packages/keyindex.tar.lzma
2012/11/08 | 249186 | systems/win32/miktex/tm/packages/keyreader.tar.lzma
2010/05/10 | 38167 | systems/win32/miktex/tm/packages/keystroke.tar.lzma
@@ -283649,8 +283671,8 @@
2021/05/08 | 779245 | systems/win32/miktex/tm/packages/l3build.tar.lzma
2013/05/29 | 156214 | systems/win32/miktex/tm/packages/l3ctr2e.tar.lzma
2021/05/29 | 3368466 | systems/win32/miktex/tm/packages/l3experimental.tar.lzma
-2021/05/29 | 11571304 | systems/win32/miktex/tm/packages/l3kernel.tar.lzma
-2021/05/29 | 1875258 | systems/win32/miktex/tm/packages/l3packages.tar.lzma
+2021/06/03 | 11573094 | systems/win32/miktex/tm/packages/l3kernel.tar.lzma
+2021/06/03 | 1875280 | systems/win32/miktex/tm/packages/l3packages.tar.lzma
2008/04/02 | 115132 | systems/win32/miktex/tm/packages/labbook.tar.lzma
2006/11/14 | 45130 | systems/win32/miktex/tm/packages/labelcas.cab
2019/05/15 | 27323 | systems/win32/miktex/tm/packages/labels4easylist.tar.lzma
@@ -283746,7 +283768,7 @@
2020/03/30 | 15094509 | systems/win32/miktex/tm/packages/libertine.tar.lzma
2021/03/03 | 2216455 | systems/win32/miktex/tm/packages/libertinus-fonts.tar.lzma
2021/01/13 | 599586 | systems/win32/miktex/tm/packages/libertinus-otf.tar.lzma
-2021/05/18 | 2360200 | systems/win32/miktex/tm/packages/libertinust1math.tar.lzma
+2021/06/03 | 2463101 | systems/win32/miktex/tm/packages/libertinust1math.tar.lzma
2020/05/07 | 17336 | systems/win32/miktex/tm/packages/libertinus.tar.lzma
2021/02/19 | 10239524 | systems/win32/miktex/tm/packages/libertinus-type1.tar.lzma
2012/09/26 | 53049 | systems/win32/miktex/tm/packages/libgreek.tar.lzma
@@ -283846,7 +283868,7 @@
2010/03/30 | 272798 | systems/win32/miktex/tm/packages/ltabptch.tar.lzma
2017/04/13 | 49206 | systems/win32/miktex/tm/packages/ltb2bib.tar.lzma
2020/08/09 | 765022 | systems/win32/miktex/tm/packages/ltx4yt.tar.lzma
-2021/01/11 | 23338815 | systems/win32/miktex/tm/packages/ltxbase.tar.lzma
+2021/06/03 | 27928662 | systems/win32/miktex/tm/packages/ltxbase.tar.lzma
2020/10/03 | 409074 | systems/win32/miktex/tm/packages/ltxcmds.tar.lzma
2011/03/30 | 6745 | systems/win32/miktex/tm/packages/ltxdockit.tar.lzma
2019/04/16 | 78752 | systems/win32/miktex/tm/packages/ltxguidex.tar.lzma
@@ -283887,7 +283909,7 @@
2021/04/23 | 359360 | systems/win32/miktex/tm/packages/luatexko.tar.lzma
2010/12/23 | 322873 | systems/win32/miktex/tm/packages/luatextra.tar.lzma
2020/02/18 | 256383 | systems/win32/miktex/tm/packages/luatodonotes.tar.lzma
-2021/03/17 | 204648 | systems/win32/miktex/tm/packages/lua-typo.tar.lzma
+2021/06/03 | 247157 | systems/win32/miktex/tm/packages/lua-typo.tar.lzma
2020/10/03 | 127843 | systems/win32/miktex/tm/packages/lua-uca.tar.lzma
2021/05/18 | 117951 | systems/win32/miktex/tm/packages/lua-ul.tar.lzma
2020/05/18 | 67623 | systems/win32/miktex/tm/packages/lua-uni-algos.tar.lzma
@@ -283910,7 +283932,7 @@
2006/09/27 | 4687 | systems/win32/miktex/tm/packages/luhand.cab
2006/09/27 | 28840 | systems/win32/miktex/tm/packages/lumath.cab
2004/03/16 | 167583 | systems/win32/miktex/tm/packages/luxi.cab
-2021/05/29 | 3730032 | systems/win32/miktex/tm/packages/lwarp.tar.lzma
+2021/06/03 | 3733214 | systems/win32/miktex/tm/packages/lwarp.tar.lzma
2013/12/23 | 1470948 | systems/win32/miktex/tm/packages/lxfonts.tar.lzma
2011/01/18 | 57807 | systems/win32/miktex/tm/packages/ly1.tar.lzma
2019/05/29 | 884130 | systems/win32/miktex/tm/packages/lyluatex.tar.lzma
@@ -284275,9 +284297,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2021/03/15 | 39247 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2021/03/15 | 43386 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2021/06/02 | 209724 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2021/06/02 | 1272695 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2021/06/02 | 1190200 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2021/06/03 | 209785 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2021/06/03 | 1274553 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2021/06/03 | 1190064 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2021/03/15 | 13447 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2021/03/15 | 14320 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma
2016/07/15 | 35914 | systems/win32/miktex/tm/packages/mil3.tar.lzma
@@ -284381,7 +284403,7 @@
2020/01/30 | 358618 | systems/win32/miktex/tm/packages/musicography.tar.lzma
2018/05/02 | 436189 | systems/win32/miktex/tm/packages/musikui.tar.lzma
2011/03/10 | 163283 | systems/win32/miktex/tm/packages/musixguit.tar.lzma
-2015/07/07 | 4275382 | systems/win32/miktex/tm/packages/musixtex-fonts.tar.lzma
+2021/06/03 | 4303376 | systems/win32/miktex/tm/packages/musixtex-fonts.tar.lzma
2021/05/18 | 2139447 | systems/win32/miktex/tm/packages/musixtex.tar.lzma
2011/12/19 | 532973 | systems/win32/miktex/tm/packages/musuos.tar.lzma
2011/08/31 | 8268 | systems/win32/miktex/tm/packages/muthesis.tar.lzma
@@ -284429,198 +284451,198 @@
2019/11/26 | 120397 | systems/win32/miktex/tm/packages/newfloat.tar.lzma
2009/04/21 | 411400 | systems/win32/miktex/tm/packages/newlfm.tar.lzma
2021/03/08 | 77936 | systems/win32/miktex/tm/packages/newpax.tar.lzma
-2021/05/29 | 2626486 | systems/win32/miktex/tm/packages/newpx.tar.lzma
+2021/06/03 | 2628139 | systems/win32/miktex/tm/packages/newpx.tar.lzma
2005/06/25 | 43902 | systems/win32/miktex/tm/packages/newsletr.cab
2007/12/30 | 204631 | systems/win32/miktex/tm/packages/newspaper.tar.lzma
2020/10/04 | 440940 | systems/win32/miktex/tm/packages/newtxsf.tar.lzma
-2021/05/29 | 6562718 | systems/win32/miktex/tm/packages/newtx.tar.lzma
+2021/06/03 | 6564698 | systems/win32/miktex/tm/packages/newtx.tar.lzma
2020/02/17 | 288246 | systems/win32/miktex/tm/packages/newtxtt.tar.lzma
2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma
2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma
2021/03/17 | 232249 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
-2021/06/02 | 579539 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2021/06/02 | 51024 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2021/06/02 | 56413 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2021/06/02 | 972705 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2021/06/02 | 1075240 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2021/06/02 | 29078 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2021/06/02 | 31327 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2021/06/02 | 29842 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2021/06/02 | 34651 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2021/06/02 | 50142 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2021/06/02 | 57580 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2021/06/02 | 83418 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2021/06/02 | 95455 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2021/06/02 | 67477 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2021/06/02 | 75583 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2021/06/02 | 27185 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2021/06/02 | 30806 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2021/06/02 | 330960 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2021/06/02 | 392975 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2021/06/02 | 32644 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2021/06/02 | 36641 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2021/06/02 | 51308 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2021/06/02 | 56654 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2021/06/02 | 239842 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2021/06/02 | 262205 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2021/06/02 | 179817 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2021/06/02 | 195702 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2021/06/02 | 52689 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2021/06/02 | 59106 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2021/06/02 | 21213 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2021/06/02 | 23343 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2021/06/02 | 461993 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2021/06/02 | 45911 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2021/06/02 | 51119 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2021/06/02 | 281963 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2021/06/02 | 321604 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2021/06/02 | 41084 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2021/06/02 | 45339 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2021/06/02 | 117607 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2021/06/02 | 131705 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2021/06/02 | 1293150 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2021/06/02 | 1416033 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2021/06/02 | 100384 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2021/06/02 | 112683 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2021/06/02 | 43041 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2021/06/02 | 48262 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2021/06/02 | 25021 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2021/06/02 | 28139 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2021/06/02 | 56298 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2021/06/02 | 62718 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2021/06/02 | 134950 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2021/06/02 | 152231 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2021/06/02 | 73037 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2021/06/02 | 77920 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2021/06/02 | 71818 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2021/06/02 | 81013 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2021/06/02 | 258884 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2021/06/02 | 295419 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2021/06/02 | 22021 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2021/06/02 | 24979 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2021/06/02 | 97305 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2021/06/02 | 112280 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2021/06/02 | 64385 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2021/06/02 | 73195 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2021/06/02 | 96161 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2021/06/02 | 115518 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2021/06/02 | 38111 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2021/06/02 | 42978 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2021/06/02 | 483044 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2021/06/02 | 566494 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2021/06/02 | 147354 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2021/06/02 | 159436 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2021/06/02 | 94794 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2021/06/02 | 109066 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2021/06/02 | 16346 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2021/06/02 | 17976 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2021/06/02 | 28286 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2021/06/02 | 30029 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2021/06/02 | 629960 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2021/06/02 | 681259 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2021/06/02 | 532033 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2021/06/02 | 596997 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2021/06/02 | 476717 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2021/06/02 | 511067 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2021/06/02 | 94269 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2021/06/02 | 103442 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2021/06/02 | 1688059 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2021/06/02 | 2002630 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2021/06/02 | 67606 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2021/06/02 | 74245 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2021/06/02 | 27382 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2021/06/02 | 31609 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2021/06/02 | 7716 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2021/06/02 | 8759 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2021/06/02 | 196520 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2021/06/02 | 214715 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2021/06/02 | 250366 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2021/06/02 | 283983 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2021/06/02 | 98115 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2021/06/02 | 103494 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2021/06/02 | 60652 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2021/06/02 | 68119 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2021/06/02 | 124750 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2021/06/02 | 136482 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2021/06/02 | 147750 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2021/06/02 | 163868 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2021/06/02 | 199543 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2021/06/02 | 180216 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2021/06/02 | 67437 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2021/06/02 | 76856 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2021/06/02 | 31198 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2021/06/02 | 35063 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2021/06/02 | 37860 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2021/06/02 | 42707 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2021/06/02 | 42840 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2021/06/02 | 46756 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2021/06/02 | 45947 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2021/06/02 | 52402 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2021/06/02 | 194118 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2021/06/02 | 206249 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2021/06/02 | 35354 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2021/06/02 | 39839 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2021/06/02 | 750268 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2021/06/02 | 815665 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2021/06/02 | 198277 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2021/06/02 | 203207 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2021/06/02 | 207956 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2021/06/02 | 243372 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2021/06/02 | 78755 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2021/06/02 | 87665 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2021/06/02 | 1169898 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2021/06/02 | 1301562 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2021/06/02 | 20124 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2021/06/02 | 23908 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2021/06/02 | 31548 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2021/06/02 | 37245 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2021/06/02 | 64030 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2021/06/02 | 72239 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2021/06/02 | 44639 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2021/06/02 | 51550 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2021/06/02 | 1306688 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2021/06/02 | 1427858 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2021/06/02 | 42367 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2021/06/02 | 51743 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2021/06/02 | 56193 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2021/06/02 | 59799 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2021/06/02 | 25220 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2021/06/02 | 27283 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2021/06/02 | 16465 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2021/06/02 | 18144 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2021/06/02 | 63748 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2021/06/02 | 69934 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2021/06/02 | 154418 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2021/06/02 | 168529 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2021/06/02 | 56732 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2021/06/02 | 65305 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2021/06/02 | 97960 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2021/06/02 | 105056 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2021/06/02 | 2671938 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2021/06/02 | 2793420 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2021/06/02 | 56327 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2021/06/02 | 62377 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2021/06/02 | 33585 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2021/06/02 | 37315 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2021/06/02 | 27717 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2021/06/02 | 33651 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2021/06/02 | 65547 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2021/06/02 | 70483 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2021/06/02 | 312520 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2021/06/02 | 346551 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2021/06/02 | 55513 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
-2021/06/02 | 57128 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
-2021/06/02 | 586347 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2021/06/02 | 621413 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2021/06/02 | 39034 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2021/06/02 | 43420 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2021/06/02 | 209733 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2021/06/02 | 1274688 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2021/06/02 | 1189123 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2021/06/02 | 13462 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2021/06/02 | 14345 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2021/06/03 | 576903 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2021/06/03 | 51025 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2021/06/03 | 56413 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2021/06/03 | 972706 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2021/06/03 | 1075241 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2021/06/03 | 29079 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2021/06/03 | 31325 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2021/06/03 | 29841 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2021/06/03 | 34651 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2021/06/03 | 50143 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2021/06/03 | 57581 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2021/06/03 | 83419 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2021/06/03 | 95456 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2021/06/03 | 67477 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2021/06/03 | 75582 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2021/06/03 | 27185 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2021/06/03 | 30806 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2021/06/03 | 330962 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2021/06/03 | 392973 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2021/06/03 | 32644 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2021/06/03 | 36639 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2021/06/03 | 51309 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2021/06/03 | 56652 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2021/06/03 | 239844 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2021/06/03 | 262204 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2021/06/03 | 179817 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2021/06/03 | 195701 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2021/06/03 | 52690 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2021/06/03 | 59108 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2021/06/03 | 21213 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2021/06/03 | 23343 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2021/06/03 | 461991 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2021/06/03 | 45910 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2021/06/03 | 51118 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2021/06/03 | 281963 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2021/06/03 | 321604 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2021/06/03 | 41087 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2021/06/03 | 45339 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2021/06/03 | 117609 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2021/06/03 | 131707 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2021/06/03 | 1293151 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2021/06/03 | 1416030 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2021/06/03 | 100384 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2021/06/03 | 112683 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2021/06/03 | 43042 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2021/06/03 | 48262 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2021/06/03 | 25022 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2021/06/03 | 28139 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2021/06/03 | 56298 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2021/06/03 | 62718 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2021/06/03 | 134947 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2021/06/03 | 152232 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2021/06/03 | 73039 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2021/06/03 | 77922 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2021/06/03 | 71820 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2021/06/03 | 81013 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2021/06/03 | 258884 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2021/06/03 | 295420 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2021/06/03 | 22021 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2021/06/03 | 24979 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2021/06/03 | 97305 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2021/06/03 | 112279 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2021/06/03 | 64388 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2021/06/03 | 73196 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2021/06/03 | 96162 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2021/06/03 | 115518 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2021/06/03 | 38111 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2021/06/03 | 42978 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2021/06/03 | 483043 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2021/06/03 | 566496 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2021/06/03 | 147355 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2021/06/03 | 159438 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2021/06/03 | 94794 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2021/06/03 | 109065 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2021/06/03 | 16346 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2021/06/03 | 17975 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2021/06/03 | 28287 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2021/06/03 | 30029 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2021/06/03 | 629959 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2021/06/03 | 681260 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2021/06/03 | 532033 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2021/06/03 | 597000 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2021/06/03 | 476720 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2021/06/03 | 511069 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2021/06/03 | 94269 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2021/06/03 | 103445 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2021/06/03 | 1688059 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2021/06/03 | 2002627 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2021/06/03 | 67604 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2021/06/03 | 74245 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2021/06/03 | 27381 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2021/06/03 | 31609 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2021/06/03 | 7715 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2021/06/03 | 8761 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2021/06/03 | 196520 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2021/06/03 | 214714 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2021/06/03 | 250367 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2021/06/03 | 283983 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2021/06/03 | 98116 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2021/06/03 | 103492 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2021/06/03 | 60651 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2021/06/03 | 68119 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2021/06/03 | 124749 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2021/06/03 | 136482 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2021/06/03 | 147750 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2021/06/03 | 163870 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2021/06/03 | 199543 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2021/06/03 | 180217 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2021/06/03 | 67437 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2021/06/03 | 76856 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2021/06/03 | 31197 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2021/06/03 | 35062 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2021/06/03 | 37859 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2021/06/03 | 42707 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2021/06/03 | 42842 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2021/06/03 | 46756 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2021/06/03 | 45948 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2021/06/03 | 52400 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2021/06/03 | 194120 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2021/06/03 | 206251 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2021/06/03 | 35352 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2021/06/03 | 39839 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2021/06/03 | 750269 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2021/06/03 | 815662 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2021/06/03 | 198280 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2021/06/03 | 203207 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2021/06/03 | 207958 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2021/06/03 | 243373 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2021/06/03 | 78755 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2021/06/03 | 87666 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2021/06/03 | 1169898 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2021/06/03 | 1301561 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2021/06/03 | 20125 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2021/06/03 | 23908 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2021/06/03 | 31549 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2021/06/03 | 37245 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2021/06/03 | 64030 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2021/06/03 | 72238 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2021/06/03 | 44638 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2021/06/03 | 51553 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2021/06/03 | 1306688 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2021/06/03 | 1427859 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2021/06/03 | 42366 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2021/06/03 | 51743 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2021/06/03 | 56193 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2021/06/03 | 59799 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2021/06/03 | 25220 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2021/06/03 | 27284 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2021/06/03 | 16464 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2021/06/03 | 18142 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2021/06/03 | 63747 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2021/06/03 | 69935 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2021/06/03 | 154419 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2021/06/03 | 168529 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2021/06/03 | 56731 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2021/06/03 | 65305 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2021/06/03 | 97959 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2021/06/03 | 105058 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2021/06/03 | 2671938 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2021/06/03 | 2793420 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2021/06/03 | 56330 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2021/06/03 | 62379 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2021/06/03 | 33584 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2021/06/03 | 37314 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2021/06/03 | 27718 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2021/06/03 | 33651 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2021/06/03 | 65546 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2021/06/03 | 70481 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2021/06/03 | 312520 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2021/06/03 | 346550 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2021/06/03 | 55513 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
+2021/06/03 | 57128 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2021/06/03 | 586346 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2021/06/03 | 621414 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2021/06/03 | 39034 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2021/06/03 | 43420 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2021/06/03 | 209751 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2021/06/03 | 1274449 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2021/06/03 | 1190594 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2021/06/03 | 13461 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2021/06/03 | 14344 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma
-2021/06/02 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2021/06/03 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
2018/07/06 | 145915 | systems/win32/miktex/tm/packages/nexus-otf.tar.lzma
2017/03/30 | 191149 | systems/win32/miktex/tm/packages/nfssext-cfr.tar.lzma
2012/12/20 | 612251 | systems/win32/miktex/tm/packages/nicefilelist.tar.lzma
@@ -284898,9 +284920,9 @@
2016/07/18 | 142232 | systems/win32/miktex/tm/packages/plari.tar.lzma
2016/07/20 | 93092 | systems/win32/miktex/tm/packages/plates.tar.lzma
2019/01/03 | 533049 | systems/win32/miktex/tm/packages/platexcheat.tar.lzma
-2021/02/15 | 1652703 | systems/win32/miktex/tm/packages/platex.tar.lzma
-2021/05/18 | 581599 | systems/win32/miktex/tm/packages/platex-tools.tar.lzma
-2021/05/18 | 143299 | systems/win32/miktex/tm/packages/plautopatch.tar.lzma
+2021/06/03 | 1662190 | systems/win32/miktex/tm/packages/platex.tar.lzma
+2021/06/03 | 582465 | systems/win32/miktex/tm/packages/platex-tools.tar.lzma
+2021/06/03 | 144548 | systems/win32/miktex/tm/packages/plautopatch.tar.lzma
2020/08/09 | 1939832 | systems/win32/miktex/tm/packages/playfair.tar.lzma
2021/01/11 | 547533 | systems/win32/miktex/tm/packages/play-font.tar.lzma
2016/07/20 | 7727 | systems/win32/miktex/tm/packages/play.tar.lzma
@@ -284956,7 +284978,7 @@
2020/10/20 | 342254 | systems/win32/miktex/tm/packages/preview.tar.lzma
2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma
2021/04/23 | 274028 | systems/win32/miktex/tm/packages/principia.tar.lzma
-2021/06/02 | 840 | systems/win32/miktex/tm/packages/pr.ini
+2021/06/03 | 856 | systems/win32/miktex/tm/packages/pr.ini
2010/09/27 | 248469 | systems/win32/miktex/tm/packages/printlen.tar.lzma
2008/06/17 | 77313 | systems/win32/miktex/tm/packages/proba.tar.lzma
2017/07/12 | 988486 | systems/win32/miktex/tm/packages/probsoln.tar.lzma
@@ -285068,7 +285090,7 @@
2017/09/17 | 127190 | systems/win32/miktex/tm/packages/pst-pulley.tar.lzma
2007/04/20 | 26964 | systems/win32/miktex/tm/packages/pst-qtree.tar.lzma
2020/02/13 | 4662495 | systems/win32/miktex/tm/packages/pstricks-add.tar.lzma
-2021/04/07 | 7534587 | systems/win32/miktex/tm/packages/pstricks.tar.lzma
+2021/06/03 | 7534511 | systems/win32/miktex/tm/packages/pstricks.tar.lzma
2017/01/04 | 130862 | systems/win32/miktex/tm/packages/pstring.tar.lzma
2017/06/30 | 88418 | systems/win32/miktex/tm/packages/pst-rputover.tar.lzma
2011/06/23 | 570621 | systems/win32/miktex/tm/packages/pst-rubans.tar.lzma
@@ -285106,11 +285128,11 @@
2016/07/29 | 6387 | systems/win32/miktex/tm/packages/punk.tar.lzma
2021/01/02 | 205717 | systems/win32/miktex/tm/packages/puyotikz.tar.lzma
2021/05/29 | 158283 | systems/win32/miktex/tm/packages/pxbase.tar.lzma
-2020/10/05 | 333656 | systems/win32/miktex/tm/packages/pxchfon.tar.lzma
+2021/06/03 | 344357 | systems/win32/miktex/tm/packages/pxchfon.tar.lzma
2018/04/04 | 204193 | systems/win32/miktex/tm/packages/pxcjkcat.tar.lzma
2009/01/22 | 695938 | systems/win32/miktex/tm/packages/pxfonts.tar.lzma
2011/03/17 | 62963 | systems/win32/miktex/tm/packages/pxgreeks.tar.lzma
-2021/05/18 | 149509 | systems/win32/miktex/tm/packages/pxjahyper.tar.lzma
+2021/06/03 | 150216 | systems/win32/miktex/tm/packages/pxjahyper.tar.lzma
2020/05/06 | 121548 | systems/win32/miktex/tm/packages/pxjodel.tar.lzma
2013/05/06 | 2352 | systems/win32/miktex/tm/packages/pxpgfmark.tar.lzma
2021/01/17 | 319103 | systems/win32/miktex/tm/packages/pxpic.tar.lzma
@@ -285183,7 +285205,7 @@
2021/03/25 | 549997 | systems/win32/miktex/tm/packages/regexpatch.tar.lzma
2020/03/23 | 335314 | systems/win32/miktex/tm/packages/register.tar.lzma
2012/01/10 | 416161 | systems/win32/miktex/tm/packages/regstats.tar.lzma
-2021/04/07 | 10486168 | systems/win32/miktex/tm/packages/reledmac.tar.lzma
+2021/06/03 | 10493584 | systems/win32/miktex/tm/packages/reledmac.tar.lzma
2016/07/18 | 62816 | systems/win32/miktex/tm/packages/relenc.tar.lzma
2013/05/29 | 315594 | systems/win32/miktex/tm/packages/relsize.tar.lzma
2010/02/12 | 58689 | systems/win32/miktex/tm/packages/renditions.tar.lzma
@@ -285280,7 +285302,7 @@
2020/07/19 | 920155 | systems/win32/miktex/tm/packages/schooldocs.tar.lzma
2020/10/18 | 6321947 | systems/win32/miktex/tm/packages/schule.tar.lzma
2021/03/17 | 212031 | systems/win32/miktex/tm/packages/schulmathematik.tar.lzma
-2014/12/22 | 761084 | systems/win32/miktex/tm/packages/schulschriften.tar.lzma
+2021/06/03 | 761837 | systems/win32/miktex/tm/packages/schulschriften.tar.lzma
2020/01/03 | 213046 | systems/win32/miktex/tm/packages/schwalbe-chess.tar.lzma
2004/05/07 | 2764 | systems/win32/miktex/tm/packages/scientificpaper.cab
2018/06/04 | 198147 | systems/win32/miktex/tm/packages/scientific-thesis-cover.tar.lzma
@@ -285384,7 +285406,7 @@
2008/07/22 | 360807 | systems/win32/miktex/tm/packages/sistyle.tar.lzma
2011/04/21 | 76017 | systems/win32/miktex/tm/packages/sitem.tar.lzma
2007/12/09 | 81490 | systems/win32/miktex/tm/packages/siunits.tar.lzma
-2021/05/29 | 2120090 | systems/win32/miktex/tm/packages/siunitx.tar.lzma
+2021/06/03 | 2559837 | systems/win32/miktex/tm/packages/siunitx.tar.lzma
2009/02/21 | 477338 | systems/win32/miktex/tm/packages/skaknew.tar.lzma
2018/02/08 | 221377 | systems/win32/miktex/tm/packages/skak.tar.lzma
2011/06/23 | 1471957 | systems/win32/miktex/tm/packages/skb.tar.lzma
@@ -285665,7 +285687,7 @@
2014/03/14 | 746611 | systems/win32/miktex/tm/packages/thumbs.tar.lzma
2016/07/18 | 210377 | systems/win32/miktex/tm/packages/thumb.tar.lzma
2010/01/16 | 158776 | systems/win32/miktex/tm/packages/thumby.tar.lzma
-2021/04/07 | 1673605 | systems/win32/miktex/tm/packages/thuthesis.tar.lzma
+2021/06/03 | 1675915 | systems/win32/miktex/tm/packages/thuthesis.tar.lzma
2016/10/12 | 493413 | systems/win32/miktex/tm/packages/ticket.tar.lzma
2015/02/28 | 377353 | systems/win32/miktex/tm/packages/ticollege.tar.lzma
2012/01/16 | 417463 | systems/win32/miktex/tm/packages/tikz-3dplot.tar.lzma
@@ -285722,7 +285744,7 @@
2009/04/04 | 8096508 | systems/win32/miktex/tm/packages/tipa.tar.lzma
2021/05/09 | 455058 | systems/win32/miktex/tm/packages/tipauni.tar.lzma
2015/01/13 | 388795 | systems/win32/miktex/tm/packages/tipfr.tar.lzma
-2021/05/29 | 124924 | systems/win32/miktex/tm/packages/tiscreen.tar.lzma
+2021/06/03 | 135164 | systems/win32/miktex/tm/packages/tiscreen.tar.lzma
2015/02/28 | 265279 | systems/win32/miktex/tm/packages/titlecaps.tar.lzma
2001/05/14 | 3146 | systems/win32/miktex/tm/packages/titlefoot.tar.lzma
2006/08/17 | 861587 | systems/win32/miktex/tm/packages/titlepage-uni-dortmund.tar.bz2
@@ -285751,6 +285773,7 @@
2004/05/07 | 6156 | systems/win32/miktex/tm/packages/tokenizer.cab
2010/08/30 | 865703 | systems/win32/miktex/tm/packages/tolkienfonts.tar.lzma
2013/11/28 | 169234 | systems/win32/miktex/tm/packages/toolbox.tar.lzma
+2021/06/03 | 5551331 | systems/win32/miktex/tm/packages/tools.tar.lzma
2016/07/18 | 41952 | systems/win32/miktex/tm/packages/topfloat.tar.lzma
2020/04/15 | 386280 | systems/win32/miktex/tm/packages/topiclongtable.tar.lzma
2018/07/11 | 371929 | systems/win32/miktex/tm/packages/topletter.tar.lzma
@@ -285765,7 +285788,7 @@
2005/07/06 | 128933 | systems/win32/miktex/tm/packages/trajan.cab
2013/04/08 | 32051 | systems/win32/miktex/tm/packages/tram.tar.lzma
2021/05/29 | 521097 | systems/win32/miktex/tm/packages/translations.tar.lzma
-2020/08/09 | 240427 | systems/win32/miktex/tm/packages/translator.tar.lzma
+2021/06/03 | 243414 | systems/win32/miktex/tm/packages/translator.tar.lzma
2019/12/01 | 273853 | systems/win32/miktex/tm/packages/transparent.tar.lzma
2011/03/15 | 113853 | systems/win32/miktex/tm/packages/tree-dvips.tar.lzma
2016/07/20 | 50687 | systems/win32/miktex/tm/packages/treesvr.tar.lzma
@@ -285979,7 +286002,7 @@
2008/04/02 | 202156 | systems/win32/miktex/tm/packages/xargs.tar.lzma
2020/07/27 | 1159577 | systems/win32/miktex/tm/packages/xassoccnt.tar.lzma
2020/01/19 | 376430 | systems/win32/miktex/tm/packages/xbmks.tar.lzma
-2021/04/07 | 2529221 | systems/win32/miktex/tm/packages/xcharter.tar.lzma
+2021/06/03 | 2495253 | systems/win32/miktex/tm/packages/xcharter.tar.lzma
2020/01/22 | 161707 | systems/win32/miktex/tm/packages/xcite.tar.lzma
2020/05/06 | 328896 | systems/win32/miktex/tm/packages/xcjk2uni.tar.lzma
2018/01/07 | 348703 | systems/win32/miktex/tm/packages/xcntperchap.tar.lzma
@@ -286023,7 +286046,7 @@
2017/11/18 | 1593 | systems/win32/miktex/tm/packages/xii.tar.lzma
2020/10/03 | 507830 | systems/win32/miktex/tm/packages/xindex.tar.lzma
2016/11/05 | 133165 | systems/win32/miktex/tm/packages/xindy.tar.lzma
-2021/05/29 | 7327 | systems/win32/miktex/tm/packages/xintsession.tar.lzma
+2021/06/03 | 7800 | systems/win32/miktex/tm/packages/xintsession.tar.lzma
2021/05/29 | 2624826 | systems/win32/miktex/tm/packages/xint.tar.lzma
2020/07/03 | 547474 | systems/win32/miktex/tm/packages/xits.tar.lzma
2019/10/22 | 228077 | systems/win32/miktex/tm/packages/xkcdcolors.tar.lzma
@@ -286146,7 +286169,7 @@
2021/05/16 | 5532928 | systems/win32/w32tex/aleph-w32.tar.xz
2021/05/09 | 63720288 | systems/win32/w32tex/biblatex-biber.tar.xz
2016/12/13 | 65971452 | systems/win32/w32tex/cbfonts.tar.xz
-2021/06/01 | 837863 | systems/win32/w32tex/ChangeLog
+2021/06/02 | 839015 | systems/win32/w32tex/ChangeLog
2009/08/03 | 141221 | systems/win32/w32tex/ChangeLog.0
2009/08/03 | 221890 | systems/win32/w32tex/ChangeLog.1
2009/08/03 | 116462 | systems/win32/w32tex/ChangeLog.2
@@ -286154,7 +286177,7 @@
2017/06/24 | 644754 | systems/win32/w32tex/ChangeLog.4
2021/05/30 | 23522432 | systems/win32/w32tex/cjkzr.tar.xz
2013/04/27 | 15858676 | systems/win32/w32tex/context-doc.tar.xz
-2021/05/28 | 144810528 | systems/win32/w32tex/context.tar.xz
+2021/06/02 | 144867572 | systems/win32/w32tex/context.tar.xz
2021/05/04 | 914852 | systems/win32/w32tex/cweb-w32.tar.xz
2021/03/22 | 6433932 | systems/win32/w32tex/datetime2.tar.xz
2021/04/07 | 846020 | systems/win32/w32tex/dvi2ps-w32.tar.xz
@@ -286162,42 +286185,42 @@
2021/05/23 | 4666896 | systems/win32/w32tex/dvipdfm-w32.tar.xz
2021/05/23 | 4551876 | systems/win32/w32tex/dvipsk-w32.tar.xz
2021/04/07 | 2652392 | systems/win32/w32tex/dvitools-w32.tar.xz
-2021/05/03 | 1180696 | systems/win32/w32tex/extractpdfmark-w32.tar.xz
+2021/06/02 | 1181300 | systems/win32/w32tex/extractpdfmark-w32.tar.xz
2021/04/07 | 17377260 | systems/win32/w32tex/gregorio-w32.tar.xz
2009/08/03 | 1072620 | systems/win32/w32tex/gtftex.zip
2021/05/16 | 1861416 | systems/win32/w32tex/jtex-w32.tar.xz
-2021/06/01 | 52892368 | systems/win32/w32tex/latex-dev.tar.xz
-2021/05/28 | 34777012 | systems/win32/w32tex/latex.tar.xz
+2021/06/02 | 52885056 | systems/win32/w32tex/latex-dev.tar.xz
+2021/06/02 | 39438400 | systems/win32/w32tex/latex.tar.xz
2021/04/07 | 1007424 | systems/win32/w32tex/lcdf-typetools-w32.tar.xz
2021/05/25 | 413638248 | systems/win32/w32tex/ltxpkgdocs.tar.xz
-2021/06/01 | 35318784 | systems/win32/w32tex/ltxpkgs.tar.xz
+2021/06/02 | 50059200 | systems/win32/w32tex/ltxpkgs.tar.xz
2021/05/12 | 3891892 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
2021/05/12 | 3899756 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
2021/05/12 | 3907764 | systems/win32/w32tex/luajittex-w32.tar.xz
2021/03/26 | 838276 | systems/win32/w32tex/luasec-w32.tar.xz
-2021/05/28 | 18883356 | systems/win32/w32tex/luatex-dev-w32.tar.xz
-2021/05/28 | 18923540 | systems/win32/w32tex/luatex-exp-w32.tar.xz
+2021/06/02 | 18971552 | systems/win32/w32tex/luatex-dev-w32.tar.xz
+2021/06/02 | 18933816 | systems/win32/w32tex/luatex-exp-w32.tar.xz
2021/05/22 | 68826360 | systems/win32/w32tex/luatexja.tar.xz
-2021/05/28 | 18915660 | systems/win32/w32tex/luatex-w32.tar.xz
+2021/06/02 | 18927016 | systems/win32/w32tex/luatex-w32.tar.xz
2021/05/19 | 1613268 | systems/win32/w32tex/makeindex-w32.tar.xz
2021/03/28 | 5371984 | systems/win32/w32tex/manual.tar.xz
2021/05/23 | 439740 | systems/win32/w32tex/mftools.tar.xz
2021/04/07 | 525008 | systems/win32/w32tex/mftrace-w32.tar.xz
2018/07/14 | 6364952 | systems/win32/w32tex/minitoc.tar.xz
2020/01/19 | 882832 | systems/win32/w32tex/m-tx.tar.xz
-2021/05/30 | 10368760 | systems/win32/w32tex/newtxpx-boondoxfonts.tar.xz
+2021/06/02 | 10369280 | systems/win32/w32tex/newtxpx-boondoxfonts.tar.xz
2021/04/07 | 1246480 | systems/win32/w32tex/omegaj-w32.tar.xz
2020/11/16 | 324540 | systems/win32/w32tex/otfbeta.tar.xz
-2021/05/29 | 22199396 | systems/win32/w32tex/pdftex-w32.tar.xz
-2021/05/18 | 98477852 | systems/win32/w32tex/pgfcontrib.tar.xz
+2021/06/02 | 22354644 | systems/win32/w32tex/pdftex-w32.tar.xz
+2021/06/02 | 98502796 | systems/win32/w32tex/pgfcontrib.tar.xz
2015/01/26 | 189072 | systems/win32/w32tex/plain2-2.54-w32.tar.xz
2021/06/01 | 2845476 | systems/win32/w32tex/platex.tar.xz
2021/04/07 | 1726052 | systems/win32/w32tex/pmx.tar.xz
2021/04/07 | 1170892 | systems/win32/w32tex/pstoedit-w32.tar.xz
2021/06/01 | 274304156 | systems/win32/w32tex/pstricks.tar.xz
2021/04/07 | 518092 | systems/win32/w32tex/psutils-w32.tar.xz
-2021/06/01 | 6780196 | systems/win32/w32tex/ptex-ng-w32.tar.xz
-2021/06/01 | 10715024 | systems/win32/w32tex/ptex-w32.tar.xz
+2021/06/02 | 6800384 | systems/win32/w32tex/ptex-ng-w32.tar.xz
+2021/06/02 | 10737388 | systems/win32/w32tex/ptex-w32.tar.xz
2019/04/15 | 499188 | systems/win32/w32tex/sam2p-w32.tar.xz
2021/03/23 | 87955068 | systems/win32/w32tex/t1fonts.tar.xz
2020/10/31 | 142032 | systems/win32/w32tex/t1utils-w32.tar.xz
@@ -286221,11 +286244,11 @@
2020/01/19 | 5856 | systems/win32/w32tex/txtutil.tar.xz
2013/04/08 | 71588 | systems/win32/w32tex/ums.tar.xz
2012/05/28 | 233472 | systems/win32/w32tex/unzip.exe
-2021/06/01 | 8628672 | systems/win32/w32tex/uptex-w32.tar.xz
+2021/06/02 | 8650176 | systems/win32/w32tex/uptex-w32.tar.xz
2013/04/08 | 722652 | systems/win32/w32tex/utf.tar.xz
2013/04/08 | 13748 | systems/win32/w32tex/vf-n2bk.tar.xz
2021/03/24 | 53260516 | systems/win32/w32tex/w32tex-src.tar.xz
-2021/05/28 | 130716040 | systems/win32/w32tex/web2c-lib.tar.xz
+2021/06/02 | 130737984 | systems/win32/w32tex/web2c-lib.tar.xz
2021/05/21 | 45553952 | systems/win32/w32tex/web2c-w32.tar.xz
2021/05/08 | 811412 | systems/win32/w32tex/win64/aleph-w64.tar.xz
2020/08/20 | 22351540 | systems/win32/w32tex/win64/biblatex-biber-w64.tar.xz
@@ -286236,7 +286259,7 @@
2021/05/05 | 808520 | systems/win32/w32tex/win64/dvipdfm-w64.tar.xz
2021/04/11 | 760436 | systems/win32/w32tex/win64/dvipsk-w64.tar.xz
2021/04/07 | 2365232 | systems/win32/w32tex/win64/dvitools-w64.tar.xz
-2021/05/03 | 1092580 | systems/win32/w32tex/win64/extractpdfmark-w64.tar.xz
+2021/06/02 | 1086052 | systems/win32/w32tex/win64/extractpdfmark-w64.tar.xz
2021/04/07 | 306956 | systems/win32/w32tex/win64/gregorio-w64.tar.xz
2021/04/07 | 588136 | systems/win32/w32tex/win64/jtex-w64.tar.xz
2019/11/11 | 2568 | systems/win32/w32tex/win64/latex-dev-w64.tar.xz
@@ -286253,7 +286276,7 @@
2021/04/07 | 377008 | systems/win32/w32tex/win64/mftrace-w64.tar.xz
2020/01/18 | 362540 | systems/win32/w32tex/win64/m-tx-w64.tar.xz
2021/04/07 | 407412 | systems/win32/w32tex/win64/omegaj-w64.tar.xz
-2021/05/29 | 6928252 | systems/win32/w32tex/win64/pdftex-w64.tar.xz
+2021/06/02 | 6921624 | systems/win32/w32tex/win64/pdftex-w64.tar.xz
2015/01/26 | 41440 | systems/win32/w32tex/win64/plain2-2.54-w64.tar.xz
2021/04/07 | 651552 | systems/win32/w32tex/win64/pmx-w64.tar.xz
2021/04/07 | 791152 | systems/win32/w32tex/win64/pstoedit-w64.tar.xz
@@ -286270,7 +286293,7 @@
2021/05/11 | 1806176 | systems/win32/w32tex/win64/uptex-w64.tar.xz
2021/05/11 | 3755940 | systems/win32/w32tex/win64/web2c-w64.tar.xz
2021/05/08 | 11122468 | systems/win32/w32tex/win64/xetex-w64.tar.xz
-2021/05/28 | 49479628 | systems/win32/w32tex/xetex-w32.tar.xz
+2021/06/02 | 49503092 | systems/win32/w32tex/xetex-w32.tar.xz
2021/04/28 | 2934168 | systems/win32/w32tex/xindy-w32.tar.xz
2013/11/19 | 11356248 | systems/win32/w32tex/xymtex.tar.xz
2016/09/09 | 4334636 | systems/win32/w32tex/xypic.tar.xz
@@ -286367,7 +286390,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2021/06/03 | 186 | timestamp
+2021/06/04 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2017/06/30 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index 961f13f0eb..8db8e02103 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 85bf4aaa95..32e5c1ba34 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,301 +1,1148 @@
+2021/06/04 | 2079 | macros/latex/contrib/bjfuthesis/README.md
+2021/06/03 | 98116 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2021/06/03 | 9796467 | macros/latex/contrib/bjfuthesis.zip
+2021/06/03 | 97959 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2021/06/03 | 97305 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2021/06/03 | 972706 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2021/06/03 | 967 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_simple.snap
+2021/06/03 | 9622 | macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg
+2021/06/03 | 96162 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2021/06/03 | 95456 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2021/06/03 | 94794 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2021/06/03 | 9462 | support/texlab/src/features/cursor.rs
+2021/06/03 | 944 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_definition_simple.snap
+2021/06/03 | 94269 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2021/06/03 | 9420 | support/texlab/tests/integration/snapshots/integration__completion__latex__begin_command.snap
+2021/06/03 | 9407 | macros/optex/base/fams-ini.opm
+2021/06/03 | 9399 | support/texlab/src/features.rs
+2021/06/03 | 9383 | macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty
+2021/06/03 | 928 | support/texlab/tests/integration/snapshots/integration__completion__latex__user_environment.snap
+2021/06/03 | 923 | support/texlab/src/language.rs
+2021/06/03 | 909 | support/texlab/src/features/formatting.rs
+2021/06/03 | 901 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__delimiters.snap
+2021/06/03 | 88 | support/texlab/tests/integration/snapshots/integration__hover__empty_labtex_document.snap
+2021/06/03 | 88 | support/texlab/tests/integration/snapshots/integration__hover__empty_bibtex_document.snap
+2021/06/03 | 883 | support/texlab/src/context.rs
+2021/06/03 | 87666 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2021/06/03 | 8762 | support/texlab/src/features/completion/citation.rs
+2021/06/03 | 8761 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2021/06/03 | 875 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_options.snap
+2021/06/03 | 8705 | support/texlab/src/label.rs
+2021/06/03 | 8703 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex
+2021/06/03 | 869 | support/texlab/src/workspace.rs
+2021/06/03 | 862 | info/dtk-bibliography/dtk-bibliography.tex
+2021/06/03 | 85 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__empty.snap
+2021/06/03 | 856 | systems/win32/miktex/tm/packages/pr.ini
+2021/06/03 | 855 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error1.snap
+2021/06/03 | 855 | support/texlab/src/syntax/bibtex/kind.rs
+2021/06/03 | 843 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_options.snap
+2021/06/03 | 8414 | support/texlab/src/citation/name.rs
+2021/06/03 | 839 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_end.snap
+2021/06/03 | 8397894 | fonts/newtx.zip
+2021/06/03 | 83419 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2021/06/03 | 833 | support/texlab/src/syntax/latex.rs
+2021/06/03 | 83266 | macros/generic/expkv-cs/expkv-cs.dtx
+2021/06/03 | 830168 | systems/texlive/tlnet/archive/babel.doc.r59439.tar.xz
+2021/06/03 | 829434 | language/japanese/uplatex.zip
+2021/06/03 | 8237 | macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
+2021/06/03 | 821 | support/texlab/src/features/reference.rs
+2021/06/03 | 815662 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2021/06/03 | 81013 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2021/06/03 | 808 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_begin.snap
+2021/06/03 | 802 | support/texlab/src/syntax/bibtex.rs
+2021/06/03 | 78755 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2021/06/03 | 786 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_options.snap
+2021/06/03 | 785 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields_incomplete.snap
+2021/06/03 | 7800 | systems/win32/miktex/tm/packages/xintsession.tar.lzma
+2021/06/03 | 77922 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2021/06/03 | 776 | support/texlab/tests/integration/snapshots/integration__completion__latex__citation_multi_word.snap
+2021/06/03 | 772 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_figure.snap
+2021/06/03 | 7715 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2021/06/03 | 76 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__empty.snap
+2021/06/03 | 76856 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2021/06/03 | 763 | support/texlab/tests/integration/snapshots/integration__completion__latex__citation_open_brace.snap
+2021/06/03 | 7634618 | support/texlab.zip
+2021/06/03 | 761837 | systems/win32/miktex/tm/packages/schulschriften.tar.lzma
+2021/06/03 | 75582 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2021/06/03 | 7534511 | systems/win32/miktex/tm/packages/pstricks.tar.lzma
+2021/06/03 | 750269 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2021/06/03 | 745 | support/texlab/docs/tectonic.md
+2021/06/03 | 742 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_simple.snap
+2021/06/03 | 74245 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2021/06/03 | 741 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_type_math.snap
+2021/06/03 | 7408980 | systems/win32/miktex/tm/packages/hvfloat.tar.lzma
+2021/06/03 | 734 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_full.snap
+2021/06/03 | 7336 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex
+2021/06/03 | 73196 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2021/06/03 | 73039 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2021/06/03 | 7281 | support/texlab/src/features/completion/label.rs
+2021/06/03 | 727 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_simple.snap
+2021/06/03 | 72238 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2021/06/03 | 721 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_bibtex.snap
+2021/06/03 | 71820 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2021/06/03 | 710 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_definition_simple.snap
+2021/06/03 | 7072375 | systems/win32/miktex/tm/packages/bjfuthesis.tar.lzma
+2021/06/03 | 7067 | support/texlab/src/features/folding.rs
+2021/06/03 | 70481 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2021/06/03 | 6 | support/texlab/rust-toolchain
+2021/06/03 | 69935 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2021/06/03 | 696 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_options.snap
+2021/06/03 | 6955 | support/texlab/src/features/completion/entry_type.rs
+2021/06/03 | 6927 | support/texlab/src/syntax/latex/lexer.rs
+2021/06/03 | 688 | support/texlab/src/lib.rs
+2021/06/03 | 6888 | support/texlab/src/features/symbol/project_order.rs
+2021/06/03 | 6881 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex
+2021/06/03 | 685752 | systems/texlive/tlnet/archive/babel.source.r59439.tar.xz
+2021/06/03 | 6843 | support/texlab/src/features/reference/entry.rs
+2021/06/03 | 682661 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
+2021/06/03 | 6812806 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2021/06/03 | 681260 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2021/06/03 | 68119 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2021/06/03 | 677 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_siblings.snap
+2021/06/03 | 676 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_options.snap
+2021/06/03 | 6764 | macros/latex/contrib/ocgx2/ChangeLog
+2021/06/03 | 67604 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2021/06/03 | 67477 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2021/06/03 | 67437 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2021/06/03 | 670 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_trailing_comma.snap
+2021/06/03 | 668 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_options.snap
+2021/06/03 | 6673 | macros/latex/contrib/tuda-ci/tex/tudabeamer.cls
+2021/06/03 | 665160 | systems/texlive/tlnet/archive/latex.source.r59440.tar.xz
+2021/06/03 | 6618 | support/texlab/src/features/reference/string.rs
+2021/06/03 | 6579 | support/texlab/src/syntax/bibtex/cst.rs
+2021/06/03 | 656 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_number_key.snap
+2021/06/03 | 6564698 | systems/win32/miktex/tm/packages/newtx.tar.lzma
+2021/06/03 | 655529 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
+2021/06/03 | 65546 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2021/06/03 | 654 | info/dtk-bibliography/README.md
+2021/06/03 | 65446 | support/texlab/Cargo.lock
+2021/06/03 | 65424 | systems/texlive/tlnet/archive/amsmath.source.r59441.tar.xz
+2021/06/03 | 65305 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2021/06/03 | 648 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field.snap
+2021/06/03 | 6485 | support/texlab/src/line_index.rs
+2021/06/03 | 647323 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
+2021/06/03 | 6465091 | macros/latex/contrib/tuda-ci.zip
+2021/06/03 | 643 | support/texlab/texlab.1
+2021/06/03 | 64388 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2021/06/03 | 64030 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2021/06/03 | 63747 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2021/06/03 | 6365 | macros/latex/contrib/tuda-ci/tex/tudarules.sty
+2021/06/03 | 634 | support/texlab/src/syntax/latex/analysis/label_number.rs
+2021/06/03 | 630 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inline_double_dollar.snap
+2021/06/03 | 629959 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2021/06/03 | 62718 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2021/06/03 | 624 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inline.snap
+2021/06/03 | 623 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption.snap
+2021/06/03 | 62379 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2021/06/03 | 622116 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
+2021/06/03 | 621 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_error.snap
+2021/06/03 | 621414 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2021/06/03 | 6196 | macros/optex/README
+2021/06/03 | 6187 | support/texlab/src/features/reference/label.rs
+2021/06/03 | 616 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_simple.snap
+2021/06/03 | 614 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__formula.snap
+2021/06/03 | 609 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error2.snap
+2021/06/03 | 6092 | support/texlab/docs/previewing.md
+2021/06/03 | 608 | systems/texlive/tlnet/archive/graphics-def.doc.r59435.tar.xz
+2021/06/03 | 60808 | systems/texlive/tlnet/archive/siunitx.r59437.tar.xz
+2021/06/03 | 60651 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2021/06/03 | 598 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description_and_counter.snap
+2021/06/03 | 59799 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2021/06/03 | 597000 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2021/06/03 | 594959 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf
+2021/06/03 | 59108 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2021/06/03 | 590183 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf
+2021/06/03 | 5896 | support/texlab/src/features/completion/field.rs
+2021/06/03 | 586895 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
+2021/06/03 | 586346 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2021/06/03 | 5859 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex
+2021/06/03 | 583 | support/texlab/src/syntax/latex/analysis/theorem.rs
+2021/06/03 | 583234 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
+2021/06/03 | 582465 | systems/win32/miktex/tm/packages/platex-tools.tar.lzma
+2021/06/03 | 5817 | macros/latex/contrib/tuda-ci/tex/tudacolors.sty
+2021/06/03 | 5789 | macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo
+2021/06/03 | 577467 | systems/win32/miktex/tm/packages/files.csv.lzma
+2021/06/03 | 576903 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2021/06/03 | 575 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__command_with_parameter.snap
+2021/06/03 | 57581 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2021/06/03 | 574086 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf
+2021/06/03 | 57128 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2021/06/03 | 57018 | support/texlab/data/lang_data.json
+2021/06/03 | 5679 | support/texlab/src/features/completion/import.rs
+2021/06/03 | 56731 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2021/06/03 | 56652 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2021/06/03 | 566496 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2021/06/03 | 565 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__multiple_entries.snap
+2021/06/03 | 5650 | support/texlab/src/features/completion/argument.rs
+2021/06/03 | 56413 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2021/06/03 | 56330 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2021/06/03 | 56298 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2021/06/03 | 56296 | support/texlab/src/citation/apa.csl
+2021/06/03 | 56193 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2021/06/03 | 559 | support/texlab/src/features/semantic.rs
+2021/06/03 | 558 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_number.snap
+2021/06/03 | 558 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote_postnote.snap
+2021/06/03 | 558963 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
+2021/06/03 | 55513 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
+2021/06/03 | 5551331 | systems/win32/miktex/tm/packages/tools.tar.lzma
+2021/06/03 | 550646 | macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
+2021/06/03 | 549 | support/texlab/tests/integration/snapshots/integration__completion__latex__kernel_command.snap
+2021/06/03 | 540 | support/texlab/tests/integration/snapshots/integration__completion__latex__kernel_command_environment.snap
+2021/06/03 | 540 | support/texlab/tests/integration/snapshots/integration__completion__latex__class_environment.snap
+2021/06/03 | 538 | support/texlab/tests/integration/snapshots/integration__completion__latex__user_command.snap
+2021/06/03 | 5381 | macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo
+2021/06/03 | 5361 | support/texlab/src/features/completion/component_command.rs
+2021/06/03 | 532033 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2021/06/03 | 5296 | support/texlab/src/features/definition/string.rs
+2021/06/03 | 52690 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2021/06/03 | 5267 | support/texlab/src/features/completion/color_model.rs
+2021/06/03 | 52400 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2021/06/03 | 521 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_invalid_nesting.snap
+2021/06/03 | 5217 | support/texlab/src/features/completion/include.rs
+2021/06/03 | 520 | info/dtk-bibliography/dtk-authoryear.dbx
+2021/06/03 | 519 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__string_complete.snap
+2021/06/03 | 519 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__string_casing.snap
+2021/06/03 | 519245 | info/dtk-bibliography/dtk-bibliography.bib
+2021/06/03 | 517 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__string_missing_quote.snap
+2021/06/03 | 517 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__string_incomplete.snap
+2021/06/03 | 51743 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2021/06/03 | 5170 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex
+2021/06/03 | 51553 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2021/06/03 | 51420 | support/texlab/src/syntax/build_log.rs
+2021/06/03 | 51309 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2021/06/03 | 51118 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2021/06/03 | 511069 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2021/06/03 | 51025 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2021/06/03 | 5041 | support/texlab/src/features/rename/entry.rs
+2021/06/03 | 503390 | install/macros/generic/expkv.tds.zip
+2021/06/03 | 50143 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2021/06/03 | 4994 | support/texlab/src/capabilities.rs
+2021/06/03 | 497 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error3.snap
+2021/06/03 | 497236 | macros/generic/expkv.zip
+2021/06/03 | 4948 | support/texlab/tests/integration/snapshots/integration__completion__latex__class_import.snap
+2021/06/03 | 4940 | support/texlab/src/features/completion/acronym_ref.rs
+2021/06/03 | 491 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_minimal.snap
+2021/06/03 | 4916 | support/texlab/src/features/highlight/label.rs
+2021/06/03 | 490 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_counter.snap
+2021/06/03 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2021/06/03 | 489 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_minimal_error.snap
+2021/06/03 | 488 | support/texlab/src/range.rs
+2021/06/03 | 483043 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2021/06/03 | 48262 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2021/06/03 | 4814 | support/texlab/src/features/completion/tikz_library.rs
+2021/06/03 | 480 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__preamble_complete.snap
+2021/06/03 | 480 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__preamble_casing.snap
+2021/06/03 | 480586 | macros/generic/expkv/expkv.pdf
+2021/06/03 | 479 | support/texlab/src/features/highlight.rs
+2021/06/03 | 4769 | support/texlab/src/features/completion/component_environment.rs
+2021/06/03 | 476720 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2021/06/03 | 4736 | support/texlab/src/features/rename/label.rs
+2021/06/03 | 47332 | macros/latex/contrib/derivative/derivative.sty
+2021/06/03 | 472 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__math_operator_simple.snap
+2021/06/03 | 4729 | support/texlab/src/citation/bibutils.rs
+2021/06/03 | 4712 | support/texlab/src/diagnostics/bibtex.rs
+2021/06/03 | 470 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_simple.snap
+2021/06/03 | 468 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_error.snap
+2021/06/03 | 46756 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2021/06/03 | 464 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_no_argc.snap
+2021/06/03 | 462 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description.snap
+2021/06/03 | 461991 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2021/06/03 | 4603 | support/texlab/src/citation.rs
+2021/06/03 | 45948 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2021/06/03 | 45910 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2021/06/03 | 45906 | support/texlab/src/syntax/latex/parser.rs
+2021/06/03 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2021/06/03 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2021/06/03 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2021/06/03 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2021/06/03 | 455288 | systems/texlive/tlnet/archive/newpx.doc.r59431.tar.xz
+2021/06/03 | 45339 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2021/06/03 | 450 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_multiple.snap
+2021/06/03 | 4476 | macros/optex/doc/optex-doc.tex
+2021/06/03 | 446 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__preamble_missing_end.snap
+2021/06/03 | 44638 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2021/06/03 | 4441 | macros/latex/contrib/tuda-ci/tex/tudacolors.def
+2021/06/03 | 4427 | support/texlab/README.md
+2021/06/03 | 4380 | support/texlab/src/syntax/latex/kind.rs
+2021/06/03 | 43420 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2021/06/03 | 4328 | macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty
+2021/06/03 | 4314 | support/texlab/src/diagnostics/latex.rs
+2021/06/03 | 43042 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2021/06/03 | 4303376 | systems/win32/miktex/tm/packages/musixtex-fonts.tar.lzma
+2021/06/03 | 42978 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2021/06/03 | 4294 | support/texlab/src/citation/name/parser.lalrpop
+2021/06/03 | 428 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_simple.snap
+2021/06/03 | 42842 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2021/06/03 | 42707 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2021/06/03 | 426 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote.snap
+2021/06/03 | 425 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__generic_command_args.snap
+2021/06/03 | 425 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__comment.snap
+2021/06/03 | 4238 | support/texlab/src/features/completion/glossary_ref.rs
+2021/06/03 | 42366 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2021/06/03 | 423573 | info/dtk-bibliography.zip
+2021/06/03 | 4218 | support/texlab/src/component_db.rs
+2021/06/03 | 4190 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__field_incomplete_entry.snap
+2021/06/03 | 4190 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__field_complete_entry.snap
+2021/06/03 | 416 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_type_figure.snap
+2021/06/03 | 4165 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__entry_type_empty_name.snap
+2021/06/03 | 41581 | macros/latex/contrib/tuda-ci/tex/tudapub.cls
+2021/06/03 | 411 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_multiple.snap
+2021/06/03 | 41087 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2021/06/03 | 4091 | support/texlab/src/features/completion/theorem.rs
+2021/06/03 | 4061 | macros/optex/base/optex.ini
+2021/06/03 | 4060 | support/texlab/src/features/hover/string_ref.rs
+2021/06/03 | 4053 | support/texlab/tests/integration/snapshots/integration__completion__latex__package_import.snap
+2021/06/03 | 401 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_multiple_keys.snap
+2021/06/03 | 4010 | support/texlab/src/features/hover/citation.rs
+2021/06/03 | 3994 | support/texlab/src/workspace/storage.rs
+2021/06/03 | 3993 | support/texlab/src/features/lsp_kinds.rs
+2021/06/03 | 39839 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2021/06/03 | 3982 | support/texlab/src/features/definition/command.rs
+2021/06/03 | 397312 | systems/texlive/tlnet/archive/texlive-scripts.doc.r59428.tar.xz
+2021/06/03 | 392973 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2021/06/03 | 3928 | support/texlab/src/features/definition/entry.rs
+2021/06/03 | 39034 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2021/06/03 | 3871 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
+2021/06/03 | 3815 | macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty
+2021/06/03 | 38111 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2021/06/03 | 380190 | support/texlab/docs/demo.gif
+2021/06/03 | 37859 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2021/06/03 | 3779 | support/texlab/docs/options.md
+2021/06/03 | 377210 | install/macros/generic/expkv-cs.tds.zip
+2021/06/03 | 3733214 | systems/win32/miktex/tm/packages/lwarp.tar.lzma
+2021/06/03 | 37314 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2021/06/03 | 37245 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2021/06/03 | 371347 | macros/generic/expkv-cs.zip
+2021/06/03 | 3707 | support/texlab/src/features/symbol/types.rs
+2021/06/03 | 3693 | support/texlab/src/features/hover/field.rs
+2021/06/03 | 3670 | support/texlab/src/features/hover/entry_type.rs
+2021/06/03 | 366 | support/texlab/src/syntax/latex/analysis/environment.rs
+2021/06/03 | 36639 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2021/06/03 | 366387 | info/dtk-bibliography/dtk-bibliography.pdf
+2021/06/03 | 364 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__math_operator_no_impl.snap
+2021/06/03 | 3627 | support/texlab/src/features/build.rs
+2021/06/03 | 361 | support/texlab/src/req_queue.rs
+2021/06/03 | 361934 | macros/generic/expkv-cs/expkv-cs.pdf
+2021/06/03 | 3615 | support/texlab/src/features/definition/document.rs
+2021/06/03 | 360 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation.snap
+2021/06/03 | 3596 | support/texlab/src/workspace/parent_expand.rs
+2021/06/03 | 358 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_incomplete.snap
+2021/06/03 | 357 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_simple.snap
+2021/06/03 | 356 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_no_impl.snap
+2021/06/03 | 355 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_simple.snap
+2021/06/03 | 3553 | support/texlab/src/features/symbol.rs
+2021/06/03 | 354 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_only_name.snap
+2021/06/03 | 354 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__escaped_brackets.snap
+2021/06/03 | 354 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_no_impl_error.snap
+2021/06/03 | 353 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__verbatim_include_simple.snap
+2021/06/03 | 35352 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2021/06/03 | 35149 | support/texlab/LICENSE
+2021/06/03 | 35062 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2021/06/03 | 347 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_redundant_comma.snap
+2021/06/03 | 347724 | macros/latex/contrib/easybook.zip
+2021/06/03 | 3467 | support/texlab/src/features/completion/types.rs
+2021/06/03 | 346550 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2021/06/03 | 34651 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2021/06/03 | 345 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__tikz_library_import_simple.snap
+2021/06/03 | 344357 | systems/win32/miktex/tm/packages/pxchfon.tar.lzma
+2021/06/03 | 343 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__pgf_library_import_simple.snap
+2021/06/03 | 342 | support/texlab/src/syntax.rs
+2021/06/03 | 341 | support/texlab/src/syntax/latex/analysis/command.rs
+2021/06/03 | 3409 | support/texlab/src/features/link.rs
+2021/06/03 | 3400 | support/texlab/tests/integration/snapshots/integration__completion__latex__kernel_command_glyph.snap
+2021/06/03 | 339 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_simple.snap
+2021/06/03 | 339 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__bibtex_include_simple.snap
+2021/06/03 | 337 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_simple.snap
+2021/06/03 | 337 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_simple.snap
+2021/06/03 | 33651 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2021/06/03 | 3364 | support/texlab/src/features/symbol/bibtex.rs
+2021/06/03 | 33584 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2021/06/03 | 33569 | install/macros/latex/contrib/ocgx2.tds.zip
+2021/06/03 | 331 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_simple.snap
+2021/06/03 | 3317 | support/texlab/src/features/forward_search.rs
+2021/06/03 | 330962 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2021/06/03 | 329 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_simple.snap
+2021/06/03 | 32644 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2021/06/03 | 325 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_input_simple.snap
+2021/06/03 | 32510 | macros/latex/contrib/ocgx2.zip
+2021/06/03 | 3243 | support/texlab/src/workspace/document.rs
+2021/06/03 | 3243 | macros/latex/contrib/tuda-ci/tex/tudafonts.sty
+2021/06/03 | 321 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_include_simple.snap
+2021/06/03 | 32198 | macros/latex/contrib/tuda-ci/tex/tudaexercise.cls
+2021/06/03 | 321604 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2021/06/03 | 3181 | support/texlab/tests/integration/workspace_symbol.rs
+2021/06/03 | 3175 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex
+2021/06/03 | 3167 | support/texlab/src/diagnostics/chktex.rs
+2021/06/03 | 31609 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2021/06/03 | 31549 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2021/06/03 | 315318 | macros/latex/contrib/easybook/easybook.pdf
+2021/06/03 | 314 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_incomplete.snap
+2021/06/03 | 314 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_simple.snap
+2021/06/03 | 314752 | systems/texlive/tlnet/archive/easybook.doc.r59434.tar.xz
+2021/06/03 | 313 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_label_reference_simple.snap
+2021/06/03 | 31325 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2021/06/03 | 312 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_reference_simple.snap
+2021/06/03 | 312520 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2021/06/03 | 3122 | support/texlab/src/features/completion/color.rs
+2021/06/03 | 31197 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2021/06/03 | 310 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_definition_simple.snap
+2021/06/03 | 30856 | systems/texlive/tlnet/archive/amsmath.r59441.tar.xz
+2021/06/03 | 30816 | macros/latex/contrib/tuda-ci/tex/tudathesis.cfg
+2021/06/03 | 30806 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2021/06/03 | 30768 | systems/texlive/tlnet/archive/easybook.source.r59434.tar.xz
+2021/06/03 | 3072 | support/texlab/src/features/rename/command.rs
+2021/06/03 | 3043 | support/texlab/src/features/hover/component.rs
+2021/06/03 | 302 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error4.snap
+2021/06/03 | 301 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_simple.snap
+2021/06/03 | 30029 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2021/06/03 | 299 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__wrap_long_lines.snap
+2021/06/03 | 2984 | support/texlab/src/workspace/watch.rs
+2021/06/03 | 29841 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2021/06/03 | 297 | support/texlab/tests/integration/snapshots/integration__hover__label_theorem_child_file_mumber.snap
+2021/06/03 | 295420 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2021/06/03 | 294 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_star.snap
+2021/06/03 | 294 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_simple.snap
+2021/06/03 | 29437 | support/texlab/src/server.rs
+2021/06/03 | 29079 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2021/06/03 | 2906 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__command_incomplete_entry.snap
+2021/06/03 | 2906 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__command_complete_entry.snap
+2021/06/03 | 2903 | support/texlab/tests/integration/snapshots/integration__completion__latex__label.snap
+2021/06/03 | 289 | support/texlab/tests/integration/snapshots/integration__hover__label_theorem_child_file.snap
+2021/06/03 | 2897 | support/texlab/tests/integration/snapshots/integration__completion__latex__class_command.snap
+2021/06/03 | 287 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_missing_brace.snap
+2021/06/03 | 2878 | support/texlab/src/features/completion/user_environment.rs
+2021/06/03 | 2874 | support/texlab/src/features/completion/user_command.rs
+2021/06/03 | 2873 | support/texlab/tests/integration/snapshots/integration__completion__latex__package_environment.snap
+2021/06/03 | 287273 | info/tex-nutshell.zip
+2021/06/03 | 2863 | support/texlab/tests/integration/snapshots/integration__completion__latex__preselect_environment.snap
+2021/06/03 | 285 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__unmatched_brackets_with_group.snap
+2021/06/03 | 28400 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex
+2021/06/03 | 283 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__brace_group_simple.snap
+2021/06/03 | 283983 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2021/06/03 | 28287 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2021/06/03 | 2825 | support/texlab/tests/integration/snapshots/integration__completion__latex__pgf_library.snap
+2021/06/03 | 281 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_empty.snap
+2021/06/03 | 281 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__brace_group_missing_end.snap
+2021/06/03 | 281963 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2021/06/03 | 28139 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2021/06/03 | 2801 | support/texlab/src/config.rs
+2021/06/03 | 279 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_empty.snap
+2021/06/03 | 2793420 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2021/06/03 | 27928662 | systems/win32/miktex/tm/packages/ltxbase.tar.lzma
+2021/06/03 | 277 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__command_with_star.snap
+2021/06/03 | 2773 | support/texlab/tests/integration/snapshots/integration__completion__latex__package_command.snap
+2021/06/03 | 27718 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2021/06/03 | 27577780 | systems/texlive/tlnet/archive/latex.doc.r59440.tar.xz
+2021/06/03 | 27381 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2021/06/03 | 27284 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2021/06/03 | 27185 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2021/06/03 | 2717 | support/texlab/src/features/definition/label.rs
+2021/06/03 | 26972 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex
+2021/06/03 | 2671938 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2021/06/03 | 26718 | macros/optex/base/table.opm
+2021/06/03 | 26637 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex
+2021/06/03 | 2662 | support/texlab/src/options.rs
+2021/06/03 | 2658 | support/texlab/tests/integration/snapshots/integration__completion__latex__color_name.snap
+2021/06/03 | 2657 | support/texlab/tests/integration/snapshots/integration__document_symbol__enumerate_nested.snap
+2021/06/03 | 2644 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib
+2021/06/03 | 2628139 | systems/win32/miktex/tm/packages/newpx.tar.lzma
+2021/06/03 | 262204 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2021/06/03 | 2620 | support/texlab/src/distro/miktex.rs
+2021/06/03 | 26161 | support/texlab/texlab.pdf
+2021/06/03 | 2614 | support/texlab/src/features/formatting/latexindent.rs
+2021/06/03 | 258884 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2021/06/03 | 25872 | macros/latex/contrib/ocgx2/ocgbase.sty
+2021/06/03 | 2586 | support/texlab/texlab.tex
+2021/06/03 | 258588 | info/tex-nutshell/tex-nutshell.pdf
+2021/06/03 | 2564 | support/texlab/src/workspace/children_expand.rs
+2021/06/03 | 2559837 | systems/win32/miktex/tm/packages/siunitx.tar.lzma
+2021/06/03 | 25592 | systems/texlive/tlnet/archive/hep-paper.source.r59436.tar.xz
+2021/06/03 | 25584654 | systems/texlive/tlnet/install-tl.zip
+2021/06/03 | 2537816 | graphics/circuit_macros.zip
+2021/06/03 | 25220 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2021/06/03 | 2516989 | systems/win32/miktex/tm/packages/changes.tar.lzma
+2021/06/03 | 250367 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2021/06/03 | 25022 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2021/06/03 | 24979 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2021/06/03 | 2495253 | systems/win32/miktex/tm/packages/xcharter.tar.lzma
+2021/06/03 | 2486184 | systems/win32/miktex/tm/packages/amsmath.tar.lzma
+2021/06/03 | 247 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields.snap
+2021/06/03 | 2478 | support/texlab/tests/integration/snapshots/integration__completion__latex__theorem_environment.snap
+2021/06/03 | 247157 | systems/win32/miktex/tm/packages/lua-typo.tar.lzma
+2021/06/03 | 2463101 | systems/win32/miktex/tm/packages/libertinust1math.tar.lzma
+2021/06/03 | 243 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_empty.snap
+2021/06/03 | 243414 | systems/win32/miktex/tm/packages/translator.tar.lzma
+2021/06/03 | 243373 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2021/06/03 | 24234835 | support/texlab/data/components.json
+2021/06/03 | 239844 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2021/06/03 | 2393920 | systems/texlive/tlnet/archive/amsmath.doc.r59441.tar.xz
+2021/06/03 | 2391164 | systems/texlive/tlnet/archive/siunitx.doc.r59437.tar.xz
+2021/06/03 | 23908 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2021/06/03 | 23660 | support/texlab/src/features/completion.rs
+2021/06/03 | 2361 | support/texlab/src/features/semantic/legend.rs
+2021/06/03 | 2353 | support/texlab/src/syntax/latex/analysis/explicit_link.rs
+2021/06/03 | 2350 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex
+2021/06/03 | 234 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__escape_sequence.snap
+2021/06/03 | 2340500 | macros/optex.zip
+2021/06/03 | 2337 | support/texlab/src/features/completion/begin_command.rs
+2021/06/03 | 23343 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2021/06/03 | 2309948 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2021/06/03 | 22741 | support/texlab/tests/integration/completion.rs
+2021/06/03 | 225 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields_missing_comma.snap
+2021/06/03 | 2257 | support/texlab/Cargo.toml
+2021/06/03 | 2250 | support/texlab/docs/lsp_kinds.md
+2021/06/03 | 2246 | support/texlab/src/features/hover/label.rs
+2021/06/03 | 2240 | support/texlab/src/diagnostics/debouncer.rs
+2021/06/03 | 2221 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__entry_type_incomplete.snap
+2021/06/03 | 2218 | support/texlab/tests/integration/hover.rs
+2021/06/03 | 2209 | support/texlab/src/workspace/api.rs
+2021/06/03 | 22021 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2021/06/03 | 2180 | macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
+2021/06/03 | 2172 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty
+2021/06/03 | 2171 | support/texlab/src/syntax/latex/analysis/distro_file.rs
+2021/06/03 | 2168204 | systems/texlive/tlnet/archive/newpx.r59431.tar.xz
+2021/06/03 | 216000 | systems/texlive/tlnet/archive/latex.r59440.tar.xz
+2021/06/03 | 214714 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2021/06/03 | 21213 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2021/06/03 | 2108 | support/texlab/src/distro.rs
+2021/06/03 | 209785 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2021/06/03 | 209751 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2021/06/03 | 2092269 | systems/win32/miktex/tm/packages/graphics.tar.lzma
+2021/06/03 | 2084 | support/texlab/src/dispatch.rs
+2021/06/03 | 20808127 | systems/texlive/tlnet/install-tl-windows.exe
+2021/06/03 | 207958 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2021/06/03 | 2070 | support/texlab/src/diagnostics/build_log.rs
+2021/06/03 | 206 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__unmatched_brackets.snap
+2021/06/03 | 206 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__unmatched_braces.snap
+2021/06/03 | 206251 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2021/06/03 | 205 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__hello_world.snap
+2021/06/03 | 205706 | macros/latex/contrib/derivative.zip
+2021/06/03 | 203207 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2021/06/03 | 2021 | support/texlab/docs/custom_messages.md
+2021/06/03 | 2019 | support/texlab/src/distro/kpsewhich.rs
+2021/06/03 | 20125 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2021/06/03 | 2002627 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2021/06/03 | 1998 | support/texlab/src/lang_data.rs
+2021/06/03 | 199543 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2021/06/03 | 198280 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2021/06/03 | 196520 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2021/06/03 | 195701 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2021/06/03 | 194120 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2021/06/03 | 1930 | support/texlab/src/syntax/latex/analysis/label_name.rs
+2021/06/03 | 1917 | support/texlab/tests/integration/snapshots/integration__completion__latex__color_model_define_color.snap
+2021/06/03 | 1914 | support/texlab/src/main.rs
+2021/06/03 | 18915 | macros/latex/contrib/tuda-ci/tex/tudasciposter.cls
+2021/06/03 | 1886 | support/texlab/src/uri.rs
+2021/06/03 | 1875280 | systems/win32/miktex/tm/packages/l3packages.tar.lzma
+2021/06/03 | 1869 | info/dtk-bibliography/dtk-authoryear.bbx
+2021/06/03 | 1859 | support/texlab/src/syntax/latex/analysis/types.rs
+2021/06/03 | 1854 | support/texlab/tests/integration/snapshots/integration__document_symbol__theorem_nested.snap
+2021/06/03 | 183 | support/texlab/CONTRIBUTING.md
+2021/06/03 | 181 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__junk.snap
+2021/06/03 | 18142 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2021/06/03 | 180462 | macros/latex/contrib/derivative/derivative.pdf
+2021/06/03 | 180217 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2021/06/03 | 179817 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2021/06/03 | 179773 | systems/win32/miktex/tm/packages/biblatex-cv.tar.lzma
+2021/06/03 | 17975 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2021/06/03 | 179752 | systems/texlive/tlnet/archive/babel.r59439.tar.xz
+2021/06/03 | 1791 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_nested.snap
+2021/06/03 | 1789 | support/texlab/src/features/completion/util.rs
+2021/06/03 | 1780 | support/texlab/src/diagnostics.rs
+2021/06/03 | 17408 | macros/latex/contrib/tuda-ci/tex/tudaposter.cls
+2021/06/03 | 17268234 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2021/06/03 | 17242 | support/texlab/src/syntax/latex/cst.rs
+2021/06/03 | 170 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__generic_command_empty.snap
+2021/06/03 | 1705213 | systems/win32/miktex/tm/packages/babel.tar.lzma
+2021/06/03 | 1688059 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2021/06/03 | 1687 | support/texlab/tests/integration/snapshots/integration__document_symbol__enumerate_flat.snap
+2021/06/03 | 1686 | macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo
+2021/06/03 | 168529 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2021/06/03 | 1684 | macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo
+2021/06/03 | 1682 | macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo
+2021/06/03 | 1681 | macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo
+2021/06/03 | 1680 | macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo
+2021/06/03 | 16796 | CTAN.sites
+2021/06/03 | 1676 | macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo
+2021/06/03 | 1675915 | systems/win32/miktex/tm/packages/thuthesis.tar.lzma
+2021/06/03 | 167160 | systems/texlive/tlnet/archive/biblatex-cv.doc.r59433.tar.xz
+2021/06/03 | 166 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__generic_command_escape.snap
+2021/06/03 | 16688 | macros/latex/contrib/tuda-ci/tex/tudaletter.cls
+2021/06/03 | 1662 | support/texlab/src/syntax/bibtex/lexer.rs
+2021/06/03 | 1662190 | systems/win32/miktex/tm/packages/platex.tar.lzma
+2021/06/03 | 16613 | macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex
+2021/06/03 | 1658914 | systems/win32/miktex/tm/packages/circuitikz.tar.lzma
+2021/06/03 | 16464 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2021/06/03 | 163870 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2021/06/03 | 16346 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2021/06/03 | 16188 | support/texlab/src/citation/ris.rs
+2021/06/03 | 159 | support/texlab/build.rs
+2021/06/03 | 159438 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2021/06/03 | 1593 | support/texlab/src/client.rs
+2021/06/03 | 1578 | support/texlab/src/syntax/latex/analysis/implicit_link.rs
+2021/06/03 | 154419 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2021/06/03 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2021/06/03 | 15323 | macros/latex/contrib/tuda-ci/README.md
+2021/06/03 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2021/06/03 | 152 | support/texlab/tests/integration/snapshots/integration__completion__latex__citation_after.snap
+2021/06/03 | 152237 | systems/win32/miktex/tm/packages/hvarabic.tar.lzma
+2021/06/03 | 152232 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2021/06/03 | 150216 | systems/win32/miktex/tm/packages/pxjahyper.tar.lzma
+2021/06/03 | 1494 | support/texlab/tests/integration/snapshots/integration__document_symbol__section_nested.snap
+2021/06/03 | 1490 | macros/latex/contrib/derivative/README.md
+2021/06/03 | 148 | support/texlab/tests/integration/snapshots/integration__completion__latex__empty_document.snap
+2021/06/03 | 148 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__junk.snap
+2021/06/03 | 148 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__entry_type_empty_name_before.snap
+2021/06/03 | 148 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__empty_document.snap
+2021/06/03 | 147750 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2021/06/03 | 1475 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acronym_declaration.snap
+2021/06/03 | 147355 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2021/06/03 | 14708 | support/texlab/CHANGELOG.md
+2021/06/03 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2021/06/03 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2021/06/03 | 144548 | systems/win32/miktex/tm/packages/plautopatch.tar.lzma
+2021/06/03 | 14344 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2021/06/03 | 1432140 | systems/texlive/tlnet/archive/libertinust1math.doc.r59430.tar.xz
+2021/06/03 | 1431 | macros/generic/expkv/README.md
+2021/06/03 | 1427859 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2021/06/03 | 14223 | support/texlab/src/features/symbol/latex.rs
+2021/06/03 | 1416030 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2021/06/03 | 1413 | support/texlab/tests/integration/snapshots/integration__document_symbol__float_nested.snap
+2021/06/03 | 14100 | systems/texlive/tlnet/archive/easybook.r59434.tar.xz
+2021/06/03 | 1405 | support/texlab/tests/integration/snapshots/integration__document_symbol__equation_nested.snap
+2021/06/03 | 1398 | support/texlab/tests/integration/snapshots/integration__document_symbol__theorem_flat.snap
+2021/06/03 | 1384346 | systems/win32/miktex/tm/packages/hep-paper.tar.lzma
+2021/06/03 | 1383214 | macros/optex/doc/optex-doc.pdf
+2021/06/03 | 1374 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_options.snap
+2021/06/03 | 13710 | macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls
+2021/06/03 | 1365 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_type_section.snap
+2021/06/03 | 136482 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2021/06/03 | 1352244 | systems/texlive/tlnet/archive/hep-paper.doc.r59436.tar.xz
+2021/06/03 | 135164 | systems/win32/miktex/tm/packages/tiscreen.tar.lzma
+2021/06/03 | 134947 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2021/06/03 | 13461 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2021/06/03 | 133880 | systems/texlive/tlnet/archive/tiscreen.doc.r59438.tar.xz
+2021/06/03 | 131707 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2021/06/03 | 1306688 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2021/06/03 | 1301561 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2021/06/03 | 1297 | macros/generic/expkv-cs/README.md
+2021/06/03 | 1293151 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2021/06/03 | 1286 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested_missing_braces.snap
+2021/06/03 | 1282 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_enum_item.snap
+2021/06/03 | 128064 | macros/latex/contrib/easybook/easybook.dtx
+2021/06/03 | 1274553 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2021/06/03 | 1274449 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2021/06/03 | 126 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__parameter.snap
+2021/06/03 | 1269 | support/texlab/src/line_index_ext.rs
+2021/06/03 | 1265 | support/texlab/src/features/hover.rs
+2021/06/03 | 125 | support/texlab/tests/integration/main.rs
+2021/06/03 | 124 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__parameter_error.snap
+2021/06/03 | 124 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__concatenation.snap
+2021/06/03 | 12489 | support/texlab/src/features/formatting/bibtex_internal.rs
+2021/06/03 | 124749 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2021/06/03 | 1243 | support/texlab/tests/integration/issues.rs
+2021/06/03 | 123 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__lexer__tests__invalid_parameter.snap
+2021/06/03 | 1232 | systems/texlive/tlnet/archive/collection-bibtexextra.r59433.tar.xz
+2021/06/03 | 1210 | support/texlab/tests/integration/snapshots/integration__completion__latex__citation.snap
+2021/06/03 | 1209 | support/texlab/tests/integration/snapshots/integration__completion__latex__color_model_define_color_set.snap
+2021/06/03 | 1190594 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2021/06/03 | 1190064 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2021/06/03 | 117 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__command.snap
+2021/06/03 | 117609 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2021/06/03 | 1169898 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2021/06/03 | 11573094 | systems/win32/miktex/tm/packages/l3kernel.tar.lzma
+2021/06/03 | 115518 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2021/06/03 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2021/06/03 | 11519 | support/texlab/tests/integration/document_symbol.rs
+2021/06/03 | 114 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__trailing_comma.snap
+2021/06/03 | 114 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__insert_braces.snap
+2021/06/03 | 11495 | support/texlab/tests/integration/common.rs
+2021/06/03 | 114700 | info/tex-nutshell/tex-nutshell.tex
+2021/06/03 | 1141 | support/texlab/src/syntax/latex/analysis.rs
+2021/06/03 | 1140 | systems/texlive/tlnet/archive/tiscreen.r59438.tar.xz
+2021/06/03 | 1138 | support/texlab/src/features/rename.rs
+2021/06/03 | 1136 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested.snap
+2021/06/03 | 11355 | systems/win32/miktex/tm/packages/graphics-def.tar.lzma
+2021/06/03 | 112683 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2021/06/03 | 112279 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2021/06/03 | 111 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__preamble.snap
+2021/06/03 | 1115 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_definition.snap
+2021/06/03 | 109774 | macros/generic/expkv/expkv.dtx
+2021/06/03 | 10936 | systems/texlive/tlnet/archive/graphics-def.r59435.tar.xz
+2021/06/03 | 109065 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2021/06/03 | 1084 | support/texlab/src/features/definition.rs
+2021/06/03 | 1080 | support/texlab/tests/integration/snapshots/integration__completion__bibtex__entry_type_complete.snap
+2021/06/03 | 10808 | systems/texlive/tlnet/archive/context-vim.doc.r59432.tar.xz
+2021/06/03 | 107 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__string.snap
+2021/06/03 | 107992 | systems/texlive/tlnet/archive/texlive-scripts.r59428.tar.xz
+2021/06/03 | 1078 | support/texlab/tests/integration/snapshots/integration__document_symbol__float_flat.snap
+2021/06/03 | 1077 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields.snap
+2021/06/03 | 1075241 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2021/06/03 | 1074 | support/texlab/tests/integration/snapshots/integration__document_symbol__equation_flat.snap
+2021/06/03 | 1074 | support/texlab/src/distro/texlive.rs
+2021/06/03 | 10656 | support/texlab/src/syntax/bibtex/parser.rs
+2021/06/03 | 10640 | systems/texlive/tlnet/archive/hep-paper.r59436.tar.xz
+2021/06/03 | 1051 | support/texlab/tests/integration/snapshots/integration__document_symbol__section_flat.snap
+2021/06/03 | 1050 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_options.snap
+2021/06/03 | 105058 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2021/06/03 | 10493584 | systems/win32/miktex/tm/packages/reledmac.tar.lzma
+2021/06/03 | 1049268 | systems/win32/miktex/tm/packages/keyfloat.tar.lzma
+2021/06/03 | 1048 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_options.snap
+2021/06/03 | 104723 | macros/latex/contrib/ocgx2/ocgx2.sty
+2021/06/03 | 10438 | support/texlab/src/features/semantic/bibtex.rs
+2021/06/03 | 104160 | systems/texlive/tlnet/archive/siunitx.source.r59437.tar.xz
+2021/06/03 | 1038 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__string_concatenation.snap
+2021/06/03 | 103642 | macros/latex/contrib/derivative/derivative.tex
+2021/06/03 | 1035 | support/texlab/tests/integration/snapshots/integration__workspace_symbol__filter_type_item.snap
+2021/06/03 | 103492 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2021/06/03 | 103445 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2021/06/03 | 102 | support/texlab/src/features/formatting/snapshots/texlab__features__formatting__bibtex_internal__tests__parens.snap
+2021/06/03 | 10120 | systems/texlive/tlnet/archive/context-vim.r59432.tar.xz
+2021/06/03 | 1011400 | systems/texlive/tlnet/archive/libertinust1math.r59430.tar.xz
+2021/06/03 | 100 | support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__empty.snap
+2021/06/03 | 10078 | macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty
+2021/06/03 | 10060 | systems/texlive/tlnet/archive/biblatex-cv.r59433.tar.xz
+2021/06/03 | 1005 | support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_complete_parens.snap
+2021/06/03 | 100384 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
2021/06/02 | 99 | macros/latex/base/ltpara-code.tex
-2021/06/02 | 98115 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2021/06/02 | 999 | graphics/circuit_macros/examples/Fuses.m4
+2021/06/02 | 999 | graphics/circuit_macros/doc/FusesMan.m4
+2021/06/02 | 991 | graphics/circuit_macros/examples/Byte.m4
+2021/06/02 | 988 | graphics/circuit_macros/examples/svg/VariableSVG.m4
+2021/06/02 | 98502796 | systems/win32/w32tex/pgfcontrib.tar.xz
+2021/06/02 | 9840 | graphics/circuit_macros/examples/tubedefs.m4
+2021/06/02 | 980 | graphics/circuit_macros/examples/Emarrows.m4
+2021/06/02 | 980 | graphics/circuit_macros/doc/EmarrowsMan.m4
2021/06/02 | 9809 | macros/latex/base/ltnews21.tex
-2021/06/02 | 97960 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2021/06/02 | 97305 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2021/06/02 | 972705 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2021/06/02 | 9752 | graphics/circuit_macros/examples/svg/tstSVG.htmx
+2021/06/02 | 973559 | graphics/circuit_macros/doc/Circuit_macros.pdf
+2021/06/02 | 970 | graphics/circuit_macros/examples/svg/ex15SVG.m4
2021/06/02 | 966984 | systems/texlive/tlnet/archive/newtx.doc.r59420.tar.xz
-2021/06/02 | 96161 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2021/06/02 | 960 | graphics/circuit_macros/doc/Flowdiag.m4
+2021/06/02 | 959 | graphics/circuit_macros/examples/svg/FusesSVG.m4
2021/06/02 | 9583 | macros/latex/base/format.ins
2021/06/02 | 9562 | macros/latex/base/ltcntrl.dtx
-2021/06/02 | 95455 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2021/06/02 | 94794 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2021/06/02 | 94269 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2021/06/02 | 95156 | graphics/circuit_macros/examples/mf/cct.mf
+2021/06/02 | 947 | graphics/circuit_macros/examples/svg/QuantumSVG.m4
+2021/06/02 | 947 | graphics/circuit_macros/examples/squiggle.m4
+2021/06/02 | 944 | graphics/circuit_macros/doc/VariableMan.m4
+2021/06/02 | 9425 | graphics/circuit_macros/doc/ShiftR.tex
2021/06/02 | 9400 | macros/latex/base/syntonly.dtx
+2021/06/02 | 937 | graphics/circuit_macros/examples/svg/ByteSVG.m4
2021/06/02 | 9373 | macros/latex/base/preload.dtx
+2021/06/02 | 932 | graphics/circuit_macros/examples/Variable.m4
+2021/06/02 | 925 | graphics/circuit_macros/examples/svg/CapacitorsSVG.m4
+2021/06/02 | 921 | graphics/circuit_macros/examples/svg/MoreTableSVG.m4
+2021/06/02 | 918 | graphics/circuit_macros/examples/Quantum.m4
2021/06/02 | 90917 | macros/latex/base/fntguide.tex
+2021/06/02 | 9080 | graphics/circuit_macros/examples/Makefile
2021/06/02 | 9068 | macros/latex/base/lppl-1-0.txt
+2021/06/02 | 905 | graphics/circuit_macros/examples/birds.m4
2021/06/02 | 90524 | macros/luatex/latex/lua-typo/source/lua-typo.dtx
2021/06/02 | 90126 | macros/latex/base/lttextcomp.dtx
2021/06/02 | 89927 | macros/latex/base/utf8ienc.dtx
2021/06/02 | 89718 | macros/latex/base/slides.dtx
+2021/06/02 | 893 | graphics/circuit_macros/examples/MoreTable.m4
+2021/06/02 | 893 | graphics/circuit_macros/doc/MoreTableMan.m4
+2021/06/02 | 893291 | graphics/circuit_macros/examples/examples.pdf
+2021/06/02 | 88861 | macros/latex/contrib/bjfuthesis/example/figures/admin-movie.png
+2021/06/02 | 886 | graphics/circuit_macros/examples/svg/quickSVG.m4
2021/06/02 | 8863 | macros/latex/base/ltnews17.tex
-2021/06/02 | 87665 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2021/06/02 | 8759 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
2021/06/02 | 8736 | macros/latex/base/ltthm.dtx
+2021/06/02 | 865 | graphics/circuit_macros/examples/ex18.m4
+2021/06/02 | 8650176 | systems/win32/w32tex/uptex-w32.tar.xz
+2021/06/02 | 864 | graphics/circuit_macros/examples/svg/ResistorsSVG.m4
2021/06/02 | 8631 | macros/latex/base/oldlfont.dtx
+2021/06/02 | 85915 | graphics/circuit_macros/doc/defines.tex
2021/06/02 | 85865 | macros/latex/base/ltdefns.dtx
+2021/06/02 | 85790 | graphics/circuit_macros/libgen.m4
+2021/06/02 | 855 | graphics/circuit_macros/examples/svg/ex03SVG.m4
2021/06/02 | 8531 | macros/latex/base/source2edoc.cls
2021/06/02 | 8496 | macros/latex/base/texpert.txt
2021/06/02 | 843759 | macros/latex/required/babel/base/babel.pdf
-2021/06/02 | 840 | systems/win32/miktex/tm/packages/pr.ini
-2021/06/02 | 83418 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2021/06/02 | 839015 | systems/win32/w32tex/ChangeLog
+2021/06/02 | 8372 | graphics/circuit_macros/examples/exp.m4
+2021/06/02 | 835 | graphics/circuit_macros/doc/Opto.m4
+2021/06/02 | 831 | graphics/circuit_macros/doc/GroundsMan.m4
+2021/06/02 | 828 | graphics/circuit_macros/examples/Grounds.m4
2021/06/02 | 8259 | macros/latex/base/ltnews.tex
2021/06/02 | 818625 | macros/latex/base/ltshipout-code.pdf
-2021/06/02 | 815665 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2021/06/02 | 81013 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2021/06/02 | 812 | graphics/circuit_macros/doc/ResistorsMan.m4
+2021/06/02 | 810 | graphics/circuit_macros/examples/svg/GroundsSVG.m4
+2021/06/02 | 807 | graphics/circuit_macros/examples/Resistors.m4
2021/06/02 | 80670 | macros/latex/base/ltfssbas.dtx
+2021/06/02 | 802 | macros/latex/contrib/bjfuthesis/documentation/contents/doc-abstract.tex
+2021/06/02 | 801 | graphics/circuit_macros/doc/Potentiometers.m4
+2021/06/02 | 8006 | graphics/circuit_macros/examples/svg/controlSVG.m4
2021/06/02 | 795324 | macros/latex/base/ltfilehook-code.pdf
-2021/06/02 | 78755 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2021/06/02 | 793 | graphics/circuit_macros/examples/svg/CountingSVG.m4
2021/06/02 | 785758 | macros/latex/required/babel/base/locale.zip
+2021/06/02 | 783 | graphics/circuit_macros/doc/Oblique.m4
2021/06/02 | 78305 | macros/latex/base/ltshipout.dtx
-2021/06/02 | 77920 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2021/06/02 | 7716 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2021/06/02 | 76856 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2021/06/02 | 777 | graphics/circuit_macros/examples/Arrester.m4
+2021/06/02 | 774 | graphics/circuit_macros/examples/quick.m4
+2021/06/02 | 774 | graphics/circuit_macros/doc/quick.m4
+2021/06/02 | 7721 | graphics/circuit_macros/examples/shapes.m4
+2021/06/02 | 771 | graphics/circuit_macros/examples/Attention.m4
2021/06/02 | 76725 | macros/latex/base/ltfssini.dtx
-2021/06/02 | 75583 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2021/06/02 | 7670 | graphics/circuit_macros/examples/Chuck.m4
+2021/06/02 | 764 | graphics/circuit_macros/examples/mf/cct.tfm
+2021/06/02 | 762316 | macros/latex/contrib/bjfuthesis/example/figures/anonymous-index.png
+2021/06/02 | 75 | macros/latex/contrib/bjfuthesis/documentation/contents/doc-acknowledge.tex
+2021/06/02 | 7546 | graphics/circuit_macros/examples/svg/RectifiersSVG.m4
+2021/06/02 | 7533 | graphics/circuit_macros/doc/Logic.tex
2021/06/02 | 7524 | macros/latex/base/ltxguide.cls
-2021/06/02 | 750268 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2021/06/02 | 74245 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2021/06/02 | 750 | graphics/circuit_macros/examples/Connectors.m4
+2021/06/02 | 7507 | graphics/circuit_macros/examples/svg/shapesSVG.m4
+2021/06/02 | 7503 | graphics/circuit_macros/doc/Headers.tex
+2021/06/02 | 748 | graphics/circuit_macros/examples/svg/Np.m4
+2021/06/02 | 7485 | graphics/circuit_macros/examples/svg/cscSVG.m4
+2021/06/02 | 745 | graphics/circuit_macros/examples/svg/DecoderSVG.m4
+2021/06/02 | 7434 | graphics/circuit_macros/examples/csc.m4
+2021/06/02 | 741 | graphics/circuit_macros/examples/Incleps.m4
+2021/06/02 | 7418 | graphics/circuit_macros/examples/svg/CsourceSVG.m4
+2021/06/02 | 740 | graphics/circuit_macros/examples/SampleFlow.m4
2021/06/02 | 7392 | macros/latex/required/babel/base/babel.ins
2021/06/02 | 738 | macros/latex/contrib/easybook/easybook.ins
2021/06/02 | 7325 | macros/latex/base/ltnews20.tex
-2021/06/02 | 73195 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2021/06/02 | 73037 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2021/06/02 | 7316 | graphics/circuit_macros/doc/Relay.tex
2021/06/02 | 72479 | macros/latex/base/ltfsstrc.dtx
-2021/06/02 | 72239 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
2021/06/02 | 7221 | macros/latex/base/exscale.dtx
+2021/06/02 | 7203 | graphics/circuit_macros/examples/svg/lcctSVG.m4
2021/06/02 | 7200 | macros/latex/base/sample2e.tex
-2021/06/02 | 71818 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2021/06/02 | 716372 | macros/latex/contrib/bjfuthesis/example/figures/anonymous-category.png
+2021/06/02 | 715 | graphics/circuit_macros/examples/svg/ConnectorsSVG.m4
+2021/06/02 | 715 | graphics/circuit_macros/examples/psfrag/examplespsfrag.tex
+2021/06/02 | 7127 | graphics/circuit_macros/examples/lcct.m4
2021/06/02 | 7109 | macros/latex/base/alltt.dtx
+2021/06/02 | 709 | graphics/circuit_macros/examples/Inclpdf.m4
2021/06/02 | 709939 | macros/latex/required/babel/base/babel.dtx
2021/06/02 | 70877 | fonts/libertinust1math/tex/libertinust1math.sty
-2021/06/02 | 70483 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2021/06/02 | 69934 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2021/06/02 | 706 | graphics/circuit_macros/psfrag.m4
+2021/06/02 | 7065 | graphics/circuit_macros/examples/control.m4
+2021/06/02 | 703 | graphics/circuit_macros/examples/mpost/README-mpost
+2021/06/02 | 7006 | graphics/circuit_macros/examples/Rectifiers.m4
2021/06/02 | 693019 | macros/latex/base/ltcmdhooks-code.pdf
+2021/06/02 | 6921624 | systems/win32/w32tex/win64/pdftex-w64.tar.xz
2021/06/02 | 69050 | macros/latex/base/clsguide.tex
2021/06/02 | 69007 | macros/latex/base/ltpictur.dtx
2021/06/02 | 6871 | macros/latex/base/ltnews13.tex
+2021/06/02 | 685 | graphics/circuit_macros/examples/mpost/mptest
+2021/06/02 | 6854 | graphics/circuit_macros/examples/svg/DiniSVG.m4
+2021/06/02 | 6854 | graphics/circuit_macros/examples/Dini.m4
2021/06/02 | 68435 | macros/latex/base/usrguide.tex
2021/06/02 | 683789 | macros/latex/base/lthooks-doc.pdf
-2021/06/02 | 681259 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2021/06/02 | 6812279 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2021/06/02 | 68119 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2021/06/02 | 682 | graphics/circuit_macros/examples/svg/ujtSVG.m4
+2021/06/02 | 6807 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2021/06/02 | 6800384 | systems/win32/w32tex/ptex-ng-w32.tar.xz
2021/06/02 | 676501 | macros/latex/base/doc.pdf
2021/06/02 | 6760 | macros/latex/base/slides.ins
-2021/06/02 | 67606 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2021/06/02 | 67477 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2021/06/02 | 67437 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2021/06/02 | 673 | graphics/circuit_macros/examples/ex03.m4
2021/06/02 | 6714 | macros/latex/base/latexsym.dtx
-2021/06/02 | 665180 | systems/texlive/tlnet/archive/latex.source.r59424.tar.xz
2021/06/02 | 664444 | macros/latex/base/ltpara-code.pdf
-2021/06/02 | 65547 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2021/06/02 | 65305 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2021/06/02 | 660 | graphics/circuit_macros/examples/ujt.m4
+2021/06/02 | 660 | graphics/circuit_macros/doc/ujtMan.m4
+2021/06/02 | 656 | graphics/circuit_macros/examples/Zcos.m4
+2021/06/02 | 655 | graphics/circuit_macros/examples/Decoder.m4
+2021/06/02 | 6550 | graphics/circuit_macros/doc/Conn.tex
+2021/06/02 | 654 | graphics/circuit_macros/examples/diamond.m4
+2021/06/02 | 6501 | graphics/circuit_macros/examples/svg/EscherSVG.m4
+2021/06/02 | 6498 | graphics/circuit_macros/examples/Escher.m4
2021/06/02 | 64748 | macros/latex/base/ltluatex.dtx
-2021/06/02 | 64385 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2021/06/02 | 645 | graphics/circuit_macros/examples/Floor.m4
+2021/06/02 | 64462 | macros/latex/contrib/bjfuthesis/example/contents/mainbody.tex
2021/06/02 | 64171 | macros/luatex/latex/lua-typo/doc/lua-typo-fr.pdf
-2021/06/02 | 64030 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2021/06/02 | 63748 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2021/06/02 | 6413 | graphics/circuit_macros/examples/svg/CanLogicSVG.m4
+2021/06/02 | 63 | graphics/circuit_macros/examples/svg/local_init.m4
+2021/06/02 | 6371 | graphics/circuit_macros/examples/CanLogic.m4
2021/06/02 | 6362 | macros/latex/base/newlfont.dtx
2021/06/02 | 63283 | macros/latex/base/letter.dtx
2021/06/02 | 63255 | macros/latex/base/ltfilehook.dtx
-2021/06/02 | 629960 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
2021/06/02 | 6273 | macros/latex/base/ltnews14.tex
-2021/06/02 | 62718 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2021/06/02 | 62377 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2021/06/02 | 621413 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2021/06/02 | 6243 | graphics/circuit_macros/examples/ASME_Y14-5.m4
+2021/06/02 | 6216 | graphics/circuit_macros/examples/svg/LgateSVG.m4
2021/06/02 | 6160 | macros/latex/base/ltpar.dtx
+2021/06/02 | 6160 | graphics/circuit_macros/examples/Plate.m4
+2021/06/02 | 6153 | graphics/circuit_macros/examples/svg/PlateSVG.m4
+2021/06/02 | 614 | graphics/circuit_macros/doc/BigResistor.m4
2021/06/02 | 61425 | macros/latex/base/ltfssdcl.dtx
-2021/06/02 | 60652 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2021/06/02 | 609 | graphics/circuit_macros/examples/svg/diamondSVG.m4
+2021/06/02 | 6067 | graphics/circuit_macros/doc/Contacts.tex
2021/06/02 | 60326 | macros/latex/base/fontdef.dtx
2021/06/02 | 6016 | systems/texlive/tlnet/archive/xintsession.r59426.tar.xz
-2021/06/02 | 59799 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2021/06/02 | 6003 | graphics/circuit_macros/examples/CSlight.m4
2021/06/02 | 5970122 | fonts/libertinust1math.zip
-2021/06/02 | 596997 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2021/06/02 | 5969 | graphics/circuit_macros/examples/xfig/xfiglib.m4
+2021/06/02 | 591 | graphics/circuit_macros/examples/test.m4
2021/06/02 | 5917 | macros/latex/base/latexrelease.ins
-2021/06/02 | 59106 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2021/06/02 | 5890 | graphics/circuit_macros/examples/Csource.m4
2021/06/02 | 58703 | macros/latex/base/ltmiscen.dtx
+2021/06/02 | 586912 | macros/latex/contrib/bjfuthesis/example/figures/ripplenet-framework.png
2021/06/02 | 5864 | macros/latex/base/ltidxglo.dtx
-2021/06/02 | 586347 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
2021/06/02 | 58556 | macros/latex/base/ltfssaxes.dtx
+2021/06/02 | 5847 | graphics/circuit_macros/examples/svg/GeometrySVG.m4
2021/06/02 | 5839 | macros/latex/base/ltnews15.tex
2021/06/02 | 580624 | systems/texlive/tlnet/archive/l3kernel.source.r59425.tar.xz
-2021/06/02 | 579539 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2021/06/02 | 579430 | systems/win32/miktex/tm/packages/files.csv.lzma
2021/06/02 | 5776 | macros/latex/base/ltnews16.tex
-2021/06/02 | 57580 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
2021/06/02 | 5714 | macros/latex/base/inputenc.ins
-2021/06/02 | 57128 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin-x64.tar.lzma
+2021/06/02 | 56 | graphics/circuit_macros/doc/opampex.m4
2021/06/02 | 5695 | macros/latex/base/ltnews08.tex
-2021/06/02 | 56732 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2021/06/02 | 56654 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2021/06/02 | 566494 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
2021/06/02 | 5659 | macros/latex/base/ltnews10.tex
2021/06/02 | 564572 | macros/latex/base/ltshipout-doc.pdf
-2021/06/02 | 56413 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2021/06/02 | 56327 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2021/06/02 | 56298 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2021/06/02 | 56193 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
2021/06/02 | 5608 | macros/latex/base/ltnews05.tex
2021/06/02 | 5604532 | systems/texlive/tlnet/archive/newtx.r59420.tar.xz
2021/06/02 | 560166 | macros/latex/base/ltpara-doc.pdf
-2021/06/02 | 55513 | systems/win32/miktex/tm/packages/next/miktex-xml2pmx-bin.tar.lzma
+2021/06/02 | 5545 | graphics/circuit_macros/doc/Bip.tex
2021/06/02 | 5529 | macros/latex/base/ltnews11.tex
+2021/06/02 | 551 | graphics/circuit_macros/examples/Counting.m4
2021/06/02 | 5514 | macros/latex/base/graphpap.dtx
2021/06/02 | 55087 | macros/latex/base/ltfiles.dtx
2021/06/02 | 5506 | macros/latex/base/ltnews27.tex
2021/06/02 | 5506 | macros/latex/base/ltnews04.tex
+2021/06/02 | 5502 | graphics/circuit_macros/doc/Emarrows.tex
2021/06/02 | 550002 | macros/latex/base/classes.pdf
+2021/06/02 | 5486 | graphics/circuit_macros/examples/graysurf.m4
2021/06/02 | 5473 | macros/latex/base/ltnews25.tex
+2021/06/02 | 5469 | graphics/circuit_macros/examples/svg/graysurfSVG.m4
2021/06/02 | 54680 | macros/latex/base/ltfloat.dtx
2021/06/02 | 546162 | macros/latex/base/ltnews32.pdf
+2021/06/02 | 545 | graphics/circuit_macros/examples/svg/RotboxSVG.m4
2021/06/02 | 545883 | macros/latex/base/ltfilehook-doc.pdf
+2021/06/02 | 545274 | macros/latex/contrib/bjfuthesis/example/figures/anonymous-details.png
2021/06/02 | 5425 | macros/latex/base/ltnews07.tex
+2021/06/02 | 5412 | graphics/circuit_macros/examples/svg/roseSVG.m4
2021/06/02 | 5400 | macros/latex/base/ltnews12.tex
2021/06/02 | 5390 | macros/latex/base/ltnews06.tex
-2021/06/02 | 532033 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2021/06/02 | 538 | graphics/circuit_macros/examples/svg/FontsSVG.m4
+2021/06/02 | 538 | graphics/circuit_macros/examples/svg/AmpTableSVG.m4
+2021/06/02 | 5365 | graphics/circuit_macros/examples/svg/fetSVG.m4
+2021/06/02 | 535 | graphics/circuit_macros/doc/Tline.m4
+2021/06/02 | 532 | graphics/circuit_macros/examples/svg/NLGSVG.m4
2021/06/02 | 53199 | macros/latex/base/ltplain.dtx
+2021/06/02 | 5315 | graphics/circuit_macros/doc/fetMan.m4
+2021/06/02 | 5311 | graphics/circuit_macros/examples/fet.m4
2021/06/02 | 5293 | macros/latex/base/ltnews09.tex
+2021/06/02 | 52885056 | systems/win32/w32tex/latex-dev.tar.xz
2021/06/02 | 5283 | macros/latex/base/ltnews02.tex
2021/06/02 | 52813 | macros/latex/base/encguide.tex
2021/06/02 | 5279900 | systems/texlive/tlnet/archive/tools.doc.r59424.tar.xz
2021/06/02 | 5276053 | macros/latex/base/source2e.pdf
2021/06/02 | 5273 | macros/latex/base/cmextra.ins
-2021/06/02 | 52689 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
2021/06/02 | 526312 | macros/latex/base/ltnews31.pdf
2021/06/02 | 52578 | macros/latex/base/lb2.err
2021/06/02 | 5246 | macros/latex/base/ltnews01.tex
-2021/06/02 | 52402 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
2021/06/02 | 522411 | macros/latex/base/ltnews33.pdf
2021/06/02 | 52212 | systems/texlive/tlnet/archive/graphics.source.r59424.tar.xz
2021/06/02 | 5200 | macros/latex/base/ltnews03.tex
-2021/06/02 | 51743 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2021/06/02 | 51550 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2021/06/02 | 51308 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2021/06/02 | 518 | graphics/circuit_macros/examples/Rotbox.m4
+2021/06/02 | 5171 | graphics/circuit_macros/examples/svg/FlowSVG.m4
+2021/06/02 | 515568 | macros/latex/contrib/bjfuthesis/example/figures/anonymous-search.png
+2021/06/02 | 5137 | graphics/circuit_macros/doc/NPDT.tex
2021/06/02 | 511855 | macros/latex/base/ltnews30.pdf
-2021/06/02 | 51119 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2021/06/02 | 511067 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2021/06/02 | 51024 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2021/06/02 | 5106 | graphics/circuit_macros/examples/svg/Makefile
+2021/06/02 | 50 | graphics/circuit_macros/doc/bitr.m4
2021/06/02 | 5041 | macros/latex/base/latexsym.ins
+2021/06/02 | 503309 | macros/latex/contrib/bjfuthesis/example/figures/general-details.png
2021/06/02 | 503186 | macros/latex/base/docstrip.pdf
-2021/06/02 | 50142 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2021/06/02 | 50059200 | systems/win32/w32tex/ltxpkgs.tar.xz
+2021/06/02 | 499 | graphics/circuit_macros/examples/NLG.m4
+2021/06/02 | 499 | graphics/circuit_macros/doc/NLGMan.m4
+2021/06/02 | 4964 | graphics/circuit_macros/doc/Multiplexer.tex
+2021/06/02 | 4957 | macros/latex/contrib/bjfuthesis/bjfuthesis.cls
2021/06/02 | 4950 | macros/latex/base/lthyphen.dtx
+2021/06/02 | 49503092 | systems/win32/w32tex/xetex-w32.tar.xz
+2021/06/02 | 494 | graphics/circuit_macros/examples/AmpTable.m4
+2021/06/02 | 494 | graphics/circuit_macros/doc/AmpTableMan.m4
2021/06/02 | 493957 | macros/latex/base/fntguide.pdf
-2021/06/02 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2021/06/02 | 489 | graphics/circuit_macros/examples/Koch.m4
2021/06/02 | 48746 | macros/latex/base/ltpara.dtx
-2021/06/02 | 483044 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2021/06/02 | 48262 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2021/06/02 | 483 | graphics/circuit_macros/doc/eboxdims.m4
+2021/06/02 | 482 | graphics/circuit_macros/examples/clock.m4
+2021/06/02 | 4828 | graphics/circuit_macros/doc/Makefile
+2021/06/02 | 4817 | graphics/circuit_macros/doc/Demultiplexer.tex
+2021/06/02 | 4808696 | macros/latex/contrib/bjfuthesis/example/thesis.pdf
2021/06/02 | 479331 | macros/latex/base/ltcmdhooks-doc.pdf
2021/06/02 | 47901 | macros/latex/base/lttab.dtx
-2021/06/02 | 476717 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2021/06/02 | 4789 | graphics/circuit_macros/doc/Fuses.tex
+2021/06/02 | 47795 | graphics/circuit_macros/liblog.m4
2021/06/02 | 4762 | macros/latex/base/ltlength.dtx
+2021/06/02 | 4751 | graphics/circuit_macros/examples/Shaky.m4
+2021/06/02 | 4751 | graphics/circuit_macros/examples/Flow.m4
+2021/06/02 | 4683 | graphics/circuit_macros/examples/psfrag/Makefile
2021/06/02 | 468043 | macros/latex/base/latexchanges.pdf
-2021/06/02 | 46756 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2021/06/02 | 461993 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2021/06/02 | 45947 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2021/06/02 | 45911 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2021/06/02 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2021/06/02 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2021/06/02 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2021/06/02 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
-2021/06/02 | 455176 | systems/texlive/tlnet/archive/newpx.doc.r59419.tar.xz
+2021/06/02 | 4666 | graphics/circuit_macros/doc/Nport.tex
+2021/06/02 | 464 | graphics/circuit_macros/examples/tsttikz.tex
+2021/06/02 | 4638 | graphics/circuit_macros/examples/Ball.m4
+2021/06/02 | 462 | graphics/circuit_macros/Copying
+2021/06/02 | 4615 | graphics/circuit_macros/examples/mf/font.m4
+2021/06/02 | 460 | graphics/circuit_macros/examples/debug1.tex
+2021/06/02 | 4569 | graphics/circuit_macros/examples/rose.m4
2021/06/02 | 454808 | macros/latex/base/ltnews29.pdf
-2021/06/02 | 45339 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2021/06/02 | 45323 | graphics/circuit_macros/examples/Incl.eps.gz
2021/06/02 | 45245 | macros/latex/base/ltspace.dtx
+2021/06/02 | 449 | graphics/circuit_macros/doc/woodchips.m4
2021/06/02 | 44864 | systems/texlive/tlnet/archive/l3packages.source.r59425.tar.xz
2021/06/02 | 44724 | macros/latex/base/ltfinal.dtx
-2021/06/02 | 44639 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2021/06/02 | 4459 | graphics/circuit_macros/examples/Lyap.m4
+2021/06/02 | 445624 | macros/latex/contrib/bjfuthesis/example/figures/admin-knowledge-graph.png
2021/06/02 | 44409 | macros/latex/base/latexrelease.dtx
+2021/06/02 | 442 | graphics/circuit_macros/examples/Wheat.m4
2021/06/02 | 4390 | macros/latex/base/ec.ins
2021/06/02 | 43867 | macros/latex/base/ltboxes.dtx
2021/06/02 | 43636 | macros/latex/base/cmfonts.fdd
2021/06/02 | 4359 | fonts/libertinust1math/README
-2021/06/02 | 43420 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2021/06/02 | 4340 | graphics/circuit_macros/examples/svg/AlogixSVG.m4
2021/06/02 | 4324 | macros/latex/base/cmfonts.ins
+2021/06/02 | 4313 | graphics/circuit_macros/examples/ex09.m4
+2021/06/02 | 4312 | graphics/circuit_macros/doc/Circuit_macros.bib
+2021/06/02 | 4309 | graphics/circuit_macros/examples/svg/SwitchesSVG.m4
2021/06/02 | 430996 | macros/latex/base/usrguide.pdf
-2021/06/02 | 43041 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
2021/06/02 | 4303 | macros/latex/base/ltalloc.dtx
-2021/06/02 | 42978 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2021/06/02 | 42840 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2021/06/02 | 4289 | graphics/circuit_macros/examples/svg/BtreeSVG.m4
+2021/06/02 | 4277 | graphics/circuit_macros/examples/svg/sldtestsSVG.m4
2021/06/02 | 42708 | macros/latex/base/changes.old.txt
-2021/06/02 | 42707 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
2021/06/02 | 4254 | macros/latex/base/newdc.ins
+2021/06/02 | 4247 | graphics/circuit_macros/examples/mpost/Makefile
2021/06/02 | 42464 | systems/texlive/tlnet/archive/tools.r59424.tar.xz
-2021/06/02 | 42367 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2021/06/02 | 42328 | macros/latex/contrib/bjfuthesis/example/figures/recommendation-procedure.pdf
2021/06/02 | 4221 | macros/latex/base/docstrip.ins
+2021/06/02 | 421 | graphics/circuit_macros/examples/GrayCode.m4
+2021/06/02 | 421 | graphics/circuit_macros/doc/Sinus.m4
2021/06/02 | 4219 | macros/latex/base/latex209.ins
+2021/06/02 | 4205 | graphics/circuit_macros/examples/Alogix.m4
+2021/06/02 | 419 | graphics/circuit_macros/examples/svg/SixpoleSVG.m4
+2021/06/02 | 419 | graphics/circuit_macros/examples/Sixpole.m4
+2021/06/02 | 418 | graphics/circuit_macros/examples/mpost/tstmpost.tex
2021/06/02 | 4187280 | systems/texlive/tlnet/archive/musixtex-fonts.r59418.tar.xz
+2021/06/02 | 4184 | fonts/newtx/tfm/ntxbmi1.tfm
2021/06/02 | 41831 | macros/latex/base/doc-v3beta.sty
+2021/06/02 | 4180 | fonts/newtx/tfm/ntxmi0.tfm
+2021/06/02 | 417 | graphics/circuit_macros/examples/svg/SQUIDSVG.m4
+2021/06/02 | 4178 | graphics/circuit_macros/doc/Tgate.tex
+2021/06/02 | 4176 | fonts/newtx/tfm/ntxmi1.tfm
+2021/06/02 | 4176 | fonts/newtx/tfm/ntxbmi0.tfm
+2021/06/02 | 4172 | fonts/newtx/tfm/ntxmi.tfm
2021/06/02 | 4170 | macros/latex/base/ltnews19.tex
-2021/06/02 | 41084 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2021/06/02 | 416 | graphics/circuit_macros/examples/testpdf.tex
+2021/06/02 | 4168 | fonts/newtx/tfm/ntxbmi.tfm
+2021/06/02 | 41248 | macros/latex/contrib/bjfuthesis/example/figures/jwt.pdf
+2021/06/02 | 4119 | graphics/circuit_macros/examples/svg/ex09SVG.m4
2021/06/02 | 4106337 | fonts/newpx.zip
+2021/06/02 | 409 | graphics/circuit_macros/examples/tst.tex
+2021/06/02 | 409 | graphics/circuit_macros/examples/mpost/examplesmpost.tex
2021/06/02 | 40970 | macros/latex/base/ltcmdhooks.dtx
2021/06/02 | 4087 | macros/latex/base/classes.ins
2021/06/02 | 4079 | macros/latex/base/lablst.tex
+2021/06/02 | 4079 | graphics/circuit_macros/INSTALL
2021/06/02 | 40795 | macros/latex/base/latexchanges.tex
+2021/06/02 | 404 | graphics/circuit_macros/doc/Series.m4
+2021/06/02 | 4030 | macros/latex/contrib/bjfuthesis/documentation/contents/doc-mainbody.tex
2021/06/02 | 402779 | macros/latex/base/clsguide.pdf
-2021/06/02 | 39839 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2021/06/02 | 397440 | systems/texlive/tlnet/archive/texlive-scripts.doc.r59417.tar.xz
+2021/06/02 | 4023 | graphics/circuit_macros/examples/Euro.m4
+2021/06/02 | 4015 | graphics/circuit_macros/doc/SwitchesMan.m4
+2021/06/02 | 4003 | graphics/circuit_macros/examples/svg/InclepsSVG.m4
+2021/06/02 | 3973 | graphics/circuit_macros/examples/Switches.m4
2021/06/02 | 3960 | macros/latex/base/olddc.ins
+2021/06/02 | 3954 | graphics/circuit_macros/examples/PushPull.m4
+2021/06/02 | 39438400 | systems/win32/w32tex/latex.tar.xz
2021/06/02 | 39431 | macros/latex/base/ltmath.dtx
-2021/06/02 | 392975 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2021/06/02 | 39034 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2021/06/02 | 39092 | fonts/newtx/README
+2021/06/02 | 387 | graphics/circuit_macros/doc/lrarrows.m4
2021/06/02 | 387987 | macros/latex/base/ltnews28.pdf
2021/06/02 | 38735 | macros/latex/base/latex209.dtx
2021/06/02 | 386513 | language/japanese/pxchfon.zip
-2021/06/02 | 38111 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2021/06/02 | 3825 | graphics/circuit_macros/examples/svg/recycleSVG.m4
+2021/06/02 | 3825 | graphics/circuit_macros/examples/recycle.m4
+2021/06/02 | 380 | graphics/circuit_macros/examples/SQUID.m4
2021/06/02 | 38031 | macros/latex/base/ltnews18.pdf
2021/06/02 | 379735 | macros/latex/base/ltnews26.pdf
-2021/06/02 | 37860 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2021/06/02 | 3785 | graphics/circuit_macros/examples/Mixer.m4
2021/06/02 | 3781 | macros/latex/base/tulm.ins
+2021/06/02 | 3778 | graphics/circuit_macros/examples/svg/PushPullSVG.m4
+2021/06/02 | 3776 | macros/latex/contrib/bjfuthesis/example/contents/abstract.tex
2021/06/02 | 376392 | macros/latex/base/changes.txt
+2021/06/02 | 3756 | graphics/circuit_macros/examples/svg/randomSVG.m4
2021/06/02 | 374051 | macros/latex/base/slides.pdf
-2021/06/02 | 37315 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
2021/06/02 | 3730 | macros/latex/base/ltlogos.dtx
-2021/06/02 | 37245 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2021/06/02 | 36641 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2021/06/02 | 3727 | graphics/circuit_macros/examples/random.m4
+2021/06/02 | 371 | graphics/circuit_macros/examples/psfrag/tstpsfrag.tex
+2021/06/02 | 370 | graphics/circuit_macros/examples/snake.m4
+2021/06/02 | 369 | graphics/circuit_macros/doc/sampleIC.m4
+2021/06/02 | 365 | graphics/circuit_macros/examples/rotellipse.m4
+2021/06/02 | 3646 | graphics/circuit_macros/examples/svg/ContactSVG.m4
+2021/06/02 | 3631 | graphics/circuit_macros/examples/svg/wormSVG.m4
2021/06/02 | 36157 | macros/latex/base/ltlists.dtx
2021/06/02 | 361477 | macros/latex/base/utf8ienc.pdf
-2021/06/02 | 35354 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2021/06/02 | 3567 | graphics/circuit_macros/examples/svg/ButtonsSVG.m4
+2021/06/02 | 353 | graphics/circuit_macros/examples/windows.m4
+2021/06/02 | 353 | graphics/circuit_macros/examples/svg/windows.m4
2021/06/02 | 35302 | macros/latex/base/ltdirchk.dtx
2021/06/02 | 3526 | macros/latex/required/babel/base/bbidxglo.dtx
-2021/06/02 | 35063 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2021/06/02 | 3522 | graphics/circuit_macros/examples/svg/ex12SVG.m4
+2021/06/02 | 35149 | macros/latex/contrib/bjfuthesis/LICENSE
+2021/06/02 | 3509 | graphics/circuit_macros/examples/Buttons.m4
2021/06/02 | 3500 | macros/latex/base/README.md
-2021/06/02 | 347731 | macros/latex/contrib/easybook.zip
-2021/06/02 | 346551 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2021/06/02 | 34651 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2021/06/02 | 3489 | graphics/circuit_macros/examples/svg/MixerSVG.m4
+2021/06/02 | 3473 | graphics/circuit_macros/examples/svg/MCSVG.m4
2021/06/02 | 34386868 | install/macros/latex/latex-base.tds.zip
2021/06/02 | 3434 | macros/latex/base/makeindx.ins
2021/06/02 | 3401 | macros/latex/base/proc.ins
2021/06/02 | 33911 | macros/latex/base/ltnews33.tex
+2021/06/02 | 3390 | graphics/circuit_macros/examples/svg/ex05SVG.m4
2021/06/02 | 33897022 | macros/latex/base.zip
+2021/06/02 | 3380 | fonts/newtx/tfm/ntxbmi15.tfm
+2021/06/02 | 337 | graphics/circuit_macros/examples/xfig/Makefile
+2021/06/02 | 3376 | fonts/newtx/tfm/ntxbmi5.tfm
2021/06/02 | 3372 | macros/latex/base/letter.ins
2021/06/02 | 3367 | macros/latex/base/ltoutenc.ins
-2021/06/02 | 33651 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2021/06/02 | 33585 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2021/06/02 | 3346 | graphics/circuit_macros/examples/Windings.m4
+2021/06/02 | 3346 | graphics/circuit_macros/doc/WindingsMan.m4
+2021/06/02 | 3340 | fonts/newtx/tfm/ntxmi17.tfm
+2021/06/02 | 3340 | fonts/newtx/tfm/ntxbmi17.tfm
+2021/06/02 | 3339 | graphics/circuit_macros/examples/ex12.m4
2021/06/02 | 3338 | macros/latex/base/exscale.ins
+2021/06/02 | 3336 | fonts/newtx/tfm/ntxmi07.tfm
+2021/06/02 | 3336 | fonts/newtx/tfm/ntxbmi7.tfm
+2021/06/02 | 3332 | fonts/newtx/tfm/ntxmi7.tfm
+2021/06/02 | 3332 | fonts/newtx/tfm/ntxbmi07.tfm
+2021/06/02 | 3326 | graphics/circuit_macros/examples/Contact.m4
+2021/06/02 | 3326 | graphics/circuit_macros/doc/ContactMan.m4
2021/06/02 | 33256 | macros/latex/base/ltnews32.tex
-2021/06/02 | 330960 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2021/06/02 | 3321 | graphics/circuit_macros/examples/thyristor.m4
+2021/06/02 | 3321 | graphics/circuit_macros/doc/thyristorMan.m4
+2021/06/02 | 3320 | fonts/newtx/tfm/ntxmi15.tfm
+2021/06/02 | 3312 | fonts/newtx/tfm/ntxmi05.tfm
+2021/06/02 | 3310 | graphics/circuit_macros/examples/svg/thyristorSVG.m4
+2021/06/02 | 3308 | fonts/newtx/tfm/ntxmi5.tfm
+2021/06/02 | 32 | graphics/circuit_macros/examples/Incl.eps.bb
+2021/06/02 | 329 | graphics/circuit_macros/doc/FF.m4
+2021/06/02 | 3290 | graphics/circuit_macros/examples/svg/sfgSVG.m4
2021/06/02 | 328728 | macros/latex/base/letter.pdf
2021/06/02 | 3282 | macros/latex/base/bugs.txt
2021/06/02 | 32648 | macros/latex/base/ltsect.dtx
-2021/06/02 | 32644 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2021/06/02 | 32548 | macros/latex/contrib/bjfuthesis/example/figures/use-case.pdf
2021/06/02 | 325299 | macros/latex/base/usrguide3.pdf
2021/06/02 | 325289 | macros/latex/base/ltluatex.pdf
-2021/06/02 | 321604 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2021/06/02 | 3183 | graphics/circuit_macros/doc/NLG.tex
2021/06/02 | 318399 | macros/latex/base/ltnews22.pdf
2021/06/02 | 3181 | macros/latex/base/unpack.ins
2021/06/02 | 318168 | macros/latex/base/inputenc.pdf
-2021/06/02 | 31609 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2021/06/02 | 31548 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2021/06/02 | 315453 | macros/latex/contrib/easybook/easybook.pdf
-2021/06/02 | 31327 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2021/06/02 | 312620 | systems/texlive/tlnet/archive/easybook.doc.r59422.tar.xz
-2021/06/02 | 312520 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2021/06/02 | 31198 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2021/06/02 | 30806 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2021/06/02 | 317 | graphics/circuit_macros/examples/psfrag/README-psfrag.txt
+2021/06/02 | 3175 | graphics/circuit_macros/examples/Blogix.m4
+2021/06/02 | 3091 | graphics/circuit_macros/examples/svg/TtreeSVG.m4
2021/06/02 | 30456 | macros/latex/base/ltnews31.tex
-2021/06/02 | 30344 | systems/texlive/tlnet/archive/easybook.source.r59422.tar.xz
-2021/06/02 | 30029 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2021/06/02 | 3000 | graphics/circuit_macros/doc/Circuit_macros.tex
2021/06/02 | 2997 | macros/luatex/latex/lua-typo/doc/lua-typo-demo.tex
+2021/06/02 | 2994 | graphics/circuit_macros/examples/svg/WindingsSVG.m4
2021/06/02 | 29923 | macros/latex/base/usrguide3.tex
-2021/06/02 | 29842 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2021/06/02 | 2989 | graphics/circuit_macros/examples/svg/AutoencoderSVG.m4
+2021/06/02 | 2986 | graphics/circuit_macros/examples/MC.m4
+2021/06/02 | 29772 | graphics/circuit_macros/examples/Incl.pdf
2021/06/02 | 297070 | macros/latex/base/ltnews20.pdf
-2021/06/02 | 295419 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
2021/06/02 | 292317 | macros/latex/base/cmfonts.pdf
2021/06/02 | 29191 | macros/latex/base/ltfntcmd.dtx
2021/06/02 | 29183 | macros/context/contrib/context-vim.zip
-2021/06/02 | 29078 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2021/06/02 | 2912 | graphics/circuit_macros/doc/Workflow.m4
2021/06/02 | 290495 | macros/latex/base/latexrelease.pdf
2021/06/02 | 2896 | macros/latex/base/syntonly.ins
2021/06/02 | 2893 | macros/latex/base/nfssfont.ins
@@ -306,232 +1153,424 @@
2021/06/02 | 2888 | macros/latex/base/ifthen.ins
2021/06/02 | 287672 | macros/latex/base/fix-cm.pdf
2021/06/02 | 287125 | macros/latex/base/ltnews23.pdf
-2021/06/02 | 283983 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2021/06/02 | 28286 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2021/06/02 | 281963 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2021/06/02 | 2834 | graphics/circuit_macros/postscript.m4
+2021/06/02 | 2817 | graphics/circuit_macros/examples/README-examples
2021/06/02 | 2814628 | install/macros/latex/required/babel-base.tds.zip
-2021/06/02 | 28139 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2021/06/02 | 2793420 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2021/06/02 | 27717 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2021/06/02 | 27577052 | systems/texlive/tlnet/archive/latex.doc.r59424.tar.xz
+2021/06/02 | 2799 | graphics/circuit_macros/examples/worm.m4
+2021/06/02 | 2792 | graphics/circuit_macros/examples/OpAmpFilter.m4
+2021/06/02 | 2761 | graphics/circuit_macros/examples/sfg.m4
+2021/06/02 | 2744 | fonts/newtx/vf/ntxbmi.vf
+2021/06/02 | 2740 | fonts/newtx/vf/ntxbmi1.vf
+2021/06/02 | 2740 | fonts/newtx/vf/ntxbmi0.vf
2021/06/02 | 2738 | macros/latex/base/tex2.txt
-2021/06/02 | 27382 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
2021/06/02 | 2733 | macros/latex/base/ltpageno.dtx
-2021/06/02 | 27283 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2021/06/02 | 27185 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2021/06/02 | 2720 | graphics/circuit_macros/examples/svg/AudioSVG.m4
2021/06/02 | 27122 | macros/latex/base/ltxcheck.tex
+2021/06/02 | 2708 | fonts/newtx/vf/ntxbmi17.vf
+2021/06/02 | 2708 | fonts/newtx/vf/ntxbmi15.vf
2021/06/02 | 2705 | macros/latex/base/idx.tex
-2021/06/02 | 2671938 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2021/06/02 | 2704 | fonts/newtx/vf/ntxbmi07.vf
+2021/06/02 | 2700 | fonts/newtx/vf/ntxbmi7.vf
+2021/06/02 | 2700 | fonts/newtx/vf/ntxbmi5.vf
+2021/06/02 | 26 | graphics/circuit_macros/doc/DCsymbol.m4
+2021/06/02 | 26 | graphics/circuit_macros/doc/ACsymbol.m4
+2021/06/02 | 269 | graphics/circuit_macros/doc/Loop.m4
+2021/06/02 | 2696 | graphics/circuit_macros/examples/keyval.m4
+2021/06/02 | 2685 | graphics/circuit_macros/examples/svg/ex11SVG.m4
+2021/06/02 | 2674 | graphics/circuit_macros/examples/Planes.m4
+2021/06/02 | 2661 | graphics/circuit_macros/examples/svg/CctTableSVG.m4
+2021/06/02 | 2661 | graphics/circuit_macros/doc/Grounds.tex
2021/06/02 | 265211 | macros/latex/base/ltnews24.pdf
-2021/06/02 | 262205 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2021/06/02 | 258884 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2021/06/02 | 2634 | graphics/circuit_macros/examples/Audio.m4
+2021/06/02 | 2634 | graphics/circuit_macros/doc/AudioMan.m4
+2021/06/02 | 2625 | graphics/circuit_macros/examples/svg/ex01SVG.m4
+2021/06/02 | 2612 | fonts/newtx/vf/ntxmi.vf
+2021/06/02 | 2604 | fonts/newtx/vf/ntxmi1.vf
+2021/06/02 | 2604 | fonts/newtx/vf/ntxmi0.vf
+2021/06/02 | 25849 | graphics/circuit_macros/doc/Xform.tex
+2021/06/02 | 2576 | fonts/newtx/vf/ntxmi7.vf
+2021/06/02 | 2576 | fonts/newtx/vf/ntxmi5.vf
+2021/06/02 | 2576 | fonts/newtx/vf/ntxmi17.vf
+2021/06/02 | 2576 | fonts/newtx/vf/ntxmi15.vf
+2021/06/02 | 2576 | fonts/newtx/vf/ntxmi07.vf
+2021/06/02 | 2576 | fonts/newtx/vf/ntxmi05.vf
2021/06/02 | 25642 | macros/luatex/latex/lua-typo/lua-typo-2021-04-18.sty
-2021/06/02 | 25584672 | systems/texlive/tlnet/install-tl.zip
+2021/06/02 | 2559 | graphics/circuit_macros/examples/svg/ex08SVG.m4
+2021/06/02 | 2556 | graphics/circuit_macros/examples/ex08.m4
+2021/06/02 | 2551 | graphics/circuit_macros/examples/svg/OptoisoSVG.m4
+2021/06/02 | 2542 | graphics/circuit_macros/examples/brace.m4
+2021/06/02 | 2528 | graphics/circuit_macros/examples/svg/AdderSVG.m4
+2021/06/02 | 2525 | graphics/circuit_macros/examples/svg/CrowSVG.m4
2021/06/02 | 252432 | macros/latex/base/ltnews27.pdf
-2021/06/02 | 25220 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
2021/06/02 | 252154 | macros/latex/base/lb2.pdf
-2021/06/02 | 250366 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2021/06/02 | 25021 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2021/06/02 | 24979 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2021/06/02 | 2520 | graphics/circuit_macros/examples/Crow.m4
+2021/06/02 | 2517 | graphics/circuit_macros/examples/Autoencoder.m4
+2021/06/02 | 24911 | graphics/circuit_macros/examples/svg/examplesSVG.htmx
+2021/06/02 | 24726 | graphics/circuit_macros/examples/svg/EEPSVG.m4
2021/06/02 | 247037 | macros/luatex/latex/lua-typo.zip
2021/06/02 | 245818 | macros/latex/base/ltnews19.pdf
2021/06/02 | 244869 | macros/latex/base/ltnews21.pdf
+2021/06/02 | 2443 | graphics/circuit_macros/examples/svg/ex00SVG.m4
+2021/06/02 | 2442 | graphics/circuit_macros/examples/Optoiso.m4
+2021/06/02 | 2441 | graphics/circuit_macros/doc/ujt.tex
2021/06/02 | 243601 | macros/latex/base/modguide.pdf
-2021/06/02 | 243372 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
2021/06/02 | 242886 | macros/latex/base/cfgguide.pdf
+2021/06/02 | 24141 | graphics/circuit_macros/examples/svg/UNOSVG.m4
+2021/06/02 | 2412 | graphics/circuit_macros/examples/ex00.m4
+2021/06/02 | 240 | macros/latex/contrib/bjfuthesis/documentation/bjfuthesis.tex
+2021/06/02 | 2402 | graphics/circuit_macros/examples/Adder.m4
2021/06/02 | 24015 | macros/latex/base/lterror.dtx
-2021/06/02 | 239842 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
2021/06/02 | 239681 | macros/latex/base/cyrguide.pdf
-2021/06/02 | 23908 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2021/06/02 | 2389 | graphics/circuit_macros/doc/Dac.m4
2021/06/02 | 238577 | macros/latex/base/ltxdoc.pdf
2021/06/02 | 23651 | macros/latex/base/ltnews30.tex
+2021/06/02 | 2362 | graphics/circuit_macros/examples/Jack.m4
+2021/06/02 | 2362 | graphics/circuit_macros/doc/JackMan.m4
+2021/06/02 | 2361 | graphics/circuit_macros/examples/ex11.m4
2021/06/02 | 23521 | macros/latex/base/fix-cm.dtx
2021/06/02 | 234008 | macros/latex/base/slifonts.pdf
+2021/06/02 | 233 | graphics/circuit_macros/examples/Ccurve.m4
2021/06/02 | 233995 | macros/latex/base/proc.pdf
2021/06/02 | 23386 | macros/latex/base/lppl.tex
-2021/06/02 | 23343 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
2021/06/02 | 2323 | macros/luatex/latex/lua-typo/README.md
-2021/06/02 | 2309420 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2021/06/02 | 2304 | graphics/circuit_macros/examples/Loglog.m4
+2021/06/02 | 2279 | graphics/circuit_macros/examples/ex01.m4
2021/06/02 | 227884 | systems/texlive/tlnet/archive/tools.source.r59424.tar.xz
2021/06/02 | 22676 | macros/latex/base/ltcounts.dtx
+2021/06/02 | 2262 | graphics/circuit_macros/examples/Geometry.m4
+2021/06/02 | 224 | macros/latex/contrib/bjfuthesis/example/thesis.tex
2021/06/02 | 22456 | macros/latex/base/cfgguide.tex
+2021/06/02 | 2241 | graphics/circuit_macros/examples/svg/LoglogSVG.m4
+2021/06/02 | 22354644 | systems/win32/w32tex/pdftex-w32.tar.xz
+2021/06/02 | 2225 | graphics/circuit_macros/doc/SourcesMan.m4
+2021/06/02 | 221 | graphics/circuit_macros/examples/rotate.tex
2021/06/02 | 220417 | macros/latex/base/ifthen.pdf
-2021/06/02 | 22021 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2021/06/02 | 219 | graphics/circuit_macros/examples/tst1.tex
2021/06/02 | 219354 | macros/latex/base/ltx3info.pdf
2021/06/02 | 21890 | macros/latex/required/babel/base/bbcompat.dtx
2021/06/02 | 218782 | macros/latex/base/nfssfont.pdf
-2021/06/02 | 2168152 | systems/texlive/tlnet/archive/newpx.r59419.tar.xz
-2021/06/02 | 215980 | systems/texlive/tlnet/archive/latex.r59424.tar.xz
+2021/06/02 | 217 | graphics/circuit_macros/doc/stringdims.m4
+2021/06/02 | 2179 | graphics/circuit_macros/doc/ConnMan.m4
+2021/06/02 | 2178 | graphics/circuit_macros/examples/Conn.m4
+2021/06/02 | 2171 | graphics/circuit_macros/examples/svg/I2LSVG.m4
+2021/06/02 | 2170 | graphics/circuit_macros/examples/ex06.m4
+2021/06/02 | 2165 | graphics/circuit_macros/examples/Sources.m4
2021/06/02 | 2158 | macros/latex/required/babel/base/README.md
2021/06/02 | 21576 | systems/texlive/tlnet/archive/l3packages.r59425.tar.xz
2021/06/02 | 215091 | macros/latex/base/lgc2.pdf
-2021/06/02 | 214715 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
2021/06/02 | 214710 | macros/latex/base/alltt.pdf
2021/06/02 | 2140 | systems/texlive/tlnet/archive/xintsession.doc.r59426.tar.xz
+2021/06/02 | 21384 | graphics/circuit_macros/examples/svg/Incl.jpg
+2021/06/02 | 21374 | graphics/circuit_macros/examples/xfig/xfiglib.fig
2021/06/02 | 212307 | macros/latex/base/exscale.pdf
-2021/06/02 | 21213 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2021/06/02 | 209733 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2021/06/02 | 209724 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2021/06/02 | 2119 | graphics/circuit_macros/examples/Logic.m4
+2021/06/02 | 2119 | graphics/circuit_macros/doc/LogicMan.m4
+2021/06/02 | 2111 | graphics/circuit_macros/examples/svg/ConnSVG.m4
+2021/06/02 | 2099 | graphics/circuit_macros/pstricks.m4
+2021/06/02 | 2097 | graphics/circuit_macros/examples/Ttree.m4
+2021/06/02 | 2086 | graphics/circuit_macros/examples/relaycoil.m4
+2021/06/02 | 2086 | graphics/circuit_macros/doc/relaycoilMan.m4
+2021/06/02 | 2085 | graphics/circuit_macros/pgf.m4
2021/06/02 | 208359 | macros/latex/base/latexsym.pdf
-2021/06/02 | 20809172 | systems/texlive/tlnet/install-tl-windows.exe
-2021/06/02 | 207956 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2021/06/02 | 206249 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2021/06/02 | 207622 | macros/latex/contrib/bjfuthesis/example/cover.pdf
+2021/06/02 | 2069 | graphics/circuit_macros/examples/svg/relaycoilSVG.m4
+2021/06/02 | 2068 | graphics/circuit_macros/examples/I2L.m4
+2021/06/02 | 2051 | graphics/circuit_macros/examples/svg/JackSVG.m4
2021/06/02 | 205162 | macros/latex/base/ltnews25.pdf
2021/06/02 | 20486 | macros/latex/base/lgc2.err
2021/06/02 | 20469 | macros/latex/base/ltnews.cls
+2021/06/02 | 20418 | graphics/circuit_macros/doc/thyristor.tex
2021/06/02 | 204063 | macros/latex/base/doc.dtx
-2021/06/02 | 203207 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2021/06/02 | 2027 | graphics/circuit_macros/examples/svg/pwrsupplySVG.m4
2021/06/02 | 2027860 | systems/texlive/tlnet/archive/graphics.doc.r59424.tar.xz
-2021/06/02 | 20124 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2021/06/02 | 2002630 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2021/06/02 | 199543 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2021/06/02 | 198277 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2021/06/02 | 2018 | graphics/circuit_macros/examples/svg/ex06SVG.m4
+2021/06/02 | 2014 | graphics/circuit_macros/examples/pwrsupply.m4
+2021/06/02 | 2013 | graphics/circuit_macros/doc/HybridPi.m4
+2021/06/02 | 2000 | graphics/circuit_macros/examples/ex21.m4
+2021/06/02 | 1995 | graphics/circuit_macros/doc/Corners.m4
+2021/06/02 | 1992 | graphics/circuit_macros/examples/svg/FourbarSVG.m4
+2021/06/02 | 1985 | graphics/circuit_macros/examples/svg/XORSVG.m4
+2021/06/02 | 1975 | graphics/circuit_macros/doc/FlipFlop.m4
2021/06/02 | 197187 | macros/latex/base/syntonly.pdf
-2021/06/02 | 196520 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2021/06/02 | 195702 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2021/06/02 | 194118 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2021/06/02 | 1966 | graphics/circuit_macros/examples/svg/DriveSVG.m4
+2021/06/02 | 1966 | graphics/circuit_macros/examples/Drive.m4
+2021/06/02 | 1962 | graphics/circuit_macros/examples/Autologix.m4
+2021/06/02 | 1959 | graphics/circuit_macros/examples/debug2.m4
+2021/06/02 | 1955 | graphics/circuit_macros/examples/svg/ABlogixSVG.m4
+2021/06/02 | 1953 | graphics/circuit_macros/examples/svg/MotorControlSVG.m4
+2021/06/02 | 1953 | graphics/circuit_macros/doc/Buffer.m4
+2021/06/02 | 1940 | graphics/circuit_macros/doc/AmpTable.tex
2021/06/02 | 1937 | macros/latex/base/minimal.cls
+2021/06/02 | 1931 | graphics/circuit_macros/examples/svg/LogicSVG.m4
+2021/06/02 | 19250 | graphics/circuit_macros/dpictools.pic
+2021/06/02 | 1922 | graphics/circuit_macros/examples/MotorControl.m4
+2021/06/02 | 19176 | graphics/circuit_macros/Licence.txt
+2021/06/02 | 19142 | graphics/circuit_macros/doc/Switches.tex
+2021/06/02 | 1907 | graphics/circuit_macros/examples/svg/SourcesSVG.m4
+2021/06/02 | 1906 | graphics/circuit_macros/examples/venus.m4
+2021/06/02 | 1906 | graphics/circuit_macros/examples/SPM.m4
2021/06/02 | 19064 | macros/latex/base/ltxdoc.dtx
+2021/06/02 | 1904 | fonts/newtx/tfm/ntxbmi05.tfm
2021/06/02 | 19040 | macros/latex/base/lppl.txt
+2021/06/02 | 18971552 | systems/win32/w32tex/luatex-dev-w32.tar.xz
+2021/06/02 | 1894 | graphics/circuit_macros/examples/svg/ArrowFnSVG.m4
2021/06/02 | 18940 | macros/latex/base/ltnews29.tex
+2021/06/02 | 1893 | graphics/circuit_macros/examples/svg/ex16SVG.m4
+2021/06/02 | 18933816 | systems/win32/w32tex/luatex-exp-w32.tar.xz
+2021/06/02 | 18927016 | systems/win32/w32tex/luatex-w32.tar.xz
+2021/06/02 | 1891 | graphics/circuit_macros/examples/svg/ex04SVG.m4
+2021/06/02 | 1882 | graphics/circuit_macros/examples/svg/ex21SVG.m4
+2021/06/02 | 1879 | graphics/circuit_macros/examples/Cruller.m4
2021/06/02 | 187818 | macros/latex/base/lthooks.dtx
2021/06/02 | 18770 | fonts/newpx/README
+2021/06/02 | 1875 | graphics/circuit_macros/examples/svg/GrayCodeSVG.m4
+2021/06/02 | 1874 | graphics/circuit_macros/examples/svg/CrullerSVG.m4
+2021/06/02 | 1865 | graphics/circuit_macros/examples/ex16.m4
+2021/06/02 | 1860 | graphics/circuit_macros/doc/bi_trans.m4
+2021/06/02 | 1857 | graphics/circuit_macros/doc/Composite.m4
+2021/06/02 | 1852 | graphics/circuit_macros/examples/Orbits.m4
2021/06/02 | 18404 | macros/latex/base/nfssfont.dtx
+2021/06/02 | 1837 | graphics/circuit_macros/examples/svg/SchottkySVG.m4
2021/06/02 | 18303 | macros/latex/base/ifthen.dtx
2021/06/02 | 18299 | macros/latex/base/ltx3info.tex
+2021/06/02 | 1828 | fonts/newtx/vf/ntxbmi05.vf
+2021/06/02 | 1823 | graphics/circuit_macros/examples/XOR.m4
2021/06/02 | 1815309 | macros/latex/required/babel/base.zip
-2021/06/02 | 18144 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2021/06/02 | 1812 | graphics/circuit_macros/examples/svg/BipSVG.m4
+2021/06/02 | 181066 | macros/latex/contrib/bjfuthesis/example/figures/illustration-of-ripple-sets.png
2021/06/02 | 180 | macros/latex/base/ltfilehook-doc.tex
2021/06/02 | 1807932 | systems/texlive/tlnet/archive/l3packages.doc.r59425.tar.xz
-2021/06/02 | 180216 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2021/06/02 | 1802 | graphics/circuit_macros/examples/Pconn.m4
+2021/06/02 | 1802 | graphics/circuit_macros/doc/PconnMan.m4
+2021/06/02 | 180215 | macros/latex/contrib/bjfuthesis/example/figures/admin-navigation.png
2021/06/02 | 179 | macros/latex/base/ltshipout-doc.tex
-2021/06/02 | 179817 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2021/06/02 | 17976 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
2021/06/02 | 179141 | macros/latex/contrib/biblatex-contrib/biblatex-cv.zip
2021/06/02 | 177 | macros/latex/base/lthooks-doc.tex
2021/06/02 | 177 | macros/latex/base/ltcmdhooks-doc.tex
+2021/06/02 | 1778 | graphics/circuit_macros/examples/Schottky.m4
+2021/06/02 | 1776 | graphics/circuit_macros/examples/svg/PconnSVG.m4
+2021/06/02 | 17711 | graphics/circuit_macros/examples/files.tex
+2021/06/02 | 1767 | graphics/circuit_macros/examples/ArrowFn.m4
2021/06/02 | 175645 | macros/latex/base/ltoutput.dtx
2021/06/02 | 17495 | macros/latex/base/cyrguide.tex
2021/06/02 | 174488 | macros/latex/base/ltnews05.pdf
2021/06/02 | 173 | macros/latex/base/ltpara-doc.tex
+2021/06/02 | 1737 | graphics/circuit_macros/examples/svg/ContactsSVG.m4
2021/06/02 | 173682 | macros/latex/base/makeindx.pdf
2021/06/02 | 173323 | macros/latex/base/ltnews13.pdf
-2021/06/02 | 17266457 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2021/06/02 | 1730 | graphics/circuit_macros/examples/ABlogix.m4
2021/06/02 | 172278 | macros/latex/base/tlc2.err
+2021/06/02 | 1720 | graphics/circuit_macros/examples/examples.tex
+2021/06/02 | 171777 | graphics/circuit_macros/libcct.m4
2021/06/02 | 170529 | macros/latex/base/tulm.pdf
2021/06/02 | 170214 | macros/latex/base/docstrip.dtx
+2021/06/02 | 1699 | graphics/circuit_macros/examples/svg/ex10SVG.m4
2021/06/02 | 1694 | macros/latex/base/small2e.tex
2021/06/02 | 169323 | macros/latex/base/graphpap.pdf
-2021/06/02 | 1688059 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2021/06/02 | 168529 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
2021/06/02 | 167988 | systems/texlive/tlnet/archive/l3kernel.r59425.tar.xz
2021/06/02 | 16794 | macros/luatex/latex/lua-typo/doc/lua-typo-demo.pdf
+2021/06/02 | 1668 | graphics/circuit_macros/examples/svg/Banking.m4
+2021/06/02 | 1668 | graphics/circuit_macros/examples/IC10107.m4
2021/06/02 | 166368 | macros/latex/base/ltnews17.pdf
-2021/06/02 | 16465 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2021/06/02 | 163868 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2021/06/02 | 16346 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2021/06/02 | 165 | graphics/circuit_macros/doc/tranbody.m4
+2021/06/02 | 1654 | graphics/circuit_macros/examples/ex04.m4
+2021/06/02 | 16420 | graphics/circuit_macros/doc/fet.tex
+2021/06/02 | 1640 | graphics/circuit_macros/mpost.m4
+2021/06/02 | 1639 | graphics/circuit_macros/Makefile
+2021/06/02 | 1630 | graphics/circuit_macros/examples/svg/TTLnandSVG.m4
+2021/06/02 | 16309 | graphics/circuit_macros/README
+2021/06/02 | 1624 | graphics/circuit_macros/doc/ParSeries.m4
2021/06/02 | 16233 | macros/latex/base/modguide.tex
+2021/06/02 | 1619 | graphics/circuit_macros/examples/Bip.m4
+2021/06/02 | 1619 | graphics/circuit_macros/doc/BipMan.m4
+2021/06/02 | 1618 | graphics/circuit_macros/doc/ArrestersMan.m4
2021/06/02 | 161518 | macros/latex/base/ltnews01.pdf
2021/06/02 | 161405 | macros/latex/base/ltnews14.pdf
+2021/06/02 | 1612 | graphics/circuit_macros/examples/svg/TimerSVG.m4
2021/06/02 | 16105 | macros/latex/base/ltbibl.dtx
+2021/06/02 | 1608 | graphics/circuit_macros/examples/ex05.m4
2021/06/02 | 160521 | macros/latex/base/manual.pdf
-2021/06/02 | 159436 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
2021/06/02 | 159313 | macros/latex/base/ltnews10.pdf
+2021/06/02 | 1585 | graphics/circuit_macros/examples/Contacts.m4
+2021/06/02 | 1585 | graphics/circuit_macros/doc/ContactsMan.m4
+2021/06/02 | 1575 | graphics/circuit_macros/doc/mplex.m4
2021/06/02 | 15699 | macros/latex/base/slifonts.fdd
2021/06/02 | 15625 | macros/latex/base/ltxref.dtx
2021/06/02 | 156210 | macros/latex/base/classes.dtx
+2021/06/02 | 1559 | graphics/circuit_macros/examples/svg/XformSVG.m4
+2021/06/02 | 1558 | graphics/circuit_macros/examples/TTLnand.m4
2021/06/02 | 155055 | macros/latex/base/ltnews08.pdf
-2021/06/02 | 154418 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2021/06/02 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2021/06/02 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2021/06/02 | 152231 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2021/06/02 | 1546 | graphics/circuit_macros/examples/svg/Xtest.m4
+2021/06/02 | 15388 | graphics/circuit_macros/doc/Sources.tex
+2021/06/02 | 1529 | graphics/circuit_macros/examples/mf/Makefile
+2021/06/02 | 1526 | graphics/circuit_macros/examples/Xform.m4
+2021/06/02 | 1526 | graphics/circuit_macros/doc/XformMan.m4
+2021/06/02 | 1525 | graphics/circuit_macros/examples/rotatetext.m4
+2021/06/02 | 1521 | graphics/circuit_macros/examples/Coxeter.m4
2021/06/02 | 1521156 | systems/texlive/tlnet/archive/circuitikz.doc.r59421.tar.xz
2021/06/02 | 15164 | systems/texlive/tlnet/archive/graphics.r59424.tar.xz
2021/06/02 | 15104 | macros/latex/base/source2e.tex
2021/06/02 | 150588 | systems/texlive/tlnet/archive/hvarabic.doc.r59423.tar.xz
2021/06/02 | 150493 | macros/latex/base/ltnews03.pdf
2021/06/02 | 150466 | macros/latex/base/ltnews02.pdf
+2021/06/02 | 15033 | graphics/circuit_macros/doc/Pconn.tex
+2021/06/02 | 1492 | graphics/circuit_macros/examples/ex10.m4
2021/06/02 | 149221 | macros/latex/base/ltoutenc.dtx
2021/06/02 | 149108 | systems/texlive/tlnet/archive/circuitikz.r59421.tar.xz
2021/06/02 | 14891 | macros/latex/base/ltnews28.tex
-2021/06/02 | 147750 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2021/06/02 | 1485 | graphics/circuit_macros/examples/Demultiplexer.m4
+2021/06/02 | 1485 | graphics/circuit_macros/doc/DemultiplexerMan.m4
2021/06/02 | 147587 | macros/latex/base/ltnews12.pdf
-2021/06/02 | 147354 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
2021/06/02 | 1468 | systems/texlive/tlnet/archive/hvarabic.r59423.tar.xz
+2021/06/02 | 1467 | graphics/circuit_macros/examples/Diodes.m4
+2021/06/02 | 1467 | graphics/circuit_macros/doc/DiodesMan.m4
2021/06/02 | 146533 | macros/latex/base/ltnews16.pdf
+2021/06/02 | 1464 | graphics/circuit_macros/doc/Taps.m4
2021/06/02 | 146200 | macros/latex/base/webcomp.pdf
-2021/06/02 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2021/06/02 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2021/06/02 | 1458 | graphics/circuit_macros/examples/header.tex
+2021/06/02 | 145720 | macros/latex/contrib/bjfuthesis/documentation/bjfuthesis.pdf
+2021/06/02 | 144 | graphics/circuit_macros/doc/Thermal.m4
+2021/06/02 | 144867572 | systems/win32/w32tex/context.tar.xz
+2021/06/02 | 1444 | graphics/circuit_macros/examples/svg/ThreeSVG.m4
+2021/06/02 | 1443 | graphics/circuit_macros/examples/Resolver.m4
2021/06/02 | 14421 | macros/latex/base/lppl-1-2.txt
2021/06/02 | 143686 | macros/latex/base/ltnews04.pdf
-2021/06/02 | 14345 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2021/06/02 | 14341 | macros/latex/base/lppl-1-1.txt
+2021/06/02 | 1433 | graphics/circuit_macros/examples/Opamp.m4
+2021/06/02 | 1433 | graphics/circuit_macros/doc/OpampMan.m4
+2021/06/02 | 1431 | graphics/circuit_macros/examples/svg/RelaySVG.m4
+2021/06/02 | 1429 | graphics/circuit_macros/examples/svg/DiodesSVG.m4
2021/06/02 | 142909 | macros/latex/base/ltnews06.pdf
+2021/06/02 | 14287 | graphics/circuit_macros/darrow.m4
2021/06/02 | 142843 | macros/latex/base/ltcmd.dtx
-2021/06/02 | 1427858 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2021/06/02 | 1416033 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2021/06/02 | 1419 | graphics/circuit_macros/examples/person.m4
+2021/06/02 | 141843 | graphics/circuit_macros/doc/body.tex
+2021/06/02 | 1406 | graphics/circuit_macros/examples/ShiftR.m4
+2021/06/02 | 1406 | graphics/circuit_macros/doc/ShiftRMan.m4
+2021/06/02 | 1403 | graphics/circuit_macros/examples/svg/MultiplexerSVG.m4
+2021/06/02 | 1400 | graphics/circuit_macros/examples/Multiplexer.m4
+2021/06/02 | 1400 | graphics/circuit_macros/doc/MultiplexerMan.m4
2021/06/02 | 13920 | macros/latex/base/ltexpl.dtx
-2021/06/02 | 13880 | systems/texlive/tlnet/archive/easybook.r59422.tar.xz
2021/06/02 | 13864 | macros/latex/base/ltvers.dtx
2021/06/02 | 138442 | macros/luatex/latex/lua-typo/doc/lua-typo.pdf
+2021/06/02 | 13833 | graphics/circuit_macros/doc/Contact.tex
2021/06/02 | 138044 | macros/latex/base/ltnews07.pdf
+2021/06/02 | 137 | graphics/circuit_macros/doc/opampexbody.m4
+2021/06/02 | 1373 | graphics/circuit_macros/examples/svg/DemultiplexerSVG.m4
2021/06/02 | 136576 | macros/latex/base/ltclass.dtx
-2021/06/02 | 136482 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2021/06/02 | 134950 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2021/06/02 | 13462 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2021/06/02 | 136037 | fonts/newtx/tex/newtxmath.sty
+2021/06/02 | 1358 | graphics/circuit_macros/examples/Crossbar.m4
+2021/06/02 | 1343 | graphics/circuit_macros/examples/svg/InductorsSVG.m4
+2021/06/02 | 1342 | graphics/circuit_macros/examples/Inductors.m4
+2021/06/02 | 1342 | graphics/circuit_macros/doc/InductorsMan.m4
2021/06/02 | 1341 | macros/latex/base/ltnews18.tex
+2021/06/02 | 13330 | graphics/circuit_macros/examples/Heathkit.m4
+2021/06/02 | 1331 | graphics/circuit_macros/examples/svg/SierpinskiSVG.m4
+2021/06/02 | 1331 | graphics/circuit_macros/examples/Sierpinski.m4
2021/06/02 | 13301 | macros/latex/base/proc.dtx
+2021/06/02 | 1329 | graphics/circuit_macros/doc/currents.m4
+2021/06/02 | 13264 | graphics/circuit_macros/examples/Tubediags.m4
2021/06/02 | 132373 | macros/latex/base/lppl.pdf
-2021/06/02 | 131705 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2021/06/02 | 131 | graphics/circuit_macros/doc/Axes.m4
2021/06/02 | 1316472 | macros/latex/base/encguide.pdf
-2021/06/02 | 1306688 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2021/06/02 | 1313 | graphics/circuit_macros/examples/svg/ShiftRSVG.m4
+2021/06/02 | 130 | graphics/circuit_macros/doc/bitrbody.m4
+2021/06/02 | 130737984 | systems/win32/w32tex/web2c-lib.tar.xz
2021/06/02 | 130447 | macros/latex/base/ltnews15.pdf
-2021/06/02 | 1301562 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2021/06/02 | 12 | graphics/circuit_macros/doc/Version.tex
2021/06/02 | 12946 | macros/latex/base/manual.err
-2021/06/02 | 1293150 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2021/06/02 | 1291 | graphics/circuit_macros/doc/ConfigC.m4
2021/06/02 | 129032 | macros/latex/base/ltnews09.pdf
-2021/06/02 | 128301 | macros/latex/contrib/easybook/easybook.dtx
+2021/06/02 | 1287 | graphics/circuit_macros/examples/Three.m4
+2021/06/02 | 12856 | graphics/circuit_macros/CHANGES
2021/06/02 | 1279 | macros/latex/base/legal.txt
-2021/06/02 | 1274688 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2021/06/02 | 1272695 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2021/06/02 | 12765 | graphics/circuit_macros/lib3D.m4
+2021/06/02 | 12711 | graphics/circuit_macros/examples/svg/HeathkitSVG.m4
+2021/06/02 | 1268 | macros/latex/contrib/bjfuthesis/example/contents/acknowledge.tex
+2021/06/02 | 1265 | graphics/circuit_macros/examples/svg/HeadersSVG.m4
+2021/06/02 | 1259 | graphics/circuit_macros/examples/Relay.m4
+2021/06/02 | 1259 | graphics/circuit_macros/doc/RelayMan.m4
+2021/06/02 | 1257 | graphics/circuit_macros/doc/ConfigB.m4
2021/06/02 | 12520 | macros/latex/base/testpage.tex
-2021/06/02 | 124750 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2021/06/02 | 12478 | graphics/circuit_macros/examples/svg/TubediagsSVG.m4
+2021/06/02 | 1238 | graphics/circuit_macros/examples/svg/NportSVG.m4
+2021/06/02 | 1230 | graphics/circuit_macros/examples/Antennas.m4
+2021/06/02 | 1230 | graphics/circuit_macros/doc/AntennasMan.m4
+2021/06/02 | 1229 | graphics/circuit_macros/doc/fbfilter.m4
2021/06/02 | 12224 | macros/latex/base/ltnews24.tex
2021/06/02 | 12119 | macros/latex/base/tulm.fdd
-2021/06/02 | 1190200 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2021/06/02 | 1189123 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2021/06/02 | 117607 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2021/06/02 | 1169898 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2021/06/02 | 1209 | graphics/circuit_macros/examples/svg/ChipsSVG.m4
+2021/06/02 | 12050 | graphics/circuit_macros/doc/Diodes.tex
+2021/06/02 | 1204 | graphics/circuit_macros/examples/svg/ex17SVG.m4
+2021/06/02 | 12006 | graphics/circuit_macros/doc/Jack.tex
+2021/06/02 | 11 | graphics/circuit_macros/doc/test.tex
+2021/06/02 | 1185 | graphics/circuit_macros/boxdims.sty
+2021/06/02 | 1181300 | systems/win32/w32tex/extractpdfmark-w32.tar.xz
+2021/06/02 | 1175 | graphics/circuit_macros/examples/Chips.m4
+2021/06/02 | 1174 | graphics/circuit_macros/examples/PPA.m4
+2021/06/02 | 11593 | graphics/circuit_macros/examples/svg/icsSVG.m4
2021/06/02 | 11590 | macros/latex/base/ltpage.dtx
-2021/06/02 | 115518 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2021/06/02 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2021/06/02 | 1157 | graphics/circuit_macros/examples/svg/NPDTSVG.m4
+2021/06/02 | 11556 | graphics/circuit_macros/svg.m4
+2021/06/02 | 1151 | graphics/circuit_macros/doc/Darlington.m4
+2021/06/02 | 11426 | graphics/circuit_macros/examples/ics.m4
2021/06/02 | 114092 | fonts/newpx/tex/newpxmath.sty
-2021/06/02 | 112683 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2021/06/02 | 112280 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2021/06/02 | 1132 | graphics/circuit_macros/examples/Headers.m4
+2021/06/02 | 1132 | graphics/circuit_macros/doc/HeadersMan.m4
+2021/06/02 | 1128 | graphics/circuit_macros/examples/NPDT.m4
+2021/06/02 | 1128 | graphics/circuit_macros/doc/NPDTMan.m4
+2021/06/02 | 11270 | graphics/circuit_macros/examples/FlowchartDefs.m4
+2021/06/02 | 1126 | graphics/circuit_macros/examples/ex17.m4
+2021/06/02 | 1120 | graphics/circuit_macros/doc/ConfigA.m4
2021/06/02 | 111955 | macros/latex/base/ltnews11.pdf
+2021/06/02 | 1114 | graphics/circuit_macros/mfpic.m4
+2021/06/02 | 1100 | graphics/circuit_macros/examples/ex02.m4
2021/06/02 | 10971144 | systems/texlive/tlnet/archive/l3kernel.doc.r59425.tar.xz
-2021/06/02 | 109066 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2021/06/02 | 1093 | graphics/circuit_macros/examples/svg/ex02SVG.m4
+2021/06/02 | 1090 | graphics/circuit_macros/examples/svg/AntennasSVG.m4
+2021/06/02 | 10909 | macros/latex/contrib/bjfuthesis/example/bibliography.bib
2021/06/02 | 10871 | macros/latex/base/manifest.txt
-2021/06/02 | 108000 | systems/texlive/tlnet/archive/texlive-scripts.r59417.tar.xz
-2021/06/02 | 1075240 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2021/06/02 | 1086052 | systems/win32/w32tex/win64/extractpdfmark-w64.tar.xz
+2021/06/02 | 108191 | macros/latex/contrib/bjfuthesis/example/figures/enhanced-recommendation.png
+2021/06/02 | 1076 | graphics/circuit_macros/examples/mf/mftest
+2021/06/02 | 1075 | graphics/circuit_macros/examples/bistable.m4
+2021/06/02 | 1074 | graphics/circuit_macros/doc/CapacitorsMan.m4
+2021/06/02 | 1074 | graphics/circuit_macros/doc/bistableMan.m4
2021/06/02 | 1074364 | macros/latex/base/ltnews.pdf
+2021/06/02 | 10737388 | systems/win32/w32tex/ptex-w32.tar.xz
+2021/06/02 | 1070 | graphics/circuit_macros/examples/svg/EmarrowsSVG.m4
2021/06/02 | 10697 | macros/latex/base/ltnews26.tex
2021/06/02 | 106908 | macros/latex/base/inputenc.dtx
2021/06/02 | 10687 | macros/latex/base/ltnews23.tex
2021/06/02 | 10668 | macros/latex/base/ltnews22.tex
+2021/06/02 | 1065 | graphics/circuit_macros/examples/svg/ex18SVG.m4
2021/06/02 | 10603 | macros/latex/base/makeindx.dtx
2021/06/02 | 105 | macros/latex/base/ltfilehook-code.tex
-2021/06/02 | 105056 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2021/06/02 | 10589 | graphics/circuit_macros/examples/svg/expSVG.m4
+2021/06/02 | 1055 | graphics/circuit_macros/examples/svg/TgateSVG.m4
+2021/06/02 | 1050 | graphics/circuit_macros/examples/svg/SVGconfig.m4
2021/06/02 | 104 | macros/latex/base/ltshipout-code.tex
+2021/06/02 | 1046 | graphics/circuit_macros/examples/Capacitors.m4
+2021/06/02 | 1040 | graphics/circuit_macros/examples/Nport.m4
+2021/06/02 | 1040 | graphics/circuit_macros/doc/NportMan.m4
+2021/06/02 | 10401 | graphics/circuit_macros/doc/Variable.tex
2021/06/02 | 103 | macros/latex/base/ltcmdhooks-code.tex
+2021/06/02 | 1039 | graphics/circuit_macros/examples/chaos.m4
2021/06/02 | 10375 | macros/latex/base/ltfsscmp.dtx
-2021/06/02 | 103494 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2021/06/02 | 103442 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2021/06/02 | 10369280 | systems/win32/w32tex/newtxpx-boondoxfonts.tar.xz
+2021/06/02 | 1034 | graphics/circuit_macros/examples/svg/OpampSVG.m4
2021/06/02 | 102 | macros/latex/base/lthooks-code.tex
+2021/06/02 | 1029 | graphics/circuit_macros/xfig.m4
2021/06/02 | 1029068 | macros/latex/base/lthooks-code.pdf
+2021/06/02 | 1024 | graphics/circuit_macros/examples/Btree.m4
+2021/06/02 | 1022 | graphics/circuit_macros/examples/Tgate.m4
+2021/06/02 | 1022 | graphics/circuit_macros/doc/TgateMan.m4
+2021/06/02 | 1019 | graphics/circuit_macros/gpic.m4
+2021/06/02 | 10193 | graphics/circuit_macros/examples/svg/paletteSVG.m4
+2021/06/02 | 10164 | graphics/circuit_macros/doc/Audio.tex
2021/06/02 | 101568 | systems/texlive/tlnet/archive/musixtex-fonts.doc.r59418.tar.xz
2021/06/02 | 10105 | macros/latex/base/webcomp.err
-2021/06/02 | 100384 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2021/06/02 | 1003 | graphics/circuit_macros/examples/ex15.m4
2021/06/01 | 9999 | macros/latex/contrib/l3kernel/l3news10.tex
2021/06/01 | 99344 | macros/latex/contrib/biblatex-contrib/biblatex-cv/doc/biblatex-cv.pdf
2021/06/01 | 9796 | systems/texlive/tlnet/archive/uptex-base.r59407.tar.xz
@@ -560,14 +1599,11 @@
2021/06/01 | 8762 | macros/latex/contrib/siunitx/siunitx-command.dtx
2021/06/01 | 8757 | graphics/pgf/contrib/circuitikz/tex/pgfcirccurrent.tex
2021/06/01 | 8668 | macros/latex/required/amsmath/amsbsy.dtx
-2021/06/01 | 8628672 | systems/win32/w32tex/uptex-w32.tar.xz
2021/06/01 | 85099 | macros/latex/required/amsmath/amsmath-2018-12-01.sty
2021/06/01 | 8481 | macros/latex/contrib/l3kernel/l3news11.tex
2021/06/01 | 84785 | macros/latex/contrib/l3kernel/l3fp-basics.dtx
2021/06/01 | 84537 | macros/latex/contrib/l3packages/xparse-2018-04-12.sty
2021/06/01 | 841461 | graphics/pgf/contrib/circuitikz/tex/circuitikz-1.0.sty
-2021/06/01 | 8397699 | fonts/newtx.zip
-2021/06/01 | 837863 | systems/win32/w32tex/ChangeLog
2021/06/01 | 834142 | graphics/pgf/contrib/circuitikz/tex/t-circuitikz-1.0.tex
2021/06/01 | 8240 | systems/texlive/tlnet/archive/platex-tools.r59403.tar.xz
2021/06/01 | 82371 | macros/latex/required/amsmath/testmath.tex
@@ -603,12 +1639,10 @@
2021/06/01 | 6956 | macros/latex/contrib/l3packages/xfp.dtx
2021/06/01 | 69568 | macros/latex/contrib/l3kernel/l3candidates.dtx
2021/06/01 | 690730 | graphics/pgf/contrib/circuitikz/tex/circuitikz-0.9.3.sty
-2021/06/01 | 6880 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2021/06/01 | 68545 | macros/latex/contrib/l3kernel/l3text-case.dtx
2021/06/01 | 6837890 | macros/latex/contrib/l3kernel/source3.pdf
2021/06/01 | 683433 | graphics/pgf/contrib/circuitikz/tex/t-circuitikz-0.9.3.tex
2021/06/01 | 6794 | macros/latex/required/tools/delarray.dtx
-2021/06/01 | 6780196 | systems/win32/w32tex/ptex-ng-w32.tar.xz
2021/06/01 | 6735 | macros/latex/required/amsmath/changes.txt
2021/06/01 | 6677 | macros/latex/contrib/l3kernel/l3news02.tex
2021/06/01 | 65589 | macros/latex/contrib/l3kernel/l3prg.dtx
@@ -622,7 +1656,6 @@
2021/06/01 | 6223 | macros/latex/required/tools/xr.dtx
2021/06/01 | 6195 | macros/latex/contrib/l3packages/xparse-2020-10-01.sty
2021/06/01 | 61460 | macros/latex/required/tools/bm.dtx
-2021/06/01 | 60804 | systems/texlive/tlnet/archive/siunitx.r59410.tar.xz
2021/06/01 | 607150 | macros/latex/contrib/siunitx/siunitx.pdf
2021/06/01 | 59933 | macros/latex/required/tools/changes.txt
2021/06/01 | 59226 | macros/latex/contrib/biblatex-contrib/biblatex-cv/doc/cv.pdf
@@ -641,7 +1674,6 @@
2021/06/01 | 534253 | macros/latex/contrib/l3packages/xparse.pdf
2021/06/01 | 5323 | macros/latex/required/amsmath/ams-external.txt
2021/06/01 | 53172 | macros/latex/required/tools/calc.dtx
-2021/06/01 | 52892368 | systems/win32/w32tex/latex-dev.tar.xz
2021/06/01 | 5211 | macros/latex/required/tools/tools-overview.tex
2021/06/01 | 516356 | macros/latex/required/tools/array.pdf
2021/06/01 | 516007 | macros/latex/required/tools/multicol.pdf
@@ -677,13 +1709,7 @@
2021/06/01 | 422268 | graphics/pgf/contrib/circuitikz/tex/circuitikz-0.8.3.sty
2021/06/01 | 418 | graphics/pgf/contrib/circuitikz/doc/compatibility.tex
2021/06/01 | 41856 | systems/texlive/tlnet/archive/thuthesis.r59411.tar.xz
-2021/06/01 | 4184 | fonts/newtx/tfm/ntxbmi1.tfm
-2021/06/01 | 4180 | fonts/newtx/tfm/ntxmi0.tfm
-2021/06/01 | 4176 | fonts/newtx/tfm/ntxmi1.tfm
-2021/06/01 | 4176 | fonts/newtx/tfm/ntxbmi0.tfm
2021/06/01 | 41740 | systems/texlive/tlnet/archive/platex.r59404.tar.xz
-2021/06/01 | 4172 | fonts/newtx/tfm/ntxmi.tfm
-2021/06/01 | 4168 | fonts/newtx/tfm/ntxbmi.tfm
2021/06/01 | 416850 | graphics/pgf/contrib/circuitikz/tex/t-circuitikz-0.8.3.tex
2021/06/01 | 41319 | macros/latex/contrib/siunitx/CHANGELOG.md
2021/06/01 | 4113 | macros/latex/required/graphics/epsfig.dtx
@@ -696,7 +1722,6 @@
2021/06/01 | 39391 | macros/latex/contrib/l3packages/xfrac.dtx
2021/06/01 | 393856 | graphics/pgf/contrib/circuitikz/tex/circuitikz-0.6.sty
2021/06/01 | 3937 | macros/latex/required/graphics/lscape.dtx
-2021/06/01 | 38874 | fonts/newtx/README
2021/06/01 | 383483 | macros/latex/required/tools/varioref.pdf
2021/06/01 | 382541 | macros/latex/required/tools/longtable.pdf
2021/06/01 | 38107 | systems/mac/mactex/ExtrasFolder.pdf
@@ -714,7 +1739,6 @@
2021/06/01 | 3590 | graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex
2021/06/01 | 35880 | macros/latex/required/tools/tabularx.dtx
2021/06/01 | 35666 | macros/latex/contrib/l3kernel/l3quark.dtx
-2021/06/01 | 35318784 | systems/win32/w32tex/ltxpkgs.tar.xz
2021/06/01 | 35317 | graphics/pgf/contrib/circuitikz/doc/changelog.tex
2021/06/01 | 3522 | fonts/musixtex-fonts/doc/musixtex-fonts-install.tex
2021/06/01 | 351189 | macros/latex/required/tools/theorem.pdf
@@ -722,24 +1746,13 @@
2021/06/01 | 3437520 | systems/win32/w32tex/tex4htk-w32.tar.xz
2021/06/01 | 33916 | macros/latex/required/graphics/changes.txt
2021/06/01 | 33863 | macros/latex/required/tools/varioref-2016-02-16.sty
-2021/06/01 | 3380 | fonts/newtx/tfm/ntxbmi15.tfm
-2021/06/01 | 3376 | fonts/newtx/tfm/ntxbmi5.tfm
2021/06/01 | 3374 | macros/latex/contrib/tiscreen/doc/tiscreen-doc.tex
-2021/06/01 | 3340 | fonts/newtx/tfm/ntxbmi17.tfm
-2021/06/01 | 3336 | fonts/newtx/tfm/ntxbmi7.tfm
2021/06/01 | 33332 | macros/latex/contrib/siunitx/siunitx-compound.dtx
-2021/06/01 | 3332 | fonts/newtx/tfm/ntxbmi07.tfm
2021/06/01 | 33286 | macros/latex/contrib/l3kernel/l3sys.dtx
-2021/06/01 | 3320 | fonts/newtx/tfm/ntxmi17.tfm
2021/06/01 | 331713 | macros/latex/contrib/l3packages/xfp.pdf
-2021/06/01 | 3316 | fonts/newtx/tfm/ntxmi7.tfm
-2021/06/01 | 3316 | fonts/newtx/tfm/ntxmi07.tfm
2021/06/01 | 331424 | macros/latex/required/tools/bm.pdf
2021/06/01 | 330815 | macros/latex/required/tools/verbatim.pdf
-2021/06/01 | 3304 | fonts/newtx/tfm/ntxmi15.tfm
2021/06/01 | 330071 | macros/latex/required/graphics/grfguide.pdf
-2021/06/01 | 3296 | fonts/newtx/tfm/ntxmi5.tfm
-2021/06/01 | 3296 | fonts/newtx/tfm/ntxmi05.tfm
2021/06/01 | 3284 | macros/latex/required/tools/manifest.txt
2021/06/01 | 3277 | graphics/pgf/contrib/circuitikz/README.md
2021/06/01 | 32402 | macros/latex/contrib/l3kernel/l3cctab.dtx
@@ -771,38 +1784,21 @@
2021/06/01 | 280 | graphics/pgf/contrib/circuitikz/tex/ctikzstyle-example.tex
2021/06/01 | 278041 | macros/latex/required/tools/tabularx.pdf
2021/06/01 | 2763317 | install/macros/latex/required/latex-amsmath.tds.zip
-2021/06/01 | 2744 | fonts/newtx/vf/ntxbmi.vf
2021/06/01 | 274304156 | systems/win32/w32tex/pstricks.tar.xz
2021/06/01 | 2742241 | install/graphics/pgf/contrib/circuitikz.tds.zip
-2021/06/01 | 2740 | fonts/newtx/vf/ntxbmi1.vf
-2021/06/01 | 2740 | fonts/newtx/vf/ntxbmi0.vf
2021/06/01 | 27365 | macros/latex/contrib/biblatex-contrib/biblatex-cv/biblatex-cv.sty
2021/06/01 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty
2021/06/01 | 2733510 | macros/latex/required/amsmath.zip
2021/06/01 | 2726174 | graphics/pgf/contrib/circuitikz.zip
2021/06/01 | 2712 | macros/latex/required/amsmath/README.md
2021/06/01 | 27128 | systems/texlive/tlnet/archive/dvipdfmx.r59415.tar.xz
-2021/06/01 | 2708 | fonts/newtx/vf/ntxbmi17.vf
-2021/06/01 | 2708 | fonts/newtx/vf/ntxbmi15.vf
-2021/06/01 | 2704 | fonts/newtx/vf/ntxbmi07.vf
-2021/06/01 | 2700 | fonts/newtx/vf/ntxbmi7.vf
-2021/06/01 | 2700 | fonts/newtx/vf/ntxbmi5.vf
2021/06/01 | 269070 | macros/latex/required/graphics/rotating.pdf
2021/06/01 | 267761 | macros/latex/required/tools/layout.pdf
2021/06/01 | 2669503 | install/macros/latex/contrib/siunitx.tds.zip
2021/06/01 | 2665541 | install/macros/latex/required/latex-graphics.tds.zip
2021/06/01 | 2632168 | macros/latex/required/graphics.zip
2021/06/01 | 2631874 | macros/latex/contrib/siunitx.zip
-2021/06/01 | 2612 | fonts/newtx/vf/ntxmi.vf
2021/06/01 | 260624 | macros/latex/required/tools/showkeys.pdf
-2021/06/01 | 2604 | fonts/newtx/vf/ntxmi1.vf
-2021/06/01 | 2604 | fonts/newtx/vf/ntxmi0.vf
-2021/06/01 | 2588 | fonts/newtx/vf/ntxmi17.vf
-2021/06/01 | 2588 | fonts/newtx/vf/ntxmi15.vf
-2021/06/01 | 2588 | fonts/newtx/vf/ntxmi07.vf
-2021/06/01 | 2588 | fonts/newtx/vf/ntxmi05.vf
-2021/06/01 | 2580 | fonts/newtx/vf/ntxmi7.vf
-2021/06/01 | 2580 | fonts/newtx/vf/ntxmi5.vf
2021/06/01 | 2576 | macros/latex/required/tools/multicol.ins
2021/06/01 | 25719 | macros/latex/contrib/siunitx/siunitx-complex.dtx
2021/06/01 | 25713 | macros/latex/contrib/l3kernel/l3fp-random.dtx
@@ -850,20 +1846,17 @@
2021/06/01 | 204992 | macros/latex/contrib/l3kernel/l3news12.pdf
2021/06/01 | 198647 | macros/latex/required/tools/delarray.pdf
2021/06/01 | 19641 | macros/latex/contrib/l3kernel/l3fp-convert.dtx
-2021/06/01 | 1961812 | systems/texlive/tlnet/archive/siunitx.doc.r59410.tar.xz
2021/06/01 | 19541 | macros/latex/contrib/siunitx/siunitx.dtx
2021/06/01 | 194973 | macros/latex/required/tools/fileerr.pdf
2021/06/01 | 1930 | graphics/pgf/contrib/circuitikz/tex/ctikzstyle-romano.tex
2021/06/01 | 19267 | macros/latex/contrib/biblatex-contrib/biblatex-cv/biblatex-cv.bbx
2021/06/01 | 19103 | macros/latex/contrib/graphics-def/pdftex.def
2021/06/01 | 1908 | macros/latex/contrib/l3kernel/interface3.tex
-2021/06/01 | 1904 | fonts/newtx/tfm/ntxbmi05.tfm
2021/06/01 | 19010 | macros/latex/contrib/graphics-def/luatex.def
2021/06/01 | 189538 | macros/latex/required/tools/hhline.pdf
2021/06/01 | 18531 | macros/latex/contrib/l3kernel/l3fp-round.dtx
2021/06/01 | 183532 | macros/latex/required/tools/shellesc.pdf
2021/06/01 | 1832 | macros/latex/contrib/hep-paper/hep-paper.ins
-2021/06/01 | 1828 | fonts/newtx/vf/ntxbmi05.vf
2021/06/01 | 182354 | macros/latex/required/tools/multicol.dtx
2021/06/01 | 17972 | systems/texlive/tlnet/archive/changes.source.r59408.tar.xz
2021/06/01 | 178672 | macros/latex/required/amsmath/amscd.pdf
@@ -881,7 +1874,6 @@
2021/06/01 | 1706 | fonts/musixtex-fonts/README
2021/06/01 | 170069 | macros/latex/contrib/l3kernel/l3news11.pdf
2021/06/01 | 167686 | macros/latex/required/graphics/epsfig.pdf
-2021/06/01 | 16673 | CTAN.sites
2021/06/01 | 16580 | graphics/pgf/contrib/circuitikz/tex/pgfcircpath.tex
2021/06/01 | 16547 | macros/latex/contrib/hvarabic/doc/hvarabic.tex
2021/06/01 | 1652 | macros/latex/required/tools/README.md
@@ -981,14 +1973,12 @@
2021/06/01 | 107921 | macros/latex/contrib/l3kernel/l3expan.dtx
2021/06/01 | 10776 | macros/latex/required/tools/fontsmpl.dtx
2021/06/01 | 107383 | macros/latex/contrib/l3kernel/l3news09.tex
-2021/06/01 | 10715024 | systems/win32/w32tex/ptex-w32.tar.xz
2021/06/01 | 10682 | macros/latex/required/graphics/trig.dtx
2021/06/01 | 10649 | macros/latex/required/tools/enumerate.dtx
2021/06/01 | 1063749 | macros/latex/contrib/hep-paper/hep-paper-implementation.pdf
2021/06/01 | 106148 | graphics/pgf/contrib/circuitikz/tex/pgfcircmultipoles.tex
2021/06/01 | 105510 | macros/latex/contrib/l3kernel/l3fp-parse.dtx
2021/06/01 | 104675 | macros/latex/required/amsmath/amsldoc.tex
-2021/06/01 | 103508 | systems/texlive/tlnet/archive/siunitx.source.r59410.tar.xz
2021/06/01 | 10324 | systems/texlive/tlnet/archive/hvfloat.r59409.tar.xz
2021/06/01 | 1021921 | graphics/pgf/contrib/circuitikz/tex/circuitikz-1.2.7.sty
2021/06/01 | 1014383 | graphics/pgf/contrib/circuitikz/tex/t-circuitikz-1.2.7.tex
@@ -1005,6 +1995,7 @@
2021/05/31 | 952 | macros/latex/contrib/translator/translator-bibliography-dictionary-German.dict
2021/05/31 | 94686 | macros/latex/contrib/hvfloat/doc/examples/multi-default1s2c.pdf
2021/05/31 | 943 | macros/latex/contrib/translator/translator-bibliography-dictionary-Turkish.dict
+2021/05/31 | 934 | language/japanese/uplatex/uplfmt.ins
2021/05/31 | 93238 | macros/latex/contrib/hvfloat/doc/examples/multi-inner2s2c.pdf
2021/05/31 | 931 | language/japanese/plautopatch/plarydshln.sty
2021/05/31 | 929 | macros/latex/contrib/translator/translator-bibliography-dictionary-Dutch.dict
@@ -1015,6 +2006,7 @@
2021/05/31 | 9132 | language/japanese/uptex-base/samples/bkmk-utf8.tex
2021/05/31 | 9103 | language/japanese/plautopatch/plautopatch-ja.tex
2021/05/31 | 908 | macros/latex/contrib/translator/translator-bibliography-dictionary-Italian.dict
+2021/05/31 | 907477 | install/language/japanese/uplatex.tds.zip
2021/05/31 | 90608 | macros/latex/contrib/hvfloat/doc/examples/paper-default1s2c.pdf
2021/05/31 | 90429 | macros/latex/contrib/hvfloat/doc/examples/paper-default2s2c.pdf
2021/05/31 | 903 | macros/latex/contrib/translator/translator-bibliography-dictionary-English.dict
@@ -1050,6 +2042,7 @@
2021/05/31 | 83672 | macros/latex/contrib/hvfloat/doc/examples/default1s2c.pdf
2021/05/31 | 8363 | language/japanese/platex/plnewsc14.tex
2021/05/31 | 83533 | macros/latex/contrib/hvfloat/doc/examples/default1s1c.pdf
+2021/05/31 | 8288 | language/japanese/uplatex/uplvers.dtx
2021/05/31 | 82729 | macros/latex/contrib/hvfloat/doc/examples/after1s1c.pdf
2021/05/31 | 82552 | macros/latex/contrib/hvfloat/doc/examples/right1s1c.pdf
2021/05/31 | 82305 | macros/latex/contrib/hvfloat/doc/examples/default2s1c.pdf
@@ -1090,6 +2083,7 @@
2021/05/31 | 6668 | language/japanese/uptex-base/samples/aozora-utarticle-utf8.tex
2021/05/31 | 64 | language/japanese/ptex-base/ptex.ini
2021/05/31 | 64927 | language/japanese/platex-tools/plextdelarray.pdf
+2021/05/31 | 626 | language/japanese/uplatex/README.md
2021/05/31 | 625 | macros/latex/contrib/translator/translator-environment-dictionary-Greek.dict
2021/05/31 | 61 | language/japanese/uptex-base/uptex.ini
2021/05/31 | 615046 | macros/latex/contrib/hvfloat/doc/examples/doublepage2s2c.pdf
@@ -1110,6 +2104,7 @@
2021/05/31 | 573 | macros/latex/contrib/hvfloat/doc/examples/runAll.sh
2021/05/31 | 565 | language/japanese/platex/pldocs.ins
2021/05/31 | 563 | language/japanese/uptex-base/samples/area-uptex.mp
+2021/05/31 | 555 | language/japanese/uplatex/upldocs.ins
2021/05/31 | 55160 | systems/texlive/tlnet/archive/reledmac.r59398.tar.xz
2021/05/31 | 5492 | language/japanese/platex/Makefile
2021/05/31 | 548 | macros/latex/contrib/thuthesis/data/acknowledgements.tex
@@ -1126,6 +2121,7 @@
2021/05/31 | 5163 | language/japanese/platex/plnewsc04.tex
2021/05/31 | 511 | macros/latex/contrib/translator/translator-environment-dictionary-Bulgarian.dict
2021/05/31 | 5059 | language/japanese/platex-tools/plextdelarray.tex
+2021/05/31 | 49517 | language/japanese/uplatex/uplatex.dtx
2021/05/31 | 4922 | macros/latex/contrib/thuthesis/data/chap02.tex
2021/05/31 | 490 | macros/latex/contrib/thuthesis/latexmkrc
2021/05/31 | 48678 | language/japanese/uptex-base/samples/adobe-jp-utf8.tex
@@ -1138,6 +2134,7 @@
2021/05/31 | 477 | macros/latex/contrib/translator/translator-environment-dictionary-Portuguese.dict
2021/05/31 | 476 | macros/latex/contrib/translator/translator-environment-dictionary-Croatian.dict
2021/05/31 | 475 | language/japanese/uptex-base/samples/area-jis.mp
+2021/05/31 | 473667 | language/japanese/uplatex/upldoc.pdf
2021/05/31 | 471 | language/japanese/uptex-base/samples/area-utf8.mp
2021/05/31 | 47154 | macros/latex/contrib/thuthesis/thuthesis-author-year.bst
2021/05/31 | 4685 | language/japanese/platex/plnews02.tex
@@ -1160,6 +2157,7 @@
2021/05/31 | 44309 | macros/latex/contrib/thuthesis/thuthesis-bachelor.bst
2021/05/31 | 44305 | macros/latex/contrib/thuthesis/thuthesis-numeric.bst
2021/05/31 | 44150 | language/japanese/platex-tools/pxmulticol.pdf
+2021/05/31 | 4410 | language/japanese/uplatex/Makefile
2021/05/31 | 433 | macros/latex/contrib/translator/translator-environment-dictionary-English.dict
2021/05/31 | 433 | macros/latex/contrib/translator/translator-environment-dictionary-Catalan.dict
2021/05/31 | 432 | macros/latex/contrib/translator/translator-environment-dictionary-French.dict
@@ -1280,6 +2278,7 @@
2021/05/31 | 2589 | language/japanese/platex-tools/pxxspace.tex
2021/05/31 | 253 | language/japanese/platex/platex.ini
2021/05/31 | 253604 | language/japanese/platex/platex.pdf
+2021/05/31 | 251 | language/japanese/uplatex/uplatex.ini
2021/05/31 | 2504 | systems/texlive/tlnet/archive/bjfuthesis.r59396.tar.xz
2021/05/31 | 2500 | language/japanese/uptex-base/samples/simple-sjis.tex
2021/05/31 | 2493 | language/japanese/uptex-base/samples/simple-euc.tex
@@ -1315,9 +2314,11 @@
2021/05/31 | 2004 | fonts/newpx/tfm/zplsy.tfm
2021/05/31 | 1965 | language/japanese/plautopatch/plextarydshln.sty
2021/05/31 | 1963 | macros/latex/contrib/translator/translator-numbers-dictionary-Portuguese.dict
+2021/05/31 | 1958 | language/japanese/uplatex/README_uplatex.txt
2021/05/31 | 1937 | language/japanese/platex-tools/pxmulticol.tex
2021/05/31 | 1928 | macros/latex/contrib/translator/translator-numbers-dictionary-Russian.dict
2021/05/31 | 1928 | language/japanese/ptex-base/ptex.tex
+2021/05/31 | 191844 | language/japanese/uplatex/uplatex.pdf
2021/05/31 | 19106 | macros/latex/contrib/thuthesis/LICENSE
2021/05/31 | 1902 | macros/latex/contrib/translator/translator-numbers-dictionary-Bulgarian.dict
2021/05/31 | 1900 | language/japanese/uptex-base/samples/jbib3-utf8.tex
@@ -1331,6 +2332,7 @@
2021/05/31 | 1792 | fonts/newpx/vf/zplsy.vf
2021/05/31 | 1786 | macros/latex/contrib/thuthesis/data/appendix-translation.tex
2021/05/31 | 1771 | language/japanese/platex-tools/plextdelarray.sty
+2021/05/31 | 17699 | language/japanese/uplatex/uplfonts.dtx
2021/05/31 | 17567 | language/japanese/platex/platexrelease.dtx
2021/05/31 | 1751 | macros/latex/contrib/translator/translator-numbers-dictionary-Turkish.dict
2021/05/31 | 1746 | language/japanese/plautopatch/pxpgfrcs.sty
@@ -1345,6 +2347,8 @@
2021/05/31 | 1699341 | language/japanese/platex.zip
2021/05/31 | 1698 | macros/latex/contrib/translator/translator-months-dictionary-Portuguese.dict
2021/05/31 | 1687223 | macros/latex/contrib/thuthesis.zip
+2021/05/31 | 168266 | language/japanese/uplatex/ujclasses.dtx
+2021/05/31 | 16704 | language/japanese/uplatex/ukinsoku.dtx
2021/05/31 | 1664 | macros/latex/contrib/thuthesis/data/committee.tex
2021/05/31 | 1652 | macros/latex/contrib/translator/translator-numbers-dictionary-Spanish.dict
2021/05/31 | 16516 | systems/texlive/tlnet/archive/pxjahyper.r59395.tar.xz
@@ -1363,9 +2367,11 @@
2021/05/31 | 1601 | language/japanese/uptex-base/samples/yaku-jsc-jis.tex
2021/05/31 | 1591 | language/japanese/uptex-base/LICENSE
2021/05/31 | 15909 | language/japanese/uptex-base/samples/show_kcat.tex
+2021/05/31 | 1586 | language/japanese/uplatex/LICENSE
2021/05/31 | 158330 | language/japanese/platex/jclasses.dtx
2021/05/31 | 15774 | language/japanese/uptex-base/samples/Makefile
2021/05/31 | 1572 | fonts/newpx/tfm/pxsys.tfm
+2021/05/31 | 1569 | language/japanese/uplatex/uplcls.ins
2021/05/31 | 1565 | macros/latex/contrib/translator/translator-months-dictionary-Greek.dict
2021/05/31 | 1554 | language/japanese/ptex-base/LICENSE
2021/05/31 | 1553 | language/japanese/platex/LICENSE
@@ -1440,6 +2446,7 @@
2021/05/31 | 116294 | macros/latex/contrib/hvfloat/doc/hvfloat.tex
2021/05/31 | 11616 | language/japanese/uptex-base/samples/jis_uni_variation.tex
2021/05/31 | 1147400 | macros/latex/contrib/thuthesis/thuthesis.pdf
+2021/05/31 | 113529 | language/japanese/uplatex/uplatex-en.pdf
2021/05/31 | 1131 | macros/latex/contrib/translator/translator-bibliography-dictionary-Portuguese.dict
2021/05/31 | 11271 | language/japanese/uptex-base/samples/misc-check-h-utf8.tex
2021/05/31 | 1117 | macros/latex/contrib/translator/translator-bibliography-dictionary-Greek.dict
@@ -1543,7 +2550,6 @@
2021/05/30 | 75270 | macros/latex/contrib/changes/examples/changes.example.packageoptions.ulem.pdf
2021/05/30 | 74370 | macros/latex/contrib/changes/examples/changes.example.authormarkup.brackets.pdf
2021/05/30 | 73913 | macros/latex/contrib/changes/examples/changes.example.authormarkup.none.pdf
-2021/05/30 | 7362570 | macros/latex/contrib/bjfuthesis.zip
2021/05/30 | 720848 | systems/texlive/tlnet/archive/schulschriften.doc.r59388.tar.xz
2021/05/30 | 68141 | macros/latex/contrib/changes/examples/changes.example.final.pdf
2021/05/30 | 6716 | systems/texlive/tlnet/archive/keyfloat.r59389.tar.xz
@@ -1573,7 +2579,6 @@
2021/05/30 | 49 | macros/latex/contrib/changes/userdoc/setauthormarkupposition_in.tex
2021/05/30 | 49 | macros/latex/contrib/changes/userdoc/deleted_in.tex
2021/05/30 | 4932 | macros/latex/contrib/changes/changes.drv
-2021/05/30 | 4904 | macros/latex/contrib/bjfuthesis/bjfuthesis.cls
2021/05/30 | 48 | macros/latex/contrib/changes/userdoc/usepackage_todonotes_changes_ex.tex
2021/05/30 | 48 | macros/latex/contrib/changes/userdoc/usepackage_addedmarkup_changes_in.tex
2021/05/30 | 48 | macros/latex/contrib/changes/userdoc/setsocextension_ex.tex
@@ -1597,7 +2602,6 @@
2021/05/30 | 38432 | macros/latex/contrib/changes/userdoc/changes.en.tex
2021/05/30 | 37 | macros/latex/contrib/changes/userdoc/usepackage_ulem_changes_in.tex
2021/05/30 | 376580 | macros/latex/contrib/changes/changes.ngerman.pdf
-2021/05/30 | 3700466 | macros/latex/contrib/bjfuthesis/example/thesis.pdf
2021/05/30 | 369142 | macros/latex/contrib/changes/changes.english.pdf
2021/05/30 | 358155 | macros/latex/contrib/reledmac/migration.pdf
2021/05/30 | 34 | macros/latex/contrib/changes/userdoc/sethighlightmarkup_in.tex
@@ -1647,7 +2651,6 @@
2021/05/30 | 210267 | macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
2021/05/30 | 209050 | macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
2021/05/30 | 208756 | macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
-2021/05/30 | 2079 | macros/latex/contrib/bjfuthesis/README.md
2021/05/30 | 205460 | systems/texlive/tlnet/archive/lwarp.r59390.tar.xz
2021/05/30 | 205373 | macros/latex/contrib/reledmac/examples/2-antilabe.pdf
2021/05/30 | 2041560 | macros/latex/contrib/reledmac/reledmac.pdf
@@ -1688,7 +2691,6 @@
2021/05/30 | 154407 | language/japanese/pxjahyper.zip
2021/05/30 | 151 | macros/latex/contrib/changes/userdoc/usepackage_commentmarkup_changes_ex.tex
2021/05/30 | 147 | macros/latex/contrib/changes/userdoc/usepackage_deletedmarkup_changes_ex.tex
-2021/05/30 | 145720 | macros/latex/contrib/bjfuthesis/documentation/bjfuthesis.pdf
2021/05/30 | 143467 | macros/latex/contrib/changes/examples/changes.example.screenshot.pdf
2021/05/30 | 142 | macros/latex/contrib/changes/userdoc/usepackage_addedmarkup_changes_ex.tex
2021/05/30 | 13309241 | macros/latex/contrib/reledmac.zip
@@ -1705,7 +2707,6 @@
2021/05/30 | 106 | macros/latex/contrib/changes/userdoc/usepackage_defaultcolor_changes_ex.tex
2021/05/30 | 104 | macros/latex/contrib/changes/userdoc/setsummarytowidth_ex.tex
2021/05/30 | 104166 | macros/latex/contrib/changes/examples/changes.example.packageoptions.todonotes.pdf
-2021/05/30 | 10368760 | systems/win32/w32tex/newtxpx-boondoxfonts.tar.xz
2021/05/30 | 10321 | macros/latex/contrib/changes/changes.ins
2021/05/30 | 1004380 | systems/texlive/tlnet/archive/keyfloat.doc.r59389.tar.xz
2021/05/29 | 99972418 | systems/win32/w32tex/TLW64/tl-win64.zip
@@ -1724,25 +2725,19 @@
2021/05/29 | 8208 | systems/texlive/tlnet/archive/jlreq.source.r59376.tar.xz
2021/05/29 | 8124 | systems/texlive/tlnet/archive/derivative.r59379.tar.xz
2021/05/29 | 8060 | systems/texlive/tlnet/archive/fei.r59380.tar.xz
-2021/05/29 | 802 | macros/latex/contrib/bjfuthesis/documentation/contents/doc-abstract.tex
2021/05/29 | 79 | fonts/schulschriften/source/wela/welasl14.mf
2021/05/29 | 7997 | fonts/newpx/tex/newpxtext.sty
2021/05/29 | 7978 | fonts/schulschriften/source/wesa/wesa14_kl.mf
2021/05/29 | 796 | fonts/schulschriften/tex/weva/t1weva.fd
2021/05/29 | 761 | fonts/schulschriften/tex/wela/t1wela.fd
-2021/05/29 | 75 | macros/latex/contrib/bjfuthesis/documentation/contents/doc-acknowledge.tex
2021/05/29 | 75465 | systems/win32/miktex/tm/packages/polexpr.tar.lzma
2021/05/29 | 752 | fonts/schulschriften/tex/wedn/t1wedn.fd
2021/05/29 | 749 | fonts/schulschriften/tex/wesa/t1wesa.fd
2021/05/29 | 73 | fonts/schulschriften/source/wedn/wednsl14.mf
-2021/05/29 | 7327 | systems/win32/miktex/tm/packages/xintsession.tar.lzma
2021/05/29 | 72 | fonts/schulschriften/source/wesa/wesasl14.mf
2021/05/29 | 729868 | systems/texlive/tlnet/archive/translation-biblatex-de.doc.r59382.tar.xz
2021/05/29 | 719 | macros/latex/contrib/lwarp/lwarp_baseline_marker.eps
-2021/05/29 | 6928252 | systems/win32/w32tex/win64/pdftex-w64.tar.xz
2021/05/29 | 68725 | systems/win32/miktex/tm/packages/ot-tableau.tar.lzma
-2021/05/29 | 6714324 | systems/win32/miktex/tm/packages/bjfuthesis.tar.lzma
-2021/05/29 | 6562718 | systems/win32/miktex/tm/packages/newtx.tar.lzma
2021/05/29 | 655370 | systems/win32/miktex/tm/packages/jlreq.tar.lzma
2021/05/29 | 636766 | systems/win32/miktex/tm/packages/huawei.tar.lzma
2021/05/29 | 635404 | fonts/schulschriften/tex/wesu/wesu_fonttabelle.eps
@@ -1815,7 +2810,6 @@
2021/05/29 | 4249491 | install/macros/latex/contrib/lwarp.tds.zip
2021/05/29 | 42250 | fonts/schulschriften/doc/schulschriften.tex
2021/05/29 | 418975 | systems/win32/miktex/tm/packages/expkv-def.tar.lzma
-2021/05/29 | 4030 | macros/latex/contrib/bjfuthesis/documentation/contents/doc-mainbody.tex
2021/05/29 | 393866 | systems/win32/miktex/tm/packages/fontsize.tar.lzma
2021/05/29 | 38 | fonts/schulschriften/source/wesa/wesabx14.mf
2021/05/29 | 384523 | systems/win32/miktex/tm/packages/einfart.tar.lzma
@@ -1824,7 +2818,6 @@
2021/05/29 | 37 | fonts/schulschriften/source/wela/welabx14.mf
2021/05/29 | 37 | fonts/schulschriften/source/wedn/wednbx14.mf
2021/05/29 | 379598 | systems/win32/miktex/tm/packages/expkv-cs.tar.lzma
-2021/05/29 | 3730032 | systems/win32/miktex/tm/packages/lwarp.tar.lzma
2021/05/29 | 37229 | fonts/schulschriften/source/wesu/wesu14_lig.mf
2021/05/29 | 3668624 | macros/latex/contrib/lwarp.zip
2021/05/29 | 366257 | systems/win32/miktex/tm/packages/projlib.tar.lzma
@@ -1855,7 +2848,6 @@
2021/05/29 | 271335 | systems/win32/miktex/tm/packages/ltximg.tar.lzma
2021/05/29 | 2684280 | info/biblio/sgml.bib
2021/05/29 | 263566 | systems/win32/miktex/tm/packages/pbalance.tar.lzma
-2021/05/29 | 2626486 | systems/win32/miktex/tm/packages/newpx.tar.lzma
2021/05/29 | 2624826 | systems/win32/miktex/tm/packages/xint.tar.lzma
2021/05/29 | 262107 | fonts/xcharter/afm/XCharter-Bold.afm
2021/05/29 | 254252 | fonts/xcharter/afm/XCharter-BoldItalic.afm
@@ -1866,7 +2858,6 @@
2021/05/29 | 2450 | fonts/xcharter/enc/xchTH_osf-t1.enc
2021/05/29 | 2439 | fonts/xcharter/enc/xchTH_osf-ly1.enc
2021/05/29 | 2424 | fonts/xcharter/enc/xchTH_tlf-t1.enc
-2021/05/29 | 240 | macros/latex/contrib/bjfuthesis/documentation/bjfuthesis.tex
2021/05/29 | 240250 | systems/win32/miktex/tm/packages/bmstu-iu8.tar.lzma
2021/05/29 | 23852 | language/japanese/pxjahyper/pxjahyper-ajm.def
2021/05/29 | 2359 | fonts/xcharter/enc/xch1TH_osf-ot1.enc
@@ -1876,10 +2867,8 @@
2021/05/29 | 232360 | fonts/xcharter/type1/XCharter-Bold.pfb
2021/05/29 | 22687686 | systems/win32/miktex/tm/packages/newcomputermodern.tar.lzma
2021/05/29 | 222183 | systems/win32/miktex/tm/packages/babel-spanish.tar.lzma
-2021/05/29 | 22199396 | systems/win32/w32tex/pdftex-w32.tar.xz
2021/05/29 | 217598 | systems/win32/miktex/tm/packages/lualibs.tar.lzma
2021/05/29 | 216 | fonts/schulschriften/source/wela/wela14_end.mf
-2021/05/29 | 2120090 | systems/win32/miktex/tm/packages/siunitx.tar.lzma
2021/05/29 | 211 | fonts/schulschriften/source/wedn/wedn14_end.mf
2021/05/29 | 210 | fonts/schulschriften/source/wesa/wesa14_end.mf
2021/05/29 | 208174 | systems/win32/miktex/tm/packages/mindflow.tar.lzma
@@ -1889,7 +2878,6 @@
2021/05/29 | 194764 | systems/texlive/tlnet/archive/derivative.doc.r59379.tar.xz
2021/05/29 | 188218 | systems/win32/miktex/tm/packages/aalok.tar.lzma
2021/05/29 | 1878488 | fonts/schulschriften.zip
-2021/05/29 | 1875258 | systems/win32/miktex/tm/packages/l3packages.tar.lzma
2021/05/29 | 187343 | fonts/xcharter/type1/XCharter-BoldItalic.pfb
2021/05/29 | 186 | fonts/schulschriften/source/wesu/wesubsl14.mf
2021/05/29 | 1852 | fonts/xcharter/tfm/XCharterTH-BoldItalic-osf-ly1.tfm
@@ -1942,16 +2930,13 @@
2021/05/29 | 1278120 | systems/win32/miktex/tm/packages/econ-bst.tar.lzma
2021/05/29 | 12746 | fonts/schulschriften/source/wesu/wesu14_def.mf
2021/05/29 | 127370 | language/japanese/pxjahyper/pxjahyper.pdf
-2021/05/29 | 124924 | systems/win32/miktex/tm/packages/tiscreen.tar.lzma
2021/05/29 | 124064 | fonts/xcharter/opentype/XCharter-Italic.otf
2021/05/29 | 1163517 | systems/win32/miktex/tm/packages/tuda-ci.tar.lzma
2021/05/29 | 116044 | fonts/xcharter/opentype/XCharter-BoldItalic.otf
2021/05/29 | 1158849 | systems/win32/miktex/tm/packages/tokcycle.tar.lzma
-2021/05/29 | 11571304 | systems/win32/miktex/tm/packages/l3kernel.tar.lzma
2021/05/29 | 11566 | fonts/schulschriften/source/weva/weva14_def.mf
2021/05/29 | 1151308 | systems/texlive/tlnet/archive/tokcycle.doc.r59377.tar.xz
2021/05/29 | 1144 | macros/latex/contrib/keyfloat/README.txt
-2021/05/29 | 11352 | systems/win32/miktex/tm/packages/graphics-def.tar.lzma
2021/05/29 | 1110294 | systems/win32/miktex/tm/packages/luaotfload.tar.lzma
2021/05/29 | 1096137 | systems/win32/miktex/tm/packages/suftesi.tar.lzma
2021/05/29 | 10516 | fonts/schulschriften/source/wesu/wesu14_sz.mf
@@ -1965,16 +2950,12 @@
2021/05/28 | 78016 | systems/texlive/tlnet/archive/l3experimental.source.r59371.tar.xz
2021/05/28 | 750167 | info/translations/biblatex/de.zip
2021/05/28 | 626032 | macros/latex/contrib/fei/fei.pdf
-2021/05/28 | 62584 | macros/latex/contrib/bjfuthesis/example/contents/mainbody.tex
2021/05/28 | 616969 | info/translations/biblatex/de/biblatex-de-Benutzerhandbuch.pdf
-2021/05/28 | 604 | systems/texlive/tlnet/archive/graphics-def.doc.r59369.tar.xz
2021/05/28 | 585385 | language/japanese/jlreq.zip
2021/05/28 | 561376 | info/translations/biblatex/de/biblatex-de-Benutzerhandbuch.tex
2021/05/28 | 5519 | language/japanese/jlreq/README.md
2021/05/28 | 532502 | macros/latex/contrib/fei.zip
-2021/05/28 | 49479628 | systems/win32/w32tex/xetex-w32.tar.xz
2021/05/28 | 46632 | systems/texlive/tlnet/archive/polexpr.doc.r59365.tar.xz
-2021/05/28 | 45779 | macros/latex/contrib/derivative/derivative.sty
2021/05/28 | 455 | systems/texlive/tlnet/update-tlmgr-r59352.sh.sha512.asc
2021/05/28 | 455 | systems/texlive/tlnet/update-tlmgr-r59352.exe.sha512.asc
2021/05/28 | 42892 | systems/texlive/tlnet/archive/tuda-ci.r59370.tar.xz
@@ -1982,10 +2963,7 @@
2021/05/28 | 4038265 | systems/texlive/tlnet/update-tlmgr-r59352.exe
2021/05/28 | 388 | info/translations/biblatex/de/README
2021/05/28 | 387428 | systems/texlive/tlnet/archive/xint.source.r59366.tar.xz
-2021/05/28 | 3815 | macros/latex/contrib/bjfuthesis/example/contents/abstract.tex
2021/05/28 | 361307 | language/japanese/jlreq/jlreq-ja.pdf
-2021/05/28 | 35149 | macros/latex/contrib/bjfuthesis/LICENSE
-2021/05/28 | 34777012 | systems/win32/w32tex/latex.tar.xz
2021/05/28 | 3266472 | systems/texlive/tlnet/archive/l3experimental.doc.r59371.tar.xz
2021/05/28 | 31632 | systems/texlive/tlnet/archive/polexpr.r59365.tar.xz
2021/05/28 | 305928 | macros/latex/contrib/reledmac/reledpar.dtx
@@ -1997,99 +2975,18 @@
2021/05/28 | 230640 | systems/texlive/tlnet/archive/texlive.infra.r59352.tar.xz
2021/05/28 | 22648 | systems/texlive/tlnet/archive/l3experimental.r59371.tar.xz
2021/05/28 | 22570 | macros/latex/contrib/fei/fei-template-sublist.tex
-2021/05/28 | 224 | macros/latex/contrib/bjfuthesis/example/thesis.tex
2021/05/28 | 2153704 | systems/texlive/tlnet/archive/xint.doc.r59366.tar.xz
2021/05/28 | 21399 | macros/latex/contrib/fei/fei-template.tex
2021/05/28 | 207896 | systems/texlive/tlnet/archive/texlive.infra.doc.r59352.tar.xz
-2021/05/28 | 203888 | macros/latex/contrib/derivative.zip
2021/05/28 | 1906 | macros/latex/contrib/fei/README
-2021/05/28 | 18923540 | systems/win32/w32tex/luatex-exp-w32.tar.xz
-2021/05/28 | 18915660 | systems/win32/w32tex/luatex-w32.tar.xz
-2021/05/28 | 18883356 | systems/win32/w32tex/luatex-dev-w32.tar.xz
+2021/05/28 | 18830 | macros/optex/base/colors.opm
2021/05/28 | 183140 | systems/texlive/tlnet/archive/babel-spanish.doc.r59367.tar.xz
-2021/05/28 | 179298 | macros/latex/contrib/derivative/derivative.pdf
2021/05/28 | 166008 | systems/texlive/tlnet/archive/beamer.r59368.tar.xz
2021/05/28 | 154 | systems/texlive/tlnet/update-tlmgr-r59352.exe.sha512
2021/05/28 | 153 | systems/texlive/tlnet/update-tlmgr-r59352.sh.sha512
-2021/05/28 | 1491 | macros/latex/contrib/derivative/README.md
-2021/05/28 | 144810528 | systems/win32/w32tex/context.tar.xz
-2021/05/28 | 130716040 | systems/win32/w32tex/web2c-lib.tar.xz
-2021/05/28 | 1274 | macros/latex/contrib/bjfuthesis/example/contents/acknowledge.tex
2021/05/28 | 117613 | language/japanese/jlreq/jlreq.pdf
2021/05/28 | 115684 | macros/latex/contrib/fei/fei.dtx
2021/05/28 | 1121212 | systems/texlive/tlnet/archive/tuda-ci.doc.r59370.tar.xz
2021/05/28 | 1093 | macros/latex/contrib/hvfloat/doc/examples/preamble.ltx
2021/05/28 | 10938667 | install/language/japanese/jlreq.tds.zip
-2021/05/28 | 10936 | systems/texlive/tlnet/archive/graphics-def.r59369.tar.xz
-2021/05/28 | 10909 | macros/latex/contrib/bjfuthesis/example/bibliography.bib
-2021/05/28 | 101962 | macros/latex/contrib/derivative/derivative.tex
2021/05/28 | 10022848 | systems/texlive/tlnet/update-tlmgr-r59352.sh
-2021/05/27 | 96061 | macros/latex/contrib/l3experimental/l3galley.dtx
-2021/05/27 | 94399 | macros/generic/polexpr.zip
-2021/05/27 | 93939 | macros/latex/contrib/babel-contrib/spanish/spanish.dtx
-2021/05/27 | 77366 | macros/generic/tokcycle/tokcycle-examples.tex
-2021/05/27 | 748 | macros/generic/tokcycle/README
-2021/05/27 | 7476 | macros/latex/contrib/l3experimental/l3draw-scopes.dtx
-2021/05/27 | 73050 | macros/generic/polexpr/polexprsturm.tex
-2021/05/27 | 6716 | macros/generic/polexpr/polexprexpr.tex
-2021/05/27 | 653470 | macros/latex/contrib/l3experimental/l3draw-code.pdf
-2021/05/27 | 6314 | macros/latex/contrib/l3experimental/CHANGELOG.md
-2021/05/27 | 624348 | systems/texlive/tlnet/archive/huawei.doc.r59363.tar.xz
-2021/05/27 | 6064 | systems/texlive/tlnet/archive/huawei.r59363.tar.xz
-2021/05/27 | 604836 | macros/generic/tokcycle/tokcycle-examples.pdf
-2021/05/27 | 600633 | macros/generic/tokcycle/tokcycle-doc.pdf
-2021/05/27 | 58366 | macros/latex/contrib/l3experimental/xgalley.dtx
-2021/05/27 | 5653 | macros/latex/contrib/l3experimental/l3draw-layers.dtx
-2021/05/27 | 53642 | macros/generic/tokcycle/tokcycle-doc.tex
-2021/05/27 | 516603 | macros/latex/contrib/l3experimental/l3draw.pdf
-2021/05/27 | 4448 | macros/latex/contrib/l3experimental/l3draw-state.dtx
-2021/05/27 | 4323 | macros/latex/contrib/l3experimental/l3draw-boxes.dtx
-2021/05/27 | 4244 | macros/generic/polexpr/README.md
-2021/05/27 | 4117900 | install/macros/latex/contrib/l3experimental.tds.zip
-2021/05/27 | 40955 | macros/latex/contrib/l3experimental/l3draw.dtx
-2021/05/27 | 408867 | macros/latex/contrib/l3experimental/l3galley.pdf
-2021/05/27 | 4080906 | macros/latex/contrib/l3experimental.zip
-2021/05/27 | 404327 | macros/latex/contrib/l3experimental/l3bitset.pdf
-2021/05/27 | 4021 | macros/latex/contrib/l3experimental/README.md
-2021/05/27 | 394330 | macros/latex/contrib/l3experimental/xcoffins.pdf
-2021/05/27 | 39429 | macros/generic/polexpr/polexprcore.tex
-2021/05/27 | 38712 | macros/generic/polexpr/polexpr.sty
-2021/05/27 | 383971 | macros/latex/contrib/l3experimental/l3graphics.pdf
-2021/05/27 | 3793 | macros/generic/xint/README.md
-2021/05/27 | 367963 | macros/latex/contrib/l3experimental/l3str-format.pdf
-2021/05/27 | 35115 | macros/latex/contrib/l3experimental/xcoffins.dtx
-2021/05/27 | 347992 | macros/latex/contrib/l3experimental/l3sys-shell.pdf
-2021/05/27 | 32508 | macros/latex/contrib/l3experimental/l3draw-paths.dtx
-2021/05/27 | 31827 | macros/latex/contrib/l3experimental/l3str-format.dtx
-2021/05/27 | 31345 | macros/latex/contrib/l3experimental/l3draw-points.dtx
-2021/05/27 | 3087 | macros/latex/contrib/babel-contrib/spanish/spanish.ins
-2021/05/27 | 308513 | macros/latex/contrib/l3experimental/l3benchmark.pdf
-2021/05/27 | 299 | macros/latex/contrib/babel-contrib/spanish/README.md
-2021/05/27 | 299666 | macros/latex/contrib/l3experimental/xgalley.pdf
-2021/05/27 | 2761284 | install/macros/generic/xint.tds.zip
-2021/05/27 | 273231 | macros/generic/polexpr/polexpr.html
-2021/05/27 | 2649899 | macros/generic/xint.zip
-2021/05/27 | 24858 | macros/latex/contrib/l3experimental/l3graphics.dtx
-2021/05/27 | 213931 | macros/latex/contrib/babel-contrib/spanish.zip
-2021/05/27 | 20451 | macros/latex/contrib/l3experimental/l3draw-softpath.dtx
-2021/05/27 | 1906 | macros/latex/contrib/l3experimental/l3draw.ins
-2021/05/27 | 18658 | macros/latex/contrib/l3experimental/l3bitset.dtx
-2021/05/27 | 18473 | macros/generic/tokcycle/tokcycle.tex
-2021/05/27 | 183681 | macros/latex/contrib/babel-contrib/spanish/spanish.pdf
-2021/05/27 | 1831489 | macros/generic/xint/xint.dtx
-2021/05/27 | 1781 | macros/latex/contrib/tiscreen/tex/tiscreen.sty
-2021/05/27 | 16509 | macros/latex/contrib/l3experimental/l3benchmark.dtx
-2021/05/27 | 1624 | macros/latex/contrib/l3experimental/xgalley.ins
-2021/05/27 | 1569 | macros/latex/contrib/l3experimental/xcoffins.ins
-2021/05/27 | 1565 | macros/latex/contrib/l3experimental/l3sys-shell.ins
-2021/05/27 | 1565 | macros/latex/contrib/l3experimental/l3bitset.ins
-2021/05/27 | 1564 | macros/latex/contrib/l3experimental/l3str.ins
-2021/05/27 | 1558 | macros/latex/contrib/l3experimental/l3benchmark.ins
-2021/05/27 | 1553 | macros/latex/contrib/l3experimental/l3graphics.ins
-2021/05/27 | 1360 | macros/latex/contrib/l3experimental/l3draw-code.tex
-2021/05/27 | 129477 | macros/generic/xint/CHANGES.html
-2021/05/27 | 12258 | macros/latex/contrib/l3experimental/l3sys-shell.dtx
-2021/05/27 | 1194519 | macros/generic/tokcycle.zip
-2021/05/27 | 1158797 | macros/generic/xint/sourcexint.pdf
-2021/05/27 | 1038924 | macros/generic/xint/xint.pdf
-2021/05/27 | 10136 | macros/latex/contrib/l3experimental/l3draw-transforms.dtx
diff --git a/fonts/newtx/README b/fonts/newtx/README
index 7888e3f602..76157b056e 100644
--- a/fonts/newtx/README
+++ b/fonts/newtx/README
@@ -1,10 +1,14 @@
This package, initially based on txfonts, provides many fixes and enhancements to the txfonts package, splitting it into two separate packages---newtxtext and newtxmath, which may be run independently of one another. It provides scaling, improved metrics, and other options. In particular, newtxmath offers a libertine option which substitutes Linux Libertine (provided with TeXLive and MikTeX) italic and Greek letters for the default Times letters, providing a good match for the Libertine text font, which is heavier than Computer Modern but lighter than Times, and in my experience, looks very sharp and clear on the screen.
-Current version: 1.654 2021-05-31
+Current version: 1.655 2021-06-01
This material is subject to the LaTeX Project Public License. See http://www.ctan.org/license/lppl1.3
for the details of that license.
+Changes in version 1.655
+1. Modified definitions of \AmS and \AmSfont so that \AmS now works properly. (Thanks Maurice Hansen.)
+2. Further modifications to metrics in of characters in subscript and subsubscript sizes
+
Changes in version 1.654
Modified metrics in of several characters in subscript and subsubscript sizes, most notably f and x.
diff --git a/fonts/newtx/tex/newtxmath.sty b/fonts/newtx/tex/newtxmath.sty
index c651b1a2a5..991115460d 100644
--- a/fonts/newtx/tex/newtxmath.sty
+++ b/fonts/newtx/tex/newtxmath.sty
@@ -11,8 +11,8 @@
% of glyph collisions.
% These modifications are by Michael Sharpe, msharpe at ucsd dot edu
-\def\fileversion{1.642}
-\def\filedate{2021/03/27}
+\def\fileversion{1.655}
+\def\filedate{2021/06/01}
\ProvidesPackage{newtxmath}[\filedate\space v\fileversion ]
\@ifundefined{newtxmathLoaded}{}{\endinput}
@@ -561,8 +561,10 @@ amssymbols,uprightGreek,nosubscriptcorrection}
\DeclareSymbolFontAlphabet{\symb@ls@lph@}{symbols}
\ifx\AmSfont\@undefined\else
-\renewcommand{\AmSfont}{{%
- \usefont{LMS}{ntxsy}{\if\@xp\@car\f@series\@nil bb\else m\fi}{n}}}
+\renewcommand{\AmS}{{\protect\AmSfont
+ A\kern-.19em\lower.5ex\hbox{M}\kern-.025emS}}
+\renewcommand{\AmSfont}{%
+ \usefont{LMS}{ntxsy}{\if\@xp\@car\f@series\@nil bb\else m\fi}{n}}
\fi
diff --git a/fonts/newtx/tfm/ntxmi05.tfm b/fonts/newtx/tfm/ntxmi05.tfm
index 63265b614d..81037def91 100644
--- a/fonts/newtx/tfm/ntxmi05.tfm
+++ b/fonts/newtx/tfm/ntxmi05.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxmi07.tfm b/fonts/newtx/tfm/ntxmi07.tfm
index a138b39167..d7d4d796c7 100644
--- a/fonts/newtx/tfm/ntxmi07.tfm
+++ b/fonts/newtx/tfm/ntxmi07.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxmi15.tfm b/fonts/newtx/tfm/ntxmi15.tfm
index 6a4463aeb0..612f03f498 100644
--- a/fonts/newtx/tfm/ntxmi15.tfm
+++ b/fonts/newtx/tfm/ntxmi15.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxmi17.tfm b/fonts/newtx/tfm/ntxmi17.tfm
index 338df434e7..69c2944a70 100644
--- a/fonts/newtx/tfm/ntxmi17.tfm
+++ b/fonts/newtx/tfm/ntxmi17.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxmi5.tfm b/fonts/newtx/tfm/ntxmi5.tfm
index 7ff048ced9..0480cab72e 100644
--- a/fonts/newtx/tfm/ntxmi5.tfm
+++ b/fonts/newtx/tfm/ntxmi5.tfm
Binary files differ
diff --git a/fonts/newtx/tfm/ntxmi7.tfm b/fonts/newtx/tfm/ntxmi7.tfm
index e69c578371..275c0d150c 100644
--- a/fonts/newtx/tfm/ntxmi7.tfm
+++ b/fonts/newtx/tfm/ntxmi7.tfm
Binary files differ
diff --git a/fonts/newtx/vf/ntxmi05.vf b/fonts/newtx/vf/ntxmi05.vf
index 1d0e74c20d..dc8b848511 100644
--- a/fonts/newtx/vf/ntxmi05.vf
+++ b/fonts/newtx/vf/ntxmi05.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxmi07.vf b/fonts/newtx/vf/ntxmi07.vf
index 00cf57b0d8..86d540cb0c 100644
--- a/fonts/newtx/vf/ntxmi07.vf
+++ b/fonts/newtx/vf/ntxmi07.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxmi15.vf b/fonts/newtx/vf/ntxmi15.vf
index d55e823e1f..1c305ada06 100644
--- a/fonts/newtx/vf/ntxmi15.vf
+++ b/fonts/newtx/vf/ntxmi15.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxmi17.vf b/fonts/newtx/vf/ntxmi17.vf
index 53cbb9ccbe..f17276ba15 100644
--- a/fonts/newtx/vf/ntxmi17.vf
+++ b/fonts/newtx/vf/ntxmi17.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxmi5.vf b/fonts/newtx/vf/ntxmi5.vf
index 67f4a316af..6a29c8cc3c 100644
--- a/fonts/newtx/vf/ntxmi5.vf
+++ b/fonts/newtx/vf/ntxmi5.vf
Binary files differ
diff --git a/fonts/newtx/vf/ntxmi7.vf b/fonts/newtx/vf/ntxmi7.vf
index ccdc83c880..63c1c78218 100644
--- a/fonts/newtx/vf/ntxmi7.vf
+++ b/fonts/newtx/vf/ntxmi7.vf
Binary files differ
diff --git a/graphics/circuit_macros/CHANGES b/graphics/circuit_macros/CHANGES
index 3d78630bf7..e76300499c 100644
--- a/graphics/circuit_macros/CHANGES
+++ b/graphics/circuit_macros/CHANGES
@@ -1,5 +1,10 @@
CHANGES
+Version 9.6: Tweaked svg examples; macros lg_bartxt, opamp, beginshade,
+ endshade, relaycoil, inductor, source, rotbox; files lib3D, libgen. New
+ macros DIP, g_fet, Fe_fet, shielded, setkeys_, Deltasymbol, Ysymbol,
+ PtoL, ToPos. New options for resistor, capacitor, inductor,
+ transformer, ArcAngle, variable.
Version 9.5: Distribution cleaned and a non utf-8 character removed.
Version 9.4: Changes to examples and additional SVG examples. New
macros RightAngle, PerpTo, langle, ArcAngle, DCsymbol. Rewritten
diff --git a/graphics/circuit_macros/Copying b/graphics/circuit_macros/Copying
index 26840bdaef..04e7385ab8 100644
--- a/graphics/circuit_macros/Copying
+++ b/graphics/circuit_macros/Copying
@@ -1,4 +1,4 @@
-* Circuit_macros Version 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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 1da33f0aa0..b70b3232dc 100644
--- a/graphics/circuit_macros/README
+++ b/graphics/circuit_macros/README
@@ -1,5 +1,5 @@
-* Circuit_macros Version 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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 *
@@ -197,11 +197,11 @@ INTEGRATION WITH OTHER TOOLS:
at https://pypi.org/project/pycirkuit/ and
https://github.com/orestesmas/pycirkuit. For an
introduction, look at the FOSDEM video by Orestes Mas:
- https://ftp.osuosl.org/pub/fosdem/2020/H.2215/pycirkuit.webm
+ https://archive.fosdem.org/2020/schedule/event/pycirkuit/
A python build-automation tool, m4cm, by Peter Jan Randewijk is at
- https://m4cmpy.wordpress.com/
- with very clear instructions about getting started with Circuit_macros at
+ https://m4cmpy.wordpress.com/ and very clear instructions about getting
+ started with Circuit_macros are at
https://m4cmpy.wordpress.com/2020/02/23/getting-started-with-m4-circuit-macros/
Fabrice Salvaire has a blog and a useful bash script at
@@ -231,13 +231,16 @@ INTEGRATION WITH OTHER TOOLS:
LaTeX automation tools are discussed at, for example,
http://tex.stackexchange.com/questions/64/tools-for-automating-document-compilation
+ A Windows batch file for Circuit_macros is found at
+ http://someonehasdonethis.blogspot.ca/2012/12/a-solution-for-drawing-circuit-diagrams.html
+
Mac users:
+ A nice description of a Mac installation is at
+ https://www.hamish.science/2020/06/24/circuitmacros
+
A previewer app for Mac OS X written by Collin J. Delker is available at
http://www.collindelker.com/wp/2013/04/circuit_macros_previewer/
- A Windows batch file for Circuit_macros is found at
- http://someonehasdonethis.blogspot.ca/2012/12/a-solution-for-drawing-circuit-diagrams.html
-
VARIATIONS
Macros such as these inevitably will be modified to suit individual
needs and taste. They continue to evolve in my own library as I use
diff --git a/graphics/circuit_macros/darrow.m4 b/graphics/circuit_macros/darrow.m4
index c3183ccd2c..859cd7f4ff 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 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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/CapacitorsMan.m4 b/graphics/circuit_macros/doc/CapacitorsMan.m4
new file mode 100644
index 0000000000..7234cea453
--- /dev/null
+++ b/graphics/circuit_macros/doc/CapacitorsMan.m4
@@ -0,0 +1,41 @@
+.PS
+# `CapacitorsMan.m4'
+cct_init
+divert(-1)
+
+divert(0)dnl
+
+movewid = 2 pt__
+hm = 2.05
+vm = 0.28
+{ {capacitor ; move ;"`{\tt capacitor}'" ljust}
+ move right_ hm
+ {capacitor(,C); move ;"`{\tt capacitor(,C)}'" ljust}
+ move right_ hm
+ {capacitor(,C+); move ;"`{\tt capacitor(,C+)}'" ljust}
+}
+ move down vm; right_
+{ {capacitor(,P); move ;"`{\tt capacitor(,P)}'" ljust}
+ move right_ hm
+ {capacitor(,E); move ;"`{\tt capacitor(,E)}'" ljust}
+ move right_ hm
+ {capacitor(,K); move ;"`{\tt capacitor(,K)}'" ljust}
+}
+ move down 0.25; right_
+{ {capacitor(,M); move ;"`{\tt capacitor(,M)}'" ljust}
+ move right_ hm
+ {capacitor(,N); move ;"`{\tt capacitor(,N)}'" ljust}
+ move right_ hm
+ {xtal ; move ;"`{\tt xtal}'" ljust}
+}
+ move down 0.25; right_
+{ {capacitor(,dC); move ;"`{\tt capacitor(,dC)}'" ljust}
+ move right_ hm
+ {capacitor(,dF); move ;"`{\tt capacitor(,dF)}'" ljust}
+ move right_ hm
+ {variable(`capacitor',NN,-30,dimen_/3)
+ move ;`"{\tt variable(}`{\tt capacitor',}"' ljust \
+ `"{\enskip\tt NN,-30,dimen\_/3)}"' ljust
+ }
+}
+.PE
diff --git a/graphics/circuit_macros/doc/Capture.JPG b/graphics/circuit_macros/doc/Capture.JPG
deleted file mode 100644
index 8819dece9c..0000000000
--- a/graphics/circuit_macros/doc/Capture.JPG
+++ /dev/null
Binary files differ
diff --git a/graphics/circuit_macros/doc/CctTable.tex b/graphics/circuit_macros/doc/CctTable.tex
deleted file mode 100644
index ee442a4f3b..0000000000
--- a/graphics/circuit_macros/doc/CctTable.tex
+++ /dev/null
@@ -1,858 +0,0 @@
-\begin{tikzpicture}[scale=2.54]
-% dpic version 2020.03.01 option -g for TikZ and PGF 1.01
-\ifx\dpiclw\undefined\newdimen\dpiclw\fi
-\global\def\dpicdraw{\draw[line width=\dpiclw]}
-\global\def\dpicstop{;}
-\dpiclw=0.8bp
-\dpiclw=0.8bp
-\dpicdraw (0,0)
- --(0.25,0)
- --(0.270833,0.041667)
- --(0.3125,-0.041667)
- --(0.354167,0.041667)
- --(0.395833,-0.041667)
- --(0.4375,0.041667)
- --(0.479167,-0.041667)
- --(0.5,0)
- --(0.75,0)\dpicstop
-\draw (0.777674,0) node[right=-2bp]{{\tt resistor}};
-\dpicdraw (2.05,0)
- --(2.3,0)
- --(2.341667,0.083333)
- --(2.383333,0)
- --(2.425,0.083333)
- --(2.466667,0)
- --(2.508333,0.083333)
- --(2.55,0)
- --(2.55,0)
- --(2.8,0)\dpicstop
-\draw (2.827674,0) node[right=-2bp]{\tt resistor(,{,}Q) };
-\dpicdraw (4.1,0)
- --(4.35,0)\dpicstop
-\dpicdraw (4.6,0)
- --(4.6,0.05)
- --(4.35,0.05)
- --(4.35,-0.05)
- --(4.6,-0.05)
- --(4.6,0)\dpicstop
-\dpicdraw (4.6,0)
- --(4.85,0)\dpicstop
-\draw (4.877674,0) node[right=-2bp]{\shortstack[l]{\tt resistor(,{,}E)\\ {\tt $\equiv$ ebox}}};
-\dpicdraw (0,-0.28)
- --(0.25,-0.28)\dpicstop
-\dpicdraw (0.5,-0.28)
- --(0.5,-0.23)
- --(0.25,-0.23)
- --(0.25,-0.33)
- --(0.5,-0.33)
- --(0.5,-0.28)\dpicstop
-\dpicdraw (0.5,-0.28)
- --(0.75,-0.28)\dpicstop
-\dpicdraw (0.45,-0.23)
- --(0.3,-0.33)\dpicstop
-\draw (0.777674,-0.28) node[right=-2bp]{\tt resistor(,{,}ES) };
-\dpicdraw (2.05,-0.28)
- --(2.3,-0.28)
- --(2.3,-0.221667)
- --(2.35,-0.221667)
- --(2.35,-0.28)
- --(2.4,-0.28)
- --(2.4,-0.221667)
- --(2.45,-0.221667)
- --(2.45,-0.28)
- --(2.5,-0.28)
- --(2.5,-0.221667)
- --(2.55,-0.221667)
- --(2.55,-0.28)
- --(2.55,-0.28)
- --(2.8,-0.28)\dpicstop
-\draw (2.827674,-0.28) node[right=-2bp]{\tt resistor(,{,}H) };
-\dpicdraw (4.1,-0.28)
- --(4.35,-0.28)\dpicstop
-\global\let\dpicshdraw=\dpicdraw\global\def\dpicdraw{}
-\global\def\dpicstop{--}
-\dpicshdraw[fill=white!50!black]
-\dpicdraw (4.6,-0.28)
- --(4.6,-0.23)
- --(4.35,-0.23)
- --(4.35,-0.33)
- --(4.6,-0.33)
- --(4.6,-0.28)\dpicstop
-cycle; \global\let\dpicdraw=\dpicshdraw\global\def\dpicstop{;}
-\dpicdraw (4.6,-0.28)
- --(4.85,-0.28)\dpicstop
-\draw (4.877674,-0.28) node[right=-2bp]{{\tt ebox(,{,},0.5)}};
-\dpicdraw (0,-0.56)
- --(0.25,-0.56)\dpicstop
-\global\let\dpicshdraw=\dpicdraw\global\def\dpicdraw{}
-\global\def\dpicstop{--}
-\dpicshdraw[fill=white!0!black]
-\dpicdraw (0.25,-0.56)
- --(0.25,-0.6225)
- --(0.375,-0.56)
- --(0.25,-0.56)\dpicstop
-cycle; \global\let\dpicdraw=\dpicshdraw\global\def\dpicstop{;}
-\global\let\dpicshdraw=\dpicdraw\global\def\dpicdraw{}
-\global\def\dpicstop{--}
-\dpicshdraw[fill=white!0!black]
-\dpicdraw (0.5,-0.56)
- --(0.5,-0.4975)
- --(0.375,-0.56)
- --(0.5,-0.56)\dpicstop
-cycle; \global\let\dpicdraw=\dpicshdraw\global\def\dpicstop{;}
-\dpicdraw (0.5,-0.56)
- --(0.75,-0.56)\dpicstop
-\draw (0.777674,-0.56) node[right=-2bp]{{\tt resistor(,{,}V)}};
-\dpicdraw (2.05,-0.61)
- --(2.375,-0.61)
- --(2.375,-0.41)
- --(2.425,-0.36)
- --(2.475,-0.41)
- --(2.475,-0.61)
- --(2.8,-0.61)\dpicstop
-\dpicdraw[fill=black](2.425,-0.36) circle (0.007874in)\dpicstop
-\draw (2.827674,-0.61) node[right=-2bp]{{\tt thermocouple}};
-\dpicdraw (4.1,-0.56)
- --(4.225,-0.56)\dpicstop
-\dpicdraw (4.725,-0.56)
- --(4.725,-0.41)
- --(4.225,-0.41)
- --(4.225,-0.71)
- --(4.725,-0.71)
- --(4.725,-0.56)\dpicstop
-\dpicdraw (4.725,-0.56)
- --(4.85,-0.56)\dpicstop
-\draw (4.877674,-0.56) node[right=-2bp]{{\tt ebox(,0.5,0.3)}};
-\dpicdraw (0,-0.84)
- --(0.25,-0.84)\dpicstop
-\dpicdraw (0.25,-0.84)
- --(0.25,-0.845556)\dpicstop
-\dpicdraw (0.25,-0.84)
- ..controls (0.25,-0.822741) and (0.263991,-0.80875)
- ..(0.28125,-0.80875)
- ..controls (0.298509,-0.80875) and (0.3125,-0.822741)
- ..(0.3125,-0.84)\dpicstop
-\dpicdraw (0.3125,-0.84)
- --(0.3125,-0.845556)\dpicstop
-\dpicdraw (0.3125,-0.84)
- ..controls (0.3125,-0.822741) and (0.326491,-0.80875)
- ..(0.34375,-0.80875)
- ..controls (0.361009,-0.80875) and (0.375,-0.822741)
- ..(0.375,-0.84)\dpicstop
-\dpicdraw (0.375,-0.84)
- --(0.375,-0.845556)\dpicstop
-\dpicdraw (0.375,-0.84)
- ..controls (0.375,-0.822741) and (0.388991,-0.80875)
- ..(0.40625,-0.80875)
- ..controls (0.423509,-0.80875) and (0.4375,-0.822741)
- ..(0.4375,-0.84)\dpicstop
-\dpicdraw (0.4375,-0.84)
- --(0.4375,-0.845556)\dpicstop
-\dpicdraw (0.4375,-0.84)
- ..controls (0.4375,-0.822741) and (0.451491,-0.80875)
- ..(0.46875,-0.80875)
- ..controls (0.486009,-0.80875) and (0.5,-0.822741)
- ..(0.5,-0.84)\dpicstop
-\dpicdraw (0.5,-0.84)
- --(0.5,-0.845556)\dpicstop
-\dpicdraw (0.5,-0.84)
- --(0.75,-0.84)\dpicstop
-\draw (0.777674,-0.84) node[right=-2bp]{{\tt inductor}};
-\dpicdraw (2.05,-0.84)
- --(2.283266,-0.84)\dpicstop
-\dpicdraw[line width=0.4bp](2.283266,-0.84) circle (0.00109in)\dpicstop
-\dpicdraw (2.283266,-0.84)
- ..controls (2.265746,-0.802428) and (2.298931,-0.761082)
- ..(2.339404,-0.770054)
- ..controls (2.379877,-0.779027) and (2.392478,-0.830524)
- ..(2.360721,-0.857171)\dpicstop
-\dpicdraw[line width=0.4bp](2.360721,-0.857171) circle (0.00109in)\dpicstop
-\dpicdraw (2.360721,-0.857171)
- ..controls (2.324962,-0.827166) and (2.34618,-0.768869)
- ..(2.392861,-0.768869)
- ..controls (2.439541,-0.768869) and (2.460759,-0.827166)
- ..(2.425,-0.857171)\dpicstop
-\dpicdraw[line width=0.4bp](2.425,-0.857171) circle (0.00109in)\dpicstop
-\dpicdraw (2.425,-0.857171)
- ..controls (2.389241,-0.827166) and (2.410459,-0.768869)
- ..(2.457139,-0.768869)
- ..controls (2.50382,-0.768869) and (2.525038,-0.827166)
- ..(2.489279,-0.857171)\dpicstop
-\dpicdraw[line width=0.4bp](2.489279,-0.857171) circle (0.00109in)\dpicstop
-\dpicdraw (2.489279,-0.857171)
- ..controls (2.457522,-0.830524) and (2.470123,-0.779027)
- ..(2.510596,-0.770054)
- ..controls (2.551069,-0.761082) and (2.584254,-0.802428)
- ..(2.566734,-0.84)\dpicstop
-\dpicdraw[line width=0.4bp](2.566734,-0.84) circle (0.00109in)\dpicstop
-\dpicdraw (2.566734,-0.84)
- --(2.8,-0.84)\dpicstop
-\draw (2.827674,-0.84) node[right=-2bp]{{\tt inductor(,W)}};
-\dpicdraw (4.1,-0.84)
- --(4.35,-0.84)\dpicstop
-\dpicdraw[line width=0.4bp](4.35,-0.84) circle (0.00109in)\dpicstop
-\dpicdraw (4.35,-0.84)
- ..controls (4.35,-0.805625) and (4.364625,-0.7775)
- ..(4.3825,-0.7775)
- ..controls (4.400375,-0.7775) and (4.415,-0.797188)
- ..(4.415,-0.82125)
- ..controls (4.415,-0.845313) and (4.40825,-0.865)
- ..(4.4,-0.865)
- ..controls (4.39175,-0.865) and (4.385,-0.845313)
- ..(4.385,-0.82125)
- ..controls (4.385,-0.797188) and (4.403,-0.7775)
- ..(4.425,-0.7775)
- ..controls (4.447,-0.7775) and (4.465,-0.797188)
- ..(4.465,-0.82125)
- ..controls (4.465,-0.845313) and (4.45825,-0.865)
- ..(4.45,-0.865)
- ..controls (4.44175,-0.865) and (4.435,-0.845313)
- ..(4.435,-0.82125)
- ..controls (4.435,-0.797188) and (4.453,-0.7775)
- ..(4.475,-0.7775)
- ..controls (4.497,-0.7775) and (4.515,-0.797188)
- ..(4.515,-0.82125)
- ..controls (4.515,-0.845313) and (4.50825,-0.865)
- ..(4.5,-0.865)
- ..controls (4.49175,-0.865) and (4.485,-0.845313)
- ..(4.485,-0.82125)
- ..controls (4.485,-0.797188) and (4.503,-0.7775)
- ..(4.525,-0.7775)
- ..controls (4.547,-0.7775) and (4.565,-0.797188)
- ..(4.565,-0.82125)
- ..controls (4.565,-0.845313) and (4.55825,-0.865)
- ..(4.55,-0.865)
- ..controls (4.54175,-0.865) and (4.535,-0.845313)
- ..(4.535,-0.82125)
- ..controls (4.535,-0.797188) and (4.549625,-0.7775)
- ..(4.5675,-0.7775)
- ..controls (4.585375,-0.7775) and (4.6,-0.805625)
- ..(4.6,-0.84)\dpicstop
-\dpicdraw[line width=0.4bp](4.6,-0.84) circle (0.00109in)\dpicstop
-\dpicdraw (4.6,-0.84)
- --(4.85,-0.84)\dpicstop
-\draw (4.877674,-0.84) node[right=-2bp]{{\tt inductor(,L)}};
-\dpicdraw (0,-1.12)
- --(0.25,-1.12)\dpicstop
-\dpicdraw (0.25,-1.12)
- --(0.25,-1.125556)\dpicstop
-\dpicdraw (0.25,-1.12)
- ..controls (0.25,-1.102741) and (0.263991,-1.08875)
- ..(0.28125,-1.08875)
- ..controls (0.298509,-1.08875) and (0.3125,-1.102741)
- ..(0.3125,-1.12)\dpicstop
-\dpicdraw (0.3125,-1.12)
- --(0.3125,-1.125556)\dpicstop
-\dpicdraw (0.3125,-1.12)
- ..controls (0.3125,-1.102741) and (0.326491,-1.08875)
- ..(0.34375,-1.08875)
- ..controls (0.361009,-1.08875) and (0.375,-1.102741)
- ..(0.375,-1.12)\dpicstop
-\dpicdraw (0.375,-1.12)
- --(0.375,-1.125556)\dpicstop
-\dpicdraw (0.375,-1.12)
- ..controls (0.375,-1.102741) and (0.388991,-1.08875)
- ..(0.40625,-1.08875)
- ..controls (0.423509,-1.08875) and (0.4375,-1.102741)
- ..(0.4375,-1.12)\dpicstop
-\dpicdraw (0.4375,-1.12)
- --(0.4375,-1.125556)\dpicstop
-\dpicdraw (0.4375,-1.12)
- ..controls (0.4375,-1.102741) and (0.451491,-1.08875)
- ..(0.46875,-1.08875)
- ..controls (0.486009,-1.08875) and (0.5,-1.102741)
- ..(0.5,-1.12)\dpicstop
-\dpicdraw (0.5,-1.12)
- --(0.5,-1.125556)\dpicstop
-\dpicdraw (0.5,-1.12)
- --(0.75,-1.12)\dpicstop
-\dpicdraw (0.25,-1.067917)
- --(0.5,-1.067917)\dpicstop
-\dpicdraw (0.25,-1.036667)
- --(0.5,-1.036667)\dpicstop
-\draw (0.777674,-1.12) node[right=-2bp]{{\tt inductor(,{,},M)}};
-\dpicdraw (2.05,-1.12)
- --(2.218988,-1.12)\dpicstop
-\dpicdraw[line width=0.4bp](2.218988,-1.12) circle (0.00109in)\dpicstop
-\dpicdraw (2.218988,-1.12)
- ..controls (2.201468,-1.082428) and (2.234652,-1.041082)
- ..(2.275125,-1.050054)
- ..controls (2.315598,-1.059027) and (2.3282,-1.110524)
- ..(2.296442,-1.137171)\dpicstop
-\dpicdraw[line width=0.4bp](2.296442,-1.137171) circle (0.00109in)\dpicstop
-\dpicdraw (2.296442,-1.137171)
- ..controls (2.260683,-1.107166) and (2.281901,-1.048869)
- ..(2.328582,-1.048869)
- ..controls (2.375262,-1.048869) and (2.396481,-1.107166)
- ..(2.360721,-1.137171)\dpicstop
-\dpicdraw[line width=0.4bp](2.360721,-1.137171) circle (0.00109in)\dpicstop
-\dpicdraw (2.360721,-1.137171)
- ..controls (2.324962,-1.107166) and (2.34618,-1.048869)
- ..(2.392861,-1.048869)
- ..controls (2.439541,-1.048869) and (2.460759,-1.107166)
- ..(2.425,-1.137171)\dpicstop
-\dpicdraw[line width=0.4bp](2.425,-1.137171) circle (0.00109in)\dpicstop
-\dpicdraw (2.425,-1.137171)
- ..controls (2.389241,-1.107166) and (2.410459,-1.048869)
- ..(2.457139,-1.048869)
- ..controls (2.50382,-1.048869) and (2.525038,-1.107166)
- ..(2.489279,-1.137171)\dpicstop
-\dpicdraw[line width=0.4bp](2.489279,-1.137171) circle (0.00109in)\dpicstop
-\dpicdraw (2.489279,-1.137171)
- ..controls (2.453519,-1.107166) and (2.474738,-1.048869)
- ..(2.521418,-1.048869)
- ..controls (2.568099,-1.048869) and (2.589317,-1.107166)
- ..(2.553558,-1.137171)\dpicstop
-\dpicdraw[line width=0.4bp](2.553558,-1.137171) circle (0.00109in)\dpicstop
-\dpicdraw (2.553558,-1.137171)
- ..controls (2.5218,-1.110524) and (2.534402,-1.059027)
- ..(2.574875,-1.050054)
- ..controls (2.615348,-1.041082) and (2.648532,-1.082428)
- ..(2.631012,-1.12)\dpicstop
-\dpicdraw[line width=0.4bp](2.631012,-1.12) circle (0.00109in)\dpicstop
-\dpicdraw (2.631012,-1.12)
- --(2.8,-1.12)\dpicstop
-\dpicdraw[dash pattern=on 0.032415in off 0.032415in](2.214303,-1.028036)
- --(2.635697,-1.028036)\dpicstop
-\dpicdraw[dash pattern=on 0.032415in off 0.032415in](2.214303,-0.996786)
- --(2.635697,-0.996786)\dpicstop
-\draw (2.827674,-1.12) node[right=-2bp]{{\tt inductor(,W,6,P)}};
-\dpicdraw (4.3,-1.12)
- --(4.51875,-1.12)\dpicstop
-\dpicdraw (4.553969,-1.08875)
- --(4.51875,-1.08875)
- --(4.51875,-1.15125)
- --(4.553969,-1.15125)\dpicstop
-\dpicdraw (4.675,-1.12) circle (0.049213in)\dpicstop
-\draw (4.675,-1.12) node{G};
-\dpicdraw (4.796031,-1.08875)
- --(4.83125,-1.08875)
- --(4.83125,-1.15125)
- --(4.796031,-1.15125)\dpicstop
-\dpicdraw (4.83125,-1.12)
- --(5.05,-1.12)\dpicstop
-\draw (5.077674,-1.12) node[right=-2bp]{{\tt ttmotor(,G)}};
-\dpicdraw (0,-1.4)
- --(0.35,-1.4)\dpicstop
-\dpicdraw (0.35,-1.483333)
- --(0.35,-1.316667)\dpicstop
-\dpicdraw (0.4,-1.483333)
- --(0.4,-1.316667)\dpicstop
-\dpicdraw (0.4,-1.4)
- --(0.75,-1.4)\dpicstop
-\draw (0.777674,-1.4) node[right=-2bp]{{\tt capacitor}};
-\dpicdraw (2.05,-1.4)
- --(2.4,-1.4)\dpicstop
-\dpicdraw (2.4,-1.4625)
- --(2.4,-1.3375)\dpicstop
-\dpicdraw (2.45,-1.4625)
- ..controls (2.427671,-1.423825) and (2.427671,-1.376175)
- ..(2.45,-1.3375)\dpicstop
-\dpicdraw (2.433253,-1.4)
- --(2.8,-1.4)\dpicstop
-\draw (2.827674,-1.4) node[right=-2bp]{{\tt capacitor(,C)}};
-\dpicdraw (4.1,-1.4)
- --(4.45,-1.4)\dpicstop
-\dpicdraw (4.45,-1.4625)
- --(4.45,-1.3375)\dpicstop
-\dpicdraw (4.5,-1.4625)
- ..controls (4.477671,-1.423825) and (4.477671,-1.376175)
- ..(4.5,-1.3375)\dpicstop
-\dpicdraw (4.483253,-1.4)
- --(4.85,-1.4)\dpicstop
-\dpicdraw[line width=0.5bp](4.429167,-1.441667)
- --(4.3875,-1.441667)\dpicstop
-\dpicdraw[line width=0.5bp](4.408333,-1.420833)
- --(4.408333,-1.4625)\dpicstop
-\draw (4.877674,-1.4) node[right=-2bp]{{\tt capacitor(,C+)}};
-\dpicdraw (0,-1.68)
- --(0.35,-1.68)\dpicstop
-\dpicdraw (0.4,-1.7425)
- --(0.35,-1.7425)
- --(0.35,-1.6175)
- --(0.4,-1.6175)\dpicstop
-\dpicdraw (0.383333,-1.726875)
- --(0.383333,-1.633125)\dpicstop
-\dpicdraw (0.383333,-1.68)
- --(0.75,-1.68)\dpicstop
-\draw (0.777674,-1.68) node[right=-2bp]{{\tt capacitor(,P)}};
-\dpicdraw (2.05,-1.68)
- --(2.375,-1.68)\dpicstop
-\dpiclw=0.4bp
-\dpicdraw (2.40625,-1.68)
- --(2.40625,-1.63)
- --(2.375,-1.63)
- --(2.375,-1.73)
- --(2.40625,-1.73)
- --(2.40625,-1.68)\dpicstop
-\global\let\dpicshdraw=\dpicdraw\global\def\dpicdraw{}
-\global\def\dpicstop{--}
-\dpicshdraw[fill=white!0!black]
-\dpicdraw (2.44375,-1.68)
- --(2.44375,-1.63)
- --(2.475,-1.63)
- --(2.475,-1.73)
- --(2.44375,-1.73)
- --(2.44375,-1.68)\dpicstop
-cycle; \global\let\dpicdraw=\dpicshdraw\global\def\dpicstop{;}
-\dpiclw=0.8bp
-\dpicdraw (2.475,-1.68)
- --(2.8,-1.68)\dpicstop
-\draw (2.827674,-1.68) node[right=-2bp]{{\tt capacitor(,E)}};
-\dpicdraw (4.1,-1.68)
- --(4.425,-1.68)\dpicstop
-\global\let\dpicshdraw=\dpicdraw\global\def\dpicdraw{}
-\global\def\dpicstop{--}
-\dpicshdraw[fill=white!0!black]
-\dpicdraw (4.45625,-1.68)
- --(4.45625,-1.63)
- --(4.425,-1.63)
- --(4.425,-1.73)
- --(4.45625,-1.73)
- --(4.45625,-1.68)\dpicstop
-cycle; \global\let\dpicdraw=\dpicshdraw\global\def\dpicstop{;}
-\global\let\dpicshdraw=\dpicdraw\global\def\dpicdraw{}
-\global\def\dpicstop{--}
-\dpicshdraw[fill=white!0!black]
-\dpicdraw (4.49375,-1.68)
- --(4.49375,-1.63)
- --(4.525,-1.63)
- --(4.525,-1.73)
- --(4.49375,-1.73)
- --(4.49375,-1.68)\dpicstop
-cycle; \global\let\dpicdraw=\dpicshdraw\global\def\dpicstop{;}
-\dpicdraw (4.525,-1.68)
- --(4.85,-1.68)\dpicstop
-\draw (4.877674,-1.68) node[right=-2bp]{{\tt capacitor(,K)}};
-\dpicdraw (0,-1.93)
- --(0.325,-1.93)\dpicstop
-\dpiclw=0.4bp
-\dpicdraw (0.35625,-1.93)
- --(0.35625,-1.88)
- --(0.325,-1.88)
- --(0.325,-1.98)
- --(0.35625,-1.98)
- --(0.35625,-1.93)\dpicstop
-\dpicdraw (0.39375,-1.93)
- --(0.39375,-1.88)
- --(0.425,-1.88)
- --(0.425,-1.98)
- --(0.39375,-1.98)
- --(0.39375,-1.93)\dpicstop
-\dpiclw=0.8bp
-\dpicdraw (0.425,-1.93)
- --(0.75,-1.93)\dpicstop
-\draw (0.777674,-1.93) node[right=-2bp]{{\tt capacitor(,M)}};
-\dpicdraw (2.05,-1.93)
- --(2.391667,-1.93)\dpicstop
-\dpicdraw (2.422917,-1.93)
- --(2.422917,-1.88)
- --(2.391667,-1.88)
- --(2.391667,-1.98)
- --(2.422917,-1.98)
- --(2.422917,-1.93)\dpicstop
-\dpicdraw (2.458333,-1.88)
- --(2.458333,-1.98)\dpicstop
-\dpicdraw (2.458333,-1.93)
- --(2.8,-1.93)\dpicstop
-\draw (2.827674,-1.93) node[right=-2bp]{{\tt capacitor(,N)}};
-\dpicdraw (4.1,-1.93)
- --(4.433333,-1.93)\dpicstop
-\dpicdraw (4.433333,-1.971667)
- --(4.433333,-1.888333)\dpicstop
-\dpicdraw (4.454167,-1.93)
- --(4.454167,-1.8675)
- --(4.495833,-1.8675)
- --(4.495833,-1.9925)
- --(4.454167,-1.9925)
- --(4.454167,-1.93)\dpicstop
-\dpicdraw (4.516667,-1.971667)
- --(4.516667,-1.888333)\dpicstop
-\dpicdraw (4.516667,-1.93)
- --(4.85,-1.93)\dpicstop
-\draw (4.877674,-1.93) node[right=-2bp]{{\tt xtal}};
-\dpicdraw (0,-2.18)
- --(0.25,-2.18)\dpicstop
-\dpicdraw (0.5,-2.18)
- --(0.5,-2.13)
- --(0.25,-2.13)
- --(0.25,-2.23)
- --(0.5,-2.23)
- --(0.5,-2.18)\dpicstop
-\dpicdraw (0.25,-2.18)
- --(0.29,-2.18)
- --(0.29,-2.155)
- --(0.33,-2.155)
- --(0.33,-2.205)
- --(0.37,-2.205)
- --(0.37,-2.155)
- --(0.41,-2.155)
- --(0.41,-2.18)
- --(0.45,-2.18)\dpicstop
-\global\let\dpicshdraw=\dpicdraw\global\def\dpicdraw{}
-\global\def\dpicstop{--}
-\dpicshdraw[fill=white!0!black]
-\dpicdraw (0.5125,-2.18)
- --(0.5125,-2.13)
- --(0.45,-2.13)
- --(0.45,-2.23)
- --(0.5125,-2.23)
- --(0.5125,-2.18)\dpicstop
-cycle; \global\let\dpicdraw=\dpicshdraw\global\def\dpicstop{;}
-\dpicdraw (0.5125,-2.18)
- --(0.7625,-2.18)\dpicstop
-\draw (0.777674,-2.18) node[right=-2bp]{{\tt memristor}};
-\dpicdraw (2.05,-2.18)
- --(2.3,-2.18)\dpicstop
-\dpicdraw (2.55,-2.18)
- --(2.55,-2.13)
- --(2.3,-2.13)
- --(2.3,-2.23)
- --(2.55,-2.23)
- --(2.55,-2.18)\dpicstop
-\dpicdraw (2.3625,-2.13)
- --(2.3625,-2.23)\dpicstop
-\dpicdraw (2.425,-2.13)
- --(2.425,-2.23)\dpicstop
-\dpicdraw (2.4875,-2.13)
- --(2.4875,-2.23)\dpicstop
-\dpicdraw (2.55,-2.18)
- --(2.8,-2.18)\dpicstop
-\draw (2.827674,-2.18) node[right=-2bp]{{\tt heater}};
-\dpicdraw (4.6625,-2.18)
- --(4.85,-2.18)\dpicstop
-\dpicdraw (4.1,-2.18)
- --(4.308333,-2.18)\dpicstop
-\dpicdraw[line width=0.4bp](4.308333,-2.18) circle (0.00109in)\dpicstop
-\dpicdraw (4.308333,-2.221667)
- --(4.641667,-2.221667)\dpicstop
-\dpicdraw (4.641667,-2.221667)
- ..controls (4.653173,-2.221667) and (4.6625,-2.203012)
- ..(4.6625,-2.18)
- ..controls (4.6625,-2.156988) and (4.653173,-2.138333)
- ..(4.641667,-2.138333)\dpicstop
-\dpicdraw (4.641667,-2.138333)
- --(4.308333,-2.138333)\dpicstop
-\dpicdraw (4.308333,-2.138333)
- ..controls (4.296827,-2.138333) and (4.2875,-2.156988)
- ..(4.2875,-2.18)
- ..controls (4.2875,-2.203012) and (4.296827,-2.221667)
- ..(4.308333,-2.221667)
- ..controls (4.31984,-2.221667) and (4.329167,-2.203012)
- ..(4.329167,-2.18)
- ..controls (4.329167,-2.156988) and (4.31984,-2.138333)
- ..(4.308333,-2.138333)\dpicstop
-\draw (4.877674,-2.18) node[right=-2bp]{{\tt tline}};
-\dpicdraw[fill=black](0,-2.38) circle (0.007874in)\dpicstop
-\dpicdraw[fill=black](0.75,-2.38) circle (0.007874in)\dpicstop
-\draw (0.777674,-2.38) node[right=-2bp]{{\tt gap}};
-\dpicdraw[fill=black](2.05,-2.43) circle (0.007874in)\dpicstop
-\dpicdraw[fill=black](2.8,-2.43) circle (0.007874in)\dpicstop
-\filldraw[line width=0bp](2.64,-2.455)
- --(2.74,-2.43)
- --(2.64,-2.405) --cycle\dpicstop
-\dpicdraw (2.11,-2.43)
- --(2.717094,-2.43)\dpicstop
-\draw (2.827674,-2.43) node[right=-2bp]{{\tt gap(,{,}A)}};
-\dpicdraw (4.1,-2.43)
- --(4.85,-2.43)\dpicstop
-\filldraw[line width=0bp](4.425,-2.455)
- --(4.525,-2.43)
- --(4.425,-2.405) --cycle\dpicstop
-\dpicdraw (4.425,-2.43)
- --(4.502094,-2.43)\dpicstop
-\draw (4.877674,-2.43) node[right=-2bp]{{\tt arrowline}};
-\dpicdraw (0,-2.68)
- --(0.325,-2.68)
- --(0.325,-2.52375)\dpicstop
-\dpicdraw (0.325,-2.52375)
- ..controls (0.325,-2.489264) and (0.339567,-2.46125)
- ..(0.3575,-2.46125)
- ..controls (0.375433,-2.46125) and (0.39,-2.480859)
- ..(0.39,-2.505)
- ..controls (0.39,-2.529141) and (0.383277,-2.54875)
- ..(0.375,-2.54875)
- ..controls (0.366723,-2.54875) and (0.36,-2.529141)
- ..(0.36,-2.505)
- ..controls (0.36,-2.480859) and (0.374567,-2.46125)
- ..(0.3925,-2.46125)
- ..controls (0.410433,-2.46125) and (0.425,-2.489264)
- ..(0.425,-2.52375)\dpicstop
-\dpicdraw (0.425,-2.52375)
- --(0.425,-2.68)
- --(0.75,-2.68)\dpicstop
-\dpicdraw (0.375,-2.52375) circle (0.03937in)\dpicstop
-\draw (0.777674,-2.68) node[right=-2bp]{{\tt lamp}};
-\dpicdraw (2.05,-2.68)
- --(2.225,-2.68)\dpicstop
-\dpicdraw (2.625,-2.68)
- ..controls (2.624554,-2.672786) and (2.623417,-2.664086)
- ..(2.622464,-2.660589)
- ..controls (2.621511,-2.657091) and (2.619497,-2.651585)
- ..(2.617969,-2.648304)
- ..controls (2.616442,-2.645022) and (2.613514,-2.639948)
- ..(2.611437,-2.636982)
- ..controls (2.609359,-2.634016) and (2.605593,-2.629528)
- ..(2.603033,-2.626967)
- ..controls (2.600472,-2.624407) and (2.595984,-2.620641)
- ..(2.593018,-2.618563)
- ..controls (2.590052,-2.616486) and (2.584978,-2.613558)
- ..(2.581696,-2.612031)
- ..controls (2.578415,-2.610503) and (2.572909,-2.608489)
- ..(2.569411,-2.607536)
- ..controls (2.565914,-2.606583) and (2.560143,-2.605628)
- ..(2.556537,-2.605404)
- ..controls (2.55293,-2.605181) and (2.493973,-2.605)
- ..(2.425,-2.605)
- ..controls (2.356027,-2.605) and (2.29707,-2.605181)
- ..(2.293463,-2.605404)
- ..controls (2.289857,-2.605628) and (2.284086,-2.606583)
- ..(2.280589,-2.607536)
- ..controls (2.277091,-2.608489) and (2.271585,-2.610503)
- ..(2.268304,-2.612031)
- ..controls (2.265022,-2.613558) and (2.259948,-2.616486)
- ..(2.256982,-2.618563)
- ..controls (2.254016,-2.620641) and (2.249528,-2.624407)
- ..(2.246967,-2.626967)
- ..controls (2.244407,-2.629528) and (2.240641,-2.634016)
- ..(2.238563,-2.636982)
- ..controls (2.236486,-2.639948) and (2.233558,-2.645022)
- ..(2.232031,-2.648304)
- ..controls (2.230503,-2.651585) and (2.228489,-2.657091)
- ..(2.227536,-2.660589)
- ..controls (2.226583,-2.664086) and (2.225628,-2.669857)
- ..(2.225404,-2.673463)
- ..controls (2.225181,-2.67707) and (2.225,-2.68)
- ..(2.225,-2.68)
- ..controls (2.225,-2.68) and (2.225181,-2.68293)
- ..(2.225404,-2.686537)
- ..controls (2.225628,-2.690143) and (2.226583,-2.695914)
- ..(2.227536,-2.699411)
- ..controls (2.228489,-2.702909) and (2.230503,-2.708415)
- ..(2.232031,-2.711696)
- ..controls (2.233558,-2.714978) and (2.236486,-2.720052)
- ..(2.238563,-2.723018)
- ..controls (2.240641,-2.725984) and (2.244407,-2.730472)
- ..(2.246967,-2.733033)
- ..controls (2.249528,-2.735593) and (2.254016,-2.739359)
- ..(2.256982,-2.741437)
- ..controls (2.259948,-2.743514) and (2.265022,-2.746442)
- ..(2.268304,-2.747969)
- ..controls (2.271585,-2.749497) and (2.277091,-2.751511)
- ..(2.280589,-2.752464)
- ..controls (2.284086,-2.753417) and (2.289857,-2.754372)
- ..(2.293463,-2.754596)
- ..controls (2.29707,-2.754819) and (2.356027,-2.755)
- ..(2.425,-2.755)
- ..controls (2.493973,-2.755) and (2.55293,-2.754819)
- ..(2.556537,-2.754596)
- ..controls (2.560143,-2.754372) and (2.565914,-2.753417)
- ..(2.569411,-2.752464)
- ..controls (2.572909,-2.751511) and (2.578415,-2.749497)
- ..(2.581696,-2.747969)
- ..controls (2.584978,-2.746442) and (2.590052,-2.743514)
- ..(2.593018,-2.741437)
- ..controls (2.595984,-2.739359) and (2.600472,-2.735593)
- ..(2.603033,-2.733033)
- ..controls (2.605593,-2.730472) and (2.609359,-2.725984)
- ..(2.611437,-2.723018)
- ..controls (2.613514,-2.720052) and (2.616442,-2.714978)
- ..(2.617969,-2.711696)
- ..controls (2.619497,-2.708415) and (2.621511,-2.702909)
- ..(2.622464,-2.699411)
- ..controls (2.623417,-2.695914) and (2.624372,-2.690143)
- ..(2.624596,-2.686537)
- ..controls (2.624819,-2.68293) and (2.625,-2.68)
- ..(2.625,-2.68)\dpicstop
-\dpicdraw (2.225,-2.68)
- --(2.305,-2.68)
- --(2.465,-2.63)\dpicstop
-\dpicdraw (2.425,-2.68)
- --(2.625,-2.68)\dpicstop
-\dpicdraw (2.625,-2.68)
- --(2.8,-2.68)\dpicstop
-\draw (2.827674,-2.68) node[right=-2bp]{{\tt reed}};
-\dpicdraw (4.1,-2.68)
- --(4.275,-2.68)\dpicstop
-\fill[fill=white!90!black,line width=0bp](4.675,-2.68)
- ..controls (4.674554,-2.672786) and (4.673417,-2.664086)
- ..(4.672464,-2.660589)
- ..controls (4.671511,-2.657091) and (4.669497,-2.651585)
- ..(4.667969,-2.648304)
- ..controls (4.666442,-2.645022) and (4.663514,-2.639948)
- ..(4.661437,-2.636982)
- ..controls (4.659359,-2.634016) and (4.655593,-2.629528)
- ..(4.653033,-2.626967)
- ..controls (4.650472,-2.624407) and (4.645984,-2.620641)
- ..(4.643018,-2.618563)
- ..controls (4.640052,-2.616486) and (4.634978,-2.613558)
- ..(4.631696,-2.612031)
- ..controls (4.628415,-2.610503) and (4.622909,-2.608489)
- ..(4.619411,-2.607536)
- ..controls (4.615914,-2.606583) and (4.610143,-2.605628)
- ..(4.606537,-2.605404)
- ..controls (4.60293,-2.605181) and (4.543973,-2.605)
- ..(4.475,-2.605)
- ..controls (4.406027,-2.605) and (4.34707,-2.605181)
- ..(4.343463,-2.605404)
- ..controls (4.339857,-2.605628) and (4.334086,-2.606583)
- ..(4.330589,-2.607536)
- ..controls (4.327091,-2.608489) and (4.321585,-2.610503)
- ..(4.318304,-2.612031)
- ..controls (4.315022,-2.613558) and (4.309948,-2.616486)
- ..(4.306982,-2.618563)
- ..controls (4.304016,-2.620641) and (4.299528,-2.624407)
- ..(4.296967,-2.626967)
- ..controls (4.294407,-2.629528) and (4.290641,-2.634016)
- ..(4.288563,-2.636982)
- ..controls (4.286486,-2.639948) and (4.283558,-2.645022)
- ..(4.282031,-2.648304)
- ..controls (4.280503,-2.651585) and (4.278489,-2.657091)
- ..(4.277536,-2.660589)
- ..controls (4.276583,-2.664086) and (4.275628,-2.669857)
- ..(4.275404,-2.673463)
- ..controls (4.275181,-2.67707) and (4.275,-2.68)
- ..(4.275,-2.68)
- ..controls (4.275,-2.68) and (4.275181,-2.68293)
- ..(4.275404,-2.686537)
- ..controls (4.275628,-2.690143) and (4.276583,-2.695914)
- ..(4.277536,-2.699411)
- ..controls (4.278489,-2.702909) and (4.280503,-2.708415)
- ..(4.282031,-2.711696)
- ..controls (4.283558,-2.714978) and (4.286486,-2.720052)
- ..(4.288563,-2.723018)
- ..controls (4.290641,-2.725984) and (4.294407,-2.730472)
- ..(4.296967,-2.733033)
- ..controls (4.299528,-2.735593) and (4.304016,-2.739359)
- ..(4.306982,-2.741437)
- ..controls (4.309948,-2.743514) and (4.315022,-2.746442)
- ..(4.318304,-2.747969)
- ..controls (4.321585,-2.749497) and (4.327091,-2.751511)
- ..(4.330589,-2.752464)
- ..controls (4.334086,-2.753417) and (4.339857,-2.754372)
- ..(4.343463,-2.754596)
- ..controls (4.34707,-2.754819) and (4.406027,-2.755)
- ..(4.475,-2.755)
- ..controls (4.543973,-2.755) and (4.60293,-2.754819)
- ..(4.606537,-2.754596)
- ..controls (4.610143,-2.754372) and (4.615914,-2.753417)
- ..(4.619411,-2.752464)
- ..controls (4.622909,-2.751511) and (4.628415,-2.749497)
- ..(4.631696,-2.747969)
- ..controls (4.634978,-2.746442) and (4.640052,-2.743514)
- ..(4.643018,-2.741437)
- ..controls (4.645984,-2.739359) and (4.650472,-2.735593)
- ..(4.653033,-2.733033)
- ..controls (4.655593,-2.730472) and (4.659359,-2.725984)
- ..(4.661437,-2.723018)
- ..controls (4.663514,-2.720052) and (4.666442,-2.714978)
- ..(4.667969,-2.711696)
- ..controls (4.669497,-2.708415) and (4.671511,-2.702909)
- ..(4.672464,-2.699411)
- ..controls (4.673417,-2.695914) and (4.674372,-2.690143)
- ..(4.674596,-2.686537)
- ..controls (4.674819,-2.68293) and (4.675,-2.68)
- ..(4.675,-2.68) --cycle\dpicstop
-\dpicdraw (4.675,-2.68)
- ..controls (4.674554,-2.672786) and (4.673417,-2.664086)
- ..(4.672464,-2.660589)
- ..controls (4.671511,-2.657091) and (4.669497,-2.651585)
- ..(4.667969,-2.648304)
- ..controls (4.666442,-2.645022) and (4.663514,-2.639948)
- ..(4.661437,-2.636982)
- ..controls (4.659359,-2.634016) and (4.655593,-2.629528)
- ..(4.653033,-2.626967)
- ..controls (4.650472,-2.624407) and (4.645984,-2.620641)
- ..(4.643018,-2.618563)
- ..controls (4.640052,-2.616486) and (4.634978,-2.613558)
- ..(4.631696,-2.612031)
- ..controls (4.628415,-2.610503) and (4.622909,-2.608489)
- ..(4.619411,-2.607536)
- ..controls (4.615914,-2.606583) and (4.610143,-2.605628)
- ..(4.606537,-2.605404)
- ..controls (4.60293,-2.605181) and (4.543973,-2.605)
- ..(4.475,-2.605)
- ..controls (4.406027,-2.605) and (4.34707,-2.605181)
- ..(4.343463,-2.605404)
- ..controls (4.339857,-2.605628) and (4.334086,-2.606583)
- ..(4.330589,-2.607536)
- ..controls (4.327091,-2.608489) and (4.321585,-2.610503)
- ..(4.318304,-2.612031)
- ..controls (4.315022,-2.613558) and (4.309948,-2.616486)
- ..(4.306982,-2.618563)
- ..controls (4.304016,-2.620641) and (4.299528,-2.624407)
- ..(4.296967,-2.626967)
- ..controls (4.294407,-2.629528) and (4.290641,-2.634016)
- ..(4.288563,-2.636982)
- ..controls (4.286486,-2.639948) and (4.283558,-2.645022)
- ..(4.282031,-2.648304)
- ..controls (4.280503,-2.651585) and (4.278489,-2.657091)
- ..(4.277536,-2.660589)
- ..controls (4.276583,-2.664086) and (4.275628,-2.669857)
- ..(4.275404,-2.673463)
- ..controls (4.275181,-2.67707) and (4.275,-2.68)
- ..(4.275,-2.68)
- ..controls (4.275,-2.68) and (4.275181,-2.68293)
- ..(4.275404,-2.686537)
- ..controls (4.275628,-2.690143) and (4.276583,-2.695914)
- ..(4.277536,-2.699411)
- ..controls (4.278489,-2.702909) and (4.280503,-2.708415)
- ..(4.282031,-2.711696)
- ..controls (4.283558,-2.714978) and (4.286486,-2.720052)
- ..(4.288563,-2.723018)
- ..controls (4.290641,-2.725984) and (4.294407,-2.730472)
- ..(4.296967,-2.733033)
- ..controls (4.299528,-2.735593) and (4.304016,-2.739359)
- ..(4.306982,-2.741437)
- ..controls (4.309948,-2.743514) and (4.315022,-2.746442)
- ..(4.318304,-2.747969)
- ..controls (4.321585,-2.749497) and (4.327091,-2.751511)
- ..(4.330589,-2.752464)
- ..controls (4.334086,-2.753417) and (4.339857,-2.754372)
- ..(4.343463,-2.754596)
- ..controls (4.34707,-2.754819) and (4.406027,-2.755)
- ..(4.475,-2.755)
- ..controls (4.543973,-2.755) and (4.60293,-2.754819)
- ..(4.606537,-2.754596)
- ..controls (4.610143,-2.754372) and (4.615914,-2.753417)
- ..(4.619411,-2.752464)
- ..controls (4.622909,-2.751511) and (4.628415,-2.749497)
- ..(4.631696,-2.747969)
- ..controls (4.634978,-2.746442) and (4.640052,-2.743514)
- ..(4.643018,-2.741437)
- ..controls (4.645984,-2.739359) and (4.650472,-2.735593)
- ..(4.653033,-2.733033)
- ..controls (4.655593,-2.730472) and (4.659359,-2.725984)
- ..(4.661437,-2.723018)
- ..controls (4.663514,-2.720052) and (4.666442,-2.714978)
- ..(4.667969,-2.711696)
- ..controls (4.669497,-2.708415) and (4.671511,-2.702909)
- ..(4.672464,-2.699411)
- ..controls (4.673417,-2.695914) and (4.674372,-2.690143)
- ..(4.674596,-2.686537)
- ..controls (4.674819,-2.68293) and (4.675,-2.68)
- ..(4.675,-2.68)\dpicstop
-\dpicdraw (4.275,-2.68)
- --(4.355,-2.68)
- --(4.515,-2.691111)\dpicstop
-\dpicdraw (4.475,-2.68)
- --(4.675,-2.68)\dpicstop
-\dpicdraw (4.675,-2.68)
- --(4.85,-2.68)\dpicstop
-\draw (4.877674,-2.68) node[right=-2bp]{{\tt reed(,{,},fill\_(0.9),CR)}};
-\dpicdraw (0,-2.93)
- --(0.25,-2.93)\dpicstop
-\dpicdraw (0.5,-2.93)
- --(0.5,-2.88)
- --(0.25,-2.88)
- --(0.25,-2.98)
- --(0.5,-2.98)
- --(0.5,-2.93)\dpicstop
-\dpicdraw (0.25,-2.98)
- --(0.333333,-2.93)
- --(0.25,-2.88)\dpicstop
-\dpicdraw (0.5,-2.93)
- --(0.75,-2.93)\dpicstop
-\draw (0.777674,-2.93) node[right=-2bp]{{\tt pvcell}};
-\end{tikzpicture}
-\vspace*{-0.5\baselineskip}
diff --git a/graphics/circuit_macros/doc/CctTableMan.m4 b/graphics/circuit_macros/doc/CctTableMan.m4
deleted file mode 100644
index 221c62b737..0000000000
--- a/graphics/circuit_macros/doc/CctTableMan.m4
+++ /dev/null
@@ -1,92 +0,0 @@
-.PS
-# `CctTable.m4'
-cct_init
-
-movewid = 2 pt__
-hm = 2.05
-vm = 0.28
-{ {resistor ; move ;"`{\tt resistor}'" ljust}
- move right_ hm
- {resistor(,,Q) ; move ;"`\tt resistor(,{,}Q) '" ljust}
- move right_ hm
- {resistor(,,E) ; move
- "`\shortstack[l]{\tt resistor(,{,}E)\\ {\tt $\equiv$ ebox}}'" ljust}
-}
- move down vm; right_
-{ {resistor(,,ES) ; move ;"`\tt resistor(,{,}ES) '" ljust}
- move right_ hm
- {resistor(,,H) ; move ;"`\tt resistor(,{,}H) '" ljust}
- move right_ hm
- {ebox(,,,0.5) ; move ;"`{\tt ebox(,{,},0.5)}'" ljust}
-}
- move down vm; right_
-{ {resistor(,,V) ; move ;"`{\tt resistor(,{,}V)}'" ljust}
- move right_ hm
- {move down_ 0.05; right_
- thermocouple ; move;"`{\tt thermocouple}'" ljust; move up_ 0.05}
- move right_ hm
- {ebox(,0.5,0.3) ; move ;"`{\tt ebox(,0.5,0.3)}'" ljust}
-}
- move down vm; right_
-{ {inductor ; move ;"`{\tt inductor}'" ljust}
- move right_ hm
- {inductor(,W); move ;"`{\tt inductor(,W)}'" ljust}
- move right_ hm
- {inductor(,L); move ;"`{\tt inductor(,L)}'" ljust}
-}
- move down vm; right_
-{ {inductor(,,,M) ; move ;"`{\tt inductor(,{,},M)}'" ljust}
- move right_ hm
- {inductor(,W,6,P); move ;"`{\tt inductor(,W,6,P)}'" ljust}
- move right_ hm
- {move right_ 0.2; ttmotor(,G) ; move ;"`{\tt ttmotor(,G)}'" ljust}
-}
- move down vm; right_
-{ {capacitor ; move ;"`{\tt capacitor}'" ljust}
- move right_ hm
- {capacitor(,C); move ;"`{\tt capacitor(,C)}'" ljust}
- move right_ hm
- {capacitor(,C+); move ;"`{\tt capacitor(,C+)}'" ljust}
-}
- move down vm; right_
-{ {capacitor(,P); move ;"`{\tt capacitor(,P)}'" ljust}
- move right_ hm
- {capacitor(,E); move ;"`{\tt capacitor(,E)}'" ljust}
- move right_ hm
- {capacitor(,K); move ;"`{\tt capacitor(,K)}'" ljust}
-}
- move down 0.25; right_
-{ {capacitor(,M); move ;"`{\tt capacitor(,M)}'" ljust}
- move right_ hm
- {capacitor(,N); move ;"`{\tt capacitor(,N)}'" ljust}
- move right_ hm
- {xtal ; move ;"`{\tt xtal}'" ljust}
-}
- move down 0.25; right_
-{ {memristor ; move;"`{\tt memristor}'" ljust}
- move right_ hm
- {heater; move;"`{\tt heater}'" ljust}
- move right_ hm
- {tline ; move;"`{\tt tline}'" ljust}
-}
- move down 0.25; right_
-{ {move up_ 0.05; right_; gap ; move ;"`{\tt gap}'" ljust}
- move right_ hm
- {gap(,,A) ; move ;"`{\tt gap(,{,}A)}'" ljust}
- move right_ hm
- {arrowline ; move;"`{\tt arrowline}'" ljust}
-}
- move down 0.25; right_
-{ {lamp ; move;"`{\tt lamp}'" ljust}
- move right_ hm
- {reed ; move ;"`{\tt reed}'" ljust}
- move right_ hm
- {reed(,,,fill_(0.9),CR) ; move ; "`{\tt reed(,{,},fill\_(0.9),CR)}'" ljust}
-}
- move down 0.25; right_
-{ {pvcell ; move;"`{\tt pvcell}'" ljust}
- move right_ hm
- {arrester ; move ;"`{\tt arrester}'" ljust}
-}
-
-.PE
diff --git a/graphics/circuit_macros/doc/Circuit_macros.bib b/graphics/circuit_macros/doc/Circuit_macros.bib
index 977060a26f..696f361fa4 100644
--- a/graphics/circuit_macros/doc/Circuit_macros.bib
+++ b/graphics/circuit_macros/doc/Circuit_macros.bib
@@ -42,6 +42,15 @@ address={Reading, Massachusetts},
publisher={Addison-Wesley},
year={1997}}
+@misc{IECstd,
+author={IEC},
+title={International Standard Database Snapshot 2007-01,
+Graphical Symbols for Diagrams},
+note={IEC-60617.},
+institution={International Electrotechnical Commission},
+address={Geneva, Switzerland},
+year={2007}}
+
@misc{IEEEstd,
author={IEEE},
title={Graphic Symbols for Electrical and Electronic Diagrams},
diff --git a/graphics/circuit_macros/doc/Circuit_macros.pdf b/graphics/circuit_macros/doc/Circuit_macros.pdf
index a9c34834ce..a6b0c06f86 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 fcd9e09fa6..10f8d34107 100644
--- a/graphics/circuit_macros/doc/Circuit_macros.tex
+++ b/graphics/circuit_macros/doc/Circuit_macros.tex
@@ -70,20 +70,25 @@
citecolor=purple}
\begin{document}
+%\pagenumbering{roman}
\title{M4 Macros for Electric Circuit Diagrams in \LaTeX\ Documents}
\author{Dwight Aplevich}
\enlargethispage{\baselineskip}
\date{%
-%\input Version
+%\input Version%
+%\footnote{This document is best displayed with a reader that shows bookmarks.}
\vspace*{-\baselineskip}
}
\maketitle
-% \pdfbookmark[section]{\contentsname}{toc}
- \pdfbookmark[section]{Contents}{toc}
+ \pdfbookmark[section]{\contentsname}{toc}
+% \pdfbookmark[section]{Contents}{toc}
\begin{multicols}{2}
\tableofcontents
\end{multicols}
+%\pagebreak
+%\pagenumbering{arabic}
+
\input body
%\pdfbookmark[section]{\refname}{refs}
diff --git a/graphics/circuit_macros/doc/InductorsMan.m4 b/graphics/circuit_macros/doc/InductorsMan.m4
new file mode 100644
index 0000000000..f250a81135
--- /dev/null
+++ b/graphics/circuit_macros/doc/InductorsMan.m4
@@ -0,0 +1,47 @@
+.PS
+# inductors.m4
+cct_init
+iflatex(command "{\tt")
+
+movewid = 2 pt__
+hm = 2.05
+vm = 0.4
+{ {I: inductor ; move ;"`{inductor}'" ljust}
+ move right_ hm
+ {inductor(,W); move ;"`{inductor(,W)}'" ljust}
+ move right_ hm
+ {inductor(,L); move ;"`{inductor(,L)}'" ljust}
+}
+
+ move down vm; right_
+{ {inductor(,,3,M) ; move ;"`{...(,,3,M)}'" ljust}
+ move right_ hm
+ {inductor(,W,6,P1); variable; move
+ "`...(,W,6,P1);'" ljust "`variable'" ljust}
+ move right_ hm
+ {inductor(,L,9,K); move ;"`{...(,L,9,K)}'" ljust}
+}
+
+ move down vm; right_
+{ {inductor(,,,M3); addtaps(-,1/2,-dimen_/6); move; `"...(,{,},M3)"' ljust
+ {`"addtaps(-,1/2,-dimen\_/6)"' ljust at (I.start,last ""+(0,-0.2)) }
+ }
+ move right_ hm
+ {ebox(,,,0) ; move ;"`{ebox(,{,},0)}'" ljust}
+ move right_ hm -10bp__
+ {TI: tapped(`ebox(,,,0)',-,1/4,-dimen_/6,3/4,-dimen_/6) ; move ;
+ "`tapped(\char96{}ebox(,{,},0)\char39,'" ljust at Here+(10bp__,-5bp__) \
+ "-,1/4,-dimen\_/6," ljust "3/4,-dimen\_/6)" ljust
+ "\sl Tap1" at TI.Tap1 rjust below
+ "\sl Tap2" at TI.Tap2 ljust below }
+}
+
+ move down vm*5/4; right_
+{ {shielded(`inductor(,,,M)') ; move
+ `"shielded("' ljust `"\char96inductor(,{,},M)\char39)"' ljust
+ move to (3rd last line.start,Here)
+ shielded(`ebox(,,,0)',R) ; move; `"shielded(`ebox(,{,},0)',R)"' ljust }
+}
+
+iflatex(command "}")
+.PE
diff --git a/graphics/circuit_macros/doc/Makefile b/graphics/circuit_macros/doc/Makefile
index 1abd51504e..3cdac7062e 100644
--- a/graphics/circuit_macros/doc/Makefile
+++ b/graphics/circuit_macros/doc/Makefile
@@ -8,19 +8,21 @@ PICTEX = \
ACsymbol.tex \
AmpTableMan.tex AntennasMan.tex ArrestersMan.tex AudioMan.tex Axes.tex \
Buffer.tex BigResistor.tex BipMan.tex \
- CctTableMan.tex Composite.tex ConfigA.tex ConfigB.tex ConfigC.tex \
- ConnMan.tex Corners.tex ContactMan.tex ContactsMan.tex \
+ CapacitorsMan.tex Composite.tex ConfigA.tex ConfigB.tex \
+ ConfigC.tex ConnMan.tex Corners.tex ContactMan.tex ContactsMan.tex \
Dac.tex Darlington.tex DCsymbol.tex DemultiplexerMan.tex DiodesMan.tex \
EmarrowsMan.tex FF.tex FlipFlop.tex Flowdiag.tex FusesMan.tex \
- GroundsMan.tex HeadersMan.tex HybridPi.tex JackMan.tex LogicMan.tex \
+ GroundsMan.tex HeadersMan.tex HybridPi.tex InductorsMan.tex \
+ JackMan.tex LogicMan.tex \
Loop.tex MultiplexerMan.tex NPDTMan.tex NLGMan.tex NportMan.tex \
Oblique.tex OpampMan.tex Opto.tex ParSeries.tex PconnMan.tex \
- Potentiometers.tex RelayMan.tex relaycoilMan.tex Series.tex ShiftRMan.tex \
- Sinus.tex SourcesMan.tex SwitchesMan.tex Taps.tex TgateMan.tex \
- Thermal.tex Tline.tex VariableMan.tex XformMan.tex \
- WindingsMan.tex Workflow.tex bitr.tex bi_trans.tex bistableMan.tex \
+ Potentiometers.tex RelayMan.tex relaycoilMan.tex ResistorsMan.tex \
+ Series.tex ShiftRMan.tex Sinus.tex SourcesMan.tex SwitchesMan.tex \
+ Taps.tex TgateMan.tex Thermal.tex Tline.tex \
+ VariableMan.tex WindingsMan.tex Workflow.tex XformMan.tex \
+ bitr.tex bi_trans.tex bistableMan.tex \
currents.tex eboxdims.tex fbfilter.tex fetMan.tex lrarrows.tex \
- mplex.tex oax.tex quick.tex \
+ MoreTableMan.tex mplex.tex opampex.tex quick.tex \
sampleIC.tex stringdims.tex thyristorMan.tex ujtMan.tex \
woodchips.tex
@@ -39,7 +41,7 @@ M4 = m4
# For gpic
MODE = gpic
-PIC = gpic -t
+PIC = pic -t
PRE =
POST = ;printf '\\centerline{\\box\\graph}\n'
PST =
@@ -122,7 +124,7 @@ heading.tex:
printf '\\usepackage{multicol}\n' >> heading.tex
printf '\\usepackage{amssymb,boxdims}\n' >> heading.tex $(PST)
-oax.tex tran.tex bitr.tex: oax.m4
+opampex.tex tran.tex bitr.tex: opampex.m4
$(M4) $(M4LIBS) $*.m4 > $*.pic
$(PIC) $*.pic > $*.tex
diff --git a/graphics/circuit_macros/doc/MoreTableMan.m4 b/graphics/circuit_macros/doc/MoreTableMan.m4
new file mode 100644
index 0000000000..bfc41113c1
--- /dev/null
+++ b/graphics/circuit_macros/doc/MoreTableMan.m4
@@ -0,0 +1,36 @@
+.PS
+# MoreTable.m4
+cct_init
+
+movewid = 2 pt__
+hm = 2.05
+vm = 0.28
+{ {memristor ; move;"`{\tt memristor}'" ljust}
+ move right_ hm
+ {heater; move;"`{\tt heater}'" ljust}
+ move right_ hm
+ {tline ; move;"`{\tt tline}'" ljust}
+}
+ move down 0.25; right_
+{ {pvcell ; move;"`{\tt pvcell}'" ljust}
+ move right_ hm
+ {reed ; move ;"`{\tt reed}'" ljust}
+ move right_ hm
+ {reed(,,,fill_(0.9),CR) ; move ; "`{\tt reed(,{,},fill\_(0.9),CR)}'" ljust}
+}
+ move down 0.25; right_
+{ {gap ; move ;"`{\tt gap}'" ljust}
+ move right_ hm
+ {gap(,,A) ; move ;"`{\tt gap(,{,}A)}'" ljust}
+ move right_ hm
+ {arrowline ; move;"`{\tt arrowline}'" ljust}
+}
+ move down 0.25; right_
+{ move down 0.10; right; {lamp ; move;"`{\tt lamp}'" ljust}
+ move right_ hm
+ {thermocouple ; move;"`{\tt thermocouple}'" ljust }
+# move up 0.10 right_ hm
+# {arrester ; move ;"`{\tt arrester}'" ljust}
+}
+
+.PE
diff --git a/graphics/circuit_macros/doc/Oblique.m4 b/graphics/circuit_macros/doc/Oblique.m4
index c8dfd5fa7a..08ec60c6cb 100644
--- a/graphics/circuit_macros/doc/Oblique.m4
+++ b/graphics/circuit_macros/doc/Oblique.m4
@@ -10,13 +10,13 @@ T:dot(at Ct+(0,elen_))
inductor(from T to Ct); dlabel(0.12,-0.1,,,L_1)
Point_(-30); inductor(from Cr to Cr+vec_(elen_,0))
- dlabel(0,-0.07,,L_3,)
+ dlabel(0,-0.1,,L_3,)
R:dot
L:dot( at Cl-(R.x-Cr.x,Cr.y-R.y) )
inductor(from L to Cl); dlabel(0,-0.12,,L_2,)
right_; resistor(from L to R); rlabel(,R_2,)
- resistor(from T to R); dlabel(0,0.15,,R_3,) ; b_current(y,ljust)
+ resistor(from T to R); dlabel(0,0.15,,R_3,) ; b_current(\;y,ljust)
line from L to 0.2<L,T>
source(to 0.5 between L and T); dlabel(sourcerad_+0.07,0.1,-,,+)
dlabel(0,sourcerad_+0.07,,u,)
diff --git a/graphics/circuit_macros/doc/ResistorsMan.m4 b/graphics/circuit_macros/doc/ResistorsMan.m4
new file mode 100644
index 0000000000..2b1d1515e8
--- /dev/null
+++ b/graphics/circuit_macros/doc/ResistorsMan.m4
@@ -0,0 +1,30 @@
+.PS
+# ResistorsMan.m4
+cct_init
+
+movewid = 2 pt__
+hm = 2.05
+vm = 0.28
+{ {resistor ; move ;"`{\tt resistor}'" ljust}
+ move right_ hm
+ {resistor(,,Q) ; move ;"`\tt resistor(,{,}Q) '" ljust}
+ move right_ hm
+ {resistor(,,E) ; move
+ "`\shortstack[l]{\tt resistor(,{,}E)\\ {\tt $\equiv$ ebox}}'" ljust}
+}
+ move down vm; right_
+{ {resistor(,,ES) ; move ;"`\tt resistor(,{,}ES) '" ljust}
+ move right_ hm
+ {resistor(,,H) ; move ;"`\tt resistor(,{,}H) '" ljust}
+ move right_ hm
+ {ebox(,,,0.9) ; move ;"`{\tt ebox(,{,},0.9)}'" ljust}
+}
+ move down vm; right_
+{ {resistor(,,V) ; move ;"`{\tt resistor(,{,}V)}'" ljust}
+ move right_ hm
+ {ebox(,0.5,0.3) ; move ;"`{\tt ebox(,0.5,0.3)}'" ljust}
+ move right_ hm+4bp__
+ {resistor(,,B) ; move movewid-4bp__ ;"`{\tt resistor(,{,}B)}'" ljust}
+}
+
+.PE
diff --git a/graphics/circuit_macros/doc/SourcesMan.m4 b/graphics/circuit_macros/doc/SourcesMan.m4
index 8a4bab9bc6..8e82b3f832 100644
--- a/graphics/circuit_macros/doc/SourcesMan.m4
+++ b/graphics/circuit_macros/doc/SourcesMan.m4
@@ -16,7 +16,7 @@ define(`NL',`; move down $1; right_')
{source(,i) ; move ; "`source(,i)'" ljust} NL
{source(,V) ; move ; "`source(,V)'" ljust} NL
{source(,v) ; move ; "`source(,v)'" ljust} NL
- {source(,SC) ; move ; "`source(,SC)'" ljust} NL
+ {source(,S) ; move ; "`source(,S)'" ljust} NL
{source(,AC); move ; "`source(,AC)'" ljust} NL
{source(,X) ; move ; "`source(,X)'" ljust} NL
{source(,F) ; move ; "`source(,F)'" ljust} NL
@@ -31,7 +31,7 @@ define(`NL',`; move down $1; right_')
{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(,SC) ; move ; "`source(,SC)'" ljust} NL
{source(,SCr) ; move ; "`source(,SCr)'" ljust} NL
{source(,T) ; move ; "`source(,T)'" ljust} NL
{source(,L) ; move ; "`source(,L)'" ljust} NL
@@ -51,7 +51,8 @@ define(`NL',`; move down $1; right_')
{consource(,V) ; move ; "`consource(,V)'" ljust} NL(0.32)
{consource(,v) ; move ; "`consource(,v)'" ljust} NL(0.3)
{battery ; move ; "`battery'" ljust} NL(0.3)
- {battery(,3,R) ; move ; "`battery(,3,R)'" ljust}
+ {battery(,3,R) ; move ; "`battery(,3,R)'" ljust} NL(0.35)
+ {ttmotor(,G) ; move ; "`ttmotor(,G)'" ljust}
iflatex(`ifpsfrag(,`latexcommand(})')')
.PE
diff --git a/graphics/circuit_macros/doc/SwitchesMan.m4 b/graphics/circuit_macros/doc/SwitchesMan.m4
index 46b3f9240d..e7d82badab 100644
--- a/graphics/circuit_macros/doc/SwitchesMan.m4
+++ b/graphics/circuit_macros/doc/SwitchesMan.m4
@@ -20,7 +20,7 @@ movewid = 0.25
lswitch(,,uDC); {"\tt (,{,}uDC)" at (last [],S)}
}
# Row 2
- move down; right_; {
+ move down 0.4; right_; {
lswitch(,,K); {S:"\tt (,{,}K)" Below}
move right_
lswitch(,,KD); {"\tt (,{,}KD)" at (last [],S)}
@@ -60,7 +60,7 @@ movewid = 0.25
dswitch(,,WBCo); {"\tt (,{,}WBCo)" at (last [],S)}
}
# Row 4
- move down; right_; {
+ move down 0.4; right_; {
dswitch(,,WBKCo); {S: "\tt (,{,}WBKCo)" Below}
move right_
dswitch(,,WBCb); {"\tt (,{,}WBCb)" at (last [],S)}
@@ -74,7 +74,8 @@ movewid = 0.25
dswitch(,,WBFSd); {"\tt (,{,}WBFSd)" at (last [],S)}
}
# Row 5
- move down moveht*5/4; right_; {
+# move down moveht*5/4; right_; {
+ move down moveht; right_; {
dswitch(,,WBTh); {S: "\tt (,{,}WBTh)" Below}
move right_
dswitch(,,WBKC); {"\tt (,{,}WBKC)" at (last [],S)}
@@ -102,20 +103,7 @@ movewid = 0.25
dswitch(,,WBRHH); {"\tt (,{,}WBRHH)" at (last [],S)}
}
# Row 7
- move down moveht; right_; {
- move down_ 2bp__; right_
- dswitch(,,WBPr); {S: "\tt (,{,}WBPr)" Below}
- move right_
- dswitch(,,WBPrT); {S: "\tt (,{,}WBPrT)" Below}
-# move right_
-# Proxim; {S: "\tt Pro{}xim" Below}
-# move right_
-# Magn; {S: "\tt Mag{}n" Below}
- move down_ 6bp__ then right_
- dswitch(,,WBPrM); {S: "\tt (,{,}WBPrM)" Below}
- }
-# Row 8
- move down; right_; {
+ move down 0.4; right_; {
dswitch(,,WBMMR); {S: "\tt (,{,}WBMMR)" Below}
move right_
dswitch(,,WBMM); {"\tt (,{,}WBMM)" at (last [],S)}
@@ -128,4 +116,17 @@ movewid = 0.25
move right_
dswitch(,,WBoKEL); {"\tt (,{,}WBoKEL)" at (last [],S)}
}
+# Row 8
+ move down moveht; right_; {
+ move down_ 2bp__; right_
+ dswitch(,,WBPr); {S: "\tt (,{,}WBPr)" Below}
+ move right_
+ dswitch(,,WBPrT); {S: "\tt (,{,}WBPrT)" Below}
+# move right_
+# Proxim; {S: "\tt Pro{}xim" Below}
+# move right_
+# Magn; {S: "\tt Mag{}n" Below}
+ move down_ 6bp__ then right_
+ dswitch(,,WBPrM); {S: "\tt (,{,}WBPrM)" Below}
+ }
.PE
diff --git a/graphics/circuit_macros/doc/VariableMan.m4 b/graphics/circuit_macros/doc/VariableMan.m4
index e52e30913d..dfe43d8028 100644
--- a/graphics/circuit_macros/doc/VariableMan.m4
+++ b/graphics/circuit_macros/doc/VariableMan.m4
@@ -1,19 +1,19 @@
.PS
-# `Variable.m4'
+# `VariableMan.m4'
cct_init
-define(`elen_',dimen_); down_
-[ { variable(`resistor',A) }; {"A" at last line.end below}; move right
- { variable(`resistor',N) }; {"N" at last line.end below}; move right
- { variable(`resistor',uN) }; {"uN" at last line.end below}; move right
- { variable(`resistor',NN) }; {"uN" at last line.end below}; move right
- { variable(`resistor',uNN) }; {"uNN" at last line.end below}; #; move right
+define(`elen_',dimen_); up_
+[ { variable(`resistor(up_ dimen_)',A) };
+ {"A" at last line.start below}; move right
+ { variable(`resistor',N) }; {"N" at last line.start below}; move right
+ { variable(`resistor',uN) }; {"uN" at last line.start below}; move right
+ { variable(`resistor',NN) }; {"NN" at last line.start below}; move right
+ { variable(`resistor',uNN) }; {"uNN" at last line.start below}; #; move right
]
[
skp = 0.4
hskip = linewid*0.5
cskip = hskip
-Orig: Here
{ move right cskip+elen_+hskip
line invis right_ elen_ "\tt C"; move right_ hskip
line invis right_ elen_ "\tt S" }
@@ -25,4 +25,5 @@ Orig: Here
variable(`capacitor(,C)',char`'S) }',
A,P,L,N)
] with .w at last [].e+(0.4,0)
+
.PE
diff --git a/graphics/circuit_macros/doc/Version.tex b/graphics/circuit_macros/doc/Version.tex
index ccce7cfa86..fb5fc7b97e 100644
--- a/graphics/circuit_macros/doc/Version.tex
+++ b/graphics/circuit_macros/doc/Version.tex
@@ -1 +1 @@
-Version 9.5
+Version 9.6
diff --git a/graphics/circuit_macros/doc/body.tex b/graphics/circuit_macros/doc/body.tex
index 0afb23e5be..0fd36ecb5c 100644
--- a/graphics/circuit_macros/doc/body.tex
+++ b/graphics/circuit_macros/doc/body.tex
@@ -48,15 +48,13 @@
%
\xection{Introduction\label{Introduction:}}
\begin{quotation}\noindent
-% Before every conference, I find Ph.D.s in on weekends running back
-% and forth from their offices to the printer.
It appears that people
who are unable to execute pretty pictures with pen and paper find it
gratifying to try with a computer~\cite{Landauer95}.
\end{quotation}
-This manual\footnote{%
-This document is best displayed with a reader that shows bookmarks.}
+This manual%
+\footnote{This document is best displayed with a reader that shows bookmarks.}
describes a method for drawing electric circuits and
other diagrams in \latex and web documents.
The diagrams are defined in the simple \pic drawing language~\cite{KRpic}
@@ -69,8 +67,8 @@ 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 learning how to draw them.
-A collection of basic components, most based on IEEE
-standards~\cite{IEEEstd},
+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
@@ -204,8 +202,6 @@ produce {\sl file}{\tt.ps},
which can be printed or viewed using {\tt gsview}, for example.
For \TPGF,
Invoking PDFlatex on the source produces {\tt .pdf} output directly.
-%Whether or not the figure environment is used,
-%the essential line in all cases is \verb|\input quick|.
The essential line is \verb|\input quick| whether or not the figure
environment is used.
@@ -301,9 +297,34 @@ the commands for producing the {\tt .tex} file can be reduced
\verb%m4 quick.m4 | dpic -p > quick.tex%
+\enlargethispage{\baselineskip}
+\item
+You can put several diagrams into a single source file.
+Make each diagram the body of a \latex macro, as shown:
+
+\par
+\verb|\newcommand{\diaA}{%|\NVL
+\verb|.PS|\NVL
+{\sl drawing commands}\NVL
+\verb|.PE|\NVL
+\verb|\box\graph }% \box\graph not required for dpic|\NVL
+\verb|\newcommand{\diaB}{%|\NVL
+\verb|.PS|\NVL
+{\sl drawing commands}\NVL
+\verb|.PE|\NVL
+\verb|\box\graph }% \box\graph not required for dpic|\NVL
+Produce a {\tt .tex} file as usual,
+insert the {\tt .tex} into the \latex source, and
+invoke the macros \verb^\diaA^ and \verb^\diaB^ at the appropriate places.
+
\item
-It may be desirable to invoke \Mfour and \dpic automatically from the
-document file as shown:
+%Whether this and the next item rightly belong under the heading
+%``Simplifications'' might be debated. They appear most useful
+%when a project-management tool is employed.
+In some circumstances,
+it may be desirable to invoke \Mfour and \dpic automatically from the
+document. Define a macro \verb|\mtotex| as shown in the
+following example:
{\tt \verb^\documentclass{article}^ \brtt
\verb^\usepackage{tikz}^ \brtt
@@ -322,7 +343,7 @@ The first argument of \verb|\mtotex| is a {\tt p} for pstricks or
Sources \verb|FileA.m4| and \verb|FileB.m4| must contain any required
\verb|include| statements,
and the main document should be processed using
-the latex or pdflatex option \verb|-shell-escape|.
+the latex or pdflatex option \verb|--shell-escape|.
If the {\tt M4PATH} environment variable is not set then insert
{\tt -I }{\sl installdir} after {\tt m4} in the command definition,
where {\sl installdir} is the absolute path to the installation directory.
@@ -333,24 +354,24 @@ A derivative of this method that allows the insertion of
\pic code into a \Tikz picture is described in \SR{Tikzwithpic:}.
\item
-You can put several diagrams into a single source file.
-Make each diagram the body of a \latex macro, as shown:
+It might be convenient for the source of small diagrams to be part
+of the document source text. The {\tt filecontents} environment of current
+\LaTeX\ allows this; older versions can employ a now-obsolete package
+{\tt filecontents.sty}. The following example
+for processing by {\tt pdflatex} \verb|--shell-escape|
+first writes the \Mfour\ source
+to file {\tt sample.m4}, invokes \verb|\mtotex| on it, and reads in the result:
\par
-\verb|\newcommand{\diaA}{%|\NVL
-\verb|.PS|\NVL
-{\sl drawing commands}\NVL
-\verb|.PE|\NVL
-\verb|\box\graph }% \box\graph not required for dpic|\NVL
-\verb|\newcommand{\diaB}{%|\NVL
+\verb|\begin{filecontents}[overwrite,noheader,nosearch]{sample.m4}|\NVL
+\verb|include(pgf.m4)|\NVL
\verb|.PS|\NVL
-{\sl drawing commands}\NVL
+\verb|cct_init|\NVL
+{\sl drawing commands} $\ldots$\NVL
\verb|.PE|\NVL
-\verb|\box\graph }% \box\graph not required for dpic|\NVL
-Produce a {\tt .tex} file using \verb|\mtotex|
-or \Mfour and \dpic or \gpic,
-insert the {\tt .tex} into the \latex source, and
-invoke the macros \verb^\diaA^ and \verb^\diaB^ at the appropriate places.
+\verb|\end{filecontents}|\NVL
+\verb|\mtotex{g}{sample}|\NVL
+\verb|\input{sample.tex}|\NVL
\end{enumerate}
\subsection{Including the libraries\label{Libraries:}}
@@ -394,7 +415,7 @@ begin with the characters {\tt m4}.
\xection{\Pic essentials\label{Pic:}}
-\Pic source is a sequence of lines in a file.
+\Pic source is a sequence of lines in a text file.
The first line of a diagram begins with {\tt .PS} with optional following
arguments, and the last line is normally {\tt .PE}.
Lines outside of these pass through the \pic processor unchanged.
@@ -406,7 +427,9 @@ The visible objects can be divided conveniently into two classes, the
The object {\tt move} is linear but draws nothing. A compound object,
or {\tt block,} is planar and consists of a pair of square brackets enclosing
other objects, as described in \SR{Compoundobjects:}.
-Objects can be placed using absolute coordinates or relative to other objects.
+
+Objects can be placed using absolute coordinates or,
+as is often better, relative to other objects.
\Pic allows the definition of real-valued variables, which are alphameric
names beginning with lower-case letters, and computations using them.
@@ -829,18 +852,21 @@ were added after the previously shown source:
\end{itemize}
\subsection{The two-terminal elements\label{Twoterminal:}}
-The two-terminal elements are shown in \FRS{CctTable}
-% to~\REF{Diodes} and \FRS{Fuses}
-%to~\REF{Switches}.
-to~\REF{Arresters}.
+The two-terminal elements are shown in
+\FRS{Resistors}
+to~\REF{Switches} and part of~\FR{Arresters}.
Several elements are included more than once to illustrate
-some of their arguments, which are listed in \SR{defines}.
-\enlargethispage{\baselineskip}
+some of their arguments, which are listed in detail in \SR{defines}.
+\FR{Resistors} shows some resistors with typical variants.
\begin{figure}[h!]
- \input CctTableMan
-% \ifpdf\vspace*{-\baselineskip}\fi%
- \caption{Basic two-terminal elements, showing some variations.}
- \label{CctTable}
+ \input ResistorsMan
+ \caption{Resistors dawn 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.}
+ \label{Resistors}
\end{figure}
The first macro argument specifies
@@ -849,13 +875,7 @@ If the argument is blank,
the element is drawn from the current position in the current drawing
direction along a default length.
The other arguments produce variants of the default elements.
-\begin{figure}[ht]
- \input AmpTableMan
- \caption{Amplifier, delay, and integrator.}
- \label{AmpTable}
- \end{figure}
-\pagebreak
Thus, for example,
\par
{\tt resistor(up\_ 1.25,7)}
@@ -866,60 +886,82 @@ vertices per side.
The macro {\tt up\_} evaluates to {\tt up} but also resets the current
directional parameters to point up.
-\begin{figure}[ht]
+\pagebreak
+Capacitors are illustrated in \FR{Capacitors}.
+See \SR{Composite:} for the {\tt variable} macro.
+\begin{figure}[h!t]
+ \input CapacitorsMan
+ \caption{The {\tt capacitor({\sl linespec, chars,} [R],{\sl height, width})}
+ macro, and an example application of the {\tt variable} macro.}
+ \label{Capacitors}
+ \end{figure}
+
+Basic inductors are illustrated in \FR{Inductors}.
+\begin{figure}[h!]
+ \input InductorsMan
+ \caption{Basic inductors created with the
+ {\tt inductor({\sl linespec,} W|L, {\sl cycles,} M|P|K, {\sl loop wid})}
+ macro, the {\tt ebox} macro for European-style inductors, and some
+ modifications (see also \SR{Composite:}).
+ When an embellished element is repeated several times,
+ writing a wrapper macro may be desirable.}
+ \label{Inductors}
+ \end{figure}
+
+Some more basic elements are in \FR{MoreTable}, and amplifiers in \FR{AmpTable}.
+\begin{figure}[h!t]
+ \input MoreTableMan
+ \caption{More two-terminal elements.}
+ \label{MoreTable}
+ \end{figure}
+\begin{figure}[h!t]
+ \input AmpTableMan
+ \caption{Amplifier, delay, and integrator.}
+ \label{AmpTable}
+ \end{figure}
+
+\FR{Sources} shows sources, many of which contain internal symbols,
+and of which the {\tt AC} and {\tt S} options illustrate the need
+to draw a single cycle of a sinusoid or approximate sinusoid.
+\begin{figure}[h!t]
\input SourcesMan
-% \ifpdf\vspace*{-0.5\baselineskip}\fi%
\caption{Sources and source-like elements.}
\label{Sources}
\end{figure}
-
-The {\tt AC} and {\tt S} options of the {\tt source} macro in \FR{Sources}
-illustrate the need
-to draw a single cycle of a sinusoid or approximate sinusoid.
As a convenience,
the macro {\tt ACsymbol(at {\sl position, length, height,}
[A]U|D|L|R|{\sl degrees})} is included as an interface to
the {\tt sinusoid} macro. For example to add the sumbol
-(\input{ACsymbol.tex}) to an ebox:
+``\input{ACsymbol.tex}'' to an ebox:
\par
{\tt ebox; $\lbrace$\ ACsymbol(at last [],{,},dimen\_/8) $\rbrace$}
\noindent
For direct current (\input{DCsymbol.tex}), there is also
-{\tt DCsymbol(at {\sl position, length, height,} U|D|L|R|{\sl degrees})}.
+{\tt DCsymbol(at {\sl position, length, height,} U|D|L|R|{\sl degrees})},
+and for power-system diagrams, macros
+{\tt Deltasymbol(at {\sl position, keys,} U|D|L|R|{\sl degrees})},
+and
+{\tt Ysymbol(at {\sl position, keys,} U|D|L|R|{\sl degrees})},
-\begin{figure}[ht]
+\pagebreak
+Diodes and fuses are shown in \FRS{Diodes} and \REF{Fuses}.
+\begin{figure}[h!]
\input DiodesMan
\caption{The macro
{\tt diode(\linespec,B|CR|D|L|LE[R]|P[R]|S|T|V|v|w|Z|{\sl chars},[R][E])}.
Appending {\tt K} to the second argument draws an open arrowhead.}
\label{Diodes}
\end{figure}
-
-\begin{figure}[t!]
+\begin{figure}[h!]
\input FusesMan
\caption{Variations of the macros
{\tt fuse(\linespec, A|dA|B|C|D|E|S|HB|HC|SB, {\sl wid}, {\sl ht})}
and {\tt cbreaker(\linespec,L|R,D|T|TS)}.}
\label{Fuses}
\end{figure}
-\begin{figure}[t!]
- \input SwitchesMan
- \caption{The
- {\tt switch(\linespec,L|R,{\sl chars},L|B|D)}
- macro is a wrapper for the macros
- {\tt lswitch(\linespec,[L|R],[O|C][D][K][A])},
- {\tt bswitch(\linespec,[L|R],[O|C])},
- and the many-optioned
- {\tt dswitch(\linespec,R,W[ud]B[K] {\sl chars})} shown.
- The switch is drawn in the current drawing direction.
- A second-argument {\tt R} produces a mirror
- image with respect to the drawing direction.
- The separately defined macros {\tt Proxim} and {\tt Magn}
- embellish switches in the second-last row.}
- \label{Switches}
- \end{figure}
+\enlargethispage{\baselineskip}%
Most of the two-terminal elements are oriented; that is, they have
a defined direction or polarity. Several element macros include an
argument that reverses polarity, but there is also a more general
@@ -931,10 +973,7 @@ The first argument of the macro
\par
\noindent
is the name of a two-terminal element in quotes, followed by the
-element arguments. The element is drawn with reversed direction.
-
-\pagebreak
-Thus,
+element arguments. The element is drawn with reversed direction; thus,
\par
{\tt diode(right\_ 0.4); reversed(`diode',right\_ 0.4)}
\par
@@ -955,31 +994,17 @@ by 1.8, for example
{\tt resized(1.8,`diode',right\_ 0.4);}
{\tt resized(1.8,`reversed',`diode',right\_ 0.4)}
-\pagebreak
-\FR{Arresters} shows a collection of surge-protection devices, or arresters,
-of which the {\tt E} and {\tt S} types may be either 2-terminal or as
-3-terminal (composite) elements described in \SR{Composite:}.
-\begin{figure}[ht]
- \input ArrestersMan
- \caption{Variations of the {\tt arrester({\sl linespec, chars,}
- {\sl wid}[{\tt :}{\sl arrowhead ht}], {\sl ht}[{\tt :}{\sl arrowhead wid})}
- macro. Putting {\tt D} in argument 2 for the {\tt S} or {\tt E}
- configuration creates a 3-terminal composite element
- with terminals {\sl A, B}, and {\sl G.}}
- \label{Arresters}
- \end{figure}
-
\FR{Emarrows} contains radiation-effect arrows for embellishing two-terminal
and other macros.
-The arrow stems are named {\sl A1}, {\sl A2},
-and each pair is drawn in a \verb|[]| block, with
-the names {\sl Head} and {\sl Tail} defined to
-aid placement near another device. The second argument specifies
-\begin{figure}[ht]
+\begin{figure}[h!]
\input EmarrowsMan
\caption{Radiation arrows: {\tt em\_arrows({\sl type, angle, length})}}
\label{Emarrows}
\end{figure}
+The arrow stems are named {\sl A1}, {\sl A2},
+and each pair is drawn in a \verb|[]| block, with
+the names {\sl Head} and {\sl Tail} defined to
+aid placement near another device. The second argument specifies
absolute angle in degrees (default 135 degrees).
The arrows are drawn relative to the diode direction by the {\tt LE}
option in \FR{Diodes}. For absolute arrow directions, one can
@@ -989,10 +1014,43 @@ at 45 degrees, for example:
{\tt define(`myLED',`diode(`\$1'); em\_arrows(N,45)
with .Tail at last [].ne')}
+\enlargethispage{\baselineskip}
+Switches with numerous controls are in \FR{Switches}.
+\begin{figure}[h!]
+ \input SwitchesMan
+ \caption{The
+ {\tt switch(\linespec,L|R,{\sl chars},L|B|D)}
+ macro is a wrapper for the macros
+ {\tt lswitch(\linespec,[L|R],[O|C][D][K][A])},
+ {\tt bswitch(\linespec,[L|R],[O|C])},
+ and the many-optioned
+ {\tt dswitch(\linespec,R,W[ud]B[K] {\sl chars})} shown.
+ The switch is drawn in the current drawing direction.
+ A second-argument {\tt R} produces a mirror
+ image with respect to the drawing direction.
+ The separately defined macros {\tt Proxim} and {\tt Magn}
+ embellish switches in the second-last row.}
+ \label{Switches}
+ \end{figure}
+
+\FR{Arresters} shows a collection of surge-protection devices, or arresters,
+of which the {\tt E} and {\tt S} types may be either 2-terminal or as
+3-terminal (composite) elements described in \SR{Composite:}.
+\begin{figure}[h!]
+ \input ArrestersMan
+ \caption{Variations of the {\tt arrester({\sl linespec, chars,}
+ {\sl wid}[{\tt :}{\sl arrowhead ht}],
+ {\sl ht}[{\tt :}{\sl arrowhead wid}])}
+ macro. Putting {\tt D} in argument 2 for the {\tt S} or {\tt E}
+ configuration creates a 3-terminal composite element
+ with terminals {\sl A, B}, and {\sl G.}}
+ \label{Arresters}
+ \end{figure}
+
\FR{Variable} shows some two-terminal elements with
arrows or lines overlaid to indicate variability using the macro
\par
-{\tt variable(`}{\sl element}{\tt',{\sl type},{\sl angle},{\sl length})},
+{\tt variable(`}{\sl element}{\tt',{\sl type},[+|-]{\sl angle},{\sl length})},
\noindent
where {\sl type} is one of {\tt A, P, L, N, NN} with {\tt C} or {\tt S}
@@ -1000,21 +1058,23 @@ optionally appended to indicate continuous or stepwise variation.
Alternatively, this macro
can be invoked similarly to the label macros in
\SR{Labels:} by specifying an empty first argument;
-thus, the following line draws the resistor in \FR{Variable}:
+thus, the following line draws the third resistor in \FR{Variable}:
\par
- {\tt resistor(down\_ dimen\_); variable(,uN)}
+ {\tt resistor(up\_ dimen\_); variable(,uN)}
\begin{figure}[ht]
\vspace*{-\baselineskip}
\input VariableMan
\caption{Illustrating
{\tt variable(`{\sl element}',%
-[A|P|L|[u]N]|[u]NN]][C|S],{\sl angle},{\sl length})}.
- For example,\break {\tt variable(`resistor(down\_ dimen\_)',A)} draws
- the leftmost resistor shown above, and {\tt variable(`resistor(down\_
- dimen\_)',uN)} draws the third resistor. The default angle is
- 45${}^{\circ}$, regardless of the direction of the element. The array
- on the right shows the effect of the second argument.}
+[A|P|L|[u]N]|[u]NN]][C|S],[+|-]{\sl angle},{\sl length})}.
+ For example, {\tt variable(`resistor(up\_ dimen\_)',A)} draws
+ the leftmost resistor shown above.
+ The default angle is 45${}^{\circ}$, regardless of the direction of
+ the element, but the angle preceded by a sign ($+$ or $-$) is taken
+ to be relative to the drawing direction of the element as for the
+ lower right capacitor in \FR{Capacitors}, for example. The array on
+ the right shows the effect of the second argument.}
\label{Variable}
\end{figure}
@@ -1026,8 +1086,16 @@ just been drawn. Many variations of this are possible:
\verb|arrow right arrowht from last line.start+(alpha,0) "$i_1$" above|
+\enlargethispage{\baselineskip}%
Macros have been defined to simplify labelling two-terminal
elements, as shown in \FR{currents}.
+\begin{figure}[ht]
+% \ifpdf\vspace*{-0.5\baselineskip}\fi%
+ \input currents
+ \caption{Illustrating {\tt b\_current, larrow,} and {\tt rarrow}.
+ The drawing direction is to the right.}
+ \label{currents}
+ \end{figure}
The macro
{\tt b\_current({\sl label,} above\_|below\_, In|O[ut], Start|E[nd],
@@ -1036,13 +1104,6 @@ The macro
\noindent
draws an arrow from the start of the last-drawn two-terminal element
{\sl frac} of the way toward the body.
-\begin{figure}[ht]
-% \ifpdf\vspace*{-0.5\baselineskip}\fi%
- \input currents
- \caption{Illustrating {\tt b\_current, larrow,} and {\tt rarrow}.
- The drawing direction is to the right.}
- \label{currents}
- \end{figure}
If the fourth argument is {\tt End}, the arrow is drawn from the end
toward the body.
@@ -1068,7 +1129,16 @@ quote, in which case the argument is copied literally. The third argument
specifies the separation from the element.
\subsection{Labels\label{Labels:}}
- Special macros for labeling two-terminal elements are included:
+ Arbitrary labels
+ can be positioned by any \pic\ placement method including the
+ representative basic examples shown:
+
+ {\tt "}{\sl text}{\tt" at {\sl position}}\NVL
+ {\tt "}{\sl text}{\tt" at {\sl position} above}\NVL
+ {\tt "}{\sl text}{\tt" wid {\sl width} ht {\sl height}
+ with .sw at {\sl position}}\NVL
+
+ In addition, special macros for labeling two-terminal elements are available:
\par
{\tt
llabel(} {\sl arg1,arg2,arg3} {\tt )
@@ -1085,6 +1155,14 @@ current direction:} {\tt up, down, left, right.}
The second places the arguments along the centre, and the third along the
right side.
A simple circuit example with labels is shown in \FR{Loop}.
+\begin{figure}[h!t]
+ \vspace*{-\baselineskip}
+ \parbox{4in}{\small \verbatiminput{Loop.m4}}%
+ \hfill\raise-0.5in\hbox{\input Loop }
+ \vspace*{-\baselineskip}
+ \caption{A loop containing labeled elements, with its source code.}
+ \label{Loop}
+ \end{figure}
The macro {\tt dlabel} performs these functions for an
obliquely drawn element, placing the three macro arguments at
{\tt vec\_(-long,lat),} {\tt vec\_(0,lat),} and {\tt vec\_(long,lat)}
@@ -1097,25 +1175,11 @@ Labels beginning
with {\tt sprintf} or a double quote are copied literally rather than
assumed to be in math mode.
- Arbitrary \latex including {\bsl\tt includegraphics,} for example,
- can also be placed on a diagram using
-
- {\tt "}{\sl \latex text}{\tt" wid {\sl width} ht {\sl height}
- at {\sl position}}
-
-\begin{figure}[ht]
- \vspace*{-\baselineskip}
- \parbox{4in}{\small \verbatiminput{Loop.m4}}%
- \hfill\raise-0.5in\hbox{\input Loop }
- \vspace*{-\baselineskip}
- \caption{A loop containing labeled elements, with its source code.}
- \label{Loop}
- \end{figure}
-
\xection{Placing two-terminal elements\label{Placing:}}
The length and position of a two-terminal element
-are defined by a straight-line segment and, possibly, a direction, so
-four numbers are required to place the element as in the following example:
+are defined by a straight-line segment, so
+four numbers or equivalent
+are required to place the element as in the following example:
\par
{\tt resistor(from (1,1) to (2,1))}.
@@ -1143,8 +1207,8 @@ To draw a resistor up $d$ units from the current position, for example:
{\tt resistor(up\_ d)}
\Pic stores the current drawing direction,
-the latter unfortunately limited to {\tt up, down, left, right,}
-which is assumed when necessary.
+which is unfortunately limited to {\tt up, down, left, right,}
+for reference when necessary.
The circuit macros need to know the current direction, so
whenever {\tt up, down, left, right} are used they should be written
respectively as the macros {\tt up\_, down\_, left\_, right\_} as in
@@ -1152,8 +1216,9 @@ the above example.
To allow drawing circuit objects in other than the standard four directions,
a transformation matrix
-is applied at the macro level to generate the required \pic code.
-Potentially, the matrix can be used for other transformations.
+is applied at the macro level to generate the required
+(but sometimes very elaborate) \pic code.
+Potentially, the matrix elements can be used for other transformations.
The macro
{\tt setdir\_({\sl direction, default direction})}
@@ -1178,7 +1243,7 @@ The macro {\tt eleminit\_} in the two-terminal elements invokes
to establish element length and direction.
As shown in \FR{Oblique},
-\begin{figure}[ht]
+\begin{figure}[h!t]
\vspace{-\baselineskip}
\parbox{4.5in}{\small \verbatiminput{Oblique.m4}}%
\hfill\raise-0.7in\llap{\hbox{\input Oblique }}%
@@ -1208,6 +1273,7 @@ as in {\tt `{`,'}',} as necessary.
Commas also may be avoided by writing
{\tt 0.5 between L and T} instead of {\tt 0.5<L,T>.}
+\pagebreak
\subsection{Series and parallel circuits\label{Seriesandparallel:}}
To draw elements in series, each element can be placed by specifying
@@ -1321,6 +1387,7 @@ to determine length and direction (but not position) of the block.
Nearly all elements drawn within blocks can be customized by adding an
extra argument, which is executed as the last item within the block.
+\pagebreak
The macro {\tt
potentiometer(\linespec,{\sl cycles},{\sl fractional pos},{\sl length},
@@ -1363,7 +1430,7 @@ drawn elements.
A few composite symbols derived from two-terminal elements
are shown in \FR{Composite}.
-\begin{figure}[h!b]
+\begin{figure}[ht]
\vspace*{-0.5ex}
% \vspace*{-\baselineskip}
\input Composite
@@ -1373,7 +1440,7 @@ are shown in \FR{Composite}.
\label{Composite}
\end{figure}
-\enlargethispage{\baselineskip}
+%\enlargethispage{\baselineskip}
The ground symbol is shown in \FR{Grounds}.
The first argument specifies position; for example, the two lines shown
have identical effect:
@@ -1442,14 +1509,14 @@ The {\tt opamp} labels can be rotated if necessary by
using postprocessor commands (for example \PSTricks \verb|\rput|)
as second and third arguments.
-The code in \FR{oax} places an opamp with three connections.
+The code in \FR{opampex} places an opamp with three connections.
\begin{figure}[h!b]
- \parbox{4in}{\small \verbatiminput{oaxbody.m4}}%
- \quad\raise-0.2in\hbox{\input oax }%
+ \parbox{4in}{\small \verbatiminput{opampexbody.m4}}%
+ \quad\raise-0.2in\hbox{\input opampex }%
% \vspace{-\baselineskip}
\caption{A code fragment invoking the
{\tt opamp(\linespec,-,+,{\sl size},[R][P])} macro.}
- \label{oax}
+ \label{opampex}
\end{figure}
\FR{Xform} shows variants of the transformer macro,
@@ -1587,8 +1654,8 @@ For drawing relays, the macro
{\tt relaycoil({\sl chars, wid, ht,} {\tt U|D|L|R|}{\sl degrees})}
shown in \FR{relaycoil} provides a choice of connection points and
actuator types.
-
\pagebreak
+
\begin{figure}[ht]
% \ifpdf\vspace*{-\baselineskip}\else\vspace*{-0.5\baselineskip}\fi%
\input relaycoilMan
@@ -1611,7 +1678,7 @@ terminals {\sl P$_i$, C$_i$, O$_i$.}
The {\tt jack} and {\tt plug} macros and their defined points are
illustrated in \FR{Jack}.
The first argument of both macros establishes the drawing direction.
-\begin{figure}[h!]
+\begin{figure}[!ht]
\input JackMan
\vspace{-1ex}
\caption{The {\tt jack(U|D|L|R|{\sl degrees}, {\sl chars})}
@@ -1635,27 +1702,22 @@ A macro for drawing headers is in \FR{Headers},
and some experimental connectors are shown in \FR{Conn} and \FR{Pconn}.
The {\tt tstrip} macro allows ``{\sl key}{\tt =}{\sl value}{\tt ;}'' arguments
for width and height.
-\begin{figure}[ht]
-% \ifpdf\vspace*{-0.5\baselineskip}\fi%
+\begin{figure}[h!b]
\input HeadersMan
-% \ifpdf{\vspace*{-0.5ex}}\fi%
\caption{Macro {\tt Header(1|2, {\sl rows, wid, ht, type})}.}
\label{Headers}
\end{figure}
-\begin{figure}[ht]
+\begin{figure}[h!b]
\input ConnMan
-% \ifpdf{\vspace*{-0.5ex}}\fi%
\caption{Macros {\tt tstrip(R|L|U|D|{\sl degrees}, {\sl chars})},
{\tt ccoax(at} {\sl location}, {\tt M|F, {\sl diameter})},
{\tt tconn(\linespec, >|>>|<|<<|O[F], {\sl wid})}, and
{\tt tbox({\sl text, wid, ht}, <|>|<>,{\sl type})}. }
\label{Conn}
-% \ifpdf{\vspace*{-1ex}}\fi%
\end{figure}
+
\begin{figure}[ht]
-% \ifpdf{\vspace*{-1ex}}\fi%
\input PconnMan
-% \ifpdf{\vspace*{-0.5ex}}\fi%
\caption{A small set of power connectors drawn by
{\tt pconnex(R|L|U|D|}{\sl degrees, chars}{\tt)}. Each connector has
an internal {\tt H}, {\tt N}, and where applicable, a {\tt G} shape.}
@@ -1665,7 +1727,7 @@ for width and height.
The double-throw switches shown in \FR{NPDT} are drawn in the
current drawing direction like the two-terminal elements, but are
composite elements that must be placed accordingly.
-\begin{figure}[h!b]
+\begin{figure}[h!t]
\ifpdf{\vspace*{-1ex}}\fi%
\input NPDTMan
\caption{Multipole double-throw switches drawn by
@@ -1678,7 +1740,7 @@ is shown in \FR{Windings}.
For simplicity, the complete spline
is first drawn and then blanked in appropriate places using the background
(core) color (\verb!lightgray! for example, default \verb!white!).
-\begin{figure}[h!b]
+\begin{figure}[h!t]
\vspace*{-\baselineskip}%
% \ifpdf\vspace*{-2\baselineskip}\else \vspace{-\baselineskip}\fi
\input WindingsMan
@@ -1690,6 +1752,7 @@ is first drawn and then blanked in appropriate places using the background
\label{Windings}
\end{figure}
+\pagebreak
\subsection{Semiconductors\label{Semiconductors:}}%
\FR{Bip} shows the variants of bipolar transistor macro
{\tt bi\_tr(\linespec,L|R,P,E)}
@@ -1697,9 +1760,7 @@ which contains predefined internal locations {\sl E},
{\sl B}, {\sl C}.
The first argument defines the distance and direction from {\sl E}
\begin{figure}[ht]
-% \ifpdf\vspace*{-0.5\baselineskip}\fi%
\input BipMan
-% \ifpdf\vspace*{-0.5\baselineskip}\fi%
\caption{Variants of bipolar transistor {\tt bi\_tr(\linespec,L|R,P,E)}
(current direction upward).}
\label{Bip}
@@ -1711,7 +1772,7 @@ current drawing direction according to the second argument. Setting the third
argument to {\tt P} creates a PNP device instead of NPN, and setting the
fourth to {\tt E} draws an envelope around the device.
\FR{Darlington} shows a composite macro with several optional internal elements.
-\begin{figure}[ht]
+\begin{figure}[h!t]
\input Darlington
\caption{Macro {\tt Darlington(L|R,[E][P][B1][E1|R1][E2|R2][D][Z])},
drawing direction {\tt up\_}.}
@@ -1720,8 +1781,7 @@ fourth to {\tt E} draws an envelope around the device.
The code fragment example in \FR{bitr} places a bipolar transistor,
connects a ground to the emitter, and connects a resistor to the collector.
-\begin{figure}[ht]
-%\vspace*{-\baselineskip}
+\begin{figure}[h!t]
\quad\quad\parbox{4in}{\small \verbatiminput{bitrbody.m4}}%
\quad\raise-0.4in\hbox{\input bitr }%
\vspace{-\baselineskip}
@@ -1734,8 +1794,7 @@ the macro {\tt bi\_trans(\linespec, L|R, {\sl chars}, E)}, which
draws the components of the transistor according to the characters in its
third argument. For example, multiple emitters and collectors can be
specified as shown in \FR{bitrans}.
-\begin{figure}[ht]
-%\vspace*{-0.5\baselineskip}
+\begin{figure}[h!t]
\input bi_trans
\caption{The {\tt bi\_trans(\linespec,L|R,{\sl chars},E)} macro.
The sub-elements are specified by the third argument. The substring
@@ -1744,21 +1803,21 @@ specified as shown in \FR{bitrans}.
\label{bitrans}
\end{figure}
-\pagebreak
A UJT macro with predefined internal locations {\sl B1,} {\sl B2,}
-and {\sl E} is shown in \FR{ujt},
-and a thyristor macro with predefined internal locations
- {\sl G} and {\sl T1,} {\sl T2,} or
- {\sl A,} {\sl K} is in \FR{thyristor}.
-Except for the {\sl G} terminal, a thyristor (the {\tt IEC} variant excluded)
-\begin{figure}[ht]
+and {\sl E} is shown in \FR{ujt}.
+\begin{figure}[h!t]
% \ifpdf\vspace*{-\baselineskip}\else\vspace*{-0.5\baselineskip}\fi%
\input ujtMan
% \ifpdf\vspace*{-0.5\baselineskip}\fi%
\caption{UJT devices, with current drawing direction {\tt up\_}. }
\label{ujt}
\end{figure}
-\begin{figure}[h!t]
+
+A thyristor macro with predefined internal locations
+ {\sl G} and {\sl T1,} {\sl T2,} or
+ {\sl A,} {\sl K} is in \FR{thyristor}.
+Except for the {\sl G} terminal, a thyristor (the {\tt IEC} variant excluded)
+\begin{figure}[h!b]
% \ifpdf\vspace*{-\baselineskip}\else\vspace*{-0.5\baselineskip}\fi%
\input thyristorMan
\vspace*{-1ex}
@@ -1770,7 +1829,7 @@ Except for the {\sl G} terminal, a thyristor (the {\tt IEC} variant excluded)
to the second argument to draw open arrowheads.}
\label{thyristor}
\end{figure}
-is much like an two-terminal element. The wrapper macro
+is much like a two-terminal element. The wrapper macro
{\tt scr({\sl linespec, chars, label})} and similar macros
{\tt scs, sus,} and {\tt sbs} place thyristors
using {\sl linespec} as for a two-terminal element,
@@ -1782,18 +1841,17 @@ but require a third argument for the label for the compound block; thus,
draws the element from position {\sl A} to position {\sl B} with label
{\sl Q3}, and draws a line from {\sl G}.
+\enlargethispage{\baselineskip}
Some FETs with predefined internal locations {\sl S,} {\sl D,} and {\sl G} are
also included, with similar arguments to those of {\tt bi\_tr,} as shown in
\FR{fet}.
\begin{figure}[ht]
-% \ifpdf\vspace*{-\baselineskip}\fi%
\input fetMan
-% \ifpdf\vspace*{-\baselineskip}\fi%
\caption{JFET, insulated-gate enhancement and depletion MOSFETs,
- and simplified versions.
+ simplified versions, graphene, and ferroelectric fets.
These macros are wrappers that invoke the {\tt mosfet}
macro as shown in the middle and bottom rows.
- The two lower-right examples show custom devices, the first
+ The bottom-row examples show custom devices, the first
defined by omitting the substrate connection, and the second
defined using a wrapper macro.}
\label{fet}
@@ -1823,7 +1881,7 @@ the {\tt thyristor(\linespec, {\sl chars})} macro illustrated in
\FR{thyristor} is derived from the diode and bipolar transistor macros.
Another example is the {\tt tgate} macro shown in \FR{Tgate}, which
also shows a pass transistor.
-\begin{figure}[ht]
+\begin{figure}[h!t]
% \ifpdf\vspace*{-\baselineskip}\fi%
\input TgateMan
\caption{The {\tt tgate({\sl linespec,} [B][R|L])} element, derived from
@@ -1835,13 +1893,12 @@ also shows a pass transistor.
\label{Tgate}
\end{figure}
-\pagebreak
Some other non-two-terminal macros are {\tt dot}, which has an
optional argument ``{\tt at} {\sl location}'', the line-thickness
macros, the {\tt fill\_} macro, and {\tt crossover}, which is a useful if
archaic method to show non-touching conductor crossovers, as in
\FR{bistable}.
-\begin{figure}[ht]
+\begin{figure}[h!t]
\input bistableMan
% \vspace{-1ex}
\caption{Bipolar transistor circuit, illustrating {\tt crossover}
@@ -1873,6 +1930,8 @@ 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.
+Basic \Pic\ objects are probably best colored and filled as discussed
+in \SR{Planarobjects:}.
\xection{Corners\label{Corners:}}%
If two straight lines meet at an angle then, depending on the postprocessor,
@@ -1898,6 +1957,7 @@ by half the line thickness (macro {\tt hlth}) as shown on the upper row
of the figure,
or a two-segment line can be overlaid at the corner to produce the same effect.
+\pagebreak
\xection{Looping\label{Looping:}}
Sequential actions can be performed using either the
\dpic command
@@ -1941,6 +2001,7 @@ 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.
\begin{figure}[h!]
+ \vspace*{-0.5\baselineskip}
\input LogicMan
\caption{Basic logic gates. The input and output locations of
a three-input NOR gate are shown. Inputs are negated by
@@ -1961,13 +2022,15 @@ regardless of gate orientation, as in \FR{FF}.
\caption{$SR$ flip-flop.}
\label{FF}
\end{figure}
-\begin{figure}[ht]
+Beyond a default number (6) of inputs, the
+gates are given wings as in \FR{exVIII}.
+\begin{figure}[h!t]
\input mplex
+ \vspace*{-0.5\baselineskip}
\caption{Eight-input multiplexer, showing a gate with wings.}
\label{exVIII}
\end{figure}
-Beyond a default number (6) of inputs, the
-gates are given wings as in \FR{exVIII}.
+
Negated inputs or outputs are marked by circles drawn using the
\verb|NOT_circle| macro. The name marks the point at the outer edge of the
circle and the circle itself has the same name prefixed by~{\tt N\_}.
@@ -2035,7 +2098,8 @@ If the first argument is non-blank however, then the buffer is drawn along
an invisible line like a two-terminal element, which is convenient sometimes
but requires internal locations of the block to be referenced using
{\tt last []}, as shown in \FR{Buffer}.
-\begin{figure}[ht]
+\begin{figure}[h!t]
+ \vspace*{-\baselineskip}
\input Buffer
\caption{The {\tt BUFFER\_gate} and {\tt BUFFER\_gen} macros.
The bottom two examples show how the gate can be drawn as a two-terminal
@@ -2071,7 +2135,6 @@ a label, use {\tt lg\_bartxt(}{\sl label}{\tt)}.
The {\sl pinopts} are {\tt [L|M|I|O][N][E]} as for the \verb|lg_pin| macro.
Optional argument 7 is the pin length in drawing units.
-\pagebreak
\FR{Multiplexer} shows a multiplexer block with variations, and
\FR{Demultiplexer} shows
the very similar demultiplexer.
@@ -2087,6 +2150,7 @@ the very similar demultiplexer.
[L][B|H|X][N[$n$]|S[$n$]][[N]OE],{\sl wid},{\sl ht})} macro.}
\label{Demultiplexer}
\end{figure}
+\pagebreak
Customized gates can be defined simply.
For example, the following code defines the custom flipflops in \FR{ShiftR}.
@@ -2104,7 +2168,6 @@ This definition makes use of macros \verb|L_unit| and
There are three pins on the right; the centre pin is null and
the bottom is null if the first macro argument is 1.
-\pagebreak
For hybrid applications, the \verb|dac| and \verb|adc| macros are
illustrated in \FR{Dac}.
The figure shows the default and predefined internal locations, the number
@@ -2175,7 +2238,8 @@ to change the size of a complete diagram while keeping the relative
proportions of objects within it. You may wish to change the sizes or
proportions of individual elements within a diagram. You must take
into account that line widths are scaled separately from drawn objects,
-and that the size of typeset text is independent of the \pic language.
+and that the size of typeset text is independent of the \pic language
+except when svg is being produced.
The scaling of circuit elements will be described first, then
the \pic scaling facilities.
@@ -2287,7 +2351,7 @@ If you develop a library of custom macros in the installation
directory then the statement {\tt include(}{\sl mylibrary}{\tt.m4)}
can bring its definitions into play.
-\enlargethispage{\baselineskip}
+%\enlargethispage{\baselineskip}
It may not be necessary to define your own macro if all that is needed is
a small addition to an existing element that is defined in an enclosing
\verb|[ ]| block. After the element arguments are expanded,
@@ -2326,7 +2390,7 @@ two macros are defined to simplify the repeated drawing
of a series resistor and series inductor, and the macro {\tt tsection} defines
a subcircuit that is replicated several times to generate \FR{Tline}.
{\small \verbatiminput{Tline.m4}}
-\begin{figure}[h!]
+\begin{figure}[h!t]
% \ifpdf\vspace*{-\baselineskip}\fi%
\input Tline
\caption{A lumped model of a transmission line, illustrating the
@@ -2336,10 +2400,17 @@ a subcircuit that is replicated several times to generate \FR{Tline}.
\Example{3}
%\par\noindent {\bf Example 3:}
-Composite elements containing several basic elements may be
-required. \FR{HybridPi} shows a circuit that can be drawn in
-any reference direction prespecified by {\tt Point\_({\sl degrees})},
-containing labels that always appear in their natural horizontal orientation.
+\FR{HybridPi} shows an element that is composed of several basic
+elements and that can be drawn in any direction prespecified by
+{\tt Point\_({\sl degrees})}. The labels always appear in their natural
+horizontal orientation.
+\begin{figure}[h!t]
+ \vspace*{-0.5ex}
+ \input HybridPi
+ \vspace*{-0.5ex}
+ \caption{A composite element containing several basic elements}
+ \label{HybridPi}
+ \end{figure}
Two flags in the argument determine the circuit orientation with respect to
the current drawing direction and whether a mirrored circuit is drawn.
The key to writing such a macro is to observe that the \pic language
@@ -2379,15 +2450,7 @@ define(`hybrid_PI_BJT',
`"$\mathrm{r_o}$"' at Ro.c+vec_(hunit/4,0)
`$2' ] ')
\end{verbatim}
-\begin{figure}[ht]
- \vspace*{-0.5ex}
- \input HybridPi
- \vspace*{-0.5ex}
- \caption{A composite element containing several basic elements}
- \label{HybridPi}
- \end{figure}
-%\enlargethispage{\baselineskip}
\Example{4}
A number of elements have arguments meant explicitly for customization.
\FR{Sinus} customizes the {\tt source} macro to show a cycle of a horizontal sinusoid with adjustable phase given by argument 2 in degrees,
@@ -2534,6 +2597,73 @@ placed by specifying the position of one of its defined points; by
default it will be placed as if it were a box.
\fi
+\subsection{Macro arguments\label{Marcroarguments:}}
+Macro parameters are defined
+by entering them into specific arguments, and if an argument is blank then
+a default parameter is used.
+For the resistor macro, for example:
+
+{\tt resistor( {\sl linespec, cycles, chars, cycle wid} );}
+
+\noindent
+an integer (3, say) in the second argument specifies the number of cycles.
+Arguments could be entered in a key--value style (for example,
+{\tt resistor(up\_ elen\_,style=N;cycles=8}) instead of by positional
+parameters, but it was decided early on
+to keep macro usage as close as possible to \pic\ conventions.
+
+More recently, a mixed style has been adopted by which some
+parameters are entered using keys. Two macros assist this process,
+of which the first is
+
+{\tt setkey\_({\sl string, key, default value, }[N])}
+
+The first argument
+is taken to be a sequence of semicolon (;)-separated terms of the form
+{\tt key={\sl value};}.
+Then for example in a macro, the line
+
+{\tt setkey\_( `\$2', wdth, dimen\_*2 )}
+
+\noindent
+checks argument 2 for a term {\tt wdth=}{\sl value} and defines
+the macro {\tt m4wdth} to evaluate to
+{\tt (dimen\_*2)} if not found,
+otherwise to {\tt ({\sl value}).}
+The enclosing parentheses are omitted if the
+third argument of {\tt setkey\_} is {\tt N,} as may be required if {\tt m4wdth}
+is non-numeric.
+
+In addition, the macro
+
+{\tt setkeys\_({\sl string, keysequence})}
+
+\noindent
+applies {\tt setkey\_()} multiple times to its {\sl keysequence}
+(second) argument.
+Each term of the second argument consists of the three
+arguments of {\tt setkey\_} separated by the colons (:) rather than commas.
+
+For example, consider the elementary example of a custom box macro:
+
+\begin{verbatim}
+define(`custombox',
+`setkeys_(`$1',wdth:boxwid:; hgt:boxht:; label::N; text::N)
+ ifelse(m4label,,,m4label:) box wid m4wdth ht m4hgt "m4text" ')
+\end{verbatim}
+
+Then {\tt custombox(wdth=2; label=B1; text=Hello)}
+first causes the macros {\tt m4wdth, m4hgt, m4label,} and {\tt m4text}
+to be created, with values {\tt (2), (boxht), B1,} and {\tt Hello}
+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
+{\tt define(`key\_prefix',`m4')}.
+
+
\xection{Interaction with \latex\label{Interaction:}}
The sizes of typeset labels and other \tex boxes are generally unknown
prior to processing the diagram by \latex.
@@ -2553,12 +2683,13 @@ B: box
The \pic interpreter cannot know the size of the text to the left
and right of the box, and the diagram is generated using
-default text values. One solution to this problem is to measure the
+default text size values. One solution to this problem is to measure the
text sizes by hand and include them literally, thus:\hfill\break
\hbox{}\quad%
\verb|"Left text" wid 38.47pt__ ht 7pt__ at B.w rjust|\hfill\break
but this is tedious.
+%\enlargethispage{\baselineskip}
Often, a better solution is to process the diagram twice. The
diagram source is processed as usual by \Mfour and a \pic processor, and the
main document source is \latex{}ed to input the diagram and format the
@@ -2579,7 +2710,7 @@ This hackery is summarized below, with an example in \FR{stringdim}.
The argument of {\tt s\_box} need not be text exclusively; it can
be anything that produces a \TeX\ box, for example, \verb|\includegraphics|.
\end{itemize}
-\begin{figure}[ht]
+\begin{figure}[h!t]
\parbox{3.5in}{\small\tt.PS\\
gen\_init\\
sinclude(Circuit\_macros.dim)\\
@@ -2589,10 +2720,10 @@ This hackery is summarized below, with an example in \FR{stringdim}.
\hbox{}\quad s\_box(Right text: \$x\^{}{\%g}\$,2) at B.e ljust\\
.PE}%
\hfill\llap{\raise-0.25in\hbox{\input stringdims }}%
- \caption{The macro {\tt s\_box} sets string dimensions automatically
+ \caption{Macro {\tt s\_box} sets string dimensions automatically
when processed twice. If two or more arguments are
given to {\tt s\_box}, they
- are passed through {\tt sprintf}. The dots show the figure bounding box.}
+ are passed through {\tt sprintf}. The bounding box is shown.}
\label{stringdim}
\end{figure}
@@ -2669,7 +2800,6 @@ for the second time:
Here is a second small example. Suppose that the file {\tt tsbox.m4} contains
the following:
-\pagebreak
\begin{verbatim}
\documentclass{article}
\usepackage{boxdims,ifpstricks(pstricks,tikz)}
@@ -2690,7 +2820,7 @@ The file is processed twice as follows:
The first command line produces a file {\tt tsbox.pdf} with
incorrect bounding box. The second command reads the data in {\tt tsbox.dim}
to size the label correctly. The equivalent pstricks commands (note
-the {\tt ifpstricks} macro in the second source line) are
+the {\tt ifpstricks} macro in the second line of the diagram source) are
{\tt m4 pstricks.m4 tsbox.m4 | dpic -p > tsbox.tex; latex tsbox}
\par
@@ -2889,7 +3019,7 @@ formats, as shown in \FR{Workflow}.
One of the easiest methods
for producing web documents is to generate postscript as usual and to
convert the result to pdf format with Adobe Distiller or equivalent.
-\begin{figure}[h!b]
+\begin{figure}[h!t]
% \ifpdf\vspace*{-\baselineskip}\fi%
\input Workflow
% \ifpdf\vspace*{-\baselineskip}\fi%
@@ -2944,61 +3074,63 @@ that includes the diagram using
\verb|\includegraphics{|{\sl filename}\verb|.mps}|
as usual.
-The \dpic processor is capable of other output formats, as illustrated in
-\FR{Workflow} and in example files included with the distribution.
-The \latex drawing commands alone or with {\tt eepic} or {\tt pict2e}
-extensions are suitable only for simple diagrams.
+The \dpic processor can generate other output formats,
+as illustrated in \FR{Workflow} and in example files included with the
+distribution. The \latex drawing commands alone or with {\tt eepic}
+or {\tt pict2e} extensions are suitable only for simple diagrams.
\xection{Developer's notes\label{Developersnotes:}}
Years ago in the course of writing a book, I took a few days off to
-write a \pic-like interpreter (\dpic) to automate the tedious
-coordinate calculations required by \latex picture objects. The
-macros in this distribution and the interpreter are the result of that
-effort, drawings I have had to produce since, and suggestions received from
-others. The interpreter has been upgraded over time to generate
-\mfpic, \MetaPost~\cite{metapost}, raw \Postscript, \Postscript with
-{\tt psfrag} tags, raw PDF, \PSTricks, and
-Ti{\it k}Z PGF output, the latter two my preference
-because of their quality and flexibility, including facilities for colour
-and rotations, together with simple font selection.
+write a \pic-like interpreter (\dpic) to automate the tedious coordinate
+calculations required by \latex picture objects. The macros in this
+distribution and the interpreter are the result of that effort, drawings
+I have had to produce since, and suggestions received from others.
+The interpreter has been upgraded over time to generate \mfpic,
+\MetaPost~\cite{metapost}, raw \Postscript, \Postscript with {\tt
+psfrag} tags, raw PDF, \PSTricks, and Ti{\it k}Z PGF output, the latter
+two my preference because of their quality and flexibility, including
+facilities for colour and rotations, together with simple font selection.
\Xfig{}-compatible output was introduced early on to allow the creation of
-diagrams both by programming and by interactive graphics.
-\SVG output was added relatively recently, and seems suitable for
-producing web diagrams directly and for further editing by the
-Inkscape interactive graphics editor. The latest addition
-is raw PDF output, which has very basic text capability and is most
-suitable for creating diagrams without labels, but on which sophisticated
-text can be overlaid. \Dpic can write the coordinates of selected
-locations to an external file to be used in overlaying text or other
-items on the diagram.
-
-Instead of using \pic macros, I preferred the equally simple
-but more powerful \Mfour macro processor, and therefore \Mfour is
-required here, although \dpic now supports \pic-like macros. Free
-versions of \Mfour are available for Unix, Windows, and other
-operating systems.
+diagrams both by programming and by interactive graphics. \SVG output
+was added relatively recently, and seems suitable for producing web
+diagrams directly and for further editing by the Inkscape interactive
+graphics editor. The latest addition is raw PDF output, which has very
+basic text capability and is most suitable for creating diagrams without
+labels, but on which sophisticated text can be overlaid if necessary.
+\Dpic can write the coordinates of selected locations to an external
+file to be used in overlaying text or other items on the diagram.
+
+The main value of this distribution is not intended to be in the use
+of a specific language but in the element data encoded in the macros,
+which have been developed with reference to standards and refined over
+more than two decades, and which now total thousands of lines. Some of
+the macros have become less readable as more options and flexibility
+have been added, and if starting over today, perhaps I would change
+some details. Compromises have been made in order to retain reasonable
+compatibility with the variety of postprocessors. No choice of tool
+is without compromise, and producing good graphics seems to be time
+consuming, no matter how it is done, especially for circuits or other
+diagrams that contain random detail.
+
+Instead of using \pic macros, I preferred the equally simple but more
+powerful \Mfour macro processor, and therefore \Mfour is required here,
+although \dpic now supports \pic-like macros.
+% One way of viewing macro
+% preprocessing is to suggest that \Mfour is to the \pic language as the C
+% preprocessor is to the C language.
+Free versions of \Mfour are available
+for Unix and its descendents, Windows, and other operating systems.
If starting over today would I not just use one of the other drawing
-packages available these days? It would depend on the context, but
-\pic remains a good choice for line drawings because it is easy to learn
+packages available these days? It would depend on the context, but \pic
+remains a good choice for line drawings because it is easy to learn
and read but powerful enough 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,
+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.
-The main value of this distribution is not in the use of a specific
-language but in the element data encoded in the macros, which have been
-developed with reference to standards and refined over two decades.
-Some of them have become less readable as more options and flexibility
-have been added, and if starting over today, perhaps I would change
-some details. Compromises have been made in order to retain reasonable
-compatibility with the variety of postprocessors. No choice of tool
-is without compromise, and producing good graphics seems to be time
-consuming, no matter how it is done, especially for circuits
-or other diagrams that contain random detail.
-
The \dpic interpreter has several output-format options that may be
useful. The {\tt eepicemu} and {\tt pict2e} extensions of the
primitive \latex picture objects are supported. The \mfpic output
@@ -3021,7 +3153,6 @@ With raw \Postscript, \PDF, and \SVG output, the user is
responsible for ensuring that the correct fonts are provided and for
formatting the text.
-\pagebreak
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
into a hobby that has persisted, thanks to your help and advice.
@@ -3030,10 +3161,6 @@ into a hobby that has persisted, thanks to your help and advice.
This section provides hints and a list of common errors.
The distributed macros are not written for maximum robustness.
-Arguments could be entered in a key--value style (for example, {\tt
-resistor(up\_ elen\_,style=N;cycles=8}) instead of by positional
-parameters, but it was decided early on
-to keep macro usage as close as possible to \pic\ conventions.
Macro arguments could be tested for correctness and
explanatory error messages could be written as necessary, but that
would make the macros more difficult to read and to write. You will
@@ -3041,7 +3168,7 @@ have to read them when unexpected results are obtained or when you wish
to modify them.
Maintaining reasonable compatibility with both \gpic\ and \dpic
-and, especially, for different postprocessors, has
+and, especially, with different postprocessors, has
resulted in some macros becoming more complicated than is preferable.
Here are some hints, gleaned from experience and from comments I have
@@ -3087,7 +3214,7 @@ received.
\item
\bflistitem{Initialization}{initialization}
If the first element macro evaluated is not two-terminal or is within a
-\Pic block, then later macros evaluated outside the block may produce
+\Pic\ block, then later macros evaluated outside the block may produce
the error message
{\tt there is no variable `rp\_ang'}
@@ -3157,8 +3284,8 @@ If information is omitted, default values are used. Writing
{\tt source(up\_)}
-\noindent draws a source up a distance equal to the current
-{\tt lineht} value, which may cause confusion.
+\noindent draws a source from the current position up a distance equal
+to the current {\tt lineht} value, which may cause confusion.
Writing
{\tt source(0.5)}
diff --git a/graphics/circuit_macros/doc/currents.m4 b/graphics/circuit_macros/doc/currents.m4
index 5b2e20fa54..74b5702654 100644
--- a/graphics/circuit_macros/doc/currents.m4
+++ b/graphics/circuit_macros/doc/currents.m4
@@ -17,7 +17,7 @@ cct_init
{"\tt $\ldots$(i,below\_,O)" at last line + (0,-0.20)}
}
- move down_ 0.60
+ move down_ 0.50
{right_
resistor; b_current(i,,,E)
{"\tt b\_current(i,{,},E)" wid 1.2 at last line + (0,-0.20)}
@@ -32,7 +32,7 @@ cct_init
{"\tt $\ldots$(i,below\_,O,E)" at last line + (0,-0.20)}
}
- move down_ 0.60
+ move down_ 0.55
{right_
del = 0.55
inductor; larrow(i)
diff --git a/graphics/circuit_macros/doc/defines.tex b/graphics/circuit_macros/doc/defines.tex
index fdc1f85c35..da19a5fcf0 100644
--- a/graphics/circuit_macros/doc/defines.tex
+++ b/graphics/circuit_macros/doc/defines.tex
@@ -38,7 +38,7 @@
\noindent
\LR{A} \LR{B} \LR{C} \LR{D} \LR{E} \LR{F} \LR{G} \LR{H} \LR{I} \LR{J}
\LR{K} \LR{L} \LR{M} \LR{N} \LR{O} \LR{P}
-\LR{R} \LR{S} \LR{T} \LR{U} \LR{V} \LR{W} \LR{X}
+\LR{R} \LR{S} \LR{T} \LR{U} \LR{V} \LR{W} \LR{X} \LR{Y}
\\
\Letter{A}%
@@ -122,11 +122,11 @@
{gen}
{arc with acute angle (obtuse if radius is negative), drawn in a [ ] block}
\macrodef{ArcAngle}{ArcAngle}{({\sl position, position, position, radius,
- modifiers}) }
+ modifiers, label}) }
{gen}
{Arc angle symbol drawn ccw at arg2. Arg4 is the radius from arg2;
- arg5 contains line attributes, e.g., {\tt thick linethick/2}}
-
+ arg5 contains line attributes, e.g., {\tt thick linethick/2 ->};
+ arg6 is an optional label at mid-arc}
\macrodef{arcd}{arcd}{({\sl center},
{\sl radius},{\sl start degrees},{\sl end degrees}) }
{gen}
@@ -191,6 +191,9 @@
{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
inputs are stacked in {\tt `AutoInNames'}}
+\macrodef{assign3}{assign3}{({\sl var name,var name,var name,arg4,arg5,arg6})}
+ {gen}
+ {Assigns \$1 = arg4 if \$1 is nonblank; similarly \$2 = arg5 and \$3 = arg6}
\macrodef{Autologix}{Autologix}%
{({\sl Boolean function sequence},%
[N[oconnect]][L[eftinputs]][R][V][M][;offset={\sl value}]}
@@ -321,22 +324,27 @@
{buzzer, {\sl In1} to {\sl In3} defined, C=curved
\seesect{Composite:}}
\Letter{C}%
-\macrodef{c\_fet}{c_fet}{(\linespec,L|R,P)}
+\macrodef{c\_fet}{c_fet}{(\linespec,R,P)}
{cct}
{left or right, plain or negated pin simplified MOSFET}
-\macrodef{capacitor}{capacitor}{(\linespec,{\sl char}[+[L]],R,
+\macrodef{capacitor}{capacitor}{(\linespec,{\sl chars},R,
{\sl height}, {\sl wid})}
{cct}
- {capacitor, {\sl char}: F or none=flat plate, C=curved-plate,
- E=polarized boxed plates,
- K=filled boxed plates,
- M=unfilled boxes,
- M=one rectangular plate,
- P=alternate polarized; + adds a polarity sign;
+ {capacitor, {\sl chars}:
+ F or blank=flat plate;
+ dF flat plate with hatched fill;
+ C=curved-plate;
+ dC=curved-plate with variability arrowhead;
+ E=polarized boxed plates;
+ K=filled boxed plates;
+ M=unfilled boxes;
+ M=one rectangular plate;
+ P=alternate polarized;
+ + adds a polarity sign;
+L polarity sign to the left of drawing direction;
- arg3: R=reversed polarity,
+ arg3: R=reversed polarity;
arg4 = height (defaults F: {\tt dimen\_}$/3$,
- C,P: {\tt dimen\_}$/4$, E,K: {\tt dimen\_}$/5$)
+ C,P: {\tt dimen\_}$/4$, E,K: {\tt dimen\_}$/5$);
arg5 = wid (defaults F: {\sl height}*0.3,
C,P: {\sl height}*0.4, E,K: {\sl height}) \seesect{Twoterminal:}}
\macrodef{cbreaker}{cbreaker}{(\linespec,L|R,D|Th|TS)}
@@ -358,9 +366,17 @@
{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})}
- {cct}
- {centre triple label \seesect{Labels:}}
+\macrodef{clabel}{clabel}{({\sl label},{\sl label},{\sl label},{\sl arg4},%
+ {\sl arg5})}
+ {cct}
+ {Triple label along the drawing axis of an element in the current
+ direction \seesect{Labels:}. Labels are placed at the beginning,
+ centre, or end of the last {\tt []} block (or a named {\tt []}
+ block). The labels are treated as math, but copied literally if
+ in double quotes or defined by sprintf. {\sl Arg4} can be {\tt
+ above,} {\tt below,} {\tt left,} or {\tt right} to supplement the
+ default position. {\sl Arg5} is the optional name of a {\tt []}
+ block to be labelled and is {\tt last []} by default}
\macrodef{cm\_\_}{cm__}{}
{gen}
{absolute centiimetres}
@@ -433,10 +449,9 @@
{cct}
{controlled-source width}
\Letter{D}%
-\macrodef{d\_fet}{d_fet}{(\linespec,L|R,P,S,E|S)}
+\macrodef{d\_fet}{d_fet}{(\linespec,R,P,E|S)}
{cct}
- {left or right, N or P depletion MOSFET, normal or simplified,
- without or with envelope or thick channel
+ {left or right, N or P depletion MOSFET, envelope or simplified
\seesect{Semiconductors:}}
\macrodef{dabove}{dabove}{(at {\sl location})}
{darrow}
@@ -536,6 +551,11 @@
\macrodef{deleminit\_}{deleminit_}{}
{darrow}
{sets drawing direction for dlines}
+\macrodef{Deltasymbol}{Deltasymbol}{(at {\sl position},keys,
+ U|D|L|R|{\sl degrees}) (default {\tt U} for up)}
+ {cct}
+ {Delta symbol for power-system diagrams.
+ {\sl keys:} {\tt size={\sl expression}}}
\macrodef{Demux}{Demux}{({\sl n},{\sl label},
{\tt [L][B|H|X][N[{\sl n}]|S[{\sl n}]][[N]OE],
{\sl wid},{\sl ht}})}
@@ -591,6 +611,18 @@ B|CR|D|G|L|LE[R]|P[R]|S|Sh|T|V|v|w|Z|chars,%
{\tt Z}=zener;
appending {\tt K} to arg 2 draws open arrowheads;
arg 3: {\tt R}=reversed polarity, {\tt E}=enclosure \seesect{Twoterminal:}}
+%\macrodef{DIP}{DIP}{({\sl pin count, attributes})}%
+% {log}
+% {Dual in-line package diagram. Default pin count = 8.
+% Arg2 ({\sl attributes})= semicolon-separated list of optional terms:
+% {\tt bodywid=}{\sl expr} (default 0.25$\,$in${}={}$5{\tt *L\_unit}),
+% {\tt bodylen=}{\sl expr} (default {\sl pin count} $\times$ {\sl pin pitch}),
+% {\tt pinpitch=}{\sl expr} (default 0.1),
+% {\tt pinwid=}{\sl expr} (default 0.06),
+% {\tt pinlen=}{\sl expr} (default 0.05),
+% {\tt direct=U|D|L|R} (default {\tt U} for up),
+% {\tt type=I|Q} (default {\tt I}; Q=pins of alternating length)
+% \seesect{Logicgates:}}
\macrodef{dir\_}{dir_}{}
{darrow}
{used for temporary storage of direction by darrow macros}
@@ -714,10 +746,10 @@ B|CR|D|G|L|LE[R]|P[R]|S|Sh|T|V|v|w|Z|chars,%
\macrodef{e\_}{e_}{}
{gen}
{.e relative to current direction}
-\macrodef{e\_fet}{e_fet}{(\linespec,L|R,P,S,E|S)}
+\macrodef{e\_fet}{e_fet}{(\linespec,R,P,E|S)}
{cct}
{left or right, N or P enhancement MOSFET, normal
- or simplified, without or with envelope or thick channel
+ or simplified, without or with envelope
\seesect{Semiconductors:}}
\macrodef{earphone}{earphone}{( U|D|L|R|{\sl degrees, size})}
{cct}
@@ -766,6 +798,11 @@ B|CR|D|G|L|LE[R]|P[R]|S|Sh|T|V|v|w|Z|chars,%
{3D}
{vector projected on current view plane with top face
of 3-dimensonal arrowhead normal to x2,y2,z2 }
+\macrodef{Fe\_fet}{Fe_fet}{(\linespec,R,{\sl chars})}
+ {cct}
+ {FET with superimposed ferroelectric symbol. Args 1 to 3 are as for
+ the {\tt mosfet} macro
+ \seesect{Semiconductors:}}
\macrodef{FF\_ht}{FF_ht}{}
{cct}
{flipflop height parameter in {\tt L\_unit}s}
@@ -841,6 +878,10 @@ B|CR|D|G|L|LE[R]|P[R]|S|Sh|T|V|v|w|Z|chars,%
\macrodef{G\_hht}{G_hht}{}
{log}
{gate half-height in {\tt L\_unit}s}
+\macrodef{g\_fet}{g_fet}{(\linespec,R,P,{\sl shade spec})}
+ {cct}
+ {left or right, N or P graphene FET, without or with shading
+ \seesect{Semiconductors:}}
\macrodef{gap}{gap}{(\linespec,{\sl fill},A)}
{cct}
{gap with (filled) dots, A=chopped arrow between dots\seesect{Twoterminal:}}
@@ -972,11 +1013,14 @@ n|e|s|w,{\sl length})}
\macrodef{in\_\_}{in__}{}
{gen}
{absolute inches}
-\macrodef{inductor}{inductor}{(\linespec,W|L,{\sl n},[M|P],{\sl loop wid})}
+\macrodef{inductor}{inductor}{(\linespec, W|L, {\sl cycles}, M[n]|P[n]|K[n],
+ {\sl loop wid})}
{cct}
{inductor, arg2: narrow (default), W=wide, L=looped;
- arg3: {\sl n} arcs (default 4);
- arg4: M=magnetic core, P=powder (dashed) core,
+ arg3: number of arcs or cycles (default 4);
+ arg4: M=magnetic core, P=powder (dashed) core, K=long-dashed core,
+ n={\sl integer} (default 2) number of core lines named
+ {\sl M4Core1, M4Core2,} $\ldots$;
arg5: loop width (default L,W: {\tt dimen\_}/5; other: {\tt dimen\_}/8)
\seesect{Twoterminal:}}
\macrodef{inner\_prod}{inner_prod}{({\sl linear obj},{\sl linear obj})}
@@ -1092,9 +1136,17 @@ n|e|s|w,{\sl length})}
\macrodef{ljust\_}{ljust_}{}
{gen}
{ljust with respect to current direction}
-\macrodef{llabel}{llabel}{({\sl label},{\sl label},{\sl label})}
- {cct}
- {triple label on left side of the element \seesect{Labels:}}
+\macrodef{llabel}{llabel}{({\sl label},{\sl label},{\sl label},{\sl arg4},%
+ {\sl arg5})}
+ {cct}
+ {Triple label on the left of an element with respect to the current
+ direction \seesect{Labels:}. Labels are placed at the beginning,
+ centre, or end of the last {\tt []} block (or a named {\tt []}
+ block). The labels are treated as math, but copied literally if
+ in double quotes or defined by sprintf. {\sl Arg4} can be {\tt
+ above,} {\tt below,} {\tt left,} or {\tt right} to supplement the
+ default position. {\sl Arg5} is the optional name of a {\tt []}
+ block to be labelled and is {\tt last []} by default}
\macrodef{loc\_}{loc_}{({\sl x}, {\sl y})}
{gen}
{location adjusted for current direction}
@@ -1108,24 +1160,26 @@ n|e|s|w,{\sl length})}
\macrodef{loge}{loge}{}
{gen}
{logarithm, base $e$}
-\macrodef{Loopover\_}{Loopover_}{(`{\sl variable}',{\sl actions},{\sl value1,
+\macrodef{Loopover\_}{Loopover_}{(`{\sl variable}',{\sl actions},{\sl
+value1,
value2, $\ldots$})}
{gen}
{Repeat {\sl actions} with {\sl variable} set successively to
- {\sl value1, value2, $\ldots$}, setting macro {\tt m4Lx} to 1, 2, $\ldots$,
- terminating if {\sl variable} is nul}
+ {\sl value1, value2, $\ldots$}, setting macro {\tt m4Lx} to 1, 2,
+ $\ldots$, terminating if {\sl variable} is nul}
\macrodef{lp\_xy}{lp_xy}{}
{log}
{coordinates used by {\tt lg\_pin}}
-\macrodef{lpop}{lpop}{({\sl xcoord}, {\sl ycoord}, {\sl radius}, {\sl fill},
- {\sl zero ht})}
- {gen}
- {for lollipop graphs: filled circle with stem to (xcoord,zeroht)}
+\macrodef{lpop}{lpop}{({\sl xcoord}, {\sl ycoord}, {\sl radius},
+{\sl fill},
+ {\sl zero ht})} {gen}
+ {for lollipop graphs: filled circle with stem to
+ (xcoord,zeroht)}
\macrodef{lswitch}{lswitch}{( \linespec, L|R, {\sl chars} )}
{cct}
{knife switch R=right orientation (default L=left);
- {\sl chars}=[O{\tt|}C][D][K][A] O=opening arrow; C=closing arrow; D=dots;
- K=closed switch; A=blade arrowhead \seesect{Twoterminal:}}
+ {\sl chars}=[O{\tt|}C][D][K][A] O=opening arrow; C=closing arrow;
+ D=dots; K=closed switch; A=blade arrowhead \seesect{Twoterminal:}}
\macrodef{lt\_}{lt_}{}
{gen}
{left with respect to current direction}
@@ -1141,7 +1195,8 @@ n|e|s|w,{\sl length})}
{arrow with adjustable head, filled when possible}
\macrodef{m4dupstr}{m4dupstr}{({\sl string},{\sl n},`{\sl name}')}
{gen}
- {Defines {\sl name} as {\sl n} concatenated copies of {\sl string}.}
+ {Defines {\sl name} as {\sl n} concatenated copies of {\sl
+ string}.}
\macrodef{m4lstring}{m4lstring}{({\sl arg1},{\sl arg2})}
{gen}
{expand {\sl arg1} if it begins
@@ -1163,9 +1218,9 @@ n|e|s|w,{\sl length})}
{memristor element\seesect{Twoterminal:}}
\macrodef{microphone}{microphone}{( A|U|D|L|R|{\sl degrees, size})}
{cct}
- {microphone; if arg1 = A: upright mic, otherwise arg1 sets direction
- of standard microphone with
- {\sl In1} to {\sl In3} defined
+ {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$})}
{gen}
@@ -1181,33 +1236,28 @@ 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} to Position2
+ of length arg4 (default {\tt linethick bp\_\_/2}); sets {\tt Here}
+ to Position2
\seesect{Corners:}}
\macrodef{mm\_\_}{mm__}{}
{gen}
{absolute millimetres}
\macrodef{mosfet}{mosfet}{(\linespec,L|R,{\sl chars},E)}
{cct}
- {MOSFET left or right, included components defined by characters, envelope.
+ {MOSFET left or right, included components defined by characters,
+ envelope.
arg 3 chars:
- {\tt [u][d]B:} center bulk connection pin;
- {\tt D:} D pin and lead;
- {\tt E:} dashed substrate;
- {\tt F:} solid-line substrate;
- {\tt [u][d]G:} G pin to substrate at source;
- {\tt [u][d]H:} G pin to substrate at center;
- {\tt L:} G pin to channel (obsolete);
- {\tt [u][d]M:} G pin to channel; u: at drain end; d: at source end
- {\tt [u][d]M{\sl n}:} multiple gates G0 to G{\sl n}
- {\tt Py:} parallel diode;
- {\tt Pz:} parallel zener diode;
- {\tt Q:} connect B pin to S pin;
- {\tt R:} thick channel;
- {\tt [u][d]S:} S pin and lead u: arrow up; d: arrow down;
- {\tt [d]T:} G pin to center of channel d: not circle;
- {\tt X:} XMOSFET terminal;
- {\tt Z:} simplified complementary MOS
+ {\tt [u][d]B:} center bulk connection pin; {\tt D:} D pin and lead;
+ {\tt E:} dashed substrate; {\tt F:} solid-line substrate; {\tt
+ [u][d]G:} G pin to substrate at source; {\tt [u][d]H:} G pin to
+ substrate at center; {\tt L:} G pin to channel (obsolete); {\tt
+ [u][d]M:} G pin to channel; u: at drain end; d: at source end {\tt
+ [u][d]M{\sl n}:} multiple gates G0 to G{\sl n} {\tt Py:} parallel
+ diode; {\tt Pz:} parallel zener diode; {\tt Q:} connect B pin to
+ S pin; {\tt R:} thick channel; {\tt [u][d]S:} S pin and lead u:
+ arrow up; d: arrow down; {\tt [d]T:} G pin to center of channel
+ d: not circle; {\tt X:} XMOSFET terminal; {\tt Z:} simplified
+ complementary MOS
\seesect{Semiconductors:}}
\macrodef{Mux\_ht}{Mux_ht}{}
{cct}
@@ -1216,19 +1266,15 @@ n|e|s|w,{\sl length})}
{cct}
{Mux width parameter in {\tt L\_unit}s}
\macrodef{Mux}{Mux}{({\sl n},{\sl label},
- {\tt [L][B|H|X][N[{\sl n}]|S[{\sl n}]][[N]OE],
- {\sl wid},{\sl ht}})}
+ {\tt [L][B|H|X][N[{\sl n}]|S[{\sl n}]][[N]OE], {\sl wid},{\sl ht}})}
{log}
{binary multiplexer, $n$ inputs,
- {\tt L} reverses input pin numbers,
- {\tt B} display binary pin 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} ({\tt N=}negated) {\tt OE} pin
- \seesect{Logicgates:}}
+ {\tt L} reverses input pin numbers, {\tt B} display binary pin
+ 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}
+ ({\tt N=}negated) {\tt OE} pin \seesect{Logicgates:}}
\macrodef{Mx\_pins}{Mx_pins}{}
{log}
{max number of gate inputs without wings}
@@ -1245,23 +1291,24 @@ n|e|s|w,{\sl length})}
\macrodef{NAND\_gate}{NAND_gate}{({\sl n},N)}
{log}
{`nand' gate, 2 or {\sl n\/} inputs; N=negated input.
- Otherwise, arg1 can be a sequence of letters {\tt P|N}
- to define normal or negated inputs.
+ Otherwise, arg1 can be a sequence of letters {\tt P|N} to define
+ normal or negated inputs.
\seesect{Logicgates:}}
\macrodef{ne\_}{ne_}{}
{gen}
{.ne with respect to current direction}
\macrodef{NeedDpicTools}{NeedDpicTools}{}
{gen}
- {executes {\tt copy "HOMELIB\_/dpictools.pic"} if the file has not been read}
+ {executes {\tt copy "HOMELIB\_/dpictools.pic"} if the file has
+ not been read}
\macrodef{neg\_}{neg_}{}
{gen}
{unary negation}
\macrodef{NOR\_gate}{NOR_gate}{({\sl n},N)}
{log}
{`nor' gate, 2 or {\sl n\/} inputs; N=negated input.
- Otherwise, arg1 can be a sequence of letters {\tt P|N}
- to define normal or negated inputs.
+ Otherwise, arg1 can be a sequence of letters {\tt P|N} to define
+ normal or negated inputs.
\seesect{Logicgates:}}
\macrodef{norator}{norator}{(\linespec,{\sl width},{\sl ht})}
{cct}
@@ -1269,13 +1316,14 @@ n|e|s|w,{\sl length})}
\macrodef{NOT\_circle}{NOT_circle}{}
{log}
{`not' circle}
-\macrodef{NOT\_gate}{NOT_gate}{(\linespec,[B][N|n],{\sl wid},{\sl height})}
+\macrodef{NOT\_gate}{NOT_gate}{(\linespec,[B][N|n],{\sl wid},{\sl
+height})}
{log}
{`not' gate.
When {\sl linespec} is blank then the element is composite and In1,
- Out, C, NE, and SE are defined; otherwise the element is drawn as
- a two-terminal element. arg2: {\tt B}=box gate, {\tt N}=not circle at input
- and output, {\tt n}=not circle at input only
+ Out, C, NE, and SE are defined; otherwise the element is drawn as a
+ two-terminal element. arg2: {\tt B}=box gate, {\tt N}=not circle at
+ input and output, {\tt n}=not circle at input only
\seesect{Logicgates:}}
\macrodef{NOT\_rad}{NOT_rad}{}
{log}
@@ -1289,21 +1337,20 @@ n|e|s|w,{\sl length})}
nw,nn,ne,ns,space ratio,pin lgth,style, other commands})}
{cct}
{ Default is a standard-box twoport. Args 2 to 5 are
- the number of ports to be drawn on w, n, e, s sides.
- The port pins are named by side, number, and by a or b pin,
- e.g., W1a, W1b, W2a, $\ldots$
- Arg 6 specifies the ratio of port width to interport space (default 2),
- and arg 7 is the pin length. Set arg 8 to N to omit the dots on
- the port pins. Arguments 1 and 9 allow customizations
+ the number of ports to be drawn on w, n, e, s sides. The port pins
+ are named by side, number, and by a or b pin, e.g., W1a, W1b, W2a,
+ $\ldots$ Arg 6 specifies the ratio of port width to interport space
+ (default 2), and arg 7 is the pin length. Set arg 8 to N to omit
+ the dots on the port pins. Arguments 1 and 9 allow customizations
\seesect{Composite:}}
\macrodef{nterm}{nterm}{({\sl box spec{\tt ;}other commands,
nw,nn,ne,ns,pin lgth,style, other commands})}
{cct}
{n-terminal box macro (default three pins).
- Args 2 to 5 are the number of pins to be drawn on W, N, E, S sides.
- The pins are named by side and number, e.g. W1, W2, N1, $\ldots$
- Arg 6 is the pin length. Set arg 7 to N to omit the dots
- on the pins. Arguments 1 and 8 allow customizations, e.g.
+ Args 2 to 5 are the number of pins to be drawn on W, N, E, S
+ sides. The pins are named by side and number, e.g. W1, W2, N1,
+ $\ldots$ Arg 6 is the pin length. Set arg 7 to N to omit the
+ dots on the pins. Arguments 1 and 8 allow customizations, e.g.
{\tt nterm(,{,},{,},{,}N,"\$a\$" at Box.w ljust,"\$b\$" at Box.e rjust,
"\$c\$" at Box.s above)} }
\macrodef{nullator}{nullator}{(\linespec,{\sl width},{\sl ht})}
@@ -1315,18 +1362,20 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{NXOR\_gate}{NXOR_gate}{({\sl n},N)}
{log}
{`nxor' gate, 2 or {\sl n\/} inputs; N=negated input.
- Otherwise, arg1 can be a sequence of letters {\tt P|N}
- to define normal or negated inputs.
+ Otherwise, arg1 can be a sequence of letters {\tt P|N} to define
+ normal or negated inputs.
\seesect{Logicgates:}}
\Letter{O}%
-\macrodef{opamp}{opamp}{(\linespec,{\sl label},{\sl label},{\sl size},{\sl
+\macrodef{opamp}{opamp}{(\linespec,{\sl label},{\sl
+label},{\sl size},{\sl
chars}, other commands)}
{cct}
{operational amplifier with $-,$ $+$ or other internal labels,
- specified size. {\sl chars:} {\tt P=} add power connections,
- {\tt R=} swap In1, In2 labels,
- {\tt T=} truncated point.
- The first and last arguments allow added customizations
+ specified size. {\sl chars:} {\tt P=} add power connections, {\tt
+ R=} swap In1, In2 labels, {\tt T=} truncated point. The internally
+ defined positions are {\sl W, N, E, S, Out, NE, SE, In, In2}, and
+ the (obsolete) positions {\sl E1 = NE, E2 = SE}. The first and last
+ arguments allow added customizations
\seesect{Composite:}}
\macrodef{open\_arrow}{open_arrow}{(\linespec,{\sl ht},{\sl wid})}
{gen}
@@ -1334,40 +1383,39 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{OR\_gate}{OR_gate}{({\sl n},N)}
{log}
{`or' gate, 2 or {\sl n\/} inputs; N=negated input.
- Otherwise, arg1 can be a sequence of letters {\tt P|N}
- to define normal or negated inputs.
+ Otherwise, arg1 can be a sequence of letters {\tt P|N} to define
+ normal or negated inputs.
\seesect{Logicgates:}}
\macrodef{OR\_gen}{OR_gen}{($n$,{\sl chars},[{\sl wid},[{\sl ht}]])}
{log}
{general OR gate: $n$=number of inputs $(0\leq n\leq 16)$;
{\sl chars:} B=base and straight sides; A=Arcs;
- [N]NE,[N]SE,[N]I,[N]N,[N]S=inputs or circles;
- [N]P=XOR arc; [N]O=output; C=center.
- Otherwise, arg1 can be a sequence of letters {\tt P|N}
- to define normal or negated inputs.}
+ [N]NE,[N]SE,[N]I,[N]N,[N]S=inputs or circles; [N]P=XOR arc;
+ [N]O=output; C=center.
+ Otherwise, arg1 can be a sequence of letters {\tt P|N} to define
+ normal or negated inputs.}
\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,%
+\macrodef{parallel\_}{parallel_}{(\char96{\sl
+elementspec}\char39,%
\char96{\sl elementspec}\char39 $\ldots$)}
{cct}
- { Parallel combination of two-terminal elements in a {\tt [ ]} block.
- Each argument is a {\em quoted} 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.
- Sep={\sl val}; in the first branch sets the default
- separation of all branches to {\sl val}; in a later
- element Sep={\sl val}; applies only to that branch.
- An element may have normal arguments but should
- not change the drawing direction.
+ { Parallel combination of two-terminal elements in a {\tt [
+ ]} block.
+ Each argument is a {\em quoted} 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. Sep={\sl val}; in the first branch
+ sets the default separation of all branches to {\sl val}; in a later
+ element Sep={\sl val}; applies only to that branch. An element may
+ have normal arguments but should not change the drawing direction.
\seesect{Seriesandparallel:}}
%\macrodef{par\_}{par_}{({\sl element},{\sl element},{\sl separation})}
-% {cct}
-% {two same-direction, same-length elements in parallel}
+% {cct} % {two same-direction, same-length elements in parallel}
\macrodef{proximity}{proximity}{(\sl linespec)}
{cct}
{proximity detector (= {\tt consource(,P)})}
@@ -1383,13 +1431,9 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{pconnex}{pconnex}{(R|L|U|D|{\sl degrees},{\sl chars})}
{cct}
{power connectors, arg 1: drawing direction; {\sl chars:}
- {\tt R}=right orientation,
- {\tt M|F}= male, female,
- {\tt A|AC}=115V, 3 prong, B=box, C=circle,
- {\tt P}= PC connector,
- {\tt D}= 2-pin connector,
- {\tt G|GC}= GB 3-pin,
- {\tt J}= 110V 2-pin
+ {\tt R}=right orientation, {\tt M|F}= male, female, {\tt A|AC}=115V,
+ 3 prong, B=box, C=circle, {\tt P}= PC connector, {\tt D}= 2-pin
+ connector, {\tt G|GC}= GB 3-pin, {\tt J}= 110V 2-pin
\seesect{Composite:}}
\macrodef{pi\_}{pi_}{}
{gen}
@@ -1397,8 +1441,7 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{plug}{plug}{(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:}}
+ {\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$}
@@ -1407,7 +1450,8 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
{(radians) set direction cosines}
\macrodef{PerpTo}{PerpTo}{({\sl Pos1, Line, Point})}
{gen}
- {{\sl Point} is the label for the point on {\sl Line} of the perpendicular
+ {{\sl Point} is the label for the point on {\sl Line} of the
+ perpendicular
from {\sl Point} to {\sl Line}.}
\macrodef{Point\_}{Point_}{({\sl integer})}
{gen}
@@ -1417,22 +1461,21 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
{rectangular-to polar conversion}
\macrodef{langle}{langle}{({\sl Start, End})}
{gen}
- {Angle in radians from horizontal of the line from {\sl Start} to {\sl End}.}
+ {Angle in radians from horizontal of the line from {\sl Start}
+ to {\sl End}.}
\macrodef{potentiometer}{potentiometer}{(\linespec,%
- {\sl cycles},{\sl fractional pos},{\sl length},$\cdots$)}
- {cct}
+ {\sl cycles},{\sl fractional pos},{\sl length},$\cdots$)} {cct}
{resistor with taps T1, T2, $\ldots$
- with specified fractional positions and lengths (possibly neg)
+ with specified fractional positions and lengths (possibly neg)
\seesect{Composite:}}
\macrodef{print3D}{print3D}{(x,y,z)}
- {3D}
- {write out triple for debugging}
+ {3D} {write out triple for debugging}
\macrodef{prod\_}{prod_}{({\sl a},{\sl b})}
{gen}
{binary multiplication}
\macrodef{project}{project}{({\sl x},({\sl y},({\sl z})}
- {3D}
- {3D to 2D projection onto the plane perpendicular to the view vector with
+ {3D} {3D to 2D projection onto the plane perpendicular to the view
+ vector with
angles defined by {\tt setview({\sl azim, elev})}}
\macrodef{psset\_}{psset_}{({\sl PSTricks settings})}
{gen}
@@ -1440,6 +1483,11 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{pt\_\_}{pt__}{}
{gen}
{\TeX\ point-size factor, in scaled inches, ({\tt *scale/72.27})}
+\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}) }
+ from the polar-coordinate data in the arguments }
\macrodef{ptrans}{ptrans}{(\linespec, [R|L])}
{cct}
{pass transistor; {\tt L=} left orientation
@@ -1458,40 +1506,31 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{rect\_}{rect_}{({\sl radius},{\sl angle})}
{gen}
{(radians) polar-rectangular conversion}
-\macrodef{reed}{reed}{({\sl linespec, width, height, box attribues}, [R][C])}
+\macrodef{reed}{reed}{({\sl linespec, width, height, box attribues},
+[R][C])}
{cct}
{Enclosed reed two-terminal contact;
- {\tt R}=right orientation; {\tt C}=closed contact;
- e.g., {\tt reed(,,dimen\_/5,shaded "lightgreen"}
- \seesect{Composite:}}
+ {\tt R}=right orientation; {\tt C}=closed contact; e.g., {\tt
+ reed(,,dimen\_/5,shaded "lightgreen"} \seesect{Composite:}}
\macrodef{relay}{relay}{({\sl number of poles, chars})}
{cct}
{relay: n poles (default 1), {\sl chars:} {\tt O}=normally open,
- {\tt C}=normally closed, {\tt P}=three position, default double throw,
- {\tt L}=drawn left (default),
- {\tt R}=drawn right, {\tt Th}=thermal.
- Argument 3={\tt [L|R]} is deprecated but works for
+ {\tt C}=normally closed, {\tt P}=three position, default double
+ throw, {\tt L}=drawn left (default), {\tt R}=drawn right, {\tt
+ Th}=thermal. Argument 3={\tt [L|R]} is deprecated but works for
backward compatibility
\seesect{Composite:}}
-\macrodef{relaycoil}{relaycoil}{({\sl chars, wid, ht,} R|L|U|D|{\sl degrees})}
- {cct}
- {chars:
- {\tt X}=or default: external lines from A2 and B2;
- {\tt AX}=external lines at positions A1,A3;
- {\tt BX}=external lines at positions B1,B3;
- {\tt NX}=no lines at positions A1,A2,A3,B1,B2,B3;
- {\tt SO}=slow operating;
- {\tt SOR}=slow operating and release;
- {\tt SR}=slow release;
- {\tt HS}=hight speed;
- {\tt HS}=hight speed;
- {\tt NAC}=unaffected by AC current;
- {\tt AC AC}=current;
- {\tt ML}=mechanically latched;
- {\tt PO}=polarized;
- {\tt RM}=remanent;
- {\tt RH}=remanent;
- {\tt TH}=thermal;
+\macrodef{relaycoil}{relaycoil}{({\sl chars, wid, ht,} R|L|U|D|{\sl
+degrees})}
+ {cct}
+ {chars:
+ {\tt X}=or default: external lines from A2 and B2; {\tt AX}=external
+ lines at positions A1,A3; {\tt BX}=external lines at positions
+ B1,B3; {\tt NX}=no lines at positions A1,A2,A3,B1,B2,B3; {\tt
+ SO}=slow operating; {\tt SOR}=slow operating and release; {\tt
+ SR}=slow release; {\tt HS}=high speed; {\tt NAC}=unaffected by AC
+ current; {\tt AC AC}=current; {\tt ML}=mechanically latched; {\tt
+ PO}=polarized; {\tt RM}=remanent; {\tt RH}=remanent; {\tt TH}=thermal;
{\tt EL}=electronic
\seesect{Composite:}}
\macrodef{resetdir\_}{resetdir_)}{}
@@ -1504,14 +1543,10 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
cycle wid})}
{cct}
{resistor, n cycles (default 3), {\sl chars:}
- {\tt E}={\tt ebox},
- {\tt ES}={\tt ebox} with slash,
- {\tt Q}=offset,
- {\tt H}=squared,
- {\tt N}=IEEE,
- {\tt V}=varistor variant,
- {\tt R}=right-oriented,
- {\sl cycle width} (default {\tt dimen\_}$/6$) \seesect{Twoterminal:}}
+ {\tt E}={\tt ebox}, {\tt ES}={\tt ebox} with slash, {\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$) \seesect{Twoterminal:}}
\macrodef{resized}{resized}{({\sl factor},`{\sl macro name}',args)}
{cct}
{scale the element body size by {\sl factor}}
@@ -1526,47 +1561,51 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
{gen}
{color drawing for PSTricks, pgf, MetaPost, SVG postprocessors;
(color entries are 0 to 1 except for SVG entries which are 0 to 255),
- see {\tt setrgb} \seesect{Semiconductors:}.
- Exceptionally, the color of
- SVG arrows other than the default black has to be defined using
- the {\tt outlined }{\sl string} and {\tt shaded }{\sl string} constructs.}
+ see {\tt setrgb} \seesect{Semiconductors:}. Exceptionally, the color
+ of SVG arrows other than the default black has to be defined using the
+ {\tt outlined }{\sl string} and {\tt shaded }{\sl string} constructs.}
\macrodef{rgbfill}{rgbfill}{({\sl color triple}, {\sl closed path})}
{gen}
- {fill with arbitrary color (color entries are 0 to 1 except
- SVG entries which are 0 to 255); see {\tt setrgb}\seesect{Semiconductors:}}
+ {fill with arbitrary color (color entries are 0 to 1 except
+ SVG entries which are 0 to 255); see {\tt
+ setrgb}\seesect{Semiconductors:}}
\macrodef{rgbstring}{rgbstring}{({\sl color triple or color name})}
{gen}
{evaluates to a string compatible with the postprocessor in use
to go with {\tt colored}, {\tt shaded}, or {\tt outlined} attributes.
- (PSTricks, metapost, pgf-tikz, pdf, postscript, svg).
- The arguments are fractions
- in the range $[0,1]$; For example,
- {\tt box outlined rgbstring(0.1,0.2,0.7) shaded rgbstring(0.75,0.5,0.25)}.
- For those postprocessors that allow it,
- there can be one argument which is the name of a defined color}
+ (PSTricks, metapost, pgf-tikz, pdf, postscript, svg). The arguments
+ are fractions in the range $[0,1]$; For example, {\tt box outlined
+ rgbstring(0.1,0.2,0.7) shaded rgbstring(0.75,0.5,0.25)}. For those
+ postprocessors that allow it, there can be one argument which is the
+ name of a defined color}
\macrodef{right\_}{right_}{}
{gen}
{set current direction right \seesect{Placing:}}
\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 =
+ attributes})} {gen}
+ {Draw a right-angle symbol at {\sl Pos2}, of size
+ given by arg4. Arg5 =
line attributes, e.g., {\tt outlined "gray"}}
\macrodef{rjust\_}{rjust_}{}
{gen}
{right justify with respect to current direction}
-\macrodef{rlabel}{rlabel}{({\sl label},{\sl label},{\sl label})}
- {cct}
- {triple label on right side of the element \seesect{Labels:}}
+\macrodef{rlabel}{rlabel}{({\sl label},{\sl label},{\sl label},{\sl arg4},%
+ {\sl arg5})}
+ {cct}
+ {Triple label on the right of an element with respect to the current
+ direction \seesect{Labels:}. Labels are placed at the beginning,
+ centre, or end of the last {\tt []} block (or a named {\tt []}
+ block). The labels are treated as math, but copied literally if
+ in double quotes or defined by sprintf. {\sl Arg4} can be {\tt
+ above,} {\tt below,} {\tt left,} or {\tt right} to supplement the
+ default position. {\sl Arg5} is the optional name of a {\tt []}
+ block to be labelled and is {\tt last []} by default}
\macrodef{rot3Dx}{rot3Dx}{({\sl radians,x,y,z})}
- {3D}
- {rotates x,y,z about x axis}
+ {3D} {rotates x,y,z about x axis}
\macrodef{rot3Dy}{rot3Dy}{({\sl radians,x,y,z})}
- {3D}
- {rotates x,y,z about y axis}
+ {3D} {rotates x,y,z about y axis}
\macrodef{rot3Dz}{rot3Dz}{({\sl radians,x,y,z})}
- {3D}
- {rotates x,y,z about z axis}
+ {3D} {rotates x,y,z about z axis}
\macrodef{Rot\_}{Rot_}{({\sl position, degrees})}
{gen}
{rotate position by degrees}
@@ -1576,20 +1615,20 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{rotbox}{rotbox}{({\sl wid,ht,type},[r|t={\sl val}])}
{gen}
{box oriented in current direction in {\tt [ ]} block;
- {\sl type}= 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 a ``superellipse,'' and the bounding box is then
- only approximate. }
+ {\sl type}= 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
+ a ``superellipse,'' and the bounding box is then only approximate. }
\macrodef{rotellipse}{rotellipse}{({\sl wid,ht,type})}
{gen}
{ellipse oriented in current direction in {\tt [ ]} block;
- e.g. {\tt Point\_(45); rotellipse(,{},dotted fill\_(0.9)).} Defined internal
- locations: N, S, E, W.}
+ e.g. {\tt Point\_(45); rotellipse(,{},dotted fill\_(0.9)).} Defined
+ internal locations: N, S, E, W.}
\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)}
@@ -1639,7 +1678,8 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\seesect{Interaction:}}
\macrodef{s\_init}{s_init}{({\sl name})}
{gen}
- {initialize {\tt s\_box} string label to {\sl name} which should be unique
+ {initialize {\tt s\_box} string label to {\sl name} which should
+ be unique
\seesect{Interaction:}}
\macrodef{s\_name}{s_name}{}
{gen}
@@ -1674,43 +1714,50 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{se\_}{se_}{}
{gen}
{.se with respect to current direction}
-\macrodef{series\_}{series_}{({\sl elementspec}, {\sl elementspec}, $\ldots$)}
+\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. 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
\seesect{Seriesandparallel:} }
-\macrodef{setdir\_}{setdir_}{(R|L|U|D|{\sl degrees}, {\sl default} U|D|R|L|{\sl degrees})}
+\macrodef{setdir\_}{setdir_}{(R|L|U|D|{\sl degrees}, {\sl default}
+U|D|R|L|{\sl degrees})}
{gen}
{store drawing direction and set it to
- up, down, left, right, or angle in degrees (reset by {\tt resetdir\_}).
- The directions may be spelled out, i.e., Right, Left, $\ldots$
+ up, down, left, right, or angle in degrees (reset by {\tt
+ resetdir\_}). The directions may be spelled out, i.e., Right,
+ Left, $\ldots$
\seesect{Seriesandparallel:}}
\macrodef{setrgb}{setrgb}{({\sl red value, green value, blue value},[{\sl
name}])}
{gen}
- {define colour for lines and text, optionally named (default {\tt lcspec});
+ {define colour for lines and text, optionally named (default
+ {\tt lcspec});
svg values are integers from 0 to 255\seesect{Semiconductors:}}
\macrodef{setkey\_}{setkey_}{({\sl string, key, default,}[N])}
{gen}
- {Key-value definition. The string contains semicolon-separated terms
+ {Key-value definition. The string contains semicolon-separated
+ terms
of the form {\sl key}{\tt =}{\sl value}. Then macro {\tt m4{\sl key}}
- is defined using {\tt pushdef} to be {\tt ({\sl value})} but if arg4 is
- nonbland, the parentheses are omitted.}
-\macrodef{setview}{setview}{({\sl azimuth degrees},{\sl elevation degrees})}
- {3D}
- {set projection viewpoint}
-\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}
+ is defined using {\tt pushdef} to be {\tt ({\sl value})} but if arg4
+ is nonbland, the parentheses are omitted.}
+\macrodef{setview}{setview}{({\sl azimuth degrees},{\sl elevation
+degrees})}
+ {3D} {set projection viewpoint}
+\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{sfgabove}{sfgabove}{}
{cct}
{like above but with extra space}
-\macrodef{sfgarc}{sfgarc}{(\linespec,{\sl text},{\sl text justification},cw|ccw,
+\macrodef{sfgarc}{sfgarc}{(\linespec,{\sl text},{\sl text
+justification},cw|ccw,
{\sl height scale factor})}
{cct}
{directed arc drawn between nodes, with text label
@@ -1718,16 +1765,17 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{sfgbelow}{sfgbelow}{}
{cct}
{like below but with extra space}
-\macrodef{sfgline}{sfgline}{(\linespec,{\sl text},{\sl text justification})}
+\macrodef{sfgline}{sfgline}{(\linespec,{\sl text},{\sl text
+justification})}
{cct}
{directed straight line chopped by node radius, with text label}
\macrodef{sfgnode}{sfgnode}{(at {\sl location},{\sl text},above|below,{\sl
circle options})}
{cct}
- {small circle default white interior, with text label. The default label
- position is inside if the diameter is bigger than {\tt textht} and
- {\tt textwid}; otherwise it is {\tt sfgabove.} Options such as fill or
- line thickness can be given.}
+ {small circle default white interior, with text label. The default
+ label position is inside if the diameter is bigger than {\tt textht}
+ and {\tt textwid}; otherwise it is {\tt sfgabove.} Options such as
+ fill or line thickness can be given.}
\macrodef{sfgself}{sfgself}{(at {\sl location}, U|D|L|R|{\sl degrees},
{\sl text}, {\sl text justification}, cw|ccw, {\sl scale factor})}
{cct}
@@ -1740,19 +1788,27 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
{gen}
{box with edge shading}
\macrodef{ShadedPolygon}{ShadedPolygon}{({\sl vertexseq, line attributes,
- degrees, colorseq})}
- {gen}
- {Draws the polygon specified in arg1 and shades the interior according
- to arg4 by drawing lines perpendicular to the angle in arg3.
- The {\sl vertexseq} is a colon ({\tt:}) separated sequence of vertex
- positions (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$
-}
+ degrees, colorseq})} {gen}
+ {Draws the polygon specified in arg1 and
+ shades the interior according
+ to arg4 by drawing lines perpendicular to the angle in arg3. The {\sl
+ vertexseq} is a colon ({\tt:}) separated sequence of vertex positions
+ (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{shielded}{shielded}{(`{\sl two-terminal element}',
+ L|U, {\sl line attributes})} {cct}
+ {shielding in a {\tt [ ]} box for
+ two-terminal element. Arg2= blank
+ (default) to enclose the element body; L for the left side with
+ respect to drawing direction, R for right. Internal points {\tt
+ .Start, .End,} and {\tt .C} are defined}
\macrodef{SIdefaults}{SIdefaults}{}
{gen}
{Sets {\tt scale = 25.4} for drawing units in mm, and sets
- pic parameters {\tt lineht = 12, linewid = 12, moveht = 12, movewid = 12,
+ pic parameters {\tt lineht = 12, linewid = 12, moveht = 12, movewid
+ = 12,
arcrad = 6, circlerad = 6, boxht = 12, boxwid = 18, ellipseht = 12,
ellipsewid = 18, dashwid = 2, arrowht = 3, arrowwid = arrowht/2,}}
\macrodef{sign\_}{sign_}{({\sl number})}
@@ -1767,29 +1823,30 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{sind}{sind}{({\sl arg})}
{gen}
{sine of an expression in degrees}
-\macrodef{sinusoid}{sinusoid}{({\sl amplitude, frequency, phase, tmin, tmax,
+\macrodef{sinusoid}{sinusoid}{({\sl amplitude, frequency, phase, tmin,
+tmax,
linetype})}
{gen}
- {draws a sinusoid over the interval
- $(t_{\hbox{\scriptsize min}}, t_{\hbox{\scriptsize max}})$;
- 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}}
+ {draws a sinusoid over the interval $(t_{\hbox{\scriptsize min}},
+ t_{\hbox{\scriptsize max}})$;
+ 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{source}{source}{(\linespec,
- V|v|I|i|AC|B|F|G|H|J|Q|L|N|P|S[C[r]]|E[r]]|T|X|U|{\sl other},
- {\sl diameter},R)}
+ V|v|I|i|AC|B|F|G|H|J|Q|L|N|P|S[C[r]]|E[r]]|T|X|U|{\sl other}, {\sl
+ diameter},R)}
{cct}
{source, blank or:
- V = voltage source; v = alternate voltage source;
- I = current source; i = alternate 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
- orientation; S = sinusoid; SC = quarter arc; SE =
- arc; T = triangle; U = square-wave; X = interior X;
- other = custom interior label or waveform;
- arg 4: R = reversed polarity;
- arg 5 modifies the circle with e.g., color or fill
+ V = voltage source; v = alternate voltage source; I =
+ current source; i = alternate 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 orientation; S =
+ sinusoid; SC = quarter arc; SE = arc; T = triangle;
+ U = square-wave; X = interior X; other = custom
+ interior label or waveform; arg 4: R = reversed
+ polarity; arg 5 modifies the circle with e.g.,
+ color or fill
\seesect{Twoterminal:}}
\macrodef{sourcerad\_}{sourcerad_}{}
{cct}
@@ -1802,8 +1859,7 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
{speaker, {\sl In1} to {\sl In7} defined; {\tt H}=horn
\seesect{Composite:}}
\macrodef{sprod3D}{sprod3D}{(a,x,y,z)}
- {3D}
- {scalar product of triple x,y,z by a}
+ {3D} {scalar product of triple x,y,z by a}
\macrodef{sqrta}{sqrta}{({\sl arg})}
{gen}
{square root of the absolute value of {\sl arg}; i.e.,
@@ -1811,32 +1867,31 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{SQUID}{SQUID}{({\sl n, diameter, initial angle}, {\tt ccw|cw})}
{cct}
{Superconducting quantum interface device
- with {\sl }n junctions labeled {\tt J1, ... J}{\sl n}
- placed around a circle with initial
- angle -90 deg (by default) with respect
- to the current drawing direction. The
- default diameter is {\tt dimen\_} }
+ with {\sl }n junctions labeled {\tt J1, ... J}{\sl n} placed around
+ a circle with initial angle -90 deg (by default) with respect to the
+ current drawing direction. The default diameter is {\tt dimen\_} }
\macrodef{stackargs\_}{stackargs}{(`{\sl stackname}',{\sl args})}
{gen}
{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}
\macrodef{stackexec\_}{stackexec_}{(`{\sl name 1}',`{\sl name 2}',%
{\sl commands})}
{gen}
- {Copy stack 1 into stack 2, performing arg3 for each nonblank entry}
+ {Copy stack 1 into stack 2, performing arg3 for each nonblank
+ entry}
\macrodef{stackprint\_}{stackprint_}{(`{\sl stack name}')}
{gen}
{Print the contents of the stack to the terminal}
-%\macrodef{stackpromote\_}{stackpromote_}{({\sl prefix},%
+%\macrodef{stackpromote\_}{stackpromote_}{({\sl prefix},%
% `{\sl stack name}',{\sl In name})}
% {gen}
-% {Define locations {\tt In1} or {\sl In name }{\tt 1}, $\ldots$ corresponding
-% to the locations in stack {\sl stack name}, as created by the
+% {Define locations {\tt In1} or {\sl In name }{\tt 1}, $\ldots$ corresponding % to the locations in stack {\sl stack name}, as created by the
% {\tt AutoGate} and {\tt Autologic} macros. Each location is prefixed
% by argument 1 ``.''}
\macrodef{stackreverse\_}{stackreverse_}{(`{\sl stack name}')}
@@ -1845,14 +1900,15 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{stacksplit\_}{stacksplit_}{(`{\sl stack name}',{\sl string},{\sl
separator})}
{gen}
- {Stack the fields of {\sl string} left to right separated by nonblank
- {\sl separator} (default .). White space preceding the fields is ignored.}
+ {Stack the fields of {\sl string} left to right separated
+ by nonblank
+ {\sl separator} (default .). White space preceding the fields
+ is ignored.}
\macrodef{sum\_}{sum_}{({\sl a},{\sl b})}
{gen}
{binary sum}
\macrodef{sum3D}{sum3D}{({\sl x1,y1,z1,x2,y2,z2})}
- {3D}
- {sum of two triples}
+ {3D} {sum of two triples}
\macrodef{sus}{sus}{({\sl linespec, chars, label})}
{cct}
{Wrapper to place an SUS thyristor as a two-terminal element with
@@ -1881,29 +1937,29 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
[{\sl arrowhd} | type={\sl arrowhd};name={\sl Name}],
{\sl fraction, length, fraction, length,} $\cdots$)}
{cct}
- {Draw the two-terminal element with taps in a [ ] block (see {\tt addtaps}).
- {\sl arrowhd} = blank or one of {\tt . - <- -> <->}.
- Each fraction determines the position along the element body of the tap.
- A negative length draws the tap to the right of the current
- direction; positive length to the left.
- Tap names are Tap1, Tap2, $\cdots$ by default or
- Name1, Name2, $\cdots$ if specified.
- Internal block names are {\tt .Start, .End,} and {.C} corresponding to the
- drawn element, and the tap names
- \seesect{Composite:} }
+ {Draw the two-terminal element with taps in a [ ] block (see
+ {\tt addtaps}).
+ {\sl arrowhd} = blank or one of {\tt . - <- -> <->}. Each fraction
+ determines the position along the element body of the tap. A negative
+ length draws the tap to the right of the current direction; positive
+ length to the left. Tap names are Tap1, Tap2, $\cdots$ by default
+ or Name1, Name2, $\cdots$ if specified. Internal block names are
+ {\tt .Start, .End,} and {.C} corresponding to the drawn element,
+ and the tap names \seesect{Composite:} }
\macrodef{tbox}{tbox}{({\sl text,wid,ht},<|>|<>,{\sl type})}
{cct}
- {Pointed terminal box. The {\sl text} is placed at the rectangular center
- in math mode unless the text begins with {\tt "} or {\tt sprintf} in which
- case the arument is used literally. Arg 4 determines whether the point is
- forward, backward, or both with respect to the current drawing direction.
+ {Pointed terminal box. The {\sl text} is placed at the rectangular
+ center
+ in math mode unless the text begins with {\tt "} or {\tt sprintf} in
+ which case the arument is used literally. Arg 4 determines whether
+ the point is forward, backward, or both with respect to the current
+ drawing direction.
\seesect{Composite:}}
\macrodef{tconn}{tconn}{({\sl linespec,}>|>>|<|<<|O[F],{\sl wid})}
{cct}
{Terminal connector, {\tt O}=circle; {\tt OF}=filled circle;
- {\tt > or >>} output connector
- (default {\tt >}) ;
- {\tt < or << input connector}; arg3 is arrowhead width or circle diameter
+ {\tt > or >>} output connector (default {\tt >}) ; {\tt < or <<
+ input connector}; arg3 is arrowhead width or circle diameter
\seesect{Composite:}}
\macrodef{tgate}{tgate}{({\sl linespec,} [B][R|L])}
{cct}
@@ -1911,11 +1967,11 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\seesect{Semiconductors:}}
\macrodef{thermocouple}{thermocouple}{({\sl linespec, wid, ht,} L|R)}
{cct}
- { Thermocouple drawn to the left (by default) of the {\sl linespec}
- line. If the {\sl linespec} length equals {\sl wid}
- (default {\tt dimen\_/5}), then only the two branches appear.
- {\tt R=} right orientation.
- \seesect{Twoterminal:}}
+ { Thermocouple drawn to the left (by default) of the {\sl
+ linespec}
+ line. If the {\sl linespec} length equals {\sl wid} (default
+ {\tt dimen\_/5}), then only the two branches appear. {\tt R=}
+ right orientation. \seesect{Twoterminal:}}
\macrodef{thicklines\_}{thicklines_}{({\sl number})}
{gen}
{set line thickness in points}
@@ -1923,40 +1979,40 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
{gen}
{set line thickness in points}
\macrodef{threeD\_init}{threeD_init}{}
- {3D}
- {initialize 3D transformations (reads {\tt lib3D.m4})}
+ {3D} {initialize 3D transformations (reads {\tt lib3D.m4})}
\macrodef{thyristor}{thyristor}{(\linespec,%
{\tt [SCR|SCS|SUS|SBS|IEC][{\sl chars}]})}
{cct}
{Composite thyristor element in {\tt []}block:
types
- SCR: silicon controlled rectifier (default),
- SCS: silicon controlled switch,
- SUS: silicon unilateral switch,
- SBS: silicon bilateral switch,
- IEC: type IEC.
+ SCR: silicon controlled rectifier
+ (default), SCS: silicon controlled
+ switch, SUS: silicon unilateral switch,
+ SBS: silicon bilateral switch, IEC:
+ type IEC.
{\sl Chars} to modify or define the element:
- K: open arrowheads,
- A: arrowhead,
- F: half arrowhead,
- B: bidirectional diode,
- E: adds envelope,
- H: perpendicular gate (endpoint G),
- N: anode gate (endpoint Ga),
- U: centre line in diodes
- V: perpendicular gate across arrowhead centre,
- R=right orientation,
- E=envelope
+ K: open arrowheads, A: arrowhead, F:
+ half arrowhead, B: bidirectional diode,
+ E: adds envelope, H: perpendicular
+ gate (endpoint G), N: anode gate
+ (endpoint Ga), U: centre line in diodes
+ V: perpendicular gate across arrowhead
+ centre,
+ R=right orientation, E=envelope
\seesect{Semiconductors:}}
\macrodef{tikznode}{tikznode}{({\sl \Tikz node name, position}) }
{pgf}
{insert \Tikz code to define a zero-size \Tikz node at {\sl location}
- (default {\tt Here}) to assist with inclusion of \pic code output in
- \Tikz diagrams. This macro must be invoked in the outermost \pic scope.
- \seesect{Tikzwithpic:}}
+ (default {\tt Here}) to assist with inclusion of \pic code output
+ in \Tikz diagrams. This macro must be invoked in the outermost
+ \pic scope. \seesect{Tikzwithpic:}}
\macrodef{tline}{tline}{(\linespec,{\sl wid},{\sl ht}) }
{cct}
{transmission line, manhattan direction\seesect{Twoterminal:}}
+\macrodef{ToPos}{ToPos}{({\sl position}, U|D|L|R|{\sl degrees}, {\sl length}) }
+ {gen}
+ {Evaluates to {\tt from {\sl position} - Rect\_({\sl length, angle}) to
+ {\sl position}} from the polar-coordinate data in the arguments }
\macrodef{tr\_xy\_init}{tr_xy_init}{({\sl origin, unit size, sign })}
{cct}
{initialize {\tt tr\_xy}}
@@ -1966,26 +2022,22 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{transformer}{transformer}{(\linespec,L|R,{\sl np},%
[A|P][W|L][D1|D2|D12|D21],{\sl ns})}
{cct}
- {2-winding transformer or choke with terminals P1, P2, TP, S1, S2, TS:
- arg2: L = left, R = right,
- arg3: np primary arcs,
- arg5: ns secondary arcs,
- arg4: A = air core, P = powder (dashed) core,
- W = wide windings, L = looped windings,
- D1: phase dots at P1 and S1 end; D2 at P2 and S2 end; D12 at P1 and S2 end;
- D21 at P2 and S1 end
+ {2-winding transformer or choke with terminals P1, P2, TP, S1,
+ S2, TS:
+ arg2: L = left, R = right, arg3: np primary arcs, arg5: ns secondary
+ arcs, arg4: A = air core, P = powder (dashed) core, W = wide windings,
+ L = looped windings, D1: phase dots at P1 and S1 end; D2 at P2 and
+ S2 end; D12 at P1 and S2 end; D21 at P2 and S1 end
\seesect{Composite:}}
\macrodef{tstrip}{tstrip}{(R|L|U|D|{\sl degrees, nterms, chars})}
{cct}
{terminal strip, chars:
- I=invisible terminals,
- C=circle terminals (default),
- D=dot terminals,
- O=omitted separator lines,
- {\tt wid=}value{\tt ;} total strip width,
+ I=invisible terminals, C=circle terminals (default), D=dot terminals,
+ O=omitted separator lines, {\tt wid=}value{\tt ;} total strip width,
{\tt ht=}value{\tt ;} strip height
\seesect{Composite:}}
-\macrodef{ttmotor}{ttmotor}{({\sl linespec, string, diameter, brushwid, brushht})}
+\macrodef{ttmotor}{ttmotor}{({\sl linespec, string, diameter, brushwid,
+brushht})}
{cct}
{motor with label\seesect{Twoterminal:}}
\macrodef{twopi\_}{twopi_}{}
@@ -1997,8 +2049,7 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
{unijunction transistor, right, P-channel, envelope
\seesect{Semiconductors:}}
\macrodef{unit3D}{unit3D}{(x,y,z)}
- {3D}
- {unit triple in the direction of triple x,y,z}
+ {3D} {unit triple in the direction of triple x,y,z}
\macrodef{up\_\_}{up__}{}
{gen}
{up with respect to current direction}
@@ -2007,30 +2058,33 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
{set current direction up \seesect{Placing:}}
\Letter{V}%
\macrodef{variable}{variable}{(`{\sl element}',
- {\tt [A|P|L|[u]N|[u]NN][C|S]},{\sl angle},{\sl length})}
+ {\tt [A|P|L|[u]N|[u]NN][C|S]}, [+|-]{\sl angle},
+ {\sl length}, at position)}
{cct}
{overlaid arrow or line to indicate variable 2-terminal element:
- {\tt A}=arrow, {\tt P}=preset,
- {\tt L}=linear,
- {\tt N}= symmetric nonlinear,
- {\tt C}=continuous, {\tt S}=setpwise; {\tt u} changes the
- nonlinearity direction
+ {\tt A}=arrow, {\tt P}=preset, {\tt L}=linear, {\tt N}= symmetric
+ nonlinear, {\tt C}=continuous, {\tt S}=setpwise; {\tt u} changes
+ the nonlinearity direction. The angle is absolute but preceding
+ it with a sign makes the angle (often -30 or -45) relative to the
+ element drawing direction. If arg5 is blank the symbol is placed
+ over the last {\tt [ ]} block
\seesect{Twoterminal:}}
\macrodef{Vcoords\_}{Vcoords_}{({\sl position})}
{gen}
{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}
{position rotated with respect to current direction}
\macrodef{View3D}{View3D}{}
- {3D}
- {The view vector (triple) defined by {\tt setview({\sl azim, elev})}. The
- {\tt project}
- macro projects onto the plane perpendicular to this vector}
+ {3D} {The view vector (triple) defined by {\tt setview({\sl azim,
+ elev})}. The
+ {\tt project} macro projects onto the plane perpendicular to this
+ vector}
\macrodef{vlength}{vlength}{({\sl x},{\sl y})}
{gen}
{vector length $\sqrt{x^2+y^2}$}
@@ -2039,7 +2093,8 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
{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}
@@ -2051,7 +2106,8 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
{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{w\_}{w_}{}
@@ -2071,8 +2127,8 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{XOR\_gate}{XOR_gate}{({\sl n},N)}
{log}
{`xor' gate, 2 or {\sl n\/} inputs; N=negated input.
- Otherwise, arg1 can be a sequence of letters {\tt P|N}
- to define normal or negated inputs.
+ Otherwise, arg1 can be a sequence of letters {\tt P|N} to define
+ normal or negated inputs.
\seesect{Logicgates:}}
\macrodef{XOR\_off}{XOR_off}{}
{log}
@@ -2084,4 +2140,10 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\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}
+ {Y symbol for power-system diagrams
+ {\sl keys:} {\tt size={\sl expression}; type=G}}
% \end{tabbing}
diff --git a/graphics/circuit_macros/doc/fetMan.m4 b/graphics/circuit_macros/doc/fetMan.m4
index 08498ef83d..9c39871378 100644
--- a/graphics/circuit_macros/doc/fetMan.m4
+++ b/graphics/circuit_macros/doc/fetMan.m4
@@ -1,11 +1,9 @@
.PS
-# `fet.m4'
+# `fetMan.m4'
cct_init
-dwn = 0.9
-dwn = 1.0
-rgt = 0.9
textht = 0.1
+define(`rmove',0.75)
dnl `IRF4905(linespec,R)'
define(`IRF4905',
@@ -18,74 +16,84 @@ define(`IRF4905',
G: Q.G
circle rad 5*dimen_/10 at Q.tr_xy(0,1) ]')
-define(`rmove',0.75)
-define(`dir_',`right_')
-
-Orig: Here
-dir_
- { move left 0.2 }
- {J: j_fet(right_ dimen_,,,E)
- "{\tt j\_fet(right\_ dimen\_,{,},E)}" wid 1.75 \
- with .nw at last [].sw+(0.0,-0.25)
- "$G$" at last [].G rjust above
- "$S$" at last [].S rjust
- "$D$" at last [].D ljust
- }
-
- move right_ 0.9; dir_
- {j_fet(,,P,)
- "{\tt j\_fet(,{,}P,)}" at last [].s+(0,-0.05) below
- "$G$" at last [].G rjust
- "$S$" at last [].S rjust
- "$D$" at last [].D ljust
- }
-
- move right_ 0.9; dir_
- {e_fet(,R,,)
- "{\tt e\_fet(,R,{,})}" at last [].s+(0,-0.05) below
- "$G$" at last [].G rjust
- "$S$" at last [].S rjust
- "$D$" at last [].D ljust
- }
-
- {move down_ dwn; dir_
- e_fet(,,P)
- "{\tt e\_fet(,{,}P)}" at last [].s+(0.1,-0.2) below}
-
- move right_ 0.9; dir_
- {d_fet(,,,)
- "{\tt d\_fet(,{,},)}" at last [].s+(0,-0.05) below}
-
- {move down_ dwn; dir_
- d_fet(,,P)
- "{\tt d\_fet(,{,}P)}" at last [].s+(0,-0.05) below}
-
- move right_ 0.9; dir_
- {e_fet(,,,S)
- "{\tt e\_fet(,{,},S)}" at last [].s+(0,-0.05) below}
-
- {move down_ dwn; dir_
- e_fet(,,P,S)
- "{\tt e\_fet(,{,}P,S)}" at last [].s+(0,-0.2) below}
-
- move right_ 0.9; dir_
- {d_fet(,,,S)
- "{\tt d\_fet(,{,},S)}" at last [].s+(0,-0.2) below}
-
- {move down_ dwn; dir_
- d_fet(,,P,S)
- "{\tt d\_fet(,{,}P,S)}" at last [].s+(0,-0.05) below}
-
- move right_ 0.9; dir_
- {c_fet(,,,)
- "{\tt `c\_fet'(,{,},)}" at last [].s+(0,-0.05) below}
-
- {move down_ dwn; dir_
- c_fet(,,P)
- "{\tt `c\_fet'(,{,}P)}" at last [].s+(0,-0.2) below}
+Row1: [ J: j_fet
+ { "{\tt j\_fet}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: j_fet(right_ dimen_,,P,E) with .w at J.e+(0.5,0)
+ { "{\tt j\_fet(right\_}" "{\tt dimen\_,{,}P,E)}" at J.s+(0,-13bp__) below
+ "$G$" at J.G rjust above
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: e_fet with .w at J.e+(0.5,0)
+ { "{\tt $\;$ e\_fet}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: e_fet(,,P) with .w at J.e+(0.6,0)
+ { "{\tt $\;$ e\_fet(,{,}P)}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: e_fet(,,P,S) with .w at J.e+(0.7,0)
+ { "{\tt $\;$ e\_fet(,{,}P,S)}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: c_fet with .w at J.e+(0.6,0)
+ { "{\tt $\;$ c\_fet}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: c_fet(,,P) with .w at J.e+(0.6,0)
+ { "{\tt $\;$ c\_fet(,{,}P)}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ ]
+
+Row2: [
+ J: d_fet
+ { "{\tt d\_fet}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: d_fet(,,P) with .w at J.e+(0.5,0)
+ { "{\tt d\_fet(,{,}P)}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: d_fet(,,P,S) with .w at J.e+(0.7,0)
+ { "{\tt d\_fet(,{,}P,S)}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: g_fet with .w at J.e+(0.6,0)
+ { "{\tt g\_fet}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: g_fet(up_ dimen_,,P) with .w at J.e+(0.6,0)
+ { "{\tt `g\_fet'(up\_$\;\;$}" at last [].s below
+ "{\tt dimen\_,{,}P)}" at last [].s + (0,-12bp__) below
+ "{\sl G}" at last [].G rjust
+ "{\sl S}" at last [].S + (0,2bp__) ljust
+ "{\sl D}" at last [].D + (0,2bp__) ljust below }
+ right_
+ M1: mosfet(,,dBSDFQM1,E) with .w at J.e+(0.5,0)
+ "$G0$" at M1.G0 above rjust
+ "$G1$" at M1.G1 above ljust
+ {"\tt `mosfet'(,{,}dBSDFQM1,E)" wid 1.45 \
+ with .nw at last [].sw+(0,-0.2) }
+ M2: mosfet(,,dBSDFQuM1) with .nw at M1.ne+(0.5,0)
+ "$G0$" at M2.G0 above ljust
+ "$G1$" at M2.G1 above rjust
+ {"\tt ...(,{,}dBSDFQuM1)" wid 1.25 \
+ with .n at last [].s+(0,-0.05) }
+ ] with .nw at Row1.sw+(0,-0.1)
-move down 1; right_
- [
+Row3: [
linewid = linewid*1.2
Q1: mosfet(,,dGSDF,)
@@ -132,8 +140,22 @@ move down 1; right_
"$D$" at last [].D ljust
"$B$" at last [].B below
}
-
- move right_ rmove
+ move right_
+ J: Fe_fet #(right_ dimen_)
+ {`"{\tt $\;$ Fe\_fet}"' at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ move right_
+ J: Fe_fet(,,TEDQSuB)
+ {`"{\tt $\;$ Fe\_fet(,,TEDSQuB)}"' at J.s+(0,-0.15) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ ] with .nw at last [].sw
+
+Row4: [
+ {move left 0.25}
Q5: mosfet(,,ZSDFdT,)
{"\tt `$\ldots$'(,{,}ZSDFdT,)" at last [].s+(0,-0.05) below
thinlines_
@@ -144,8 +166,7 @@ move down 1; right_
arrow <- down .08 right .24 from (Q5.G.x,Q5.G.y-0.02)
"\tt dT" ljust
thicklines_ }
-
- move right_ rmove
+ move right_ 0.8
up_
Q6: IRF4905 with .c at Here
{`"\tt IRF4905"' at Q6.s+(0,-0.15) below
@@ -153,18 +174,6 @@ move down 1; right_
"$D$" at Q6.D ljust above
"$S$" at Q6.S ljust below
}
- ] with .nw at J.sw+(0,-1.35) #Orig+(-0.26,-1.2)
-
- right_
- M1: mosfet(,,dBSDFQM1,E) with .nw at J.nw+(0,-dwn)
- "$G0$" at M1.G0 above rjust
- "$G1$" at M1.G1 above ljust
- {"\tt `mosfet'(,{,}dBSDFQM1,E)" wid 1.45 \
- with .nw at last [].sw+(0,-0.23) }
- M2: mosfet(,,dBSDFQuM1) with .nw at M1.ne+(0.5,0)
- "$G0$" at M2.G0 above ljust
- "$G1$" at M2.G1 above rjust
- {"\tt ...(,{,}dBSDFQuM1)" wid 1.25 \
- with .n at last [].s+(0,-0.05) }
+ ] with .nw at last [].sw
.PE
diff --git a/graphics/circuit_macros/doc/oax.m4 b/graphics/circuit_macros/doc/oax.m4
deleted file mode 100644
index d2396d6ced..0000000000
--- a/graphics/circuit_macros/doc/oax.m4
+++ /dev/null
@@ -1,5 +0,0 @@
-.PS
-# `oax.m4'
-cct_init
-include(oaxbody.m4)
-.PE
diff --git a/graphics/circuit_macros/doc/opampex.m4 b/graphics/circuit_macros/doc/opampex.m4
new file mode 100644
index 0000000000..0edc3296c3
--- /dev/null
+++ b/graphics/circuit_macros/doc/opampex.m4
@@ -0,0 +1,5 @@
+.PS
+# `opampex.m4'
+cct_init
+include(opampexbody.m4)
+.PE
diff --git a/graphics/circuit_macros/doc/oaxbody.m4 b/graphics/circuit_macros/doc/opampexbody.m4
index 983b816cf5..983b816cf5 100644
--- a/graphics/circuit_macros/doc/oaxbody.m4
+++ b/graphics/circuit_macros/doc/opampexbody.m4
diff --git a/graphics/circuit_macros/doc/relaycoilMan.m4 b/graphics/circuit_macros/doc/relaycoilMan.m4
index b3273794cd..7966a32294 100644
--- a/graphics/circuit_macros/doc/relaycoilMan.m4
+++ b/graphics/circuit_macros/doc/relaycoilMan.m4
@@ -3,7 +3,7 @@
cct_init
spc = dimen_/3
-{ relaycoil; S: "\tt re{}laycoil" at last [].s+(0,-20bp__)
+{ 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)
@@ -20,10 +20,12 @@ cct_init
{ "\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*4,0); "\tt (SR)" at (last [],S)
+ 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)
}
+ spc = dimen_/4
{
move down_ 3/4; right_
relaycoil(HS); S: "\tt (HS)" at last [].s+(0,-12bp__)
@@ -35,6 +37,7 @@ cct_init
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 0afd517ce7..6cbc945345 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 9.5, copyright (c) 2021 J. D. Aplevich under #
+# Circuit_macros Version 9.6, copyright (c) 2021 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 #
@@ -66,8 +66,8 @@ define array {
define array2 { for i_array=3 to $+ do {
exec sprintf("$1[%g,%g]=$%g",$2,i_array-2,i_array);}}
-# posarray(Var,position1,position2,...)
-# Var[1]:position1; Var[2]:Position2,...
+# posarray(Var,Position1,Position2,...)
+# Var[1]:Position1; Var[2]:Position2,...
define posarray {
for i_array=2 to $+ do { exec sprintf("$1[%g] : $%g",i_array-1,i_array); }}
diff --git a/graphics/circuit_macros/examples/AntiqueClock.m4 b/graphics/circuit_macros/examples/AntiqueClock.m4
deleted file mode 100644
index 814824bee7..0000000000
--- a/graphics/circuit_macros/examples/AntiqueClock.m4
+++ /dev/null
@@ -1,149 +0,0 @@
-.PS
-# AntiqueClock.m4
-gen_init
-NeedDpicTools
-
-# PSTricks or tikz only:
-ifelse(ifpstricks(T)`'ifpgf(T),T,`
-
-iflatex(`latexcommand({\sf)')
-
-# https://tex.stackexchange.com/questions/236923/generate-analog-clock-with-numbered-face-add-seconds-roman-numerals
-
-# `hms2deg(hr,min,sec) hr:min:sec to degrees
-# blank arg1: degrees for minute hand
-# blank arg1 and arg2: degrees for second hand'
-define(`hms2deg',`ifelse(`$1',,
- `ifelse(`$2',,
- `(90-pmod(ifelse(`$3',,0,`$3'),60)/60*360)',
- `(90-(pmod(`$2',60)/60 + pmod(ifelse(`$3',,0,`$3'),60)/60/60)*360)')',
- `(90-(pmod(`$1',12) + pmod(ifelse(`$2',,0,`$2'),60)/60 + dnl
- pmod(ifelse(`$3',,0,`$3'),60)/3600)/12*360)')')
-
-# `SecondHand(length,hr,min,sec)'
-define(`SecondHand',`[ shsf = (`$1')/3.2
- C: Here
- { L: rpoint_(to (Rect_(`$1',hms2deg(,,`$4')))) }
- line thick 8*shsf to rvec_(`$1',0)
- ]')
-
-# `AntiqueMinuteHand(length,hr,min,sec)'
-define(`AntiqueMinuteHand',`[ mhsf = (`$1')/2.84
- L: rpoint_(to (Rect_(`$1',hms2deg(,`$3',`$4'))))
- C: circle fill_(0) diam 0.47*mhsf at L.start
- move to C
- spline from rvec_(0,0.047*mhsf) \
- to rvec_(1.65*mhsf,0.11*mhsf) \
- then to rvec_(`$1',0.018*mhsf) \
- then to rvec_(`$1',-0.018*mhsf) \
- then to rvec_(1.65*mhsf,-0.11*mhsf) \
- then to rvec_(0,-0.047*mhsf) \
- shaded rgbstring(0,0,0)
- ]')
-
-# `AntiqueHourHand(length,hr,min,sec)'
-define(`AntiqueHourHand',`[ hhsf = (`$1')/2.2
- L: rpoint_(to (Rect_(`$1',hms2deg(`$2',`$3',`$4'))))
- C: circle fill_(0) diam 0.6*hhsf at L.start
- move to C
- v = 0.25*hhsf
- { line to rvec_(1.1*hhsf,0) thick 0.15/(1bp__)*hhsf }
- { C1: circle rad v at rvec_(1.25*hhsf,0) fill_(0) }
- d = `$1'-1.25*hhsf
- q = 1bp__*hhsf
- r1 = (d^2 + q^2 - v^2)/(v-q)/2
- h = r1+v
- shade(0,
- arc ccw from C1+vec_(d/h*v,(r1+q)/h*v) to \
- C1+vec_(d,q) rad r1 with .c at C1+vec_(d,r1+q)
- arc ccw from C1+vec_(d,-q) to C1+vec_(d/h*v,-(r1+q)/h*v) rad r1 \
- with .c at C1+vec_(d,-r1-q))
- ]')
-
-define(`AntiqueClock',`[ # h,m,s,diam
-# Clock size parameters:
- hour = ifelse(`$1',,3,`$1')
- minute = ifelse(`$2',,41,`$2')
- second = ifelse(`$3',,51,`$3')
- # outer radius
- ifelse(`$4',,`skale=0.5; r1=2',`r1=(`$4')/2; skale=r1/4')
- r2 = r1-0.5*skale
- r3 = r2-0.14*skale
- r4 = r3 - 0.35*skale
- r5 = r4 - 0.17*skale
- r6 = r5 - 0.63*skale
- r7 = r6 - 0.17*skale
- shadelinethick = 1.0
-
-C: circle thick 0.2 rad r1
-
-define shadeline {
- s = 1-($`'1)*2
- v = r*s
- h = sqrt(r^2-v^2)
- t = 1-abs(s)
- line from (vrot_(-h,v,cost,sint)) to (vrot_(h,v,cost,sint)) \
- thick shadelinethick outlined rgbstring(t,t,t)
- }
-
- r = r1 # Bezel outer
- nlines = int(2*r/(shadelinethick pt__)*1.1)
- cost = cosd(10); sint = sind(10);
- ShadeObject(shadeline,nlines, 0, 0,0,0, 0.5, 1,1,1, 1, 0,0,0 ) at C
-
- r = r2 # Bezel inner
- nlines = int(2*r/(shadelinethick pt__)*1.1)
- cost = cosd(-10); sint = sind(-10);
- ShadeObject(shadeline,nlines, 0, 0,0,0, 0.25, 0.8,0.8,0.8, 0.5, 1,1,1,
- 0.75, 0.8,0.8,0.8, 1, 0,0,0 ) at C
-
-# Clock face
-Face: circle thick 0 fill_(1) rad r3 at C
- circle rad r4 at C
- circle rad r5 at C
- circle rad r6 at C
- circle rad r7 at C
-
-# Text rotation for PSTricks or TikZ
- define(`rottext',
- `ifpstricks(`\rput[c]{%g}(0,0)',`ifpgf(`\pgftext[rotate=%g]',%g)')')
-# Outer numbers
- command sprintf("\font\outerfont=cmss12 at %4.2fin",r3-r4)
- for mn = -15 to 15 by 5 do { sprintf("rottext{\outerfont %g}",\
- -mn/60*360,pmod(mn,60)) at C+(Rect_((r3+r4)/2,90-mn/60*360)) }
- for mn = 20 to 40 by 5 do { sprintf("rottext{\outerfont %g}",\
- 180-mn/60*360,mn) at C+(Rect_((r3+r4)/2,90-mn/60*360)) }
-# Outer tics
- for mn = 1 to 60 do { t = 90-mn/60*360
- line from C+(Rect_(r5,t)) to C+(Rect_(r4,t)) }
-
-# Inner numbers
- command sprintf("\font\innerfont=cmss12 at %4.2fin",r5-r6)
- Loopover_(`mx',`t = (m4Lx-4)/12*360;
- sprintf("rottext{\scalebox{0.7}[1.0]{\innerfont mx}}",-t) \
- at C+(Rect_((r5+r6)/2,90-t))', IX,X,XI,XII,I,II,III)
- Loopover_(`mx',`t = (m4Lx+3)/12*360;
- sprintf("rottext{\scalebox{0.7}[1.0]{\innerfont mx}}",-t+180) \
- at C+(Rect_((r5+r6)/2,90-t))', IV,V,VI,VII,VIII)
-
-# Inner tics
- for mn = 5 to 60 by 5 do { t = 90-mn/60*360
- line from C+(Rect_(r7,t)) to C+(Rect_(r6,t)) }
-
-# Hands
- AntiqueHourHand(r6,hour,minute,second) with .C at C
- AntiqueMinuteHand(r5,hour,minute,second) with .C at C
- SecondHand((r3+r4)/2,hour,minute,second) with .C at C
-
-# Center
- dot(at C,0.1/4*r1,1)
- ]')
-
- Clock1: AntiqueClock(,,,3)
-# Clock2: AntiqueClock(4,50,07,2) at Clock1.e+(1.5,0)
-
- iflatex(`latexcommand(})')
-
-',` "AntiqueClock.m4 requires pstricks or pgf" ')
-
-.PE
diff --git a/graphics/circuit_macros/examples/ArrowFn.m4 b/graphics/circuit_macros/examples/ArrowFn.m4
new file mode 100644
index 0000000000..68c6d9724e
--- /dev/null
+++ b/graphics/circuit_macros/examples/ArrowFn.m4
@@ -0,0 +1,55 @@
+.PS
+# ArrowFn.m4
+# https://tex.stackexchange.com/questions/581089/arrow-function-diagrams
+gen_init
+ brad = 0.04
+ bht = 0.4
+ bwid = 0.25
+define(`rbox',`box rad brad outlined "Orange"')
+
+B1: [
+ linethick = 1.2
+ arrowwid = 0.08
+ rbox wid 5*boxwid ht 3/2*boxwid
+ line from last box.w-(bht/4,0) "\Large $X$" above ljust
+T: Here
+ arrow up bwid right bwid then right bwid
+F: rbox ht bht "\Large $f$"
+ {"\Large $Y$" above ljust }
+ arrow down bwid right bwid from T then right boxwid + bwid*3/2
+G: rbox ht bht "\Large $g$"
+ {"\Large $Z$" above ljust }
+S: circle diam bht "\Large $+$" at (G.e.x+boxwid,(F.y+G.y)/2)
+ d = F.y-S.nw.y
+ arrow from F.e to S.nw+(-d,d) then to S.nw
+ arrow from G.e to S.sw+(-d,-d) then to S.sw
+ arrow right from S.e
+ ]
+[
+ bht = bht/2
+ sbwid = boxwid*3/4
+ bbwid = sbwid*5/4
+ dh = bht/2
+B1: rbox wid bbwid ht bbwid
+B2: rbox wid sbwid*3/2 ht bbwid at B1+(3/2*bbwid,0)
+B3: rbox wid bbwid ht bbwid at B2+(3/2*bbwid,0)
+B4: rbox wid sbwid*3/2 ht bbwid at B3+(3/2*bbwid,0)
+B5: rbox wid bbwid ht bbwid at B4+(3/2*bbwid,0)
+ F: rbox ht bht wid sbwid at B2.n-(0,bht*3/4) "$f$"
+BR: B2.s+(0,B2.n.y-F.y)
+ G: rbox ht bht wid sbwid at (B4,F) "$g$"
+ S: circle diam bht*3/2 at B5+(bht/2,0) "$+$"
+ arrow right from S.e
+ T: B1.w+(dh,0)
+B: rbox ht bbwid*5/4 wid boxwid*7.25 with .w at T-(sbwid*3/4,0)
+ { line from T left sbwid "$x$" above ljust }
+ arrow from T to (B1.e-(dh,0),F) then to F.w
+ arrow from F.e to (B3.w+(dh,0),F) then to (B3.e-(dh,0),BR)
+ continue to (B5.w+(dh,0),Here) then to S.sw
+ line thick 5 outlined "white" from B3.sw to B3.ne chop brad
+ arrow from T to (B1.e-(dh,0),BR) then to (B3.w+(dh,0),BR) \
+ then to (B3.e-(dh,0),G) then to G.w
+ arrow from G.e to (B5.w+(dh,0),G) then to S.nw
+ ] with .nw at B1.sw+(0,-0.2)
+
+.PE
diff --git a/graphics/circuit_macros/examples/Ball.m4 b/graphics/circuit_macros/examples/Ball.m4
index 8c022223ef..e551dff845 100644
--- a/graphics/circuit_macros/examples/Ball.m4
+++ b/graphics/circuit_macros/examples/Ball.m4
@@ -29,19 +29,19 @@ command "\small{"
ifpstricks(
`command "\pscustom[fillstyle=gradient,gradmidpoint=1.0,%"
command sprintf("gradbegin=gray,gradend=white,gradlines=%g]{",rectwid*200)')
- line from project(-rectht/2,-rectwid*1/3,0) \
- to project( rectht/2,-rectwid*1/3,0) \
- then to project( rectht/2, rectwid*2/3,0) \
- then to project(-rectht/2, rectwid*2/3,0) \
- then to project(-rectht/2,-rectwid*1/3,0)
+ line from Project(-rectht/2,-rectwid*1/3,0) \
+ to Project( rectht/2,-rectwid*1/3,0) \
+ then to Project( rectht/2, rectwid*2/3,0) \
+ then to Project(-rectht/2, rectwid*2/3,0) \
+ then to Project(-rectht/2,-rectwid*1/3,0)
ifpstricks(command "}%")
define(`C3D',`0,0,alpha') # Centre of the sphere
- C: project(C3D)
+ C: Project(C3D)
# Shaded sphere
ifelse(m4postprocessor,pstricks,
- `Highlight: project(sum3D(C3D,rot3Dz(-15*dtor_,rot3Dy(-60*dtor_,alpha,0,0))))
+ `Highlight: Project(sum3D(C3D,rot3Dz(-15*dtor_,rot3Dy(-60*dtor_,alpha,0,0))))
command "\pscustom[fillstyle=gradient,gradmidpoint=0.0,%"
command sprintf("gradbegin=gray,gradend=white,gradlines=%g,%%",alpha*200)
command "GradientCircle=true,GradientScale=1.5,%"
@@ -54,18 +54,18 @@ command "\small{"
C.x,C.y,alpha/2.54)',
`circle rad alpha at C fill_(1) ')
- S: "$S$" at project(0,0,0) rjust # The sphere bottom touch point
+ S: "$S$" at Project(0,0,0) rjust # The sphere bottom touch point
"$\alpha$" at 0.5<S,C> rjust
define(`N3D',`0,0,2*alpha') # North pole
- N: "N" at project(N3D) ljust above
+ N: "N" at Project(N3D) ljust above
phi = 65*dtor_
define(`Phat3D',`rot3Dz(phi,alpha*2.7,0,0)')
- Phat: "$\hat{P}$" at project(Phat3D) ljust
+ Phat: "$\hat{P}$" at Project(Phat3D) ljust
- X: project(rectht/2*0.8,0,0)
- Y: project(0,rectwid/2*0.8,0)
+ X: Project(rectht/2*0.8,0,0)
+ Y: Project(0,rectwid/2*0.8,0)
`define' linevis { # ratio # Visibility function for lines fom S to Xb
$2 = distance(($1 between S and Xb),C)-alpha }
@@ -84,8 +84,8 @@ thinlines_ # axes
arrow up alpha*0.5 chop 0.05 chop 0 ; "$z,\:\zeta$" above ljust
invisline(Phat)
line to Phat chop 0.05 chop 0
- arc ccw -> rad alpha from project(alpha/2,0,0) to \
- project(rot3Dz(phi,alpha/2,0,0))
+ arc ccw -> rad alpha from Project(alpha/2,0,0) to \
+ Project(rot3Dz(phi,alpha/2,0,0))
"$\phi$" below at 0.5 between last arc.start and last arc.end
# vector (ratio along (N to Phat))
@@ -94,7 +94,7 @@ define(`ray',`sum3D(N3D,sprod3D($1,diff3D(Phat3D,N3D)))')
$2 = length3D(diff3D(ray($1),C3D))-alpha }
bisect( rayvis, 1e-3, 1, 1e-8, p ) # Find P
- P: "$P$" at project(ray(p)) ljust above
+ P: "$P$" at Project(ray(p)) ljust above
thicklines_
line dashed from N to P chop 0 chop 0.05
@@ -108,11 +108,11 @@ thinlines_ # Draw the meridian
bisect( meridianvis, 0, pi_, 1e-8, y )
n = 0
for ang = y-pi_ to y by pi_/20 do {
- Q[n]: project(sum3D(C3D,meridian(ang))); n+=1 }
+ Q[n]: Project(sum3D(C3D,meridian(ang))); n+=1 }
fitcurve(Q,n-1)
n = 0
for ang = y to y+pi_ by pi_/20 do {
- Q[n]: project(sum3D(C3D,meridian(ang))); n+=1 }
+ Q[n]: Project(sum3D(C3D,meridian(ang))); n+=1 }
fitcurve(Q,n-1,dashed)
define(`equator',`rot3Dz($1,alpha,0,0)')
@@ -122,15 +122,15 @@ define(`equator',`rot3Dz($1,alpha,0,0)')
bisect( equatorvis, 0, pi_, 1e-8, y )
n = 0
for ang = y-pi_ to y by pi_/20 do {
- Q[n]: project(sum3D(C3D,equator(ang))); n+=1 }
+ Q[n]: Project(sum3D(C3D,equator(ang))); n+=1 }
fitcurve(Q,n-1)
n = 0
for ang = y to y+pi_ by pi_/20 do {
- Q[n]: project(sum3D(C3D,equator(ang))); n+=1 }
+ Q[n]: Project(sum3D(C3D,equator(ang))); n+=1 }
fitcurve(Q,n-1,dashed)
line dashed from C to P # beta
- line dashed from C to project(sum3D(C3D,equator(phi)))
+ line dashed from C to Project(sum3D(C3D,equator(phi)))
arc ccw -> from 0.6 along_(last line) to 0.6 between C and P
"$\beta$" above
diff --git a/graphics/circuit_macros/examples/Buttons.m4 b/graphics/circuit_macros/examples/Buttons.m4
index 1eab236249..e7e5b004dc 100644
--- a/graphics/circuit_macros/examples/Buttons.m4
+++ b/graphics/circuit_macros/examples/Buttons.m4
@@ -3,6 +3,7 @@
gen_init
NeedDpicTools
+
divert(-1)
#################################################################
diff --git a/graphics/circuit_macros/examples/Capacitors.m4 b/graphics/circuit_macros/examples/Capacitors.m4
new file mode 100644
index 0000000000..d2586f1b9b
--- /dev/null
+++ b/graphics/circuit_macros/examples/Capacitors.m4
@@ -0,0 +1,38 @@
+.PS
+# `Capacitors.m4'
+cct_init
+
+movewid = 2 pt__
+hm = 2.05
+vm = 0.28
+{ {capacitor ; move ;"`{\tt capacitor}'" ljust}
+ move right_ hm
+ {capacitor(,C); move ;"`{\tt capacitor(,C)}'" ljust}
+ move right_ hm
+ {capacitor(,C+); move ;"`{\tt capacitor(,C+)}'" ljust}
+}
+ move down vm; right_
+{ {capacitor(,P); move ;"`{\tt capacitor(,P)}'" ljust}
+ move right_ hm
+ {capacitor(,E); move ;"`{\tt capacitor(,E)}'" ljust}
+ move right_ hm
+ {capacitor(,K); move ;"`{\tt capacitor(,K)}'" ljust}
+}
+ move down 0.25; right_
+{ {capacitor(,M); move ;"`{\tt capacitor(,M)}'" ljust}
+ move right_ hm
+ {capacitor(,N); move ;"`{\tt capacitor(,N)}'" ljust}
+ move right_ hm
+ {xtal ; move ;"`{\tt xtal}'" ljust}
+}
+ move down 0.25; right_
+{ {capacitor(,dC); move ;"`{\tt capacitor(,dC)}'" ljust}
+ move right_ hm
+ {capacitor(,dF); move ;"`{\tt capacitor(,dF)}'" ljust}
+ move right_ hm
+ {variable(`capacitor',NN,-30,dimen_/3)
+ move ;`"{\tt variable(}`{\tt capacitor',}"' ljust \
+ `"{\enskip\tt NN,-30,dimen\_/3)}"' ljust
+ }
+}
+.PE
diff --git a/graphics/circuit_macros/examples/CctTable.m4 b/graphics/circuit_macros/examples/CctTable.m4
deleted file mode 100644
index 443c398b46..0000000000
--- a/graphics/circuit_macros/examples/CctTable.m4
+++ /dev/null
@@ -1,93 +0,0 @@
-.PS
-# `CctTable.m4'
-cct_init
-
-movewid = 2 pt__
-hm = 2.05
-vm = 0.28
-{ {resistor ; move ;"`{\tt resistor}'" ljust}
- move right_ hm
- {resistor(,,Q) ; move ;"`\tt resistor(,{,}Q) '" ljust}
- move right_ hm
- {resistor(,,E) ; move
- "`\shortstack[l]{\tt resistor(,{,}E)\\ {\tt $\equiv$ ebox}}'" ljust}
-}
- move down vm; right_
-{ {resistor(,,ES) ; move ;"`\tt resistor(,{,}ES) '" ljust}
- move right_ hm
- {resistor(,,H) ; move ;"`\tt resistor(,{,}H) '" ljust}
- move right_ hm
- {ebox(,,,0.5) ; move ;"`{\tt ebox(,{,},0.5)}'" ljust}
-}
- move down vm; right_
-{ {resistor(,,V) ; move ;"`{\tt resistor(,{,}V)}'" ljust}
- move right_ hm
- {move down_ 0.05; right_
- thermocouple ; move;"`{\tt thermocouple}'" ljust; move up_ 0.05}
- move right_ hm
- {ebox(,0.5,0.3) ; move ;"`{\tt ebox(,0.5,0.3)}'" ljust}
-}
- move down vm; right_
-{ {inductor ; move ;"`{\tt inductor}'" ljust}
- move right_ hm
- {inductor(,W); move ;"`{\tt inductor(,W)}'" ljust}
- move right_ hm
- {inductor(,L); move ;"`{\tt inductor(,L)}'" ljust}
-}
- move down vm; right_
-{ {inductor(,,,M) ; move ;"`{\tt inductor(,{,},M)}'" ljust}
- move right_ hm
- {inductor(,W,6,P); move ;"`{\tt inductor(,W,6,P)}'" ljust}
- move right_ hm
- {move right_ 0.2; ttmotor(,G) ; move ;"`{\tt ttmotor(,G)}'" ljust}
-}
- move down vm; right_
-{ {capacitor ; move ;"`{\tt capacitor}'" ljust}
- move right_ hm
- {capacitor(,C); move ;"`{\tt capacitor(,C)}'" ljust}
- move right_ hm
- {capacitor(,C+); move ;"`{\tt capacitor(,C+)}'" ljust}
-}
- move down vm; right_
-{ {capacitor(,P); move ;"`{\tt capacitor(,P)}'" ljust}
- move right_ hm
- {capacitor(,E); move ;"`{\tt capacitor(,E)}'" ljust}
- move right_ hm
- {capacitor(,K); move ;"`{\tt capacitor(,K)}'" ljust}
-}
- move down 0.25; right_
-{ {capacitor(,M); move ;"`{\tt capacitor(,M)}'" ljust}
- move right_ hm
- {capacitor(,N); move ;"`{\tt capacitor(,N)}'" ljust}
- move right_ hm
- {xtal ; move ;"`{\tt xtal}'" ljust}
-}
- move down 0.25; right_
-{ {memristor ; move;"`{\tt memristor}'" ljust}
- move right_ hm
- {heater; move;"`{\tt heater}'" ljust}
- move right_ hm
- {tline ; move;"`{\tt tline}'" ljust}
-}
- move down 0.25; right_
-{ {move up_ 0.05; right_; gap ; move ;"`{\tt gap}'" ljust}
- move right_ hm
- {gap(,,A) ; move ;"`{\tt gap(,{,}A)}'" ljust}
- move right_ hm
- {arrowline ; move;"`{\tt arrowline}'" ljust}
-}
- move down 0.25; right_
-{ {lamp ; move;"`{\tt lamp}'" ljust}
- move right_ hm
- {reed ; move ;"`{\tt reed}'" ljust}
- move right_ hm
- {reed(,,,fill_(0.9),CR) ; move ; "`{\tt reed(,{,},fill\_(0.9),CR)}'" ljust}
-}
- move down 0.25; right_
-{ {pvcell ; move;"`{\tt pvcell}'" ljust}
- move right_ hm
- {arrester ; move ;"`{\tt arrester}'" ljust}
-}
-
-
-.PE
diff --git a/graphics/circuit_macros/examples/Chips.m4 b/graphics/circuit_macros/examples/Chips.m4
new file mode 100644
index 0000000000..f9e98bc076
--- /dev/null
+++ b/graphics/circuit_macros/examples/Chips.m4
@@ -0,0 +1,45 @@
+.PS
+# Chips.m4
+log_init
+include(ics.m4)
+
+ command "{\sf"
+
+Chips: [
+ ic4017
+ {"\sf 4017" at last [].Chip.sw below ljust}
+ move
+ ic4510
+ {"\sf 4510" at last [].Chip.sw below ljust}
+ move
+ icVS1053
+ {"\sf VS1053" at last [].Chip.sw below ljust}
+
+ DIP_chip_outline with .sw at last [].se+(0.5,0)
+ { `"DIP\_chip\_outline"' at last [].s below }
+ ]
+
+DIPs: [
+ DIP0: DIP
+ DIP32: DIP(32,direct=R;bodywid=0.5*scale) with .sw at last [].se+(0.5,0)
+ DIP16: DIP(16,type=Q;pinwid=1bp__) with .sw at DIP32.se+(1.5,0)
+
+ thinlines_
+ { `"\tt DIP"' at DIP0.s - (0,10bp__) }
+ { arrow <- from DIP0.Pin1 up 0.2 ; `"\sl Pin1"' ljust at Here+(-0.05,0.1) }
+ { arrow <- from DIP0.c up 0.7 right 0.25; `"\sl Body"' ljust }
+ { arrow <- from DIP0.Pin8 up 0.25 right 0.2 ; `"\sl Pin8"' above ljust }
+
+ { `"\tt DIP(32,direct=R;bodywid=0.5*scale)"' ljust \
+ at DIP32.sw - (0,10bp__) }
+ { arrow <- right 0.2 from DIP32.Pin1; `"\sl Pin1"' ljust }
+ { spline <- right 0.2 then right 0.1 up 0.1 from DIP32.Pin32
+ `"\sl Pin32"' ljust }
+
+ { `"\tt DIP(16,type=Q;pinwid=1bp\_\_)"' at DIP16.sw - (0,10bp__) ljust }
+ thicklines_
+
+ ] with .nw at last [].sw+(0,-0.3)
+
+ command "}%"
+.PE
diff --git a/graphics/circuit_macros/examples/Chuck.m4 b/graphics/circuit_macros/examples/Chuck.m4
index 2e36626c5b..2c5dfb76f3 100644
--- a/graphics/circuit_macros/examples/Chuck.m4
+++ b/graphics/circuit_macros/examples/Chuck.m4
@@ -1,6 +1,6 @@
.PS
# Chuck.m4
-threeD_init s_init(Views) sinclude(tst.dim)
+gen_init s_init(Views) sinclude(tst.dim)
#
#################################################################
divert(-1)
diff --git a/graphics/circuit_macros/examples/Conn.m4 b/graphics/circuit_macros/examples/Conn.m4
index 1e5fd5781a..7229f0afee 100644
--- a/graphics/circuit_macros/examples/Conn.m4
+++ b/graphics/circuit_macros/examples/Conn.m4
@@ -65,5 +65,4 @@ B: [
{ `"\tt tbox(V\_1,{,},<>)"' at last [].s below }
] with .nw at T.sw+(0,-0.2)
-
.PE
diff --git a/graphics/circuit_macros/examples/Connectors.m4 b/graphics/circuit_macros/examples/Connectors.m4
index 64ed3e6854..c9f8cd9019 100644
--- a/graphics/circuit_macros/examples/Connectors.m4
+++ b/graphics/circuit_macros/examples/Connectors.m4
@@ -1,9 +1,10 @@
.PS
-# Connectors
+# Connectors.m4
log_init
include(ics.m4)
ifelse(ifpgf(T)`'ifpstricks(T)`'ifpsfrag(T),T,`command "{\small\sf"')
+
# ArduinoUno
Ar: ArduinoLeonardo #with .sw at last [].se+(0.25,0)
diff --git a/graphics/circuit_macros/examples/Cruller.m4 b/graphics/circuit_macros/examples/Cruller.m4
index dce4f3aa87..d2c215ae13 100644
--- a/graphics/circuit_macros/examples/Cruller.m4
+++ b/graphics/circuit_macros/examples/Cruller.m4
@@ -52,10 +52,10 @@ 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)))
+ 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 ) \
diff --git a/graphics/circuit_macros/examples/Dini.m4 b/graphics/circuit_macros/examples/Dini.m4
index 5631a4822f..1846917a4a 100644
--- a/graphics/circuit_macros/examples/Dini.m4
+++ b/graphics/circuit_macros/examples/Dini.m4
@@ -46,10 +46,10 @@ define(`Dini',
du = ur/ugrid/2
dv = vr/vgrid/2
for i=0 to n do {
- NE: project(Dini(ciu[ix[i]]+du,civ[ix[i]]+dv))
- SE: project(Dini(ciu[ix[i]]+du,civ[ix[i]]-dv))
- SW: project(Dini(ciu[ix[i]]-du,civ[ix[i]]-dv))
- NW: project(Dini(ciu[ix[i]]-du,civ[ix[i]]+dv))
+ NE: Project(Dini(ciu[ix[i]]+du,civ[ix[i]]+dv))
+ SE: Project(Dini(ciu[ix[i]]+du,civ[ix[i]]-dv))
+ SW: Project(Dini(ciu[ix[i]]-du,civ[ix[i]]-dv))
+ NW: Project(Dini(ciu[ix[i]]-du,civ[ix[i]]+dv))
f = (-cos(ciu[ix[i]])+1)/2
g = ( sin(ciu[ix[i]])+1)/2
line from NE to SE then to SW then to NW then to NE \
@@ -174,9 +174,9 @@ array2(h,m4inx,53,54,55,58,59,57)
}
for i=1 to n do {
for j=1 to 6 do { x[j]=h[ih[i],j] }
- line from project((v[x[1],1]),(v[x[1],2]),(v[x[1],3]))\
- for_(2,6,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.95)
+ line from Project((v[x[1],1]),(v[x[1],2]),(v[x[1],3]))\
+ for_(2,6,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.95)
}
m = 0
for i=1 to 12 do { # Visible pentagons
@@ -185,9 +185,9 @@ array2(h,m4inx,53,54,55,58,59,57)
}
for i=1 to m do {
for j=1 to 5 do { x[j]=p[ip[i],j] }
- line from project((v[x[1],1]),(v[x[1],2]),(v[x[1],3])) \
- 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)
+ line from Project((v[x[1],1]),(v[x[1],2]),(v[x[1],3])) \
+ 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)
.PE
diff --git a/graphics/circuit_macros/examples/Escher.m4 b/graphics/circuit_macros/examples/Escher.m4
index 675fa2c00d..f8bae7f728 100644
--- a/graphics/circuit_macros/examples/Escher.m4
+++ b/graphics/circuit_macros/examples/Escher.m4
@@ -1,51 +1,161 @@
.PS
+# Escher.m4
+# https://tex.stackexchange.com/questions/129274/showcase-of-optical-illusions-made-with-tex-latex-luatex-context
threeD_init
+[
+ u=1/2.54 # unit size; could use scale for this
+
+ define(`treadcolor',`0.8,0.75,0.7')
+ define(`darkgrn',`.1,.1,0')
+ define(`lightgrn',`.7,.7,.6')
+
+ define(`northsteps',3)
+ define(`eaststeps',8)
+ define(`southsteps',7)
+ define(`weststeps',4)
+ define(`baselayers',10)
+ define(`eb',eval(baselayers+eaststeps))
+ define(`ebs',eval(eb+southsteps))
+ define(`under',7)
+
+ azimuth = -45 # view angles
+ elevation = 25
+ setview(azimuth,elevation,0)
+ # projected unit vectors
+ UX: Project(u,0,0)
+ UY: Project(0,-u,0)
+ UZ: Project(0,0,u)
+ # layer thickness in units of u
+ f= -(eaststeps*UX.y + southsteps*UY.y - weststeps*UX.y - northsteps*UY.y)/dnl
+ ((eaststeps+southsteps+weststeps+northsteps)*UZ.y)
+ # XY projection of 3D coords in units of u
+define proj {UX*($1)+UY*($2)+UZ*($3)}
+
+define tread {line from UY/2 \
+ to UY then to UY+UX then to UX then to (0,0) \
+ then to UY/2 shaded rgbstring(treadcolor) \
+ with .start at proj($1,$2,$3)+UY/2 }
+
+define wrect {line invis from (0,0) to UX*($4) \
+ then to UX*($4)+UZ*($5) \
+ then to UZ*($5) then to (0,0) with .start at proj($1,$2,$3) \
+ shaded rgbstring(r,g,b)}
+
+define srect {line invis from (0,0) to UY*($4) then to UY*($4)+UZ*($5) \
+ then to UZ*($5) then to (0,0) with .start at proj($1,$2,$3) \
+ shaded rgbstring(r,g,b) }
+ # color blending
+define(`blendwht',`between3D(`$1',`$2',`$3',`$4',1,1,1)')
+define makergb { r = $1; g = $2; b = $3 }
+define dorgb { gg = $2
+ if $1==0 then { makergb(blendwht(gg,lightgrn)) } \
+ else { makergb(blendwht(gg,darkgrn)) } }
+
+# East
+ for i=-under to baselayers do {
+ dorgb((i%2),0.2)
+ wrect(1,1,i*f,eaststeps-2,-f) }
+ for i=0 to eaststeps do {
+ dorgb((i%2),0.2)
+ wrect(i,1,(baselayers+i)*f,(eaststeps+1-i),-f)
+ tread(i,0,(baselayers+i)*f)
+ line from proj(i,1,(baselayers+i)*f) \
+ to proj(i,1,(baselayers-1+i)*f) }
+# South
+ for i=0 to eb do {
+ dorgb((i%2),0.4)
+ srect(eaststeps+1,0,i*f,southsteps+1,-f) }
+ for i=1 to southsteps do {
+ dorgb((i%2),0.4)
+ srect(eaststeps+1,i,(eb+i)*f,(southsteps+1-i),-f)
+ tread(eaststeps,i,(eb+i)*f)
+ line from proj(eaststeps+1,i,(eb+i)*f) \
+ to proj(eaststeps+1,i,(eb+i-1)*f) }
+# North
+ for i=-under to baselayers-northsteps-1 do {
+ dorgb((i%2),0.1)
+ srect(1,1,i*f,northsteps-1,-f) }
+ for i=1 to northsteps do {
+ dorgb((i%2),0.1)
+ srect(1,1,(baselayers-i)*f,i,-f)
+ wrect(0,1+i,(baselayers-i)*f,1,-f)
+ line from proj(0,1+i,(baselayers-i)*f) \
+ to proj(0,1+i,(baselayers-i-1)*f)
+ line from proj(1,1+i,(baselayers-i)*f) \
+ to proj(1,1+i,(baselayers-i-1)*f)
+ tread(0,i,(baselayers-i)*f) }
+# West
+ for i=0 to ebs do {
+ dorgb((i%2),0.4)
+ wrect(eaststeps+1,southsteps+1,i*f,-(weststeps+1),-f) }
+ for i=0 to weststeps-1 do {
+ dorgb((i%2),0.4)
+ wrect(eaststeps-i,southsteps+1,(ebs+i+1)*f,-(weststeps-i),-f,)
+ srect(eaststeps-i,southsteps,(ebs+i+1)*f,1,-f)
+ if i!=weststeps-1 then {
+ line from proj(eaststeps-i,southsteps,(ebs+i+1)*f) \
+ to proj(eaststeps-i,southsteps,(ebs+i)*f) }
+ line from proj(eaststeps-i,southsteps+1,(ebs+i+1)*f) \
+ to proj(eaststeps-i,southsteps+1,(ebs+i)*f)
+ tread(eaststeps-(i+1),southsteps,(ebs+i+1)*f) }
+# Corner lines
+ define(`dgreen',`outlined rgbstring(blendwht(0.2,darkgrn))')
+ line dgreen from proj(1,1,(baselayers-1)*f) to proj(1,1,-under*f)
+ line dgreen from proj(eaststeps+1,southsteps+1,ebs*f) \
+ to proj(eaststeps+1,southsteps+1,-f)
+ line dgreen from proj(0,northsteps+1,(baselayers-northsteps)*f) \
+ to last line.end-UX*(weststeps+1) then to last line.end \
+ then to proj(eaststeps+1,0,-f) then to proj(eaststeps+1,0,eb*f)
+ ]
+
+ifelse(1,1,`
+[
setview(-45,20)
bwid = 2.8
bh = 1.5
bdp = 1.8
bth = 0.3
- A: project(0,0,0)
- AA: A+(project(bth,bth,-bth))
- B: project(0,bwid,0)
- BB: B+(project(bth,-bth,-bth))
- C: project(bdp,bwid,0)
- D: project(bdp,0,0)
- E: project(0,0,-bh)
- F: project(bdp,0,-bh)
- G: project(bdp,bwid,-bh)
- H: B + (project(0,0,-bh))
+ A: Project(0,0,0)
+ AA: A+Project(bth,bth,-bth)
+ B: Project(0,bwid,0)
+ BB: B+Project(bth,-bth,-bth)
+ C: Project(bdp,bwid,0)
+ D: Project(bdp,0,0)
+ E: Project(0,0,-bh)
+ F: Project(bdp,0,-bh)
+ G: Project(bdp,bwid,-bh)
+ H: B + Project(0,0,-bh)
line from A to B then to C then to D then to A then to E then to F \
then to G then to H then to E
line from C to G
- line from A+(project(bth,bth,0)) to B+(project(bth,-bth,0)) \
- then to C+(project(-bth,-bth,0))
- L1: line to D+(project(-bth,bth,0))
- L2: line to A+(project(bth,bth,0))
- L4: line from E+(project(bth,bth,0)) to H+(project(bth,-bth,0))
- L3: line to C+(project(-bth,-bth,-bh))
- line to F+(project(-bth,bth,0)) then to A+(project(bth,bth,-bh))
-
- L5: line from D+(project(-bth,0,-bth)) to A+(project(bth,0,-bth))
- line to E+(project(bth,0,bth))
- L6: line to Here+(project(0,bwid-2*bth,0))
- L7: line from D+(project(0,bth,-bth)) to C+(project(0,-bth,-bth))
- line to G+(project(0,-bth,bth))
- L8: line to Here+(project(-bdp+2*bth,0,0))
- Tmp: line invis from L8.start+(project(-bth,0,0)) up bh
+ line from A+Project(bth,bth,0) to B+Project(bth,-bth,0) \
+ then to C+Project(-bth,-bth,0)
+ L1: line to D+Project(-bth,bth,0)
+ L2: line to A+Project(bth,bth,0)
+ L4: line from E+Project(bth,bth,0) to H+Project(bth,-bth,0)
+ L3: line to C+Project(-bth,-bth,-bh)
+ line to F+Project(-bth,bth,0) then to A+Project(bth,bth,-bh)
+
+ L5: line from D+Project(-bth,0,-bth) to A+Project(bth,0,-bth)
+ line to E+Project(bth,0,bth)
+ L6: line to Here+Project(0,bwid-2*bth,0)
+ L7: line from D+Project(0,bth,-bth) to C+Project(0,-bth,-bth)
+ line to G+Project(0,-bth,bth)
+ L8: line to Here+Project(-bdp+2*bth,0,0)
+ Tmp: line invis from L8.start+Project(-bth,0,0) up bh
line from Tmp.start to Intersect_(Tmp,L7)
Tmp: line invis from L8.end up bh
line from L8.end to Intersect_(Tmp,L7)
- line from Intersect_(Tmp,L1) to BB+(project(bth,0,0))
- Tmp: line invis to Here+(project(bdp,0,0))
+ line from Intersect_(Tmp,L1) to BB+Project(bth,0,0)
+ Tmp: line invis to Here+Project(bdp,0,0)
line from Tmp.start to Intersect_(Tmp,L1)
Tmp: line invis from H up bh
line from H to Intersect_(Tmp,L7)
- line from Intersect_(Tmp,L1) to B+(project(bth,-bth,0))
+ line from Intersect_(Tmp,L1) to B+Project(bth,-bth,0)
- Tmp: line invis from AA to AA+(project(0,bwid,0))
+ Tmp: line invis from AA to AA+Project(0,bwid,0)
Tmp2: line invis up bh from L6.end
line from Intersect_(Tmp,L2) to Intersect_(Tmp2,Tmp) \
then to Intersect_(Tmp2,L1)
@@ -56,22 +166,23 @@ threeD_init
Tmp: line invis down bh from D
line from D to Intersect_(Tmp,L6)
- line from Intersect_(Tmp,L4) to F+(project(-bth,bth,0))
+ line from Intersect_(Tmp,L4) to F+Project(-bth,bth,0)
- Tmp: line invis from L5.start to L5.start+(project(0,0,-bh))
- move to E+(project(0,2*bth,0))
- Tmp2: line invis to Here+(project(bdp,0,0))
+ Tmp: line invis from L5.start to L5.start+Project(0,0,-bh)
+ move to E+Project(0,2*bth,0)
+ Tmp2: line invis to Here+Project(bdp,0,0)
line from L5.start to Intersect_(Tmp,L6)
line from Intersect_(Tmp,L4) to Intersect_(Tmp,Tmp2) \
then to Intersect_(Tmp2,L4)
- Tmp: line invis from L7.start to L7.start+(project(0,0,-(bh-bth)))
+ Tmp: line invis from L7.start to L7.start+Project(0,0,-(bh-bth))
line from L7.start to Intersect_(Tmp,L6)
- move to G+(project(-2*bth,0,0))
- Tmp2: line invis to Here+(project(0,-bwid,0))
+ move to G+Project(-2*bth,0,0)
+ Tmp2: line invis to Here+Project(0,-bwid,0)
line from Intersect_(Tmp2,L3) to Intersect_(Tmp,Tmp2)
line from Intersect_(Tmp,L4) to Intersect_(Tmp2,Tmp)
-
+] with .sw at last [].se+(0.2,0)
+')
.PE
diff --git a/graphics/circuit_macros/examples/Euro.m4 b/graphics/circuit_macros/examples/Euro.m4
index 34058d9147..5186cb2f5c 100644
--- a/graphics/circuit_macros/examples/Euro.m4
+++ b/graphics/circuit_macros/examples/Euro.m4
@@ -1,13 +1,5 @@
-% Euro symbol; process this file as follows:
-% m4 Euro.m4 > Euro.pic; dpic -p Euro.pic > Euro.tex ; latex Euro; dvips Euro
-\documentclass{article}
-\usepackage{pstricks}
-\usepackage{boxdims,xcolor}
-\pagestyle{empty}
-\thispagestyle{empty}
-\begin{document}
-\noindent\vspace{2ex}
.PS
+#Euro.m4
include(pstricks.m4)
gen_init
divert(-1)
@@ -135,4 +127,3 @@ move
euro_symbol(ht=72bp__*2; aspect=1.0; slant=15)
.PE
-\end{document}
diff --git a/graphics/circuit_macros/examples/Geometry.m4 b/graphics/circuit_macros/examples/Geometry.m4
index ae0a661012..0cbf4bb499 100644
--- a/graphics/circuit_macros/examples/Geometry.m4
+++ b/graphics/circuit_macros/examples/Geometry.m4
@@ -1,11 +1,11 @@
.PS
# Geometry.m4
gen_init
- scale = 5/4
- A: Here; "A" at A above
- B: A+(-1,-3.5); "B" at B below rjust
- C: B+(4.6,0); "C" at C below ljust
+Fig1: [ ls = 2/3 # local scale
+ A: Here; "A" at A above
+ B: A+(-1*ls,-3.5*ls); "B" at B below rjust
+ C: B+(4.6*ls,0); "C" at C below ljust
AB: line from A to B
BC: line from B to C
CA: line from C to A
@@ -42,5 +42,29 @@ gen_init
line dashed from X to Y chop -linewid/2
RightAngle(A,Z,Y)
+ ]
+
+Fig2: [ ls = 3/4 # local scale
+# https://tex.stackexchange.com/questions/593272/drawing-complex-geometry
+ P: dot(at Here); "P" at P.s below
+ N: dot(at P+(3.5*ls,1.5*ls)); "N" at N.se ljust below
+ O: dot(at (N,P)); "O" at O.s below
+ R: dot(at 1/3 between O and P);"R" at R.s below
+ M: dot(at (R,N)); "M" at M.se ljust below
+ Q: dot(at (M.x,M.y+distance(M,N)/distance(N,O)*distance(P,O)));"Q" at Q.e ljust
+ line from P to Q then to N then to O
+ B: line to P chop -0.3
+ line from M to N
+ Pu: line from R to Q chop 0 chop -0.3
+ H: line from P to N chop 0 chop -0.3
+ X: dot(at Intersect_(Pu,H)); "X" at X.se ljust below
+ thinlines_
+ RightAngle(Q,M,N)
+ RightAngle(Q,N,H.end)
+ RightAngle(N,O,B.start)
+ ArcAngle(N,P,Q,0.4); "$\beta$" at last arc.ne above ljust
+ ArcAngle(O,P,N,0.5); "$\alpha$" at last arc.start+(5bp__,8bp__)
+ ArcAngle(R,Q,N,0.5); "$\alpha$" at last arc.start+(8bp__,-5bp__)
+ ] with .w at Fig1.e+(-0.4,0)
.PE
diff --git a/graphics/circuit_macros/examples/Heathkit.m4 b/graphics/circuit_macros/examples/Heathkit.m4
index 4127c8287e..2cc23290a1 100644
--- a/graphics/circuit_macros/examples/Heathkit.m4
+++ b/graphics/circuit_macros/examples/Heathkit.m4
@@ -29,9 +29,9 @@ define(`dimen_',dimen_*4/5)
# Grid
ifdpic(`linethick_(0.4)',`linethick_(0)')
for i=0 to picwid/g do { line color "lightgray" up picht from (i*g,0) }
- for i=0 to picwid/g by 10 do { sprintf("%g",i) at (i*g,0) below }
+ for i=0 to picwid/g by 10 do { sprintf(tsf(%g),i) at (i*g,0) below }
for i=0 to picht/g do { line color "lightgray" right picwid from (0,i*g) }
- for i=0 to picht/g by 10 do { sprintf("%g",i) at (0, i*g) rjust }
+ for i=0 to picht/g by 10 do { sprintf(tsf(%g),i) at (0, i*g) rjust }
linethick_(0.8)
ifdpic(`
diff --git a/graphics/circuit_macros/examples/Inductors.m4 b/graphics/circuit_macros/examples/Inductors.m4
new file mode 100644
index 0000000000..f250a81135
--- /dev/null
+++ b/graphics/circuit_macros/examples/Inductors.m4
@@ -0,0 +1,47 @@
+.PS
+# inductors.m4
+cct_init
+iflatex(command "{\tt")
+
+movewid = 2 pt__
+hm = 2.05
+vm = 0.4
+{ {I: inductor ; move ;"`{inductor}'" ljust}
+ move right_ hm
+ {inductor(,W); move ;"`{inductor(,W)}'" ljust}
+ move right_ hm
+ {inductor(,L); move ;"`{inductor(,L)}'" ljust}
+}
+
+ move down vm; right_
+{ {inductor(,,3,M) ; move ;"`{...(,,3,M)}'" ljust}
+ move right_ hm
+ {inductor(,W,6,P1); variable; move
+ "`...(,W,6,P1);'" ljust "`variable'" ljust}
+ move right_ hm
+ {inductor(,L,9,K); move ;"`{...(,L,9,K)}'" ljust}
+}
+
+ move down vm; right_
+{ {inductor(,,,M3); addtaps(-,1/2,-dimen_/6); move; `"...(,{,},M3)"' ljust
+ {`"addtaps(-,1/2,-dimen\_/6)"' ljust at (I.start,last ""+(0,-0.2)) }
+ }
+ move right_ hm
+ {ebox(,,,0) ; move ;"`{ebox(,{,},0)}'" ljust}
+ move right_ hm -10bp__
+ {TI: tapped(`ebox(,,,0)',-,1/4,-dimen_/6,3/4,-dimen_/6) ; move ;
+ "`tapped(\char96{}ebox(,{,},0)\char39,'" ljust at Here+(10bp__,-5bp__) \
+ "-,1/4,-dimen\_/6," ljust "3/4,-dimen\_/6)" ljust
+ "\sl Tap1" at TI.Tap1 rjust below
+ "\sl Tap2" at TI.Tap2 ljust below }
+}
+
+ move down vm*5/4; right_
+{ {shielded(`inductor(,,,M)') ; move
+ `"shielded("' ljust `"\char96inductor(,{,},M)\char39)"' ljust
+ move to (3rd last line.start,Here)
+ shielded(`ebox(,,,0)',R) ; move; `"shielded(`ebox(,{,},0)',R)"' ljust }
+}
+
+iflatex(command "}")
+.PE
diff --git a/graphics/circuit_macros/examples/Lyap.m4 b/graphics/circuit_macros/examples/Lyap.m4
index a1b40a8ad0..4bce1b1d37 100644
--- a/graphics/circuit_macros/examples/Lyap.m4
+++ b/graphics/circuit_macros/examples/Lyap.m4
@@ -7,7 +7,7 @@ viewaz = 30
viewel = 18
setview(viewaz,viewel)
-Origin: project(0,0,0)
+Origin: Project(0,0,0)
# Components of view vector W
w1 = view3D1
w2 = view3D2
@@ -45,20 +45,20 @@ define(`vx',`sum3D(vp(`$1',`$2'),0,0,h+(`$2')^2)')
y = y1 + (y2-y1)/nT*i
theta = atan2(y,(w3-2*y*w2)*q/2/w1)
r = y/sin(theta)
- T[i]: project(vx(theta,r))
+ T[i]: Project(vx(theta,r))
}
# front and back parts of the top curve
n = 12
for i = 0 to n do {
theta = theta1 + (theta2-theta1)/n*i
- F[i]: project(vx(theta,c))
- Fp[i]: project(vp(theta,c))
+ F[i]: Project(vx(theta,c))
+ Fp[i]: Project(vp(theta,c))
}
for i = 0 to n do {
theta = theta2 + (theta1+twopi_-theta2)/n*i
- B[i]: project(vx(theta,c))
- Bp[i]: project(vp(theta,c))
+ B[i]: Project(vx(theta,c))
+ Bp[i]: Project(vp(theta,c))
}
# trajectory
@@ -74,8 +74,8 @@ define(`defX',` rx = `$5' ; np = np-1
for i = 0 to `$3' do {
tha = ts + (tf-ts)*i/(`$3')
for thx = tha to -twopi_ by twopi_ do {}
- `$4'[i]: project(vx(thx,rx))
- Xp[np]: project(vp(thx,rx))
+ `$4'[i]: Project(vx(thx,rx))
+ Xp[np]: Project(vp(thx,rx))
np = np+1
rx = beta*rx
}')
@@ -102,7 +102,7 @@ ifpstricks(`
# Centre axis
thinlines_
-line from Origin to project(0,0,h)
+line from Origin to Project(0,0,h)
# F[0] is the leftmost point of the front curve
line from F[0] to Fp[0]
# F[n] is the rightmost point of the front curve
@@ -144,16 +144,16 @@ ifpstricks(`
# Axes and vertical lines
thinlines_
line from X1[0] to Xp[0]
-arrow from Origin to project(1.5,0,0)
+arrow from Origin to Project(1.5,0,0)
"$x_1$" rjust below
-arrow from Origin to project(0,1.5,0)
+arrow from Origin to Project(0,1.5,0)
"$x_2$" ljust
-line dashed from project(0,0,h) to F[n/2] chop 0 chop arrowht/4
-arrow from F[n/2] to project(0,0,2)
+line dashed from Project(0,0,h) to F[n/2] chop 0 chop arrowht/4
+arrow from F[n/2] to Project(0,0,2)
"$v(X)$" ljust
"`${0}$'" at Origin+(0,1 pt__) below
-"$\Omega$" at project(0,0.9*c,0) above
-"`$v(X) = c$'" at (project(vp(100*dtor_,c)))+(2bp__,0) above ljust
+"$\Omega$" at Project(0,0.9*c,0) above
+"`$v(X) = c$'" at (Project(vp(100*dtor_,c)))+(2bp__,0) above ljust
.PE
diff --git a/graphics/circuit_macros/examples/Makefile b/graphics/circuit_macros/examples/Makefile
index cd0500c40c..4dc00e86f7 100644
--- a/graphics/circuit_macros/examples/Makefile
+++ b/graphics/circuit_macros/examples/Makefile
@@ -27,50 +27,52 @@
LIBDIR = ..
# The dpic processor:
-PIC = dpic -p
-#PIC = $$HOME/dpic/build/p2c/ftp/dpic -p
-#PIC = $$HOME/dpic/pa*dev/p2c/ftp/dpic -p
-#PIC = $$HOME/dpic/bison/dpic -p
-#PIC = $$HOME/dpic/bi*v/dpic -p
+PIC = dpic
+#PIC = $$HOME/dpic/bisondev/dpic
+#PIC = $$HOME/dpic/bison/dpic
+#PIC = $$HOME/dpic/pascaldev/test/dpic
+#PIC = $$HOME/dpic/pascal/test/dpic
-CONFIGFILE = pstricks.m4
+#MODE = -p
+MODE = -g
-# Testing the mingw version of dpic:
-#PIC = $$HOME/dpic/bison/distsrc/Windows/dpic -p
-#CUSTOM=windows.m4
+#CONF = pstricks.m4
+CONF = pgf.m4
# Uncomment for gpic. Use gpic or pic as applicable on your machine:
-# PIC = gpic -t
-# PIC = pic -t
-# CONFIGFILE = gpic.m4
+# PIC = gpic
+# PIC = pic
+# MODE = -t
+# CONF = gpic.m4
# Convert options
EPSOPTS =
PNGOPTS = -quiet -density 400 -scale 25% -alpha Remove
-# M4 = m4 -B32000
# M4 = m4 -I $(LIBDIR)
# If environment variable M4PATH has been set to the installation directory:
M4 = m4
-#########################################################################
-
DOC = examples
PICS = \
ABlogix.tex Adder.tex Alogix.tex AmpTable.tex Antennas.tex \
- AntiqueClock.tex Audio.tex Bip.tex Btree.tex Buttons.tex Byte.tex \
- CanLogic.tex CctTable.tex Conn.tex Connectors.tex \
+ 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 Counting.tex Crossbar.tex Crow.tex \
csc.tex Csource.tex Decoder.tex \
Demultiplexer.tex diamond.tex Dini.tex Diodes.tex Drive.tex Emarrows.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 \
ex21.tex exp.tex fet.tex Flow.tex Fuses.tex GrayCode.tex graysurf.tex \
- Grounds.tex Headers.tex Heathkit.tex I2L.tex Incleps.tex Jack.tex \
- lcct.tex Lyap.tex Logic.tex Loglog.tex MC.tex Mixer.tex MotorControl.tex \
- Multiplexer.tex NLG.tex NPDT.tex Nport.tex Opamp.tex Optoiso.tex \
- Pconn.tex PushPull.tex pwrsupply.tex Quantum.tex quick.tex random.tex \
- Rectifiers.tex recycle.tex relaycoil.tex Relay.tex rose.tex Rotbox.tex \
+ Grounds.tex Headers.tex Heathkit.tex \
+ I2L.tex Incleps.tex Inductors.tex Jack.tex \
+ lcct.tex Lyap.tex Logic.tex Loglog.tex MC.tex Mixer.tex MoreTable.tex \
+ MotorControl.tex Multiplexer.tex \
+ NLG.tex NPDT.tex Nport.tex Opamp.tex Optoiso.tex \
+ Pconn.tex Plate.tex PushPull.tex pwrsupply.tex \
+ Quantum.tex quick.tex \
+ random.tex Rectifiers.tex recycle.tex relaycoil.tex Relay.tex \
+ Resistors.tex rose.tex Rotbox.tex \
Schottky.tex sfg.tex shapes.tex ShiftR.tex Sierpinski.tex Sixpole.tex \
Sources.tex SQUID.tex Switches.tex \
Tgate.tex Three.tex thyristor.tex \
@@ -80,20 +82,26 @@ PICS = \
# Files that have to be processed twice:
BOXDIMS = ex09.tex Crow.tex Incleps.tex Lyap.tex Loglog.tex Opamp.tex \
random.tex Ttree.tex Windings.tex
-BOXPICS = ex09.pic Crow.pic Incleps.pic Lyap.pic Loglog.pic Opamp.pic \
- random.pic Ttree.pic Windings.pic
-DVIPSOPTS = -Ppdf -G0 -t letter
+#########################################################################
+
DVIPSOPTS = -G0 -t letter
-M4LIBS = $(CONFIGFILE) $(CUSTOM)
DIMFILE = $(DOC).dim
BS = tr '|' '\134'
# Might be needed (change latex commands to $(LTX) )
# LTX = latex --shell-escape
+LTX = pdflatex --shell-escape
+
+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)
LTXFILE=printf "|documentclass[11pt]{article}\n\
-|usepackage{times,pstricks,boxdims,graphicx,pst-grad,pst-slpe}\n\
+|usepackage[dvipsnames]{xcolor}\n\
+|usepackage{times,boxdims,graphicx,pstricks}\n\
|usepackage{siunitx}\n\
|setlength{|textwidth}{28cm}|setlength{|textheight}{28cm}\n\
|setlength{|oddsidemargin}{0pt}|setlength{|evensidemargin}{0pt}\n\
@@ -101,107 +109,90 @@ LTXFILE=printf "|documentclass[11pt]{article}\n\
|pagestyle{empty}|thispagestyle{empty}\n\
|newbox|graph\n\
|begin{document}\n\
-|noindent|input{"$*".tex}\n\
+|noindent|input{"$*".tex}|box|graph\n\
|end{document}\n" | $(BS)
.SUFFIXES: .ps .dvi .tex .m4 .pic .eps .png .pdf .svg .tif .gif
-.dvi.ps:
- dvips $(DVIPSOPTS) $* -o $*.ps
- chmod 644 $*.ps
-.m4.tex:
- @if test -n "$(DIMFILE)" ; then touch $(DIMFILE) ; fi ; touch F_$*.dim
- $(M4) $(M4LIBS) $(DIMFILE) F_$*.dim $*.m4 | sed -e '/^ *$$/d' \
- | $(PIC) > $*.tex
-# $(M4) $(M4LIBS) $(DIMFILE) F_$*.dim $*.m4 | sed -e '/^ *$$/d' > $*.pic
-# $(PIC) $*.pic > $*.tex
-# grep Production dpic.log >> newp.txt
.m4.pic:
- @if test -n "$(DIMFILE)" ; then touch $(DIMFILE) ; fi
- $(M4) $(M4LIBS) $(DIMFILE) $*.m4 > $*.pic
+ @touch $(DIMFILE) F_$*.dim
+ $(M4) $(CONF) $(DIMFILE) F_$*.dim $*.m4 > $*.pic
+.m4.tex:
+ @touch $(DIMFILE) F_$*.dim
+ $(M4) $(CONF) $(DIMFILE) F_$*.dim $*.m4 | $(PIC) $(MODE) > $*.tex
.m4.dvi:
- @if test -n "$(DIMFILE)" ; then touch $(DIMFILE) ; fi ; touch F_$*.dim
- $(M4) $(M4LIBS) $(DIMFILE) F_$*.dim $*.m4 | sed -e '/^ *$$/d' \
- | $(PIC) > $*.tex
- $(LTXFILE) > F_$*.tex
+ @touch $(DIMFILE) F_$*.dim
+ $(M4) pstricks.m4 $(DIMFILE) F_$*.dim $*.m4 | $(PIC) -p > $*.tex
+ @$(LTXFILE) > F_$*.tex
latex --quiet F_$*
- touch F_$*.dim $(DIMFILE) ; rm -f $*.tex $*.pic ; make $*.tex
+ touch F_$*.dim $(DIMFILE)
+ $(M4) pstricks.m4 $(DIMFILE) F_$*.dim $*.m4 | $(PIC) -p > $*.tex
latex --quiet F_$*
- touch F_$*.dim $(DIMFILE) ; rm -f $*.tex $*.pic ; make $*.tex
+ mv F_$*.dvi $*.dvi
+ rm -f F_*
+.dvi.ps:
+ dvips $(DVIPSOPTS) $* -o $*.ps
+ chmod 644 $*.ps
+.m4.ps:
+ @touch $(DIMFILE) F_$*.dim
+ $(M4) pstricks.m4 $(DIMFILE) F_$*.dim $*.m4 | $(PIC) -p > $*.tex
+ @$(LTXFILE) > F_$*.tex
latex --quiet F_$*
+ dvips $(DVIPSOPTS) F_$* -o $*.ps
+ chmod 644 $*.ps
+ rm -f F_*
.m4.eps:
- @if test -n "$(DIMFILE)" ; then touch $(DIMFILE) ; fi ; touch F_$*.dim
- $(M4) $(M4LIBS) $(DIMFILE) F_$*.dim $*.m4 | sed -e '/^ *$$/d' \
- | $(PIC) > $*.tex
- $(LTXFILE) > F_$*.tex
+ @touch $(DIMFILE) F_$*.dim
+ $(M4) pstricks.m4 $(DIMFILE) F_$*.dim $*.m4 | $(PIC) -p > $*.tex
+ @$(LTXFILE) > F_$*.tex
latex --quiet F_$*
- touch F_$*.dim $(DIMFILE) ; rm -f $*.tex $*.pic ; make $*.tex
- latex --quiet F_$*
- touch F_$*.dim $(DIMFILE) ; rm -f $*.tex $*.pic ; make $*.tex
+ $(M4) pstricks.m4 $(DIMFILE) F_$*.dim $*.m4 | $(PIC) -p > $*.tex
latex --quiet F_$*
dvips F_$* -T128cm,28cm -o $*.ps
-# dvips -Ppdf F_$* -T128cm,28cm -o $*.ps
# Recent changes to PSTricks(?) have clashed with the use of TeXtoEPS
# so use ps2epsi
ps2epsi $*.ps $*.epsi
sed -e '/%%Pages:/d' -e '/BeginPreview/,$$d' $*.epsi \
| tr '\015' '\012' > $*.eps
sed -e '1,/EndPreview/d' $*.epsi >> $*.eps
-.m4.ps:
- make $*.tex && mv $*.tex test.tex; latex tst
- rm -f test.tex $*.pic
- if test -f tst.dim ; then cp tst.dim F_$*.dim ; fi
- make $*.tex && mv $*.tex test.tex; latex tst
- dvips $(DVIPSOPTS) tst -o $*.ps
- chmod 644 $*.ps
-#.m4.svg:
-# make $*.eps
-# convert $(EPSOPTS) $*.eps $*.svg
+ rm -f F_*
+.m4.pdf:
+ @touch $(DIMFILE) F_$*.dim
+ $(M4) pgf.m4 $(DIMFILE) F_$*.dim $*.m4 | $(PIC) -g > $*.tex
+ @$(PDFLTXSRC) > F_$*.tex
+ pdflatex --quiet F_$*
+ $(M4) pgf.m4 $(DIMFILE) F_$*.dim $*.m4 | $(PIC) -g > $*.tex
+ pdflatex --quiet F_$*
+ mv F_$*.pdf $*.pdf
+ rm -f F_*
.m4.png:
- make $*.eps
- convert $(PNGOPTS) $*.eps $*.png
+ make $*.pdf
+ convert $(PNGOPTS) $*.pdf $*.png
@if test -f $*.png.0 ; then mv $*.png.0 $*.png ; fi
+ rm $*.pdf
.m4.gif:
- make $*.ps
- convert $(GIFOPTS) $*.ps $*.gif
-# @if test -f $*.png.0 ; then mv $*.png.0 $*.png ; fi
+ make $*.pdf
+ convert $(GIFOPTS) $*.pdf $*.gif
+ rm $*.pdf
.m4.tif:
- make $*.eps
- convert $(EPSOPTS) $*.eps $*.tif
+ make $*.pdf
+ convert $(EPSOPTS) $*.pdf $*.tif
@if test -f $*.tif.0 ; then mv $*.tif.0 $*.tif ; fi
-.m4.pdf:
- touch F_$*.dim
- $(M4) pgf.m4 F_$*.dim $*.m4 > $*.pic
- $(PIC) -g $*.pic > test.tex
- sed -e '/^\\usepackage.*graphicx/s/^.*$$/\\usepackage{tikz}/' \
- -e '/pstricks/d' tst.tex > F_$*.tex
- pdflatex --quiet F_$*
- $(M4) pgf.m4 F_$*.dim $*.m4 > $*.pic
- $(PIC) -g $*.pic > test.tex
- pdflatex --quiet F_$*
- mv F_$*.pdf $*.pdf
+ rm $*.pdf
.m4.svg:
- touch F_$*.dim
- $(M4) pgf.m4 F_$*.dim $*.m4 > $*.pic
- $(PIC) -g $*.pic > test.tex
- sed -e '/^\\usepackage.*graphicx/s/^.*$$/\\usepackage{tikz}/' \
- -e '/pstricks/d' tst.tex > F_$*.tex
- pdflatex --quiet F_$*
- $(M4) pgf.m4 F_$*.dim $*.m4 > $*.pic
- $(PIC) -g $*.pic > test.tex
- pdflatex --quiet F_$*
- mv F_$*.pdf $*.pdf
- pdf2svg $*.pdf $*.svg
- rm -f $*.pdf $*.pic F_$**
+ make $*.pdf
+ dvisvgm --pdf $*.pdf $*.svg
+ rm $*.pdf
+
#########################################################################
-$(DOC).pdf: clean pdfmode $(DOC).frp
+$(DOC).pdf: clean pdfmode $(DOC).tex files.tex header.tex
touch $(DOC).dim
- rm -f $(BOXDIMS) $(BOXPICS)
- make PIC="$(PIC) -g" CONFIGFILE=pgf.m4 DIMFILE=$(DOC).dim pics
+ make CONF=pgf.m4 MODE=-g DIMFILE=$(DOC).dim pics
+ cp $(LIBDIR)/doc/Version.tex .
pdflatex $(DOC)
- rm -f $(BOXDIMS) $(BOXPICS)
- make PIC="$(PIC) -g" CONFIGFILE=pgf.m4 DIMFILE=$(DOC).dim pics
+ rm -f $(BOXDIMS) ${BOXDIMS:%.tex=%.pic} $(DOC).pdf
+ make CONF=pgf.m4 MODE=-g DIMFILE=$(DOC).dim $(BOXDIMS)
pdflatex $(DOC)
optpdf $(DOC).pdf
@@ -216,47 +207,48 @@ psmode:
pdfmode:
printf "|usepackage{tikz}\n" | $(BS) > mode.tex
-$(DOC).dvi: $(DOC).frs
+$(DOC).dvi: $(DOC).tex files.tex header.tex psmode
touch $(DOC).dim
- for file in $(BOXDIMS) ; do rm -f $$file.tex $$file.pic ; done
- make PIC="$(PIC)" CONFIGFILE=pstricks.m4 DIMFILE=$(DOC).dim pics
- latex $(DOC)
- for file in $(BOXDIMS) ; do rm -f $$file.tex $$file.pic ; done
- make PIC="$(PIC)" CONFIGFILE=pstricks.m4 DIMFILE=$(DOC).dim pics
- latex $(DOC)
-
-$(DOC).frs: $(DOC).tex files.tex header.tex psmode
- make PIC="$(PIC) -p" CONFIGFILE=pstricks.m4 DIMFILE=$(DOC).dim pics
+ make CONF=pstricks.m4 MODE=-p DIMFILE=$(DOC).dim pics
cp $(LIBDIR)/doc/Version.tex .
latex $(DOC)
- rm -f $(DOC).dvi
- touch $(DOC).frs
-
-$(DOC).frp: $(DOC).tex files.tex header.tex pdfmode
- make PIC="$(PIC) -g" CONFIGFILE=pgf.m4 DIMFILE=$(DOC).dim pics
- cp $(LIBDIR)/doc/Version.tex .
- pdflatex $(DOC)
- rm -f $(DOC).pdf
- touch $(DOC).frp
+ rm -f $(BOXDIMS) ${BOXDIMS:%.tex=%.pic} $(DOC).dvi
+ make CONF=pstricks.m4 MODE=-p DIMFILE=$(DOC).dim $(BOXDIMS)
+ latex $(DOC)
tst:
- make test.tex; latex tst; rm -f test.tex test.pic
- make DIMFILE=tst.dim test.tex; latex tst
+ @$(LTXFILE) | sed -e 's/{\.tex}/{test.tex}/' > tst.tex
+ make CONF=pstricks.m4 PIC=dpic MODE=-p test.tex; latex --quiet tst
+ rm -f test.tex test.pic
+ make CONF=pstricks.m4 PIC=dpic MODE=-p test.tex; latex --quiet tst
dvips $(DVIPSOPTS) tst -o tst.ps
-tst1: test.tex tst.tex
- latex tst
+tst1:
+ @$(LTXFILE) | sed -e 's/{\.tex}/{test.tex}/' > tst.tex
+ make CONF=pstricks.m4 PIC=dpic MODE=-p test.tex; latex --quiet tst
dvips $(DVIPSOPTS) tst -o tst.ps
-gtst:
- touch test.m4; make PIC="gpic -t" CONFIGFILE="" tst
+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
+ dvips $(DVIPSOPTS) tst -o tst.ps
-gtst1:
- touch test.m4; make PIC="gpic -t" CONFIGFILE="" tst1
+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
+ dvips $(DVIPSOPTS) tst -o tst.ps
echopics:
@echo $(PICS)
+testall:
+ (cd mf; make)
+ (cd mpost; make)
+ (cd psfrag; make)
+ (cd svg; make)
+ (cd xfig; make)
+
clobber: clean
rm -f *.ps
-@for dir in mf mpost pdflatex xfig psfrag svg dev test; \
@@ -270,16 +262,16 @@ clobber: clean
for file in `ls *.tex` ; do \
nm=`echo $$file | sed -e "s/\(.*\)\.tex/\1/"` ; \
if test -s $$nm.m4 ; then rm -f $$nm.pic $$nm.tex ; fi ; done
- @if test -f distmakefile ; then make -f distmakefile clobber ; fi
+# @if test -f distmakefile ; then make -f distmakefile clobber ; fi
clean:
@printf "\n examples clean:\n"
rm -f core boxdims.tar.gz pics
rm -f *.dvi *.aux *.log *.toc *.blg *.eps *.tif *.epsi eps *-mfpic* *.svg
rm -f fig*.tex $(PICS) *.roff *.int *.pic gpic.m4 test.tex xxx* *.fig
- rm -f *.dim *.bak *.frs *.frp $(RPICS) rotate.ps tst.ps *.bbl *-pics.ps
+ rm -f *.dim *.bak rotate.ps tst.ps *.bbl *-pics.ps
rm -f *.tfm *[0-9]pk *.png *.1 *.gif
rm -f F_* Version.tex *stackdump *.ico
rm -rf distfile distfile.tar.gz mode.tex
@printf "\n"
- @if test -f distmakefile ; then make -f distmakefile clean ; fi
+# @if test -f distmakefile ; then make -f distmakefile clean ; fi
diff --git a/graphics/circuit_macros/examples/MoreTable.m4 b/graphics/circuit_macros/examples/MoreTable.m4
new file mode 100644
index 0000000000..bfc41113c1
--- /dev/null
+++ b/graphics/circuit_macros/examples/MoreTable.m4
@@ -0,0 +1,36 @@
+.PS
+# MoreTable.m4
+cct_init
+
+movewid = 2 pt__
+hm = 2.05
+vm = 0.28
+{ {memristor ; move;"`{\tt memristor}'" ljust}
+ move right_ hm
+ {heater; move;"`{\tt heater}'" ljust}
+ move right_ hm
+ {tline ; move;"`{\tt tline}'" ljust}
+}
+ move down 0.25; right_
+{ {pvcell ; move;"`{\tt pvcell}'" ljust}
+ move right_ hm
+ {reed ; move ;"`{\tt reed}'" ljust}
+ move right_ hm
+ {reed(,,,fill_(0.9),CR) ; move ; "`{\tt reed(,{,},fill\_(0.9),CR)}'" ljust}
+}
+ move down 0.25; right_
+{ {gap ; move ;"`{\tt gap}'" ljust}
+ move right_ hm
+ {gap(,,A) ; move ;"`{\tt gap(,{,}A)}'" ljust}
+ move right_ hm
+ {arrowline ; move;"`{\tt arrowline}'" ljust}
+}
+ move down 0.25; right_
+{ move down 0.10; right; {lamp ; move;"`{\tt lamp}'" ljust}
+ move right_ hm
+ {thermocouple ; move;"`{\tt thermocouple}'" ljust }
+# move up 0.10 right_ hm
+# {arrester ; move ;"`{\tt arrester}'" ljust}
+}
+
+.PE
diff --git a/graphics/circuit_macros/examples/Orbits.m4 b/graphics/circuit_macros/examples/Orbits.m4
index c49bacbc7c..ef85d27935 100644
--- a/graphics/circuit_macros/examples/Orbits.m4
+++ b/graphics/circuit_macros/examples/Orbits.m4
@@ -10,7 +10,7 @@ NeedDpicTools
define(`orbitpos',
`rot3Dx((`$2')*dtor_,rot3Dz((`$1')*dtor_,rot3Dy(-(`$4')*dtor_,`$3',0,0)))')
-define(`PO',`B.C+(project(orbitpos(orbitlong,orbitlat,orbitrad,`$1')))')
+define(`PO',`B.C+(Project(orbitpos(orbitlong,orbitlat,orbitrad,`$1')))')
define vis { X: PO($1)
if (distance(X,B.C)>crad) || \
diff --git a/graphics/circuit_macros/examples/Planes.m4 b/graphics/circuit_macros/examples/Planes.m4
index 726af31c56..b9d0579c69 100644
--- a/graphics/circuit_macros/examples/Planes.m4
+++ b/graphics/circuit_macros/examples/Planes.m4
@@ -77,10 +77,10 @@ ifelse(1,1,`
# Recover the 4th corner and draw
define(`drawfacet',`
- NW_facet: project(xyz(($1)*3))
- NE_facet: project(xyz(($1)*3+1))
- SE_facet: project(xyz(($1)*3+2))
- SW_facet: project(x[($1)*3+2],y[($1)*3],z[($1)*3])
+ NW_facet: Project(xyz(($1)*3))
+ NE_facet: Project(xyz(($1)*3+1))
+ SE_facet: Project(xyz(($1)*3+2))
+ SW_facet: Project(x[($1)*3+2],y[($1)*3],z[($1)*3])
shd = 1-($2)^4
line from SW_facet to SE_facet then to NE_facet \
then to NW_facet then to SW_facet shaded rgbstring(shd,shd,shd)
diff --git a/graphics/circuit_macros/examples/svg/Y14-5SVG.m4 b/graphics/circuit_macros/examples/Plate.m4
index 84cc6bcda6..0700f072a0 100644
--- a/graphics/circuit_macros/examples/svg/Y14-5SVG.m4
+++ b/graphics/circuit_macros/examples/Plate.m4
@@ -1,10 +1,11 @@
.PS
+# Plate.m4
# ASME_Y14-5.m4
# https://en.wikipedia.org/wiki/Geometric_dimensioning_and_tolerancing
# See the ASME Y14.5 standard, Figure 6-30.
scale = 100/3
cct_init
-include(../ASME_Y14-5.m4)
+include(ASME_Y14-5.m4)
ifsvg(`svg_font(sans-serif,10bp__)',
`textht = 10bp__*2/3
iflatex(`command "{\sf"')')
@@ -156,7 +157,7 @@ thinlines_
for_(0,315,45,`ctrarcr(C,d6/2,(m4x-22.5)*dtor_,(m4x+22.5)*dtor_)
ctrline(from C+(Rect_(d6-d7/2,m4x)) to C+(Rect_(d7/2,m4x))) ')
arcdimension_(from C+(0,d7/2) to C+(Rect_(d7/2,135)) with .c at C,
- 8,"8X 45`'iflatex(^\circ)" wid textht*3.5,15,1)
+ 8,"8X 45`'iflatex($^\circ$)" wid textht*3.5,15,1)
ifsvg("svg_deg" wid textht*2/3 with .w at last "".e)
move to C+(0,d6/2)
arrow <- from Here+(Rect_(8/2,75)) to Here+(Rect_(25,75)) then right_ 3
diff --git a/graphics/circuit_macros/examples/README-examples b/graphics/circuit_macros/examples/README-examples
index 5561e4d3fc..c74c92c274 100644
--- a/graphics/circuit_macros/examples/README-examples
+++ b/graphics/circuit_macros/examples/README-examples
@@ -31,7 +31,7 @@ the boxdim macro is being used. If you only need to process once, type
To use tikz and pdflatex to produce test.pdf, type "make test.pdf" as above.
To test and debug a single diagram in a different directory, copy Makefile
-and tst.tex to where you want to work, adjust the definition of LIBDIR
+to where you want to work, adjust the definition of LIBDIR
in Makefile if environment variable M4PATH has not been defined, and type
one of the above commands.
@@ -40,7 +40,7 @@ To use PSTricks instead, type "make clean; make examples.ps".
To process the diagrams using TikZ PGF for processing either by LaTeX or
PDFlatex, type "make" or "make examplespgf.ps" in the pgf subdirectory.
-There are often several methods of producing similar graphical results,
+There are often several methods for producing similar graphical results,
particularly of text labels. Some of the diagrams in this directory are
slightly more complicated than required for Tikz or PSTricks in order
that they will work with other postprocessors. Dpic output that does
diff --git a/graphics/circuit_macros/examples/Resistors.m4 b/graphics/circuit_macros/examples/Resistors.m4
new file mode 100644
index 0000000000..6e79c91966
--- /dev/null
+++ b/graphics/circuit_macros/examples/Resistors.m4
@@ -0,0 +1,30 @@
+.PS
+# Resistors.m4
+cct_init
+
+movewid = 2 pt__
+hm = 2.05
+vm = 0.28
+{ {resistor ; move ;"`{\tt resistor}'" ljust}
+ move right_ hm
+ {resistor(,,Q) ; move ;"`\tt resistor(,{,}Q) '" ljust}
+ move right_ hm
+ {resistor(,,E) ; move
+ "`\shortstack[l]{\tt resistor(,{,}E)\\ {\tt $\equiv$ ebox}}'" ljust}
+}
+ move down vm; right_
+{ {resistor(,,ES) ; move ;"`\tt resistor(,{,}ES) '" ljust}
+ move right_ hm
+ {resistor(,,H) ; move ;"`\tt resistor(,{,}H) '" ljust}
+ move right_ hm
+ {ebox(,,,0.5) ; move ;"`{\tt ebox(,{,},0.5)}'" ljust}
+}
+ move down vm; right_
+{ {resistor(,,V) ; move ;"`{\tt resistor(,{,}V)}'" ljust}
+ move right_ hm
+ {ebox(,0.5,0.3) ; move ;"`{\tt ebox(,0.5,0.3)}'" ljust}
+ move right_ hm+4bp__
+ {resistor(,,B) ; move movewid-4bp__ ;"`{\tt resistor(,,B)}'" ljust}
+}
+
+.PE
diff --git a/graphics/circuit_macros/examples/control.m4 b/graphics/circuit_macros/examples/control.m4
index 62d92291ac..400b8873ac 100644
--- a/graphics/circuit_macros/examples/control.m4
+++ b/graphics/circuit_macros/examples/control.m4
@@ -30,6 +30,81 @@ S1: circle
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . #
+# https://tex.stackexchange.com/questions/575592/how-to-create-a-controls-system-diagram
+Observer: [
+ define(`thickarrow',`arrow thick 3 wid 7bp__')
+ define(`thickline',`line thick 3')
+ fillval = 0.6
+ boxwid = 0.3
+ boxht = 0.4
+ circlerad = 0.1
+ {"$r$" above ljust}
+R: arrow
+S: circle fill
+ {"$-$" below ljust at S.s; "$+$" above rjust at S.w+(2bp__,0)}
+{ OLP: box invis fill 0.9 wid 3.1 ht 1.4 with .nw at Here+(0.3,boxht*5/4)
+ "\sf plant" at OLP.nw below ljust }
+U: arrow right 0.4
+ {"$u$" at last arrow+(2bp__,0) above }
+Bp: box fill "$B$"
+ thickarrow right 0.4
+Sp: circle fill
+ {"$\;+$" below ljust at Sp.s; "$+$" above rjust at Sp.w+(2bp__,2bp__)}
+ thickarrow right 0.4
+ {"`$\dot{\mathbf x}$'" at last arrow + (0,7bp__)}
+Ip: box fill "$I/s$"
+ thickarrow right 1
+ {"$\mathbf x$" at last arrow + (0,7bp__) }
+Cp: box fill "$C$"
+# print Cp.e.x - Bp.w.x + 0.2
+ thickline right 0.4
+Yp: thickarrow
+ {"$\mathbf y$" at last arrow + (0,7bp__) }
+Ap: box fill "$A$" with .n at Ip.s+(0,-boxht/2)
+ thickarrow <- from Ap.e right 0.4 then up Ip.y-Ap.y
+ thickarrow from Ap.w to (Sp,Ap) then to Sp.s
+# print OLP.n.y-Ap.s.y+0.1
+#
+K: box fill "$K$" at Ap + (0,-boxht*3/2)
+ arrow from K.w to (S,K) then to S.s
+ {OBS: box invis fill 0.9 wid 4.3 ht 1.8 with .nw at (S.w,K.s)-(0.1,0.1)
+ "\sf observer" at OBS.sw ljust above }
+Io: box fill "$I/s$" at K + (0,-boxht*3/2)
+ thickarrow <- from Io.w left 0.4
+ {"`$\dot{\hat{\mathbf x}}$'" at last arrow + (0,7bp__)}
+Sxo: circle fill
+ {"$\;+$" below ljust at Sxo.s; "$+$" above rjust at Sxo.w+(2bp__,2bp__)}
+ thickarrow <- left 0.4
+SLo: circle fill
+ {"$\;+$" below ljust at SLo.s; "$+$" above rjust at SLo.w+(2bp__,2bp__)}
+ thickarrow <- left 0.4
+Bo: box fill "$B$"
+ arrow from 1/4 between U.start and U.end up boxht \
+ then left 2*boxht then down Bp.y-Bo.y+boxht then to Bo.w
+Ao: box fill "$A$" with .n at Io.s+(0,-boxht/2)
+ thickline from Io.e right 0.4
+ {thickarrow <-> from K.e to (Here,K.e) then to (Here,Ao) then to Ao.e
+ thickarrow from Ao.w to (Sxo,Ao.w) then to Sxo.s }
+Xhat: Here
+Co: box fill "$C$" at (Cp,Here)
+ thickarrow right 0.4
+ {"$\hat{\mathbf y}$" at last arrow + (0,7bp__) }
+ { thickarrow from Xhat to Co.w }
+ {"$\hat{\mathbf x}$" at last arrow + (0,7bp__) }
+Syo: circle fill
+ {"$\;+$" above ljust at Syo.n; "$-$" below rjust at Syo.w+(2bp__,-2bp__)}
+ thickarrow <- from Syo.n to (Syo,Cp)
+Lo: box fill "$L$" with .n at Ao.s+(0,-boxht/2)
+# print Io.n.y+0.1 - (Lo.s.y-0.1)
+ thickarrow from Syo.s down Syo.s.y-Lo.y then to Lo.e
+ thickarrow from Lo.w to (SLo,Lo.w) then to SLo.s
+] with .nw at last [].sw+(0,-0.3)
+ "(b) Single-input plant with feedback from a full-order observer" \
+ below ljust at Observer.sw+(0,-5pt__)
+
+# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . #
+
+ifelse(0,1,`
Observer: [ {"$r$" above ljust}
arrow
S: circle
@@ -53,13 +128,14 @@ Plant: box wid boxwid*3/2 ht boxht*5/4 \
move to last arrow.c
line to (Here, 1/4<Obs.se,Obs.ne>)
arrow to (Obs.e,Here)
-] with .nw at PID.sw+(0,-0.5)
- "(b) Output feedback with a full-order observer" below ljust \
- at Observer.sw+(0,-5pt__)
+] with .nw at last [].sw+(0,-0.5)
+')
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . #
+ifelse(1,1,`
Multiblock: [
+boxht = 0.4
boxwid = boxht
circlerad = boxht*0.4
@@ -95,8 +171,9 @@ Rf: doublebox(R_2,R_3) at ((S1.x+T.x)/2,T.y-boxht*3/2)
arrow from T to (T,Rf) then to Rf.e
arrow from Rf.w to (S1,Rf) then to S1.s
"$n_2$" at S1.s+(0,-boxht/2) ljust
-] with .nw at Observer.sw + (0,-0.5)
+] with .nw at Observer.sw + (0,-0.3)
"(c) A multiblock example" below ljust at Multiblock.sw+(0,-5pt__)
+')
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . #
@@ -128,15 +205,15 @@ G: box "plant" "$G$"
"$-$" at Here + (-0.15,-0.1)
arrow <- down from R.s
"$W$ control input" at Here - (0,0.1)
-
UL:R.nw +(-boxht/2,boxht/2)
UR:(D.e,UL) + (0.1,0)
line dashed from UL to UR then to (UR,G.s+(0,-boxht*3/2))
line dashed to (Gh.w,Here) "Controller" above
line dashed to (Here,Gh.s+(0,-boxht/2))
line dashed to (UL,Here) then to UL
-] with .nw at Multiblock.sw + (0,-0.5)
- "(d) Nonlinear feedforward (for performance) and small-signal feedback (for stability)" \
- below ljust at Nonlinear.sw+(0,-5pt__)
+] with .nw at last [].sw + (0,-0.2)
+ "(d) Nonlinear feedforward (for performance) and small-signal feedback
+ (for stability)" below ljust at Nonlinear.sw+(0,-5pt__)
+#print PID.n.y - Nonlinear.s.y
.PE
diff --git a/graphics/circuit_macros/examples/csc.m4 b/graphics/circuit_macros/examples/csc.m4
index 6fc3be88ba..69b8d20c3c 100644
--- a/graphics/circuit_macros/examples/csc.m4
+++ b/graphics/circuit_macros/examples/csc.m4
@@ -1,12 +1,15 @@
-ifelse(ifpstricks(T)`'ifmpost(T)`'ifpostscript(T)`'ifpgf(T),,
- `PSTricks, MetaPost, PGF, or Postscript required for this diagram',`dnl
-.PS 3.5
+.PS
+#.PS 3.5
# csc.m4
gen_init
+NeedDpicTools
+ifelse(ifpstricks(T)`'ifmpost(T)`'ifpostscript(T)`'ifpgf(T),,
+ `PSTricks, MetaPost, PGF, or Postscript required for this diagram',`
-circlerad=1.91
-hubrad=0.10
-s=0.5
+skale = 3.5/3.97*0.9955
+circlerad=1.91*skale
+hubrad=0.10*skale
+s=0.5*skale
define(`midnight',`0.1, 0.1, 0.44')
define(`white',`1, 1, 1')
@@ -18,7 +21,7 @@ define(`lwid',1)
define(`coord',`(s*(`$1'),s*(`$2'))')
# Circle and spokes
-# [
+CSC: [
rgbdraw(midnight,
linethick=`0.'eval(lwid*15)/(1pt__)
{circle with .c at Here
@@ -72,5 +75,156 @@ rgbdraw(midnight,
line to coord(-2.2,-2.05) then to coord(2.1,-1.75)
spline to coord(-1,-2.08) then to coord(0.55,-1.77)
)
-# ] with .sw at 1,1
-.PE')
+ ]
+')
+# PSTricks or tikz only:
+ifelse(ifpstricks(T)`'ifpgf(T),T,`
+Clock: [
+#.PS
+# AntiqueClock.m4
+#gen_init
+#NeedDpicTools
+
+iflatex(`latexcommand({\sf)')
+
+# https://tex.stackexchange.com/questions/236923/generate-analog-clock-with-numbered-face-add-seconds-roman-numerals
+
+# `hms2deg(hr,min,sec) hr:min:sec to degrees
+# blank arg1: degrees for minute hand
+# blank arg1 and arg2: degrees for second hand'
+define(`hms2deg',`ifelse(`$1',,
+ `ifelse(`$2',,
+ `(90-pmod(ifelse(`$3',,0,`$3'),60)/60*360)',
+ `(90-(pmod(`$2',60)/60 + pmod(ifelse(`$3',,0,`$3'),60)/60/60)*360)')',
+ `(90-(pmod(`$1',12) + pmod(ifelse(`$2',,0,`$2'),60)/60 + dnl
+ pmod(ifelse(`$3',,0,`$3'),60)/3600)/12*360)')')
+
+# `SecondHand(length,hr,min,sec)'
+define(`SecondHand',`[ shsf = (`$1')/3.2
+ C: Here
+ { L: rpoint_(to (Rect_(`$1',hms2deg(,,`$4')))) }
+ line thick 8*shsf to rvec_(`$1',0)
+ ]')
+
+# `AntiqueMinuteHand(length,hr,min,sec)'
+define(`AntiqueMinuteHand',`[ mhsf = (`$1')/2.84
+ L: rpoint_(to (Rect_(`$1',hms2deg(,`$3',`$4'))))
+ C: circle fill_(0) diam 0.47*mhsf at L.start
+ move to C
+ spline from rvec_(0,0.047*mhsf) \
+ to rvec_(1.65*mhsf,0.11*mhsf) \
+ then to rvec_(`$1',0.018*mhsf) \
+ then to rvec_(`$1',-0.018*mhsf) \
+ then to rvec_(1.65*mhsf,-0.11*mhsf) \
+ then to rvec_(0,-0.047*mhsf) \
+ shaded rgbstring(0,0,0)
+ ]')
+
+# `AntiqueHourHand(length,hr,min,sec)'
+define(`AntiqueHourHand',`[ hhsf = (`$1')/2.2
+ L: rpoint_(to (Rect_(`$1',hms2deg(`$2',`$3',`$4'))))
+ C: circle fill_(0) diam 0.6*hhsf at L.start
+ move to C
+ v = 0.25*hhsf
+ { line to rvec_(1.1*hhsf,0) thick 0.15/(1bp__)*hhsf }
+ { C1: circle rad v at rvec_(1.25*hhsf,0) fill_(0) }
+ d = `$1'-1.25*hhsf
+ q = 1bp__*hhsf
+ r1 = (d^2 + q^2 - v^2)/(v-q)/2
+ h = r1+v
+ shade(0,
+ arc ccw from C1+vec_(d/h*v,(r1+q)/h*v) to \
+ C1+vec_(d,q) rad r1 with .c at C1+vec_(d,r1+q)
+ arc ccw from C1+vec_(d,-q) to C1+vec_(d/h*v,-(r1+q)/h*v) rad r1 \
+ with .c at C1+vec_(d,-r1-q))
+ ]')
+
+define(`AntiqueClock',`[ # h,m,s,diam
+# Clock size parameters:
+ hour = ifelse(`$1',,3,`$1')
+ minute = ifelse(`$2',,41,`$2')
+ second = ifelse(`$3',,51,`$3')
+ # outer radius
+ ifelse(`$4',,`skale=0.5; r1=2',`r1=(`$4')/2; skale=r1/4')
+ r2 = r1-0.5*skale
+ r3 = r2-0.14*skale
+ r4 = r3 - 0.35*skale
+ r5 = r4 - 0.17*skale
+ r6 = r5 - 0.63*skale
+ r7 = r6 - 0.17*skale
+ shadelinethick = 1.0
+
+C: circle thick 0.2 rad r1
+
+define shadeline {
+ s = 1-($`'1)*2
+ v = r*s
+ h = sqrt(r^2-v^2)
+ t = 1-abs(s)
+ line from (vrot_(-h,v,cost,sint)) to (vrot_(h,v,cost,sint)) \
+ thick shadelinethick outlined rgbstring(t,t,t)
+ }
+
+ r = r1 # Bezel outer
+ nlines = int(2*r/(shadelinethick pt__)*1.1)
+ cost = cosd(10); sint = sind(10);
+ ShadeObject(shadeline,nlines, 0, 0,0,0, 0.5, 1,1,1, 1, 0,0,0 ) at C
+
+ r = r2 # Bezel inner
+ nlines = int(2*r/(shadelinethick pt__)*1.1)
+ cost = cosd(-10); sint = sind(-10);
+ ShadeObject(shadeline,nlines, 0, 0,0,0, 0.25, 0.8,0.8,0.8, 0.5, 1,1,1,
+ 0.75, 0.8,0.8,0.8, 1, 0,0,0 ) at C
+
+# Clock face
+Face: circle thick 0 fill_(1) rad r3 at C
+ circle rad r4 at C
+ circle rad r5 at C
+ circle rad r6 at C
+ circle rad r7 at C
+
+# Text rotation for PSTricks or TikZ
+ define(`rottext',
+ `ifpstricks(`\rput[c]{%g}(0,0)',`ifpgf(`\pgftext[rotate=%g]',%g)')')
+# Outer numbers
+ command sprintf("\font\outerfont=cmss12 at %4.2fin",r3-r4)
+ for mn = -15 to 15 by 5 do { sprintf("rottext{\outerfont %g}",\
+ -mn/60*360,pmod(mn,60)) at C+(Rect_((r3+r4)/2,90-mn/60*360)) }
+ for mn = 20 to 40 by 5 do { sprintf("rottext{\outerfont %g}",\
+ 180-mn/60*360,mn) at C+(Rect_((r3+r4)/2,90-mn/60*360)) }
+# Outer tics
+ for mn = 1 to 60 do { t = 90-mn/60*360
+ line from C+(Rect_(r5,t)) to C+(Rect_(r4,t)) }
+
+# Inner numbers
+ command sprintf("\font\innerfont=cmss12 at %4.2fin",r5-r6)
+ Loopover_(`mx',`t = (m4Lx-4)/12*360;
+ sprintf("rottext{\scalebox{0.7}[1.0]{\innerfont mx}}",-t) \
+ at C+(Rect_((r5+r6)/2,90-t))', IX,X,XI,XII,I,II,III)
+ Loopover_(`mx',`t = (m4Lx+3)/12*360;
+ sprintf("rottext{\scalebox{0.7}[1.0]{\innerfont mx}}",-t+180) \
+ at C+(Rect_((r5+r6)/2,90-t))', IV,V,VI,VII,VIII)
+
+# Inner tics
+ for mn = 5 to 60 by 5 do { t = 90-mn/60*360
+ line from C+(Rect_(r7,t)) to C+(Rect_(r6,t)) }
+
+# Hands
+ AntiqueHourHand(r6,hour,minute,second) with .C at C
+ AntiqueMinuteHand(r5,hour,minute,second) with .C at C
+ SecondHand((r3+r4)/2,hour,minute,second) with .C at C
+
+# Center
+ dot(at C,0.1/4*r1,1)
+ ]')
+
+ Clock1: AntiqueClock(,,,3.5)
+# Clock2: AntiqueClock(4,50,07,2) at Clock1.e+(1.5,0)
+
+ iflatex(`latexcommand(}%)')
+
+
+#.PE
+ ] with .sw at last [].se+(0.25,0)
+',` "AntiqueClock.m4 requires pstricks or pgf" ')
+.PE
diff --git a/graphics/circuit_macros/examples/examples.pdf b/graphics/circuit_macros/examples/examples.pdf
index e658c456a0..300ab4abed 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/examples.tex b/graphics/circuit_macros/examples/examples.tex
index 720e78861f..2b252a4e18 100644
--- a/graphics/circuit_macros/examples/examples.tex
+++ b/graphics/circuit_macros/examples/examples.tex
@@ -2,7 +2,6 @@
\documentclass[11pt]{article}
\usepackage{times}
-%\usepackage{pstricks,pst-grad}
\input mode
\usepackage{rotating}
\usepackage{graphicx}
@@ -22,24 +21,22 @@
\hfill\break
This is a collection of diagrams the author has had occasion to produce
- using m4 circuit macros and others, and gpic or dpic. In some cases
- there are other or better m4 or pic constructs for producing the
- same drawings, but the source-file names are shown for reference.
- Most of the examples can be processed using either dpic~-p, dpic~-g,
- or gpic~-t, but the possibility of other postprocessing has meant that
+ using m4 circuit macros and others, and dpic or gpic. In some cases
+ there are other or better m4 or pic constructs for producing the same
+ drawings, but names of the actual source-files are shown for reference.
+ Some of the later examples test the boundaries of what can be done
+ when employing a ``little language'' like pic. Most of the examples
+ can be processed using either dpic~-p, dpic~-g, or, with exceptions,
+ gpic~-t, but the possibility of other postprocessing has meant that
sometimes the source is slightly more complicated than it would be if
- only one workflow had been assumed. Some of the examples require dpic.
- The most simplicity and elegance is achieved by sticking to one pic
- interpreter and one postprocessor.
+ only one workflow had been assumed. The most simplicity and elegance
+ is achieved by sticking to one pic interpreter and one postprocessor.
This document duplicates a few diagrams from the manual
Circuit\_macros.pdf. There are also a few files in the
examples directory that are not included in this document. To process
{\sl file}.m4, for example, type "make {\sl file}.pdf."
-% Some of the boundaries of what macros and the pic language can do are
-% tested toward the end of the following examples.
-
\input files
\endinput
diff --git a/graphics/circuit_macros/examples/exp.m4 b/graphics/circuit_macros/examples/exp.m4
index c518eb9bcf..abcde1c751 100644
--- a/graphics/circuit_macros/examples/exp.m4
+++ b/graphics/circuit_macros/examples/exp.m4
@@ -32,37 +32,37 @@ arad = 0.6*g
define(`D3',`0.3*g,0.6*g,0.9*g')
# fixed coordinate frame
-O: project(O3)
-X: project(X0)
-Y: project(Y0)
+O: Project(O3)
+X: Project(X0)
+Y: Project(Y0)
Fector(X0,Z0) with .Origin at O ; "$x_0$" at X rjust
Fector(Y0,Z0) with .Origin at O ; "$y_0$" at Y ljust below
- Fector(Z0,Y0) with .Origin at O ; "`$z_0$'" at project(Z0) above
+ Fector(Z0,Y0) with .Origin at O ; "`$z_0$'" at Project(Z0) above
define(`R01',`rot3Dz(pazim,rot3Dy(-pelev,$1,$2,$3))')
define(`R10',`rot3Dy(pelev,rot3Dz(-pazim,$1,$2,$3))')
thinlines_ ; psset_(linecolor=gray)
- line from O to project(rot3Dz(pazim,axlen,0,0))
+ line from O to Project(rot3Dz(pazim,axlen,0,0))
psset_(linecolor=black)
- arc -> ccw from project(arad,0,0) to project(rot3Dz(pazim,arad,0,0)) rad arad
+ arc -> ccw from Project(arad,0,0) to Project(rot3Dz(pazim,arad,0,0)) rad arad
"$\theta$" below
up_
- arc -> cw from project(rot3Dz(pazim,arad,0,0)) \
- to project(R01(arad,0,0)) rad arad
- "$\phi$" rjust at project(rot3Dz(pazim,rot3Dy(-pelev/2,arad,0,0)))
- arc -> from project(0,arad,0) to project(R01(0,arad,0)) rad arad
+ arc -> cw from Project(rot3Dz(pazim,arad,0,0)) \
+ to Project(R01(arad,0,0)) rad arad
+ "$\phi$" rjust at Project(rot3Dz(pazim,rot3Dy(-pelev/2,arad,0,0)))
+ arc -> from Project(0,arad,0) to Project(R01(0,arad,0)) rad arad
"$\theta$" above
right_
- arc -> cw from project(0,0,arad/2) to project(R01(0,0,arad/2)) rad arad/2
+ arc -> cw from Project(0,0,arad/2) to Project(R01(0,0,arad/2)) rad arad/2
"$\phi$" ljust at Here+(-1pt__,-3pt__)
Fector(R01(X0),R01(Z0)) with .Origin at O ;
- "$x_1$" above rjust at project(R01(X0))
+ "$x_1$" above rjust at Project(R01(X0))
Fector(R01(Y0),R01(Z0)) with .Origin at O ;
- "$y_1$" ljust at project(R01(Y0))
+ "$y_1$" ljust at Project(R01(Y0))
Fector(R01(Z0),R01(Y0)) with .Origin at O ;
- "$z_1$" above at project(R01(Z0))
+ "$z_1$" above at Project(R01(Z0))
thicklines_
# box object dimension
@@ -72,23 +72,23 @@ h = 0.20*g
# box object corners
define(`B0',`D3')
-define(`B1',`sum3D(D3,d,0,0)') PB1: project(B1)
-define(`B2',`sum3D(D3,d,b,0)') PB2: project(B2)
-define(`B3',`sum3D(D3,0,b,0)') PB3: project(B3)
-define(`B4',`sum3D(D3,0,0,h)') PB4: project(B4)
-define(`B5',`sum3D(D3,d,0,h)') PB5: project(B5)
-define(`B6',`sum3D(D3,d,b,h)') PB6: project(B6)
-define(`B7',`sum3D(D3,0,b,h)') PB7: project(B7)
+define(`B1',`sum3D(D3,d,0,0)') PB1: Project(B1)
+define(`B2',`sum3D(D3,d,b,0)') PB2: Project(B2)
+define(`B3',`sum3D(D3,0,b,0)') PB3: Project(B3)
+define(`B4',`sum3D(D3,0,0,h)') PB4: Project(B4)
+define(`B5',`sum3D(D3,d,0,h)') PB5: Project(B5)
+define(`B6',`sum3D(D3,d,b,h)') PB6: Project(B6)
+define(`B7',`sum3D(D3,0,b,h)') PB7: Project(B7)
# projected corners
-P0:project(R01(0,dcosine3D(2,R10(B0)),dcosine3D(3,R10(B0))))
-P1:project(R01(0,dcosine3D(2,R10(B1)),dcosine3D(3,R10(B1))))
-P2:project(R01(0,dcosine3D(2,R10(B2)),dcosine3D(3,R10(B2))))
-P3:project(R01(0,dcosine3D(2,R10(B3)),dcosine3D(3,R10(B3))))
-P4:project(R01(0,dcosine3D(2,R10(B4)),dcosine3D(3,R10(B4))))
-P5:project(R01(0,dcosine3D(2,R10(B5)),dcosine3D(3,R10(B5))))
-P6:project(R01(0,dcosine3D(2,R10(B6)),dcosine3D(3,R10(B6))))
-P7:project(R01(0,dcosine3D(2,R10(B7)),dcosine3D(3,R10(B7))))
+P0:Project(R01(0,dcosine3D(2,R10(B0)),dcosine3D(3,R10(B0))))
+P1:Project(R01(0,dcosine3D(2,R10(B1)),dcosine3D(3,R10(B1))))
+P2:Project(R01(0,dcosine3D(2,R10(B2)),dcosine3D(3,R10(B2))))
+P3:Project(R01(0,dcosine3D(2,R10(B3)),dcosine3D(3,R10(B3))))
+P4:Project(R01(0,dcosine3D(2,R10(B4)),dcosine3D(3,R10(B4))))
+P5:Project(R01(0,dcosine3D(2,R10(B5)),dcosine3D(3,R10(B5))))
+P6:Project(R01(0,dcosine3D(2,R10(B6)),dcosine3D(3,R10(B6))))
+P7:Project(R01(0,dcosine3D(2,R10(B7)),dcosine3D(3,R10(B7))))
thinlines_
line from PB1 to P1
line from PB2 to P2
@@ -134,24 +134,24 @@ thicklines_
alpha = rectht/3
# # Rectangle
- NW: project(-rectht/2,-rectwid*0.25,0)
- SW: project( rectht/2,-rectwid*0.25,0)
- SE: project( rectht/2, rectwid*0.75,0)
- NE: project(-rectht/2, rectwid*0.75,0)
+ NW: Project(-rectht/2,-rectwid*0.25,0)
+ SW: Project( rectht/2,-rectwid*0.25,0)
+ SE: Project( rectht/2, rectwid*0.75,0)
+ NE: Project(-rectht/2, rectwid*0.75,0)
ShadedPolygon(NW:NE:SE:SW,,-90,
0,0.25,0.25,0.25,
1,1,1,1) with .Start at NW
define(`C3D',`0,0,alpha') # Centre of the sphere
- C: project(C3D)
+ C: Project(C3D)
# # Shaded sphere using PSTricks or tikz:
# # this is black magic but PSTricks
# # seems to give more control
# ifpstricks(
# `Highlight: \
-# project(sum3D(C3D,rot3Dz(-15*dtor_,rot3Dy(-60*dtor_,alpha,0,0))))
+# Project(sum3D(C3D,rot3Dz(-15*dtor_,rot3Dy(-60*dtor_,alpha,0,0))))
# command "\pscustom[fillstyle=gradient,gradmidpoint=0.0,%"
# command sprintf("gradbegin=gray,gradend=white,gradlines=%g,%%",alpha*200)
# command "GradientCircle=true,GradientScale=1.5,%"
@@ -174,15 +174,15 @@ thicklines_
"$\alpha$" at 0.5<S,C> ljust
define(`N3D',`0,0,2*alpha') # North pole
- N: project(N3D)
+ N: Project(N3D)
"$N$" at N+(0,3pt__) ljust
phi = 65*dtor_
define(`Phat3D',`rot3Dz(phi,alpha*3,0,0)')
- Phat: "$\hat{P}$" at project(Phat3D) ljust
+ Phat: "$\hat{P}$" at Project(Phat3D) ljust
- X: project(rectht/2*0.8,0,0)
- Y: project(0,rectwid/2*0.8,0)
+ X: Project(rectht/2*0.8,0,0)
+ Y: Project(0,rectwid/2*0.8,0)
`define' linevis { # ratio # Visibility function for lines fom S to Tmp
Tlv: $1 between S and Tmp
@@ -202,8 +202,8 @@ thinlines_ # axes
arrow up alpha*0.5 chop 0.05 chop 0 ; "$z$" above
invisline(Phat)
line to Phat chop 0.05 chop 0
- arc ccw -> rad alpha from project(alpha/2,0,0) to \
- project(rot3Dz(phi,alpha/2,0,0))
+ arc ccw -> rad alpha from Project(alpha/2,0,0) to \
+ Project(rot3Dz(phi,alpha/2,0,0))
"$\phi$" below at 0.5 between last arc.start and last arc.end
# vector (ratio along (N to Phat))
@@ -212,7 +212,7 @@ define(`ray',`sum3D(N3D,sprod3D($1,diff3D(Phat3D,N3D)))')
$2 = length3D(diff3D(ray($1),C3D))-alpha }
findroot(rayvis, 1e-3, 1, 1e-8, p) # Find P
- P: "$P$" at project(ray(p)) ljust above
+ P: "$P$" at Project(ray(p)) ljust above
thicklines_
line dashed from N to P chop 0 chop 0.05
@@ -226,11 +226,11 @@ thinlines_ # Draw the meridian
findroot(meridianvis, 0, pi_, 1e-8, y)
n = 0
for ang = y-pi_ to y by pi_/20 do {
- Q[n]: project(sum3D(C3D,meridian(ang))); n+=1 }
+ Q[n]: Project(sum3D(C3D,meridian(ang))); n+=1 }
fitcurve(Q,n-1)
n = 0
for ang = y to y+pi_ by pi_/20 do {
- Q[n]: project(sum3D(C3D,meridian(ang))); n+=1 }
+ Q[n]: Project(sum3D(C3D,meridian(ang))); n+=1 }
fitcurve(Q,n-1,dashed)
define(`equator',`rot3Dz($1,alpha,0,0)')
@@ -240,15 +240,15 @@ define(`equator',`rot3Dz($1,alpha,0,0)')
findroot(equatorvis, 0, pi_, 1e-8, y)
n = 0
for ang = y-pi_ to y by pi_/20 do {
- Q[n]: project(sum3D(C3D,equator(ang))); n+=1 }
+ Q[n]: Project(sum3D(C3D,equator(ang))); n+=1 }
fitcurve(Q,n-1)
n = 0
for ang = y to y+pi_ by pi_/20 do {
- Q[n]: project(sum3D(C3D,equator(ang))); n+=1 }
+ Q[n]: Project(sum3D(C3D,equator(ang))); n+=1 }
fitcurve(Q,n-1,dashed)
line dashed from C to P # beta
- line dashed from C to project(sum3D(C3D,equator(phi)))
+ line dashed from C to Project(sum3D(C3D,equator(phi)))
arc ccw -> from 0.6 along_(last line) to 0.6 between C and P
"$\beta$" ljust at last arc.e+(0,2pt__)
diff --git a/graphics/circuit_macros/examples/fet.m4 b/graphics/circuit_macros/examples/fet.m4
index 08498ef83d..9cbd0809ce 100644
--- a/graphics/circuit_macros/examples/fet.m4
+++ b/graphics/circuit_macros/examples/fet.m4
@@ -2,10 +2,8 @@
# `fet.m4'
cct_init
-dwn = 0.9
-dwn = 1.0
-rgt = 0.9
textht = 0.1
+define(`rmove',0.75)
dnl `IRF4905(linespec,R)'
define(`IRF4905',
@@ -18,74 +16,84 @@ define(`IRF4905',
G: Q.G
circle rad 5*dimen_/10 at Q.tr_xy(0,1) ]')
-define(`rmove',0.75)
-define(`dir_',`right_')
-
-Orig: Here
-dir_
- { move left 0.2 }
- {J: j_fet(right_ dimen_,,,E)
- "{\tt j\_fet(right\_ dimen\_,{,},E)}" wid 1.75 \
- with .nw at last [].sw+(0.0,-0.25)
- "$G$" at last [].G rjust above
- "$S$" at last [].S rjust
- "$D$" at last [].D ljust
- }
-
- move right_ 0.9; dir_
- {j_fet(,,P,)
- "{\tt j\_fet(,{,}P,)}" at last [].s+(0,-0.05) below
- "$G$" at last [].G rjust
- "$S$" at last [].S rjust
- "$D$" at last [].D ljust
- }
-
- move right_ 0.9; dir_
- {e_fet(,R,,)
- "{\tt e\_fet(,R,{,})}" at last [].s+(0,-0.05) below
- "$G$" at last [].G rjust
- "$S$" at last [].S rjust
- "$D$" at last [].D ljust
- }
-
- {move down_ dwn; dir_
- e_fet(,,P)
- "{\tt e\_fet(,{,}P)}" at last [].s+(0.1,-0.2) below}
-
- move right_ 0.9; dir_
- {d_fet(,,,)
- "{\tt d\_fet(,{,},)}" at last [].s+(0,-0.05) below}
-
- {move down_ dwn; dir_
- d_fet(,,P)
- "{\tt d\_fet(,{,}P)}" at last [].s+(0,-0.05) below}
-
- move right_ 0.9; dir_
- {e_fet(,,,S)
- "{\tt e\_fet(,{,},S)}" at last [].s+(0,-0.05) below}
-
- {move down_ dwn; dir_
- e_fet(,,P,S)
- "{\tt e\_fet(,{,}P,S)}" at last [].s+(0,-0.2) below}
-
- move right_ 0.9; dir_
- {d_fet(,,,S)
- "{\tt d\_fet(,{,},S)}" at last [].s+(0,-0.2) below}
-
- {move down_ dwn; dir_
- d_fet(,,P,S)
- "{\tt d\_fet(,{,}P,S)}" at last [].s+(0,-0.05) below}
-
- move right_ 0.9; dir_
- {c_fet(,,,)
- "{\tt `c\_fet'(,{,},)}" at last [].s+(0,-0.05) below}
-
- {move down_ dwn; dir_
- c_fet(,,P)
- "{\tt `c\_fet'(,{,}P)}" at last [].s+(0,-0.2) below}
+Row1: [ J: j_fet
+ { "{\tt j\_fet}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: j_fet(right_ dimen_,,P,E) with .w at J.e+(0.5,0)
+ { "{\tt j\_fet(right\_}" "{\tt dimen\_,{,}P,E)}" at J.s+(0,-13bp__) below
+ "$G$" at J.G rjust above
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: e_fet with .w at J.e+(0.5,0)
+ { "{\tt $\;$ e\_fet}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: e_fet(,,P) with .w at J.e+(0.6,0)
+ { "{\tt $\;$ e\_fet(,{,}P)}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: e_fet(,,P,S) with .w at J.e+(0.7,0)
+ { "{\tt $\;$ e\_fet(,{,}P,S)}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: c_fet with .w at J.e+(0.6,0)
+ { "{\tt $\;$ c\_fet}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: c_fet(,,P) with .w at J.e+(0.6,0)
+ { "{\tt $\;$ c\_fet(,{,}P)}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ ]
+
+Row2: [
+ J: d_fet
+ { "{\tt d\_fet}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: d_fet(,,P) with .w at J.e+(0.5,0)
+ { "{\tt d\_fet(,{,}P)}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: d_fet(,,P,S) with .w at J.e+(0.7,0)
+ { "{\tt d\_fet(,{,}P,S)}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: g_fet with .w at J.e+(0.6,0)
+ { "{\tt g\_fet}" at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ J: g_fet(up_ dimen_,,P) with .w at J.e+(0.6,0)
+ { "{\tt `g\_fet'(up\_$\;\;$}" at last [].s below
+ "{\tt dimen\_,{,}P)}" at last [].s + (0,-12bp__) below
+ "{\sl G}" at last [].G rjust
+ "{\sl S}" at last [].S + (0,2bp__) ljust
+ "{\sl D}" at last [].D + (0,2bp__) ljust below }
+ right_
+ M1: mosfet(,,dBSDFQM1,E) with .w at J.e+(0.5,0)
+ "$G0$" at M1.G0 above rjust
+ "$G1$" at M1.G1 above ljust
+ {"\tt `mosfet'(,{,}dBSDFQM1,E)" wid 1.45 \
+ with .nw at last [].sw+(0,-0.2) }
+ M2: mosfet(,,dBSDFQuM1) with .nw at M1.ne+(0.5,0)
+ "$G0$" at M2.G0 above ljust
+ "$G1$" at M2.G1 above rjust
+ {"\tt ...(,{,}dBSDFQuM1)" wid 1.25 \
+ with .n at last [].s+(0,-0.05) }
+ ] with .nw at Row1.sw+(0,-0.1)
-move down 1; right_
- [
+Row3: [
linewid = linewid*1.2
Q1: mosfet(,,dGSDF,)
@@ -132,8 +140,22 @@ move down 1; right_
"$D$" at last [].D ljust
"$B$" at last [].B below
}
-
- move right_ rmove
+ move right_
+ J: Fe_fet #(right_ dimen_)
+ {`"{\tt $\;$ Fe\_fet}"' at J.s+(0,-0.05) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ move right_
+ J: Fe_fet(,,TEDQSuB)
+ {`"{\tt $\;$ Fe\_fet(,,TEDSQuB)}"' at J.s+(0,-0.15) below
+ "$G$" at J.G rjust
+ "$S$" at J.S rjust
+ "$D$" at J.D ljust }
+ ] with .nw at last [].sw
+
+Row4: [
+ {move left 0.5}
Q5: mosfet(,,ZSDFdT,)
{"\tt `$\ldots$'(,{,}ZSDFdT,)" at last [].s+(0,-0.05) below
thinlines_
@@ -144,8 +166,7 @@ move down 1; right_
arrow <- down .08 right .24 from (Q5.G.x,Q5.G.y-0.02)
"\tt dT" ljust
thicklines_ }
-
- move right_ rmove
+ move right_ 0.8
up_
Q6: IRF4905 with .c at Here
{`"\tt IRF4905"' at Q6.s+(0,-0.15) below
@@ -153,18 +174,6 @@ move down 1; right_
"$D$" at Q6.D ljust above
"$S$" at Q6.S ljust below
}
- ] with .nw at J.sw+(0,-1.35) #Orig+(-0.26,-1.2)
-
- right_
- M1: mosfet(,,dBSDFQM1,E) with .nw at J.nw+(0,-dwn)
- "$G0$" at M1.G0 above rjust
- "$G1$" at M1.G1 above ljust
- {"\tt `mosfet'(,{,}dBSDFQM1,E)" wid 1.45 \
- with .nw at last [].sw+(0,-0.23) }
- M2: mosfet(,,dBSDFQuM1) with .nw at M1.ne+(0.5,0)
- "$G0$" at M2.G0 above ljust
- "$G1$" at M2.G1 above rjust
- {"\tt ...(,{,}dBSDFQuM1)" wid 1.25 \
- with .n at last [].s+(0,-0.05) }
+ ] with .nw at last [].sw
.PE
diff --git a/graphics/circuit_macros/examples/files.tex b/graphics/circuit_macros/examples/files.tex
index f320c34f9c..a33d0dc50d 100644
--- a/graphics/circuit_macros/examples/files.tex
+++ b/graphics/circuit_macros/examples/files.tex
@@ -7,9 +7,21 @@
}
\bfig{
- \centerline{{\small\getpic{CctTable}}}
- \caption{Two-terminal elements, showing some variations
- \src{CctTable.m4}.}
+ \centerline{{\small\getpic{Resistors}}}
+ \caption{Resistors, showing some variations
+ \src{Resistors.m4}.}
+ }
+
+\bfig{
+ \centerline{{\small\getpic{Capacitors}}}
+ \caption{Capacitors, showing some variations
+ \src{Capacitors.m4}.}
+ }
+
+\bfig{
+ \centerline{{\small\getpic{Inductors}}}
+ \caption{Inductors, showing some variations
+ \src{Inductors.m4}.}
}
\bfig{
@@ -47,6 +59,11 @@
\caption{Macros {\tt fuse} and {\tt cbreaker}
\src{Fuses.m4}.}
}
+\bfig{
+ \centerline{\getpic{MoreTable}}
+ \caption{Additional two-terminal elements
+ \src{MoreTable.m4}.}
+ }
\bfig{
\centerline{\getpic{Grounds}}
@@ -146,6 +163,12 @@
}
\bfig{
+ \centerline{\getpic{Chips}}
+ \caption{IC package outlines
+ \src{Chips.m4}.}
+ }
+
+\bfig{
\centerline{\getpic{fet}}
\caption{FETs, showing programmable components and example customizations
\src{fet.m4}.}
@@ -484,7 +507,7 @@
\bfig{
\centerline{\getpic{control}}
- \caption{Control-system block diagrams that do not require m4
+ \caption{Control-system block diagrams
\src{control.m4}.}
}
@@ -539,6 +562,12 @@
}
\bfig{
+ \centerline{\getpic{Plate}}
+ \caption{Dimensioning with tolerances
+ \src{Plate.m4}.}
+ }
+
+\bfig{
\centerline{\getpic{ex05}}
\caption{Use of {\tt darrow}
\src{ex05.m4}.}
@@ -570,6 +599,7 @@
determines plotting order
\src{graysurf.m4}.}
}
+\clearpage
\bfig{
\centerline{\getpic{shapes}}
@@ -578,12 +608,6 @@
}
\bfig{
- \centerline{\getpic{AntiqueClock}}
- \caption{An antique clock face
- \src{AntiqueClock.m4}.}
- }
-
-\bfig{
\centerline{\getpic{Lyap}}
\caption{Illustrating a Lyapunov function
\src{Lyap.m4}.}
@@ -592,7 +616,7 @@
\bfig{
\centerline{\getpic{csc}}
\caption{Conestoga Sailing Club (illustrating the filling of arbitrary
- shapes)
+ shapes) and an antique clock face with shading and rotated text
\src{csc.m4}.}
}
@@ -632,6 +656,7 @@
\caption{Dini surface and an icosahedron
\src{Dini.m4}.}
}
+\clearpage
\bfig{
\centerline{\getpic{Sierpinski}}
diff --git a/graphics/circuit_macros/examples/graysurf.m4 b/graphics/circuit_macros/examples/graysurf.m4
index 22372697b2..9be043b849 100644
--- a/graphics/circuit_macros/examples/graysurf.m4
+++ b/graphics/circuit_macros/examples/graysurf.m4
@@ -25,9 +25,9 @@ Surface:[
Orig: (0,0)
linethick_(1.2)
- arrow from Orig to 1.2 <Orig,(project(xmax,0,0))> ; "$x$" below
- arrow from Orig to 1.2 <Orig,(project(0,ymax,0))> ; "$y$" ljust
- arrow from Orig to 1.2 <Orig,(project(0,0,zmax))> ; "$z$" rjust
+ arrow from Orig to 1.2 <Orig,(Project(xmax,0,0))> ; "$x$" below
+ arrow from Orig to 1.2 <Orig,(Project(0,ymax,0))> ; "$y$" ljust
+ arrow from Orig to 1.2 <Orig,(Project(0,0,zmax))> ; "$z$" rjust
linethick_(0)
for i = 0 to nx-1 do {
@@ -36,10 +36,10 @@ Surface:[
y = ymax*j/ny
fnxy = fn(x,y)
shade((fnmax+fnxy)/fnmax/2,
- line from (project(x,y,fnxy)) to (project(x,(y+dy),`fn(x,(y+dy))'))\
- then to (project((x+dx),(y+dy),`fn((x+dx),(y+dy))'))\
- then to (project((x+dx),y,`fn((x+dx),y)'))\
- then to (project(x,y,fnxy))
+ line from (Project(x,y,fnxy)) to (Project(x,(y+dy),`fn(x,(y+dy))'))\
+ then to (Project((x+dx),(y+dy),`fn((x+dx),(y+dy))'))\
+ then to (Project((x+dx),y,`fn((x+dx),y)'))\
+ then to (Project(x,y,fnxy))
) } }
] #with .w at last [].e+(-0.2,0)
@@ -63,8 +63,8 @@ define(`tvisible',
`dot3D(View3D, rot3Dz((`$1')*dtor_,rot3Dy((`$2')*dtor_,1,0,0)))')
Orig: (0,0)
-X: arrow from Orig to (project(tradius+sradius*4,0,0)); "x" rjust
-Y: arrow from Orig to (project(0,tradius+sradius*2,0)); "y" ljust
+X: arrow from Orig to (Project(tradius+sradius*4,0,0)); "x" rjust
+Y: arrow from Orig to (Project(0,tradius+sradius*2,0)); "y" ljust
dt = 10 # major angle degrees per facet
ds = 10 # minor angle degrees per facet
@@ -87,10 +87,10 @@ Y: arrow from Orig to (project(0,tradius+sradius*2,0)); "y" ljust
thinlines_
for i = 1 to n do {
tc = t[ix[i]]; sc = s[ix[i]]
- SE: (project(torus(tc+dt/2,sc-ds/2)))
- SW: (project(torus(tc-dt/2,sc-ds/2)))
- NW: (project(torus(tc-dt/2,sc+ds/2)))
- NE: (project(torus(tc+dt/2,sc+ds/2)))
+ SE: (Project(torus(tc+dt/2,sc-ds/2)))
+ SW: (Project(torus(tc-dt/2,sc-ds/2)))
+ NW: (Project(torus(tc-dt/2,sc+ds/2)))
+ NE: (Project(torus(tc+dt/2,sc+ds/2)))
f = ((dcosine3D(3,torus(tc,sc))/sradius+1)/2)^2
g = min(f,0.9)
setrgb(g,g,g)
@@ -102,10 +102,10 @@ thinlines_
}
thicklines_
- arrow from Orig to (project(0,0,tradius*1.4)); "z" above
- dashline(from Orig to (project(torus(0,0))),,,,G)
+ arrow from Orig to (Project(0,0,tradius*1.4)); "z" above
+ dashline(from Orig to (Project(torus(0,0))),,,,G)
arrow to X.end
- dashline(from Orig to (project(torus(90,0))),,,,G)
+ dashline(from Orig to (Project(torus(90,0))),,,,G)
arrow to Y.end
] with .sw at last [].se+(0.2,0)
@@ -130,11 +130,11 @@ Hat: [
dy = 0.05
Orig: (0,0)
-X: arrow from Orig to (project(maxy*1.2,0,0)); "x" rjust
-Y: arrow from Orig to (project(0,maxy*1.2,0)); "y" ljust
-Xv: (project(1,0,0))
-Yv: (project(0,1,0))
-Zv: (project(0,0,1))
+X: arrow from Orig to (Project(maxy*1.2,0,0)); "x" rjust
+Y: arrow from Orig to (Project(0,maxy*1.2,0)); "y" ljust
+Xv: (Project(1,0,0))
+Yv: (Project(0,1,0))
+Zv: (Project(0,0,1))
# create the arrays and sort
n = 0
for t = dang/2 to 360.1 by dang do {
@@ -150,14 +150,14 @@ Zv: (project(0,0,1))
dpquicksort(d,1,n,ix)
# draw the facets
ellipse wid maxy*2 ht maxy*2*sind(elevation) \
- with .c at (project(0,0,(maxy^2-1)^2)+linethick bp__/2)
+ with .c at (Project(0,0,(maxy^2-1)^2)+(0,linethick bp__/2))
thinlines_
for i = 1 to n do {
tc = t[ix[i]]; yc = y[ix[i]]
- SE: (project(hat(tc+dang/2,yc-dy/2)))
- SW: (project(hat(tc-dang/2,yc-dy/2)))
- NW: (project(hat(tc-dang/2,yc+dy/2)))
- NE: (project(hat(tc+dang/2,yc+dy/2)))
+ SE: (Project(hat(tc+dang/2,yc-dy/2)))
+ SW: (Project(hat(tc-dang/2,yc-dy/2)))
+ NW: (Project(hat(tc-dang/2,yc+dy/2)))
+ NE: (Project(hat(tc+dang/2,yc+dy/2)))
f = abs(yc^2-1)
line invis fill f from SE to SW then to NW then to NE then to SE
}
@@ -168,21 +168,21 @@ nr = -1
for i=1 to mm do { y = i/(mm+3)
findroot(edge,(azimuth+2),(azimuth+180-2),1e-8,t)
nr +=1
- R[mm+nr]: (project(hat(t,y)))
+ R[mm+nr]: (Project(hat(t,y)))
R[mm-1-nr]: (-R[mm+nr].x,R[mm+nr].y)
}
fitcurve(R,mm*2-1)
# Z axis
thicklines_
-Z: arrow from Zv to (project(0,0,1.2)); "z" ljust
+Z: arrow from Zv to (Project(0,0,1.2)); "z" ljust
line dashed from Orig to Zv chop 0 chop dashwid/2
line dashed from Orig to Xv
line dashed from Orig to Yv
# Partial rim
ellipsearc(maxy*2,maxy*2*sind(elevation),-pi_*1.4,pi_/3) \
- with .C at (project(0,0,(maxy^2-1)^2)+linethick bp__/2)
+ with .C at (Project(0,0,(maxy^2-1)^2)+(0,linethick bp__/2))
] scaled 1.25 with .s at 1st [].ne+(0,-0.75)
] scaled 0.85
diff --git a/graphics/circuit_macros/examples/ics.m4 b/graphics/circuit_macros/examples/ics.m4
index c07cb61ea2..bf702d7c44 100644
--- a/graphics/circuit_macros/examples/ics.m4
+++ b/graphics/circuit_macros/examples/ics.m4
@@ -1,16 +1,6 @@
divert(-1)
- Macros defining some integrated circuits and connectors
-
- `DIP_chip_outline( pin count, wid )'
-define(`DIP_chip_outline',
- `[ define(`m4chgw',`ifelse(`$2',,(18*L_unit),`$2')')dnl
- Chip: box invis wid m4chgw ht lg_pinsep*eval((`$1')/2+1)
- arcd(last box.n, lg_pinsep/2, 180, 360)
- { line to last box.ne chop -linewid bp__/2 }
- { line from last arc.start to last box.nw chop -linewid bp__/2 }
- line from last box.nw to last box.sw then to last box.se then to last box.ne
- `$3']')
+ Macros defining some integrated circuits and connectors for LaTeX
`A sequence of pins along the east or west side of a chip:
lg_pinseq(initial pin no, final pin no,
@@ -20,6 +10,8 @@ define(`lg_pinseq',`for_($1,$2,1,
`lg_pin( Chip.s`$3'+(0,($4+m4x)*lg_pinsep),
$6`'m4x,Pin`'eval($5`'m4x),`$3'`$7',eval($5`'m4x))') ')
+define(`ic_tiny',`iflatex(`\hbox{\tiny `$1'}',ifsvg(`svg_small(`$1')',`$1'))')
+define(`ic_tilde',`iflatex(`{\raisebox{-0.5ex}{\char126}}',~)')
define(`ic6116',`[ Chip: box wid_ lg_chipwd ht_ 15*lg_pinsep
lg_pin(Chip.sw_+(0,lg_pinsep),GND,Pin12,w,12)
@@ -27,7 +19,7 @@ define(`ic6116',`[ Chip: box wid_ lg_chipwd ht_ 15*lg_pinsep
lg_pinseq(0,2,w,4,9+,D)
lg_pinseq(3,7,w,4,10+,D)
lg_pin(Chip.sw_+(0,13*lg_pinsep),R/lg_bartxt(W),Pin21,w,21)
- lg_pin(Chip.sw_+(0,14*lg_pinsep),V\hbox{\tiny CC},Pin24,w,24)
+ lg_pin(Chip.sw_+(0,14*lg_pinsep),V`'ic_tiny(CC),Pin24,w,24)
lg_pin(Chip.se_+(0,lg_pinsep),lg_bartxt(OE),Pin20,eN,20)
lg_pinseq(0,7,e,3,8-,A)
lg_pinseq(8,9,e,3,31-,A)
@@ -35,8 +27,8 @@ define(`ic6116',`[ Chip: box wid_ lg_chipwd ht_ 15*lg_pinsep
`$1']')
define(`ic6502',`[ Chip: box wid_ lg_chipwd ht_ 24*lg_pinsep
- lg_pin(Chip.sw_+(0,lg_pinsep),V\hbox{\tiny SS},Pin21,w,21)
- lg_pin(Chip.sw_+(0,2*lg_pinsep),V\hbox{\tiny SS},Pin1,w,1)
+ lg_pin(Chip.sw_+(0,lg_pinsep),V`'ic_tiny(SS),Pin21,w,21)
+ lg_pin(Chip.sw_+(0,2*lg_pinsep),V`'ic_tiny(SS),Pin1,w,1)
lg_pin(Chip.sw_+(0,4*lg_pinsep),R/lg_bartxt(W),Pin34,w,34)
lg_pinseq(0,7,w,6,33-,D)
lg_pin(Chip.sw_+(0,15*lg_pinsep),lg_bartxt(RESET),Pin40,wN,40)
@@ -44,19 +36,19 @@ define(`ic6502',`[ Chip: box wid_ lg_chipwd ht_ 24*lg_pinsep
lg_pin(Chip.sw_+(0,19*lg_pinsep),lg_bartxt(NMI),Pin6,wN,6)
lg_pin(Chip.sw_+(0,21*lg_pinsep),RDY,Pin2,w,2)
lg_pin(Chip.sw_+(0,22*lg_pinsep),SO,Pin38,w,38)
- lg_pin(Chip.sw_+(0,23*lg_pinsep),V\hbox{\tiny CC},Pin8,w,8)
- lg_pin(Chip.se_+(0,lg_pinsep),{\large$\phi$}\hbox{\tiny 1}(in),Pin39,e,39)
+ lg_pin(Chip.sw_+(0,23*lg_pinsep),V`'ic_tiny(CC),Pin8,w,8)
+ lg_pin(Chip.se_+(0,lg_pinsep),CK`'ic_tiny(1)(in),Pin39,e,39)
lg_pin(Chip.se_+(0,4*lg_pinsep),
- {\large$\phi$}\hbox{\tiny 2}(out),Pin37,e,37)
+ CK`'ic_tiny(2)(out),Pin37,e,37)
lg_pinseq(0,11,e,6,9+,A)
lg_pinseq(12,15,e,6,10+,A)
lg_pin(Chip.se+(0,23*lg_pinsep),lg_bartxt(IRQ),Pin4,eN,4)
`$1']')
define(`ic6522',`[ Chip: box wid_ lg_chipwd ht_ 24*lg_pinsep
- lg_pin(Chip.sw_+(0,lg_pinsep),V\hbox{\tiny SS},Pin1,w,1)
+ lg_pin(Chip.sw_+(0,lg_pinsep),V`'ic_tiny(SS),Pin1,w,1)
lg_pin(Chip.sw_+(0,3*lg_pinsep),CS1,Pin24,w,24)
- lg_pin(Chip.sw_+(0,4*lg_pinsep),{\large$\phi$},Pin25,w,25)
+ lg_pin(Chip.sw_+(0,4*lg_pinsep),CK,Pin25,w,25)
lg_pin(Chip.sw_+(0,5*lg_pinsep),lg_bartxt(CS2),Pin23,wN,23)
lg_pin(Chip.sw_+(0,7*lg_pinsep),RS0(A0),Pin38,w,38)
lg_pin(Chip.sw_+(0,8*lg_pinsep),RS1(A1),Pin37,w,37)
@@ -65,7 +57,7 @@ define(`ic6522',`[ Chip: box wid_ lg_chipwd ht_ 24*lg_pinsep
lg_pinseq(0,7,w,12,33-,D)
lg_pin(Chip.sw_+(0,21*lg_pinsep),R/lg_bartxt(W),Pin22,w,22)
lg_pin(Chip.sw_+(0,22*lg_pinsep),lg_bartxt(IRQ),Pin21,wN,21)
- lg_pin(Chip.sw_+(0,23*lg_pinsep),V\hbox{\tiny CC},Pin20,w,20)
+ lg_pin(Chip.sw_+(0,23*lg_pinsep),V`'ic_tiny(CC),Pin20,w,20)
lg_pinseq(0,7,e,1,10+,PB)
lg_pinseq(1,2,e,8,17+,CB)
lg_pinseq(0,7,e,12,2+,PA)
@@ -81,12 +73,12 @@ define(`ic74LS138',`[ Chip: box wid_ lg_chipwd ht_ 11*lg_pinsep
lg_pin(Chip.sw_+(0,6*lg_pinsep),B,Pin2,w,2)
lg_pin(Chip.sw_+(0,7*lg_pinsep),C,Pin3,w,3)
lg_pin(Chip.sw_+(0,9*lg_pinsep),G1,Pin6,w,6)
- lg_pin(Chip.sw_+(0,10*lg_pinsep),V\hbox{\tiny CC},Pin16,w,16)
+ lg_pin(Chip.sw_+(0,10*lg_pinsep),V`'ic_tiny(CC),Pin16,w,16)
lg_pinseq(0,6,e,2,15-,Y,n)
lg_pin(Chip.se_+(0,9*lg_pinsep),Y7,Pin7,eN,7)
`$1']')
-define(`ic4017',`[ Chip: chip_gen(16)
+define(`ic4017',`[ Chip: DIP_chip_outline(16)
Loopover_(`x',
`lg_pin(Chip.nw-(0,lg_pinsep*m4Lx),x,Pin`'m4Lx,w,m4Lx)',
PL, Q3, I3, I0, CLE, Q0, TC, GND)
@@ -95,7 +87,7 @@ define(`ic4017',`[ Chip: chip_gen(16)
MR, U/D, Q1, I1, I2, Q2, CLK, Vcc)
`$1']')
-define(`ic4510',`[ Chip: chip_gen(16)
+define(`ic4510',`[ Chip: DIP_chip_outline(16)
Loopover_(`x',
`lg_pin(Chip.nw-(0,lg_pinsep*m4Lx),x,Pin`'m4Lx,w,m4Lx)',
PL, Q3, I3, I0, CLE, Q0, TC, GND)
@@ -104,13 +96,13 @@ define(`ic4510',`[ Chip: chip_gen(16)
MR, U/D, Q1, I1, I2, Q2, CLK, Vcc)
`$1']')
-define(`icVS1053',`[ Chip: chip_gen(32)
+define(`icVS1053',`[ Chip: DIP_chip_outline(32)
Loopover_(`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',
`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+)
+ SDCD,RX,TX,7,6,5,4,3,2,1,0,GND,3V3,AGND,MIC`$-$',MIC`$+$')
`$1']')
`ArduinoUno( wid,ht,pinlen )'
@@ -125,14 +117,14 @@ define(`ArduinoUno',`[
Loopover_(`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,`$+$`'3V3',`$+$`'5V', GND, GND, VIN,
+ IOREF, RESET,$+${3}V3,$+${5}V, GND, GND, VIN,
nul, A0, A1, A2, A3, A4, A5)
#
Loopover_(`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, \char126 D11, \char126 D10, \char126 D9, D8,
- nul, D7, \char126 D6, \char126 D5, D4, \char126 D3, D2, TX D1, RX D0)
+ SCL, SDA, AREF, GND, 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'] ')
@@ -148,15 +140,15 @@ define(`ArduinoLeonardo',`[
Loopover_(`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,`$+$`'3V3',`$+$`'5V', GND, GND, VIN,
+ IOREF, RESET,$+${3}V3,$+${5}V, GND, GND, VIN,
nul, A0, A1, A2, A3, A4, A5)
#
Loopover_(`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,
- \char126 D13, D12, \char126 D11, \char126 D10, \char126 D9, D8,
- nul, D7, \char126 D6, \char126 D5, D4, \char126 D3, D2, TX D1, RX D0)
+ 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'] ')
@@ -221,12 +213,14 @@ define(`USB_C_Socket',`[
`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)
+ GND, RX1`$+$', RX1`$-$', VBUS, SBU2, D`$-$', D`$+$', CC2, VBUS, TX2`$-$',
+ TX2`$+$', GND)
#
Loopover_(`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$-$, RX2$+$, GND)
+ GND, TX1`$+$', TX1`$-$', VBUS, CC1, D`$+$', D`$-$', SBU1, VBUS, RX2`$-$',
+ RX2`$+$', GND)
#
`$4']')
@@ -245,8 +239,9 @@ define(`HDMI_micro',`[
`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',
- HPD, UTILITY, D2$+$, D2\_SH, D2$-$, D1$+$, D1\_SH, D1$-$, D0$+$, D0\_SH,
- D0$-$, CLK$+$, CLK\_SH, CLK$-$, CEC, GND, SCL, SDA, $+``$''5V)
+ HPD, UTILITY, D2`$+$', D2\_SH, D2`$-$', D1`$+$', D1\_SH, D1`$-$',
+ D0`$+$', D0\_SH, D0`$-$', CLK`$+$', CLK\_SH, CLK`$-$',
+ CEC, GND, SCL, SDA,$+${5}V)
line from Base.nw+(m4bwid*2/3-lg_pinsep,0) up plen
r_text(21) at last line.c+(-5bp__,0)
r_text(SH2) at last line.start + (0,-10bp__)
@@ -262,4 +257,51 @@ define(`HDMI_micro',`[
#
`$4']')
+ `DIP_chip_outline( pin count, wid )'
+define(`DIP_chip_outline',
+ `[ define(`m4pinct',`ifelse(`$1',,16,`$1')')dnl
+ define(`m4chgw',`ifelse(`$2',,(18*L_unit),`$2')')dnl
+ Chip: box invis wid m4chgw ht lg_pinsep*eval((m4pinct)/2+1)
+ arcd(Chip.n, lg_pinsep/2, 180, 360)
+ { line to Chip.ne chop -linewid bp__/2 }
+ { line from last arc.start to Chip.nw chop -linewid bp__/2 }
+ line from Chip.nw to Chip.sw then to Chip.se then to Chip.ne
+ `$3']')
+
+ `DIP( pin count, attributes)
+ Dual in-line package
+ attributes=semicolon-separated list of optional terms:
+ bodywid=expr; (default 0.25 = 5*L_unit )
+ bodylen=expr; (default pin count/2 x pinpitch)
+ pinpitch=expr; (default 0.1)
+ pinwid=expr; (default 0.06)
+ pinlen=expr; (default 0.05)
+ direct=U|D|L|R;(default U for up)
+ type=I|Q; (default I for uniform-length pins;
+ Q: staggered) '
+define(`DIP',`[ pinct= ifelse(`$1',,8,`$1')
+ setkeys_(`$2',
+ bodywid: 5*L_unit;
+ bodylen: m4pinpitch*int(pinct/2+0.5);
+ pinpitch:2*L_unit;
+ pinwid: 1.2*L_unit;
+ pinlen: L_unit;
+ direct:U:N;
+ type:I:N)
+ setdir_(m4direct,U)
+ Body: box ht_ m4bodywid wid_ m4bodylen
+ arcs = ifelse(m4dir,right,90,m4dir,up,180,m4dir,left,270,0)
+ arcd(Body.e_, 0.1/2, arcs,arcs+180)
+ np2 = int(pinct/2+0.5)
+ define(`m4bxht',`m4pinlen ifelse(m4type,Q,`*(1+(i%%2))')')dnl
+ for i=0 to np2-1 do {
+ exec sprintf("Pin%g: box ht_ m4bxht wid_ m4pinwid \
+ with .s_ at (i+0.5)/np2 between Body.ne_ and Body.nw_",i+1) }
+ for i=np2+1 to pinct do {
+ exec sprintf("Pin%g: box ht_ m4bxht wid_ m4pinwid \
+ with .n_ at (i-np2-0.5)/(pinct-np2) between Body.sw_ and Body.se_",i) }
+ `$3'; resetdir_
+ popdef(`m4bodywid',`m4bodylen',`m4pinpitch',`m4pinwid',`m4pinlen',`m4direct',
+ `m4type') ]'))
+
divert(0)dnl
diff --git a/graphics/circuit_macros/examples/lcct.m4 b/graphics/circuit_macros/examples/lcct.m4
index 8fe244d796..dc3f2cd890 100644
--- a/graphics/circuit_macros/examples/lcct.m4
+++ b/graphics/circuit_macros/examples/lcct.m4
@@ -3,6 +3,7 @@
log_init
include(ics.m4)
iflatex(`ifpsfrag(,`latexcommand({\sf)')')
+maxpswid = 10
define(`dimen_',0.5)
define(`elen_',dimen_)
diff --git a/graphics/circuit_macros/examples/mf/cct.mf b/graphics/circuit_macros/examples/mf/cct.mf
index e523a753e2..dd0dcdfd11 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 2021/01/03 at 16:42
+% from TeX source "font" on 2021/06/02 at 22:43
numeric mfpicversion; mfpicversion := 110;
if unknown mode: mode := localfont; fi
if unknown mag: mag := 1000/1000; fi
@@ -81,69 +81,69 @@ store (curpath)
drawn
polyline (false)
((0,0),
-(0.024933,0));
+(0.020249,0));
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((0.024933,0),0.002767);
+circle ((0.020249,0),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((0.070249,0.021131),-155,-410,0.05);
+arcplr ((0.065564,0.021131),-155,-410,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((0.102388,-0.017171),0.002767);
+circle ((0.097703,-0.017171),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((0.134527,0.021131),-130,-410,0.05);
+arcplr ((0.129843,0.021131),-130,-410,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((0.166667,-0.017171),0.002767);
+circle ((0.161982,-0.017171),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((0.198806,0.021131),-130,-410,0.05);
+arcplr ((0.194121,0.021131),-130,-410,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((0.230945,-0.017171),0.002767);
+circle ((0.226261,-0.017171),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((0.263085,0.021131),-130,-385,0.05);
+arcplr ((0.2584,0.021131),-130,-385,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((0.3084,0),0.002767);
+circle ((0.303716,0),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
polyline (false)
-((0.3084,0),
-(0.333333,0));
+((0.303716,0),
+(0.323964,0));
endmfpic; % (3) line 59 in the TeX source.
%------------------------------------------
@@ -163,69 +163,69 @@ store (curpath)
drawn
polyline (false)
((0,0),
-(0,-0.024933));
+(0,-0.020249));
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((0,-0.024933),0.002767);
+circle ((0,-0.020249),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((0.021131,-0.070249),115,-140,0.05);
+arcplr ((0.021131,-0.065564),115,-140,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((-0.017171,-0.102388),0.002767);
+circle ((-0.017171,-0.097703),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((0.021131,-0.134527),140,-140,0.05);
+arcplr ((0.021131,-0.129843),140,-140,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((-0.017171,-0.166667),0.002767);
+circle ((-0.017171,-0.161982),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((0.021131,-0.198806),140,-140,0.05);
+arcplr ((0.021131,-0.194121),140,-140,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((-0.017171,-0.230945),0.002767);
+circle ((-0.017171,-0.226261),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((0.021131,-0.263085),140,-115,0.05);
+arcplr ((0.021131,-0.2584),140,-115,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((0,-0.3084),0.002767);
+circle ((0,-0.303716),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
polyline (false)
-((0,-0.3084),
-(0,-0.333333));
+((0,-0.303716),
+(0,-0.323964));
endmfpic; % (4) line 77 in the TeX source.
%------------------------------------------
@@ -245,69 +245,69 @@ store (curpath)
drawn
polyline (false)
((0,0),
-(-0.024933,0));
+(-0.020249,0));
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((-0.024933,0),0.002767);
+circle ((-0.020249,0),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((-0.070249,-0.021131),25,-230,0.05);
+arcplr ((-0.065564,-0.021131),25,-230,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((-0.102388,0.017171),0.002767);
+circle ((-0.097703,0.017171),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((-0.134527,-0.021131),50,-230,0.05);
+arcplr ((-0.129843,-0.021131),50,-230,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((-0.166667,0.017171),0.002767);
+circle ((-0.161982,0.017171),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((-0.198806,-0.021131),50,-230,0.05);
+arcplr ((-0.194121,-0.021131),50,-230,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((-0.230945,0.017171),0.002767);
+circle ((-0.226261,0.017171),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((-0.263085,-0.021131),50,-205,0.05);
+arcplr ((-0.2584,-0.021131),50,-205,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((-0.3084,-0),0.002767);
+circle ((-0.303716,-0),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
polyline (false)
-((-0.3084,-0),
-(-0.333333,-0));
+((-0.303716,-0),
+(-0.323964,-0));
endmfpic; % (5) line 95 in the TeX source.
%------------------------------------------
@@ -327,69 +327,69 @@ store (curpath)
drawn
polyline (false)
((0,0),
-(0,0.024933));
+(0,0.020249));
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((0,0.024933),0.002767);
+circle ((0,0.020249),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((-0.021131,0.070249),-65,-320,0.05);
+arcplr ((-0.021131,0.065564),-65,-320,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((0.017171,0.102388),0.002767);
+circle ((0.017171,0.097703),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((-0.021131,0.134527),-40,-320,0.05);
+arcplr ((-0.021131,0.129843),-40,-320,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((0.017171,0.166667),0.002767);
+circle ((0.017171,0.161982),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((-0.021131,0.198806),-40,-320,0.05);
+arcplr ((-0.021131,0.194121),-40,-320,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((0.017171,0.230945),0.002767);
+circle ((0.017171,0.226261),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
-arcplr ((-0.021131,0.263085),-40,-295,0.05);
+arcplr ((-0.021131,0.2584),-40,-295,0.05);
resizedrawpen (0.4bp);
store (curpath)
drawn
-circle ((-0,0.3084),0.002767);
+circle ((-0,0.303716),0.002767);
resizedrawpen (0.8bp);
store (curpath)
drawn
polyline (false)
-((-0,0.3084),
-(-0,0.333333));
+((-0,0.303716),
+(-0,0.323964));
endmfpic; % (6) line 113 in the TeX source.
%------------------------------------------
@@ -398,52 +398,28 @@ endmfpic; % (6) line 113 in the TeX source.
%----------------------------<7>
unitlen := 1.0pt#;
xscale := 72; yscale := 72;
-bounds (-0.146418, 0.333333, 0, 0.123214);
+bounds (0, 0.333333, 0, 0);
beginmfpic(7); % line 114 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
-store (curpath)
-drawn
-polyline (false)
-((-0.146418,0.091964),
-(0.146418,0.091964));
-
-store (curpath)
-drawn
-polyline (false)
-((-0.146418,0.123214),
-(0.146418,0.123214));
-
-endmfpic; % (7) line 122 in the TeX source.
+endmfpic; % (7) line 118 in the TeX source.
%------------------------------------------
%----------------------------<8>
unitlen := 1.0pt#;
xscale := 72; yscale := 72;
-bounds (-0.123214, 0, -0.146418, 0.333333);
+bounds (0, 0, 0, 0.333333);
-beginmfpic(8); % line 123 in the TeX source.
+beginmfpic(8); % line 119 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
-store (curpath)
-drawn
-polyline (false)
-((-0.091964,-0.146418),
-(-0.091964,0.146418));
-
-store (curpath)
-drawn
-polyline (false)
-((-0.123214,-0.146418),
-(-0.123214,0.146418));
-
-endmfpic; % (8) line 131 in the TeX source.
+endmfpic; % (8) line 123 in the TeX source.
%------------------------------------------
@@ -452,7 +428,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.333333, -0, 0.03125);
-beginmfpic(9); % line 132 in the TeX source.
+beginmfpic(9); % line 124 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -485,7 +461,7 @@ polyline (false)
((0.291667,0),
(0.333333,0));
-endmfpic; % (9) line 144 in the TeX source.
+endmfpic; % (9) line 136 in the TeX source.
%------------------------------------------
@@ -494,7 +470,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0, 0.03125, -0.333333, 0);
-beginmfpic(10); % line 145 in the TeX source.
+beginmfpic(10); % line 137 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -511,23 +487,23 @@ arcplr ((0,-0.072917),90,-90,0.03125);
store (curpath)
drawn
-arcplr ((-0,-0.135417),90,-90,0.03125);
+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
polyline (false)
-((-0,-0.291667),
-(-0,-0.333333));
+((0,-0.291667),
+(0,-0.333333));
-endmfpic; % (10) line 157 in the TeX source.
+endmfpic; % (10) line 149 in the TeX source.
%------------------------------------------
@@ -536,7 +512,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.333333, 0, -0.03125, 0);
-beginmfpic(11); % line 158 in the TeX source.
+beginmfpic(11); % line 150 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -549,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
@@ -569,7 +545,7 @@ polyline (false)
((-0.291667,0),
(-0.333333,0));
-endmfpic; % (11) line 170 in the TeX source.
+endmfpic; % (11) line 162 in the TeX source.
%------------------------------------------
@@ -578,7 +554,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.03125, 0, 0, 0.333333);
-beginmfpic(12); % line 171 in the TeX source.
+beginmfpic(12); % line 163 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -599,19 +575,19 @@ arcplr ((0,0.135417),-90,-270,0.03125);
store (curpath)
drawn
-arcplr ((-0,0.197917),-90,-270,0.03125);
+arcplr ((0,0.197917),-90,-270,0.03125);
store (curpath)
drawn
-arcplr ((-0,0.260417),-90,-270,0.03125);
+arcplr ((0,0.260417),-90,-270,0.03125);
store (curpath)
drawn
polyline (false)
-((-0,0.291667),
-(-0,0.333333));
+((0,0.291667),
+(0,0.333333));
-endmfpic; % (12) line 183 in the TeX source.
+endmfpic; % (12) line 175 in the TeX source.
%------------------------------------------
@@ -620,7 +596,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.03125, 0, 0, 0.333333);
-beginmfpic(13); % line 184 in the TeX source.
+beginmfpic(13); % line 176 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -641,71 +617,47 @@ arcplr ((0,0.135417),-90,-270,0.03125);
store (curpath)
drawn
-arcplr ((-0,0.197917),-90,-270,0.03125);
+arcplr ((0,0.197917),-90,-270,0.03125);
store (curpath)
drawn
-arcplr ((-0,0.260417),-90,-270,0.03125);
+arcplr ((0,0.260417),-90,-270,0.03125);
store (curpath)
drawn
polyline (false)
-((-0,0.291667),
-(-0,0.333333));
+((0,0.291667),
+(0,0.333333));
-endmfpic; % (13) line 196 in the TeX source.
+endmfpic; % (13) line 188 in the TeX source.
%------------------------------------------
%----------------------------<14>
unitlen := 1.0pt#;
xscale := 72; yscale := 72;
-bounds (-0.125, 0.333333, 0, 0.083333);
+bounds (0, 0.333333, 0, 0);
-beginmfpic(14); % line 197 in the TeX source.
+beginmfpic(14); % line 189 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
-store (curpath)
-drawn
-polyline (false)
-((-0.125,0.052083),
-(0.125,0.052083));
-
-store (curpath)
-drawn
-polyline (false)
-((-0.125,0.083333),
-(0.125,0.083333));
-
-endmfpic; % (14) line 205 in the TeX source.
+endmfpic; % (14) line 193 in the TeX source.
%------------------------------------------
%----------------------------<15>
unitlen := 1.0pt#;
xscale := 72; yscale := 72;
-bounds (-0.083333, 0, -0.125, 0.333333);
+bounds (0, 0, 0, 0.333333);
-beginmfpic(15); % line 206 in the TeX source.
+beginmfpic(15); % line 194 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
-store (curpath)
-drawn
-polyline (false)
-((-0.052083,-0.125),
-(-0.052083,0.125));
-
-store (curpath)
-drawn
-polyline (false)
-((-0.083333,-0.125),
-(-0.083333,0.125));
-
-endmfpic; % (15) line 214 in the TeX source.
+endmfpic; % (15) line 198 in the TeX source.
%------------------------------------------
@@ -714,7 +666,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.333333, -0.0625, 0.0625);
-beginmfpic(16); % line 215 in the TeX source.
+beginmfpic(16); % line 199 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -741,7 +693,7 @@ polyline (false)
((0.17492,0),
(0.333333,0));
-endmfpic; % (16) line 226 in the TeX source.
+endmfpic; % (16) line 210 in the TeX source.
%------------------------------------------
@@ -750,7 +702,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.0625, 0.0625, -0.333333, 0);
-beginmfpic(17); % line 227 in the TeX source.
+beginmfpic(17); % line 211 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -777,7 +729,7 @@ polyline (false)
((0,-0.17492),
(0,-0.333333));
-endmfpic; % (17) line 238 in the TeX source.
+endmfpic; % (17) line 222 in the TeX source.
%------------------------------------------
@@ -786,7 +738,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.333333, 0, -0.0625, 0.0625);
-beginmfpic(18); % line 239 in the TeX source.
+beginmfpic(18); % line 223 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -813,7 +765,7 @@ polyline (false)
((-0.17492,0),
(-0.333333,0));
-endmfpic; % (18) line 250 in the TeX source.
+endmfpic; % (18) line 234 in the TeX source.
%------------------------------------------
@@ -822,7 +774,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.0625, 0.0625, 0, 0.333333);
-beginmfpic(19); % line 251 in the TeX source.
+beginmfpic(19); % line 235 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -849,7 +801,7 @@ polyline (false)
((0,0.17492),
(0,0.333333));
-endmfpic; % (19) line 262 in the TeX source.
+endmfpic; % (19) line 246 in the TeX source.
%------------------------------------------
@@ -858,7 +810,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.333333, -0.083333, 0.083333);
-beginmfpic(20); % line 263 in the TeX source.
+beginmfpic(20); % line 247 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -887,7 +839,7 @@ polyline (false)
((0.191667,0),
(0.333333,0));
-endmfpic; % (20) line 275 in the TeX source.
+endmfpic; % (20) line 259 in the TeX source.
%------------------------------------------
@@ -896,7 +848,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.083333, 0.083333, 0, 0.333333);
-beginmfpic(21); % line 276 in the TeX source.
+beginmfpic(21); % line 260 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -925,7 +877,7 @@ polyline (false)
((0,0.191667),
(0,0.333333));
-endmfpic; % (21) line 288 in the TeX source.
+endmfpic; % (21) line 272 in the TeX source.
%------------------------------------------
@@ -934,7 +886,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.333333, -0.051253, 0.051253);
-beginmfpic(22); % line 289 in the TeX source.
+beginmfpic(22); % line 273 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -945,9 +897,11 @@ polyline (false)
((0,0),
(0.130582,0));
+resizedrawpen (0bp);
+
store (curpath)
-filled
drawn
+filled
lclosed
polyline (false)
((0.130582,0),
@@ -956,6 +910,17 @@ polyline (false)
(0.130582,-0.041667),
(0.130582,0));
+resizedrawpen (0.8bp);
+
+store (curpath)
+drawn
+polyline (false)
+((0.130582,0),
+(0.130582,0.041667),
+(0.197216,0),
+(0.130582,-0.041667),
+(0.130582,0));
+
store (curpath)
drawn
polyline (false)
@@ -968,7 +933,7 @@ polyline (false)
((0.202751,0),
(0.333333,0));
-endmfpic; % (22) line 305 in the TeX source.
+endmfpic; % (22) line 294 in the TeX source.
%------------------------------------------
@@ -977,7 +942,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.051253, 0.051253, -0.333333, 0);
-beginmfpic(23); % line 306 in the TeX source.
+beginmfpic(23); % line 295 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -988,9 +953,11 @@ polyline (false)
((0,0),
(0,-0.130582));
+resizedrawpen (0bp);
+
store (curpath)
-filled
drawn
+filled
lclosed
polyline (false)
((0,-0.130582),
@@ -999,6 +966,17 @@ polyline (false)
(-0.041667,-0.130582),
(0,-0.130582));
+resizedrawpen (0.8bp);
+
+store (curpath)
+drawn
+polyline (false)
+((0,-0.130582),
+(0.041667,-0.130582),
+(0,-0.197216),
+(-0.041667,-0.130582),
+(0,-0.130582));
+
store (curpath)
drawn
polyline (false)
@@ -1011,7 +989,7 @@ polyline (false)
((0,-0.202751),
(0,-0.333333));
-endmfpic; % (23) line 322 in the TeX source.
+endmfpic; % (23) line 316 in the TeX source.
%------------------------------------------
@@ -1020,7 +998,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.333333, 0, -0.051253, 0.051253);
-beginmfpic(24); % line 323 in the TeX source.
+beginmfpic(24); % line 317 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1031,9 +1009,11 @@ polyline (false)
((0,0),
(-0.130582,0));
+resizedrawpen (0bp);
+
store (curpath)
-filled
drawn
+filled
lclosed
polyline (false)
((-0.130582,0),
@@ -1042,6 +1022,17 @@ polyline (false)
(-0.130582,0.041667),
(-0.130582,0));
+resizedrawpen (0.8bp);
+
+store (curpath)
+drawn
+polyline (false)
+((-0.130582,0),
+(-0.130582,-0.041667),
+(-0.197216,0),
+(-0.130582,0.041667),
+(-0.130582,0));
+
store (curpath)
drawn
polyline (false)
@@ -1054,7 +1045,7 @@ polyline (false)
((-0.202751,0),
(-0.333333,0));
-endmfpic; % (24) line 339 in the TeX source.
+endmfpic; % (24) line 338 in the TeX source.
%------------------------------------------
@@ -1063,7 +1054,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.051253, 0.051253, 0, 0.333333);
-beginmfpic(25); % line 340 in the TeX source.
+beginmfpic(25); % line 339 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1074,9 +1065,11 @@ polyline (false)
((0,0),
(0,0.130582));
+resizedrawpen (0bp);
+
store (curpath)
-filled
drawn
+filled
lclosed
polyline (false)
((0,0.130582),
@@ -1085,6 +1078,17 @@ polyline (false)
(0.041667,0.130582),
(0,0.130582));
+resizedrawpen (0.8bp);
+
+store (curpath)
+drawn
+polyline (false)
+((0,0.130582),
+(-0.041667,0.130582),
+(0,0.197216),
+(0.041667,0.130582),
+(0,0.130582));
+
store (curpath)
drawn
polyline (false)
@@ -1097,7 +1101,7 @@ polyline (false)
((0,0.202751),
(0,0.333333));
-endmfpic; % (25) line 356 in the TeX source.
+endmfpic; % (25) line 360 in the TeX source.
%------------------------------------------
@@ -1106,7 +1110,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.333333, -0.051253, 0.051253);
-beginmfpic(26); % line 357 in the TeX source.
+beginmfpic(26); % line 361 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1117,9 +1121,11 @@ polyline (false)
((0,0),
(0.130582,0));
+resizedrawpen (0bp);
+
store (curpath)
-filled
drawn
+filled
lclosed
polyline (false)
((0.130582,0),
@@ -1128,6 +1134,17 @@ polyline (false)
(0.130582,-0.041667),
(0.130582,0));
+resizedrawpen (0.8bp);
+
+store (curpath)
+drawn
+polyline (false)
+((0.130582,0),
+(0.130582,0.041667),
+(0.197216,0),
+(0.130582,-0.041667),
+(0.130582,0));
+
store (curpath)
drawn
polyline (false)
@@ -1142,7 +1159,7 @@ polyline (false)
((0.202751,0),
(0.333333,0));
-endmfpic; % (26) line 375 in the TeX source.
+endmfpic; % (26) line 384 in the TeX source.
%------------------------------------------
@@ -1151,7 +1168,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.051253, 0.051253, -0.333333, 0);
-beginmfpic(27); % line 376 in the TeX source.
+beginmfpic(27); % line 385 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1162,9 +1179,11 @@ polyline (false)
((0,0),
(0,-0.130582));
+resizedrawpen (0bp);
+
store (curpath)
-filled
drawn
+filled
lclosed
polyline (false)
((0,-0.130582),
@@ -1173,6 +1192,17 @@ polyline (false)
(-0.041667,-0.130582),
(0,-0.130582));
+resizedrawpen (0.8bp);
+
+store (curpath)
+drawn
+polyline (false)
+((0,-0.130582),
+(0.041667,-0.130582),
+(0,-0.197216),
+(-0.041667,-0.130582),
+(0,-0.130582));
+
store (curpath)
drawn
polyline (false)
@@ -1187,7 +1217,7 @@ polyline (false)
((0,-0.202751),
(0,-0.333333));
-endmfpic; % (27) line 394 in the TeX source.
+endmfpic; % (27) line 408 in the TeX source.
%------------------------------------------
@@ -1196,7 +1226,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.333333, 0, -0.051253, 0.051253);
-beginmfpic(28); % line 395 in the TeX source.
+beginmfpic(28); % line 409 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1207,9 +1237,11 @@ polyline (false)
((0,0),
(-0.130582,0));
+resizedrawpen (0bp);
+
store (curpath)
-filled
drawn
+filled
lclosed
polyline (false)
((-0.130582,0),
@@ -1218,6 +1250,17 @@ polyline (false)
(-0.130582,0.041667),
(-0.130582,0));
+resizedrawpen (0.8bp);
+
+store (curpath)
+drawn
+polyline (false)
+((-0.130582,0),
+(-0.130582,-0.041667),
+(-0.197216,0),
+(-0.130582,0.041667),
+(-0.130582,0));
+
store (curpath)
drawn
polyline (false)
@@ -1232,7 +1275,7 @@ polyline (false)
((-0.202751,0),
(-0.333333,0));
-endmfpic; % (28) line 413 in the TeX source.
+endmfpic; % (28) line 432 in the TeX source.
%------------------------------------------
@@ -1241,7 +1284,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.051253, 0.051253, 0, 0.333333);
-beginmfpic(29); % line 414 in the TeX source.
+beginmfpic(29); % line 433 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1252,9 +1295,11 @@ polyline (false)
((0,0),
(0,0.130582));
+resizedrawpen (0bp);
+
store (curpath)
-filled
drawn
+filled
lclosed
polyline (false)
((0,0.130582),
@@ -1263,6 +1308,17 @@ polyline (false)
(0.041667,0.130582),
(0,0.130582));
+resizedrawpen (0.8bp);
+
+store (curpath)
+drawn
+polyline (false)
+((0,0.130582),
+(-0.041667,0.130582),
+(0,0.197216),
+(0.041667,0.130582),
+(0,0.130582));
+
store (curpath)
drawn
polyline (false)
@@ -1277,7 +1333,7 @@ polyline (false)
((0,0.202751),
(0,0.333333));
-endmfpic; % (29) line 432 in the TeX source.
+endmfpic; % (29) line 456 in the TeX source.
%------------------------------------------
@@ -1286,7 +1342,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.036084, 0.333333, -0.051253, 0.051253);
-beginmfpic(30); % line 433 in the TeX source.
+beginmfpic(30); % line 457 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1297,7 +1353,7 @@ polyline (false)
((-0.036084,-0.045718),
(-0.036084,0.045718));
-endmfpic; % (30) line 439 in the TeX source.
+endmfpic; % (30) line 463 in the TeX source.
%------------------------------------------
@@ -1306,7 +1362,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.051253, 0.051253, -0.333333, 0.036084);
-beginmfpic(31); % line 440 in the TeX source.
+beginmfpic(31); % line 464 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1317,7 +1373,7 @@ polyline (false)
((-0.045718,0.036084),
(0.045718,0.036084));
-endmfpic; % (31) line 446 in the TeX source.
+endmfpic; % (31) line 470 in the TeX source.
%------------------------------------------
@@ -1326,7 +1382,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.333333, -0.0625, 0.0625);
-beginmfpic(32); % line 447 in the TeX source.
+beginmfpic(32); % line 471 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1365,7 +1421,7 @@ polyline (false)
((0.208333,0),
(0.333333,0));
-endmfpic; % (32) line 465 in the TeX source.
+endmfpic; % (32) line 489 in the TeX source.
%------------------------------------------
@@ -1374,7 +1430,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.0625, 0.0625, -0.333333, 0);
-beginmfpic(33); % line 466 in the TeX source.
+beginmfpic(33); % line 490 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1413,7 +1469,7 @@ polyline (false)
((0,-0.208333),
(0,-0.333333));
-endmfpic; % (33) line 484 in the TeX source.
+endmfpic; % (33) line 508 in the TeX source.
%------------------------------------------
@@ -1422,7 +1478,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.333333, -0.125, 0.125);
-beginmfpic(34); % line 485 in the TeX source.
+beginmfpic(34); % line 509 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1443,7 +1499,7 @@ polyline (false)
((0.291667,0),
(0.333333,0));
-endmfpic; % (34) line 494 in the TeX source.
+endmfpic; % (34) line 518 in the TeX source.
%------------------------------------------
@@ -1452,7 +1508,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.125, 0.125, 0, 0.333333);
-beginmfpic(35); % line 495 in the TeX source.
+beginmfpic(35); % line 519 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1473,7 +1529,7 @@ polyline (false)
((0,0.291667),
(0,0.333333));
-endmfpic; % (35) line 504 in the TeX source.
+endmfpic; % (35) line 528 in the TeX source.
%------------------------------------------
@@ -1482,7 +1538,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.083333, 0.083333, -0.041667, 0.041667);
-beginmfpic(36); % line 505 in the TeX source.
+beginmfpic(36); % line 529 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1495,7 +1551,7 @@ store (curpath)
drawn
arcplr ((0.041667,0),180,360,0.041667);
-endmfpic; % (36) line 511 in the TeX source.
+endmfpic; % (36) line 535 in the TeX source.
%------------------------------------------
@@ -1504,7 +1560,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.333333, -0.15, 0.15);
-beginmfpic(37); % line 512 in the TeX source.
+beginmfpic(37); % line 536 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1530,7 +1586,7 @@ polyline (false)
((0.316667,0),
(0.333333,0));
-endmfpic; % (37) line 525 in the TeX source.
+endmfpic; % (37) line 549 in the TeX source.
%------------------------------------------
@@ -1539,7 +1595,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.15, 0.15, 0, 0.333333);
-beginmfpic(38); % line 526 in the TeX source.
+beginmfpic(38); % line 550 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1565,7 +1621,7 @@ polyline (false)
((0,0.316667),
(0,0.333333));
-endmfpic; % (38) line 539 in the TeX source.
+endmfpic; % (38) line 563 in the TeX source.
%------------------------------------------
@@ -1574,7 +1630,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.1875, -0.025, 0.025);
-beginmfpic(39); % line 540 in the TeX source.
+beginmfpic(39); % line 564 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1596,7 +1652,7 @@ polyline (false)
((0,0),
(0.164594,0));
-endmfpic; % (39) line 548 in the TeX source.
+endmfpic; % (39) line 572 in the TeX source.
%------------------------------------------
@@ -1605,7 +1661,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.025, 0.025, -0.1875, 0);
-beginmfpic(40); % line 549 in the TeX source.
+beginmfpic(40); % line 573 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1627,7 +1683,7 @@ polyline (false)
((0,0),
(0,-0.164594));
-endmfpic; % (40) line 557 in the TeX source.
+endmfpic; % (40) line 581 in the TeX source.
%------------------------------------------
@@ -1636,7 +1692,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.1875, 0, -0.025, 0.025);
-beginmfpic(41); % line 558 in the TeX source.
+beginmfpic(41); % line 582 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1658,7 +1714,7 @@ polyline (false)
((0,0),
(-0.164594,0));
-endmfpic; % (41) line 566 in the TeX source.
+endmfpic; % (41) line 590 in the TeX source.
%------------------------------------------
@@ -1667,7 +1723,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.025, 0.025, 0, 0.1875);
-beginmfpic(42); % line 567 in the TeX source.
+beginmfpic(42); % line 591 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1689,7 +1745,7 @@ polyline (false)
((0,0),
(0,0.164594));
-endmfpic; % (42) line 575 in the TeX source.
+endmfpic; % (42) line 599 in the TeX source.
%------------------------------------------
@@ -1698,7 +1754,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.132583, 0, 0.132583);
-beginmfpic(43); % line 576 in the TeX source.
+beginmfpic(43); % line 600 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1720,7 +1776,7 @@ polyline (false)
((0,0),
(0.116385,0.116385));
-endmfpic; % (43) line 584 in the TeX source.
+endmfpic; % (43) line 608 in the TeX source.
%------------------------------------------
@@ -1729,7 +1785,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.132583, 0, 0, 0.132583);
-beginmfpic(44); % line 585 in the TeX source.
+beginmfpic(44); % line 609 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1751,7 +1807,7 @@ polyline (false)
((0,0),
(-0.116385,0.116385));
-endmfpic; % (44) line 593 in the TeX source.
+endmfpic; % (44) line 617 in the TeX source.
%------------------------------------------
@@ -1760,7 +1816,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.132583, 0, -0.132583, 0);
-beginmfpic(45); % line 594 in the TeX source.
+beginmfpic(45); % line 618 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1782,7 +1838,7 @@ polyline (false)
((0,0),
(-0.116385,-0.116385));
-endmfpic; % (45) line 602 in the TeX source.
+endmfpic; % (45) line 626 in the TeX source.
%------------------------------------------
@@ -1791,7 +1847,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.132583, -0.132583, 0);
-beginmfpic(46); % line 603 in the TeX source.
+beginmfpic(46); % line 627 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1813,7 +1869,7 @@ polyline (false)
((0,0),
(0.116385,-0.116385));
-endmfpic; % (46) line 611 in the TeX source.
+endmfpic; % (46) line 635 in the TeX source.
%------------------------------------------
@@ -1822,7 +1878,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.333333, -0.125, 0.125);
-beginmfpic(47); % line 612 in the TeX source.
+beginmfpic(47); % line 636 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1851,7 +1907,7 @@ polyline (false)
((0.1875,0),
(0.333333,0));
-endmfpic; % (47) line 624 in the TeX source.
+endmfpic; % (47) line 648 in the TeX source.
%------------------------------------------
@@ -1860,7 +1916,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.125, 0.125, -0.333333, 0);
-beginmfpic(48); % line 625 in the TeX source.
+beginmfpic(48); % line 649 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1889,7 +1945,7 @@ polyline (false)
((0,-0.1875),
(0,-0.333333));
-endmfpic; % (48) line 637 in the TeX source.
+endmfpic; % (48) line 661 in the TeX source.
%------------------------------------------
@@ -1898,7 +1954,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.333333, 0, -0.125, 0.125);
-beginmfpic(49); % line 638 in the TeX source.
+beginmfpic(49); % line 662 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1927,7 +1983,7 @@ polyline (false)
((-0.1875,0),
(-0.333333,0));
-endmfpic; % (49) line 650 in the TeX source.
+endmfpic; % (49) line 674 in the TeX source.
%------------------------------------------
@@ -1936,7 +1992,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.125, 0.125, 0, 0.333333);
-beginmfpic(50); % line 651 in the TeX source.
+beginmfpic(50); % line 675 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -1965,7 +2021,7 @@ polyline (false)
((0,0.1875),
(0,0.333333));
-endmfpic; % (50) line 663 in the TeX source.
+endmfpic; % (50) line 687 in the TeX source.
%------------------------------------------
@@ -1974,7 +2030,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.333333, -0.125, 0.125);
-beginmfpic(51); % line 664 in the TeX source.
+beginmfpic(51); % line 688 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2027,7 +2083,7 @@ polyline (false)
((0.270833,0),
(0.333333,0));
-endmfpic; % (51) line 684 in the TeX source.
+endmfpic; % (51) line 708 in the TeX source.
%------------------------------------------
@@ -2036,7 +2092,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.125, 0.125, -0.333333, 0);
-beginmfpic(52); % line 685 in the TeX source.
+beginmfpic(52); % line 709 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2089,7 +2145,7 @@ polyline (false)
((0,-0.270833),
(0,-0.333333));
-endmfpic; % (52) line 705 in the TeX source.
+endmfpic; % (52) line 729 in the TeX source.
%------------------------------------------
@@ -2098,7 +2154,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.333333, 0, -0.125, 0.125);
-beginmfpic(53); % line 706 in the TeX source.
+beginmfpic(53); % line 730 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2151,7 +2207,7 @@ polyline (false)
((-0.270833,0),
(-0.333333,0));
-endmfpic; % (53) line 726 in the TeX source.
+endmfpic; % (53) line 750 in the TeX source.
%------------------------------------------
@@ -2160,7 +2216,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.125, 0.125, 0, 0.333333);
-beginmfpic(54); % line 727 in the TeX source.
+beginmfpic(54); % line 751 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2213,7 +2269,7 @@ polyline (false)
((0,0.270833),
(0,0.333333));
-endmfpic; % (54) line 747 in the TeX source.
+endmfpic; % (54) line 771 in the TeX source.
%------------------------------------------
@@ -2222,7 +2278,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.333333, -0.05, 0.05);
-beginmfpic(55); % line 748 in the TeX source.
+beginmfpic(55); % line 772 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2249,7 +2305,7 @@ polyline (false)
((0.291667,0),
(0.333333,0));
-endmfpic; % (55) line 762 in the TeX source.
+endmfpic; % (55) line 786 in the TeX source.
%------------------------------------------
@@ -2258,7 +2314,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.05, 0.05, 0, 0.333333);
-beginmfpic(56); % line 763 in the TeX source.
+beginmfpic(56); % line 787 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2285,7 +2341,7 @@ polyline (false)
((0,0.291667),
(0,0.333333));
-endmfpic; % (56) line 777 in the TeX source.
+endmfpic; % (56) line 801 in the TeX source.
%------------------------------------------
@@ -2294,7 +2350,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.333333, -0.021706, 0.125);
-beginmfpic(57); % line 778 in the TeX source.
+beginmfpic(57); % line 802 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2317,7 +2373,7 @@ polyline (false)
((0.25,0),
(0.333333,0));
-endmfpic; % (57) line 788 in the TeX source.
+endmfpic; % (57) line 812 in the TeX source.
%------------------------------------------
@@ -2326,7 +2382,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.021706, 0.125, -0.333333, 0);
-beginmfpic(58); % line 789 in the TeX source.
+beginmfpic(58); % line 813 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2349,7 +2405,7 @@ polyline (false)
((0,-0.25),
(0,-0.333333));
-endmfpic; % (58) line 799 in the TeX source.
+endmfpic; % (58) line 823 in the TeX source.
%------------------------------------------
@@ -2358,7 +2414,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.333333, 0, -0.125, 0.021706);
-beginmfpic(59); % line 800 in the TeX source.
+beginmfpic(59); % line 824 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2381,7 +2437,7 @@ polyline (false)
((-0.25,0),
(-0.333333,0));
-endmfpic; % (59) line 810 in the TeX source.
+endmfpic; % (59) line 834 in the TeX source.
%------------------------------------------
@@ -2390,7 +2446,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.125, 0.021706, 0, 0.333333);
-beginmfpic(60); % line 811 in the TeX source.
+beginmfpic(60); % line 835 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2413,7 +2469,7 @@ polyline (false)
((0,0.25),
(0,0.333333));
-endmfpic; % (60) line 821 in the TeX source.
+endmfpic; % (60) line 845 in the TeX source.
%------------------------------------------
@@ -2422,7 +2478,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.333333, -0.021706, 0.125);
-beginmfpic(61); % line 822 in the TeX source.
+beginmfpic(61); % line 846 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2469,7 +2525,7 @@ polyline (false)
((0.25,0),
(0.333333,0));
-endmfpic; % (61) line 837 in the TeX source.
+endmfpic; % (61) line 861 in the TeX source.
%------------------------------------------
@@ -2478,7 +2534,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.021706, 0.125, -0.333333, 0);
-beginmfpic(62); % line 838 in the TeX source.
+beginmfpic(62); % line 862 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2525,7 +2581,7 @@ polyline (false)
((0,-0.25),
(0,-0.333333));
-endmfpic; % (62) line 853 in the TeX source.
+endmfpic; % (62) line 877 in the TeX source.
%------------------------------------------
@@ -2534,7 +2590,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.333333, 0, -0.125, 0.021706);
-beginmfpic(63); % line 854 in the TeX source.
+beginmfpic(63); % line 878 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2581,7 +2637,7 @@ polyline (false)
((-0.25,0),
(-0.333333,0));
-endmfpic; % (63) line 869 in the TeX source.
+endmfpic; % (63) line 893 in the TeX source.
%------------------------------------------
@@ -2590,7 +2646,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.125, 0.021706, 0, 0.333333);
-beginmfpic(64); % line 870 in the TeX source.
+beginmfpic(64); % line 894 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2637,7 +2693,7 @@ polyline (false)
((0,0.25),
(0,0.333333));
-endmfpic; % (64) line 885 in the TeX source.
+endmfpic; % (64) line 909 in the TeX source.
%------------------------------------------
@@ -2646,7 +2702,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.333333, -0.032352, 0.125);
-beginmfpic(65); % line 886 in the TeX source.
+beginmfpic(65); % line 910 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2693,7 +2749,7 @@ polyline (false)
((0.25,0),
(0.333333,0));
-endmfpic; % (65) line 901 in the TeX source.
+endmfpic; % (65) line 925 in the TeX source.
%------------------------------------------
@@ -2702,7 +2758,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.032352, 0.125, -0.333333, 0);
-beginmfpic(66); % line 902 in the TeX source.
+beginmfpic(66); % line 926 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2749,7 +2805,7 @@ polyline (false)
((0,-0.25),
(0,-0.333333));
-endmfpic; % (66) line 917 in the TeX source.
+endmfpic; % (66) line 941 in the TeX source.
%------------------------------------------
@@ -2758,7 +2814,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.333333, 0, -0.125, 0.032352);
-beginmfpic(67); % line 918 in the TeX source.
+beginmfpic(67); % line 942 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2805,7 +2861,7 @@ polyline (false)
((-0.25,0),
(-0.333333,0));
-endmfpic; % (67) line 933 in the TeX source.
+endmfpic; % (67) line 957 in the TeX source.
%------------------------------------------
@@ -2814,7 +2870,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.125, 0.032352, 0, 0.333333);
-beginmfpic(68); % line 934 in the TeX source.
+beginmfpic(68); % line 958 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2861,7 +2917,7 @@ polyline (false)
((0,0.25),
(0,0.333333));
-endmfpic; % (68) line 949 in the TeX source.
+endmfpic; % (68) line 973 in the TeX source.
%------------------------------------------
@@ -2870,7 +2926,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.625, -0.25, 0.25);
-beginmfpic(69); % line 950 in the TeX source.
+beginmfpic(69); % line 974 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2890,7 +2946,7 @@ polyline (false)
(0.5625,0),
(0.625,0));
-endmfpic; % (69) line 961 in the TeX source.
+endmfpic; % (69) line 985 in the TeX source.
%------------------------------------------
@@ -2899,7 +2955,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.25, 0.25, -0.625, 0);
-beginmfpic(70); % line 962 in the TeX source.
+beginmfpic(70); % line 986 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2919,7 +2975,7 @@ polyline (false)
(0,-0.5625),
(0,-0.625));
-endmfpic; % (70) line 973 in the TeX source.
+endmfpic; % (70) line 997 in the TeX source.
%------------------------------------------
@@ -2928,7 +2984,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.625, 0, -0.25, 0.25);
-beginmfpic(71); % line 974 in the TeX source.
+beginmfpic(71); % line 998 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2948,7 +3004,7 @@ polyline (false)
(-0.5625,0),
(-0.625,0));
-endmfpic; % (71) line 985 in the TeX source.
+endmfpic; % (71) line 1009 in the TeX source.
%------------------------------------------
@@ -2957,7 +3013,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.25, 0.25, 0, 0.625);
-beginmfpic(72); % line 986 in the TeX source.
+beginmfpic(72); % line 1010 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -2977,7 +3033,7 @@ polyline (false)
(0,0.5625),
(0,0.625));
-endmfpic; % (72) line 997 in the TeX source.
+endmfpic; % (72) line 1021 in the TeX source.
%------------------------------------------
@@ -2986,7 +3042,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.333333, -0.175, 0.175);
-beginmfpic(73); % line 998 in the TeX source.
+beginmfpic(73); % line 1022 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3015,7 +3071,7 @@ polyline (false)
((0.3125,0),
(0.333333,0));
-endmfpic; % (73) line 1011 in the TeX source.
+endmfpic; % (73) line 1035 in the TeX source.
%------------------------------------------
@@ -3024,7 +3080,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.175, 0.175, -0.333333, 0);
-beginmfpic(74); % line 1012 in the TeX source.
+beginmfpic(74); % line 1036 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3053,7 +3109,7 @@ polyline (false)
((0,-0.3125),
(0,-0.333333));
-endmfpic; % (74) line 1025 in the TeX source.
+endmfpic; % (74) line 1049 in the TeX source.
%------------------------------------------
@@ -3062,7 +3118,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.333333, 0, -0.175, 0.175);
-beginmfpic(75); % line 1026 in the TeX source.
+beginmfpic(75); % line 1050 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3091,7 +3147,7 @@ polyline (false)
((-0.3125,0),
(-0.333333,0));
-endmfpic; % (75) line 1039 in the TeX source.
+endmfpic; % (75) line 1063 in the TeX source.
%------------------------------------------
@@ -3100,7 +3156,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.175, 0.175, 0, 0.333333);
-beginmfpic(76); % line 1040 in the TeX source.
+beginmfpic(76); % line 1064 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3129,7 +3185,7 @@ polyline (false)
((0,0.3125),
(0,0.333333));
-endmfpic; % (76) line 1053 in the TeX source.
+endmfpic; % (76) line 1077 in the TeX source.
%------------------------------------------
@@ -3138,7 +3194,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.083333, 0.083333, -0.0625, 0);
-beginmfpic(77); % line 1054 in the TeX source.
+beginmfpic(77); % line 1078 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3161,7 +3217,7 @@ polyline (false)
((0.035714,-0.0625),
(-0.035714,-0.0625));
-endmfpic; % (77) line 1064 in the TeX source.
+endmfpic; % (77) line 1088 in the TeX source.
%------------------------------------------
@@ -3170,7 +3226,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.083333, 0.083333, -0.1875, 0);
-beginmfpic(78); % line 1065 in the TeX source.
+beginmfpic(78); % line 1089 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3199,7 +3255,7 @@ polyline (false)
((0.035714,-0.1875),
(-0.035714,-0.1875));
-endmfpic; % (78) line 1077 in the TeX source.
+endmfpic; % (78) line 1101 in the TeX source.
%------------------------------------------
@@ -3208,7 +3264,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.104167, 0.104167, -0.333333, -0);
-beginmfpic(79); % line 1078 in the TeX source.
+beginmfpic(79); % line 1102 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3281,16 +3337,16 @@ polyline (false)
((0.104167,-0.041667),
(0.104167,0));
-endmfpic; % (79) line 1102 in the TeX source.
+endmfpic; % (79) line 1126 in the TeX source.
%------------------------------------------
%----------------------------<80>
unitlen := 1.0pt#;
xscale := 72; yscale := 72;
-bounds (-0, 0.333333, -0.104167, 0.104167);
+bounds (0, 0.333333, -0.104167, 0.104167);
-beginmfpic(80); % line 1103 in the TeX source.
+beginmfpic(80); % line 1127 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3343,7 +3399,7 @@ polyline (false)
store (curpath)
drawn
-arcplr ((0.260417,0.104167),0,-180,0.03125);
+arcplr ((0.260417,0.104167),-0,-180,0.03125);
store (curpath)
drawn
@@ -3363,7 +3419,7 @@ polyline (false)
((0.041667,0.104167),
(0,0.104167));
-endmfpic; % (80) line 1127 in the TeX source.
+endmfpic; % (80) line 1151 in the TeX source.
%------------------------------------------
@@ -3372,7 +3428,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.1625, 0.1625, 0, 0.3);
-beginmfpic(81); % line 1128 in the TeX source.
+beginmfpic(81); % line 1152 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3418,7 +3474,7 @@ polyline (false)
((0.1625,0.3),
(-0.0375,0.21));
-endmfpic; % (81) line 1144 in the TeX source.
+endmfpic; % (81) line 1168 in the TeX source.
%------------------------------------------
@@ -3427,7 +3483,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.3, 0, -0.1625, 0.1625);
-beginmfpic(82); % line 1145 in the TeX source.
+beginmfpic(82); % line 1169 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3473,7 +3529,7 @@ polyline (false)
((-0.3,0.1625),
(-0.21,-0.0375));
-endmfpic; % (82) line 1161 in the TeX source.
+endmfpic; % (82) line 1185 in the TeX source.
%------------------------------------------
@@ -3482,7 +3538,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.1625, 0.1625, 0, 0.3);
-beginmfpic(83); % line 1162 in the TeX source.
+beginmfpic(83); % line 1186 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3528,7 +3584,7 @@ polyline (false)
((-0.1625,0.3),
(0.0375,0.21));
-endmfpic; % (83) line 1178 in the TeX source.
+endmfpic; % (83) line 1202 in the TeX source.
%------------------------------------------
@@ -3537,7 +3593,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.3, -0.1625, 0.1625);
-beginmfpic(84); % line 1179 in the TeX source.
+beginmfpic(84); % line 1203 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3583,7 +3639,7 @@ polyline (false)
((0.3,0.1625),
(0.21,-0.0375));
-endmfpic; % (84) line 1195 in the TeX source.
+endmfpic; % (84) line 1219 in the TeX source.
%------------------------------------------
@@ -3592,7 +3648,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.1625, 0.1625, 0, 0.3);
-beginmfpic(85); % line 1196 in the TeX source.
+beginmfpic(85); % line 1220 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3638,7 +3694,7 @@ polyline (false)
((0.1625,0.3),
(-0.0375,0.21));
-endmfpic; % (85) line 1212 in the TeX source.
+endmfpic; % (85) line 1236 in the TeX source.
%------------------------------------------
@@ -3647,7 +3703,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.3, 0, -0.1625, 0.1625);
-beginmfpic(86); % line 1213 in the TeX source.
+beginmfpic(86); % line 1237 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3693,7 +3749,7 @@ polyline (false)
((-0.3,0.1625),
(-0.21,-0.0375));
-endmfpic; % (86) line 1229 in the TeX source.
+endmfpic; % (86) line 1253 in the TeX source.
%------------------------------------------
@@ -3702,7 +3758,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.1625, 0.1625, 0, 0.3);
-beginmfpic(87); % line 1230 in the TeX source.
+beginmfpic(87); % line 1254 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3748,7 +3804,7 @@ polyline (false)
((-0.1625,0.3),
(0.0375,0.21));
-endmfpic; % (87) line 1246 in the TeX source.
+endmfpic; % (87) line 1270 in the TeX source.
%------------------------------------------
@@ -3757,7 +3813,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.3, -0.1625, 0.1625);
-beginmfpic(88); % line 1247 in the TeX source.
+beginmfpic(88); % line 1271 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3803,7 +3859,7 @@ polyline (false)
((0.3,0.1625),
(0.21,-0.0375));
-endmfpic; % (88) line 1263 in the TeX source.
+endmfpic; % (88) line 1287 in the TeX source.
%------------------------------------------
@@ -3812,7 +3868,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.4, -0.2, 0.2);
-beginmfpic(89); % line 1264 in the TeX source.
+beginmfpic(89); % line 1288 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3821,7 +3877,7 @@ store (curpath)
drawn
circle ((0.2,0),0.2);
-endmfpic; % (89) line 1269 in the TeX source.
+endmfpic; % (89) line 1293 in the TeX source.
%------------------------------------------
@@ -3830,7 +3886,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.175, 0.175, 0, 0.252778);
-beginmfpic(90); % line 1270 in the TeX source.
+beginmfpic(90); % line 1294 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3870,7 +3926,7 @@ polyline (false)
((0.175,0.027778),
(0,0.027778));
-endmfpic; % (90) line 1284 in the TeX source.
+endmfpic; % (90) line 1308 in the TeX source.
%------------------------------------------
@@ -3879,7 +3935,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.175, 0.175, 0, 0.252778);
-beginmfpic(91); % line 1285 in the TeX source.
+beginmfpic(91); % line 1309 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3919,7 +3975,7 @@ polyline (false)
((-0.175,0.027778),
(0,0.027778));
-endmfpic; % (91) line 1299 in the TeX source.
+endmfpic; % (91) line 1323 in the TeX source.
%------------------------------------------
@@ -3928,7 +3984,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.175, 0.175, 0, 0.252778);
-beginmfpic(92); % line 1300 in the TeX source.
+beginmfpic(92); % line 1324 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -3974,7 +4030,7 @@ polyline (false)
((0.175,0.027778),
(0,0.027778));
-endmfpic; % (92) line 1316 in the TeX source.
+endmfpic; % (92) line 1340 in the TeX source.
%------------------------------------------
@@ -3983,7 +4039,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.175, 0.175, 0, 0.252778);
-beginmfpic(93); % line 1317 in the TeX source.
+beginmfpic(93); % line 1341 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4029,7 +4085,7 @@ polyline (false)
((-0.175,0.027778),
(0,0.027778));
-endmfpic; % (93) line 1333 in the TeX source.
+endmfpic; % (93) line 1357 in the TeX source.
%------------------------------------------
@@ -4038,7 +4094,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.175, 0.175, 0, 0.25);
-beginmfpic(94); % line 1334 in the TeX source.
+beginmfpic(94); % line 1358 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4111,7 +4167,7 @@ polyline (false)
((0.175,0.025),
(0,0.025));
-endmfpic; % (94) line 1361 in the TeX source.
+endmfpic; % (94) line 1385 in the TeX source.
%------------------------------------------
@@ -4120,7 +4176,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.175, 0.175, 0, 0.25);
-beginmfpic(95); % line 1362 in the TeX source.
+beginmfpic(95); % line 1386 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4193,7 +4249,7 @@ polyline (false)
((-0.175,0.025),
(0,0.025));
-endmfpic; % (95) line 1389 in the TeX source.
+endmfpic; % (95) line 1413 in the TeX source.
%------------------------------------------
@@ -4202,7 +4258,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.175, 0.175, 0, 0.25);
-beginmfpic(96); % line 1390 in the TeX source.
+beginmfpic(96); % line 1414 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4275,7 +4331,7 @@ polyline (false)
((0.175,0.025),
(0,0.025));
-endmfpic; % (96) line 1417 in the TeX source.
+endmfpic; % (96) line 1441 in the TeX source.
%------------------------------------------
@@ -4284,7 +4340,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.175, 0.175, 0, 0.25);
-beginmfpic(97); % line 1418 in the TeX source.
+beginmfpic(97); % line 1442 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4357,7 +4413,7 @@ polyline (false)
((-0.175,0.025),
(0,0.025));
-endmfpic; % (97) line 1445 in the TeX source.
+endmfpic; % (97) line 1469 in the TeX source.
%------------------------------------------
@@ -4366,7 +4422,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.175, 0.175, 0, 0.25);
-beginmfpic(98); % line 1446 in the TeX source.
+beginmfpic(98); % line 1470 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4427,7 +4483,7 @@ polyline (false)
((0.175,0.025),
(0,0.025));
-endmfpic; % (98) line 1469 in the TeX source.
+endmfpic; % (98) line 1493 in the TeX source.
%------------------------------------------
@@ -4436,7 +4492,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.175, 0.175, 0, 0.25);
-beginmfpic(99); % line 1470 in the TeX source.
+beginmfpic(99); % line 1494 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4497,7 +4553,7 @@ polyline (false)
((-0.175,0.025),
(0,0.025));
-endmfpic; % (99) line 1493 in the TeX source.
+endmfpic; % (99) line 1517 in the TeX source.
%------------------------------------------
@@ -4506,7 +4562,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.175, 0.175, 0, 0.25);
-beginmfpic(100); % line 1494 in the TeX source.
+beginmfpic(100); % line 1518 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4567,7 +4623,7 @@ polyline (false)
((0.175,0.025),
(0,0.025));
-endmfpic; % (100) line 1517 in the TeX source.
+endmfpic; % (100) line 1541 in the TeX source.
%------------------------------------------
@@ -4576,7 +4632,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.175, 0.175, 0, 0.25);
-beginmfpic(101); % line 1518 in the TeX source.
+beginmfpic(101); % line 1542 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4637,7 +4693,7 @@ polyline (false)
((-0.175,0.025),
(0,0.025));
-endmfpic; % (101) line 1541 in the TeX source.
+endmfpic; % (101) line 1565 in the TeX source.
%------------------------------------------
@@ -4646,7 +4702,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.35, -0.15, 0.15);
-beginmfpic(102); % line 1542 in the TeX source.
+beginmfpic(102); % line 1566 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4663,7 +4719,7 @@ store (curpath)
drawn
arcplr ((0.2,0),90,-90,0.15);
-endmfpic; % (102) line 1551 in the TeX source.
+endmfpic; % (102) line 1575 in the TeX source.
%------------------------------------------
@@ -4672,7 +4728,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.15, 0.15, -0.35, 0);
-beginmfpic(103); % line 1552 in the TeX source.
+beginmfpic(103); % line 1576 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4689,7 +4745,7 @@ store (curpath)
drawn
arcplr ((0,-0.2),0,-180,0.15);
-endmfpic; % (103) line 1561 in the TeX source.
+endmfpic; % (103) line 1585 in the TeX source.
%------------------------------------------
@@ -4698,7 +4754,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.35, 0, -0.15, 0.15);
-beginmfpic(104); % line 1562 in the TeX source.
+beginmfpic(104); % line 1586 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4715,7 +4771,7 @@ store (curpath)
drawn
arcplr ((-0.2,0),-90,-270,0.15);
-endmfpic; % (104) line 1571 in the TeX source.
+endmfpic; % (104) line 1595 in the TeX source.
%------------------------------------------
@@ -4724,7 +4780,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.15, 0.15, 0, 0.35);
-beginmfpic(105); % line 1572 in the TeX source.
+beginmfpic(105); % line 1596 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4741,7 +4797,7 @@ store (curpath)
drawn
arcplr ((0,0.2),-180,-360,0.15);
-endmfpic; % (105) line 1581 in the TeX source.
+endmfpic; % (105) line 1605 in the TeX source.
%------------------------------------------
@@ -4750,7 +4806,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.355556, -0.151089, 0.151089);
-beginmfpic(106); % line 1582 in the TeX source.
+beginmfpic(106); % line 1606 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4779,7 +4835,7 @@ store (curpath)
drawn
arcplr ((0.122222,0.105392),-90,-24.529547,0.256481);
-endmfpic; % (106) line 1593 in the TeX source.
+endmfpic; % (106) line 1617 in the TeX source.
%------------------------------------------
@@ -4788,7 +4844,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.151089, 0.151089, -0.355556, -0);
-beginmfpic(107); % line 1594 in the TeX source.
+beginmfpic(107); % line 1618 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4817,7 +4873,7 @@ store (curpath)
drawn
arcplr ((0.105392,-0.122222),180,245.470453,0.256481);
-endmfpic; % (107) line 1605 in the TeX source.
+endmfpic; % (107) line 1629 in the TeX source.
%------------------------------------------
@@ -4826,7 +4882,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.355556, -0, -0.151089, 0.151089);
-beginmfpic(108); % line 1606 in the TeX source.
+beginmfpic(108); % line 1630 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4855,7 +4911,7 @@ store (curpath)
drawn
arcplr ((-0.122222,-0.105392),90,155.470453,0.256481);
-endmfpic; % (108) line 1617 in the TeX source.
+endmfpic; % (108) line 1641 in the TeX source.
%------------------------------------------
@@ -4864,7 +4920,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.151089, 0.151089, 0, 0.355556);
-beginmfpic(109); % line 1618 in the TeX source.
+beginmfpic(109); % line 1642 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4893,7 +4949,7 @@ store (curpath)
drawn
arcplr ((-0.105392,0.122222),0,65.470453,0.256481);
-endmfpic; % (109) line 1629 in the TeX source.
+endmfpic; % (109) line 1653 in the TeX source.
%------------------------------------------
@@ -4902,7 +4958,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.175, -0.1, 0.1);
-beginmfpic(110); % line 1630 in the TeX source.
+beginmfpic(110); % line 1654 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4915,7 +4971,7 @@ polyline (false)
(0,0.1),
(0.175,0));
-endmfpic; % (110) line 1638 in the TeX source.
+endmfpic; % (110) line 1662 in the TeX source.
%------------------------------------------
@@ -4924,7 +4980,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.1, 0.1, -0.175, 0);
-beginmfpic(111); % line 1639 in the TeX source.
+beginmfpic(111); % line 1663 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4937,7 +4993,7 @@ polyline (false)
(0.1,0),
(0,-0.175));
-endmfpic; % (111) line 1647 in the TeX source.
+endmfpic; % (111) line 1671 in the TeX source.
%------------------------------------------
@@ -4946,7 +5002,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.175, 0, -0.1, 0.1);
-beginmfpic(112); % line 1648 in the TeX source.
+beginmfpic(112); % line 1672 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4959,7 +5015,7 @@ polyline (false)
(0,-0.1),
(-0.175,0));
-endmfpic; % (112) line 1656 in the TeX source.
+endmfpic; % (112) line 1680 in the TeX source.
%------------------------------------------
@@ -4968,7 +5024,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.1, 0.1, 0, 0.175);
-beginmfpic(113); % line 1657 in the TeX source.
+beginmfpic(113); % line 1681 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -4981,7 +5037,7 @@ polyline (false)
(-0.1,0),
(0,0.175));
-endmfpic; % (113) line 1665 in the TeX source.
+endmfpic; % (113) line 1689 in the TeX source.
%------------------------------------------
@@ -4990,7 +5046,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.425, -0.15, 0.15);
-beginmfpic(114); % line 1666 in the TeX source.
+beginmfpic(114); % line 1690 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5011,7 +5067,7 @@ store (curpath)
drawn
circle ((0.3875,0),0.0375);
-endmfpic; % (114) line 1676 in the TeX source.
+endmfpic; % (114) line 1700 in the TeX source.
%------------------------------------------
@@ -5020,7 +5076,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.15, 0.15, -0.425, 0);
-beginmfpic(115); % line 1677 in the TeX source.
+beginmfpic(115); % line 1701 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5041,7 +5097,7 @@ store (curpath)
drawn
circle ((0,-0.3875),0.0375);
-endmfpic; % (115) line 1687 in the TeX source.
+endmfpic; % (115) line 1711 in the TeX source.
%------------------------------------------
@@ -5050,7 +5106,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.425, 0, -0.15, 0.15);
-beginmfpic(116); % line 1688 in the TeX source.
+beginmfpic(116); % line 1712 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5071,7 +5127,7 @@ store (curpath)
drawn
circle ((-0.3875,0),0.0375);
-endmfpic; % (116) line 1698 in the TeX source.
+endmfpic; % (116) line 1722 in the TeX source.
%------------------------------------------
@@ -5080,7 +5136,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.15, 0.15, 0, 0.425);
-beginmfpic(117); % line 1699 in the TeX source.
+beginmfpic(117); % line 1723 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5101,7 +5157,7 @@ store (curpath)
drawn
circle ((0,0.3875),0.0375);
-endmfpic; % (117) line 1709 in the TeX source.
+endmfpic; % (117) line 1733 in the TeX source.
%------------------------------------------
@@ -5110,7 +5166,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.430556, -0.151089, 0.151089);
-beginmfpic(118); % line 1710 in the TeX source.
+beginmfpic(118); % line 1734 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5143,7 +5199,7 @@ store (curpath)
drawn
circle ((0.393056,-0.001089),0.0375);
-endmfpic; % (118) line 1722 in the TeX source.
+endmfpic; % (118) line 1746 in the TeX source.
%------------------------------------------
@@ -5152,7 +5208,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.151089, 0.151089, -0.430556, -0);
-beginmfpic(119); % line 1723 in the TeX source.
+beginmfpic(119); % line 1747 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5185,7 +5241,7 @@ store (curpath)
drawn
circle ((-0.001089,-0.393056),0.0375);
-endmfpic; % (119) line 1735 in the TeX source.
+endmfpic; % (119) line 1759 in the TeX source.
%------------------------------------------
@@ -5194,7 +5250,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.430556, -0, -0.151089, 0.151089);
-beginmfpic(120); % line 1736 in the TeX source.
+beginmfpic(120); % line 1760 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5227,7 +5283,7 @@ store (curpath)
drawn
circle ((-0.393056,0.001089),0.0375);
-endmfpic; % (120) line 1748 in the TeX source.
+endmfpic; % (120) line 1772 in the TeX source.
%------------------------------------------
@@ -5236,7 +5292,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.151089, 0.151089, 0, 0.430556);
-beginmfpic(121); % line 1749 in the TeX source.
+beginmfpic(121); % line 1773 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5269,7 +5325,7 @@ store (curpath)
drawn
circle ((0.001089,0.393056),0.0375);
-endmfpic; % (121) line 1761 in the TeX source.
+endmfpic; % (121) line 1785 in the TeX source.
%------------------------------------------
@@ -5278,7 +5334,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.4, -0.151089, 0.151089);
-beginmfpic(122); % line 1762 in the TeX source.
+beginmfpic(122); % line 1786 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5311,7 +5367,7 @@ store (curpath)
drawn
arcplr ((0.166667,0.105392),-90,-24.529547,0.256481);
-endmfpic; % (122) line 1774 in the TeX source.
+endmfpic; % (122) line 1798 in the TeX source.
%------------------------------------------
@@ -5320,7 +5376,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.151089, 0.151089, -0.4, 0);
-beginmfpic(123); % line 1775 in the TeX source.
+beginmfpic(123); % line 1799 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5353,7 +5409,7 @@ store (curpath)
drawn
arcplr ((0.105392,-0.166667),180,245.470453,0.256481);
-endmfpic; % (123) line 1787 in the TeX source.
+endmfpic; % (123) line 1811 in the TeX source.
%------------------------------------------
@@ -5362,7 +5418,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.4, -0, -0.151089, 0.151089);
-beginmfpic(124); % line 1788 in the TeX source.
+beginmfpic(124); % line 1812 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5395,7 +5451,7 @@ store (curpath)
drawn
arcplr ((-0.166667,-0.105392),90,155.470453,0.256481);
-endmfpic; % (124) line 1800 in the TeX source.
+endmfpic; % (124) line 1824 in the TeX source.
%------------------------------------------
@@ -5404,7 +5460,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.151089, 0.151089, 0, 0.4);
-beginmfpic(125); % line 1801 in the TeX source.
+beginmfpic(125); % line 1825 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5437,7 +5493,7 @@ store (curpath)
drawn
arcplr ((-0.105392,0.166667),0,65.470453,0.256481);
-endmfpic; % (125) line 1813 in the TeX source.
+endmfpic; % (125) line 1837 in the TeX source.
%------------------------------------------
@@ -5446,7 +5502,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.475, -0.151089, 0.151089);
-beginmfpic(126); % line 1814 in the TeX source.
+beginmfpic(126); % line 1838 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5483,7 +5539,7 @@ store (curpath)
drawn
circle ((0.4375,-0.001089),0.0375);
-endmfpic; % (126) line 1827 in the TeX source.
+endmfpic; % (126) line 1851 in the TeX source.
%------------------------------------------
@@ -5492,7 +5548,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.151089, 0.151089, -0.475, 0);
-beginmfpic(127); % line 1828 in the TeX source.
+beginmfpic(127); % line 1852 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5529,7 +5585,7 @@ store (curpath)
drawn
circle ((-0.001089,-0.4375),0.0375);
-endmfpic; % (127) line 1841 in the TeX source.
+endmfpic; % (127) line 1865 in the TeX source.
%------------------------------------------
@@ -5538,7 +5594,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.475, -0, -0.151089, 0.151089);
-beginmfpic(128); % line 1842 in the TeX source.
+beginmfpic(128); % line 1866 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5575,7 +5631,7 @@ store (curpath)
drawn
circle ((-0.4375,0.001089),0.0375);
-endmfpic; % (128) line 1855 in the TeX source.
+endmfpic; % (128) line 1879 in the TeX source.
%------------------------------------------
@@ -5584,7 +5640,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.151089, 0.151089, 0, 0.475);
-beginmfpic(129); % line 1856 in the TeX source.
+beginmfpic(129); % line 1880 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5621,7 +5677,7 @@ store (curpath)
drawn
circle ((0.001089,0.4375),0.0375);
-endmfpic; % (129) line 1869 in the TeX source.
+endmfpic; % (129) line 1893 in the TeX source.
%------------------------------------------
@@ -5630,7 +5686,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (0, 0.25, -0.1, 0.1);
-beginmfpic(130); % line 1870 in the TeX source.
+beginmfpic(130); % line 1894 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5647,7 +5703,7 @@ store (curpath)
drawn
circle ((0.2125,0),0.0375);
-endmfpic; % (130) line 1879 in the TeX source.
+endmfpic; % (130) line 1903 in the TeX source.
%------------------------------------------
@@ -5656,7 +5712,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.1, 0.1, -0.25, 0);
-beginmfpic(131); % line 1880 in the TeX source.
+beginmfpic(131); % line 1904 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5673,7 +5729,7 @@ store (curpath)
drawn
circle ((0,-0.2125),0.0375);
-endmfpic; % (131) line 1889 in the TeX source.
+endmfpic; % (131) line 1913 in the TeX source.
%------------------------------------------
@@ -5682,7 +5738,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.25, 0, -0.1, 0.1);
-beginmfpic(132); % line 1890 in the TeX source.
+beginmfpic(132); % line 1914 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5699,7 +5755,7 @@ store (curpath)
drawn
circle ((-0.2125,0),0.0375);
-endmfpic; % (132) line 1899 in the TeX source.
+endmfpic; % (132) line 1923 in the TeX source.
%------------------------------------------
@@ -5708,7 +5764,7 @@ unitlen := 1.0pt#;
xscale := 72; yscale := 72;
bounds (-0.1, 0.1, 0, 0.25);
-beginmfpic(133); % line 1900 in the TeX source.
+beginmfpic(133); % line 1924 in the TeX source.
resizedrawpen (0.8bp);
setcolor (drawcolor) black;
@@ -5725,7 +5781,7 @@ store (curpath)
drawn
circle ((0,0.2125),0.0375);
-endmfpic; % (133) line 1909 in the TeX source.
+endmfpic; % (133) line 1933 in the TeX source.
%------------------------------------------
diff --git a/graphics/circuit_macros/examples/mf/cct.tfm b/graphics/circuit_macros/examples/mf/cct.tfm
index 142e6cd003..a26fea7161 100644
--- a/graphics/circuit_macros/examples/mf/cct.tfm
+++ b/graphics/circuit_macros/examples/mf/cct.tfm
Binary files differ
diff --git a/graphics/circuit_macros/examples/person.m4 b/graphics/circuit_macros/examples/person.m4
index c0033d63fe..5f5a9cb8bd 100644
--- a/graphics/circuit_macros/examples/person.m4
+++ b/graphics/circuit_macros/examples/person.m4
@@ -30,12 +30,17 @@ define(`person',`[ setkey_(`$1',height,linewid)
divert(0)dnl
linewid = 3*linewid
+ movewid = 0.2
setrgb(0.54,0.81,0.94,babyblue)
person(fill="babyblue")
+ move
person(width=linewid*3/4;fill="babyblue")
+ move
person(width=linewid;fill="babyblue")
+ move
person
+ move
resetrgb
person(height=1;fill="gray")
diff --git a/graphics/circuit_macros/examples/relaycoil.m4 b/graphics/circuit_macros/examples/relaycoil.m4
index b3273794cd..7966a32294 100644
--- a/graphics/circuit_macros/examples/relaycoil.m4
+++ b/graphics/circuit_macros/examples/relaycoil.m4
@@ -3,7 +3,7 @@
cct_init
spc = dimen_/3
-{ relaycoil; S: "\tt re{}laycoil" at last [].s+(0,-20bp__)
+{ 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)
@@ -20,10 +20,12 @@ cct_init
{ "\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*4,0); "\tt (SR)" at (last [],S)
+ 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)
}
+ spc = dimen_/4
{
move down_ 3/4; right_
relaycoil(HS); S: "\tt (HS)" at last [].s+(0,-12bp__)
@@ -35,6 +37,7 @@ cct_init
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/examples/shapes.m4 b/graphics/circuit_macros/examples/shapes.m4
index 3555057447..749e09896d 100644
--- a/graphics/circuit_macros/examples/shapes.m4
+++ b/graphics/circuit_macros/examples/shapes.m4
@@ -18,14 +18,14 @@ define(`cylinder3D',`[ Start: (0,0)
define(`M4CL',`xdispl,ydispl,zdispl')dnl
lenc = length3D(M4CL)
cs = dot3D(View3D,M4CL)/lenc
- End: (project(M4CL))
+ End: (Project(M4CL))
az = atan2(ydispl,xdispl)
ae = atan2(zdispl,sqrt(xdispl^2+ydispl^2))
CL: line invis from Start to End; C: CL.c
nls = int(twopi_*radc/lthick)
define(`M4PP',`rot3Dz(az,rot3Dy(-ae,rot3Dx(-i/nls*twopi_,0,0,radc)))')dnl
for i=0 to nls-1 do { if dot3D(View3D,M4PP) > 0 then {
- P: (project(M4PP))
+ P: (Project(M4PP))
ql = sqrta(dot3D(Light3D,M4PP)/radc)
line from P to End+P outlined rgbstring(ql,ql,ql) `$5' } }
Perp: (vperp(CL,radc))
@@ -52,7 +52,7 @@ define(`cone3D',`[ Start: (0,0)
define(`M4CL',`xdispl,ydispl,zdispl')dnl
lenc = length3D(M4CL)
diamc = ifelse(`$4',,(lenc/2),`$4') ; radc = diamc/2
- End: (project(M4CL))
+ End: (Project(M4CL))
cs = dot3D(View3D,M4CL)/lenc
az = atan2(ydispl,xdispl)
ae = atan2(zdispl,sqrt(xdispl^2+ydispl^2))
@@ -64,7 +64,7 @@ define(`cone3D',`[ Start: (0,0)
rot3Dz(az,rot3Dy(-ae,rot3Dx(-i/nls*twopi_,radc,0,lenc)))) > 0 then {
ql = sqrta(dot3D(Light3D,
rot3Dz(az,rot3Dy(-ae,rot3Dx(-i/nls*twopi_,radc,0,lenc))))/lt)
- P: (project(rot3Dz(az,rot3Dy(-ae,rot3Dx(-i/nls*twopi_,0,0,radc)))))
+ P: (Project(rot3Dz(az,rot3Dy(-ae,rot3Dx(-i/nls*twopi_,0,0,radc)))))
line from P to End outlined rgbstring(ql,ql,ql) `$5'
if !b then { WB: P; b = 1 }
} else { if b then { BW: P; b = 0 } } }
@@ -121,7 +121,7 @@ define(`prism3D',`[ Start: (0,0)
widp = ifelse(`$4',,(linewid/5),`$4')
htp = ifelse(`$5',,(linewid/10),`$5')
rotp = ifelse(`$6',,0,`$6')
- End: (project(xdispl,ydispl,zdispl)); C: 0.5 between Start and End
+ End: (Project(xdispl,ydispl,zdispl)); C: 0.5 between Start and End
lenp = length3D(xdispl,ydispl,zdispl)
az = atan2(ydispl,xdispl); ae = atan2(zdispl,sqrt(xdispl^2+ydispl^2))
wp2 = widp/2; hp2 = htp/2
@@ -148,10 +148,10 @@ define(`PFacet',`cross3D(diff3D(`$2'x,`$2'y,`$2'z,`$1'x,`$1'y,`$1'z),
diff3D(`$3'x,`$3'y,`$3'z,`$2'x,`$2'y,`$2'z))')
if dot3D(View3D,PFacet) > 0 then {
fFacet = sqrta(dot3D(Light3D,PFacet)/length3D(PFacet))
- P1: (project(`$1'x,`$1'y,`$1'z))
- P2: (project(`$2'x,`$2'y,`$2'z))
- P3: (project(`$3'x,`$3'y,`$3'z))
- P4: (project(`$4'x,`$4'y,`$4'z))
+ P1: (Project(`$1'x,`$1'y,`$1'z))
+ P2: (Project(`$2'x,`$2'y,`$2'z))
+ P3: (Project(`$3'x,`$3'y,`$3'z))
+ P4: (Project(`$4'x,`$4'y,`$4'z))
line fill_(fFacet) invis from P1 to P2 then to P3 then to P4 then to P1
line from P1 to P2; round
line to P3; round
@@ -170,7 +170,7 @@ setview(azimuth,elev)
Arrow3D(0,1,0) with .Start at Orig; "y" ljust at last [].End
Arrow3D(0,0,1.2) with .Start at Orig; "z" above at last [].End
setlight(0,0,0)
- cylinder3D(1,1,1,0.6) with .Start at (project(0.5,0.5,0.5))
+ cylinder3D(1,1,1,0.6) with .Start at (Project(0.5,0.5,0.5))
]
Ball: shadedball(0.5) with .nw at last [].ne+(-0.25,0)
[
@@ -180,7 +180,7 @@ setview(azimuth,elev)
for i=0 to n do {
r = i/n*(thmax-thmin)+thmin
prism3D(rot3Dz(r,rot3Dy(pi_/4,len,0,0)),0.2,0.1) \
- with .Start at (project(rot3Dz(r,rot3Dy(pi_/4,len*0.5,0,0)))) }
+ with .Start at (Project(rot3Dz(r,rot3Dy(pi_/4,len*0.5,0,0)))) }
] with .nw at last [].ne
[
setlight(0,0)
diff --git a/graphics/circuit_macros/examples/svg/AlogixSVG.m4 b/graphics/circuit_macros/examples/svg/AlogixSVG.m4
index 58cac40f0c..0336273903 100644
--- a/graphics/circuit_macros/examples/svg/AlogixSVG.m4
+++ b/graphics/circuit_macros/examples/svg/AlogixSVG.m4
@@ -21,9 +21,9 @@ A: Autologix(
B: Autologix(Or(And(B,Not(C)),And(Not(A),B,C)),N) \
with .sw at A.e+(1.3,-0.5)
"svg_it(Out)" at B.Out above ljust
- "svg_tt(`Autologix(')" wid 68bp__ with .w at B.sw+(0,-0.15)
- "svg_tt(`Or(And(B,Not(C)),And(Not(A),B,C)),N)')" \
- wid 262bp__ with .w at last "".w+(0.2,-0.18)
+ "svg_tt(`Autologix(Or(And(B,Not(C)),')" wid 165bp__ \
+ with .w at B.sw+(-0.6,-0.15)
+ "svg_tt(`And(Not(A),B,C)),N)')" wid 122bp__ with .w at last "".w+(1.1,-0.18)
for_(1,4,1,`"svg_it(B.In`'m4x)" at B.In`'m4x rjust')
"svg_it(B.In5)" at B.In5+(0,-1.5bp__) rjust
diff --git a/graphics/circuit_macros/examples/svg/AntiqueClockSVG.m4 b/graphics/circuit_macros/examples/svg/AntiqueClockSVG.m4
deleted file mode 100644
index 63c169d3e2..0000000000
--- a/graphics/circuit_macros/examples/svg/AntiqueClockSVG.m4
+++ /dev/null
@@ -1,156 +0,0 @@
-.PS
-# AntiqueClockSVG.m4
-gen_init(svg_font(font-family="sans-serif" font-stretch="condensed"))
-
-# https://tex.stackexchange.com/questions/236923/generate-analog-clock-with-numbered-face-add-seconds-roman-numerals
-
-svg_rot_init(AntiqueClockSVG)
-
-# `hms2deg(hr,min,sec) hr:min:sec to degrees
-# blank arg1: degrees for minute hand
-# blank arg1 and arg2: degrees for second hand'
-define(`hms2deg',`ifelse(`$1',,
- `ifelse(`$2',,
- `(90-pmod(ifelse(`$3',,0,`$3'),60)/60*360)',
- `(90-(pmod(`$2',60)/60 + pmod(ifelse(`$3',,0,`$3'),60)/60/60)*360)')',
- `(90-(pmod(`$1',12) + pmod(ifelse(`$2',,0,`$2'),60)/60 + dnl
- pmod(ifelse(`$3',,0,`$3'),60)/3600)/12*360)')')
-
-# `SecondHand(length,hr,min,sec)'
-define(`SecondHand',`[ shsf = (`$1')/3.2
- C: Here
- { L: rpoint_(to (Rect_(`$1',hms2deg(,,`$4')))) }
- line thick 8*shsf to rvec_(`$1',0)
- ]')
-
-# `AntiqueMinuteHand(length,hr,min,sec)'
-define(`AntiqueMinuteHand',`[ mhsf = (`$1')/2.84
- L: rpoint_(to (Rect_(`$1',hms2deg(,`$3',`$4'))))
- C: circle fill_(0) diam 0.47*mhsf at L.start
- move to C
- spline from rvec_(0,0.047*mhsf) \
- to rvec_(1.65*mhsf,0.11*mhsf) \
- then to rvec_(`$1',0.018*mhsf) \
- then to rvec_(`$1',-0.018*mhsf) \
- then to rvec_(1.65*mhsf,-0.11*mhsf) \
- then to rvec_(0,-0.047*mhsf) \
- shaded rgbstring(0,0,0)
- ]')
-
-# `AntiqueHourHand(length,hr,min,sec)'
-define(`AntiqueHourHand',`[ hhsf = (`$1')/2.2
- L: rpoint_(to (Rect_(`$1',hms2deg(`$2',`$3',`$4'))))
- C: circle fill_(0) diam 0.6*hhsf at L.start
- move to C
- v = 0.25*hhsf
- { line to rvec_(1.1*hhsf,0) thick 0.15/(1bp__)*hhsf }
- C1: rvec_(1.25*hhsf,0)
- d = `$1'-1.25*hhsf
- q = 1bp__*hhsf
- r1 = (d^2 + q^2 - v^2)/(v-q)/2
- tang = atan2((r1+q),d)
- for i=0 to 3 do {
- X[i]: C1+vec_(rect_(v, pi_+i/3*( tang-pi_)))
- Y[i]: C1+vec_(rect_(v,-pi_+i/3*(-tang+pi_)))
- }
- n = 3
- for i=1 to 4 do { aa = -pi_+tang + i/4*(pi_/2-tang)
- XX: (d,r1+q)+(rect_(r1,aa))
- n+=1;
- X[n]: C1+vec_(XX.x, XX.y)
- Y[n]: C1+vec_(XX.x,-XX.y)
- }
- m = n
- for i= 0 to m do { n+=1; X[n]: Y[m-i] }
- fitcurve(X,n,shaded rgbstring(0,0,0))
- ]')
-
-define(`AntiqueClock',`[ # h,m,s,diam
-# Clock size parameters:
- hour = ifelse(`$1',,3,`$1')
- minute = ifelse(`$2',,41,`$2')
- second = ifelse(`$3',,51,`$3')
- # outer radius
- ifelse(`$4',,`skale=0.5; r1=2',`r1=(`$4')/2; skale=r1/4')
- r2 = r1 - 0.5*skale
- r3 = r2 - 0.14*skale
- r4 = r3 - 0.35*skale
- r5 = r4 - 0.17*skale
- r6 = r5 - 0.63*skale
- r7 = r6 - 0.17*skale
- shadelinethick = 1.0
-
-C: circle thick 0.2 rad r1
-
-define shadeline {
- s = 1-($`'1)*2
- v = r*s
- h = sqrt(r^2-v^2)
- t = 1-abs(s)
- line from (vrot_(-h,v,cost,sint)) to (vrot_(h,v,cost,sint)) \
- thick shadelinethick outlined rgbstring(t,t,t)
- }
-
- r = r1 # Bezel outer
- nlines = int(2*r/(shadelinethick pt__)*1.1)
- cost = cosd(10); sint = sind(10);
- ShadeObject(shadeline,nlines, 0, 0,0,0, 0.5, 1,1,1, 1, 0,0,0 ) at C
-
- r = r2 # Bezel inner
- nlines = int(2*r/(shadelinethick pt__)*1.1)
- cost = cosd(-10); sint = sind(-10);
- ShadeObject(shadeline,nlines, 0, 0,0,0, 0.25, 0.8,0.8,0.8, 0.5, 1,1,1,
- 0.75, 0.8,0.8,0.8, 1, 0,0,0 ) at C
-
-# Clock face
-Face: circle thick 0 fill_(1) rad r3 at C
- circle rad r4 at C
- circle rad r5 at C
- circle rad r6 at C
- circle rad r7 at C
-# Ad hoc shift of rotated SVG text
- define adj { (-cosd($`'1)*textht*0.5*sign(180-($`'1)),\
- (0.25+0.25*cosd(2*($`'1)))*textht) }
-# Outer numbers
- textht = (r3-r4)*0.6
- for mn = -15 to 15 by 5 do { t = 90-mn/60*360
- R:(Rect_((r3+r4)/2,t))
- svg_rot(-mn/60*360,sprintf("%g",pmod(mn,60)) at C+R+adj(t))
- }
- for mn = 20 to 40 by 5 do { t = 450-mn/60*360
- R: (Rect_((r3+r4)/2,t))
- svg_rot(180-mn/60*360, sprintf("%g",pmod(mn,60)) at C+R+adj(t))
- }
-# Outer tics
- for mn = 1 to 60 do { t = 90-mn/60*360
- line from C+(Rect_(r5,t)) to C+(Rect_(r4,t)) }
-
-# Inner numbers
- textht = (r5-r6)*0.6
- Loopover_(`mx',`tt = 90-(m4Lx-4)/12*360
- R: (Rect_((r5+r6)/2,tt))
- svg_rot(tt-90, "mx" at C+R+adj(tt)) ',
- IX,X,XI,XII,I,II,III)
- Loopover_(`mx',`tt = 360-m4Lx*30
- R: (Rect_((r5+r6)/2,tt))
- svg_rot(tt-270, "mx" at C+R+adj(tt)) ',
- IV,V,VI,VII,VIII)
-
-# Inner tics
- for mn = 5 to 60 by 5 do { t = 90-mn/60*360
- line from C+(Rect_(r7,t)) to C+(Rect_(r6,t)) }
-
-# Hands
- AntiqueHourHand(r6,hour,minute,second) with .C at C
- AntiqueMinuteHand(r5,hour,minute,second) with .C at C
- SecondHand((r3+r4)/2,hour,minute,second) with .C at C
-
-# Center
- dot(at C,0.1/4*r1,1)
- ]')
-
- Clock1: AntiqueClock(,,,3.5)
-# Clock2: AntiqueClock(4,48,07,2) at Clock1.e+(1.5,0)
-
- command "</g>" # end font
-.PE
diff --git a/graphics/circuit_macros/examples/svg/ArrowFnSVG.m4 b/graphics/circuit_macros/examples/svg/ArrowFnSVG.m4
new file mode 100644
index 0000000000..b72914b728
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/ArrowFnSVG.m4
@@ -0,0 +1,59 @@
+.PS
+# ArrowFnSVG.m4
+# https://tex.stackexchange.com/questions/581089/arrow-function-diagrams
+gen_init
+ brad = 0.04
+ bht = 0.4
+ bwid = 0.25
+define(`rbox',`box rad brad outlined "Orange"')
+
+B1: [
+ svg_font(Times,14bp__)
+ linethick = 1.2
+ arrowwid = 0.08
+ rbox wid 5*boxwid ht 3/2*boxwid
+ line from last box.w-(bht/4,0) "svg_it(X)" above ljust
+T: Here
+ arrow up bwid right bwid then right bwid
+F: rbox ht bht "svg_it(f)"
+ {"svg_it(Y)" above ljust }
+ arrow down bwid right bwid from T then right boxwid + bwid*3/2
+G: rbox ht bht "svg_it(g)"
+ {"svg_it(Z)" above ljust }
+S: circle diam bht "svg_it(+)" at (G.e.x+boxwid,(F.y+G.y)/2)
+ d = F.y-S.nw.y
+ arrow from F.e to S.nw+(-d,d) then to S.nw
+ arrow from G.e to S.sw+(-d,-d) then to S.sw
+ arrow right from S.e
+ command "</g>" # end font
+ ]
+[
+ svg_font(Times,11bp__)
+ bht = bht/2
+ sbwid = boxwid*3/4
+ bbwid = sbwid*5/4
+ dh = bht/2
+B1: rbox wid bbwid ht bbwid
+B2: rbox wid sbwid*3/2 ht bbwid at B1+(3/2*bbwid,0)
+B3: rbox wid bbwid ht bbwid at B2+(3/2*bbwid,0)
+B4: rbox wid sbwid*3/2 ht bbwid at B3+(3/2*bbwid,0)
+B5: rbox wid bbwid ht bbwid at B4+(3/2*bbwid,0)
+ F: rbox ht bht wid sbwid at B2.n-(0,bht*3/4) "svg_it(f)"
+BR: B2.s+(0,B2.n.y-F.y)
+ G: rbox ht bht wid sbwid at (B4,F) "svg_it(g)"
+ S: circle diam bht*3/2 at B5+(bht/2,0) "svg_it(+)"
+ arrow right from S.e
+ T: B1.w+(dh,0)
+B: rbox ht bbwid*5/4 wid boxwid*7.25 with .w at T-(sbwid*3/4,0)
+ { line from T left sbwid "svg_it(x)" above ljust }
+ arrow from T to (B1.e-(dh,0),F) then to F.w
+ arrow from F.e to (B3.w+(dh,0),F) then to (B3.e-(dh,0),BR)
+ continue to (B5.w+(dh,0),Here) then to S.sw
+ line thick 5 outlined "white" from B3.sw to B3.ne chop brad
+ arrow from T to (B1.e-(dh,0),BR) then to (B3.w+(dh,0),BR) \
+ then to (B3.e-(dh,0),G) then to G.w
+ arrow from G.e to (B5.w+(dh,0),G) then to S.nw
+ command "</g>" # end font
+ ] with .nw at B1.sw+(0,-0.2)
+
+.PE
diff --git a/graphics/circuit_macros/examples/svg/BtreeSVG.m4 b/graphics/circuit_macros/examples/svg/BtreeSVG.m4
index 158b475b7b..e025572a0a 100644
--- a/graphics/circuit_macros/examples/svg/BtreeSVG.m4
+++ b/graphics/circuit_macros/examples/svg/BtreeSVG.m4
@@ -4,8 +4,9 @@
gen_init(svg_font(sans-serif,11bp__))
sinclude(tst.dim)
s_init(Btree)
+maxpswid = 12
Btree: [
-circlerad = 0.45
+circlerad = 0.35
define n { [C: circle fill_(0.9) $1
if "$2" != "" then {
@@ -97,11 +98,12 @@ define(`txw',`wid `$1'mm__')dnl scaled by 14/12 for 14 pt type
+ "((D,pk`'svg_prime`'svg_sub(D,,,-0.5ex)),h`'svg_sub(7)))" \
txw(29) ),
Node(2,"svg_it(x`'svg_sub(8):=((K,pk`'svg_sub(K)),h`'svg_sub(8)))" \
- txw(29) with .n at last "".ne+(0.2,-vsep*2/3); move right 0.2)),
+ txw(29) with .n at last "".ne+(0.2,-vsep*2/3); \
+ move right 0.2)),
Node(3,"svg_it(h(x`'svg_sub(9)))" txw(8) \
at 0.5 between Head1 and Head2)))
-] with .w at last [].e+(-0.75,0)
+] with .w at last [].e+(-1,0)
command "</g>" # end font
.PE
diff --git a/graphics/circuit_macros/examples/svg/CapacitorsSVG.m4 b/graphics/circuit_macros/examples/svg/CapacitorsSVG.m4
new file mode 100644
index 0000000000..1942860d37
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/CapacitorsSVG.m4
@@ -0,0 +1,38 @@
+.PS
+# `Capacitors.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
+{ {capacitor ; move ; "`capacitor '" ljust}
+ move right_ hm
+ {capacitor(,C); move ; "`capacitor(,C) '" ljust}
+ move right_ hm
+ {capacitor(,C+); move ; "`capacitor(,C+) '" ljust}
+}
+ move down vm; right_
+{ {capacitor(,P); move ; "`capacitor(,P) '" ljust}
+ move right_ hm
+ {capacitor(,E); move ; "`capacitor(,E) '" ljust}
+ move right_ hm
+ {capacitor(,K); move ; "`capacitor(,K) '" ljust}
+}
+ move down 0.25; right_
+{ {capacitor(,M); move ; "`capacitor(,M) '" ljust}
+ move right_ hm
+ {capacitor(,N); move ; "`capacitor(,N) '" ljust}
+ move right_ hm
+ {xtal ; move ; "`xtal '" ljust}
+}
+ move down 0.25; right_
+{ {capacitor(,dC); move ;"`capacitor(,dC) '" ljust}
+ move right_ hm
+ {capacitor(,dF); move ;"`capacitor(,dF) '" ljust}
+}
+
+ command "</g>" # end font
+.PE
diff --git a/graphics/circuit_macros/examples/svg/ChipsSVG.m4 b/graphics/circuit_macros/examples/svg/ChipsSVG.m4
new file mode 100644
index 0000000000..3d9ccb1edc
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/ChipsSVG.m4
@@ -0,0 +1,44 @@
+.PS
+# ChipsSVG.m4
+log_init
+include(icsSVG.m4)
+svg_font(sans-serif,8.5bp__)
+
+Chips: [
+ ic4017
+ {"4017" at last [].Chip.sw below ljust}
+ move
+ ic4510
+ {"4510" at last [].Chip.sw below ljust}
+ move
+ icVS1053
+ {"VS1053" at last [].Chip.sw below ljust}
+
+ DIP_chip_outline with .sw at last [].se+(0.5,0)
+ { `"DIP_chip_outline"' at last [].s below }
+ ]
+
+DIPs: [
+ DIP0: DIP
+ DIP32: DIP(32,direct=R;bodywid=0.5*scale) with .sw at last [].se+(0.5,0)
+ DIP16: DIP(16,type=Q;pinwid=1bp__) with .sw at DIP32.se+(1.5,0)
+
+ thinlines_
+ { "svg_tt(`DIP')" at DIP0.s - (0,10bp__) }
+ { arrow <- from DIP0.Pin1 up 0.2; "svg_it(`Pin1')" ljust at Here+(-0.05,0.1) }
+ { arrow <- from DIP0.c up 0.7 right 0.25; "svg_it(`Body')" ljust }
+ { arrow <- from DIP0.Pin8 up 0.25 right 0.2 ; "svg_it(`Pin8')" above ljust }
+
+ { "svg_tt(`DIP(32,direct=R;bodywid=0.5*scale)')" ljust \
+ at DIP32.sw - (0,10bp__) }
+ { arrow <- right 0.2 from DIP32.Pin1; "svg_it(`Pin1')" ljust }
+ { spline <- right 0.2 then right 0.1 up 0.1 from DIP32.Pin32
+ "svg_it(`Pin32')" ljust }
+
+ { "svg_tt(`DIP(16,type=Q;pinwid=1bp__)')" at DIP16.sw - (0,10bp__) ljust }
+ thicklines_
+
+ ] with .nw at last [].sw+(0,-0.3)
+
+ command "</g>"
+.PE
diff --git a/graphics/circuit_macros/examples/svg/CrossbarSVG.m4 b/graphics/circuit_macros/examples/svg/CrossbarSVG.m4
deleted file mode 100644
index 12bb2d72c3..0000000000
--- a/graphics/circuit_macros/examples/svg/CrossbarSVG.m4
+++ /dev/null
@@ -1,54 +0,0 @@
-.PS
-# Crossbar switch
-gen_init(svg_font(sans-serif,11bp__))
- circlerad = 0.12
- boxwid = 0.18
- boxht = 0.18
- rathick = 1.5
- rawd = rathick*4 bp__
- raht = rawd*2
- boxdist = boxwid*1.8
-
-`define bcoord {($2,-($1))*boxdist}'
-`define redarrow { arrow ht raht wid rawd thick rathick color "red" }'
-
-`define cbx {'
- thinlines_
- n = $+ - 1
- for i=0 to n do {
- line color "blue" from bcoord(i,0) to bcoord(i,n)
- line color "blue" from bcoord(0,i) to bcoord(n,i)
- C[i]: circle invis at bcoord(i,-1.5)
- }
- for i=0 to n do {
- exec sprintf("col = $%g",i+1)
- redarrow from C[i].e right 1.25*boxwid
- redarrow from C[i].w+(-boxwid,0) right raht
- for j=0 to n do {
- B: box color "blue" shaded "yellow" at bcoord(i,j)
- if j==col then {
- line color "blue" from B.s to B.e
- line thick rathick color "red" from C[i].e to B.w \
- then to B.n then to (B.x,C[0].y+(2+j*2/3)*boxht)
- continue to (C[j].x-(2+j*2/3)*boxht,Here.y)
- continue to (Here,C[j]) then to C[j].w
- } \
- else {
- line color "blue" from B.n to B.s
- line color "blue" from B.w to B.e
- }
- }
- }
- thicklines_
- for i=0 to n do {
- circle thick 1.5 outlined "blue" shaded "yellow" at C[i] \
- sprintf("ifpostscript(,ifsvg(,\large))%g",i)
- }
- }
-
-[
- cbx(3,6,0,5,2,7,1,4)
- ] at 4,4
-
- command "</g>" # end font
-.PE
diff --git a/graphics/circuit_macros/examples/svg/CrullerSVG.m4 b/graphics/circuit_macros/examples/svg/CrullerSVG.m4
index f4630aff06..7f8173b52a 100644
--- a/graphics/circuit_macros/examples/svg/CrullerSVG.m4
+++ b/graphics/circuit_macros/examples/svg/CrullerSVG.m4
@@ -52,10 +52,10 @@ 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)))
+ 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 ) \
diff --git a/graphics/circuit_macros/examples/svg/DiniSVG.m4 b/graphics/circuit_macros/examples/svg/DiniSVG.m4
index 5631a4822f..1846917a4a 100644
--- a/graphics/circuit_macros/examples/svg/DiniSVG.m4
+++ b/graphics/circuit_macros/examples/svg/DiniSVG.m4
@@ -46,10 +46,10 @@ define(`Dini',
du = ur/ugrid/2
dv = vr/vgrid/2
for i=0 to n do {
- NE: project(Dini(ciu[ix[i]]+du,civ[ix[i]]+dv))
- SE: project(Dini(ciu[ix[i]]+du,civ[ix[i]]-dv))
- SW: project(Dini(ciu[ix[i]]-du,civ[ix[i]]-dv))
- NW: project(Dini(ciu[ix[i]]-du,civ[ix[i]]+dv))
+ NE: Project(Dini(ciu[ix[i]]+du,civ[ix[i]]+dv))
+ SE: Project(Dini(ciu[ix[i]]+du,civ[ix[i]]-dv))
+ SW: Project(Dini(ciu[ix[i]]-du,civ[ix[i]]-dv))
+ NW: Project(Dini(ciu[ix[i]]-du,civ[ix[i]]+dv))
f = (-cos(ciu[ix[i]])+1)/2
g = ( sin(ciu[ix[i]])+1)/2
line from NE to SE then to SW then to NW then to NE \
@@ -174,9 +174,9 @@ array2(h,m4inx,53,54,55,58,59,57)
}
for i=1 to n do {
for j=1 to 6 do { x[j]=h[ih[i],j] }
- line from project((v[x[1],1]),(v[x[1],2]),(v[x[1],3]))\
- for_(2,6,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.95)
+ line from Project((v[x[1],1]),(v[x[1],2]),(v[x[1],3]))\
+ for_(2,6,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.95)
}
m = 0
for i=1 to 12 do { # Visible pentagons
@@ -185,9 +185,9 @@ array2(h,m4inx,53,54,55,58,59,57)
}
for i=1 to m do {
for j=1 to 5 do { x[j]=p[ip[i],j] }
- line from project((v[x[1],1]),(v[x[1],2]),(v[x[1],3])) \
- 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)
+ line from Project((v[x[1],1]),(v[x[1],2]),(v[x[1],3])) \
+ 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)
.PE
diff --git a/graphics/circuit_macros/examples/svg/EEPSVG.m4 b/graphics/circuit_macros/examples/svg/EEPSVG.m4
new file mode 100644
index 0000000000..4f928f927d
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/EEPSVG.m4
@@ -0,0 +1,553 @@
+.PS
+# EEPSVG.m4
+# https://electrical-engineering-portal.com/single-line-diagrams-symbols-drawings-analysis
+
+cct_init
+divert(-1)
+
+# This section defines *DRAFT* SLD elements with or without attached
+# circuit breakers. Many other elements applicable to SLD drawings are
+# already in libcct.m4. The contributions and suggestions of Benjamin
+# Vilmann are acknowledged with thanks.
+
+# 1-terminal SLD elements:
+# Argument 1 is normally the linespec of the stem to set the element direction
+# and length. See also: PtoL defined below.
+# For a 0-length stem (which has undefined direction):
+# arg1 can also be U, D, L, R (for up, down, left, right),
+# or a number to set the direction in degrees, optionally followed by
+# `at position' to set the position (Here by default).
+# Zero-length stem examples: sl_box(U), sl_box(45 at Here+(1,0))
+# Argument 2 contains semicolon (;)-separated key-value attributes
+# of the element head as applicable: e.g., name=Name; text="text"; lgth=expr
+# A non-blank argument 3 is C for a default closed breaker in the stem, O for
+# an open breaker, or key-value pairs to specify breaker details.
+# The element body (head) can be named. It is overlaid with or contained in
+# a [] block.
+
+# 2-terminal SLD elements:
+# These obey the normal Circuit_macro two-terminal conventions.
+# They can be labelled using rlabel() or llabel() as well as directly.
+# Argument 2 contains key-value pairs to customize the element body,
+# e.g., name=Name; text="text"; wdth=expr; ...
+# Nonblank arguments 3 and 4 put a breaker in the input and output respectively.
+
+# Attached breakers:
+# Nonblank arguments 3 and 4 of the two-terminal elements and argument 3 of
+# the 1-terminal elements specify a breaker in the input, output, and stem
+# respectivlely. An O creates a default-size open breaker, and C a closed
+# breaker, otherwise the argument contains key-value pairs to specify the
+# details of the box; e.g., box=dotted 2bp__ shaded "green"
+
+# The SLD current transformer macro sl_ct is composite, within a [] block.
+# Internal labels L (for inductor) and terminals Ts, Tc, and Te are defined.
+
+define(`sldlib_')
+ifdef(`libcct_',,`include(libcct.m4)divert(-1)')
+
+# Default size parameters. These can be redefined in a diagram.
+
+define(`brksiz_',`dimen_*3/16') # Default inline box breaker size
+define(`drosiz_',`dimen_/4') # Default sl_drawout (chevron) size
+
+# One-terminal elements ###################################################
+
+ `sl_disk( stem linespec, keys, breaker )
+ keys: name=Name;
+ text="text";
+ diam=expr;
+ circle=circle attributes; eg diam expr'
+ `default breaker name Bd'
+define(`sl_disk',
+ `sl_eleminit_(`$1')
+ setkeys_(`$2',`name::N; circle::N; text::N; diam:dimen_*2/3')dnl
+ ifelse(`$3',,
+ `ifelse(m4name,,,m4name:) circle diam m4diam \
+ at last line.end + vec_(m4diam/2,0) m4circle m4text
+ [ box invis wid_ m4diam ht_ m4diam ] at last circle
+ line from last line.end to last line.start',
+ `m4br_one(`sl_disk',`$1',`$2',m4brk_(`$3',Bd))') ')
+
+ `sl_box( stem linespec, keys, breaker )
+ keys: name=Name; lgth=expr; wdth=expr;
+ text="text";
+ box= box attributes; (e.g. shade "red")'
+ `default breaker name Bb'
+define(`sl_box',
+ `sl_eleminit_(`$1')
+ setkeys_(`$2',`name::N; wdth:dimen_*2/3; lgth:dimen_*2/3; box::N; text::N')dnl
+ ifelse(`$3',,
+ `line from last line.end to last line.start
+ { ifelse(m4name,,,m4name:) [S:Here; lbox(m4lgth,m4wdth,m4box)] \
+ with .S at last line.start }
+ ifelse(m4text,,,`{m4text at last []}')',
+ `m4br_one(`sl_box',`$1',`$2',m4brk_(`$3',Bb))') ')
+
+ `sl_grid( stem linespec, keys, breaker )
+ keys: name=Name; lgth=expr; wdth=expr;'
+ `default breaker name Bgr'
+define(`sl_grid',
+ `sl_eleminit_(`$1')
+ setkeys_(`$2',`name::N; wdth:dimen_*4/5; lgth:dimen_*2/3; box::N; text::N')dnl
+ ifelse(`$3',,
+ `line from last line.end to last line.start
+ { ifelse(m4name,,,m4name:) [S:Here
+ { ifelse(m4name,,,m4name:) lbox(m4lgth,m4wdth) }
+ { line to rvec_(m4lgth/2, m4wdth/2)
+ line to rvec_(m4lgth/2,-m4wdth/2)
+ line to rvec_(-m4lgth/2,-m4wdth/2)
+ line to rvec_(-m4wdth/2, m4wdth/2) }
+ { line from rvec_(0,m4wdth/2) to rvec_(m4lgth,-m4wdth/2) }
+ line from rvec_(0,-m4wdth/2) to rvec_(m4lgth,m4wdth/2)
+ ] with .S at last line.start } ',
+ `m4br_one(`sl_grid',`$1',`$2',m4brk_(`$3',Bgr))') ')
+
+ `sl_load( stem linespec, keys, breaker )
+ keys: name=Name; lgth=expr; wdth=expr;
+ head= arrowhead attributes;'
+ `default breaker name Bl'
+define(`sl_load',
+ `sl_eleminit_(`$1')
+ setkeys_(`$2',`name::N; wdth:dimen_*0.32; lgth:dimen_*0.45; head::N')dnl
+ ifelse(`$3',,
+ `line from last line.end to last line.start
+ { ifelse(m4name,,,m4name:) [S:Here; line to rvec_(0,m4wdth/2) \
+ then to rvec_(m4lgth,0) then to rvec_(0,-m4wdth/2) \
+ then to Here m4head ] with .S at last line.start } ',
+ `m4br_one(`sl_load',`$1',`$2',m4brk_(`$3',Bl))') ')
+
+ `sl_meterbox( stem linespec, keys, breaker )
+ keys: sl_box attributes'
+ `default breaker name Bm'
+define(`sl_meterbox',
+ `sl_eleminit_(`$1')
+ setkeys_(`$2',`name::N; wdth:dimen_*2/3; lgth:dimen_*2/3; box::N; text::N')dnl
+ ifelse(`$3',,
+ `line from last line.end to last line.start
+ {ifelse(m4name,,,m4name:) [S:Here;
+ { B: rotbox( m4lgth, m4wdth, m4box ) with .W at S }
+ a = rp_ang*rtod_
+ if (abs(a-90) < 45) || (abs(a-180) < 45) || (abs(a+180) < 45) then {
+ C: rvec_(m4lgth*2/5,0)
+ line from rvec_(m4lgth*4/5,m4wdth/2) to rvec_(m4lgth*4/5,-m4wdth/2) } \
+ else { C: rvec_(m4lgth*3/5,0)
+ line from rvec_(m4lgth/5,m4wdth/2) to rvec_(m4lgth/5,-m4wdth/2) }
+ ifelse(m4text,,,`m4text at C')
+ ] with .S at last line.start}',
+ `m4br_one(`sl_meterbox',`$1',`$2',m4brk_(`$3',Bm))') ')
+
+ `sl_generator( stem linespec, keys, breaker )'
+ `default breaker name Bd'
+define(`sl_generator',`sl_disk($@)
+ { ACsymbol(at last circle,,,R)
+ m4lcd = last circle.diam
+ [ box invis wid_ m4lcd ht_ m4lcd ] at last circle } ')
+
+ `sl_syncmeter( stem linespec, keys, breaker )'
+ `default breaker name Bd'
+define(`sl_syncmeter',`sl_disk($@)
+ { Syncsymb(at last circle)
+ m4lcd = last circle.diam
+ [ box invis wid_ m4lcd ht_ m4lcd ] at last circle } ')
+
+ `sl_lamp( stem linespec, keys, breaker )'
+ `default breaker name Bd'
+define(`sl_lamp',`sl_disk($@)
+ { line from last circle.ne to last circle.sw
+ line from last circle.nw to last circle.se
+ m4lcd = last circle.diam
+ [ box invis wid_ m4lcd ht_ m4lcd ] at last circle } ')
+
+# One-terminal utilities ##################################################
+
+ `Syncsymb(at position, rad)
+ Symbol for sync meter'
+define(`Syncsymb',`[ define(`m4ssrad',`ifelse(`$2',,(dimen_/4),`($2)')')dnl
+ Origin: Here
+ {arc <-> ht arrowht/2 wid arrowwid*2/3 \
+ from Rect_(m4ssrad,30) to Rect_(m4ssrad,150) with .c at Here}
+ line from (0,m4ssrad) to (0,-m4ssrad/2)
+ `$3' ] with .Origin ifelse(`$1',,`at Here',`$1')')
+
+ `m4br_one( `name', stem linespec, body keys,
+ breaker keys )'
+ `Draw the breaker in the stem then the element'
+define(`m4br_one',
+ `M4_S: last line.start
+ setkey_(`$4',lgth,brksiz_)dnl
+ line from M4_S to last line.end+vec_(-(m4lgth)*5/2,0)
+ sl_breaker(to rvec_(m4lgth,0),`$4')
+ $1(to rvec_((m4lgth)*3/2,0),`$3')
+ move to M4_S ')
+
+ `sl_eleminit_(linespec or (for zero length)
+ U|D|L|R|number [at location])'
+define(`sl_eleminit_',
+ `ifelse(regexp(`$1',^ *[UDLR0123456789]),-1,
+ `eleminit_(`$1',dimen_)',
+ `pushdef(`M4pos',`ifinstr(`$1',` at ',`patsubst(`$1',^.* at *)')')dnl
+ ifelse(M4pos,,,`move to M4pos;') setdir_(patsubst(`$1',` at.*'))
+ line invis from Here to Here popdef(`M4pos')')')
+
+# Two-terminal elements ###################################################
+
+ `sl_transformer(linespec,keys,
+ input breaker keys, output breaker keys)
+ keys:
+ type=I|S
+ (type=I) scale=expr; (default 1.5)
+ cycles=n; (default 4)
+ (type=S) body=shaded "color";
+ name=Body name;
+ (breaker default names BrI, BrO)'
+define(`sl_transformer',
+ `setkeys_(`$2',name::N; type:I:N; cycles:4:N; body::N; scale:1.5:; )dnl
+ ifelse(`$3'`$4',,
+ `ifinstr(m4type,S,
+ `source(`$1',G,,,m4body)',
+ `eleminit_(`$1'); m4atmp = rp_ang; m4slen = rp_len
+ define(`m4swd',`dimen_*3/16*m4scale')dnl
+ { line to rvec_((m4slen-m4swd)/2,0)
+ {ifelse(m4name,,SL_box,m4name): [ linewid = linewid*m4scale
+ {L1: inductor(to vec_(0,-m4cycles*dimen_/8),,m4cycles)}
+ {point_(m4atmp)
+ L2: inductor(from vec_(dimen_*3/16,-m4cycles*dimen_/8) \
+ to vec_(dimen_*3/16,0),,m4cycles)}
+ C2: last line.c; point_(m4atmp) ] with .L1.c at Here}
+ line from rvec_(m4swd,0) to rvec_((m4slen+m4swd)/2,0) }
+ line invis to rvec_(rp_len,0)') ',
+ `m4br_two(`sl_transformer',`$1',`$2',m4brk_(`$3',BrI),m4brk_(`$4',BrO),
+ ifelse(`$3',,,I)`'ifelse(`$4',,,O))') ')
+
+ `Two-terminal box'
+ `sl_ttbox(linespec,keys,breaker keys,breaker keys)
+ keys= lgth=expr; wdth=expr; box=attributes;
+ supp=additional rotbox commands; name=Body name;
+ text="text";
+ (breaker default names BrI, BrO)'
+define(`sl_ttbox',
+ `setkeys_(`$2',`lgth:dimen_*3/4; wdth:dimen_*3/4;
+ name::N; box::N; text::N; supp::N')dnl
+ ifelse(`$3'`$4',,
+ `eleminit_(`$1')
+ {line to rvec_((rp_len-m4lgth)/2,0)
+ {ifelse(m4name,,,m4name:)rotbox(m4lgth,m4wdth,m4box,,m4supp) \
+ with .W at Here }
+ {ifelse(m4text,,,`{m4text at rvec_(m4lgth/2,0)}') }
+ line from rvec_(m4lgth,0) to rvec_((rp_len+m4lgth)/2,0)}
+ line invis to rvec_(rp_len,0) ',
+ `m4br_two(`sl_ttbox',`$1',`$2',m4brk_(`$3',BrI),m4brk_(`$4',BrO),
+ ifelse(`$3',,,I)`'ifelse(`$4',,,O))') ')
+
+define(`m4brk_',`ifelse(`$1',,,
+ `ifelse(`$1',C,,`$1',O,box=fill 0,`$1')`'ifelse(`$2',,,;name=`$2')')')
+
+ `sl_rectifier(ttbox args)'
+define(`sl_rectifier',
+ `sl_ttbox(`$@')
+ { line from last [].Line.ne to last [].Line.sw
+ AC: ACsymbol(at last [].C+(-m4lgth/6, m4wdth/4),,,R)
+ DC: DCsymbol(at 2nd last [].C+( m4lgth/6,-m4wdth/4),,,R) } ')
+
+ `sl_inverter(ttbox args)'
+define(`sl_inverter',
+ `sl_ttbox(`$@')
+ { line from last [].Line.ne to last [].Line.sw
+ DC: DCsymbol(at last [].C+(-m4lgth/6, m4wdth/4),,,R)
+ AC: ACsymbol(at 2nd last [].C+( m4lgth/6,-m4wdth/4),,,R) } ')
+
+ `sl_breaker(linespec, type=[A|C][D]; ttbox keys)
+ C is for curved breaker
+ D is for sl_drawout'
+define(`sl_breaker',
+ `setkeys_(`$2',`lgth:brksiz_; wdth:brksiz_; name::N; type::N')dnl
+ ifinstr(m4type,C,
+ `ifinstr(m4type,D,
+ `m4ch_two(`cbreaker',`$1')',
+ `ifelse(m4name,,,m4name:) cbreaker(`$1')')',
+ `ifinstr(m4type,D,
+ `m4ch_two(`sl_ttbox',`$1',lgth=m4lgth;wdth=m4wdth;`$2';name=Br)',
+ `sl_ttbox(`$1',lgth=m4lgth;wdth=m4wdth;`$2')') ') ')
+
+ `sl_reactor(linespec,keys,breaker keys,breaker keys)
+ keys=
+ diam=expr,
+ (Default breaker names BrI and BrO)'
+define(`sl_reactor',
+ `setkeys_(`$2',`diam:sourcerad_*4/3; type::N')dnl
+ ifelse(`$3'`$4',,
+ `eleminit_(`$1')
+ { line to rvec_(rp_len/2,0) then to rvec_(rp_len/2,-m4diam/2); round
+ arc rad m4diam/2 cw from Here to rvec_(m4diam/2,m4diam/2) \
+ with .c at rvec_(0,m4diam/2); round
+ line to rvec_(rp_len/2-m4diam/2,0) }
+ {[ box invis ht m4diam wid m4diam ] at rvec_(rp_len/2,0)}
+ line invis to rvec_(rp_len,0) ',
+ `m4br_two(`sl_reactor', `$1', lgth=m4diam*2;`$2',
+ m4brk_(`$3',BrI),m4brk_(`$4',BrO),ifelse(`$3',,,I)`'ifelse(`$4',,,O))')')
+
+ `sl_busbar( linespec, nports, keys )
+ Labels P1, P2 ... Pnports are defined on the line.
+ keys: line=line attributes;
+ port=D; (dotted ports)
+ The bus extends beyond the first and last points
+ by dimen_/5 which can be redefined as
+ line=chop -(expr)'
+define(`sl_busbar',
+ `define(`m4npoints',`ifelse(`$2',,2,`$2')')dnl
+ setkeys_(`$3',`line:thick 1.6 chop -dimen_/5:N; port::N')dnl
+ [ tmp_ang = rp_ang
+ eleminit_(`$1',(m4npoints-1)*dimen_)
+ Start: last line.start; End: last line.end
+ for_(1,m4npoints,1,
+ `P`'m4x: (m4x-1)/(m4npoints-1) between Start and End dnl
+ ifinstr(m4port,D,` ;dot(at P`'m4x)')')
+ Line: line from Start to End m4line
+ Start: last line.start; End: last line.end
+ point_(tmp_ang) ] ')
+
+ `sl_drawout(linespec, keys, R)
+ Drawout (i.e. plugin) chevron element;
+ keys: type=T; (truncated leads)
+ lgth=expr; (body size)
+ wdth=expr;
+ name=Name; (body name)
+ line= line attributes (e.g. thick 2)
+ arg3=R reverse direction'
+define(`sl_drawout',
+ `setkeys_(`$2',`lgth:drosiz_; wdth:drosiz_; type::N; name::N; line::N')dnl
+ eleminit_(`$1',ifelse(m4type,T,m4lgth))
+ ifelse(`$3',R,`{M4ds: Here; move to last line.end; rp_ang = rp_ang+pi_')
+ {line to rvec_(rp_len/2,0)
+ ifelse(m4name,,,m4name:) [
+ S: Here; {line from rvec_(-m4lgth/2,m4wdth/2) to Here then
+ to rvec_(-m4lgth/2,-m4wdth/2) m4line }
+ E: rvec_(m4lgth/2,0); line from rvec_(0,m4wdth/2) to E then
+ to rvec_(0,-m4wdth/2) m4line ] with .S at Here
+ ifelse(m4type,T,,
+ line from last [].E to last [].E+vec_((rp_len-m4lgth)/2,0))}
+ ifelse(`$3',R,`rp_ang = rp_ang-pi_; move to M4ds}')
+ line invis to rvec_(rp_len,0) ')
+
+# Two-terminal utilities ##################################################
+
+ `Breakers in the input and output lines:'
+ `m4br_two(`2-term element macroname in quotes',
+ linespec, body keys,
+ input breaker keys,
+ output breaker keys,
+ I|O|IO)'
+ `(Default breaker names are BrI and BrO)'
+define(`m4br_two',
+ `define(`m4il',`ifinstr(`$6',I,`setkey_(`$4',lgth,brksiz_) m4lgth',0)')dnl
+ define(`m4ol',`ifinstr(`$6',O,`setkey_(`$5',lgth,brksiz_) m4lgth',0)')dnl
+ define(`m4bl',`setkey_(`$3',lgth,dimen_*4/3) m4lgth')dnl
+ eleminit_(`$2',dimen_*3)
+ M4start: Here; M4end: last line.end
+ M4cc: last line.c+vec_(((m4il*3/2)-(m4ol*3/2)),0)
+ M4ii: M4cc+vec_(-min((m4bl/2+m4il/2),distance(M4start,M4cc)-m4il),0)
+ line from M4start to ifinstr(`$6',I,
+ `M4ii+vec_(-m4il,0); sl_breaker(to M4ii,`$4';name=BrI)',M4ii)
+ M4oi: M4cc+vec_(min((m4bl/2+m4ol/2),distance(M4end,M4cc)-m4ol),0)
+ $1(from M4ii to M4oi,`$3')
+ ifinstr(`$6',O,`sl_breaker(to M4oi+vec_(m4ol,0),`$5';name=BrO)')
+ line to M4end
+ line invis from M4start to M4end ')
+
+ `Chevrons in the input and output lines:'
+ `m4ch_two(`2-term element macroname in quotes',
+ linespec, body keys,
+ input breaker keys,
+ output breaker keys,
+ I|O|IO)'
+define(`m4ch_two',
+ `define(`m4bl',`setkey_(`$3',lgth,dimen_*3/8) m4lgth')dnl
+ eleminit_(`$2',dimen_*3)
+ M4start: Here; M4end: last line.end
+ M4elem: $1(to rvec_(m4bl+2*drosiz_,0) with .c at last line.c,`$3')
+ sl_drawout(from last line.start-vec_(drosiz_,0) to last line.start,type=T,R)
+ line from last line.start to M4start
+ sl_drawout(from M4elem.end to M4elem.end+vec_(drosiz_,0),type=T)
+ line to M4end
+ line invis from M4start to M4end')
+
+# Composite elements ###################################################
+
+ `sl_ct( at position, stem length, U|D|L|R|expr,
+ scale=expr) (default scale is 1.5)'
+define(`sl_ct',
+ `[ setdir_(`$3'); setkey_(`$4',scale,1.5); linewid = linewid*m4scale
+ L: inductor(to vec_(2*dimen_/8,0),,2)
+ stemlen = ifelse(`$2',,dimen_/5,`$2')
+ line from L.start to L.start+vec_(0,-stemlen)
+ Ts: Here
+ line from L.end to L.end+vec_(0,-stemlen)
+ Te: Here
+ line from L.c to L.c+vec_(0,-stemlen)
+ Tc: Here
+ resetdir_ ] with .L.c at ifelse(`$1',,Here,patsubst(`$1',^ *at *)) ')
+
+# #######################################################################
+
+divert(0)dnl
+
+
+ u = dimen_
+
+ svg_font(sans-serif,9.0bp__,textoffset)
+
+define(`ctb',`[CT: sl_ct(,,`$1')
+ L: line up_ u/2 with .c at CT.L.c
+ BU: sl_breaker( up_ u*2/3,box=fill_(0))
+ BR: sl_breaker( right_ ifelse(`$1',U,,-)u*3/4 \
+ from CT.ifelse(`$1',U,Te,Ts),box=fill_(0))]')
+
+define(`tsbx',`sl_ttbox(`$1',`$2';lgth=u*0.4;wdth=u/2;text="TS")')
+define(`lcdiam',u*0.85)
+define(`lcirc',`[C: circle diam lcdiam ifelse(`$1',,,`$1')
+ line right C.diam*3/4 with .c at C
+ ifelse(`$2',,,`$2' at C.ne above )
+ ifelse(`$3',,,`$3' at C.se below )
+ ]')
+
+define(`Svee',`[S: Here; line from (sqrt(3),1)*(`$1') to S \
+ then to (sqrt(3),-1)*(`$1')]')
+
+Box1: [
+ V: line down_ u
+ {`"13.8 kV 3 ph + GND 60 Hz"' at V.start rjust}
+ { ellipse wid u/6 ht u/10 at Here+(0,u/3)
+ line right_ u/2 from last ellipse.e
+ ellipse wid u*4/3 ht u/2 "M1-00" }
+ AT: open_arrow(ToPos(,U,u), u/3*sqrt(3)/2, u/3)
+ dot(at 2nd last line.start)
+ { line left_ u then up_ u/3 ht u/10 wid u/10; dot }
+ line down_ u
+ { line up_ u/2 from last line.end+(-u/6,u/8)
+ sl_disk( left_ u/2 from last line.c,diam=u/3;name=L ); move to L.c
+ for_(45,315,90,`{line to L.c+(Rect_(L.diam,m4x)) chop u/5 chop 0}') }
+ T: dot
+ { sl_transformer(right_ 2*u,cycles=2;name=Tr1)
+ {"14400:120` 'V" at last [].n above}
+ { Svee(u/7) with .ne at Tr1.sw+(-u/15,-u/15)
+ Svee(u/7) with .nw at Tr1.se+( u/15,-u/15); ground(at last [].S) }
+ dot; fuse(right_ u,C)
+ line to (Here,1st ellipse)
+ MB: box wid 3/4*u ht 3/4*u with .sw at Here+(-u/8,0)
+ circle diam 5/8*u at last box "M" }
+ line down u/2
+ CT1: ctb(U) with .BU.end at Here
+ {"500:5" rjust at CT1.CT.w }
+ { Svee(u/7) with .S at CT1.CT.Ts+( u/4,0); ground(at last [].S) }
+ line from MB.se+(-u/8,0) down_ MB.s.y-CT1.BR.y then to CT1.BR.end
+ line from CT1.L.start down_ 3/4*u
+ T2: dot
+ { line left_ u from T2; sl_drawout(,type=T,R); fuse(left_ u,C)
+ sl_transformer(left_ u/2,cycles=2;name=Tr2)
+ {"14400:120` 'V" at last [].n above}
+ {Ysymbol(with .ne at Tr2.sw+(u/8,0),type=G;size=u/6)}
+ {Ysymbol(with .nw at Tr2.se+(u/15,0),type=G;size=u/6)}
+ fuse(left_ u,C); sl_drawout(,type=T)
+ TS1: tsbx(left_ u*3/4) }
+ CT2: ctb(U) with .BU.end at Here
+ {"800:5" rjust at CT2.CT.w }
+ {Ysymbol(at CT2.CT.Ts+(u/2,-u/8),type=G;size=u/5)}
+ sl_breaker(up_ 2.0*u with .end at CT2.L.start,
+ lgth=u*0.75;wdth=u*0.8;name=M1;type=D)
+ {`"52-M1" "1200 A"' at M1}
+ CT3: ctb(D) with .BU.end at last line.start
+ {"800:5" ljust at CT3.CT.e }
+ BT3: CT3.BR.end
+ {Ysymbol(at CT3.CT.Te+(-u/2,-u/8),type=G;size=u/5)}
+ CT4: ctb(D) with .BU.end at CT3.L.start
+ {"600:5 MR" ljust at CT4.CT.e }
+ {Ysymbol(at CT4.CT.Te+(-u/2,-u/8),type=G;size=u/5)}
+ line from CT4.L.start down_ u; dot;
+ { line left_ u then up_ u/3 ht u/10 wid u/10; dot }
+ AB: arrow down_ u*2/3 ht u/3*sqrt(3)/2 wid u/3
+ tsbx(left_ u from CT3.BR.end,text="SB")
+ line to (TS1.start,Here)
+ tsbx(left_ u*3/4); line left_ u/2+lcdiam/2 then up_ u/5
+ CEDR3: lcirc("59" "M1","(3)") with .C.s at Here
+ Q: line left_ u*3/4 from CEDR3.C.w
+ { line left_ u/8 from Q.c+(u/8,CEDR3.C.rad) \
+ then down_ CEDR3.C.diam then right_ u/8 }
+ CEDR4: lcirc("22" "M1","(1)") with .C.e at Here
+ { arrow right_ 3/2*u from CEDR3.C.e
+ lcirc("86" "M1","(1)") with .C.w at Here
+ arrow right_ u from last [].C.e
+ "TRIP M1" ljust above "TRIP S1" ljust }
+ { CEDR1: lcirc("59" "M1",,"(3)") with .C.w at (Q.c,T2)
+ { line from TS1.end to CEDR1.C.e }
+ CEDR2: lcirc("22" "M1",,"(3)")
+ arrow up u*2/3 from (CEDR2.e.x,CEDR2.n.y+u/3)
+ "TRIP S1" above; "TRIP M1" at last "".n above
+ move to last arrow.start
+ line from CEDR2.n to (CEDR2,Here) then to (CEDR1,Here) then to CEDR1.n
+ }
+ EDR5000: box wid TS1.end.x-CEDR4.C.w.x-u/8 ht last arrow.y-CEDR4.C.s.y+u/2 \
+ with .n at last arrow "EDR-5000-M1"
+ M2: box wid u*1.1 ht u*0.85 at (TS1,CT4.BR) "PXM6000" "METER"
+ { line from M2.e to CT4.BR.end }
+ line from M2.w left_ u*3/4
+ BT: dot
+ line to (EDR5000.w,Here)+(-u/5,0); Lft: Here
+ continue to (Here,CEDR2.C) then to CEDR2.C.w
+ Head: line down_ u*3/4 from AB.end
+ { ellipse wid u/6 ht u/10 at Here+(0,u/3)
+ line left_ u/2 from last ellipse.w
+ ellipse wid u*4/3 ht u/2 "M1-00" }
+ { line right_ u*3/4 then down_ u/8;
+ {line right_ u/10 with .c at Here}
+ {line right_ u/10 with .c at Here+(0,-u/8)}
+ pushdef(`dimen_',u/2) ground(at last line.c) popdef(`dimen_') }
+ { line down_ u/8 from Here+(u/2,0)
+ { pushdef(`dimen_',u/2) ground(at Here+(0,-u/8)) popdef(`dimen_') }
+ pushdef(`dotrad_',dotrad_/2) gap(down_ u/8,1) popdef(`dotrad_') }
+ BB: arrow <- down_ u/2 ht u/3*sqrt(3)/2 wid u/3
+ sl_transformer(down_ u,name=Tr3)
+ { CUR2: lcirc("21" "T1",,"(1)") with .C.c at Tr3.e+(u,0)
+ CUR3: lcirc("49" "T1",,"(1)") with .C.w at CUR2.C.e
+ CUR1: lcirc("21" "T1","(1)") with .C.c at CUR2.C.c+(Rect_(CUR2.C.diam,60))
+ }
+ line from BT to (BT.x,AB.y+u/10); X: Here; corner
+ CT5: ctb(U) with .BU.end at Tr3.L2.end
+ {"600:5" ljust below at CT5.CT.e }
+ corner(,at CT5.CT.Ts); ground
+ line from CT5.BR.end to (CUR3.C.e,CT5.BR.end)+(u/6,0)
+ continue to (Here,X)
+ tsbx(up_ u*4/3)
+ CUR5: lcirc("51G" "T1","(1)") with .C.s at Here
+ CUR6: lcirc("87" "T1","(1)") with .C.c at CUR5.C.c+(2*u,0)
+ arrow up_ u*2/3 from CUR5.C.n
+ CUR4: lcirc("86" "T1","(1)") with .C.s at Here
+ arrow up_ u*2/3 from CUR4.C.n
+ arrow <- from CUR4.C.w left CUR4.C.w.x-CUR1.C.x; corner
+ J2: line to CUR1.C.n
+ arrow from CUR6.C.w left_ u/3 then up_ CUR4.C.y-CUR6.C.y then to CUR4.C.e
+ tsbx(up_ u from CUR6.C.n)
+ line to (Here,CT2.BR) then to CT2.BR.end
+ crossover(from X to (CUR5,X)-(u*2/3,0),L,AB,J2); corner
+ tsbx(up_ u*4/3); dot
+ ETR5000: box wid CUR6.C.e.x-CUR1.C.x + u/5 ht CUR5.C.diam+u/2 \
+ with .nw at (CUR1.C.n.x-u/8,CUR5.C.n.y+u/6)
+ {" ETR-5000-T1" wid 72bp__ at ETR5000.s above }
+ AL: arrow from Tr3.L2.c down_ u ht u/3*sqrt(3)/2 wid u/3; BX: Here
+ { line down_ u*2/3 from Here+( u/12,0) }
+ { line down_ u*2/3 from Here+(-u/12,0) }
+ { line down_ u*2/3; Bbot: Here }
+ { ellipse wid u/6 ht u/10 at Here+(0,-u/6)
+ line left_ u/2 from last ellipse.e
+ ellipse wid u*2 ht u/2 `"2000 A BUSWAY"' }
+ line from (CUR6,Bbot) to (CUR6,X); tsbx(to CUR6.C.s)
+ Outer: box ht AT.end.y-AB.end.y wid ETR5000.e.x-Lft.x + u/3 \
+ with .nw at (Lft.x-u/6,AT.end.y)
+ `"USG-1A"' ljust \
+ `"13.8 KV 1200 A"' ljust \
+ `"50 kA SYM S.C."' ljust \
+ `"(15 kV - 95 kV BIL RATED)"' ljust at Outer.nw+(0,-u*2/3)
+ ]
+
+ command "</g>"
+
+.PE
diff --git a/graphics/circuit_macros/examples/svg/EscherSVG.m4 b/graphics/circuit_macros/examples/svg/EscherSVG.m4
new file mode 100644
index 0000000000..191123754e
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/EscherSVG.m4
@@ -0,0 +1,188 @@
+.PS
+# EscherSVG.m4
+# https://tex.stackexchange.com/questions/129274/showcase-of-optical-illusions-made-with-tex-latex-luatex-context
+threeD_init
+[
+ u=1/2.54 # unit size; could use scale for this
+
+ define(`treadcolor',`0.8,0.75,0.7')
+ define(`darkgrn',`.1,.1,0')
+ define(`lightgrn',`.7,.7,.6')
+
+ define(`northsteps',3)
+ define(`eaststeps',8)
+ define(`southsteps',7)
+ define(`weststeps',4)
+ define(`baselayers',10)
+ define(`eb',eval(baselayers+eaststeps))
+ define(`ebs',eval(eb+southsteps))
+ define(`under',7)
+
+ azimuth = -45 # view angles
+ elevation = 25
+ setview(azimuth,elevation,0)
+ # projected unit vectors
+ UX: Project(u,0,0)
+ UY: Project(0,-u,0)
+ UZ: Project(0,0,u)
+ # layer thickness in units of u
+ f= -(eaststeps*UX.y + southsteps*UY.y - weststeps*UX.y - northsteps*UY.y)/dnl
+ ((eaststeps+southsteps+weststeps+northsteps)*UZ.y)
+ # XY projection of 3D coords in units of u
+define proj {UX*($1)+UY*($2)+UZ*($3)}
+
+define tread {line from UY/2 \
+ to UY then to UY+UX then to UX then to (0,0) \
+ then to UY/2 shaded rgbstring(treadcolor) \
+ with .start at proj($1,$2,$3)+UY/2 }
+
+define wrect {line invis from (0,0) to UX*($4) \
+ then to UX*($4)+UZ*($5) \
+ then to UZ*($5) then to (0,0) with .start at proj($1,$2,$3) \
+ shaded rgbstring(r,g,b)}
+
+define srect {line invis from (0,0) to UY*($4) then to UY*($4)+UZ*($5) \
+ then to UZ*($5) then to (0,0) with .start at proj($1,$2,$3) \
+ shaded rgbstring(r,g,b) }
+ # color blending
+define(`blendwht',`between3D(`$1',`$2',`$3',`$4',1,1,1)')
+define makergb { r = $1; g = $2; b = $3 }
+define dorgb { gg = $2
+ if $1==0 then { makergb(blendwht(gg,lightgrn)) } \
+ else { makergb(blendwht(gg,darkgrn)) } }
+
+# East
+ for i=-under to baselayers do {
+ dorgb((i%2),0.2)
+ wrect(1,1,i*f,eaststeps-2,-f) }
+ for i=0 to eaststeps do {
+ dorgb((i%2),0.2)
+ wrect(i,1,(baselayers+i)*f,(eaststeps+1-i),-f)
+ tread(i,0,(baselayers+i)*f)
+ line from proj(i,1,(baselayers+i)*f) \
+ to proj(i,1,(baselayers-1+i)*f) }
+# South
+ for i=0 to eb do {
+ dorgb((i%2),0.4)
+ srect(eaststeps+1,0,i*f,southsteps+1,-f) }
+ for i=1 to southsteps do {
+ dorgb((i%2),0.4)
+ srect(eaststeps+1,i,(eb+i)*f,(southsteps+1-i),-f)
+ tread(eaststeps,i,(eb+i)*f)
+ line from proj(eaststeps+1,i,(eb+i)*f) \
+ to proj(eaststeps+1,i,(eb+i-1)*f) }
+# North
+ for i=-under to baselayers-northsteps-1 do {
+ dorgb((i%2),0.1)
+ srect(1,1,i*f,northsteps-1,-f) }
+ for i=1 to northsteps do {
+ dorgb((i%2),0.1)
+ srect(1,1,(baselayers-i)*f,i,-f)
+ wrect(0,1+i,(baselayers-i)*f,1,-f)
+ line from proj(0,1+i,(baselayers-i)*f) \
+ to proj(0,1+i,(baselayers-i-1)*f)
+ line from proj(1,1+i,(baselayers-i)*f) \
+ to proj(1,1+i,(baselayers-i-1)*f)
+ tread(0,i,(baselayers-i)*f) }
+# West
+ for i=0 to ebs do {
+ dorgb((i%2),0.4)
+ wrect(eaststeps+1,southsteps+1,i*f,-(weststeps+1),-f) }
+ for i=0 to weststeps-1 do {
+ dorgb((i%2),0.4)
+ wrect(eaststeps-i,southsteps+1,(ebs+i+1)*f,-(weststeps-i),-f,)
+ srect(eaststeps-i,southsteps,(ebs+i+1)*f,1,-f)
+ if i!=weststeps-1 then {
+ line from proj(eaststeps-i,southsteps,(ebs+i+1)*f) \
+ to proj(eaststeps-i,southsteps,(ebs+i)*f) }
+ line from proj(eaststeps-i,southsteps+1,(ebs+i+1)*f) \
+ to proj(eaststeps-i,southsteps+1,(ebs+i)*f)
+ tread(eaststeps-(i+1),southsteps,(ebs+i+1)*f) }
+# Corner lines
+ define(`dgreen',`outlined rgbstring(blendwht(0.2,darkgrn))')
+ line dgreen from proj(1,1,(baselayers-1)*f) to proj(1,1,-under*f)
+ line dgreen from proj(eaststeps+1,southsteps+1,ebs*f) \
+ to proj(eaststeps+1,southsteps+1,-f)
+ line dgreen from proj(0,northsteps+1,(baselayers-northsteps)*f) \
+ to last line.end-UX*(weststeps+1) then to last line.end \
+ then to proj(eaststeps+1,0,-f) then to proj(eaststeps+1,0,eb*f)
+ ]
+
+ifelse(1,1,`
+[
+ setview(-45,20)
+ bwid = 2.8
+ bh = 1.5
+ bdp = 1.8
+ bth = 0.3
+ A: Project(0,0,0)
+ AA: A+Project(bth,bth,-bth)
+ B: Project(0,bwid,0)
+ BB: B+Project(bth,-bth,-bth)
+ C: Project(bdp,bwid,0)
+ D: Project(bdp,0,0)
+ E: Project(0,0,-bh)
+ F: Project(bdp,0,-bh)
+ G: Project(bdp,bwid,-bh)
+ H: B + Project(0,0,-bh)
+
+ line from A to B then to C then to D then to A then to E then to F \
+ then to G then to H then to E
+ line from C to G
+ line from A+Project(bth,bth,0) to B+Project(bth,-bth,0) \
+ then to C+Project(-bth,-bth,0)
+ L1: line to D+Project(-bth,bth,0)
+ L2: line to A+Project(bth,bth,0)
+ L4: line from E+Project(bth,bth,0) to H+Project(bth,-bth,0)
+ L3: line to C+Project(-bth,-bth,-bh)
+ line to F+Project(-bth,bth,0) then to A+Project(bth,bth,-bh)
+
+ L5: line from D+Project(-bth,0,-bth) to A+Project(bth,0,-bth)
+ line to E+Project(bth,0,bth)
+ L6: line to Here+Project(0,bwid-2*bth,0)
+ L7: line from D+Project(0,bth,-bth) to C+Project(0,-bth,-bth)
+ line to G+Project(0,-bth,bth)
+ L8: line to Here+Project(-bdp+2*bth,0,0)
+ Tmp: line invis from L8.start+Project(-bth,0,0) up bh
+ line from Tmp.start to Intersect_(Tmp,L7)
+ Tmp: line invis from L8.end up bh
+ line from L8.end to Intersect_(Tmp,L7)
+ line from Intersect_(Tmp,L1) to BB+Project(bth,0,0)
+ Tmp: line invis to Here+Project(bdp,0,0)
+ line from Tmp.start to Intersect_(Tmp,L1)
+
+ Tmp: line invis from H up bh
+ line from H to Intersect_(Tmp,L7)
+ line from Intersect_(Tmp,L1) to B+Project(bth,-bth,0)
+
+ Tmp: line invis from AA to AA+Project(0,bwid,0)
+ Tmp2: line invis up bh from L6.end
+ line from Intersect_(Tmp,L2) to Intersect_(Tmp2,Tmp) \
+ then to Intersect_(Tmp2,L1)
+ line from L6.end to Intersect_(Tmp2,L7)
+
+ Tmp: line invis down bh from AA
+ line from Intersect_(Tmp,L6) to Intersect_(Tmp,L5)
+
+ Tmp: line invis down bh from D
+ line from D to Intersect_(Tmp,L6)
+ line from Intersect_(Tmp,L4) to F+Project(-bth,bth,0)
+
+ Tmp: line invis from L5.start to L5.start+Project(0,0,-bh)
+ move to E+Project(0,2*bth,0)
+ Tmp2: line invis to Here+Project(bdp,0,0)
+ line from L5.start to Intersect_(Tmp,L6)
+ line from Intersect_(Tmp,L4) to Intersect_(Tmp,Tmp2) \
+ then to Intersect_(Tmp2,L4)
+
+ Tmp: line invis from L7.start to L7.start+Project(0,0,-(bh-bth))
+ line from L7.start to Intersect_(Tmp,L6)
+
+ move to G+Project(-2*bth,0,0)
+ Tmp2: line invis to Here+Project(0,-bwid,0)
+ line from Intersect_(Tmp2,L3) to Intersect_(Tmp,Tmp2)
+ line from Intersect_(Tmp,L4) to Intersect_(Tmp2,Tmp)
+
+] with .sw at last [].se+(0.2,0)
+')
+.PE
diff --git a/graphics/circuit_macros/examples/svg/GeometrySVG.m4 b/graphics/circuit_macros/examples/svg/GeometrySVG.m4
index ae0a661012..bb6ff0bd2a 100644
--- a/graphics/circuit_macros/examples/svg/GeometrySVG.m4
+++ b/graphics/circuit_macros/examples/svg/GeometrySVG.m4
@@ -3,6 +3,8 @@
gen_init
scale = 5/4
+G: [
+
A: Here; "A" at A above
B: A+(-1,-3.5); "B" at B below rjust
C: B+(4.6,0); "C" at C below ljust
@@ -42,5 +44,167 @@ gen_init
line dashed from X to Y chop -linewid/2
RightAngle(A,Z,Y)
+ ] scaled 0.8
+Lyap: [
+#.PS
+# Lyap.m4
+threeD_init
+#scale = 1/1.2
+
+viewaz = 30
+viewel = 18
+setview(viewaz,viewel)
+
+Origin: Project(0,0,0)
+# Components of view vector W
+w1 = view3D1
+w2 = view3D2
+w3 = view3D3
+# Shape factor of the ellipse on the xy plane
+q = Cos(40)
+
+# cost function
+h = 0.5
+c = 1
+# The projected ellipse is (x/q)^2 + y^2 = c.
+# The cost is v = c+h
+define(`vs',``$2'*q*cos(`$1'),`$2'*sin(`$1')')
+define(`vp',`vs(`$1',`$2'),0')
+define(`vx',`sum3D(vp(`$1',`$2'),0,0,h+(`$2')^2)')
+
+# The gradient of v is (2x/q, 2y, -1) and the line
+# separating front and back is W^T * grad(v) = 0
+# This line intersects the projected ellipse at
+# x1,y1 and x2,y2
+ ap = w2^2*q^2/w1^2+1
+ bp = -w2*w3*q^2/w1^2
+ cp = w3^2*q^2/4/w1^2-c
+ m = sqrt(bp^2-4*ap*cp)
+ y1 = (-bp+m)/ap/2 ; x1 = (w3-2*y1*w2)*q/2/w1
+ y2 = (-bp-m)/ap/2 ; x2 = (w3-2*y2*w2)*q/2/w1
+ t1 = atan2(y1,x1)
+ t2 = atan2(y2,x2)
+ theta1 = min(t1,t2)
+ theta2 = max(t1,t2)
+
+# tangent curve
+ nT = 11
+ for i = 0 to nT do {
+ y = y1 + (y2-y1)/nT*i
+ theta = atan2(y,(w3-2*y*w2)*q/2/w1)
+ r = y/sin(theta)
+ T[i]: Project(vx(theta,r))
+ }
+
+# front and back parts of the top curve
+ n = 12
+ for i = 0 to n do {
+ theta = theta1 + (theta2-theta1)/n*i
+ F[i]: Project(vx(theta,c))
+ Fp[i]: Project(vp(theta,c))
+ }
+ for i = 0 to n do {
+ theta = theta2 + (theta1+twopi_-theta2)/n*i
+ B[i]: Project(vx(theta,c))
+ Bp[i]: Project(vp(theta,c))
+ }
+
+# trajectory
+rotations = 1.55
+nx = 7
+thetas = 75*dtor_
+thetaf = thetas - rotations*twopi_
+rx = c*0.9
+beta = exp(log(.5)/20)
+
+define(`defX',` rx = `$5' ; np = np-1
+ ts = `$1' ; tf = `$2'
+ for i = 0 to `$3' do {
+ tha = ts + (tf-ts)*i/(`$3')
+ for thx = tha to -twopi_ by twopi_ do {}
+ `$4'[i]: Project(vx(thx,rx))
+ Xp[np]: Project(vp(thx,rx))
+ np = np+1
+ rx = beta*rx
+ }')
+
+np = 1
+defX(thetas,theta1,nx,X1,rx)
+defX(theta1,theta2-twopi_,nx,X2,rx/beta)
+defX(theta2-twopi_,theta1-twopi_,nx,X3,rx/beta)
+defX(theta1-twopi_,thetaf,5,X4,rx/beta)
+
+# First draw the inside back
+# B is the back curve
+# T is the outline
+ifpstricks(`
+\psset{gradbegin=lightgray,gradend=darkgray,gradlines=1000}
+\pscustom[fillstyle=gradient,gradmidpoint=0.7]{
+ fitcurve(B,n)
+ for i = 0 to nT do {TT[i]: T[nT-i] }
+ fitcurve(TT,nT)
+\relax} ',
+` fitcurve(B,n)
+ for i = 0 to nT do {TT[i]: T[nT-i] }
+ fitcurve(TT,nT) ')
+
+# Centre axis
+thinlines_
+line from Origin to Project(0,0,h)
+# F[0] is the leftmost point of the front curve
+line from F[0] to Fp[0]
+# F[n] is the rightmost point of the front curve
+line from F[n] to Fp[n]
+thicklines_
+
+# Now draw the outside front
+ifpstricks(`
+\newgray{gray1}{0.9}%
+\newgray{gray2}{0.4}%
+\psset{gradbegin=gray1,gradend=gray2,gradlines=1000}
+\pscustom[linewidth=0pt,fillstyle=gradient,gradmidpoint=0.99]{
+ fitcurve(F,n)
+ fitcurve(T,nT)
+\relax} ',
+` shade(1,fitcurve(F,n)
+ fitcurve(T,nT)) ')
+# T is the limit curve of visibility
+ fitcurve(T,nT)
+# F is the top front
+ fitcurve(F,n)
+# Front and back projections of the top on xy
+ fitcurve(Fp,n)
+ fitcurve(Bp,n)
+
+# The trajectory in pieces, to allow dashed parts
+ fitcurve(X1,nx)
+ fitcurve(X2,nx,dotted 0.025)
+ fitcurve(X3,nx)
+ fitcurve(X4,3,dotted 0.015)
+ arca(from X4[4] to X4[2],ccw,0.3,<-)
+
+# Projected trajectory
+ np = np-2
+ fitcurve(Xp,np-1)
+ arca(from Xp[np] to Xp[np-2],ccw,0.18,<-)
+ "svg_it(X(t))" at Xp[np]-(2bp__,0) ljust
+
+# Axes and vertical lines
+thinlines_
+ line from X1[0] to Xp[0]
+arrow from Origin to Project(1.5,0,0)
+"svg_it(x)`'svg_sub(1)" rjust below
+arrow from Origin to Project(0,1.5,0)
+"svg_it(x)`'svg_sub(2)" wid 10bp__ ljust
+line dashed from Project(0,0,h) to F[n/2] chop 0 chop arrowht/4
+arrow from F[n/2] to Project(0,0,2)
+"svg_it(v(X))" ljust
+
+"svg_it(0)" at Origin+(0,1 pt__) below
+"svg_Omega" at Project(0,0.9*c,0) above
+"svg_it(v(X) = c)" at (Project(vp(100*dtor_,c)))+(2bp__,0) above ljust
+
+#.PE
+ ] scaled 1.5 with .sw at last [].se+(0.5,0)
.PE
diff --git a/graphics/circuit_macros/examples/svg/GrayCodeSVG.m4 b/graphics/circuit_macros/examples/svg/GrayCodeSVG.m4
index 8d11969049..b878e63d8e 100644
--- a/graphics/circuit_macros/examples/svg/GrayCodeSVG.m4
+++ b/graphics/circuit_macros/examples/svg/GrayCodeSVG.m4
@@ -2,6 +2,7 @@
# Gray_code.m4
gen_init
+GrayCode: [
outer = 4
inner = 0.75
nbits = 10
@@ -17,4 +18,62 @@ C: circle diam outer
arcd(C,outer/2-(bit-0.5)*lthk,startang,endang) thick lthk/(1bp__)
}
}
+ ]
+Crossbar: [
+#.PS
+# Crossbar switch
+#gen_init
+ svg_font(sans-serif,11bp__)
+ circlerad = 0.12
+ boxwid = 0.18
+ boxht = 0.18
+ rathick = 1.5
+ rawd = rathick*4 bp__
+ raht = rawd*2
+ boxdist = boxwid*1.8
+
+`define bcoord {($2,-($1))*boxdist}'
+`define redarrow { arrow ht raht wid rawd thick rathick color "red" }'
+
+`define cbx {'
+ thinlines_
+ n = $+ - 1
+ for i=0 to n do {
+ line color "blue" from bcoord(i,0) to bcoord(i,n)
+ line color "blue" from bcoord(0,i) to bcoord(n,i)
+ C[i]: circle invis at bcoord(i,-1.5)
+ }
+ for i=0 to n do {
+ exec sprintf("col = $%g",i+1)
+ redarrow from C[i].e right 1.25*boxwid
+ redarrow from C[i].w+(-boxwid,0) right raht
+ for j=0 to n do {
+ B: box color "blue" shaded "yellow" at bcoord(i,j)
+ if j==col then {
+ line color "blue" from B.s to B.e
+ line thick rathick color "red" from C[i].e to B.w \
+ then to B.n then to (B.x,C[0].y+(2+j*2/3)*boxht)
+ continue to (C[j].x-(2+j*2/3)*boxht,Here.y)
+ continue to (Here,C[j]) then to C[j].w
+ } \
+ else {
+ line color "blue" from B.n to B.s
+ line color "blue" from B.w to B.e
+ }
+ }
+ }
+ thicklines_
+ for i=0 to n do {
+ circle thick 1.5 outlined "blue" shaded "yellow" at C[i] \
+ sprintf("ifpostscript(,ifsvg(,\large))%g",i)
+ }
+ }
+
+[
+ cbx(3,6,0,5,2,7,1,4)
+ ] at 4,4
+
+ command "</g>" # end font
+#.PE
+ ] with .w at last [].e+(0.25,0)
.PE
diff --git a/graphics/circuit_macros/examples/svg/InductorsSVG.m4 b/graphics/circuit_macros/examples/svg/InductorsSVG.m4
new file mode 100644
index 0000000000..9c9e1476db
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/InductorsSVG.m4
@@ -0,0 +1,47 @@
+.PS
+# `Inductors.m4'
+cct_init(svg_font(sans-serif,10pt__))
+textwid = 1.5
+movewid = 2 pt__
+hm = 2.1
+vm = 0.28
+
+hm = 2.05
+vm = 0.28
+{ {inductor ; move ; "`inductor '" ljust}
+ move right_ hm
+ {inductor(,W); move ; "`inductor(,W) '" ljust}
+ move right_ hm
+ {inductor(,L); move ; "`inductor(,L) '" ljust}
+}
+ move down vm; right_
+{ {inductor(,,3,M) ; move ;"`...(,,3,M) '" ljust}
+ move right_ hm
+ {inductor(,W,6,P1); variable; move; "`...(,W,6,P1); variable'" ljust}
+ move right_ hm+5bp__
+ {inductor(,L,9,K); move ;"`...(,L,9,K) '" ljust}
+}
+
+ move down vm; right_
+{ {I:inductor(,,,M3); addtaps(-,1/2,-dimen_/6); move; `"...(,,,M3)"' ljust
+ {`"addtaps(-,1/2,-dimen_/6)"' ljust at (I.start,last ""+(0,-textht*3/2)) }
+ }
+ move right_ hm
+ {ebox(,,,0) ; move ;"`ebox(,,,0) '" ljust}
+ move right_ hm -10bp__
+ {TI: tapped(`ebox(,,,0)',-,1/4,-dimen_/6,3/4,-dimen_/6) ; move ;
+ "`tapped(`ebox(,,,0)','" ljust at Here+(10bp__,-5bp__) \
+ "-,1/4,-dimen_/6," ljust "3/4,-dimen_/6)" ljust
+ "svg_it(Tap1)" at TI.Tap1 rjust below
+ "svg_it(Tap2)" at TI.Tap2 ljust below }
+}
+
+ move down vm*3/2; right_
+{ {shielded(`inductor(,,,M)') ; move
+ `"shielded(`inductor(,,,M)')"' ljust
+ move to (3rd last line.start,Here)
+ shielded(`ebox(,,,0)',R) ; move; `"shielded(`ebox(,,,0)',R)"' ljust }
+}
+
+ command "</g>" # end font
+.PE
diff --git a/graphics/circuit_macros/examples/svg/LyapSVG.m4 b/graphics/circuit_macros/examples/svg/LyapSVG.m4
deleted file mode 100644
index 6ed269a428..0000000000
--- a/graphics/circuit_macros/examples/svg/LyapSVG.m4
+++ /dev/null
@@ -1,159 +0,0 @@
-.PS
-# Lyap.m4
-threeD_init
-scale = 1/1.2
-
-viewaz = 30
-viewel = 18
-setview(viewaz,viewel)
-
-Origin: project(0,0,0)
-# Components of view vector W
-w1 = view3D1
-w2 = view3D2
-w3 = view3D3
-# Shape factor of the ellipse on the xy plane
-q = Cos(40)
-
-# cost function
-h = 0.5
-c = 1
-# The projected ellipse is (x/q)^2 + y^2 = c.
-# The cost is v = c+h
-define(`vs',``$2'*q*cos(`$1'),`$2'*sin(`$1')')
-define(`vp',`vs(`$1',`$2'),0')
-define(`vx',`sum3D(vp(`$1',`$2'),0,0,h+(`$2')^2)')
-
-# The gradient of v is (2x/q, 2y, -1) and the line
-# separating front and back is W^T * grad(v) = 0
-# This line intersects the projected ellipse at
-# x1,y1 and x2,y2
- ap = w2^2*q^2/w1^2+1
- bp = -w2*w3*q^2/w1^2
- cp = w3^2*q^2/4/w1^2-c
- m = sqrt(bp^2-4*ap*cp)
- y1 = (-bp+m)/ap/2 ; x1 = (w3-2*y1*w2)*q/2/w1
- y2 = (-bp-m)/ap/2 ; x2 = (w3-2*y2*w2)*q/2/w1
- t1 = atan2(y1,x1)
- t2 = atan2(y2,x2)
- theta1 = min(t1,t2)
- theta2 = max(t1,t2)
-
-# tangent curve
- nT = 11
- for i = 0 to nT do {
- y = y1 + (y2-y1)/nT*i
- theta = atan2(y,(w3-2*y*w2)*q/2/w1)
- r = y/sin(theta)
- T[i]: project(vx(theta,r))
- }
-
-# front and back parts of the top curve
- n = 12
- for i = 0 to n do {
- theta = theta1 + (theta2-theta1)/n*i
- F[i]: project(vx(theta,c))
- Fp[i]: project(vp(theta,c))
- }
- for i = 0 to n do {
- theta = theta2 + (theta1+twopi_-theta2)/n*i
- B[i]: project(vx(theta,c))
- Bp[i]: project(vp(theta,c))
- }
-
-# trajectory
-rotations = 1.55
-nx = 7
-thetas = 75*dtor_
-thetaf = thetas - rotations*twopi_
-rx = c*0.9
-beta = exp(log(.5)/20)
-
-define(`defX',` rx = `$5' ; np = np-1
- ts = `$1' ; tf = `$2'
- for i = 0 to `$3' do {
- tha = ts + (tf-ts)*i/(`$3')
- for thx = tha to -twopi_ by twopi_ do {}
- `$4'[i]: project(vx(thx,rx))
- Xp[np]: project(vp(thx,rx))
- np = np+1
- rx = beta*rx
- }')
-
-np = 1
-defX(thetas,theta1,nx,X1,rx)
-defX(theta1,theta2-twopi_,nx,X2,rx/beta)
-defX(theta2-twopi_,theta1-twopi_,nx,X3,rx/beta)
-defX(theta1-twopi_,thetaf,5,X4,rx/beta)
-
-# First draw the inside back
-# B is the back curve
-# T is the outline
-ifpstricks(`
-\psset{gradbegin=lightgray,gradend=darkgray,gradlines=1000}
-\pscustom[fillstyle=gradient,gradmidpoint=0.7]{
- fitcurve(B,n)
- for i = 0 to nT do {TT[i]: T[nT-i] }
- fitcurve(TT,nT)
-\relax} ',
-` fitcurve(B,n)
- for i = 0 to nT do {TT[i]: T[nT-i] }
- fitcurve(TT,nT) ')
-
-# Centre axis
-thinlines_
-line from Origin to project(0,0,h)
-# F[0] is the leftmost point of the front curve
-line from F[0] to Fp[0]
-# F[n] is the rightmost point of the front curve
-line from F[n] to Fp[n]
-thicklines_
-
-# Now draw the outside front
-ifpstricks(`
-\newgray{gray1}{0.9}%
-\newgray{gray2}{0.4}%
-\psset{gradbegin=gray1,gradend=gray2,gradlines=1000}
-\pscustom[linewidth=0pt,fillstyle=gradient,gradmidpoint=0.99]{
- fitcurve(F,n)
- fitcurve(T,nT)
-\relax} ',
-` shade(1,fitcurve(F,n)
- fitcurve(T,nT)) ')
-# T is the limit curve of visibility
- fitcurve(T,nT)
-# F is the top front
- fitcurve(F,n)
-# Front and back projections of the top on xy
- fitcurve(Fp,n)
- fitcurve(Bp,n)
-
-# The trajectory in pieces, to allow dashed parts
- fitcurve(X1,nx)
- fitcurve(X2,nx,dotted 0.025)
- fitcurve(X3,nx)
- fitcurve(X4,3,dotted 0.015)
- arca(from X4[4] to X4[2],ccw,0.3,<-)
-
-# Projected trajectory
- np = np-2
- fitcurve(Xp,np-1)
- arca(from Xp[np] to Xp[np-2],ccw,0.18,<-)
- "svg_it(X(t))" at Xp[np]-(2bp__,0) ljust
-
-# Axes and vertical lines
-thinlines_
- line from X1[0] to Xp[0]
-arrow from Origin to project(1.5,0,0)
-"svg_it(x)`'svg_sub(1)" rjust below
-arrow from Origin to project(0,1.5,0)
-"svg_it(x)`'svg_sub(2)" wid 10bp__ ljust
-line dashed from project(0,0,h) to F[n/2] chop 0 chop arrowht/4
-arrow from F[n/2] to project(0,0,2)
-"svg_it(v(X))" ljust
-
-"svg_it(0)" at Origin+(0,1 pt__) below
-"svg_Omega" at project(0,0.9*c,0) above
-"svg_it(v(X) = c)" at (project(vp(100*dtor_,c)))+(2bp__,0) above ljust
-
-.PE
diff --git a/graphics/circuit_macros/examples/svg/Makefile b/graphics/circuit_macros/examples/svg/Makefile
index 4436cd1aa5..1826a94d7a 100644
--- a/graphics/circuit_macros/examples/svg/Makefile
+++ b/graphics/circuit_macros/examples/svg/Makefile
@@ -15,7 +15,7 @@ DPIC = dpic
#DPIC = ../../../dpic/bi*dev/dpic
# To test the Windows executable. Change these as needed for the operating
-# system. NOTE: AntiqueClockSVG.m4 and Connectors.m4 use awk and sed which
+# system. NOTE: cscSVG.m4 and Connectors.m4 use awk and sed which
# do not work at present with the Windows version.
# M4LIBS = svg.m4 windows.m4
# DPIC = ../../../dpic/bison/distsrc/Windows/dpic
@@ -50,21 +50,23 @@ DPIC = dpic
CCTSVG = \
AdderSVG.svg AlogixSVG.svg ABlogixSVG.svg AmpTableSVG.svg AntennasSVG.svg \
- AntiqueClockSVG.svg \ AudioSVG.svg \
+ AudioSVG.svg \
BipSVG.svg BtreeSVG.svg ByteSVG.svg ButtonsSVG.svg \
- CanLogicSVG.svg CctTableSVG.svg ConnSVG.svg ConnectorsSVG.svg \
+ CanLogicSVG.svg CapacitorsSVG.svg ChipsSVG.svg ConnSVG.svg ConnectorsSVG.svg \
ContactSVG.svg ContactsSVG.svg \
- CountingSVG.svg CrossbarSVG.svg CrowSVG.svg CsourceSVG.svg \
+ CountingSVG.svg CrowSVG.svg CsourceSVG.svg \
DecoderSVG.svg DemultiplexerSVG.svg DiniSVG.svg DiodesSVG.svg DriveSVG.svg \
- EmarrowsSVG.svg \
+ EEPSVG.svg EmarrowsSVG.svg \
FlowSVG.svg FontsSVG.svg FusesSVG.svg \
GeometrySVG.svg GrayCodeSVG.svg GroundsSVG.svg \
- HeadersSVG.svg HeathkitSVG.svg InclepsSVG.svg I2LSVG.svg JackSVG.svg \
- LyapSVG.svg LogicSVG.svg LoglogSVG.svg \
- MCSVG.svg MixerSVG.svg MotorControlSVG.svg MultiplexerSVG.svg \
+ HeadersSVG.svg HeathkitSVG.svg \
+ InclepsSVG.svg InductorsSVG.svg I2LSVG.svg JackSVG.svg \
+ LogicSVG.svg LoglogSVG.svg \
+ MCSVG.svg MixerSVG.svg MoreTableSVG.svg MotorControlSVG.svg \
+ MultiplexerSVG.svg \
NLGSVG.svg NPDTSVG.svg NportSVG.svg OpampSVG.svg OptoisoSVG.svg \
- PconnSVG.svg PushPullSVG.svg QuantumSVG.svg \
- RectifiersSVG.svg RelaySVG.svg RotboxSVG.svg\
+ PconnSVG.svg PlateSVG.svg PushPullSVG.svg QuantumSVG.svg \
+ RectifiersSVG.svg RelaySVG.svg ResistorsSVG.svg RotboxSVG.svg\
SchottkySVG.svg ShiftRSVG.svg SierpinskiSVG.svg \
SixpoleSVG.svg SourcesSVG.svg SQUIDSVG.svg SwitchesSVG.svg \
TTLnandSVG.svg TgateSVG.svg ThreeSVG.svg \
@@ -76,8 +78,7 @@ CCTSVG = \
expSVG.svg fetSVG.svg graysurfSVG.svg lcctSVG.svg \
pwrsupplySVG.svg quickSVG.svg randomSVG.svg recycleSVG.svg relaycoilSVG.svg \
roseSVG.svg sfgSVG.svg shapesSVG.svg paletteSVG.svg \
- thyristorSVG.svg ujtSVG.svg UNOSVG.svg wormSVG.svg XORSVG.svg Np.svg \
- Y14-5SVG.svg
+ thyristorSVG.svg ujtSVG.svg UNOSVG.svg wormSVG.svg XORSVG.svg Np.svg
examplesSVG.html: examplesSVG.htmx
cp ../quick.m4 .
@@ -89,7 +90,7 @@ examplesSVG.html: examplesSVG.htmx
SED = sed -e '/^\%/d'
TEST = test
tst:
- if test -f test.pic; then printf "\n\nUsage: make clean tst\n\n"; exit 1; fi
+ @if test -f test.pic; then printf "\n\nUsage: make clean tst\n\n"; exit 1;fi
m4 $(M4LIBS) test.m4 | $(SED) > test.pic
$(DPIC) -v $(TEST).pic > $(TEST).svg
m4 $(M4LIBS) $(TEST).m4 | $(SED) > $(TEST).pic
@@ -112,20 +113,14 @@ tstSVG.html: tstSVG.htmx $(TEST).svg
xst: Incleps.png
-AntiqueClockSVG.svg ConnectorsSVG.svg:
+# necessary because of rotated text:
+ConnectorsSVG.svg cscSVG.svg test.svg:
m4 $(M4LIBS) $*.m4 | sed -e '/^\%/d' > $*.pic
$(DPIC) -v $*.pic > $*.svg
m4 $(M4LIBS) $*.m4 | sed -e '/^\%/d' > $*.pic
$(DPIC) -v $*.pic > $*.svg
grep '<\!-- width' $*.svg | sed -e 's%<\!-- *%%' -e 's% *-->%%' > $*.siz
-xntiqueClockSVG.svg:
- m4 $(M4LIBS) AntiqueClockSVG.m4 | sed -e '/^\%/d' > AntiqueClockSVG.pic
- $(DPIC) -v AntiqueClockSVG.pic > AntiqueClockSVG.svg
- m4 $(M4LIBS) AntiqueClockSVG.m4 | sed -e '/^\%/d' > AntiqueClockSVG.pic
- $(DPIC) -v AntiqueClockSVG.pic > AntiqueClockSVG.svg
- grep '<\!-- width' AntiqueClockSVG.svg | sed -e 's%<\!-- *%%' -e 's% *-->%%' > AntiqueClockSVG.siz
-
InclepsSVG.svg: InclepsSVG.m4
m4 $(M4LIBS) $*.m4 | sed -e '/^\%/d' > $*.pic
$(DPIC) -v $*.pic > $*.svg
diff --git a/graphics/circuit_macros/examples/svg/MoreTableSVG.m4 b/graphics/circuit_macros/examples/svg/MoreTableSVG.m4
new file mode 100644
index 0000000000..e06efb5d5e
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/MoreTableSVG.m4
@@ -0,0 +1,41 @@
+.PS
+# MoreTableSVG.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
+
+{ {memristor ; move;"`memristor '" ljust}
+ move right_ hm
+ {heater; move;"`heater '" ljust}
+ move right_ hm
+ {tline ; move;"`tline '" ljust}
+}
+ move down 0.25; right_
+{ {pvcell ; move;"`pvcell '" ljust}
+ move right_ hm
+ {reed ; move ;"`reed '" ljust}
+ move right_ hm
+ {reed(,,,fill_(0.9),CR) ; move ; "`reed(,,,fill_(0.9),CR) '" ljust}
+}
+ move down 0.25; right_
+{ {gap ; move ;"`gap '" ljust}
+ move right_ hm
+ {gap(,,A) ; move ;"`gap(,,A) '" ljust}
+ move right_ hm
+ {arrowline ; move;"`arrowline '" ljust}
+}
+ move down 0.25; right_
+{ move down 0.10; right; {lamp ; move;"`lamp '" ljust}
+ move right_ hm
+ {thermocouple ; move;"`thermocouple '" ljust }
+# move up 0.10 right_ hm
+# {arrester ; move ;"`arrester '" ljust}
+}
+
+ command "</g>" # end font
+.PE
diff --git a/graphics/circuit_macros/examples/svg/MultiplexerSVG.m4 b/graphics/circuit_macros/examples/svg/MultiplexerSVG.m4
index aba528b33b..1cd5605d6f 100644
--- a/graphics/circuit_macros/examples/svg/MultiplexerSVG.m4
+++ b/graphics/circuit_macros/examples/svg/MultiplexerSVG.m4
@@ -17,7 +17,6 @@ log_init
"svg_it(Sel)" at last [].Sel.end ljust above
left_; Mux(4,,LNOE) with .c at last [].c+(0.9,0)
- { line right 8bp__ at last [] . 1nd last ""+(-10bp__,4bp__) }
"`left_; Mux'(4,,LNOE)" at last [].s +(0,-20bp__)
"svg_it(In0)" at last [].In0.end above
"svg_it(NOE)" at last [].NOE.end +(4bp__,0) below
diff --git a/graphics/circuit_macros/examples/svg/PlateSVG.m4 b/graphics/circuit_macros/examples/svg/PlateSVG.m4
new file mode 100644
index 0000000000..e54235ebc5
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/PlateSVG.m4
@@ -0,0 +1,173 @@
+.PS
+# ASME_Y14-5.m4
+# https://en.wikipedia.org/wiki/Geometric_dimensioning_and_tolerancing
+# See the ASME Y14.5 standard, Figure 6-30.
+scale = 100/3
+cct_init
+include(../ASME_Y14-5.m4)
+ifsvg(`svg_font(sans-serif,9.5bp__)',
+`textht = 10bp__*2/3
+ iflatex(`command "{\sf"')')
+# ASME Y14.5 specs:
+ arrowht = textht*0.8
+ arrowwid = textht*0.6
+ maxpswid = 12
+
+# Diameters
+ d1 = (20.13+20.00)/2
+ d2 = 31.7
+ d3 = 36
+ d4 = (40.60+40.45)/2
+ d5 = 57
+ d6 = 86
+ d7 = 100
+ d8 = 8.0
+ adj = 1.5
+
+Section: [
+ Orig: (0,0)
+ T0: (0,-d7/2)
+ T1: (6,-d5/2)
+ T2: (15.5,-d3/2)
+ T3: (22,-d3/2-adj)
+ T4: (32,-d2/2)
+ T5: (41.3,0)
+ T6: (9.5,-d4/2)
+# for_(0,5,1,`"m4x" at T`'m4x')
+# Hatching
+ H: hatchbox(invis ht d7 wid 41.3,2,thick 0.4,-45) with .w at Orig
+ box invis fill_(1) wid T5.x-T1.x ht T1.y-H.s.y with .se at H.se
+ box same with .ne at H.ne
+ box invis fill_(1) wid T3.x-T2.x ht T2.y-T1.y with .nw at T2
+ box same with .sw at (T2.x,-T2.y)
+ box invis fill_(1) wid T4.x-T3.x ht T3.y-T1.y with .nw at T3
+ box same with .sw at (T3.x,-T3.y)
+ box invis fill_(1) wid T5.x-T4.x ht T4.y-T1.y with .nw at T4
+ box same with .sw at (T4.x,-T4.y)
+# Section outline lower
+ line from (0,-d4/2) to T0 then right T1.x-T0.x then up 1
+ arcto(T1,(T2,T1),1)
+ line to (T2,T1) then up 1
+ arcto(T2,(T3,T2),1)
+ arcto((T3,T2),T3,0.5)
+ arcto(T3,(T4,T3),0.5)
+ arcto((T4,T3),T4,1)
+ arcto(T4,(T5,T4),1)
+ line to (T5,T4) then to (T5.x,-T4.y) then left 1
+# Section outline upper
+ line from (0,d4/2) to (0,-T0.y) then right T1.x-T0.x then down 1
+ arcto((T1.x,-T1.y),(T2.x,-T1.y),1)
+ line to (T2.x,-T1.y) then down 1
+ arcto((T2.x,-T2.y),(T3.x,-T2.y),1)
+ arcto((T3.x,-T2.y),(T3.x,-T3.y),0.5)
+ arcto((T3.x,-T3.y),(T4.x,-T3.y),0.5)
+ arcto((T4.x,-T3.y),(T4.x,-T4.y),1)
+ arcto((T4.x,-T4.y),(T5.x,-T4.y),1)
+ line to (T5.x,-T4.y)
+
+ box wid 6 ht d8 fill_(1) with .w at (0,d6/2)
+ box wid 6 ht d8 fill_(1) with .w at (0,-d6/2)
+ box invis wid T6.x ht d4 fill_(1) with .w at Orig
+ box wid T5.x-T6.x ht d1 fill_(1) with .e at T5
+
+ line from (Orig.x,-T6.y) to (Orig.x,T6.y)
+ arcto(T6,(T6,Orig),1)
+ arcto((T6.x,-T6.y),(0,-T6.y),1)
+ line to (0,-T6.y)
+
+define(`dialabel',
+`[tmpthick = linethick; linethick_(1)
+ [Y14_dia_]; [$1 wid ifelse(`$2',,textht,`$2')] with .w at last [].e+(0.5,0)
+ linethick_(tmpthick)]')
+
+thinlines_
+ dimension_(from (0,T6.y) to (0,-T6.y),40,dialabel("40.60" "40.45",12),textht*3)
+ line up 4 from AE_dimen_.end
+ Y14_frame(Y14_per_,Y14_dia_;"0";"(M)","A") with .sw at Here
+ Y14_frame("B") with .s at last [].n+(0,6)
+thicklines_(1)
+ datumarrow(from last [].s to 2nd last [].n)
+thinlines_
+ dimension_(from T2 to (T2.x,-T2.y),30,
+ dialabel("35.5" "36.0",12),textht*3)
+ dimension_(from T0 to T0+(T1.x,0),-8," 6.1 " " 5.9 ",textht)
+ dimension_(from S_dimen_.end to S_dimen_.end+(T2.x,0),-9,
+ "15.4" "15.6",textht*4)
+ line from E_dimen_.start to (T2,T1) chop 0 chop 1
+ dimension_(from S_dimen_.end to S_dimen_.end+(T3.x,0),-9,
+ "21.9" "22.1",textht*4)
+ line from E_dimen_.start to T3 chop 0 chop 1
+ dimension_(from S_dimen_.end to S_dimen_.end+(T4.x,0),-9,
+ "31.9" "32.1",textht*4)
+ line from E_dimen_.start to (T4,T3) chop 0 chop 1
+ dimension_(from S_dimen_.end to S_dimen_.end+(T5.x,0),-9,
+ "41.2" "41.4",textht*4)
+ line from E_dimen_.start to (T5,T4) chop 0 chop 1
+ line from S_dimen_.start to T0 chop 0 chop 1
+ dimension_(from (0,d7/2) right T6.x,8,"9.6" "9.4",3*textht)
+ line from E_dimen_.start to (T6.x,d4/2) chop 0 chop 1
+ ctrline(from (-3,0) to T5+(3,0),T5.x/2)
+ ctrline(from (-3,d6/2) right T1.x+6)
+ ctrline(from (-3,-d6/2) right T1.x+6)
+ dimension_(from T5-(0,d1/2) to T5+(0,d1/2),-14,
+ dialabel("20.13" "20.00",4*textht),textht*3)
+ dimension_(from T5-(0,d2/2) to T5+(0,d2/2),-35,
+ dialabel("31.8" "31.6",3*textht),textht*3)
+ arrow <- from (T5.x+6,d1/2) by (Rect_(20,75)) then right 6
+ Y14_frame(Y14_cir_,"0.06" wid 3*textht,"A","B") with .w at Here
+ Y14_frame("C") with .n at last [].se+(-6,-8)
+thicklines_(1)
+ datumarrow(from last [].n up 8)
+thinlines_
+ arrow <- from (T5.x+6,-d2/2) by (Rect_(10,-75)) then right 4
+ Y14_frame(Y14_cir_,"0.1" wid textht*2,"C") with .w at Here
+ arrow <- from ((T3.x+T4.x)/2,d3/2+adj) by (Rect_(30,75)) then right 4
+ "M42 X 1.5 - 6g" wid 9*textht ljust
+ Y14_frame(Y14_pos_,Y14_dia_;"0.1" wid textht*2;"(M)","C";"(M)") \
+ with .nw at last "".sw+(0,-2)
+ line from (T2.x,-T1.y) up 25 chop 1 chop 0
+ Y14_frame(Y14_par_,"0.06" wid 3*textht,"A") with .sw at Here
+ Y14_frame(Y14_sur_," 0.1 " wid 3*textht,"A") with .sw at last [].nw
+ arrow <- from (0,-d6/2+10) left 13
+ Y14_frame(Y14_fla_,"0.02" wid 4*textht) with .e at Here
+ Y14_frame("A") with .n at last [].s+(0,-6)
+ datumarrow(from last [].n up 6)
+ ]
+
+Topview:[
+ C: circle diam d7
+ for i=0 to 7 do { circle diam d8 at C+(Rect_(d6/2,i/8*360)) }
+ C5: circle diam d5 at C
+ C4: circle diam d3+2*adj at C
+ C3: circle dashed diam d3 at C
+ C2: circle diam d2 at C
+ C1: circle diam d1 at C
+
+thinlines_
+ dimension_(from C.w-(0,10) to C.e-(0,10),-C.rad-15,
+ dialabel("100" "99",textht*3),textht*5)
+ dimension_(from C5.w-(0,5) to C5.e-(0,5),-C.rad-5,
+ dialabel("57.2" "56.8",textht*4),textht*5)
+ arrow <-> from C+(Rect_(d6/2,-120)) to C+(Rect_(d6/2,60))
+ line from last arrow.end to C+(Rect_(d7/2+6,60)) then right 4
+ dialabel("86.2" "85.8",textht*4) with .w at Here+(1,0)
+ ctrline(from (C.x-(d6-d7/2),C.y) to (C.x+(d6-d7/2),C.y))
+ ctrline(from (C.x,C.y-d6/2+d8/2) to (C.x,C.y+d6/2-d8/2))
+ for_(0,315,45,`ctrarcr(C,d6/2,(m4x-22.5)*dtor_,(m4x+22.5)*dtor_)
+ ctrline(from C+(Rect_(d6-d7/2,m4x)) to C+(Rect_(d7/2,m4x))) ')
+ arcdimension_(from C+(0,d7/2) to C+(Rect_(d7/2,135)) with .c at C,
+ 8,"8X 45`'iflatex($^\circ$)" wid textht*3.5,15,1)
+ ifsvg("svg_deg" wid textht*2/3 with .w at last "".e)
+ move to C+(0,d6/2)
+ arrow <- from Here+(Rect_(8/2,75)) to Here+(Rect_(25,75)) then right_ 3
+ "8X" wid 2*textht ljust
+ linethick_(1); [Y14_dia_] with .w at last "".e+(1,0)
+ "7.9 - 8.1" wid 8*textht ljust
+ Y14_frame(Y14_pos_,Y14_dia_;"0.14" wid 3*textht;"(M)","A","C") \
+ with .nw at 2nd last "".sw+(0,-2)
+
+ ] with .C at Section.Orig+(4.5*scale,0)
+
+
+command iflatex(`"}"',ifsvg(`"</g>"'))
+.PE
diff --git a/graphics/circuit_macros/examples/svg/PushPullSVG.m4 b/graphics/circuit_macros/examples/svg/PushPullSVG.m4
index 775b9de966..c3610fdaf6 100644
--- a/graphics/circuit_macros/examples/svg/PushPullSVG.m4
+++ b/graphics/circuit_macros/examples/svg/PushPullSVG.m4
@@ -1,6 +1,6 @@
.PS
# `PushPullSVG.m4'
-cct_init(svg_font(sans-serif,10bp__,1bp__))
+cct_init(svg_font(sans-serif,9bp__,1bp__))
linewid = 1.2*linewid
diff --git a/graphics/circuit_macros/examples/svg/ResistorsSVG.m4 b/graphics/circuit_macros/examples/svg/ResistorsSVG.m4
new file mode 100644
index 0000000000..4fb0be47f0
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/ResistorsSVG.m4
@@ -0,0 +1,34 @@
+.PS
+# `ResistorsSVG.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(NportSVG.svg,"`resistor'" ljust)}
+ move right_ hm
+ {resistor(,,Q) ; move ; "`resistor(,,Q) '" ljust}
+ move right_ hm
+ {resistor(,,E) ; move
+ "`resistor(,,E)'" ljust " svg_equiv `ebox'" ljust}
+}
+ move down vm; right_
+{ {resistor(,,ES) ; move ; "`resistor(,,ES) '" ljust}
+ move right_ hm
+ {resistor(,,H) ; move ; "`resistor(,,H) '" ljust}
+ move right_ hm
+ {ebox(,,,0.5) ; move ; "`ebox(,,,0.5) '" ljust}
+}
+ move down vm; right_
+{ {resistor(,,V) ; move ; "`resistor(,,V) '" ljust}
+ move right_ hm
+ {ebox(,0.5,0.3) ; move ;"`ebox(,0.5,0.3) '" ljust}
+ move right_ hm+4bp__
+ {resistor(,,B) ; move movewid-4bp__ ; "`resistor(,,B) '" ljust}
+}
+
+ command "</g>" # end font
+.PE
diff --git a/graphics/circuit_macros/examples/svg/ShiftRSVG.m4 b/graphics/circuit_macros/examples/svg/ShiftRSVG.m4
index 9a0b56d523..de8e13843e 100644
--- a/graphics/circuit_macros/examples/svg/ShiftRSVG.m4
+++ b/graphics/circuit_macros/examples/svg/ShiftRSVG.m4
@@ -6,9 +6,7 @@ textoffset = textht/6
define(`lg_plen',3)
define(`customFF',`FlipFlopX(wid 10*L_unit ht FF_ht*L_unit,,
- :S;NE:CK;:R, N:PR, :Q;;ifelse(`$1',1,:Q), N:CLR,,
- ifelse(`$1',1,
- line right textht with .end at 2nd last ""+(-textoffset,0.4*textht)))')
+ :S;NE:CK;:R, N:PR, :Q;;ifelse(`$1',1,:svg_ol(Q)), N:CLR,,)')
F0: customFF(1)
@@ -21,8 +19,7 @@ define(`customFF',`FlipFlopX(wid 10*L_unit ht FF_ht*L_unit,,
line from T to (T,F0.W3) then to F0.W3.end
NCLR: NOT_gate(right T.x-Serial.x from (Serial,F0.S1.end),N)
- "CLEAR" wid 33bp__ at NCLR.start rjust
- line left last "".wid with .c at last "".n+(0,1.5bp__)
+ "svg_ol(CLEAR)" wid 33bp__ at NCLR.start rjust
CLK: NOT_gate(right T.x-Serial.x from NCLR.start+(0,-BUF_ht*3/2*L_unit))
"CLOCK" at CLK.start rjust
diff --git a/graphics/circuit_macros/examples/svg/TTLnandSVG.m4 b/graphics/circuit_macros/examples/svg/TTLnandSVG.m4
index e1d7d4dae1..7b27077866 100644
--- a/graphics/circuit_macros/examples/svg/TTLnandSVG.m4
+++ b/graphics/circuit_macros/examples/svg/TTLnandSVG.m4
@@ -48,8 +48,7 @@ Vcc:dot; "+5 svg_norm(V)" ljust at last [].e
line right (N.y-S.y)/2+dimen_/2 from Q3.C
Z: dot
lw = 1.05
- "svg_it(Z = X1 . X2 . X3)" wid lw ljust
- line left lw*0.73 from last "".ne+(0,2*textoffset)
+ "svg_it(Z = svg_ol(X1 . X2 . X3))" wid lw ljust
command "</g>" # end font
.PE
diff --git a/graphics/circuit_macros/examples/svg/UNO.m4 b/graphics/circuit_macros/examples/svg/UNO.m4
deleted file mode 100644
index 60689f15ec..0000000000
--- a/graphics/circuit_macros/examples/svg/UNO.m4
+++ /dev/null
@@ -1,265 +0,0 @@
-.PS
-# UNOSVG.m4
-log_init
-include(../ics.m4)
-textoffset = 1.5bp__
-svg_font(sans-serif,9.0bp__,textoffset)
-
-divert(-1)
-
- `Header([1|2][A],rows,wid,ht,type)
- arg1: number of columns; A= type A
- arg2: pins per column
- arg3,4: custom wid, ht
- arg5: eg fill_(0.9)'
-define(`Header',
-`[ define(`m4tp',ifinstr(`$1',A,A))define(`m4Hq',patsubst(`$1',A))dnl
- define(`m4Hn',`ifelse(m4Hq,,1,m4Hq)')dnl
- define(`m4Hm',`ifelse(`$2',,2,`$2')')dnl
- define(`m4Hw',`ifelse(`$3',,`m4Hn*L_unit*3',`($3)')')dnl
- define(`m4Hh',`ifelse(`$4',,`m4Hm*L_unit*3',`($4)')')dnl
- Block: rotbox(m4Hw,m4Hh,`$5')
- ifelse(`m4tp',A,`pushdef(`L_unit',(linewid/6))')
- define(`m4Hct',1)dnl
- for_(1,m4Hm,1,
- `HeaderPin(Block.NW+vec_(L_unit*3/2,-(m4x-1/2)*m4Hh/m4Hm),
- eval(m4Hct-1), P`'m4Hct,w) define(`m4Hct',incr(m4Hct))
- ifelse(m4Hn,2,`HeaderPin(Block.NE+vec_(-L_unit*3/2,-(m4x-1/2)*m4Hh/m4Hm),
- 1, P`'m4Hct,e) define(`m4Hct',incr(m4Hct))') ')
- ifelse(`m4Hq',A,`popdef(`L_unit')')
- `$6' ]')
- `HeaderPin(location,type,Picname,
- n|e|s|w,[length][;pinsize])
- arg2: 0= square'
-define(`HeaderPin',
- `ifinstr(`$5',;,
- `stacksplit_(`m4Hdr',`$5',;)dnl
- define(`m4Hps',ifelse(m4Hdr,,`L_unit',m4Hdr))popdef(`m4Hdr')dnl
- define(`m4Hpl',ifelse(m4Hdr,,`lg_plen*L_unit',m4Hdr))popdef(`m4Hdr') ',
- `define(`m4Hps',L_unit)dnl
- define(`m4Hpl',`ifelse(`$5',,lg_plen*L_unit,`$5')')')dnl
- ifelse(`$1',,,`move to `$1';')
- ifelse(`$3',,,`$3':) line to ifelse(
- `$4',n,`rvec_(0,m4Hpl)', `$4',e,`rvec_(m4Hpl,0)',
- `$4',s,`rvec_(0,-m4Hpl)', `rvec_(-m4Hpl,0)')
- ifelse(`$3',,,Pin`$3':) ifelse(ifelse(`$2',,0,`$2'),0,
- `rotbox(m4Hps,m4Hps,fill_(1))',
- `circle diam m4Hps fill_(1)') at last line.start ')
-
-define(`brdge',`eleminit_(`$1')
- define(`m4h',ifelse(`$2',,`sourcerad_',`($2)/2'))dnl
- { line to rvec_(rp_len/2-m4h/2,0)
- move to rvec_(m4h/2,0)
- for m4ng=75 to 255 by 180 do {{
- m4fshade(0, arc cw from rvec_(Rect_(m4h/2,m4ng)) \
- to rvec_(Rect_(m4h/2,-m4ng)) \
- with .c at Here ) }}
- line from rvec_(m4h/2,0) to rvec_(rp_len/2,0) }
- { [box invis ht_ m4h wid_ m4h] at rvec_(rp_len/2,0) }
- line to rvec_(rp_len,0) invis ')
-
-define(`ATMEGA16U2',`[
- Chip: box wid 10*lg_pinsep ht 25*lg_pinsep
- Loopover_(`x',
- `Arightpin(patsubst(x,;,`,'))',
- 6;PD0, 7;PD1, 8;PD2, 9;PD3, 10;PD4, 11;PD5, 12;PD6, 13;PD7,
- 131;nul,
- 5;PC2, 26;PC4, 25;PC5, 23;PC6, 22;PC7,
- 132;nul,
- 133;nul,
- 14;PB0, 15;PB1, 16;PB2, 17;PB3, 18;PB4, 19;PB5, 20;PB6, 21;PB7)
- Loopover_(`x',
- `Aleftpin(patsubst(x,;,`,'))',
- 33;PAD,
- 100;nul,
- 28;UGND, 29;D`'svg_it(+), 30;D`'svg_it(-), 31;UVCC, 27;UCAP,
- 101;nul, 102;nul,
- 3;GND, 4;VCC, 103;nul,
- 104;nul,
- 32;AVCC,
- 105;nul, 106;nul,
- 1;XTAL1,
- 107;nul,
- 2;XTAL2(PC0),
- 108;nul, 109;nul)
- lg_pin(Pin109+(0,lg_pinsep),RESET,Pin24,wN,24,pinlen)
- ]')
-define(`Aleftpin',`move to Chip.sw+(0,m4Lx*lg_pinsep)
- Pin`$1': ifelse(`$2',nul,Here,dnl
- `line left pinlen "`$1'" above
- "`$2'" ljust at last line.start')')
-define(`Arightpin',`move to Chip.se+(0,m4Lx*lg_pinsep)
- Pin`$1': ifelse(`$2',nul,Here,dnl
- `line right pinlen "`$1'" above
- "`$2'" rjust at last line.start')')
-
-define(`ATMEGA328P',`[
- Chip: box wid 10*lg_pinsep ht 23*lg_pinsep
- Loopover_(`x',
- `Arightpin(patsubst(x,;,`,'))',
- 2;PD0, 3;PD1, 4;PD2, 5;PD3, 6;PD4, 11;PD5, 12;PD6, 13;PD7,
- 100;nul,
- 23;PC0, 24;PC1, 25;PC2, 26;PC3, 27;PC4, 28;PC5,
- 101;nul,
- 14;PB0, 15;PB1, 16;PB2, 17;PB3, 18;PB4, 19;PB5)
- Loopover_(`x',
- `Aleftpin(patsubst(x,;,`,'))',
- 201;nul, 202;nul, 203;nul, 204;nul, 205;nul, 206;nul, 207;nul, 208;nul,
- 209;nul,
- 8;GND, 7;VCC,
- 301;nul,
- 22;AGND, 20;AVCC, 21;AREF,
- 302;nul,
- 9;XTAL1,
- 303;nul,
- 9;XTAL2,
- 304;nul, 305;nul)
- lg_pin(Pin305+(0,lg_pinsep),RESET,Pin1,wN,1,pinlen)
- ]')
-
-divert(0)dnl
-
- maxpswid = 20
- maxpsht = 20
-
- define(`pinlen',`30bp__')
- define(`lg_pinsep',(1.2*lg_pinsep))
- del = lg_pinsep
-
- U3: ATMEGA16U2
- `"ATMEGA16U2-MU(R)"' at U3.Chip.s below
- `"U3"' at U3.Chip.nw ljust above
- ZU4: ATMEGA328P with .Chip.nw at U3.Chip.sw+(0,-1)
- `"ATMEGA328P-PU"' at ZU4.Chip.s below
- `"ZU4"' at ZU4.Chip.nw ljust above
-
- dot(at U3.Pin2.end)
- R1: resistor(down_ 2*lg_pinsep,,E)
- rlabel(,"R1" rjust "1M" rjust)
- dot
- dot(at R1.start-(2*del,0))
- xtal(down_ 2*lg_pinsep)
- rlabel(16,,MHz); dot
- XT2: dot(at last line.start-(2*del,0)); { "XT2" at last [].n above }
-
- Br1: brdge(from U3.Pin33.end to (XT2,U3.Pin33)); BRE: dot
- line to (Here,U3.Pin28) then to U3.Pin28.end
- {"UGND" at (Br1,Here) above}
-
- XT1: dot(at XT2-(del,R1.len)); { "XT1" at last [].n above }
- line from XT1 to U3.Pin1.end
- line from U3.Pin2.end to (XT1,XT2)
- C11: capacitor(left_ 3*del); rlabel(,C11); llabel(,22pF)
- C9: capacitor(from XT1 to (Here,XT1)); {"C9" "22pF" at last [].s+(0,-11bp__)}
- { line to C11.end }
- dot
- G1: ground(,,E); { "GND" at last line.c below }
- line from XT1 down_ 3*del; continue to (G1,Here); dot(,,1)
- {"XT3" at last [].n above}
- dot(at Here+(0,-3/2*del),,1); {"XT4" at last [].n above}
- { line to (XT2,Here) then to XT2 chop dotrad_ chop 0 }
- USBVCC: dot(at Here+(0,-7/2*del),,1)
- {"USBVCC" at last [].n-(3/2*del,0) above ljust}
- { line to (Here,U3.Pin31) chop dotrad_ chop 0; continue to U3.Pin31.end }
- dot(at Here+(2*del,0),,1); {"VUCAP" at last [].e+(0,-5bp__) ljust}
- line to (Here,U3.Pin27) chop dotrad_ chop 0; dot
- line from U3.Pin27.end to (G1.x-4.5*del,U3.Pin27.y)
- C8: capacitor(down_ to (Here,Br1)); llabel(C8,,1`'svg_micro)
- Bus1: dot
-
- dot(at U3.Pin33.end)
- move to U3.Pin3.end; line to (Here,U3.Chip.s)
- G2: ground(,T,E); {"GND" at last line.c below }
-
- dot(at U3.Pin32.end)
- {line to U3.Pin4.end; dot}
- line left del; ground(,,E,U); {"svg_it(+)5V" at last line.c above}
-
- G3: ground(at (C8.x-del,G2.y),T,E); {"GND" at last line.c below }
- capacitor(up_ to (Here,C8.start)); { llabel(100n,,C7) }
- line to (Here,U3.Pin4) then to U3.Pin4.end
-
- line from U3.Pin30.end to (G1.x-2*del,U3.Pin30.y); continue to (Here,U3.Pin1)
- { "RD`'svg_it(-)" above rjust }; continue left_ 2*del
- RN3A: resistor(left_ 3/2*dimen_,,E); rlabel(,22R RN3A)
- Dm: line left_ 7*del
-
-USB: [ K: box invis wid dimen_/2 ht 5*lg_pinsep
- "USB" rjust at K.e
- line thick 1.5 from K.nw to K.ne then to K.se then to K.sw
- Loopover_(`x',
- `Pin`'m4Lx: K.ne-(0,m4Lx/5*K.ht)
- "x" at Pin`'m4Lx ljust above',
- 1 XUSB, 2 D`'svg_it(-), 3 D`'svg_it(+), 4 UGND)
- P_1: K.sw; {"P$`1'" at P_1 below rjust}
- P_2: K.s; {"P$`2'" at P_2 below ljust}
- ] with .Pin2 at Here; "X2" at USB.ne above rjust
-
- move to U3.Pin29.end
- line to (G1.x-3*del,Here.y); continue to (Here,Dm-(0,lg_pinsep))
- { "RD`'svg_it(+)" above rjust}
- continue to (RN3A.start,Here)
- RN3D: resistor(left_ 3/2*dimen_,,E); llabel(,22R RN3D)
- line to USB.Pin3
-
- dot(at RN3A.end); line to (Here,RN3D)
- Z2: variable(`resistor(down_ to (Here,U3.Pin27),,E); rlabel(Z2)',NN)
- dot(at RN3D.end-(2*del,0))
- Z1: variable(`resistor(to (Here,U3.Pin27),,E); rlabel(Z1)',NN)
- dot; line to (Z2,Here)
- move up Z1.len/4 from last line.c; "CG0603MLC-05E" "X 2"
-
- line down_ del from USB.P_1; continue to (USB.P_2,Here); dot
- line from USB.P_2 to (USB.P_2,Z1.end) then to Z1.end
- dot(at (USB.P_2,Here)+(3/2*del,0)); line to (Here,USBVCC)
- dot(,,1); {"USHIELD" at last [].n+(4bp__,0) above}
-
- L1: reversed(`inductor',down_ from Z1.end to (Z1,C8.end),W,,M)
- rlabel(L1); llabel( BLM21); dot
- { dot(at (Z2,Here)); line to (Here,U3.Pin28); dot(,,1)
- "UGND" at last [].n above }
- line from USB.Pin1 to (Z2,USB.Pin1) then up 2*del
- XUSB: dot(,,1); {"XUSB" at last [].n above}
- line from (Z1,USB.Pin3) to (Z1,XUSB);
- DP: dot(,,1); {"D`'svg_it(+)" at last [].n above}
- dot(at (DP,USB.Pin2)-(2*del,0)); line to (Here,XUSB)
- DM: dot(,,1); "D`'svg_it(-)" at last [].n above
- line from USB.Pin4 to (DM,USB.Pin4) then to (DM,BRE) then to BRE
-
- dot(at (U3.Chip.w.x-3*lg_pinsep,U3.Pin24.y))
- D3: diode(up_ 7*lg_pinsep); llabel(,,D3)
- dot(at (D3.start-(2*del,0)))
- RN1C: resistor(up_ D3.len,,E); llabel(,10K); llabel(RN1C); dot
- line from D3.end to (Here.x-2*del,Here.y)
- right_
- ICSP1: Header(2A,3,4*del,3*lg_pinsep) with .P2.end at Here
- "ICSP1" at last [].Block.nw above ljust
- "3X2 M" at last [].Block.sw below ljust
- for_(1,5,2,`"m4x" at ICSP1.P`'m4x.end above ljust')
- for_(2,6,2,`"m4x" at ICSP1.P`'m4x.end above rjust')
-
- dot(at ICSP1.P2.end+(del/2,0)); line up_ 2*del
- G5: ground(,T,E); "svg_it(+)5V" above
- ground(at (G5,ICSP1.P6),,E); {"GND" at last line.w below rjust}
- {line to ICSP1.P6.end}
- R2: dot(at ICSP1.P5.end-(lg_pinsep/2,0)); {line to ICSP1.P5.end}
- { line to (Here,G5); dot(,,1); "RESET2" at last [].n above }
- line to (R2,U3.Pin24) then to U3.Pin24.end
- line from ICSP1.P4.end to (U3.Pin24.end,ICSP1.P4); dot
- { line to (Here,G5); dot(,,1); "MOSI2" at last [].n above }
- Turn: (U3.Pin21.end.x+4*lg_pinsep,Here.y)
- line to (Turn,Here) then down Here.y-U3.Pin16.y then to U3.Pin16.end
- line from ICSP1.P3.end to (R2.x-lg_pinsep,ICSP1.P3.y) \
- then down R2.y-U3.Pin24.y
- continue to (D3.x+2*del,Here.y) then up ICSP1.P4.y-Here.y-2*lg_pinsep
- continue to (Turn.x-2*lg_pinsep,Here.y) then down Here.y-U3.Pin15.y \
- then to U3.Pin15
- move to ICSP1.P1.end; line left Here.x-R2.x+2*lg_pinsep; dot
- { line to (Here,G5); dot(,,1); "MISO2" at last [].n above rjust }
- line down Here.y-U3.Pin24.y-2*lg_pinsep
- continue to (D3.x+del,Here.y) then up ICSP1.P4.y-Here.y-lg_pinsep
- continue to (Turn.x-lg_pinsep,Here.y) then down Here.y-U3.Pin17.y \
- then to U3.Pin17
-
- command "</g>"
-.PE
diff --git a/graphics/circuit_macros/examples/svg/UNOSVG.m4 b/graphics/circuit_macros/examples/svg/UNOSVG.m4
index 8ae314f1af..8c1ba33248 100644
--- a/graphics/circuit_macros/examples/svg/UNOSVG.m4
+++ b/graphics/circuit_macros/examples/svg/UNOSVG.m4
@@ -507,8 +507,8 @@ Pwr: [
"LP2985-33DBVR" at U2.s below
"U2" above ljust at U2.nw
"3" above rjust at U2.w; line left del from U2.w then up_ lg_pinsep; dot
- "ON/OFF" at U2.w ljust
- line right_ textht*0.66*3 from U2.w+(textht*0.66*5,textht)
+ "ON/svg_ol(OFF)" at U2.w ljust
+# line right_ textht*0.66*3 from U2.w+(textht*0.66*5,textht)
U2P2: U2.w+(0,-lg_pinsep); "2" at U2P2 above rjust; "GND" at U2P2 ljust
line from U2P2 left del then down_ del
G15: ground(,T,E); "GND" at last line.c below
diff --git a/graphics/circuit_macros/examples/svg/WindingsSVG.m4 b/graphics/circuit_macros/examples/svg/WindingsSVG.m4
index 0ead17d87f..e4faa89b5c 100644
--- a/graphics/circuit_macros/examples/svg/WindingsSVG.m4
+++ b/graphics/circuit_macros/examples/svg/WindingsSVG.m4
@@ -1,6 +1,6 @@
.PS
# Windings.m4
-cct_init(svg_font(sans-serif,11bp__))
+cct_init(svg_font(sans-serif,10bp__))
textoffset = 3bp__
define(`vlight',`rgbstring(0.9,0.9,0.9)')
diff --git a/graphics/circuit_macros/examples/svg/controlSVG.m4 b/graphics/circuit_macros/examples/svg/controlSVG.m4
index 53db5c6312..ab2eea7efc 100644
--- a/graphics/circuit_macros/examples/svg/controlSVG.m4
+++ b/graphics/circuit_macros/examples/svg/controlSVG.m4
@@ -1,97 +1,224 @@
.PS
-# control.m4
-#.PS 5i
-cct_init(svg_font(sans-serif,11bp__))
+# controlSVG.m4
+gen_init(svg_font(Times,11bp__))
linewid = linewid*0.8
- circlerad = 0.35/2
+ circlerad = 0.25/2
bw = boxwid/2
bh = boxht/2
+ maxpsht = 15
+
+# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . #
+
PID: [
{"svg_it(r(s))" above ljust}
arrow
S1: circle
line right "svg_it(e(s))" above
- { arrow right ; box ht bh wid bw "svg_it(K`'svg_sub(p))"
+ { arrow right ; box ht bh wid bw "svg_it(K)svg_sub(p)"
arrow right linewid-circlerad ; S2: circle }
- { line up linewid ; arrow right ; box ht bh wid bw "svg_it(K`'svg_sub(D) s)"
+ { line up linewid ; arrow right ; box ht bh wid bw "svg_it(K)svg_sub(D)s"
line to (S2,Here) ; arrow to S2.n }
- { line down linewid ; arrow right
- box ht bh wid bw "svg_it(K`'svg_sub(I) /s)"
+ { line down linewid ; arrow right ; box ht bh wid bw "svg_it(K)svg_sub(I)/s"
line to (S2,Here) ; arrow to S2.s }
arrow right from S2.e "svg_it(u(s))" above
box "svg_it(G(s))"
arrow right ; "svg_it(y(s))" above rjust at Here+(0,2pt__)
line down boxht*3/2 from last arrow.c then left last arrow.c.x-S1.x
arrow to S1.s
- "-" below rjust
- ]
- "(a) PID control" below ljust at PID.sw+(0,-5pt__)
+ "svg_it(-)" rjust at Here+(-2bp__,-2bp__)
+]
+ "(a) svg_it(PID) control" below ljust at PID.sw+(0,-5pt__)
+
+# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . #
+
+# https://tex.stackexchange.com/questions/575592/how-to-create-a-controls-system-diagram
+Observer: [
+ define(`thickarrow',`arrow thick 3 wid 7bp__')
+ define(`thickline',`line thick 3')
+ fillval = 0.6
+ boxwid = 0.3
+ boxht = 0.4
+ circlerad = 0.1
+ {"svg_it(r)" above ljust}
+R: arrow
+S: circle fill
+ {"svg_thinsp`'svg_it(-)" below ljust at S.s
+ "svg_it(+)" above rjust at S.w+(2bp__,0)}
+{ PLT: box invis fill 0.9 wid 3.1 ht 1.2 with .nw at Here+(0.3,boxht*3/4)
+ "svg_it(Plant)" at PLT.sw above ljust }
+U: arrow right 0.4
+ {"svg_it(u)" at last arrow+(2bp__,0) above }
+Bp: box fill "svg_it(B)"
+ thickarrow right 0.4
+Sp: circle fill
+ {"svg_thinsp`'svg_it(+)" below ljust at Sp.s
+ "+" above rjust at Sp.w+(2bp__,2bp__)}
+ thickarrow right 0.4
+ {"svg_bf(x)" at last arrow + (0,7bp__); "." at last "".n +(0,textoffset)}
+Ip: box fill "svg_it(I/s)"
+ thickarrow right 1
+ {"svg_bf(x)" at last arrow + (0,7bp__) }
+Cp: box fill "svg_it(C)"
+# print Cp.e.x - Bp.w.x + 0.2
+ thickline right 0.4
+Yp: thickarrow
+ {"svg_bf(y)" at last arrow + (0,7bp__) }
+Ap: box fill "svg_it(A)" with .n at Ip.s+(0,-boxht/2)
+ thickarrow <- from Ap.e right 0.4 then up Ip.y-Ap.y
+ thickarrow from Ap.w to (Sp,Ap) then to Sp.s
+# print PLT.n.y-Ap.s.y+0.1
+#
+K: box fill "svg_it(K)" at Ap + (0,-boxht*3/2)
+ arrow from K.w to (S,K) then to S.s
+ {OBS: box invis fill 0.9 wid 4.3 ht 1.8 with .nw at (S.w,K.s)-(0.1,0.1)
+ "svg_it(Observer)" at OBS.sw ljust above }
+Io: box fill "svg_it(I/s)" at K + (0,-boxht*3/2)
+ thickarrow <- from Io.w left 0.4
+ {"svg_bf(x)" at last arrow + (0,7bp__); "svg_circ" at last ""
+ "." at last "".n above}
+Sxo: circle fill
+ {"svg_thinsp`'svg_it(+)" below ljust at Sxo.s
+ "svg_it(+)" above rjust at Sxo.w+(2bp__,2bp__)}
+ thickarrow <- left 0.4
+SLo: circle fill
+ {"svg_thinsp`'svg_it(+)" below ljust at SLo.s
+ "svg_it(+)" above rjust at SLo.w+(2bp__,2bp__)}
+ thickarrow <- left 0.4
+Bo: box fill "svg_it(B)"
+ arrow from 1/4 between U.start and U.end up boxht*3/4 \
+ then left 2*boxht then down Bp.y-Bo.y+boxht*3/4 then to Bo.w
+Ao: box fill "svg_it(A)" with .n at Io.s+(0,-boxht/2)
+ thickline from Io.e right 0.4
+ {thickarrow <-> from K.e to (Here,K.e) then to (Here,Ao) then to Ao.e
+ thickarrow from Ao.w to (Sxo,Ao.w) then to Sxo.s }
+Xhat: Here
+Co: box fill "svg_it(C)" at (Cp,Here)
+ thickarrow right 0.4
+ {"svg_bf(y)" at last arrow + (0,7bp__); "svg_circ" at last ""}
+ { thickarrow from Xhat to Co.w }
+ {"svg_it(x)" at last arrow + (0,7bp__); "svg_circ" at last "" }
+Syo: circle fill
+ {"svg_it(+)" above ljust at Syo.n
+ "svg_it(-)" above rjust at Syo.w+(2bp__,2bp__)}
+ thickarrow <- from Syo.n to (Syo,Cp)
+Lo: box fill "svg_it(L)" with .n at Ao.s+(0,-boxht/2)
+# print Io.n.y+0.1 - (Lo.s.y-0.1)
+ thickarrow from Syo.s down Syo.s.y-Lo.y then to Lo.e
+ thickarrow from Lo.w to (SLo,Lo.w) then to SLo.s
+ ] with .nw at last [].sw+(0,-0.5)
-Obs: [ {"svg_it(r)" above ljust}
+Eqns: [ {"svg_it(r)" above ljust}
+ ex = textht*2/3
+ define(`DDt',`svg_frac(svg_it(d):1*ex,svg_it(dt):2*ex)')
arrow
S: circle
- "-" below rjust at S.s
+ "svg_it(-)" below rjust at S.s
arrow <- down linewid/2 from S.s
box ht bh wid bw "svg_it(K)"
arrow <- down linewid/2
- line right linewid "svg_it(z)" above
-Obs:box wid linewid*5.5 ht boxht*5/4 "svg_it(dz/dt = (A - LC) z + B u + L y)"
- "Observer" above ljust at Obs.sw
+ line right linewid
+ {"svg_hat(svg_bf(x))" at last line.c above }
+Obs:box wid linewid*5 ht boxht*5/4
+ [ DDt; "svg_hat(svg_bf(x)) svg_it(= (A-LC)) svg_hat(svg_bf(x))
+ svg_it(+ Bu + L)svg_bf(y)" wid 1.5 ljust ] at Obs
+ "svg_it(Observer)" above ljust at Obs.sw
arrow <- right linewid/2 from 3/4<Obs.se,Obs.ne>
line to (Here,S)
{"svg_it(u)" above at Here+(linewid/2,0)}
arrow from S.e to Here+(linewid,0)
-Plant: box wid boxwid*1.7 ht boxht*5/4 \
- "svg_it(dx/dt = Ax + Bu)" "svg_it(y = Cx)"
- "Plant" above ljust at Plant.sw
+Plant: box wid boxwid*3/2 ht boxht*5/4
+ [ DDt; "svg_bf(x) svg_it(= A) svg_bf(x) svg_it(+ Bu)" wid 0.8 ljust
+ "svg_bf(y) svg_it( = C) svg_bf(x)" wid 0.6 ljust \
+ at last "".w + (0,-textht*2) ] at Plant+(0,0.05)
+ "svg_it(Plant)" above ljust at Plant.sw
arrow right from Plant.e
"svg_it(y)" above rjust at Here+(0,2pt__)
move to last arrow.c
line to (Here, 1/4<Obs.se,Obs.ne>)
arrow to (Obs.e,Here)
- ] with .nw at PID.sw+(0,-0.5)
- "(b) Output feedback with a full-order observer" below ljust \
- at Obs.sw+(0,-5pt__)
+ ] with .nw at last [].sw+(0,-0.1)
+ "(b) Plant with feedback from a full-order observer" \
+ below ljust at Eqns.sw+(0,-5pt__)
+
+# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . #
+
+Multiblock: [
+boxht = 0.4
+boxwid = boxht
+
+define summer { circle
+ {line from last circle.nw to last circle.se
+ line from last circle.sw to last circle.ne
+ "svg_it($1)" at 0.6 between last circle and last circle.n
+ "svg_it($2)" at 0.6 between last circle and last circle.s
+ "svg_it($3)" at 0.6 between last circle and last circle.e
+ "svg_it($4)" at 0.6 between last circle and last circle.w }
+}
-NL: [boxwid = boxwid*1.8
- boxht = boxht*3/2
+ arrow "svg_it(E`'svg_sub(1))" above
+S1: summer(,-,,+)
+ linewid = boxwid/2
+ arrow "svg_epsilon" above
+ [box "svg_it(H)svg_sub(1)"; arrow; box "svg_it(H)svg_sub(2)"]
+ arrow
+S2: summer(-,,,+)
+ arrow
+T: [box "svg_it(H)svg_sub(3)"; arrow; box "svg_it(H)svg_sub(4)"]
+ line
+Y: Here
+ arrow
+ "svg_it(S)svg_sub(1)" above
+R1: box "svg_it(R)svg_sub(1)" at (T.x,T.y+boxht*3/2)
+ arrow from Y to (Y,R1) then to R1.e
+ arrow from R1.w to (S2,R1) then to S2.n
+ "svg_it(n)svg_sub(1)" ljust at S2.n+(0,boxht/2)
+ left
+Rf: [box "svg_it(R)svg_sub(2)"; arrow; box "svg_it(R)svg_sub(3)"] \
+ at ((S1.x+T.x)/2,T.y-boxht*3/2)
+ arrow from T to (T,Rf) then to Rf.e
+ arrow from Rf.w to (S1,Rf) then to S1.s
+ "svg_it(n)svg_sub(2)" at S1.s+(0,-boxht/2) ljust
+] with .nw at Eqns.sw + (0,-0.3)
+ "(c) A multiblock example" below ljust at Multiblock.sw+(0,-5pt__)
+
+# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . #
+
+Nonlinear: [boxwid = boxwid*3/2; boxht = boxht*3/2
thicklines_
- scale = scale*0.8
- circlerad = 0.3/2
-R: box wid boxwid*5/4 "reference" "svg_it(R)"
- arrow right linewid*4/3 "svg_it(y`'svg_sub(c ref))" above
-Gh: box wid boxwid*5/4 "\"inverse\"" "of svg_it(G)"
- arrow from Gh.s down "svg_it(y`'svg_sub(m ref))" ljust
+ boxwid = boxwid*0.6
+ boxht = boxht/2
+R: box "reference" "svg_it(R)"
+ arrow right linewid*4/3
+ {"svg_it(y)svg_sub(c)[ref]" at last arrow+(0,textht/3) above }
+Gh: box "\"i`'nverse\"" "of svg_it(G)"
+ arrow from Gh.s down "svg_it(y)svg_sub(m)[ref]" ljust
E: circle
arrow from E.e right "svg_it(e)" above
- box wid boxwid*5/4 "stabilizer" "svg_it(K)"
- arrow "svg_it(du)" above
+ box "stabilizer" "svg_it(K)"
+ arrow "svg_delta`'u" above
D: circle
- line from Gh.e to (D,Gh.e) "svg_it(u`'svg_sub(ref))" above
+ line from Gh.e to (D,Gh.e) "svg_it(u)[ref]" above
arrow to D.n
arrow from D.e right "svg_it(u)" above
G: box "plant" "svg_it(G)"
- arrow <- from G.n up boxht/2
- "disturbance svg_it(z)" above
- arrow right from G.e + (0,boxht/4)
- "svg_it(y`'svg_sub(c))" ljust
- arrow right from G.e + (0,-boxht/4)
- "svg_it(y`'svg_sub(m))" ljust
+ arrow <- from G.n up boxht/2; "disturbance svg_it(z)" above
+ arrow right from G.e + (0,boxht/4); "svg_it(y)svg_sub(c)" wid 0.2 ljust
+ arrow right from G.e + (0,-boxht/4); "svg_it(y)svg_sub(m)" ljust
move to last arrow.c
arrow down Here.y-G.s.y+boxht*2/3 then left Here.x-E.x then to E.s
- "svg_it(-)" at Here + (-0.15,-0.1)
+ "svg_it(-)" rjust below
arrow <- down from R.s
"svg_it(W) control input" at Here - (0,0.1)
-
UL:R.nw +(-boxht/2,boxht/2)
UR:(D.e,UL) + (0.1,0)
line dashed from UL to UR then to (UR,G.s+(0,-boxht*3/2))
line dashed to (Gh.w,Here) "Controller" above
line dashed to (Here,Gh.s+(0,-boxht/2))
line dashed to (UL,Here) then to UL
- ] with .nw at Obs.sw + (0,-0.5)
- "(c) Nonlinear feedforward (for performance) and small-signal feedback
- (for stability)" wid Obs.wid+0.4 below ljust at NL.sw+(0,-5pt__)
+] with .nw at last [].sw + (0,-0.3)
+ "(d) Nonlinear feedforward (for performance) and small-signal feedback
+ (for stability)" below ljust at Nonlinear.sw+(0,-5pt__)
- command "</g>" # end font
+#print PID.n.y - Nonlinear.s.y
+command "</g>"
.PE
diff --git a/graphics/circuit_macros/examples/svg/cscSVG.m4 b/graphics/circuit_macros/examples/svg/cscSVG.m4
index 375881b471..afc633403f 100644
--- a/graphics/circuit_macros/examples/svg/cscSVG.m4
+++ b/graphics/circuit_macros/examples/svg/cscSVG.m4
@@ -1,10 +1,12 @@
-.PS 3.5
+.PS
+#.PS 3.5
# csc.m4
gen_init
-circlerad=1.91*scale
-hubrad=0.10
-s=0.5
+skale = 3.5/3.97*0.9955
+circlerad=1.91*skale
+hubrad=0.10*skale
+s=0.5*skale
define(`midnight',`26,26,112')
define(`white',`255,255,255')
@@ -16,7 +18,7 @@ define(`lwid',1)
define(`coord',`(s*(`$1'),s*(`$2'))')
# Circle and spokes
-# [
+CSC: [
rgbdraw(midnight,
linethick=`0.'eval(lwid*15)/(1pt__)
{circle with .c at Here
@@ -74,6 +76,167 @@ resetrgb
resetrgb
linethick=`0.'eval(lwid*15)/(1pt__)
-# ] with .sw at 1,1
+ ]
+Clock: [
+#.PS
+# AntiqueClockSVG.m4
+#gen_init
+svg_font(font-family="sans-serif" font-stretch="condensed")
+
+# https://tex.stackexchange.com/questions/236923/generate-analog-clock-with-numbered-face-add-seconds-roman-numerals
+
+#svg_rot_init(AntiqueClockSVG)
+#svg_rot_init(test)
+svg_rot_init(cscSVG)
+
+# `hms2deg(hr,min,sec) hr:min:sec to degrees
+# blank arg1: degrees for minute hand
+# blank arg1 and arg2: degrees for second hand'
+define(`hms2deg',`ifelse(`$1',,
+ `ifelse(`$2',,
+ `(90-pmod(ifelse(`$3',,0,`$3'),60)/60*360)',
+ `(90-(pmod(`$2',60)/60 + pmod(ifelse(`$3',,0,`$3'),60)/60/60)*360)')',
+ `(90-(pmod(`$1',12) + pmod(ifelse(`$2',,0,`$2'),60)/60 + dnl
+ pmod(ifelse(`$3',,0,`$3'),60)/3600)/12*360)')')
+
+# `SecondHand(length,hr,min,sec)'
+define(`SecondHand',`[ shsf = (`$1')/3.2
+ C: Here
+ { L: rpoint_(to (Rect_(`$1',hms2deg(,,`$4')))) }
+ line thick 8*shsf to rvec_(`$1',0)
+ ]')
+
+# `AntiqueMinuteHand(length,hr,min,sec)'
+define(`AntiqueMinuteHand',`[ mhsf = (`$1')/2.84
+ L: rpoint_(to (Rect_(`$1',hms2deg(,`$3',`$4'))))
+ C: circle fill_(0) diam 0.47*mhsf at L.start
+ move to C
+ spline from rvec_(0,0.047*mhsf) \
+ to rvec_(1.65*mhsf,0.11*mhsf) \
+ then to rvec_(`$1',0.018*mhsf) \
+ then to rvec_(`$1',-0.018*mhsf) \
+ then to rvec_(1.65*mhsf,-0.11*mhsf) \
+ then to rvec_(0,-0.047*mhsf) \
+ shaded rgbstring(0,0,0)
+ ]')
+
+# `AntiqueHourHand(length,hr,min,sec)'
+define(`AntiqueHourHand',`[ hhsf = (`$1')/2.2
+ L: rpoint_(to (Rect_(`$1',hms2deg(`$2',`$3',`$4'))))
+ C: circle fill_(0) diam 0.6*hhsf at L.start
+ move to C
+ v = 0.25*hhsf
+ { line to rvec_(1.1*hhsf,0) thick 0.15/(1bp__)*hhsf }
+ C1: rvec_(1.25*hhsf,0)
+ d = `$1'-1.25*hhsf
+ q = 1bp__*hhsf
+ r1 = (d^2 + q^2 - v^2)/(v-q)/2
+ tang = atan2((r1+q),d)
+ for i=0 to 3 do {
+ X[i]: C1+vec_(rect_(v, pi_+i/3*( tang-pi_)))
+ Y[i]: C1+vec_(rect_(v,-pi_+i/3*(-tang+pi_)))
+ }
+ n = 3
+ for i=1 to 4 do { aa = -pi_+tang + i/4*(pi_/2-tang)
+ XX: (d,r1+q)+(rect_(r1,aa))
+ n+=1;
+ X[n]: C1+vec_(XX.x, XX.y)
+ Y[n]: C1+vec_(XX.x,-XX.y)
+ }
+ m = n
+ for i= 0 to m do { n+=1; X[n]: Y[m-i] }
+ fitcurve(X,n,shaded rgbstring(0,0,0))
+ ]')
+
+define(`AntiqueClock',`[ # h,m,s,diam
+# Clock size parameters:
+ hour = ifelse(`$1',,3,`$1')
+ minute = ifelse(`$2',,41,`$2')
+ second = ifelse(`$3',,51,`$3')
+ # outer radius
+ ifelse(`$4',,`skale=0.5; r1=2',`r1=(`$4')/2; skale=r1/4')
+ r2 = r1 - 0.5*skale
+ r3 = r2 - 0.14*skale
+ r4 = r3 - 0.35*skale
+ r5 = r4 - 0.17*skale
+ r6 = r5 - 0.63*skale
+ r7 = r6 - 0.17*skale
+ shadelinethick = 1.0
+
+C: circle thick 0.2 rad r1
+
+define shadeline {
+ s = 1-($`'1)*2
+ v = r*s
+ h = sqrt(r^2-v^2)
+ t = 1-abs(s)
+ line from (vrot_(-h,v,cost,sint)) to (vrot_(h,v,cost,sint)) \
+ thick shadelinethick outlined rgbstring(t,t,t)
+ }
+
+ r = r1 # Bezel outer
+ nlines = int(2*r/(shadelinethick pt__)*1.1)
+ cost = cosd(10); sint = sind(10);
+ ShadeObject(shadeline,nlines, 0, 0,0,0, 0.5, 1,1,1, 1, 0,0,0 ) at C
+
+ r = r2 # Bezel inner
+ nlines = int(2*r/(shadelinethick pt__)*1.1)
+ cost = cosd(-10); sint = sind(-10);
+ ShadeObject(shadeline,nlines, 0, 0,0,0, 0.25, 0.8,0.8,0.8, 0.5, 1,1,1,
+ 0.75, 0.8,0.8,0.8, 1, 0,0,0 ) at C
+
+# Clock face
+Face: circle thick 0 fill_(1) rad r3 at C
+ circle rad r4 at C
+ circle rad r5 at C
+ circle rad r6 at C
+ circle rad r7 at C
+# Ad hoc shift of rotated SVG text
+ define adj { (-cosd($`'1)*textht*0.5*sign(180-($`'1)),\
+ (0.25+0.25*cosd(2*($`'1)))*textht) }
+# Outer numbers
+ textht = (r3-r4)*0.6
+ for mn = -15 to 15 by 5 do { t = 90-mn/60*360
+ R:(Rect_((r3+r4)/2,t))
+ svg_rot(-mn/60*360,sprintf("%g",pmod(mn,60)) at C+R+adj(t))
+ }
+ for mn = 20 to 40 by 5 do { t = 450-mn/60*360
+ R: (Rect_((r3+r4)/2,t))
+ svg_rot(180-mn/60*360, sprintf("%g",pmod(mn,60)) at C+R+adj(t))
+ }
+# Outer tics
+ for mn = 1 to 60 do { t = 90-mn/60*360
+ line from C+(Rect_(r5,t)) to C+(Rect_(r4,t)) }
+
+# Inner numbers
+ textht = (r5-r6)*0.6
+ Loopover_(`mx',`tt = 90-(m4Lx-4)/12*360
+ R: (Rect_((r5+r6)/2,tt))
+ svg_rot(tt-90, "mx" at C+R+adj(tt)) ',
+ IX,X,XI,XII,I,II,III)
+ Loopover_(`mx',`tt = 360-m4Lx*30
+ R: (Rect_((r5+r6)/2,tt))
+ svg_rot(tt-270, "mx" at C+R+adj(tt)) ',
+ IV,V,VI,VII,VIII)
+
+# Inner tics
+ for mn = 5 to 60 by 5 do { t = 90-mn/60*360
+ line from C+(Rect_(r7,t)) to C+(Rect_(r6,t)) }
+
+# Hands
+ AntiqueHourHand(r6,hour,minute,second) with .C at C
+ AntiqueMinuteHand(r5,hour,minute,second) with .C at C
+ SecondHand((r3+r4)/2,hour,minute,second) with .C at C
+
+# Center
+ dot(at C,0.1/4*r1,1)
+ ]')
+
+ Clock1: AntiqueClock(,,,3.5)
+# Clock2: AntiqueClock(4,48,07,2) at Clock1.e+(1.5,0)
+
+ command "</g>" # end font
+#.PE
+ ] with .sw at last [].se+(0.25,0)
.PE
diff --git a/graphics/circuit_macros/examples/svg/ex21SVG.m4 b/graphics/circuit_macros/examples/svg/ex21SVG.m4
index 785c13361e..b9aa8ac18d 100644
--- a/graphics/circuit_macros/examples/svg/ex21SVG.m4
+++ b/graphics/circuit_macros/examples/svg/ex21SVG.m4
@@ -7,13 +7,9 @@ ddy = 1.8*dy
textht = textht*0.9
D: FlipFlop(D)
- line right 5bp__ at last [] . 1nd last ""+(-7bp__,4bp__)
T: FlipFlop(T) with .Chip.sw at last [].se + (0.4,0)
- line right 5bp__ at last [] . 1nd last ""+(-7bp__,4bp__)
RS: FlipFlop(RS) with .Chip.sw at last [].se + (0.4,0)
- line right 5bp__ at last [] . 1nd last ""+(-7bp__,4bp__)
JK: FlipFlop(JK) with .Chip.sw at last [].se + (0.4,0)
- line right 5bp__ at last [] . 2nd last ""+(-7bp__,4bp__)
`"FlipFlop(JK)"' at JK.s below
`"FlipFlop(RS)"' at (RS.s,JK.s) below
`"FlipFlop(T)"' at (T.s,JK.s) below
@@ -21,7 +17,6 @@ JK: FlipFlop(JK) with .Chip.sw at last [].se + (0.4,0)
# Test 3: synchronous 3-bit counter
define(`counterFF',``$1':FlipFlop(JK) `$2'
- line right 5bp__ at last [] . 2nd last ""+(-7bp__,4bp__)
"`$1'" at `$1'.Chip.sw-(3bp__,0) below ljust
"1" at `$1'.PinCLR.end above
"1" at `$1'.PinPR.end below')
diff --git a/graphics/circuit_macros/examples/svg/examplesSVG.htmx b/graphics/circuit_macros/examples/svg/examplesSVG.htmx
index 8bec348222..22ab9f9c42 100644
--- a/graphics/circuit_macros/examples/svg/examplesSVG.htmx
+++ b/graphics/circuit_macros/examples/svg/examplesSVG.htmx
@@ -154,6 +154,7 @@ There are a number of other issues:
e.g. m4tt`'svg_tspan(font-style="italic" font-size="75%",XYZ)</g>
<li>m4tt svg_it(</g>text`'m4tt)</g>: for italics
<li>m4tt svg_tt(</g>text`'m4tt)</g>: for monospace (courier)
+ <li>m4tt svg_sf(</g>text`'m4tt)</g>: sans-serif (Helvetica)
<li>m4tt svg_norm(</g>text`'m4tt)</g>: for normal text
<li>m4tt svg_bf(</g>text`'m4tt)</g>: for bold face
<li>m4tt svg_small(</g>text, percent`'m4tt)</g>:
@@ -162,8 +163,13 @@ There are a number of other issues:
for setting larger or smaller text size, default 100
<li>m4tt svg_sub(</g>text, size percent, y displ, x displ`'m4tt)</g>:
subscript
+ <li>m4tt svg_ul(</g>text`'m4tt)</g>: underlined text
+ <li>m4tt svg_ol(</g>text`'m4tt)</g>: overlined text
<li>m4tt svg_sup(</g>text, size percent, y displ, x displ`'m4tt)</g>:
superscript
+ <li>m4tt svg_hat(</g>character`'m4tt)</g>: circumflex-accented character
+ <li>m4tt svg_frac(</g>numerator[:wid], denominator[:wid]`'m4tt)</g>:
+ basic fraction, wid in drawing units
<li>m4tt svg_rot(</g>degrees, "text" [at position]`'m4tt)</g>:
Rotate text degrees (default 90) ccw.
Requires m4tt`'svg_rot_init(</g>filename`'m4tt)</g> and the source
@@ -184,6 +190,8 @@ There are a number of other issues:
<!--
Reference:
https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
+ and
+ https://www.toptal.com/designers/htmlarrows/math/
-->
<hr width="100%" align="left">
<table cellpadding="2" cellspacing="0" width="75%" >
@@ -292,8 +300,17 @@ There are a number of other issues:
<hr>
-cfig(CctTableSVG,
- Two-terminal elements, showing some variations)
+cfig(ResistorsSVG,
+ Resistors, showing some variations)
+
+cfig(CapacitorsSVG,
+ Capacitors)
+
+cfig(InductorsSVG,
+ Inductors)
+
+cfig(MoreTableSVG,
+ Some other two-terminal elements)
cfig(DiodesSVG,
Diodes: a m4tt`'K</g> in the second argument draws an open
@@ -361,7 +378,11 @@ cfig(HeadersSVG,
The m4tt`'Header</g> macro)
cfig(ConnectorsSVG,
- Some connectors with simple geometry and lists of labels)
+ Some integrated circuits and connectors with simple geometry
+ and lists of labels)
+
+cfig(ChipsSVG,
+ IC outlines)
cfig(fetSVG,
FETs`,' showing programmable components and example customizations)
@@ -547,6 +568,10 @@ cfig(ABlogixSVG,
cfig(XORSVG,
Realizations of the XOR function using m4tt`'Autologix</g>)
+cfig(EEPSVG,
+ Part of a single-line diagram of a power distribution system
+ using draft elements)
+
cfig(paletteSVG,
A draft palette of a few elements for Inkscape using
a 1 mm grid)
@@ -555,13 +580,14 @@ cfig(ex00SVG,
Line diagrams)
cfig(controlSVG,
- Control-system block diagrams that do not require m4)
+ Control-system block diagrams)
cfig(GrayCodeSVG,
- Gray code 10-bit encoder disk pattern)
+ Gray code 10-bit encoder disk pattern`,'
+ and a crossbar switch)
-cfig(CrossbarSVG,
- A crossbar switch)
+#cfig(CrossbarSVG,
+# A crossbar switch)
cfig(ByteSVG,
Elementary splines)
@@ -591,7 +617,7 @@ cfig(ex09SVG,
specifies the arc to be dimensioned and the second argument is
the outward radial offset of the dimension arrow arc.)
-cfig(Y14-5SVG,
+cfig(PlateSVG,
Dimensioning with tolerances according to ASME Y14.5)
Use of m4tt`'darrow</g> and m4tt`'Darc</g>)
@@ -602,10 +628,10 @@ cfig(LoglogSVG,
A graph drawn using the pic language)
cfig(GeometrySVG,
- A plane geometry example)
+ A plane geometry example`,' and an illustration of a Lyapunov function)
-cfig(LyapSVG,
- Illustrating a Lyapunov function)
+#cfig(LyapSVG,
+# Illustrating a Lyapunov function)
cfig(randomSVG,
Testing random numbers)
@@ -622,21 +648,23 @@ cfig(graysurfSVG,
cfig(shapesSVG,
Basic shapes)
-cfig(AntiqueClockSVG,
- An antique clock face)
+#fig(AntiqueClockSVG,
+# An antique clock face)
cfig(cscSVG,
- Conestoga Sailing Club (illustrating the filling of arbitrary
- shapes))
+ Conestoga Sailing Club (illustrating the filling of arbitrary shapes)`,'
+ and an antique clock face with shading and rotated text)
cfig(roseSVG,
- Redrawn from a detail of the set design for the musical
- <i>Dracula</i>`,' used for testing m4tt`'dpic</g>. This diagram
+ A window redrawn from a detail of the set design for the musical
+ <i>Dracula</i>`,' used for testing m4tt`'dpic</g>`,'
+ and an experimental halftone. This diagram
consumes much LaTeX main memory but can be produced
directly as pdf using m4tt`'dpic -d</g>`,'
as svg using m4tt`'dpic -g</g>`,'
or as postscript using m4tt`'dpic -r</g>
- since no text formatting is required)
+ since no text formatting is required. The right object
+ adjusts the size of dots to produce a halftone effect)
cfig(diamondSVG,
Variations on M. Goossens`,' S. Rahtz`,' and F. Mittelbach`,'
diff --git a/graphics/circuit_macros/examples/svg/expSVG.m4 b/graphics/circuit_macros/examples/svg/expSVG.m4
index deff7bae07..27209b094e 100644
--- a/graphics/circuit_macros/examples/svg/expSVG.m4
+++ b/graphics/circuit_macros/examples/svg/expSVG.m4
@@ -76,37 +76,37 @@ arad = 0.6*g
define(`D3',`0.3*g,0.6*g,0.9*g')
# fixed coordinate frame
-O: project(O3)
-X: project(X0)
-Y: project(Y0)
+O: Project(O3)
+X: Project(X0)
+Y: Project(Y0)
Fector(X0,Z0) with .Origin at O ; "svg_it(x`'svg_sub(0))" at X rjust
Fector(Y0,Z0) with .Origin at O ; "svg_it(y`'svg_sub(0))" at Y ljust below
- Fector(Z0,Y0) with .Origin at O ; "svg_it(z`'svg_sub(0))" at project(Z0) above
+ Fector(Z0,Y0) with .Origin at O ; "svg_it(z`'svg_sub(0))" at Project(Z0) above
define(`R01',`rot3Dz(pazim,rot3Dy(-pelev,$1,$2,$3))')
define(`R10',`rot3Dy(pelev,rot3Dz(-pazim,$1,$2,$3))')
thinlines_ ; psset_(linecolor=gray)
- line from O to project(rot3Dz(pazim,axlen,0,0))
+ line from O to Project(rot3Dz(pazim,axlen,0,0))
psset_(linecolor=black)
- arc -> ccw from project(arad,0,0) to project(rot3Dz(pazim,arad,0,0)) rad arad
+ arc -> ccw from Project(arad,0,0) to Project(rot3Dz(pazim,arad,0,0)) rad arad
"svg_theta" below
up_
- arc -> cw from project(rot3Dz(pazim,arad,0,0)) \
- to project(R01(arad,0,0)) rad arad
- "svg_phi" rjust at project(rot3Dz(pazim,rot3Dy(-pelev/2,arad,0,0)))
- arc -> from project(0,arad,0) to project(R01(0,arad,0)) rad arad
+ arc -> cw from Project(rot3Dz(pazim,arad,0,0)) \
+ to Project(R01(arad,0,0)) rad arad
+ "svg_phi" rjust at Project(rot3Dz(pazim,rot3Dy(-pelev/2,arad,0,0)))
+ arc -> from Project(0,arad,0) to Project(R01(0,arad,0)) rad arad
"svg_theta" above
right_
- arc -> cw from project(0,0,arad/2) to project(R01(0,0,arad/2)) rad arad/2
+ arc -> cw from Project(0,0,arad/2) to Project(R01(0,0,arad/2)) rad arad/2
"svg_phi" ljust at Here+(-1pt__,-3pt__)
Fector(R01(X0),R01(Z0)) with .Origin at O ;
- "svg_it(x`'svg_sub(1))" above rjust at project(R01(X0))
+ "svg_it(x`'svg_sub(1))" above rjust at Project(R01(X0))
Fector(R01(Y0),R01(Z0)) with .Origin at O ;
- "svg_it(y`'svg_sub(1))" ljust at project(R01(Y0))
+ "svg_it(y`'svg_sub(1))" ljust at Project(R01(Y0))
Fector(R01(Z0),R01(Y0)) with .Origin at O ;
- "svg_it(z`'svg_sub(1))" above at project(R01(Z0))
+ "svg_it(z`'svg_sub(1))" above at Project(R01(Z0))
thicklines_
# box object dimension
@@ -116,23 +116,23 @@ h = 0.20*g
# box object corners
define(`B0',`D3')
-define(`B1',`sum3D(D3,d,0,0)') PB1: project(B1)
-define(`B2',`sum3D(D3,d,b,0)') PB2: project(B2)
-define(`B3',`sum3D(D3,0,b,0)') PB3: project(B3)
-define(`B4',`sum3D(D3,0,0,h)') PB4: project(B4)
-define(`B5',`sum3D(D3,d,0,h)') PB5: project(B5)
-define(`B6',`sum3D(D3,d,b,h)') PB6: project(B6)
-define(`B7',`sum3D(D3,0,b,h)') PB7: project(B7)
+define(`B1',`sum3D(D3,d,0,0)') PB1: Project(B1)
+define(`B2',`sum3D(D3,d,b,0)') PB2: Project(B2)
+define(`B3',`sum3D(D3,0,b,0)') PB3: Project(B3)
+define(`B4',`sum3D(D3,0,0,h)') PB4: Project(B4)
+define(`B5',`sum3D(D3,d,0,h)') PB5: Project(B5)
+define(`B6',`sum3D(D3,d,b,h)') PB6: Project(B6)
+define(`B7',`sum3D(D3,0,b,h)') PB7: Project(B7)
# projected corners
-P0:project(R01(0,dcosine3D(2,R10(B0)),dcosine3D(3,R10(B0))))
-P1:project(R01(0,dcosine3D(2,R10(B1)),dcosine3D(3,R10(B1))))
-P2:project(R01(0,dcosine3D(2,R10(B2)),dcosine3D(3,R10(B2))))
-P3:project(R01(0,dcosine3D(2,R10(B3)),dcosine3D(3,R10(B3))))
-P4:project(R01(0,dcosine3D(2,R10(B4)),dcosine3D(3,R10(B4))))
-P5:project(R01(0,dcosine3D(2,R10(B5)),dcosine3D(3,R10(B5))))
-P6:project(R01(0,dcosine3D(2,R10(B6)),dcosine3D(3,R10(B6))))
-P7:project(R01(0,dcosine3D(2,R10(B7)),dcosine3D(3,R10(B7))))
+P0:Project(R01(0,dcosine3D(2,R10(B0)),dcosine3D(3,R10(B0))))
+P1:Project(R01(0,dcosine3D(2,R10(B1)),dcosine3D(3,R10(B1))))
+P2:Project(R01(0,dcosine3D(2,R10(B2)),dcosine3D(3,R10(B2))))
+P3:Project(R01(0,dcosine3D(2,R10(B3)),dcosine3D(3,R10(B3))))
+P4:Project(R01(0,dcosine3D(2,R10(B4)),dcosine3D(3,R10(B4))))
+P5:Project(R01(0,dcosine3D(2,R10(B5)),dcosine3D(3,R10(B5))))
+P6:Project(R01(0,dcosine3D(2,R10(B6)),dcosine3D(3,R10(B6))))
+P7:Project(R01(0,dcosine3D(2,R10(B7)),dcosine3D(3,R10(B7))))
thinlines_
line from PB1 to P1
line from PB2 to P2
@@ -178,24 +178,24 @@ thicklines_
alpha = rectht/3
# # Rectangle
- NW: project(-rectht/2,-rectwid*0.25,0)
- SW: project( rectht/2,-rectwid*0.25,0)
- SE: project( rectht/2, rectwid*0.75,0)
- NE: project(-rectht/2, rectwid*0.75,0)
+ NW: Project(-rectht/2,-rectwid*0.25,0)
+ SW: Project( rectht/2,-rectwid*0.25,0)
+ SE: Project( rectht/2, rectwid*0.75,0)
+ NE: Project(-rectht/2, rectwid*0.75,0)
shadedpolygon(NW:NE:SE:SW,,-90,
0,0.25,0.25,0.25,
1,1,1,1) with .Start at NW
define(`C3D',`0,0,alpha') # Centre of the sphere
- C: project(C3D)
+ C: Project(C3D)
# # Shaded sphere using PSTricks or tikz:
# # this is black magic but PSTricks
# # seems to give more control
# ifpstricks(
# `Highlight: \
-# project(sum3D(C3D,rot3Dz(-15*dtor_,rot3Dy(-60*dtor_,alpha,0,0))))
+# Project(sum3D(C3D,rot3Dz(-15*dtor_,rot3Dy(-60*dtor_,alpha,0,0))))
# command "\pscustom[fillstyle=gradient,gradmidpoint=0.0,%"
# command sprintf("gradbegin=gray,gradend=white,gradlines=%g,%%",alpha*200)
# command "GradientCircle=true,GradientScale=1.5,%"
@@ -218,16 +218,16 @@ thicklines_
"svg_alpha" at 0.5<S,C> ljust
define(`N3D',`0,0,2*alpha') # North pole
- N: project(N3D)
+ N: Project(N3D)
"svg_it(N)" at N+(0,3pt__) ljust
phi = 65*dtor_
define(`Phat3D',`rot3Dz(phi,alpha*3,0,0)')
- Phat: "svg_it(P)" at project(Phat3D) ljust
+ Phat: "svg_it(P)" at Project(Phat3D) ljust
"svg_symbol(&`#'94;)" at last "".n ljust
- X: project(rectht/2*0.8,0,0)
- Y: project(0,rectwid/2*0.8,0)
+ X: Project(rectht/2*0.8,0,0)
+ Y: Project(0,rectwid/2*0.8,0)
`define' linevis { # ratio # Visibility function for lines fom S to Tmp
Tlv: $1 between S and Tmp
@@ -247,8 +247,8 @@ thinlines_ # axes
arrow up alpha*0.5 chop 0.05 chop 0 ; "svg_it(z)" above
invisline(Phat)
line to Phat chop 0.05 chop 0
- arc ccw -> rad alpha from project(alpha/2,0,0) to \
- project(rot3Dz(phi,alpha/2,0,0))
+ arc ccw -> rad alpha from Project(alpha/2,0,0) to \
+ Project(rot3Dz(phi,alpha/2,0,0))
"svg_phi" below at 0.5 between last arc.start and last arc.end
# vector (ratio along (N to Phat))
@@ -257,7 +257,7 @@ define(`ray',`sum3D(N3D,sprod3D($1,diff3D(Phat3D,N3D)))')
$2 = length3D(diff3D(ray($1),C3D))-alpha }
findroot(rayvis, 1e-3, 1, 1e-8, p) # Find P
- P: "svg_it(P)" at project(ray(p)) ljust above
+ P: "svg_it(P)" at Project(ray(p)) ljust above
thicklines_
line dashed from N to P chop 0 chop 0.05
@@ -271,11 +271,11 @@ thinlines_ # Draw the meridian
findroot(meridianvis, 0, pi_, 1e-8, y)
n = 0
for ang = y-pi_ to y by pi_/20 do {
- Q[n]: project(sum3D(C3D,meridian(ang))); n+=1 }
+ Q[n]: Project(sum3D(C3D,meridian(ang))); n+=1 }
fitcurve(Q,n-1)
n = 0
for ang = y to y+pi_ by pi_/20 do {
- Q[n]: project(sum3D(C3D,meridian(ang))); n+=1 }
+ Q[n]: Project(sum3D(C3D,meridian(ang))); n+=1 }
fitcurve(Q,n-1,dashed)
define(`equator',`rot3Dz($1,alpha,0,0)')
@@ -285,15 +285,15 @@ define(`equator',`rot3Dz($1,alpha,0,0)')
findroot(equatorvis, 0, pi_, 1e-8, y)
n = 0
for ang = y-pi_ to y by pi_/20 do {
- Q[n]: project(sum3D(C3D,equator(ang))); n+=1 }
+ Q[n]: Project(sum3D(C3D,equator(ang))); n+=1 }
fitcurve(Q,n-1)
n = 0
for ang = y to y+pi_ by pi_/20 do {
- Q[n]: project(sum3D(C3D,equator(ang))); n+=1 }
+ Q[n]: Project(sum3D(C3D,equator(ang))); n+=1 }
fitcurve(Q,n-1,dashed)
line dashed from C to P # beta
- line dashed from C to project(sum3D(C3D,equator(phi)))
+ line dashed from C to Project(sum3D(C3D,equator(phi)))
arc ccw -> from 0.6 along_(last line) to 0.6 between C and P
"svg_beta" ljust at last arc.e+(0,2pt__)
diff --git a/graphics/circuit_macros/examples/svg/fetSVG.m4 b/graphics/circuit_macros/examples/svg/fetSVG.m4
index 2393513219..8495eb9e94 100644
--- a/graphics/circuit_macros/examples/svg/fetSVG.m4
+++ b/graphics/circuit_macros/examples/svg/fetSVG.m4
@@ -1,13 +1,14 @@
.PS
# `fetSVG.m4'
cct_init(svg_font(Times,11bp__))
-dwn = 0.8
-rgt = 0.9
+
+textht = 0.1
+define(`rmove',0.75)
dnl `IRF4905(linespec,R)'
define(`IRF4905',
`[ ifelse(`$1',,,`eleminit_(`$1')')
- Q: mosfet(,`$2',LdPzEDSQdB,) ifelse(`$1',,`
+ Q: mosfet(,`$2',dMdPzEDSQdB,) ifelse(`$1',,`
S: Q.tr_xy(-4,-2); line from Q.tr_xy(-2,-2) to S
D: Q.tr_xy( 4,-2); line from Q.tr_xy(2,-2) to D',
`with .Diode.c at last line.c
@@ -15,138 +16,153 @@ define(`IRF4905',
G: Q.G
circle rad 5*dimen_/10 at Q.tr_xy(0,1) ]')
-define(`rmove',0.75)
-define(`dir_',`right_')
-
-dir_
- {j_fet(right_ dimen_,,,E)
- `"j_fet(right_ dimen_,,,E)"' wid 1.5 at last [].s+(0.0,-0.05) below
- "G" at last [].G rjust above
- "S" at last [].S rjust
- "D" at last [].D ljust
- }
-
- {move down_ dwn; dir_
- j_fet(,,P,)
- `"j_fet(,,P,)"' at last [].s+(0,-0.05) below
- "G" at last [].G rjust
- "S" at last [].S rjust
- "D" at last [].D ljust
- }
-
- move right_ 1.35; dir_
- {e_fet(,R,,)
- `"e_fet(,R,,)"' at last [].s+(0,-0.2) below
- "G" at last [].G rjust
- "S" at last [].S rjust
- "D" at last [].D ljust
- }
-
- {move down_ dwn; dir_
- e_fet(,,P,)
- `"e_fet(,,P,)"' at last [].s+(0,-0.05) below}
-
- move right_ 1; dir_
- {d_fet(,,,)
- `"d_fet(,,,)"' at last [].s+(0,-0.05) below}
-
- {move down_ dwn; dir_
- d_fet(,,P,)
- `"d_fet(,,P,)"' at last [].s+(0,-0.05) below}
-
- move right_ 1; dir_
- {e_fet(,,,S)
- `"e_fet(,,,S)"' at last [].s+(0,-0.05) below}
-
- {move down_ dwn; dir_
- e_fet(,,P,S)
- `"e_fet(,,P,S)"' at last [].s+(0,-0.05) below}
-
- move right_ 1; dir_
- {d_fet(,,,S)
- `"d_fet(,,,S)"' at last [].s+(0,-0.05) below}
-
- {move down_ dwn; dir_
- d_fet(,,P,S)
- `"d_fet(,,P,S)"' at last [].s+(0,-0.05) below}
-right_
-{ [
- c_fet(,,,)
- `"c_fet(,,,)"' at last [].s+(0,-0.05) below
- move right rgt from last [].e
- c_fet(,,P)
- `"c_fet(,,P)"' at last [].s+(0,-0.05) below
- ] with .n at 5th last [].s+(0,-0.3)
- }
-move down 1; right_
-[
+{move left 20bp__}
+Row1: [ J: j_fet
+ { "svg_tt(`j_fet')" at J.s+(0,-0.05) below
+ "svg_it(G)" at J.G rjust
+ "svg_it(S)" at J.S rjust
+ "svg_it(D)" at J.D ljust }
+ J: j_fet(right_ dimen_,,P,E) with .w at J.e+(0.5,0)
+ { "svg_tt(`j_fet(right_')" at J.s+(0,-4bp__) below "svg_tt(`dimen_,,P,E)')"
+ "svg_it(G)" at J.G rjust above
+ "svg_it(S)" at J.S rjust
+ "svg_it(D)" at J.D ljust }
+ J: e_fet with .w at J.e+(0.5,0)
+ { "svg_tt(` e_fet')" at J.s+(0,-0.05) below
+ "svg_it(G)" at J.G rjust
+ "svg_it(S)" at J.S rjust
+ "svg_it(D)" at J.D ljust }
+ J: e_fet(,,P) with .w at J.e+(0.6,0)
+ { "svg_tt(` e_fet(,,P)')" at J.s+(0,-0.05) below
+ "svg_it(G)" at J.G rjust
+ "svg_it(S)" at J.S rjust
+ "svg_it(D)" at J.D ljust }
+ J: e_fet(,,P,S) with .w at J.e+(0.8,0)
+ { "svg_tt(` e_fet(,,P,S)')" at J.s+(0,-0.05) below
+ "svg_it(G)" at J.G rjust
+ "svg_it(S)" at J.S rjust
+ "svg_it(D)" at J.D ljust }
+ J: c_fet with .w at J.e+(0.7,0)
+ { "svg_tt(` c_fet')" at J.s+(0,-0.05) below
+ "svg_it(G)" at J.G rjust
+ "svg_it(S)" at J.S rjust
+ "svg_it(D)" at J.D ljust }
+ J: c_fet(,,P) with .w at J.e+(0.7,0)
+ { "svg_tt(` c_fet(,,P)')" wid 72bp__ at J.s+(0,-0.05) below
+ "svg_it(G)" at J.G rjust
+ "svg_it(S)" at J.S rjust
+ "svg_it(D)" at J.D ljust }
+ ]
+
+Row2: [
+ J: d_fet
+ { "svg_tt(`d_fet')" at J.s+(0,-0.05) below
+ "svg_it(G)" at J.G rjust
+ "svg_it(S)" at J.S rjust
+ "svg_it(D)" at J.D ljust }
+ J: d_fet(,,P) with .w at J.e+(0.5,0)
+ { "svg_tt(`d_fet(,,P)')" at J.s+(0,-0.05) below
+ "svg_it(G)" at J.G rjust
+ "svg_it(S)" at J.S rjust
+ "svg_it(D)" at J.D ljust }
+ J: d_fet(,,P,S) with .w at J.e+(0.8,0)
+ { "svg_tt(`d_fet(,,P,S)')" at J.s+(0,-0.05) below
+ "svg_it(G)" at J.G rjust
+ "svg_it(S)" at J.S rjust
+ "svg_it(D)" at J.D ljust }
+ J: g_fet with .w at J.e+(0.6,0)
+ { "svg_tt(`g_fet')" at J.s+(0,-0.05) below
+ "svg_it(G)" at J.G rjust
+ "svg_it(S)" at J.S rjust
+ "svg_it(D)" at J.D ljust }
+ J: g_fet(up_ dimen_,,P) with .w at J.e+(0.6,0)
+ { "svg_tt(`g_fet(up_')" at last [].s below
+ "svg_tt(` dimen_,,P)')" at last [].s + (0,-12bp__) below
+ "svg_it(G)" at last [].G rjust
+ "svg_it(S)" at last [].S + (0,2bp__) ljust
+ "svg_it(D)" at last [].D + (0,2bp__) ljust below }
+ right_
+ M1: mosfet(,,dBSDFQM1,E) with .w at J.e+(0.6,0)
+ "svg_it(G0)" at M1.G0 above rjust
+ "svg_it(G1)" at M1.G1 above ljust
+ {"svg_tt(`mosfet(,,dBSDFQM1,E)')" wid 1.45 \
+ with .nw at last [].sw+(0,-0.2) }
+ M2: mosfet(,,dBSDFQuM1) with .nw at M1.ne+(0.6,0)
+ "svg_it(G0)" at M2.G0 above ljust
+ "svg_it(G1)" at M2.G1 above rjust
+ {"svg_tt(`...(,,dBSDFQuM1')" wid 1.25 \
+ with .n at last [].s+(0,-0.05) }
+ ] with .nw at Row1.sw+(0,-10bp__) # Row2
+
+Row3: [
linewid = linewid*1.2
Q1: mosfet(,,dGSDF,)
- { "`mosfet'(,,dGSDF,)" at last [].s+(0,-0.1) below wid 1.3
+ {"svg_tt(`mosfet(,,dGSDF,)')" wid 1.25 \
+ with .nw at last [].sw+(-0.2,-0.05)
thinlines_
arrow <- down .05 left .15 from (Q1.G.x,Q1.G.y-0.05)
- "dG" rjust
+ "svg_tt(dG)" rjust
arrow <- down .10 left .30 from Q1.Channel.start+(.15,0)
- "F" rjust
+ "svg_tt(F)" rjust
arrow <- down .05 left .15 from (Q1.S.x,Q1.S.y+0.05)
- "S" rjust
+ "svg_tt(S)" rjust
arrow <- down .05 right .15 from (Q1.D.x,Q1.D.y+0.05)
- "D" ljust
+ "svg_tt(D)" ljust
thicklines_ }
move right_ rmove
Q2: mosfet(,,uHSDF,)
- {"`...'(,,uHSDF,)" at last [].s+(0,-0.15) below
+ {"svg_tt(`...(,,uHSDF,)')" at last [].s+(0,-0.2) below
thinlines_
arrow <- down .05 left .15 from (Q2.G.x,Q2.G.y-0.05)
- "uH" rjust
+ "svg_tt(uH)" rjust
thicklines_ }
move right_ rmove
- Q3: mosfet(,,LEDSQuB,)
- {"`...'(,,LEDSQuB,)" at last [].s+(0,-0.15) below
+ Q3: mosfet(,,dMEDSQuB,)
+ {"svg_tt(`...(,,dMEDSQuB,)')" at last [].s+(0,-0.05) below
thinlines_
arrow <- down .05 left .15 from (Q3.G.x,Q3.G.y-0.05)
- "L" rjust
+ "svg_tt(dM)" rjust
arrow <- down .13 left .30 from Q3.Channel.start+(.12,0)
- "E" rjust
+ "svg_tt(E)" rjust
arrow <- down .05 left .10 from Q3.S+(.06,0)
- "Q" rjust
+ "svg_tt(Q)" rjust
arrow <- down .08 right .24 from (Q3.B.x,Q3.B.y+0.175)
- "uB" ljust
+ "svg_tt(uB)" ljust
thicklines_ }
move right_ rmove
- Q4: mosfet(,,LEDSuB)
- {`"...(,,LEDSuB)"' at last [].s+(0,-0.15) below
- "G" at last [].G rjust
- "S" at last [].S rjust
- "D" at last [].D ljust
- "B" at last [].B below
+ Q4: mosfet(,,uMEDSuB)
+ {"svg_tt(`...(,,uMEDSuB,)')" at last [].s+(0,-0.2) below
+ "svg_it(G)" at last [].G rjust
+ "svg_it(S)" at last [].S rjust
+ "svg_it(D)" at last [].D ljust
+ "svg_it(B)" at last [].B below
}
move right_ rmove
Q5: mosfet(,,ZSDFdT,)
- {"`...'(,,ZSDFdT,)" at last [].s+(0,-0.05) below
+ {"svg_tt(`...(,,ZSDFdT)')" at last [].s+(0,-0.05) below
thinlines_
arrow <- down .08 left .08 from (Q5.S.x,Q5.S.y+0.12)
- "Z" rjust
+ "svg_tt(Z)" rjust
arrow from last arrow.end to Q5.Channel.c+(0.05,0)
arrow from last arrow.start to (Q5.D.x,Q5.D.y+.05)
arrow <- down .08 right .24 from (Q5.G.x,Q5.G.y-0.02)
- "dT" ljust
+ "svg_tt(dT)" ljust
thicklines_ }
- move right_ rmove
+ move right_ rmove+0.1
up_
Q6: IRF4905 with .c at Here
- {`"IRF4905"' at Q6.s+(0,-0.15) below
- "G" at Q6.G rjust
- "D" wid 0.1 at Q6.D ljust above
- "S" at Q6.S ljust below
+ {"svg_tt(`IRF4905')" at Q6.s+(0,-0.15) below
+ "svg_it(G)" at Q6.G rjust
+ "svg_it(D)" at Q6.D ljust above
+ "svg_it(S)" at Q6.S ljust below
}
- ] with .n at last [].s+(0,-.2)
+ ] with .nw at Row2.sw + (0,-10bp__)
command "</g>" # end font
.PE
diff --git a/graphics/circuit_macros/examples/svg/graysurfSVG.m4 b/graphics/circuit_macros/examples/svg/graysurfSVG.m4
index 13c91aabc0..a42709b96e 100644
--- a/graphics/circuit_macros/examples/svg/graysurfSVG.m4
+++ b/graphics/circuit_macros/examples/svg/graysurfSVG.m4
@@ -25,9 +25,9 @@ Surface:[
Orig: (0,0)
linethick_(1.2)
- arrow from Orig to 1.2 <Orig,(project(xmax,0,0))> ; "svg_it(x)" wid 0.08 below
- arrow from Orig to 1.2 <Orig,(project(0,ymax,0))> ; "svg_it(y)" ljust
- arrow from Orig to 1.2 <Orig,(project(0,0,zmax))> ; "svg_it(z)" rjust
+ arrow from Orig to 1.2 <Orig,Project(xmax,0,0)> ; "svg_it(x)" wid 0.08 below
+ arrow from Orig to 1.2 <Orig,Project(0,ymax,0)> ; "svg_it(y)" ljust
+ arrow from Orig to 1.2 <Orig,Project(0,0,zmax)> ; "svg_it(z)" rjust
linethick_(0)
for i = 0 to nx-1 do {
@@ -36,10 +36,10 @@ Surface:[
y = ymax*j/ny
fnxy = fn(x,y)
shade((fnmax+fnxy)/fnmax/2,
- line from (project(x,y,fnxy)) to (project(x,(y+dy),`fn(x,(y+dy))'))\
- then to (project((x+dx),(y+dy),`fn((x+dx),(y+dy))'))\
- then to (project((x+dx),y,`fn((x+dx),y)'))\
- then to (project(x,y,fnxy))
+ line from Project(x,y,fnxy) to Project(x,(y+dy),`fn(x,(y+dy))')\
+ then to Project((x+dx),(y+dy),`fn((x+dx),(y+dy))')\
+ then to Project((x+dx),y,`fn((x+dx),y)')\
+ then to Project(x,y,fnxy)
) } }
] with .w at last [].e+(-0.2,0)
@@ -63,8 +63,8 @@ define(`tvisible',`dot3D(view3D1,view3D2,view3D3,
rot3Dz((`$1')*dtor_,rot3Dy((`$2')*dtor_,1,0,0)))')
Orig: (0,0)
-X: arrow from Orig to (project(tradius+sradius*4,0,0)); "x" rjust
-Y: arrow from Orig to (project(0,tradius+sradius*2,0)); "y" below wid 4bp__
+X: arrow from Orig to Project(tradius+sradius*4,0,0); "x" rjust
+Y: arrow from Orig to Project(0,tradius+sradius*2,0); "y" below wid 4bp__
dt = 10 # major angle degrees per facet
ds = 10 # minor angle degrees per facet
@@ -87,10 +87,10 @@ Y: arrow from Orig to (project(0,tradius+sradius*2,0)); "y" below wid 4bp__
thinlines_
for i = 1 to n do {
tc = t[ix[i]]; sc = s[ix[i]]
- SE: (project(torus(tc+dt/2,sc-ds/2)))
- SW: (project(torus(tc-dt/2,sc-ds/2)))
- NW: (project(torus(tc-dt/2,sc+ds/2)))
- NE: (project(torus(tc+dt/2,sc+ds/2)))
+ SE: Project(torus(tc+dt/2,sc-ds/2))
+ SW: Project(torus(tc-dt/2,sc-ds/2))
+ NW: Project(torus(tc-dt/2,sc+ds/2))
+ NE: Project(torus(tc+dt/2,sc+ds/2))
f = ((dcosine3D(3,torus(tc,sc))/sradius+1)/2)^2
g = min(f,0.9)
setrgb(g,g,g)
@@ -103,10 +103,10 @@ thinlines_
}
thicklines_
- arrow from Orig to (project(0,0,tradius*1.4)); "z" above
- dashline(from Orig to (project(torus(0,0))),,,,G)
+ arrow from Orig to Project(0,0,tradius*1.4); "z" above
+ dashline(from Orig to Project(torus(0,0)),,,,G)
arrow to X.end
- dashline(from Orig to (project(torus(90,0))),,,,G)
+ dashline(from Orig to Project(torus(90,0)),,,,G)
arrow to Y.end
] with .sw at last [].se+(0.2,0)
@@ -131,11 +131,11 @@ Hat: [
dy = 0.05
Orig: (0,0)
-X: arrow from Orig to (project(maxy*1.2,0,0)); "x" rjust
-Y: arrow from Orig to (project(0,maxy*1.2,0)); "y" ljust
-Xv: (project(1,0,0))
-Yv: (project(0,1,0))
-Zv: (project(0,0,1))
+X: arrow from Orig to Project(maxy*1.2,0,0); "x" rjust
+Y: arrow from Orig to Project(0,maxy*1.2,0); "y" ljust
+Xv: Project(1,0,0)
+Yv: Project(0,1,0)
+Zv: Project(0,0,1)
# create the arrays and sort
n = 0
for t = dang/2 to 360.1 by dang do {
@@ -151,14 +151,14 @@ Zv: (project(0,0,1))
dpquicksort(d,1,n,ix)
# draw the facets
ellipse wid maxy*2 ht maxy*2*sind(elevation) \
- with .c at (project(0,0,(maxy^2-1)^2)+linethick bp__/2)
+ with .c at Project(0,0,(maxy^2-1)^2)+(0,linethick bp__/2)
thinlines_
for i = 1 to n do {
tc = t[ix[i]]; yc = y[ix[i]]
- SE: (project(hat(tc+dang/2,yc-dy/2)))
- SW: (project(hat(tc-dang/2,yc-dy/2)))
- NW: (project(hat(tc-dang/2,yc+dy/2)))
- NE: (project(hat(tc+dang/2,yc+dy/2)))
+ SE: Project(hat(tc+dang/2,yc-dy/2))
+ SW: Project(hat(tc-dang/2,yc-dy/2))
+ NW: Project(hat(tc-dang/2,yc+dy/2))
+ NE: Project(hat(tc+dang/2,yc+dy/2))
f = abs(yc^2-1)
line invis fill f from SE to SW then to NW then to NE then to SE
}
@@ -169,21 +169,21 @@ nr = -1
for i=1 to mm do { y = i/(mm+3)
findroot(edge,(azimuth+2),(azimuth+180-2),1e-8,t)
nr +=1
- R[mm+nr]: (project(hat(t,y)))
+ R[mm+nr]: Project(hat(t,y))
R[mm-1-nr]: (-R[mm+nr].x,R[mm+nr].y)
}
fitcurve(R,mm*2-1)
# Z axis
thicklines_
-Z: arrow from Zv to (project(0,0,1.2)); "z" ljust
+Z: arrow from Zv to Project(0,0,1.2); "z" ljust
line dashed from Orig to Zv chop 0 chop dashwid/2
line dashed from Orig to Xv
line dashed from Orig to Yv
# Partial rim
ellipsearc(maxy*2,maxy*2*sind(elevation),-pi_*1.4,pi_/3) \
- with .C at (project(0,0,(maxy^2-1)^2)+linethick bp__/2)
+ with .C at Project(0,0,(maxy^2-1)^2)+(0,linethick bp__/2)
] scaled 1.25 with .s at 2nd [].ne+(0,-0.75)
] scaled 0.85
diff --git a/graphics/circuit_macros/examples/svg/icsSVG.m4 b/graphics/circuit_macros/examples/svg/icsSVG.m4
index 0733bbef64..8a3c99b66f 100644
--- a/graphics/circuit_macros/examples/svg/icsSVG.m4
+++ b/graphics/circuit_macros/examples/svg/icsSVG.m4
@@ -1,110 +1,108 @@
divert(-1)
- Macros defining some integrated circuits and connectors
-
-define(`lg_pinsep',3*L_unit) logic pin separation in logic units
-define(`lg_chipwd',18*L_unit) default chip width
-define(`overbar_',`{ line right last "".wid with .c at last "".n+(0,1bp__) }')
+ Macros defining some integrated circuits and connectors for SVG
`A sequence of pins along the east or west side of a chip:
- lg_pinseq(initial pin no,final pin no,
- e|w,initial offset,pinnum_root,Labelroot,[not])'
+ lg_pinseq(initial pin no, final pin no,
+ e|w, initial offset, pinnum_root, Labelroot, [N])'
+ `e.g., lg_pinseq(1,8,w)'
define(`lg_pinseq',`for_($1,$2,1,
`lg_pin( Chip.s`$3'+(0,eval($4+m4x)*lg_pinsep),
$6`'m4x,Pin`'eval($5`'m4x),`$3'`$7',eval($5`'m4x))') ')
+define(`ic_tiny',`iflatex(`\hbox{\tiny `$1'}',ifsvg(`svg_small(`$1')',`$1'))')
+
define(`ic6116',`[ Chip: box wid_ lg_chipwd ht_ 15*lg_pinsep
lg_pin(Chip.sw_+(0,lg_pinsep),GND,Pin12,w,12)
- lg_pin(Chip.sw_+(0,2*lg_pinsep),,Pin18,wN,18)
- "svg_small(CS,75)" wid textht*1.5 at (Chip.w,last line) ljust; overbar_
-
+ lg_pin(Chip.sw_+(0,2*lg_pinsep),lg_bartxt(CS),Pin18,wN,18)
lg_pinseq(0,2,w,4,9+,D)
lg_pinseq(3,7,w,4,10+,D)
- lg_pin(Chip.sw_+(0,13*lg_pinsep),,Pin21,w,21)
- "svg_small(R/W,75)" wid textht*2.0 at (Chip.w,last line) ljust
- { line right last "".wid/2 from last "".n+(0,1bp__) }
-
- lg_pin(Chip.sw_+(0,14*lg_pinsep),V`'svg_small(CC,75),Pin24,w,24)
- lg_pin(Chip.se_+(0,lg_pinsep),,Pin20,eN,20)
- "svg_small(OE,75)" wid textht*1.5 at (Chip.e,last line) rjust; overbar_
-
+ lg_pin(Chip.sw_+(0,13*lg_pinsep),R/lg_bartxt(W),Pin21,w,21)
+ lg_pin(Chip.sw_+(0,14*lg_pinsep),V`'ic_tiny(CC),Pin24,w,24)
+ lg_pin(Chip.se_+(0,lg_pinsep),lg_bartxt(OE),Pin20,eN,20)
lg_pinseq(0,7,e,3,8-,A)
lg_pinseq(8,9,e,3,31-,A)
lg_pin(Chip.se_+(0,13*lg_pinsep),A10,Pin19,e,19)
`$1']')
define(`ic6502',`[ Chip: box wid_ lg_chipwd ht_ 24*lg_pinsep
- lg_pin(Chip.sw_+(0,lg_pinsep),V`'svg_small(SS,75),Pin21,w,21)
- lg_pin(Chip.sw_+(0,2*lg_pinsep),V`'svg_small(SS,75),Pin1,w,1)
- lg_pin(Chip.sw_+(0,4*lg_pinsep),,Pin34,w,34)
- "svg_small(R/W,75)" wid textht*2.0 at (Chip.w,last line) ljust
- { line right last "".wid/2 from last "".n+(0,1bp__) }
-
+ lg_pin(Chip.sw_+(0,lg_pinsep),V`'ic_tiny(SS),Pin21,w,21)
+ lg_pin(Chip.sw_+(0,2*lg_pinsep),V`'ic_tiny(SS),Pin1,w,1)
+ lg_pin(Chip.sw_+(0,4*lg_pinsep),R/lg_bartxt(W),Pin34,w,34)
lg_pinseq(0,7,w,6,33-,D)
- lg_pin(Chip.sw_+(0,15*lg_pinsep),,Pin40,wN,40)
- "svg_small(RESET,75)" wid textht*3.8 at (Chip.w,last line) ljust; overbar_
-
+ lg_pin(Chip.sw_+(0,15*lg_pinsep),lg_bartxt(RESET),Pin40,wN,40)
lg_pin(Chip.sw_+(0,17*lg_pinsep),SYNC,Pin7,w,7)
- lg_pin(Chip.sw_+(0,19*lg_pinsep),,Pin6,wN,6)
- "svg_small(NMI,75)" wid textht*2.1 at (Chip.w,last line) ljust; overbar_
-
+ lg_pin(Chip.sw_+(0,19*lg_pinsep),lg_bartxt(NMI),Pin6,wN,6)
lg_pin(Chip.sw_+(0,21*lg_pinsep),RDY,Pin2,w,2)
lg_pin(Chip.sw_+(0,22*lg_pinsep),SO,Pin38,w,38)
- lg_pin(Chip.sw_+(0,23*lg_pinsep),V`'svg_small(CC,75),Pin8,w,8)
- lg_pin(Chip.se_+(0,lg_pinsep),CK`'svg_small(1,75)(in),Pin39,e,39)
- lg_pin(Chip.se_+(0,4*lg_pinsep),CK`'svg_small(2,75)(out),Pin37,e,37)
+ lg_pin(Chip.sw_+(0,23*lg_pinsep),V`'ic_tiny(CC),Pin8,w,8)
+ lg_pin(Chip.se_+(0,lg_pinsep),CK`'ic_tiny(1)(in),Pin39,e,39)
+ lg_pin(Chip.se_+(0,4*lg_pinsep), CK`'ic_tiny(2)(out),Pin37,e,37)
lg_pinseq(0,11,e,6,9+,A)
lg_pinseq(12,15,e,6,10+,A)
- lg_pin(Chip.se+(0,23*lg_pinsep),,Pin4,eN,4)
- "svg_small(IRQ,75)" wid textht*2.0 at (Chip.e,last line) rjust; overbar_
+ lg_pin(Chip.se+(0,23*lg_pinsep),lg_bartxt(IRQ),Pin4,eN,4)
`$1']')
define(`ic6522',`[ Chip: box wid_ lg_chipwd ht_ 24*lg_pinsep
- lg_pin(Chip.sw_+(0,lg_pinsep),V`'svg_small(SS,75),Pin1,w,1)
+ lg_pin(Chip.sw_+(0,lg_pinsep),V`'ic_tiny(SS),Pin1,w,1)
lg_pin(Chip.sw_+(0,3*lg_pinsep),CS1,Pin24,w,24)
lg_pin(Chip.sw_+(0,4*lg_pinsep),CK,Pin25,w,25)
- lg_pin(Chip.sw_+(0,5*lg_pinsep),,Pin23,wN,23)
- "svg_small(CS2,75)" wid textht*2.2 at (Chip.w,last line) ljust; overbar_
-
+ lg_pin(Chip.sw_+(0,5*lg_pinsep),lg_bartxt(CS2),Pin23,wN,23)
lg_pin(Chip.sw_+(0,7*lg_pinsep),RS0(A0),Pin38,w,38)
lg_pin(Chip.sw_+(0,8*lg_pinsep),RS1(A1),Pin37,w,37)
lg_pin(Chip.sw_+(0,9*lg_pinsep),RS2(A2),Pin36,w,36)
lg_pin(Chip.sw_+(0,10*lg_pinsep),RS3(A3),Pin35,w,35)
lg_pinseq(0,7,w,12,33-,D)
- lg_pin(Chip.sw_+(0,21*lg_pinsep),,Pin22,w,22)
- "svg_small(R/W,75)" wid textht*2.0 at (Chip.w,last line) ljust
- { line right last "".wid/2 from last "".n+(0,1bp__) }
-
- lg_pin(Chip.sw_+(0,22*lg_pinsep),,Pin21,wN,21)
- "svg_small(IRQ,75)" wid textht*2.0 at (Chip.w,last line) ljust; overbar_
-
- lg_pin(Chip.sw_+(0,23*lg_pinsep),V`'svg_small(CC,75),Pin20,w,20)
+ lg_pin(Chip.sw_+(0,21*lg_pinsep),R/lg_bartxt(W),Pin22,w,22)
+ lg_pin(Chip.sw_+(0,22*lg_pinsep),lg_bartxt(IRQ),Pin21,wN,21)
+ lg_pin(Chip.sw_+(0,23*lg_pinsep),V`'ic_tiny(CC),Pin20,w,20)
lg_pinseq(0,7,e,1,10+,PB)
lg_pinseq(1,2,e,8,17+,CB)
lg_pinseq(0,7,e,12,2+,PA)
lg_pinseq(1,2,e,19,41-,CA)
- lg_pin(Chip.se_+(0,23*lg_pinsep),,Pin34,eN,34)
- "svg_small(RESET,75)" wid textht*3.8 at (Chip.e,last line) rjust; overbar_
-
+ lg_pin(Chip.se_+(0,23*lg_pinsep),lg_bartxt(RESET),Pin34,eN,34)
`$1']')
define(`ic74LS138',`[ Chip: box wid_ lg_chipwd ht_ 11*lg_pinsep
lg_pin(Chip.sw_+(0,lg_pinsep),GND,Pin8,w,8)
- lg_pin(Chip.sw_+(0,2*lg_pinsep),,Pin4,wN,4)
- "svg_small(G2a,75)" wid textht*2.0 at (Chip.w,last line) ljust; overbar_
-
- lg_pin(Chip.sw_+(0,3*lg_pinsep),,Pin5,wN,5)
- "svg_small(G2b,75)" wid textht*2.0 at (Chip.w,last line) ljust; overbar_
-
+ lg_pin(Chip.sw_+(0,2*lg_pinsep),lg_bartxt(G2a),Pin4,wN,4)
+ lg_pin(Chip.sw_+(0,3*lg_pinsep),lg_bartxt(G2b),Pin5,wN,5)
lg_pin(Chip.sw_+(0,5*lg_pinsep),A,Pin1,w,1)
lg_pin(Chip.sw_+(0,6*lg_pinsep),B,Pin2,w,2)
lg_pin(Chip.sw_+(0,7*lg_pinsep),C,Pin3,w,3)
lg_pin(Chip.sw_+(0,9*lg_pinsep),G1,Pin6,w,6)
- lg_pin(Chip.sw_+(0,10*lg_pinsep),V`'svg_small(CC,75),Pin16,w,16)
+ lg_pin(Chip.sw_+(0,10*lg_pinsep),V`'ic_tiny(CC),Pin16,w,16)
lg_pinseq(0,6,e,2,15-,Y,n)
lg_pin(Chip.se_+(0,9*lg_pinsep),Y7,Pin7,eN,7)
`$1']')
+define(`ic4017',`[ Chip: DIP_chip_outline(16)
+ Loopover_(`x',
+ `lg_pin(Chip.nw-(0,lg_pinsep*m4Lx),x,Pin`'m4Lx,w,m4Lx)',
+ PL, Q3, I3, I0, CLE, Q0, TC, GND)
+ Loopover_(`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',
+ `lg_pin(Chip.nw-(0,lg_pinsep*m4Lx),x,Pin`'m4Lx,w,m4Lx)',
+ PL, Q3, I3, I0, CLE, Q0, TC, GND)
+ Loopover_(`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',
+ `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',
+ `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`'svg_it(-),MIC`'svg_it(+))
+ `$1']')
+
`ArduinoUno( wid,ht,pinlen )'
define(`ArduinoUno',`[
define(`m4bwid',`ifelse(`$1',,`24*L_unit',`$1')')dnl
@@ -118,7 +116,7 @@ define(`ArduinoUno',`[
Loopover_(`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,`+`'3V3',`+`'5V', GND, GND, VIN,
+ IOREF, RESET,svg_it(+)3V3,svg_it(+)5V, GND, GND, VIN,
nul, A0, A1, A2, A3, A4, A5)
#
Loopover_(`x',`ifelse(x,nul,,
@@ -141,7 +139,7 @@ define(`ArduinoLeonardo',`[
Loopover_(`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,`+`'3V3',`+`'5V', GND, GND, VIN,
+ IOREF, RESET,svg_it(+)3V3,svg_it(+)5V, GND, GND, VIN,
nul, A0, A1, A2, A3, A4, A5)
#
Loopover_(`x',`ifelse(x,nul,,
@@ -155,8 +153,8 @@ Loopover_(`x',`ifelse(x,nul,,
`RPi( wid,ht,pinlen )'
define(`RPi',`[
- define(`m4bwid',`ifelse(`$1',,`34*L_unit',`$1')')dnl
- define(`m4bht',`ifelse(`$2',,`21*lg_pinsep',`$2')')dnl
+ define(`m4bwid',`ifelse(`$1',,`34*L_unit',`$1')')dnl
+ define(`m4bht',`ifelse(`$2',,`21*lg_pinsep',`$2')')dnl
#
GPIO: box wid m4bwid ht m4bht
plen = ifelse(`$4',,`6*L_unit',`$4')
@@ -171,9 +169,11 @@ Loopover_(`x',`ifelse(x,nul,,`A_LeftGPIO(m4Lx,patsubst(x,;,`,'))')',
;3V3,
2;SDA1, 3;SCL1, 4;GPIO_GCLK,
;GND,
- 17;GPIO_GEN0, 27;GPIO_GEN2, 22;GPIO_GEN3,
+ 17;GPIO_GEN0, 27;GPIO_GEN2,
+ 22;GPIO_GEN3,
;3V3,
- 10;SPI_MOSI, 9;SPI_MISO, 11;SPI_SCLK,
+ 10;SPI_MOSI, 9;SPI_MISO,
+ 11;SPI_SCLK,
;GND,
;ID_SD,
5;, 6;, 13;, 19;, 26;,
@@ -193,7 +193,8 @@ Loopover_(`x',`ifelse(x,nul,,`A_RightGPIO(m4Lx,patsubst(x,;,`,'))')',
;GND,
23;GPIO_GEN4, 24;GPIO_GEN5,
;GND,
- 25;GPIO_GEN6, 8;SPI_CEO_N, 7;SPI_CE1_N,
+ 25;GPIO_GEN6, 8;SPI_CEO_N,
+ 7;SPI_CE1_N,
;ID_SC,
;GND,
12;,
@@ -214,12 +215,14 @@ define(`USB_C_Socket',`[
`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)
+ GND, RX1`'svg_it(+), RX1`'svg_it(-), VBUS, SBU2, D`'svg_it(-),
+ D`'svg_it(+), CC2, VBUS, TX2`'svg_it(-), TX2`'svg_it(+), GND)
#
Loopover_(`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-, RX2+, GND)
+ GND, TX1`'svg_it(+), TX1`'svg_it(-), VBUS, CC1, D`'svg_it(+),
+ D`'svg_it(-), SBU1, VBUS, RX2`'svg_it(-), RX2`'svg_it(+), GND)
#
`$4']')
@@ -238,11 +241,13 @@ define(`HDMI_micro',`[
`Pin`'m4Lx: line left_ plen from Base.nw-(0,m4bwid/3+(m4Lx-1/2)*lg_pinsep)
{"x" ljust at last line.start}
"m4Lx" at last line.c above',
- HPD, UTILITY, D2+, D2_SH, D2-, D1+, D1_SH, D1-, D0+, D0_SH,
- D0-, CLK+, CLK_SH, CLK-, CEC, GND, SCL, SDA, +5V)
- line from Base.nw+(m4bwid*2/3-lg_pinsep,0) up plen
+ HPD, UTILITY, D2`'svg_it(+), D2_SH, D2`'svg_it(-),
+ D1`'svg_it(+), D1_SH, D1`'svg_it(-),D0`'svg_it(+), D0_SH,
+ D0`'svg_it(-), CLK`'svg_it(+), CLK_SH, CLK`'svg_it(-),
+ CEC, GND, SCL, SDA,svg_it(+)5V)
+L1: line from Base.nw+(m4bwid*2/3-lg_pinsep,0) up plen
svg_rot(90,"21" at last line.c +(-2bp__,0))
- svg_rot(90,sprintf("SH2") at last line.start + (4bp__,-8bp__))
+ svg_rot(90,"SH2" at last line.start + (4bp__,-8bp__))
line from Base.nw+(m4bwid*2/3-2*lg_pinsep,0) up plen
svg_rot(90,"20" at last line.c+(-2bp__,0))
svg_rot(90,"SH1" at last line.start + (4bp__,-8bp__))
@@ -255,4 +260,52 @@ define(`HDMI_micro',`[
#
`$4']')
+ `DIP_chip_outline( pin count, wid )'
+define(`DIP_chip_outline',
+ `[ define(`m4pinct',`ifelse(`$1',,16,`$1')')dnl
+ define(`m4chgw',`ifelse(`$2',,(18*L_unit),`$2')')dnl
+ Chip: box invis wid m4chgw ht lg_pinsep*eval((m4pinct)/2+1)
+ arcd(last box.n, lg_pinsep/2, 180, 360)
+ { line to last box.ne chop -linewid bp__/2 }
+ { line from last arc.start to last box.nw chop -linewid bp__/2 }
+ line from last box.nw to last box.sw then to last box.se then to last box.ne
+ `$3']')
+
+ `DIP( pin count, attributes)
+ Dual in-line package
+ attributes=semicolon-separated list of optional terms:
+ bodywid=expr; (default 0.25 = 5*L_unit )
+ bodylen=expr; (default pin count/2 x pinpitch)
+ pinpitch=expr; (default 0.1)
+ pinwid=expr; (default 0.06)
+ pinlen=expr; (default 0.05)
+ direct=U|D|L|R;(default U for up)
+ type=I|Q; (default I for uniform-length pins;
+ Q: staggered) '
+define(`DIP',`[ pinct= ifelse(`$1',,8,`$1')
+ Loopover_(`Z',`setkey_(`$2',patsubst(Z,:.*),patsubst(Z,.*:))',
+ bodywid: 5*L_unit,
+ bodylen: m4pinpitch*int(pinct/2+0.5),
+ pinpitch:2*L_unit,
+ pinwid: 1.2*L_unit,
+ pinlen: L_unit)
+ Loopover_(`Z',`setkey_(`$2',patsubst(Z,:.*),patsubst(Z,.*:),N)',
+ direct:U,
+ type:I)
+ setdir_(m4direct,U)
+ Body: box ht_ m4bodywid wid_ m4bodylen
+ arcs = ifelse(m4dir,right,90,m4dir,up,180,m4dir,left,270,0)
+ arcd(Body.e_, 0.1/2, arcs,arcs+180)
+ np2 = int(pinct/2+0.5)
+ define(`m4bxht',`m4pinlen ifelse(m4type,Q,`*(1+(i%%2))')')dnl
+ for i=0 to np2-1 do {
+ exec sprintf("Pin%g: box ht_ m4bxht wid_ m4pinwid \
+ with .s_ at (i+0.5)/np2 between Body.ne_ and Body.nw_",i+1) }
+ for i=np2+1 to pinct do {
+ exec sprintf("Pin%g: box ht_ m4bxht wid_ m4pinwid \
+ with .n_ at (i-np2-0.5)/(pinct-np2) between Body.sw_ and Body.se_",i) }
+ `$3'; resetdir_
+ popdef(`m4bodywid',`m4bodylen',`m4pinpitch',`m4pinwid',`m4pinlen',`m4direct',
+ `m4type') ]'))
+
divert(0)dnl
diff --git a/graphics/circuit_macros/examples/svg/paletteSVG.m4 b/graphics/circuit_macros/examples/svg/paletteSVG.m4
index 6128441fc8..4c5a40f038 100644
--- a/graphics/circuit_macros/examples/svg/paletteSVG.m4
+++ b/graphics/circuit_macros/examples/svg/paletteSVG.m4
@@ -322,14 +322,10 @@ A:Gridbox( speaker ) Below(A)
Gridbox( nport ) Right
Gridbox( nterm ) Right
-A:Gridbox( FlipFlop(D)
- { line right 5bp__ at last [] . 1nd last ""+(-7bp__,4bp__) } ) Below(A)
- Gridbox( FlipFlop(T)
- { line right 5bp__ at last [] . 1nd last ""+(-7bp__,4bp__) } ) Right
- Gridbox( FlipFlop(RS)
- { line right 5bp__ at last [] . 1nd last ""+(-7bp__,4bp__) } ) Right
- Gridbox( FlipFlop(JK)
- { line right 5bp__ at last [] . 2nd last ""+(-7bp__,4bp__) } ) Right
+A:Gridbox( FlipFlop(D) ) Below(A)
+ Gridbox( FlipFlop(T) ) Right
+ Gridbox( FlipFlop(RS)) Right
+ Gridbox( FlipFlop(JK)) Right
] with .nw at (0,0)
diff --git a/graphics/circuit_macros/examples/svg/roseSVG.m4 b/graphics/circuit_macros/examples/svg/roseSVG.m4
index b386d9aea5..32c5dfdbc5 100644
--- a/graphics/circuit_macros/examples/svg/roseSVG.m4
+++ b/graphics/circuit_macros/examples/svg/roseSVG.m4
@@ -1,12 +1,13 @@
.PS
-# rose.m4
+# roseSVG.m4
gen_init
ifelse(
ifpstricks(T)`'ifmpost(T)`'ifpostscript(T)`'ifpdf(T)`'ifpgf(T)`'ifsvg(T),,
`This diagram is for PSTricks, postscript, PDF, MetaPost, or SVG',
`
-scale = 1.2
+scale = 1.25
+Rose: [
define(`gold_',`1,0.84,0')
define(`rose',`point_(`$2'); CC: (vec_(`$1',0)); rrad = `$3'
@@ -127,5 +128,39 @@ C: (0,0)
box wid tmp ht tmp at C
] with .sw at 1,1
+] # Rose
+
+Halftone: [
+#.PS
+# SpiralHalftoneSVG.m4
+# https://tex.stackexchange.com/questions/584455/how-to-draw-this-spiral-made-of-circles-in-latex
+# gen_init
+
+ r = 133/255; g = 196/255; b = 100/255
+ skale = 2/3*scale
+ skale = 2.49/4.25
+
+ holerad = 1*skale
+ outerrad = 4.25*skale
+
+ define grcirc {circle diam $1 colored rgbstring(r,g,b)}
+
+ npts = 200
+ outercdiam = (outerrad/npts)*twopi_
+ angoffset = -5*pi_/4
+ da = twopi_/npts*10/3
+ radc = outerrad
+ for x = 0 to 1 do {
+ cdiam = outercdiam*radc/outerrad
+ for i=0 to npts-1 do { ang = i/npts*twopi_
+ grcirc(cdiam*abs(ang-pi_)/pi_) at rect_(radc,ang+angoffset) }
+ angoffset += da
+ radc -= cdiam*2/3
+ if radc < holerad then { x = 1 } else { x = 0 }
+ }
+
+#.PE
+ ] with .sw at Rose.se+(0.2,0)
+
')
.PE
diff --git a/graphics/circuit_macros/examples/svg/shapesSVG.m4 b/graphics/circuit_macros/examples/svg/shapesSVG.m4
index 08962e9f85..b0b66fa0bb 100644
--- a/graphics/circuit_macros/examples/svg/shapesSVG.m4
+++ b/graphics/circuit_macros/examples/svg/shapesSVG.m4
@@ -1,5 +1,5 @@
.PS
-# shapes.m4
+# shapesSVG.m4
threeD_init
divert(-1)
@@ -18,14 +18,14 @@ define(`cylinder3D',`[ Start: (0,0)
define(`M4CL',`xdispl,ydispl,zdispl')dnl
lenc = length3D(M4CL)
cs = dot3D(View3D,M4CL)/lenc
- End: (project(M4CL))
+ End: Project(M4CL)
az = atan2(ydispl,xdispl)
ae = atan2(zdispl,sqrt(xdispl^2+ydispl^2))
CL: line invis from Start to End; C: CL.c
nls = int(twopi_*radc/lthick)
define(`M4PP',`rot3Dz(az,rot3Dy(-ae,rot3Dx(-i/nls*twopi_,0,0,radc)))')dnl
for i=0 to nls-1 do { if dot3D(View3D,M4PP) > 0 then {
- P: (project(M4PP))
+ P: Project(M4PP)
ql = sqrta(dot3D(Light3D,M4PP)/radc)
line from P to End+P outlined rgbstring(ql,ql,ql) `$5' } }
Perp: (vperp(CL,radc))
@@ -48,7 +48,7 @@ define(`cone3D',`[ Start: (0,0)
define(`M4CL',`xdispl,ydispl,zdispl')dnl
lenc = length3D(M4CL)
diamc = ifelse(`$4',,(lenc/2),`$4') ; radc = diamc/2
- End: (project(M4CL))
+ End: Project(M4CL)
cs = dot3D(View3D,M4CL)/lenc
az = atan2(ydispl,xdispl)
ae = atan2(zdispl,sqrt(xdispl^2+ydispl^2))
@@ -60,7 +60,7 @@ define(`cone3D',`[ Start: (0,0)
rot3Dz(az,rot3Dy(-ae,rot3Dx(-i/nls*twopi_,radc,0,lenc)))) > 0 then {
ql = sqrta(dot3D(Light3D,
rot3Dz(az,rot3Dy(-ae,rot3Dx(-i/nls*twopi_,radc,0,lenc))))/lt)
- P: (project(rot3Dz(az,rot3Dy(-ae,rot3Dx(-i/nls*twopi_,0,0,radc)))))
+ P: Project(rot3Dz(az,rot3Dy(-ae,rot3Dx(-i/nls*twopi_,0,0,radc))))
line from P to End outlined rgbstring(ql,ql,ql) `$5'
if !b then { WB: P; b = 1 }
} else { if b then { BW: P; b = 0 } } }
@@ -116,7 +116,7 @@ define(`prism3D',`[ Start: (0,0)
widp = ifelse(`$4',,(linewid/5),`$4')
htp = ifelse(`$5',,(linewid/10),`$5')
rotp = ifelse(`$6',,0,`$6')
- End: (project(xdispl,ydispl,zdispl)); C: 0.5 between Start and End
+ End: Project(xdispl,ydispl,zdispl); C: 0.5 between Start and End
lenp = length3D(xdispl,ydispl,zdispl)
az = atan2(ydispl,xdispl); ae = atan2(zdispl,sqrt(xdispl^2+ydispl^2))
wp2 = widp/2; hp2 = htp/2
@@ -143,10 +143,10 @@ define(`PFacet',`cross3D(diff3D(`$2'x,`$2'y,`$2'z,`$1'x,`$1'y,`$1'z),
diff3D(`$3'x,`$3'y,`$3'z,`$2'x,`$2'y,`$2'z))')
if dot3D(View3D,PFacet) > 0 then {
fFacet = sqrta(dot3D(Light3D,PFacet)/length3D(PFacet))
- P1: (project(`$1'x,`$1'y,`$1'z))
- P2: (project(`$2'x,`$2'y,`$2'z))
- P3: (project(`$3'x,`$3'y,`$3'z))
- P4: (project(`$4'x,`$4'y,`$4'z))
+ P1: Project(`$1'x,`$1'y,`$1'z)
+ P2: Project(`$2'x,`$2'y,`$2'z)
+ P3: Project(`$3'x,`$3'y,`$3'z)
+ P4: Project(`$4'x,`$4'y,`$4'z)
line fill_(fFacet) invis from P1 to P2 then to P3 then to P4 then to P1
line from P1 to P2; round
line to P3; round
@@ -165,7 +165,7 @@ setview(azimuth,elev)
Arrow3D(0,1,0) with .Start at Orig; "y" ljust at last [].End
Arrow3D(0,0,1.2) with .Start at Orig; "z" above at last [].End
setlight(0,0,0)
- cylinder3D(1,1,1,0.6) with .Start at (project(0.5,0.5,0.5))
+ cylinder3D(1,1,1,0.6) with .Start at Project(0.5,0.5,0.5)
]
Ball: shadedball(0.5) with .nw at last [].ne+(-0.25,0)
[
@@ -175,7 +175,7 @@ setview(azimuth,elev)
for i=0 to n do {
r = i/n*(thmax-thmin)+thmin
prism3D(rot3Dz(r,rot3Dy(pi_/4,len,0,0)),0.2,0.1) \
- with .Start at (project(rot3Dz(r,rot3Dy(pi_/4,len*0.5,0,0)))) }
+ with .Start at Project(rot3Dz(r,rot3Dy(pi_/4,len*0.5,0,0))) }
] with .nw at last [].ne
[
setlight(0,0)
diff --git a/graphics/circuit_macros/examples/svg/sldtestsSVG.m4 b/graphics/circuit_macros/examples/svg/sldtestsSVG.m4
new file mode 100644
index 0000000000..658af488d6
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/sldtestsSVG.m4
@@ -0,0 +1,104 @@
+.PS
+# slddiagsSVG.m4
+cct_init(svg_font(sans-serif,10bp__))
+include(../test/sld/SLD.m4)
+
+divert(-1)
+
+divert(0)dnl
+
+Pic1: [
+define(`TRFDY',
+ `sl_transformer(down_ elen_ `$1',type=S)
+ { Deltasymbol(at last [].M1); Ysymbol(at 2nd last [].M2,,D) } ')
+
+ T: dot
+ switch(up_ elen_); {"Public supply" above}
+ Bus1: sl_busbar(right_ 5*dimen_,6,port=D) with .c at T
+ {"svg_small(20 kV)" at Bus1.Start above ljust}
+ S1: switch(from Bus1.P1-(0,elen_) up_ elen_)
+ S2: switch(from Bus1.P2-(0,elen_) up_ elen_)
+ TRF1: TRFDY(from Bus1.P3); arrow down_ dimen_/3
+ TRF2: TRFDY(from Bus1.P4); arrow down_ dimen_/3
+ TRF3: TRFDY(from Bus1.P5); arrow down_ dimen_/3
+ S3: switch(from Bus1.P6-(0,elen_) up_ elen_)
+ Bus2: sl_busbar(right_ 1.5*dimen_,3,port=D) with .c at Bus1.P1+(0,-dimen_*3)
+ {"svg_small(20 kV)" at Bus2.Start above ljust}
+ {"svg_small(1.25 MVA)" at Bus2.P2 below}
+ S4: switch(from Bus2.P2 to S1.start)
+ TRF4: TRFDY(from Bus2.P1)
+ S4: switch(from Bus2.P3+(0,-elen_) to Bus2.P3)
+]
+
+Pic3: [
+# https://tex.stackexchange.com/questions/597643/draw-a-power-system-network
+ B1: sl_busbar(up_ dimen_*4/3,3)
+ sl_transformer(right_ 2*dimen_ from last [].P2,
+ type=S;body=shaded "lightgray"); variable(,,,dimen_*3/2)
+ B2: sl_busbar(up_ dimen_*4/3,3)
+ { line left_ dimen_/2 from B2.P1
+ C1: capacitor(down_ dimen_/2); ground(,T) }
+ line right_ dimen_/2
+ { line to (Here,C1.start); C2: capacitor(to (Here,C1.end)); ground(,T) }
+ ebox(right_ 3.5*dimen_, 2.5*dimen_, dimen_/5, 0.75)
+ { line to (Here,C1.start); C3: capacitor(to (Here,C1.end)); ground(,T) }
+ line right_ dimen_/2
+ B3: sl_busbar(up_ dimen_*4.5,6)
+ line right_ dimen_*3/4 from B3.P1; box wid dimen_*3 ht dimen_*.6 \
+ shaded "Goldenrod" "Static Load"
+ line right_ dimen_*3/4 from B3.P2; box wid dimen_*3 ht dimen_*.6 \
+ shaded rgbstring(0.99*0.8, 0.74*0.8, 0.71*0.8) "Electronic Load"
+ sl_disk(at B3.P3,,R,
+ text="A/C";circle=shaded ```rgbstring(.2,.8,.2)''';diam=dimen_*3/4)
+ sl_disk(at B3.P4,,R,
+ text="M";circle=shaded ```rgbstring(.21,.47,.86)''';diam=dimen_*3/4)
+ sl_disk(at B3.P5,,R,
+ text="M";circle=shaded ```rgbstring(.2,.6,.8)''';diam=dimen_*3/4)
+ sl_disk(at B3.P6,,R,
+ text="M";circle=shaded ```rgbstring(.2,.63,.8)''';diam=dimen_*3/4)
+ sl_disk(at 1/2 between B3.P1 and B3.P2,,L,
+ text="svg_small(DER_A)";\
+ circle=shaded ```rgbstring(0.78,0.36,0.3)''';diam=dimen_*3/4)
+] with .nw at last [].sw + (100bp__,120bp__)
+
+Pic2: [
+define(`shadedb',`shaded "CornflowerBlue"')
+Loopover_(`LR', # loop to take advantage of symmetry
+ `define(`lrdir',ifelse(LR,L,`right_',`left_'))dnl
+ LR`'side: [
+ sl_generator(,dimen_,LR,type=B;name=G1;circle=shadedb,box=shadedb)
+ T1: sl_transformer(lrdir dimen_*3/2)
+ Bus1: sl_busbar(up_ dimen_*3/2,3,) with .P2 at Here
+ Br1: sl_breaker(from Bus1.P3 lrdir elen_,box=shadedb)
+ line lrdir dimen_
+ Br2: sl_breaker(from Bus1.P1 lrdir elen_,box=shadedb)
+ Br3: sl_breaker(down_ dimen_,box=shadedb)
+ Bus2: sl_busbar(lrdir dimen_,3) with .P2 at Here
+ T2: sl_transformer(down_ dimen_ from Bus2.P2,name=X2)
+ sl_disk(,dimen_/2,D,type=B;text="SM";name=SM1;circle=shadedb,box=shadedb)
+ ground(at last circle.s,dimen_/2)
+ ]',
+ L,R)
+ "Bus 1" at Lside.Bus1.top above
+ "Bus 2" at Rside.Bus1.top above
+ "Bus 3" at Lside.Bus2.w above
+ "Bus 4" at Rside.Bus2.e above
+ "TL`'svg_sub(1) 50 km 69 kV" at 1/2 between Lside.Br1 and Rside.Br1 above
+ "TL`'svg_sub(2) 30 km" ljust "69 kV" ljust at Lside.Br2.end + (-18bp__,12bp__)
+ "TL`'svg_sub(2) 20 km" ljust "69 kV" ljust at Rside.Br2.end + (-18bp__,12bp__)
+ "G`'svg_sub(1) 50 MVA" ljust "13.8 kV" ljust at Lside.G1.w+(0,-28bp__)
+ "G`'svg_sub(2) 30 MVA" ljust "13.8 kV" ljust at Rside.G1.w+(0,-28bp__)
+ "T`'svg_sub(1) 50 MVA" ljust "13.8/69 kV svg_Delta/Y" ljust \
+ at Lside.T1.start+(0,-33bp__)
+ "T`'svg_sub(2) 30 MVA" ljust "69/13.8 kV Y/svg_Delta" ljust \
+ at Rside.T1.end+(5bp__,-33bp__)
+ "T`'svg_sub(3) 50 MVA" rjust "13.8/69 kV Y/svg_Delta" rjust \
+ at Lside.X2.w+(-4bp__,0)
+ "T`'svg_sub(4) 20 MVA" ljust "69/6.9 kV Y/svg_Delta" ljust \
+ at Rside.X2.e+(4bp__,0)
+ "SM`'svg_sub(1) 30 MVA" rjust "13.8 kV" rjust at Lside.SM1.w+(-4bp__,0)
+ "SM`'svg_sub(2) 20 MVA" ljust "6.9 kV" ljust at Rside.SM1.e+( 4bp__,0)
+] with .nw at (Pic1.w,last [].sw + (0,-15bp__))
+
+command "</g>"
+.PE
diff --git a/graphics/circuit_macros/examples/svg/tstSVG.htmx b/graphics/circuit_macros/examples/svg/tstSVG.htmx
index d81a22927a..65425998fc 100644
--- a/graphics/circuit_macros/examples/svg/tstSVG.htmx
+++ b/graphics/circuit_macros/examples/svg/tstSVG.htmx
@@ -86,6 +86,7 @@ more basic.
e.g. m4tt`'svg_tspan(font-style="italic" font-size="75%",XYZ)</g>
<li>m4tt svg_it(</g>text`'m4tt)</g>: for italics
<li>m4tt svg_tt(</g>text`'m4tt)</g>: for monospace (courier)
+ <li>m4tt svg_sf(</g>text`'m4tt)</g>: sans-serif (Helvetica)
<li>m4tt svg_norm(</g>text`'m4tt)</g>: for normal text
<li>m4tt svg_bf(</g>text`'m4tt)</g>: for bold face
<li>m4tt svg_small(</g>text, percent`'m4tt)</g>:
@@ -96,6 +97,11 @@ more basic.
subscript
<li>m4tt svg_sup(</g>text, size percent, y displ, x displ`'m4tt)</g>:
superscript
+ <li>m4tt svg_ul(</g>text`'m4tt)</g>: underlined text
+ <li>m4tt svg_ol(</g>text`'m4tt)</g>: overlined text
+ <li>m4tt svg_hat(</g>character`'m4tt)</g>: circumflex-accented character
+ <li>m4tt svg_frac(</g>numerator[:wid], denominator[:wid]`'m4tt)</g>:
+ basic fraction, wid in drawing units
<li>m4tt svg_rot(</g>degrees, "text" [at position]`'m4tt)</g>:
Rotate text degrees (default 90) ccw.
Requires m4tt`'svg_rot_init(</g>filename`'m4tt)</g> and the source
diff --git a/graphics/circuit_macros/examples/tikz.tex b/graphics/circuit_macros/examples/tikz.tex
deleted file mode 100644
index fc3f4c17dc..0000000000
--- a/graphics/circuit_macros/examples/tikz.tex
+++ /dev/null
@@ -1,15 +0,0 @@
-\documentclass[11pt]{article}
-\usepackage{tikz}
-\usepackage{siunitx}
-\usepackage[T1]{fontenc}
-\usepackage{boxdims}
-\addtolength{\textwidth}{2cm}
-\addtolength{\textheight}{3cm}
-\setlength{\oddsidemargin}{0pt}
-\setlength{\evensidemargin}{0pt}
-\setlength{\hoffset}{-0.5in}
-\pagestyle{empty}
-\thispagestyle{empty}
-\begin{document}
- \noindent\vspace{2ex}\input{test.tex}
-\end{document}
diff --git a/graphics/circuit_macros/examples/tst.tex b/graphics/circuit_macros/examples/tst.tex
index c4549a1631..029dcc31fa 100644
--- a/graphics/circuit_macros/examples/tst.tex
+++ b/graphics/circuit_macros/examples/tst.tex
@@ -1,23 +1,12 @@
\documentclass[11pt]{article}
-% Custimize your packages here:
-\usepackage[dvips]{graphicx}
-\usepackage{pstricks,pst-slpe,pst-grad}
-\usepackage{boxdims}
-\usepackage{upgreek}
-\usepackage{siunitx}
-\usepackage{amssymb}
-%
-%\addtolength{\textwidth}{2cm}
-\addtolength{\textwidth}{10cm} % for Tubediags.ps
-%\addtolength{\textheight}{3cm}
-\addtolength{\textheight}{10cm} % for Tubediags.ps
-\setlength{\oddsidemargin}{0pt}
-\setlength{\evensidemargin}{0pt}
-\setlength{\hoffset}{-0.5in}
-\newbox\graph
-\pagestyle{empty}
-\thispagestyle{empty}
-%
-\begin{document}
- \noindent\vspace{2ex}\input{test.tex}\box\graph
-\end{document}
+ \usepackage[dvipsnames]{xcolor}
+ \usepackage{times,boxdims,graphicx,pstricks}
+ \usepackage{siunitx}
+ \setlength{\textwidth}{28cm}\setlength{\textheight}{28cm}
+ \setlength{\oddsidemargin}{0pt}\setlength{\evensidemargin}{0pt}
+ \setlength{\hoffset}{-1cm}
+ \pagestyle{empty}\thispagestyle{empty}
+ \newbox\graph
+ \begin{document}
+ \noindent\input{test.tex}\box\graph
+ \end{document}
diff --git a/graphics/circuit_macros/examples/tsttikz.tex b/graphics/circuit_macros/examples/tsttikz.tex
new file mode 100644
index 0000000000..00e327c454
--- /dev/null
+++ b/graphics/circuit_macros/examples/tsttikz.tex
@@ -0,0 +1,19 @@
+\documentclass[11pt]{standalone}
+% Custimize your packages here:
+\usepackage{graphicx}
+%\usepackage{pstricks,pst-slpe,pst-grad}
+\usepackage{tikz}
+\usepackage{boxdims}
+\usepackage{upgreek}
+\usepackage{siunitx}
+\usepackage{amssymb}
+\usepackage{geometry}
+% for Heathkit.m4:
+\geometry{paperwidth=15in,paperheight=14in,margin=1in}
+\newbox\graph
+\pagestyle{empty}
+\thispagestyle{empty}
+%
+\begin{document}
+ \noindent\vspace{2ex}\input{test.tex}\box\graph
+\end{document}
diff --git a/graphics/circuit_macros/examples/venus.m4 b/graphics/circuit_macros/examples/venus.m4
new file mode 100644
index 0000000000..8494638258
--- /dev/null
+++ b/graphics/circuit_macros/examples/venus.m4
@@ -0,0 +1,73 @@
+.PS
+# venus.m4
+# https://tex.stackexchange.com/questions/576423/a-more-precise-dance-of-planets-with-metapost-and-tikz
+# https://tex.stackexchange.com/questions/575986/dance-of-venus-and-variations-in-tikz-pgf
+
+gen_init
+NeedDpicTools
+maxpsht = 20
+
+thinlines_
+
+define(`venus',
+`setkeys_(`$1',
+ outerlength:4;
+ innerlength:2.8933;
+ outerrate:8;
+ innerrate:13;
+ maxtimes:2880;
+ increment:2;
+ changephase:0 )
+ sizefactor = 165/200
+ nmaxtimes = 360*m4outerrate
+ for x=0 to nmaxtimes by m4increment do {
+ if "$2" != "" then { hue = \
+ abs(sind(360*x/nmaxtimes*abs(m4innerrate-m4outerrate)+m4changephase-60))
+ hsvtorgb(hue*360,1,1,r,g,b)
+ line from (Rect_(m4outerlength,x))*sizefactor \
+ to (Rect_(m4innerlength,x/m4outerrate*m4innerrate))*sizefactor \
+ outlined rgbstring(r,g,b) } \
+ else {
+ line from (Rect_(m4outerlength,x))*sizefactor \
+ to (Rect_(m4innerlength,x/m4outerrate*m4innerrate))*sizefactor
+ }
+ } ')
+
+AA:[
+ sizefactor = 1/2.54
+ define(`venusA',`[
+ setkeys_(`$1',
+ iterations:270;
+ outerdistance:5.41;
+ innerdistance:7.48;
+ outerperiod:123;
+ innerperiod:200;
+ step:5)
+ for x=0 to m4iterations by m4step do {
+ line from (Rect_(m4outerdistance,x))*sizefactor \
+ to (Rect_(m4innerdistance,x/m4outerperiod*m4innerperiod))*sizefactor \
+ outlined "gray"
+ }
+ ]')
+
+# 3 columns, 5 rows
+ sizefactor /= 3
+ Orig:(0,0)
+ for i=1 to 5 do {
+ iteri = 180 + (i-1)*540
+ for j=1 to 3 do {
+ if (i==1) && (j==1) then { iter = 270 } \
+ else { iter = iteri + (j-1)*180 }
+ V[i,j]: venusA(iterations=iter) with .sw at Orig
+ sprintf("%g",iter) at last [] #colored rgbstring(1,0,0)
+ Orig: V[i,j].se
+ }
+ Orig: V[i,1].sw-(0,V[i,1].ht)
+ }
+ ]
+
+BB:[
+ venus(outerrate=8;innerrate=17;increment=2;innerlength=3.5;changephase=60,T)
+ ] with .nw at AA.sw+(0,-0.5)
+
+.PE
diff --git a/graphics/circuit_macros/examples/xfig/xfiglib.fig b/graphics/circuit_macros/examples/xfig/xfiglib.fig
index 255d8170c1..081aef7471 100644
--- a/graphics/circuit_macros/examples/xfig/xfiglib.fig
+++ b/graphics/circuit_macros/examples/xfig/xfiglib.fig
@@ -6,7 +6,7 @@ Letter
100.00
Single
-2
-# dpic version 2021.01.01 option -x for Fig 3.2
+# dpic version 2021.05.15 option -x for Fig 3.2
1200 2
6 0 0 3975 5025
6 0 0 3975 5025
@@ -17,33 +17,37 @@ Single
-6
6 375 75 600 675
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
- 525 675 525 545
-1 3 0 0 0 -1 0 -1 -1 0 1 0.0 525 545 3 3 528 545 528 545
-5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 500 491 525 545 441 478 546 452
-1 3 0 0 0 -1 0 -1 -1 0 1 0.0 546 452 3 3 549 452 549 452
-5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 500 414 546 452 440 414 546 375
-1 3 0 0 0 -1 0 -1 -1 0 1 0.0 546 375 3 3 549 375 549 375
-5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 500 336 546 375 440 336 546 298
-1 3 0 0 0 -1 0 -1 -1 0 1 0.0 546 298 3 3 549 298 549 298
-5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 500 259 546 298 441 272 525 205
-1 3 0 0 0 -1 0 -1 -1 0 1 0.0 525 205 3 3 528 205 528 205
+ 525 675 525 551
+6 440 205 549 556
+1 3 0 0 0 -1 0 -1 -1 0 1 0.0 525 551 3 3 528 551 528 551
+5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 500 496 525 551 441 483 546 458
+1 3 0 0 0 -1 0 -1 -1 0 1 0.0 546 458 3 3 549 458 549 458
+5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 500 419 546 458 440 419 546 381
+1 3 0 0 0 -1 0 -1 -1 0 1 0.0 546 381 3 3 549 381 549 381
+5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 500 342 546 381 440 342 546 303
+1 3 0 0 0 -1 0 -1 -1 0 1 0.0 546 303 3 3 549 303 549 303
+5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 500 265 546 303 441 278 525 211
+1 3 0 0 0 -1 0 -1 -1 0 1 0.0 525 211 3 3 528 211 528 211
+-6
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
- 525 205 525 75
+ 525 211 525 86
-6
6 750 75 975 675
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
- 900 675 900 545
-1 3 0 0 0 -1 0 -1 -1 0 1 0.0 900 545 3 3 903 545 903 545
-5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 875 491 900 545 816 478 921 452
-1 3 0 0 0 -1 0 -1 -1 0 1 0.0 921 452 3 3 924 452 924 452
-5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 875 414 921 452 815 414 921 375
-1 3 0 0 0 -1 0 -1 -1 0 1 0.0 921 375 3 3 924 375 924 375
-5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 875 336 921 375 815 336 921 298
-1 3 0 0 0 -1 0 -1 -1 0 1 0.0 921 298 3 3 924 298 924 298
-5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 875 259 921 298 816 272 900 205
-1 3 0 0 0 -1 0 -1 -1 0 1 0.0 900 205 3 3 903 205 903 205
+ 900 675 900 551
+6 815 205 924 556
+1 3 0 0 0 -1 0 -1 -1 0 1 0.0 900 551 3 3 903 551 903 551
+5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 875 496 900 551 816 483 921 458
+1 3 0 0 0 -1 0 -1 -1 0 1 0.0 921 458 3 3 924 458 924 458
+5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 875 419 921 458 815 419 921 381
+1 3 0 0 0 -1 0 -1 -1 0 1 0.0 921 381 3 3 924 381 924 381
+5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 875 342 921 381 815 342 921 303
+1 3 0 0 0 -1 0 -1 -1 0 1 0.0 921 303 3 3 924 303 924 303
+5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 875 265 921 303 816 278 900 211
+1 3 0 0 0 -1 0 -1 -1 0 1 0.0 900 211 3 3 903 211 903 211
+-6
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
- 900 205 900 75
+ 900 211 900 86
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
790 551 790 199
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
@@ -52,20 +56,24 @@ Single
6 1125 75 1200 675
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
1200 675 1200 525
-5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 1200 488 1200 525 1163 488 1200 450
+6 1162 225 1200 525
+5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 1200 488 1200 525 1162 488 1200 450
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 1200 413 1200 450 1163 413 1200 375
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 1200 338 1200 375 1163 338 1200 300
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 1200 263 1200 300 1163 263 1200 225
+-6
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
1200 225 1200 75
-6
6 1350 75 1500 675
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
1500 675 1500 525
+6 1463 225 1500 525
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 1500 488 1500 525 1463 488 1500 450
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 1500 413 1500 450 1463 413 1500 375
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 1500 338 1500 375 1463 338 1500 300
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
1500 225 1500 75
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
@@ -293,10 +301,12 @@ Single
6 2400 1575 2700 2025
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
2400 1575 2400 1620
+6 2400 1620 2445 1980
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 2400 1665 2400 1620 2445 1665 2400 1710
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 2400 1755 2400 1710 2445 1755 2400 1800
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 2400 1845 2400 1800 2445 1845 2400 1890
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 2400 1935 2400 1890 2445 1935 2400 1980
+-6
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
2400 1980 2400 2025
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
@@ -305,10 +315,12 @@ Single
2595 1620 2595 1980
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
2700 2025 2700 1980
+6 2655 1620 2700 1980
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 2700 1935 2700 1980 2655 1935 2700 1890
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 2700 1845 2700 1890 2655 1845 2700 1800
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 2700 1755 2700 1800 2655 1755 2700 1710
5 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 2700 1665 2700 1710 2655 1665 2700 1620
+-6
2 1 0 1 0 -1 0 -1 -1 0 0 0 0 0 0 2
2700 1620 2700 1575
-6
diff --git a/graphics/circuit_macros/gpic.m4 b/graphics/circuit_macros/gpic.m4
index 9a364657f7..41a5d3d394 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 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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 12f5170274..38ccc99d23 100644
--- a/graphics/circuit_macros/lib3D.m4
+++ b/graphics/circuit_macros/lib3D.m4
@@ -1,9 +1,9 @@
divert(-1)
lib3D.m4 Macros for rotation, projection, and other
operations on argument triples representing
- 3D vectors.
+ 3D vectors or colors.
-* Circuit_macros Version 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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 *
@@ -26,21 +26,36 @@ ifdef(`libgen_',,`include(libgen.m4)divert(-1)')
P =( -sin(az), cos(az), 0 )
(-sin(el)cos(az),-sin(az)sin(el),cos(el))'
define(`setview',`
-# setview
- m4azim=ifelse(`$1',,0,`$1',0,0,`prod_(`$1',dtor_)')
- m4elev=ifelse(`$2',,0,`$2',0,0,`prod_(`$2',dtor_)')
- m4rot =ifelse(`$3',,0,`$3',0,0,`prod_(`$3',dtor_)')
- m4caz=ifelse(`$1',,1,`$1',0,1,`$1',90,0,`$1',-90, 0,cos(m4azim))
- m4saz=ifelse(`$1',,0,`$1',0,0,`$1',90,1,`$1',-90,-1,sin(m4azim))
- m4cel=ifelse(`$2',,1,`$2',0,1,`$2',90,0,`$2',-90, 0,cos(m4elev))
- m4sel=ifelse(`$2',,0,`$2',0,0,`$2',90,1,`$2',-90,-1,sin(m4elev))
- m4cro=ifelse(`$3',,1,`$3',0,1,`$3',90,0,`$3',-90, 0,cos(m4rot))
- m4sro=ifelse(`$3',,0,`$3',0,0,`$3',90,1,`$3',-90,-1,sin(m4rot))
- view3D1=m4caz*m4cel
- view3D2=m4saz*m4cel
- view3D3=m4sel dnl
- ifdef(`setlight_',,`; light3D1=view3D1; light3D2=view3D2; light3D3=view3D3')
+`# setview($@)'
+define(`m4azim',ifelse(`$1',,0,prod_($1,dtor_)))dnl
+define(`m4elev',ifelse(`$2',,0,prod_($2,dtor_)))dnl
+define(`m4rot', ifelse(`$3',,0,prod_($3,dtor_)))dnl
+define(`m4azimr',`ifelse(`$1',,0,`prod_(`$1',dtor_)')')dnl
+define(`m4elevr',`ifelse(`$2',,0,`prod_(`$2',dtor_)')')dnl
+define(`m4rotx',`ifelse(`$3',,0,`prod_(`$3',dtor_)')')dnl
+define(`m4caz',
+ `ifelse(`$1',,1,`$1',0,1,`$1',90,0,`$1',-90, 0,m4cos(m4azim))')dnl
+define(`m4saz',
+ `ifelse(`$1',,0,`$1',0,0,`$1',90,1,`$1',-90,-1,m4sin(m4azim))')dnl
+define(`m4cel',
+ `ifelse(`$2',,1,`$2',0,1,`$2',90,0,`$2',-90, 0,m4cos(m4elev))')dnl
+define(`m4sel',
+ `ifelse(`$2',,0,`$2',0,0,`$2',90,1,`$2',-90,-1,m4sin(m4elev))')dnl
+define(`m4cro',`ifelse(`$3',,1,`$3',0,1,`$3',90,0,`$3',-90, 0,m4cos(m4rot))')dnl
+define(`m4sro',`ifelse(`$3',,0,`$3',0,0,`$3',90,1,`$3',-90,-1,m4sin(m4rot))')dnl
+ view3D1=m4caz*m4cel;dnl
+ view3D2=m4saz*m4cel;dnl
+ view3D3=m4sel
+ ifdef(`setlight_',,`light3D1=view3D1; light3D2=view3D2; light3D3=view3D3')
+dnl Unit vectors projected on the view plane
+ UPx_: project(1,0,0)
+ UPy_: project(0,1,0)
+ UPz_: project(0,0,1)
+`# setview end'
')
+define(`m4cos',`ifelse(`$1',0,1,cos(`$1'))')
+define(`m4sin',`ifelse(`$1',0,0,sin(`$1'))')
+
The resulting view vector
#efine(`View3D',`PtoBase3D(1,0,0)')
define(`View3D',`view3D1,view3D2,view3D3')
@@ -51,36 +66,45 @@ define(`Pr_xy',`$1,$2')
define(`Pr_xz',`$1,$3')
define(`Pr_yz',`$2,$3')
- Projection coords back to orig 3D coords
+ Projection coords back to orig 3D coords
define(`PtoBase3D',
`rot3Dz(m4azim,rot3Dy(-m4elev,rot3Dx(-m4rot,`$1',`$2',`$3')))')
- This does the 3D to 2D axonometric projection
- i.e. project(x,y,z) produces coordinate pair
- u,v on the 2D plane defined by the view angles.
-define(`project',
-`Pr_yz(rot3Dx(m4rot,rot3Dy(m4elev,rot3Dz(-m4azim,`$1',`$2',`$3'))))')
+ This does the 3D to 2D axonometric projection
+ i.e. project(x,y,z) produces coordinate pair
+ u,v on the 2D plane defined by the view angles
+ and Project(x,y,z) produces position (u,v)
+ifdpic(
+`define(`project',
+ `Pr_yz(rot3Dx(m4rot,rot3Dy(m4elev,rot3Dz(-m4azim,`$1',`$2',`$3'))))')
+ define(`Project',`(ifelse(`$1',0,
+ `ifelse(`$2',0,`ifelse(`$3',0,`(0,0)',UPz_*(`$3'))',
+ `UPy_*(`$2')`'ifelse(`$3',0,,+UPz_*(`$3'))')',
+ `UPx_*(`$1')`'ifelse(`$2',0,,+UPy_*(`$2'))`'ifelse(`$3',0,,+UPz_*(`$3'))'))')',
+`define(`project',
+ `Pr_yz(rot3Dx(m4rot,rot3Dy(m4elev,rot3Dz(-m4azim,`$1',`$2',`$3'))))')
+ define(`Project',`(project($@))')')
`Rotation about x axis rot3Dx(angle,x1,x2,x3)'
-define(`rot3Dx',``$2',diff_(prod_(cos(`$1'),`$3'),prod_(sin(`$1'),`$4')),dnl
- sum_(prod_(sin(`$1'),`$3'),prod_(cos(`$1'),`$4'))')
+define(`rot3Dx',``$2',diff_(prod_(m4cos(`$1'),`$3'),prod_(m4sin(`$1'),`$4')),dnl
+ sum_(prod_(m4sin(`$1'),`$3'),prod_(m4cos(`$1'),`$4'))')
`Rotation about y axis rot3Dy(angle,x1,x2,x3)'
-define(`rot3Dy',`sum_(prod_(cos(`$1'),`$2'),prod_(sin(`$1'),`$4')),`$3',dnl
- diff_(prod_(cos(`$1'),`$4'),prod_(sin(`$1'),`$2'))')
+define(`rot3Dy',`sum_(prod_(m4cos(`$1'),`$2'),prod_(m4sin(`$1'),`$4')),`$3',dnl
+ diff_(prod_(m4cos(`$1'),`$4'),prod_(m4sin(`$1'),`$2'))')
`Rotation about z axis rot3Dz(angle,x1,x2,x3)'
-define(`rot3Dz',`diff_(prod_(cos(`$1'),`$2'),prod_(sin(`$1'),`$3')),dnl
- sum_(prod_(sin(`$1'),`$2'),prod_(cos(`$1'),`$3')),`$4'')
+define(`rot3Dz',`diff_(prod_(m4cos(`$1'),`$2'),prod_(m4sin(`$1'),`$3')),dnl
+ sum_(prod_(m4sin(`$1'),`$2'),prod_(m4cos(`$1'),`$3')),`$4'')
`Cross product cross3D(x1,y1,z1,x2,y2,z2)'
define(`cross3D',`diff_(prod_(`$2',`$6'),prod_(`$3',`$5')),dnl
- diff_(prod_(`$3',`$4'),prod_(`$1',`$6')),dnl
- diff_(prod_(`$1',`$5'),prod_(`$2',`$4'))')
+ diff_(prod_(`$3',`$4'),prod_(`$1',`$6')),dnl
+ diff_(prod_(`$1',`$5'),prod_(`$2',`$4'))')
`Dot product dot3D(x1,y1,z1,x2,y2,z2)'
define(`dot3D',`(sum_(
- sum_(prod_(`$1',`$4'),prod_(`$2',`$5')),prod_(`$3',`$6')))')
+ sum_(prod_(`$1',`$4'),prod_(`$2',`$5')),prod_(`$3',`$6')))')
Vector addition, subtraction, scalar product
define(`sum3D',`sum_(`$1',`$4'),sum_(`$2',`$5'),sum_(`$3',`$6')')
define(`diff3D',`diff_(`$1',`$4'),diff_(`$2',`$5'),diff_(`$3',`$6')')
@@ -92,40 +116,41 @@ define(`dcosine3D',`(ifelse(`$1',1,`$2',`$1',2,`$3',`$4'))')
define(`length3D',`sqrt((`$1')^2+(`$2')^2+(`$3')^2)')
Unit vector
define(`unit3D',`sprod3D(1/length3D(`$1',`$2',`$3'),`$1',`$2',`$3')')
+ Proportion: between3D(x,Vec1,Vec2), i.e.
+ Vec1 * (1-x) + Vec2 * x
+define(`between3D',`sum3D(sprod3D((1-(`$1')),`$2',`$3',`$4'),
+ sprod3D( `$1',`$5',`$6',`$7'))')
- `Assign the direction cosines to variables
- assign3D([u],[v],[w],x,y,z); eg
+ `assign3D([u],[v],[w],x,y,z); eg
assign3D(u,v,w,cross3D(x1,y1,z1,x2,y2,z2))
- assigns the 4th arg to u, the 5th to v,
- and the 6th to w as u, v,or w are nonblank'
-define(`assign3D',
-`ifelse(`$1',,,`$1' = `$4')
- ifelse(`$2',,,`$2' = `$5')
- ifelse(`$3',,,`$3' = `$6')')
+ assigns u = 4th arg, v = 5th arg, w = 6th arg,
+ for nonblank u, v, or w'
+define(`assign3D',`assign3($@)')
+
`vassign3D(name,x,y,z); eg
vassign3D(u,x,y,z)
- assigns u[1] to x, u[2] to y, u[3] to z'
+ assigns u[1] = x, u[2] = y, u[3] = z'
define(`vassign3D',`for i_vassign3D = 1 to 3 do {
exec sprintf("`$1'[i_vassign3D] = $%g",i_vassign3D+3) }')
Write out the 3 arguments for debug
define(`print3D',`print sprintf("`$1'(%g,%g,%g)",`$2',`$3',`$4')')
- `setlightlight (azimuth, elevation, rotation)
+ `setlight (azimuth, elevation, rotation)
Set angles (degrees) for 3D highlighting.
Defaults are the previous values for
setview(). The Light3D vector is defined
as for View3D.'
define(`setlight',`define(`setlight_')
- m4hzim=ifelse(`$1',,m4azim,`$1',0,0,`prod_(`$1',dtor_)')
- m4hlev=ifelse(`$2',,m4elev,`$2',0,0,`prod_(`$2',dtor_)')
- m4hot =ifelse(`$3',,m4rot,`$3',0,0,`prod_(`$3',dtor_)')
- m4chz=ifelse(`$1',0,1,`$1',90,0,`$1',-90, 0,cos(m4hzim))
- m4shz=ifelse(`$1',0,0,`$1',90,1,`$1',-90,-1,sin(m4hzim))
- m4chl=ifelse(`$2',0,1,`$2',90,0,`$2',-90, 0,cos(m4hlev))
- m4shl=ifelse(`$2',0,0,`$2',90,1,`$2',-90,-1,sin(m4hlev))
- m4cho=ifelse(`$3',0,1,`$3',90,0,`$3',-90, 0,cos(m4hot))
- m4sho=ifelse(`$3',0,0,`$3',90,1,`$3',-90,-1,sin(m4hot))
+ define(`m4hzim',`ifelse(`$1',,m4azimr,`prod_(`$1',dtor_)')')dnl
+ define(`m4hlev',`ifelse(`$2',,m4elevr,`prod_(`$2',dtor_)')')dnl
+ define(`m4hot',`ifelse(`$3',,m4rotx,`prod_(`$3',dtor_)')')dnl
+ define(`m4chz',`ifelse(`$1',0,1,`$1',90,0,`$1',-90, 0,cos(m4hzim))')dnl
+ define(`m4shz',`ifelse(`$1',0,0,`$1',90,1,`$1',-90,-1,sin(m4hzim))')dnl
+ define(`m4chl',`ifelse(`$2',0,1,`$2',90,0,`$2',-90, 0,cos(m4hlev))')dnl
+ define(`m4shl',`ifelse(`$2',0,0,`$2',90,1,`$2',-90,-1,sin(m4hlev))')dnl
+ define(`m4cho',`ifelse(`$3',0,1,`$3',90,0,`$3',-90, 0,cos(m4hot))')dnl
+ define(`m4sho',`ifelse(`$3',0,0,`$3',90,1,`$3',-90,-1,sin(m4hot))')dnl
light3D1=m4chz*m4chl
light3D2=m4shz*m4chl
light3D3=m4shl
diff --git a/graphics/circuit_macros/libcct.m4 b/graphics/circuit_macros/libcct.m4
index d0c1e00d14..ed3356f4b0 100644
--- a/graphics/circuit_macros/libcct.m4
+++ b/graphics/circuit_macros/libcct.m4
@@ -1,7 +1,7 @@
divert(-1)
libcct.m4
-* Circuit_macros Version 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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 *
@@ -71,15 +71,17 @@ CUSTOMIZATIONS:
DEBUGGING: The statement
print "`$0'($@)" ;
inserted into a macro will display the macro name and current arguments
+ Similarly, the m4 macro m4msg( text ) will display the text during m4
+ processing.
==============================================================================
This file redefines default arrow dimensions and the dotrad_ macro.
=============================================================================='
- `capacitor( linespec,[char][+],R,height,wid )
- char:
- F or none: flat plates
- C = polarized, curved plate
+ `capacitor( linespec,chars,R,height,wid )
+ Arg2 chars:
+ [d]F or blank: flat plates; d=hatched fill
+ [d]C = polarized, curved plate; d=variable
E = polarized rectangular plates
K = filled rectangular plates
M = rectangular plates
@@ -88,38 +90,40 @@ DEBUGGING: The statement
+ = polarity sign to right of drawing dir
+L =polarity sign to left
arg3 = R: reversed orientation
- arg4 = height (defaults F: dimen_/3
- C,P: dimen_/4, E,K: dimen_/5)
- arg5 = wid (defaults F: height*0.3,
- C,P: height*0.4, E,K: height) '
+ arg4 = height (defaults F: dimen_/3;
+ C,P: dimen_/4; E,K: dimen_/5)
+ arg5 = wid (defaults F: height*0.3;
+ C,P: height*0.4; E,K: height) '
define(`capacitor',
- `ifelse(`$3',R,`reversed(`capacitor',`$1',`$2',,shift(shift(shift($@))))',
+`ifelse(`$3',R,`reversed(`capacitor',`$1',`$2',,shift(shift(shift($@))))',
`eleminit_(`$1')
- define(`m4ctype',ifelse(`$2',,F,`$2',+,F,`$2',+L,F,`$2'))dnl
- m4_dna(`m4ctype',+L)`'m4_dna(`m4ctype',+)dnl
- { ifelse(m4ctype,F,
+ define(`dna_',`ifelse(`$2',,F,`$2')')dnl
+ { sc_draw(`dna_',F,
`define(`m4cht',`ifelse(`$4',,`dimen_/3',`($4)')')dnl
define(`m4cwd',`ifelse(`$5',,`m4cht*0.3',`($5)')')dnl
line to rvec_(rp_len/2-m4cwd/2,0)
{line from rvec_(0,-m4cht/2) \
to rvec_(0,m4cht/2)}
+ ifelse(m4a,d,`for_(1,3,1,{line from rvec_(0,m4cwd*(m4x-5/2)) \
+ to rvec_(m4cwd,m4cwd*(m4x-3/2))})')
move to rvec_(m4cwd,0)
{line from rvec_(0,-m4cht/2) \
to rvec_(0,m4cht/2)}
- line to rvec_(rp_len/2-m4cwd/2,0) ',
- m4ctype,C,
+ line to rvec_(rp_len/2-m4cwd/2,0) ')
+ sc_draw(`dna_',C,
`define(`m4cht',`ifelse(`$4',,`dimen_/4',`($4)')')dnl
define(`m4cwd',`ifelse(`$5',,`m4cht*0.4',`($5)')')dnl
define(`m4cr',`dimen_*0.25')dnl
line to rvec_(rp_len/2-m4cwd/2,0)
{line from rvec_(0,-m4cht/2) \
to rvec_(0,m4cht/2)}
- {arc cw from rvec_(m4cwd,-m4cht/2) \
+ {arc cw ifelse(m4a,d,-> wid lthick*4 ht lthick*4) \
+ from rvec_(m4cwd,-m4cht/2) \
to rvec_(m4cwd,m4cht/2) \
with .c at rvec_(m4cwd+sqrt((m4cr)^2-(m4cht/2)^2),0) }
line from last arc.c+vec_(-m4cr,0) \
- to rvec_(rp_len/2+m4cwd/2,0) ',
- m4ctype,P,
+ to rvec_(rp_len/2+m4cwd/2,0) ')
+ sc_draw(`dna_',P,
`define(`m4cht',`ifelse(`$4',,`dimen_/4',`($4)')')dnl
define(`m4cwd',`ifelse(`$5',,`m4cht*0.4',`($5)')')dnl
define(`m4cr',`dimen_*0.25')dnl
@@ -131,8 +135,8 @@ define(`capacitor',
{line from rvec_(m4cwd*2/3,-m4cht*3/8) \
to rvec_(m4cwd*2/3,m4cht*3/8)}
line from rvec_(m4cwd*2/3,0) \
- to rvec_(rp_len/2+m4cwd/2,0) ',
- m4ctype,E,
+ to rvec_(rp_len/2+m4cwd/2,0) ')
+ sc_draw(`dna_',E,
`define(`m4cht',`ifelse(`$4',,`dimen_/5',`($4)')')dnl
define(`m4cwd',`ifelse(`$5',,`m4cht',`($5)')')dnl
define(`m4cs',`(m4cwd/3.2)')dnl
@@ -142,8 +146,8 @@ define(`capacitor',
move to rvec_(m4cwd,0)
{ifsvg(`lbox(-m4cs,m4cht,fill_(0))',`m4fshade(m4fill,lbox(-m4cs,m4cht))')}
linethick_(m4linethicktemp)
- line to rvec_(rp_len/2-m4cwd/2,0) ',
- m4ctype,M,
+ line to rvec_(rp_len/2-m4cwd/2,0) ')
+ sc_draw(`dna_',M,
`define(`m4cht',`ifelse(`$4',,`dimen_/5',`($4)')')dnl
define(`m4cwd',`ifelse(`$5',,`m4cht',`($5)')')dnl
define(`m4cs',`(m4cwd/3.2)')dnl
@@ -153,8 +157,8 @@ define(`capacitor',
move to rvec_(m4cwd,0)
{ lbox(-m4cs,m4cht) }
linethick_(m4linethicktemp)
- line to rvec_(rp_len/2-m4cwd/2,0) ',
- m4ctype,K,
+ line to rvec_(rp_len/2-m4cwd/2,0) ')
+ sc_draw(`dna_',K,
`define(`m4cht',`ifelse(`$4',,`dimen_/5',`($4)')')dnl
define(`m4cwd',`ifelse(`$5',,`m4cht',`($5)')')dnl
define(`m4cs',`(m4cwd/3.2)')dnl
@@ -162,8 +166,8 @@ define(`capacitor',
{ifsvg(`lbox(m4cs,m4cht,fill_(0))',`m4fshade(m4fill,lbox(m4cs,m4cht))')}
move to rvec_(m4cwd,0)
{ifsvg(`lbox(-m4cs,m4cht,fill_(0))',`m4fshade(m4fill,lbox(-m4cs,m4cht))')}
- line to rvec_(rp_len/2-m4cwd/2,0) ',
- m4ctype,N,
+ line to rvec_(rp_len/2-m4cwd/2,0) ')
+ sc_draw(`dna_',N,
`define(`m4cht',`ifelse(`$4',,`dimen_/5',`($4)')')dnl
define(`m4cwd',`ifelse(`$5',,`m4cht*2/3',`($5)')')dnl
define(`m4cs',`(m4cwd/3.2*3/2)')dnl
@@ -195,9 +199,10 @@ define(`capacitor',
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'
+ arg4: cycle width (default dimen_/6)'
define(`resistor',
`define(`m4h',`ifelse(`$4',,`dimen_/6',`($4)')/4')dnl
ifinstr(
@@ -257,6 +262,12 @@ define(`resistor',
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')
@@ -361,13 +372,29 @@ ifelse(`$2',,`undefine(`m4tap_x')popdef(`m4type')popdef(`m4name')',
m4name`'m4tap_x: Here }
addtaps(,shift(shift(shift($@))))')')
- `tapped(`two-terminal element',[. | <- | -> | <->],
+ `tapped(`two-terminal element', . | <- | -> | <-> ,
fractional pos, length, fractional pos, length,...)
Draw the two-terminal element and taps in a [] block'
define(`tapped',`[ $1
Start: last line.start; End: last line.end; C: last line.c
addtaps(shift($@)) ]')
+ `shielded(`two-terminal element',L|U, line attributes )
+ L= shield left half (wrt drawing direction)
+ R= shield right half (default both halves)'
+define(`shielded',`[ $1
+ Start: last line.start; End: last line.end; C: last line.c
+ W: last line.c - vec_(last [].wid_/2+dimen_/8,0)
+ E: last line.c + vec_(last [].wid_/2+dimen_/8,0)
+ NW: last [].nw_ + vec_(-dimen_/8,dimen_/8)
+ NE: last [].ne_ + vec_(dimen_/8,dimen_/8)
+ SE: last [].se_ + vec_(dimen_/8,-dimen_/8)
+ SW: last [].sw_ + vec_(-dimen_/8,-dimen_/8)
+ ifinstr(`$2',L,`line from W to NW then to NE then to E dashed `$3'',
+ `$2',R,`line from W to SW then to SE then to E dashed `$3'',
+ `line from W to NW then to NE then to SE then to SW then to W dashed `$3'')
+ `$4']')
+
`b_current( label, above_|below_, O[ut],
S[tart]|E[nd], frac )
Branch current for last-drawn element. The arrowhead
@@ -402,78 +429,81 @@ define(`rarrow',`define(`m4h',`min(lin_leng(last line),linewid)/2')dnl
to last [].s_+vec_(m4h,-m4v) \
m4lstring(`$1',"sp_`iflatex(`$ `$1'$',` $1')'sp_") below_}')
- `inductor( linespec,W|L,cycles,M|P,loop wid )
+ `inductor( linespec, W|L, cycles, M|P|K[n],
+ loop wid )
W=wide arcs (default narrow); L=looped arcs
- M=metal core; P=powder core
- loop wid defaults W,L: dimen_/5,
- other: dimen_/8'
+ arg4= M[n]=metal core
+ P[n]=(ferrite) powder core (dashed lines)
+ K[n]=long-dashed core lines
+ n=integer (default 2 lines)
+ arg5 loop wid defaults W,L: dimen_/5,
+ other: dimen_/8'
define(`inductor',`eleminit_(`$1')
define(`m4hlw',`ifelse(`$5',,`dimen_/10',`($5)/2')')dnl half loop wid
define(`m4n',`ifelse(`$3',,4,`$3')')dnl
- ifelse(`$2',W,
- `m4Inductor',
- `$2',L,
- `m4Lnductor',
- `m4inductor(,ifelse(`$5',,,`($5)/2'))')
- ifelse(ifelse(`$4',M,T,`$4',P,T),T,`m4m_core(rvec_(rp_len/2,0),
- m4wd,m4ht+dimen_/24,dimen_/16,ifelse(`$4',P,dashed m4wd/(2*m4n+1)))
- define(`m4hs',`(dimen_/24+dimen_/16)')',`define(`m4hs',0)')
- {[box invis ht_ m4ht+m4hs+m4dp wid_ m4wd] \
- at rvec_(rp_len/2,(m4ht+m4hs-m4dp)/2)}
+ ifelse(`$2',W, `define(`m4wd',((2*m4n-2)*m4c2t+2)*m4hlw)',
+ `$2',L, `define(`m4wd',(m4n+1)*m4hlw)',
+ `define(`m4ht',`ifelse(`$2',,`dimen_/16',`$2')')define(`m4wd',m4n*m4ht*2)')
+ { line to rvec_((rp_len-m4wd)/2,0)
+ ifelse(`$2',W,`m4Ibody', `$2',L,`m4Lbody', `m4ibody') with .S at Here
+ line from last [].E to last [].E+vec_((rp_len-m4wd)/2,0) }
+ ifelse(ifinstr(`$4',M,T,`$4',P,T,`$4',K,T),T,
+ `define(`m4nL',ifelse(len(`$4'),1,2,substr(`$4',1)))dnl
+ define(`m4hs',`(dimen_/24+(m4nL-1)*dimen_/16)')dnl
+ m4m_core(rvec_(rp_len/2,0), m4wd, m4ht+dimen_/24, dimen_/16,
+ ifinstr( `$4',P,`dashed m4wd/(2*m4n+1)',
+ `$4',K,`dashed m4wd/(2*m4n+1)*3'), m4nL)
+ {[box invis ht_ m4ht+m4hs+m4dp wid_ m4wd] \
+ at rvec_(rp_len/2,(m4ht+m4hs-m4dp)/2)}')
line to rvec_(rp_len,0) invis ')
- `Wide loop inductor'
-define(`m4Inductor',`define(`m4ht',`(1+m4st)*m4hlw')dnl
- define(`m4dp',`(m4s2t-m4st)*m4hlw')define(`m4wd',((2*m4n-2)*m4c2t+2)*m4hlw)dnl
- { line to rvec_(rp_len/2-((m4n-1)*m4c2t+m4ct)*m4hlw,0); round
- arc cw from Here to rvec_(vscal_(m4hlw,m4ct+m4c2t,m4st-m4s2t)) \
- with .c at rvec_(vscal_(m4hlw,m4ct,m4st)); round
- for m4i=3 to m4n do { arc cw from Here to rvec_(vscal_(m4hlw,2*m4c2t,0)) \
- with .c at rvec_(vscal_(m4hlw,m4c2t,m4s2t)); round }
- arc cw from Here to rvec_(vscal_(m4hlw,m4ct+m4c2t,m4s2t-m4st)) \
- with .c at rvec_(vscal_(m4hlw,m4c2t,m4s2t)); round
- line to rvec_(rp_len/2-((m4n-1)*m4c2t+m4ct)*m4hlw,0) } ')
+ `Wide loop inductor body'
+define(`m4Ibody',`define(`m4ht',`(1+m4st)*m4hlw')dnl
+ define(`m4dp',`(m4s2t-m4st)*m4hlw')dnl
+ [S: Here; round
+ arc cw from Here to rvec_(vscal_(m4hlw,m4ct+m4c2t,m4st-m4s2t)) \
+ with .c at rvec_(vscal_(m4hlw,m4ct,m4st)); round
+ for m4i=3 to m4n do { arc cw from Here to rvec_(vscal_(m4hlw,2*m4c2t,0)) \
+ with .c at rvec_(vscal_(m4hlw,m4c2t,m4s2t)); round }
+ arc cw from Here to rvec_(vscal_(m4hlw,m4ct+m4c2t,m4s2t-m4st)) \
+ with .c at rvec_(vscal_(m4hlw,m4c2t,m4s2t)); round
+ E: Here] ')
define(`m4ct',`Cos(25)')define(`m4st',`Sin(25)')
define(`m4c2t',`Cos(50)')define(`m4s2t',`Sin(50)')
- `Looped inductor'
-define(`m4Lnductor',`define(`m4ht',`m4hlw*10/8')dnl
- define(`m4dp',`m4hlw/2')define(`m4wd',(m4n+1)*m4hlw)dnl
- { line to rvec_(rp_len/2-m4wd/2,0); round
+ `Looped inductor body'
+define(`m4Lbody',`define(`m4ht',`m4hlw*10/8')define(`m4dp',`m4hlw/2')dnl
+ [ S: Here; round
spline ifdpic(0.55) \
- to rvec_(0,m4ht) for_(1,m4n,1,`\
- then to rvec_((m4x+0.3)*m4hlw, m4ht) \
- then to rvec_((m4x+0.3)*m4hlw,-m4dp) \
- then to rvec_((m4x-0.3)*m4hlw,-m4dp) \
- then to rvec_((m4x-0.3)*m4hlw, m4ht)\')\
- then to rvec_(m4wd,m4ht) \
- then to rvec_(m4wd,0)
- round; line to rvec_(rp_len/2-m4wd/2,0) }')
- `Narrow inductor'
-define(`m4inductor',`define(`m4ht',`ifelse(`$2',,`dimen_/16',`$2')')dnl
- define(`m4dp',0)define(`m4wd',m4n*m4ht*2)dnl
+ to rvec_(0,m4ht) for_(1,m4n,1,`\
+ then to rvec_((m4x+0.3)*m4hlw, m4ht) \
+ then to rvec_((m4x+0.3)*m4hlw,-m4dp) \
+ then to rvec_((m4x-0.3)*m4hlw,-m4dp) \
+ then to rvec_((m4x-0.3)*m4hlw, m4ht) \')\
+ then to rvec_(m4wd,m4ht) \
+ then to rvec_(m4wd,0); round; E: Here ] ')
+ `Narrow inductor body'
+define(`m4ibody',`define(`m4dp',0)dnl
ifelse(ifpstricks(T)`'ifmpost(T)`'ifpgf(T)`'ifsvg(T),T,
`define(`m4y')',`undefine(`m4y')')dnl
- { line to rvec_((rp_len-m4wd)/2,0)
- ifdef(`m4y',`{line to rvec_(0,-hlth)};')
- for m4i=1 to m4n do {
- arc cw from Here to rvec_(m4ht*2,0) with .c at rvec_(m4ht,0)
- ifdef(`m4y',`{line to rvec_(0,-hlth)}') }
- line to rvec_((rp_len-m4wd)/2,0)} ')
-
- `m4m_core(bottom ctr, length, ht offset,
- separation,linetype)
- Two lines for the metal core'
-define(`m4m_core',`dnl
- {M4Core1: line from `$1'+vec_(-(`$2')/2,`$3') \
- to `$1'+vec_( (`$2')/2,`$3') `$5'
- M4Core2: line from M4Core1.start+vec_(0,`$4') \
- to M4Core1.end+vec_(0,`$4') `$5'}')
+ [ S: Here; ifdef(`m4y',`{line to rvec_(0,-hlth)};')
+ for m4i=1 to m4n do {
+ arc cw from Here to rvec_(m4ht*2,0) with .c at rvec_(m4ht,0)
+ ifdef(`m4y',`{line to rvec_(0,-hlth)}') }; E: Here ] ')
+ `m4m_core(bottom center, length, ht offset,
+ separation, linetype, nlines)
+ nlines=lines for the metal core'
+define(`m4m_core',`for_(1,`$6',1,`{M4Core`'m4x: line \
+ from `$1'+vec_(-(`$2')/2,`$3'+(`$4')*(m4x-1)) \
+ to `$1'+vec_( (`$2')/2,`$3'+(`$4')*(m4x-1)) `$5''})')
`transformer( linespec, L|R, np,
- [A|P][W|L][D1|D2|D12|D21], ns )
+ [A|M[n]|P[n]|K[n]][W|L][D1|D2|D12|D21], ns )
2-winding transformer or choke:
np = number of primary arcs
ns = number of secondary arcs
- A = air core; P = powder (dashed) core
+ A = air core;
+ M[n] = metal core (default); n=number of lines
+ P[n] = powder (dashed) core
+ K[n] = long dashed core
W = wide windings; L = looped windings
D1: phase dots at P1 and S1 ends; D2: dots
at P2 and S2 ends; D12: dots at P1 and S2
@@ -494,9 +524,12 @@ define(`transformer', `[ P1: Here define(`m4drt',m4dir)
m4ns*m4ht*2)')dnl
ifinstr(`$4',A,
`move to last line.c+vec_(0,m4ht*ifelse(m4WL,W,3,m4WL,L,3,4))',
- `m4m_core(rvec_(-(rp_len/2),0),max(m4wd,m4t),m4ht+dimen_/12,dimen_/8,
- ifinstr(`$4',P,dashed m4wd/(2*m4n+1)))
- move to last line.c+vec_(0,m4ht+dimen_/12)')
+ `define(`m4LL',`regexp(`$4',[MPK]\([0-9][0-9]*\),\1)')dnl
+ define(`m4nL',`ifelse(m4LL,,2,m4LL)')dnl
+ m4m_core(rvec_(-(rp_len/2),0), max(m4wd,m4t), m4ht+dimen_/12, dimen_/8,
+ ifinstr( `$4',P,`dashed m4wd/(2*m4n+1)',
+ `$4',K,`dashed m4wd/(2*m4n+1)*3'), m4nL)
+ move to last line.c+vec_(0,m4ht+dimen_/12) ')
TS: Here
S2: rvec_( ifelse(`$2',R,-)(ifelse(`$5',,rp_len/2,m4t/2)), 0 )
S1: 2 between S2 and Here
@@ -662,19 +695,28 @@ define(`source',`ifelse(`$4',R,
to rvec_(m4v,m4v)}',
`{$2}' )
line from rvec_(m4h,0) \
- to rvec_(rp_len/2,0)} ')
- { [box invis ht_ m4h*2 wid_ m4h*2] at rvec_(rp_len/2,0) }
+ to rvec_(rp_len/2,0)}
+ { [box invis ht_ m4h*2 wid_ m4h*2] at rvec_(rp_len/2,0) } ')
line to rvec_(rp_len,0) invis ')')
`Internal to source macro:'
define(`m4_sourceGQ',
-`{ line to rvec_(rp_len/2-3/2*m4h,0)
- {[C1: circle rad m4h
- L: C1+vec_(m4h/2, m4h*sqrt(3)/2)
- R: C1+vec_(m4h/2,-m4h*sqrt(3)/2)
- C2: ifelse(`$2',G,`circle rad m4h',`arc rad m4h from R to L') \
- with .c at C1 +vec_(m4h,0)] at rvec_(m4h*3/2,0)}
- line from rvec_(m4h*3,0) \
- to rvec_(rp_len/2+3/2*m4h,0) } ')
+ `m4sv = m4h*2/3
+ m4sh = sqrt((m4h)^2-m4sv^2)
+ { line to rvec_(rp_len/2-(m4h+m4sh),0)
+ {Body:[ Cx: rvec_(m4h,0)
+ ifelse(`$5',,,`{circle invis rad m4h `$5' with .c at Cx}')
+ L: Cx+vec_(m4sh, m4sv)
+ R: Cx+vec_(m4sh,-m4sv)
+ M1: Cx+vec_(-(m4h-m4sh)*3/5,0)
+ ifelse(`$5',,,
+ `{circle invis rad m4h `$5' with .c at Cx+vec_(m4sh*2,0)}')
+ C1: circle rad m4h with .c at Cx
+ C2: ifelse(`$2',G,`circle rad m4h',`arc rad m4h from R to L') \
+ with .c at C1 +vec_(m4sh*2,0)
+ M2: C2+vec_((m4h-m4sh)*3/5,0)
+ ] at rvec_(m4h+m4sh,0)}
+ line from rvec_((m4h+m4sh)*2,0) \
+ to rvec_(rp_len/2+(m4h+m4sh),0) } ')
`ttmotor( linespec, string, diameter, brushwid, brushht )'
define(`ttmotor',`eleminit_(`$1')
@@ -1051,10 +1093,10 @@ define(`tbreaker',`eleminit_(`$1') define(`m4ho',0)
m4j = max(0,rp_len/2-m4h/2)
line to rvec_(m4j,0)
{round
- arc cw to rvec_( m4h/4,0)+vec_(Rect_(m4h/4,-60)) with .c at rvec_( m4h/4,0)}
+ arc cw to rvec_( m4h/4,0)+vec_(Rect_(m4h/4,-75)) with .c at rvec_( m4h/4,0)}
move to rvec_(m4h,0)
{round
- arc cw to rvec_(-m4h/4,0)+vec_(Rect_(m4h/4,120)) with .c at rvec_(-m4h/4,0)}
+ arc cw to rvec_(-m4h/4,0)+vec_(Rect_(m4h/4,105)) with .c at rvec_(-m4h/4,0)}
line to rvec_(m4j,0)
') }
{[box invis ht_ m4v wid_ m4h ] at rvec_(rp_len/2,ifelse(`$2',R,-)m4ho) }
@@ -1101,7 +1143,7 @@ define(`arrowline',`line ifelse(`$1',,`to rvec_(elen_,0)',`$1')
T=truncated stem; N=normal ground,
F=frame, S=signal, L=low-noise, P=protective,
E=European; PA=protective alternate
- down (default), up, left, right, angle (deg)'
+ Down (default), Up, Left, Right, angle (deg)'
define(`ground',`box invis ht 0 wid 0 with .c ifelse(`$1',,`at Here',`$1')
define(`m4v',`dimen_/6')define(`m4h',`dimen_/16')dnl
{setdir_(ifelse(`$4',,-90,`$4'))
@@ -1217,7 +1259,8 @@ define(`antenna',`[ T: Here
then to rvec_(m4v*3/4,-m4v*sqrt(3)/4) }
line from rvec_(m4v*3/4,0) \
to T')
- `$5'; resetdir_ ] with .T ifelse(`$1',,`at Here',`$1')')
+ `$5'; resetdir_ ] with .T ifelse(`$1',,`at Here',`$1')
+ move to last [].T')
`switch( linespec,L|R,[O|C][D],L|B|D )
Wrapper for bswitch, lswitch, dswitch
@@ -1540,7 +1583,7 @@ define(`integrator',`eleminit_(`$1')
- label, + label, size, chars)
drawn as a []:
defined positions:
- W, N, E, S, Out, E1, E1, In1, In2
+ W, N, E, S, Out, E1, E2, In1, In2
chars:
P: power connections V1,V2
R: labels at In1,In2 swapped
@@ -1561,8 +1604,8 @@ define(`dna_',`$5')dnl
`line to N then to E then to S then to W; move to E')
if rp_len > m4h then { line to rvec_(rp_len-m4h,0) }
Out: Here }
- E1: vec_(m4h/2,m4v/4)
- E2: vec_(m4h/2,-m4v/4)
+ NE: vec_(m4h/2,m4v/4); E1: NE
+ SE: vec_(m4h/2,-m4v/4); E2: SE
In1: vec_(0,m4v/4)
In2: vec_(0,-m4v/4)
{ move to In`'ifinstr(dna_,R,2,1)
@@ -2255,10 +2298,11 @@ E: Bulk.c+vec_(2*m4_U,ifelse(`$2',R,-)3.5*m4_U)
e_fet(linespec, R, P, E|S )
d_fet(linespec, R, P, E|S )
c_fet(linespec, R, P )
+ g_fet(linespec, R, P, shade spec )
with terminals S, D, G.
arg 2: G pin drawn to right of curr direction
arg 3: P-channel, default N
- arg 4: envelope'
+ arg 4: envelope or simplified'
define(`j_fet',`mosfet(`$1',`$2',ifelse(`$3',P,u,d)GSDF,`$4',`$5')')
`Enhancement-mode FET e_fet(linespec,R,P,S,E)'
define(`e_fet',`mosfet(`$1',`$2',
@@ -2268,20 +2312,31 @@ define(`e_fet',`mosfet(`$1',`$2',
define(`d_fet',`mosfet(`$1',`$2',
ifelse(`$4',S,`TFDR'ifelse(`$3',P,u,d)S,`LFDSQ'ifelse(`$3',P,d,u)B),
`$4',`$5')')
- `Simplified switching c_fet(linespec,R,P)
+ `Simplified switching c_fet(linespec,R,P)
arg 3: negated G pin'
define(`c_fet',`mosfet(`$1',`$2',`ZSDF'ifelse(`$3',P,d)T,,`$4')')
+ `Graphene FET g_fet(linespec,R,P,shadespec)'
+define(`g_fet',`mosfet(`$1',`$2',ifinstr(`$3',P,d,u)SKTF,`$4',`$5') ')
+
+ `Fe_fet(linespec,R,chars) FET with
+ superimposed ferroelectric symbol:
+ arg1, arg2, arg3 are as for mosfet'
+define(`Fe_fet',`mosfet(`$1',`$2',ifelse(`$3',,SDFT,`$3'),,
+ variable(,NN,60,dimen_/3,
+ at (0.5 between S and D)+vec_(0,ifelse(`$2',R,-)4*m4_U)); `$4')')
+
` The comprehensive mosfet(linespec,R,BDEFGLQRSTXZ,E)
Every drawn component is controlled by a letter or letter pair in arg 3;
adding or changing elements is easily done by adding a test for a letter
- or letter sequence:
+ or letter sequence. The modifiers u and d are optional:
udB: center bulk connection pin; u or d arrow
D: D pin and lead
E: dashed substrate
F: solid-line substrate
udG: G pin to substrate at source; u or d arrow
udH: G pin to substrate at center; u or d arrow
+ K: graphene hexagon
L: G pin to channel (kept for compatibility
for now; the same as dM below)
udM: G pin to channel center or
@@ -2301,13 +2356,23 @@ define(`mosfet',
`define(`m4R',`ifelse(`$2',R,-)')dnl right orientation flag
define(`dna_',`ifelse(`$3',,DSEdMuBQ,`$3')')dnl
define(`m4s',ifinstr(dna_,Z,2.5,3.5))dnl size parameter
+ define(`m4hs',2.5)define(`m4hhx',m4hs*sqrt(3))dnl hex side len
+ define(`m4K',ifinstr(dna_,K,K))dnl
[ ifelse(`$1',,
- `tr_xy_init(,m4_U,m4R); S: tr_xy(-2,0); D: tr_xy(2,0)',
+ `tr_xy_init(,m4_U,m4R); ifinstr(dna_,K,
+ `S: tr_xy(-m4hs,0); D: tr_xy(m4hs,0); W: S; E: D
+ tr_xy_init(tr_xy(0,m4hhx/2-m4s),m4_U,m4R)',
+ `S: tr_xy(-2,0); D: tr_xy(2,0)')',
`eleminit_(`$1'); tr_xy_init(last line.c,m4_U,m4R)
- S: last line.start; line from S to tr_xy(-2,0) \
- then to tr_xy(-2,0)+vec_(0,m4R`'linethick pt__)
- D: S+vec_(rp_len,0); line from D to tr_xy(2,0) \
- then to tr_xy(2,0)+vec_(0,m4R`'linethick pt__)')
+ ifinstr(dna_,K,
+ `S: last line.start; D: last line.end;
+ W: tr_xy(-m4hs,0); line from S to W
+ E: tr_xy( m4hs,0); line from D to E
+ tr_xy_init(tr_xy(0,m4hhx/2-m4s),m4_U,m4R)',
+ `S: last line.start; line from S to tr_xy(-2,0) \
+ then to tr_xy(-2,0)+vec_(0,m4R`'linethick pt__)
+ D: S+vec_(rp_len,0); line from D to tr_xy(2,0) \
+ then to tr_xy(2,0)+vec_(0,m4R`'linethick pt__)')')
sc_draw(`dna_',B,
`B: tr_xy(0,0); Bl: line from B to tr_xy(0,m4s)
ifelse(m4a,,,`arrow m4c_l ht m4_Aht wid m4_Awd ifelse(m4a,d,<-) \
@@ -2349,6 +2414,13 @@ define(`mosfet',
to G; arrow m4c_l ht m4_Aht wid m4_Awd \
from tr_xy(0,(m4s+3-m4_Aht/(m4_U))) \
to tr_xy(0,(m4s+3))')')
+ sc_draw(`dna_',K,
+ `NW: W+ta_xy( m4hs/2, m4hhx/2)
+ SW: W+ta_xy( m4hs/2,-m4hhx/2)
+ SE: E+ta_xy(-m4hs/2,-m4hhx/2)
+ NE: E+ta_xy(-m4hs/2, m4hhx/2)
+ Kl: line from NW \
+ to W then to SW then to SE then to E then to NE then to NW `$4'')
sc_draw(`dna_',L,
`G: tr_xy(-2,(m4s+3.5))
Ll: line from tr_xy(2,(m4s+1)) \
@@ -2391,18 +2463,20 @@ define(`mosfet',
`Rl: line thick 2*linethick from tr_xy(-2,m4s)\
-vec_(0,m4R`'linethick*3/2 pt__) \
to tr_xy(2,m4s)-vec_(0,m4R`'linethick*3/2 pt__) ')
- sc_draw(`dna_',S,
+ sc_draw(`dna_',S,`ifelse(m4K,K,
+ `Sl: arrow m4c_l ht m4_Aht*2/3 wid m4_Awd \
+ from ifelse(m4a,u,NW to W,W to NW)',
`Sl: line from tr_xy(-2,0) \
to tr_xy(-2,m4s)
ifelse(m4a,,,`arrow m4c_l ht m4_Aht wid m4_Awd ifelse(m4a,d,<-) \
from tr_xy(-2,m4s/2)-vec_(0,m4R`'m4_Aht/2) \
- to tr_xy(-2,m4s/2)+vec_(0,m4R`'m4_Aht/2) ')')
+ to tr_xy(-2,m4s/2)+vec_(0,m4R`'m4_Aht/2) ')')')
sc_draw(`dna_',T,
`Tl: line from tr_xy(-2,(m4s+1)) \
to tr_xy(2,(m4s+1))
ifelse(m4a,d,`Nt: circle rad m4_U*2/3 with .c at tr_xy(0,(m4s+1+2/3))')
Gl: line from tr_xy(0,`(m4s+1'`ifelse(m4a,d,+4/3))') \
- to tr_xy(0,ifelse(`$4',E,(m4s+4),(m4s+4))); G: Here')
+ to tr_xy(0,(m4s+4)); G: Here')
sc_draw(`dna_',X,dnl From Matteo Agostinelli
`B: tr_xy(0,0); Xv: line from B to tr_xy(0,m4s-1)
Xh: line from tr_xy(-1.5,m4s-1) \
@@ -2442,31 +2516,37 @@ 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 to the left, right, centre of
- the current direction. Labels are spaced and
- treated as math, but copied literally if double
- quoted or defined by sprintf'
+ `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
+ literally if double quoted or defined
+ by sprintf.
+ Arg4 can be above, below, left, right
+ to supplement the default position.
+ Arg5 is the optional name of a [] block
+ and is last [] by default.'
`The hash (pound sign) is used in svg text so
we temporarily turn off comments for svg'
define(`rlabel',`ifsvg(`changecom(,)')dnl
-m4label(`$1',`$2',`$3',.s_,below_,`$4')`'ifsvg(`changecom(`#',)')')
+m4label(`$1',`$2',`$3',.s_,below_,`$4',`$5')`'ifsvg(`changecom(`#',)')')
define(`llabel',`ifsvg(`changecom(,)')dnl
-m4label(`$1',`$2',`$3',.n_,above_,`$4')`'ifsvg(`changecom(`#',)')')
+m4label(`$1',`$2',`$3',.n_,above_,`$4',`$5')`'ifsvg(`changecom(`#',)')')
define(`clabel',`ifsvg(`changecom(,)')dnl
-m4label(`$1',`$2',`$3',,,`$4')`'ifsvg(`changecom(`#',)')')
+m4label(`$1',`$2',`$3',,,`$4',`$5')`'ifsvg(`changecom(`#',)')')
labels at centre and both ends of an element `dimen_' long
define(`m4label',`dnl
ifelse(`$1',,,
`{m4lstring(`$1',"sp_`'iflatex(`$ `$1'$',`$1')`'sp_") \
- at last [].w_ $5 rjust_ $6};')dnl
+ at ifelse(`$7',,last [],`$7').w_ $5 rjust_ $6};')dnl
ifelse(`$2',,,
`{m4lstring(`$2',"sp_`'iflatex(`$ `$2'$',`$2')`'sp_") \
- at last []$4 $5 $6};')dnl
+ at ifelse(`$7',,last [],`$7')$4 $5 $6};')dnl
ifelse(`$3',,,
`{m4lstring(`$3',"sp_`'iflatex(`$ `$3'$',`$3')`'sp_") \
- at last [].e_ $5 ljust_ $6};')dnl
+ at ifelse(`$7',,last [],`$7').e_ $5 ljust_ $6};')dnl
')
`dlabel(long,lateral,label,label,label,chars)
Labels for oblique or aligned elements
@@ -2625,7 +2705,6 @@ define(`series_',
popdef(`elen_')] with .Start at Here; move to last [].End
')
-
`reversed(`macro name in quotes', macro args)
reverse polarity of two-terminal element'
define(`reversed',`eleminit_(`$2')
@@ -2638,33 +2717,43 @@ define(`reversed',`eleminit_(`$2')
define(`resized',`define(`m4resiztmp',dimen_)define(`dimen_',(dimen_)*(`$1'))dnl
$2(shift(shift($@))) define(`dimen_',m4resiztmp)')
- `variable(`element', type, angle, length)
+ `variable(`element', type, [+|-]angle,
+ length, at position)
overlaid arrow or line on two-terminal element
to show variablility:
type = [A|P|L|[u]N|[u]NN][C|S]
- A=arrow, P=preset, L=linear, N=nonlinear,
- NN=symmetric nonlinear, u changes direction,
- C=continuous, S=setpwise'
+ A=arrow; P=preset; L=linear; N=nonlinear;
+ NN=symmetric nonlinear, u changes direction;
+ C=continuous; S=setpwise.
+ If arg3 begins with + or -, then the argument
+ (typically -45) is relative to the current
+ drawing angle. If arg5 is blank the symbol
+ is placed over the last []'
define(`variable',`$1
- {[ define(`dna_',`ifelse($2,,A,$2)') ang = ifelse(`$3',,45,`$3')
- M4_T: Here+(Rect_(ifelse(`$4',,`dimen_*0.8',`$4'),ang))
- sc_draw(`dna_',P,`Line: line to M4_T
- [line to (Rect_(dimen_/6,ang-90))] at Line.end')
- sc_draw(`dna_',L,`Line: line to M4_T')
- sc_draw(`dna_',NN,`Line: ifelse(m4a,u,
- `line from Here-(dimen_/6,0) to Here \
- then to M4_T then to M4_T+(dimen_/6,0)',
- `line from Here-(0,dimen_/6) to Here \
- then to M4_T then to M4_T+(0,dimen_/6)') ')
- sc_draw(`dna_',N,`Line: line to M4_T
- ifelse(m4a,u,`line up dimen_/6 from Line.end',
- `line left dimen_/6 from Line.start')')
- sc_draw(`dna_',A,`Line: arrow to M4_T')
- sc_draw(`dna_',C,`move to Line.end+(dimen_*0.10,-dimen_*0.06)
- line to Here+(Rect_(dimen_/6,ang))')
- sc_draw(`dna_',S,`move to Line.end+(dimen_*0.10,-dimen_*0.12)
+ {[ define(`dna_',ifelse($2,,A,$2))define(`m4sgn',regexp(`$3',^ *[+-]))dnl
+ ang = ifelse(m4sgn,-1,,rp_ang*rtod_) ifelse(`$3',,45,`$3')
+ define(`m4a2',`ifelse(m4sgn,0,rp_ang-pi_/2,0)') dnl
+ define(`m4a3',`ifelse(m4sgn,0,rp_ang,pi_/2)') dnl
+ define(`m4tip',`dimen_/8')dnl
+ T: (Rect_(ifelse(`$4',,`dimen_*0.8',`$4'),ang))
+ sc_draw(`dna_',P,`Line: line to T; C: Line.c
+ [line to (Rect_(m4tip,ang-90))] at Line.end')
+ sc_draw(`dna_',L,`Line: line to T; C: Line.c')
+ sc_draw(`dna_',NN,`C: 1/2 between Here and T
+ ifelse(m4a,u,`Line: line from Here+(rect_(-m4tip,m4a3)) to Here \
+ then to T then to T+(rect_( m4tip,m4a3))',
+ `Line: line from Here+(rect_(-m4tip,m4a2)) to Here \
+ then to T then to T+(rect_( m4tip,m4a2))')')
+ sc_draw(`dna_',N,`C: 1/2 between Here and T
+ ifelse(m4a,u,`Line: line to T then to T+(rect_(m4tip,m4a3))',
+ `Line: line from T to Here \
+ then to Here+(rect_(-m4tip,m4a2))')')
+ sc_draw(`dna_',A,`Line: arrow to T; C: Line.c')
+ sc_draw(`dna_',C,`move to T+(dimen_*0.10,-dimen_*0.06)
+ line to Here+(Rect_(m4tip,ang))')
+ sc_draw(`dna_',S,`move to T+(dimen_*0.10,-dimen_*0.12)
line up dimen_*0.06 then right dimen_*0.12 then up dimen_*0.06')
- `$5'] with .Line.c at last [].c } ')
+ `$6'] with .C ifelse(`$5',,at last [].c,`$5') } ')
`Line hopping over named lines,
diverting left or right:
@@ -2852,8 +2941,9 @@ define(`contact',`[ dnl
')
`$3'] ')
+
`relaycoil( chars, wid, ht, U|D|L|R|degrees )
- chars:
+ chars: (see IEC 60617 S00305 - S00319)
X or default: external lines from A2 and B2
AX external lines at positions A1,A3
BX external lines at positions B1,B3
@@ -2862,10 +2952,11 @@ define(`contact',`[ dnl
SOR slow operating and release
SR slow release
HS high speed
- HS high speed
NAC unaffected by AC current
AC AC current
ML mechanically latched
+ MR mechanically resonant
+ PC pulse counter
PO polarized
RM remanent
RH remanent
@@ -2902,11 +2993,11 @@ define(`relaycoil',`[ ifelse(`$4',,,`setdir_(`$4')')
{line to rvec_(0,-m4ht/8)}
{line from rvec_(m4wd,0) to rvec_(m4wd,-m4ht/8)}} }')
sc_draw(`rcdna_',SO,
- `{ move to rvec_(0,-(m4ht*5/8)); m4fshade(0,lbox(m4wd,m4ht/4)) }')
- sc_draw(`rcdna_',SR,
`{ move to rvec_(0,-(m4ht*5/8)); {lbox(m4wd,m4ht/4)}
{line from rvec_(0,-m4ht/8) to rvec_(m4wd, m4ht/8)}
{line from rvec_(0, m4ht/8) to rvec_(m4wd,-m4ht/8)} }')
+ sc_draw(`rcdna_',SR,
+ `{ move to rvec_(0,-(m4ht*5/8)); m4fshade(0,lbox(m4wd,m4ht/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)} ')
@@ -2927,6 +3018,22 @@ define(`relaycoil',`[ ifelse(`$4',,,`setdir_(`$4')')
`{ move to rvec_(0,-(m4ht*11/16)); { lbox(m4wd,m4ht*3/8) }
line from rvec_(0,m4ht*3/16) to rvec_(m4wd/2,-m4ht*3/16) \
then to rvec_(m4wd,m4ht*3/16) } ')
+ sc_draw(`rcdna_',MR,
+ `{ move to rvec_(m4wd/2,m4ht/2)
+ { m4tmp = rp_ang; dashline(to rvec_(0,m4ht*3/4),,m4ht*3/16,m4ht*3/32)
+ point_(m4tmp)}
+ move to rvec_(0,m4ht*3/8)
+ ifgpic(
+ `arc rad m4wd/2 cw from rvec_(-m4wd/2,0) \
+ to Here with .c at rvec_(-m4wd/4,-m4wd/4)
+ arc rad m4wd/2 ccw from Here to rvec_(m4wd/2,0) with .c \
+ at rvec_(m4wd/4,m4wd/4)',
+ `sinusoid(m4wd/6,twopi_/(m4wd),pi_/2,-m4wd/2,m4wd/2) \
+ with .Origin at Here ') } ')
+ sc_draw(`rcdna_',PC,
+ `{ move to rvec_(0,m4ht/2+m4wd/2)
+ { lbox(m4wd,m4wd) }
+ circle diam m4wd/2 at rvec_(m4wd/2,0) } ')
sc_draw(`rcdna_',PO,
`{ move to rvec_(0,-(m4ht*5/8)); { lbox(m4wd,m4ht/4) }
m4fshade(0, line to rvec_(0,m4ht/8) \
@@ -3282,16 +3389,42 @@ define(`ACsymbol',`[ Origin: Here
with .Origin at Origin } ')
`$5'; resetdir_ ] with .Origin ifelse(`$1',,`at Here',`$1')')
+ `Deltasymbol(at position, keys, U|D|L|R|degrees)
+ keys: size=expr;
+ Arg4: drawing direction (default: Up)'
+define(`Deltasymbol',`[ sq3 = sqrt(3)
+ setkey_(`$2',size,dimen_/10)dnl
+ setdir_(`$3',U)
+ line from vec_(vscal_(m4size,-sq3,0)) to \
+ vec_(vscal_(m4size,-sq3,1)) then to Here \
+ then to vec_(vscal_(m4size,-sq3,-1)) \
+ then to vec_(vscal_(m4size,-sq3,0))
+ `$4'; resetdir_ ] ifelse(`$1',,`at Here',`$1')')
+
+ `Ysymbol(at position, keys, U|D|L|R|degrees)
+ keys: size=expr; type=G (grounded);
+ Arg4: drawing direction (default: Up)'
+define(`Ysymbol',`[ sq3 = sqrt(3)
+ setkeys_(`$2',`size:dimen_/10:; type::N')dnl
+ setdir_(`$3',U)
+ C: Here
+ line from vec_(vscal_(m4size,-2/sq3,0)) to C
+ { line from vec_(vscal_(m4size,1/sq3,1)) to C \
+ then to vec_(vscal_(m4size,1/sq3,-1)) }
+ ifelse(m4type,,,`line right_ m4size*3/2; corner
+ pushdef(`dimen_',m4size*4) ground popdef(`dimen_') ')
+ `$4'; resetdir_ ] ifelse(`$1',,`at Here',`$1')')
+
`DCsymbol(at position, len, ht, U|D|L|R|degrees)
Arg4: drawing direction (default: current direction)'
define(`DCsymbol',`[
define(`m4wid',`ifelse(`$2',,(dimen_/3),`($2)')')dnl
- define(`m4ht',`ifelse(`$3',,`m4wid/5',`($3)')')
+ define(`m4ht',`ifelse(`$3',,`(m4wid/5)',`($3)')')
setdir_(ifelse(`$4',,`ifdef(`m4a_',rp_ang*rtod_,0)',`$4'))
- Origin: rvec_(m4wid/2,-m4ht/2)
+ Origin: rvec_(m4wid/2, m4ht/2)
{line to rvec_(m4wid,0)}
- dashline(from rvec_(0,-m4ht) to rvec_(m4wid,-m4ht),,m4wid/4)
- `$5'; resetdir_ ] with .c ifelse(`$1',,`at Here',`$1')')
+ dashline(from rvec_(0, m4ht) to rvec_(m4wid, m4ht),,m4wid/4,m4wid/8)
+ `$5'; resetdir_ ] with .Origin ifelse(`$1',,`at Here',`$1')')
`n-terminal box
nterm(box specs; other commands,
@@ -3389,7 +3522,7 @@ 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 }; ]',
`[setdir_($1,R)
define(`m4h',`ifelse(`$2',,`dimen_/2',`($2)')')dnl
{L1: line from rvec_(m4h,-m4h/2) \
diff --git a/graphics/circuit_macros/libgen.m4 b/graphics/circuit_macros/libgen.m4
index c20416a726..ee5b954f4e 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 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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 *
@@ -126,31 +126,31 @@ ifdef(`darrow_init',,
`define(`darrow_init',
`m4announceprocessor(`$0')
ifdef(`darrow_',,`include(darrow.m4)')
-`# darrow_init begin'
gen_init
`$1'
-`# darrow_init end'')')
+`# darrow_init end'
+')')
liblog.m4
ifdef(`log_init',,
`define(`log_init',
`m4announceprocessor(`$0')
ifdef(`liblog_',,`include(liblog.m4)')
-`# log_init begin'
gen_init
`$1'
-`# log_init end'')')
+`# log_init end'
+')')
lib3D.m4
ifdef(`threeD_init',,
`define(`threeD_init',
`m4announceprocessor(`$0')
ifdef(`lib3D_',,`include(lib3D.m4)')
-`# threeD_init begin'
gen_init
setview(20,20,0)
`$1'
-`# threeD_init end'')')
+`# threeD_init end'
+')')
sfg graphs in libcct.m4
define(`sfg_init',`cct_init
@@ -185,7 +185,7 @@ define(`SIdefaults',
define(`latexcommand',`command "ifmpost(verbatimtex) `$1' ifmpost(etex)"')
define(`m4announceprocessor',`dnl Do not change the format of the next line:
-`#' `$1' Version 9.5: ifelse(m4picprocessor,gpic,`Gpic',
+`#' `$1' Version 9.6: ifelse(m4picprocessor,gpic,`Gpic',
m4postprocessor,pstricks,`PSTricks',
m4postprocessor,pgf,`TikZ PGF',
m4postprocessor,mfpic,`Mfpic',
@@ -260,14 +260,15 @@ define(`m4c_',(-sin(rp_ang)))define(`m4d_',cos(rp_ang))')')
`setdir_( U|D|L|R|degrees,default R|L|U|D|degrees )
set direction and default direction'
define(`setdir_',
- `pushdef(`m4sdir',`ifelse(`$1',,`ifelse(`$2',,R,`$2')',`$1')')dnl
+ `pushdef(`m4sdir',`ifelse(`$1',,
+ `ifelse(`$2',,`ifdef(`m4rp_ang',m4rp_ang*rtod_,R)',`$2')',`$1')')dnl
m4sd_ang = rp_ang; pushdef(`m4tdir',m4dir)dnl
ifinstr(
m4sdir,R,`rp_ang = 0; right_',
m4sdir,L,`rp_ang = pi_; left_',
m4sdir,U,`rp_ang = pi_/2; up_',
m4sdir,D,`rp_ang = -pi_/2; down_',
-`rp_ang = prod_(`$1',dtor_)undefine(`m4rp_ang')dnl
+`rp_ang = prod_(m4sdir,dtor_)undefine(`m4rp_ang')dnl
define(`m4a_',cos(rp_ang))define(`m4b_',sin(rp_ang))dnl
define(`m4c_',(-sin(rp_ang)))define(`m4d_',cos(rp_ang))');dnl
popdef(`m4sdir')')
@@ -385,6 +386,17 @@ define(`Loopover_',`ifelse(`$3',,,
`pushdef(`$1',`$3')pushdef(`m4Lx',ifdef(`m4Lx',`incr(m4Lx)',1)) $2
Loopover_(`$1',`$2',shift(shift(shift($@))))popdef(`m4Lx')popdef(`$1')')')
+ `This is identical to Loopover_ and may be
+ a preferred name'
+ `foreach_(`variable',actions,value1,value2,...)
+ Repeat actions with variable set to each of
+ value1, value2, ... in succession, setting
+ macro m4Lx to 1, 2, ...; e.g.
+ foreach_(`x',`print "m4Lx. x"',Tom,Dick,Mary)'
+define(`foreach_',`ifelse(`$3',,,
+`pushdef(`$1',`$3')pushdef(`m4Lx',ifdef(`m4Lx',`incr(m4Lx)',1)) $2
+foreach_(`$1',`$2',shift(shift(shift($@))))popdef(`m4Lx')popdef(`$1')')')
+
`Transfer m4 stack to new stack performing arg3
stackexec_(`Source',`Dest',`actions')'
define(`stackexec_',`ifdef(`$1',`$3`'dnl
@@ -458,28 +470,31 @@ define(`intersect_',`((($3.x-$1.x)*($3.y-$4.y)-($3.y-$1.y)*($3.x-$4.x))/\
between `$1' and `$2')')
`Dashed line drawn in detail
- dashline(linespec,
+ dashline(
+ linespec,
thickness|<-|->|<->|color,
- dash len, gap len,G)
+ dash len,
+ gap len,G)
Arg5=G ends (but does not start)
- the line with a gap'
+ the line with a gap
+ Note: can change default direction'
define(`dashline',`rpoint_(`$1')define(`m4opts',`$2')
define(`m4dsh',`ifelse(`$3',,dashwid,abs(`$3'))')dnl
- define(`m4ssv',`ifelse(`$4',,m4dsh/2,abs(`$4'))')dnl
+ define(`m4gap',`ifelse(`$4',,m4dsh/2,abs(`$4'))')dnl
define(`m4lar',)define(`m4rar',)dnl
- ifelse(m4xtract(`m4opts',<->),1,`define(`m4lar',<-)define(`m4rar',->)',
- m4xtract(`m4opts',<-),1,`define(`m4lar',<-)',
- m4xtract(`m4opts',->),1,`define(`m4rar',->)')dnl
- if (m4dsh+m4ssv)==0 then { dashline_n = 1 } \
+ ifelse(m4xtract(`m4opts',<->),1,`define(`m4lar',<-)define(`m4rar',->)',dnl
+ m4xtract(`m4opts',<-),1,`define(`m4lar',<-)',dnl
+ m4xtract(`m4opts',->),1,`define(`m4rar',->)')
+ if (m4dsh+m4gap)==0 then { dashline_n = 1 } \
else {dashline_n = max(1,\
- round_(abs((rp_len ifelse(`$5',G,,+m4ssv))/(m4dsh+m4ssv))))}
- dashline_f = (rp_len-(dashline_n ifelse(`$5',G,,-1))*m4ssv)/dashline_n
+ int(abs((rp_len ifelse(`$5',G,,+m4gap))/(m4dsh+m4gap))))}
+ dashline_f = (rp_len-(dashline_n ifelse(`$5',G,,-1))*m4gap)/dashline_n
for m4ti=1 to dashline_n do {
if m4ti==1 then { line m4opts m4lar to rvec_(dashline_f,0) } \
else { if m4ti==dashline_n then { line m4opts m4rar to rvec_(dashline_f,0)}\
else { line m4opts to rvec_(dashline_f,0) }}
ifelse(`$5',G,,
- `if m4ti < dashline_n then {')move to rvec_(m4ssv,0)ifelse(`$5',G,,})
+ `if m4ti < dashline_n then {')move to rvec_(m4gap,0)ifelse(`$5',G,,})
} ')
`round(at location,line thickness,attributes)
@@ -618,11 +633,18 @@ define(`Vdiff_',`ifdpic(`$1'-(`$2'),
``$1'-(`$2'.x,`$2'.y)')')
`Product of vector and scalar: (V)*(s) with dpic,
(V.x*s,V.y*s) with gpic'
-define(`Vsprod_',`ifdpic((`$1')*(`$2'),
+define(`Vsprod_',`ifdpic(`ifelse(`$2',0,0,`$2',1,(`$1'),(`$1')*(`$2'))',
`(prod_(`$1'.x,`$2'),prod_(`$1'.y,`$2'))')')
`The x,y coordinate pair of a position'
define(`Vcoords_',`(`$1').x,(`$1').y')
-
+ `assign3([u],[v],[w],x,y,z); eg
+ assign3(u,v,w,cross3D(x1,y1,z1,x2,y2,z2))
+ assigns u = 4th arg, v = 5th arg, w = 6th arg,
+ for nonblank u, v, or w'
+define(`assign3',
+`ifelse(`$1',,,`$1' = `$4')
+ ifelse(`$2',,,`$2' = `$5')
+ ifelse(`$3',,,`$3' = `$6')')
`binary_(n,[m])
binary representation of n, padded to m bits
if arg2 is nonblank'
@@ -731,6 +753,36 @@ define(`boxdim',`ifelse(`$2',v,`sum_(boxdim(`$1',h,`$3'),boxdim(`$1',d,0))',
with m4x the final count'
define(`m4inx',`define(`m4x',ifdef(`m4x',`incr(m4x)',1))m4x')
+ `Drawing conveniences:'
+
+ `PtoL( position, U|D|L|R|deg, lgth )
+ Generate a linespec from polar
+ info. Evaluates to `from position to
+ position+(Rect_(lgth,angle))' with lgth
+ default dimen_ and angle from arg2'
+define(`PtoL',`pushdef(`M4pos',ifelse(`$1',,Here,`$1'))dnl
+ ifinstr(ifelse(`$2',,R,`$2'),R,`pushdef(`m4c',1)pushdef(`m4s',0)',
+ `$2',U,`pushdef(`m4c',0)pushdef(`m4s',1)',
+ `$2',L,`pushdef(`m4c',-1)pushdef(`m4s',0)',
+ `$2',D,`pushdef(`m4c',0)pushdef(`m4s',-1)',
+ `pushdef(`m4c',`cosd(`$2')')pushdef(`m4s',`sind(`$2')')')dnl
+from M4pos to M4pos + (vscal_(ifelse(`$3',,dimen_,`$3'),m4c,m4s))dnl
+popdef(`m4s',`m4c',`M4pos')')
+
+ `ToPos( position, U|D|L|R|deg, lgth )
+ Generate a linespec from polar
+ info. Evaluates to `from
+ position-(Rect_(lgth,angle)) to position'
+ with lgth default dimen_ and angle from arg2'
+define(`ToPos',`pushdef(`M4pos',ifelse(`$1',,Here,`$1'))dnl
+ ifinstr(ifelse(`$2',,R,`$2'),R,`pushdef(`m4c',1)pushdef(`m4s',0)',
+ `$2',U,`pushdef(`m4c',0)pushdef(`m4s',1)',
+ `$2',L,`pushdef(`m4c',-1)pushdef(`m4s',0)',
+ `$2',D,`pushdef(`m4c',0)pushdef(`m4s',-1)',
+ `pushdef(`m4c',`cosd(`$2')')pushdef(`m4s',`sind(`$2')')')dnl
+from M4pos - (vscal_(ifelse(`$3',,dimen_,`$3'),m4c,m4s)) to M4pos dnl
+popdef(`m4s',`m4c',`M4pos')')
+
`String conveniences start here:'
`xtract(string,substr1,substr2,...)
extract substrings without deletion'
@@ -769,7 +821,17 @@ define(`setkey_',
`pushdef(key_prefix`'$2,ifelse(`$4',,(substr(m4sktmp,0,index(m4sktmp,;))),
substr(m4sktmp,0,index(m4sktmp,;))))')')dnl
popdef(`m4xt')')
-define(`key_prefix',`m4')
+
+define(`key_prefix',`m4') # Could be locally redefined
+
+ `setkeys_(string,keysequence)
+ Invoke setkey_ on each of a sequence of terms.
+ keysequence is a ; -separated sequence
+ of terms of the form
+ identifier:default value:N
+ containing 3 fields separated by : '
+define(`setkeys_',`Loopover_(`M4Z',`setkey_(`$1',patsubst(M4Z,:,`,')) dnl',
+ patsubst(`$2',;,`,'))')
`String with exact typeset dimensions:
Requires s_init(name), sinclude(filename.dim),
@@ -903,7 +965,7 @@ define(`hatchbox',`[ a = pmod((ifelse(`$4',,45,`$4')+90),180)-90
`lbox(wid,ht,type)
box oriented in current direction;
- type= eg dotted'
+ arg3= eg dotted'
define(`lbox',`pushdef(`m4bwd',ifelse(`$1',,boxwid,(`$1')))dnl
pushdef(`m4bht',ifelse(`$2',,boxht,(`$2')))dnl
line from rvec_(m4bwd,0) \
@@ -911,7 +973,8 @@ define(`lbox',`pushdef(`m4bwd',ifelse(`$1',,boxwid,(`$1')))dnl
then to rvec_(0,m4bht/2) \
then to rvec_(0,neg_(m4bht)/2) \
then to rvec_(m4bwd,neg_(m4bht)/2) \
- then to rvec_(m4bwd,0) `$3' popdef(`m4bwd')popdef(`m4bht') ')
+ then to rvec_(m4bwd,0) `$3' dnl
+ popdef(`m4bwd')popdef(`m4bht') ')
`rotbox(wid,ht,type,[r=val|t=val])
box oriented in current direction in [] block;
@@ -927,6 +990,7 @@ define(`lbox',`pushdef(`m4bwd',ifelse(`$1',,boxwid,(`$1')))dnl
define(`rotbox',`[
pushdef(`m4bw2',ifelse(`$1',,(boxwid/2),`(($1)/2)'))dnl
pushdef(`m4bh2',ifelse(`$2',,(boxht/2) ,`(($2)/2)'))dnl
+ C: Here
N: vec_(0, m4bh2)
S: vec_(0,-m4bh2)
E: vec_( m4bw2,0)
@@ -958,7 +1022,7 @@ define(`rotbox',`[
SE: vec_( m4bw2,-m4bh2)
NW: vec_(-m4bw2,m4bh2)
SW: vec_(-m4bw2,-m4bh2)
- line from E to NE then to NW then to SW then to SE then to E `$3' ')
+ Line: line from E to NE then to NW then to SW then to SE then to E `$3' ') dnl
popdef(`m4bw2')popdef(`m4bh2') `$5' ]')
`rotellipse(wid,ht,type)
@@ -1163,7 +1227,7 @@ define(`m4shadedpverts',`
ifelse($3,,,`$1[$2]: patsubst(`$3',|,`,') define(`m4vx',$2)
m4shadedpverts(`$1',incr(`$2'),shift(shift(shift($@))))')')
-define(`color255',`round_((`$1')*255),round_((`$2')*255),round_((`$3')*255)')
+define(`color255',`int((`$1')*255+0.5),int((`$2')*255+0.5),int((`$3')*255+0.5)')
`like shade(,) but without the argument:
beginshade(gray value)
@@ -1171,7 +1235,7 @@ define(`color255',`round_((`$1')*255),round_((`$2')*255),round_((`$3')*255)')
endshade'
define(`beginshade',`define(`m4_shade',`ifelse(`$1',,`fillval',`($1)')')dnl
ifelse(m4picprocessor,gpic,
- `command sprintf("\special{sh %g}",1-m4_shade)',
+ `command sprintf("`\special{sh %g}'",1-m4_shade)',
m4postprocessor,mfpic,
`ifelse(`$1',0,
`command "\gfill\draw\lclosed"',
@@ -1180,32 +1244,32 @@ define(`beginshade',`define(`m4_shade',`ifelse(`$1',,`fillval',`($1)')')dnl
m4postprocessor,mpost,
`command "def Y="',
m4postprocessor,svg,
- `command sprintf("<g fill=\"rgb(%g,%g,%g)\">",\
+ `command sprintf(`"<g fill=\"rgb(%g,%g,%g)\">"',\
color255(m4_shade,m4_shade,m4_shade) )',
m4postprocessor,pgf,
`command "\global\let\dpicshdraw=\dpicdraw\global\def\dpicdraw{}"
command "\global\def\dpicstop{--}"
- command sprintf("\dpicshdraw[fill=white!%g!black]",m4_shade*100)',
+ command sprintf(`"\dpicshdraw[fill=white!%g!black]"',m4_shade*100)',
m4postprocessor,pstricks,
- `command sprintf("\newgray{m4fillv}{%g}",m4_shade)
- command sprintf("\pscustom[fillstyle=solid,fillcolor=m4fillv]{%%")',
+ `command sprintf(`"\newgray{m4fillv}{%g}"',m4_shade)
+ command sprintf(`"\pscustom[fillstyle=solid,fillcolor=m4fillv]{%%"')',
m4postprocessor,postscript,
- `command "/endstroke {}def /npath {}def newpath"')dnl
+ `command `"/endstroke {}def /npath {}def newpath"'')dnl
')')
define(`endshade',
`ifelse(m4postprocessor,pstricks,
`command "}%"',
m4postprocessor,postscript,
- `command sprintf(" gsave %g setgray fill grestore",m4_shade)
- command "/endstroke {ostroke} def /npath {newpath} def endstroke"',
+ `command sprintf(`" gsave %g setgray fill grestore"',m4_shade)
+ command `"/endstroke {ostroke} def /npath {newpath} def endstroke"'',
m4postprocessor,pgf,
`command "cycle; \global\let\dpicdraw=\dpicshdraw\global\def\dpicstop{;}"',
m4postprocessor,svg,
`command "</g>"',
m4postprocessor,mpost,
`command "enddef; def drw= enddef; def X=--enddef;"
- command sprintf("fill Y cycle withcolor %gwhite;",m4_shade)
+ command sprintf(`"fill Y cycle withcolor %gwhite;"',m4_shade)
command "def drw=draw enddef; def X=;enddef; Y;"dnl
')')
`gshade(gray value,A,B,...,Z,A,B) (Note last
@@ -1222,9 +1286,20 @@ define(`gpolyline',`1-(`$1') between `$2' and `$3' \
`m4fshade(gray value,closed curve) internal'
ifelse(m4picprocessor,gpic,
- `define(`m4fshade',`shade(ifelse(`$1',,0,`$1'),`$2')')',
+ `define`m4fshade',`shade(ifelse(`$1',,0,`$1'),`$2')')',
+m4postprocessor,xfig,
+ `define(`m4fshade',``$2' fill ifelse(`$1',,0,`$1')')',
+ `define(`m4fshade',``$2' dnl
+ ifdef(`r_',`shaded rgbstring(r_,g_,b_)',`fill ifelse(`$1',,0,`$1')')')')
+
+ifelse(0,1,`
+ifelse(m4picprocessor,gpic,
+ `define`m4fshade',`shade(ifelse(`$1',,0,`$1'),`$2')')',
m4postprocessor,xfig,
`define(`m4fshade',``$2' fill ifelse(`$1',,0,`$1')')',
+m4postprocessor,pdf,
+ `define(`m4fshade',``$2' dnl
+ ifdef(`r_',`shaded(r_,g_,b_)',`fill ifelse(`$1',,0,`$1')')')',
m4postprocessor,svg,
`define(`m4fshade',
`ifdef(`r_',`rgbfill(color255(r_,g_,b_),`$2')',
@@ -1232,15 +1307,17 @@ m4postprocessor,svg,
`define(`m4fshade',
`ifdef(`r_',`rgbfill(r_,g_,b_,`$2')',
`shade(ifelse(`$1',,0,`$1'),`$2')')')')
+')
- `open_arrow(linespec, ht, wid)
+ `open_arrow(linespec, ht, wid, head attribs)
arrow with outlined head'
define(`open_arrow',`arrow invis `$1'
- m4oatx = Here.x - last arrow.start.x; m4oaty = Here.y - last arrow.start.y
- m4oatr = (ifelse(`$3',,arrowwid,`$3'))/vlength(m4oatx,m4oaty)/2
- line from last arrow.start to Here chop 0 chop ifelse(`$2',,arrowht,`$2')
- line from last arrow.end to Here+(-m4oaty*m4oatr,m4oatx*m4oatr) \
- then to Here-(-m4oaty*m4oatr,m4oatx*m4oatr) then to last arrow.end ')
+ m4oatx = Here.x - last arrow.start.x; m4oaty = Here.y - last arrow.start.y
+ m4oatr = (ifelse(`$3',,arrowwid,`$3'))/vlength(m4oatx,m4oaty)/2
+ line from last arrow.start to Here chop 0 chop ifelse(`$2',,arrowht,`$2')
+ line from last arrow.end to Here+(-m4oaty*m4oatr,m4oatx*m4oatr) \
+ then to Here-(-m4oaty*m4oatr,m4oatx*m4oatr) \
+ then to last arrow.end `$4'')
`elchop(E,A) chop for ellipses
evaluates to "chop r" where r is the distance
@@ -1390,12 +1467,17 @@ define(`M4LET',`LCtangent((M4LP.x/m4LEta,M4LP.y/m4LEtb),`(0,0)',1,`$5')')dnl
define(`langle',
`atan2(M4Pos(`$2').y-M4Pos(`$1').y,M4Pos(`$2').x-M4Pos(`$1').x)')
- `ArcAngle(Pos1,Pos2,Pos3,radius,attributes)
+ `ArcAngle(Pos1,Pos2,Pos3,
+  radius,attributes,label)
arc angle symbol drawn ccw at Pos2
arg4: radius from Pos2
- arg5: line attributes, e.g. thick linethick/2'
+ arg5: line attributes, e.g. thick 0.4 ->
+ arg6: label (or other object) at mid-arc
+ e.g., ArcAngle(A,B,C,,,"$ABC$" ljust ) '
define(`ArcAngle',`arcr(`$2',ifelse(`$4',,arcrad,`$4'),
- langle(`$2',`$1'),langle(`$2',`$3'),`$5') ')
+ langle(`$2',`$1'),langle(`$2',`$3'),`$5')
+ ifelse(`$6',,,`move to `$2'+ (rect_(ifelse(`$4',,arcrad,`$4')+textoffset,
+ (langle(`$2',`$1')+langle(`$2',`$3'))/2)); `$6'') ')
`RightAngle(Pos1,Pos2,Pos3,linelen,attributes)
Draw a right angle symbol at Pos2
@@ -1505,9 +1587,10 @@ define(`m4scale_',`define(`m4SC',`ifelse(`$2',,I,`substr(`$2',0,1)')')dnl
same arguments'
ifdpic(`
define(`fitpoints',`defdfitpoints
-dfitpoints($@)')
+ dfitpoints($@)')
define(`defdfitpoints',`ifdef(`dfitpoints__',,`define(`dfitpoints__')dnl
-patsubst(`define dfitpoints {
+patsubst(`## pic fit curve macros
+define dfitpoints {
if "|3"=="" then { m_dfit=0 } else { m_dfit=|3 }
if "|5"=="" then { mP_dfit=0 } else { mP_dfit=|5 }
n_dfit = |2; np_dfit = n_dfit-m_dfit
@@ -1555,7 +1638,8 @@ define dfitcurve { if "|4"=="" then { m_dfit=0 } else { m_dfit=|4 }
for i_dfit=2 to np_dfit-2 do { continue to M4P_[i_dfit] }
continue to 27/32 between M4P_[np_dfit-2] and M4P_[np_dfit-1] \
then to 21/32 between M4P_[np_dfit-1] and M4P_[np_dfit] \
- then to M4P_[np_dfit]) }',|,$) ')
+ then to M4P_[np_dfit]) }
+` ## end fit curve defs'',|,$) ')
dfitcurve($@) ')
')
diff --git a/graphics/circuit_macros/liblog.m4 b/graphics/circuit_macros/liblog.m4
index a7ae395a75..95a6bf0ea1 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 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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 *
@@ -57,7 +57,8 @@ define(`lg_chipwd',`(18*L_unit)') `default chip width'
define(`lg_pintxt',
`"ifxfig(`$1',`ifsvg(`svg_small(`$1',75)',`sp_{\scriptsize `$1'}sp_')')"')
`Logic pin text with bar where possible'
-define(`lg_bartxt',`iflatex(`$\overline{\hbox{`$1'}}$',`$1')')
+define(`lg_bartxt',`iflatex(`$\overline{\hbox{`$1'}}$',
+ `ifsvg(`svg_ol(`$1')',`$1')')')
`The comma has to be at the top level'
define(`m4_pattocomma',`patsubst(`$1',`$2',`,')')
@@ -1043,4 +1044,5 @@ define(`m4_ffside',
define(`m4drawpin',`lg_pin(`$1',`$4',ifelse(`$5',,`$2',`$5'),`$3')')
###########################################################################
+
divert(0)dnl
diff --git a/graphics/circuit_macros/mfpic.m4 b/graphics/circuit_macros/mfpic.m4
index 0ef7c4bf8d..2bdd9e4c8e 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 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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 0536b66cb3..94b80828e6 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 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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 9715290491..04fc615f96 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 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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 2860a2aa2a..7946ec30da 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 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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 6572761f35..3e3df16545 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 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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 48cc91af3a..28acb8fe6c 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 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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 113174d0be..e686074a6b 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 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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 *
@@ -26,6 +26,7 @@ dnl Put define(`Inkscape') in the source for Inkscape input
ifelse(ifdef(`Inkscape',T)`'ifdef(`nosvgformat',T),T,
`define(`svg_it',`$1')
define(`svg_tt',`$1')
+define(`svg_sf',`$1')
define(`svg_norm',`$1')
define(`svg_bf',`$1')
define(`svg_small',`$1')
@@ -99,15 +100,22 @@ dptextratio)')
define(`svg_symbol',`changecom(,)`$1'changecom(`#',)')
define(`svg_it',`<tspan font-style=\"italic\">`$1'</tspan>')
define(`svg_tt',`<tspan font-family=\"Courier\">`$1'</tspan>')
+define(`svg_sf',`<tspan font-family=\"Helvetica\">`$1'</tspan>')
define(`svg_norm',`<tspan font-style=\"normal\">`$1'</tspan>')
define(`svg_bf',`<tspan font-style=\"bold\">`$1'</tspan>')
-dnl To get %% in a sprintf string, set the size explicitly,
+dnl T0 GET %% in a sprintf string, set the size explicitly,
dnl eg sprintf("x`'svg_sub(%g,50%)",i)
define(`svg_small',`svg_fsize(`$1',ifelse(`$2',,66,`$2'))')
define(`svg_fsize',`<tspan font-size=\"ifelse(`$2',,100,`$2')%\">`$1'</tspan>')
+dnl svg_ul(text) Underline text
+define(`svg_ul',`<tspan text-decoration=\"overline\">`$1'</tspan>')
+dnl svg_ol(text) Overline text
+define(`svg_ol',`<tspan text-decoration=\"overline\">`$1'</tspan>')
+
+dnl svg_sup
dnl This is black magic but seems necessary to work with Firefox
dnl Arg 2: size of subscript font in percent
dnl Arg 3: vertical shift, e.g. svg_sub(1,,0.5ex)
@@ -126,6 +134,29 @@ define(`svg_sub',`<tspan font-size=\"ifelse(`$2',,70,`$2')%\"
font-size=\"ifelse(`$2',,70,`$2')%\" dy=\"-ifelse(`$3',,0.66ex,`$3')\"
dx=\"-0.5ex\"> </tspan>')dnl note the space
+
+
+ `svg_frac(numerator[:wid],denominator[:wid])
+ Basic fraction for simple arguments
+ wid is in drawing units'
+define(`svg_frac',`define(`m4ex',`(textht*0.675)')dnl sans-serif: 0.8525
+define(`m4num',`patsubst(`$1',:.*)')dnl
+define(`m4den',`patsubst(`$2',:.*)')dnl
+define(`m4numx',`ifinstr(`$1',:,((patsubst(`$1',.*:))/m4ex),len(`$1'))')dnl
+define(`m4denx',`ifinstr(`$2',:,((patsubst(`$2',.*:))/m4ex),len(`$2'))')dnl
+define(`m4mx',`max(m4numx,m4denx)')dnl
+ "<tspan dx="+sprintf("\"%gex\"", m4mx/2)+"> </tspan><tspan dy=\"-1.2ex\"
+ dx="+sprintf("\"%gex\"", (m4mx-m4numx)/2)+">m4num</tspan><tspan
+ dy=\" 2.6ex\"
+ dx="+sprintf("\"%gex\"", -m4numx/2-m4denx/2)+">m4den</tspan><tspan
+ dy=\"-1.4ex\" dx="+sprintf("\"%gex\"", m4mx/2-m4denx/2)+"> </tspan>"
+ line right m4mx*m4ex from Here+((m4mx/2-0.8)*m4ex,-0.2*m4ex)
+ move to Here+(0,0.2*m4ex)
+ {box invis wid last line.len ht 2.8*textht with .w at last line.start}
+')
+
+define(`svg_hat',`<tspan>svg_circ</tspan><tspan dx=\"-0.9ex\">`$1'</tspan>')
+
define(`svg_alpha',`svg_symbol(&`#'945;)')
define(`svg_beta',`svg_symbol(&`#'946;)')
define(`svg_chi',`svg_symbol(&`#'967;)')
@@ -174,14 +205,15 @@ define(`svg_backsl',`svg_symbol(&`#'92;)')
define(`svg_pound',`svg_symbol(&`#'35;)')
define(`svg_circ',`svg_symbol(&`#'710;)')
define(`svg_deg',`svg_symbol(&`#'176;)')
+define(`svg_equiv',`svg_symbol(&`#'8801;)')
')
define(`svgcolor',`sprintf("rgb(%g,%g,%g)",\
-round_(`$1'),round_(`$2'),round_(`$3'))')
+int(`$1'+0.5),int(`$2'+0.5),int(`$3'+0.5))')
# Obsolete but kept for compatibility. Use `rgbstring(r,g,b)'
define(`svgcolor255',
- `svgcolor(round_((`$1')*255),round_((`$2')*255),round_((`$3')*255))')
+ `svgcolor(int((`$1')*255+0.5),int((`$2')*255+0.5),int((`$3')*255+0.5))')
define(`svgLink',`command "<a xlink:href=\"`$1'\"dnl
ifelse(`$3',,`target=\"_blank\"',`$3',B,,`$3')>
diff --git a/graphics/circuit_macros/xfig.m4 b/graphics/circuit_macros/xfig.m4
index d0c42ce6db..f8966d999b 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 9.5, copyright (c) 2021 J. D. Aplevich under *
+* Circuit_macros Version 9.6, copyright (c) 2021 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/info/dtk-bibliography/README.md b/info/dtk-bibliography/README.md
index cb135ae3f7..7d385436ad 100644
--- a/info/dtk-bibliography/README.md
+++ b/info/dtk-bibliography/README.md
@@ -3,7 +3,7 @@
This package contains the bibliography for "Die TeXnische Komödie",
the journal of the German-speaking user group.
-It is updated on a quarterly basis, last update 2021-03-07 for DTK 2021-01.
+It is updated on a quarterly basis, last update 2021-06-03 for DTK 2021-02.
# How to produce dtk-bibliography.pdf
diff --git a/info/dtk-bibliography/dtk-bibliography.bib b/info/dtk-bibliography/dtk-bibliography.bib
index 4795c9d9df..9972606a4a 100644
--- a/info/dtk-bibliography/dtk-bibliography.bib
+++ b/info/dtk-bibliography/dtk-bibliography.bib
@@ -18188,6 +18188,143 @@ to \LaTeX{} quickly and convincingly},
keywords = {fremdebuehne}
}
+###############################
+
+
+@article {dtk21.2:Dietsche:editorial,
+ author = {Dietsche, Luzia},
+ title = {Editorial},
+ journal = dtk,
+ date = {2021},
+ volume = {36},
+ number = {1},
+ month = {5},
+ pages = {3},
+ keywords = {editorial}
+}
+
+@article {dtk21.2:sievers:grusswort,
+ author = {Sievers, Martin},
+ title = {Grußwort},
+ journal = dtk,
+ volume = {36},
+ number = {1},
+ date = {2021},
+ month = {5},
+ pages = {4--5},
+ keywords = {grusswort}
+}
+
+@article {dtk21.2:schaa:protokoll,
+ author = {Volker RW Schaa},
+ title = {Protokoll der 62. Mitgliederversammlung von {\dante} am 11. März in Magdeburg (remote per Zoom)},
+ journal = dtk,
+ volume = {36},
+ number = {2},
+ date = {2021},
+ month = {5},
+ pages = {6--27},
+ keywords = {hinterbuehne}
+}
+
+
+@article {dtk21.2:Ludwichowski:gust,
+ author = {Ludwichowski, Jerzy},
+ title = {GUST e-foundry Font Projects, Final Report 2019–2020},
+ journal = dtk,
+ volume = {36},
+ number = {2},
+ date = {2021},
+ month = {5},
+ pages = {28--31},
+ keywords = {bretter}
+}
+
+
+@article {dtk21.2:Lukasczyk:tagungsbericht,
+ author = {Lukasczyk, Stephan},
+ title = {Tagungsbericht Frühjahrstagung 2021},
+ journal = dtk,
+ volume = {36},
+ number = {2},
+ date = {2021},
+ month = {5},
+ pages = {31--38},
+ keywords = {bretter}
+}
+
+@article {dtk21.2:meyer:einladung,
+ author = {Meyer, Thomas Hilarius and Sievers, Martin},
+ title = {Einladung zur Herbsttagung 2021 und 63. Mitgliederversammlung von DANTE e.V.},
+ journal = dtk,
+ volume = {36},
+ number = {2},
+ date = {2021},
+ month = {5},
+ pages = {38--39},
+ keywords = {bretter}
+}
+
+@article {dtk21.2:ziegenhagen:trello,
+ author = {Ziegenhagen, Uwe},
+ title = {Von Trello nach LaTeX},
+ journal = dtk,
+ volume = {36},
+ number = {2},
+ date = {2021},
+ month = {5},
+ pages = {41--47},
+ keywords = {bretter}
+}
+
+@article {dtk21.2:lichtenstein:schleifen,
+ author = {Lichtenstein, Harald},
+ title = {Schleifen in TikZ},
+ journal = dtk,
+ volume = {36},
+ number = {2},
+ date = {2021},
+ month = {5},
+ pages = {48--52},
+ keywords = {bretter}
+}
+
+
+@article {dtk21.2:ziegenhagen:pgfornament,
+ author = {Ziegenhagen, Uwe},
+ title = {Ergänzung zum pgfornament Artikel aus Die TEXnische Komödie 1/2021},
+ journal = dtk,
+ volume = {36},
+ number = {2},
+ date = {2021},
+ month = {5},
+ pages = {53--54},
+ keywords = {bretter}
+}
+
+@article {dtk21.2:fenn:ctan,
+ author = {Fenn, Jürgen},
+ title = {Neue Pakete auf CTAN},
+ journal = dtk,
+ date = {2021},
+ volume = {36},
+ number = {2},
+ month = {5},
+ pages = {55--59},
+ keywords = {fremdebuehne}
+}
+
+@article {dtk21.2:ohnemus:kehlmann,
+ author = {Fenn, Jürgen},
+ title = {Neue Pakete auf CTAN},
+ journal = dtk,
+ date = {2021},
+ volume = {36},
+ number = {2},
+ month = {5},
+ pages = {60--62},
+ keywords = {rezensionen}
+}
@Comment{jabref-meta: databaseType:biblatex;}
diff --git a/info/dtk-bibliography/dtk-bibliography.pdf b/info/dtk-bibliography/dtk-bibliography.pdf
index 27665ad5a5..3cdb607e18 100644
--- a/info/dtk-bibliography/dtk-bibliography.pdf
+++ b/info/dtk-bibliography/dtk-bibliography.pdf
Binary files differ
diff --git a/info/tex-nutshell/tex-nutshell.pdf b/info/tex-nutshell/tex-nutshell.pdf
index 7355c2ebbd..3e3c59b2f5 100644
--- a/info/tex-nutshell/tex-nutshell.pdf
+++ b/info/tex-nutshell/tex-nutshell.pdf
Binary files differ
diff --git a/info/tex-nutshell/tex-nutshell.tex b/info/tex-nutshell/tex-nutshell.tex
index 13b9ebfdf2..412313ca2d 100644
--- a/info/tex-nutshell/tex-nutshell.tex
+++ b/info/tex-nutshell/tex-nutshell.tex
@@ -32,12 +32,36 @@
\enquotes
% to index macros:
-\def\i #1 {\ii .#1 \iis .#1 {{\code{\\#1}}}}
+\def\i #1 {\makedest{#1}\ii .#1 \iis .#1 {\ilink[cs:#1]{\code{\\#1}}}}
\def\x`{\bgroup\_setverb\xx}
\bgroup \lccode\string`\.=\string`\` \lowercase{\egroup \def\xx #1#2.{\i #2 \egroup `#1#2.}}
\def\y`{\bgroup\_setverb\yy}
\def\yy #1#2={\i #2 \egroup `#1#2=}
\def\z`{`\let<=\l}
+\let\_cslinkcolor=\Blue
+
+% tex-nutshell.pdf includes destinations to the explanation of the primitive
+% control sequences and plain TeX macros in the form: "cs:sequence". For example,
+% you can try:
+%
+% http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf#cs:hbox
+%
+% All such sequences are listed in the tex-nutshell.eref file. You can read
+% this eref file into your document and create external links to these
+% destinations.
+
+\newwrite \eref
+\immediate\openout\eref=\jobname.eref
+\def\makedest#1{}
+\def\makedestactive#1{%
+ \ifcsname cs:#1\endcsname \else
+ \immediate\write\eref{\string\Xeref{#1}}%
+ \dest[cs:#1]%
+ \sxdef{cs:#1}{}%
+ \fi
+}
+\def\noda{\def\makedest##1{}}
+\def\doda{\let\makedest\makedestactive}
% Hyperlinks
\hyperlinks\Red\Green
@@ -98,7 +122,7 @@ There are four types of meanings of control sequences:
behavior of built-in algorithms (e.g., \i hsize `\hsize`, \i parindent `\parindent`,
\i hyphenpenalty `\hyphenpenalty`). On the other hand \ii declared/register {\em declared registers}
are used by macros (e.g., \i medskipamount `\medskipamount` used in plain \TeX/
- or \i ttindent `\ttindent`
+ or {\doda\i ttindent `\ttindent`}
used by \ii OpTeX \OpTeX/).
* the control sequence can be a \ii primitive/command {\em primitive command}, which runs a built-in
algorithm (e.g., \i def `\def` declares a macro, \i halign `\halign` runs the algorithm for
@@ -119,7 +143,7 @@ Example. When \TeX/ reads:
\def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}
\endtt
in a macro file, then the `\def` primitive command saves the information that
-\i TeX `\TeX` is a control sequence with meaning \"macro", the replacement text is
+{\doda\i TeX `\TeX`} is a control sequence with meaning \"macro", the replacement text is
declared here, and it is a mix of a material to be typeset: `T`, `E` and `X`
and primitive commands
\i kern `\kern`, \i lower `\lower`, \i hbox `\hbox`
@@ -453,8 +477,8 @@ The groups can be delimited by `{`\c1 and `}`\c2 pair or by \i begingroup `\begi
\i endgroup `\endgroup` primitive commands or by
\i bgroup `\bgroup` and \i egroup `\egroup` control
sequences declared by plain \TeX.
-For example, plain \TeX/ declares the macros \i rm `\rm` (selects roman font),
-\i bf `\bf` (selects bold font) and \i it `\it` (selects italics) and it initializes by
+For example, plain \TeX/ declares the macros {\doda\i rm `\rm` (selects roman font),
+\i bf `\bf` (selects bold font) and \i it `\it`} (selects italics) and it initializes by
\i rm `\rm` font. A user can write:
\begtt
@@ -859,7 +883,7 @@ syntax for `<math text>`. So, \LaTeX/ manuals or \LaTeX/ documents
serve a good source if you want to get to know the rules of math typesetting
by \TeX. There is only one significant difference. Fractions are constructed at
the primitive level by the \x`\over` primitive:
-`{<numerator>\over<denominator>}` but \LaTeX/ uses a macro \x`\frac` in the
+`{<numerator>\over<denominator>}` but \LaTeX/ uses a macro {\doda\x`\frac`} in the
syntax `\frac{<numerator>}{<denominator>}`. Plain \TeX/ users (including the
author of \TeX/) prefer the syntax which follows the
principle \"how a human reads the formula". On the other hand, the
@@ -1021,6 +1045,8 @@ internal unit `sp` is omitted.
The summary of most commonly used primitive registers including their default
value given by plain \TeX/ follows.
+\let\makedest=\makedestactive
+
\begitems \rightskip=0pt plus1fil
* \y`\hsize=6.5in`,
\y`\vsize=8.9in`
@@ -1077,7 +1103,7 @@ value given by plain \TeX/ follows.
* \y`\looseness=0` allows us to create of a \"suboptimal" paragraph. The page-building
algorithm tries to build the paragraph with \x`\looseness` lines more than
- the optimal solution. If the \x`\tolerance` does not have a sufficiently large value
+ the optimal solution. If the {\noda\x`\tolerance`} does not have a sufficiently large value
then this setting is simply ignored. It is reset to zero after each
paragraph is completed.
@@ -1152,7 +1178,7 @@ detail).
use this character in the `\string` primitive.
* \y`\newlinechar=-1`. If positive, this character is interpreted as the end of
- the line when printing to the log or by the \x`\write` primitive command.
+ the line when printing to the log or by the {\noda\x`\write`} primitive command.
* \y`\endlinechar=`\code{`}`^^M`.
This character is appended to the end of each input
@@ -1193,7 +1219,7 @@ detail).
\y`\everyjob={}`.
These token lists are processed when an algorithm of \TeX/ reaches a corresponding
situations respectively: opens output routine, paragraph, internal math mode, display
- math mode, \x`\vbox`, \x`\hbox`, is at the end of a line in a table,
+ math mode, {\noda\x`\vbox`, \x`\hbox`}, is at the end of a line in a table,
at the end of an input file, or starts the job.
\enditems
@@ -1226,7 +1252,7 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
previous section. The output is tokenized like of `\detokenize`.
The exception is `\the<tokens register>`: the output is the value
of the `<tokens register>` without re-tokenizing and the expand processor
- does not expand this output in `\edef`, `\write`, `\message`, etc., arguments.
+ does not expand this output in {\noda`\edef`, `\write`, `\message`}, etc., arguments.
* \i scantoken `\scantokens/<expandafters>.`\z`{|<text>};` re-tokenizes \z`<text>` using the actual
tokenizer setting. The behavior is the same as when writing \z`<text>` to a
@@ -1332,15 +1358,15 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
* \i ifhbox `\ifhbox<box number>`,
\i ifvbox `\ifvbox<box number>`, \i ifvoid `\ifvoid<box number>`
- returns true if the specified `<box number>` represents \x`\hbox`, \x`\vbox`, void box
+ returns true if the specified `<box number>` represents {\noda\x`\hbox`, \x`\vbox`}, void box
respectively.
* \i ifcat \z`\ifcat<token 1><token 2>` is true if the category codes of \z`<token 1>`
and \z`<token 2>` are equal.
* \i ifeof `\ifeof<file number>` is true if the file attached to the `<file number>`
- by the \x`\openin` primitive does not exist, or the end of file was reached by
- the \x`\read` primitive.
+ by the {\noda\x`\openin`} primitive does not exist, or the end of file was reached by
+ the {\noda\x`\read`} primitive.
\_printitem{$\bullet$\enspace}
* \*\i unless `\unless<if condition>` negates the result of `<if condition>` before
@@ -1353,7 +1379,7 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
* \i noexpand `\noexpand|<token>;`.
The expand processor does not expand the `<token>` if it is expanding the
- text in `\edef`, `\write`, `\message` or similar lists.
+ text in {\noda\x`\edef`, \x`\write`, \x`\message`} or similar lists.
* \*\i unexpanded `\unexpanded/<expandafters>.`\z`{|<text>};` returns \z`<text>` and applies
`\noexpand` to all tokens in the \z`<text>`.
@@ -1370,7 +1396,7 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
* \x`\topmark` (last from previous page),
\x`\firstmark` (first on current page),
\x`\botmark` (last on current page). They expand to the corresponding
- \x`\mark` included in the current or previous page-box.
+ {\noda\x`\mark`} included in the current or previous page-box.
Usable for implementing running headers in the output routine.
* \i fontname `\fontname<font selector>` expands to the file name \*\*\*(or font name) of
@@ -1408,9 +1434,9 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
* \x`\long` is a prefix; it can be used before `\def`, `\edef`, `\gdef`, `\xdef`.
The declared macro accepts the control sequence `\par` in its parameters.
-* \*\x`\private` is a prefix; it can be used before `\def`, `\edef`, `\gdef`, `\xdef`.
- The declared macro is not expanded by the expand processor in \x`\write`,
- \x`\message`, \x`\edef`, etc., parameters.
+* \*\x`\protected` is a prefix; it can be used before `\def`, `\edef`, `\gdef`, `\xdef`.
+ The declared macro is not expanded by the expand processor in {\noda\x`\write`,
+ \x`\message`, \x`\edef`}, etc., parameters.
* \x`\outer` is a prefix; it can be used before `\def`, `\edef`, `\gdef`, `\xdef`.
The declared macro must be used only when the main processor is in the context
@@ -1440,8 +1466,8 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
declare analogically
equivalents to \i dimen `\dimen<number>`, \i skip `\skip<number>`,
\i muskip `\muskip<number>` and \i toks `\toks<number>`.
- Usage of allocation macros \x`\newdimen`, \x`\newskip`, \x`\newmuskip`,
- \x`\newtoks` are preferred.
+ Usage of allocation macros {\noda\x`\newdimen`, \x`\newskip`, \x`\newmuskip`,
+ \x`\newtoks`} are preferred.
* \i font `\font|<font selector>;=<file name><space>/<size specification>.` declares
`<font selector>` of a font implemented in the `<file name>.tfm`. The
@@ -1482,7 +1508,7 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
parameter. The height of the box is the maximum of heights of all elements in
the `<horizontal list>`. The depth of the box is the maximum of depths of all
such elements. These elements are set on the common baseline (exceptions
- can be given by \x`\lower` or \x`\raise` commands).
+ can be given by {\noda\x`\lower` or \x`\raise`} commands).
* \i vbox `\vbox{<cmds>}` or `\vbox to<dimen>{<cmds>}`
or `\vbox spread<dimen>{<cmds>}`
@@ -1493,8 +1519,8 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
element. The depth of the last element is set as the depth of the box.
The width of the box is the maximum of widths of elemens in the `<vertical list>`.
All elements are placed at the
- common left margin of the box (exceptions can be given by \x`\moveleft` or
- \x`\moveright` commands).
+ common left margin of the box (exceptions can be given by {\noda\x`\moveleft` or
+ \x`\moveright`} commands).
* \i vtop `\vtop{<cmds>}` (with optional `to` or `spread`
parameters) is the same as `\vbox`,
@@ -1525,7 +1551,7 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
Macro programmers use only 0 to 9 \z`<box numbers>` directly. Other
addresses to box registers should be allocated by
- the \i newbox `\newbox|<control sequence>;` macro. The `|<control sequence>;`
+ the {\noda\i newbox `\newbox|<control sequence>;`} macro. The `|<control sequence>;`
is equivalent to a `<box number>`, not to the box register itself.
The `\setbox` command does an assignment, so the \x`\global` prefix is needed
@@ -1583,11 +1609,11 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
\begitems
* \x`\hrule` creates a horizontal line in the current vertical
list. If it is used in horizontal mode, it finishes the paragraph by
- \x`\par` first.
+ {\noda\x`\par`} first.
`\hrule /width<dimen>. /height<dimen>. /depth<dimen>.` creates (in
general, with given parameters) a full
rectangle (something like a box, but it isn't treated as the box) with given
- dimensions. Default values are: \"width"~=width of outer `\vbox`,
+ dimensions. Default values are: \"width"~=width of outer \x`\vbox`,
\"height"~=0.4\,pt, \"depth"~=0\,pt.
{\emergencystretch=2em\par}
@@ -1597,24 +1623,24 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
`\vrule /width<dimen>. /height<dimen>. /depth<dimen>.` creates (in
general, with given parameters) a full rectangle with given
dimensions. Default values are: \"width"~=0.4\,pt,
- \"height"~=height of outer `\hbox`, \"depth"~=depth of outer `\hbox`.
+ \"height"~=height of outer `\hbox`, \"depth"~=depth of outer \x`\hbox`.
{\emergencystretch=2em\par}
- The optional parameters of `\hrule` and `\vrule` can be specified in
+ The optional parameters of \x`\hrule` and \x`\vrule` can be specified in
arbitrary order and they can be specified more than once. In such a case,
the rule \"last wins" is applied.
* \i leaders `\leaders<rule><glue>` creates a glue
(maybe shrinkable or stretchable) filled by a full rectangle.
The `<rule>` is \x`\vrule` or \x`\hrule` (maybe with its optional parameters).
- If the `<glue>` is specified by an \x`\hskip` command
+ If the `<glue>` is specified by an {\noda\x`\hskip`} command
(maybe with its optional parameters)
- or by its alternatives \x`\hss`, \x`\hfil`, \x`\hfill`, then the resulting glue
+ or by its alternatives {\noda\x`\hss`, \x`\hfil`, \x`\hfill`}, then the resulting glue
is horizontal (can be used only in horizontal mode) and its dimensions
are: width derived from `<glue>`, height plus depth derived from `<rule>`.
- If the `<glue>` is specified by a \x`\vskip` command
+ If the `<glue>` is specified by a {\noda\x`\vskip`} command
(maybe with its optional parameters)
- or by its alternatives \x`\vss`, \x`\vfil`, \x`\vfill`, then the resulting glue
+ or by its alternatives {\noda\x`\vss`, \x`\vfil`, \x`\vfill`}, then the resulting glue
is vertical (can be used only in vertical mode) and its dimensions
are: height derived from `<glue>`, width derived from `<rule>`, depth is zero.
@@ -1759,7 +1785,7 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
(or `\openin`\,`<file number>`\,`=`\,`{<file name>}`) \ opens the
file `<file name>` for reading and creates a file descriptor
connected to the `<file number>`.\fnote
- {Note that `<file number>` is an address to the file descriptor. Macro
+ {\noda Note that `<file number>` is an address to the file descriptor. Macro
programmers don't use these addresses directly but by the
\i newread `\newread|<control sequence>;` and
\i newwrite `\newwrite|<control sequence>;` allocation macros.}
@@ -1813,7 +1839,7 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
These two types of groups (declared by mentioned commands or
by mentioned characters) cannot be mixed, i.e.\
`\begingroup...}` gives an error. Plain \TeX/ declares
- \x`\bgroup` and \x`\egroup` control sequences as equivalents to
+ {\noda\x`\bgroup` and \x`\egroup`} control sequences as equivalents to
`{`\c1 and `}`\c2. They can be used instead of `{`\c1 and~`}`\c2 when we
need to open/close a group, to create a math list, or when a box is constructed.
For example, \z`\hbox\bgroup<text>\egroup` is syntactically correct.
@@ -1951,6 +1977,12 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
the given `<step>`.
To activate this feature you must set the \x`\pdfadjustspacing`
numeric register to a positive value.
+* \i efcode `\efcode <font selector><char. code>=<number>`
+ sets the degree of willigness of given character to be deformed when
+ `\pdffontexpand` is used. Default value for all
+ characters is 1000 and `<number>`/1000 gives the proportion coefficient for
+ stretching or shrinking of the character with respect to the \"normal" deformation
+ of characters with default value 1000.
* \i rpcode \i lpcode
`\rpcode <font selector><char. code>=<number>`,
`\lpcode <font selector><char. code>=<number>` allows the declaration of
@@ -2044,7 +2076,7 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
for the following box in
the current vertical list. This box is appended immediately after
the previous box.
- \x`\offinterlineskip` ignores the \x`\baselineskip` rule for all following
+ {\noda\x`\offinterlineskip`} ignores the \x`\baselineskip` rule for all following
boxes until the current group is closed.
* All vertical glues at the top of the page inserted by \x`\vskip` are
ignored. Macro \x`\vglue` behaves like the `\vskip` primitive command but its glue
@@ -2204,7 +2236,7 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
\vfil\break
-\nonum\sec Index
+\nonum\sec[index] Index
\iis LaTeX/macros {\LaTeX/ macros}
\iis plain~TeX/macros {plain \TeX/ macros}
@@ -2236,7 +2268,7 @@ If it is~a~Lua\TeX/ only command then three *** are prefixed.
\noindent
Petr Olšák {\tt petr@olsak.net}\nl
Czech Technical University in Prague\nl
-Version of the text: 0.6 (\the\year-\thed\month-\thed\day)
+Version of the text: 0.7 (\the\year-\thed\month-\thed\day)
\break
diff --git a/language/japanese/uplatex/LICENSE b/language/japanese/uplatex/LICENSE
index 1c7b99eea0..483441bb72 100644
--- a/language/japanese/uplatex/LICENSE
+++ b/language/japanese/uplatex/LICENSE
@@ -1,6 +1,6 @@
Copyright (c) 2010 ASCII MEDIA WORKS
Copyright (c) 2016 Takuji Tanaka
-Copyright (c) 2016-2020 Japanese TeX Development Community
+Copyright (c) 2016-2021 Japanese TeX Development Community
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/language/japanese/uplatex/Makefile b/language/japanese/uplatex/Makefile
index 308634974c..8c0b6f5cef 100644
--- a/language/japanese/uplatex/Makefile
+++ b/language/japanese/uplatex/Makefile
@@ -3,10 +3,14 @@ DOCTARGET = uplatex upldoc \
uplatex-en #upldoc-en
PDFTARGET = $(addsuffix .pdf,$(DOCTARGET))
DVITARGET = $(addsuffix .dvi,$(DOCTARGET))
+TEXMF = $(shell kpsewhich -var-value=TEXMFHOME)
+
KANJI = -kanji=utf8
#FONTMAP = -f ipaex.map -f uptex-ipaex.map
FONTMAP = -f haranoaji.map -f uptex-haranoaji.map
-TEXMF = $(shell kpsewhich -var-value=TEXMFHOME)
+LTX = uplatex $(KANJI)
+DPX = dvipdfmx $(FONTMAP)
+MDX = mendex -U
default: $(STRIPTARGET) $(DVITARGET)
strip: $(STRIPTARGET)
@@ -26,44 +30,56 @@ PLCLS_SRC = ujclasses.dtx
INTRODOC_SRC = uplatex.dtx
-PLDOC_SRC = uplatex.dtx uplvers.dtx uplfonts.dtx \
- ukinsoku.dtx ujclasses.dtx
+PLDOC_SRC = $(PLFMT_SRC) $(PLCLS_SRC)
uplatex.ltx: $(PLFMT_SRC)
rm -f $(PLFMT)
- uplatex $(KANJI) uplfmt.ins
+ $(LTX) uplfmt.ins
rm uplfmt.log
ujarticle.cls: $(PLCLS_SRC)
rm -f $(PLCLS)
- uplatex $(KANJI) uplcls.ins
+ $(LTX) uplcls.ins
rm uplcls.log
uplatex.dvi: $(INTRODOC_SRC)
rm -f uplatex.cfg
- uplatex $(KANJI) uplatex.dtx
- mendex -U -f -s gglo.ist -o uplatex.gls uplatex.glo
- uplatex $(KANJI) uplatex.dtx
+ $(LTX) uplatex.dtx
+ $(MDX) -f -s gglo.ist -o uplatex.gls uplatex.glo
+ $(LTX) uplatex.dtx
rm uplatex.aux uplatex.log
rm uplatex.glo uplatex.gls uplatex.ilg
upldoc.dvi: $(PLDOC_SRC)
rm -f uplatex.cfg
rm -f upldoc.tex Xins.ins
- uplatex $(KANJI) upldocs.ins
- rm -f mkpldoc*.sh #dstcheck.pl
- uplatex $(KANJI) Xins.ins
- sh mkpldoc.sh
+ $(LTX) upldocs.ins
+ #
+ #rm -f mkpldoc*.sh #dstcheck.pl
+ #$(LTX) Xins.ins
+ #sh mkpldoc.sh
+ #rm mkpldoc*.sh #dstcheck.pl
+ #
+ rm -f upldoc.toc upldoc.idx upldoc.glo
+ echo "" > ltxdoc.cfg
+ $(LTX) upldoc.tex
+ $(MDX) -s gind.ist -d upldoc.dic -o upldoc.ind upldoc.idx
+ $(MDX) -f -s gglo.ist -o upldoc.gls upldoc.glo
+ echo "\includeonly{}" > ltxdoc.cfg
+ $(LTX) upldoc.tex
+ echo "" > ltxdoc.cfg
+ $(LTX) upldoc.tex
+ #
rm *.aux *.log upldoc.toc upldoc.idx upldoc.ind upldoc.ilg
rm upldoc.glo upldoc.gls upldoc.tex Xins.ins
- rm ltxdoc.cfg upldoc.dic mkpldoc*.sh #dstcheck.pl
+ rm ltxdoc.cfg upldoc.dic
uplatex-en.dvi: $(INTRODOC_SRC)
# built-in echo in shell is troublesome, so use perl instead
perl -e "print \"\\\\newif\\\\ifJAPANESE\\n"\" >uplatex.cfg
- uplatex -jobname=uplatex-en $(KANJI) uplatex.dtx
- mendex -U -f -s gglo.ist -o uplatex-en.gls uplatex-en.glo
- uplatex -jobname=uplatex-en $(KANJI) uplatex.dtx
+ $(LTX) -jobname=uplatex-en uplatex.dtx
+ $(MDX) -f -s gglo.ist -o uplatex-en.gls uplatex-en.glo
+ $(LTX) -jobname=uplatex-en uplatex.dtx
rm uplatex-en.aux uplatex-en.log
rm uplatex-en.glo uplatex-en.gls uplatex-en.ilg
rm uplatex.cfg
@@ -72,23 +88,36 @@ upldoc-en.dvi: $(PLDOC_SRC)
# built-in echo in shell is troublesome, so use perl instead
perl -e "print \"\\\\newif\\\\ifJAPANESE\\n"\" >uplatex.cfg
rm -f upldoc.tex Xins.ins
- uplatex $(KANJI) upldocs.ins
- rm -f mkpldoc*.sh #dstcheck.pl
- uplatex $(KANJI) Xins.ins
- sh mkpldoc-en.sh
+ $(LTX) upldocs.ins
+ #
+ #rm -f mkpldoc*.sh #dstcheck.pl
+ #$(LTX) Xins.ins
+ #sh mkpldoc-en.sh
+ #rm mkpldoc*.sh #dstcheck.pl
+ #
+ rm -f upldoc-en.toc upldoc-en.idx upldoc-en.glo
+ echo "" > ltxdoc.cfg
+ $(LTX) -jobname=upldoc-en upldoc.tex
+ $(MDX) -s gind.ist -d upldoc.dic -o upldoc-en.ind upldoc-en.idx
+ $(MDX) -f -s gglo.ist -o upldoc-en.gls upldoc-en.glo
+ echo "\includeonly{}" > ltxdoc.cfg
+ $(LTX) -jobname=upldoc-en upldoc.tex
+ echo "" > ltxdoc.cfg
+ $(LTX) -jobname=upldoc-en upldoc.tex
+ #
rm *.aux *.log upldoc-en.toc upldoc-en.idx upldoc-en.ind upldoc-en.ilg
rm upldoc-en.glo upldoc-en.gls upldoc.tex Xins.ins
- rm ltxdoc.cfg upldoc.dic mkpldoc*.sh #dstcheck.pl
+ rm ltxdoc.cfg upldoc.dic
rm uplatex.cfg
uplatex.pdf: uplatex.dvi
- dvipdfmx $(FONTMAP) $<
+ $(DPX) $<
upldoc.pdf: upldoc.dvi
- dvipdfmx $(FONTMAP) $<
+ $(DPX) $<
uplatex-en.pdf: uplatex-en.dvi
- dvipdfmx $(FONTMAP) $<
+ $(DPX) $<
upldoc-en.pdf: upldoc-en.dvi
- dvipdfmx $(FONTMAP) $<
+ $(DPX) $<
.PHONY: install clean cleanstrip cleanall cleandoc
install:
diff --git a/language/japanese/uplatex/README.md b/language/japanese/uplatex/README.md
index 5ddabeef57..32e08c56e0 100644
--- a/language/japanese/uplatex/README.md
+++ b/language/japanese/uplatex/README.md
@@ -20,6 +20,6 @@ the 3-clause BSD license (see [LICENSE](./LICENSE)).
## Release Date
-2020-09-30
+2021-05-31
Japanese TeX Development Community
diff --git a/language/japanese/uplatex/ukinsoku.dtx b/language/japanese/uplatex/ukinsoku.dtx
index 70ce9c1280..a5e55f6148 100644
--- a/language/japanese/uplatex/ukinsoku.dtx
+++ b/language/japanese/uplatex/ukinsoku.dtx
@@ -7,7 +7,7 @@
%
% Copyright (c) 2010 ASCII MEDIA WORKS
% Copyright (c) 2016 Takuji Tanaka
-% Copyright (c) 2016-2020 Japanese TeX Development Community
+% Copyright (c) 2016-2021 Japanese TeX Development Community
%
% This file is part of the upLaTeX2e system (community edition).
% --------------------------------------------------------------
@@ -34,13 +34,15 @@
% \changes{v1.0b-u06}{2019/09/22}{ãƒã‚°å›žé¿ã‚³ãƒ¼ãƒ‰ãŒã‹ãˆã£ã¦æœ‰å®³ãªãŸã‚除去}
% \changes{v1.0c}{2020/09/28}{ï¼ã®\cs{inhibitxspcode}を設定}
% \changes{v1.0c-u06}{2020/09/28}{p\LaTeX{}ã®å¤‰æ›´ã«è¿½éš}
+% \changes{v1.0d}{2021/03/04}{:ã®\cs{inhibitxspcode}ã¨:ã®\cs{xspcode}を設定}
+% \changes{v1.0d-u06}{2021/03/04}{p\LaTeX{}ã®å¤‰æ›´ã«è¿½éš}
% \fi
%
% \iffalse
%<*driver>
\NeedsTeXFormat{pLaTeX2e}
% \fi
-\ProvidesFile{ukinsoku.dtx}[2020/09/28 v1.0c-u06 upLaTeX Kernel]
+\ProvidesFile{ukinsoku.dtx}[2021/03/04 v1.0d-u06 upLaTeX Kernel]
% \iffalse
\documentclass{jltxdoc}
\GetFileInfo{ukinsoku.dtx}
@@ -158,6 +160,7 @@
% ãŒå‡ºãªã„よã†ã«ã€ã‚³ãƒ¡ãƒ³ãƒˆã‹ã‚‰ã‚‚削除ã—ã¾ã—ãŸã€‚
% \changes{v1.0b-u03}{2018/04/08}{\LaTeX\ 2018-04-01対策}
%
+% \changes{v1.0d}{2021/03/04}{:ã®\cs{xspcode}を設定}
% \begin{macrocode}
%%全角文字
\prebreakpenalty`ã€=10000
@@ -338,6 +341,7 @@
\xspcode`]=2
\xspcode``=1
\xspcode`'=2
+\xspcode`:=2
\xspcode`;=2
\xspcode`,=2
\xspcode`.=2
@@ -487,6 +491,7 @@
% \end{center}
%
% \changes{v1.0c}{2020/09/28}{ï¼ã®\cs{inhibitxspcode}を設定}
+% \changes{v1.0d}{2021/03/04}{:ã®\cs{inhibitxspcode}を設定}
% \begin{macrocode}
%%
%% inhibitxspcode
@@ -494,6 +499,7 @@
\inhibitxspcode`。=1
\inhibitxspcode`,=1
\inhibitxspcode`.=1
+\inhibitxspcode`:=1
\inhibitxspcode`ï¼›=1
\inhibitxspcode`?=1
\inhibitxspcode`ï¼=1
diff --git a/language/japanese/uplatex/uplatex-en.pdf b/language/japanese/uplatex/uplatex-en.pdf
index 4116f332f0..0aad637ba4 100644
--- a/language/japanese/uplatex/uplatex-en.pdf
+++ b/language/japanese/uplatex/uplatex-en.pdf
Binary files differ
diff --git a/language/japanese/uplatex/uplatex.dtx b/language/japanese/uplatex/uplatex.dtx
index 7f014b8b38..58edbbc69f 100644
--- a/language/japanese/uplatex/uplatex.dtx
+++ b/language/japanese/uplatex/uplatex.dtx
@@ -7,7 +7,7 @@
%
% Copyright (c) 2010 ASCII MEDIA WORKS
% Copyright (c) 2016 Takuji Tanaka
-% Copyright (c) 2016-2020 Japanese TeX Development Community
+% Copyright (c) 2016-2021 Japanese TeX Development Community
%
% This file is part of the upLaTeX2e system (community edition).
% --------------------------------------------------------------
@@ -92,6 +92,7 @@
% (based on platex.dtx 2018/09/22 v1.0y)}
% \changes{v1.0y-u03}{2019/05/22}{ドキュメントを更新}
% \changes{v1.1b-u03}{2020/09/28}{defs読込後ã«ãƒ•ãƒƒã‚¯è¿½åŠ }
+% \changes{v1.1c-u03}{2021/02/25}{\file{latex.ltx}ã®èª­è¾¼ãƒã‚§ãƒƒã‚¯}
%\else
% \changes{v1.0c-u00}{2011/05/07}{Created \upLaTeX\ version based on \pLaTeX\ one
% (based on platex.dtx 1997/01/29 v1.0c)}
@@ -132,6 +133,7 @@
% (based on platex.dtx 2018/09/22 v1.0y)}
% \changes{v1.0y-u03}{2019/05/22}{Update document.}
% \changes{v1.1b-u03}{2020/09/28}{Add hook after loading defs}
+% \changes{v1.1c-u03}{2021/02/25}{Check for \file{latex.ltx} status}
%\fi
% \fi
%
@@ -139,7 +141,7 @@
%<*driver>
\NeedsTeXFormat{pLaTeX2e}
% \fi
-\ProvidesFile{uplatex.dtx}[2020/09/28 v1.1b-u03 upLaTeX document file]
+\ProvidesFile{uplatex.dtx}[2021/02/25 v1.1c-u03 upLaTeX document file]
% \iffalse
\documentclass{jltxdoc}
\usepackage{plext}
@@ -431,8 +433,8 @@
%
%\ifJAPANESE
% \file{latex.ltx}を読ã¿è¾¼ã¿ã¾ã™ã€‚
-% \TeX\ Liveã®æ¨™æº–的インストールã§ã¯ã€ã“ã®ä¸­ã§Babelç”±æ¥ã®ãƒã‚¤ãƒ•ãƒãƒ¼ã‚·ãƒ§ãƒ³ãƒ»
-% パターン\file{hyphen.cfg}ãŒèª­ã¿è¾¼ã¾ã‚Œã‚‹ã¯ãšã§ã™ã€‚
+% \TeX\ Liveã®æ¨™æº–的インストールã§ã¯ã€ã“ã®ä¸­ã§Babelç”±æ¥ã®
+% ãƒã‚¤ãƒ•ãƒãƒ¼ã‚·ãƒ§ãƒ³ãƒ»ãƒ‘ターン\file{hyphen.cfg}ãŒèª­ã¿è¾¼ã¾ã‚Œã‚‹ã¯ãšã§ã™ã€‚
%\else
% Load \file{latex.ltx} here.
% Within the standard installation of \TeX\ Live, \file{hyphen.cfg}
@@ -443,6 +445,24 @@
% \end{macrocode}
%
%\ifJAPANESE
+% ã“ã®æ™‚点ã§|\typeout|ãŒæœªå®šç¾©ãªã‚‰ã€\LaTeX{}カーãƒãƒ«ã®èª­ã¿è¾¼ã¿ã«
+% 失敗ã—ã¦ã„ã¾ã™ã®ã§ã€å¼·åˆ¶çµ‚了ã—ã¾ã™ï¼ˆ\LaTeXe\ 2017/01/01以é™ã‚’
+% éž\eTeX{}æ‹¡å¼µã§ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆä½œæˆã—よã†ã¨ã—ãŸå ´åˆãªã©ï¼‰ã€‚
+% \changes{v1.1c-u03}{2021/02/25}{\file{latex.ltx}ã®èª­è¾¼ãƒã‚§ãƒƒã‚¯}
+%\else
+% If |\typeout| is still undefined, the input of \LaTeX~kernel
+% should have failed; abort now.
+% \changes{v1.1c-u03}{2021/02/25}{Check for \file{latex.ltx} status}
+%\fi
+% \begin{macrocode}
+\ifx\typeout\undefined
+ \errhelp{Please reinstall LaTeX, or check e-TeX availability.}%
+ \errmessage{Failed to load `latex.ltx' properly}%
+ \expandafter\end
+\fi
+% \end{macrocode}
+%
+%\ifJAPANESE
% \file{plcore.ltx}ã¨\file{uplcore.ltx}を読ã¿è¾¼ã¿ã¾ã™ã€‚
% \changes{v1.0s-u02}{2017/12/10}{\file{uplcore.ltx}ã®å‰ã«
% \file{plcore.ltx}を読ã¿è¾¼ã‚€ã‚ˆã†ã«ã—ãŸï¼ˆæœ€è¿‘ã®\pLaTeX{}ãŒå‰æ)}
@@ -1207,7 +1227,7 @@ echo "" > ltxdoc.cfg
% \begin{thebibliography}{9}
% \bibitem{tb108tanaka}
% Takuji Tanaka,
-% \newblock Up\TeX\ --- Unicode version of \pTeX\ with CJK extensions
+% \newblock Up\TeX\ --- Unicode version of \pTeX\ with CJK extensions.
% \newblock TUGboat issue 34:3, 2013.\\
% (\texttt{http://tug.org/TUGboat/tb34-3/tb108tanaka.pdf})
% \end{thebibliography}
diff --git a/language/japanese/uplatex/uplatex.pdf b/language/japanese/uplatex/uplatex.pdf
index babf5d2202..f9d86526ea 100644
--- a/language/japanese/uplatex/uplatex.pdf
+++ b/language/japanese/uplatex/uplatex.pdf
Binary files differ
diff --git a/language/japanese/uplatex/upldoc.pdf b/language/japanese/uplatex/upldoc.pdf
index 9d719a52f3..3bea6e1bd3 100644
--- a/language/japanese/uplatex/upldoc.pdf
+++ b/language/japanese/uplatex/upldoc.pdf
Binary files differ
diff --git a/macros/generic/expkv-cs/README.md b/macros/generic/expkv-cs/README.md
index a9df8b801f..89ab6b6de6 100644
--- a/macros/generic/expkv-cs/README.md
+++ b/macros/generic/expkv-cs/README.md
@@ -1,7 +1,7 @@
-------------------------------------------------------------------------------
# expkv-cs -- define expandable key=val macros using expkv
-Version 2021-05-24 v0.9
+Version 2021-06-03 v0.10
Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
diff --git a/macros/generic/expkv-cs/expkv-cs.dtx b/macros/generic/expkv-cs/expkv-cs.dtx
index 38a70349d7..55a6a134aa 100644
--- a/macros/generic/expkv-cs/expkv-cs.dtx
+++ b/macros/generic/expkv-cs/expkv-cs.dtx
@@ -282,7 +282,7 @@ and the derived files expkv-cs.pdf
\DoNotIndex{\protected,\ProvidesFile,\ProvidesPackage,\relax,\space,\advance}
\DoNotIndex{\@,\unexpanded,\string,\expanded,\dimexpr,\global,\glueexpr,\hbox}
\DoNotIndex{\numexpr,\RequirePackage,\setbox,\the,\unless,\xdef,\gdef,\newcount}
-\DoNotIndex{\romannumeral,\^,\@firstofone,\@firstoftwo,\@gobble}
+\DoNotIndex{\^,\@firstofone,\@firstoftwo,\@gobble}
\DoNotIndex{\ifcsname}
\DoNotIndex{\ifx}
\DoNotIndex{\ifnum}
@@ -506,13 +506,15 @@ and the derived files expkv-cs.pdf
% \begin{syntax}
% \cs{ekvcValue}\{\key\}\marg{key list}
% \end{syntax}
-% This is a safe (but slow) way to access your keys in a hash variant. \key\
+% This is a safe way to access your keys in a hash variant. \key\
% is the key which's \val\ you want to use out of the \meta{key list}.
% \meta{key list} should be the key list argument forwarded to your underlying
% macro by |\ekvcHash|, |\ekvcHashAndForward|, or |\ekvcHashAndUse|. It will
% be tested whether the hash function to access that \key\ exists, the \key\
% argument is not empty, and that the \meta{key list} really contains a \val\
-% of that \key. This macro needs exactly two steps of expansion.
+% of that \key. This macro needs exactly two steps of expansion and if used
+% inside of an |\edef| or |\expanded| context will protect the \val\ from
+% further expanding.
% \end{function}
%
% \begin{function}{\ekvcValueFast}
@@ -1125,8 +1127,8 @@ and the derived files expkv-cs.pdf
% \begin{macro}{\ekvcVersion,\ekvcDate}
% We're on our first input, so lets store the version and date in a macro.
% \begin{macrocode}
-\def\ekvcVersion{0.9}
-\def\ekvcDate{2021-05-24}
+\def\ekvcVersion{0.10}
+\def\ekvcDate{2021-06-03}
% \end{macrocode}
% \end{macro}
%
@@ -1146,21 +1148,6 @@ and the derived files expkv-cs.pdf
% |\ekvc@tmp| will be reused later, but we don't need it to ever store
% information long-term after \expkvc\ was initialized.
%
-% \begin{macro}[internal]{\ekvc@zero}
-% There are different ways to define a |\romannumeral| expansion. If the
-% control is never given to user input, the fastest way is to just execute
-% your code and use a |\dimendef|ed zero to end it afterwards. If the control
-% is given to user input (so user input should be expanded) the fastest and
-% best way is to use |\romannumeral`\^^@|, this will expand the user input
-% until something unexpandable is found or a space (which would then be
-% gobbled). However, we want to use the former approach since we don't want to
-% expand any user input, just make sure own code is expanded in two steps.
-% Since we want to use the |\dimendef| variant, we have to actually provide
-% such a token. Since both plain \TeX\ and \LaTeX\ define |\z@| we can use
-% that (but we use a private name for it). Luckily, \expkv\ already contains
-% |\ekv@zero|, which we can use in \expkvc.
-% \end{macro}
-%
% \begin{macro}[internal]{\ekvc@keycount}
% We'll need to keep count how many keys must be defined for each macro in the
% |split| variants.
@@ -1713,8 +1700,8 @@ and the derived files expkv-cs.pdf
% \end{macro}
%
% \begin{macro}[internal]{\ekvc@setup@hashmacro}
-% The safe hash macros will be executed inside of a |\romannumeral| expansion
-% context, so they have to insert a stop mark for that once they are done.
+% The safe hash macros will be executed inside of an |\unexpanded| expansion
+% context, so they have to insert braces for that once they are done.
% Most of the tests which have to be executed will already be done, but we
% have to play safe if the hash doesn't show up in the hash list. Therefore we
% use some |\ekvc@mark|s and |\ekvc@stop| to throw errors if the hash isn't
@@ -1723,7 +1710,7 @@ and the derived files expkv-cs.pdf
% \begin{macrocode}
\protected\def\ekvc@setup@hashmacro#1%
{%
- \ekv@ifdefined{ekvc@hash@#1}{}%
+ \ekv@ifdefined{ekvc@fasthash@#1}{}%
{%
\begingroup
\edef\ekvc@tmp
@@ -1739,10 +1726,10 @@ and the derived files expkv-cs.pdf
####1%
{%
\unexpanded\expandafter{\csname ekvc@@safehash@#1\endcsname}%
- ####1\unexpanded{\ekvc@mark\ekv@zero}%
+ ####1\unexpanded{\ekvc@mark}{}%
\unexpanded\expandafter
{%
- \csname ekvc@hashmark@#1\endcsname\ekv@zero
+ \csname ekvc@hashmark@#1\endcsname{}%
\ekvc@mark{\ekvc@err@missing@hash{#1}}\ekvc@stop
}%
}%
@@ -1753,7 +1740,7 @@ and the derived files expkv-cs.pdf
####2####3\unexpanded{\ekvc@mark}####4####5%
\unexpanded{\ekvc@stop}%
{%
- ####4####2%
+ ####4{####2}%
}%
\long\gdef\unexpanded\expandafter
{\csname ekvc@fastsplithash@#1\endcsname}%
@@ -1800,10 +1787,10 @@ and the derived files expkv-cs.pdf
% \begin{macrocode}
\long\def\ekvcValue#1%
{%
- \romannumeral
+ \unexpanded
\ekv@ifdefined{ekvc@safehash@#1}%
{\csname ekvc@safehash@#1\endcsname}%
- {\ekvc@err@unknown@hash{#1}\@firstoftwo\ekv@zero}%
+ {\ekvc@err@unknown@hash{#1}\@firstoftwo{{}}}%
}
% \end{macrocode}
% \end{macro}
@@ -1867,9 +1854,9 @@ and the derived files expkv-cs.pdf
% without affecting performance by just defining the macro that would be build
% in that case. There is of course a downside to this, the error will not be
% thrown by |\ekvcValueFast| in three expansion steps. The safe hash variant
-% has to also stop the |\romannumeral| expansion.
+% has to also stop the |\unexpanded| expansion.
% \begin{macrocode}
-\long\def\ekvc@safehash@#1{\ekvc@err@empty@hash\ekv@zero}
+\long\def\ekvc@safehash@#1{\ekvc@err@empty@hash{}}
\long\def\ekvc@fasthash@#1\ekvc@stop{\ekvc@err@empty@hash}
\long\def\ekvc@safesplithash@#1#2{\ekvc@err@empty@hash#2{#1}{}}
\long\def\ekvc@fastsplithash@#1\ekvc@stop#2{\ekvc@err@empty@hash#2{#1}{}}
diff --git a/macros/generic/expkv-cs/expkv-cs.pdf b/macros/generic/expkv-cs/expkv-cs.pdf
index 50dd5124bf..1e19349f76 100644
--- a/macros/generic/expkv-cs/expkv-cs.pdf
+++ b/macros/generic/expkv-cs/expkv-cs.pdf
Binary files differ
diff --git a/macros/generic/expkv/README.md b/macros/generic/expkv/README.md
index adc545fd80..a402daa774 100644
--- a/macros/generic/expkv/README.md
+++ b/macros/generic/expkv/README.md
@@ -1,7 +1,7 @@
-------------------------------------------------------------------------------
# expkv -- an expandable key=val implementation
-Version 2021-05-24 v1.8
+Version 2021-06-03 v1.8a
Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
diff --git a/macros/generic/expkv/expkv.dtx b/macros/generic/expkv/expkv.dtx
index 37a67fc781..283cd0353d 100644
--- a/macros/generic/expkv/expkv.dtx
+++ b/macros/generic/expkv/expkv.dtx
@@ -529,7 +529,7 @@ and the derived files expkv.pdf
% sets are discarded, if the \key\ isn't found in any set an error will be
% thrown eventually. Note that the error messages are affected by the use of
% this macro, in particular, it isn't checked whether a |NoVal| key of the
-% same name is defined in order to throw a |value forbidden| error.
+% same name is defined in order to throw an |unwanted value| error.
% |\ekvdefunknown| and |\ekvredirectunknown| are mutually exclusive,
% you can't use both.
% \end{function}
@@ -547,7 +547,7 @@ and the derived files expkv.pdf
% |NoVal| keys. Again no prefixes are supported. Note that the error messages
% are affected by the use of this macro, in particular, it isn't checked
% whether a normal key of the same name is defined in order to throw a
-% |value forbidden| error.
+% |missing value| error.
% |\ekvdefunknownNoVal| and |\ekvredirectunknownNoVal| are mutually exclusive,
% you can't use both.
% \end{function}
@@ -694,12 +694,17 @@ and the derived files expkv.pdf
% the \key. There are no macros like these two contained in \expkv, you have
% to set them up yourself if you want to use |\ekvparse| (of course the names
% might differ). If you need the results of |\ekvparse| as the argument for
-% another macro, you should use |\expanded| as only then the input stream will
-% contain the output above:
+% another macro, you should use |\expanded|, or expand |\ekvparse| twice, as
+% only then the input stream will contain the output above:
% \begin{lstlisting}
% \expandafter\parse\expanded{\ekvparse\k\kv{foo = bar, key, baz={zzz}}}
% \end{lstlisting}
-% would expand to
+% or
+% \begin{lstlisting}
+% \expandafter\expandafter\expandafter
+% \parse\ekvparse\k\kv{foo = bar, key, baz={zzz}}
+% \end{lstlisting}
+% would both expand to
% \begin{lstlisting}
% \parse\kv{foo}{bar}\k{key}\kv{baz}{zzz}
% \end{lstlisting}
@@ -808,11 +813,12 @@ and the derived files expkv.pdf
% \meta{next}\marg{default}\marg{mandatory} (so the default will be used and
% the mandatory argument will be wrapped in braces).
% \end{function}
-% |\ekvoptarg| expands in exactly two steps and is alignment safe. It has its
-% limitations however. It can't tell the difference between |[| and |{[}|, so it
-% doesn't work if the mandatory argument is a single bracket. Also if the
-% optional argument should contain a nested closing bracket, the optional
-% argument has to use nested braces like so: |[{arg]ument}]|.
+% |\ekvoptarg| expands in exactly two steps, grabs all the arguments only at the
+% second expansion step, and is alignment safe. It has its limitations however.
+% It can't tell the difference between |[| and |{[}|, so it doesn't work if the
+% mandatory argument is a single bracket. Also if the optional argument should
+% contain a nested closing bracket, the optional argument has to use nested
+% braces like so: |[{arg]ument}]|.
% \example Say we have a macro that should take an optional argument defaulting
% to 1:
% \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
@@ -828,8 +834,9 @@ and the derived files expkv.pdf
% \meta{true}\marg{optional}\meta{mandatory} or \meta{false}\marg{mandatory}
% instead of placing a default value.
% \end{function}
-% |\ekvoptargTF| expands in exactly two steps and is alignment safe. It has the
-% same limitations as |\ekvoptarg|.
+% |\ekvoptargTF| expands in exactly two steps, grabs all the arguments only at
+% the second expansion step, and is alignment safe. It has the same limitations
+% as |\ekvoptarg|.
% \example Say we have a macro that should behave differently depending on
% whether there was an optional argument or not. This could be done with:
% \begin{lstlisting}[aboveskip=0pt,belowskip=0pt]
@@ -1207,7 +1214,7 @@ and the derived files expkv.pdf
% \file{expkv.tex} checks whether \eTeX\ and the |\expanded| primitive are
% available. If it isn't, an error will be thrown using |\errmessage|:
% \begin{lstlisting}
-% ! expkv Error: e-TeX required.
+% ! expkv Error: e-TeX and \expanded required.
% \end{lstlisting}
%
% \subsubsection{Defining Keys}
@@ -1547,8 +1554,8 @@ and the derived files expkv.pdf
% \begin{macro}{\ekvVersion,\ekvDate}
% We're on our first input, so lets store the version and date in a macro.
% \begin{macrocode}
-\def\ekvVersion{1.8}
-\def\ekvDate{2021-05-24}
+\def\ekvVersion{1.8a}
+\def\ekvDate{2021-06-03}
% \end{macrocode}
% \end{macro}
%
@@ -2689,30 +2696,28 @@ and the derived files expkv.pdf
\def\ekvoptarg#1#2{%
\endgroup
% \end{macrocode}
-% The real definition starts an expansion context after grabbing the arguments.
-% |#1| will be the next step, |#2| the default value, and |#3| might be an
-% opening bracket, or the mandatory argument. We check for the opening bracket,
-% if it is found grab the optional argument, else leave |#1{#2}| in the input
-% stream after ending the expansion context.
+% The real definition starts an expansion context and afterwards grabs the
+% arguments. |#1| will be the next step, |#2| the default value, and |#3| might
+% be an opening bracket, or the mandatory argument. We check for the opening
+% bracket, if it is found grab the optional argument, else leave |#1{#2}| in the
+% input stream after ending the expansion context.
% \begin{macrocode}
-\long\def\ekvoptarg##1##2##3%
+\def\ekvoptarg{\romannumeral#1\ekv@optarg@a}
+\long\def\ekv@optarg@a##1##2##3%
{%
- \romannumeral
- #1%
- \ekv@optarg@if\ekv@mark##3\ekv@mark\ekv@optarg\ekv@mark[\ekv@mark
+ \ekv@optarg@if\ekv@mark##3\ekv@mark\ekv@optarg@b\ekv@mark[\ekv@mark
#2%
\@firstofone{\ekv@zero##1}{##2}{##3}%
- }
+ }%
% \end{macrocode}
% The other variant of this will do roughly the same. Here, |#1| will be the
% next step if an optional argument is found, |#2| the next step else, and |#3|
% might be the opening bracket or mandatory argument.
% \begin{macrocode}
-\long\def\ekvoptargTF##1##2##3%
+\def\ekvoptargTF{\romannumeral#1\ekv@optargTF@a}
+\long\def\ekv@optargTF@a##1##2##3%
{%
- \romannumeral
- #1%
- \ekv@optarg@if\ekv@mark##3\ekv@mark\ekv@optargTF{##1}\ekv@mark[\ekv@mark
+ \ekv@optarg@if\ekv@mark##3\ekv@mark\ekv@optargTF@b{##1}\ekv@mark[\ekv@mark
#2%
\@firstofone{\ekv@zero##2}{##3}%
}
@@ -2720,9 +2725,10 @@ and the derived files expkv.pdf
% The two macros to grab the optional argument have to remove the remainder of
% the test and the wrong next step as well as grabbing the argument.
% \begin{macrocode}
-\long\def\ekv@optarg\ekv@mark[\ekv@mark\ifnum`##1\fi\@firstofone##2##3##4##5]%
+\long\def\ekv@optarg@b\ekv@mark[\ekv@mark\ifnum`##1\fi\@firstofone##2##3##4##5]%
{#2##2{##5}}
-\long\def\ekv@optargTF##1\ekv@mark[\ekv@mark\ifnum`##2\fi\@firstofone##3##4##5]%
+\long\def\ekv@optargTF@b
+ ##1\ekv@mark[\ekv@mark\ifnum`##2\fi\@firstofone##3##4##5]%
{#2\ekv@zero##1{##5}}
}
% \end{macrocode}
diff --git a/macros/generic/expkv/expkv.pdf b/macros/generic/expkv/expkv.pdf
index 1f9248c9ec..c72c22153a 100644
--- a/macros/generic/expkv/expkv.pdf
+++ b/macros/generic/expkv/expkv.pdf
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/README.md b/macros/latex/contrib/bjfuthesis/README.md
index 1be1a5d023..fa2538417a 100644
--- a/macros/latex/contrib/bjfuthesis/README.md
+++ b/macros/latex/contrib/bjfuthesis/README.md
@@ -1,7 +1,7 @@
# 北京林业大学 (BJFU) æ¯•ä¸šè®ºæ–‡æ¨¡æ¿ (LaTeX)
Copyright (C) 2021 Liu Changxin
-Version 1.0.0 (2021-05-30)
+Version 1.0.1 (2021-06-03)
## Abstract
The bjfuthesis class is a LaTeX document class intended for students in Beijing Forestry University (BJFU) to write their theses. It follows the thesis specification of Beijing Forestry University.
diff --git a/macros/latex/contrib/bjfuthesis/bjfuthesis.cls b/macros/latex/contrib/bjfuthesis/bjfuthesis.cls
index 5395edcc24..ed02764f98 100644
--- a/macros/latex/contrib/bjfuthesis/bjfuthesis.cls
+++ b/macros/latex/contrib/bjfuthesis/bjfuthesis.cls
@@ -41,6 +41,8 @@
\setlength\footskip{10mm}
\setlength\textwidth{155mm}
\setlength\oddsidemargin{4.6mm}
+\setlength{\fboxsep}{0pt}
+\setlength{\fboxrule}{1pt}
\setmainfont{Times New Roman}
\setCJKmainfont[AutoFakeBold]{SimSun}
\setCJKmonofont{SimSun}
diff --git a/macros/latex/contrib/bjfuthesis/example/contents/abstract.tex b/macros/latex/contrib/bjfuthesis/example/contents/abstract.tex
index 71627e7e3f..7e116d91e5 100644
--- a/macros/latex/contrib/bjfuthesis/example/contents/abstract.tex
+++ b/macros/latex/contrib/bjfuthesis/example/contents/abstract.tex
@@ -2,13 +2,13 @@
\begin{abstract}
éšç€åœ¨çº¿ç”µå½±æ•°é‡ä¸æ–­å¢žåŠ ï¼Œç”¨æˆ·é€‰æ‹©ç”µå½±çš„时间æˆæœ¬ä¸æ–­ä¸Šå‡ï¼Œå‡†ç¡®çš„推è算法æˆä¸ºäº†å¿…然è¦æ±‚。为解决ååŒè¿‡æ»¤æŽ¨è算法中的稀缺性问题与冷å¯åŠ¨é—®é¢˜ï¼Œç ”究人员用商å“属性或社交网络等信æ¯æ¥è¾…助推è算法。现有的将知识图谱作为辅助信æ¯çš„推è算法包括基于嵌入的方法和基于路径的方法,但这两ç§æ–¹æ³•å‡å­˜åœ¨ä¸€äº›ç¼ºé™·ï¼Œæ²¡æœ‰å……分有效地利用知识图谱中的相关信æ¯ï¼ŒæŽ¨è的准确度较低。
- 本文设计并实现了基于“涟漪网络â€çŸ¥è¯†å›¾è°±çš„推è算法。“涟漪网络â€ç®—法的核心是利用现实生活中的雨滴产生的涟漪在水é¢ä¸Šä¸æ–­æ‰©æ•£çš„æ€è·¯ï¼Œæ¥æ¨¡æ‹Ÿç”¨æˆ·å好的扩散。对于æ¯ä¸€ä¸ªç”¨æˆ·ï¼Œæ¶Ÿæ¼ªç½‘络将其过往å好作为知识图谱中的一个ç§å­é›†ï¼Œç„¶åŽæ²¿çŸ¥è¯†å›¾è°±ä¸­çš„关系路径ä¸æ–­åœ°æ‹“展用户的å好,进而å‘现基于等级划分的æŸä¸ªå€™é€‰ç‰©å“的潜在兴趣,其中多个“涟漪â€é‡å å½¢æˆçŸ¥è¯†å›¾è°±ä¸­çš„用户å好分布。该算法的实验结果和以往的CKEã€DKNã€PER等模型结果相比,表现出更优的性能。利用该算法,本文设计并实现了一个基于电影知识图谱的推è系统,该系统包括管ç†å‘˜ç”¨æˆ·å’Œæ™®é€šç”¨æˆ·ï¼Œç®¡ç†å‘˜èƒ½å¤Ÿæ–°å¢žã€ç¼–辑和删除电影与用户,普通用户能够æµè§ˆã€æ”¶è—与购买电影。该系统å¯ä»¥ä¸ºç”¨æˆ·æ供一个高效的电影推è功能,方便用户选择满足自己å好的电影。
+ 本文实现了基于“涟漪网络â€çŸ¥è¯†å›¾è°±çš„推è算法。“涟漪网络â€ç®—法的核心是利用现实生活中雨滴产生的涟漪在水é¢ä¸Šä¸æ–­æ‰©æ•£çš„æ€è·¯ï¼Œæ¥æ¨¡æ‹Ÿç”¨æˆ·å好的扩散。对于æ¯ä¸€ä¸ªç”¨æˆ·ï¼Œæ¶Ÿæ¼ªç½‘络将其过往å好作为知识图谱中的一个ç§å­é›†ï¼Œç„¶åŽæ²¿çŸ¥è¯†å›¾è°±ä¸­çš„关系路径ä¸æ–­åœ°æ‹“展用户å好,进而å‘现该用户对æŸä¸ªå€™é€‰ç‰©å“以等级划分的潜在兴趣,其中多个“涟漪â€é‡å å½¢æˆçŸ¥è¯†å›¾è°±ä¸­çš„用户å好分布。该算法的实验结果和以往的CKEã€DKNã€PER等模型结果相比,表现出更优的性能。利用该算法,本文设计并实现了一个基于知识图谱的电影推è系统,该系统包括管ç†å‘˜ç”¨æˆ·å’Œæ™®é€šç”¨æˆ·ï¼Œç®¡ç†å‘˜èƒ½æ–°å¢žã€ç¼–辑和删除电影与用户,普通用户能æµè§ˆã€æ”¶è—与购买电影。该系统å¯ä»¥é«˜æ•ˆå‡†ç¡®åœ°ä¸ºç”¨æˆ·æŽ¨è电影,方便用户选择满足自己å好的电影。
\end{abstract}
\keywordscn{知识图谱,推è系统,涟漪网络,用户å好,电影商店}
\chapter*{Abstract}
\begin{abstract}
As the number of online movies continues to increase and the time cost for users to choose movies continues to rise, accurate recommendation algorithms have become an inevitable requirement. In order to address the scarcity and cold start problem of collaborative filtering, researchers usually make use of side information, such as product attributes or social networks as side information to assist the recommendation. The existing recommendation algorithms that use knowledge graph as side information include embedding-based methods and path-based methods, but both methods have some shortcomings. They do not make full and effective use of the relevant information in the knowledge graph, and the accuracy of recommendation is relatively low.
- This paper designs and implements a recommendation algorithm based on Ripple Network. The core of the Ripple Network algorithm is to use the idea that the ripples produced by raindrops in real life continue to spread on the water surface to stimulate the spread of user preferences. For each user, Ripple Network uses its past preference as a seed set in the knowledge graph, and then continuously expands the user’s preferences along the relationship path in the knowledge graph, and then discovers his hierarchical potential interests concerning a certain candidate item. Multiple ``ripples" overlap to form the user preference distribution in the knowledge graph. Compared with previous model results of CKE, DKN, PER, etc., the experimental results of this algorithm show better performance. Using this algorithm, this paper designs and implements a recommendation system based on the movie knowledge graph. The system includes administrator users and general users. The administrator can add, edit and delete movies and users, and general users can browse, collect and purchase films. The system can provide users with an efficient movie recommendation function, which is convenient for users to choose movies that suit their preferences.
+ This paper implements a recommendation algorithm based on Ripple Network. The core of the Ripple Network algorithm is to use the idea that the ripples produced by raindrops in real life continue to spread on the water surface to stimulate the spread of user preferences. For each user, Ripple Network uses its past preference as a seed set in the knowledge graph, and then continuously expands the user’s preferences along the relationship path in the knowledge graph, and then discovers his hierarchical potential interests concerning a certain candidate item. Multiple ``ripples" overlap to form the user preference distribution in the knowledge graph. Compared with previous model results of CKE, DKN, PER, etc., the experimental results of this algorithm show better performance. Using this algorithm, this paper designs and implements a recommendation system based on the movie knowledge graph. The system includes administrator users and general users. The administrator can add, edit and delete movies and users, and general users can browse, collect and purchase films. The system can provide users with an efficient movie recommendation function, which is convenient for users to choose movies that suit their preferences.
\end{abstract}
\keywordsen{Knowledge graph, recommendation system, Ripple Network, user preferences, movie store}
diff --git a/macros/latex/contrib/bjfuthesis/example/contents/acknowledge.tex b/macros/latex/contrib/bjfuthesis/example/contents/acknowledge.tex
index bfccc876b4..73f28999e0 100644
--- a/macros/latex/contrib/bjfuthesis/example/contents/acknowledge.tex
+++ b/macros/latex/contrib/bjfuthesis/example/contents/acknowledge.tex
@@ -1,5 +1,5 @@
\chapter{致谢}
-论文的撰写工作已ç»æŽ¥è¿‘尾声,在本文的撰写过程中我è¦ç‰¹åˆ«æ„Ÿè°¢æŽå†¬æ¢…è€å¸ˆçš„莅临指导。在毕业论文完æˆæœŸé—´ï¼ŒæŽå†¬æ¢…è€å¸ˆå¤šæ¬¡å¯¹æˆ‘的毕业论文æ出æ„è§ä¸Žå»ºè®®ã€‚åŒæ—¶ï¼Œå¥¹å¤šæ¬¡è¯¢é—®è®ºæ–‡çš„撰写进度,更是体现了她对学生无微ä¸è‡³çš„关怀。æ¯æ¯å½“我在论文编写中é‡åˆ°è‰°æ·±æ™¦æ¶©ä¹‹å¤„时,她都能ä¸å¤±æ—¶æœºè€Œæ°åˆ°å¥½å¤„地给予我最有用的æ示与建议,使我的毕业论文得以顺利完æˆã€‚
+论文的撰写工作已ç»æŽ¥è¿‘尾声,在本文的撰写过程中我è¦ç‰¹åˆ«æ„Ÿè°¢æŽå†¬æ¢…è€å¸ˆçš„指导。在毕业论文完æˆæœŸé—´ï¼ŒæŽå†¬æ¢…è€å¸ˆå¤šæ¬¡å¯¹æˆ‘的毕业论文æ出æ„è§ä¸Žå»ºè®®ã€‚åŒæ—¶ï¼Œå¥¹å¤šæ¬¡è¯¢é—®è®ºæ–‡çš„撰写进度,更是体现了她对学生无微ä¸è‡³çš„关怀。æ¯æ¯å½“我在论文编写中é‡åˆ°è‰°æ·±æ™¦æ¶©ä¹‹å¤„时,她都能ä¸å¤±æ—¶æœºè€Œæ°åˆ°å¥½å¤„地给予我最有用的æ示与建议,使我的毕业论文得以顺利完æˆã€‚
其次,我è¦æ„Ÿè°¢æˆ‘本科期间曾ç»ä¸ºæˆ‘上课的所有è€å¸ˆã€‚比如,由我的概率论è€å¸ˆä¸ºæˆ‘打下的数学基础æ‰ä½¿æˆ‘得以用最大åŽéªŒæ¦‚率估计法完æˆåµŒå…¥è¡¨ç¤ºçš„学习算法,è“æµ·æ´‹è€å¸ˆä»»æ•™çš„网站设计课程是我完æˆç”µå½±æŽ¨è系统的基石。总之,我è¦æ„Ÿè°¢å¤§å­¦å››å¹´æ¥æ‰€æœ‰è€å¸ˆå­œå­œä¸å€¦çš„谆谆教诲与夜以继日的无ç§å¥‰çŒ®ã€‚
diff --git a/macros/latex/contrib/bjfuthesis/example/contents/mainbody.tex b/macros/latex/contrib/bjfuthesis/example/contents/mainbody.tex
index 055e7b1de6..2b8ff0cb50 100644
--- a/macros/latex/contrib/bjfuthesis/example/contents/mainbody.tex
+++ b/macros/latex/contrib/bjfuthesis/example/contents/mainbody.tex
@@ -1,53 +1,51 @@
\chapter{绪论}
\section{研究背景与æ„义}
-一直以æ¥ï¼Œç”µå½±æŽ¨è都是在线æµåª’体播放平å°å‘展中的一个é‡è¦é—®é¢˜ï¼Œåšå¥½ç”µå½±æŽ¨èå¯ä»¥ä½¿ç”¨æˆ·èƒ½åœ¨æµ·é‡ç”µå½±ä¸­é€‰æ‹©æ»¡è¶³å…¶å好的电影,æ高用户满æ„度,从而æ高在线æµåª’体播放平å°çš„æµé‡è½¬åŒ–率åŠè´­ä¹°çŽ‡ï¼Œæ高在线æµåª’体播放平å°çš„ç»æµŽæ”¶ç›Šã€‚è¿‘å¹´æ¥ï¼Œéšç€ç”µå½±è¡Œä¸šåŠäº’è”网行业的ä¸æ–­å‘展,在线电影数é‡ä¸æ–­å¢žåŠ ï¼Œç”¨æˆ·åœ¨æµ·é‡ç”µå½±ä¸­é€‰æ‹©æ»¡è¶³å…¶å好的电影的难度ä¸æ–­ä¸Šå‡ï¼Œæ€§èƒ½ä¼˜å¼‚的推è算法æˆä¸ºäº†å¿…然è¦æ±‚。自从在线æµåª’体播放平å°å‡ºçŽ°ä»¥æ¥ï¼Œäººä»¬ä¾¿å¼€å§‹å°è¯•åˆ©ç”¨æŽ¨è算法æ¥æ高平å°æµé‡è½¬åŒ–率,出现了诸如ååŒè¿‡æ»¤çš„推è算法\cite{su2009survey}。但这些算法未能解决数æ®ç¨€ç¼ºæ€§åŠå†·å¯åŠ¨é—®é¢˜ï¼Œå¹¶ä¸èƒ½ä¸ºåœ¨çº¿æµåª’体播放平å°æ供良好的推è性能。为此,人们å°è¯•å°†è¾…助信æ¯èžå…¥æŽ¨è算法中以解决数æ®ç¨€ç¼ºæ€§åŠå†·å¯åŠ¨é—®é¢˜\cite{sun2017collaborative},并æ高推è性能。
+一直以æ¥ï¼Œç”µå½±æŽ¨è都是在线æµåª’体播放平å°å‘展中的一个é‡è¦é—®é¢˜ï¼Œåšå¥½ç”µå½±æŽ¨èå¯ä»¥ä½¿ç”¨æˆ·èƒ½åœ¨æµ·é‡ç”µå½±ä¸­é€‰æ‹©æ»¡è¶³å…¶å好的电影,æ高用户满æ„度,从而æ高在线æµåª’体播放平å°çš„æµé‡è½¬åŒ–率åŠè´­ä¹°çŽ‡ï¼Œå¹¶æœ€ç»ˆæ高在线æµåª’体播放平å°çš„ç»æµŽæ”¶ç›Šã€‚è¿‘å¹´æ¥ï¼Œéšç€ç”µå½±è¡Œä¸šåŠäº’è”网行业的ä¸æ–­å‘展,在线电影数é‡ä¸æ–­å¢žåŠ ï¼Œç”¨æˆ·åœ¨æµ·é‡ç”µå½±ä¸­é€‰æ‹©æ»¡è¶³å…¶å好的电影的难度ä¸æ–­ä¸Šå‡ï¼Œæ€§èƒ½ä¼˜å¼‚的推è算法æˆä¸ºäº†å¿…然è¦æ±‚。自从在线æµåª’体播放平å°å‡ºçŽ°ä»¥æ¥ï¼Œäººä»¬ä¾¿å¼€å§‹å°è¯•åˆ©ç”¨æŽ¨è算法æ¥æ高平å°æµé‡è½¬åŒ–率,出现了诸如ååŒè¿‡æ»¤çš„推è算法\cite{su2009survey}。但这些算法未能解决数æ®ç¨€ç¼ºæ€§åŠå†·å¯åŠ¨é—®é¢˜ï¼Œå¹¶ä¸èƒ½ä¸ºåœ¨çº¿æµåª’体播放平å°æ供良好的推è性能。为此,人们å°è¯•å°†è¾…助信æ¯èžå…¥æŽ¨è算法中以解决数æ®ç¨€ç¼ºæ€§åŠå†·å¯åŠ¨é—®é¢˜\cite{sun2017collaborative},并æ高推è性能。
-知识图谱,一ç§ç»“构化的语义知识库,被用于迅速æ供对物ç†ä¸–界中的概念和相互关系的æ述,为解决推è问题æ供了新的方法\cite{zou2020survey},近年æ¥å—到国内外研究人员的广泛关注,æˆä¸ºäº†å½“å‰çš„研究热点。知识图谱通过对å¤æ‚的原始数æ®è¿›è¡ŒåŠ å·¥ã€å¤„ç†åŠæ•´åˆï¼Œè½¬åŒ–æˆç®€å•å¯é ã€æ¸…晰明了的“实体,关系,实体â€ä¸‰å…ƒç»„,汇èšäº†å¤§é‡çš„知识信æ¯ï¼Œä»Žè€Œèƒ½å®žçŽ°åŸºäºŽçŸ¥è¯†ä¿¡æ¯çš„å“应和推ç†ã€‚
+知识图谱是一ç§ç»“构化的语义知识库,被用于迅速æ供对物ç†ä¸–界中的概念和相互关系的æ述,为解决推è问题æ供了新的方法\cite{zou2020survey},近年æ¥å—到国内外研究人员的广泛关注,æˆä¸ºäº†å½“å‰çš„研究热点。知识图谱通过对å¤æ‚的原始数æ®è¿›è¡ŒåŠ å·¥ã€å¤„ç†åŠæ•´åˆï¼Œè½¬åŒ–æˆç®€å•å¯é ã€æ¸…晰明了的“实体,关系,实体â€ä¸‰å…ƒç»„,汇èšäº†å¤§é‡çš„知识信æ¯ï¼Œä»Žè€Œèƒ½å®žçŽ°åŸºäºŽçŸ¥è¯†ä¿¡æ¯çš„å“应和推ç†ã€‚
知识图谱常被用于作为辅助信æ¯æ·»åŠ è‡³æŽ¨è算法中以æ高推è的准确性,这已是当å‰çš„研究焦点。
-è¿‘å¹´æ¥ï¼Œéšç€åœ¨çº¿æµåª’体播放平å°çš„å‘展,电影推è系统应è¿è€Œç”Ÿï¼Œå®ƒä½œä¸ºçŽ°ä»£ä¿¡æ¯æŠ€æœ¯ä¸Žä¼ ç»Ÿç”µå½±äº§ä¸šç›¸ç»“åˆçš„产物,对æµåª’体播放平å°çš„用户体验起ç€è‡³å…³é‡è¦çš„作用,其å¯å¤§å¹…度å‡å°‘用户寻找满足其å好电影的时间,并æ高用户点击率与购买率,从而æ高æµåª’体播放平å°çš„ç»æµŽæ”¶ç›Šã€‚电影推è系统能为用户推è其感兴趣的电影,而å‡å°‘对用户ä¸æ„Ÿå…´å†…容的显示,从而满足用户需求。但是,目å‰ç½‘络上ç»å¤§å¤šæ•°çš„电影推è系统都使用传统的基于ååŒè¿‡æ»¤çš„推è算法,未能有效利用知识图谱等辅助信æ¯ï¼Œè¿”回给用户的推è结果中包å«å¤§é‡ç”¨æˆ·ä¸æ„Ÿå…´è¶£çš„电影,åŒæ—¶ï¼Œå´å°†ä¸€äº›æœ¬åº”推è给用户的ã€ç”¨æˆ·æ„Ÿå…´è¶£çš„电影丢弃了。造æˆè¿™ä¸€é—®é¢˜çš„主è¦åŽŸå› ä¾¿æ˜¯å¯¹äºŽæ–°åŠ å…¥çš„无用户评分的电影以åŠæ–°æ³¨å†Œçš„用户推è算法缺少相关信æ¯ã€‚
+è¿‘å¹´æ¥ï¼Œéšç€åœ¨çº¿æµåª’体播放平å°çš„å‘展,电影推è系统应è¿è€Œç”Ÿï¼Œå®ƒä½œä¸ºçŽ°ä»£ä¿¡æ¯æŠ€æœ¯ä¸Žä¼ ç»Ÿç”µå½±äº§ä¸šç›¸ç»“åˆçš„产物,对æµåª’体播放平å°çš„用户体验起ç€è‡³å…³é‡è¦çš„作用,其å¯å¤§å¹…度å‡å°‘用户寻找满足其å好电影的时间,并æ高用户点击率与购买率,从而æ高æµåª’体播放平å°çš„ç»æµŽæ”¶ç›Šã€‚电影推è系统能为用户推è其感兴趣的电影,而å‡å°‘对用户ä¸æ„Ÿå…´è¶£å†…容的显示,从而满足用户需求。但是,目å‰ç½‘络上ç»å¤§å¤šæ•°çš„电影推è系统都使用传统的基于ååŒè¿‡æ»¤çš„推è算法,未能有效利用知识图谱等辅助信æ¯ï¼Œè¿”回给用户的推è结果中包å«å¤§é‡ç”¨æˆ·ä¸æ„Ÿå…´è¶£çš„电影,此外,还将一些本应推è给用户的ã€ç”¨æˆ·æ„Ÿå…´è¶£çš„电影丢弃了。造æˆè¿™ä¸€é—®é¢˜çš„主è¦åŽŸå› æ˜¯æŽ¨è算法缺少有关新加入的无用户评分的电影以åŠæ–°æ³¨å†Œçš„用户的信æ¯ã€‚
-对于海é‡çš„电影数æ®ï¼Œä¸ºäº†å®žçŽ°å‡†ç¡®åœ°æŽ¨è给用户其感兴趣的电影,传统的基于ååŒè¿‡æ»¤çš„推è算法是远远满足了ä¸ç”¨æˆ·éœ€æ±‚的,特别是对新注册用户,推è的准确度无法得到ä¿è¯ã€‚所以,本文旨在以知识图谱作为辅助信æ¯ï¼Œæž„建一个åˆé€‚的电影推è系统,并利用知识图谱中包å«çš„丰富的辅助信æ¯ï¼Œæœ€ç»ˆå®žçŽ°ä¸€ä¸ªç”µå½±æŽ¨è系统,为用户æ供有效的ã€å‡†ç¡®çš„电影推è,从而æ高用户满æ„度,æ高平å°æ”¶ç›Šã€‚
+对于海é‡çš„电影数æ®ï¼Œä¸ºäº†å®žçŽ°å‡†ç¡®åœ°æŽ¨è给用户其感兴趣的电影,基于ååŒè¿‡æ»¤çš„传统推è算法是满足了ä¸ç”¨æˆ·éœ€æ±‚的,特别是对新注册用户,推è的准确度无法得到ä¿è¯ã€‚所以,本文旨在以知识图谱作为辅助信æ¯ï¼Œæž„建一个åˆé€‚的电影推è系统,并利用知识图谱中包å«çš„丰富的辅助信æ¯ï¼Œæœ€ç»ˆå®žçŽ°ä¸€ä¸ªç”µå½±æŽ¨è系统,为用户æ供有效的ã€å‡†ç¡®çš„电影推è,从而æ高用户满æ„度,æ高平å°æ”¶ç›Šã€‚
\section{国内外研究现状}
\subsection{推è系统研究现状}
-推è系统由Jussi Karlgren于哥伦比亚大学在一份技术报告中作为“数字书架â€è¢«é¦–次æåŠ\cite{karlgren1990algebra},而åŽè‡ª1994年起被在SICSçš„Jussi Karlgren\cite{karlgren1994newsgroup}ã€ç”±Pattie Maes于MIT领导的研究团队ã€ä½äºŽBellcoreçš„Will Hill以åŠåŒæ ·ä½äºŽMITçš„Paul Resnick规模实现并在技术性报告åŠå‡ºç‰ˆç‰©ä¸­èµ·ä½œç”¨ï¼Œä»–们与GroupLens的工作被授予了2010å¹´ACM软件系统奖。
+推è系统由Jussi Karlgren于哥伦比亚大学在一份技术报告中以“数字书架â€çš„å称被首次æåŠ\cite{karlgren1990algebra},而åŽè‡ª1994年起被在SICSçš„Jussi Karlgren\cite{karlgren1994newsgroup}ã€ç”±Pattie Maes于MIT领导的研究团队ã€ä½äºŽBellcoreçš„Will Hill以åŠåŒæ ·ä½äºŽMITçš„Paul Resnick大规模实现并在技术性报告åŠå‡ºç‰ˆç‰©å¤§é‡å‡ºçŽ°ï¼Œä»¥ä¸Šäººå‘˜ä¸ŽGroupLens的工作被授予了2010å¹´ACM软件系统奖。
-自从在90年代中期首批有关ååŒè¿‡æ»¤çš„论文出现åŽæŽ¨è系统便æˆä¸ºäº†é‡è¦çš„研究领域。在工业界与学术界在该世纪有众多建设新的推è系统的工作。由于该领域包å«ä¼—多的研究问题åŠå…¶èƒ½å¸®åŠ©ç”¨æˆ·è§£å†³åœ¨è¿‡å¤šä¿¡æ¯ä¸­æ供个性化推è的实际应用,因此研究人员对该领域的兴趣ä¾æ—§å¾ˆé«˜ã€‚
+自从在90年代中期首批有关ååŒè¿‡æ»¤çš„论文出现åŽæŽ¨è系统便æˆä¸ºäº†é‡è¦çš„研究领域。工业界与学术界出现了众多有关建设新的推è系统的工作。由于该领域包å«ä¼—多的研究问题åŠå…¶èƒ½å¸®åŠ©ç”¨æˆ·è§£å†³åœ¨è¿‡å¤šä¿¡æ¯ä¸­æ供个性化推è的实际应用,因此研究人员对该领域的兴趣ä¾æ—§å¾ˆé«˜ã€‚
-当å‰ï¼ŒæŽ¨è列表在推è系统将其产生的过程中的方å¼ä¸»è¦æœ‰ä¸¤ç§ï¼šåŸºäºŽå†…容推è与ååŒè¿‡æ»¤\cite{jafarkarimi2012naive}。基于内容推è的算法使用一些有关物å“的离散特å¾æ¥æŽ¨è出拥有相似性的物å“。ååŒè¿‡æ»¤æ–¹æ³•æ ¹æ®ç”¨æˆ·çš„历å²è¡Œä¸ºï¼ˆè¯¸å¦‚其评价过的ã€ç‚¹å‡»è¿‡çš„ã€è´­ä¹°è¿‡çš„商å“等)并与其他用户的相似决策结åˆèµ·æ¥å»ºç«‹æ¨¡å½¢ã€‚è¿™ç§ç®—法å¯ä»¥è¢«ç”¨äºŽé¢„测用户对物å“çš„å好程度。这两ç§æ–¹æ³•å¸¸å¸¸è¢«åŒæ—¶ä½¿ç”¨ã€‚
+当å‰ï¼ŒæŽ¨è列表在推è系统将其产生的过程中的方å¼ä¸»è¦æœ‰ä¸¤ç§ï¼šåŸºäºŽå†…容推è与ååŒè¿‡æ»¤æŽ¨è\cite{jafarkarimi2012naive}。基于内容推è的算法使用一些有关物å“的离散特å¾æ¥æŽ¨è出拥有相似性的物å“。ååŒè¿‡æ»¤æ–¹æ³•æ ¹æ®ç”¨æˆ·çš„历å²è¡Œä¸ºï¼ˆè¯¸å¦‚其评价过的ã€ç‚¹å‡»è¿‡çš„ã€è´­ä¹°è¿‡çš„商å“等)并与其他用户的相似决策结åˆæ¥å»ºç«‹æ¨¡å½¢ï¼Œè¿™ç§ç®—法å¯ä»¥è¢«ç”¨äºŽé¢„测用户对物å“çš„å好程度。这两ç§æ–¹æ³•å¸¸å¸¸è¢«åŒæ—¶ä½¿ç”¨ã€‚
-此外,近æ¥æœ‰è¶Šæ¥è¶Šå¤šçš„推è算法被æ出:多准则推è系统。多准则推è系统å¯ä»¥è¢«å®šä¹‰ä¸ºåŒ…å«å¤šæ ‡å‡†å好信æ¯çš„推è系统,而ä¸æ˜¯æž„建基于å•ä¸€å‡­æ®çš„推è系统。风险感知推è系统,现存推è系统的主è¦æ–¹æ³•èšç„¦äºŽåŸºäºŽä¸Šä¸‹æ–‡ä¿¡æ¯æŽ¨è最相关内容给用户,而没有将ä¸ç›¸å…³å†…容打扰用户的推è风险纳入考é‡ã€‚考虑推é€æŽ¨è内容给用户而打扰用户的风险在æŸäº›æƒ…况下是需è¦è€ƒè™‘的,比如,在一个专业会议上ã€åœ¨å‡Œæ™¨æˆ–是在晚上。而此类推è算法为该问题æ供了解决方案。
+此外,近æ¥æœ‰è¶Šæ¥è¶Šå¤šçš„推è算法被æ出:多准则推è系统。多准则推è系统å¯ä»¥è¢«å®šä¹‰ä¸ºåŒ…å«å¤šæ ‡å‡†å好信æ¯çš„推è系统,而ä¸æ˜¯æž„建基于å•ä¸€å‡­æ®çš„推è系统。风险感知推è系统,现存推è系统的主è¦æ–¹æ³•èšç„¦äºŽåŸºäºŽä¸Šä¸‹æ–‡ä¿¡æ¯æŽ¨è最相关内容给用户,而没有将ä¸ç›¸å…³å†…容打扰用户的推è风险考虑在内。考虑推é€æŽ¨è内容给用户而造æˆæ‰“扰用户的风险在æŸäº›æƒ…况下是需è¦è€ƒè™‘的,比如,在一个工作会议上或是在凌晨或是在晚上。而此类推è算法为该问题æ供了解决方案。
-现实中,大é‡ä½¿ç”¨çš„往往是混åˆæŽ¨è系统。åŒæ—¶ç»“åˆååŒè¿‡æ»¤ã€åŸºäºŽå†…容过滤以åŠå…¶ä»–方法的混åˆæ–¹æ³•çŽ°åœ¨è¢«å¤§é‡ä½¿ç”¨ã€‚æ•°ç§ä¸åŒæ–¹æ³•æ²¡æœ‰ä»»ä½•ç†ç”±ä¸èƒ½è¢«ç»“åˆèµ·æ¥ã€‚æ··åˆæŽ¨èå¯ä»¥åœ¨å¤šç§æ–¹å¼ä¸‹è¢«å®žçŽ°ï¼šå°†åŸºäºŽå†…容的和基于ååŒæ»¤çš„预测被分开实现å†å°†ä»–们将åˆèµ·æ¥ï¼Œäº¦æˆ–是将两ç§æ–¹æ³•ç»Ÿä¸€åˆ°åŒä¸€æ¨¡åž‹ä¸­ã€‚
+现实中,大é‡ä½¿ç”¨çš„往往是混åˆæŽ¨è系统。其åŒæ—¶ç»“åˆäº†ååŒè¿‡æ»¤ã€åŸºäºŽå†…容过滤以åŠå…¶ä»–方法,这ç§æ··åˆå¼çš„推è方法现在被大é‡ä½¿ç”¨ã€‚æ··åˆæŽ¨èå¯ä»¥åœ¨å¤šç§æ–¹å¼ä¸‹è¢«å®žçŽ°ï¼šå°†åŸºäºŽå†…容的和基于ååŒæ»¤çš„预测模型被分开实现å†å°†ä»–们结åˆèµ·æ¥ï¼Œäº¦æˆ–是将两ç§æ–¹æ³•ç»Ÿä¸€åˆ°åŒä¸€æ¨¡åž‹ä¸­å¹¶ä¸€åŒå®žçŽ°ã€‚
\subsection{知识图谱的研究现状}
-在知识表示与知识推ç†ä¸­ï¼ŒçŸ¥è¯†å›¾è°±æ˜¯ä¸€ä¸ªä½¿ç”¨å›¾ç»“æž„çš„æ•°æ®æ¨¡åž‹æˆ–拓扑结构的知识库æ¥æ•´åˆæ•°æ®ã€‚知识图谱常被用æ¥å­˜å‚¨å†…连接的对实体的æ述——对象ã€äº‹ä»¶ã€æƒ…形或抽象概念,并包括自由形å¼çš„语义。
+在知识表示与知识推ç†ä¸­ï¼ŒçŸ¥è¯†å›¾è°±æ˜¯ä¸€ä¸ªä½¿ç”¨å›¾ç»“æž„çš„æ•°æ®æ¨¡åž‹æˆ–拓扑结构的知识库。知识图谱常被用æ¥å­˜å‚¨åŸºäºŽå†…连接的对实体的æ述——对象ã€äº‹ä»¶ã€æƒ…形或抽象概念,并包括自由形å¼çš„语义。
-该è¯æ±‡æ—©åœ¨1972年在一个有关构建模å—化指令系统的课程中被æ出。在80年代末,åå«çŸ¥è¯†å›¾è°±çš„项目主è¦èšç„¦äºŽè¯­ä¹‰ç½‘络的设计。在2007年,DBpediaå’ŒFreebase作为基于图的有关常识的知识库被创立。DBpedia致立于从Wikipedia中抽å–æ•°æ®ï¼Œè€ŒFreebase也包å«ä¸€ç³»åˆ—公开的数æ®é›†ã€‚它们两者都未将自己称为“知识图谱â€ä½†æž„建并æ述了其相关概念。
+该è¯æ±‡æœ€æ—©åœ¨1972年于一个有关构建模å—化指令系统的课程中被æ出。在80年代末,命å为知识图谱的项目主è¦èšç„¦äºŽè¯­ä¹‰ç½‘络的设计。在2007年,DBpediaå’ŒFreebase作为基于图的常识性知识库被创立。DBpedia致力于从Wikipedia中抽å–æ•°æ®ï¼Œè€ŒFreebase也包å«ä¸€ç³»åˆ—公开的数æ®é›†ã€‚它们两者都未将自己称为“知识图谱â€ï¼Œä½†å®žåˆ™æž„建并æ述了有关知识图谱的相关概念。
-在2012年,谷歌正å¼æ出了知识图谱的概念\cite{singhal2012introducing},建立于DBpediaå’ŒFreebase以åŠå…¶ä»–æ•°æ®æºçš„基础之上。他们åŽæ¥å°†åŒ…括CIA World Factbook, Wikidataå’ŒWikipedia的网站的RDFa, Microdata, JSON-LD内容从它们的索引网站上抽å–并纳入知识图谱。与知识图谱相关è”的实体与关系类型使用æ¥è‡ªscheme.org的术语被更广泛地被组织起æ¥ã€‚
+在2012年,谷歌正å¼æ出了知识图谱的概念\cite{singhal2012introducing},并构建了基于DBpediaå’ŒFreebase以åŠå…¶ä»–æ•°æ®æºçš„谷歌知识图谱。他们åŽæ¥å°†åŒ…括CIA World Factbook, Wikidataå’ŒWikipedia的网站的RDFa, Microdata, JSON-LD内容从它们的索引网站上抽å–并纳入知识图谱。与知识图谱相关è”的实体与关系类型使用æ¥è‡ªscheme.org的术语被更广泛地组织了起æ¥ã€‚
-谷歌的知识图谱éžå¸¸é‡è¦çš„一å—是“自由库â€ï¼Œä¸€ä¸ªå¤§åž‹çš„ååŒå·¥ä½œçŸ¥è¯†åº“。“自由库â€ä½¿ç”¨å›¾ç»“构作为其数æ®ç»“构,å¯ä»¥å°†å…¶è§†ä½œä¸€ä¸ªæœ‰å‘图。谷歌知识图谱模型便是谷歌团队利用其在“自由库â€ä¹‹ä¸Šçš„技术积累开å‘出æ¥çš„\cite{漆桂林2017知识图谱研究进展}。
+谷歌知识图谱中éžå¸¸é‡è¦çš„一项是“自由库â€ï¼Œå®ƒæ˜¯ä¸€ä¸ªå¤§åž‹çš„ååŒå·¥ä½œçŸ¥è¯†åº“。“自由库â€ä½¿ç”¨å›¾ç»“构作为其数æ®ç»“构,å¯ä»¥å°†å…¶è§†ä½œä¸€ä¸ªæœ‰å‘图。谷歌知识图谱模型便是谷歌团队利用其在“自由库â€ä¹‹ä¸Šçš„技术积累开å‘出æ¥çš„\cite{漆桂林2017知识图谱研究进展}。
-自此,数个大型跨国公å¸å¼€å§‹åˆ©ç”¨å®ƒä»¬çš„知识图谱,很快知识图谱æµè¡Œèµ·æ¥ã€‚
-
-在2019年,IEEE将其关于“大数æ®â€å’Œâ€œæ•°æ®æŒ–掘与智能计算â€çš„年度国际会议èžå…¥æœ‰å…³çŸ¥è¯†å›¾è°±çš„国际会议。
+自此,数个大型跨国公å¸å¼€å§‹åˆ©ç”¨å®ƒä»¬çš„知识图谱,很快知识图谱æµè¡Œèµ·æ¥ï¼Œæœ‰å…费的知识图谱,如DBpediaå’ŒNELL,以åŠå•†ä¸šæ€§è´¨çš„知识图谱,如谷歌知识图谱和Microsoft Satori。这些知识图谱被æˆåŠŸåº”用于问答系统ã€è¯å‘é‡åµŒå…¥ä¸Žæ–‡å­—分类等。在2019年,IEEE将其关于“大数æ®â€å’Œâ€œæ•°æ®æŒ–掘与智能计算â€çš„年度国际会议èžå…¥æœ‰å…³çŸ¥è¯†å›¾è°±çš„国际会议。
以上是知识图谱å‘展的主è¦è¿›ç¨‹ã€‚
-知识图谱一般表示为三元组的形å¼ï¼Œå³G=(h,r,t),其中G为知识图谱,hå’Œt是知识库中的实体集åˆï¼Œåˆ†åˆ«ä¸ºä¸‰å…ƒç»„的头结点与尾节点\cite{å¾å¢žæž—2016知识图谱技术综述}。
+知识图谱一般表示为三元组的形å¼ï¼Œå³$G=(h,r,t)$,其中$G$为知识图谱,$h$å’Œ$t$是知识库中的实体集åˆï¼Œåˆ†åˆ«ä¸ºä¸‰å…ƒç»„的头结点与尾节点\cite{å¾å¢žæž—2016知识图谱技术综述}。知识图谱也å¯ä»¥çœ‹ä½œæ˜¯ä¸€ç§ç»“点对应实体ã€è¾¹å¯¹åº”关系的有å‘异构图。
-ç›®å‰çŸ¥è¯†å›¾è°±çš„构建过程中主è¦ä½¿æœ‰å®šä¹‰å±‚次学习的æ€æƒ³åŠäº‹å®žå­¦ä¹ çš„æ€æƒ³ç­‰æ–¹æ³•ã€‚
+ç›®å‰çŸ¥è¯†å›¾è°±çš„构建过程中主è¦ä½¿ç”¨äº†å®šä¹‰å±‚次学习åŠäº‹å®žå­¦ä¹ ã€‚
定义层次学习是通过使用机器学习等技术,从文字ã€å›¾ç‰‡ç­‰ä¿¡æ¯ä¸­æå–知识表达中的定义,并确定其上下文信æ¯ã€‚而知识图谱本质上是属于一ç§ç²¾ç‚¼çš„异构信æ¯ç½‘络。利用定义层次学习å¯ä»¥åœ¨ä¸€å®šç¨‹åº¦ä¸Šå®Œæˆå¯¹äºŽçŸ¥è¯†å›¾è°±çš„构建。
-事实学习分为有监ç£çš„事实学习ã€åŠç›‘ç£çš„事实学习以åŠæ— ç›‘ç£çš„事实学习。有监ç£çš„事实学习通过人为标注的语料信æ¯è¾“入以åŠæ·±åº¦å­¦ä¹ æ–¹æ³•æ¥å®ŒæˆçŸ¥è¯†å›¾è°±çš„构建,而åŠç›‘ç£çš„事实学习方法使用å¯å‘å¼åœ°è‡ªåŠ¨æ ‡æ³¨æ–‡æœ¬ï¼Œä½†ç¼ºé™·æ˜¯è®­ç»ƒæ•°æ®é›†ä¸­å¯èƒ½å«æœ‰å¤§é‡çš„噪声数æ®ã€‚而无监ç£çš„学习方法主è¦ä½¿ç”¨åŸºäºŽæ·±åº¦å­¦ä¹ æ¨¡åž‹çš„自然语言处ç†ï¼ˆNLP)的方法,无须人为干预,由训练模型自动完æˆä¿¡æ¯æŠ½å–ã€ä¿¡æ¯æ•´åˆçš„方法。éšç€æ·±åº¦å­¦ä¹ ç®—法的å‘展,目å‰åŸºäºŽæ— ç›‘ç£çš„学习方法的事实学习é€æ¸æˆä¸ºä¸»æµ\cite{æŽæ¶“å­2017知识图谱研究综述}。
+事实学习分为有监ç£çš„事实学习ã€åŠç›‘ç£çš„事实学习以åŠæ— ç›‘ç£çš„事实学习。有监ç£çš„事实学习通过人为标注的语料信æ¯è¾“入以åŠæ·±åº¦å­¦ä¹ æ–¹æ³•æ¥å®ŒæˆçŸ¥è¯†å›¾è°±çš„构建,而åŠç›‘ç£çš„事实学习方法使用å¯å‘å¼åœ°è‡ªåŠ¨æ ‡æ³¨æ–‡æœ¬ï¼Œä½†ç¼ºé™·æ˜¯è®­ç»ƒæ•°æ®é›†ä¸­å¯èƒ½å«æœ‰å¤§é‡çš„噪声数æ®ã€‚而无监ç£çš„学习方法主è¦ä½¿ç”¨åŸºäºŽæ·±åº¦å­¦ä¹ æ¨¡åž‹çš„自然语言处ç†ï¼ˆNLP)的方法,无须人为干预,由训练模型自动完æˆä¿¡æ¯æŠ½å–ã€ä¿¡æ¯æ•´åˆã€‚éšç€æ·±åº¦å­¦ä¹ ç®—法的å‘展,目å‰åŸºäºŽæ— ç›‘ç£çš„事实学习é€æ¸æˆä¸ºä¸»æµ\cite{æŽæ¶“å­2017知识图谱研究综述}。
-ç›®å‰å‡ºçŽ°äº†è¯¸å¤šä½¿ç”¨ä»¥ä¸Šæ€æƒ³è®¾è®¡çš„知识图谱嵌入算法:基于翻译的TransE\cite{bordes2013translating}ã€TransH\cite{wang2014knowledge}ã€TransR\cite{lin2015learning}和基于语义分æžçš„DistMult\cite{yang2014embedding}等。
+ç›®å‰å‡ºçŽ°äº†è¯¸å¤šä½¿ç”¨ä»¥ä¸Šç†è®ºæ–¹æ³•è®¾è®¡çš„知识图谱嵌入算法:基于翻译的TransE\cite{bordes2013translating}ã€TransH\cite{wang2014knowledge}ã€TransR\cite{lin2015learning}和基于语义分æžçš„DistMult\cite{yang2014embedding}等。
ç›®å‰ï¼ŒçŸ¥è¯†å›¾è°±åœ¨ä¸šç•Œçš„应用已ç»å–得了巨大æˆåŠŸ\cite{曹倩2015知识图谱的技术实现æµç¨‹åŠç›¸å…³åº”用}:
-(1)æœç´¢å¼•æ“ŽæŠ€æœ¯ã€‚如å‰æ‰€è¿°ï¼ŒçŸ¥è¯†å›¾è°±æœ€æ—©ä¾¿æ˜¯ç”±è°·æ­Œæ出以改善其æœç´¢å¼•æ“Žçš„。在将知识图谱应用于æœç´¢å¼•æ“Žä¹‹åŽï¼Œæœç´¢å¼•æ“Žèƒ½å¯¹ä¸€äº›å¸¸è§çš„æœç´¢å†…容基于其使用的知识图谱信æ¯å¿«é€Ÿç»™å‡ºæœç´¢ç»“果。åŒæ—¶ï¼Œå¯¹äºŽä¸€äº›åè¯æ€§çš„æœç´¢å†…容,æœç´¢å¼•æ“Žèƒ½ä½¿ç”¨çŸ¥è¯†å›¾è°±ä»¥çŸ¥è¯†å¡ç‰‡çš„å½¢å¼ç»™å‡ºå…¶ç›¸å…³ä¿¡æ¯ã€‚研究表明,在谷歌将知识图谱技术èžå…¥å…¶æœç´¢å¼•æ“Žä¹‹åŽï¼Œç”¨æˆ·ç‚¹å‡»è¿›å…¥ç»´åŸºç™¾ç§‘的次数明显å‡å°‘,说明利用知识图谱技术的æœç´¢å¼•æ“Žå¯ä»¥æ›´å¥½çš„直接给出用户需è¦çš„ä¿¡æ¯è€Œä¸éœ€è¦ç”¨æˆ·å†è®¿é—®å…¶ä»–网站。
+(1)æœç´¢å¼•æ“ŽæŠ€æœ¯ã€‚如å‰æ‰€è¿°ï¼ŒçŸ¥è¯†å›¾è°±æœ€æ—©ä¾¿æ˜¯ç”±è°·æ­Œæ出以改善其æœç´¢å¼•æ“Žçš„。在将知识图谱应用于æœç´¢å¼•æ“Žä¹‹åŽï¼Œæœç´¢å¼•æ“Žèƒ½å¯¹ä¸€äº›å¸¸è§çš„æœç´¢å†…容基于其使用的知识图谱信æ¯å¿«é€Ÿç»™å‡ºæœç´¢ç»“果。åŒæ—¶ï¼Œå¯¹äºŽä¸€äº›åè¯æ€§çš„æœç´¢å†…容,æœç´¢å¼•æ“Žèƒ½ä½¿ç”¨çŸ¥è¯†å›¾è°±ä»¥çŸ¥è¯†å¡ç‰‡çš„å½¢å¼ç»™å‡ºå…¶ç›¸å…³ä¿¡æ¯ã€‚研究表明,在谷歌将知识图谱技术èžå…¥å…¶æœç´¢å¼•æ“Žä¹‹åŽï¼Œç”¨æˆ·ç‚¹å‡»è¿›å…¥ç»´åŸºç™¾ç§‘的次数明显å‡å°‘,说明利用知识图谱技术的æœç´¢å¼•æ“Žå¯ä»¥æ›´å¥½çš„直接给出用户需è¦çš„ä¿¡æ¯è€Œä¸éœ€è¦ç”¨æˆ·å†æµè§ˆå…¶ä»–网站。
(2)智能问答。信æ¯æ£€ç´¢ç³»ç»Ÿä¸­éžå¸¸å¸¸è§çš„一ç§ä¾¿æ˜¯é—®ç­”系统。问答系统在用户输入问题åŽèƒ½è¿…速给出用户需è¦çš„答案。而在将知识图谱技术应用于问答系统åŽï¼Œå…¶å›žç­”的准确率有éžå¸¸å¤§çš„æå‡ã€‚ç›®å‰è‹¹æžœçš„智能助ç†Siri以åŠè°·æ­Œçš„智能助ç†è°·æ­ŒåŠ©ç†ï¼ˆGoogle Assistant)都使用了知识图谱技术。
@@ -55,67 +53,59 @@
\subsection{基于知识图谱的推è系统研究现状}
由于传统的推è系统无法解决稀缺性问题和冷å¯åŠ¨é—®é¢˜ï¼Œå› æ­¤ç ”究人员ä¼å›¾å°†è¾…助信æ¯åŠ å…¥åˆ°æŽ¨è算法中以改善推è性能。而这类辅助信æ¯æœ‰ç¤¾äº¤ç½‘络ã€ç”¨æˆ·/物å“属性ã€å›¾åƒä¸Žä¸Šä¸‹æ–‡ç­‰ã€‚
-在数ç§ç±»åž‹çš„辅助信æ¯ä¸­ï¼ŒçŸ¥è¯†å›¾è°±é€šå¸¸åŒ…å«æœ‰æ›´ä¸°å¯Œçš„ä¿¡æ¯ä¸Žç‰©å“é—´çš„è”结。一个知识图谱是一ç§ç»“点关è”实体ã€è¾¹å…³è”关系的有å‘异构图。近æ¥ï¼Œç ”究者已æ出数ç§å­¦æœ¯æ€§çŸ¥è¯†å›¾è°±ï¼Œæ¯”如DBpediaå’ŒNELL,以åŠå•†ä¸šæ€§è´¨çš„知识图谱,比如谷歌知识图谱和Microsoft Satori。这些知识图谱æˆåŠŸåº”用于问答系统ã€è¯å‘é‡åµŒå…¥ä¸Žæ–‡å­—分类等。
-
-而目å‰åŸºäºŽçŸ¥è¯†å›¾è°±æž„建推è系统的方法主è¦æœ‰ä»¥ä¸‹å‡ ç±»ï¼š
-
-(1)基于嵌入的方法。基于嵌入的方法通过知识图谱嵌入计算算法将知识图谱中的实体信æ¯ä¸Žå…³ç³»ä¿¡æ¯æ˜ å°„为低维å‘é‡ç©ºé—´ä¸­çš„å‘é‡è¡¨ç¤ºï¼ˆåµŒå…¥ä¿¡æ¯ï¼‰ã€‚而åŽæŽ¨è算法利用该嵌入表示æ¥å®Œæˆç›¸åº”的计算,并给出推è结果。目å‰åŸºäºŽçŸ¥è¯†å›¾è°±ä¸­åµŒå…¥è¡¨ç¤ºä¿¡æ¯çš„方法的推è模型有CKE\cite{zhang2016collaborative}ã€DKN\cite{wang2018dkn}以åŠSHINE\cite{wang2018shine}等。CKE是微软在 KDD2016 å¹´å‘表的,其模型结构在原有系统过滤得到 U, V å‘é‡çš„基础上,将物å“的嵌入与其他æè¿°ä¿¡æ¯ç›¸ç»“åˆï¼Œè¿™äº›ä¿¡æ¯ä¸»è¦æœ‰:
-采用 TransR 算嵌入得到的知识图谱,图谱内æ¯ä¸ªå®žä½“嵌入表示被æå–为物å“的结构化å‘é‡ä¿¡æ¯ã€‚
-采用SDAE模型得到物å“æ述性文本的文本性嵌入表示。
-采用SCAE模型得到物å“相关图åƒçš„视觉嵌入表示。DKN是之å‰åŒæ ·ç”±å¾®è½¯å›¢é˜Ÿåœ¨ WWW2018 会议上å‘表的。它是一个主è¦é’ˆå¯¹æ–°é—»ä»»åŠ¡æ出的框架,知识图谱用在对新闻标题作嵌入的层é¢ã€‚DKN æ出对新闻标题内æ¯ä¸€ä¸ªå…³é”®å®žä½“,在知识图谱内找到其实体嵌入和上下文嵌入。
-SHINE设计深度自编ç å™¨æ¥åµŒå…¥è¯­ä¹‰ç½‘络,社交网络æ¥è¿›è¡ŒæŽ¨è。其为用户-物å“的交互使用自动编ç å™¨å¹¶åˆ»ç”»ç”¨æˆ·æ„Ÿå…´è¶£çš„概率。
-
-(2)基于路径的方法。基于路径的方法将知识图谱视为异构信æ¯ç½‘络,主è¦æ˜¯é€šè¿‡çŸ¥è¯†å›¾è°±ä¸­çš„路径中的关系信æ¯æ¥è¾…助推è算法æ¥å®ŒæˆæŽ¨è相关的计算工作。目å‰åŸºäºŽçŸ¥è¯†å›¾è°±ä¸­è·¯å¾„ä¿¡æ¯çš„推è模型有HIN\cite{zhao2017meta}ã€RKGE\cite{sun2018recurrent}等。HIN是2017年在KDD上æ出的,与 PER\cite{yu2014personalized}类似,都将将知识图谱视为异构信æ¯ç½‘络。其针对Yelpå’ŒAmazonæ•°æ®é›†åˆ†åˆ«è®¾è®¡äº†å…ƒè·¯å¾„,并得到了L个评估函数。并在建模时使用FM模型,使用FM组æŸå¤±å‡½æ•°è¿›è¡Œæ¢¯åº¦ä¸‹é™ï¼Œå¹¶æœ€ç»ˆå¾—到推è结果。RKGE模型使用了基于循环神ç»ç½‘络的方法。在人为定义元路径并抽å–出所有路径之åŽï¼Œå¯¹æ¯ç§å…ƒè·¯å¾„都使用循环神ç»ç½‘络模型æ¥æŠ½å–并推ç†å…¶è·¯å¾„中所包å«çš„ä¿¡æ¯ã€‚
-
-(3)混åˆå¼æ–¹æ³•ã€‚基于嵌入的方法未能充分利用实体间的关系模å¼ä¿¡æ¯ï¼Œè€ŒåŸºäºŽè·¯å¾„的方法仅考虑了实体间的语义连通信æ¯ï¼Œæœªèƒ½æœ‰æ•ˆä½¿ç”¨ç”¨æˆ·/物å“本身的语义信æ¯ã€‚因此,目å‰å‡ºçŽ°äº†æ··åˆå¼æ–¹æ³•ï¼Œå³åŒæ—¶ç»“åˆäº†åŸºäºŽåµŒå…¥çš„方法与基于路径的方法的优点。混åˆå¼æ–¹æ³•æ˜¯å½“å‰çš„研究热点与焦点,使用该方法的典型模型有AKUPM\cite{tang2019akupm}å’ŒRCoLM\cite{cao2019unifying}等。AKUPM是用于推è的以注æ„力机制增强的推è模型,RCoLM则是基于è”åˆå­¦ä¹ å¹¶ä»¥ä»»åŠ¡ä¸ºå¯¼å‘的推è算法。本文实现的电影推è系统是基于论文“涟漪网络:在知识图谱上传递用户å好的推è模型\cite{wang2018ripplenet}â€çš„,其中所使用的算法模é‡åž‹æ˜¯ä¹Ÿéš¶å±žæ··åˆå¼æ–¹æ³•ã€‚
+在数ç§ç±»åž‹çš„辅助信æ¯ä¸­ï¼ŒçŸ¥è¯†å›¾è°±é€šå¸¸åŒ…å«æœ‰æ›´ä¸°å¯Œçš„ä¿¡æ¯ä»¥åŠç‰©å“é—´çš„è”系。图~\ref{fig:enhanced-recommendation}中说明了知识图谱æ供丰富的信æ¯ä¸Žç‰©å“间的连接,有利于æ高推è结果的准确性ã€å¤šæ ·æ€§å’Œå¯è§£é‡Šæ€§ã€‚知识图谱å¯ä»¥ä»Žä»¥ä¸‹ä¸‰ä¸ªæ–¹é¢æ高推è性能:
\begin{figure}
\includegraphics[width=\textwidth]{enhanced-recommendation}
- \bicaption{å—知识图谱增强的电影推è系统}{Knowledge graph enhanced movie recommendation system}\label{fig:enhanced-recommendation}
+ \bicaption{基于知识图谱的电影推è系统}{Knowledge graph enhanced movie recommendation system}\label{fig:enhanced-recommendation}
\end{figure}
-å—到将知识图谱æˆåŠŸåº”用于多ç§ç±»åž‹ä»»åŠ¡çš„å¯å‘,研究人员ä¼å›¾å°†çŸ¥è¯†å›¾è°±ä½œä¸ºè¾…助信æ¯åŠ å…¥æŽ¨è算法中以改善推è系统的性能。图~\ref{fig:enhanced-recommendation}中显示了知识图谱æ供丰富的信æ¯ä¸Žç‰©å“间的连接,有利于æ高推è结果的准确性ã€å¤šæ ·æ€§å’Œå¯è§£é‡Šæ€§ã€‚知识图谱å¯ä»¥ä»Žä»¥ä¸‹ä¸‰ä¸ªæ–¹é¢æ高推è性能:
+(1)知识图谱引入了实体语义相关性,这å¯ä»¥å¸®åŠ©æ‰¾åˆ°å®žä½“间潜在的è”系并æ高推è物å“的准确性。
+
+(2)知识图谱由å„ç§ç±»åž‹çš„关系构æˆï¼Œè¿™å¯¹åˆç†åœ°æ‰©å±•ç”¨æˆ·å…´è¶£å¹¶å¢žåŠ æŽ¨è商å“的多样性是有益的。
-(1)知识图谱引入了实体语义相关性,这å¯ä»¥å¸®åŠ©æ‰¾åˆ°å…¶æ½œåœ¨çš„è”系并æ高推è物å“的准确性。
+(3)知识图谱连接用户的历å²è®°å½•åŠæŽ¨è的商å“,因此æ高了推è系统的å¯è§£é‡Šæ€§ã€‚
-(2)知识图谱由å„ç§ç±»åž‹çš„关系构æˆï¼Œè¿™å¯¹åˆç†çš„扩展用户兴趣并增加推è商å“的多样性是有益的。
+将知识图谱作为辅助信æ¯åŠ å…¥è‡³æŽ¨è系统中是当å‰çš„热点问题,目å‰åŸºäºŽçŸ¥è¯†å›¾è°±æž„建推è系统的方法主è¦æœ‰ä»¥ä¸‹å‡ ç±»ï¼š
-(3)知识图谱连接用户的历å²è®°å½•åŠæŽ¨è的商å“,因此为推è系统æ高了å¯è§£é‡Šæ€§ã€‚
+(1)基于嵌入的方法。基于嵌入的方法通过知识图谱嵌入计算算法将知识图谱中的实体信æ¯ä¸Žå…³ç³»ä¿¡æ¯æ˜ å°„为低维å‘é‡ç©ºé—´ä¸­çš„å‘é‡è¡¨ç¤ºï¼ˆåµŒå…¥è¡¨ç¤ºï¼‰ã€‚而åŽæŽ¨è算法利用该嵌入表示æ¥å®Œæˆç›¸åº”的计算,并给出推è结果。目å‰å°†çŸ¥è¯†å›¾è°±ä¸­åµŒå…¥è¡¨ç¤ºä¿¡æ¯ä½œä¸ºè¾…助信æ¯çš„推è模型有CKE\cite{zhang2016collaborative}ã€DKN\cite{wang2018dkn}以åŠSHINE\cite{wang2018shine}等。CKE是微软在 KDD2016 å¹´å‘表的,其模型结构在原有系统过滤得到$U$, $V$å‘é‡çš„基础上,将物å“的嵌入与其他æè¿°ä¿¡æ¯ç›¸ç»“åˆï¼Œè¿™äº›ä¿¡æ¯ä¸»è¦æœ‰:
+采用 TransR 算法嵌入得到的知识图谱,图谱内æ¯ä¸ªå®žä½“嵌入表示被æå–为物å“的结构化å‘é‡ä¿¡æ¯ã€‚
+采用SDAE模型得到物å“æ述性文本的文本嵌入表示。
+采用SCAE模型得到物å“相关图åƒçš„视觉嵌入表示。DKN是之å‰åŒæ ·ç”±å¾®è½¯å›¢é˜Ÿåœ¨WWW2018会议上å‘表的。它是一个主è¦é’ˆå¯¹æ–°é—»æŽ¨è任务æ出的框架,知识图谱用于辅助计算新闻标题的嵌入表示。DKNæ出对新闻标题内æ¯ä¸€ä¸ªå…³é”®å®žä½“,在知识图谱内找到其实体嵌入和上下文嵌入。
+SHINE设计深度自编ç å™¨æ¥åµŒå…¥è¯­ä¹‰ç½‘络,社交网络并进行推è。其为用户-物å“的交互使用自动编ç å™¨å¹¶è®¡ç®—用户感兴趣的概率。此外,嵌入表示å¯ä»¥åŒ…å«å®žä½“的独热编ç \cite{koren2008factorization}ã€è¯æ±‡é›†\cite{wang2018dkn}ã€ä¸Šä¸‹æ–‡ä¿¡æ¯\cite{sun2017collaborative}或属性\cite{wang2018shine},而选择哪一ç§åµŒå…¥å‘é‡çš„计算方å¼å–决于其应用场åˆã€‚
-将知识图谱作为辅助信æ¯åŠ å…¥è‡³æŽ¨è系统中是当å‰çš„热点问题。
+(2)基于路径的方法。基于路径的方法将知识图谱作为异构信æ¯ç½‘络,主è¦æ˜¯é€šè¿‡çŸ¥è¯†å›¾è°±ä¸­çš„路径关系信æ¯æ¥è¾…助推è算法完æˆæŽ¨è相关的计算工作。目å‰åŸºäºŽçŸ¥è¯†å›¾è°±ä¸­è·¯å¾„ä¿¡æ¯çš„推è模型有HIN\cite{zhao2017meta}ã€RKGE\cite{sun2018recurrent}等。HIN是2017年在KDD上æ出的,与PER\cite{yu2014personalized}类似,都将知识图谱作为异构信æ¯ç½‘络。它针对Yelpå’ŒAmazonæ•°æ®é›†åˆ†åˆ«è®¾è®¡äº†å…ƒè·¯å¾„,并得到了L个评估函数。并在建模时使用FM模型,使用FMæŸå¤±å‡½æ•°ç»„进行梯度下é™ï¼Œå¹¶æœ€ç»ˆå¾—到推è结果。RKGE模型使用了基于循环神ç»ç½‘络的方法。在人为定义元路径并抽å–出所有路径之åŽï¼Œå¯¹æ¯ç§å…ƒè·¯å¾„都使用循环神ç»ç½‘络模型æ¥æŠ½å–并推ç†å…¶è·¯å¾„中所包å«çš„ä¿¡æ¯ã€‚
+
+(3)混åˆå¼æ–¹æ³•ã€‚基于嵌入的方法未能充分利用实体间的关系模å¼ä¿¡æ¯ï¼Œè€ŒåŸºäºŽè·¯å¾„的方法仅考虑了实体间的语义连通信æ¯ï¼Œæœªèƒ½æœ‰æ•ˆä½¿ç”¨ç”¨æˆ·/物å“本身的语义信æ¯ã€‚因此,目å‰å‡ºçŽ°äº†æ··åˆå¼æ–¹æ³•ï¼Œå³åŒæ—¶ç»“åˆäº†åŸºäºŽåµŒå…¥çš„方法与基于路径的方法的优点。混åˆå¼æ–¹æ³•æ˜¯å½“å‰çš„研究热点与焦点,使用该方法的典型模型有AKUPM\cite{tang2019akupm}å’ŒRCoLM\cite{cao2019unifying}等。AKUPM是通过注æ„力机制增强的推è模型,RCoLM则是基于è”åˆå­¦ä¹ å¹¶ä»¥ä»»åŠ¡ä¸ºå¯¼å‘的推è算法。本文实现的电影推è系统基于文献\parencite{wang2018ripplenet},其所使用的算法模型是也属于混åˆå¼æ–¹æ³•ã€‚
\section{本文的主è¦ç ”究内容}
-本文在研究推è算法ã€çŸ¥è¯†å›¾è°±å’ŒåŸºäºŽçŸ¥è¯†å›¾è°±çš„推è算法的相关研究基础上,åšäº†ä»¥ä¸‹æ•°ä¸ªæ–¹é¢çš„研究:
+本文在推è算法ã€çŸ¥è¯†å›¾è°±å’ŒåŸºäºŽçŸ¥è¯†å›¾è°±çš„推è算法的相关研究基础上,åšäº†ä»¥ä¸‹ä¸‰æ–¹é¢çš„研究:
-(1)设计并实现了基于知识图谱的电影推è系统,使用“电影é€é•œ1兆数æ®â€ä½œä¸ºæ•°æ®é›†ï¼Œæ­¤å¤–还从IMDbåŠè±†ç“£çˆ¬å–了相关电影数æ®ä½œä¸ºç ”究对象。
+(1)对推è系统所需的数æ®è¿›è¡Œé‡‡é›†å’Œå¤„ç†ï¼Œä½¿ç”¨â€œMovieLens 1M Datasetâ€ä½œä¸ºæ•°æ®é›†ï¼Œæ­¤å¤–还从IMDbåŠè±†ç“£ç½‘爬å–了相关电影数æ®å¹¶è¿›è¡Œå¤„ç†ï¼Œä½œä¸ºæœ¬æ–‡çš„研究对象。
-(2)根æ®è®ºæ–‡â€œæ¶Ÿæ¼ªç½‘络:在知识图谱上传递用户å好的推è模型\cite{wang2018ripplenet}â€å®žçŽ°äº†åŸºäºŽçŸ¥è¯†å›¾è°±çš„推è算法——涟漪网络,该算法能根æ®ç”¨æˆ·çš„历å²è¡Œä¸ºæ¥ä¸ºç”¨æˆ·è¿›è¡Œç”µå½±æŽ¨è。此外,将涟漪网络算法与其他基于知识网络的推è算法(DKN\cite{wang2018dkn}ã€CKE\cite{zhang2016collaborative} ã€PER\cite{yu2014personalized}ã€SHINE\cite{wang2018shine}ã€LibFM\cite{rendle2012factorization}å’ŒWide\&Deep\cite{cheng2016wide}等)进行性能比较。
+(2)根æ®æ–‡çŒ®\parencite{wang2018ripplenet}æ出的算法,实现了基于知识图谱的涟漪网络推è算法,该算法能根æ®ç”¨æˆ·çš„历å²è¡Œä¸ºä¸ºç”¨æˆ·è¿›è¡Œç”µå½±æŽ¨è。此外,将涟漪网络算法与其他基于知识图谱的推è算法(DKN\cite{wang2018dkn}ã€CKE\cite{zhang2016collaborative} ã€PER\cite{yu2014personalized}ã€SHINE\cite{wang2018shine}ã€LibFM\cite{rendle2012factorization}å’ŒWide\&Deep\cite{cheng2016wide}等)进行了性能比较。
-(3)实现一个基于知识图谱的电影推è系统,该系统能够根æ®ç”¨æˆ·çš„历å²è¡Œä¸ºï¼ˆè¯„分ã€æ”¶è—等)æ¥ä¸ºç”¨æˆ·è¿›è¡Œç”µå½±æŽ¨è。该系统分为管ç†å‘˜ã€æœªç™»å½•ç”¨æˆ·ã€æ™®é€šç™»å½•ç”¨æˆ·ã€‚管ç†å‘˜èƒ½å¢žåŠ ã€ä¿®æ”¹å’Œåˆ é™¤ç”µå½±å’Œæ™®é€šç”¨æˆ·ï¼›æœªç™»å½•ç”¨æˆ·èƒ½æ ¹æ®å½±åˆ†ç±»æŸ¥çœ‹ç”µå½±åŠæŸ¥çœ‹ç”µå½±è¯¦æƒ…;普通登录用户除能进行未登录用户的æ“作外,还能购买ã€æ”¶è—åŠè¯„价电影。
+(3)实现了一个基于知识图谱的电影推è系统,该系统能够根æ®ç”¨æˆ·çš„历å²è¡Œä¸ºï¼ˆè¯„分ã€æ”¶è—等)æ¥ä¸ºç”¨æˆ·è¿›è¡Œç”µå½±æŽ¨è。该系统分为管ç†å‘˜ã€æœªç™»å½•ç”¨æˆ·ã€æ™®é€šç™»å½•ç”¨æˆ·ã€‚管ç†å‘˜èƒ½å¢žåŠ ã€ä¿®æ”¹å’Œåˆ é™¤ç”µå½±å’Œæ™®é€šç”¨æˆ·ï¼›æœªç™»å½•ç”¨æˆ·èƒ½æ ¹æ®ç”µå½±åˆ†ç±»æŸ¥çœ‹ç”µå½±åˆ—表以åŠæŸ¥çœ‹ç”µå½±è¯¦æƒ…;普通登录用户除了能进行未登录用户的所有æ“作外,还能购买ã€æ”¶è—åŠä¸ºç”µå½±è¯„分。
\section{论文结构}
本论文一共分为五个章节。
-第一章是绪论。简明介ç»çŸ¥è¯†å›¾è°±ä½œä¸ºè¾…助信æ¯åœ¨æŽ¨è算法中的é‡è¦ä½œç”¨ä»¥åŠæŽ¨è算法对在线æµåª’体播放平å°çš„é‡è¦ä½œç”¨ï¼Œä»‹ç»äº†æŽ¨è系统ã€çŸ¥è¯†å›¾è°±å’ŒåŸºäºŽçŸ¥è¯†å›¾è°±çš„推è系统的å‘展和应用以åŠæœ¬æ–‡çš„主è¦å·¥ä½œåŠåˆ›æ–°ç‚¹ã€‚
+第1章是绪论。简明介ç»çŸ¥è¯†å›¾è°±ä½œä¸ºè¾…助信æ¯åœ¨æŽ¨è算法中的作用以åŠæŽ¨è算法对在线æµåª’体播放平å°çš„作用,åŒæ—¶ä»‹ç»äº†æŽ¨è系统ã€çŸ¥è¯†å›¾è°±å’ŒåŸºäºŽçŸ¥è¯†å›¾è°±çš„推è系统的å‘展和应用,并说明了本文的主è¦å·¥ä½œã€‚
-第二章是相关ç†è®ºå’ŒæŠ€æœ¯ã€‚介ç»äº†ç›®å‰çŸ¥è¯†å›¾è°±å’ŒæŽ¨è系统的研究现状,并对传统的推è算法与加入辅助信æ¯çš„推è算法作了较为细致的分类与é˜è¿°ã€‚åŒæ—¶è¿˜ä»‹ç»äº†æœ¬æ–‡å®žçŽ°çš„电影推è系统的技术栈,比如数æ®åº“ã€å‰ç«¯æž¶æž„ã€åŽç«¯æž¶æž„等。
+第2章是相关ç†è®ºå’ŒæŠ€æœ¯ã€‚介ç»äº†ç›®å‰çŸ¥è¯†å›¾è°±å’ŒæŽ¨è系统的研究现状,并对传统的推è算法与加入辅助信æ¯çš„推è算法作了较为细致的分类与é˜è¿°ã€‚åŒæ—¶è¿˜ä»‹ç»äº†æœ¬æ–‡å®žçŽ°çš„电影推è系统所使用的技术栈,诸如数æ®åº“ã€å‰ç«¯æž¶æž„ã€åŽç«¯æž¶æž„等。
-第三章是涟漪网络。介ç»äº†æ¶Ÿæ¼ªç½‘络算法,以åŠè®¡ç®—相关实体嵌入的过程中使用的深度学习算法,并对该算法进行了讨论。最åŽï¼Œè¿˜å¯¹æ¶Ÿæ¼ªç½‘络推è算法的准确度进行了测试。
+第3章是涟漪网络。介ç»äº†æ¶Ÿæ¼ªç½‘络算法,以åŠè®¡ç®—相关实体嵌入的过程中使用的深度学习算法,并对以上算法进行了讨论。最åŽï¼Œè¿˜å¯¹æ¶Ÿæ¼ªç½‘络推è算法的准确度进行了测试。
-第四章是电影推è系统。介ç»äº†ä»¥æ¶Ÿæ¼ªç½‘络算法为基础构建的电影推è系统:介ç»äº†ç³»ç»Ÿæž¶æž„ã€ç³»ç»ŸåŠŸèƒ½ã€ç”µå½±æŽ¨èæµç¨‹ä»¥åŠå¦‚何ä¿è¯è¯¥ç³»ç»Ÿçš„安全性。
+第4章是电影推è系统。介ç»äº†ä»¥æ¶Ÿæ¼ªç½‘络算法为基础构建的电影推è系统:介ç»äº†ç³»ç»Ÿæž¶æž„ã€ç³»ç»ŸåŠŸèƒ½ã€ç”µå½±æŽ¨èæµç¨‹ä»¥åŠå¦‚何ä¿è¯è¯¥ç³»ç»Ÿçš„安全性。
-第五章是研究结论和展望。总结了涟漪网络算法的设计与实现ã€ç”µå½±æŽ¨è系统的功能,并指出了其中å¯ä»¥æ”¹è¿›çš„地方。
+第5章是研究结论和展望。总结了涟漪网络算法的设计与实现ã€ç”µå½±æŽ¨è系统的功能,并指出了其中å¯ä»¥æ”¹è¿›çš„地方。
\chapter{相关ç†è®ºå’ŒæŠ€æœ¯}
\section{知识图谱}
\subsection{知识图谱的概念åŠå‘展进程}
-知识图谱,是一ç§çŸ¥è¯†å¯è§†åŒ–或知识领域映射地图,是显示知识å‘展进程与结构关系的一系列三元组(实体,关系,实体),用å¯è§†åŒ–技术æ述知识信æ¯åŠå…¶è½½ä½“,挖掘ã€åˆ†æžã€å»ºç«‹ã€ç»˜åˆ¶å’Œå¯è§†åŒ–知识以åŠå®ƒä»¬ä¹‹é—´çš„相互关系。
-
-知识图谱是谷歌于2012å¹´æ出的,目的是为了增强其æœç´¢å¼•æ“Žã€‚而åŽå¾®è½¯äºŽ2013å¹´7月å‘布了其Microsoft Satori知识图谱。除传统æœç´¢æœåŠ¡æ供商之外,包括Apple,Facebook,IBM等互è”网ä¼ä¸šä¹Ÿåœ¨æŽ¢ç´¢è¯¥é¢†åŸŸã€‚
-
-此外,业界也出现了社区构建的开æºçŸ¥è¯†å›¾è°±ï¼Œå¦‚DBpedia,NELLå’ŒWikidata等。
+知识图谱,是一ç§çŸ¥è¯†å¯è§†åŒ–或知识领域映射地图,是显示知识å‘展进程与结构关系的一系列三元组(实体,关系,实体),用å¯è§†åŒ–技术æ述知识信æ¯åŠå…¶è½½ä½“,挖掘ã€åˆ†æžã€å»ºç«‹ã€ç»˜åˆ¶å’Œå¯è§†åŒ–知识以åŠå®žä½“之间的相互关系。
-以Freebaseã€WordNetå’ŒGeneOntology等为例的知识图谱已æˆä¸ºæ”¯æŒäººå·¥æ™ºèƒ½ç›¸å…³åº”用的éžå¸¸é‡è¦çš„资æºã€‚
+知识图谱是谷歌于2012å¹´æ出的,目的是为了增强其æœç´¢å¼•æ“Žã€‚而åŽå¾®è½¯äºŽ2013å¹´7月å‘布了Microsoft Satori知识图谱。除传统æœç´¢æœåŠ¡æ供商之外,包括Apple,Facebook,IBM等互è”网ä¼ä¸šä¹Ÿåœ¨æŽ¢ç´¢è¯¥é¢†åŸŸã€‚此外,业界也出现了社区构建的开æºçŸ¥è¯†å›¾è°±ï¼Œå¦‚DBpedia,NELLå’ŒWikidata等。以Freebaseã€WordNetå’ŒGeneOntology等为例的知识图谱已æˆä¸ºæ”¯æŒäººå·¥æ™ºèƒ½ç›¸å…³åº”用的éžå¸¸é‡è¦çš„资æºã€‚
\subsection{知识图谱的构建方法}
-知识图谱是由多实体结点和ä¸åŒå…³ç³»è¾¹æž„æˆçš„多关系图,一个边是一个事实三元组(头结点,关系,尾结点)(记为(h, r, t))。而知识图谱的构建便是寻找这样的三元组。
+知识图谱是由多实体结点和ä¸åŒå…³ç³»è¾¹æž„æˆçš„多关系图,一个边是一个事实三元组(头结点,关系,尾结点),记为$(h,r,t)$。而知识图谱的构建便是寻找这样的三元组。
-在过去å年,在构建大型知识图谱方é¢å·²å–得很大的æˆå°±ï¼Œç„¶è€Œï¼Œè¿˜æ²¡æœ‰æ¸…晰的支æŒæž„建知识图谱的范å¼ã€‚主è¦æœ‰ä¸¤ä¸ªå›°éš¾ï¼šï¼ˆ1)知识图谱是符å·åŒ–的逻辑系统而知识图谱的应用常常是包å«åœ¨è¿žç»­ç©ºé—´çš„计算。(2)在一张图谱上进行知识èšåˆæ˜¯å›°éš¾çš„。
+在过去å年间,出现了诸多构建大型知识图谱的方法,然而,还没有清晰准确的构建知识图谱的范å¼ã€‚主è¦æœ‰ä¸¤ä¸ªå›°éš¾ï¼šï¼ˆ1)知识图谱是符å·åŒ–的逻辑系统而知识图谱的应用常常包å«åœ¨è¿žç»­ç©ºé—´ä¸­çš„计算;(2)在一张知识图谱上进行知识èšåˆæ˜¯å›°éš¾çš„。
ç›®å‰ï¼ŒçŸ¥è¯†å›¾è°±ä¸»è¦é€šè¿‡ä»¥ä¸‹3个步骤æ¥å®Œæˆæž„建:
@@ -123,43 +113,41 @@ SHINE设计深度自编ç å™¨æ¥åµŒå…¥è¯­ä¹‰ç½‘络,社交网络æ¥è¿›è¡ŒæŽ¨è
(2)知识èžåˆã€‚对新获得的知识进行整åˆï¼Œä»¥å®Œæˆæ¶ˆæ­§ä¹‰ã€‚
-(3)知识加工。对èžåˆåŽçš„新知识ç»è¿‡è´¨é‡æ ¸æŸ¥åŽå°†æ­£ç¡®çš„部分加入至知识图谱中。
+(3)知识加工。ç»è¿‡è´¨é‡æ ¸æŸ¥åŽå°†èžåˆåŽçš„新知识的正确的部分加入至知识图谱中。
\subsection{知识图谱的应用}
-知识图谱以更接近人类认知的方å¼ä¸ºäº’è”网的信æ¯è¡¨è¾¾æ供了一ç§æ–°çš„æ–¹å¼ï¼Œè€Œä¸”æ供了一ç§æ›´ç›ŠäºŽç»„织与利用海é‡çš„æ–¹å¼ã€‚当å‰çŸ¥è¯†å›¾è°±ä¸»è¦ç”¨äºŽæœç´¢å¼•æ“Ž(Bing,Google Search)ã€ä¸ªäººåŠ©ç†ï¼ˆGoogle Assistant)以åŠé—®ç­”系统。
+知识图谱以更接近人类认知的方å¼ä¸ºäº’è”网的信æ¯è¡¨è¾¾æ供了一ç§æ–°çš„æ–¹å¼ï¼Œè€Œä¸”æ供了一ç§æ›´ç›ŠäºŽç»„织与利用海é‡æ•°æ®çš„æ–¹å¼ã€‚当å‰çŸ¥è¯†å›¾è°±ä¸»è¦ç”¨äºŽæŽ¨è系统ã€æœç´¢å¼•æ“Žã€ä¸ªäººåŠ©ç†ä»¥åŠé—®ç­”系统。
\section{推è系统}
-推è系统是根æ®ç”¨æˆ·å¯èƒ½ç»™æŸç‰©å“评分或用户å¯èƒ½å好的内容过滤系统的一个å­é›†ã€‚
-
-推è系统广泛使用于多个领域,通常有为视频或音ä¹æœåŠ¡ç”ŸæˆæŽ¨è清å•çš„表现形å¼ã€‚
+推è系统是内容过滤系统的一个å­é›†ï¼Œè¢«å¹¿æ³›ä½¿ç”¨äºŽå¤šä¸ªé¢†åŸŸï¼Œå®ƒå‘用户推è满足其å好的物å“,并通常具有为视频或音ä¹æœåŠ¡ç”ŸæˆæŽ¨è清å•çš„表现形å¼ã€‚
\subsection{传统的推è系统}
-传统的推è系统主è¦åˆ†ä¸ºåŸºäºŽå†…容的推è系统ã€åŸºäºŽååŒè¿‡æ»¤çš„推è系统和混åˆæŽ¨è系统\cite{黄立å¨2018基于深度学习的推è系统研究综述}。(1)基于内容的推è系统主è¦ç”¨äºŽæ–‡æœ¬ç›¸å…³çš„项目,因为内容常常是使用关键字æ¥æ述的。该算法通过计算相关物å“的离散特å¾ï¼Œç„¶åŽæŽ¨è具有与其类似特å¾çš„有关物å“。(2)基于ååŒè¿‡æ»¤çš„推è系统主è¦é€šè¿‡å°†å…·æœ‰ä¸Žç›®æ ‡ç”¨æˆ·ç›¸ä¼¼ç‰¹å¾çš„用户所交互过的物å“推è给目标用户。
+传统的推è系统主è¦åˆ†ä¸ºåŸºäºŽå†…容的推è系统ã€åŸºäºŽååŒè¿‡æ»¤çš„推è系统和混åˆæŽ¨è系统\cite{黄立å¨2018基于深度学习的推è系统研究综述}。基于内容的推è系统主è¦ç”¨äºŽæ–‡æœ¬ç›¸å…³çš„项目,因为内容常常是使用关键字æ¥æ述的。该算法通过计算相关物å“的离散特å¾ï¼Œç„¶åŽæŽ¨è具有与用户历å²å好物å“类似特å¾çš„有关物å“。基于ååŒè¿‡æ»¤çš„推è系统主è¦é€šè¿‡å°†å…·æœ‰ä¸Žç›®æ ‡ç”¨æˆ·ç›¸ä¼¼ç‰¹å¾çš„用户所交互过的物å“推è给目标用户。
-基于内容推è与通过ååŒè¿‡æ»¤æŽ¨è的有关区别å¯ä»¥ä»Žæ¯”较两个æµè¡ŒéŸ³ä¹æŽ¨è系统的实现方å¼ä¸­å¾—出:(1)潘多拉音ä¹ä½¿ç”¨ä¸€ä¸ªåŸºäºŽå†…容推è的推è算法。它根æ®è‰ºäººæˆ–歌曲的属性æ¥ç”Ÿæˆä¸€ä¸ªåŒ…å«ç›¸ä¼¼é£Žæ ¼æ­Œæ›²çš„电å°ï¼Œå¹¶ä¸”该电å°çš„内容会根æ®æ”¶å¬ç”¨æˆ·çš„å馈进行调整。当用户对一首歌曲“ä¸æ„Ÿå…´è¶£â€æ—¶è¯¥ç®—法将弱化该歌曲的一些属性;而当用户喜欢一首歌曲时,将强化一些属性。并且该算法会根æ®è¯¥å±žæ€§è°ƒæ•´æ­Œæ›²çš„顺åºï¼Œè‹¥è¶Šè¿‡ä¸€ä¸ªé˜€å€¼æ—¶å°†æŸä¸€æ­Œæ›²ä»Žåˆ—表中删除。(2)“终级fmâ€ä½¿ç”¨ä¸€ä¸ªååŒè¿‡æ»¤çš„推è算法。它记录用户ç»å¸¸æ”¶å¬çš„ä¹é˜Ÿå’Œæ­Œæ‰‹ï¼Œç„¶åŽä¸Žå…¶å®ƒç”¨æˆ·çš„有关行为进行比较,建立一个电å°ï¼Œå¹¶ä»¥æ­¤æŽ¨è歌曲。“终级fmâ€ä¼šç»™ç”¨æˆ·æŽ¨è其他具有相似特å¾ç”¨æˆ·çš„播放列表(并ä¿è¯ç›®æ ‡ç”¨æˆ·æœªæ”¶å¬è¿‡ï¼‰ã€‚
+基于内容的推è与基于ååŒè¿‡æ»¤çš„推è的有关区别å¯ä»¥é€šè¿‡æ¯”较两个æµè¡ŒéŸ³ä¹æŽ¨è系统的实现方å¼çœ‹å‡ºã€‚(1)潘多拉音ä¹ä½¿ç”¨ä¸€ä¸ªåŸºäºŽå†…容推è的推è算法。它根æ®è‰ºäººæˆ–歌曲的属性æ¥ç”Ÿæˆä¸€ä¸ªåŒ…å«ç›¸ä¼¼é£Žæ ¼æ­Œæ›²çš„电å°ï¼Œå¹¶ä¸”该电å°çš„内容会根æ®æ”¶å¬ç”¨æˆ·çš„å馈进行调整。当用户对一首歌曲“ä¸æ„Ÿå…´è¶£â€æ—¶è¯¥ç®—法将弱化该歌曲的一些属性;而当用户喜欢一首歌曲时,将强化一些属性。并且该算法会根æ®è¯¥å±žæ€§è°ƒæ•´æ­Œæ›²çš„顺åºï¼Œè‹¥å±žæ€§çš„值越过一个阀值时推è算法便将æŸä¸€æ­Œæ›²ä»Žåˆ—表中删除。(2)“终级fmâ€ä½¿ç”¨ååŒè¿‡æ»¤çš„推è算法。它记录用户ç»å¸¸æ”¶å¬çš„ä¹é˜Ÿå’Œæ­Œæ‰‹ï¼Œç„¶åŽä¸Žå…¶å®ƒç”¨æˆ·çš„有关行为进行比较,建立一个电å°ï¼Œå¹¶ä»¥æ­¤æŽ¨è歌曲。“终级fmâ€ä¼šç»™ç”¨æˆ·æŽ¨è其他具有相似特å¾ç”¨æˆ·çš„播放列表(并ä¿è¯ç›®æ ‡ç”¨æˆ·æœªæ”¶å¬è¿‡ï¼‰ã€‚
-而上述两ç§æŽ¨è算法都有其长处与短处。潘多拉音ä¹æ‰€ä½¿ç”¨çš„基于内容推è的推è算法是根æ®ç‰©å“本身的性质æ¥è¿›è¡ŒæŽ¨è的,因此ä¸éœ€è¦ç”¨æˆ·ä¿¡æ¯å°±å¯ä»¥æœ‰è¾ƒå¥½çš„准确度。但该算法严é‡ä»¥æ¥ç‰©å“本身的特性,因此局é™æ€§è¾ƒå¤§ï¼ŒæŽ¨è的内容都是与ç§å­é›†ç›¸å…³çš„,推è结果的多样性较低。而“终级fmâ€ä½¿ç”¨çš„ååŒè¿‡æ»¤ç®—法需è¦æ ¹æ®ç”¨æˆ·ä¸Žç‰©å“的交互æ¥ç”ŸæˆæŽ¨è结果,因此需è¦å¤§é‡çš„用户数æ®ï¼Œå­˜åœ¨æ•°æ®ç¨€ç¼ºæ€§é—®é¢˜ä¸Žå†·å¯åŠ¨é—®é¢˜ã€‚
+基于内容的推è与基于ååŒè¿‡æ»¤çš„推èå„有优缺点。潘多拉音ä¹æ‰€ä½¿ç”¨çš„基于内容推è的推è算法是根æ®ç‰©å“本身的性质æ¥è¿›è¡ŒæŽ¨è的,因此ä¸éœ€è¦ç”¨æˆ·ä¿¡æ¯å°±å¯ä»¥æœ‰è¾ƒå¥½çš„准确度。但该算法严é‡ä¾èµ–物å“本身的特性,因此局é™æ€§è¾ƒå¤§ï¼ŒæŽ¨è的内容都是与ç§å­é›†ç›¸å…³çš„,推è结果的多样性较低。而“终级fmâ€ä½¿ç”¨çš„ååŒè¿‡æ»¤ç®—法需è¦æ ¹æ®ç”¨æˆ·ä¸Žç‰©å“的交互æ¥ç”ŸæˆæŽ¨è结果,因此需è¦å¤§é‡çš„用户数æ®ï¼Œå­˜åœ¨æ•°æ®ç¨€ç¼ºæ€§é—®é¢˜ä¸Žå†·å¯åŠ¨é—®é¢˜ã€‚
\subsection{基于知识图谱的推è系统}
-基于内容推è与ååŒè¿‡æ»¤æŽ¨è两者å‡å­˜åœ¨ä¸€äº›å±€é™æ€§ï¼Œä¸ºäº†æ高推è的准确性与解决传统的推è算法的数æ®ç¨€ç¼ºæ€§ä¸Žå†·å¯åŠ¨é—®é¢˜ï¼Œç ”究者将一些辅助信æ¯åŠ å…¥è‡³æŽ¨è算法中,通常这些辅助信æ¯åŒ…括上下文信æ¯ã€ç”¨æˆ·æˆ–物å“的属性ã€å›¾ç‰‡å’Œç¤¾äº¤ç½‘络\cite{常亮2019知识图谱的推è系统综述}\cite{王一鸣2018基于知识图谱的推è技术研究åŠåº”用}。
+基于内容推è与ååŒè¿‡æ»¤æŽ¨è两者å‡å­˜åœ¨ä¸€äº›å±€é™æ€§ï¼Œä¸ºäº†æ高推è的准确性,解决传统推è算法的数æ®ç¨€ç¼ºæ€§ä¸Žå†·å¯åŠ¨é—®é¢˜ï¼Œç ”究者将一些辅助信æ¯åŠ å…¥è‡³æŽ¨è算法中,通常这些辅助信æ¯åŒ…括上下文信æ¯ã€ç”¨æˆ·æˆ–物å“的属性ã€å›¾ç‰‡å’Œç¤¾äº¤ç½‘络\cite{常亮2019知识图谱的推è系统综述}\cite{王一鸣2018基于知识图谱的推è技术研究åŠåº”用}。
-而éšç€çŸ¥è¯†å›¾è°±çš„å‘展,当å‰å°†çŸ¥è¯†å›¾è°±ä½œä¸ºè¾…助信æ¯åŠ å…¥æŽ¨è系统æ¥æ高推è系统性能已ç»æˆä¸ºäº†ä¸€ä¸ªçƒ­é—¨çš„研究方å‘。将知识图谱作为辅助信æ¯åŠ å…¥æŽ¨è算法å¯ä»¥äº§ç”Ÿä¸¤ä¸ªä¼˜ç‚¹ï¼š
+而éšç€çŸ¥è¯†å›¾è°±çš„å‘展,将知识图谱作为辅助信æ¯æ¥æ高推è系统的性能已ç»æˆä¸ºäº†çƒ­é—¨çš„研究方å‘。将知识图谱作为辅助信æ¯åŠ å…¥æŽ¨è算法的优点有:
(1)æ高推è系统的准确性。知识图谱å¯ä»¥è¡¨ç¤ºä¸åŒå®žä½“间的关系,å¯ä»¥å°†ç‰©å“åŠå…¶ç›¸å…³å±žæ€§å¯¹åº”于知识图谱之中,从而推è算法å¯ä»¥ç†è§£ç‰©å“之间的关系。此外,用户与用户间的关系信æ¯ä¹Ÿå¯ä»¥æ˜ å°„至知识图谱之中,从而推è算法å¯ä»¥æ›´å‡†ç¡®åœ°åˆ†æžç‰©å“与物å“间的关系ã€ç”¨æˆ·ä¸Žç‰©å“之间的关系。
-(2)æ高推è系统的å¯è§£é‡Šæ€§ã€‚由于推è结果ä¾ç…§çŸ¥è¯†å›¾è°±ä¸­çš„关系信æ¯ï¼Œå› æ­¤å¯ä»¥ç”±çŸ¥è¯†å›¾è°±ä¸­çš„关系路径得到推è结果的原因。
+(2)æ高推è系统的å¯è§£é‡Šæ€§ã€‚由于推è结果ä¾ç…§çŸ¥è¯†å›¾è°±ä¸­çš„关系信æ¯ï¼Œå› æ­¤å¯ä»¥ç”±çŸ¥è¯†å›¾è°±ä¸­çš„关系路径得到推è系统给出推è结果的原因。
ç›®å‰ä¸»è¦çš„基于知识图谱的推è算法有基于嵌入的方法ã€åŸºäºŽè·¯å¾„的方法以åŠæ··åˆå¼æ–¹æ³•ï¼š
-(1)基于嵌入的方法。基于嵌入的方法使用知识图谱的信æ¯æ¥å®Œå–„实体的嵌入表示。为了将知识图谱中的信æ¯æ·»åŠ è‡³æŽ¨è算法中æ¥è¾…助推è,需è¦ä½¿ç”¨çŸ¥è¯†å›¾è°±åµŒå…¥è¡¨ç¤ºç®—法(Knowledge Graph Embedding, KGE)表计算实体嵌入(实体嵌入指由知识图谱中信æ¯å¾—到的在低维å‘é‡ç©ºé—´ä¸­çš„å‘é‡è¡¨ç¤ºï¼‰ã€‚KGE算法有TransE\cite{bordes2013translating}ã€TransH\cite{wang2014knowledge}ã€TransR\cite{lin2015learning}å’ŒDistMult\cite{yang2014embedding}等。而推è算法将通过计算得到的嵌入表示æ¥è®¡ç®—物å“-物å“é—´ã€ç”¨æˆ·-用户间以åŠç”¨æˆ·-物å“间的关系,从而对用户进行物å“推è。
+(1)基于嵌入的方法。基于嵌入的方法使用知识图谱的信æ¯æ¥å®Œå–„实体的嵌入表示。为了将知识图谱中的信æ¯æ·»åŠ è‡³æŽ¨è算法中æ¥è¾…助推è,需è¦ä½¿ç”¨çŸ¥è¯†å›¾è°±åµŒå…¥è¡¨ç¤ºç®—法(Knowledge Graph Embedding, KGE)表计算实体嵌入(实体嵌入指由知识图谱中的信æ¯å¾—到的在低维å‘é‡ç©ºé—´ä¸­çš„å‘é‡è¡¨ç¤ºï¼‰ã€‚KGE算法有TransE\cite{bordes2013translating}ã€TransH\cite{wang2014knowledge}ã€TransR\cite{lin2015learning}å’ŒDistMult\cite{yang2014embedding}等。而推è算法利用该嵌入表示æ¥è¿›è¡Œç›¸å…³è®¡ç®—,从而对用户进行物å“推è。
(2)基于路径的方法\cite{lin2015modeling}\cite{guu2015traversing}\cite{toutanova2016compositional}。基于路径的方法将知识图谱视为异构信æ¯ç½‘络。而推è系统利用该异构信æ¯ç½‘络寻找实体间的关系,从而完æˆæŽ¨è。
-(3)混åˆå¼æ–¹æ³•ã€‚基于嵌入的方法未能充分利用实体间的关系模å¼ä¿¡æ¯ï¼Œè€ŒåŸºäºŽè·¯å¾„的方法仅考虑了实体间的语义连通信æ¯ï¼Œæœªèƒ½æœ‰æ•ˆä½¿ç”¨ç”¨æˆ·/物å“本身的语义信æ¯ã€‚因此,目å‰å‡ºçŽ°äº†æ··åˆå¼æ–¹æ³•ï¼Œå³åŒæ—¶ç»“åˆäº†åŸºäºŽåµŒå…¥çš„方法与基于路径的方法的优点。混åˆå¼æ–¹æ³•æ˜¯å½“å‰çš„研究热点与焦点,使用该方法的典型模型有AKUPM\cite{tang2019akupm}å’ŒRCoLM\cite{cao2019unifying}等。本文基于的算法也隶属该类。
+(3)混åˆå¼æ–¹æ³•ã€‚基于嵌入的方法未能充分利用实体间的关系模å¼ä¿¡æ¯ï¼Œè€ŒåŸºäºŽè·¯å¾„的方法仅考虑了实体间的语义连通信æ¯ï¼Œæœªèƒ½æœ‰æ•ˆåˆ©ç”¨ç”¨æˆ·/物å“本身的语义信æ¯ã€‚æ··åˆå¼æ–¹æ³•ç»“åˆäº†åŸºäºŽåµŒå…¥çš„方法与基于路径的方法的优点,该方法是当å‰çš„研究热点与焦点,使用该方法的典型模型有AKUPM\cite{tang2019akupm}å’ŒRCoLM\cite{cao2019unifying}等。本文实现的算法属于混åˆæ–¹æ³•ã€‚
\section{系统开å‘技术}
\label{sec:tech-stack}
\subsection{æ•°æ®é‡‡é›†æŠ€æœ¯}
-电影推è系统使用的数æ®æ¥è‡ªâ€œç”µå½±é€é•œ1兆数æ®â€\footnote{https://grouplens.org/datasets/movielens/1m/}æ•°æ®é›†ï¼Œæ­¤å¤–还从IMDb\footnote{https://www.imdb.com/}åŠè±†ç“£\footnote{https://www.douban.com/}爬å–了相关电影数æ®ä½œä¸ºç ”究对象。
+电影推è系统使用的数æ®æ¥è‡ªâ€œMovieLens 1M Datasetâ€\footnote{https://grouplens.org/datasets/movielens/1m/}æ•°æ®é›†ï¼Œæ­¤å¤–还从IMDb\footnote{https://www.imdb.com/}åŠè±†ç“£ç½‘\footnote{https://www.douban.com/}爬å–了相关电影数æ®å¹¶è¿›è¡Œå¤„ç†ä½œä¸ºæœ¬æ–‡çš„研究对象。
在数æ®é‡‡é›†çš„过程中,使用Scrapy框架进行了数æ®çˆ¬å–,爬å–çš„æ•°æ®åŒ…括电影å称ã€ç”µå½±å°é¢ã€é¢„告片图片ã€ç”µæ™¯æƒ…节介ç»ã€å¯¼æ¼”ã€æ¼”员以åŠå‰§ä½œå®¶ã€‚
-最终,一共爬å–了3684部电影的数æ®ã€‚其中,从IMDb爬å–了3494部电影数æ®ï¼Œä»Žè±†ç“£çˆ¬å–了190æ¡ç”µå½±æ•°æ®ï¼ˆç”±äºŽè±†ç“£é™åˆ¶äº†æ¯IP访问é‡æ•…爬å–çš„æ•°æ®è¾ƒå°‘)。
+最终,总计爬å–了3684部电影的数æ®ã€‚其中,从IMDb爬å–了3494æ¡ç”µå½±æ•°æ®ï¼Œä»Žè±†ç“£çˆ¬å–了190æ¡ç”µå½±æ•°æ®ï¼ˆç”±äºŽè±†ç“£ç½‘é™åˆ¶äº†æ¯IP访问é‡æ•…爬å–çš„æ•°æ®è¾ƒå°‘)。
\subsection{æ•°æ®å­˜å‚¨æŠ€æœ¯}
本系统使用MongoDB与Neo4j存储数æ®ã€‚
@@ -175,30 +163,20 @@ Neo4j是一个具有高性能的图数æ®åº“,它将结构化的数æ®ä¿¡æ¯å‚¨
在本系统中,知识图谱的有关信æ¯è¢«å­˜å‚¨åœ¨Neo4j中,由于知识图谱本身图的特性,这充分利用了Neo4j作为图数æ®åº“的特点,å¯ä»¥æ供良好的性能支æŒã€‚
\subsection{åŽç«¯æŠ€æœ¯}
-本系统使用Flask框架作为网站åŽç«¯æ¡†æž¶ã€‚Flask是一个Python编写的轻é‡çº§å¾®æ¡†æž¶ã€‚它具有轻é‡ã€ä¾¿æ·ã€å¯æ‰©å±•ç­‰ç‰¹ç‚¹ã€‚
-
-本系统选择Flask框架充分利用了其便æ·ã€å¯æ‰©å±•ä»¥åŠå¼€å‘便æ·çš„特点,与本系统è¦æ±‚相符。
-
-本系统使用表现层状æ€è½¬æ¢ï¼ˆREST)风格的应用程åºæŽ¥å£ï¼ˆAPI)作为å‰åŽç«¯çš„交互接å£ã€‚
+本系统使用Flask框架作为网站åŽç«¯æ¡†æž¶ã€‚Flask是一个Python编写的轻é‡çº§å¾®æ¡†æž¶ã€‚它具有轻é‡ã€ä¾¿æ·ã€å¯æ‰©å±•ç­‰ç‰¹ç‚¹ã€‚系统使用Flask框架充分利用了其便æ·ã€å¯æ‰©å±•ä»¥åŠå¼€å‘便æ·çš„特点,与本系统è¦æ±‚相符。
-表现层状æ€è½¬æ¢ï¼ˆRepresentational State Transfer,REST)是一ç§åŸºäºŽHTTPå议的软件交互体系结构样å¼ï¼Œè¯¥å议是由Roy Thomas Fieldingåšå£«åœ¨2000å¹´çš„åšå£«è®ºæ–‡ä¸­å¼•ç”¨çš„\cite{fielding2000architectural},目的是促进ä¸åŒçš„软件/程åºçš„å¼€å‘。在网络上互相传输数æ®ã€‚表示层状æ€è½¬æ¢åŸºäºŽè¶…文本传输​​å议(HTTP)的一组约æŸï¼Œè¯¥å议是一ç§æ—¨åœ¨æ供万维网æœåŠ¡çš„软件构造样å¼ã€‚符åˆæˆ–兼容此体系结构样å¼ï¼ˆç®€ç§°ä¸ºREST或RESTful)的网络æœåŠ¡å…许客户端å‘出使用统一资æºæ ‡è¯†ç¬¦è®¿é—®å’Œæ“作网络资æºçš„请求,这些资æºä¸Žä¸€ç»„预定义的æ“作一致。因此,表示层状æ€è½¬æ¢æ供了Internet上计算机系统之间相互使用资æºçš„互æ“作性。与其他类型的网络æœåŠ¡ï¼ˆä¾‹å¦‚SOAPæœåŠ¡ï¼‰ç›¸æ¯”,它们使用自己定义的一组æ“作æ¥è®¿é—®ç½‘络资æºã€‚
+系统使用表现层状æ€è½¬æ¢ï¼ˆREST)风格的应用程åºæŽ¥å£ï¼ˆAPI)作为å‰åŽç«¯çš„交互接å£ã€‚表现层状æ€è½¬æ¢ï¼ˆRepresentational State Transfer,REST)是一ç§åŸºäºŽHTTPå议的软件交互体系结构样å¼ï¼Œè¯¥å议是由Roy Thomas Fieldingåšå£«åœ¨2000å¹´çš„åšå£«è®ºæ–‡ä¸­å¼•ç”¨çš„\cite{fielding2000architectural},目的是促进ä¸åŒçš„软件/程åºçš„å¼€å‘。在网络上互相传输数æ®ã€‚表示层状æ€è½¬æ¢åŸºäºŽè¶…文本传输​​å议(HTTP)的一组约æŸï¼Œè¯¥å议是一ç§æ—¨åœ¨æ供万维网æœåŠ¡çš„软件构造样å¼ã€‚符åˆæˆ–兼容此体系结构样å¼ï¼ˆç®€ç§°ä¸ºREST或RESTful)的网络æœåŠ¡å…许客户端å‘出使用统一资æºæ ‡è¯†ç¬¦è®¿é—®å’Œæ“作网络资æºçš„请求,这些资æºä¸Žä¸€ç»„预定义的æ“作一致。因此,表示层状æ€è½¬æ¢æ供了Internet上计算机系统之间相互使用资æºçš„互æ“作性。与其他类型的网络æœåŠ¡ï¼ˆä¾‹å¦‚SOAPæœåŠ¡ï¼‰ç›¸æ¯”,它们使用自己定义的一组æ“作æ¥è®¿é—®ç½‘络资æºã€‚
-得益于本系统使用了REST风格的API,本系统能更有效地使用缓存æ¥æå‡å“应速度,åŒæ—¶æœ¬ç³»ç»Ÿå‰åŽç«¯çš„相互间通讯的无状æ€æ€§å¯ä»¥è®©ä¸åŒçš„æœåŠ¡å™¨çš„处ç†ä¸€è¿žä¸²è¯·æ±‚中ä¸åŒçš„请求,æ高了本系统的å¯æ‰©å±•æ€§ã€‚与此åŒæ—¶ï¼Œå¾—益于REST风格语义化的接å£ï¼Œä½¿å‰åŽç«¯äº¤äº’接å£æ›´æ¸…晰明了,使接å£çš„使用者能更高效便æ·åœ°è¿›è¡Œç›¸å…³çš„å¼€å‘工作。
+得益于本系统使用了REST风格的API,本系统能更有效地使用缓存æ¥æå‡å“应速度,åŒæ—¶å‰åŽç«¯é—´çš„通讯的无状æ€æ€§å¯ä»¥è®©ä¸åŒçš„æœåŠ¡å™¨å¤„ç†ä¸€è¿žä¸²è¯·æ±‚中ä¸åŒçš„请求,æ高了本系统的å¯æ‰©å±•æ€§ã€‚与此åŒæ—¶ï¼Œå¾—益于REST风格语义化的接å£ï¼Œä½¿å‰åŽç«¯äº¤äº’接å£æ›´æ¸…晰明了,使接å£çš„使用者能更高效便æ·åœ°è¿›è¡Œç›¸å…³çš„å¼€å‘工作。
\subsection{å‰ç«¯æŠ€æœ¯}
-本系统å‰ç«¯ä½¿ç”¨Angular框架。
+本系统å‰ç«¯ä½¿ç”¨Angular框架。Angular(通常指“Angular 2+â€æˆ–“Angular v2åŠä»¥ä¸Šâ€ï¼‰æ˜¯ä¸€ä¸ªåŸºäºŽTypeScriptçš„å¼€æºç½‘络应用框架,它的开å‘ç”±Googleçš„Angular团队领导åŒæ—¶ä¹Ÿæœ‰ä¸ªäººåŠå…¶ä»–å…¬å¸ç»´æŠ¤ã€‚Angular完全从相åŒå›¢é˜Ÿå¼€å‘çš„AngularJSé‡æ–°ç¼–写而æ¥ã€‚Angular常常作为MEAN技术栈的一部分。MEAN技术栈指MongoDBæ•°æ®åº“ã€Express.js网络æœåŠ¡å™¨æ¡†æž¶ã€Angular/AngularJS以åŠNode.jsæœåŠ¡å™¨è¿è¡Œæ—¶ã€‚ä¸åŒäºŽMEAN技术栈,本系统将其中的“Eâ€ï¼ˆæŒ‡Express.js网络æœåŠ¡å™¨æ¡†æž¶ï¼‰æ›¿æ¢ä¸ºäº†Flask网络æœåŠ¡å™¨æ¡†æž¶ã€‚
-Angular(通常指“Angular 2+â€æˆ–“Angular v2åŠä»¥ä¸Šâ€ï¼‰æ˜¯ä¸€ä¸ªåŸºäºŽTypeScriptçš„å¼€æºç½‘络应用框架,它的开å‘ç”±Googleçš„Angular团队领导åŒæ—¶ä¹Ÿæœ‰ä¸ªäººåŠå…¶ä»–å…¬å¸ç»´æŠ¤ã€‚Angular完全从相åŒå›¢é˜Ÿå¼€å‘çš„AngularJSé‡æ–°ç¼–写而æ¥ã€‚
-
-Angular常常作为MEAN技术栈的一部分。MEAN技术栈指MongoDBæ•°æ®åº“ã€Express.js网络æœåŠ¡å™¨æ¡†æž¶ã€Angular/AngularJS以åŠNode.jsæœåŠ¡å™¨è¿è¡Œæ—¶ã€‚
-
-ä¸åŒäºŽMEAN技术栈,本系统将其中的“Eâ€ï¼ˆæŒ‡Express.js网络æœåŠ¡å™¨æ¡†æž¶ï¼‰æ›¿æ¢ä¸ºäº†Flask网络æœåŠ¡å™¨æ¡†æž¶ã€‚
-
-通过使用Angular框架,本系统具有一个现代化ã€æ¨¡å—化的网页架构。åŒæ—¶å€ŸåŠ©äºŽAngular Material Components官方组件库,本系统å‰ç«¯UI符åˆæ料设计(Material Design)。
+通过使用Angular框架,本系统具有一个现代化ã€æ¨¡å—化ã€å“应å¼çš„网页架构。åŒæ—¶å€ŸåŠ©äºŽAngular Material Components官方组件库,本系统å‰ç«¯UI符åˆæ料设计(Material Design)。
\chapter{基于涟漪网络知识图谱的推è算法}
\label{ch:offline-recommendation}
\section{涟漪网络}
\subsection{架构}
-涟漪网络的总体架构如图~\ref{fig:ripplenet-framework}中所示,图上方的知识图谱中展示由用户交互产生的涟漪。涟漪网络以一个用户$u$和一个电影$v$作为输入,并输出用户$u$与电影$v$之间产生交互的概率。对输入用户$u$而言,其历å²äº¤äº’记录$V_u$是知识图谱中的ç§å­é›†ï¼Œè€ŒåŽæ²¿ç€çŸ¥è¯†å›¾è°±ä¸­çš„关系边形æˆå¤šä¸ªæ¶Ÿæ¼ªé›†$S_u^{k}\ (k=1, 2, \dots, H)$。一个涟漪集是è·ç¦»ç§å­é›†$V_u$ $k$跳的知识三元组。这些涟漪集用于与迭代地与电影$v$的嵌入(黄色的å—)表示相计算以得到关于电影$v$的用户$u$çš„å应(绿色的å—),最åŽç»“åˆå¾—到用户的最终嵌入表示(ç°è‰²çš„å—)。最终,将用户$u$与电影$v$的嵌入表示相结åˆä»¥è®¡ç®—出预测概率$y_{uv}$。
+涟漪网络的总体架构如图~\ref{fig:ripplenet-framework}所示,图上方的知识图谱中展示了由用户交互产生的涟漪。涟漪网络以一个用户$u$和一个电影$v$作为输入,并输出用户$u$与电影$v$之间产生交互的概率。对输入用户$u$而言,其历å²äº¤äº’记录$V_u$是知识图谱中的ç§å­é›†ï¼Œè€ŒåŽæ²¿ç€çŸ¥è¯†å›¾è°±ä¸­çš„关系边形æˆå¤šä¸ªæ¶Ÿæ¼ªé›†$S_u^{k}\ (k=1, 2, \dots, H)$。第k个涟漪集是ç§å­é›†$V_u$ç»è¿‡$k$跳得到的知识三元组。然åŽè¿­ä»£åœ°åˆ©ç”¨è¿™äº›æ¶Ÿæ¼ªé›†ä¸Žç”µå½±$v$的嵌入表示(黄色的å—)计算出用户$u$对电影$v$çš„çš„å“应(绿色的å—),最åŽç»“åˆå¾—到用户的最终嵌入表示(ç°è‰²çš„å—)。最终,利用用户$u$与电影$v$的嵌入表示计算出用户$u$对电影$v$感兴趣的预测概率$y_{uv}$。
\begin{figure}
\includegraphics[width=\textwidth]{ripplenet-framework}
\bicaption{涟漪网络的总体架构}{The overall framework of the Ripple Network}\label{fig:ripplenet-framework}
@@ -208,119 +186,139 @@ Angular常常作为MEAN技术栈的一部分。MEAN技术栈指MongoDBæ•°æ®åº“ã
\includegraphics[width=\textwidth]{illustration-of-ripple-sets}
\bicaption{电影知识图谱中由“阿甘正传â€æ¿€å‘的涟漪集}{Sets of ripples of “Forest Gump†in Knowledge Graph of movies}\label{fig:illustration-of-ripple-sets}
\end{figure}
-知识图谱常常å«æœ‰ä¸°å¯Œçš„事实信æ¯ä¸Žå®žä½“é—´çš„è”系。比如,如图~\ref{fig:illustration-of-ripple-sets}(图中ä¸åŒé¢œè‰²çš„圆圈表示有ä¸åŒè·³çš„涟漪集。较浅的è“色代表中间与周边实体的关è”程度。)所示电影“阿甘正传â€ä¸Žâ€œç½—伯特·泽米å‰æ–¯â€ç›¸è¿žï¼Œå®ƒä»¬ä¹‹é—´çš„è”系是“罗伯特·泽米å‰æ–¯â€æ˜¯ç”µå½±â€œé˜¿ç”˜æ­£ä¼ â€çš„导演。而“回到未æ¥â€ä¹Ÿä¸Žâ€œç½—伯特·泽米å‰æ–¯â€ç›¸è¿žã€‚因此,如果一个用户与电影“阿甘正传â€äº¤äº’过,则他很有å¯èƒ½ä¹Ÿå¯¹â€œå›žåˆ°æœªæ¥â€æ„Ÿå…´è¶£ã€‚为了æ述用户在知识图谱中分层次的å¯èƒ½å好集,递归定义用户$u$çš„k跳相关实体如下:
+知识图谱常常å«æœ‰ä¸°å¯Œçš„事实信æ¯ä¸Žå®žä½“é—´çš„è”系。比如,图~\ref{fig:illustration-of-ripple-sets}(图中ä¸åŒé¢œè‰²çš„圆圈表示ä¸åŒè·³æ•°çš„涟漪集,越浅的è“色代表ç§å­é›†ä¸Žè¯¥åŒºåŸŸå†…实体的关è”程度越低)中电影“阿甘正传â€ä¸Žâ€œç½—伯特·泽米å‰æ–¯â€ç›¸è¿žï¼Œå®ƒä»¬ä¹‹é—´çš„è”系为“罗伯特·泽米å‰æ–¯â€æ˜¯ç”µå½±â€œé˜¿ç”˜æ­£ä¼ â€çš„导演。而“回到未æ¥â€ä¹Ÿä¸Žâ€œç½—伯特·泽米å‰æ–¯â€ç›¸è¿žã€‚因此,如果一个用户与电影“阿甘正传â€äº¤äº’过,则他很有å¯èƒ½ä¹Ÿå¯¹â€œå›žåˆ°æœªæ¥â€æ„Ÿå…´è¶£ã€‚为了æ述用户在知识图谱中分层次的潜在å好集,递归定义用户$u$çš„$k$跳相关实体如下:
+
+\textbf{定义1(相关实体集) } 给定交互矩阵$\Upsilon$与知识图谱$G$,则用户$u$çš„$k$跳相关实体集的定义为å¼\eqref{relevant-entities}。
-\textbf{定义1(相关实体集) } 给定交互矩阵$\Upsilon$与知识图谱$G$,则用户$u$çš„$k$跳相关实体å¯ä»¥å®šä¹‰ä¸º
\begin{equation}
E_u^k=\{t|(h, r, t)\in G \text{且} h\in E^{k-1}_u\}, k = 1, 2, \dots, H\label{relevant-entities}
\end{equation}
-å¼\eqref{relevant-entities}中$E_u^0=V_u=\{v | y_{uv}=1\}$是用户的历å²å好集,å¯ä»¥çœ‹ä½œç”¨æˆ·$u$在知识图谱中的ç§å­é›†ã€‚
-相关实体集å¯ä»¥çœ‹ä½œç”¨æˆ·çš„历å²å好集在知识图谱中的自然扩展。给定相关实体集的定义,以下定义用户$u$çš„$k$跳涟漪集:
+å¼\eqref{relevant-entities}中,$E_u^0=V_u=\{v | y_{uv}=1\}$是用户的历å²å好集,å¯ä»¥çœ‹ä½œæ˜¯ç”¨æˆ·$u$在知识图谱中的ç§å­é›†ã€‚
+
+相关实体集å¯ä»¥çœ‹ä½œæ˜¯ç”¨æˆ·çš„历å²å好集在知识图谱中的自然扩展。给定相关实体集的定义,以下定义用户$u$çš„$k$跳涟漪集:
+
+\textbf{定义2(涟漪集)}用户$u$çš„$k$跳涟漪集å¯ä»¥çœ‹ä½œæ˜¯çŸ¥è¯†å›¾è°±ä¸­ä»¥$E^{k-1}_u$为起点的知识三元组,定义如å¼\eqref{ripple-set}所示。
-\textbf{定义2(涟漪集)}用户uçš„k跳涟漪集å¯ä»¥çœ‹ä½œæ˜¯çŸ¥è¯†å›¾è°±ä¸­ä»¥$E^{k-1}_u$为起点的知识三元组:
\begin{equation}
S_u^k = \{(h, r, t)|(h, r, t)\in G \text{且} h\in E^{k-1}_u\}, k = 1, 2, \dots, H\label{ripple-set}
\end{equation}
-“涟漪â€è¿™ä¸ªè¯æœ‰ä¸¤é‡æ„æ€ï¼šï¼ˆ1)对由多个雨点产生的真实涟漪的模拟,用户由其在实体中交互过的潜在兴趣集在知识图谱中由近åŠè¿œåœ°ä¼ é€’。这一过程如图~\ref{fig:illustration-of-ripple-sets}所示。(2)用户的潜在兴趣éšç€åœ¨çŸ¥è¯†å›¾è°±ä¸­ä¼šä¼ é€’的跳数$k$的增大é€æ¸é€’å‡ã€‚图~\ref{fig:illustration-of-ripple-sets}中è“色的å˜æµ…也显示了潜在兴趣递å‡çš„过程。
-一个顾虑是在跳数$k$增加的过程中涟漪集的大å°å¯èƒ½å¤ªå¤§ã€‚为了解决这个问题,注æ„到:
+“涟漪â€è¿™ä¸ªè¯æœ‰ä¸¤é‡æ„æ€ï¼šï¼ˆ1)对由多个雨点产生的真实涟漪的模拟,用户对电影的潜在兴趣集在知识图谱中由近åŠè¿œåœ°ä¼ é€’。这一过程如图~\ref{fig:illustration-of-ripple-sets}所示。(2)用户的潜在兴趣éšç€çŸ¥è¯†å›¾è°±ä¸­ä¼ é€’的跳数$k$的增大é€æ¸é€’å‡ã€‚图~\ref{fig:illustration-of-ripple-sets}中è“色的å˜æµ…显示了潜在兴趣递å‡çš„过程。
+
+一个å¯èƒ½å‡ºçŽ°çš„问题是在跳数$k$增加的过程中涟漪集的大å°å¯èƒ½è¿‡å¤§ã€‚为了解决这个问题,注æ„到:
(1)在真实使用的知识图谱中大é‡çš„实体是沉没实体,æ„æ€æ˜¯å®ƒä»¬åªæœ‰ä¼ å…¥é“¾è·¯è€Œæ²¡æœ‰ä¼ å‡ºé“¾è·¯ã€‚
(2)在电影推è的具体情境下,关系å¯ä»¥é™åˆ¶åœ¨æƒ…境相关的分类中以å‡å°‘涟漪集的数é‡å¹¶æ高实体间的相关度。
-(3)最大跳数$H$通常在实际应用中ä¸ä¼šå¤ªå¤§ï¼Œå› ä¸ºç¦»ç”¨æˆ·åŽ†å²åˆ—表较远的实体会带æ¥æ›´å¤šçš„嗓音而ä¸æ˜¯è¾ƒå¥½çš„ä¿¡å·ã€‚
+(3)最大跳数$H$通常在实际应用中ä¸ä¼šè¿‡å¤§ï¼Œå› ä¸ºç¦»ç”¨æˆ·åŽ†å²å好集较远的实体会带æ¥æ›´å¤šçš„错误推è而ä¸æ˜¯æ›´ä¸°å¯Œçš„推è结果。
-(4)在涟漪网络中,我们å¯ä»¥å¯¹ä¸€ä¸ªå›ºå®šå¤§å°çš„邻集而ä¸æ˜¯å¯¹å®Œæ•´çš„涟漪集采样从而更进一步地å‡å°è®¡ç®—工作é‡ã€‚设计这样的采样器是一个未æ¥çš„é‡è¦å·¥ä½œï¼Œå°¤å…¶æ˜¯éžç»Ÿä¸€çš„采样器能更好地æ•èŽ·ç”¨æˆ·çš„分等级的潜在兴趣。
+(4)在涟漪网络中,我们å¯ä»¥å¯¹ä¸€ä¸ªå›ºå®šå¤§å°çš„邻集而ä¸æ˜¯å¯¹å®Œæ•´çš„涟漪集采样从而更进一步地å‡å°è®¡ç®—工作é‡ã€‚设计这样的采样器是一个é‡è¦çš„工作,尤其是éžç»Ÿä¸€çš„采样器能更好地æ•èŽ·ç”¨æˆ·çš„分等级的潜在兴趣。
\subsection{å好扩散}
\label{sec:osum}
-在传统的ååŒè¿‡æ»¤ç®—法中是通过学习用户与物å“的潜在è”ç³»æ¥å®ŒæˆæŽ¨è过程,而在涟漪网络算法中,这一过程是通过å好扩散完æˆçš„:对æ¯ä¸€ä¸ªç”¨æˆ·ï¼Œæ¶Ÿæ¼ªç½‘络将它的过往兴趣视为一个知识图谱中的ç§å­é›†ï¼Œç„¶åŽæ²¿çŸ¥è¯†å›¾è°±ä¸­çš„路径é‡å¤åœ°æ‹“展用户的兴趣æ¥å‘现它的按等级划分的关于一个候选物å“的潜在的兴趣。我们使用真实的由雨滴产生的涟漪在水é¢ä¸Šæ‰©æ•£æ¥æ¨¡æ‹Ÿå好扩散,其中多个“涟漪â€é‡å å½¢æˆä¸€ä¸ªçŸ¥è¯†å›¾è°±ä¸Šçš„作为结果的用户å好分布。
+传统的ååŒè¿‡æ»¤ç®—法是通过学习用户与物å“间的潜在è”ç³»æ¥å®ŒæˆæŽ¨è,而在涟漪网络算法中,这一过程是通过å好扩散完æˆçš„:对æ¯ä¸ªç”¨æˆ·ï¼Œæ¶Ÿæ¼ªç½‘络将他的过往兴趣视为知识图谱中的ç§å­é›†ï¼Œç„¶åŽæ²¿çŸ¥è¯†å›¾è°±ä¸­çš„路径ä¸æ–­åœ°æ‹“展用户的潜在兴趣集,进而得到按等级划分的关于候选物å“的潜在兴趣集。我们利用现实生活中的由雨滴产生的涟漪在水é¢ä¸Šæ‰©æ•£æ¥æ¨¡æ‹Ÿå好扩散的过程,其中多个“涟漪â€é‡å å½¢æˆåŸºäºŽçŸ¥è¯†å›¾è°±çš„用户å好分布。
+
+如图~\ref{fig:ripplenet-framework},æ¯éƒ¨ç”µå½±éƒ½æœ‰ä¸€ä¸ªåµŒå…¥è¡¨ç¤º$v$,$v\in \mathbb{R}^{d}$,其中$\mathbb{R}$是实数集,$d$是嵌入表示å‘é‡çš„维数。给定电影的嵌入表示$v$以åŠç”¨æˆ·$1$跳涟漪集$S_u^{1}$,å¯ä»¥åˆ©ç”¨ç”µå½±$v$ã€$S_u^{1}$中的三元组中头节点$head_i$以åŠè¯¥ä¸‰å…ƒç»„中的关系$r_i$æ¥è®¡ç®—出电影$v$和实体$head_i$之间的相关度,如å¼\eqref{eq:item-entity-relevance}所示。
-如图~\ref{fig:ripplenet-framework},æ¯ä¸€éƒ¨ç”µå½±éƒ½å…·æœ‰ä¸€ä¸ªåµŒå…¥è¡¨ç¤ºv,$v\in R^{d}$,其中$d$是嵌入表示å‘é‡çš„维数。嵌入表示å¯ä»¥åŒ…å«å®žä½“的独热编ç \cite{koren2008factorization}ã€è¯æ±‡é›†\cite{wang2018dkn}ã€ä¸Šä¸‹æ–‡ä¿¡æ¯\cite{sun2017collaborative}或属性\cite{wang2018shine},而选择哪一ç§åµŒå…¥å‘é‡çš„计算方å¼å–决于其应用场åˆã€‚给定电影的嵌入表示v以åŠç”¨æˆ·$1$跳涟漪集$S_u^{1}$,æ¯ä¸€ä¸ª$S_U^{1}$中的事实三元组($h_i$,$r_i$,$t_i$)根æ®ç”µå½±v以åŠä¸‰å…ƒç»„中的头节点$head_i$的比较和三元组中的关系$r_i$æ¥ç¡®å®šç”µå½±$v$和实体$head_i$之间的相关度:
\begin{equation}
p_i=softmax(v^TR_ih_i)=\frac{exp(v^TR_ih_i)}{\sum_{(h, r, t)\in S_u^1} exp(v^TRh)}\label{eq:item-entity-relevance}
\end{equation}
-其中$R_i\in R^{d\times d}$与$h_i\in R^d$分别是关系$r_i$和头节点$h_i$的嵌入表示。相关度$p_i$å¯ä»¥è®¤ä¸ºæ˜¯åœ¨å‘é‡ç©ºé—´$R_i$中的电影v与实体$h_i$之间的相似度。åŒæ—¶è¿˜å°†å…³ç³»ä¿¡æ¯çš„嵌入表示矩阵在计算电影v与实体$h_i$之间的相似度时纳入考é‡ï¼Œå› ä¸ºä¸åŒå°±ç”µå½±-实体对之间的相似度在具有ä¸åŒå…³ç³»ä¿¡æ¯æ—¶å¯èƒ½æœ‰æ‰€ä¸åŒã€‚比如,“阿甘正传â€ä¸Žâ€œå›žåˆ°æœªæ¥â€åœ¨å¯¼æ¼”æ–¹é¢æœ‰å¾ˆé«˜çš„相似度,但它们在考虑体è£ä¿¡æ¯æˆ–剧作家方é¢å¯èƒ½æ²¡æœ‰ä»»ä½•è”系。
-在å–得相似度信æ¯ä¹‹åŽï¼Œå°†$S_u^{1}$中三元组的尾节点根æ®è®¡ç®—得到的相似概率进行加æƒæ±‚和,得到å‘é‡$o^{1}_u$:
+å¼\eqref{eq:item-entity-relevance}中,$R_i\in \mathbb{R}^{d\times d}$与$h_i\in \mathbb{R}^d$分别是关系$r_i$和头节点$h_i$的嵌入表示。相关度$p_i$为å‘é‡ç©ºé—´$R_i$中的电影$v$与实体$h_i$之间的相似度。åŒæ—¶è¿˜è€ƒè™‘了关系信æ¯çš„嵌入表示矩阵在计算电影$v$与实体$h_i$之间的相似度,因为ä¸åŒç”µå½±-实体对之间的相似度在ä¸åŒå…³ç³»çš„场景下å¯èƒ½æœ‰æ‰€ä¸åŒã€‚比如,“阿甘正传â€ä¸Žâ€œå›žåˆ°æœªæ¥â€åœ¨å¯¼æ¼”æ–¹é¢æœ‰å¾ˆé«˜çš„相似度,但它们在体è£æˆ–剧作家方é¢å¯èƒ½æ²¡æœ‰è”系。
+
+在完æˆç›¸ä¼¼åº¦è®¡ç®—之åŽï¼Œå°†$S_u^{1}$中三元组的尾节点根æ®è®¡ç®—得到的相似度进行加æƒæ±‚和,得到å‘é‡$o^{1}_u$,如å¼\eqref{eq:o1}所示。
+
\begin{equation}
o^1_u=\sum_{(h_i,r_i,t_i)\in S_u^1}p_it_i\label{eq:o1}
\end{equation}
-å¼~\eqref{eq:o1}中$t_i\in R^{d}$是事实三元组中的尾节点$t_i$。å‘é‡$o^{1}_u$å¯ä»¥è§†ä¸ºç”¨æˆ·å好集$V_u$关于电影$v$çš„1次å应。与ååŒè¿‡æ»¤ç®—法类似的是,它根æ®ç”¨æˆ·äº¤äº’过的物å“æ¥è¡¨ç¤ºç”¨æˆ·åµŒå…¥è€Œä¸æ˜¯ä½¿ç”¨å•ç‹¬çš„å‚æ•°æ¥è¡¨ç¤ºç”¨æˆ·å¹¶ä»¥æ­¤æ¥ç¼©å‡å‚数。通过å¼~\eqref{eq:item-entity-relevance}与å¼~\eqref{eq:o1},用户的å好从其交互过的电影(ç§å­é›†ï¼‰æˆåŠŸåœ¨çŸ¥è¯†å›¾è°±ä¸­è¿›è¡Œäº†ä¸€æ¬¡æ‰©æ•£ï¼Œè¿™ç§°ä¸ºæ¶Ÿæ¼ªç½‘络中的å好扩散。
-注æ„到å¯ä»¥å°†å¼~\eqref{eq:item-entity-relevance}中的$v$替æ¢ä¸º$o_u^1$,我们å¯ä»¥é‡å¤å好扩散的过程以得到用户的2次å应$o_u^2$。以此类推,最终我们å¯ä»¥å°†è¯¥ç”¨æˆ·å好集扩散至$H$跳。我们å¯ä»¥å¾—到用户的涟漪集$S_u^{i}, i=1,\dots,H$。从中我们å¯ä»¥å¾—到用户的ä¸åŒæ¬¡å应$o^{1}_u, o^{2}_u, o^{H}_u$。用户$u$关于电影$v$的嵌入表示由结åˆæ‰€æœ‰æ¬¡ä¸åŒå应计算得到:
+å¼\eqref{eq:o1}中,$t_i\in \mathbb{R}^{d}$,$t_i$是事实三元组中的尾节点。å‘é‡$o^{1}_u$å¯ä»¥è§†ä¸ºç”¨æˆ·å好集$V_u$关于电影$v$çš„$1$次å“应。与ååŒè¿‡æ»¤ç®—法类似的是,它根æ®ç”¨æˆ·äº¤äº’过的物å“æ¥è¡¨ç¤ºç”¨æˆ·åµŒå…¥è€Œä¸æ˜¯ä½¿ç”¨å•ç‹¬çš„å‚æ•°æ¥è¡¨ç¤ºç”¨æˆ·ï¼Œä»Žè€Œå‡å°‘了å‚æ•°æ•°é‡ã€‚通过å¼\eqref{eq:item-entity-relevance}与å¼\eqref{eq:o1},用户的å好从其交互过的电影(å³ç§å­é›†ï¼‰æˆåŠŸåœ¨çŸ¥è¯†å›¾è°±ä¸­è¿›è¡Œäº†ä¸€æ¬¡æ‰©æ•£ï¼Œè¿™ç§°ä¸ºæ¶Ÿæ¼ªç½‘络中的å好扩散。
+
+å¯ä»¥å°†å¼\eqref{eq:item-entity-relevance}中的$v$替æ¢ä¸º$o_u^1$,我们å¯ä»¥å†æ¬¡è¿›è¡Œå好扩散以得到用户的2次å“应$o_u^2$。以此类推,最终我们å¯ä»¥å°†è¯¥ç”¨æˆ·çš„å好集扩散至$H$跳,得到用户的涟漪集$S_u^{i}, i=1,\dots,H$。从中å¯ä»¥å¾—到用户的多次å“应$o^{1}_u, o^{2}_u, o^{H}_u$。用户$u$关于电影$v$的嵌入表示是通过结åˆæ‰€æœ‰çš„ä¸åŒå“应并计算得到的,如å¼\eqref{eq:osum}所示。
\begin{equation}
u=o_u^1+o_u^2+\dots+o_u^H\label{eq:osum}
\end{equation}
-尽管最åŽä¸€è·³çš„用户å“应中ç†è®ºä¸ŠåŒ…å«äº†æ‰€æœ‰ä¹‹å‰è·³çš„ä¿¡æ¯ï¼Œä½†å¯¹$o^k_u$进行求和ä»ç„¶æ˜¯æœ‰å¿…è¦çš„,因为最åŽä¸€è·³çš„用户å“应å¯èƒ½åœ¨å好传递的过程中稀释了,ä¸èƒ½å¾ˆå¥½åœ°è¡¨ç¤ºç”¨æˆ·åµŒå…¥ã€‚最终,用户嵌入与电影嵌入相结åˆä»¥æ¥è¾“出预测的用户对电影感兴趣的概率:
+
+尽管最åŽä¸€è·³çš„用户å“应中ç†è®ºä¸ŠåŒ…å«äº†æ‰€æœ‰ä¹‹å‰å¾—到的信æ¯ï¼Œä½†æ˜¯å¯¹$o^k_u$进行求和ä»ç„¶æ˜¯æœ‰å¿…è¦çš„,因为之å‰å¾—到的用户å“应å¯èƒ½åœ¨å好传递的过程中稀释了,因此仅使用最åŽä¸€è·³çš„å“应ä¸èƒ½å¾ˆå¥½åœ°è¡¨ç¤ºç”¨æˆ·åµŒå…¥ã€‚最终,利用用户嵌入与电影嵌入,计算出用户对电影感兴趣的概率,如å¼\eqref{eq:predicted-possibility}所示。
\begin{equation}
y_{uv}=\zeta(u^Tv)\label{eq:predicted-possibility}
\end{equation}
+
其中,$\zeta(x)=\frac{1}{1+exp(-x)}$是sigmoid函数。
\section{学习算法}
-在涟漪网络算法中我们的目标是通过å¼~\eqref{eq:predicted-possibility}求出用户对电影感兴趣的概率。但是,为了将其计算出æ¥æˆ‘们需è¦å…ˆæ±‚出所有物å“ã€ç”¨æˆ·ä»¥åŠå…³ç³»çš„嵌入表示,如第\ref{sec:osum}节中所述,用户的嵌入表示å¯ä»¥é€šè¿‡å…¶æ¶Ÿæ¼ªé›†æ¥ä»£æ›¿ï¼Œä»¥æ­¤æ¶ˆå…ƒã€‚但物å“åŠå…³ç³»çš„嵌入表示å´æ˜¯éœ€è¦æ±‚出æ¥çš„。
+在涟漪网络算法中,我们的目标是通过å¼\eqref{eq:predicted-possibility}求出用户对电影感兴趣的概率。但是,为了将其计算出æ¥æˆ‘们需è¦å…ˆæ±‚出所有物å“ã€ç”¨æˆ·ä»¥åŠå…³ç³»çš„嵌入表示,如第\ref{sec:osum}节中所述,用户的嵌入表示å¯ä»¥é€šè¿‡å…¶æ¶Ÿæ¼ªé›†æ¥ä»£æ›¿ï¼Œä»¥æ­¤æ¶ˆå…ƒã€‚但物å“åŠå…³ç³»çš„嵌入表示å´æ˜¯éœ€è¦æ±‚出æ¥çš„。
-为了求出物å“åŠå…³ç³»çš„嵌入表示,我们使用最大åŽéªŒæ¦‚率估计的方法。
+为了求出物å“åŠå…³ç³»çš„嵌入表示,这里使用最大åŽéªŒæ¦‚率估计的方法。
-我们的目标是在已ç»å¾—到知识图谱$G$以åŠç”¨æˆ·ä¸Žç”µå½±çš„交互矩阵$\Upsilon$的情况下最大化模型å‚æ•°$\Gamma$:
+我们的目标是在已ç»å¾—到知识图谱$G$以åŠç”¨æˆ·ä¸Žç”µå½±çš„交互矩阵$\Upsilon$的情况下最大化模型å‚æ•°$\Gamma$,如å¼\eqref{eq:max}所示。
\begin{equation}
- max\ p(\Gamma |G,\Upsilon)
+ max\ p(\Gamma |G,\Upsilon)\label{eq:max}
\end{equation}
-其中å‚æ•°$\Gamma$包å«äº†æ‰€æœ‰çš„嵌入,包å«å…¨éƒ¨çš„实体ã€å…³ç³»å’Œç”µå½±ã€‚这我等价于最大化
+
+å¼\eqref{eq:max}中,å‚æ•°$\Gamma$包å«äº†å…¨éƒ¨çš„实体ã€å…³ç³»å’Œç”µå½±çš„嵌入表示。å¯ä»¥å°†å¼\eqref{eq:max}等价于最大化å¼\eqref{eq:equal-max}。
+
\begin{equation}
p(\Gamma |G,\Upsilon)=\frac{p(\Gamma,G,\Upsilon)}{p(G,\Upsilon)}\varpropto p(\Gamma)\centerdot p(G|\Gamma)\centerdot p(\Upsilon|\Gamma,G)\label{eq:equal-max}
\end{equation}
-æ ¹æ®è´å¶æ–¯å…¬å¼ï¼Œåœ¨å¼~\eqref{eq:equal-max}中,第一项$p(\Gamma)$测é‡æ¨¡åž‹å‚数的先验概率。我们将$p(\Gamma)$设为å‡å€¼ä¸º0,方差为对角å方差矩阵的正æ€åˆ†å¸ƒï¼š
+
+æ ¹æ®è´å¶æ–¯å…¬å¼ï¼Œåœ¨å¼\eqref{eq:equal-max}中,第一项$p(\Gamma)$代表模型å‚数的先验概率。设$p(\Gamma)$为å‡å€¼ä¸º0,方差为对角å方差矩阵的正æ€åˆ†å¸ƒï¼Œå¦‚å¼\eqref{eq:normal-distribution}所示。
+
\begin{equation}
- p(\Gamma)=N(0,\lambda_1^{-1}I)
+ p(\Gamma)=N(0,\lambda_1^{-1}I)\label{eq:normal-distribution}
\end{equation}
-å¼~\eqref{eq:equal-max}中的第二项是给定$\Gamma$的知识图谱的最大似然函数。最近,有研究者æ出了许多ç§è®¡ç®—知识图谱嵌入的方法,包括基于è·ç¦»çš„方法和基于语义匹é…的方法。在本算法中,我们使用三路张é‡åˆ†è§£çš„方法æ¥å»ºç«‹çŸ¥è¯†å›¾è°±åµŒå…¥çš„最大似然函数:
+
+å¼\eqref{eq:equal-max}中,$p(G|\Gamma)$是给定$\Gamma$的知识图谱的最大似然函数。最近,有研究者æ出了多ç§è®¡ç®—知识图谱嵌入的方法,包括基于è·ç¦»çš„方法和基于语义匹é…的方法。在本算法中,使用三路张é‡åˆ†è§£çš„方法æ¥å»ºç«‹çŸ¥è¯†å›¾è°±åµŒå…¥çš„最大似然函数,如å¼\eqref{eq:term2}。
+
\begin{equation}
p(G|\Gamma)=\prod_{(h,r,t)\in E\times R\times E}p((h,r,t)|\Gamma)=\prod_{(h,r,t)\in E\times R\times E}N(I_{h,r,t}-h^TRt,\lambda_2^{-1})\label{eq:term2}
\end{equation}
-其中若$I_{h,r,t}\in G$则标志$I_{h,r,t}$等于1å¦åˆ™ä¸º0。基于å¼~\eqref{eq:term2}中的定义,知识图谱嵌入中的实体对评分函数与å好传递过程中的电影-实体对å¯ä»¥åœ¨ç›¸åŒçš„计算模型下被统一。å¼~\eqref{eq:equal-max}中的第三项是给定$\Gamma$与知识图谱的似然函数,å¯ä»¥çœ‹ä½œä¼¯åŠªåˆ©åˆ†å¸ƒçš„累乘:
+
+å¼\eqref{eq:term2}中,若$I_{h,r,t}\in G$则标志$I_{h,r,t}$等于1,å¦åˆ™ä¸º0。å¼\eqref{eq:equal-max}中的第三项是给定$\Gamma$与知识图谱的似然函数,å¯ä»¥çœ‹ä½œä¼¯åŠªåˆ©åˆ†å¸ƒçš„累乘,如å¼\eqref{eq:bernoulli}。
+
\begin{equation}
- p(\Upsilon|\Gamma,G)=\prod_{(u,v)\in \Upsilon}\zeta(u^Tv)^{y_{uv}}\centerdot (1-\zeta (u^Tv))^{1-y_{uv}}
+ p(\Upsilon|\Gamma,G)=\prod_{(u,v)\in \Upsilon}\zeta(u^Tv)^{y_{uv}}\centerdot (1-\zeta (u^Tv))^{1-y_{uv}}\label{eq:bernoulli}
\end{equation}
-对å¼~\eqref{eq:equal-max}å–负对数,我们有下é¢çš„æŸå¤±å‡½æ•°ï¼š
+
+对å¼\eqref{eq:equal-max}å–负对数,有如å¼\eqref{eq:term3}所示的æŸå¤±å‡½æ•°ï¼š
\begin{multline}
min\ L=-log(p(\Upsilon|\Gamma,G)\centerdot p(G|\Gamma)\centerdot p(\Gamma))\\
=\sum_{(u,v)\in \Upsilon}-(y_{uv}log\ \zeta(u^Tv)+(1-y_{uv}log(1-\zeta(u^Tv))))\\
+\frac{\lambda_2}{2}\sum_{r\in R}\|I_r-E^TRE\|_2^2+\frac{\lambda_1}{2}(\|V\|^2_2+\|E\|^2_2+\sum_{r\in R}\|R\|^2_2)\label{eq:term3}
\end{multline}
-其中$V$å’Œ$E$是对所有电影与实体的嵌入表示。$I_r$是在知识图谱中的对关系$r$的标志å‘é‡$I$的分片。在å¼~\eqref{eq:term3}中第一项度é‡äº¤äº’矩阵$\Upsilon$与由涟漪网络的估测值之间的交å‰ç†µï¼Œç¬¬äºŒé¡¹åº¦é‡çœŸå®žçš„知识图谱分片$I_r$以åŠäººä¸ºæž„建的指示矩阵$E^{T}RE$之间的å‡æ–¹è¯¯å·®ï¼Œæœ€åŽä¸€é¡¹æ˜¯ä¸ºé˜²æ­¢è¿‡æ‹ŸåˆåŠ å…¥çš„正则项。
-直接求解上å¼æ¥å¾—到å‚æ•°$\Gamma$是ä¸å¯èƒ½çš„,因此我们使用éšæœºæ¢¯åº¦ä¸‹é™ç®—法递归地优化æŸå¤±å‡½æ•°æ¥æ±‚解模型å‚数。然åŽæˆ‘们å†è®¡ç®—关于å‚æ•°$\Gamma$çš„æŸå¤±å‡½æ•°çš„梯度并更根æ®é‡‡æ ·å¾—到的一å°æ‰¹æ•°æ®åå‘传递以更新å‚数并最终得到å‚æ•°$\Gamma$。
+å¼\eqref{eq:term3}中,$V$å’Œ$E$是所有电影与实体的嵌入表示,$I_r$是在知识图谱中对关系$r$的标志å‘é‡$I$的分å‘é‡ã€‚在å¼\eqref{eq:term3}中,第一项是交互矩阵$\Upsilon$与涟漪网络的估测值之间的交å‰ç†µï¼Œç¬¬äºŒé¡¹æ˜¯çœŸå®žçš„知识图谱分å‘é‡$I_r$以åŠäººä¸ºæž„建的指示矩阵$E^{T}RE$之间的å‡æ–¹è¯¯å·®ï¼Œæœ€åŽä¸€é¡¹æ˜¯ä¸ºé˜²æ­¢è¿‡æ‹ŸåˆåŠ å…¥çš„正则项。
+
+直接求解上å¼æ¥å¾—到å‚æ•°$\Gamma$是ä¸å¯èƒ½çš„,因此å¯ä»¥ä½¿ç”¨éšæœºæ¢¯åº¦ä¸‹é™ç®—法递归地优化æŸå¤±å‡½æ•°æ¥æ±‚解模型å‚数,而åŽå†è®¡ç®—å‚æ•°$\Gamma$çš„æŸå¤±å‡½æ•°çš„梯度,并根æ®é‡‡æ ·å¾—到的一å°æ‰¹æ•°æ®åå‘传递,然åŽæ›´æ–°å‚数并最终得到å‚æ•°$\Gamma$。
\section{分æž}
\subsection{å¯è§£é‡Šæ€§}
-å¯è§£é‡Šçš„推è系统旨在é˜é‡Šä¸ºä»€ä¹ˆç”¨æˆ·ä¼šå¯¹ä¸€ä»¶ç‰©å“感兴趣,这帮助æå‡ç”¨æˆ·å¯¹æŽ¨è结果的满æ„度以åŠå¯¹æŽ¨è系统的信任。对推è结果的解释通常基于标签ã€è¯­ä¹‰åˆ†æžç­‰ã€‚因为涟漪网络探索用户基于知识图谱的兴趣,因此它æ供了一ç§åŸºäºŽçŸ¥è¯†å›¾è°±ä¸­çš„关系路径æ¥é˜è¿°æŽ¨è结果的全新方å¼ã€‚比如,在图~\ref{fig:illustration-of-ripple-sets}中,当用户对“幸ç¦ç»ˆç‚¹ç«™â€æ„Ÿå…´è¶£ï¼Œåˆ™è¯¥ç”¨æˆ·ä¹Ÿå¯èƒ½å¯¹â€œè’岛余生â€æ„Ÿå…´è¶£ã€‚因为在知识图谱中,“汤姆·汉克斯â€ä¸Žâ€œå¹¸ç¦ç»ˆç‚¹ç«™â€ç›¸è¿žï¼Œå…³ç³»æ˜¯æ¼”员,而“汤姆·汉克斯â€ä¸Žâ€œè’岛余生â€ä¹Ÿç›¸è¿žï¼Œå…³ç³»ä¹Ÿæ˜¯æ¼”员,也就是说“è’岛余生â€ä¸Žâ€œå¹¸ç¦ç»ˆç‚¹ç«™â€æœ‰ç›¸åŒçš„演员。这便解释了为什么当用户对“幸ç¦ç»ˆç‚¹ç«™â€æ„Ÿå…´è¶£ï¼Œåˆ™è¯¥ç”¨æˆ·ä¹Ÿå¯èƒ½å¯¹â€œè’岛余生â€æ„Ÿå…´è¶£ã€‚而涟漪网络算法正是通过这ç§æ–¹å¼è¿ä½œçš„。涟漪网络算法通过在知识图谱中寻找与用户交互过的电影(ç§å­é›†ï¼‰ç›¸è¿žçš„物å“,并ä¸æ–­æ‰©æ•£ï¼Œæœ€ç»ˆæŽ¨è结果之所以拥有较高的准确性,正是因为如上所述的原因。
+å¯è§£é‡Šçš„推è系统旨在é˜é‡Šä¸ºä»€ä¹ˆç”¨æˆ·ä¼šå¯¹ä¸€ä»¶ç‰©å“感兴趣,这帮助æå‡ç”¨æˆ·å¯¹æŽ¨è结果的满æ„度以åŠå¯¹æŽ¨è系统的信任。对推è结果的解释通常基于标签ã€è¯­ä¹‰åˆ†æžç­‰ã€‚因为涟漪网络探索用户基于知识图谱的兴趣,因此它æ供了一ç§åŸºäºŽçŸ¥è¯†å›¾è°±ä¸­çš„关系路径æ¥é˜è¿°æŽ¨è结果的全新方å¼ã€‚比如,在图~\ref{fig:illustration-of-ripple-sets}中,当用户对“幸ç¦ç»ˆç‚¹ç«™â€æ„Ÿå…´è¶£ï¼Œåˆ™è¯¥ç”¨æˆ·ä¹Ÿå¯èƒ½å¯¹â€œè’岛余生â€æ„Ÿå…´è¶£ã€‚因为在知识图谱中,“汤姆·汉克斯â€ä¸Žâ€œå¹¸ç¦ç»ˆç‚¹ç«™â€ç›¸è¿žï¼Œå…³ç³»æ˜¯æ¼”员,而“汤姆·汉克斯â€ä¸Žâ€œè’岛余生â€ä¹Ÿç›¸è¿žï¼Œå…³ç³»ä¹Ÿæ˜¯æ¼”员,æ¢å¥è¯è¯´ï¼Œâ€œè’岛余生â€ä¸Žâ€œå¹¸ç¦ç»ˆç‚¹ç«™â€æœ‰ç›¸åŒçš„演员。这便解释了用户对“幸ç¦ç»ˆç‚¹ç«™â€å’Œâ€œè’岛余生â€åŒæ—¶æ„Ÿå…´è¶£çš„原因。涟漪网络算法通过在知识图谱中寻找与用户交互过的电影(ç§å­é›†ï¼‰ç›¸è¿žçš„物å“,并ä¸æ–­æ‰©æ•£ï¼Œæœ€ç»ˆç¡®ä¿æŽ¨è结果具有较高的准确性。
\subsection{涟漪é‡å }
-在涟漪网络中一个常è§çš„现象是用户涟漪集中的电影å¯èƒ½éžå¸¸å¤šï¼Œè€Œä¼šåœ¨å好传递的过程中ä¸å¯é¿å…地导致其真实的潜在å好信æ¯è¢«ç¨€é‡Šã€‚然åŽï¼Œè§‚察到用户点击记录中ä¸åŒçš„电影常常高度é‡å ã€‚æ¢å¥è¯è¯´ï¼Œä»Žç§å­é›†å‡ºå‘到达一部电影常常有ä¸æ­¢ä¸€æ¡è·¯å¾„。比如,在图~\ref{fig:illustration-of-ripple-sets}中,如果一个用户喜欢“阿甘正传â€ï¼Œåˆ™ä»–也å¯èƒ½å–œæ¬¢â€œè’岛余生â€ã€‚在该知识图谱中,从“阿甘正传â€åˆ°â€œè’岛余生â€æœ‰ä¸¤æ¡è·¯å¾„:“阿甘正传-U.S.-è’岛余生â€ä¸Žâ€œé˜¿ç”˜æ­£ä¼ -汤姆·汉克斯-è’岛余生â€ï¼Œè¿™æ­£æ˜¯æ¶Ÿæ¼ªé‡å çš„表现。
+在涟漪网络中,一个å¯èƒ½çš„问题是涟漪集中的电影éžå¸¸å¤šï¼Œä»Žè€Œåœ¨å好传递的过程中ä¸å¯é¿å…地导致用户的真实潜在å好信æ¯è¢«ç¨€é‡Šã€‚然而,用户点击记录中ä¸åŒçš„电影常常高度é‡å ï¼ˆä»Žç§å­é›†å‡ºå‘到达一部电影常常有ä¸æ­¢ä¸€æ¡è·¯å¾„),这在很大程度上é¿å…了真实潜在å好信æ¯è¢«ç¨€é‡Šçš„问题。比如,在图~\ref{fig:illustration-of-ripple-sets}中,如果一个用户喜欢“阿甘正传â€ï¼Œåˆ™ä»–也å¯èƒ½å–œæ¬¢â€œè’岛余生â€ã€‚在该知识图谱中,从“阿甘正传â€åˆ°â€œè’岛余生â€æœ‰ä¸¤æ¡è·¯å¾„:“阿甘正传-U.S.-è’岛余生â€ä¸Žâ€œé˜¿ç”˜æ­£ä¼ -汤姆·汉克斯-è’岛余生â€ï¼Œè¿™æ­£æ˜¯æ¶Ÿæ¼ªé‡å çš„表现。
\section{测试}
\subsection{æ•°æ®é›†}
-该测试使用“电影é€é•œ1兆数æ®â€æ•°æ®é›†ã€‚该数æ®é›†ç”±ç”µå½±ä¿¡æ¯ã€ç”¨æˆ·ä¿¡æ¯ä»¥åŠç”¨æˆ·å¯¹ç”µå½±çš„评分三部分组æˆã€‚其中,å«æœ‰ç”µå½±æ•°æ®3883æ¡ã€ç”¨æˆ·æ•°æ®6040æ¡ä»¥åŠ1000209æ¡ç”¨æˆ·å¯¹ç”µå½±çš„评分数æ®ã€‚因该数æ®é›†æ•°æ®é‡é€‚中,数æ®å‡†ç¡®å¯é ï¼Œå› æ­¤åœ¨æŽ¨è系统的性能测试中被广泛使用。
+本测试使用“MovieLens 1M Datasetâ€æ•°æ®é›†ã€‚该数æ®é›†ç”±ç”µå½±ä¿¡æ¯ã€ç”¨æˆ·ä¿¡æ¯ä»¥åŠç”¨æˆ·å¯¹ç”µå½±çš„评分三部分组æˆã€‚其中,å«æœ‰ç”µå½±æ•°æ®3883æ¡ã€ç”¨æˆ·æ•°æ®6040æ¡ä»¥åŠ1000209æ¡ç”¨æˆ·å¯¹ç”µå½±çš„评分数æ®ã€‚因该数æ®é›†æ•°æ®é‡é€‚中,数æ®å‡†ç¡®å¯é ï¼Œå› æ­¤åœ¨æŽ¨è系统的性能测试中被广泛使用。
-对于知识图谱,该测试ä¾æ®â€œç”µå½±é€é•œ1兆数æ®â€ä¸­çš„电影从Microsoft Satori中æå–相关的知识图谱数æ®æ¥æž„建知识图谱。
+本测试使用的知识图谱æ¥è‡ªMicrosoft Satori,是ä¾æ®â€œMovieLens 1M Datasetâ€ä¸­çš„电影å称从Microsoft Satori中æå–相关的节点的与关系数æ®å¾—到的。
\subsection{基线}
-在本测试中,将本算法的测试结果与以下算法的相比较:
+本测试中,会将本算法的测试结果与以下算法的相比较:
-DKN\cite{wang2018dkn}是之å‰åŒæ ·ç”±å¾®è½¯å›¢é˜Ÿåœ¨ WWW2018 会议上å‘表的。它是一个主è¦é’ˆå¯¹æ–°é—»ä»»åŠ¡æ出的框架,知识图谱用在对新闻标题作嵌入的层é¢ã€‚DKN æ出对新闻标题内æ¯ä¸€ä¸ªå…³é”®å®žä½“,在知识图谱内找到其实体嵌入和上下文嵌入。
+DKN\cite{wang2018dkn}是由微软团队在WWW2018会议上å‘表的。它是一个主è¦é’ˆå¯¹æ–°é—»ä»»åŠ¡æ出的框架,知识图谱用于辅助计算新闻标题的嵌入表示。DKNæ出对新闻标题内æ¯ä¸€ä¸ªå…³é”®å®žä½“,在知识图谱内找到其实体嵌入和上下文嵌入。
-CKE\cite{zhang2016collaborative} 是微软在 KDD2016 å¹´å‘表的,其模型结构在原有系统过滤得到 U, V å‘é‡çš„基础上,将物å“的嵌入与其他æè¿°ä¿¡æ¯ç›¸ç»“åˆï¼Œè¿™äº›ä¿¡æ¯ä¸»è¦æœ‰:
-采用 TransR 算嵌入得到的知识图谱,图谱内æ¯ä¸ªå®žä½“嵌入表示被æå–为物å“的结构化å‘é‡ä¿¡æ¯ã€‚
+CKE\cite{zhang2016collaborative}是微软在KDD2016å¹´å‘表的,其模型结构在原有系统过滤得到 $U$,$V$å‘é‡çš„基础上,将物å“的嵌入与其他æè¿°ä¿¡æ¯ç›¸ç»“åˆï¼Œè¿™äº›ä¿¡æ¯ä¸»è¦æœ‰:
+采用TransR算法计算知识图谱嵌入表示,知识图谱内æ¯ä¸ªå®žä½“嵌入表示被æå–为物å“的结构化å‘é‡ä¿¡æ¯ã€‚
采用SDAE模型得到物å“æ述性文本的文本性嵌入表示。
采用SCAE模型得到物å“相关图åƒçš„视觉嵌入表示。
-SHINE\cite{wang2018shine}设计深度自编ç å™¨æ¥åµŒå…¥è¯­ä¹‰ç½‘络,社交网络æ¥è¿›è¡ŒæŽ¨è。其为用户-物å“的交互使用自动编ç å™¨å¹¶åˆ»ç”»ç”¨æˆ·æ„Ÿå…´è¶£çš„概率。
+SHINE\cite{wang2018shine}设计深度自编ç å™¨å¹¶åµŒå…¥è¯­ä¹‰ç½‘络以åŠç¤¾äº¤ç½‘络æ¥è¿›è¡ŒæŽ¨è。其为用户-物å“的交互使用自动编ç å™¨å¹¶åˆ»ç”»ç”¨æˆ·æ„Ÿå…´è¶£çš„概率。
-PER\cite{yu2014personalized}将知识图谱作为辅助信æ¯åŸºäºŽè·¯å¾„的方法中比较ç»å…¸çš„算法,是对åŽç»­æ¨¡åž‹åšçš„改进。其æ出的元路径å¯ä»¥ä¸ºæŽ¨è系统æä¾›å¯é çš„æ–¹å‘,但是需è¦äº‹å…ˆç†Ÿæ‚‰é¢†åŸŸå†…知识,进行人为路径设计。
+PER\cite{yu2014personalized}是以基于路径的方法æ¥å°†çŸ¥è¯†å›¾è°±ä½œä¸ºè¾…助信æ¯ä¸­çš„比较ç»å…¸çš„算法。其æ出的元路径å¯ä»¥ä¸ºæŽ¨è系统æä¾›å¯é çš„æ–¹å‘,但是需è¦ä½¿ç”¨è€…了解领域内知识,进行人为路径设计。
-LibFM\cite{rendle2012factorization}是一个广泛使用的基于功能的在CTR场景中的分解模型。
+LibFM\cite{rendle2012factorization}是一个广泛使用的在CTR场景中的分解推è模型。
Wide\&Deep\cite{cheng2016wide}是一个结åˆçº¿æ€§è·¯å¾„的推è模型。类似于LibFM,我们将用户ã€ç‰©å“åŠå®žä½“的嵌入表示作为其输入。
\subsection{测试步骤}
-在涟漪网络中,设置跳数$H$=2。根æ®å®žéªŒç»“果,较大的跳数几乎无法æ高性能å´ä¼šé€ æˆè¾ƒå¤§çš„计算负担。我们将数æ®åˆ’分为训练集ã€è¯„估集与测试集,按照6:2:2的比较。实验进行5次,计算准确度与AUC然åŽå–å¹³å‡å€¼ã€‚
+在涟漪网络中,设置跳数$H=2$。根æ®å®žéªŒç»“果,较大的跳数几乎无法æ高性能å´ä¼šé€ æˆè¾ƒå¤§çš„计算开销。我们将数æ®åˆ’分为训练集ã€è¯„估集与测试集,按照6:2:2的比例进行分é…。实验进行5次,计算准确度以åŠAUC然åŽå–å¹³å‡å€¼ã€‚
\subsection{结果}
测试结果如表~\ref{tab:acc-auc}中所示,总体上涟漪网络算法的性能最佳,其次是Wide\&Deep算法,说明他们å¯ä»¥å……分利用知识图谱中的有效信æ¯æ¥è¾…助推è算法。而表现最差的是PER算法,这å¯èƒ½æ˜¯å› ä¸ºæ‰‹å·¥å®šä¹‰çš„元路径在电影推èæ–¹é¢æ•ˆæžœè¾ƒå·®ã€‚
\begin{table}
@@ -338,23 +336,21 @@ Wide\&Deep\cite{cheng2016wide}是一个结åˆçº¿æ€§è·¯å¾„的推è模型。类ä¼
\bottomrule
\end{tabular}
\end{table}
-\chapter{电影推è系统}
+\chapter{基于知识图谱的电影推è系统}
\section{系统整体设计}
-如第\ref{sec:tech-stack}节中所述,本系统使用的数æ®æ¥è‡ªâ€œç”µå½±é€é•œ1兆数æ®â€ã€IMDb和豆瓣。其中IMDb和豆瓣的数æ®æ˜¯ä½¿ç”¨çˆ¬è™«å¤„ç†çš„。最åŽå†ä½¿ç”¨Python脚本对数æ®è¿›è¡Œå¤„ç†åŠ å·¥ï¼Œå¹¶å¯¼å…¥MongoDBå’ŒNeo4j。
+如第\ref{sec:tech-stack}节中所述,本系统使用的数æ®æ¥è‡ªâ€œMovieLens 1M Datasetâ€ã€IMDb和豆瓣网。其中IMDb和豆瓣网的数æ®æ˜¯ä½¿ç”¨çˆ¬è™«çˆ¬å–得到的。最åŽå†ä½¿ç”¨Python脚本对这些数æ®è¿›è¡Œå¤„ç†åŠ å·¥ï¼Œå¹¶å¯¼å…¥MongoDBæ•°æ®åº“å’ŒNeo4jæ•°æ®åº“。
-本系统使用MongoDBå’ŒNeo4j存储数æ®ã€‚其中,MongoDB作为éžå…³ç³»åž‹çš„æ–°å…´NoSQLæ•°æ®åº“,以çµæ´»éžç»“构化的方å¼å­˜å‚¨æ™®é€šç”¨æˆ·æ•°æ®ã€ç®¡ç†å‘˜æ•°æ®ã€ç”µå½±æ•°æ®ç­‰ï¼Œå¹¶æ供高并å‘的性能支æŒä¸Žå¯åˆ†å¸ƒå¼å­˜å‚¨çš„扩展性。而在以高性能著称的图数æ®åº“Neo4j中,则存储用于推è算法使用的电影知识图谱信æ¯ã€‚
+本系统使用MongoDBå’ŒNeo4j存储数æ®ã€‚其中,MongoDB作为éžå…³ç³»åž‹çš„æ–°å…´NoSQLæ•°æ®åº“,以çµæ´»çš„éžç»“构化的方å¼å­˜å‚¨æ™®é€šç”¨æˆ·æ•°æ®ã€ç®¡ç†å‘˜æ•°æ®ã€ç”µå½±æ•°æ®ç­‰ï¼Œå¹¶æ供高并å‘的性能支æŒä¸Žå¯åˆ†å¸ƒå¼å­˜å‚¨çš„扩展性。而在以高性能著称的图数æ®åº“Neo4j中,存储用于推è算法使用的电影知识图谱。
-本系统åŽç«¯ä½¿ç”¨ç”±Python编写的Flask框架,Flask框架是轻é‡çº§çš„微框架,以高å¯æ‰©å±•æ€§è‘—称,为本系统的åŽç«¯ç½‘页应用æœåŠ¡å™¨æ供支æŒã€‚
+本系统åŽç«¯ä½¿ç”¨Python编写的Flask框架,Flask框架是轻é‡çº§çš„微框架,以高å¯æ‰©å±•æ€§è‘—称,为本系统的åŽç«¯ç½‘页应用æœåŠ¡å™¨æ供支æŒã€‚在Flask中,基于REST风格构建API以供å‰ç«¯ä½¿ç”¨ï¼ŒREST风格的语义化API使åŽç«¯API的构建与å‰ç«¯API的使用简å•æ–¹ä¾¿ã€‚
-在Flask中,基于REST风格构建API以供å‰ç«¯ä½¿ç”¨ï¼ŒREST风格的语义化API使åŽç«¯API的构建与å‰ç«¯API的使用清晰明了。
-
-本系统å‰ç«¯ä½¿ç”¨Angular作为å‰ç«¯ç½‘页框架。Angular是基于TypeScript的网页框架,以模å—化åŠå¯é‡ç”¨çš„组件设计著称。Angular为本系统æ供了模å—化的网页设计,使本系统å‰ç«¯é€»è¾‘清晰,易于维护。此外,本系统使用了Angularæ料组件库(Angular Material Components),得益于此,本系统éµå¾ªæ料设计(Material Design)语言,使视觉传达风格清晰明了,具有网格化的布局ã€å“应å¼åŠ¨åŒ–与过渡效过ã€å…‰çº¿ä¸Žé˜´å½±ç­‰ã€‚
+本系统å‰ç«¯ä½¿ç”¨Angular作为å‰ç«¯ç½‘页框架。Angular是基于TypeScript的网页框架,以模å—化åŠå¯é‡ç”¨çš„组件设计著称。Angular为本系统æ供了模å—化的网页设计,使本系统å‰ç«¯é€»è¾‘清晰,易于维护。此外,本系统使用了Angularæ料组件库(Angular Material Components),得益于此,本系统éµå¾ªæ料设计(Material Design)语言,使视觉传达风格简æ´ç¾Žè§‚,具有å“应å¼åŠ¨åŒ–与过渡效过ã€å…‰çº¿ä¸Žé˜´å½±ç­‰ã€‚
\section{æ•°æ®åº“设计}
-如å‰æ‰€è¿°ï¼Œæœ¬ç³»ç»ŸMongoDB用于存储普通用户数æ®ã€ç®¡ç†å‘˜æ•°æ®ã€ç”µå½±æ•°æ®ç­‰ï¼Œè€ŒNeo4j作为高性能的图数æ®ï¼Œç”¨äºŽå­˜å‚¨çŸ¥è¯†å›¾è°±ã€‚Neo4j的存储逻辑较简å•ï¼Œæ­¤å¤„ä¸ä½œä»‹ç»ã€‚以下说明MongoDB中数æ®çš„存储方å¼ã€‚
+如å‰æ‰€è¿°ï¼Œæœ¬ç³»ç»Ÿçš„MongoDBæ•°æ®åº“用于存储普通用户数æ®ã€ç®¡ç†å‘˜æ•°æ®ã€ç”µå½±æ•°æ®ç­‰ï¼Œè€ŒNeo4j作为高性能的图数æ®åº“,用于存储知识图谱。以下é€ä¸€è¯´æ˜ŽMongoDBæ•°æ®åº“与Neo4jæ•°æ®åº“的存储结构。
-ä¸åŒäºŽMySQL等关系型数æ®åº“,MongoDB作为éžç»“构化存储的NoSQLæ•°æ®åº“,没有表ã€åˆ—与行的概念,而åªæœ‰é›†åˆä¸Žæ–‡æ¡£çš„概念,å³åœ¨æ•°æ®åº“中存储集åˆï¼ˆä¸€å®šç¨‹åº¦ä¸Šå¯¹åº”于关系型数æ®åº“的表),在表中存储文档(一定程度上对应于关系型数æ®åº“的行),而关系型数æ®åº“中的列则对应于MongoDB中文档的属性。
+ä¸åŒäºŽMySQL等关系型数æ®åº“,MongoDBæ•°æ®åº“作为éžç»“构化存储的NoSQLæ•°æ®åº“,没有表ã€åˆ—与行的概念,而åªæœ‰é›†åˆä¸Žæ–‡æ¡£çš„概念,å³åœ¨æ•°æ®åº“中存储集åˆï¼ˆä¸€å®šç¨‹åº¦ä¸Šå¯¹åº”于关系型数æ®åº“的表),在集åˆä¸­å­˜å‚¨æ–‡æ¡£ï¼ˆä¸€å®šç¨‹åº¦ä¸Šå¯¹åº”于关系型数æ®åº“的行),而关系型数æ®åº“中的列则对应于MongoDBæ•°æ®åº“中文档的属性。
-本系统在MongoDB中建立4个集åˆï¼Œåˆ†åˆ«ç”¨äºŽç”¨æˆ·ã€ç®¡ç†å‘˜ã€ä½“è£ä¸Žç”µå½±æ•°æ®ã€‚因其中的数æ®ä¸ºéžç»“构化数æ®ï¼Œå› æ­¤æ— æ³•ç”¨è¡¨æ ¼çš„å½¢å¼ç»™å‡ºï¼Œç›®å‰ä¹ æƒ¯ä¸Šä»¥JSON结构给出数æ®é€»è¾‘结构,故以下以JSON结构æ¥è¡¨ç¤ºå­˜å‚¨ç»“构:
+本系统在MongoDBæ•°æ®åº“中建立4个集åˆï¼Œåˆ†åˆ«ç”¨äºŽå­˜å‚¨ç”¨æˆ·ã€ç®¡ç†å‘˜ã€ä½“è£ä¸Žç”µå½±æ•°æ®ã€‚因其中的数æ®ä¸ºéžç»“构化数æ®ï¼Œå› æ­¤æ— æ³•ç”¨è¡¨æ ¼çš„å½¢å¼ç»™å‡ºï¼Œç›®å‰ä¹ æƒ¯ä¸Šä»¥JSONå½¢å¼ç»™å‡ºæ•°æ®çš„逻辑结构,以下以JSONå½¢å¼æ¥è¡¨ç¤ºå­˜å‚¨ç»“构:
以下为普通用户集åˆçš„æ•°æ®ç»“构,用户集åˆä¸­çš„文档存储用户IDã€å“ˆå¸Œå¤„ç†åŽçš„密ç ã€å…¶è¯„价过的电影(包括电影IDã€è¯„分åŠæ—¶é—´ï¼‰ä»¥åŠç”±æŽ¨è算法æœåŠ¡å™¨å†™å…¥çš„推è列表ã€å·²è´­ä¹°ç”µå½±åŠå¿ƒæ„¿å•ï¼š
\begin{verbatim}
@@ -375,7 +371,7 @@ Wide\&Deep\cite{cheng2016wide}是一个结åˆçº¿æ€§è·¯å¾„的推è模型。类ä¼
}
\end{verbatim}
-以下æ¥ç®¡ç†å‘˜é›†åˆçš„æ•°æ®ç»“构,其存储结构较简å•ï¼Œç®¡ç†å‘˜é›†åˆä¸­çš„文档存储管ç†å‘˜IDã€å“ˆå¸Œå¤„ç†åŽçš„密ç ï¼š
+以下为管ç†å‘˜é›†åˆçš„æ•°æ®ç»“构,其存储结构较简å•ï¼Œç®¡ç†å‘˜é›†åˆä¸­çš„文档存储管ç†å‘˜IDã€å“ˆå¸Œå¤„ç†åŽçš„密ç ï¼š
\begin{verbatim}
{
_id: String,
@@ -407,55 +403,75 @@ Wide\&Deep\cite{cheng2016wide}是一个结åˆçº¿æ€§è·¯å¾„的推è模型。类ä¼
actors: Array([String, ...]),
}
\end{verbatim}
+
+Neo4jæ•°æ®åº“用于存储推è算法使用的知识图谱,其中的数æ®ç»“æž„å¯è¡¨ç¤ºä¸ºï¼š
+\begin{verbatim}
+ node: actor | country | director | film | genre | language
+ | person_or_entity_appearing_in_film | rating | star
+ | writer
+ relationship: actor.film | director.film | film.country
+ film.director | film.genre | film.language | film.rating
+ film.star | film.writer | genre.film
+ | person_or_entity_appearing_in_film.film | writer.film
+ edge = (node) - [relationship] -> (node)
+\end{verbatim}
\section{系统功能说明}
\begin{figure}
- \includegraphics[width=\textwidth]{use-case}
+ \includegraphics{use-case}
\bicaption{系统功能用例图}{Use case diagram for the system }\label{fig:use-case}
\end{figure}
本系统用户角色分为未登录用户ã€æ™®é€šç”¨æˆ·ä¸Žç®¡ç†å‘˜ç”¨æˆ·ï¼Œå…¶ç”¨ä¾‹è¯´æ˜Žå¦‚图~\ref{fig:use-case}。
+\subsection{系统导航}
+本系统使用浮动侧边æ ä½œä¸ºå¯¼èˆªæ–¹å¼ï¼Œå¦‚图~\ref{fig:admin-navigation}。点击侧导航æ å³ä¸‹è§’的固定的按钮å¯ä»¥å°†æµ®åŠ¨ä¾§è¾¹æ è®¾ä¸ºå›ºå®šï¼Œå†æ¬¡ç‚¹å‡»åŽå°†å–消固定。
+\begin{figure}
+ \fbox{\includegraphics[width=.94\textwidth]{admin-navigation}}
+ \bicaption{系统侧导航æ ï¼ˆç®¡ç†å‘˜ï¼‰}{Side navigation panel of the system (for administrators)}\label{fig:admin-navigation}
+\end{figure}
+
\subsection{未登录用户}
未登录用户能进行以下æ“作:
-\noindent (1)接收éšæœºçš„电影推è。
+\noindent (1)接收éšæœºçš„电影推è
-未登录用户首页éšæœºæ˜¾ç¤º50部电影,如图~\ref{fig:anonymous-index}所示:
+未登录用户首页éšæœºæ˜¾ç¤º50部电影,如图~\ref{fig:anonymous-index}。
\begin{figure}
- \includegraphics[width=.96\textwidth]{anonymous-index}
+ \fbox{\includegraphics[width=.94\textwidth]{anonymous-index}}
\bicaption{未登录用户首页}{Index page for anonymous user }\label{fig:anonymous-index}
\end{figure}
-\noindent (2)按分类查看电影。
+\noindent (2)按分类查看电影
-未登录用户å¯ä»¥æ ¹æ®ç”µå½±çš„分类æ¥æŸ¥çœ‹ç”µå½±ï¼Œå¦‚图~\ref{fig:anonymous-category}所示:
+未登录用户å¯ä»¥æ ¹æ®ç”µå½±çš„分类æ¥æŸ¥çœ‹ç”µå½±ï¼Œå¦‚图~\ref{fig:anonymous-category}。
\begin{figure}
- \includegraphics[width=.96\textwidth]{anonymous-category}
+ \fbox{\includegraphics[width=.94\textwidth]{anonymous-category}}
\bicaption{未登录用户分类页é¢}{Category page for anonymous user }\label{fig:anonymous-category}
\end{figure}
-\noindent (3)查看电影详情。
+\noindent (3)查看电影详情
-未登录用户å¯ä»¥æŸ¥çœ‹ç”µå½±è¯¦æƒ…,如图~\ref{fig:anonymous-details}。而点击页é¢ä¸Šçš„“添加至心愿å•â€å’Œâ€œè´­ä¹°â€ä¼šè·³è½¬è‡³ç™»å½•ç•Œé¢ã€‚
+未登录用户å¯ä»¥æŸ¥çœ‹ç”µå½±è¯¦æƒ…,如图~\ref{fig:anonymous-details}。点击页é¢ä¸Šçš„“添加至心愿å•â€å’Œâ€œè´­ä¹°â€ä¼šè·³è½¬è‡³ç™»å½•ç•Œé¢ã€‚
\begin{figure}
- \includegraphics[height=.7\textheight]{anonymous-details}
+ \fbox{\includegraphics[height=.7\textheight]{anonymous-details}}
\bicaption{未登录用户电影详情页é¢}{Movie details page for anonymous user }\label{fig:anonymous-details}
\end{figure}
+
\noindent (4)æœç´¢ç”µå½±
-未登录用户å¯ä»Žåº”用æ å³éƒ¨çš„æœç´¢æ¡†æœç´¢ç”µå½±ï¼Œæœ¬ç³»ç»Ÿæ”¯æŒæ¨¡ç³Šæœç´¢ã€‚
+未登录用户å¯ä»¥åœ¨åº”用æ å³éƒ¨çš„æœç´¢æ¡†æœç´¢ç”µå½±ï¼Œå¦‚图~\ref{fig:anonymous-search}。本系统支æŒæ¨¡ç³Šæœç´¢ï¼Œä¸Žæ­¤åŒæ—¶ï¼Œéšç€ç”¨æˆ·æœç´¢å†…容的ä¸æ–­è¾“入,系统会在æœç´¢æ¡†ä¸‹æ–¹æ˜¾ç¤ºå€™é€‰çš„匹é…è¯æ¡ï¼Œæ–¹ä¾¿ç”¨æˆ·ç›´æŽ¥ç‚¹å‡»æŸ¥çœ‹ï¼Œæ­¤å¤–,用户也能通过回车跳转至完整的æœç´¢ç»“果页é¢ã€‚
+\begin{figure}
+ \fbox{\includegraphics[width=.94\textwidth]{anonymous-search}}
+ \bicaption{未登录用户电影æœç´¢ç•Œé¢ï¼ˆä¾§å¯¼èˆªæ å·²å›ºå®šï¼‰}{Movie search page for anonymous user (side navigation panel pinned)}\label{fig:anonymous-search}
+\end{figure}
\subsection{注册与登录}
\noindent(1)注册
-本系统对普通用户开放注册功能,如图~\ref{fig:sign-up},并能æ供用户å是å¦å«ä¸åˆæ³•å­—符ã€æ˜¯å¦ä¸Žå·²æ³¨å†Œç”¨æˆ·å冲çªã€å¯†ç æ˜¯å¦ç¬¦åˆå¤æ‚度è¦æ±‚等的检测。
-\begin{figure}
- \includegraphics[width=.96\textwidth]{sign-up}
- \bicaption{注册页é¢}{Sign up page}\label{fig:sign-up}
-\end{figure}
+本系统对普通用户开放注册功能,并能æ供用户å是å¦å«ä¸åˆæ³•å­—符ã€æ˜¯å¦ä¸Žå·²æ³¨å†Œç”¨æˆ·å冲çªã€å¯†ç æ˜¯å¦ç¬¦åˆå¤æ‚度è¦æ±‚等的检测。
\noindent (2)登录
-本系统æ供登录功能,并能根æ®ä¸åŒçš„登录错误类型作出ä¸åŒçš„å“应。
+本系统æ供登录功能,并能根æ®ä¸åŒçš„登录错误类型相应地作出å“应。
\subsection{普通用户}
-普通用户具备未登录用户的所有功能。此外,还具有以下功能:
+普通用户具备未登录用户的所有功能。此外,还具备以下功能:
\noindent (1)添加心愿å•
@@ -465,12 +481,12 @@ Wide\&Deep\cite{cheng2016wide}是一个结åˆçº¿æ€§è·¯å¾„的推è模型。类ä¼
已登录用户能在电影详情页é¢è´­ä¹°ç”µå½±ã€‚
-\noindent (3)评价
+\noindent (3)评分
-已登录用户能在电影详情页é¢è¯„价电影。电影评价功能ä½äºŽç”µå½±è¯¦æƒ…页é¢ï¼Œå¯¹äºŽæœªç™»å½•ç”¨æˆ·ä¸æ˜¾ç¤ºç”¨äºŽè¯„分的组件,对于已登录用户显示,如图~\ref{fig:general-details}所示。
+已登录用户能在电影详情页é¢ç»™ç”µå½±è¯„分。电影评分功能ä½äºŽç”µå½±è¯¦æƒ…页é¢ï¼Œå¦‚图~\ref{fig:general-details}所示。
\begin{figure}
- \includegraphics[width=.96\textwidth]{general-details}
+ \fbox{\includegraphics[width=.94\textwidth]{general-details}}
\bicaption{电影评分页é¢}{Rating page for movies}\label{fig:general-details}
\end{figure}
@@ -486,52 +502,60 @@ Wide\&Deep\cite{cheng2016wide}是一个结åˆçº¿æ€§è·¯å¾„的推è模型。类ä¼
管ç†å‘˜èƒ½å¢žåŠ ç”µå½±ã€åˆ é™¤ç”µå½±ä¸Žä¿®æ”¹ç”µå½±ä¿¡æ¯ï¼Œå¦‚图~\ref{fig:admin-movie}所示。
\begin{figure}
- \includegraphics[width=.96\textwidth]{admin-movie}
- \bicaption{管ç†ç”µå½±é¡µé¢}{Movie administration page }\label{fig:admin-movie}
+ \fbox{\includegraphics[width=.94\textwidth]{admin-movie}}
+ \bicaption{管ç†ç”µå½±é¡µé¢}{Movie administration page}\label{fig:admin-movie}
\end{figure}
\noindent (2)管ç†ç”¨æˆ·ä¿¡æ¯
管ç†å‘˜èƒ½å¢žåŠ ç”¨æˆ·ã€åˆ é™¤ç”¨æˆ·ä¸Žä¿®æ”¹ç”¨æˆ·å¯†ç ã€‚
+
+\noindent (3)管ç†çŸ¥è¯†å›¾è°±
+
+管ç†å‘˜èƒ½å¢žåŠ ã€åˆ é™¤ã€ä¿®æ”¹ä»¥åŠæŸ¥æ‰¾çŸ¥è¯†å›¾è°±ä¸­çš„结点与关系,如图~\ref{fig:admin-knowledge-graph}所示。该界é¢ä¸­çš„结点åŠå…³ç³»å¯ä»¥ä»¥åŠ¨æ€çš„æ–¹å¼å‘ˆçŽ°ï¼ŒåŒæ—¶æ”¯æŒä»¥å¡«å†™é€‰é¡¹çš„æ–¹å¼ä»¥åŠä½¿ç”¨Cypher语å¥çš„æ–¹å¼æ¥å¢žåŠ ã€åˆ é™¤ã€ä¿®æ”¹ä»¥åŠæŸ¥æ‰¾çŸ¥è¯†å›¾è°±ä¸­çš„结点与关系。当鼠标悬浮于æŸä¸€èŠ‚点或关系之上时,将显示有关这一节点或关系的有关信æ¯ã€‚
+\begin{figure}
+ \fbox{\includegraphics[width=.94\textwidth]{admin-knowledge-graph}}
+ \bicaption{管ç†çŸ¥è¯†å›¾è°±é¡µé¢}{Knowledge graph administration page}\label{fig:admin-knowledge-graph}
+\end{figure}
\section{电影推èæµç¨‹}
本系统的推èæµç¨‹åˆ†ä¸ºç¦»çº¿æŽ¨è与实时推è,如图~\ref{fig:recommendation-procedure}所示。
\begin{figure}
- \includegraphics[width=\textwidth]{recommendation-procedure}
- \bicaption{系统电影推èæµç¨‹}{Movie recommendation procedure }\label{fig:recommendation-procedure}
+ \includegraphics{recommendation-procedure}
+ \bicaption{电影推èæµç¨‹}{Movie recommendation procedure }\label{fig:recommendation-procedure}
\end{figure}
-其中,离线推è使用第\ref{ch:offline-recommendation}章中所述的涟漪网络算法,而实时推è作为补充,æ述如下:
+其中,离线推è使用第\ref{ch:offline-recommendation}章中所述的涟漪网络算法,而实时推è机制作为补充,æ述如下:
-(1)离线推èæœåŠ¡å™¨å®šæœŸè¿è¡Œæ¶Ÿæ¼ªç½‘络算法。离线推èæœåŠ¡å™¨ä»ŽMongoDBæœåŠ¡å™¨èŽ·å–用户信æ¯ä¸Žç”µå½±è¯„分ã€ç”µå½±æ˜¯å¦åŠ å…¥å¿ƒæ„¿å•ç­‰æ•°æ®ä»¥åŠä»ŽNeo4jæœåŠ¡å™¨èŽ·å–知识图谱数æ®ä¿¡æ¯ã€‚然åŽæ‰§è¡Œæ¶Ÿæ¼ªç½‘络算法。最åŽç¦»çº¿æŽ¨èæœåŠ¡å™¨å°†è®¡ç®—得到的å„用户推è列表存入MongoDBæ•°æ®åº“中,等待用户访问时将该结果推è给用户。
+(1)离线推èæœåŠ¡å™¨å®šæœŸè¿è¡Œæ¶Ÿæ¼ªç½‘络算法。离线推èæœåŠ¡å™¨ä»ŽMongoDBæ•°æ®åº“æœåŠ¡å™¨èŽ·å–用户信æ¯ä¸Žç”µå½±è¯„分ã€ç”µå½±æ˜¯å¦åŠ å…¥å¿ƒæ„¿å•ç­‰æ•°æ®ä»¥åŠä»ŽNeo4jæ•°æ®åº“æœåŠ¡å™¨èŽ·å–知识图谱数æ®ä¿¡æ¯ã€‚然åŽæ‰§è¡Œæ¶Ÿæ¼ªç½‘络算法。最åŽç¦»çº¿æŽ¨èæœåŠ¡å™¨å°†è®¡ç®—得到的å„用户推è列表存入MongoDBæ•°æ®åº“中,等待用户访问时将该结果推è给用户。
(2)当用户访问时,网页åŽç«¯æœåŠ¡å™¨æŸ¥è¯¢æŽ¨è列表中的电影数æ®æ˜¯å¦è¾¾åˆ°é˜€å€¼ï¼Œå¦‚果推è列表中的数é‡è¿‡å°‘,则根æ®ç”¨æˆ·äº¤äº’éšæœºå°†åŒä½“è£ç”µå½±åŠ å…¥æŽ¨è列表的末端作为补充并最终显示给用户。
上述步骤中,(1)中的离线推è准确度高,但算法è¿ç®—时间长,无法åšåˆ°å³æ—¶å“应用户请求。(2)中的实时推è方法准确度低,但算法è¿ç®—快,å¯ä»¥åšåˆ°å®žæ—¶å“应请求并å³æ—¶å‘出å“应。两者相互补充组æˆäº†æœ¬ç³»ç»Ÿçš„电影推è算法。
\section{系统安全性}
-本系统对已登录普通用户与管ç†å‘˜åœ¨å‰åŽç«¯äº¤äº’过程中使用JSON网络令牌(JSON Web Token, JWT)实现授æƒä¸Žè®¤è¯ï¼ˆAuthorization and Authentication),以此ä¿è¯äº†ç³»ç»Ÿçš„安全性,本系统的总体安全性设计如图~\ref{fig:jwt}所示。
+本系统对已登录普通用户与管ç†å‘˜åœ¨å‰åŽç«¯äº¤äº’过程中使用JSON网络令牌(JSON Web Token, JWT)实现授æƒä¸Žè®¤è¯ï¼ˆAuthorization and Authentication),以此ä¿è¯ç³»ç»Ÿçš„安全性,本系统的总体安全性设计如图~\ref{fig:jwt}所示。
\begin{figure}
- \includegraphics[height=.6\textheight]{jwt}
+ \includegraphics{jwt}
\bicaption{系统总体安全性设计}{Overall security design for the system}\label{fig:jwt}
\end{figure}
在用户登录时,FlaskåŽç«¯ç½‘页æœåŠ¡å™¨ä¼šç”Ÿæˆä¸€ä¸ªé•¿æœŸJSON网络令牌和一个临时JSON网络令牌,令牌中存储有用户id以åŠè¿‡æœŸæ—¶é—´ï¼Œå¹¶ä¸”该令牌使用éžå¯¹ç§°åŠ å¯†ç®—法加密,其中å«æœ‰ç”±FlaskåŽç«¯ç½‘页æœåŠ¡å™¨é¢å‘çš„ç­¾åä¿¡æ¯ï¼Œè¿™ç¡®ä¿äº†JSON网络令牌ä¸ä¼šè¢«ä¼ªé€ ã€‚
-å‰ç«¯ç½‘页æœåŠ¡å™¨åœ¨æŽ¥æ”¶åˆ°ä»¤ç‰ŒåŽä¼šå°†ä»¤ç‰Œå­˜å‚¨åœ¨æµè§ˆå™¨çš„localStorage中,并在æ¯ä¸€ä¸ªæŽ¥ä¸‹æ¥çš„请求头中附上该令牌,而åŽç«¯æœåŠ¡å™¨åªæœ‰åœ¨è¯¥ä»¤ç‰Œæœ‰æ•ˆï¼ˆæŒ‡ç¡®å®žä¸ºåŽç«¯ç½‘页æœåŠ¡å™¨é¢å‘且该å¦ä»¤ç‰Œå°šæœªè¿‡æœŸï¼‰çš„情况下æ‰ä¼šç»§ç»­æ‰§è¡Œæœ‰å…³è¯·æ±‚。与此åŒæ—¶ï¼Œè‹¥è¯¥è¯·æ±‚是用户内容相关,则åŽç«¯æœåŠ¡å™¨è¿˜ä¼šæ£€æµ‹ä»¤ç‰Œä¸­çš„id是å¦ä¸Žè¯·æ±‚内容中的id相åŒã€‚è‹¥ä¸æ»¡è¶³ä»¥ä¸Šä»»æ„一项,则åŽç«¯ç½‘页æœåŠ¡å™¨è¿”回未授æƒé”™è¯¯ä¿¡æ¯ã€‚
+å‰ç«¯ç½‘页æœåŠ¡å™¨åœ¨æŽ¥æ”¶åˆ°ä»¤ç‰ŒåŽä¼šå°†ä»¤ç‰Œå­˜å‚¨åœ¨æµè§ˆå™¨çš„localStorage中,并在æ¯ä¸€ä¸ªæŽ¥ä¸‹æ¥çš„请求头中附上该令牌,而åŽç«¯æœåŠ¡å™¨åªæœ‰åœ¨è¯¥ä»¤ç‰Œæœ‰æ•ˆï¼ˆæŒ‡ç¡®å®žä¸ºåŽç«¯ç½‘页æœåŠ¡å™¨é¢å‘且该å¦ä»¤ç‰Œå°šæœªè¿‡æœŸï¼‰çš„情况下æ‰ä¼šç»§ç»­æ‰§è¡Œæœ‰å…³è¯·æ±‚。与此åŒæ—¶ï¼Œè‹¥è¯¥è¯·æ±‚是用户内容相关的,则åŽç«¯æœåŠ¡å™¨è¿˜ä¼šæ£€æµ‹ä»¤ç‰Œä¸­çš„id是å¦ä¸Žè¯·æ±‚中使用的id相åŒã€‚è‹¥ä¸æ»¡è¶³ä»¥ä¸Šä»»æ„一项,则åŽç«¯ç½‘页æœåŠ¡å™¨è¿”回未授æƒé”™è¯¯ã€‚
其中,若åŽç«¯ç½‘页æœåŠ¡å™¨å‘现令牌过期,则会将该信æ¯å‘é€ç»™å‰ç«¯ç½‘页æœåŠ¡å™¨ï¼Œå‰ç«¯ç½‘页æœåŠ¡å™¨å°†ä¼šå°†é•¿æœŸä»¤ç‰Œå‘é€ç»™åŽç«¯æœåŠ¡å™¨ä»¥åˆ·æ–°ï¼ˆrenew)临时令牌。
-此外,本系统还使用了哈希算法对密ç è¿›è¡Œå“ˆå¸Œå¤„ç†ï¼Œæ•°æ®åº“中的密ç å…¨éƒ¨ä¸ºå“ˆå¸Œå¤„ç†åŽçš„密ç ã€‚åŒæ—¶ï¼Œç”¨æˆ·ç™»å½•è¿‡ç¨‹æ˜¯åŽç«¯ç½‘页æœåŠ¡å™¨ä½¿ç”¨åŽŸå¯†ç ä¸Žå“ˆå¸Œå¤„ç†åŽçš„密ç è¿›è¡Œæ¯”较,而没有开放哈希处ç†åŽçš„密ç ä¸Žå“ˆå¸Œå¤„ç†åŽçš„密ç è¿›è¡Œæ¯”较,这æ高了本系统的安全性。这在åŒæ—¶ä½¿ç½‘站仅å…许HTTPS(HTTPS-only)网络连接的情况下å¯ä»¥å……分ä¿è¯æœ¬ç³»ç»Ÿçš„安全性。
+此外,本系统还使用了哈希算法对密ç è¿›è¡Œå“ˆå¸Œå¤„ç†ï¼Œæ•°æ®åº“中的密ç å…¨éƒ¨ä¸ºå“ˆå¸Œå¤„ç†åŽçš„密ç ã€‚åŒæ—¶ï¼Œç”¨æˆ·ç™»å½•è¿‡ç¨‹æ˜¯åŽç«¯ç½‘页æœåŠ¡å™¨ä½¿ç”¨åŽŸå¯†ç ä¸Žå“ˆå¸Œå¤„ç†åŽçš„密ç è¿›è¡Œæ¯”较,而没有开放哈希处ç†åŽçš„密ç ä¸Žå“ˆå¸Œå¤„ç†åŽçš„密ç è¿›è¡Œæ¯”较的接å£ï¼Œè¿™ä¿éšœäº†æœ¬ç³»ç»Ÿçš„安全性。这在åŒæ—¶ä»¤ç½‘站仅å…许HTTPS(HTTPS-only)网络连接的情况下å¯ä»¥å……分ä¿è¯æœ¬ç³»ç»Ÿçš„安全性。
-需è¦æ³¨æ„的是,虽然本系统在用户登录与注册时的密ç åœ¨å‰ç«¯æ²¡æœ‰è¿›è¡Œå“ˆå¸Œå¤„ç†ï¼Œä½†æ˜¯æœ¬ç³»ç»Ÿåœ¨éƒ¨ç½²æ—¶ä½¿ç”¨HTTPS-only的连接,在这ç§æƒ…况下,所有的数æ®ä¼ è¾“都处于加密状æ€ï¼Œé¿å…了中间人攻击的å¯èƒ½ï¼Œå› æ­¤æ˜Žæ–‡ä¼ è¾“密ç è€Œä¸ä½¿ç”¨å“ˆå¸Œå¤„ç†æ˜¯å®‰å…¨çš„,在实际应用过程中å¯è¡Œã€‚而本系统在åŽç«¯å¯¹ç”±å‰ç«¯ç½‘页æœåŠ¡å™¨ä¼ å…¥çš„明文密ç çš„目的是é¿å…æ•°æ®åº“中存入明文的密ç ã€‚如果数æ®åº“中存入明文的密ç ï¼Œåˆ™å½“æ•°æ®åº“中用户密ç æ³„露时攻击者å¯ä»¥è½»æ˜“使用泄露的密ç ç™»å½•æœ¬ç³»ç»Ÿã€‚而如上所述,本系统åŽç«¯åªå¼€æ”¾äº†æŽ¥æ”¶æ˜Žæ–‡å¯†ç çš„接å£ï¼Œå³ç›´æŽ¥å°†æ•°æ®åº“中哈希处ç†åŽçš„密ç ä¸Žç”¨æˆ·è¯·æ±‚中的明文密ç è¿›è¡Œå¯¹æ¯”,å³ä½¿æ”»å‡»è€…获å–了用户哈希åŽçš„密ç ï¼Œè¦è®¡ç®—其对应的明文密ç æ˜¯å›°éš¾çš„,甚至在明文密ç è¶³å¤Ÿå¤æ‚的情况下是ä¸å¯èƒ½çš„。以上措施ä¿è¯äº†æœ¬ç³»ç»Ÿçš„安全性。
+需è¦æŒ‡å‡ºçš„是,虽然本系统在用户登录与注册时密ç åœ¨å‰ç«¯æ²¡æœ‰è¿›è¡Œå“ˆå¸Œå¤„ç†ï¼Œä½†æ˜¯æœ¬ç³»ç»Ÿåœ¨éƒ¨ç½²æ—¶ä½¿ç”¨HTTPS-only的连接,在这ç§æƒ…况下,所有的数æ®ä¼ è¾“都处于加密状æ€ï¼Œé¿å…了中间人攻击的å¯èƒ½ï¼Œå› æ­¤æ˜Žæ–‡ä¼ è¾“密ç è€Œä¸ä½¿ç”¨å“ˆå¸Œå¤„ç†æ˜¯å®‰å…¨çš„,在实际使用的过程中å¯è¡Œã€‚而本系统的åŽç«¯ç½‘页æœåŠ¡å™¨å¯¹å‰ç«¯ç½‘页æœåŠ¡å™¨ä¼ å…¥çš„明文密ç è¿›è¡Œå“ˆå¸Œå¤„ç†çš„目的是é¿å…æ•°æ®åº“中存入明文的密ç ã€‚如果数æ®åº“中存入明文的密ç ï¼Œåˆ™å½“æ•°æ®åº“中用户密ç æ³„露时攻击者å¯ä»¥è½»æ˜“使用泄露的密ç ç™»å½•æœ¬ç³»ç»Ÿã€‚而如上所述,本系统åŽç«¯åªå¼€æ”¾äº†æŽ¥æ”¶æ˜Žæ–‡å¯†ç çš„接å£ï¼Œå³åªå°†æ•°æ®åº“中哈希处ç†åŽçš„密ç ä¸Žç”¨æˆ·è¯·æ±‚中的明文密ç è¿›è¡Œå¯¹æ¯”,å³ä½¿æ”»å‡»è€…获å–了用户哈希åŽçš„密ç ï¼Œè¦è®¡ç®—其对应的明文密ç ä¹Ÿæ˜¯å›°éš¾çš„,甚至在明文密ç è¶³å¤Ÿå¤æ‚的情况下是ä¸å¯èƒ½çš„。因此,以上措施ä¿è¯äº†æœ¬ç³»ç»Ÿçš„安全性。
\chapter{研究结论和展望}
\section{工作总结}
-éšç€äº’è”网的å‘展,用户å¯é€‰æ‹©çš„电影数é‡ä¸æ–­å¢žåŠ ï¼Œä¸ºäº†ä½¿ç”¨æˆ·å¿«é€Ÿæ‰¾åˆ°æ„Ÿå…´è¶£çš„电影,å„ç§æŽ¨è算法应è¿è€Œç”Ÿã€‚这些算法存在推è准确性较低ã€æ•°æ®ç¨€ç¼ºæ€§ä»¥åŠå†·å¯åŠ¨é—®é¢˜ã€‚本文针对此现状,以电影推è为研究对象,使用知识图谱作为辅助信æ¯ï¼Œåˆ©ç”¨æ¶Ÿæ¼ªç½‘络算法实现了电影推è系统。具体地说,主è¦çš„研究工作如下:
+éšç€äº’è”网的å‘展,用户å¯é€‰æ‹©çš„电影数é‡ä¸æ–­å¢žåŠ ï¼Œä¸ºäº†è®©ç”¨æˆ·å¿«é€Ÿæ‰¾åˆ°æ„Ÿå…´è¶£çš„电影,å„ç§æŽ¨è算法应è¿è€Œç”Ÿã€‚这些算法存在推è准确性较低ã€æ•°æ®ç¨€ç¼ºæ€§ä»¥åŠå†·å¯åŠ¨é—®é¢˜ã€‚本文针对此现状,以电影推è为研究对象,使用知识图谱作为辅助信æ¯ï¼Œåˆ©ç”¨æ¶Ÿæ¼ªç½‘络算法实现了电影推è系统。具体地说,主è¦çš„研究工作如下:
-(1)从IMDb和豆瓣上使用基于Scrapy框架的爬虫爬å–了3684部电影数æ®ã€‚其中,从IMDb爬å–了3494部电影数æ®ï¼Œä»Žè±†ç“£çˆ¬å–了190æ¡ç”µå½±æ•°æ®ï¼ˆç”±äºŽè±†ç“£é™åˆ¶äº†æ¯IP访问é‡æ•…爬å–çš„æ•°æ®è¾ƒå°‘)。这些电影数æ®åŒ…括电影å°é¢å›¾ç‰‡ã€ç”µå½±æƒ…节介ç»ã€ç”µå½±é¢„告片图片ã€ç”µå½±æ¼”员列表ã€å¯¼æ¼”以åŠå‰§æœ¬ä½œå®¶ç­‰ä¿¡æ¯ã€‚
+(1)使用基于Scrapy框架的爬虫从IMDb和豆瓣网上爬å–了3684æ¡ç”µå½±æ•°æ®ã€‚其中,从IMDb爬å–了3494æ¡ç”µå½±æ•°æ®ï¼Œä»Žè±†ç“£ç½‘爬å–了190æ¡ç”µå½±æ•°æ®ï¼ˆç”±äºŽè±†ç“£ç½‘é™åˆ¶äº†æ¯IP访问é‡æ•…爬å–çš„æ•°æ®è¾ƒå°‘)。这些电影数æ®åŒ…括电影å°é¢å›¾ç‰‡ã€ç”µå½±æƒ…节介ç»ã€ç”µå½±é¢„告片图片ã€ç”µå½±æ¼”员列表ã€å¯¼æ¼”以åŠå‰§æœ¬ä½œå®¶ç­‰ä¿¡æ¯ã€‚
-(2)根æ®è®ºæ–‡â€œæ¶Ÿæ¼ªç½‘络:在知识图谱上传递用户å好的推è模型\cite{wang2018ripplenet}â€è®¾è®¡å¹¶å®žçŽ°äº†åŸºäºŽçŸ¥è¯†å›¾è°±çš„涟漪网络推è算法,通过使用“电影é€é•œ1兆数æ®â€æ•°æ®é›†ä»¥åŠä»ŽIMDb和豆瓣上爬å–的电影数æ®ï¼Œå®žçŽ°äº†åŸºäºŽç”¨æˆ·å¿ƒæ„¿å•å’Œç”¨æˆ·è¯„分并以知识图谱为辅助信æ¯çš„推è算法。并对实现的推è算法进行了试验,并计算了其AUC和准确度两个关键的性能指标。并对比了DKN\cite{wang2018dkn}ã€CKE\cite{zhang2016collaborative}ã€PER\cite{yu2014personalized}ã€SHINE\cite{wang2018shine}ã€LibFM\cite{rendle2012factorization}以åŠWide\&Deep\cite{cheng2016wide}算法的准确度结果。并以此å‘现,涟漪网络算法的性能最优。
+(2)根æ®æ–‡çŒ®\parencite{wang2018ripplenet}实现了基于知识图谱的涟漪网络推è算法,通过使用“MovieLens 1M Datasetâ€æ•°æ®é›†ä»¥åŠä»ŽIMDb和豆瓣网上爬å–的电影数æ®ï¼Œå®žçŽ°äº†åŸºäºŽç”¨æˆ·å¿ƒæ„¿å•å’Œç”¨æˆ·è¯„分并以知识图谱为辅助信æ¯çš„推è算法。并对实现的推è算法进行了试验,计算了其AUC和准确度两个关键的性能指标,将该指标与DKN\cite{wang2018dkn}ã€CKE\cite{zhang2016collaborative}ã€PER\cite{yu2014personalized}ã€SHINE\cite{wang2018shine}ã€LibFM\cite{rendle2012factorization}以åŠWide\&Deep\cite{cheng2016wide}算法的进行了对比。并以此å‘现,涟漪网络算法的性能最优。
(3)基于涟漪网络算法实现了基于知识图谱的电影推è系统。该系统为未登录用户æ供按分类查看电影ã€æŸ¥çœ‹ç”µå½±è¯¦æƒ…的功能;为普通用户æ供电影推èã€æŒ‰åˆ†ç±»æŸ¥çœ‹ç”µå½±ã€æŸ¥çœ‹ç”µå½±è¯¦æƒ…ã€ç”µå½±è¯„分ã€å°†ç”µå½±åŠ å…¥å¿ƒæ„¿å•ä»¥åŠè´­ä¹°ç”µå½±åŠŸèƒ½ï¼›ä¸ºç®¡ç†å‘˜æ供增加ã€åˆ é™¤ã€ä¿®æ”¹ã€æŸ¥æ‰¾ç”µå½±åŠç”¨æˆ·çš„功能。åŒæ—¶ä½¿ç”¨JSON网络令牌ã€HTTPS以åŠå“ˆå¸ŒåŒ–密ç ç­‰æ‰‹æ®µä¿éšœç³»ç»Ÿçš„安全性。
\section{工作展望}
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/admin-knowledge-graph.png b/macros/latex/contrib/bjfuthesis/example/figures/admin-knowledge-graph.png
new file mode 100644
index 0000000000..9603818183
--- /dev/null
+++ b/macros/latex/contrib/bjfuthesis/example/figures/admin-knowledge-graph.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/admin-movie.png b/macros/latex/contrib/bjfuthesis/example/figures/admin-movie.png
index 163ed11325..938bb9f6f1 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/admin-movie.png
+++ b/macros/latex/contrib/bjfuthesis/example/figures/admin-movie.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/admin-navigation.png b/macros/latex/contrib/bjfuthesis/example/figures/admin-navigation.png
new file mode 100644
index 0000000000..2f03defee7
--- /dev/null
+++ b/macros/latex/contrib/bjfuthesis/example/figures/admin-navigation.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/anonymous-category.png b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-category.png
index 2e0e50c64e..0e7e85fb23 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/anonymous-category.png
+++ b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-category.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/anonymous-details.png b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-details.png
index 571e9862dd..d493e7d33c 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/anonymous-details.png
+++ b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-details.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/anonymous-index.png b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-index.png
index 6493ab444f..51128da916 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/anonymous-index.png
+++ b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-index.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/anonymous-search.png b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-search.png
new file mode 100644
index 0000000000..003d373cc9
--- /dev/null
+++ b/macros/latex/contrib/bjfuthesis/example/figures/anonymous-search.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/general-details.png b/macros/latex/contrib/bjfuthesis/example/figures/general-details.png
index d8d33408b5..e462e58ebb 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/general-details.png
+++ b/macros/latex/contrib/bjfuthesis/example/figures/general-details.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/illustration-of-ripple-sets.png b/macros/latex/contrib/bjfuthesis/example/figures/illustration-of-ripple-sets.png
index 96e2920c7f..ffb64c807d 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/illustration-of-ripple-sets.png
+++ b/macros/latex/contrib/bjfuthesis/example/figures/illustration-of-ripple-sets.png
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/jwt.pdf b/macros/latex/contrib/bjfuthesis/example/figures/jwt.pdf
index b6fe019966..ceb362d3c5 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/jwt.pdf
+++ b/macros/latex/contrib/bjfuthesis/example/figures/jwt.pdf
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/recommendation-procedure.pdf b/macros/latex/contrib/bjfuthesis/example/figures/recommendation-procedure.pdf
index 049f4c623d..1df4d75019 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/recommendation-procedure.pdf
+++ b/macros/latex/contrib/bjfuthesis/example/figures/recommendation-procedure.pdf
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/sign-up.png b/macros/latex/contrib/bjfuthesis/example/figures/sign-up.png
deleted file mode 100644
index 2c0f6ed59d..0000000000
--- a/macros/latex/contrib/bjfuthesis/example/figures/sign-up.png
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/figures/use-case.pdf b/macros/latex/contrib/bjfuthesis/example/figures/use-case.pdf
index 751a799f6f..9be18e52cb 100644
--- a/macros/latex/contrib/bjfuthesis/example/figures/use-case.pdf
+++ b/macros/latex/contrib/bjfuthesis/example/figures/use-case.pdf
Binary files differ
diff --git a/macros/latex/contrib/bjfuthesis/example/thesis.pdf b/macros/latex/contrib/bjfuthesis/example/thesis.pdf
index 24e4dacf68..af8b072dc1 100644
--- a/macros/latex/contrib/bjfuthesis/example/thesis.pdf
+++ b/macros/latex/contrib/bjfuthesis/example/thesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/derivative/README.md b/macros/latex/contrib/derivative/README.md
index 72d73433ed..9b8aec07fe 100644
--- a/macros/latex/contrib/derivative/README.md
+++ b/macros/latex/contrib/derivative/README.md
@@ -1,4 +1,4 @@
-## README for derivative package v1.01 dated 2021-05-28
+## README for derivative package v1.1 dated 2021-06-03
The package provides a set of commands `\NewDerivative`, `\NewDifferential` etc. that can be used to define a derivative or a differential operator, respectively. The package have already defined several derivatives and differentials:
diff --git a/macros/latex/contrib/derivative/derivative.pdf b/macros/latex/contrib/derivative/derivative.pdf
index c18c477ca4..606ae17783 100644
--- a/macros/latex/contrib/derivative/derivative.pdf
+++ b/macros/latex/contrib/derivative/derivative.pdf
Binary files differ
diff --git a/macros/latex/contrib/derivative/derivative.sty b/macros/latex/contrib/derivative/derivative.sty
index 13eac36065..a26080b431 100644
--- a/macros/latex/contrib/derivative/derivative.sty
+++ b/macros/latex/contrib/derivative/derivative.sty
@@ -15,11 +15,58 @@
\NeedsTeXFormat{LaTeX2e}
-\RequirePackage{xparse}[2018/05/09]
-\ProvidesExplPackage{derivative}{2021/05/28}{1.01}{Nice and easy derivatives and differentials for LaTeX}
+\RequirePackage{expl3,xparse}[2018/05/09]
+\RequirePackage{l3keys2e}
+\ProvidesExplPackage{derivative}{2021/06/03}{1.1}{Nice and easy derivatives and differentials for LaTeX}
+
+\bool_new:N \l__deriv_pkg_italic_bool
+\bool_new:N \l__deriv_pkg_upright_bool
+
+\keys_define:nn { deriv/pkg }
+{
+ italic .choice:,
+ italic .default:n = { true },
+ italic / true .code:n =
+ {
+ \bool_set_true:N \l__deriv_pkg_italic_bool
+ \bool_set_false:N \l__deriv_pkg_upright_bool
+ },
+ italic / false .code:n =
+ {
+ \bool_set_false:N \l__deriv_pkg_italic_bool
+ \bool_set_true:N \l__deriv_pkg_upright_bool
+ },
+ italic / unknown .code:n =
+ { \msg_error:nnx { deriv } { boolean-values-only } \l_keys_key_str },
+
+ upright .choice:,
+ upright .default:n = { true },
+ upright / true .code:n =
+ {
+ \bool_set_true:N \l__deriv_pkg_upright_bool
+ \bool_set_false:N \l__deriv_pkg_italic_bool
+ },
+ upright / false .code:n =
+ {
+ \bool_set_false:N \l__deriv_pkg_upright_bool
+ \bool_set_true:N \l__deriv_pkg_italic_bool
+ },
+ upright / unknown .code:n =
+ { \msg_error:nnx { deriv } { boolean-values-only } \l_keys_key_str },
+ upright .initial:n = true,
+}
+
+\ProcessKeysPackageOptions{ deriv/pkg }
%%%%% Useful conditionals %%%%%
+\prg_new_conditional:Npnn \__deriv_if_pkg:n #1 { p, TF }
+{
+ \@ifpackageloaded{unicode-math}
+ { \prg_return_true: }
+ { \prg_return_false: }
+}
+
\prg_new_conditional:Npnn \__deriv_if_novalue:n #1 { T , F , TF }
{
\tl_if_novalue:nTF {#1}
@@ -86,7 +133,7 @@
\seq_new:N \l__deriv_tmp_keys_seq
\tl_new:N \l__deriv_tmp_keys_tl
-%%%%% Variables: infinisimal %%%%%
+%%%%% Variables: differential %%%%%
\seq_new:N \l__deriv_i_var_seq
\seq_new:N \l__deriv_i_orders_seq
@@ -213,6 +260,7 @@
%%%%%% Key-val for all %%%%%%
+\prop_new:N \l__deriv_all_all_user_keys_prop
\prop_const_from_keyval:Nn \c__deriv_all_pkg_keys_prop
{ scale-auto = leftright }
@@ -228,8 +276,7 @@
{
\cs_set_nopar:Npn \__deriv_auto_left:n { \mleft }
\cs_set_nopar:Npn \__deriv_auto_right:n { \mright }
- },
- scale-auto .default:n = { leftright }
+ }
}
%%%%%% Key-val: derivatives %%%%%%
@@ -275,8 +322,6 @@
fun .bool_set:c = { l__deriv_dv_#1_misc_fun_bool },
frac .bool_set:c = { l__deriv_dv_#1_misc_frac_bool },
var .clist_set:c = { l__deriv_dv_#1_misc_var_clist },
- %fun .default:n = {true},
- %frac .default:n = {true},
var .default:n = {all},
order .clist_set:c = { l__deriv_dv_#1_misc_order_clist },
@@ -1271,7 +1316,7 @@
\deriv_dv_define:NVn \RenewDocumentCommand \l__deriv_cs_name_tl {#1}
}
{
- \msg_error:nnxx { deriv } { command-already-defined }
+ \msg_error:nnxx { deriv } { command-not-defined }
{ \token_to_str:N #1 }
{ \token_to_str:N \RenewDerivative }
}
@@ -1415,40 +1460,56 @@
\msg_new:nnnn { deriv } { command-not-defined }
{ Command~'#1'~not~yet~defined! }
-{ You~have~used~#2~with~a~derivative~that~was~never~defined. }
+{ You~have~used~#2~with~a~command~that~was~never~defined. }
+
+\msg_new:nnnn { deriv } { boolean-values-only }
+{ The~key~'#1'~accepts~boolean~values~only. }
+{ The~key~'#1'~only~accepts~the~values~'true'~and~'false'. }
+
+\msg_new:nnnn { deriv } { derivative-option-not-defined }
+{ Derivative option~'#1'~not~yet~defined! }
+{ You~have~used~#2~with~a~derivative~option~that~was~never~defined. }
+
+\msg_new:nnnn { deriv } { differential-option-not-defined }
+{ Differential option~'#1'~not~yet~defined! }
+{ You~have~used~#2~with~a~differential~option~that~was~never~defined. }
%%%%% Declaring derivatives %%%%%
-\derivset{all}
-\bool_lazy_or:nnTF { \sys_if_engine_luatex_p: } { \sys_if_engine_xetex_p: }
+\@ifpackageloaded{mleftright}
+{ \derivset{all}[scale-auto = mleftmright] }
+{ \derivset{all}[scale-auto = leftright] }
+
+\cs_new_protected:Npn \deriv_define_legacy_italic_cs:
{
- \DeclareDerivative{\odv}{\symup{d}}
- \DeclareDerivative{\mdv}{\symup{D}}
- \DeclareDerivative{\fdv}{\delta}
- \DeclareDerivative{\adv}{\Delta}
- \DeclareDerivative{\jdv}{\partial}[fun=true, var=1]
- \DeclareDerivative{\pdv}{\partial}[style-var=multiple, sep-inf-ord=1, delims-eval=(), delims-eval-/=()]
-
- \DeclareDifferential{\odif}{\symup{d}}
- \DeclareDifferential{\mdif}{\symup{D}}[style-notation=single, style-notation-*=mixed]
- \DeclareDifferential{\fdif}{\delta}
- \DeclareDifferential{\adif}{\Delta}
- \DeclareDifferential{\pdif}{\partial}[style-notation=single, style-notation-*=mixed]
+ \DeclareDerivative{\odv}{\mathnormal{d}}
+ \DeclareDerivative{\mdv}{\mathnormal{D}}
+ \DeclareDifferential{\odif}{\mathnormal{d}}
+ \DeclareDifferential{\mdif}{\mathnormal{D}}[style-notation=single, style-notation-*=mixed]
}
+
+\cs_new_protected:Npn \deriv_define_legacy_upright_cs:
{
\DeclareDerivative{\odv}{\mathrm{d}}
\DeclareDerivative{\mdv}{\mathrm{D}}
- \DeclareDerivative{\fdv}{\delta}
- \DeclareDerivative{\adv}{\Delta}
- \DeclareDerivative{\jdv}{\partial}[fun=true, var=1]
- \DeclareDerivative{\pdv}{\partial}[style-var=multiple, sep-inf-ord=1, delims-eval=(), delims-eval-/=()]
-
\DeclareDifferential{\odif}{\mathrm{d}}
\DeclareDifferential{\mdif}{\mathrm{D}}[style-notation=single, style-notation-*=mixed]
- \DeclareDifferential{\fdif}{\delta}
- \DeclareDifferential{\adif}{\Delta}
- \DeclareDifferential{\pdif}{\partial}[style-notation=single, style-notation-*=mixed]
}
+\__deriv_case:n
+{
+ { \l__deriv_pkg_italic_bool } { \deriv_define_legacy_italic_cs: }
+ { \l__deriv_pkg_upright_bool } { \deriv_define_legacy_upright_cs: }
+}
+
+\DeclareDerivative{\fdv}{\delta}
+\DeclareDerivative{\adv}{\Delta}
+\DeclareDerivative{\jdv}{\partial}[fun=true, var=1]
+\DeclareDerivative{\pdv}{\partial}[style-var=multiple, sep-inf-ord=1, delims-eval=(), delims-eval-/=()]
+
+\DeclareDifferential{\fdif}{\delta}
+\DeclareDifferential{\adif}{\Delta}
+\DeclareDifferential{\pdif}{\partial}[style-notation=single, style-notation-*=mixed]
+
\endinput
diff --git a/macros/latex/contrib/derivative/derivative.tex b/macros/latex/contrib/derivative/derivative.tex
index 840b868396..d7c50df7b8 100644
--- a/macros/latex/contrib/derivative/derivative.tex
+++ b/macros/latex/contrib/derivative/derivative.tex
@@ -38,6 +38,7 @@ indent_length "2"
\documentclass[final,british,10pt]{scrartcl}
\reversemarginpar
\RequirePackage[british]{babel}
+\RequirePackage{fontspec}
%\RequirePackage{polyglossia}
% \setmainlanguage[variant=british]{english}
\RequirePackage[style=english,english=british]{csquotes}
@@ -50,6 +51,17 @@ indent_length "2"
\definecolor{RoyalBlue}{RGB}{0, 35, 102}
\definecolor{RoyalGreen}{RGB}{32, 77, 2}
+% \definecolor{RoyalGray}{RGB}{75, 75, 75}
+% \definecolor{RoyalDarkGray}{RGB}{225, 225, 225}
+% \definecolor{RoyalLightGray}{RGB}{30, 30, 30}
+% \definecolor{RoyalRed}{RGB}{255, 177, 151} % 207, 102, 121
+% \definecolor{RoyalBlue}{RGB}{187, 134, 252} % 55, 185, 255
+% \definecolor{RoyalGreen}{RGB}{3, 218, 198} % 52, 177, 20
+% \definecolor{RoyalPageCoulor}{RGB}{18, 18, 18} % 30, 30, 30
+% \definecolor{RoyalTextCoulor}{RGB}{225, 225, 225}
+% \pagecolor{RoyalPageCoulor}
+% \color{RoyalTextCoulor}
+
\RequirePackage{amsmath, amsthm}
\allowdisplaybreaks
\theoremstyle{remark}
@@ -383,6 +395,7 @@ indent_length "2"
{
}
+
\tl_new:N \l__mydoc_number_tl
\tl_new:N \l_mydoc_index_item_tl
\tl_new:N \l_mydoc_index_subitem_tl
@@ -1305,17 +1318,16 @@ indent_length "2"
{ \mydoc_cs_to_str:N #1 }
\ExplSyntaxOff
-\makeatother
\Pakkenavn{derivative}
\Titel{The \pakkenavn{} package}
\Forfatter{Simon Jensen}
\Email{sjelatex@gmail.com}
-\Dato{2021/05/28}
-\Version{1.01}
+\Dato{2021/06/03}
+\Version{1.1}
-\RequirePackage{derivative}[\dato]
- \derivset{all}[scale-auto = mleftmright]
+\RequirePackage[upright]{derivative}[\dato]
+% \derivset{all}[scale-auto = mleftmright]
\hypersetup
{
@@ -1349,8 +1361,7 @@ indent_length "2"
\begin{document}
\forside{%
- The \mypackage{} package provides a set of commands which makes writing ordinary and partial derivatives of arbitrary order in a straight forward manner. Additionally, this package provides a set of commands to define variants of the aforementioned derivatives. A set of optional arguments along with lots of package options allow for easy and great flexibility over the derivative's format, such as where the function is positioned, point of evaluation, and switching between fraction styles. Moreover, the mixed order of the partial derivative and variants hereof is automatically computed. This package is written in the \pkg{expl3} language and requires therefore the \LaTeX3 package bundles \pkg{l3kernel} and \pkg{l3package}. Additionally, the \pkg{mleftright} package is optional and provides the improved automatically scaling \cs{mleft} and \cs{mright}.%
- }
+ The \mypackage{} package provides a set of commands which makes writing ordinary and partial derivatives of arbitrary order in a straight forward manner. Additionally, this package provides a set of commands to define variants of the aforementioned derivatives. A set of optional arguments along with lots of package options allow for easy and great flexibility over the derivative's format, such as where the function is positioned, point of evaluation, and switching between fraction styles. Moreover, the mixed order of the partial derivative and variants hereof is automatically computed. This package is written in the \pkg{expl3} language and requires therefore the \LaTeX3 package bundles \pkg{l3kernel} and \pkg{l3package}. Additionally, the \pkg{mleftright} package is optional and provides the improved automatically scaling \cs{mleft} and \cs{mright}.}
\clearpage
\tableofcontents
@@ -1372,7 +1383,7 @@ indent_length "2"
The partial derivative \macro{1} is defined with a set of mandatory and optional arguments that either typeset specific parts or changing the style of the derivative. In this package, the partial derivative is defined with an italic partial differential $\partial$ as
\begin{definition}
- \DeclareDerivative{\pdv}{\partial}[style-var=multiple, sep-inf-ord=1,%\marginnote{\pdftex, \xetex, \luatex}%
+ \DeclareDerivative{\pdv}{\partial}[style-var=multiple, sep-inf-ord=1,
delims-eval=(), delims-eval-/=()]
\end{definition}
@@ -1453,15 +1464,14 @@ indent_length "2"
\subsection{Other derivatives}
This package offers five other derivatives: Ordinary derivative \macro{\odv}, material derivative \macro{\mdv}, functional derivative \macro{\fdv}, the average rate of change \macro{\adv} and the Jacobian \macro{\jdv}. A unique feature of this package, is that you can define your own derivatives as described in \cref{ssec:defvar_dv}.
- \begin{function}{\odv}
+ \begin{function}{\odv}[updated=v1.1]
\begin{syntax}
\sarg, \oarg{keyval list}, \marg{function}, \targ{/}, \marg{variables}, \earg{\_, point\tsb{1}, \^, point\tsb{2}}
\end{syntax}
- In this package, the ordinary derivative is defined with an upright lowercase d as
-
+ In this package, the ordinary derivative is defined with an upright lowercase d if the package option \keyval{upright}{true} is used else it will use an italic lowercase d
\begin{definition}
- \DeclareDerivative{\odv}{\mathrm{d}}%\marginnote{\pdftex}%
- \DeclareDerivative{\odv}{\symup{d}}%\marginnote{\xetex, \luatex}%
+ \DeclareDerivative{\odv}{\mathrm{d}}%\marginnote{\keyval{upright}{true}}%
+ \DeclareDerivative{\odv}{\mathnormal{d}}%\marginnote{\keyval{italic}{true}}%
\end{definition}
because it is used by many nowadays books
\begin{equation*}
@@ -1470,15 +1480,15 @@ indent_length "2"
However it can always be changed with the \key{style-inf} key.
\end{function}
- \begin{function}{\mdv}
+ \begin{function}{\mdv}[updated=v1.1]
\begin{syntax}
\sarg, \oarg{keyval list}, \marg{function}, \targ{/}, \marg{variables}, \earg{\_, point\tsb{1}, \^, point\tsb{2}}
\end{syntax}
- The material derivative is used in some branches of physics e.g. thermodynamic, fluid dynamic etc. It is only natural for a physics student as me to define such a variant, that used an upright uppercase D. In this package, the material derivative is defined as
+ The material derivative is used in some branches of physics e.g. thermodynamic, fluid dynamic etc. It comes with an upright uppercase D when the package option \keyval{upright}{true} else it will use an italic uppercase D. In this package, the material derivative is defined as
\begin{definition}
- \DeclareDerivative{\mdv}{\mathrm{D}}%\marginnote{\pdftex}%
- \DeclareDerivative{\mdv}{\symup{D}}%\marginnote{\xetex, \luatex}%
+ \DeclareDerivative{\mdv}{\mathrm{D}}%\marginnote{\keyval{upright}{true}}%
+ \DeclareDerivative{\mdv}{\mathnormal{D}}%\marginnote{\keyval{italic}{true}}%
\end{definition}
\noindent In physics, the material derivative is defined by
@@ -1494,7 +1504,7 @@ indent_length "2"
The functional derivative is used in the calculus of variation and uses a lowercase delta. With the package's default settings, it will use an italic delta. In this package, the functional derivative is defined as
\begin{definition}
- \DeclareDerivative{\fdv}{\delta}%\marginnote{\pdftex, \xetex, \luatex}%
+ \DeclareDerivative{\fdv}{\delta}
\end{definition}
\noindent In physics, it is for example used in the Lagrange equation or in the derivation of the Hartree-Fock equation
@@ -1512,7 +1522,7 @@ indent_length "2"
The average rate of change is defined to use an upright uppercase delta with the packages default settings. In this package, the average rate of change is defined as
\begin{definition}
- \DeclareDerivative{\adv}{\Delta}%\marginnote{\pdftex, \xetex, \luatex}%
+ \DeclareDerivative{\adv}{\Delta}
\end{definition}
\noindent The average rate of change is used to determine the slope of a straight line
@@ -1528,7 +1538,7 @@ indent_length "2"
The Jacobian is defined to use an italic partial differential with the package's default settings. Also a pair of parentheses is automatically inserted around the function and variable. In this package, the Jacobian is defined as
\begin{definition}
- \DeclareDerivative{\jdv}{\partial}[fun=true, var=1]%\marginnote{\pdftex, \xetex, \luatex}%
+ \DeclareDerivative{\jdv}{\partial}[fun=true, var=1]
\end{definition}
\noindent which gives
@@ -1542,15 +1552,15 @@ indent_length "2"
\clearpage
\section{Differentials}
- \begin{function}*{\odif}[new = v1.0]
+ \begin{function}*{\odif}[new = v1.0, updated=v1.1]
\begin{syntax}
\sarg, \oarg{keyval list}, \marg{variables}
\end{syntax}
- The differential \macro{1} using an lowercase d is defined with a set of mandatory and optional arguments that either typeset specific parts or changing the style of the differential. It is defined as
+ The differential \macro{1} is defined with a set of mandatory and optional arguments that either typeset specific parts or changing the style of the differential. It is defined with an upright lowercase d when \keyval{upright}{true} else it will be defined with an italic lowercase d
\begin{definition}
- \DeclareDifferential{\odif}{\mathrm{d}}%\marginnote{\pdftex}%
- \DeclareDifferential{\odif}{\symup{d}}%\marginnote{\xetex, \luatex}%
+ \DeclareDifferential{\odif}{\mathrm{d}}%\marginnote{\keyval{upright}{true}}%
+ \DeclareDifferential{\odif}{\mathnormal{d}}%\marginnote{\keyval{italic}{true}}%
\end{definition}
\begin{argument}*{1}
@@ -1597,7 +1607,7 @@ indent_length "2"
\begin{definition}
\DeclareDifferential{\pdif}{\partial}[style-notation=single,
- style-notation-*=mixed]%\marginnote{\pdftex, \xetex, \luatex}%
+ style-notation-*=mixed]
\end{definition}
\noindent The non-star and star version gives
@@ -1608,17 +1618,17 @@ indent_length "2"
respectively.
\end{function}
- \begin{function}{\mdif}
+ \begin{function}{\mdif}[updated=v1.1]
\begin{syntax}
\sarg, \oarg{keyval list}, \marg{variables}
\end{syntax}
- Another commonly used shorthand notation for various derivatives is the differential with a uppercase D. In this package it is defined with a upright D as
+ Another commonly used shorthand notation for various derivatives is the differential with an uppercase D. In this package it is defined with a upright D when \keyval{upright}{true} else it is defined with an italic uppercase D
\begin{definition}
\DeclareDifferential{\mdif}{\mathrm{D}}[style-notation=single,
- style-notation-*=mixed]%\marginnote{\pdftex}%
- \DeclareDifferential{\mdif}{\symup{D}}[style-notation=single,
- style-notation-*=mixed]%\marginnote{\xetex, \luatex}%
+ style-notation-*=mixed]%\marginnote{\keyval{upright}{true}}%
+ \DeclareDifferential{\mdif}{\mathnormal{D}}[style-notation=single,
+ style-notation-*=mixed%\marginnote{\keyval{italic}{true}}%
\end{definition}
\noindent The non-star and star version gives
@@ -1636,7 +1646,7 @@ indent_length "2"
When working with functional derivatives another differential is frequently encountered. This differential uses a delta symbol and is defined as
\begin{definition}
- \DeclareDifferential{\fdif}{\delta}%\marginnote{\pdftex, \xetex, \luatex}%
+ \DeclareDifferential{\fdif}{\delta}
\end{definition}
\noindent For example an expression like
@@ -1653,7 +1663,7 @@ indent_length "2"
To wrap it up, a differential for differences is defined as
\begin{definition}
- \DeclareDifferential{\adif}{\Delta}%\marginnote{\pdftex, \xetex, \luatex}%
+ \DeclareDifferential{\adif}{\Delta}
\end{definition}
\noindent For example
@@ -1663,8 +1673,9 @@ indent_length "2"
\end{function}
\clearpage
- \section{Package options}
- This package accepts its options using the well-known \emph{key=value} syntax. The keys are divided into categories, for which each key have its associated category as a prefix. %Each category and option is explained below.
+ \section{Options}
+
+ This package accepts its options using the well-known \emph{key=value} syntax. The keys are divided into categories, for which each key have its associated category as a prefix.
\begin{function}{\derivset}[updated = v1.0]
\begin{syntax}
@@ -1673,11 +1684,11 @@ indent_length "2"
The \macro{1} is meant to set the default values for derivatives and differentials options in the preamble. It can be used in the document but this is what the new \oarg{keyval list} arguments are for in the derivative and differential commands.
\begin{argument}{1}
- A mandatory argument that determines which command the \emph{key=value} pairs is assigned to, where the allowed \meta{commands} are the derivatives and differentials defined by the package and you, see \cref{ssec:defvar_dv,ssec:defvar_inf} for more information. The special value \texttt{all} is also allowed, which gives access to the options that applies to \textit{all} derivatives and differentials.
+ A mandatory argument that determines which command the \emph{key=value} pairs are assigned to, where the allowed \meta{commands} are the derivatives and differentials defined by the package and you, see \cref{ssec:defvar_dv,ssec:defvar_inf} for more information. The special value \texttt{all} is also allowed, which gives access to the options that applies to \textit{all} derivatives and differentials.
\end{argument}
\begin{argument}{2}
- This optional argument accepts its input as a comma-separated list of \emph{key=value} pairs. Leaving out \arg{2} sets the options to the package's default settings for the chosen \arg{1}. E.g. \macro{\derivset}[\narg{\macro{\odv}}] sets the options for the ordinary derivative to the packages default settings. %This argument is subject to change, see \cref{consid:DerivsetOptional} for more information.
+ This optional argument accepts its input as a comma-separated list of \emph{key=value} pairs. Leaving out \arg{2} sets the options to the package's default settings for the chosen \arg{1}. E.g. \macro{\derivset}[\narg{\macro{\odv}}] sets the options for the ordinary derivative to the packages default settings.
\end{argument}
\end{function}
@@ -1695,9 +1706,30 @@ indent_length "2"
\end{itemize}
\begin{note}
- A value with superscripted \texttt{U}, \texttt{P} and \texttt{R} refers to a unicode engine i.e. \luatex{} and \xetex, \pdftex{} and requires package, respectively. Additionally, some keys have two versions; with and without \texttt{-/} at the end. These keys are related to the slash argument. If \keyval{switch-/}{false} then the keys with and without \texttt{-/} are used when the slash argument is present and absent, respectively. Setting \keyval{switch-/}{true} then these keys are used in the opposite cases of the slash argument's presence.
+ A value with superscripted \texttt{R} means it requires a package. Additionally, some keys have two versions; with and without \texttt{-/} at the end. These keys are related to the slash argument. If \keyval{switch-/}{false} then the keys with and without \texttt{-/} are used when the slash argument is present and absent, respectively. Setting \keyval{switch-/}{true} then these keys are used in the opposite cases of the slash argument's presence.
\end{note}
+ \subsection{Package options}
+ The package options can be used with
+ \begin{center}
+ \ttfamily\small
+ \cs{usepackage}\oarg{keyval list}\narg{derivative}
+ \end{center}
+
+ \begin{option}*{italic}[new = v1.1]
+ \begin{values}[default = false]
+ true, false
+ \end{values}
+ Sets the font-style of the infinitesimals $d$ and $D$ used in \cs{odv}, \cs{mdv}, \cs{odif} and \cs{mdif} to italic using \cs{mathnormal}. The options \key{italic} and \key{upright} are mutually exclusive.
+ \end{option}
+
+ \begin{option}{upright}[new = v1.1]
+ \begin{values}[default = true]
+ true, false
+ \end{values}
+ Sets the font-style of the infinitesimals $d$ and $D$ used in \cs{odv}, \cs{mdv}, \cs{odif} and \cs{mdif} to upright using \cs{mathrm}. The options \key{italic} and \key{upright} are mutually exclusive.
+ \end{option}
+
\subsection{Derivative options} \label{ssec:options_dv}
The options in this subsection are available for derivatives defined by the package and you with the commands in \cref{ssec:defvar_dv}.
@@ -1707,8 +1739,7 @@ indent_length "2"
\begin{values}[default = d]
\meta{math-font-style}\meta{infinitesimal}
\end{values}
- Sets the derivative's infinitesimal including font style. This change was necessary to allow multiple font styles, e.g. \keyval{style-inf}{\cs{mathbf}\{\cs{mathrm}\{d\}\}}.
- The default font style is \default. If an upright font is preferred then \cs{mathrm}\pdf{} and \cs{symup}\uni{} could be used, or if an italic font then \cs{mathnormal}\pdf{} and \cs{symit}\uni.
+ Sets the derivative's infinitesimal including font style. This change was necessary to allow multiple font styles, e.g. \keyval{style-inf}{\cs{mathbf}\narg{\cs{mathrm}\narg{d}}}. The default infinitesimal is a plain `\default` with no associated font style.
\end{option}
\begin{option}{style-frac}
@@ -1725,6 +1756,8 @@ indent_length "2"
The derivative uses the fraction set by this key whenever \keyval{switch-/}{false} and the slash argument is present. The key's default value is a text-styled fraction \default\footref{foot:sfrac} i.e. on the form $\pdv[style-frac-/=\slashfrac, switch-/=false]{f}/{x,y}$.
\end{option}
+ \clearpage
+
\begin{option}{style-var}[new = v1.0]
\begin{values}[default = single]
single, multiple
@@ -1732,8 +1765,6 @@ indent_length "2"
This option determines how the derivative treats its variables and some features. The variable argument is treated as a single variable when \val{single} is used. Moreover the mixed order is set equal to the first order given in \keyval[cat=misc]{order}{\meta{order}} which by default is \val{1}. The variable argument is treated as a comma separated list of variables with \val{multiple} similarly to a partial derivative. Moreover the mixed order is automatically calculated from the list of orders given in \keyval[cat=misc]{order}{\meta{order}}.
\end{option}
- \clearpage
-
\subsubsection*{Scaling}
\begin{option}*{scale-eval}
@@ -1787,6 +1818,8 @@ indent_length "2"
This key sets the left and right delimiters used to indicate the point of evaluation. These delimiters are inserted whenever \keyval{switch-/}{false} and the slash argument is absent. The key's default left and right delimiters are a left and a right parenthesis, respectively.
\end{option}
+ \clearpage
+
\begin{option}{delims-eval-/}
\begin{values}[default = .~\cs{rvert}]
\meta{left delimiter}\meta{right delimiter}
@@ -1801,8 +1834,6 @@ indent_length "2"
This key sets the left and right delimiters used around the function and these are inserted whenever \keyval[cat=misc]{fun}{true} is used. The key's default left and right delimiters are a left and a right parenthesis, respectively.
\end{option}
- \clearpage
-
\begin{option}{delims-var}
\begin{values}[default = (~)]
\meta{left delimiter}\meta{right delimiter}
@@ -1848,6 +1879,8 @@ indent_length "2"
\end{equation*}
where the Jacobian have been used as an example.
+ \clearpage
+
\begin{option}{sep-inf-ord}
\begin{values}[default = 0]
\meta{cs-number}, \marg{mspace}, \marg{delimiter}
@@ -1862,8 +1895,6 @@ indent_length "2"
This key sets the math space that is inserted between the infinitesimal and the function when the mixed order \emph{is equal} to \num{1}. The space is only inserted when a non-blank function is printed \emph{in the numerator}. The key's default value is \default{} \texttt{mu}.
\end{option}
- \clearpage
-
\begin{option}{sep-ord-fun}
\begin{values}[default = 0]
\meta{cs-number}, \marg{mspace}, \marg{delimiter}
@@ -1896,14 +1927,14 @@ indent_length "2"
\begin{values}[default = \cs{mathop}\{\}\cs{!}]
\meta{cs-number}, \marg{mspace}, \marg{delimiter}
\end{values}
- They key sets the math space that is inserted between a variable and the following infinitesimal. The space is only inserted when the variable's order \emph{is equal} to \num{1}. It is only inserted when more than one non-blank variables are given. The key's default value is \default{}.
+ They key sets the math space that is inserted between a variable and the following infinitesimal. The space is only inserted when the variable's order \emph{is equal} to \num{1}. It is only inserted when more than one non-blank variables are given. The key's default value is \val{\default}.
\end{option}
\begin{option}{sep-ord-inf}
\begin{values}[default = \cs{mathop}\{\}\cs{!}]
\meta{cs-number}, \marg{mspace}, \marg{delimiter}
\end{values}
- They key sets the math space that is inserted between a variable and the following infinitesimal. The space is only inserted when the variable's order \emph{is different} from \num{1}. It is only inserted when more than one non-blank variables are given. The key's default value is \default{}.
+ They key sets the math space that is inserted between a variable and the following infinitesimal. The space is only inserted when the variable's order \emph{is different} from \num{1}. It is only inserted when more than one non-blank variables are given. The key's default value is \val{\default}.
\end{option}
\begin{option}{sep-var-var}[new = v1.0]
@@ -1913,6 +1944,8 @@ indent_length "2"
They key sets the math space that is inserted between two variables. The space is only inserted when the \keyval{style-var}{single} is used. and when more than one non-blank variables are given. The key's default value is a comma.
\end{option}
+ \clearpage
+
\begin{option}{sep-eval-sb}
\begin{values}[default = 0]
\meta{cs-number}, \marg{mspace}, \marg{delimiter}
@@ -1927,8 +1960,6 @@ indent_length "2"
This key sets the math space that is inserted in the evaluation superscript left to the point of evaluation. The space is only inserted when a non-blank superscript is given. The key's default value is \default{} \texttt{mu}.
\end{option}
- \clearpage
-
\subsubsection*{Switches}
\begin{option}*{switch-*}
@@ -2023,8 +2054,6 @@ indent_length "2"
The sorting algorithm \val{symbol} sorts the terms by their symbolic length in a descending manner. If the value \val{true} is used, then the terms will sorted in an ascending manner instead. See \cref{ssec:sort-reverse} for more information.
\end{option}
- \clearpage
-
\subsubsection*{Miscellaneous}
\begin{option}*{fun}[cat=misc, new = v1.0]
@@ -2068,8 +2097,6 @@ indent_length "2"
Without setting the option to a value is equivalent to setting it to \val{all} as seen above.
\end{option}
- \clearpage
-
\begin{option}{order, ord}[cat=misc, new = v1.0]
\begin{values}[default = 1]
\marg{cs-orders}
@@ -2096,7 +2123,7 @@ indent_length "2"
\begin{values}[default = d]
\meta{math-font-style}\meta{infinitesimal}
\end{values}
- Sets the differential's infinitesimal including font style. This change was necessary to allow multiple font styles, e.g. \keyval{style-inf}{\cs{mathbf}\{\cs{mathrm}\{d\}\}}. The default font style is \default*. If an upright font is preferred then \cs{mathrm}\pdf{} and \cs{symup}\uni{} could be used, or if an italic font is preferred then \cs{mathnormal}\pdf{} and \cs{symit}\uni.
+ Sets the differential's infinitesimal including font style. This change was necessary to allow multiple font styles, e.g. \keyval{style-inf}{\cs{mathbf}\narg{\cs{mathrm}\narg{d}}}. The default infinitesimal is a plain `\default` with no associated font style.
\end{option}
\begin{option}{style-notation}
@@ -2181,6 +2208,8 @@ indent_length "2"
This key sets the math space that is inserted in the infinitesimal's power left to the order. It is only inserted when the mixed order is different from \num{1}. The key's default value is \default{} \texttt{mu}.
\end{option}
+ \clearpage
+
\begin{option}{sep-inf-var}
\begin{values}[default = 0]
\meta{cs-number}, \marg{mspace}, \marg{delimiter}
@@ -2195,8 +2224,6 @@ indent_length "2"
This key sets the math space that is inserted between the infinitesimal's power and the following variable. The space is only inserted when the order \emph{is different} from \num{1} and a non-blank variable is given. The key's default value is \default{} \texttt{mu}.
\end{option}
- \clearpage
-
\begin{option}{sep-var-inf}
\begin{values}[default = \cs{mathop}\{\}\cs{!}]
\meta{cs-number}, \marg{mspace}, \marg{delimiter}
@@ -2267,11 +2294,11 @@ indent_length "2"
\subsection{All derivatives and differentials} \label{ssec:both_options}
The options in this subsection are applied to all derivatives and differential because some options should be consisting regardless of the derivative and differential. The options are accessed using \macro{\derivset}[\narg{all},\oarg{key=value}].
- \begin{option}{scale-auto}
- \begin{values}[default = leftright]
+ \begin{option}{scale-auto}[updated = v1.1]
+ \begin{values}[default = {leftright, mleftmright\req}]
leftright, mleftmright\req
\end{values}
- This package uses \cs{left} and \cs{right} to automatically scale delimiters. The value \val{mleftmright} requires the \pkg{mleftright} package, which makes this package use \cs{mleft} and \cs{mright} instead.
+ Sets the dynamic scaling methods of delimiters. The value \val{leftright} sets the method to use \cs{left} and \cs{right}. The value \val{mleftmright} requires the \pkg{mleftright} package and sets the method to use \cs{mleft} and \cs{mright} instead. The default value is \val{leftright} unless \pkg{mleftright} have been loaded then it is \val{mleftmright}.
\end{option}
@@ -2574,7 +2601,7 @@ indent_length "2"
\end{change}
\smallskip
\begin{change}[version = 0.98, date = 2020-07-20, beta = true]
- \item Fixed a bug concerning the subscript argument due to recent changes to the \pkg{xparse} package dated 2020-05-14 (the fix works with earlier versions of xparse as well).
+ \item Fixed a bug concerning the subscript argument due to recent changes to the \pkg{xparse} package dated 2020-05-14 (the fix works with earlier versions of \pkg{xparse} as well).
\end{change}
\begin{change}[version = 1.0, date = 2021-05-25, beta = false]
\item Added new options for derivatives
@@ -2587,11 +2614,11 @@ indent_length "2"
\item Changed \cs{derivset} to define default options
\item Merged the codes for ordinary and partial derivatives
\item Removed the mixed order argument
- \item Removed the options `misc-add-delims` and `misc-remove-delims`
+ \item Removed the options \key[index=false]{misc-add-delims} and \key[index=false]{misc-remove-delims}
\item Replaced the commands in section 5 with new ones. Old ones no longer works.
\item Code clean-up and optimization
\item Fixed code errors
- \item Fixed Documentation errors
+ \item Fixed documentation errors
\item Enhanced support for preventing options effecting nested derivatives/differentials
\end{change}
\begin{change}[version = 1.01, date = 2021-05-28, beta = false]
@@ -2599,6 +2626,12 @@ indent_length "2"
\item Fixed code errors due to changes introduced in version 1.0 to the option \key[index=false]{style-inf}
\item Fixed documentation errors
\end{change}
+ \begin{change}[version = 1.1, date = 2021-06-03, beta = false]
+ \item Added package options to be used in \cs{usepackage}\oarg{options}\narg{derivative}
+ \item No longer secretly depends on \pkg{unicode-math} when using \xetex{} or \luatex
+ \item The package no longer uses \cs{symup} which have been replaced with \cs{mathrm} for simplicity
+ \item If \pkg{mleftright} is loaded then the default value of \key[index=false]{scale-auto} is \val{mleftmright}
+ \end{change}
\end{changelog}
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index c89a99181f..7d5517c918 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -23,12 +23,12 @@
%
% \changes{v1.20}{2021/01/09}{修改和完善用户文档。}
% \changes{v1.20}{2021/01/09}{模æ¿æ›´æ”¹ä¸ºä½¿ç”¨ CC-BY 许å¯å议。}
-% \changes{v1.25q}{2021/05/03}{å–消附带的示例文件,å¯æŸ¥çœ‹åŽ†å²ç‰ˆæœ¬åŠå…¶å®ƒæ¥æºçš„使用样例。}
-% \changes{v1.25q}{2021/06/02}{将模å—的代ç ç‹¬ç«‹å‡ºæ¥ä¸º \pkg{easybase} å®åŒ…,适用于 \CTeX 文档类。}
+% \changes{v1.25r}{2021/05/03}{å–消附带的示例文件,å¯æŸ¥çœ‹åŽ†å²ç‰ˆæœ¬åŠå…¶å®ƒæ¥æºçš„使用样例。}
+% \changes{v1.25r}{2021/06/02}{将模å—的代ç ç‹¬ç«‹å‡ºæ¥ä¸º \pkg{easybase} å®åŒ…,适用于 \CTeX 文档类。}
%
% \title{\sffamily easybook 文档类手册}
% \author{瞿毅}
-% \date{2021/06/02\hskip\ccwd\relax v1.25q\thanks{\url{https://gitee.com/texl3/easybook}}}
+% \date{2021/06/03\hskip\ccwd\relax v1.25r\thanks{\url{https://gitee.com/texl3/easybook}}}
%
% \maketitle
% \begin{abstract}
@@ -134,7 +134,7 @@
% \end{syntax}
% 传递给 \cls{ctexbook} 设置字体,最好ä¸è¦ä½¿ç”¨åŽŸæœ‰çš„ \opt{fontset} 选项,默认情况下使用自定义字体而ä¸å¼€å¯è¿™ä¸ªé€‰é¡¹ï¼Œå¯æ ¹æ®å®‰è£…的字体åŠç”µè„‘系统选å–。\opt{noto} 与 \opt{none} 选项的相关æè¿°è§å°èŠ‚ \ref{subsec:font settings},\opt{overleaf} 是一个å„系统通用选项,会检测系统环境选å–对应字体。
% \changes{v1.21}{2021/01/12}{默认字体与 \CTeX 一致,ä¸å†æ˜¯è‡ªå®šä¹‰å­—体。}
-% \changes{v1.25q}{2021/05/04}{ä¿®å¤ä½¿ç”¨ \pkg{xeCJK} 与 \pkg{fontspec} å®åŒ…的字体设置命令在 \hologo{LuaLaTeX} 下失效的问题。}
+% \changes{v1.25r}{2021/05/04}{ä¿®å¤ä½¿ç”¨ \pkg{xeCJK} 与 \pkg{fontspec} å®åŒ…的字体设置命令在 \hologo{LuaLaTeX} 下失效的问题。}
% \end{function}
%
% \begin{function}[rEXP,added = 2021-01-05,updated = 2021-01-13]{paper}
@@ -176,15 +176,15 @@
% \end{function}
%
% \subsubsection{目录命令}
-% \begin{function}[added = 2021-02-20,updated = 2021-06-02]{\tableofcontents,\listoffigures,\listoftables,\listoflistings}
+% \begin{function}[added = 2021-02-20,updated = 2021-06-03]{\tableofcontents,\listoffigures,\listoftables,\listoflstlistings}
% \begin{syntax}
% \tn{tableofcontents+}\oarg{键值列表}\parg{附加代ç }
% \tn{listoffigures*+}\oarg{键值列表}
% \tn{listoftables*+}\oarg{键值列表}
-% \tn{listoflistings*+}\oarg{键值列表}
+% \tn{listoflstlistings*+}\oarg{键值列表}
% \end{syntax}
-% \tn{listoffigures} 命令输出图片目录,\tn{listoftables} 输出表格目录,\tn{listoflistings} 输出代ç ç›®å½•ã€‚带有星å·çš„目录命令ä¸å°†æ ‡é¢˜æ·»åŠ è¿›ä¸»æ–‡æ¡£ç›®å½•ï¼Œå¸¦æœ‰+å·çš„目录命令å¯ä»¥ä½¿å½“å‰æ ‡é¢˜ç¼–å·ã€‚\tn{tableofcontents+} 与其它命令ä¸åŒæ˜¯ç”¨äºŽè¾“出åŒè¯­ç›®å½•ï¼Œéœ€è¦ä¸ŽåŒè¯­ç›®å½•æ ‡é¢˜å‘½ä»¤ \tn{bichapter} 等或设置图片ã€è¡¨æ ¼å’Œä»£ç ç­‰è‹±æ–‡ç›®å½•çš„标题é…åˆä½¿ç”¨ï¼Œé™„加代ç æ˜¯ä¸­æ–‡ä¸Žè‹±æ–‡ç›®å½•ä¹‹é—´çš„代ç ï¼Œå¯ä»¥æ’入文本和æ¢é¡µå‘½ä»¤ç­‰ã€‚目录的键值列表选项如下
-% \changes{v1.25q}{2021/05/05}{命令 \tn{tableofcontents} å¯ä»¥è¾“出åŒè¯­ç›®å½•ã€‚}
+% \tn{listoffigures} 命令输出图片目录,\tn{listoftables} 输出表格目录,\tn{listoflstlistings} 输出代ç ç›®å½•ã€‚带有星å·çš„目录命令ä¸å°†æ ‡é¢˜æ·»åŠ è¿›ä¸»æ–‡æ¡£ç›®å½•ï¼Œå¸¦æœ‰+å·çš„目录命令å¯ä»¥ä½¿å½“å‰æ ‡é¢˜ç¼–å·ã€‚\tn{tableofcontents+} 与其它命令ä¸åŒæ˜¯ç”¨äºŽè¾“出åŒè¯­ç›®å½•ï¼Œéœ€è¦ä¸ŽåŒè¯­ç›®å½•æ ‡é¢˜å‘½ä»¤ \tn{bichapter} 等或设置图片ã€è¡¨æ ¼å’Œä»£ç ç­‰è‹±æ–‡ç›®å½•çš„标题é…åˆä½¿ç”¨ï¼Œé™„加代ç æ˜¯ä¸­æ–‡ä¸Žè‹±æ–‡ç›®å½•ä¹‹é—´çš„代ç ï¼Œå¯ä»¥æ’入文本和æ¢é¡µå‘½ä»¤ç­‰ã€‚目录的键值列表选项如下
+% \changes{v1.25r}{2021/05/05}{命令 \tn{tableofcontents} å¯ä»¥è¾“出åŒè¯­ç›®å½•ã€‚}
% \end{function}
%
% \begin{function}{multoc,columns,title,format,aftertitle,pagestyle,book,article}
@@ -201,7 +201,7 @@
% 在书ç±æ¨¡å¼ä¸” \opt{book} 选项开å¯æˆ–者文章模å¼çš„情况下,\opt{format} 用于设置目录标题的格å¼ï¼Œ\opt{aftertitle} 选项的代ç å°†è¢«æ’入到目录标题内容之åŽï¼Œ\opt{pagestyle} 是目录标题所在页的页é¢æ ¼å¼ï¼Œé™¤æ­¤ä¹‹å¤–è¿˜æ”¯æŒ \opt{ctexset/chapter} 或 \opt{ctexset/section} 所有的章节标题样å¼é€‰é¡¹ã€‚\opt{book} 选项使目录标题按照 chapter 级别输出,\opt{article} 选项使目录标题按照 section 级别输出,默认为 chapter 级别。
% \changes{v1.23}{2021/03/15}{为几个目录增加键值列表的选项,å¯è®¾ç½®æ ‡é¢˜è¾“出级别以åŠæ˜¯å¦åŠ å…¥ä¸»ç›®å½•ã€‚}
% \changes{v1.24}{2021/04/04}{目录命令的å¯é€‰å‚数增加标题键值。}
-% \changes{v1.25q}{2021/06/02}{目录å¯è®¾ç½®å¤šæ ï¼Œå¹¶åœ¨ article 模å¼ä»ç„¶ç”Ÿæ•ˆã€‚}
+% \changes{v1.25r}{2021/06/02}{目录å¯è®¾ç½®å¤šæ ï¼Œå¹¶åœ¨ article 模å¼ä»ç„¶ç”Ÿæ•ˆã€‚}
% \end{function}
%
% \subsubsection{标题命令}
@@ -217,7 +217,7 @@
% åŒè¯­ç›®å½•çš„标题命令目å‰è®¾ç½®äº†å¸¸ç”¨çš„三个级别,它们将中文标题正常输出,并使中英文标题加入åŒè¯­ç›®å½•ï¼Œè¿™ä¸ªåŠŸèƒ½æ˜¯ä¸ºå›½å†…一些大学的学ä½è®ºæ–‡æ¨¡æ¿çš„è¦æ±‚设计,在一般情况和英文模å¼ä¸‹ä¸éœ€è¦ä½¿ç”¨ã€‚
%
% 它们的星å·å˜ä½“命令使文中标题ä¸ç¼–å·ï¼Œä½†æ˜¯ä»ç„¶åŠ å…¥åŒè¯­ç›®å½•ï¼Œè‹¥è‹±æ–‡æ ‡é¢˜å‚数空置那么仅加入中文目录而ä¸åŠ å…¥è‹±æ–‡ç›®å½•ï¼Œè¿™ä¸€ç‰¹ç‚¹ä¸Ž \tn{chapter*} 等命令的行为ä¸å¤ªä¸€æ ·ï¼Œåœ¨ä¸€äº›æƒ…况下会用到。å¯é€‰å‚数是目录中的中文标题,默认与中文标题一致,正文标题过长时å¯ç”¨å®ƒè®¾ç½®åœ¨ç›®å½•ä¸­æ˜¾ç¤ºçš„标题。åŒè¯­ç›®å½•çš„æ ¼å¼æ˜¯ä¸€è‡´çš„,共享使用 \tn{tocset} 的设置,英文目录的章级别标题ååŠç¼–å·çš„修改方å¼å¦‚下
-% \changes{v1.25q}{2021/05/05}{增加与åŒè¯­ç›®å½•é…åˆçš„标题命令。}
+% \changes{v1.25r}{2021/05/05}{增加与åŒè¯­ç›®å½•é…åˆçš„标题命令。}
% \end{function}
%
% \begin{function}{biname,binmuber}
@@ -317,7 +317,7 @@
% \changes{v1.10}{2021/01/08}{ä¿®å¤äº† \opt{linktopage} 选项关闭时目录中标题编å·æ— è¶…链接的问题。}
% \changes{v1.23}{2021/03/19}{ä¿®å¤åœ¨ \pkg{ctex} v2.5.6 æ›´æ–°åŽ \cls{easybook} 与 \pkg{hyperref} 冲çªé—®é¢˜ã€‚}
% \changes{v1.24}{2021/04/05}{增加 \pkg{hyperref} 超链接选项完整的支æŒã€‚}
-% \changes{v1.25q}{2021/05/06}{模å—å \opt{link} 改为 \opt{refset},\opt{link} 作为兼容性ä¿ç•™ã€‚}
+% \changes{v1.25r}{2021/05/06}{模å—å \opt{link} 改为 \opt{refset},\opt{link} 作为兼容性ä¿ç•™ã€‚}
% \end{function}
%
% \begin{optdesc}
@@ -374,7 +374,7 @@
% \ding{229} 以上选项路径为 \opt{subfont/...}
% \changes{v1.10}{2021/01/08}{加入自定义éžæ­£æ–‡å­—体选项。}
% \changes{v1.23}{2021/02/08}{ä¿®å¤ä½¿ç”¨ \tn{zihao} 命令设置字体失效的问题。}
-% \changes{v1.25q}{2021/05/31}{其它字体模å—åç”± \opt{elsefont} 改为 \opt{subfont},并增加数学字体的选项 \opt{subfont/math}。}
+% \changes{v1.25r}{2021/05/31}{其它字体模å—åç”± \opt{elsefont} 改为 \opt{subfont},并增加数学字体的选项 \opt{subfont/math}。}
% \end{function}
%
% \begin{optdesc}
@@ -399,7 +399,7 @@
% \changes{v1.21}{2021/01/11}{增加 \opt{bibset} 选项,å¯ä»¥ä½¿ç”¨ \hologo{BibTeX} 或 \hologo{biber} 编译å‚考文献。}
% \changes{v1.23}{2021/02/23}{使用 \opt{bibset} 选项时å¯è®¾ç½®æ ‡æ³¨é£Žæ ¼ã€‚}
% \changes{v1.24}{2021/04/09}{å¯ä»¥ä¸è½½å…¥å‚考文献包手动é…ç½®å‚考文献格å¼ã€‚}
-% \changes{v1.25q}{2021/05/12}{å–消 \opt{bib-loadpkg} 选项,由是å¦è®¾ç½®å‚考文献数æ®åº“æ¥å†³å®šè½½å…¥å®åŒ…。}
+% \changes{v1.25r}{2021/05/12}{å–消 \opt{bib-loadpkg} 选项,由是å¦è®¾ç½®å‚考文献数æ®åº“æ¥å†³å®šè½½å…¥å®åŒ…。}
% \end{function}
%
% \begin{optdesc}
@@ -605,7 +605,7 @@
% 上é¢å‡ ä¸ªé€‰é¡¹ç”¨äºŽè®¾ç½®è„šæ³¨æ ¼å¼ï¼Œ\opt{fnparskip} å’Œ \opt{fnparindent} 选项仅在 \opt{fnhang = true} 时有效。\opt{fnhang} 用于将脚注设置为悬挂缩进的格å¼ï¼Œ\opt{fnmark-pos} 选项设置脚注编å·çš„ä½ç½®ï¼Œæ­£å¸¸æ–‡æœ¬æˆ–是上标形å¼ã€‚\opt{fnmark-num} 选项设置脚注编å·çš„æ ¼å¼ï¼Œé»˜è®¤ä¸ºåŽŸç”Ÿæ ·å¼ \opt{plain},还å¯ä»¥æ”¹ä¸º \opt{pifont} çš„å„个版本,从左往å³ä¾æ¬¡ä¸ºæ™®é€šç‰ˆã€é˜´æ–‡è¡¬çº¿ç‰ˆã€é˜³æ–‡æ— è¡¬çº¿ç‰ˆå’Œé˜´æ–‡æ— è¡¬çº¿ç‰ˆï¼Œç¼ºç‚¹æ˜¯å®ƒä»¬çš„ç¼–å·ä»…包括1-10。
%
% \opt{fnmark-form} 是脚注标记的格å¼ï¼Œåœ¨æ­¤è®¾ç½®å­—体命令会覆盖 \opt{subfont/footnote} 的设置,最åŽä¸€ä¸ªæ ¼å¼å‘½ä»¤å¯ä»¥å¸¦æœ‰ä¸€ä¸ªå‚数,这个å‚数接å—脚注编å·ï¼Œä¸€èˆ¬é…åˆ \opt{fnmark-num = plain} 使用。\opt{afterfnmark} 是脚注标记åŽçš„代ç ï¼Œä¸€èˆ¬ç”¨äºŽè®¾ç½®æ ‡è®°ä¸Žæ–‡æœ¬é—´çš„è·ç¦»ã€‚
-% \changes{v1.25q}{2021/05/12}{增加脚注样å¼è®¾ç½®é€‰é¡¹ã€‚}
+% \changes{v1.25r}{2021/05/12}{增加脚注样å¼è®¾ç½®é€‰é¡¹ã€‚}
% \end{function}
%
% \subsection{目录样å¼}
@@ -624,7 +624,7 @@
% \opt{format} 是目录中标题的格å¼ï¼Œå¯ä»¥è®¾ç½®å­—体和加入垂直间è·ç­‰ï¼Œåž‚ç›´é—´è·æœ€å¥½ä½¿ç”¨æ— é—´è·é‡åˆçš„ \tn{addvspace} 命令,带有加å·çš„ \opt{format+} 选项用于在已有的格å¼å‘½ä»¤åŽé™„加内容。\opt{indent} 是目录中标题在页é¢å·¦ä¾§çš„缩进è·ç¦»ï¼Œåº”该有长度å•ä½ã€‚\opt{rule} 选项中一般应当使用 \tn{tocrule} 命令,将会在接下æ¥ä»‹ç»ã€‚\opt{numsep} 是有编å·çš„标题在目录中编å·ä¸Žæ ‡é¢˜çš„é—´è·ã€‚
% \changes{v1.21}{2021/01/13}{增加é…置目录样å¼çš„选项。}
% \changes{v1.24}{2021/04/20}{增加目录中编å·ä¸Žæ ‡é¢˜çš„é—´è·é€‰é¡¹ \opt{numsep}。}
-% \changes{v1.25q}{2021/05/14}{å¯ä»¥åˆ†åˆ«è®¾ç½®å›¾ç‰‡ã€è¡¨æ ¼å’Œä»£ç ç›®å½•çš„æ ¼å¼ã€‚}
+% \changes{v1.25r}{2021/05/14}{å¯ä»¥åˆ†åˆ«è®¾ç½®å›¾ç‰‡ã€è¡¨æ ¼å’Œä»£ç ç›®å½•çš„æ ¼å¼ã€‚}
% \end{function}
%
% \begin{function}[added = 2021-01-13,updated = 2021-04-20]{\tocrule,\EbNumberLine}
@@ -709,7 +709,7 @@
% \tn{end}\marg{环境å}
% \end{syntax}
% \pkg{tabularray} 是一个较新的å®åŒ…,ä¸ä»…æ供了 \pkg{tabularx}ã€\pkg{multirow}ã€å’Œ \pkg{booktabs} å®åŒ…的功能,并且ä¸ä¾èµ–其它å®åŒ…与它们åŒæ—¶ä½¿ç”¨ä¸ä¼šäº§ç”Ÿå†²çªï¼Œè¿˜å®žçŽ°äº†ç”¨ç®€ä¾¿çš„键值列表方å¼è®¾ç½®è¡¨æ ¼æ ·å¼ã€‚ç›®å‰é™¤äº†è¡¨å¤´æ–œçº¿ä»¥åŠè·¨é¡µåŠŸèƒ½å­˜åœ¨ä¸è¶³ï¼Œå…¶å®ƒæ–¹é¢å·²æ»¡è¶³å¯¹è¡¨æ ¼ç»å¤§å¤šæ•°æ ¼å¼çš„需求,具体用法å¯è§å®åŒ…的说明文档。
-% \changes{v1.25q}{2021/05/17}{使用功能更便æ·é½å…¨çš„ \pkg{tabularray} å®åŒ…设置表格样å¼ã€‚}
+% \changes{v1.25r}{2021/05/17}{使用功能更便æ·é½å…¨çš„ \pkg{tabularray} å®åŒ…设置表格样å¼ã€‚}
% \end{function}
%
% \subsection{列表}
@@ -873,7 +873,7 @@
% \tn{qtyrange}\oarg{键值列表}\marg{æ•°å­—1}\marg{æ•°å­—2}\marg{å•ä½}
% \end{syntax}
% \pkg{siunitx} å®åŒ…çš„ \tn{num} 命令å¯ä»¥è¾“出以科学计数法表示的数值,å•ä½æ ¼å¼åŒ–命令 \tn{unit} 包å«æ–‡å­—项目(例如字æ¯æˆ–数字)时,使用 . å’Œ \~{} 放置在å•å…ƒä¹˜ç§¯ä¸­é—´ï¼Œå¹¶ä½¿ç”¨ \_ å’Œ \^{} 正确放置指定的下标和上标。格å¼åŒ–方法å¯åœ¨æ•°å­¦å’Œæ–‡æœ¬æ¨¡å¼ä¸‹ä½¿ç”¨ã€‚而 \tn{qty} 命令å¯ç”¨æ¥è¾“出带有å•ä½çš„é‡ï¼Œ\tn{qtyrange} å¯ä»¥è¾“出带有范围和å•ä½çš„é‡ã€‚
-% \changes{v1.25q}{2021/05/18}{\pkg{siunitx} å®åŒ… v3.0.0 æ›´æ–°åŽç”¨æ³•æ”¹å˜ï¼Œä¿®æ”¹ç›¸å…³é…置选项。}
+% \changes{v1.25r}{2021/05/18}{\pkg{siunitx} å®åŒ… v3.0.0 æ›´æ–°åŽç”¨æ³•æ”¹å˜ï¼Œä¿®æ”¹ç›¸å…³é…置选项。}
% \end{function}
%
% \begin{ctexexam}
@@ -1011,7 +1011,7 @@
%<*class>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2021/06/02}{1.25q}{beta}
+\ProvidesExplClass{easybook}{2021/06/03}{1.25r}{beta}
\bool_set_false:N \l__eb_compile_draft_bool
\bool_set_false:N \l__eb_title_newline_bool
@@ -1255,7 +1255,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
\RequirePackage{etoolbox}
-\ProvidesExplPackage{easybase}{2021/06/02}{1.25q}{beta}
+\ProvidesExplPackage{easybase}{2021/06/03}{1.25r}{beta}
\cs_generate_variant:Nn \eb_ctex_define:nn { nx }
\cs_generate_variant:Nn \int_to_arabic:n { v }
@@ -1359,7 +1359,7 @@
\ctex_define:n
{
link .meta:nn = { ctex/link } {#1},
- lstlistlistingname .tl_set:N = \lstlistlistingname,
+ lstlistlistingname .tl_set:N = \listlstlistingname,
lstlistingname .tl_set:N = \lstlistingname
}
\eb_ctex_define:nn { style }
@@ -1441,7 +1441,7 @@
{
vmargin = 2.54cm,
hmargin = 3.17cm,
- columnsep = \ccwd,
+ columnsep = 2\ccwd,
headheight = 2.04cm,
headsep = 0.5cm,
footskip = 0.79cm,
@@ -2119,69 +2119,60 @@
{ \bisection*{#1}{\l__eb_bib_bitoc_title} }
\eb@nonumber@markdouble{#1}
}
-\cs_new_protected:Npn \eb_multoc_pre_bool:
+\cs_new_protected:Npn \eb_toc_multicol_bool:n #1
{
- \bool_if:NT \l__eb_multoc_bool
- { \begin{multicols}{\int_use:N \l__eb_toc_columns_int} }
- }
-\cs_new_protected:Npn \eb_multoc_post_bool:
- { \bool_if:NT \l__eb_multoc_bool { \end{multicols} } }
-\RenewDocumentCommand{\tableofcontents}{t+oD(){}}
- {
- \group_begin:
- \tl_set_eq:NN \eb@toc@title \contentsname
- \tl_set:Nn \eb@bitoc@title { Contents }
- \IfValueT{#2}{\keys_set:nn { eb/listoc } {#2}}
- \eb_title_mark_notoc:n { \eb@toc@title }
- \eb_multoc_pre_bool:
- \vspace*{\dim_use:N \l__eb_toc_offset_dim}
- \@starttoc{toc}#3
- \IfBooleanT{#1}
+ \bool_if:NTF \l__eb_multoc_bool
{
- \eb_title_mark_notoc:n { \eb@bitoc@title }
- \vspace*{\dim_use:N \l__eb_toc_offset_dim}
- \@starttoc{tec}
+ \begin{multicols}{\int_use:N \l__eb_toc_columns_int}
+ \@starttoc{#1}
+ \end{multicols}
}
- \eb_multoc_post_bool:
- \group_end:
+ { \@starttoc{#1} }
}
-\RenewDocumentCommand{\listoffigures}{st+o}
+\cs_new_protected:Npn \eb_toc_list_parse:nnnnn #1#2#3#4#5
{
\group_begin:
- \tl_set_eq:NN \eb@toc@title \listfigurename
+ \exp_args:NNc
+ \tl_set_eq:NN \eb@toc@title { list#4name }
\IfValueT{#3}{\keys_set:nn { eb/listoc } {#3}}
\eb_title_number_intoc_bool:nn {#2} {#1}
- \eb_multoc_pre_bool:
- \dim_add:NV \l__eb_toc_offset_dim \l__eb_toc_figure_offset_dim
+ \exp_args:NNc \dim_add:NV
+ \l__eb_toc_offset_dim { l__eb_toc_#4_offset_dim }
\vspace*{\dim_use:N \l__eb_toc_offset_dim}
- \@starttoc{lof}
- \eb_multoc_post_bool:
+ \eb_toc_multicol_bool:n {#5}
\group_end:
}
-\RenewDocumentCommand{\listoftables}{st+o}
+\clist_map_inline:nn
{
- \group_begin:
- \tl_set_eq:NN \eb@toc@title \listtablename
- \IfValueT{#3}{\keys_set:nn { eb/listoc } {#3}}
- \eb_title_number_intoc_bool:nn {#2} {#1}
- \eb_multoc_pre_bool:
- \dim_add:NV \l__eb_toc_offset_dim \l__eb_toc_table_offset_dim
- \vspace*{\dim_use:N \l__eb_toc_offset_dim}
- \@starttoc{lot}
- \eb_multoc_post_bool:
- \group_end:
+ { figure,lof },
+ { table,lot },
+ { lstlisting,lol }
}
-\NewDocumentCommand{\listoflistings}{st+o}
+ {
+ \exp_args:Nc \DeclareDocumentCommand
+ { listof\clist_item:nn {#1} { 1 }s }{st+o}
+ {
+ \eb_toc_list_parse:nnnnn {##1} {##2} {##3}
+ { \clist_item:nn {#1} { 1 } }
+ { \clist_item:nn {#1} { 2 } }
+ }
+ }
+\cs_set_eq:NN \listoflistings \listoflstlistings
+\RenewDocumentCommand{\tableofcontents}{t+oD(){}}
{
\group_begin:
- \tl_set_eq:NN \eb@toc@title \lstlistlistingname
- \IfValueT{#3}{\keys_set:nn { eb/listoc } {#3}}
- \eb_title_number_intoc_bool:nn {#2} {#1}
- \eb_multoc_pre_bool:
- \dim_add:NV \l__eb_toc_offset_dim \l__eb_toc_lstlisting_offset_dim
+ \tl_set_eq:NN \eb@toc@title \contentsname
+ \tl_set:Nn \eb@bitoc@title { Contents }
+ \IfValueT{#2}{\keys_set:nn { eb/listoc } {#2}}
+ \eb_title_mark_notoc:n { \eb@toc@title }
\vspace*{\dim_use:N \l__eb_toc_offset_dim}
- \@starttoc{lol}
- \eb_multoc_post_bool:
+ \eb_toc_multicol_bool:n { toc }#3
+ \IfBooleanT{#1}
+ {
+ \eb_title_mark_notoc:n { \eb@bitoc@title }
+ \vspace*{\dim_use:N \l__eb_toc_offset_dim}
+ \eb_toc_multicol_bool:n { tec }
+ }
\group_end:
}
@@ -2421,6 +2412,7 @@
\skip_set:Nn \textfloatsep { 16pt plus 2pt minus 4pt }
\skip_set:Nn \dbltextfloatsep { 16pt plus 2pt minus 4pt }
\skip_set:Nn \@fpsep { 8pt plus 2.0fil }
+\skip_set:Nn \multicolsep { 10pt plus 4pt minus 3pt }
\setcounter{topnumber}{4}
\setcounter{bottomnumber}{4}
\setcounter{totalnumber}{8}
@@ -2763,7 +2755,7 @@
{
standard~jigsaw,
nobeforeafter,tcbox~raise~base,
- top = 1.25qt,bottom = 1.25qt,left = 1.25qt,right = 1.25qt,
+ top = 1.25rt,bottom = 1.25rt,left = 1.25rt,right = 1.25rt,
boxrule = 0.75pt,arc = 1pt,
colback = #1,opacityback = 0.12,colframe = #1,#3
}{#2}
@@ -2823,6 +2815,8 @@
\tl_if_empty:NF \l__eb_bib_citestyle_tl
{ \exp_args:NV \setcitestyle \l__eb_bib_citestyle_tl }
\skip_zero:N \bibsep
+ \AtEndEnvironment{thebibliography}
+ {\bool_if:NT \l__eb_multoc_bool { \end{multicols} }}
\NewDocumentCommand{\printbibliography}{st+o}
{
\group_begin:
@@ -2831,10 +2825,10 @@
\tl_set:Nn \bibsection
{
\eb_title_number_intoc_bool:nn {##2} {##1}
- \eb_multoc_pre_bool:
+ \bool_if:NT \l__eb_multoc_bool
+ { \begin{multicols}{\int_use:N \l__eb_toc_columns_int} }
}
\exp_args:NV \bibliography \l__eb_bib_datafile_tl
- \eb_multoc_post_bool:
\group_end:
}
}
@@ -2952,12 +2946,12 @@
{ \definecolorset{HTML}{ctex@}{}{frame,#1;emph,#1;verb,#1} }
\cs_new:Npn \eb_linkcolor_set:n #1
{
- linkcolor/\clist_item:nn {#1} {1} .code:n =
+ linkcolor/\clist_item:nn {#1} { 1 } .code:n =
{
\eb_define_linkcolor:nnn
- { \clist_item:nn {#1} {2} }
- { \clist_item:nn {#1} {3} }
- { \clist_item:nn {#1} {4} }
+ { \clist_item:nn {#1} { 2 } }
+ { \clist_item:nn {#1} { 3 } }
+ { \clist_item:nn {#1} { 4 } }
\eb_put_hyperref:n
{
linkcolor = ctex@link,linkbordercolor = ctex@link,
@@ -2971,9 +2965,9 @@
color/\clist_item:nn {#1} {1} .code:n =
{
\eb_define_themecolor:nnn
- { \clist_item:nn {#1} {2} }
- { \clist_item:nn {#1} {3} }
- { \clist_item:nn {#1} {4} }
+ { \clist_item:nn {#1} { 2 } }
+ { \clist_item:nn {#1} { 3 } }
+ { \clist_item:nn {#1} { 4 } }
},
}
diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf
index 7d7ea10892..f6612969e9 100644
--- a/macros/latex/contrib/easybook/easybook.pdf
+++ b/macros/latex/contrib/easybook/easybook.pdf
Binary files differ
diff --git a/macros/latex/contrib/ocgx2/ChangeLog b/macros/latex/contrib/ocgx2/ChangeLog
index bbf9411f31..244ce66c95 100644
--- a/macros/latex/contrib/ocgx2/ChangeLog
+++ b/macros/latex/contrib/ocgx2/ChangeLog
@@ -1,3 +1,12 @@
+2021-06-03
+ * v0.51: ocgx2.sty
+ * v0.19: ocgbase.sty
+ * fix: pdfmanagement-testphase; ocgcolorlinks
+
+2021-01-25
+ * v0.50: ocgx2.sty
+ * v0.18: ocgbase.sty
+
2020-06-11
* v0.49: ocgx2.sty
* fix: `ocgcolorlinks': fixing misplaced page content resulting from
diff --git a/macros/latex/contrib/ocgx2/ocgbase.sty b/macros/latex/contrib/ocgx2/ocgbase.sty
index 7c97c37ab0..6e514c2236 100644
--- a/macros/latex/contrib/ocgx2/ocgbase.sty
+++ b/macros/latex/contrib/ocgx2/ocgbase.sty
@@ -1,3 +1,11 @@
+%%%%%%%%%%%%%%%%%%%%%% pdfmanagement-testphase %%%%%%%%%%%%%%%%%%%
+\newif\if@ocgbase@testphase
+\ExplSyntaxOn
+\bool_if:nT {
+ \bool_lazy_and_p:nn {\cs_if_exist_p:N \pdfmanagement_if_active_p:} { \pdfmanagement_if_active_p: }
+}{\@ocgbase@testphasetrue}
+\ExplSyntaxOff
+\if@ocgbase@testphase\else
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% ocgbase.sty
@@ -94,8 +102,8 @@
\RequirePackage{l3keys2e}
-\def\g@ocgbase@date@tl{2021/01/25}
-\def\g@ocgbase@version@tl{0.18}
+\def\g@ocgbase@date@tl{2021/06/03}
+\def\g@ocgbase@version@tl{0.19}
\ProvidesExplPackage{ocgbase}{\g@ocgbase@date@tl}{\g@ocgbase@version@tl}
{support package for ocgx2.sty}
@@ -364,3 +372,378 @@
\cs_gset_eq:NN\ocgbase@oc@emc\ocgbase_oc_emc:
\cs_gset_eq:NN\ocgbase@open@stack@pop\ocgbase_open_stack_pop:N
\cs_gset_eq:NN\ocgbase@open@stack@push\ocgbase_open_stack_push:n
+\endinput
+\fi
+%%%%%%%%%%%%%%%%%%%%%% /pdfmanagement-testphase %%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ocgbase.sty
+%
+% low-level macros for OCG creation, marking optional content and
+% for managment of global (document-wide) OCG related lists;
+%
+% (automatic) OCG configuration in the PDF catalog
+%
+% Copyright 2015--\today, Alexander Grahn
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Support package for ocgx2.sty, media9.sty, animate.sty
+%
+% Supported workflows:
+%
+% pdflatex, lualatex
+% latex-->dvips-->ps2pdf or Distiller
+% latex-->dvipdfmx
+% xelatex
+%
+% for `dvipdfmx', set it as document class option
+%
+%
+% Commands defined:
+%
+% \ocgbase_new_ocg:nnn
+% \ocgbase@new@ocg (LaTeX2e version)
+% #1: name (as shown in the Layers Tab of the Reader GUI)
+% #2: usage dict (may be empty), see PDF reference:
+% http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/
+% pdf_reference_1-7.pdf#G9.3858276
+% #3: initial visibility (1|0|true|false|on|off|visible|invisible)
+%
+% \ocgbase_last_ocg:
+% \ocgbase@last@ocg (LaTeX2e version)
+% inserts ID of PDF object created during most recent call of
+% \ocgbase_new_ocg:nnn
+%
+% --------
+%
+% \ocgbase_tree_node_begin:n
+% \ocgbase_tree_node_end:
+% \ocgbase@tree@node@begin (LaTeX2e versions)
+% \ocgbase@tree@node@end
+% #1: OCG PDF object
+% macro pair (begin and end) for inserting OCG object and its children
+% into Order hierarchy (shown as tree structure in the viewers `Layers' tab
+%
+% --------
+%
+% \ocgbase_add_to_off_list:n
+% \ocgbase@add@to@off@list (LaTeX2e version)
+% #1: PDF object ID of OCG
+% macro for setting initial visibility to `off'
+%
+% --------
+%
+% \ocgbase_del_from_off_list:n
+% \ocgbase@del@from@off@list (LaTeX2e version)
+% #1: PDF object ID of OCG
+% macro for setting initial visibility to `on'
+%
+% --------
+%
+% \ocgbase_add_ocg_to_radiobtn_grp:nn
+% \ocgbase@add@ocg@to@radiobtn@grp
+% add OCG #2 (obj ref) to radio button group `#1' (string),
+%
+% --------
+%
+% \ocgbase_oc_bdc:n
+% \ocgbase@oc@bdc
+% #1: OCG obj ref
+% mark begin of optional content belonging to OCG #1 in the current
+% content stream
+%
+% \ocgbase_oc_emc:
+% \ocgbase@oc@emc
+% mark end of optional content in the current content stream
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License.
+%
+% The latest version of this license is in
+% http://mirrors.ctan.org/macros/latex/base/lppl.txt
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is A. Grahn.
+
+\RequirePackage{l3keys2e}
+
+\def\g@ocgbase@date@tl{2021/06/03}
+\def\g@ocgbase@version@tl{0.19}
+
+\ProvidesExplPackage{ocgbase}{\g@ocgbase@date@tl}{\g@ocgbase@version@tl}
+{support package for ocgx2.sty}
+
+%package options
+
+%unknown package option error message
+\msg_set:nnnn{ocgbase}{unknown~package~option}{Unknown~package~option~`#1'.}{
+ Package option~'#1'~is~unknown;\\
+ perhaps~it~is~spelled~incorrectly.
+}
+
+\keys_define:nn{ocgbase}{
+ xetex .code:n = {}, %dummy
+
+ dvipdfmx .choice:,
+ dvipdfmx / true .code:n = {\PassOptionsToPackage{dvipdfmx}{pdfbase}},
+ dvipdfmx / false .code:n = {},
+ dvipdfmx .default:n = {true},
+
+ unknown .code:n = {
+ \msg_error:nnx{ocgbase}{unknown~package~option}{\l_keys_key_tl}
+ }
+}
+\ProcessKeysOptions{ocgbase}
+
+\RequirePackage{pdfbase}
+
+\msg_set:nnnn{ocgbase}{support~outdated}{
+ Support~package~`#1'~too~old.
+}{
+ Get~an~up~to~date~version~of~`#1'.\\
+ Aborting.
+}
+\@ifpackagelater{pdfbase}{2017/09/29}{}{
+ \msg_error:nnn{ocgbase}{support~outdated}{pdfbase.sty}
+ \tex_endinput:D
+}
+
+\tl_new:N\g_ocgbase_ocgs_tl %takes ocg object refs
+\seq_new:N\g_ocgbase_offocgs_seq
+
+\AddToHook{shipout/lastpage}{
+ \tl_if_empty:NF\g_ocgbase_ocgs_tl{
+ %global OCG array
+ \pbs_pdfobj:nnn{}{array}{\g_ocgbase_ocgs_tl}
+ \tl_set:Nx\l_ocgbase_ocgarray_tl{\pbs_pdflastobj:}
+ \tl_new:N\l_ocgbase_offocgentry_tl
+ %global OFF list
+ \seq_if_empty:NF\g_ocgbase_offocgs_seq{
+ \pbs_pdfobj:nnn{}{array}{\seq_use:Nn\g_ocgbase_offocgs_seq{~}}
+ \tl_set:Nx\l_ocgbase_offocgentry_tl{/OFF~\pbs_pdflastobj:}
+ }
+ %global Order list
+ \tl_new:N\l_ocgbase_ocgorderentry_tl
+ \tl_new:N\l_ocgbase_ocgorder_tl
+ \tl_if_exist:cT{g_ocgbase_nd_0_chld_tl}{
+ \ocgbase_build_order:Nn\l_ocgbase_ocgorder_tl{
+ \tl_use:c{g_ocgbase_nd_0_chld_tl}
+ }
+ }
+ \tl_if_empty:NF\l_ocgbase_ocgorder_tl{
+ \pbs_pdfobj:nnn{}{array}{\l_ocgbase_ocgorder_tl}
+ \tl_set:Nx\l_ocgbase_ocgorderentry_tl{/Order~\pbs_pdflastobj:}
+ }
+ %generate RBGroups entry (radio button groups)
+ \tl_new:N\l_ocgbase_rbtn_groups_tl
+ \seq_map_inline:Nn\g_ocgbase_rbtn_groups_seq{
+ \int_compare:nT{\seq_count:c{g_ocgbase_rbtn_group_#1_seq}>\c_one_int}{
+ \tl_put_right:Nx\l_ocgbase_rbtn_groups_tl{
+ ~[\seq_use:cn{g_ocgbase_rbtn_group_#1_seq}{~}]
+ }
+ }
+ }
+ \tl_new:N\l_ocgbase_rbgroupsentry_tl
+ \tl_if_empty:NF\l_ocgbase_rbtn_groups_tl{
+ \pbs_pdfobj:nnn{}{array}{\l_ocgbase_rbtn_groups_tl}
+ \tl_set:Nx\l_ocgbase_rbgroupsentry_tl{/RBGroups~\pbs_pdflastobj:}
+ }
+ \pdfmanagement_add:nnx{Catalog/OCProperties}{OCGs}{\g_ocgbase_ocgs_tl}
+ \pdfmanagement_add:nnx{Catalog/OCProperties}{D}{<<
+ /AS~[
+ <</Event/View /Category[/View] /OCGs~\l_ocgbase_ocgarray_tl>>
+ <</Event/Print /Category[/Print] /OCGs~\l_ocgbase_ocgarray_tl>>
+ <</Event/Export/Category[/Export]/OCGs~\l_ocgbase_ocgarray_tl>>
+ ]
+ /BaseState/ON~\l_ocgbase_offocgentry_tl
+ \l_ocgbase_ocgorderentry_tl
+ \l_ocgbase_rbgroupsentry_tl
+ /ListMode/VisiblePages
+ >>
+ }
+ }
+}
+
+%macro for inserting new OCG object
+\cs_generate_variant:Nn\pdf_object_new:nn{xn}
+\cs_generate_variant:Nn\pdf_object_write:nn{xx}
+\int_new:N\g_ocgbase_int
+\cs_new_protected_nopar:Nn\ocgbase_new_ocg:nnn{
+ \pdf_object_new:xn{g_object_\int_use:N\g_ocgbase_int _pdf}{dict}
+ \pdf_object_write:xx{g_object_\int_use:N\g_ocgbase_int _pdf}{
+ /Type/OCG/Name~(#1)~\str_if_eq:eeF{#2}{}{/Usage<<#2>>}
+ }
+ \tl_gput_right:Nx\g_ocgbase_ocgs_tl{~\pdf_object_ref_last:}
+ \bool_if:nT{
+ \str_if_eq_p:ee{#3}{0} ||
+ \str_if_eq_p:ee{#3}{off} ||
+ \str_if_eq_p:ee{#3}{false} ||
+ \str_if_eq_p:ee{#3}{invisible}
+ }{
+ \ocgbase_add_to_off_list:n{\pdf_object_ref_last:}
+ }
+ \tl_gset:Nx\g_ocgbase_last_ocg_tl{\pdf_object_ref_last:}
+ \tl_gset:cx{g_pbs_objname_\pdf_object_ref_last: _tl}{
+ g_object_\int_use:N\g_ocgbase_int _pdf
+ }
+ \int_gincr:N\g_ocgbase_int
+}
+
+\cs_new_nopar:Nn\ocgbase_last_ocg:{\g_ocgbase_last_ocg_tl}
+
+\int_new:N\g_ocgbase_nd_int %node id
+\seq_new:N\g_ocgbase_tree_nd_stack_seq %stack with open ocg node id
+\seq_new:N\g_ocgbase_tree_ocg_stack_seq %stack with open ocg obj number
+\seq_gpush:Nn\g_ocgbase_tree_nd_stack_seq{0} %push root node
+\seq_gpush:Nn\g_ocgbase_tree_ocg_stack_seq{null} %push root node
+
+%macro for starting OCG object (and nested children) insertion into Order
+%hierarchy (shown as tree structure in the viewers `Layers' tab
+\cs_new_protected:Nn\ocgbase_tree_node_begin:n{ % #1: OCG obj
+ %get the parent node from stack
+ \seq_get:NN\g_ocgbase_tree_nd_stack_seq\l__ocgbase_prnt_tl
+ \tl_if_exist:cTF{g_ocgbase_nd_\l__ocgbase_prnt_tl _chld_tl}{
+ %parent has >=1 children (i. e. my older siblings), traverse them
+ \tl_set:Nv\l__ocgbase_prev_sbl_tl{g_ocgbase_nd_\l__ocgbase_prnt_tl _chld_tl}
+ \tl_set:Nx\l__ocgbase_cur_ocg_tl{#1}
+ \ocgbase_traverse_siblings:NN\l__ocgbase_prev_sbl_tl\l__ocgbase_cur_ocg_tl
+ \str_if_empty:NTF\l__ocgbase_cur_ocg_tl{
+ %I am the first child of my parent to refer to OCG #1
+ \int_gincr:N\g_ocgbase_nd_int
+ \tl_set:Nx\l__ocgbase_cur_nd_tl{\int_use:N\g_ocgbase_nd_int}
+ %set myself as my next-older sibling's `next sibling'
+ \tl_gset:cV{
+ g_ocgbase_nd_\l__ocgbase_prev_sbl_tl _sbl_tl}\l__ocgbase_cur_nd_tl
+ }{
+ %there is already a sibling referring to OCG #1; no new node needs be
+ %created
+ \tl_set:NV\l__ocgbase_cur_nd_tl\l__ocgbase_prev_sbl_tl
+ }
+ }{
+ %I am the very first child of my parent
+ \int_gincr:N\g_ocgbase_nd_int
+ \tl_set:Nx\l__ocgbase_cur_nd_tl{\int_use:N\g_ocgbase_nd_int}
+ %set myself as my parent's first child
+ \tl_gset:cV{g_ocgbase_nd_\l__ocgbase_prnt_tl _chld_tl}\l__ocgbase_cur_nd_tl
+ }
+ %set the OCG I am referring to
+ \tl_gset:cx{g_ocgbase_nd_\l__ocgbase_cur_nd_tl _ocg_tl}{#1}
+ %push current node and its associated OCG obj on the stacks
+ \seq_gpush:NV\g_ocgbase_tree_nd_stack_seq\l__ocgbase_cur_nd_tl
+ \seq_gpush:Nx\g_ocgbase_tree_ocg_stack_seq{#1}
+}
+
+%macro that ends insertion of OCG and sub-OCGs into Order tree
+\cs_new_protected:Nn\ocgbase_tree_node_end:{
+ \seq_get:NN\g_ocgbase_tree_nd_stack_seq\l_tempa_tl
+ \seq_get:NN\g_ocgbase_tree_ocg_stack_seq\l_tempb_tl
+ \str_if_eq:eeT{
+ \cs_if_exist_use:c{g_ocgbase_nd_\l_tempa_tl _ocg_tl}
+ }{
+ \l_tempb_tl
+ }{
+ \seq_gpop:NN\g_ocgbase_tree_nd_stack_seq\g_trash_tl
+ \seq_gpop:NN\g_ocgbase_tree_ocg_stack_seq\g_trash_tl
+ }
+}
+
+% helper macro (recursive); traverses siblings to find either
+% the node which refers to the same OCG (arg #2 remains un-modified), or
+% the last sibling inserted (arg #2 is cleared);
+% the node id of the sibling found is returned in arg #1
+\cs_new:Nn\ocgbase_traverse_siblings:NN{
+ % #1: current node (in/out), #2: OCG obj (in/out)
+ \str_if_eq:eeF{#2}{\tl_use:c{g_ocgbase_nd_#1_ocg_tl}}{
+ \tl_if_exist:cTF{g_ocgbase_nd_#1_sbl_tl}{
+ \tl_set:Nv#1{g_ocgbase_nd_#1_sbl_tl}
+ \ocgbase_traverse_siblings:NN#1#2
+ }{
+ \tl_clear:N#2
+ }
+ }
+}
+
+\cs_new:Nn\ocgbase_build_order:Nn{
+ % (recursive macro)
+ % #1: tl var to which the OCG order is written (output)
+ % #2: starting node id (input; usually `1')
+ \tl_set:Nx\l__ocgbase_cur_nd_tl{#2}
+ % first, append the OCG obj the current node is referring to
+ \tl_put_right:Nx#1{~\tl_use:c{g_ocgbase_nd_\l__ocgbase_cur_nd_tl _ocg_tl}}
+ % second, traverse the tree starting with the first child node
+ \tl_if_exist:cT{g_ocgbase_nd_\l__ocgbase_cur_nd_tl _chld_tl}{
+ \seq_gpush:NV\g_ocgbase_tree_nd_stack_seq\l__ocgbase_cur_nd_tl
+ \tl_put_right:Nn#1{~[}
+ \ocgbase_build_order:Nn#1{
+ \tl_use:c{g_ocgbase_nd_\l__ocgbase_cur_nd_tl _chld_tl}}
+ \tl_put_right:Nn#1{~]}
+ \seq_gpop:NN\g_ocgbase_tree_nd_stack_seq\l__ocgbase_cur_nd_tl
+ }
+ % third, traverse the tree starting with the next sibling node
+ \tl_if_exist:cT{g_ocgbase_nd_\l__ocgbase_cur_nd_tl _sbl_tl}{
+ \ocgbase_build_order:Nn#1{
+ \tl_use:c{g_ocgbase_nd_\l__ocgbase_cur_nd_tl _sbl_tl}}
+ }
+}
+
+%macro for appending an OCG object to the global `OFF' list
+%(initial non-visibility)
+\cs_new_protected_nopar:Nn\ocgbase_add_to_off_list:n{
+ \seq_if_in:NxF\g_ocgbase_offocgs_seq{#1}{
+ \seq_gput_right:Nx\g_ocgbase_offocgs_seq{#1}
+ }
+}
+
+%macro for removing an OCG object from global `OFF' list
+%(initial non-visibility)
+\cs_new_protected_nopar:Nn\ocgbase_del_from_off_list:n{
+ \seq_if_in:NxT\g_ocgbase_offocgs_seq{#1}{
+ \ocgbase_seq_gremove_all:Nx\g_ocgbase_offocgs_seq{#1}
+ }
+}
+\cs_set_eq:NN\ocgbase_seq_gremove_all:Nn\seq_gremove_all:Nn
+\cs_generate_variant:Nn\ocgbase_seq_gremove_all:Nn{Nx}
+
+\seq_new:N\g_ocgbase_rbtn_groups_seq
+\cs_new_protected_nopar:Nn\ocgbase_add_ocg_to_radiobtn_grp:nn{
+ % #1: rbtn group name,
+ % #2: OCG obj ref
+ \seq_if_exist:cF{g_ocgbase_rbtn_group_#1_seq}{
+ \seq_new:c{g_ocgbase_rbtn_group_#1_seq}
+ \seq_gput_right:Nx\g_ocgbase_rbtn_groups_seq{#1}
+ }
+ \seq_if_in:cxF{g_ocgbase_rbtn_group_#1_seq}{#2}{
+ \seq_gput_right:cx{g_ocgbase_rbtn_group_#1_seq}{#2}
+ }
+}
+
+% OC-marked content
+\cs_new_protected_nopar:Nn\ocgbase_oc_bdc:n{\pbs_pdfbdc:nn{OC}{#1}}
+\cs_new_protected_nopar:Nn\ocgbase_oc_emc:{\pbs_pdfemc:}
+
+%stack of PDF obj references of currently open OCGs
+\seq_new:N\g_ocgbase_open_stack_seq
+%push OCG to stack
+\cs_new_protected_nopar:Nn\ocgbase_open_stack_push:n{
+ \seq_gpush:Nx\g_ocgbase_open_stack_seq{#1}}
+%pop OCG from stack into tl
+\cs_new_protected_nopar:Nn\ocgbase_open_stack_pop:N{
+ \seq_gpop:NN\g_ocgbase_open_stack_seq#1}
+
+%l2e versions
+\cs_gset_eq:NN\ocgbase@new@ocg\ocgbase_new_ocg:nnn
+\cs_gset_eq:NN\ocgbase@last@ocg\ocgbase_last_ocg:
+\cs_gset_eq:NN\ocgbase@tree@node@begin\ocgbase_tree_node_begin:n
+\cs_gset_eq:NN\ocgbase@tree@node@end\ocgbase_tree_node_end:
+\cs_gset_eq:NN\ocgbase@add@to@off@list\ocgbase_add_to_off_list:n
+\cs_gset_eq:NN\ocgbase@del@from@off@list\ocgbase_del_from_off_list:n
+\cs_gset_eq:NN\ocgbase@add@ocg@to@radiobtn@grp\ocgbase_add_ocg_to_radiobtn_grp:nn
+\cs_gset_eq:NN\ocgbase@oc@bdc\ocgbase_oc_bdc:n
+\cs_gset_eq:NN\ocgbase@oc@emc\ocgbase_oc_emc:
+\cs_gset_eq:NN\ocgbase@open@stack@pop\ocgbase_open_stack_pop:N
+\cs_gset_eq:NN\ocgbase@open@stack@push\ocgbase_open_stack_push:n
diff --git a/macros/latex/contrib/ocgx2/ocgx2.sty b/macros/latex/contrib/ocgx2/ocgx2.sty
index 470057f619..f2375cfbf9 100644
--- a/macros/latex/contrib/ocgx2/ocgx2.sty
+++ b/macros/latex/contrib/ocgx2/ocgx2.sty
@@ -1,3 +1,11 @@
+%%%%%%%%%%%%%%%%%%%%%% pdfmanagement-testphase %%%%%%%%%%%%%%%%%%%
+\newif\if@ocgxii@testphase
+\ExplSyntaxOn
+\bool_if:nT {
+ \bool_lazy_and_p:nn {\cs_if_exist_p:N \pdfmanagement_if_active_p:} { \pdfmanagement_if_active_p: }
+}{\@ocgxii@testphasetrue}
+\ExplSyntaxOff
+\if@ocgxii@testphase\else
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% ocgx2.sty
@@ -39,8 +47,8 @@
\RequirePackage{l3keys2e}
-\def\g@ocgxii@date@tl{2021/01/25}
-\def\g@ocgxii@version@tl{0.50}
+\def\g@ocgxii@date@tl{2021/06/03}
+\def\g@ocgxii@version@tl{0.51}
\ProvidesExplPackage{ocgx2}{\g@ocgxii@date@tl}{\g@ocgxii@version@tl}
{ports `ocgx' functionality to dvips+ps2pdf, xelatex and dvipdfmx}
@@ -1254,20 +1262,18 @@
/Export<</ExportState/OFF>>
}{on}
\tl_gset:cx{ocgxii_ocg_OCView}{\ocgbase_last_ocg:}
- \ocgbase_add_ocg_to_radiobtn_grp:nn{OCPrintViewGrp}{\ocgbase_last_ocg:}
%in case somebody wants to reopen with \begin{ocg}...
\tl_gset:cx{ocgxii_ocg_OCView.opts}{
- showingui=never,printocg=never,exportocg=never,
- radiobtngrp=OCPrintViewGrp}
+ showingui=never,printocg=never,exportocg=never
+ }
\ocgbase_new_ocg:nnn{OCPrint}{
/Print<</PrintState/ON>>
/Export<</ExportState/ON>>
}{off}
\tl_gset:cx{ocgxii_ocg_OCPrint}{\ocgbase_last_ocg:}
- \ocgbase_add_ocg_to_radiobtn_grp:nn{OCPrintViewGrp}{\ocgbase_last_ocg:}
\tl_gset:cx{ocgxii_ocg_OCPrint.opts}{
- showingui=never,printocg=always,exportocg=always,
- radiobtngrp=OCPrintViewGrp}
+ showingui=never,printocg=always,exportocg=always
+ }
\ocgxii_enable_ocglinks:
\iow_now:Nx\@mainaux{
\token_to_str:N\ocgxii@newkey{ocgx2.ocg.OCView}{
@@ -1493,3 +1499,1490 @@
}
}
}
+\endinput
+\fi
+%%%%%%%%%%%%%%%%%%%%%% /pdfmanagement-testphase %%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ocgx2.sty
+%
+% Copyright 2015--\today, Alexander Grahn
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The intent of this package is to be a drop-in replacement for the already
+% existing CTAN package `ocgx' by Paul Gaborit, and also for `ocg-p' and `ocg'.
+%
+% It re-implements the functionality of the ocg, ocgx and ocg-p packages
+% and adds support for all known engines and backends including
+% latex+dvips+ps2pdf, xelatex, latex+dvipdfmx, lualatex.
+%
+% With ocgx2, PDF layers may extend across page breaks.
+%
+% ocgx2 implements OCMDs (optional content membership dictionaries)
+%
+% Adds some minor improvements, such as package options, remembering option.
+% settings of reopened ocgs, correct behaviour of ocg switching links that were
+% themselves placed on layers, compatibility with the animate and media9
+% packages.
+%
+% Re-implements hyperref's `ocgcolorlinks' option to produce coloured links
+% that may wrap around line breaks and page breaks.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License.
+%
+% The latest version of this license is in
+% http://mirrors.ctan.org/macros/latex/base/lppl.txt
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is A. Grahn.
+
+\RequirePackage{l3keys2e}
+
+\def\g@ocgxii@date@tl{2021/06/03}
+\def\g@ocgxii@version@tl{0.51}
+
+\ProvidesExplPackage{ocgx2}{\g@ocgxii@date@tl}{\g@ocgxii@version@tl}
+{ports `ocgx' functionality to dvips+ps2pdf, xelatex and dvipdfmx}
+
+%creating global definitions
+\cs_new_protected:Npn\ocgxii@newkey#1#2{\tl_gset:cx{#1}{#2}}
+\cs_new_protected:Npn\ocgxii@newkeynoexp#1#2{\tl_gset:cn{#1}{#2}}
+
+\AtBeginDocument{
+ \iow_now:Nx\@mainaux{
+ \token_to_str:N\providecommand\token_to_str:N\ocgxii@newkey[2]{}
+ }
+ \iow_now:Nx\@mainaux{
+ \token_to_str:N\providecommand\token_to_str:N\ocgxii@newkeynoexp[2]{}
+ }
+ \iow_now:Nx\@mainaux{
+ \token_to_str:N\providecommand\token_to_str:N\ocgxii@ocg@stack@on@page[2]{}
+ }
+ \iow_now:Nx\@mainaux{
+ \token_to_str:N\providecommand
+ \token_to_str:N\ocgxii@lnkcol@stack@on@page[2]{}
+ }
+}
+
+\msg_set:nnn{ocgx2}{generic~msg}{#1\\#2}
+
+\msg_set:nnn{ocgx2}{missing~package}{
+ Package~`#1'~must~be~loaded~before~ocgx2.\\\\
+ Put\\\\
+ \space\space\string\usepackage#2{#1}\\
+ \space\space\string\usepackage[ocgcolorlinks]{ocgx2}\\\\
+ to~the~preamble~of~your~document.
+}
+
+\msg_set:nnn{ocgx2}{beamer~and~ocgcolorlinks}{
+ Option~`ocgcolorlinks'~cannot~be~used~with~class~Beamer.\\\\
+ Using~`colorlinks'~instead.
+}
+
+%package opts
+%unknown package option error message
+\msg_set:nnnn{ocgx2}{unknown~package~option}{Unknown~package~option~`#1'.}{
+ Package option~'#1'~is~unknown;\\
+ perhaps~it~is~spelled~incorrectly.
+}
+
+\bool_new:N\g_ocgxii_dvipdfmx_bool
+\bool_new:N\l_ocgxii_tikz_bool
+\bool_new:N\l_ocgxii_ocgcolorlinks_bool
+\bool_new:N\g_ocgxii_showingui_bool
+\bool_new:N\l_ocgxii_showingui_bool
+
+\keys_define:nn{ocgx2}{
+ xetex .code:n = {}, %dummy
+
+ dvipdfmx .code:n = {
+ \PassOptionsToPackage{dvipdfmx}{ocgbase}
+ \PassOptionsToPackage{dvipdfmx}{pdfbase}
+ \bool_gset_true:N\g_ocgxii_dvipdfmx_bool
+ },
+
+ viewocg .choice:,
+ viewocg / always .code:n={
+ \tl_gset:Nn\g_ocgxii_view_tl{/View<</ViewState/ON>>}},
+ viewocg / never .code:n={
+ \tl_gset:Nn\g_ocgxii_view_tl{/View<</ViewState/OFF>>}},
+ viewocg / ifvisible .code:n={\tl_gclear_new:N\g_ocgxii_view_tl},
+ viewocg .default:n={ifvisible},
+
+ printocg .choice:,
+ printocg / always .code:n={
+ \tl_gset:Nn\g_ocgxii_print_tl{/Print<</PrintState/ON>>}},
+ printocg / never .code:n={
+ \tl_gset:Nn\g_ocgxii_print_tl{/Print<</PrintState/OFF>>}},
+ printocg / ifvisible .code:n={\tl_gclear_new:N\g_ocgxii_print_tl},
+ printocg .default:n={ifvisible},
+
+ exportocg .choice:,
+ exportocg / always .code:n={
+ \tl_gset:Nn\g_ocgxii_export_tl{/Export<</ExportState/ON>>}},
+ exportocg / never .code:n={
+ \tl_gset:Nn\g_ocgxii_export_tl{/Export<</ExportState/OFF>>}},
+ exportocg / ifvisible .code:n={\tl_gclear_new:N\g_ocgxii_export_tl},
+ exportocg .default:n={ifvisible},
+
+ showingui .choices:nn = {true,false,always,never,iffirstuse}{
+ \bool_if:nTF{
+ \str_if_eq_p:ee{#1}{false} ||
+ \str_if_eq_p:ee{#1}{never}
+ }{
+ \bool_gset_false:N\g_ocgxii_showingui_bool
+ }{
+ \bool_gset_true:N\g_ocgxii_showingui_bool
+ }
+ },
+ showingui .default:n={true},
+
+ listintoolbar .meta:n = {showingui=#1},
+ listintoolbar .default:n={true},
+
+ tikz .bool_set:N = \l_ocgxii_tikz_bool,
+ tikz .default:n = true,
+
+ ocgcolorlinks .bool_set:N = \l_ocgxii_ocgcolorlinks_bool,
+ ocgcolorlinks .default:n = true,
+
+ unknown .code:n = {
+ \msg_error:nnx{ocgx2}{unknown~package~option}{\l_keys_key_tl}
+ }
+}
+
+%package options preset
+\keys_set:nn{ocgx2}{viewocg,printocg,exportocg,showingui,tikz=false}
+
+%process package options
+\ProcessKeysOptions{ocgx2}
+\sys_if_engine_xetex:T{\bool_gset_true:N\g_ocgxii_dvipdfmx_bool}
+
+\RequirePackage{ocgbase} %also loads pdfbase.sty
+
+%re-implement ocg-p's `ocg' environment
+\DeclareDocumentEnvironment{ocg}{O{}mmm}{
+ \ocgxii_begin_ocg:nnnn{#1}{#2}{#3}{#4}
+}{
+ \ocgxii_end_ocg:
+}
+
+\cs_new_protected_nopar:Nn\ocgxii_begin_ocg:nnnn{
+ \group_begin:
+ \ocgxii_reset_cmd_opts: % ... to the user-set package options
+ \tl_set:Nx\l_ocgxii_argiv_tl{\tl_trim_spaces:n{#4}}
+ \tl_if_exist:cTF{ocgxii_ocg_#3}{ %re-open existing layer
+ \tl_set:Nx\l_tempa_tl{\tl_use:c{ocgxii_ocg_#3.opts},#1}
+ \tl_gset:cx{ocgxii_ocg_#3.opts}{\l_tempa_tl} %new options appended
+ \keys_set:nV{ocgx2/ocgenv}\l_tempa_tl
+ \bool_if:nTF{ %initial visibility
+ \str_if_eq_p:ee{\l_ocgxii_argiv_tl}{1} ||
+ \str_if_eq_p:ee{\l_ocgxii_argiv_tl}{on} ||
+ \str_if_eq_p:ee{\l_ocgxii_argiv_tl}{true}
+ }{
+ \ocgbase_del_from_off_list:n{\tl_use:c{ocgxii_ocg_#3}}
+ }{
+ \ocgbase_add_to_off_list:n{\tl_use:c{ocgxii_ocg_#3}}
+ }
+ }{
+ \tl_set:Nx\l_tempa_tl{#1}
+ \tl_gset:cx{ocgxii_ocg_#3.opts}{\l_tempa_tl}
+ \keys_set:nV{ocgx2/ocgenv}\l_tempa_tl
+ \ocgbase_new_ocg:nnn{#2}{
+ \l_ocgxii_view_tl\l_ocgxii_print_tl\l_ocgxii_export_tl
+ }{\l_ocgxii_argiv_tl}
+ \tl_gset:cx{ocgxii_ocg_#3}{\ocgbase_last_ocg:}
+ \tl_gset:cx{ocgx2.ocg.\ocgbase_last_ocg:}{\ocgbase_last_ocg:}
+ \tl_gset:cx{ocgx2.ocg.#3}{\ocgbase_last_ocg:}
+ \iow_now:Nx\@mainaux{
+ \token_to_str:N\ocgxii@newkey{ocgx2.ocg.#3}{\ocgbase_last_ocg:}
+ }
+ }
+ \bool_if:nT{
+ !\cs_if_exist:cTF{ocgx2.ocg.#3}{
+ \str_if_eq_p:ee{\tl_use:c{ocgx2.ocg.#3}}{\tl_use:c{ocgxii_ocg_#3}}
+ }{
+ \c_false_bool
+ }
+ }{
+ \tl_if_exist:NF\g_ocgxii_rerunwarned_tl{
+ \tl_new:N\g_ocgxii_rerunwarned_tl
+ \AtEndDocument{\msg_warning:nn{ocgx2}{rerun}}
+ }
+ }
+ \seq_map_inline:Nn\l_ocgxii_rbgrps_seq{% process list of radio btn groups
+ \ocgbase_add_ocg_to_radiobtn_grp:nn{##1}{\tl_use:c{ocgxii_ocg_#3}}
+ }
+ \ocgbase_open_stack_push:n{\tl_use:c{ocgxii_ocg_#3}}
+ \ocgxii_make_oc_entry:
+ \ocgxii_stack_shipout:NN\ocgxii@ocg@stack@on@page\g_ocgbase_open_stack_seq
+ % insert OCG into Order tree
+ \bool_if:NT\l_ocgxii_showingui_bool{
+ \ocgbase_tree_node_begin:n{\tl_use:c{ocgxii_ocg_#3}}
+ }
+ \group_end:
+ \ocgbase_oc_bdc:n{\tl_use:c{ocgxii_ocg_#3}}
+ \ignorespaces
+}
+
+\cs_new_protected_nopar:Nn\ocgxii_end_ocg:{
+ \unskip
+ \ocgbase_oc_emc:
+ \ocgbase_tree_node_end:
+ \ocgbase_open_stack_pop:N\l_trash_tl
+ \ocgxii_make_oc_entry:
+ \ocgxii_stack_shipout:NN\ocgxii@ocg@stack@on@page\g_ocgbase_open_stack_seq
+}
+
+% OCMD implementation
+\DeclareDocumentEnvironment{ocmd}{O{}m}{
+ \ocgxii_begin_ocmd:on{#1}{#2}
+ \ignorespaces
+}{
+ \unskip
+ \ocgxii_end_ocmd:
+}
+
+\cs_new_protected_nopar:Nn\ocgxii_begin_ocmd:nn{ % #1: id,
+ \bool_if:nTF{ % #2: visib. expr. or policy
+ \tl_if_blank:oTF{#1}{
+ \c_false_bool
+ }{
+ \tl_if_exist_p:c{ocgxii_ocmd_#1}
+ }
+ }{
+ % re-open existing ocmd
+ \tl_set_eq:Nc\l_ocgxii_cur_ocmd_tl{ocgxii_ocmd_#1}
+ }{
+ % new ocmd
+ \group_begin:
+ \ocgxii_ocmd_read_visbility:nN{#2}\l_ocgxii_ocmd_visibility_tl
+ \pdf_object_new:xn{g_object_\int_use:N\g_ocgbase_int _pdf}{dict}
+ \pdf_object_write:xx{g_object_\int_use:N\g_ocgbase_int _pdf}{
+ /Type/OCMD\l_ocgxii_ocmd_visibility_tl
+ }
+ \tl_gset:cx{g_pbs_objname_\pdf_object_ref_last: _tl}{
+ g_object_\int_use:N\g_ocgbase_int _pdf
+ }
+ \int_gincr:N\g_ocgbase_int
+ %if only visb. policy is given, generate equivalent visib. expression,
+ %needed for stack of open layers and \ocgxii_make_oc_entry: command
+ \ocgxii_ocmd_make_equiv_ve:nN{#2}\l_ocgxii_ocmd_equiv_ve_tl
+ \tl_gset:co{ocgx2.ocmd.\pdf_object_ref_last:}{\l_ocgxii_ocmd_equiv_ve_tl}
+ \group_end:
+ \tl_set:Nx\l_ocgxii_cur_ocmd_tl{\pdf_object_ref_last:}
+ \tl_if_blank:oF{#1}{
+ \tl_gset:cx{ocgxii_ocmd_#1}{\pdf_object_ref_last:}
+ \iow_now:Nn\@mainaux{\ocgxii@newkeynoexp{ocgx2.ocmd.#1}{#2}}
+ }
+ }
+ \ocgbase_open_stack_push:n{\l_ocgxii_cur_ocmd_tl}
+ \ocgxii_make_oc_entry:
+ \ocgxii_stack_shipout:NN\ocgxii@ocg@stack@on@page\g_ocgbase_open_stack_seq
+ \ocgbase_oc_bdc:n{\l_ocgxii_cur_ocmd_tl}
+}
+\cs_generate_variant:Nn\ocgxii_begin_ocmd:nn{on}
+\cs_new_protected_nopar:Nn\ocgxii_end_ocmd:{
+ \ocgbase_oc_emc:
+ \ocgbase_open_stack_pop:N\l_trash_tl
+ \ocgxii_make_oc_entry: %update
+ \ocgxii_stack_shipout:NN\ocgxii@ocg@stack@on@page\g_ocgbase_open_stack_seq
+}
+
+%visibility expressions
+\cs_new_protected_nopar:Nn\ocgxii_ocmd_read_visbility:nN{
+ \int_zero:N\l_ocgxii_ve_cnt_int
+ \int_zero:N\l_ocgxii_vp_cnt_int
+ \tl_clear_new:N#2
+ \clist_map_inline:nn{#1}{\ocgxii_omcd_parse_argument:nN{##1}#2}
+}
+\cs_new_protected_nopar:Nn\ocgxii_omcd_parse_argument:nN{
+ \cs_set_eq:NN\AllOn \ocgxii_vp_check:n
+ \cs_set_eq:NN\AnyOn \ocgxii_vp_check:n
+ \cs_set_eq:NN\AnyOff\ocgxii_vp_check:n
+ \cs_set_eq:NN\AllOff\ocgxii_vp_check:n
+ \cs_set_eq:NN\Not\ocgxii_ve_check:n
+ \cs_set_eq:NN\And\ocgxii_ve_check:n
+ \cs_set_eq:NN\Or \ocgxii_ve_check:n
+ \tl_if_exist:cTF{ocgx2.ocg.#1}{
+ \msg_error:nnxx{ocgx2}{generic~msg}{
+ OCG~ids~cannot~be~directly~used~in~the~visibility~argument~of~an~
+ `ocmd'~environment.
+ }{\g_ocgxii_help_msg_tl}
+ }{
+ \tl_if_exist:cTF{ocgx2.ocmd.#1}{
+ \msg_error:nnxx{ocgx2}{generic~msg}{
+ OCMD~ids~cannot~be~directly~used~in~the~visibility~argument~of~an~
+ `ocmd'~environment.
+ }{\g_ocgxii_help_msg_tl}
+ }{
+ \tl_if_exist:cTF{ocgxii_#1}{
+ \str_case_e:nn{\tl_use:c{ocgxii_#1}}{
+ {VisExpr}{
+ \int_incr:N\l_ocgxii_ve_cnt_int
+ \int_compare:nNnTF{\l_ocgxii_ve_cnt_int}>{1}{
+ \msg_error:nnnn{ocgx2}{generic~msg}{
+ More~than~one~visibility~expression~passed~to~the~`ocmd'~
+ environment.
+ }{
+ At~most~one~visibility~expression~is~allowed.~A~visibility~
+ expression~is~a~boolean~expression~built~by~nesting~any~number~of~
+ \And{...},~\Or{...},~\Not{...}~commands.
+ }
+ }{
+ \tl_put_right:Nx#2{/VE~}
+ \ocgxii_ocmd_expression_parser:nN{#1}#2
+ }
+ }
+ {VisPol}{
+ \int_incr:N\l_ocgxii_vp_cnt_int
+ \int_compare:nNnTF{\l_ocgxii_vp_cnt_int}>{1}{
+ \msg_error:nnnn{ocgx2}{generic~msg}{
+ More~than~one~visibility~policy~passed~to~the~`ocmd'~environment.
+ }{
+ At~most~one~visibility~policy~out~of~\AllOn{...},~\AnyOn{...},~
+ \AnyOff{...},~\AllOff{...}~is~allowed.~Any~number~of~OCG~IDs,~
+ separated~by~commas,~may~be~passed~as~arguments~to~these~
+ commands,~but~commands~may~not~be~nested.~For~complex~visibilty~
+ relations,~consider~using~a~visibility~expression.
+ }
+ }{
+ \ocgxii_ocmd_expression_parser:nN{#1}#2
+ }
+ }
+ }
+ }{
+ \msg_error:nnxx{ocgx2}{generic~msg}{
+ The~visibility~argument~of~the~`ocmd'~environment~cannot~be~parsed.
+ }{\g_ocgxii_help_msg_tl}
+ }
+ }
+ }
+}
+\cs_generate_variant:Nn\ocgxii_omcd_parse_argument:nN{xN}
+\cs_generate_variant:Nn\ocgxii_omcd_parse_argument:nN{oN}
+\cs_new_protected_nopar:Nn\ocgxii_ocmd_expression_parser:nN{
+ \cs_set_eq:NN\AllOn \ocgxii_vp_check:n
+ \cs_set_eq:NN\AnyOn \ocgxii_vp_check:n
+ \cs_set_eq:NN\AnyOff\ocgxii_vp_check:n
+ \cs_set_eq:NN\AllOff\ocgxii_vp_check:n
+ \cs_set_eq:NN\Not\ocgxii_ve_check:n
+ \cs_set_eq:NN\And\ocgxii_ve_check:n
+ \cs_set_eq:NN\Or \ocgxii_ve_check:n
+ \tl_if_exist:cTF{ocgx2.ocg.#1}{% ocg reference
+ \tl_put_right:Nx#2{~\tl_use:c{ocgx2.ocg.#1}}
+ }{
+ \tl_if_exist:cTF{ocgx2.ocmd.#1}{% ocmd reference
+ \ocgxii_ocmd_expression_parser:vN{ocgx2.ocmd.#1}#2
+ }{
+ \tl_if_exist:cTF{ocgxii_#1}{% visib. bool expression or policy directive
+ \bool_if:nTF{
+ \str_if_eq_p:ee{\tl_use:c{ocgxii_#1}}{VisExpr} &&
+ \bool_if_p:N\l_ocgxii_vp_open_bool ||
+ \str_if_eq_p:ee{\tl_use:c{ocgxii_#1}}{VisPol} &&
+ \bool_if_p:N\l_ocgxii_ve_open_bool
+ }{
+ \msg_error:nnxx{ocgx2}{generic~msg}{
+ Visibility~policy~and~expression~commands~cannot~be~mixed.
+ }{\g_ocgxii_help_msg_tl}
+ }{
+ \bool_if:nT{
+ \str_if_eq_p:ee{\tl_use:c{ocgxii_#1}}{VisPol} &&
+ \bool_if_p:N\l_ocgxii_vp_open_bool
+ }{
+ \msg_error:nnxx{ocgx2}{generic~msg}{
+ Visibility~policy~commands~cannot~be~nested.~For~more~complex~
+ visibilty~relations,~consider~using~a~visibility~expression.
+ }{\g_ocgxii_help_msg_tl}
+ }
+ }
+ \cs_set_eq:NN\AllOn \ocgxii_vp_allon:nN
+ \cs_set_eq:NN\AnyOn \ocgxii_vp_anyon:nN
+ \cs_set_eq:NN\AnyOff\ocgxii_vp_anyoff:nN
+ \cs_set_eq:NN\AllOff\ocgxii_vp_alloff:nN
+ \cs_set_eq:NN\Not\ocgxii_ve_not:nN
+ \cs_set_eq:NN\And\ocgxii_ve_and:nN
+ \cs_set_eq:NN\Or \ocgxii_ve_or:nN
+ #1#2
+ }{
+ \msg_warning:nnx{ocgx2}{undefined~OCG}{#1}
+ \tl_if_exist:NF\g_ocgxii_refundefwarned_tl{
+ \tl_new:N\g_ocgxii_refundefwarned_tl
+ \AtEndDocument{\msg_warning:nn{ocgx2}{undefined~OCGs}}
+ }
+ }
+ }
+ }
+}
+\cs_generate_variant:Nn\ocgxii_ocmd_expression_parser:nN{vN}
+% visib. policy directives
+\cs_new_protected_nopar:Nn\ocgxii_vp_allon:nN{
+ \bool_set_true:N\l_ocgxii_vp_open_bool
+ \tl_put_right:Nx#2{/P/AllOn/OCGs~\g_ocgxii_left_bracket_tl}
+ \clist_map_inline:nn{#1}{\ocgxii_ocmd_expression_parser:nN{##1}#2}
+ \tl_put_right:Nx#2{\g_ocgxii_right_bracket_tl}
+ \bool_set_false:N\l_ocgxii_vp_open_bool
+}
+\cs_new_protected_nopar:Nn\ocgxii_vp_anyon:nN{
+ \bool_set_true:N\l_ocgxii_vp_open_bool
+ \tl_gput_right:Nx#2{/P/AnyOn/OCGs~\g_ocgxii_left_bracket_tl}
+ \clist_map_inline:nn{#1}{\ocgxii_ocmd_expression_parser:nN{##1}#2}
+ \tl_gput_right:Nx#2{\g_ocgxii_right_bracket_tl}
+ \bool_set_false:N\l_ocgxii_vp_open_bool
+}
+\cs_new_protected_nopar:Nn\ocgxii_vp_anyoff:nN{
+ \bool_set_true:N\l_ocgxii_vp_open_bool
+ \tl_gput_right:Nx#2{/P/AnyOff/OCGs~\g_ocgxii_left_bracket_tl}
+ \clist_map_inline:nn{#1}{\ocgxii_ocmd_expression_parser:nN{##1}#2}
+ \tl_gput_right:Nx#2{\g_ocgxii_right_bracket_tl}
+ \bool_set_false:N\l_ocgxii_vp_open_bool
+}
+\cs_new_protected_nopar:Nn\ocgxii_vp_alloff:nN{
+ \bool_set_true:N\l_ocgxii_vp_open_bool
+ \tl_gput_right:Nx#2{/P/AllOff/OCGs~\g_ocgxii_left_bracket_tl}
+ \clist_map_inline:nn{#1}{\ocgxii_ocmd_expression_parser:nN{##1}#2}
+ \tl_gput_right:Nx#2{\g_ocgxii_right_bracket_tl}
+ \bool_set_false:N\l_ocgxii_vp_open_bool
+}
+% policy to expression conversion
+\cs_new_protected_nopar:Nn\ocgxii_ocmd_make_equiv_ve:nN{
+ \int_zero:N\l_ocgxii_ve_cnt_int
+ \tl_clear_new:N#2
+ \clist_map_inline:nn{#1}{\ocgxii_omcd_convert_vp:nN{##1}#2}
+}
+\cs_new_protected_nopar:Nn\ocgxii_omcd_convert_vp:nN{
+ \cs_set_eq:NN\AllOn \ocgxii_vp_check:n
+ \cs_set_eq:NN\AnyOn \ocgxii_vp_check:n
+ \cs_set_eq:NN\AnyOff\ocgxii_vp_check:n
+ \cs_set_eq:NN\AllOff\ocgxii_vp_check:n
+ \cs_set_eq:NN\Not\ocgxii_ve_check:n
+ \cs_set_eq:NN\And\ocgxii_ve_check:n
+ \cs_set_eq:NN\Or \ocgxii_ve_check:n
+ \tl_if_exist:cT{ocgxii_#1}{
+ \str_case_e:nn{\tl_use:c{ocgxii_#1}}{
+ {VisExpr}{
+ \int_incr:N\l_ocgxii_ve_cnt_int
+ \tl_set:Nn#2{#1}
+ }
+ {VisPol}{
+ \int_compare:nNnT{\l_ocgxii_ve_cnt_int}={0}{
+ \cs_set_eq:NN\AllOn \ocgxii_allon_to_ve:n
+ \cs_set_eq:NN\AnyOn \ocgxii_anyon_to_ve:n
+ \cs_set_eq:NN\AnyOff\ocgxii_anyoff_to_ve:n
+ \cs_set_eq:NN\AllOff\ocgxii_alloff_to_ve:n
+ \tl_set:No#2{#1}
+ }
+ }
+ }
+ }
+}
+\cs_new_protected_nopar:Nn\ocgxii_allon_to_ve:n{\And{#1}}
+\cs_new_protected_nopar:Nn\ocgxii_anyon_to_ve:n{\Or{#1}}
+\cs_new_protected_nopar:Nn\ocgxii_anyoff_to_ve:n{\Not{\And{#1}}}
+\cs_new_protected_nopar:Nn\ocgxii_alloff_to_ve:n{\Not{\Or{#1}}}
+% visib. boolean expressions
+\cs_new_protected_nopar:Nn\ocgxii_ve_and:nN{
+ \bool_set_true:N\l_ocgxii_ve_open_bool
+ \tl_put_right:Nx#2{\g_ocgxii_left_bracket_tl/And}
+ \clist_map_inline:nn{#1}{\ocgxii_ocmd_expression_parser:nN{##1}#2}
+ \tl_put_right:Nx#2{\g_ocgxii_right_bracket_tl}
+ \bool_set_false:N\l_ocgxii_ve_open_bool
+}
+\cs_new_protected_nopar:Nn\ocgxii_ve_or:nN{
+ \bool_set_true:N\l_ocgxii_ve_open_bool
+ \tl_put_right:Nx#2{\g_ocgxii_left_bracket_tl/Or}
+ \clist_map_inline:nn{#1}{\ocgxii_ocmd_expression_parser:nN{##1}#2}
+ \tl_put_right:Nx#2{\g_ocgxii_right_bracket_tl}
+ \bool_set_false:N\l_ocgxii_ve_open_bool
+}
+\cs_new_protected_nopar:Nn\ocgxii_ve_not:nN{
+ \bool_set_true:N\l_ocgxii_ve_open_bool
+ % only one item allowed in \Not{...} argument
+ \int_compare:nNnT{\clist_count:n{#1}}>{\c_one_int}{
+ \msg_error:nnnn{ocgx2}{generic~msg}{
+ More~than~one~item~passed~to~\Not{...}.
+ }{
+ Only~one~item~is~allowed.
+ }
+ }
+ \int_compare:nNnT{\clist_count:n{#1}}={\c_one_int}{
+ \tl_put_right:Nx#2{\g_ocgxii_left_bracket_tl/Not}
+ \clist_map_inline:nn{#1}{\ocgxii_ocmd_expression_parser:nN{##1}#2}
+ \tl_put_right:Nx#2{\g_ocgxii_right_bracket_tl}
+ }
+ \bool_set_false:N\l_ocgxii_ve_open_bool
+}
+\cs_new_protected_nopar:Nn\ocgxii_ve_check:n{VisExpr}
+\tl_set:cn{ocgxii_VisExpr}{VisExpr}
+\cs_new_protected_nopar:Nn\ocgxii_vp_check:n{VisPol}
+\tl_set:cn{ocgxii_VisPol}{VisPol}
+\tl_set:Nx\g_ocgxii_left_bracket_tl{\tl_to_str:N[}
+\tl_set:Nx\g_ocgxii_right_bracket_tl{\tl_to_str:N]}
+\int_new:N\l_ocgxii_vp_cnt_int %number of visib. policies
+\int_new:N\l_ocgxii_ve_cnt_int %number of visib. expressions
+\bool_new:N\l_ocgxii_vp_open_bool %for nesting test
+\bool_new:N\l_ocgxii_ve_open_bool %for nesting test
+\tl_set:Nn\g_ocgxii_help_msg_tl{
+ At~most~one~visibility~policy~and,~separated~by~a~comma,~at~most~one~
+ visibility~expression~may~be~passed~as~the~2nd~argument~to~the~`ocmd'~
+ environment.~A~visibility~
+ policy~is~defined~by~one~of~\AllOn{...},~\AnyOn{...},~\AnyOff{...},~
+ \AllOff{...}.~A~visibility~expression~is~a~boolean~expression~built~by~
+ nesting~any~number~of~\And{...},~\Or{...},~\Not{...}~commands.~If~both~are~
+ provided,~the~visibility~expression~takes~precedence~over~the~policy,~but~the~
+ latter~may~be~used~as~fallback~by~non-conforming~PDF~viewers.
+}
+%command that builds /OC entry from open layer stack
+\cs_new_nopar:Nn\ocgxii_make_oc_entry:{
+ \group_begin:
+ \tl_gclear:N\g_ocgxii_oc_entry_tl
+ \tl_clear:N\l_tempa_tl
+ \seq_if_empty:NF\g_ocgbase_open_stack_seq{
+ \seq_clear:N\l_tempa_seq
+ %additional level of braces around indirect PDF objects (needed for dvips)
+ \seq_map_inline:Nn\g_ocgbase_open_stack_seq{
+ \seq_put_right:Nn\l_tempa_seq{{##1}}
+ }
+ \ocgxii_omcd_parse_argument:xN{
+ \exp_not:N\And{\seq_use:Nn\l_tempa_seq{,}}
+ }\l_tempa_tl
+ \tl_gset:Nx\g_ocgxii_oc_entry_tl{/OC~<</Type/OCMD\l_tempa_tl>>}
+ }
+ \group_end:
+}
+%programmer/author command that inserts /OC << >> entry; for use in
+%annotation/xobject dicts, in order to make them layer-aware
+\cs_new_nopar:Nn\ocgxii_insert_oc:{\g_ocgxii_oc_entry_tl}
+\cs_gset_eq:NN\ocgbase_insert_oc:\ocgxii_insert_oc:
+\cs_gset_eq:NN\ocgbase@insert@oc\ocgxii_insert_oc:
+\tl_new:N\g_ocgxii_oc_entry_tl
+
+\cs_new_protected_nopar:Nn\ocgxii_stack_shipout:NN{
+ \iow_shipout_x:Nx\@mainaux{
+ \token_to_str:N#1{
+ \exp_not:N\int_use:N\g_ocgxii_page_int
+ }{\seq_use:Nn#2{,}}
+ }
+}
+
+\cs_new_protected_nopar:Npn\ocgxii@ocg@stack@on@page#1#2{
+ \seq_gset_from_clist:cn{g_pending_ocgs_on_#1_seq}{#2}
+ %re-add braces around items for dvips
+ \bool_if:nT{\sys_if_output_dvi_p: && !\g_ocgxii_dvipdfmx_bool}{
+ \seq_map_inline:cn{g_pending_ocgs_on_#1_seq}{
+ \seq_gpop_left:cN{g_pending_ocgs_on_#1_seq}\l_trash_tl
+ \seq_gput_right:cn{g_pending_ocgs_on_#1_seq}{{##1}}
+ }
+ }
+}
+\ocgxii@ocg@stack@on@page{0}{} %initialize
+
+\cs_new_protected_nopar:Npn\ocgxii@lnkcol@stack@on@page#1#2{
+ \seq_gset_from_clist:cn{g_pending_lnkcols_on_#1_seq}{#2}
+}
+\ocgxii@lnkcol@stack@on@page{0}{} %initialize
+
+%end-of-page action
+\pbs_eop_action:n{
+ \seq_if_exist:cT{g_pending_lnkcols_on_\int_use:c{g_ocgxii_page_int}_seq}{
+ %check whether end-of-page link colour stack has settled
+ \iow_shipout:Nx\@mainaux{
+ \token_to_str:N\ocgxii@newkey{ocgx2.oldlnkcol.\int_use:N\g_ocgxii_page_int}{
+ \seq_use:cn{g_pending_lnkcols_on_\int_use:c{g_ocgxii_page_int}_seq}{,}
+ }
+ }
+ \bool_if:nT{
+ !\cs_if_exist:cTF{ocgx2.oldlnkcol.\int_use:N\g_ocgxii_page_int}{
+ \str_if_eq_p:ee{
+ \tl_use:c{ocgx2.oldlnkcol.\int_use:N\g_ocgxii_page_int}
+ }{
+ \seq_use:cn{g_pending_lnkcols_on_\int_use:c{g_ocgxii_page_int}_seq}{,}
+ }
+ }{
+ \c_false_bool
+ }
+ }{
+ \tl_if_exist:NF\g_ocgxii_rerunwarned_tl{
+ \tl_new:N\g_ocgxii_rerunwarned_tl
+ \AtEndDocument{\msg_warning:nn{ocgx2}{rerun}}
+ }
+ }
+ % now close the colourlink opened last
+ \seq_get:cNT{g_pending_lnkcols_on_\int_use:c{g_ocgxii_page_int}_seq}\l_tmpa_tl{
+ \tl_gset_eq:NN\g_ocgxii_lnkcol_tl\l_tmpa_tl
+ \ocgxii_colourlink_end:
+ }
+ }
+ %check whether end-of-page ocg stack has settled
+ \iow_shipout:Nx\@mainaux{
+ \token_to_str:N\ocgxii@newkey{ocgx2.oldstack.\int_use:N\g_ocgxii_page_int}{
+ \seq_use:cn{g_pending_ocgs_on_\int_use:c{g_ocgxii_page_int}_seq}{,}
+ }
+ }
+ \bool_if:nT{
+ !\cs_if_exist:cTF{ocgx2.oldstack.\int_use:N\g_ocgxii_page_int}{
+ \str_if_eq_p:ee{
+ \tl_use:c{ocgx2.oldstack.\int_use:N\g_ocgxii_page_int}
+ }{
+ \seq_use:cn{g_pending_ocgs_on_\int_use:c{g_ocgxii_page_int}_seq}{,}
+ }
+ }{
+ \c_false_bool
+ }
+ }{
+ \tl_if_exist:NF\g_ocgxii_rerunwarned_tl{
+ \tl_new:N\g_ocgxii_rerunwarned_tl
+ \AtEndDocument{\msg_warning:nn{ocgx2}{rerun}}
+ }
+ }
+ %now close pending ocgs
+ \seq_map_variable:cNn{
+ g_pending_ocgs_on_\int_use:c{g_ocgxii_page_int}_seq
+ }\l_tmpb_tl{\ocgbase_oc_emc:}
+}
+
+%begin-of-page action
+\pbs_bop_action:n{
+ % re-open all pending ocgs in original order
+ \seq_set_eq:Nc\l_ocgxii_pending_ocgs_seq{
+ g_pending_ocgs_on_\int_use:c{g_ocgxii_page_int}_seq
+ }
+ \seq_reverse:N\l_ocgxii_pending_ocgs_seq
+ \seq_map_variable:NNn\l_ocgxii_pending_ocgs_seq\l_tmpa_tl{
+ \ocgbase_oc_bdc:n{\l_tmpa_tl}
+ }
+ % re-open the colourlink opened last
+ \seq_get:cNT{g_pending_lnkcols_on_\int_use:c{g_ocgxii_page_int}_seq}\l_tmpa_tl{
+ \tl_gset_eq:NN\g_ocgxii_lnkcol_tl\l_tmpa_tl
+ \ocgxii_colourlink_begin:
+ }
+ \int_gincr:N\g_ocgxii_page_int
+ % copy pending ocg stack from previous page, if it has not been initialized
+ % yet from aux file
+ \seq_if_exist:cF{g_pending_ocgs_on_\int_use:c{g_ocgxii_page_int}_seq}{
+ \seq_gset_eq:cc{
+ g_pending_ocgs_on_\int_use:c{g_ocgxii_page_int}_seq
+ }{
+ g_pending_ocgs_on_\int_eval:n{\g_ocgxii_page_int-\c_one_int}_seq
+ }
+ }
+ %the same for link colour stack
+ \seq_if_exist:cF{g_pending_lnkcols_on_\int_use:c{g_ocgxii_page_int}_seq}{
+ \seq_gset_eq:cc{
+ g_pending_lnkcols_on_\int_use:c{g_ocgxii_page_int}_seq
+ }{
+ g_pending_lnkcols_on_\int_eval:n{\g_ocgxii_page_int-\c_one_int}_seq
+ }
+ }
+}
+\int_new:N\g_ocgxii_page_int %abs. page counter
+
+\cs_new_protected_nopar:Nn\ocgxii_ocglist_reset:{
+ \tl_clear_new:N\l_ocgxii_u_list_tl
+ \tl_clear_new:N\l_ocgxii_d_list_tl
+ \tl_clear_new:N\l_ocgxii_e_list_tl
+ \tl_clear_new:N\l_ocgxii_x_list_tl
+}
+
+\cs_new_protected_nopar:Nn\ocgxii_ocglist_build:Nn{
+ \tl_set:Nx\l_ocglistarg_tl{#2}\tl_trim_spaces:N\l_ocglistarg_tl
+ % first try splitting at commas (ocgx2 syntax)
+ \tl_set_eq:NN\l_tmpa_tl\l_ocglistarg_tl
+ \tl_remove_all:Nn\l_tmpa_tl{~}
+ \seq_set_split:NnV\l_ocgxii_ocglistarg_seq{,}\l_tmpa_tl
+ \seq_remove_all:Nn\l_ocgxii_ocglistarg_seq{}
+ \tl_set:Nx\l_tmpa_tl{\seq_count:N\l_ocgxii_ocglistarg_seq}
+ % now at spaces (legacy ocgx/ocg-p)
+ \tl_set_eq:NN\l_tmpb_tl\l_ocglistarg_tl
+ \tl_remove_all:Nn\l_tmpb_tl{,}
+ \seq_set_split:NnV\l_tmpb_seq{~}\l_tmpb_tl
+ \seq_remove_all:Nn\l_tmpb_seq{}
+ \tl_set:Nx\l_tmpb_tl{\seq_count:N\l_tmpb_seq}
+ %take the seq having more elements (guessing the separator most likely used)
+ \int_compare:nT{\l_tmpb_tl>\l_tmpa_tl}{
+ \seq_set_eq:NN\l_ocgxii_ocglistarg_seq\l_tmpb_seq
+ }
+ \seq_map_variable:NNn\l_ocgxii_ocglistarg_seq\l_tempa_tl{
+ \ocgxii_process_ocgref:NN#1\l_tempa_tl
+ }
+}
+
+\cs_new_protected:Nn\ocgxii_commalist_process:n{
+ \seq_set_split:Nnn\l_tmpa_seq{,}{#1}
+ \ocgxii_ocglist_build:Nn\l_ocgxii_e_list_tl{\seq_item:Nn\l_tmpa_seq{1}}
+ \ocgxii_ocglist_build:Nn\l_ocgxii_x_list_tl{\seq_item:Nn\l_tmpa_seq{2}}
+ \ocgxii_ocglist_build:Nn\l_ocgxii_d_list_tl{\seq_item:Nn\l_tmpa_seq{3}}
+ \ocgxii_ocglist_build:Nn\l_ocgxii_u_list_tl{\seq_item:Nn\l_tmpa_seq{4}}
+}
+
+\cs_new_protected_nopar:Nn\ocgxii_ocglist_process_idlist:nn{
+ \ocgxii_ocglist_reset:
+ \tl_set:Nx\l_ocgxii_opt_tl{#1}\tl_remove_all:Nn\l_ocgxii_opt_tl{~}
+ \str_case_e:nnF{\l_ocgxii_opt_tl}{
+ {onmouseup}{
+ \ocgxii_ocglist_build:Nn\l_ocgxii_u_list_tl{#2}
+ }
+ {onmousedown}{
+ \ocgxii_ocglist_build:Nn\l_ocgxii_d_list_tl{#2}
+ }
+ {onmouseenter}{
+ \ocgxii_ocglist_build:Nn\l_ocgxii_e_list_tl{#2}
+ }
+ {onmouseexit}{
+ \ocgxii_ocglist_build:Nn\l_ocgxii_x_list_tl{#2}
+ }
+ {onmouseall}{
+ \ocgxii_commalist_process:n{#2}
+ }
+ }{
+ \msg_error:nnx{ocgx2}{unknown~option}{\l_ocgxii_opt_tl}
+ }
+}
+
+\int_new:N\g_ocgxii_widcount_int% widget counter
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% re-implement commands from ocgx.sty (all engines including ps2pdf [gs>=9.15])
+% adding optional `*' (arg 1) -> non-breakable link instead of plain (multiline)
+% Link;
+% adding optional 2nd argument -> Button Widget (non-breakable) with one of
+% various mouse triggers (`troggerocgs` option from ocg-p)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\DeclareDocumentCommand\switchocg{s O{} m +m}{
+ \ocgxii_actionsocg:nnnnnn{#1}{#2}{#3}{}{}{#4}
+}
+
+\DeclareDocumentCommand\showocg{s O{} m +m}{
+ \ocgxii_actionsocg:nnnnnn{#1}{#2}{}{#3}{}{#4}
+}
+
+\DeclareDocumentCommand\hideocg{s O{} m +m}{
+ \ocgxii_actionsocg:nnnnnn{#1}{#2}{}{}{#3}{#4}
+}
+
+\DeclareDocumentCommand\actionsocg{s O{} m m m +m}{
+ \ocgxii_actionsocg:nnnnnn{#1}{#2}{#3}{#4}{#5}{#6}
+}
+
+\bool_new:N\l_ocgxii_mouse_triggers_bool
+\bool_new:N\l_ocgxii_nobreak_bool
+\cs_new_protected:Nn\ocgxii_actionsocg:nnnnnn{
+ \group_begin:
+ \mode_leave_vertical:
+ \bool_set_false:N\l_ocgxii_mouse_triggers_bool
+ \bool_set_false:N\l_ocgxii_nobreak_bool
+ % explicitly non-breakable?
+ \bool_if:nT{#1}{\bool_set_true:N\l_ocgxii_nobreak_bool}
+ %
+ %clear actions for various mouse triggers (e,d,x)
+ \tl_clear:N\l_ocgxii_toswitch_e_tl
+ \tl_clear:N\l_ocgxii_toswitch_x_tl
+ \tl_clear:N\l_ocgxii_toswitch_d_tl
+ \tl_clear:N\l_ocgxii_toshow_e_tl
+ \tl_clear:N\l_ocgxii_toshow_x_tl
+ \tl_clear:N\l_ocgxii_toshow_d_tl
+ \tl_clear:N\l_ocgxii_tohide_e_tl
+ \tl_clear:N\l_ocgxii_tohide_x_tl
+ \tl_clear:N\l_ocgxii_tohide_d_tl
+ %
+ %process *all* mouse triggers (e,d,u,x)
+ \ocgxii_ocglist_process_idlist:nn{
+ \tl_if_blank:oTF{#2}{onmouseup}{#2}
+ }{#3}
+ \tl_set_eq:NN\l_ocgxii_toswitch_e_tl\l_ocgxii_e_list_tl
+ \tl_set_eq:NN\l_ocgxii_toswitch_x_tl\l_ocgxii_x_list_tl
+ \tl_set_eq:NN\l_ocgxii_toswitch_d_tl\l_ocgxii_d_list_tl
+ \tl_set_eq:NN\l_ocgxii_toswitch_u_tl\l_ocgxii_u_list_tl
+ \ocgxii_ocglist_process_idlist:nn{
+ \tl_if_blank:oTF{#2}{onmouseup}{#2}
+ }{#4}
+ \tl_set_eq:NN\l_ocgxii_toshow_e_tl\l_ocgxii_e_list_tl
+ \tl_set_eq:NN\l_ocgxii_toshow_x_tl\l_ocgxii_x_list_tl
+ \tl_set_eq:NN\l_ocgxii_toshow_d_tl\l_ocgxii_d_list_tl
+ \tl_set_eq:NN\l_ocgxii_toshow_u_tl\l_ocgxii_u_list_tl
+ \ocgxii_ocglist_process_idlist:nn{
+ \tl_if_blank:oTF{#2}{onmouseup}{#2}
+ }{#5}
+ \tl_set_eq:NN\l_ocgxii_tohide_e_tl\l_ocgxii_e_list_tl
+ \tl_set_eq:NN\l_ocgxii_tohide_x_tl\l_ocgxii_x_list_tl
+ \tl_set_eq:NN\l_ocgxii_tohide_d_tl\l_ocgxii_d_list_tl
+ \tl_set_eq:NN\l_ocgxii_tohide_u_tl\l_ocgxii_u_list_tl
+ %any triggers apart from mouse-up?
+ \str_if_eq:eeF{
+ \l_ocgxii_toswitch_e_tl\l_ocgxii_toswitch_x_tl\l_ocgxii_toswitch_d_tl
+ \l_ocgxii_toshow_e_tl\l_ocgxii_toshow_x_tl\l_ocgxii_toshow_d_tl
+ \l_ocgxii_tohide_e_tl\l_ocgxii_tohide_x_tl\l_ocgxii_tohide_d_tl
+ }{}{
+ \bool_set_true:N\l_ocgxii_mouse_triggers_bool
+ }
+ %
+ \bool_if:nTF{\l_ocgxii_nobreak_bool || \l_ocgxii_mouse_triggers_bool}{
+ \hbox_set:Nn\l_tmpa_box{#6}
+ \bool_if:NTF\l_ocgxii_mouse_triggers_bool{
+ % e,d,x mouse triggers require (non-breakable) /Widget annot
+ \pdfannot_dict_put:nnn{link/GoTo}{Subtype}{/Widget}
+ \pdfannot_dict_remove:nn{link/GoTo}{Border}
+ }{
+ \pdfannot_dict_put:nnn{link/GoTo}{Border}{[0~0~0]}
+ }
+ \pdfannot_dict_remove:nn{link/GoTo}{C}
+ \pbs_pdfannot:nnnn{
+ \dim_use:N\box_wd:N\l_tmpa_box}{
+ \dim_use:N\box_ht:N\l_tmpa_box}{
+ \dim_use:N\box_dp:N\l_tmpa_box
+ }{
+ \pdfannot_dict_use:n{link/GoTo}
+ \bool_if:NTF\l_ocgxii_mouse_triggers_bool{
+ /Ff~65536/FT/Btn/BS<</W~0>>
+ /T~(ocgx2@\int_use:N\g_ocgxii_widcount_int)
+ %treat mouse-up as mouse-click --> handle through /A dictionary
+ \str_if_eq:eeF{}{
+ \l_ocgxii_toswitch_u_tl\l_ocgxii_toshow_u_tl\l_ocgxii_tohide_u_tl
+ }{
+ /A <</S/SetOCGState/State [
+ \str_if_eq:VnF\l_ocgxii_toswitch_u_tl{}{
+ /Toggle~\l_ocgxii_toswitch_u_tl
+ }
+ \str_if_eq:VnF\l_ocgxii_toshow_u_tl{}{
+ /ON~\l_ocgxii_toshow_u_tl
+ }
+ \str_if_eq:VnF\l_ocgxii_tohide_u_tl{}{
+ /OFF~\l_ocgxii_tohide_u_tl
+ }
+ ]>>
+ }
+ % other mouse triggers need add. actions dict
+ /AA <<
+ %\str_if_eq:eeF{}{ % mouse-up
+ % \l_ocgxii_toswitch_u_tl\l_ocgxii_toshow_u_tl\l_ocgxii_tohide_u_tl
+ %}{
+ % /U <</S/SetOCGState/State [
+ % \str_if_eq:VnF\l_ocgxii_toswitch_u_tl{}{
+ % /Toggle~\l_ocgxii_toswitch_u_tl
+ % }
+ % \str_if_eq:VnF\l_ocgxii_toshow_u_tl{}{
+ % /ON~\l_ocgxii_toshow_u_tl
+ % }
+ % \str_if_eq:VnF\l_ocgxii_tohide_u_tl{}{
+ % /OFF~\l_ocgxii_tohide_u_tl
+ % }
+ % ]>>
+ %}
+ \str_if_eq:eeF{}{ % mouse-down
+ \l_ocgxii_toswitch_d_tl\l_ocgxii_toshow_d_tl\l_ocgxii_tohide_d_tl
+ }{
+ /D <</S/SetOCGState/State [
+ \str_if_eq:VnF\l_ocgxii_toswitch_d_tl{}{
+ /Toggle~\l_ocgxii_toswitch_d_tl
+ }
+ \str_if_eq:VnF\l_ocgxii_toshow_d_tl{}{
+ /ON~\l_ocgxii_toshow_d_tl
+ }
+ \str_if_eq:VnF\l_ocgxii_tohide_d_tl{}{
+ /OFF~\l_ocgxii_tohide_d_tl
+ }
+ ]>>
+ }
+ \str_if_eq:eeF{}{ % mouse-enter
+ \l_ocgxii_toswitch_e_tl\l_ocgxii_toshow_e_tl\l_ocgxii_tohide_e_tl
+ }{
+ /E <</S/SetOCGState/State [
+ \str_if_eq:VnF\l_ocgxii_toswitch_e_tl{}{
+ /Toggle~\l_ocgxii_toswitch_e_tl
+ }
+ \str_if_eq:VnF\l_ocgxii_toshow_e_tl{}{
+ /ON~\l_ocgxii_toshow_e_tl
+ }
+ \str_if_eq:VnF\l_ocgxii_tohide_e_tl{}{
+ /OFF~\l_ocgxii_tohide_e_tl
+ }
+ ]>>
+ }
+ \str_if_eq:eeF{}{ % mouse-exit
+ \l_ocgxii_toswitch_x_tl\l_ocgxii_toshow_x_tl\l_ocgxii_tohide_x_tl
+ }{
+ /X <</S/SetOCGState/State [
+ \str_if_eq:VnF\l_ocgxii_toswitch_x_tl{}{
+ /Toggle~\l_ocgxii_toswitch_x_tl
+ }
+ \str_if_eq:VnF\l_ocgxii_toshow_x_tl{}{
+ /ON~\l_ocgxii_toshow_x_tl
+ }
+ \str_if_eq:VnF\l_ocgxii_tohide_x_tl{}{
+ /OFF~\l_ocgxii_tohide_x_tl
+ }
+ ]>>
+ }
+ >>
+ }{
+ %mouse-up alone
+ /A <</S/SetOCGState
+ /State [
+ \str_if_eq:VnF{\l_ocgxii_toswitch_u_tl}{}{
+ /Toggle~\l_ocgxii_toswitch_u_tl}~
+ \str_if_eq:VnF{\l_ocgxii_toshow_u_tl}{}{/ON~\l_ocgxii_toshow_u_tl}~
+ \str_if_eq:VnF{\l_ocgxii_tohide_u_tl}{}{/OFF~\l_ocgxii_tohide_u_tl}
+ ]
+ >>
+ }
+ }\box_use_drop:N\l_tmpa_box
+ \bool_if:NT\l_ocgxii_mouse_triggers_bool{
+ \pbs_appendtofields:n{\pbs_pdflastann:}
+ \int_gincr:N\g_ocgxii_widcount_int
+ }
+ }{
+ %line-breakable annotation
+ \pbs_pdflink:nn{
+ %look and feel of hyperref internal links
+ \pdfannot_dict_use:n{link/GoTo}
+ /A <</S/SetOCGState
+ /State [
+ \str_if_eq:VnF{\l_ocgxii_toswitch_u_tl}{}{
+ /Toggle~\l_ocgxii_toswitch_u_tl}~
+ \str_if_eq:VnF{\l_ocgxii_toshow_u_tl}{}{/ON~\l_ocgxii_toshow_u_tl}~
+ \str_if_eq:VnF{\l_ocgxii_tohide_u_tl}{}{/OFF~\l_ocgxii_tohide_u_tl}
+ ]
+ >>
+ }{
+ \hook_use:n{pdfannot/link/GoTo/begin}
+ #6
+ \hook_use:n{pdfannot/link/GoTo/end}
+ }
+ }
+ \group_end:
+}
+
+%mimic commands from ocg-p
+\keys_define:nn{ocgx2/ocgpcmd}{
+ triggerocg .choices:nn = {
+ onmouseenter, onmouseexit, onmousedown, onmouseup, allactions
+ }{
+ \str_if_eq:eeTF{\l_keys_choice_tl}{allactions}{
+ \tl_set:Nn\l_ocgxii_trigger_tl{onmouseall}
+ }{
+ \tl_set_eq:NN\l_ocgxii_trigger_tl\l_keys_choice_tl
+ }
+ }
+}
+\DeclareDocumentCommand\toggleocgs{O{} m +m}{
+ \tl_clear_new:N\l_ocgxii_trigger_tl
+ \keys_set:nn{ocgx2/ocgpcmd}{#1}
+ \switchocg*[\l_ocgxii_trigger_tl]{#2}{#3}
+}
+\DeclareDocumentCommand\showocgs{O{} m +m}{
+ \tl_clear_new:N\l_ocgxii_trigger_tl
+ \keys_set:nn{ocgx2/ocgpcmd}{#1}
+ \showocg*[\l_ocgxii_trigger_tl]{#2}{#3}
+}
+\DeclareDocumentCommand\hideocgs{O{} m +m}{
+ \tl_clear_new:N\l_ocgxii_trigger_tl
+ \keys_set:nn{ocgx2/ocgpcmd}{#1}
+ \hideocg*[\l_ocgxii_trigger_tl]{#2}{#3}
+}
+\DeclareDocumentCommand\setocgs{O{} m m m +m}{
+ \tl_clear_new:N\l_ocgxii_trigger_tl
+ \keys_set:nn{ocgx2/ocgpcmd}{#1}
+ \actionsocg*[\l_ocgxii_trigger_tl]{#2}{#3}{#4}{#5}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\cs_new_protected:Nn\ocgxii_process_ocgref:NN{
+ \tl_if_exist:cTF{ocgx2.ocg.#2}{
+ \tl_put_right:Nx#1{~\tl_use:c{ocgx2.ocg.#2}}
+ }{
+ \msg_warning:nnx{ocgx2}{undefined~OCG}{#2}
+ \tl_if_exist:NF\g_ocgxii_refundefwarned_tl{
+ \tl_new:N\g_ocgxii_refundefwarned_tl
+ \AtEndDocument{\msg_warning:nn{ocgx2}{undefined~OCGs}}
+ }
+ }
+}
+
+%ocg environment opts
+\keys_define:nn{ocgx2/ocgenv}{
+ viewocg .choice:,
+ viewocg / always .code:n={
+ \tl_set:Nn\l_ocgxii_view_tl{/View<</ViewState/ON>>}},
+ viewocg / never .code:n={
+ \tl_set:Nn\l_ocgxii_view_tl{/View<</ViewState/OFF>>}},
+ viewocg / ifvisible .code:n={
+ \tl_clear:N\l_ocgxii_view_tl},
+ viewocg .default:n={ifvisible},
+
+ printocg .choice:,
+ printocg / always .code:n={
+ \tl_set:Nn\l_ocgxii_print_tl{/Print<</PrintState/ON>>}},
+ printocg / never .code:n={
+ \tl_set:Nn\l_ocgxii_print_tl{/Print<</PrintState/OFF>>}},
+ printocg / ifvisible .code:n={
+ \tl_clear:N\l_ocgxii_print_tl},
+ printocg .default:n={ifvisible},
+
+ exportocg .choice:,
+ exportocg / always .code:n={
+ \tl_set:Nn\l_ocgxii_export_tl{/Export<</ExportState/ON>>}},
+ exportocg / never .code:n={
+ \tl_set:Nn\l_ocgxii_export_tl{/Export<</ExportState/OFF>>}},
+ exportocg / ifvisible .code:n={\tl_clear:N\l_ocgxii_export_tl},
+ exportocg .default:n={ifvisible},
+
+ showingui .choices:nn = {true,false,always,never,iffirstuse}{
+ \bool_if:nTF{
+ \str_if_eq_p:ee{#1}{false} ||
+ \str_if_eq_p:ee{#1}{never}
+ }{
+ \bool_set_false:N\l_ocgxii_showingui_bool
+ }{
+ \bool_set_true:N\l_ocgxii_showingui_bool
+ }
+ },
+ showingui .default:n={true},
+
+ listintoolbar .meta:n = {showingui=#1},
+ listintoolbar .default:n={true},
+
+ radiobtngrps .code:n = {
+ \clist_map_inline:nn{#1}{
+ \seq_if_in:NxF\l_ocgxii_rbgrps_seq{##1}{
+ \seq_put_right:Nx\l_ocgxii_rbgrps_seq{##1}
+ }
+ }
+ },
+ radiobtngrps .value_required:n = {true},
+ radiobtngrp .meta:n={radiobtngrps={#1}},
+ radiobtngrp .value_required:n = {true}
+}
+
+\cs_new_protected:Nn\ocgxii_reset_cmd_opts:{
+ \tl_set_eq:NN\l_ocgxii_view_tl\g_ocgxii_view_tl
+ \tl_set_eq:NN\l_ocgxii_print_tl\g_ocgxii_print_tl
+ \tl_set_eq:NN\l_ocgxii_export_tl\g_ocgxii_export_tl
+ \bool_set_eq:NN\l_ocgxii_showingui_bool\g_ocgxii_showingui_bool
+ %stack of radio button group names the current ocg belongs to
+ \seq_clear_new:N\l_ocgxii_rbgrps_seq
+}
+
+\msg_set:nnn{ocgx2}{rerun}{Rerun~to~get~OCG~references~right!}
+\msg_set:nnn{ocgx2}{undefined~OCG}{
+ Line~\msg_line_number: :~OCG~`#1'~is~not~defined.
+}
+\msg_set:nnn{ocgx2}{undefined~OCGs}{There~were~undefined~OCGs!}
+\msg_set:nnn{ocgx2}{unknown~option}{
+ Line~\msg_line_number: :~unknown~option~`#1'.
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% allows `ocgcolorlinks' to extend over line-breaks AND page-breaks with
+% pdftex, luatex, xetex, dvipdfmx drivers
+%
+% based on Ben Lerner's idea
+% http://tex.stackexchange.com/a/104227;
+% with some improvements
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\bool_if:NT\l_ocgxii_ocgcolorlinks_bool{
+ % option ocgcolorlinks and beamer are not compatible
+ \@ifclassloaded{beamer}{
+ \bool_set_false:N\l_ocgxii_ocgcolorlinks_bool
+ \hypersetup{colorlinks}
+ \msg_warning:nn{ocgx2}{beamer~and~ocgcolorlinks}
+ }{}
+ % make sure that hyperref has been loaded if `ocgcolorlinks' is set via
+ % pkg option
+ \@ifpackageloaded{hyperref}{
+ \hypersetup{ocgcolorlinks}
+ }{
+ \msg_error:nnn{ocgx2}{missing~package}{hyperref}
+ }
+}
+
+% we'll be using the downscaled space character (32) from the pzdr
+% (dingbats) font at the start and at the end of every ocgcolorlink
+\cs_new_nopar:Npn\ocgxii_tiny_space_char:{
+ \group_begin: \font\l_tmpa_tl=pzdr~scaled~1\l_tmpa_tl\char32 \group_end:
+}
+
+\@ifpackageloaded{hyperref}{
+ \bool_if:nTF{\sys_if_output_dvi_p: && !\g_ocgxii_dvipdfmx_bool}{
+ \prop_map_inline:Nn\c__hyp_map_hyp_annot_prop{
+ \hook_gremove_code:nn{pdfannot/link/#2/begin}{hyp/ocg}
+ \hook_gput_code:nnn{pdfannot/link/#2/begin}{hyp/ocg}{
+ \bool_if:cT{l_hyp_annot_ocgcolor#1_bool}{
+ \ocgxii_colorlinks_init:
+ \group_begin:
+ \color_export:nnN{hyp/color/#1}{backend}\l_tempb_tl
+ \tl_set:Nx\l_tempa_tl{\tl_item:Nn\l_tempb_tl{1}}
+ \tl_set:Nx\l_tempb_tl{\tl_item:Nn\l_tempb_tl{2}}
+ \str_replace_all:Nnn\l_tempb_tl{~}{,}
+ \tl_set:Nx\l_ocgxii_lnkcol_tl{{\l_tempa_tl}{\l_tempb_tl}}
+ \ocgxii_colourlink_nobreak_begin:
+ }
+ }
+ \hook_gremove_code:nn{pdfannot/link/#2/end}{hyp/ocg}
+ \hook_gput_code:nnn{pdfannot/link/#2/end}{hyp/ocg}{
+ \bool_if:cT{l_hyp_annot_ocgcolor#1_bool}{
+ \ocgxii_colourlink_nobreak_end:
+ \group_end:
+ }
+ }
+ }
+ }{
+ \prop_map_inline:Nn\c__hyp_map_hyp_annot_prop{
+ \hook_gremove_code:nn{pdfannot/link/#2/begin}{hyp/ocg}
+ \hook_gput_code:nnn{pdfannot/link/#2/begin}{hyp/ocg}{
+ \bool_if:cT{l_hyp_annot_ocgcolor#1_bool}{
+ \ocgxii_colorlinks_init:
+ \seq_get_left:NNT\g_ocgxii_lnk_color_seq\l_tmpa_tl{
+ \tl_gset_eq:NN\g_ocgxii_lnkcol_tl\l_tmpa_tl
+ \ocgxii_colourlink_end:
+ }
+ \group_begin:
+ \ocgxii_colourlink_begin:
+ %query current link colour, export it into backend format
+ %and put it on the link colour stack
+ \color_export:nnN{hyp/color/#1}{backend}\l_tempb_tl
+ \tl_set:Nx\l_tempa_tl{\tl_item:Nn\l_tempb_tl{1}} % model
+ \tl_set:Nx\l_tempb_tl{\tl_item:Nn\l_tempb_tl{2}} % components
+ \str_replace_all:Nnn\l_tempb_tl{~}{,}
+ \seq_gpush:Nx\g_ocgxii_lnk_color_seq{{\l_tempa_tl}{\l_tempb_tl}}
+ \ocgxii_stack_shipout:NN\ocgxii@lnkcol@stack@on@page\g_ocgxii_lnk_color_seq
+ }
+ }
+ \hook_gremove_code:nn{pdfannot/link/#2/end}{hyp/ocg}
+ \hook_gput_code:nnn{pdfannot/link/#2/end}{hyp/ocg}{
+ \bool_if:cT{l_hyp_annot_ocgcolor#1_bool}{
+ \seq_gpop:NN\g_ocgxii_lnk_color_seq\l_tmpa_tl
+ \tl_gset_eq:NN\g_ocgxii_lnkcol_tl\l_tmpa_tl
+ \ocgxii_stack_shipout:NN\ocgxii@lnkcol@stack@on@page\g_ocgxii_lnk_color_seq
+ \ocgxii_colourlink_end:
+ \group_end:
+ \seq_get_left:NNT\g_ocgxii_lnk_color_seq\l_tmpa_tl{
+ \tl_gset_eq:NN\g_ocgxii_lnkcol_tl\l_tmpa_tl
+ \ocgxii_colourlink_begin:
+ }
+ }
+ }
+ }
+ }
+}{}
+
+\seq_new:N\g_ocgxii_lnk_color_seq %stack of colours of currently open links
+
+\cs_new_protected_nopar:Nn\ocgxii_colourlink_begin:{
+ %tiny space char put here in order to neutralise possible transformation
+ %matrix modifications from previous \pdfliteral{} (TikZ makes a lot use of it)
+ \hbox_overlap_left:n{\ocgxii_tiny_space_char:}
+ \pbs_literal:nn{page}{q~7~Tr}
+}
+\cs_new_protected_nopar:Nn\ocgxii_colourlink_end:{
+ %a tiny space char should keep empty link annots from flooding the page
+ % with link colour
+ %tiny space char put here in order to neutralise possible transformation
+ \hbox_overlap_left:n{\ocgxii_tiny_space_char:}
+ \ocgbase_oc_bdc:n{\tl_use:c{ocgxii_ocg_OCPrint}}
+ \pbs_literal:nn{page}{-88888~-88888~99999~99999~re~f}
+ \ocgbase_oc_emc:
+ \ocgbase_oc_bdc:n{\tl_use:c{ocgxii_ocg_OCView}}
+ \group_begin:
+ \exp_after:wN\color_select:nn\g_ocgxii_lnkcol_tl
+ \pbs_literal:nn{page}{-88888~-88888~99999~99999~re~f}
+ \group_end:
+ \ocgbase_oc_emc:
+ \pbs_literal:nn{page}{0~Tr~Q}
+}
+
+\cs_new_protected_nopar:Nn\ocgxii_colourlink_nobreak_begin:{
+ \hbox_set:Nw\l_tmpa_box
+}
+\cs_new_protected_nopar:Nn\ocgxii_colourlink_nobreak_end:{
+ \hbox_set_end:
+ \mbox{
+ \ocgbase_oc_bdc:n{\tl_use:c{ocgxii_ocg_OCPrint}}
+ \hbox_overlap_right:n{\box_use:N\l_tmpa_box}
+ \ocgbase_oc_emc:
+ \ocgbase_oc_bdc:n{\tl_use:c{ocgxii_ocg_OCView}}
+ \group_begin:
+ \exp_after:wN\color_select:nn\l_ocgxii_lnkcol_tl
+ \box_use_drop:N\l_tmpa_box
+ \group_end:
+ \ocgbase_oc_emc:
+ }
+}
+
+% creates OCG objects for printing and viewing
+\cs_new_protected:Npn\ocgxii_colorlinks_init:{
+ \ocgbase_new_ocg:nnn{OCView}{
+ /Print<</PrintState/OFF>>
+ /Export<</ExportState/OFF>>
+ }{on}
+ \tl_gset:cx{ocgxii_ocg_OCView}{\ocgbase_last_ocg:}
+ %in case somebody wants to reopen with \begin{ocg}...
+ \tl_gset:cx{ocgxii_ocg_OCView.opts}{
+ showingui=never,printocg=never,exportocg=never
+ }
+ \ocgbase_new_ocg:nnn{OCPrint}{
+ /Print<</PrintState/ON>>
+ /Export<</ExportState/ON>>
+ }{off}
+ \tl_gset:cx{ocgxii_ocg_OCPrint}{\ocgbase_last_ocg:}
+ \tl_gset:cx{ocgxii_ocg_OCPrint.opts}{
+ showingui=never,printocg=always,exportocg=always
+ }
+ \iow_now:Nx\@mainaux{
+ \token_to_str:N\ocgxii@newkey{ocgx2.ocg.OCView}{
+ \tl_use:c{ocgxii_ocg_OCView}}
+ }
+ \iow_now:Nx\@mainaux{
+ \token_to_str:N\ocgxii@newkey{ocgx2.ocg.OCPrint}{
+ \tl_use:c{ocgxii_ocg_OCPrint}}
+ }
+ \cs_gset:Npn\ocgxii_colorlinks_init:{}
+}
+
+% user command for protecting graphical content (external file, inline
+% [e. g. TikZ], \fbox{...}) inside breakable ocgcolorlink
+\DeclareDocumentCommand\ocglinkprotect{m}{
+ \seq_get_left:NNTF\g_ocgxii_lnk_color_seq\l_tmpa_tl{
+ \tl_gset_eq:NN\g_ocgxii_lnkcol_tl\l_tmpa_tl
+ \ocgxii_colourlink_end:
+ \group_begin:
+ \tl_set_eq:NN\l_ocgxii_lnkcol_tl\l_tmpa_tl
+ \ocgxii_colourlink_nobreak_begin:
+ \cs_set_nopar:Npn\ocglinkprotect##1{##1} % in case of nesting
+ \sys_if_output_pdf:TF{
+ \mode_leave_vertical:
+ \hbox_set:Nn\l_tmpb_box{\skip_horizontal:n{1em}#1\skip_horizontal:n{1em}}
+ \box_set_ht:Nn\l_tmpb_box{\box_ht:N\l_tmpb_box+1em}
+ \box_set_dp:Nn\l_tmpb_box{\box_dp:N\l_tmpb_box+1em}
+ \hbox_to_wd:nn{\box_wd:N\l_tmpb_box-2em}{
+ \vrule~
+ width~\c_zero_dim~
+ height~\dim_eval:n{\box_ht:N\l_tmpb_box-1em}~
+ depth~\dim_eval:n{\box_dp:N\l_tmpb_box -1em}~
+ \pbs_pdfxform:nnnnn{1}{0}{}{}{\l_tmpb_box}
+ \skip_horizontal:n{-1em}
+ \pbs_pdfrefxform:n{\pbs_pdflastxform:}
+ \hss
+ }
+ }{#1}
+ \ocgxii_colourlink_nobreak_end:
+ \group_end:
+ \ocgxii_colourlink_begin:
+ }{#1}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% TikZ related code follows (to be enabled with package option `tikz')
+
+\bool_if:NF\l_ocgxii_tikz_bool{\endinput}
+\cs_set_eq:NN\ocgxii@trmspc\tl_trim_spaces:N
+\ExplSyntaxOff
+\RequirePackage{tikz}
+\usetikzlibrary{calc}
+
+% helper, replaces all spaces in #1 with `_'
+\def\ocgxii@cnvspc#1{\expandafter\ocgxii@@cnvspc#1 \@nil}
+\def\ocgxii@@cnvspc#1 #2\@nil{#1\ifx\@nil#2\@nil\else_\ocgxii@@cnvspc#2\@nil\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Copyright notice: The code that follows until the end of the file was
+% taken in large parts from Paul Gaborit's `tikzlibraryocgx.code.tex' with
+% some additions/fixes:
+%
+% - opts={...} inside ocg={...} allows ocg-environment options to be passed
+% to a TikZ scope
+%
+% - The style ocmd={...} is another way for turning a TikZ scope into a PDF
+% layer (in addition to ocg={...}). It has two sub-keys, ref={...} and
+% visibility={...}, which have the same meaning as the optional and the
+% mandatory arguments of the `ocmd' environment
+%
+% - TikZ objects to be turned into OCG switching links accept the additional
+% key
+%
+% trigger ocg = onmousenter | onmouseexit | onmousedown | onmouseup |
+% onmouseall
+%
+% to react to various mouse gestures
+%
+% - switching links properly sized and working in scaled tikzpictures
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\tikzset{
+ ocg/.style={ocg/.cd,#1,/tikz/.cd},
+ ocg={
+ % parameters
+ name/.store in=\ocgxii@name,
+ opts/.store in=\ocgxii@opts,
+ visibility/.store in=\ocgxii@visibility,
+ status/.is choice,
+ status/visible/.style={visibility=1},
+ status/invisible/.style={visibility=0},
+ status/true/.style={visibility=1},
+ status/false/.style={visibility=0},
+ status/on/.style={visibility=1},
+ status/off/.style={visibility=0},
+ status/1/.style={visibility=1},
+ status/0/.style={visibility=0},
+ % default values
+ name=,
+ opts=, % NEW
+ status=on,
+ % ref
+ ref/.style={
+ /tikz/execute at begin scope={%
+ \begin{ocg}[\ocgxii@opts]{%
+ \ifx\empty\ocgxii@name\empty#1\else\ocgxii@name\fi%
+ }{#1}{\ocgxii@visibility}},
+ /tikz/execute at end scope={\end{ocg}},
+ }
+ },
+ ocmd/.style={
+ ocmd/.cd,
+ #1,
+ /tikz/execute at begin scope={%
+ \begin{ocmd}[\ocgxii@ocmdref]{\ocgxii@ocmdvisibility}%
+ },
+ /tikz/execute at end scope={\end{ocmd}},
+ /tikz/.cd
+ },
+ ocmd={
+ % parameters
+ ref/.store in=\ocgxii@ocmdref,
+ visibility/.store in=\ocgxii@ocmdvisibility,
+ % default values
+ ref=,
+ visibility=,
+ },
+ trigger ocg/.store in=\ocgxii@trigger,
+ trigger ocg/.value required,
+ switch ocg/.style={
+ postaction={
+ path picture={
+ \path (path picture bounding box.south west) coordinate (p1)
+ (path picture bounding box.north east) coordinate (p2)
+ (p1) node[inner sep=0pt,anchor=south west,outer sep=0pt] {%
+ \ifdefined\ocgxii@trigger%
+ \switchocg*[\ocgxii@trigger]{#1}{%
+ \tikz \useasboundingbox (p1) rectangle (p2);}%
+ \else%
+ \switchocg*{#1}{\tikz \useasboundingbox (p1) rectangle (p2);}%
+ \fi%
+ };
+ }
+ }
+ },
+ switch ocg with mark on/.style 2 args={
+ postaction={
+ path picture={%
+ \edef\ocgxii@argone{#1}%ocg ref for checkmark
+ \ocgxii@trmspc\ocgxii@argone%
+ \global\let\ocgxii@argone\ocgxii@argone%
+ %default ocg ref for checkmark, if nothing provided in #1
+ \xdef\ocgxii@argtwo{#2.mark}%
+ \xdef\ocgxii@argtwo{\ocgxii@cnvspc{\ocgxii@argtwo}}%
+ \begin{ocg}[showingui=false]{%
+ \ifx\ocgxii@argone\@empty\ocgxii@argtwo\else\ocgxii@argone\fi%
+ }{%
+ \ifx\ocgxii@argone\@empty\ocgxii@argtwo\else\ocgxii@argone\fi%
+ }{on}%
+ \draw
+ (path picture bounding box.south west)
+ --
+ (path picture bounding box.north east)
+ (path picture bounding box.south east)
+ --
+ (path picture bounding box.north west)
+ ;
+ \end{ocg}%
+ },
+ switch ocg={%
+ \ifx\ocgxii@argone\@empty\ocgxii@argtwo\else{\ocgxii@argone}\fi\space #2%
+ }
+ }
+ },
+ switch ocg with mark off/.style 2 args={
+ postaction={
+ path picture={%
+ \edef\ocgxii@argone{#1}%ocg ref for checkmark
+ \ocgxii@trmspc\ocgxii@argone%
+ \global\let\ocgxii@argone\ocgxii@argone%
+ %default ocg ref for checkmark, if nothing provided in #1
+ \xdef\ocgxii@argtwo{#2.mark}%
+ \xdef\ocgxii@argtwo{\ocgxii@cnvspc{\ocgxii@argtwo}}%
+ \begin{ocg}[showingui=false]{%
+ \ifx\ocgxii@argone\@empty\ocgxii@argtwo\else\ocgxii@argone\fi%
+ }{%
+ \ifx\ocgxii@argone\@empty\ocgxii@argtwo\else\ocgxii@argone\fi%
+ }{off}%
+ \draw
+ (path picture bounding box.south west)
+ --
+ (path picture bounding box.north east)
+ (path picture bounding box.south east)
+ --
+ (path picture bounding box.north west)
+ ;
+ \end{ocg}%
+ },
+ switch ocg={%
+ \ifx\ocgxii@argone\@empty\ocgxii@argtwo\else{\ocgxii@argone}\fi\space #2%
+ }
+ }
+ },
+ show ocg/.style={
+ postaction={
+ path picture={
+ \path (path picture bounding box.south west) coordinate (p1)
+ (path picture bounding box.north east) coordinate (p2)
+ (p1) node[inner sep=0pt,anchor=south west,outer sep=0pt] {%
+ \ifdefined\ocgxii@trigger%
+ \showocg*[\ocgxii@trigger]{#1}{%
+ \tikz \useasboundingbox (p1) rectangle (p2);}%
+ \else%
+ \showocg*{#1}{\tikz \useasboundingbox (p1) rectangle (p2);}%
+ \fi%
+ };
+ }
+ }
+ },
+ hide ocg/.style={
+ postaction={
+ path picture={
+ \path (path picture bounding box.south west) coordinate (p1)
+ (path picture bounding box.north east) coordinate (p2)
+ (p1) node[inner sep=0pt,anchor=south west,outer sep=0pt] {%
+ \ifdefined\ocgxii@trigger%
+ \hideocg*[\ocgxii@trigger]{#1}{%
+ \tikz \useasboundingbox (p1) rectangle (p2);}%
+ \else%
+ \hideocg*{#1}{\tikz \useasboundingbox (p1) rectangle (p2);}%
+ \fi%
+ };
+ }
+ }
+ },
+ actions ocg/.style n args={3}{
+ postaction={
+ path picture={
+ \path (path picture bounding box.south west) coordinate (p1)
+ (path picture bounding box.north east) coordinate (p2)
+ (p1) node[inner sep=0pt,anchor=south west,outer sep=0pt] {%
+ \ifdefined\ocgxii@trigger%
+ \actionsocg*[\ocgxii@trigger]{#1}{#2}{#3}{%
+ \tikz \useasboundingbox (p1) rectangle (p2);}%
+ \else%
+ \actionsocg*{#1}{#2}{#3}{%
+ \tikz \useasboundingbox (p1) rectangle (p2);}%
+ \fi%
+ };
+ }
+ }
+ }
+}
diff --git a/macros/latex/contrib/tuda-ci/README.md b/macros/latex/contrib/tuda-ci/README.md
index 8e742ec83a..4f60b15476 100644
--- a/macros/latex/contrib/tuda-ci/README.md
+++ b/macros/latex/contrib/tuda-ci/README.md
@@ -2,7 +2,7 @@
Copyright (C) Marei Peischl <marei@peitex.de>, 2018–2021
- tuda-ci 2021/05/26 v3.15
+ tuda-ci 2021/06/03 v3.16
***************************************************************************
@@ -278,3 +278,5 @@ leaflets | DEMO-TUDaLeaflet.tex | tudaleaflet.cls
- add \inst to tudasciposter to support multiple affiliations
- fix calculation of headwidth with department=mecheng
- improve documentation on document margins for tudapub and tudapub based examples
+ * v3.16 (2021-06-03)
+ - adjust option expansion due to changes in the LaTeX kernel
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf
index 9ed4c9d115..61f14277e9 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaAnnouncement.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
index f611878bb0..c4df254ab5 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaBeamer.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf
index dfd41d0890..5e09114100 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaExercise.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
index a06e0c8c74..3d3234ba9c 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLeaflet.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf
index 1f3e44d832..8c430d1b8c 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaLetter.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
index 9950732c8c..e4d778763c 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPhD.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
index 0b93731820..78f66cd986 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPoster.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
index 6f8bcfa126..4060cb823c 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaPub.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
index 9e9cbe1b73..7f832bb6ba 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaReport.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
index 458459aa49..2d26814ba1 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaSciPoster.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
index 294d45f823..9a0f4acd7e 100644
--- a/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
+++ b/macros/latex/contrib/tuda-ci/doc/DEMO-TUDaThesis.pdf
Binary files differ
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex
index 86baadf7d7..a92c09c86a 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaAnnouncement.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaAnnouncement.tex' version 3.15 (2021/05/26),
+%% This is file `DEMO-TUDaAnnouncement.tex' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex
index 0d61d58e71..d41ec09c21 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBeamer.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaBeamer.tex' version 3.15 (2021/05/26),
+%% This is file `DEMO-TUDaBeamer.tex' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib
index f23ef2f42c..f60c07a49b 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaBibliography.bib
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaBibliography.bib' version 3.15 (2021/05/26),
+%% This is file `DEMO-TUDaBibliography.bib' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex
index ac7e5d454b..26cdeb5c56 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaExercise.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaExercise.tex' version 3.15 (2021/05/26),
+%% This is file `DEMO-TUDaExercise.tex' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
index 818cc2f7e6..171649509f 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaFromaddress.lco
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaFromaddress.lco' version 3.15 (2021/05/26),
+%% This is file `DEMO-TUDaFromaddress.lco' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex
index e7e1315117..fb71971345 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLeaflet.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaLeaflet.tex' version 3.15 (2021/05/26),
+%% This is file `DEMO-TUDaLeaflet.tex' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex
index bbf595a51e..eaa0b60f40 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaLetter.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaLetter.tex' version 3.15 (2021/05/26),
+%% This is file `DEMO-TUDaLetter.tex' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex
index f2e3d8d95b..22e5b70de8 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPhD.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaPhD.tex' version 3.15 (2021/05/26),
+%% This is file `DEMO-TUDaPhD.tex' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex
index 4b275abba4..66ba28640a 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPoster.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaPoster.tex' version 3.15 (2021/05/26),
+%% This is file `DEMO-TUDaPoster.tex' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex
index 2d2f1946ee..fe6b6e3216 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaPub.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaPub.tex' version 3.15 (2021/05/26),
+%% This is file `DEMO-TUDaPub.tex' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex
index c8f3d0df52..3836badbe9 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaReport.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaReport.tex' version 3.15 (2021/05/26),
+%% This is file `DEMO-TUDaReport.tex' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex
index da2c18840c..2780fec0c8 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaSciPoster.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaSciPoster.tex' version 3.15 (2021/05/26),
+%% This is file `DEMO-TUDaSciPoster.tex' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex
index 65bfd35a51..d6d903bd16 100644
--- a/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex
+++ b/macros/latex/contrib/tuda-ci/example/DEMO-TUDaThesis.tex
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaThesis.tex' version 3.15 (2021/05/26),
+%% This is file `DEMO-TUDaThesis.tex' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty
index 5e5689e764..2749f0bf1a 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamercolorthemeTUDa.sty
@@ -1,4 +1,4 @@
-%% This is file `beamercolorthemeTUDa.sty' version 3.15 (2021/05/26),
+%% This is file `beamercolorthemeTUDa.sty' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{beamercolorthemeTUDa}
[\filedate\space\fileversion]
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
index 7778b24938..a276fa4064 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerfontthemeTUDa.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerfontthemeTUDa.sty' version 3.15 (2021/05/26),
+%% This is file `beamerfontthemeTUDa.sty' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{beamerfontthemeTUDa}
[\filedate\space\fileversion]
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
index a23e64d81b..581bc18606 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerinnerthemeTUDa.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerinnerthemeTUDa.sty' version 3.15 (2021/05/26),
+%% This is file `beamerinnerthemeTUDa.sty' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\NeedsTeXFormat{LaTeX2e}
\ProvidesExplPackage{beamerinnerthemeTUDa}{\filedate}{\fileversion}{Inner~beamer~theme~of~tuda-ci}
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty
index 8749ea5290..b646a48bff 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerouterthemeTUDa.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerouterthemeTUDa.sty' version 3.15 (2021/05/26),
+%% This is file `beamerouterthemeTUDa.sty' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\NeedsTeXFormat{LaTeX2e}
\ProvidesExplPackage{beamerouterthemeTUDa}{\filedate}{\fileversion}{Outer~beamer~theme~of~tuda-ci}
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty
index 524561055d..5eec56c863 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa-mecheng.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerthemeTUDa-mecheng.sty' version 3.15 (2021/05/26),
+%% This is file `beamerthemeTUDa-mecheng.sty' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\RequirePackage{expl3}
\ProvidesExplPackage{beamerthemeTUDa-mecheng}{\filedate}{\fileversion}{specific tudabeamer configuration for the department of mechanical engineering}
diff --git a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty
index 1b1553d7cf..da07e3a984 100644
--- a/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty
+++ b/macros/latex/contrib/tuda-ci/tex/beamerthemeTUDa.sty
@@ -1,4 +1,4 @@
-%% This is file `beamerthemeTUDa.sty' version 3.15 (2021/05/26),
+%% This is file `beamerthemeTUDa.sty' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{beamerthemeTUDa}
[\filedate\space\fileversion\space beamer theme using the Corporate Design of TU Darmstadt]
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo
index e4ee466b67..3d69d9c001 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a0paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a0paper.clo' version 3.15 (2021/05/26),
+%% This is file `tuda-a0paper.clo' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\ProvidesExplFile{tuda-a0paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a0paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{125pt}{165pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo
index 3e048932ee..d376e2c66a 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a1paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a1paper.clo' version 3.15 (2021/05/26),
+%% This is file `tuda-a1paper.clo' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\ProvidesExplFile{tuda-a1paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a0paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{86pt}{120pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo
index 8ff84a57ed..a3f57b3b0c 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a2paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a2paper.clo' version 3.15 (2021/05/26),
+%% This is file `tuda-a2paper.clo' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\ProvidesExplFile{tuda-a2paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a0paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{65pt}{82pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo
index 763f212c2a..effd50311f 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a3paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a3paper.clo' version 3.15 (2021/05/26),
+%% This is file `tuda-a3paper.clo' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\ProvidesExplFile{tuda-a3paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a3paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{47pt}{61pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo
index fe1e4eca56..f780875c72 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a4paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a4paper.clo' version 3.15 (2021/05/26),
+%% This is file `tuda-a4paper.clo' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\ProvidesExplFile{tuda-a4paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a4paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{36pt}{47pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo b/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo
index a1726191f6..322f6fbc6e 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-a5paper.clo
@@ -1,4 +1,4 @@
-%% This is file `tuda-a5paper.clo' version 3.15 (2021/05/26),
+%% This is file `tuda-a5paper.clo' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\ProvidesExplFile{tuda-a5paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a5paper}
\cs_set:Nn \ptxcd_setup_title_sizes: {
\cs_set:Nn \ptxcd_title_fontsize: {{22pt}{28pt}}
diff --git a/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty b/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty
index edc1a52a04..57c59baa02 100644
--- a/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty
+++ b/macros/latex/contrib/tuda-ci/tex/tuda-pgfplots.sty
@@ -1,4 +1,4 @@
-%% This is file `tuda-pgfplots.sty' version 3.15 (2021/05/26),
+%% This is file `tuda-pgfplots.sty' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
% Special thanks to: Sebastian Schöps Institut Theorie Elektromagnetischer Felder (TEMF), TU Darmstadt
% The original version of this file has been inspired by the colorscheme in the Metropolis beamer theme by Matthias Vogelgesang https://github.com/matze/mtheme
\ProvidesPackage{tuda-pgfplots}[\filedate\space\fileversion\space tuda-ci pgfplots color schemes]
diff --git a/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls b/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls
index 1638f50476..96489f31ee 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudabeamer.cls
@@ -1,4 +1,4 @@
-%% This is file `tudabeamer.cls' version 3.15 (2021/05/26),
+%% This is file `tudabeamer.cls' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{tudabeamer}
[\filedate\space\fileversion\space]
@@ -44,8 +44,8 @@
\str_new:N \g_ptxcd_department_str
\keys_define:nn {ptxcd/beamer} {
accentcolor .code:n = \PassOptionsToPackage{accentcolor=#1}{tudacolors},
- colorframetitle .code:n = \PassOptionsToPackage{\l_keys_key_tl=#1}{beamercolorthemeTUDa}
- \PassOptionsToPackage{\l_keys_key_tl=#1}{beamerouterthemeTUDa},
+ colorframetitle .code:n = \exp_args:Nx \PassOptionsToPackage{\l_keys_key_tl=#1}{beamercolorthemeTUDa}
+ \exp_args:Nx \PassOptionsToPackage{\l_keys_key_tl=#1}{beamerouterthemeTUDa},
colorframetitle .default:n = true,
logo .code:n = \PassOptionsToPackage{logo=#1}{beamerouterthemeTUDa},
pdfa .bool_gset:N = \g_ptxcd_pdfa_bool,
diff --git a/macros/latex/contrib/tuda-ci/tex/tudacolors.def b/macros/latex/contrib/tuda-ci/tex/tudacolors.def
index 843631b68a..db447baad2 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudacolors.def
+++ b/macros/latex/contrib/tuda-ci/tex/tudacolors.def
@@ -1,4 +1,4 @@
-%% This is file `tudacolors.def' version 3.15 (2021/05/26),
+%% This is file `tudacolors.def' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\ProvidesFile{tudacolors.def}
[\filedate\space\fileversion\space Color definitions for tuda-ci]
diff --git a/macros/latex/contrib/tuda-ci/tex/tudacolors.sty b/macros/latex/contrib/tuda-ci/tex/tudacolors.sty
index 1e53382ac8..92e8030ed5 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudacolors.sty
+++ b/macros/latex/contrib/tuda-ci/tex/tudacolors.sty
@@ -1,4 +1,4 @@
-%% This is file `tudacolors.sty' version 3.15 (2021/05/26),
+%% This is file `tudacolors.sty' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplPackage{tudacolors}{\filedate}{\fileversion}{Color definition for TU Darmstadt's tuda-ci bundle}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls b/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls
index 9303c530ca..2aeae4f839 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudaexercise.cls
@@ -1,4 +1,4 @@
-%% This is file `tudaexercise.cls' version 3.15 (2021/05/26),
+%% This is file `tudaexercise.cls' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplClass{tudaexercise}
@@ -152,9 +152,9 @@
titlepage .code:n = {\msg_warning:nnn {tudapub} {titlepage-option-disabled} {#1}},
paper .choices:nn = {a0,a1,a2,a3,a4,a5,a6}{
\int_gset_eq:NN \g_ptxcd_paper_int \l_keys_choice_int
- \PassOptionsToPackage{paper=\l_keys_choice_tl}{tudarules}
- \PassOptionsToPackage{paper=\l_keys_choice_tl}{typearea}
- \PassOptionsToPackage{\l_keys_choice_tl paper}{geometry}
+ \exp_args:Nx \PassOptionsToPackage{paper=\l_keys_choice_tl}{tudarules}
+ \exp_args:Nx \PassOptionsToPackage{paper=\l_keys_choice_tl}{typearea}
+ \exp_args:Nx \PassOptionsToPackage{\l_keys_choice_tl paper}{geometry}
},
paper .initial:n = a4,
logofile .tl_gset:N = \g_ptxcd_logofile_tl,
diff --git a/macros/latex/contrib/tuda-ci/tex/tudafonts.sty b/macros/latex/contrib/tuda-ci/tex/tudafonts.sty
index 3815336425..1ea353f04e 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudafonts.sty
+++ b/macros/latex/contrib/tuda-ci/tex/tudafonts.sty
@@ -1,4 +1,4 @@
-%% This is file `tudafonts.sty' version 3.15 (2021/05/26),
+%% This is file `tudafonts.sty' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{tudafonts}
[\filedate\space\fileversion\space
diff --git a/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls b/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls
index b801cda1f1..ba91e39950 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudaleaflet.cls
@@ -1,4 +1,4 @@
-%% This is file `tudaleaflet.cls' version 3.15 (2021/05/26),
+%% This is file `tudaleaflet.cls' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplPackage{tudaleaflet}{\filedate}{\fileversion}{Leaflets using the Corporate Design of TU Darmstadt}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudaletter.cls b/macros/latex/contrib/tuda-ci/tex/tudaletter.cls
index ae2719e752..14b3dec695 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudaletter.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudaletter.cls
@@ -1,4 +1,4 @@
-%% This is file `tudaletter.cls' version 3.15 (2021/05/26),
+%% This is file `tudaletter.cls' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplClass{tudaletter}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo b/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo
index 2902767a13..be2276079e 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tudalettersize10pt.clo
@@ -1,4 +1,4 @@
-%% This is file `tudalettersize10pt.clo' version 3.15 (2021/05/26),
+%% This is file `tudalettersize10pt.clo' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg b/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg
index 6bdb3451f3..7280a31a39 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg
+++ b/macros/latex/contrib/tuda-ci/tex/tudamecheng.cfg
@@ -1,4 +1,4 @@
-%% This is file `tudamecheng.cfg' version 3.15 (2021/05/26),
+%% This is file `tudamecheng.cfg' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\RequirePackage{expl3}
\ProvidesExplFile{tudamecheng.cfg}
{\filedate}{\fileversion}{Special Features the department of mechanical engineering of Darmstadt's Corporate Design (tuda-ci)}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudaposter.cls b/macros/latex/contrib/tuda-ci/tex/tudaposter.cls
index 93a732bd30..4328cb9049 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudaposter.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudaposter.cls
@@ -1,4 +1,4 @@
-%% This is file `tudaposter.cls' version 3.15 (2021/05/26),
+%% This is file `tudaposter.cls' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplPackage{tudaposter}{\filedate}{\fileversion}{Poster Layouts for the Corporate Design of TU Darmstadt}
@@ -59,7 +59,7 @@
footheight .dim_gset:N = \g_ptxcd_footheight_dim,
paper .choices:nn = {a0,a1,a2,a3,a4}{
\int_gset_eq:NN \g_ptxcd_paper_int \l_keys_choice_int
- \PassOptionsToPackage{paper=\l_keys_choice_tl}{tudarules}
+ \exp_args:Nx \PassOptionsToPackage{paper=\l_keys_choice_tl}{tudarules}
\tl_gset_eq:NN \g_ptxcd_paper_tl \l_keys_choice_tl
},
fontsize .choice:,
diff --git a/macros/latex/contrib/tuda-ci/tex/tudapub.cls b/macros/latex/contrib/tuda-ci/tex/tudapub.cls
index a2f9bd08fa..5574218e28 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudapub.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudapub.cls
@@ -1,4 +1,4 @@
-%% This is file `tudapub.cls' version 3.15 (2021/05/26),
+%% This is file `tudapub.cls' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplClass{tudapub}
@@ -150,9 +150,9 @@
logo .initial:n = {body},
paper .choices:nn = {a0,a1,a2,a3,a4,a5,a6}{
\int_gset_eq:NN \g_ptxcd_paper_int \l_keys_choice_int
- \PassOptionsToPackage{paper=\l_keys_choice_tl}{tudarules}
- \PassOptionsToPackage{paper=\l_keys_choice_tl}{typearea}
- \PassOptionsToPackage{\l_keys_choice_tl paper}{geometry}
+ \exp_args:Nx \PassOptionsToPackage{paper=\l_keys_choice_tl}{tudarules}
+ \exp_args:Nx \PassOptionsToPackage{paper=\l_keys_choice_tl}{typearea}
+ \exp_args:Nx \PassOptionsToPackage{\l_keys_choice_tl paper}{geometry}
},
paper .initial:n = a4,
IMRAD .bool_gset:N = \g_ptxcd_IMRAD_bool,
diff --git a/macros/latex/contrib/tuda-ci/tex/tudarules.sty b/macros/latex/contrib/tuda-ci/tex/tudarules.sty
index e86d41923e..ed549312d2 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudarules.sty
+++ b/macros/latex/contrib/tuda-ci/tex/tudarules.sty
@@ -1,4 +1,4 @@
-%% This is file `tudarules.sty' version 3.15 (2021/05/26),
+%% This is file `tudarules.sty' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplPackage{tudarules}{\filedate}{\fileversion}{Creation of colored bars for tuda-ci bundle}
diff --git a/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls b/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls
index 9b0990a2bf..6a551813b6 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls
+++ b/macros/latex/contrib/tuda-ci/tex/tudasciposter.cls
@@ -1,4 +1,4 @@
-%% This is file `tudasciposter.cls' version 3.15 (2021/05/26),
+%% This is file `tudasciposter.cls' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplPackage{tudasciposter}{\filedate}{\fileversion}{Scientific Poster Layout for TU Darmstadt}
@@ -62,8 +62,8 @@
unknown .code:n = {\prop_gput:NVn \g_ptxcd_clsopts_prop \l_keys_key_tl {#1}},
paper .choices:nn = {a0,a1,a2,a3}{
\int_gset_eq:NN \g_ptxcd_paper_int \l_keys_choice_int
- \PassOptionsToPackage{paper=\l_keys_choice_tl}{tudarules}
- \PassOptionsToPackage{\l_keys_choice_tl paper}{geometry}
+ \exp_args:Nx \PassOptionsToPackage{paper=\l_keys_choice_tl}{tudarules}
+ \exp_args:Nx \PassOptionsToPackage{\l_keys_choice_tl paper}{geometry}
},
paper .initial:n = a0,
fontsize .tl_gset:N = \g_ptxcd_fontsize_tl,
diff --git a/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo b/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo
index 404b04a01f..3f923ae763 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo
+++ b/macros/latex/contrib/tuda-ci/tex/tudasize9pt.clo
@@ -1,4 +1,4 @@
-%% This is file `tudasize9pt.clo' version 3.15 (2021/05/26),
+%% This is file `tudasize9pt.clo' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
diff --git a/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg b/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg
index 6542186891..5e0b5b4f9c 100644
--- a/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg
+++ b/macros/latex/contrib/tuda-ci/tex/tudathesis.cfg
@@ -1,4 +1,4 @@
-%% This is file `tudathesis.cfg' version 3.15 (2021/05/26),
+%% This is file `tudathesis.cfg' version 3.16 (2021/06/03),
%% it is part of
%% TUDa-CI -- Corporate Design for TU Darmstadt
%% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
%%
%% ============================================================================
%%
-\def\fileversion{3.15}
-\def\filedate{2021/05/26}
+\def\fileversion{3.16}
+\def\filedate{2021/06/03}
\RequirePackage{expl3}
\ProvidesExplFile{tudathesis.cfg}
{\filedate}{\fileversion}{Special Features for publication type 'thesis' using TU Darmstadt's Corporate Design (tuda-ci)}
diff --git a/macros/optex/README b/macros/optex/README
index d3a5becec4..61c4698328 100644
--- a/macros/optex/README
+++ b/macros/optex/README
@@ -17,8 +17,14 @@ pkg/ ... external macros. Maybe, they can be created by other authors if
in the OpTeX documentation.
doc/ ... PDF version of the OpTeX documentation and sources.
-History:
-
+<1.03> Jun. 2021:
+ mte: Package for MicroTypographic Extensions released.
+ Erewhon: font family support added.
+ \rgbcmykmap for RGB-CMYK mapping introduced.
+ \table: sum of \tsizes allowed different from one.
+ doc: hyperlinks from Index created.
+ \url and \link macros re-written.
+ Bugs fixing.
<1.02> Apr. 2021
Location CTAN:macros/luatex/optex moved to CTAN:macros/optex (similarly for TDS).
NewComputerModern font support added.
diff --git a/macros/optex/base/alloc.opm b/macros/optex/base/alloc.opm
index 5d874134d4..13252cae70 100644
--- a/macros/optex/base/alloc.opm
+++ b/macros/optex/base/alloc.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \newdimen {Allocators for registers <2021-02-15>} % loaded in format
+\_codedecl \newdimen {Allocators for registers <2021-02-15>} % preloaded in format
\_doc -----------------------------
The limits are set first.
diff --git a/macros/optex/base/basic-macros.opm b/macros/optex/base/basic-macros.opm
index 4d465c3010..57393fc323 100644
--- a/macros/optex/base/basic-macros.opm
+++ b/macros/optex/base/basic-macros.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \sdef {Basic macros for OpTeX <2021-02-03>} % loaded in format
+\_codedecl \sdef {Basic macros for OpTeX <2021-05-16>} % preloaded in format
\_doc ------------------------------
\`\bgroup`, \`\egroup`, \`\empty`, \`\space`, \`\null` and \`\wlog`
@@ -51,7 +51,9 @@
\_def \_sdef #1{\_ea\_def \_csname#1\_endcsname}
\_def \_sxdef #1{\_ea\_xdef \_csname#1\_endcsname}
-\_def \_slet #1#2{\_ea\_let \_csname#1\_ea\_endcsname \_csname#2\_endcsname}
+\_def \_slet #1#2{\_ea\_let \_csname#1\_ea\_endcsname
+ \_ifcsname#2\_ea\_endcsname \_begincsname#2\_endcsname \_else \_undefined \_fi
+}
\_public \sdef \sxdef \slet ;
\_doc ------------------------------
@@ -123,6 +125,7 @@
\_endcode % -------------------------------------
+2021-05-16: \slet reimplemnted (to allow \slet{foo}{undefined}).
2021-02-03: \useit defined.
2021-01-22: \trycs: \ea added in order to be able to use cs with parameters
2021-01-08: \opwarning format changed (secondly, hope that conclusively)
diff --git a/macros/optex/base/cite-bib.opm b/macros/optex/base/cite-bib.opm
index 56954a4ee0..adef0eaef8 100644
--- a/macros/optex/base/cite-bib.opm
+++ b/macros/optex/base/cite-bib.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \cite {Cite, Biblioraphy <2021-04-13>} % loaded in format
+\_codedecl \cite {Cite, Biblioraphy <2021-04-13>} % preloaded in format
\_doc -----------------------------
Registers used by `\cite`, `\bib` macros are declared here.
@@ -280,7 +280,7 @@
\_def\usebib{\_usebib}
\_doc ------------------------------
- \_forwardlink\`\nobibwarning` `[<list of bib-labels>]`
+ \_fw\`\nobibwarning` `[<list of bib-labels>]`
declares a list of bib labels
which are not fully declared in `.bib` file but we want to suppress the
warning about it. List of bib labels are comma-separated case sensitive
diff --git a/macros/optex/base/colors.opm b/macros/optex/base/colors.opm
index bbda496761..23ec22dd9f 100644
--- a/macros/optex/base/colors.opm
+++ b/macros/optex/base/colors.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \colordef {Colors <2020-03-18>} % loaded in format
+\_codedecl \colordef {Colors <2021-05-28>} % preloaded in format
\_doc -----------------------------
We declare internal boolean value \`\_iflocalcolor` ad do
@@ -129,9 +129,12 @@
to they are in $[0,1]$ interval. The `\colordefFin` expands to the values
accumulated in Lua code `color_C`, `color_M`, `color_Y` and `color_K`.
The `\_douseK` applies \^`\useK` to CMYK components.
+ \nl
+ The `\_tocmyk:<rgb>` or `\_torgb:<cmyk>` control sequences (given by
+ \^`\rgbcmykmap`) have precedence.
\_cod -----------------------------
-\_def\_rgbtocmyk #1 #2 #3 ;{%
+\_def\_rgbtocmyk #1 #2 #3 ;{\_trycs{_tocmyk:#1 #2 #3}{%
\_ea \_stripzeros \_detokenize \_ea{\_directlua{
local kr = math.max(#1,#2,#3)
if (kr==0) then
@@ -140,13 +143,13 @@
tex.print(string.format('\_pcent.3f \_pcent.3f \_pcent.3f \_pcent.3f ;',
(kr-#1)/kr, (kr-#2)/kr, (kr-#3)/kr, 1-kr))
end
-}}}
-\_def\_cmyktorgb #1 #2 #3 #4 ;{%
+}}}}
+\_def\_cmyktorgb #1 #2 #3 #4 ;{\_trycs{_torgb:#1 #2 #3 #4}{%
\_ea \_stripzeros \_detokenize \_ea{\_directlua{
local kr = 1-#4
tex.print(string.format('\_pcent.3f \_pcent.3f \_pcent.3f ;',
(1-#1)*kr, (1-#2)*kr, (1-#3)*kr))
-}}}
+}}}}
\_def\_colorcrop{\_directlua{
local m=math.max(color_C, color_M, color_Y, color_K)
if (m>1) then
@@ -181,6 +184,19 @@
\_def\_stripzeroC #1 #2:{#1}
\_doc -----------------------------
+ \`\rgbcmykmap` `{<R> <G> <B>}`\,`{<C> <M> <Y> <K>}` declares mapping from
+ RGB to CMYK and from CMYK to RGB for given color. It has precedence
+ before general formulae used in the \^`\_rgbtocmyk` and \^`\_cmyktorgb`
+ macros. Note, that the values <R> <G> <B> <C> <M> <Y> <K> must be given
+ exacly in the same format as in \^`\setcmykcolor` and \^`\setrgbcolor`
+ parameters. For example, `0.5` or `.5` or `.50` are different values from
+ point of view of this mapping.
+ \_cod -----------------------------
+
+\_def\_rgbcmykmap#1#2{\_sxdef{_torgb:#2}{#1}\_sxdef{_tocmyk:#1}{#2}}
+\_public \rgbcmykmap ;
+
+ \_doc -----------------------------
The \`\rgbcolordef` and \`\cmykcolordef` use common macro
\`\_commoncolordef` with different first four parameters.
The `\_commoncolordef <selector><K><R><G><what-define>{<data>}` does the
@@ -373,7 +389,8 @@ The \^`\rgbcolordef` can be used to mix colors in additive color model RGB.
If \^`\onlyrgb` is declared, then \^`\colordef` works as \^`\rgbcolordef`.
If a CMYK to RGB or RGB to CMYK conversion is needed then
-the following simple formulae are used
+direct conversion of given color is used (if declared using
+\^`\rgbcmykmap``{<rgb>}{<cmyk>}`) or the following simple formulae are used
(ICC profiles are not supported):
$$
\displaylines{
@@ -390,5 +407,6 @@ and it is used in \^`\rgbcolordef` or if it is printed when \^`\onlyrgb` is decl
\_endinput
+2021-05-28 \rgbcmykmap introduced
2020-04-22 \replstring\tmpb{+ }{+}, {- }{-} added in \colordef, bug fixed
2020-03-18 introduced
diff --git a/macros/optex/base/doc.opm b/macros/optex/base/doc.opm
index ce571a9e81..643a283e7c 100644
--- a/macros/optex/base/doc.opm
+++ b/macros/optex/base/doc.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \printdoc {Macros for documentation printing <2020-04-28>}
+\_codedecl \printdoc {Macros for documentation printing <2021-05-15>} % loaded on demand by \load[doc]
\_doc -----------------------------
General decalarations.
@@ -34,6 +34,8 @@
\_doc -----------------------------
The listing mode is implemented here. The \`\maxlines`
is maximal lines of code printed in the listing mode.
+ The \`\_catcodedot` sets dot as letter in listngs (for package
+ documentation where `\.foo` sequeces exist).
\_cod -----------------------------
\_newcount \_maxlines \_maxlines=100000
@@ -45,9 +47,10 @@
\_typosize[8/10]
\_let\_printverbline=\_printcodeline
\_ttline=\_inputlineno
- \_setverb
+ \_setverb \_catcodedot
\_ifnum\_ttline<0 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi
\_adef{ }{\ }\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt
+ \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}%
\_relax \_ttfont
\_endlinechar=`^^J
\_def\_tmpb{\_start}%
@@ -57,27 +60,38 @@
\_def\_tmpa{\_empty#1}%
\_let\_next=\_readverbline
\_ea\_isinlist\_ea\_tmpa\_ea{\_Doc}\_iftrue \_let\_next=\_processinput \_fi
- \_ea\_isinlist\_ea\_tmpa\_ea{\_Endcode}\_iftrue \_endinput \_let\_next=\_processinput \_fi
+ \_ea\_isinlist\_ea\_tmpa\_ea{\_Doctab}\_iftrue \_let\_next=\_processinput \_fi
+ \_ea\_isinlist\_ea\_tmpa\_ea{\_Endcode}\_iftrue \_def\_next{\_processinput\_endinput}\_fi
\_ifx\_next\_readverbline \_addto\_tmpb{#1^^J}\_fi
\_next
}
{\_catcode`\ =13 \_gdef\_aspace{ }}\_def\_asp{\_ea\_noexpand\_aspace}
\_edef\_Doc{\_asp\_asp\_bslash _doc}
+\_bgroup \_lccode`~=`\^^I \_lowercase{\_egroup\_edef\_Doctab{\_noexpand~\_bslash _doc}}
\_edef\_Endcode{\_noexpand\_empty\_bslash _endcode}
+\_def\_catcodedot{\_catcode`\.=11 }
\_doc -----------------------------
- The scanner of the control sequences in the listing mode.
+ The scanner of the control sequences in the listing mode replaces all
+ occurrences of `\` by \`\_makecs`. This macro reads next tokens and
+ accumulates them to `\_tmpa` as long as they have category 11. It
+ means that `\_tmpa` includes the name of the following control sequence
+ when \fw\`\_makecsF` is run. The printing form of the control
+ sequence is set to `\_tmpb` and the test of existence `\,<csname>`is
+ performed. If it is true then active hyperlink is created. If not, then
+ the first `_` or `.` is removed from `\_tmpa` and the test is repeated.
\_cod -----------------------------
-\_def\_makecs{\_def\_tmp{}\_futurelet\_next\_makecsA}
+\_def\_makecs{\_def\_tmpa{}\_futurelet\_next\_makecsA}
\_def\_makecsA{\_ifcat a\_noexpand\_next \_ea\_makecsB \_else \_ea\_makecsF \_fi}
-\_def\_makecsB#1{\_addto\_tmp{#1}\_futurelet\_next\_makecsA}
-\_def\_makecsF{\_ifx\_tmp\_empty \_csstring\\%
- \_else \_ifcsname ,\_tmp\_endcsname \_link[cs:\_tmp]{\Blue}{\_csstring\\\_tmp}%
- \_else \_let\_next=\_tmp \_remfirstunderscore\_next
- \_ifx\_next\_empty \_let\_next=\_tmp \_fi
- \_ifcsname ,\_next\_endcsname \_link[cs:\_next]{\Blue}{\_csstring\\\_tmp}%
- \_else \_csstring\\\_tmp \_fi\_fi\_fi
+\_def\_makecsB#1{\_addto\_tmpa{#1}\_futurelet\_next\_makecsA}
+\_def\_makecsF{\_let\_tmpb=\_tmpa
+ \_ifx\_tmpa\_empty \_csstring\\%
+ \_else \_ifcsname ,\_tmpa\_endcsname \_trycs{el:\_tmpa}{\_intlink}%
+ \_else \_remfirstunderscoreordot\_tmpa
+ \_ifx\_tmpa\_empty \_let\_tmpa=\_tmpb \_fi
+ \_ifcsname ,\_tmpa\_endcsname \_trycs{el:\_tmpa}{\_intlink}%
+ \_else \_csstring\\\_tmpb \_fi\_fi\_fi
}
\_def\_processinput{%
\_let\_start=\_relax
@@ -96,8 +110,18 @@
\_endgroup \_ttskip
\_isnextchar\_par{}{\_noindent}%
}
-\_def\_remfirstunderscore#1{\_ea\_remfirstunderscoreA#1\_relax#1}
-\_def\_remfirstunderscoreA#1#2\_relax#3{\_if _#1\_def#3{#2}\_fi}
+\_def\_remfirstunderscoreordot#1{\_ea\_remfirstuordotA#1\_relax#1}
+\_def\_remfirstuordotA#1#2\_relax#3{\_if _#1\_def#3{#2}\_fi \_if\_string#1.\_def#3{#2}\_fi}
+
+ \_doc -----------------------------
+ By default the internal link is created by \`\_intlink` inside listing
+ mode. But you can define `\el:<csname>` which has precedence and it can
+ create an external link. The `\_tmpa` includes the name used in the link
+ and `\_tmpb` is the name to be printed. See \^`\_makecsF` above and the
+ example at the beginning of this section.
+ \_cod -----------------------------
+
+\_def\_intlink{\_link[cs:\_tmpa]{\Blue}{\_csstring\\\_tmpb}}
\_doc -----------------------------
The lines in the listing mode have a yellow background.
@@ -167,6 +191,16 @@
\_bf\_llaptoclink{#1}{#2}\_hfill \_pgn{#3}\_tocpar\_medskip}
\_doc -----------------------------
+ If this macro is loaded by \^`\load` then we need to initialize
+ catcodes using the `\_afteroad` macro.
+ \_cod -----------------------------
+
+\_def\_afterload{\_catcode`\<=13 \_catcode`\`=13 \_catcode`\.=11
+ \_wlog {doc.opm: catcodes of < and ` activated, catcode of . is letter.}%
+}
+\_catcode`.=11
+
+ \_doc -----------------------------
The \code{<something>} will be print as <something>.
\_cod -----------------------------
@@ -177,20 +211,11 @@
\_everyintt{\_catcode`\<=13 }
\_doc -----------------------------
- If this macro is loaded by \^`\load` then we need to initialize
- catcodes using the `\_afteroad` macro.
- \_cod -----------------------------
-
-\_def\_afterload{\_catcode`\<=13 \_catcode`\`=13 }
-
- \_doc -----------------------------
Main documentation points and hyperlinks to/from it.
Main documentation point: \code{\\`\\foo`}.
- User-level documentation point: \code{\\^`\\foo}, first occurence only.
+ User documentation point: \code{\\^`\\foo}, first occurence only.
The next occurrences are only links to the main documentation point.
- Link to user-level documentation point: \code{\\~`\\foo}.
- If user-level documentation point follows the main documentation point
- then use \code{\\_forwardlink\\`\\foo`}.
+ Link to user documentation point: \code{\\~`\\foo}.
\_cod -----------------------------
\_verbchar`
@@ -202,8 +227,6 @@
\_link[cs:^\_tmp]{\Red}{\_tt\_csstring\\\_tmp}\_else
{\_tt\Red\_csstring\\\_tmp}\_fi}%
}
-\_def\_forwardlink\`#1`{{\_slet{cs:^\_csstring#1}{relax}\`#1`}}
-
\_def\^`#1{\_leavevmode\_edef\_tmp{\_csstring#1}\_iindex{\_tmp}%
\_hbox{\_ifcsname cs:^\_tmp\_endcsname \_else \_dest[cs:^\_tmp]\_sxdef{cs:^\_tmp}{}\_fi
\_link[cs:\_tmp]{\Blue}{\_tt\_string#1}}%
@@ -216,6 +239,14 @@
\_futurelet\_next\_cslinkA
}
+ \_doc -----------------------------
+ The \`\fw` macro for forward links to user documentation point (given later)
+ is defined here.
+ \_cod -----------------------------
+
+\_def\_fw\`#1`{{\_slet{cs:^\_csstring#1}{}\`#1`}}
+\_public \fw ;
+
\_endcode %-------------------------------------------
\noindent
@@ -225,12 +256,13 @@ commands are defined after the file `doc.opm` is load by \^`\load`~`[doc]`.
The `\printcoc` starts reading of given `<filename>` from the second line.
The file is read in {\em the listing mode}.
The `\prindoctail` starts reading given `<filename>` from the
-first occurrence of the `\_encode`. The file is read
+first occurrence of the `\_endcode`. The file is read
in normal mode (like `\input <filename>`).
The {\em listing mode} prints the lines as a listing of a code. This mode is
finished when first {\visiblesp` \_doc`} occurs or first `\_endcode`
-occurs. At least two spaces must precede before such `\_doc`. On the other
+occurs. At least two spaces or one tab
+character must precede before such `\_doc`. On the other
hand, the `\_encode` must be at the left edge of the line without spaces.
If this rule is not met then the listing mode continues.
@@ -255,10 +287,6 @@ applied, the reading of the file opened by `\printdoc` is finished.
You cannot reach the end of the file (without `\_endcode`) in the listing
mode.
-The listing mode creates all control sequences which are listed in the
-index as an active link to the main documentation point of such control sequence
-and prints them in blue. Another text is printed in black.
-
The main documentation point is denoted by \code{\\`\\}`<sequence>`\code{`}
in red, for example \code{\\`\\foo`}.
The user documentation point is the first occurrence of
@@ -266,11 +294,63 @@ The user documentation point is the first occurrence of
There can be more such markups, all of them are hyperlinks to the main
documentation point.
And main documentation point is a hyperlink to the user documentation point
-if this point exists. Finally, the
+if this point precedes. Finally, the
\code{\\~`\\}`<sequence>`\code{`} (for example \code{\\~`\\foo`}) are
hyperlinks to the user documentation point.
+By default, the hyperink from main documentation point to the user
+documentation point is active only if it is backward link, i.e.\
+the main documentation point is given later. The reason is that we don't
+know if such user documentation point will exist when creating
+main documentation point and we don't want
+broken links. If you are sure that user documentation point will
+follow then use prefix \^`\fw` before~\code{\\`}, for example
+\code{\\fw\\`\\foo`} is main documentation point where the user
+documentation point is given later and forward hyperlink is created here.
+
+Control sequences and their page positions of main documentation points and user
+documentation points are saved to the index.
+
+The listing mode creates all control sequences which are listed in the
+index as an active link to the main documentation point of such control sequence
+and prints them in blue. Moreower, active links are control sequneces of the
+type `\_foo` or `\.foo` although the documentation mentions only `\foo`.
+Another text is printed in black.
+
+The listing mode is able to generate external links to another \OpTeX/-like
+documentation, if the macros `\,<csname>` and `\el:<csname>` are defined.
+The second macro should create a hyperlink using `\_tmpa`
+where the link name of the <csname> is saved and `\_tmpb` where the name of
+the <csname> to be printed is saved (`\tmpb` can include preceding `_` or
+`.` unlike `\_tmpa`). For example, suppose, that we have created
+`optex-doc.eref` file by:
+\begtt
+TEXINPUTS='.;$TEXMF/{doc,tex}//' optex optex-doc
+grep Xindex optex-doc.ref > optex-doc.eref
+\endtt
+The `.eref` file includes only `\_Xindex{<csname>}{}` lines from
+`optex-doc.ref` file. Then we can use following macros:
+\begtt
+\def\_Xindex#1#2{\sdef{,#1}{}\slet{el:#1}{optexdoclink}}
+\def\optexdoclink{%
+ \edef\extlink{url:\optexdocurl\csstring\#cs:\_tmpa}%
+ \_ea\_urlactive\_ea[\extlink]{\Cyan}{\csstring\\\_tmpb}}
+\def\optexdocurl{http://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf}
+\isfile{optex-doc.eref}\iftrue \input{optex-doc.eref}\fi
+\endtt
+All `\el:<csname>`, where <csname> is from `optex-doc.ref`,
+have the same meaning: `\optexdoclink` in this example. And
+`\optexdoclink` creates the external link in `\Cyan` color.
+
+\secc Implementation
+
\endinput
+2021-05-15 \_endinput shifted after \_processinput when \_endcode is scanned.
+2021-05-14 \_catcodedot, \_Doctab introduced.
+2021-05-13 \def\t added, bug fixed.
+2021-05-03 External links fom listing mode allowed.
+2021-05-02 \_forwadlink replaced by \_fw, to be more consistent.
+2021-05-02 \fw introduced, \.foo -> \foo allowed.
2020-04-28 \levevmode in \^ macros added (bug fixed)
-2020-04-22 released \ No newline at end of file
+2020-04-22 released
diff --git a/macros/optex/base/f-erewhon.opm b/macros/optex/base/f-erewhon.opm
new file mode 100644
index 0000000000..11fc55330e
--- /dev/null
+++ b/macros/optex/base/f-erewhon.opm
@@ -0,0 +1,31 @@
+%% This is part of the OpTeX project, see http://petr.olsak.net/optex
+
+\_famdecl [Erewhon] \Erewhon {Derived from Heuristica with slanted variants}
+ {\caps} {\rm \bf \it \bi \sl \bs} {Erewhon}
+ {[Erewhon-Regular]}
+ {\_def\_fontnamegen {[Erewhon-\_currV]:\_capsV\_fontfeatures}}
+
+\_wlog{\_detokenize{%
+Modifiers:^^J
+ \caps ...... caps & small caps^^J
+ \slant ..... slanted Regular, Bold^^J%
+Variants:^^J
+ \sl ... slanted Regular, \sb ... slanted Bold^^J
+}}
+
+\_moddef \resetmod {\_fsetV caps={} \_fvars Regular Bold Italic Bolditalic }
+\_moddef \caps {\_fsetV caps=+smcp;\_ffonum; }
+\_moddef \slant {\_fvars RegularSlanted BoldSlanted RegularSlanted BoldSlanted }
+\_private \slant ;
+\_famvardef \sl {\_slant\_rm}
+\_famvardef \bs {\_slant\_bf}
+
+\_initfontfamily % new font family must be initialized
+
+\_loadmath {[Erewhon-Math]}
+
+\_endcode
+
+See the file `f-heros.opm` for information about principles of such
+font-macro-files.
+
diff --git a/macros/optex/base/f-heros.opm b/macros/optex/base/f-heros.opm
index 2aec4b466a..2195774b88 100644
--- a/macros/optex/base/f-heros.opm
+++ b/macros/optex/base/f-heros.opm
@@ -33,6 +33,7 @@ Modifiers:^^J
\_let\_bsansdigits=\_bfdigits
\_let\_bisansvariables=\_bivariables
\_let\_bisansgreek=\_bigreek
+ \_Umathchardef \triangle "0 "5 "25B3 \_Umathcode "25B3 "0 "5 "25B3
\_fi
\_endcode
@@ -81,12 +82,12 @@ name) and to optional font features appended. The Font Selection
System uses this macro at the primitive level in the following sense:
\begtt \catcode`\<=13
-\font \<selector> {\_fontnamegen} \_sizespec
+\font \<font-switch> {\_fontnamegen} \_sizespec
\endtt
%
Note that the extended `\font` syntax
-`\font\<selector> {<font name>:<font features>} <size spec.>` or
-`\font\<selector> {[<font file name>]:<font features>} <size spec.>`
+`\font\<font-switch> {<font name>:<font features>} <size spec.>` or
+`\font\<font-switch> {[<font file name>]:<font features>} <size spec.>`
is expected here.
\seccc Example 1
diff --git a/macros/optex/base/f-lmfonts.opm b/macros/optex/base/f-lmfonts.opm
index 3b1e0d0c40..5356680e9d 100644
--- a/macros/optex/base/f-lmfonts.opm
+++ b/macros/optex/base/f-lmfonts.opm
@@ -115,7 +115,7 @@ Note: Text fonts support optical sizes, but LatinModern-Math only for scripts.^^
\_endcode
-\secc How to write the font family file with optical sizes
+\secc[optsizes] How to write the font family file with optical sizes
You can use \^`\_optname` macro when `\_fontnamegen` in expanded. This macro is fully
expandable and its input is `<internal-template>` and its output is a
diff --git a/macros/optex/base/fams-ini.opm b/macros/optex/base/fams-ini.opm
index 1d4d9f5c59..1d47504fc5 100644
--- a/macros/optex/base/fams-ini.opm
+++ b/macros/optex/base/fams-ini.opm
@@ -95,6 +95,9 @@
{ -,\caps: {\rm\bf\it\bi} }
\_famalias [BaskervilleF]
+\_faminfo [Erewhon] {Derived from Heuristica with slanted variants} {f-erewhon}
+ { -: {\rm\bf\it\bi\sl\bs} \caps: {\rm\bf\it\bi} }
+
\_famfrom {Georg Duffner, Octavio Pardo}
\_faminfo [EB Garamond] {Free variants of classical Garamond} {f-ebgaramond}
{ -,\caps,\medium,\medium\caps,\semibold,\semibold\caps: {\rm\bf\it\bi}
@@ -184,7 +187,7 @@ have the original Times purchased from Adobe then you can register your
declaration of Adobe's Times family in `fams-local.opm`. When a user writes
`\fontfam[Times]` then the original Times (not Termes) is used.
-The `fams-ini.opm` and `fams-local.opm` files use the macros
+The `fams-ini.opm` and `fams-local.opm` files can use the macros
\~`\_faminfo`, \~`\_famalias` and \~`\_famtext`. See the example from
`fams-ini.tex`:
diff --git a/macros/optex/base/fnotes.opm b/macros/optex/base/fnotes.opm
index 1445c57d4c..62912d0400 100644
--- a/macros/optex/base/fnotes.opm
+++ b/macros/optex/base/fnotes.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \fnote {Footnotes, marginal notes OpTeX <2020-05-26>} % loaded in format
+\_codedecl \fnote {Footnotes, marginal notes OpTeX <2020-05-26>} % preloaded in format
\_doc -----------------------------
\`\_gfnotenum` is a counter which counts footnotes globally in the whole document.\nl
diff --git a/macros/optex/base/fonts-opmac.opm b/macros/optex/base/fonts-opmac.opm
index 3ae2f0c5e1..025df761a5 100644
--- a/macros/optex/base/fonts-opmac.opm
+++ b/macros/optex/base/fonts-opmac.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \typosize {Font managing macros from OPmac <2021-03-10>} % loaded in format
+\_codedecl \typosize {Font managing macros from OPmac <2021-03-10>} % preloaded in format
\_doc -----------------------------
\`\typosize` `[<font-size>/<baselineskip>]` sets given parameters.
diff --git a/macros/optex/base/fonts-preload.opm b/macros/optex/base/fonts-preload.opm
index 712730436c..d56d5c0a78 100644
--- a/macros/optex/base/fonts-preload.opm
+++ b/macros/optex/base/fonts-preload.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \tenrm {Latin Modern fonts (EC) preloaded <2020-01-23>} % loaded in format
+\_codedecl \tenrm {Latin Modern fonts (EC) preloaded <2020-01-23>} % preloaded in format
% Only few text fonts are preloaded:
diff --git a/macros/optex/base/fonts-resize.opm b/macros/optex/base/fonts-resize.opm
index 7d1ce6cbed..68ebf763db 100644
--- a/macros/optex/base/fonts-resize.opm
+++ b/macros/optex/base/fonts-resize.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \setfontsize {Font resizing macros <2021-04-17>} % preloaded in format
+\_codedecl \setfontsize {Font resizing macros <2021-05-02>} % preloaded in format
\_doc -----------------------------
The \`\setfontsize` `{<sizespec>}` saves the `<sizespec>` to the \`\_sizespec` macro.
@@ -33,75 +33,6 @@
\_public \setfontsize \defaultoptsize ;
\_doc -----------------------------
- \`\_resizefont` `{<variant-name>}\<font switch>`,
- resizes the font given by the variant.
- The <variant-name> is `rm` or `bf` or `it` or `bi`.
- The new <font-switch> is declared (roughly speaking) by:
- \begtt \catcode`<=13
- \_font <font switch> = <fontname of>\_ten<variant-name> \_sizepec
- \endtt
- If the \^`\_fontselector` is defined then it has priority before <font-switch>
- and the font is loaded by:
- \begtt \catcode`<=13
- \_ea\_font \_fontselector = <fontname of>\_ten<variant-name> \_sizepec
- \endtt
- The font is loaded by \`\_doresizefont``<font switch>`. This macro has
- meaning \`\_doresizetfmfont` in TFM mode and it switches to
- \^`\_doresizeunifont` when \^`\initunifonts` is used.\nl
- The `<fontname of>` is generated by the `\fontname` \TeX/ primitive where
- \`\_rfontskipat` removes the `at<dimen>` part of the `\fontname` output.
- The `<fontname of>` is generated differently in OTF mode, see
- \^`\_doresizeunifont` macro.\nl
- The \`\_whatresize` is defined as `<variant-name>`.\nl
- The \^`\_fontloaded``<font switch>` is a macro which can be used for
- post-processing when a font is loaded.
- \_cod -----------------------------
-
-\_def\_resizefont#1#2{%
- \_edef\_whatresize{#1}%
- \_ifx \_fontselector \_undefined
- \_doresizefont#2\_relax \_ea\_fontloaded \_csname _ten#1\_endcsname
- \_else \_ea\_doresizefont \_fontselector \_ea\_fontloaded \_fontselector \_fi
- \_lastmagsize=\_zo
- \_slet{_tryload#1}{_relax}%
-}
-\_def\_doresizetfmfont#1{\_logfont{#1}%
- \_ea\_font\_ea#1\_ea\_rfontskipat
- \_fontname \_cs{_ten\_whatresize} \_relax\_space \_sizespec \_relax
-}
-\_let\_doresizefont=\_doresizetfmfont
-\_def\_logfont#1{} % default is no logging of used fonts
-
-\_def\_rfontskipat#1{\_ifx#1"\_ea\_rfskipatX \_else\_ea\_rfskipatN\_ea#1\_fi}
-\_def\_rfskipatX #1" #2\_relax{"\_whichtfm{#1}"}
-\_def\_rfskipatN #1 #2\_relax{\_whichtfm{#1}}
-
- \_doc -----------------------------
- If a font is loaded by \^`\_resizefont` or \^`\resizethefont` then the
- \`\_fontloaded``<font switch>` is called immediately after it. If the font
- is loaded first then its `\skewchar` is equal to $-1$. We run
- \`\_newfontloaded``<font switch>` and set `\skewchar=-2` in this case.
- A user can define a `\_newfontloaded` macro. We are sure that
- `\_newfontloaded` macro is called only once for each instance of the font
- given by its name, OTF features and size specification. The `\skewchar` value is
- globally saved to the font (like `\fontdimen`). If it is used in math
- typesetting then it is set to a positive value.\nl
- The `\_newfontloaded` should be defined for micro-typographic configuration of
- fonts, for example. See
- \ulink[http://petr.olsak.net/optex/optex-tricks.html\#fontexpand]{OpTeX/ trick 0058}.
- \_cod -----------------------------
-
-\_def\_fontloaded #1{\_ifnum\_skewchar#1=-1 \_skewchar#1=-2 \_newfontloaded#1\_fi}
-\_def\_newfontloaded #1{}
-
- \_doc -----------------------------
- \`\fontdef` `<font switch>{<modifiers><variant selector>}`
- opens group, runs `<modifiers><variant selector>` (i.e.\ it runs `#2` parameter).
- The font switch `#1` saved in the \`\_fontselector` macro is re-declared
- because the variant selector runs the \^`\_resizefont`. Now, we need to
- keep the current meaning of the font switch `#1` but we must leave the
- opened group. This is done by the \`\_keepmeaning` macro.
- \nl
\`\fontlet` `<font switch A> <font switch B> <size spec>` does
\begtt \catcode`\<=13
\font <font switch A> = <fontname> <sizespec>
@@ -109,18 +40,10 @@
The `<fontname>` is extracted using the primitive command `\_fontname <font switch B>`.
\_cod -----------------------------
-\_def \_fontdef #1#2{\_begingroup
- \_ifx\_fontselector\_undefined \_def\_fontselector{#1}\_fi
- \_reloading #2%
- \_ea \_keepmeaning \_fontselector \_endgroup
-}
\_def\_fontlet#1#2{\_ifx #2=\_ea\_fontlet \_ea#1\_else
- \_ea\_font\_ea#1\_ea\_rfontskipat\_fontname#2 \_relax\_space \_fi
+ \_ea\_font\_ea#1\_ea\_rfontskipat\_fontname#2 \_relax\_space \_fi
}
-\_def \_keepmeaning #1#2{\_global\_let\_keepmeaningdata=#1%
- #2\_let#1=\_keepmeaningdata \_global\_let\_keepmeaningdata=\_undefined
-}
-\_public \fontdef \fontlet ;
+\_public \fontlet ;
\_doc -----------------------------
\`\newcurrfontsize` `<size spec>` sets current font size to the `<size spec>`
@@ -144,39 +67,6 @@
\_public \newcurrfontsize \resizethefont ;
\_doc -----------------------------
- The variant selector is defined by `\protected\def\XX{\_tryloadXX \_tenXX}`
- The `\_tryloadXX` can be in `\_relax` state if no font modifiers were
- declared. But normally it does \^`\_resizefont``{XX}\tenXX`. This meaning
- is activated by the \`\_reloading` macro.
- \_cod -----------------------------
-
-\_def\_reloading{\_loadf{rm}\_tenrm \_loadf{bf}\_tenbf
- \_loadf{it}\_tenit \_loadf{bi}\_tenbi
-}
-\_def\_loadf#1#2{\_sdef{_tryload#1}{\_ifmmode \_else \_resizefont{#1}#2\_fi}}
-\_def\_tryloadtt{\_resizefont{tt}\_tentt} % only in TFM mode
-
-\_let\_tryloadrm=\_relax
-\_let\_tryloadbf=\_relax
-\_let\_tryloadit=\_relax
-\_let\_tryloadbi=\_relax
-
- \_doc ----------------------------
- The font selection system allows to use \`\currvar`
- instead explicitly specified variant selector. The current variant
- is extracted from `\the\font` output which could be `\_tenXX` control
- sequence. Then `\currvar` expands to `\_rm` or `\_it` etc.
- \_cod ----------------------------
-
-\_protected \_def \_currvar{\_cs{_currvar:\_ea \_csstring \_the\_font}}
-\_sdef{_currvar:_tenrm}{\_rm}
-\_sdef{_currvar:_tenbf}{\_bf}
-\_sdef{_currvar:_tenit}{\_it}
-\_sdef{_currvar:_tenbi}{\_bi}
-\_sdef{_currvar:_tentt}{\_tt}
-\_public \currvar ;
-
- \_doc -----------------------------
The \`\_regtfm` `<font id> <optical size data>`
saves the <optical size data> concerned to `<font id>`.
The `<optical size data>` is in the form as shown below in the code where
@@ -232,14 +122,17 @@
\_regtfm lmri 0 ec-lmri7 7.5 ec-lmri8 8.5 ec-lmri9 9.5 ec-lmri10 11.1 ec-lmri12 *
\_regtfm lmtt 0 ec-lmtt8 8.5 ec-lmtt9 9.5 ec-lmtt10 11.1 ec-lmtt12 *
-\_setfontsize {at10pt} % default font size
-
\_endcode %---------------------------------------------------
\sec[setfontsize] Scaling fonts in text mode (low-level macros)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+This section describes single part of Font Selection System: resizing fonts
+to various sizes. This feature is available in both modes: TFM mode
+(initialized when format starts) and OTF mode (after \~`\fontfam` or
+\~`\initunifonts` is used).
+
\secc The `\setfontsize` macro
The \^`\setfontsize` `{<size spec>}`
@@ -310,28 +203,6 @@ these features by the \^`\initunifonts` command explicitly, for example:
\cyklop The 12 pt text is here
\endtt
-\secc[fontdef] The \code{\\fontdef} declarator
-
-You can declare `\<newfont>` by the \~`\fontdef` command.
-
-\begtt \catcode`\<=13
- \fontdef \<newfont> {<font modifiers> \<variant-selector>}
- example:
- \fontdef \bigfont {\setfontsize{at15pt}\bf}
-\endtt
-%
-This command runs `<font modifiers> \<variant-selector>` in an internal group and sets the
-resulting selected font as `\<newfont>`.
-
-The resulting `\<newfont>` declared by \~`\fontdef` is \"fixed font switch"
-independent of \^`\setfontsize` and other font modifiers. More exactly, it is
-a fixed font switch when it is used but it can depend on the current font
-modifiers and font family and given font modifiers when it is declared.
-
-The parameter of the \~`\fontdef` macro must be exactly finished by the
-variant selector. More information about font modifiers
-and variant selectors are in the section~\ref[fontsystem].
-
\secc[fontlet] The \code{\\fontlet} declarator
We have another command for scaling: \^`\fontlet` which can resize
@@ -370,13 +241,13 @@ of the `\defaultoptsize` register and such font is scaled by the specified
Font collections with optical sizes must be registered by the
\^`\_regtfm` for `tfm` files or \^`\_regoptsizes` for Unicode fonts.
-\OpTeX/ registers 8bit Latin Moder fonts in the format (`fonts-resize.opm` file)
+\OpTeX/ registers 8bit Latin Modern fonts in the format
and OTF Latin Modern fonts in the `f-lmfonts.opm` file.
-
-\secc Implementation notes
+See also section~\ref[optsizes].
\_endinput
+2021-05-02 better concept of doc, moving parts to fonts-select
2021-04-17 \_fontloaded, \_newfontloaded introduced
2020-04-17 \resizethefont introduced
2020-03-17 released
diff --git a/macros/optex/base/fonts-select.opm b/macros/optex/base/fonts-select.opm
index eab114fcc4..5dab510453 100644
--- a/macros/optex/base/fonts-select.opm
+++ b/macros/optex/base/fonts-select.opm
@@ -1,6 +1,131 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \fontfam {Fonts selection system <2021-04-22>} % preloaded in format
+\_codedecl \fontfam {Fonts selection system <2021-05-23>} % preloaded in format
+
+ \_doc -----------------------------
+ The variant selectors \^`\rm`, \^`\bf`, \^`\it`, \^`\bi`, \^`\tt`
+ are defined (roughly speaking) by
+ \begtt \catcode`\<=13
+ \def\<XX> {\_tryload<XX>\_ten<XX>}
+ \endtt
+ where <XX> is \"internal variant name" `rm` or `bf` or `it` or `bi` or `tt`.
+ There are five \"internal font switchers" `\_tenrm`, `\_tenbf`, `\_tenit`,
+ `\_tenbi` and `\_tentt`. They are used almost for all fonts selected by the Fonts
+ Selection System. For example, `\_tenbf` is the switcher for bold variant of
+ the current family in the current font context. The \^`\bf` macro is defined as
+ `\_tryloadbf \_tenbf`. If the font context (font family, font size, features)
+ is not changed, then `\_tryloadbf` is `\relax` and `\_tenbf` font switcher selects
+ given font. If the font context is changed, then `\_tryloadbf` is re-defined (see
+ \^`\_reloading` macro) to load new bold varinat of the font using \^`\_resizefont`
+ The loaded font is saved to `\_tenbf` switcher and `\_tryloadbf` returns
+ back to the `\relax` meaning. So, `\bf` macro loads
+ new font with current font context and then selects it by `\_tenbf`
+ selector. The word \"ten" is used here
+ only for historical reason; the font can be at arbitrary size.
+ \nl
+ The \`\_reloading` macro is run whenever font context is changed.
+ It activates `\_tryload<XX>` for `<XX>` in `rm`, `bf`, `it` and `bi`.
+ The \`\_loadf``{<XX>}\ten<XX>` is processed for this.
+ \nl
+ The \`\_tryloadtt` is implemented differently because we want to keep
+ family independence for `\tt` macro, see section~\ref[tt].
+ So, `\_tryloadtt` is defined constantly as \"loading `\tt` font" and it is
+ not re-defined to `\relax`. On the other hand, `\_tryloadtt` is
+ re-defined in the \^`\initunifonts` macro or when used
+ \~`\famvardef``\tt`.
+ \_cod -----------------------------
+
+\_def\_reloading{\_loadf{rm}\_tenrm \_loadf{bf}\_tenbf \_loadf{it}\_tenit \_loadf{bi}\_tenbi}
+\_def\_loadf#1#2{\_sdef{_tryload#1}{\_ifmmode \_else \_resizefont{#1}#2\_fi}}
+\_def\_tryloadtt{\_resizefont{tt}\_tentt} % only in TFM mode
+
+\_let\_tryloadrm=\_relax
+\_let\_tryloadbf=\_relax
+\_let\_tryloadit=\_relax
+\_let\_tryloadbi=\_relax
+
+ \_doc ----------------------------
+ The Font Selection system allows to use \`\currvar`
+ instead explicitly specified variant selector. The current variant
+ is extracted from `\the\font` output which could be `\_ten<XX>` control
+ sequence. Then `\currvar` expands to `\_rm` or `\_it` etc.
+ \_cod ----------------------------
+
+\_protected \_def \_currvar{\_cs{_currvar:\_ea \_csstring \_the\_font}}
+\_sdef{_currvar:_tenrm}{\_rm}
+\_sdef{_currvar:_tenbf}{\_bf}
+\_sdef{_currvar:_tenit}{\_it}
+\_sdef{_currvar:_tenbi}{\_bi}
+\_sdef{_currvar:_tentt}{\_tt}
+\_public \currvar ;
+
+ \_doc -----------------------------
+ The \`\_resizefont` `{<variant-name>}\<font switch>` is the heart of the
+ Fonts Selection System. It resizes the font given by the variant with
+ respect to the current font context and sets a new <font-switch>.
+ The <variant-name> is `rm` or `bf` or `it` or `bi` or `tt`.
+ The new <font-switch> is declared (roughly speaking) by:
+ \begtt \catcode`<=13
+ \_font <font switch> = <fontname of>\_ten<variant-name> \_sizepec % in TFM mode
+ \_font <font switch> = {\_fontnamegen} \_sizespec % in OTF mode
+ \endtt
+ The font is loaded by \`\_doresizefont``<font switch>`. This macro has
+ meaning \`\_doresizetfmfont` in TFM mode (default in format) and it
+ switches to \^`\_doresizeunifont` when \^`\initunifonts` is used.\nl
+ The `<fontname of>` is generated by the `\fontname` \TeX/ primitive where
+ \`\_rfontskipat` removes the `at<dimen>` part of the `\fontname` output.\nl
+ The \`\_whatresize` is defined as `<variant-name>`.\nl
+ The \^`\_fontloaded``<font switch>` is a macro which can be used for
+ post-processing when a font is loaded.
+ \_cod -----------------------------
+
+\_def\_resizefont#1#2{%
+ \_edef\_whatresize{#1}\_doresizefont#2\_relax \_fontloaded #2%
+ \_lastmagsize=\_zo
+ \_if t\_ignoresecond#1\_else \_slet{_tryload#1}{_relax}\_fi
+}
+\_def\_doresizetfmfont#1{\_logfont{#1}%
+ \_ea\_font\_ea#1\_ea\_rfontskipat
+ \_fontname \_cs{_ten\_whatresize} \_relax\_space \_sizespec \_relax
+}
+\_let\_doresizefont=\_doresizetfmfont
+\_def\_logfont#1{} % default is no logging of used fonts
+
+\_def\_rfontskipat#1{\_ifx#1"\_ea\_rfskipatX \_else\_ea\_rfskipatN\_ea#1\_fi}
+\_def\_rfskipatX #1" #2\_relax{"\_whichtfm{#1}"}
+\_def\_rfskipatN #1 #2\_relax{\_whichtfm{#1}}
+
+ \_doc -----------------------------
+ \`\_doresizeunifont``<font-switch>` implements the OTF mode of
+ loading fonts \^`\_doresizefont`.
+ There is a fallback to TFM mode if \^`\_fontnamegen` is not defined.\nl
+ The \^`\_fontnamegen` expands to the font name/file:font-features
+ depending on the current font context.
+ \_cod -----------------------------
+
+\_def\_doresizeunifont #1{\_logfont{#1}%
+ \_ifx\_fontnamegen\_undefined \_doresizetfmfont#1\_else
+ \_font#1={\_fontnamegen} \_sizespec \_relax \_setwsp#1\_relax
+ \_fi
+}
+
+ \_doc -----------------------------
+ If a font is loaded by \^`\_resizefont` or \^`\resizethefont` then the
+ \`\_fontloaded``<font switch>` is called immediately after it. If the font
+ is loaded first then its `\skewchar` is equal to $-1$. We run
+ \`\_newfontloaded``<font switch>` and set `\skewchar=-2` in this case.
+ A user can define a `\_newfontloaded` macro. We are sure that
+ `\_newfontloaded` macro is called only once for each instance of the font
+ given by its name, OTF features and size specification. The `\skewchar` value is
+ globally saved to the font (like `\fontdimen`). If it is used in math
+ typesetting then it is set to a positive value.\nl
+ The `\_newfontloaded` should be defined for micro-typographic configuration of
+ fonts, for example. See
+ \ulink[http://petr.olsak.net/optex/optex-tricks.html\#fontexpand]{OpTeX/ trick 0058}.
+ \_cod -----------------------------
+
+\_def\_fontloaded #1{\_ifnum\_skewchar#1=-1 \_skewchar#1=-2 \_newfontloaded#1\_fi}
+\_def\_newfontloaded #1{}
\_doc -----------------------------
\`\initunifonts` macro extends \LuaTeX's font capabalities,
@@ -10,30 +135,25 @@
from \LaTeX's `luatexbase` namespace, we provide our own replacements.
Moreover, `\initunifont` switches with
the \^`\_doresizefont` macro to OTF mode which is represented by the
- macro \`\_doresizeunifont`. This mode includes
- a fallback to TFM mode if \^`\_fontnamegen` is not defined.
- Finally, `\initunifonts` sets itself to relax because we don't want to do
+ macro \^`\_doresizeunifont`.
+ Finally, \^`\initunifonts` sets itself to relax because we don't want to do
this work twice.\nl
- \`\_ttunifont` is default font for `\tt` variant if
- `f-lmfonts.opm` (or another font file where `\tt` is declared) is not loaded.
+ \`\_ttunifont` is default font for `\tt` variant.
+ User can re-define it or use \^`\famvardef``\tt`.
\_cod -----------------------------
\_def\_initunifonts {%
- \directlua{%
+ \_directlua{%
require('luaotfload-main')
luaotfload.main()
}%
\_gdef\_rfskipatX ##1" ##2\_relax{"##1"}%
\_global\_let \_doresizefont=\_doresizeunifont
- \_gdef\_tryloadtt {\_fontdef\_tentt{\_let\_fontnamegen=\_ttunifont\_rm}}%
+ \_gdef\_tryloadtt {\_begingroup \_let\_fontnamegen\_ttunifont % \tt uses \_ttunifont
+ \_resizefont{tt}\_tentt\_relax \_ea\_endgroup \_ea\_let \_ea\_tentt \_the\_tentt}%
\_global\_let \_initunifonts=\_relax % we need not to do this work twice
\_global\_let \initunifonts=\_relax
}
-\_gdef\_doresizeunifont #1{\_logfont{#1}%
- \_ifx\_fontnamegen\_undefined \_doresizetfmfont#1\_else
- \_font#1={\_fontnamegen} \_sizespec \_relax \_setwsp#1\_relax
- \_fi
-}
\_def\_ttunifont{[lmmono10-regular]:\_fontfeatures-tlig;}
\_public \initunifonts ;
@@ -72,31 +192,6 @@
}
\_doc -----------------------------
- \`\_regoptsizes` `<internal-template> <left-output>?<right-output> <resizing-data>`
- prepares data for using by the \`\_optname` `<internal-template>` macro.
- The data are saved to the `\_oz:<internal-template>` macro.
- When the `\_optname` is expanded then the data are scanned by the macro
- \`\_optnameA` `<left-output>?<right-output> <mid-output> `\code{<}`<size>`
- in the loop.\nl
- \`\_optfontalias` `{<template A>}{<template B>}` is defined as
- `\let\_oz:<templateA>=\_oz:<templateB>`.
- \_cod -----------------------------
-
-\_def\_regoptsizes #1 #2?#3 #4*{\_sdef{_oz:#1}{#2?#3 #4* }}
-\_def\_optname #1{\_ifcsname _oz:#1\_endcsname
- \_ea\_ea\_ea \_optnameA \_csname _oz:#1\_ea\_endcsname
- \_else \_failedoptname{#1}\_fi
-}
-\_def\_failedoptname #1{optname-fails:(#1)}
-\_def\_optnameA #1?#2 #3 <#4 {\_ifx*#4#1#3#2\_else
- \_ifdim\_optsize<#4pt #1#3#2\_optnameC
- \_else \_afterfifi \_optnameA #1?#2 \_fi\_fi
-}
-\_def\_optnameC #1* {\_fi\_fi}
-\_def\_afterfifi #1\_fi\_fi{\_fi\_fi #1}
-\_def\_optfontalias #1#2{\_slet{_oz:#1}{_oz:#2}}
-
- \_doc -----------------------------
\`\_fvars` `<rm-template> <bf-template> <it-template> <bi-template>`
saves data for usage by the `\_currV` macro. If a template is only dot
then previous template is used (it can be used if the font family doesn't
@@ -199,10 +294,40 @@
\_public \moddef ;
\_doc -----------------------------
- The \`\famvardef` `\<XX> {<data>}`
+ \`\fontdef` `<font-switch> {<data>}` does:
+ \begtt \catcode`\<=13
+ \begingroup <data> \ea\endgroup \ea\let \ea<font-switch> \the\font
+ \endtt
+ It means that font modifiers used in <data> are applied in the group and the
+ resulting selected font (current at the end of the group) is set to the
+ <font-switch>.
+ We want to declare <font-switch> in its real name directly by `\font` primitive in
+ order to save this name for reporting later (in overfull messages, for
+ example). This is the reason why \^`\_loadf` is re-defined locally here.
+ The <variant selector> used in <data> expands to `\_tryload<XX> \_ten<XX>`.
+ The modified `\_tryload<XX>`
+ removes `\_ten<XX>` and does `\_resizefont{<XX>}<font-swith><font-switch>`,
+ i.e.\ a font is loaded using real `<font-switch>` name and then it is selected
+ as the current font.
+ \_cod -----------------------------
+
+\_def\_fontdef #1#2{\_begingroup
+ \_def\_loadf##1##2{\_sdef{_tryload##1}####1{\_resizefont{##1}#1#1}}%
+ \_reloading \_let\_reloading=\_relax
+ #2\_ea\_endgroup \_ea\_let \_ea#1\_the\_font
+}
+\_public \fontdef ;
+
+ \_doc -----------------------------
+ The \`\famvardef` `\<XX> {<data>}` does, roughly speaking:
+ \begtt \catcode`\<=13
+ \def \<XX> {\fontdef\_ten<XX> {<data>}\_ten<XX>}
+ \endtt
+ but the macro `\<XX>` is declared as family-dependent.
+ So, the real \^`\famvardef` `\<XX> {<data>}`
uses analogical trick like \^`\moddef` with
- the \^`\_famdepend` macro. The auxiliary
- \`\_famvardefA` `\<XX> \_ten<XX> \_tryload<XX> {<data>}` is used.
+ the \^`\_famdepend` macro. The \^`\famvardef` loads
+ the auxiliary \`\_famvardefA` `\<XX> \_ten<XX> \_tryload<XX> {<data>}`.
It does:
\begitems
* `\def \_tryload:<currfam>:<XX> {`\^`\fontdef`` \_ten<XX> {<data>}}` loads font `\_ten<XX>`,
@@ -213,6 +338,9 @@
`\famvardef\tt` behaves somewhat differently: it doesn't re-define the
`\tt` macro which is defined as `\_tryloadtt \_tentt` in sections~\ref[math-preload]
and~\ref[unimath-codes]. It only re-defines the internal `\_tryloadtt` macro.
+ Note, that you cannot use `\tt` inside `\famvardef\tt`. So, new `\tt`
+ macro does not load \^`\_ttunifont` but uses font from a standard variant
+ rm, bf, it or bi with given font context.
\_cod -----------------------------
\_def\_famvardef#1{\_edef\_tmp{\_csstring#1}%
@@ -339,25 +467,34 @@
\_doc -----------------------------
The font features are managed in the \`\_fontfeatures` macro.
- They have their implicit values saved in the \`\_defaultfontfeatures`
- and the \`\setff` `{<features>}`
- can add next font features. If there is the same font feature as the newly
- added one then the old value is removed from the `\_fontfeatures` list.
+ It expands to
+ \begitems
+ * \`\_defaultfontfeatures` -- used for each font,
+ * \`\_ffadded` -- features added by \^`\setff`,
+ * \`\_ffcolor` -- features added by \^`\setfontcolor`,
+ * \`\_ffletterspace` -- features added by \^`\setletterspace`,
+ * \`\_ffwordspace` -- features added by \^`\setwordspace`.
+ \enditems
+ The macros \^`\_ffadded`, \^`\_ffcolor`, \^`\_ffletterspace`,
+ \^`\_ffwordspace` are empty by default.
\_cod -----------------------------
+\_def \_fontfeatures{\_defaultfontfeatures\_ffadded\_ffcolor\_ffletterspace\_ffwordspace}
\_def \_defaultfontfeatures {+tlig;}
+\_def \_ffadded{}
+\_def \_ffcolor{}
+\_def \_ffletterspace{}
+\_def \_ffwordspace{}
+
+ \_doc -----------------------------
+ The \`\setff` `{<features>}` adds next font features to \^`\_ffadded`.
+ Usage \^`\setff{}` resets empty set of all \^`\_ffadded` features.
+ \_cod -----------------------------
+
\_def \_setff #1{%
- \_ifx^#1^\_let \_fontfeatures=\_defaultfontfeatures
- \_else \_edef\_fontfeatures{\_fontfeatures #1;}\_fi
+ \_ifx^#1^\_def\_ffadded{}\_else \_edef\_ffadded{\_ffadded #1;}\_fi
\_reloading
}
-\_setff {} % default font features: +tlig;
-\_def\_removefeature #1{%
- \_isinlist\_fontfeatures{#1}\_iftrue
- \_def\_tmp ##1#1##2;##3\_relax{\_def\_fontfeatures{##1##3}}%
- \_ea \_tmp \_fontfeatures \_relax
- \_fi
-}
\_public \setff ;
\_doc -----------------------------
@@ -370,22 +507,18 @@
`\fontdimen` registers).
\_cod -----------------------------
-\_def\_savedfontcolor{}
-\_def\_savedletterspace{}
-\_def\_savedwsp{}
-
-\_def \_setfontcolor #1{\_removefeature{color=}%
- \_edef\_tmp{\_calculatefontcolor{#1}}%
- \_ifx\_tmp\_empty \_else \_edef\_fontfeatures{\_fontfeatures color=\_tmp;}\_fi
- \_reloading
+\_def \_setfontcolor #1{%
+ \_edef\_tmp{\_calculatefontcolor{#1}}%
+ \_ifx\_tmp\_empty \_def\_ffcolor{}\_else \_edef\_ffcolor{color=\_tmp;}\_fi
+ \_reloading
}
-\_def \_setletterspace #1{\_removefeature{letterspace=}%
- \_if^#1^\_else \_edef\_fontfeatures{\_fontfeatures letterspace=#1;}\_fi
- \_reloading
+\_def \_setletterspace #1{%
+ \_if^#1^\_def\_ffletterspace{}\_else \_edef\_ffletterspace{letterspace=#1;}\_fi
+ \_reloading
}
\_def \_setwordspace #1{%
- \_if^#1^\_def\_setwsp##1{}\_removefeature{+Ws}%
- \_else \_def\_setwsp{\_setwspA#1/}\_setff{+Ws}\_fi
+ \_if^#1^\_def\_setwsp##1{}\_def\_ffwordspace{}%
+ \_else \_def\_setwsp{\_setwspA#1/}\_def\_ffwordspace{+Ws;}\_fi
\_reloading
}
\_def\_setwsp #1{}
@@ -402,6 +535,33 @@
\_public \setfontcolor \setletterspace \setwordspace ;
+ \_doc -----------------------------
+ \`\_regoptsizes` `<internal-template> <left-output>?<right-output> <resizing-data>`
+ prepares data for using by the \`\_optname` `<internal-template>` macro.
+ The data are saved to the `\_oz:<internal-template>` macro.
+ When the `\_optname` is expanded then the data are scanned by the macro
+ \`\_optnameA` `<left-output>?<right-output> <mid-output> `\code{<}`<size>`
+ in the loop.\nl
+ \`\_optfontalias` `{<template A>}{<template B>}` is defined as
+ `\let\_oz:<templateA>=\_oz:<templateB>`.
+ \_cod -----------------------------
+
+\_def\_regoptsizes #1 #2?#3 #4*{\_sdef{_oz:#1}{#2?#3 #4* }}
+\_def\_optname #1{\_ifcsname _oz:#1\_endcsname
+ \_ea\_ea\_ea \_optnameA \_csname _oz:#1\_ea\_endcsname
+ \_else \_failedoptname{#1}\_fi
+}
+\_def\_failedoptname #1{optname-fails:(#1)}
+\_def\_optnameA #1?#2 #3 <#4 {\_ifx*#4#1#3#2\_else
+ \_ifdim\_optsize<#4pt #1#3#2\_optnameC
+ \_else \_afterfifi \_optnameA #1?#2 \_fi\_fi
+}
+\_def\_optnameC #1* {\_fi\_fi}
+\_def\_afterfifi #1\_fi\_fi{\_fi\_fi #1}
+\_def\_optfontalias #1#2{\_slet{_oz:#1}{_oz:#2}}
+
+\_setfontsize {at10pt} % default font size
+
\_endcode %---------------------------------------------------
@@ -532,7 +692,7 @@ family selectors and defined font macros doing something with fonts.
* Font switches can be decared by `\font` primitive (see
section~\ref[fontprimitive]) or by \^`\fontlet` command (see
section~\ref[fontlet]) or by \~`\fontdef` command (see
- sections~\ref[fontdef2] and~\ref[fontdef]).
+ sections~\ref[fontdef2]).
When the font switches are used then they select the given font independently
of the current font context. They can be used
in `\output` routine (for example) because we need to set fixed fonts
@@ -566,14 +726,19 @@ All declaration commands mentioned here: `\font`, `\fontlet`, `\fontdef`, `\famv
\secc[fontdef2] The `\fontdef` declarator in detail
-The general format for \^`\fontdef` usage is
+You can declare `\<font-switch>` by the \^`\fontdef` command.
\begtt \catcode`\<=13
-\fontdef\<font switch> {\<family selector> <font modifiers> \<variant selector>}
+\fontdef\<font-switch> {\<family selector> <font modifiers> \<variant selector>}
\endtt
%
where `\<family selector>` and `<font modifiers>` are optional and
`\<variant selector>` is mandatory.
+The resulting `\<font-switch>` declared by \~`\fontdef` is \"fixed font switch"
+independent of the font context. More exactly, it is
+a fixed font switch when it is {\em used}. But it can depend on the current font
+modifiers and font family and given font modifiers when it is {\em declared}.
+
The \^`\fontdef` does the following steps.
It pushes the current font context to a stack, it does modifications of the font
context by given `\<family selector>` and/or `<font modifiers>` and it
@@ -582,9 +747,6 @@ it is assigned to the declared `\<font switch>` (like `\font` primitive does
it). Finally, `\fontdef` pops the font context stack, so the current
font context is the same as it was before `\fontdef` is used.
-More about `\fontdef` command including examples is written in
-section~\ref[fontdef].
-
\secc[famvardef] The `\famvardef` declarator
@@ -596,8 +758,8 @@ macro has similar syntax as \^`\fontdef`:
%
where `\<family selector>` and `<font modifiers>` are optional and
`\<variant selector>` is mandatory.
-The `\<new variant selector>` should be used in the same sense as `\rm`,
-`\bf` etc. It can be used as the final command in next
+The `\<new variant selector>` declared by `\famvardef` should be used in the same
+sense as `\rm`, `\bf` etc. It can be used as the final command in next
\^`\fontdef` or \^`\famvardef` declarators
too. When the `\<new variant selector>` is used in the normal text then it does
the following steps: pushes current font context to a stack, modifies font
@@ -848,6 +1010,8 @@ Luaotfload documentation for more information.
\endinput
+2021-05-23 concept of \_fontfeatures macro re-implemented
+2021-05-02 simpler \_resizefont, better concept of doc, moving parts from fonts-resize
2021-04-22 \_ffonum introduced
2021-04-19 \setwordspace: parameter format {/A/B/C} implemented.
2021-02-25 \_ttunifont introduced
diff --git a/macros/optex/base/hyperlinks.opm b/macros/optex/base/hyperlinks.opm
index 95fae3846b..ef205f3aa2 100644
--- a/macros/optex/base/hyperlinks.opm
+++ b/macros/optex/base/hyperlinks.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \ulink {Hyperlinks <2021-04-17>} % preloaded in format
+\_codedecl \ulink {Hyperlinks <2021-05-14>} % preloaded in format
\_doc ----------------------------
\`\dest``[<type>:<spec>]` creates a destination of internal links. The
@@ -25,78 +25,81 @@
\_public \dest ;
\_doc ----------------------------
- \`\link``[<type>:<spec>]{<color>}{<text>}` creates an internal link to \^`\dest`
- with the same `<type>:<spec>`. You can have more links with the same
- `<type>:<spec>` but only one `\dest` in the document. If \^`\hyperlinks`
- command is not used, then `\link` only prints `<text>` else its meaning is set to
- `\_linkactive`.
- The \`\_linkactive` is implemented by `\_pdfstartlink...\_pdfendlink`
- primitives. The `<color>` is the color of the link text generated by
- the `\_linkactive` macro.
- The `<color>` parameter can be overwritten by definition of
- `\_<type>linkcolor`. For example `\def\_toclinkcolor{\Red}` means that
- links from table of contents are in red. This is similar concept as
- `\_def\_tocborder`.
+ Each hyperlink is created internally by \`\_xlink``{<type>}{<spec>}{<color>}{<text>}`.
+ This macro expands to `\_quitvmode{<text>}` by default, i.e.\ no active
+ hyperlink is created, only <text> is printed in horizontal mode.
+ If \^`\hyperlinks` is used, then `\_xlink` gets meaning of
+ \`\_xlinkactive` and hyperlinks are created using `\pdfstartlink`,
+ `\pdfendlink` primitives. The <text> has given <color> only when
+ hyperlink is created. But if `\_<type>linkcolor` is defined, it has
+ precedence.
\nl
- \`\ilink``[<type>:<spec>]{<text>}` is equivalent to `\_link` but
- the `<color>` is used from \^`\hyperlinks` declaration
- (or it is overwriten by `\def\_<type>linkcolor`).
+ The \`\_linkdimens` macro declares the dimensions of link area.
\nl
- \`\_linkdimens` are default dimensions of the link area.
- \_cod ----------------------------
+ A specific action can be defined for each link <type> by the macro
+ `\_<type>action{<spec>}`. \OpTeX/ defines only \`\_urlaction``{<url>}`.
+ The default link action (when `\_<type>action` is not defined) is
+ `goto mame{<type>:<spec>}` (creates an internal link). It is declared in the
+ \`\_linkactions``{<type>}{<spec>}` macro.
+ \nl
+ The `\_pdfstartlink` primitive uses `attr{\_pdfborder{<type>}}`. The
+ \`\_pdfborder``{<type>}` macro expands to `/C[? ? ?] /Border[0 0 .6]` if the
+ `\_<type>border` macro (i.e.\ \`\_refborder`, \`\_citeborder`, \`\_tocborder`,
+ \`\_pgborder`, \`\_urlborder`, \`\_fntborder` or \`\_fnfborder`)
+ is defined.
+ \_cod
-\_protected\_def\_linkactive[#1:#2]#3#4{\_leavevmode\_pdfstartlink \_linkdimens
- attr{\_pdfborder{#1}} goto name{#1:#2}\_relax
- {\_localcolor\_trycs{_#1linkcolor}{#3}#4}\_pdfendlink
+\_protected\_def\_xlinkactive#1#2#3#4{\_quitvmode
+ \_pdfstartlink \_linkdimens attr{\_pdfborder{#1}}\_linkactions{#1}{#2}\_relax
+ {\_localcolor\_trycs{_#1linkcolor}{#3}#4}\_pdfendlink
}
-\_protected\_def\_link[#1]#2#3{\_leavevmode{#3}}
-\_def\_ilink[#1]#2{\_link[#1]{}{#2}}
+\_protected\_def\_xlink#1#2#3#4{\_quitvmode{#4}}
+
\_def\_linkdimens{height.9em depth.3em}
-\_public \ilink \link ;
- \_doc ----------------------------
- \`\ulink``[<url>]{<text>}` creates external link. It prints only the `<text>` by default but
- the \^`\hyperlinks` declaration defines it as \`\_urlactive``[url:<url>]{<text>}`.
- The external link is created by the `\_pdfstartlink...\pdfendlink` primitives.
- The `<url>` is detokenized with `\escapechar=-1` before it is used, so
- `\%`, `\#` etc. can be used in the `<url>`.
- \_cod ----------------------------
+\_def\_linkactions#1#2{\_ifcsname _#1action\_endcsname
+ \_lastnamedcs{#2}\_else goto name{#1:#2}\_fi}
+\_def\_urlaction #1{user{/Subtype/Link/A <</Type/Action/S/URI/URI(#1)>>}}
-\_protected\_def\_urlactive[#1:#2]#3#4{\_leavevmode{\_escapechar=-1
- \_pdfstartlink \_linkdimens attr{\_pdfborder{#1}}%
- user{/Subtype/Link/A <</Type/Action/S/URI/URI(\_detokenize{#2})>>}\_relax
- {\_localcolor\_trycs{_#1linkcolor}{#3}#4}\_pdfendlink}%
+\_def\_pdfborder#1{\_ifcsname _#1border\_endcsname
+ /C [\_csname _#1border\_endcsname] /Border [0 0 .6]\_else /Border [0 0 0]\_fi
}
-\_def\_ulink[#1]#2{\_leavevmode{#2}}
-\_public \ulink ;
- \_doc ----------------------------
- The `\_pdfstartlink` primitive uses `attr{\_pdfborder{<type>}}` in its parameter
- (see \^`\_linkactive` or \^`\_urlactive` macros). The \`\_pdfborder``{<type>}`
- macro expands to `/C[? ? ?] /Border[0 0 .6]` if the
- `\_<type>border` macro (i.e.\ \`\_refborder`, \`\_citeborder`, \`\_tocborder`,
- \`\_pgborder`, \`\_urlborder`, \`\_fntborder` or \`\_fnfborder`)
- is defined. Users can define it in
- order to create colored frames around active links. For example
- `\def\_tocborder{1 0 0}` causes red frames in TOC (not printed, only visible
- in PDF viewers).
+ \_doc ------------------------------
+ \`\link``[<type>:<spec>]{<color>}{<text>}` creates a link. It is
+ kept here for backward compatibility and it is
+ equivalent to \^`\_xlink{<type>}{<spec>}{<color>}{<text>}`.
+ If `\_<type>action` is not defined then
+ `\link` creates internal link do the \^`\dest[<type>:<spec>]`.
+ You can have more links with the same `<type>:<spec>` but only one \^`\dest`
+ in the document.
+ \nl
+ \`\ilink``[<type>:<spec>]{<text>}` is equivalent to \^`\link` but
+ the `<color>` is used from \^`\hyperlinks` declaration
+ (or it is overwriten by `\def\_<type>linkcolor`).
+ \nl
+ \`\ulink``[<url>]{<text>}` creates external link.
+ The `<url>` is detokenized with `\escapechar=-1` before it is used, so
+ `\%`, `\#` etc. can be used in the `<url>`.
\_cod ----------------------------
-\_def\_pdfborder#1{\_ifcsname _#1border\_endcsname
- /C [\_csname _#1border\_endcsname] /Border [0 0 .6]\_else /Border [0 0 0]\_fi
-}
+\_def\_link[#1:#2]{\_xlink{#1}{#2}}
+\_def\_ilink[#1:#2]#3{\_xlink{#1}{#2}\_ilinkcolor{#3}}
+\_def\_ulink[#1]#2{{\_escapechar=-1 \_ea}\_expanded
+ {\_noexpand\_xlink{url}{\_detokenize{#1}}}\_elinkcolor{#2}}
+
+\_public \ilink \ulink \link ;
\_doc ----------------------------
- \`\hyperlinks``{<ilink_color>}{<ulink_color>}` activates `\dest`, `\link`,
- `\ilink`, `\ulink` in order they create links. These macros are redefined
- here to their \"active" version.
+ \`\hyperlinks``{<ilink_color>}{<ulink_color>}` activates `\dest`, `\xlink`,
+ in order they create links.
\_cod ----------------------------
\_def\_hyperlinks#1#2{%
- \_let\_dest=\_destactive \_let\_link=\_linkactive
- \_def\_ilink[##1]##2{\_link[##1]{#1}{##2}}%
- \_def\_ulink[##1]##2{\_urlactive[url:##1]{#2}{##2}}%
- \_public \dest \ilink \ulink \link ;%
+ \_let\_dest=\_destactive \_let\_xlink=\_xlinkactive
+ \_let\_ilinkcolor=#1%
+ \_let\_elinkcolor=#2%
+ \_public \dest \xlink ;%
}
\_public \hyperlinks ;
@@ -104,38 +107,64 @@
\`\url``{<url>}` does approximately the same as \^`\ulink``[<url>]{<url>}`, but
more work is done before the `\ulink` is processed. The link-version of <url>
is saved to `\_tmpa` and the printed version in `\_tmpb`. The printed
- version is modified in order to set breakpoints to special places of the
- `<url>`. For example `//` is replaced by `\_urlskip/\_urlskip/\_urlbskip`
- where `\urlskip` adds a small nonbreakable glue between these two slashes and
- before them and `\_urlbskip` adds a breakable glue after them.
+ version is processed in four steps: 1.~the `\|` are replaced by `[||]` (we
+ suppose that such string does not exist in any URL). 2.~it is detokenized with
+ `\escapechar=-1`. 3.~muti-strings and spaces are replaced by strings in
+ braces `{...}`. 4.~internal penalties and skips are put between characters
+ using \`\_urlA`, \`\_urlB` and \`\_urlC`. The step~4 do following:
+ The \`\_urlxskip` is inserted between each pair of \"normal characters",
+ i.e.\ characters not declared by `\sdef{_ur:<character>}`.
+ The special characters declared by `\sdef{_ur:<character>}` are replaced
+ by the body of their corresponding macro.
+ The \`\_urlskip`, \`\_urlbskip`, \`\_urlgskip`
+ are typical skips used for special characters, their meaning is
+ documented in the code below. You can change them.
+ Default values: penalty 9990 is inserted between each pair of normal
+ chararacters, penalty 100 is inserted after special charcters, nobreak before special
+ characters. The URL can be broken at any place using these default
+ values. If you want to disable breaking between normal characters, say
+ `\let\_urlxskip=\nobreak`.
\nl
The text version of the `<url>` is printed in \`\_urlfont`.
\_cod ----------------------------
\_def\_url#1{{%
\_def\_tmpa{#1}\_replstring\_tmpa {\|}{}%
- {\_escapechar=-1 \_ea}\_ea\_edef\_ea\_tmpa\_ea{\_detokenize\_ea{\_tmpa}}%
- \_def\_tmpb{#1}\_replstring\_tmpb {\|}{\_urlbskip}%
- \_replstring\_tmpb {//} {{\_urlskip\_urlslashslash\_urlbskip}}%
- \_replstring\_tmpb {/} {{\_urlskip/\_urlbskip}}%
- \_replstring\_tmpb {.} {{\_urlskip.\_urlbskip}}%
- \_replstring\_tmpb {?} {{\_urlskip?\_urlbskip}}%
- \_replstring\_tmpb {=} {{\_urlskip=\_urlbskip}}%
- \_ea\_replstring\_ea\_tmpb \_ea{\_string &} {{\_urlbskip\_char`\& \_urlskip}}%
- \_ea\_replstring\_ea\_tmpb \_ea{\_bslash|} {{\_penalty0}}%
- \_ea\_ulink \_ea[\_tmpa] {\_urlfont\_tmpb\_null}%
+ \_def\_tmpb{#1}\_replstring\_tmpb {\|}{[||]}%
+ {\_escapechar=-1 \_ea}\_ea\_edef\_ea\_tmpb\_ea{\_detokenize\_ea{\_tmpb}}%
+ \_replstring\_tmpb{[||]}{{gb|}}%
+ \_replstring\_tmpb{ }{{ }}%
+ \_replstring\_tmpb{://}{{://}}%
+ \_ea\_ulink \_ea[\_ea{\_tmpa}] {\_urlfont \_ea\_urlA\_tmpb\_end}%
}}
-\_def\_urlfont{\_tt}
-\_def\_urlskip{\_null\_nobreak\_hskip0pt plus0.05em\_relax}
-\_def\_urlbskip{\_penalty100 \_hskip0pt plus0.05em\_relax}
-\_def\_urlslashslash{/\_urlskip/}
+\_def\_urlA#1{\_ifx\_end#1\_else \_urlC{}{#1}\_fi}
+\_def\_urlB#1{\_ifx\_end#1\_else \_urlC{\_urlxskip}{#1}\_fi}
+\_def\_urlC#1#2{%
+ \_ifcsname _ur:#2\_endcsname \_lastnamedcs \_ea\_ea\_ea \_urlA
+ \_else #1#2\_ea\_ea\_ea \_urlB \_fi
+}
+\_sdef{_ur:://}{\_urlskip:\_urlskip/\_urlskip/\_urlbskip}
+\_sdef{_ur:/}{\_urlskip/\_urlbskip}
+\_sdef{_ur:.}{\_urlskip.\_urlbskip}
+\_sdef{_ur:?}{\_urlskip?\_urlbskip}
+\_sdef{_ur:=}{\_urlskip=\_urlbskip}
+\_sdef{_ur:-}{\_urlskip-\_urlbskip}
+\_sdef{_ur:&}{\_urlskip\_char`\&\_urlbskip}
+\_sdef{_ur:gb|}{\_urlgskip}
+
+\_def\_urlfont{\_tt} % url font
+\_def\_urlxskip{\_penalty9990\_hskip0pt plus0.03em\_relax} % skip between normal characters
+\_def\_urlskip{\_null\_nobreak\_hskip0pt plus0.1em\_relax} % skip before :// / . ? = - &
+\_def\_urlbskip{\_penalty100 \_hskip0pt plus0.1em\_relax} % skip after :// / . ? = - &
+\_def\_urlgskip{\_penalty-500\_relax} % "goodbreak" penalty generated by \|
\_public \url ;
\_endcode % ----------------------------------------
-There are four types of internal links and one type of external link:
+There are six types of internal links and one type of external link used
+in \OpTeX/. They are used in the format <type>:<spec>.
\begitems
* `ref:<label>` -- the destination is created when `\label[<label>]` is used,
@@ -146,20 +175,36 @@ There are four types of internal links and one type of external link:
see also the section \ref[output].
* `cite:<bibpart>/<bibnum>` -- the destination is created in bibliography reference,
see section \ref[bib].
+* `fnt:<gfnotenum>` -- link form text to footnote, see also section~\ref[fnotes].
+* `fnf:<gfnotenum>` -- link from footnote to text, see also section~\ref[fnotes].
* `url:<url>` -- used by `\url` or `\ulink`,
see also the end of this section.
\enditems
-The `<tocrefnum>`, `<gpageno>`, and `<bibnum>` are numbers starting from one and
-globally incremented by one in the whole document. The registers \^`\tocrefnum`,
-\^`\gpageno` and \^`\bibnum` are used for these numbers.
+The `<tocrefnum>`, `<gpageno>`, `<bibnum>`, and `<gfnotenum>` are numbers starting
+from one and globally incremented by one in the whole document. The registers \^`\tocrefnum`,
+\^`\gpageno`, \^`\bibnum`, and \^`\_gfnotenum` are used for these numbers.
When a chap/sec/secc title is prefixed by `\label[<label>]`, then both types
of internal links are created at the same destination place:
`toc:<tocrefnum>` and `ref:<label>`.
+The color for active links can be declared by `\def\_<type>linkcolor`, the
+border around link can be declared by `\def\_<type>border`. These macros are
+not declared by default, so color for active links are given only by
+\^`\hyperlinks` macro and borders are invisible.
+For example `\def\_toclinkcolor{\Red}` means that links from table of
+contents are in red.
+Another example `\def\_tocborder{1 0 0}` causes red frames in TOC
+(not printed, only visible in PDF viewers).
+
+
\_endinput
+2021-05-14 \_xlink introduced, \link, \ilink, \ulink re-implemented.
+2021-05-12 \url: triplet :// instead //, \_urlslashslash removed.
+2021-05-11 \url reimplemented, \_urlxskip added.
+2021-04-30 \url: \detokenize of \tmpb added, bug fix.
2021-04-17 attr{\_pdfborder{...}} instead expanding \_pdfborder to attr{...}
2021-04-02 The possibility of \def\_toclinkcolor introduced, \localcolor moved
2021-01-27 \public \link added to \hyperlinks, bug fixed.
diff --git a/macros/optex/base/languages.opm b/macros/optex/base/languages.opm
index ff9373b720..19b1813edd 100644
--- a/macros/optex/base/languages.opm
+++ b/macros/optex/base/languages.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \_mtext {Languages <2021-01-21>} % preloaded in format
+\_codedecl \_mtext {Languages <2021-05-23>} % preloaded in format
\_doc -----------------------------
Only four words are generated by \OpTeX/ macros: \"Chapter",
@@ -50,12 +50,12 @@
\_def \_monthw #1 #2 #3 #4 #5 #6 #7 {%
\_sdef{_mt:m1:#1}{#2}\_sdef{_mt:m2:#1}{#3}\_sdef{_mt:m3:#1}{#4}%
- \_sdef{_mt:m4:#1}{#5}\_sdef{_mt:m5:#1}{#5}\_sdef{_mt:m6:#1}{#5}%
+ \_sdef{_mt:m4:#1}{#5}\_sdef{_mt:m5:#1}{#6}\_sdef{_mt:m6:#1}{#7}%
\_monthwB #1
}
\_def \_monthwB #1 #2 #3 #4 #5 #6 #7 {%
\_sdef{_mt:m7:#1}{#2}\_sdef{_mt:m8:#1}{#3}\_sdef{_mt:m9:#1}{#4}%
- \_sdef{_mt:m10:#1}{#5}\_sdef{_mt:m11:#1}{#5}\_sdef{_mt:m12:#1}{#5}%
+ \_sdef{_mt:m10:#1}{#5}\_sdef{_mt:m11:#1}{#6}\_sdef{_mt:m12:#1}{#7}%
}
\_monthw en January February March April May June
@@ -182,6 +182,7 @@
\_endcode % -------------------------------------
+2021-05-23 \_monthw: bug fix
2021-01-21 more robust quotes in outlines
2020-12-05 bib phrases moved here
2020-04-29 Obrazek -> Abbildung: bug fixed
diff --git a/macros/optex/base/makeindex.opm b/macros/optex/base/makeindex.opm
index e5f7b4032e..64ff2ca228 100644
--- a/macros/optex/base/makeindex.opm
+++ b/macros/optex/base/makeindex.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \makeindex {Makeindex and sorting <2021-02-15>} % loaded in format
+\_codedecl \makeindex {Makeindex and sorting <2021-02-15>} % preloaded in format
\_doc -----------------------------
\^`\makeindex` implements sorting algorithm at \TeX/ macro-language level.
diff --git a/macros/optex/base/math-macros.opm b/macros/optex/base/math-macros.opm
index efb777a30a..8a956ee2d0 100644
--- a/macros/optex/base/math-macros.opm
+++ b/macros/optex/base/math-macros.opm
@@ -321,6 +321,7 @@
\_protected\_def\cot {\_mathop{\_rm cot}\_nolimits}
\_protected\_def\coth {\_mathop{\_rm coth}\_nolimits}
%\_protected\_def\sec {\_mathop{\_rm sec}\_nolimits} % \sec is section
+\_protected\_def\secant {\_mathop{\_rm sec}\_nolimits}
\_protected\_def\csc {\_mathop{\_rm csc}\_nolimits}
\_protected\_def\max {\_mathop{\_rm max}}
\_protected\_def\min {\_mathop{\_rm min}}
diff --git a/macros/optex/base/multicolumns.opm b/macros/optex/base/multicolumns.opm
index bf5b05f7db..1a32db62b7 100644
--- a/macros/optex/base/multicolumns.opm
+++ b/macros/optex/base/multicolumns.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \begmulti {Balanced columns <2020-03-26>} % preloaded in format
+\_codedecl \begmulti {Balanced columns <2021-05-20>} % preloaded in format
\_doc -----------------------------
This code is documented in detail in the \"\TeX/book naruby", pages 244--246,
@@ -26,7 +26,7 @@
\_newcount\_mullines
\_def\_begmulti #1 {\_par\_bgroup\_wipeepar\_multiskip\_penalty0 \_def\_Ncols{#1}
- \_setbox6=\_vbox\_bgroup \_let\_setxhsize=\_relax \_penalty0
+ \_setbox6=\_vbox\_bgroup\_bgroup \_let\_setxhsize=\_relax \_penalty-99
%% \hsize := column width = (\hsize+\colsep) / n - \colsep
\_advance\_hsize by\_colsep
\_divide\_hsize by\_Ncols \_advance\_hsize by-\_colsep
@@ -34,7 +34,7 @@
\_def\par{\_ifhmode\_endgraf\_global\_advance\_mullines by\_prevgraf\_fi}%
}
\_def\_endmulti{\_vskip-\_prevdepth\_vfil
- \_ea\_egroup\_ea\_baselineskip\_the\_baselineskip\_relax
+ \_ea\_egroup\_ea\_egroup\_ea\_baselineskip\_the\_baselineskip\_relax
\_dimen0=.8\_maxdimen \_tmpnum=\_dimen0 \_divide\_tmpnum by\_baselineskip
\_splittopskip=\_baselineskip
\_setbox1=\_vsplit6 to0pt
@@ -111,4 +111,5 @@
\_endcode % -------------------------------------
-
+2021-05-20 Colors inside \begmulti...\endmuti, bug fixed
+2020-03-26 Introduced
diff --git a/macros/optex/base/optex.ini b/macros/optex/base/optex.ini
index d50ffeccf7..be081adac8 100644
--- a/macros/optex/base/optex.ini
+++ b/macros/optex/base/optex.ini
@@ -21,7 +21,7 @@
% OpTeX version
-\def\optexversion{1.02 Apr.2021}
+\def\optexversion{1.03 Jun.2021}
\def\fmtname{OpTeX}
\let\fmtversion=\optexversion
diff --git a/macros/optex/base/optex.lua b/macros/optex/base/optex.lua
index 2d83f38ed6..3738acaefb 100644
--- a/macros/optex/base/optex.lua
+++ b/macros/optex/base/optex.lua
@@ -324,11 +324,9 @@ callback_register("mlist_to_hlist", function(head, ...)
elseif new_head ~= true then
head = new_head
end
-
-- mlist_to_hlist means either added functions or standard luatex behavior
-- of node.mlist_to_hlist (handled by default function)
head = callback.call_callback("mlist_to_hlist", head, ...)
-
-- post_mlist_to_hlist_filter
new_head = callback.call_callback("post_mlist_to_hlist_filter", head, ...)
if new_head == false then
diff --git a/macros/optex/base/styles.opm b/macros/optex/base/styles.opm
index 534eb13663..deb47d6930 100644
--- a/macros/optex/base/styles.opm
+++ b/macros/optex/base/styles.opm
@@ -26,9 +26,7 @@
\_public \boxlines ;
\_doc -----------------------------
- The \`\report` and \`\letter` style initialization macros are defined here.
- \nl
- The `\letter` defines \`\address` and \`\subject` macros.
+ The \`\report` style initialization macro is defined here.
\_cod -----------------------------
\_def\_report{
@@ -43,6 +41,15 @@
\_parindent=1.2em \_iindent=\_parindent \_ttindent=\_parindent
\_footline={\_global\_footline={\_hss\_rmfixed\_folio\_hss}}
}
+
+ \_doc -----------------------------
+ The \`\letter` style initialization macro is defined here.
+
+ The `\letter` defines \`\address` and \`\subject` macros.
+
+ See the files `demo/op-letter-*.tex` for usage examples.
+ \_cod -----------------------------
+
\_def\_letter{
\_def\_address{\_vtop\_bgroup\_boxlines \_parskip=0pt \_let\par=\_egroup}
\_def\_subject{{\_bf \_mtext{subj}: }}
@@ -65,56 +72,7 @@
}
\_public \slides ;
-
\_endcode % -------------------------------------
-The example of `\letter` style document follows:
-
-\begtt %-----------------------------------------------------------------
-
-\letter
-\fontfam[bonum]
-\chyph
-
-\address
- Vážený pan
- Mgr. Bořek Byrokrat
- ředitel Ústavu pro další možnosti
- Úřední 789
- 123 45 Praha 1
-
-\hfill V Praze dne \today
-
-\subject Žádost o možnost další možnosti
-
-Vážený pane řediteli
-
-na základÄ› VaÅ¡eho dopisu Ä.j.~123456/78-dat a elektronické výzvy si dovoluji
-Vás požádat o prozkoumání mé možnosti další možnosti.
-Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
-eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
-veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
-commodo consequat.
-
-Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
-eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
-veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
-commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit
-esse cillum dolore eu fugiat nulla pariatur.
-
-S úctou
-
-\hfill \address
- {\it Petr Olšák}
- specialista na \TeX{}
- Ulice 12345
- Praha 13
-
-\bye
-
-\endtt %---------------------------------------------------------------------
-
-\endinput
-
2021-03-10 \ifmmode* added to \adef*
2020-03-28 released
diff --git a/macros/optex/base/table.opm b/macros/optex/base/table.opm
index f32bf311ab..b29aabbf4a 100644
--- a/macros/optex/base/table.opm
+++ b/macros/optex/base/table.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \table {Basic macros for OpTeX <2021-04-12>} % preloaded in format
+\_codedecl \table {Basic macros for OpTeX <2021-06-03>} % preloaded in format
\_doc -----------------------------
The result of the \`\table``{<declaration>}{<data>}` macro is inserted into
@@ -58,10 +58,9 @@
\_doc -----------------------------
The \`\_tableB` saves `<data>` to `\_tmpb`
- and does four \^`\replstring`s to prefix each macro \^`\crl` (etc.)
- by `\_crcr`. The reason is: we want to use macros that scan its parameter
- to the delimiter written in the right part of the table item declaration.
- See \^`\fS` for example. The `\crcr` cannot be hidden in another macro in this case.
+ and does \^`\replstring`s to prefix each macro \^`\crl` (etc.)
+ by `\_crcr`. See \^`\_tabreplstrings`. It cannot be used in a `\table` in
+ another `\table`, so \^`\_tabreplstrings` is set to `\relax` locally.
The `\tabskip` value is saved for places between columns
into the \`\_tabskipmid` macro. Then it runs
@@ -73,8 +72,13 @@
`<converted declaration>` immediately after each column declarator.
If `pxto` keyword was used, then we set the virtual unit \^`\tsize` to
- `\hsize` first. Then the first attempt of the table is created in box 0.
- Then the \^`\tsize` is re-calculated using `\wd0` and the real table is
+ `-\hsize` first. Then the first attempt of the table is created in box 0.
+ All collums where `p{..\tsize}` is used, are created as empty in this first
+ pass. So, the `\wd0` is the width of all other columns.
+ The \^`\_tsizesum` includes the sum of \^`\tsize`'s in `\hsize` units
+ after firts pass. The desired table width is stored in the `\_tmpdim`, so
+ `\_tmpdim-\_wd0` is the rest which have to be filled by \^`\tsize`s.
+ Then the \^`\tsize` is re-calculated and the real table is
printed by `\halign` in the second pass.
If no `pxto` keyword was used, then we print the table using `\halign`
@@ -96,13 +100,17 @@
\_cod -----------------------------
\_long\_def\_tableB #1{\_egroup \_def\_tmpb{#1}%
- \_replstring\_tmpb{\crl}{\_crcr\crl}\_replstring\_tmpb{\crll}{\_crcr\crll}%
- \_replstring\_tmpb{\crli}{\_crcr\crli}\_replstring\_tmpb{\crlli}{\_crcr\crlli}%
- \_replstring\_tmpb{\crlp}{\_crcr\crlp}%
+ \_tablereplstrings \_let\_tablereplstrings=\_relax
\_edef\_tabskipmid{\_the\_tabskip}\_tabskip=\_tabskipl
\_ifpxto
- \_tsize=\_hsize \_setbox0 = \_vbox{\_tablepxpreset \_halign \_tableC}%
- \_tsize=\_dimexpr\_hsize-(\_wd0-\_tmpdim)\_relax
+ \_edef\_tsizes{\_global\_tsizesum=\_the\_tsizesum \_gdef\_noexpand\_tsizelast{\_tsizelast}}%
+ \_tsizesum=\_zo \_def\_tsizelast{0}%
+ \_tsize=-\_hsize \_setbox0=\_vbox{\_tablepxpreset \_halign \_tableC}%
+ \_advance\_tmpdim by-\_wd0
+ \_ifdim \_tmpdim >\_zo \_else \_tsizesum=\_zo \_fi
+ \_ifdim \_tsizesum >\_zo \_tsize =\_expr{\_number\_hsize/\_number\_tsizesum}\_tmpdim
+ \_else \_tsize=\_zo \_fi
+ \_tsizes % retoring values if there is a \table pxto inside a \table pxto.
\_setbox0=\_null \_halign \_tableC
\_else
\_halign\_tablew \_tableC
@@ -111,6 +119,19 @@
\_def\_tableC{\_ea{\_ea\_bgroup\_the\_tabdata\_egroup\_tabskip=\_tabskipr\_cr
\_scantextokens\_ea{\_tmpb\_crcr}}}
+ \_doc -----------------------------
+ \`\_tabreplstrings` replaces each `\crl` etc. to `\crcr\crl`.
+ The reason is: we want to use macros that scan its parameter
+ to a delimiter written in the right part of the table item declaration.
+ The `\crcr` cannot be hidden in another macro in this case.
+ \_cod -----------------------------
+
+\_def\_tablereplstrings{%
+ \_replstring\_tmpb{\crl}{\_crcr\crl}\_replstring\_tmpb{\crll}{\_crcr\crll}%
+ \_replstring\_tmpb{\crli}{\_crcr\crli}\_replstring\_tmpb{\crlli}{\_crcr\crlli}%
+ \_replstring\_tmpb{\crlp}{\_crcr\crlp}%
+}
+
\_def\_tablepxpreset{} % can be used to de-activate references to .ref file
\_newbox\_tstrutbox % strut used in table rows
\_newtoks\_tabdata % the \halign declaration line
@@ -211,10 +232,34 @@
\_def\_tabdeclarec{\_the\_tabiteml\_hfil##\_unsskip\_hfil\_the\_tabitemr}
\_def\_tabdeclarel{\_the\_tabiteml\_relax##\_unsskip\_hfil\_the\_tabitemr}
\_def\_tabdeclarer{\_the\_tabiteml\_hfil##\_unsskip\_the\_tabitemr}
-\_def\_paramtabdeclarep#1{\_the\_tabiteml
- \_vtop{\_hsize=#1\_relax \_baselineskip=\_normalbaselineskip
- \_lineskiplimit=\_zo \_noindent \_hskip\_zo \_relax ##\_unsskip
- \_ifvmode\_vskip\_dp\_tstrutbox \_else\_lower\_dp\_tstrutbox\_hbox{}\_fi}\_the\_tabitemr}
+\_def\_paramtabdeclarep#1{\_the\_tabiteml\_vtop{\_hsize=#1\_relax \_partabitem{##}}\_the\_tabitemr}
+
+ \_doc -----------------------------
+ \`\_partabitem``{<data>}` prints the table item in a paragraph format.
+ This macro solves two things. Fist, the setting of parameters for the
+ paragraph formatting. The `\hsize` and parameters from macros
+ \^`\fC`, \^`\fR` etc. are set already.\nl
+ Second thing: if the `\hsize` is negative then first pass of `pxto` table is processed.
+ We print nothing in such case but we advance the \`\_tsizesum`.
+ The auxiliary macro \`\_tsizelast` is used to do advancing
+ only in the first row of the table.
+ \^`\_tsizesum` and \^`\_tsizelast` are initialized in the \^`\_tableB` macro.\nl
+ \`\_partabitemA``{<data>}` only copies <data>, but it is redefined by \^`\fS`.
+ \_cod -----------------------------
+
+\_newdimen \_tsizesum
+\_def \_tsizelast{0}
+\_long\_def\_partabitem#1{%
+ \_ifdim\_hsize<0pt
+ \_ifnum\_tsizelast<\_colnum \_global\_advance\_tsizesum by-\_hsize
+ \_xdef\_tsizelast{\_the\_colnum}\_fi
+ \_else
+ \_baselineskip=\_normalbaselineskip
+ \_lineskiplimit=\_zo \_noindent \_hskip\_zo \_relax \_partabitemA{#1}\_unsskip
+ \_ifvmode\_vskip\_dp\_tstrutbox \_else\_lower\_dp\_tstrutbox\_hbox{}\_fi
+ \_fi
+}
+\_let\_partabitemA=\_useit
\_doc -----------------------------
Users put optional spaces around the table item typically, i.e.\ they write
@@ -238,9 +283,9 @@
\_def\_fR{\_leftskip=0pt plus 1fill \_relax}
\_def\_fC{\_leftskip=0pt plus1fill \_rightskip=0pt plus 1fill \_relax}
\_def\_fX{\_leftskip=0pt plus1fil \_rightskip=0pt plus-1fil \_parfillskip=0pt plus2fil \_relax}
-\_long\_def\_fS #1\_unsskip{\_noindent \_setbox0 =\_vbox{\_noindent #1\_endgraf \_ea}%
- \_ifnum\_prevgraf=1 \_hfil \_fi #1\_unsskip
-}
+\_def\_fS{\_long\_def\_partabitemA##1{%
+ \_setbox0=\_vbox{\_noindent ##1\_endgraf \_ea}\_ifnum\_prevgraf=1 \_hfil \_fi ##1%
+}}
\_public \fL \fR \fC \fX \fS ;
\_doc -----------------------------
@@ -469,14 +514,14 @@ The first `c` column is variable width (it gets the width of the most wide item)
and the resting space to given `\hsize` is filled by the `p` column.
You can declare more than one `p{<coefficient>\tsize}` columns in the table
-when `pxto` keyword is used. The total sum of <coefficinets> must be exactly one.
-For example,
+when `pxto` keyword is used.
\begtt \catcode`\<=13
-\table pxto13cm {r p{.3\tsize} p{.5\tsize} p{.2\tsize} l}{<data>}
+\table pxto13cm {r p{3.5\tsize} p{2\tsize} p{\tsize} l}{<data>}
\endtt
%
-This gives the ratio of widths of individual paragraphs in the table.
+This gives the ratio of widths of individual paragraphs in the table
+3.5\,:\,2\,:\,1.
\secc `\eqbox`: boxes with equal width across the whole document
@@ -512,6 +557,9 @@ after the second one.
\_endinput
+2021-06-03 \fS corrected, re-implemented.
+2021-06-02 \table in \table allowed, bug fixed.
+2021-06-01 pxto: sum of \tsize's allowed different than 1
2021-04-12 p declarator: \hskip0pt added to allow first word hyphenated
2021-03-09 \_tablepxpreset introduced
2021-02-15 \_expandafter -> \_ea
diff --git a/macros/optex/base/usebib.opm b/macros/optex/base/usebib.opm
index 9dbd475241..0b515fcfba 100644
--- a/macros/optex/base/usebib.opm
+++ b/macros/optex/base/usebib.opm
@@ -1,6 +1,6 @@
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
-\_codedecl \MakeReference {Reading bib databases <2021-04-13>} % loaded on demand by \usebib
+\_codedecl \MakeReference {Reading bib databases <2021-04-30>} % loaded on demand by \usebib
\_doc -----------------------------
Loading the `librarian.tex` macro package. See `texdoc librarian`
@@ -17,7 +17,7 @@
\_let\newwrite=\_newwrite
\_private \BibFile \ReadList \SortList \SortingOrder \NameCount \AbbreviateFirstname
- \CreateField \RetrieveFieldInFor \RetrieveFieldIn ;
+ \CreateField \RetrieveFieldInFor \RetrieveFieldIn \RetrieveField ;
\_doc -----------------------------
The `\usebib` command.
@@ -367,6 +367,7 @@ character is sorted before `A`.
History:
--------
+2021-04-30 \RetrieveField declared as private, bug fixed.
2021-04-13 \bibpart implemented
2021-04-13 \_bibgl introduced (used by \slides)
2021-03-12 \_citelistB added before first test.
diff --git a/macros/optex/doc/mte-doc.tex b/macros/optex/doc/mte-doc.tex
new file mode 100644
index 0000000000..030f023d3f
--- /dev/null
+++ b/macros/optex/doc/mte-doc.tex
@@ -0,0 +1,26 @@
+% This is part of mte.opm macro package for OpTeX
+
+% Run optex mte-doc
+% (two times) to generate documentation including references and the index.
+
+\load [doc]
+
+\def\elink[#1]#2{%
+ \ulink[http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf\#cs:#1]%
+ {\tt\string#2}%
+}
+\def\olink[#1]#2{%
+ \ulink[http://petr.olsak.net/ftp/olsak/optex/optex-doc.pdf\#cs:#1]%
+ {\tt\string#2}%
+}
+\let\_urllinkcolor=\Cyan
+
+\printdoctail mte.opm
+\printdoc mte.opm
+
+\nonum\sec Index
+\begmulti 3
+\tt \makeindex
+\endmulti
+
+\bye
diff --git a/macros/optex/doc/optex-doc.pdf b/macros/optex/doc/optex-doc.pdf
index ba31f2ad23..3bcf1a843e 100644
--- a/macros/optex/doc/optex-doc.pdf
+++ b/macros/optex/doc/optex-doc.pdf
Binary files differ
diff --git a/macros/optex/doc/optex-doc.tex b/macros/optex/doc/optex-doc.tex
index e14d95c230..8d056698f4 100644
--- a/macros/optex/doc/optex-doc.tex
+++ b/macros/optex/doc/optex-doc.tex
@@ -4,6 +4,7 @@
% (three times) to generate OpTeX documentation including references and the index.
\load [doc.opm] \let\enddocument=\endinput
+\let\_catcodedot=\relax \catcode`\.=12 % we are not using \.foo sequences
\typosize[10/12] % Main size (used in techdoc)
@@ -20,7 +21,7 @@
\tit Format Based on Plain \TeX/ and OPmac\fnotemark1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\hfill Version 1.02
+\hfill Version 1.03
\centerline{\it Petr Olšák, 2020, 2021}
@@ -109,6 +110,14 @@ document \ulink[http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf]
\nonum\chap Index
+\noindent
+There are all control sequences used in \OpTeX/ except \TeX/ primitives.
+If you want to know something about \TeX/ primitives then you can use another index from
+\ulink[http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf\#ref:index]{\TeX/ in a Nutshell}.
+
+% active links directly to the main documentation point but not to the pages:
+\def\_printii #1&{\noindent\hskip-\iindent \link[cs:#1]\Blue{\bslash #1} }
+\def\_pgprintA #1{#1}
\begmulti 3 \tt \makeindex \endmulti
\bye
diff --git a/macros/optex/doc/optex-techdoc.tex b/macros/optex/doc/optex-techdoc.tex
index 525fdb9477..31f789d56c 100644
--- a/macros/optex/doc/optex-techdoc.tex
+++ b/macros/optex/doc/optex-techdoc.tex
@@ -127,10 +127,14 @@ Differences are mentioned in the documentation below.
\printdoc fonts-preload.opm
\printdoctail fonts-resize.opm
+\secc[fresize] Implementation of resizing
+Only \"resizing" macros are implemented here. Other aspects of Font
+Selection System and their implementation are desribed in
+section~\ref[fselect].
\printdoc fonts-resize.opm
\printdoctail fonts-select.opm
-\secc Implementation of the Font Selection System
+\secc[fselect] Implementation of the Font Selection System
\printdoc fonts-select.opm
\sec [math-preload] Preloaded fonts for math mode
diff --git a/macros/optex/doc/optex-userdoc.tex b/macros/optex/doc/optex-userdoc.tex
index 9bcec7db1e..93dad28377 100644
--- a/macros/optex/doc/optex-userdoc.tex
+++ b/macros/optex/doc/optex-userdoc.tex
@@ -1733,12 +1733,16 @@ The macro packages intended to \OpTeX/ have the name `*.opm`.
The following packages are distributed as part of \OpTeX/:
\begitems
* `qrcode.opm` enables to create QR codes.
+* \ulink[http://petr.olsak.net/ftp/olsak/optex/mte-doc.pdf]{\tt mte.opm}
+ includes settings for microtypographic extensions (protrusions+expanding fonts).
* `vlna.opm` enables to protect of one-letter prepositions and more things automatically.
* `emoji.opm` defines `\emoji{<name>}` command for colored emoticons.
* `plain-at.opm` defines the old names from plain \TeX/.
+* \ulink[https://ctan.org/tex-archive/macros/luatex/optex/pdfextra/pdfextra-doc.pdf]{\tt pdfextra.opm}
+ allows the use of many extra features from PDF standard (by M. Vlasák).
\enditems
-See the directory `optex/pkg/` and these files for more information about
-them.
+See these files in `optex/pkg/` or `optex/<pkgname>` for more information about
+them. The packages may have their documentation, try `texdoc <pkgname>`.
\secc Lorem ipsum dolor sit
%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1988,13 +1992,13 @@ The origin for the typographical area is not at the top left 1\,in 1\,in coordin
but at the top left paper corner exactly. For example, `\hoffset` includes directly left
margin.
-The tabbing macros `\settabs`\iindex{settabs} and `\+` (from Plain \TeX/)
+The tabbing macros `\settabs` and `\+` (from Plain \TeX/)
are not defined in \OpTeX/ because they are obsolete. But you can use the
\ulink[http://petr.olsak.net/optex/optex-tricks.html\#tabs]{\OpTeX/ trick 0021}
if you really need such feature.
The `\sec` macro is reserved for sections but original Plain \TeX/ declares this
-control sequence for math secans.
+control sequence for math secant\fnote{Use \code{$\\secant(x)$} to get $\secant(x)$.}.
\enddocument
diff --git a/macros/optex/pkg/emoji.opm b/macros/optex/pkg/emoji.opm
index 9053953bff..3db7849d97 100644
--- a/macros/optex/pkg/emoji.opm
+++ b/macros/optex/pkg/emoji.opm
@@ -6,9 +6,9 @@
% The \emoji{<name>} command is available, see texdoc emoji (from
% corresponding LaTeX package).
-\_namespace{emoji}
+\_codedecl \emoji {Emotikons from the TwemojiMozilla.ttf font}
-\_codedecl \.emoji {Emotikons from the TwemojiMozilla.ttf font}
+\_namespace{emoji}
\_doc -----------------------------
Font TwemojiMozilla.ttf is loaded. The font feature +colr is needed.
diff --git a/macros/optex/pkg/mte.opm b/macros/optex/pkg/mte.opm
new file mode 100644
index 0000000000..e0687001d6
--- /dev/null
+++ b/macros/optex/pkg/mte.opm
@@ -0,0 +1,685 @@
+% This is macro package used by OpTeX, see http://petr.olsak.net/optex
+% mte.opm, Petr Olšák <petr@olsak.net>, 2021
+% See end of the file for more information
+
+\_codedecl \enablemte {MicroTypographic Extension <2021-05-23>}
+\_namespace{mte}
+
+ \_doc -------------------
+ First, we define default protrusion values. They are
+ saved in the macros
+ \^`\.AlphabetPR`, \^`\.alphabetPR`, \^`\.digitsPR`, \^`\.punctPR`,
+ \^`\.quotPR`, \^`\.othersPR`
+ for regular and bold fonts. The analogous macros
+ \^`\.AlphabetPI`, \^`\.alphabetPI`, \^`\.digitsPI`, \^`\.punctPI`,
+ \^`\.quotPI`, \^`\.othersPI` store data
+ for italic and bold italic fonts.
+ We are using long names of these macros (without the dot shortcut in the
+ code) because user can copy these macros to his/her macro file and do modifications.
+ \nl
+ User (or a font family file) can define other values, for example by
+ `\def\_mte_quotPR{...}`. If such definition is done before
+ loading this package, it has precedence. This is the reason why we are
+ using \`\.trydef` which defines given macro only if it is not defined
+ already.
+ \_cod -------------------
+
+\_def\.trydef #1{\_ifx#1\_undefined \_afterfi{\_def#1}\_else \_ea\_ignoreit \_fi}
+
+ \_doc
+ We want to save size of the following macros with data tables, so we don't write
+ `[<code of char>] =` but only \`\_mte`~`<char> =`. We use \OpTeX/ name space for
+ \^`\_mte` (no package name space) because user may copy these macros to
+ other macro files and modify them. We hope that the name \^`\_mte` will
+ be never used in another meaning in \OpTeX/.
+ \_cod
+
+\_def\_mte #1{[\_immediateassignment\_tmpnum=`#1 \_the\_tmpnum]}
+
+ \_doc --------------------
+ The protrusion data follow.
+ The values are coefficients of total width of declared character.
+ First value gives left protrusion, second value is right protrusion.
+ \`\.AlphabetPR`
+ \_cod --------------------
+
+\.trydef \_mte_AlphabetPR {% Alphabets, Protrusion, Regular fonts
+ \_mte A = {.05,.05},
+ \_mte Æ = {.05, 0},
+ \_mte F = {0 ,.05},
+ \_mte J = {.05, 0},
+ \_mte K = {0 ,.05},
+ \_mte L = {0 ,.05},
+ \_mte T = {.05,.05},
+ \_mte V = {.05,.05},
+ \_mte W = {.05,.05},
+ \_mte X = {.05,.05},
+ \_mte Y = {.05,.05},
+}
+ \_doc
+ \`\.alphabetPR`
+ \_cod
+
+\.trydef \_mte_alphabetPR {% alphabets, Protrusion, Regular fonts
+ \_mte k = {0 ,.05},
+ \_mte r = {0 ,.05},
+ \_mte t = {0 ,.07},
+ \_mte v = {.05,.05},
+ \_mte w = {.05,.05},
+ \_mte x = {.05,.05},
+ \_mte y = {.05,.07},
+}
+ \_doc
+ \`\.digitsPR`
+ \_cod
+
+\.trydef \_mte_digitsPR {% digits, Protrusion, Regular fonts
+ \_mte 0 = {0 ,.05},
+ \_mte 1 = {.1 ,.2 },
+ \_mte 2 = {.05,.05},
+ \_mte 3 = {.05,.05},
+ \_mte 4 = {.07,.07},
+ \_mte 5 = {0 ,.05},
+ \_mte 6 = {0 ,.05},
+ \_mte 7 = {.05,.1 },
+ \_mte 8 = {0 ,.05},
+ \_mte 9 = {0 ,.05},
+ [0xF731] = {.1, .1}, % /one.oldstyle
+ [0xF732] = {.05, .05}, % /two.oldstyle
+ [0xF733] = {.03, .08}, % /three.oldstyle
+ [0xF734] = {.05, .05}, % /four.oldstyle
+ [0xF737] = {.05, .08}, % /seven.oldstyle
+}
+ \_doc
+ \`\.punctPR`
+ \_cod
+
+\.trydef \_mte_punctPR {% punctuations, Protrusion, Regular fonts
+ \_mte . = {0 , .7},
+ \_mte , = {0 , .5},
+ \_mte : = {0 , .5},
+ \_mte ; = {0 , .5},
+ \_mte ! = {0 , .1},
+ \_mte ? = {0 , .2},
+ \_mte @ = {.05,.05},
+ \_mte ~ = {.2, .25},
+ \_mte \% = {.05,.05}, % /percent
+ \_mte * = {.3, .3},
+ \_mte + = {.25,.25},
+ \_mte - = {.4, .5}, % /hyphen
+ \_mte – = {.4, .3}, % /endash
+ \_mte — = {.3, .2}, % /emdash
+ \_mte _ = {.2, .2}, % /underscore
+ \_mte / = {.2, .3},
+ \_mte \\ = {.2, .3}, % /backslash
+ \_mte ¡ = {.1, 0}, \_mte ¿ = {.1, 0},
+}
+ \_doc
+ \`\.quotPR`
+ \_cod
+
+\.trydef \_mte_quotPR {% quotation marks, Protrusion, Regular fonts
+ \_mte ' = {.3,.4}, % /quotesingle
+ \_mte ‘ = {.5,.7}, \_mte ’ = {.5,.6},
+ \_mte “ = {.5,.3}, \_mte †= {.2,.6},
+ \_mte ‚ = {.4,.4}, \_mte „ = {.4,.4},
+ \_mte ‹ = {.4,.4}, \_mte › = {.3,.5},
+ \_mte « = {.3,.2}, \_mte » = {.1,.4},
+}
+ \_doc
+ \`\.othersPR`
+ \_cod
+
+\.trydef \_mte_othersPR {% other characters, Protrusion, Regular fonts
+ \_mte ( = {.3, 0}, \_mte ) = {0 ,.3},
+ \_mte < = {.2, .1}, \_mte > = {.1, .2},
+ \_mte \{ = {.4, .2}, \_mte \} = {.2, .4}, % /braceleft, /braceright
+ [0x2329] = {.4, 0}, [0x232A] = {0 ,.4}, % /angleleft, /angleright
+ \_mte † = {.1,.1},
+ \_mte ‡ = {.08, .08},
+ \_mte • = {.2, .2},
+ \_mte · = {.4, .45}, % /periodcentered
+ \_mte ℃ = {.08, .05},
+ \_mte â‚¡ = {0 , .05},
+ \_mte ° = {.4, .4},
+ [0x2122] = {.1, .2}, % /trademark
+ \_mte © = {.1, .1},
+ \_mte ® = {.1, .1},
+ \_mte ª = {.1, .2},
+ \_mte º = {.1, .2},
+ \_mte ¹ = {.2, .25},
+ \_mte ² = {.05, .1},
+ \_mte ³ = {.05, .1},
+ \_mte ¬ = {.2, 0},
+ \_mte − = {.3, .3},
+ \_mte ± = {.15, .2},
+ \_mte × = {.15, .25},
+ \_mte ÷ = {.15, .25},
+ \_mte € = {.1, 0},
+ \_mte Γ = {0 ,.180}, % /Gamma
+ \_mte Δ = {.1, .1}, % /Delta
+ \_mte Θ = {.05, .05}, % /Theta
+ \_mte Λ = {.1,.1}, % /Lambda
+ \_mte Σ = {.05, .05}, % /Sigma
+ \_mte Υ = {.1,.1}, % /Upsilon
+ \_mte Φ = {.05, .05}, % /Phi
+ \_mte Ψ = {.05, .05}, % /Psi
+}
+
+ \_doc
+ The protrusion data for italic and bold italic fonts follow.
+ \`\.AlphabetPI`
+ \_cod
+
+\.trydef \_mte_AlphabetPI {% Alphabets, Protrusion, Italic fonts
+ \_mte A = {.125,.1},
+ \_mte Æ = {.125,-.055},
+ \_mte B = {.09,-.04},
+ \_mte C = {.145,-.075},
+ \_mte D = {.075,-.028},
+ \_mte E = {.08,-.055},
+ \_mte F = {.085,-.08},
+ \_mte G = {.153,-.015},
+ \_mte H = {.073,-.06},
+ \_mte I = {.14,-.12},
+ [0x0132] = {.14,-.08}, % IJ
+ \_mte J = {.135,-.08},
+ \_mte K = {.07,-.03},
+ \_mte L = {.087,.04},
+ \_mte M = {.067,-.045},
+ \_mte N = {.075,-.055},
+ \_mte O = {.15,-.03},
+ \_mte Å’ = {.15,-.055},
+ \_mte P = {.082,-.05},
+ \_mte Q = {.15,-.03},
+ \_mte R = {.075, .015},
+ \_mte S = {.09,-.065},
+ \_mte $ = {.1,-.02}, % $
+ \_mte T = {.22,-.085},
+ \_mte U = {.23,-.055},
+ \_mte V = {.26,-.06},
+ \_mte W = {.185,-.055},
+ \_mte X = {.07,-.03},
+ \_mte Y = {.25,-.06},
+ \_mte Z = {.09,-.06},
+}
+ \_doc
+ \`\.alphabetPI`
+ \_cod
+
+\.trydef \_mte_alphabetPI {% alphabets, Protrusion, Italic fonts
+ \_mte a = {.15,-.01},
+ \_mte b = {.17, 0},
+ \_mte c = {.173,-.01},
+ \_mte d = {.15,-.055},
+ \_mte e = {.18, 0},
+ \_mte f = {0 ,-.25},
+ \_mte g = {.15,-.01},
+ \_mte h = {.1, 0},
+ \_mte i = {.21, 0},
+ [0x17C9] = {.21,-.04}, % ij
+ \_mte j = {0 ,-.04},
+ \_mte k = {.11,-.05},
+ \_mte l = {.24,-.11},
+ \_mte m = {.08, 0},
+ \_mte n = {.115, 0},
+ \_mte o = {.155, 0},
+ \_mte q = {.17,-.04},
+ \_mte r = {.155,-.04},
+ \_mte s = {.13, 0},
+ \_mte t = {.23,-.01},
+ \_mte u = {.12, 0},
+ \_mte v = {.14,-.025},
+ \_mte w = {.098,-.02},
+ \_mte x = {.065,-.04},
+ \_mte y = {.13,-.02},
+ \_mte z = {.110,-.08},
+}
+ \_doc
+ \`\.digitsPI`
+ \_cod
+
+\.trydef \_mte_digitsPI {% digits, Protrusion, Italic fonts
+ \_mte 0 = {.17,-.085},
+ \_mte 1 = {.23,.11},
+ \_mte 2 = {.13,-.07},
+ \_mte 3 = {.14,-.07},
+ \_mte 4 = {.13,.08},
+ \_mte 5 = {.16, 0},
+ \_mte 6 = {.175,-.03},
+ \_mte 7 = {.25,-.15},
+ \_mte 8 = {.13,-.04},
+ \_mte 9 = {.155,-.08},
+ [0xF730] = {.05,.05}, % /zero.oldstyle
+ [0xF731] = {.1, .1}, % /one.oldstyle
+ [0xF732] = {.1,.08}, % /two.oldstyle
+ [0xF733] = {.08,.05}, % /three.oldstyle
+ [0xF734] = {.08,.08}, % /four.oldstyle
+ [0xF735] = {.05, 0}, % /five.oldstyle
+ [0xF736] = {.05, 0}, % /six.oldstyle
+ [0xF737] = {.08,.08}, % /seven.oldstyle
+ [0xF738] = {.05, 0}, % /eight.oldstyle
+ [0xF739] = {0 ,.05}, % /nine.oldstyle
+}
+ \_doc
+ \`\.punctPI`
+ \_cod
+
+\.trydef \_mte_punctPI {% punctuations, Protrusion, Italic fonts
+ \_mte . = {0 ,.5},
+ \_mte , = {0 ,.45},
+ \_mte : = {0 ,.3},
+ \_mte ; = {0 ,.3},
+ \_mte & = {.13,.03},
+ \_mte \% = {.18,.05},
+ \_mte * = {.38,.02},
+ \_mte + = {.18,.2},
+ \_mte @ = {.18,.01},
+ \_mte ~ = {.2,.15},
+ \_mte ( = {.3, 0}, \_mte ) = {0 ,.07},
+ \_mte / = {.1,.1},
+ \_mte - = {.5,.3}, % /hyphen
+ \_mte – = {.5,.3}, % /endash
+ \_mte — = {.4,.17}, % /emdash
+ \_mte _ = {.1,.2}, % /underscore
+ \_mte ¡ = {.2, 0}, \_mte ¿ = {.2, 0},
+}
+ \_doc
+ \`\.quotPI`
+ \_cod
+
+\.trydef \_mte_quotPI {% quotation marks, Protrusion, Italic fonts
+ \_mte ' = {.3,.4}, % /quotesingle
+ \_mte " = {.5,.3},
+ \_mte ‘ = {.8,.2}, \_mte ’ = {.8,-.02},
+ \_mte “ = {.54,.1}, \_mte †= {.5,.1},
+ \_mte ‚ = {.3,.7}, \_mte „ = {.2,.6},
+ \_mte ‹ = {.5,.3}, \_mte › = {.4,.4},
+ \_mte « = {.4,.1}, \_mte » = {.2,.3},
+}
+ \_doc
+ \`\.othersPI`
+ \_cod
+
+\.trydef \_mte_othersPI {% other characters, Protrusion, Italic fonts
+ \_mte < = {.3,.1}, \_mte > = {200,100},
+ \_mte \\ = {.3,.3},
+ \_mte \{ = {.4,.1}, \_mte \} = {200,200},
+ \_mte † = {.2,.08},
+ \_mte ‡ = {.12,.08},
+ \_mte • = {.22,.1},
+ \_mte · = {.55,.3}, % /periodcentered
+ \_mte ℃ = {.17, 0},
+ \_mte â‚¡ = {.1,.05},
+ \_mte ¶ = {.2, 0},
+ \_mte ° = {.5,.3},
+ [0x2122] = {.2,.07}, % /trademark
+ \_mte © = {.05,.07},
+ \_mte ® = {.05,.07},
+ \_mte ª = {.14,.1},
+ \_mte º = {.14,.1},
+ \_mte ¹ = {.40,.15},
+ \_mte ² = {.25,.08},
+ \_mte ³ = {.25,.08},
+ \_mte ¬ = {.25,.08},
+ \_mte − = {.3,.2},
+ \_mte ± = {.15,.17},
+ \_mte × = {.2,.2},
+ \_mte ÷ = {.2,.2},
+ \_mte € = {.15, 0},
+ \_mte Γ = {.1,.12}, % /Gamma
+ \_mte Δ = {.12,.1}, % /Delta
+ \_mte Θ = {.12,.05}, % /Theta
+ \_mte Λ = {.13,.1}, % /Lambda
+ \_mte Ξ = {.1, 0}, % /Xi
+ \_mte Π = {.1, 0}, % /Pi
+ \_mte Σ = {.1,.05}, % /Sigma
+ \_mte Υ = {.18,.1}, % /Upsilon
+ \_mte Φ = {.13,.07}, % /Phi
+ \_mte Ψ = {.13,.05}, % /Psi
+ \_mte Ω = {.05, 0}, % /Omega
+}
+
+ \_doc --------------------
+ The expansion data follow in macros \^`\.AlphabetX`, \^`\.alphabetX`, \^`\.digitsX`
+ and \^`\.othersX`.
+ They are common for all fonts. \`\.AlphabetX`
+ \_cod --------------------
+
+\.trydef \_mte_AlphabetX {% Alphabets, eXpansion
+ \_mte A = .5,
+ \_mte Æ = .5,
+ \_mte B = .7,
+ \_mte C = .7,
+ \_mte D = .5,
+ \_mte E = .7,
+ \_mte F = .7,
+ \_mte G = .5,
+ \_mte H = .7,
+ \_mte K = .7,
+ \_mte M = .7,
+ \_mte N = .7,
+ \_mte O = .5,
+ \_mte Å’ = .5,
+ \_mte P = .7,
+ \_mte Q = .5,
+ \_mte R = .7,
+ \_mte S = .7,
+ \_mte U = .7,
+ \_mte W = .7,
+ \_mte Z = .7,
+}
+ \_doc
+ \`\.alphabetX`
+ \_cod
+
+\.trydef \_mte_alphabetX {% alphabets, eXpansion
+ \_mte a = .7,
+ \_mte æ = .7,
+ \_mte b = .7,
+ \_mte c = .7,
+ \_mte d = .7,
+ \_mte e = .7,
+ \_mte g = .7,
+ \_mte h = .7,
+ \_mte k = .7,
+ \_mte m = .7,
+ \_mte n = .7,
+ \_mte o = .7,
+ \_mte Å“ = .7,
+ \_mte p = .7,
+ \_mte q = .7,
+ \_mte s = .7,
+ \_mte u = .7,
+ \_mte w = .7,
+ \_mte z = .7,
+}
+ \_doc
+ \`\.digitsX`
+ \_cod
+
+\.trydef \_mte_digitsX {% digits, eXpansion
+ \_mte 2 = .7,
+ \_mte 3 = .7,
+ \_mte 6 = .7,
+ \_mte 8 = .7,
+ \_mte 9 = .7,
+}
+ \_doc
+ \`\.othersX`
+ \_cod
+
+\.trydef \_mte_othersX {% others, eXpansion
+}
+
+ \_doc --------------------
+ The \`\_mte_P` (for protrusion, all fonts) and \`\_mte_X`
+ (for expansion, all fonts) are empty by default but user can
+ declare specific values here. These macros are used last in the
+ \`\.allPR`, \`\.allPI`, \`\.allX` macros
+ (used in the lua code bellow), so it has general precedence.
+ \_cod --------------------
+
+\.trydef \_mte_P {} % user specific, Protrusion
+\.trydef \_mte_X {} % user specific, eXpansion
+
+\_def \.allPR {\.AlphabetPR \.alphabetPR \.digitsPR \.punctPR \.quotPR \.othersPR \.P}
+\_def \.allPI {\.AlphabetPI \.alphabetPI \.digitsPI \.punctPI \.quotPI \.othersPI \.P}
+\_def \.allX {\.AlphabetX \.alphabetX \.digitsX \.othersX \.X}
+
+ \_doc --------------------
+ We add a new macro \`\.features` to the \OpTeX/'s
+ \olink[fontfeatures]\_fontfeatures. It is empty by
+ default but it will be changed by `\enablemte` to read protrusion and
+ expansion data using Lua code.
+ \_cod --------------------
+
+\_addto\_fontfeatures{\.features}
+\_def\.features{}
+
+ \_doc --------------------
+ \`\enablemte` initializes protrusion data by the \^`\.initprotrusion` macro
+ and expansion data by the \^`\.initexpansion` macro. Then it sets
+ \elink[pdfprotrudechars]{\protrudechars} and \elink[pdfadjustspacing]{\adjustspacing}
+ primitives and sets the \^`\.features` macro to use
+ the protrusion tables `pr` (for regular or bold fonts) or `pi` (for italic
+ or bold italic fonts). The table `ex` is used for expansion data.
+ These tables are declared in the Lua code below.
+ \nl
+ \`\disablemte` disables font \^`\.features` and sets appropriate primitive
+ registers to zero.
+ \_cod --------------------
+
+\_def\.enablemte {%
+ \_initunifonts
+ \.initprotrusion % luacode, pr and pi tables initialized
+ \.initexpansion % luacode, ex table initialized
+ \_protrudechars=2
+ \_adjustspacing=2
+ \_def\.features{protrusion=p\.var;expansion=ex}% pr/pi and ex tables used
+ \_reloading \_currvar
+}
+\_def\.disablemte {%
+ \_protrudechars=0
+ \_adjustspacing=0
+ \_def\.features{}%
+ \_reloading \_currvar
+}
+\_nspublic \enablemte \disablemte ;
+
+ \_doc --------------------
+ The \`\.var` macro expands ro `r` when regular or bold font is loaded
+ and it expands to `i` if italic or bold italic font is loaded.
+ The `pr` or `pi` data table is selected using this macro.
+ \_cod --------------------
+
+\_def\.it{it}\_def\.bi{bi}
+\_def\.var{\_ifx\_whatresize\.it i\_else \_ifx\_whatresize\.bi i\_else r\_fi\_fi}
+
+ \_doc -------------------
+ The `pr` and `pi` data tables are created using lua code in
+ the \`\.initprotrusion` macro. The data from \^`\.allPR` or \^`\.allPI`
+ are used here.
+ The analogical concept is used in the \`\.initexpansion` macro.
+ \_cod -------------------
+
+\_def\.initprotrusion {%
+ \_directlua {%
+ fonts.protrusions.setups['pr']={
+ factor=\.fpfactor,
+ \.leftright,
+ \.allPR
+ }
+ fonts.protrusions.setups['pi']={
+ factor=\.fpfactor,
+ \.leftright,
+ \.allPI
+}}}
+\_def\.initexpansion {%
+ \_directlua {%
+ fonts.expansions.setups['ex']={
+ \.stretchshrinkstep,
+ factor=\.fxfactor,
+ \.allX
+}}}
+
+ \_doc --------------------
+ The \`\.leftright`, \`\.stretchshrinkstep`, \`\.fpfactor`, and \`\.fxfactor`
+ macros are used in the Lua code above and they have following default values
+ (you can re-define them, if you want):
+ \_cod --------------------
+
+\_def \.fpfactor{1}
+\_def \.leftright {left=1, right=1}
+\_def \.fxfactor{1}
+\_def \.stretchshrinkstep {stretch=3, shrink=2, step=.5}
+
+ \_doc --------------------
+ \`\setfpfactor` and \`\setfxfactor` simply define \^`\.fpfactor` and \^`\.fxfactor`.
+ \_cod --------------------
+
+\_def\.setfpfactor #1 {\_def\.fpfactor{#1}}
+\_def\.setfxfactor #1 {\_def\.fxfactor{#1}}
+\_nspublic \setfpfactor \setfxfactor ;
+
+ \_doc --------------------
+ There are similar letters: A, Ã, Ã, Â, Ã, Ä, Ã…, they need the same setting.
+ But only the basic letter (A in this example) has protrusion and/or expansion
+ setting using Lua code. The equivalent settings are done by the macro
+ \`\.setequivs``<font-switch>`.
+ This macro is used in \olink[_newfontloaded]{\_newfontloaded} `<font-switch>`
+ which is called by \OpTeX/ if the font is loaded first.
+ The \^`\.setequivs` macro uses data from \^`\.equalcodes` (see bellow)
+ and sets equal
+ \elink[lpcode]{\lpcode}, \elink[rpcode]{\rpcode}, and \elink[efcode]{\efcode}
+ for variant characters.
+ It is called only if \^`\.features` is non-empty, i.e.\ if the font
+ includes mte data.
+ \_cod --------------------
+
+\_def\_newfontloaded#1{\_ifx\.features\_empty \_else \.setequivs#1\_fi}
+
+\_def\.setequivs #1{\_let\.f=#1\_ea\.setequivsA\.equalcodes,,={},}
+\_def\.setequivsA#1#2=#3#4,{\_ifx^#3^\_else
+ \_afterfi{\_tmpnum=`#1 \.setequivsB#3#4\_end\.setequivsA}\_fi}
+\_def\.setequivsB#1{\_ifx\_end#1\_else
+ \_lpcode\.f`#1=\_lpcode\.f\_tmpnum
+ \_rpcode\.f`#1=\_rpcode\.f\_tmpnum
+ \_efcode\.f`#1=\_efcode\.f\_tmpnum
+ \_ea\.setequivsB\_fi
+}
+
+ \_doc --------------------
+ \`\.equalcodes` includes comma separated equivalences. The same
+ \elink[lpcode]{\lpcode}, \elink[rpcode]{\rpcode}, and \elink[efcode]{\efcode}
+ for all characters
+ given at right side is set as these codes of the character given
+ at the left side of equal sign.
+ You can do `\addto\_mte_equalcodes{<your additional settings>}`
+ if you want.
+ \_cod --------------------
+
+\_def\.equalcodes {%
+ A = ÀÃÂÃÄÅĀĂĄǺȀẠẢẤẦẨẪẬẮẰẲẶΑ,
+ B = ฿Β,
+ C = ÇĆĈĊČ,
+ D = ÃÄŽÄḌḎ,
+ E = ÈÉÊËĒĔĖĘĚȄẸẺẼỀẾỄỂỆΕ,
+ G = ĜĞĠĢǦǴ,
+ H = ĤĦḤḦḪΗ,
+ I = ÃŒÃÃŽÃĨĪĬĮİȈỈỊΙ,
+ J = Ä´,
+ K = ĶΚ,
+ L = ĹĽĻÅḶ,
+ M = Μ,
+ N = ÑŃŅŇṄṆÎ,
+ O = ÒÓÔÕÖØŌŎÅỌƠǪǾȌỎá»á»’ỔỖỘỚỜỠỞỢΟ,
+ P = Ρ,
+ R = ŔŖŘÈṚṘṜ,
+ S = ŚŜŞŠȘṢ,
+ T = ŢŤȚṬṮΤ,
+ U = ÙÚÛÜŨŪŬŮŰŲƯȔỤỦỨỪỬỮỰ,
+ W = ŴẀẂẄ,
+ X = Χ,
+ Y = ÃŶŸỴỶỸ,
+ Z = ŹŻŽẒΖ,
+ a = àáâãäåÄăąǻÈạảấầẩẫậắằẳẵ,
+ æ = ǽ,
+ c = çćĉċÄ,
+ d = Ä‘á¸á¸, % Ä has different right side
+ e = èéêëēĕėęěȅẹẻẽếá»á»ƒá»…ệ,
+ g = Äğġģǧǵ,
+ h = ĥħḥḧḫ,
+ i = ìíîïĩīĭįıȉỉị,
+ j = ĵ,
+ k = Ä·,
+ l = ĺļłḷḹ, % ľ has different right side
+ n = ñńņňṅṇ,
+ o = òóôõöøÅÅÅ‘á»Æ¡Ç«Ç¿Èá»á»‘ồổỗộớá»á»¡á»Ÿá»£,
+ r = ŕŗřȑṛṙá¹,
+ s = Å›Åşšșṣ,
+ t = ţțṭṯẗť,
+ u = ùúûüũūŭůűųưȕụủứừửữự,
+ w = ŵáºáºƒáº…,
+ y = ýŷÿỳỵỷỹ,
+ z = źżžẓ,
+}
+\_endnamespace
+\_endcode
+
+\tit MicroTypographic Extensions for \OpTeX/
+
+\centerline{\it Petr Olšák, 2021}
+\bigskip
+
+You can do `\load[mte]` followed by \^`\enablemte`. The microtypographic
+extensions (protrusions, expansions) of all fonts are available after
+\^`\enablemte`. The \LaTeX/ package Microtype does similar effect.
+
+The \^`\enablemte` macro reloads the current font with microtypographic
+extensions (mte) enabled and all new fonts loaded by the Font Selection System have
+mte enabled too, because they are added to the
+\olink[_fontfeatures]{\_fontfeatures} macro used by \OpTeX/.
+
+The \^`\enablemte` macro does only local settings. If it is used in a group then
+only fonts used in this group have mte.
+
+The \^`\enablemte` macro sets (among other things)
+\elink[pdfprotrudechars]{\protrudechars}`=2` (protrusion is enabled) and
+\elink[pdfadjustspacing]{\adjustspacing}`=2` (font expansion is enabled).
+You can disable these features by setting these primitive registers to zero
+value (it is default if \^`\enablemte` is not used).
+Note, that the values of these registers are checked when
+paragraph is finalized although the fonts were loaded with mte enabled.
+It means that you have to use `\par` before end of group
+if you use \^`\enablemte` inside a group.
+For example:
+
+\begtt
+{\enablemte
+ Roman font with mte enabled, \it italic font with mte enabled.
+ \par % mte features are used
+}
+\endtt
+%
+Or, simply use \^`\enablemte` at beginning of your document.
+
+On the other hand, you can use \^`\disablemte` macro which reloads current
+font with mte disabled and all newly loaded fonts have
+mte disabled too. The macro has local validity. For example,
+`{\disablemte text}` prints `text` by a font with
+mte disabled. It works locally in the middle of the paragraph (unlike setting
+`\protrudechars` and `\adjustspacing` to zero).
+
+You can define your own protrusion or expansion values: copy macros
+`\_mte_AlphabetPR`, `\_mte_quotPR`, etc.\ from this package and define them
+as you wish using `\def`. Such definition has precedence.
+Similar definitions can be in some font family files too, so: do your
+definition after all `\fontfam` if you want to keep the precedence.
+All such definitions must be performed before the `\mteinit` command.
+
+You can use `\def\_mte_P` for data of protrusion for all fonts
+which has general precedence. For example, if you want to protrude hyphen
+char with factor one at the right side and by factor 0.5 at the left side, use
+\begtt
+\def\_mte_P {% user specification, Protrusion, Regular fonts
+ \_mte - = {.5, 1}, % /hyphen
+}
+\endtt
+Analogical macro can be used for expansion data `\_mte_X`.
+
+You can use \^`\setfpfactor` `<factor><space>` to set the factor by which
+all protrusion data are scaled. The <factor> is decimal number and its default
+value is~1. This macro can be used before \^`\enablemte`.
+You can use \^`\setfxfactor` `<factor><space>` with analogical meaning,
+expansion data are scaled by given~<factor>.
+
+If you feel that default microtypographic data are wrong in a particular case,
+please let me know. I can correct it in this package. If you feel
+that a specific font family needs different microtypographic data, please
+let me know. I can add extra definitions to appropriate font family
+file.
+
+\_endinput
+
+Use "optex mte-doc.tex" (twice) to generate documentation from this file.
diff --git a/macros/optex/pkg/vlna.opm b/macros/optex/pkg/vlna.opm
index 4db22aa0cc..c613d48cc4 100644
--- a/macros/optex/pkg/vlna.opm
+++ b/macros/optex/pkg/vlna.opm
@@ -10,9 +10,9 @@
% vlna.opm is based on Lua code from the package `luavlna` (by Michal Hoftich
% and Miro HronÄok). See `texdoc luavlna` or end of this file for more information.
-\_namespace{vlna}
+\_codedecl \singlechars {Preventing single-chars prepositions and more <2021-01-08>}
-\_codedecl \.singlechars {Preventing single-chars prepositions and more <2021-01-08>}
+\_namespace{vlna}
\_doc -----------------------------
We declare new attribute, register callbacks, and define Lua functions that
diff --git a/support/TeX4ht/source/tex4ht-html4.tex b/support/TeX4ht/source/tex4ht-html4.tex
index 5e542e34f2..9bf0a4bcab 100644
--- a/support/TeX4ht/source/tex4ht-html4.tex
+++ b/support/TeX4ht/source/tex4ht-html4.tex
@@ -1,4 +1,4 @@
-% $Id: tex4ht-html4.tex 938 2021-05-17 09:38:57Z michal_h21 $
+% $Id: tex4ht-html4.tex 944 2021-06-03 09:29:05Z michal_h21 $
% Compile 4 times: latex tex4ht-html4
% Copy html4.4ht into the work directory before all but the last compilation.
%
@@ -2810,6 +2810,10 @@ such a case, we don't have proper nestings of environments.
li p\string ~ol:last-child{ margin-bottom:0.5em; }}
>>>
+\<list par\><<<
+\par\ShowPar
+>>>
+
\<configure html4 latex\><<<
\ConfigureEnv{trivlist}
{}{|<try env inline par|>}{}{}
@@ -2819,7 +2823,7 @@ such a case, we don't have proper nestings of environments.
{|<recall end:itm|>\EndP\HCode{</dd></dl>}\ShowPar}
{\end:itm \global\def\end:itm{\EndP\Tg</dd>}\HCode{<dt
class="trivlist">}\bgroup \bf}
- {\egroup\HCode{</dt><dd\Hnewline class="trivlist">}}
+ {\egroup\HCode{</dt><dd\Hnewline class="trivlist">}|<list par|>}
\ConfigureEnv{list}
{}{|<try env inline par|>}{}{}
\ConfigureList{list}%
@@ -2842,7 +2846,7 @@ such a case, we don't have proper nestings of environments.
{|<recall end:itm|>\ifvmode \IgnorePar\fi
\EndP\HCode{</li></ul>}\ShowPar}
{\end:itm \global\def\end:itm{\EndP\Tg</li>}\DeleteMark}
- {\HCode{<li class="\getClass{li}itemize">}\afterGetClass{li}}
+ {\HCode{<li class="\getClass{li}itemize">}\afterGetClass{li}|<list par|>}
\NewConfigure{itemizeClass}{2}
\Configure{itemizeClass}{}{}
\NewConfigure{liClass}{2}
@@ -2895,7 +2899,7 @@ such a case, we don't have proper nestings of environments.
\EndP\HCode{</dd></dl>}\ShowPar}
{\end:itm \global\def\end:itm{\EndP\Tg</dd>}\HCode{<dt
class="enumerate">}\bgroup \bf}
- {\egroup\EndP\HCode{</dt><dd\Hnewline class="enumerate">}}
+ {\egroup\EndP\HCode{</dt><dd\Hnewline class="enumerate">}|<list par|>}
\Css{dd.enumerate {margin-left: 2em;}}
\Css{dt.enumerate {float:left;
clear:left;
@@ -2950,7 +2954,7 @@ such a case, we don't have proper nestings of environments.
\<enumerate IV\><<<
\HCode{<li class="enumerate" value="\expandafter\the\csname
- c@enum\romannumeral\the\@enumdepth\endcsname"\Hnewline>}\AnchorLabel
+ c@enum\romannumeral\the\@enumdepth\endcsname"\Hnewline>}|<list par|>\AnchorLabel
>>>
@@ -2959,7 +2963,7 @@ such a case, we don't have proper nestings of environments.
\<enumerate IV-\><<<
{\Configure{Link}{li}{}{ class="enumerate" id=}{}%
- \let\EndLink=\empty \AnchorLabel }%
+ \let\EndLink=\empty|<list par|>\AnchorLabel }%
>>>
@@ -3029,7 +3033,7 @@ to the following text.
|<save end:itm|>\global\let\end:itm=\empty}
{|<recall end:itm|>\EndP\HCode{</li></ul>}\ShowPar}
{\end:itm \global\def\end:itm{\EndP\Tg</li>}\DeleteMark}
- {\HCode{<li class="itemize">}}
+ {\HCode{<li class="itemize">}|<list par|>}
>>>
\<prosper lists\><<<
@@ -3047,7 +3051,7 @@ to the following text.
{}
{\end:itm \global\def\end:itm{\EndP\Tg</li>}\DeleteMark}
{\HCode{<li class="itemize\ifnum
- \c@item@step>\c@overlaysCount -hide\fi">}}
+ \c@item@step>\c@overlaysCount -hide\fi">}|<list par|>}
\Css{li.itemize-hide {visibility:hidden;}}
>>>
@@ -3088,8 +3092,8 @@ to the following text.
|<save end:itm|>\global\let\end:itm=\empty}
{|<recall end:itm|>\EndP\HCode{</dd></dl>}\ShowPar}
{\end:itm \global\def\end:itm{\EndP\Tg</dd>}\HCode{<dt
- class="description">}\bgroup \bf}
- {\egroup\EndP\HCode{</dt><dd\Hnewline class="description">}}
+ class="description">}\bgroup |<list par|>\bf}
+ {\egroup\EndP\HCode{</dt><dd\Hnewline class="description">}|<list par|>}
>>>
\<32,4 report,book\><<<
@@ -3149,7 +3153,7 @@ Latex allows groups like the following, so we need global \verb+\end:itm+
|<save end:itm|>\global\let\end:itm=\empty}
{|<recall end:itm|>\EndP\HCode{</li></ul>}\ShowPar}
{\end:itm \global\def\end:itm{\EndP\Tg</li>}\DeleteMark}
- {\HCode{<li class="itemize">}}
+ {\HCode{<li class="itemize">}|<list par|>}
\ConfigureEnv{enumerate*}
{}{|<try env inline par|>}{}{}
\ConfigureList{enumerate*}%
@@ -3163,7 +3167,7 @@ Latex allows groups like the following, so we need global \verb+\end:itm+
{|<recall end:itm|>\EndP\HCode{</dd></dl>}\ShowPar}
{\end:itm \global\def\end:itm{\EndP\Tg</dd>}\HCode{<dt
class="description">}\bgroup \bf}
- {\egroup\EndP\HCode{</dt><dd\Hnewline class="description">}}
+ {\egroup\EndP\HCode{</dt><dd\Hnewline class="description">}|<list par|>}
\ConfigureList{basedescript}
{\EndP\HCode{<dl \a:LRdir class="basedescript">}%
\PushMacro\end:itm \global\let\end:itm=\empty}
@@ -10052,7 +10056,7 @@ need to change early the catcodes of `\verb'_' and `\verb'^'.
\EndP\HCode{</li></ul>}\ShowPar
}
{\end:itm \gdef\end:itm{\EndP\Tg</li>}\DeleteMark}
- {\HCode{<li class="itemize">}\AnchorLabel }
+ {\HCode{<li class="itemize">}|<list par|>\AnchorLabel }
>>>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -11058,7 +11062,7 @@ a \par b
\EndP\HCode{</dd></dl>}\ShowPar}
{\end:itm \global\def\end:itm{\EndP\Tg</dd>}\HCode{<dt
class="description">}\bgroup \bf}
- {\egroup\EndP\HCode{</dt><dd\Hnewline class="description">}}
+ {\egroup\EndP\HCode{</dt><dd\Hnewline class="description">}|<list par|>}
|<quote config|>
\ConfigureEnv{verse}
@@ -11469,19 +11473,19 @@ a \par b
{\IgnorePar\EndP\HCode{<ol\space class="enumerate"\Hnewline>}}
{\IgnorePar\EndP\HCode{</li></ol>}\ShowPar}
{\IgnorePar\EndP\ifnum \itemno>1 \Tg</li>\fi\DeleteMark}
- {\HCode{<li class="enumerate">}}
+ {\HCode{<li class="enumerate">}|<list par|>}
\Configure{itemize}
{\IgnorePar\EndP\HCode{<ul\space\a:LRdir class="itemize"\Hnewline>}}
{\IgnorePar\EndP\HCode{</li></ul>}\ShowPar}
{\IgnorePar\EndP\ifnum \itemno>1 \Tg</li>\fi\DeleteMark}
- {\HCode{<li class="itemize">}}
+ {\HCode{<li class="itemize">}|<list par|>}
\Configure{table}%
{\IgnorePar\EndP\HCode{<dl \a:LRdir class="description">}%
|<save end:itm|>\global\let\end:itm|=\empty}
{|<recall end:itm|>\IgnorePar\EndP\HCode{</dd></dl>}}
{\IgnorePar\end:itm \global\def\end:itm{\EndP\Tg</dd>}\HCode{<dt
class="description">}\bgroup \bf}
- {\egroup\IgnorePar\EndP\HCode{</dt><dd\Hnewline class="description">}}
+ {\egroup\IgnorePar\EndP\HCode{</dt><dd\Hnewline class="description">}|<list par|>}
>>>
\<configure html4 texinfo\><<<
@@ -14078,7 +14082,7 @@ supported formats by tex4ht.
\EndP\HCode{</li></ul>}\ShowPar
|<end pause region|>}
{\end:itm \global\def\end:itm{\EndP\Tg</li>}\DeleteMark}
- {\HCode{<li class="itemize">}}
+ {\HCode{<li class="itemize">}|<list par|>}
>>>
\<configure html4 powerdot\><<<
@@ -14107,7 +14111,7 @@ supported formats by tex4ht.
|<end pause region|>}
{\end:itm \global\def\end:itm{\EndP\Tg</dd>}\HCode{<dt
class="description">}\bgroup \bf}
- {\egroup\EndP\HCode{</dt><dd\Hnewline class="description">}}
+ {\egroup\EndP\HCode{</dt><dd\Hnewline class="description">}|<list par|>}
>>>
diff --git a/support/texlab/CHANGELOG.md b/support/texlab/CHANGELOG.md
index df4134084d..885fa24bc5 100644
--- a/support/texlab/CHANGELOG.md
+++ b/support/texlab/CHANGELOG.md
@@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [3.1.0] - 03.06.2021
+
+### Added
+
+- Add `texlab.latexFormatter` setting to allow turning off `latexindent`.
+ At the moment, `texlab.latexFormatter: texlab` is not implemented yet and does nothing.
+- Expose the `--local` flag of `latexindent` via `texlab.latexindent.local` setting ([#365](https://github.com/latex-lsp/texlab/issues/365))
+- Expose the `--modfiylinebreaks` flag of `latexindent` via `texlab.latexindent.modifyLineBreaks` setting ([#365](https://github.com/latex-lsp/texlab/issues/365))
+- Assign (unique) error codes to static analysis diagnostics.
+
+### Fixed
+
+- Avoid creating defunct `latexindent` processes which clear out the document ([#437](https://github.com/latex-lsp/texlab/issues/437))
+- Allow whitespace in LaTeX identifiers like labels ([#433](https://github.com/latex-lsp/texlab/issues/433))
+- Run CI on Ubuntu 18.04 to allow an older `glibc` version ([#439](https://github.com/latex-lsp/texlab/issues/439)).
+
+### Fixed
+
## [3.0.1] - 22.05.2021
### Fixed
diff --git a/support/texlab/Cargo.lock b/support/texlab/Cargo.lock
index c224bce2d3..8ae7d7e49d 100644
--- a/support/texlab/Cargo.lock
+++ b/support/texlab/Cargo.lock
@@ -605,20 +605,10 @@ dependencies = [
]
[[package]]
-name = "fsevent"
-version = "2.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97f347202c95c98805c216f9e1df210e8ebaec9fdb2365700a43c10797a35e63"
-dependencies = [
- "bitflags",
- "fsevent-sys",
-]
-
-[[package]]
name = "fsevent-sys"
-version = "3.1.0"
+version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca6f5e6817058771c10f0eb0f05ddf1e35844266f972004fe8e4b21fda295bd5"
+checksum = "5c0e564d24da983c053beff1bb7178e237501206840a3e6bf4e267b9e8ae734a"
dependencies = [
"libc",
]
@@ -999,9 +989,9 @@ dependencies = [
[[package]]
name = "lsp-types"
-version = "0.89.0"
+version = "0.89.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07731ecd4ee0654728359a5b95e2a254c857876c04b85225496a35d60345daa7"
+checksum = "48b8a871b0a450bcec0e26d74a59583c8173cb9fb7d7f98889e18abb84838e0f"
dependencies = [
"bitflags",
"serde",
@@ -1154,14 +1144,13 @@ dependencies = [
[[package]]
name = "notify"
-version = "5.0.0-pre.8"
+version = "5.0.0-pre.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46bbbcd078f1f00ddb7a9abe70b96e91229b44b0b3afdec610f8e5137f8f014b"
+checksum = "b89869d77edd64db917d7903abeadc166f93686b342c56cc0ca51acb68441d09"
dependencies = [
"bitflags",
"crossbeam-channel 0.5.1",
"filetime",
- "fsevent",
"fsevent-sys",
"inotify",
"libc",
@@ -1697,9 +1686,9 @@ dependencies = [
[[package]]
name = "rayon"
-version = "1.5.0"
+version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674"
+checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90"
dependencies = [
"autocfg 1.0.1",
"crossbeam-deque 0.8.0",
@@ -1709,9 +1698,9 @@ dependencies = [
[[package]]
name = "rayon-core"
-version = "1.9.0"
+version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a"
+checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e"
dependencies = [
"crossbeam-channel 0.5.1",
"crossbeam-deque 0.8.0",
@@ -2167,7 +2156,7 @@ dependencies = [
[[package]]
name = "texlab"
-version = "3.0.1"
+version = "3.1.0"
dependencies = [
"anyhow",
"bibutils-sys",
diff --git a/support/texlab/Cargo.toml b/support/texlab/Cargo.toml
index 56317c7f9c..506b454b4a 100644
--- a/support/texlab/Cargo.toml
+++ b/support/texlab/Cargo.toml
@@ -1,7 +1,7 @@
[package]
name = "texlab"
description = "LaTeX Language Server"
-version = "3.0.1"
+version = "3.1.0"
license = "GPL-3.0"
readme = "README.md"
authors = [
@@ -17,7 +17,17 @@ doctest = false
[features]
default = ["citation", "completion"]
completion = ["fuzzy-matcher"]
-citation = ["bibutils-sys", "citeproc", "citeproc-db", "citeproc-io", "csl", "fnv", "html2md", "lalrpop-util", "lalrpop"]
+citation = [
+ "bibutils-sys",
+ "citeproc",
+ "citeproc-db",
+ "citeproc-io",
+ "csl",
+ "fnv",
+ "html2md",
+ "lalrpop-util",
+ "lalrpop",
+]
semantic = []
[dependencies]
@@ -45,12 +55,12 @@ lalrpop-util = { version = "0.19.5", optional = true }
log = "0.4.14"
logos = "0.12.0"
lsp-server = "0.5"
-lsp-types = "0.89.0"
+lsp-types = "0.89.1"
multimap = "0.8.3"
-notify = "5.0.0-pre.8"
+notify = "5.0.0-pre.9"
once_cell = "1.7.2"
petgraph = "0.5.1"
-rayon = "1.5.0"
+rayon = "1.5.1"
regex = "1.5.4"
rustc-hash = "1.1.0"
serde = "1.0.126"
@@ -73,4 +83,4 @@ unindent = "0.1.7"
lalrpop = { version = "0.19.5", features = ["lexer"], optional = true }
[profile.release]
-lto = true \ No newline at end of file
+lto = true
diff --git a/support/texlab/README.md b/support/texlab/README.md
index b2edc3f2b4..57351b677b 100644
--- a/support/texlab/README.md
+++ b/support/texlab/README.md
@@ -1,7 +1,6 @@
[![CI](https://github.com/latex-lsp/texlab/workflows/CI/badge.svg)](https://github.com/latex-lsp/texlab/actions)
[![Coverage](https://codecov.io/gh/latex-lsp/texlab/branch/master/graph/badge.svg)](https://codecov.io/gh/latex-lsp/texlab)
-[![Rust](https://img.shields.io/badge/rustc-1.39%2B-blue)](https://blog.rust-lang.org/2019/11/07/Rust-1.39.0.html)
-[![Dependabot](https://api.dependabot.com/badges/status?host=github&repo=latex-lsp/texlab)](https://dependabot.com)
+[![Rust](https://img.shields.io/badge/rustc-1.51%2B-blue)](https://blog.rust-lang.org/2021/03/25/Rust-1.51.0.html)
[![GitHub release](https://img.shields.io/github/release/latex-lsp/texlab?label=github)](https://github.com/latex-lsp/texlab/releases)
[![CTAN](https://img.shields.io/ctan/v/texlab)](https://ctan.org/pkg/texlab)
@@ -41,7 +40,7 @@ On Windows, you may need to install [Microsoft Visual C++ Redistributable for Vi
You will need to install the following dependencies to compile the server:
-- A recent, stable version of [Rust](https://rustup.rs/)
+- A recent, stable version of [Rust](https://rustup.rs/) (>= 1.51)
Then run the following command in the project folder:
diff --git a/support/texlab/docs/options.md b/support/texlab/docs/options.md
index 9cabd31062..3cc2edfd8a 100644
--- a/support/texlab/docs/options.md
+++ b/support/texlab/docs/options.md
@@ -143,3 +143,39 @@ Possible values are either `texlab` or `latexindent`.
**Type:** `string`
**Default value:** `texlab`
+
+---
+
+## texlab.latexFormatter
+
+Defines the formatter to use for LaTeX formatting.
+Possible values are either `texlab` or `latexindent`.
+Note that `texlab` is not implemented yet.
+
+**Type:** `string`
+
+**Default value:** `latexindent`
+
+---
+
+## texlab.latexindent.local
+
+Defines the path of a file containing the `latexindent` configuration.
+This corresponds to the `--local=file.yaml` flag of `latexindent`.
+By default the configuration inside the project root directory is used.
+
+**Type:** `string`
+
+**Default value:** `null`
+
+---
+
+## texlab.latexindent.modifyLineBreaks
+
+Modifies linebreaks before, during, and at the end of code blocks
+when formatting with `latexindent`.
+This corresponds to the `--modifylinebreaks` flag of `latexindent`.
+
+**Type:** `boolean`
+
+**Default value:** `false`
diff --git a/support/texlab/src/citation.rs b/support/texlab/src/citation.rs
index e185c14b55..daa4b60997 100644
--- a/support/texlab/src/citation.rs
+++ b/support/texlab/src/citation.rs
@@ -67,7 +67,7 @@ fn convert_to_ris(root: &bibtex::SyntaxNode, key: &str) -> Option<RisReference>
let entry = root
.children()
.filter_map(bibtex::Entry::cast)
- .find(|entry| entry.key().map(|key| key.text()) == Some(key))?;
+ .find(|entry| entry.key().map(|key| key.to_string()).as_deref() == Some(key))?;
bib_code.push_str(&entry.syntax().to_string());
bib_code = bib_code.replace("\\hypen", "-");
diff --git a/support/texlab/src/diagnostics/bibtex.rs b/support/texlab/src/diagnostics/bibtex.rs
index efea141db0..d90bde0c8d 100644
--- a/support/texlab/src/diagnostics/bibtex.rs
+++ b/support/texlab/src/diagnostics/bibtex.rs
@@ -1,7 +1,7 @@
use std::sync::Arc;
use cstree::TextRange;
-use lsp_types::{Diagnostic, DiagnosticSeverity};
+use lsp_types::{Diagnostic, DiagnosticSeverity, NumberOrString};
use multimap::MultiMap;
use crate::{
@@ -42,7 +42,7 @@ fn analyze_entry(
.line_index
.line_col_lsp_range(entry.ty()?.text_range()),
severity: Some(DiagnosticSeverity::Error),
- code: None,
+ code: Some(NumberOrString::Number(4)),
code_description: None,
source: Some("texlab".to_string()),
message: "Expecting a curly bracket: \"{\"".to_string(),
@@ -62,7 +62,7 @@ fn analyze_entry(
.line_index
.line_col_lsp_range(entry.left_delimiter()?.text_range()),
severity: Some(DiagnosticSeverity::Error),
- code: None,
+ code: Some(NumberOrString::Number(5)),
code_description: None,
source: Some("texlab".to_string()),
message: "Expecting a key".to_string(),
@@ -82,7 +82,7 @@ fn analyze_entry(
.line_index
.line_col_lsp_range(entry.right_delimiter()?.text_range()),
severity: Some(DiagnosticSeverity::Error),
- code: None,
+ code: Some(NumberOrString::Number(6)),
code_description: None,
source: Some("texlab".to_string()),
message: "Expecting a curly bracket: \"}\"".to_string(),
@@ -111,7 +111,7 @@ fn analyze_field(
.line_index
.line_col_lsp_range(TextRange::empty(field.name()?.text_range().end())),
severity: Some(DiagnosticSeverity::Error),
- code: None,
+ code: Some(NumberOrString::Number(7)),
code_description: None,
source: Some("texlab".to_string()),
message: "Expecting an equality sign: \"=\"".to_string(),
@@ -131,7 +131,7 @@ fn analyze_field(
field.equality_sign()?.text_range().end(),
)),
severity: Some(DiagnosticSeverity::Error),
- code: None,
+ code: Some(NumberOrString::Number(8)),
code_description: None,
source: Some("texlab".to_string()),
message: "Expecting a field value".to_string(),
diff --git a/support/texlab/src/diagnostics/latex.rs b/support/texlab/src/diagnostics/latex.rs
index b835f88398..012e9b399f 100644
--- a/support/texlab/src/diagnostics/latex.rs
+++ b/support/texlab/src/diagnostics/latex.rs
@@ -1,7 +1,7 @@
use std::sync::Arc;
use cstree::TextRange;
-use lsp_types::{Diagnostic, DiagnosticSeverity};
+use lsp_types::{Diagnostic, DiagnosticSeverity, NumberOrString};
use multimap::MultiMap;
use crate::{
@@ -31,7 +31,7 @@ pub fn analyze_latex_static(
Diagnostic {
range: document.line_index.line_col_lsp_range(node.text_range()),
severity: Some(DiagnosticSeverity::Error),
- code: None,
+ code: Some(NumberOrString::Number(1)),
code_description: None,
source: Some("texlab".to_string()),
message: "Unexpected \"}\"".to_string(),
@@ -56,15 +56,15 @@ fn analyze_environment(
node: &latex::SyntaxNode,
) -> Option<()> {
let environment = latex::Environment::cast(node)?;
- let name1 = environment.begin()?.name()?.word()?;
- let name2 = environment.end()?.name()?.word()?;
- if name1.text() != name2.text() {
+ let name1 = environment.begin()?.name()?.key()?;
+ let name2 = environment.end()?.name()?.key()?;
+ if name1 != name2 {
diagnostics_by_uri.insert(
Arc::clone(&document.uri),
Diagnostic {
- range: document.line_index.line_col_lsp_range(name1.text_range()),
+ range: document.line_index.line_col_lsp_range(name1.small_range()),
severity: Some(DiagnosticSeverity::Error),
- code: None,
+ code: Some(NumberOrString::Number(3)),
code_description: None,
source: Some("texlab".to_string()),
message: "Mismatched environment".to_string(),
@@ -98,8 +98,10 @@ fn analyze_curly_group(
.filter_map(latex::Environment::cast)
.filter_map(|env| env.begin())
.filter_map(|begin| begin.name())
- .filter_map(|name| name.word())
- .any(|name| ["asy", "lstlisting", "minted", "verbatim"].contains(&name.text()));
+ .filter_map(|name| name.key())
+ .any(|name| {
+ ["asy", "lstlisting", "minted", "verbatim"].contains(&name.to_string().as_str())
+ });
if !is_inside_verbatim_environment
&& !node
@@ -114,7 +116,7 @@ fn analyze_curly_group(
.line_index
.line_col_lsp_range(TextRange::empty(node.text_range().end())),
severity: Some(DiagnosticSeverity::Error),
- code: None,
+ code: Some(NumberOrString::Number(2)),
code_description: None,
source: Some("texlab".to_string()),
message: "Missing \"}\" inserted".to_string(),
diff --git a/support/texlab/src/features/completion.rs b/support/texlab/src/features/completion.rs
index 13c7aad22b..29559bd808 100644
--- a/support/texlab/src/features/completion.rs
+++ b/support/texlab/src/features/completion.rs
@@ -19,6 +19,8 @@ mod user_command;
mod user_environment;
mod util;
+use std::borrow::Cow;
+
use cancellation::CancellationToken;
use fuzzy_matcher::{skim::SkimMatcherV2, FuzzyMatcher};
use lsp_types::{
@@ -144,15 +146,29 @@ fn dedup(items: Vec<InternalCompletionItem>) -> Vec<InternalCompletionItem> {
}
fn score(context: &CursorContext<CompletionParams>, items: &mut Vec<InternalCompletionItem>) {
- let pattern = match &context.cursor {
- Cursor::Latex(token) if token.kind().is_command_name() => token.text().trim_end(),
- Cursor::Latex(token) if token.kind() == latex::WORD => token.text(),
- Cursor::Latex(_) => "",
- Cursor::Bibtex(token) if token.kind().is_type() => token.text(),
- Cursor::Bibtex(token) if token.kind() == bibtex::WORD => token.text(),
- Cursor::Bibtex(token) if token.kind() == bibtex::COMMAND_NAME => token.text().trim_end(),
- Cursor::Bibtex(_) => "",
- Cursor::Nothing => "",
+ let pattern: Cow<str> = match &context.cursor {
+ Cursor::Latex(token) if token.kind().is_command_name() => token.text().trim_end().into(),
+ Cursor::Latex(token) if token.kind() == latex::WORD => {
+ if let Some(key) = latex::Key::cast(token.parent()) {
+ key.to_string().into()
+ } else {
+ token.text().into()
+ }
+ }
+ Cursor::Latex(_) => "".into(),
+ Cursor::Bibtex(token) if token.kind().is_type() => token.text().into(),
+ Cursor::Bibtex(token) if token.kind() == bibtex::WORD => {
+ if let Some(key) = bibtex::Key::cast(token.parent()) {
+ key.to_string().into()
+ } else {
+ token.text().into()
+ }
+ }
+ Cursor::Bibtex(token) if token.kind() == bibtex::COMMAND_NAME => {
+ token.text().trim_end().into()
+ }
+ Cursor::Bibtex(_) => "".into(),
+ Cursor::Nothing => "".into(),
};
let file_pattern = pattern.split('/').last().unwrap();
@@ -211,7 +227,7 @@ fn preselect(
let group = latex::CurlyGroupWord::cast(name.parent())?;
let end = latex::End::cast(group.syntax().parent()?)?;
let environment = latex::Environment::cast(end.syntax().parent()?)?;
- let name = environment.begin()?.name()?.word()?.text();
+ let name = environment.begin()?.name()?.key()?.to_string();
for item in items {
if item.data.label() == name {
diff --git a/support/texlab/src/features/completion/acronym_ref.rs b/support/texlab/src/features/completion/acronym_ref.rs
index 9d8bcc6c5f..db3e34f9eb 100644
--- a/support/texlab/src/features/completion/acronym_ref.rs
+++ b/support/texlab/src/features/completion/acronym_ref.rs
@@ -1,5 +1,4 @@
use cancellation::CancellationToken;
-use cstree::TextRange;
use lsp_types::CompletionParams;
use crate::{
@@ -16,18 +15,9 @@ pub fn complete_acronyms<'a>(
) -> Option<()> {
cancellation_token.result().ok()?;
- let token = context.cursor.as_latex()?;
- let group = latex::CurlyGroupWord::cast(token.parent())
- .filter(|group| context.is_inside_latex_curly(group))?;
-
+ let (_, range, group) = context.find_curly_group_word()?;
latex::AcronymReference::cast(group.syntax().parent()?)?;
- let range = if token.kind() == latex::WORD {
- token.text_range()
- } else {
- TextRange::empty(context.offset)
- };
-
for document in &context.request.subset.documents {
if let Some(data) = document.data.as_latex() {
for name in data
@@ -35,8 +25,8 @@ pub fn complete_acronyms<'a>(
.descendants()
.filter_map(latex::AcronymDefinition::cast)
.filter_map(|node| node.name())
- .filter_map(|name| name.word())
- .map(|name| name.text())
+ .filter_map(|name| name.key())
+ .map(|name| name.to_string())
{
items.push(InternalCompletionItem::new(
range,
diff --git a/support/texlab/src/features/completion/citation.rs b/support/texlab/src/features/completion/citation.rs
index 6df3364099..0a7cc26b10 100644
--- a/support/texlab/src/features/completion/citation.rs
+++ b/support/texlab/src/features/completion/citation.rs
@@ -26,12 +26,14 @@ pub fn complete_citations<'a>(
let token = context.cursor.as_latex()?;
let range = if token.kind() == latex::WORD {
- token.text_range()
+ latex::Key::cast(token.parent())
+ .map(|key| key.small_range())
+ .or_else(|| latex::Text::cast(token.parent()).map(|text| text.small_range()))?
} else {
TextRange::empty(context.offset)
};
- check_citation(context, token).or_else(|| check_acronym(token))?;
+ check_citation(context).or_else(|| check_acronym(context))?;
for document in &context.request.subset.documents {
if let Some(data) = document.data.as_bibtex() {
for entry in data.root.children().filter_map(bibtex::Entry::cast) {
@@ -46,20 +48,17 @@ pub fn complete_citations<'a>(
Some(())
}
-fn check_citation(
- context: &CursorContext<CompletionParams>,
- token: &latex::SyntaxToken,
-) -> Option<()> {
- let group = latex::CurlyGroupWordList::cast(token.parent())
- .filter(|group| context.is_inside_latex_curly(group))?;
+fn check_citation(context: &CursorContext<CompletionParams>) -> Option<()> {
+ let (_, _, group) = context.find_curly_group_word_list()?;
latex::Citation::cast(group.syntax().parent()?)?;
Some(())
}
-fn check_acronym(token: &latex::SyntaxToken) -> Option<()> {
+fn check_acronym(context: &CursorContext<CompletionParams>) -> Option<()> {
+ let token = context.cursor.as_latex()?;
+
let pair = token.ancestors().find_map(latex::KeyValuePair::cast)?;
- let mut key_words = pair.key()?.words();
- if key_words.next()?.text() != "cite" || key_words.next().is_some() {
+ if pair.key()?.to_string() != "cite" {
return None;
}
@@ -72,7 +71,7 @@ fn make_item<'a>(
entry: bibtex::Entry<'a>,
range: TextRange,
) -> Option<InternalCompletionItem<'a>> {
- let key = entry.key()?.text();
+ let key = entry.key()?.to_string();
let ty = LANGUAGE_DATA
.find_entry_type(&entry.ty()?.text()[1..])
.map(|ty| Structure::Entry(ty.category))
@@ -98,7 +97,7 @@ fn make_item<'a>(
range,
InternalCompletionItemData::Citation {
uri: Arc::clone(&document.uri),
- key: key.into(),
+ key,
text,
ty,
},
@@ -171,6 +170,29 @@ mod tests {
}
#[test]
+ fn test_latex_two_words() {
+ let request = FeatureTester::builder()
+ .files(vec![
+ ("main.tex", "\\addbibresource{main.bib}\n\\cite{foo}"),
+ ("main.bib", "@article{foo bar,}"),
+ ])
+ .main("main.tex")
+ .line(1)
+ .character(6)
+ .build()
+ .completion();
+
+ let context = CursorContext::new(request);
+ let mut actual_items = Vec::new();
+ complete_citations(&context, &mut actual_items, CancellationToken::none());
+
+ assert!(!actual_items.is_empty());
+ for item in actual_items {
+ assert_eq!(item.range, TextRange::new(32.into(), 35.into()));
+ }
+ }
+
+ #[test]
fn test_latex_open_brace() {
let request = FeatureTester::builder()
.files(vec![
@@ -241,4 +263,30 @@ mod tests {
assert_eq!(item.range, TextRange::new(54.into(), 54.into()));
}
}
+
+ #[test]
+ fn test_latex_acronym_two_words() {
+ let request = FeatureTester::builder()
+ .files(vec![
+ (
+ "main.tex",
+ "\\addbibresource{main.bib}\n\\DeclareAcronym{foo}{cite={\na b}}",
+ ),
+ ("main.bib", "@article{foo,}"),
+ ])
+ .main("main.tex")
+ .line(2)
+ .character(0)
+ .build()
+ .completion();
+
+ let context = CursorContext::new(request);
+ let mut actual_items = Vec::new();
+ complete_citations(&context, &mut actual_items, CancellationToken::none());
+
+ assert!(!actual_items.is_empty());
+ for item in actual_items {
+ assert_eq!(item.range, TextRange::new(54.into(), 57.into()));
+ }
+ }
}
diff --git a/support/texlab/src/features/completion/color.rs b/support/texlab/src/features/completion/color.rs
index 0e94af15fe..15a7c341f5 100644
--- a/support/texlab/src/features/completion/color.rs
+++ b/support/texlab/src/features/completion/color.rs
@@ -1,5 +1,4 @@
use cancellation::CancellationToken;
-use cstree::TextRange;
use lsp_types::CompletionParams;
use crate::{
@@ -17,15 +16,7 @@ pub fn complete_colors<'a>(
) -> Option<()> {
cancellation_token.result().ok()?;
- let token = context.cursor.as_latex()?;
- let range = if token.kind() == latex::WORD {
- token.text_range()
- } else {
- TextRange::empty(context.offset)
- };
-
- let group = latex::CurlyGroupWord::cast(token.parent())
- .filter(|group| context.is_inside_latex_curly(group))?;
+ let (_, range, group) = context.find_curly_group_word()?;
latex::ColorReference::cast(group.syntax().parent()?)?;
for name in &LANGUAGE_DATA.colors {
diff --git a/support/texlab/src/features/completion/color_model.rs b/support/texlab/src/features/completion/color_model.rs
index f7f09b6367..a24953caa5 100644
--- a/support/texlab/src/features/completion/color_model.rs
+++ b/support/texlab/src/features/completion/color_model.rs
@@ -18,15 +18,7 @@ pub fn complete_color_models<'a>(
) -> Option<()> {
cancellation_token.result().ok()?;
- let token = context.cursor.as_latex()?;
- let range = if token.kind() == latex::WORD {
- token.text_range()
- } else {
- TextRange::empty(context.offset)
- };
-
- check_color_definition(context, token)
- .or_else(|| check_color_definition_set(context, token))?;
+ let range = check_color_definition(context).or_else(|| check_color_definition_set(context))?;
for name in MODEL_NAMES {
items.push(InternalCompletionItem::new(
@@ -38,30 +30,23 @@ pub fn complete_color_models<'a>(
Some(())
}
-fn check_color_definition(
- context: &CursorContext<CompletionParams>,
- token: &latex::SyntaxToken,
-) -> Option<()> {
- let group = latex::CurlyGroupWord::cast(token.parent())
- .filter(|group| context.is_inside_latex_curly(group))?;
+fn check_color_definition(context: &CursorContext<CompletionParams>) -> Option<TextRange> {
+ let (_, range, group) = context.find_curly_group_word()?;
+
let definition = latex::ColorDefinition::cast(group.syntax().parent()?)?;
definition
.model()
.filter(|model| model.syntax().text_range() == group.syntax().text_range())?;
- Some(())
+ Some(range)
}
-fn check_color_definition_set(
- context: &CursorContext<CompletionParams>,
- token: &latex::SyntaxToken,
-) -> Option<()> {
- let group = latex::CurlyGroupWordList::cast(token.parent())
- .filter(|group| context.is_inside_latex_curly(group))?;
+fn check_color_definition_set(context: &CursorContext<CompletionParams>) -> Option<TextRange> {
+ let (_, range, group) = context.find_curly_group_word_list()?;
let definition = latex::ColorSetDefinition::cast(group.syntax().parent()?)?;
definition
.model_list()
.filter(|model| model.syntax().text_range() == group.syntax().text_range())?;
- Some(())
+ Some(range)
}
#[cfg(test)]
diff --git a/support/texlab/src/features/completion/component_environment.rs b/support/texlab/src/features/completion/component_environment.rs
index fca9d03780..d4340a160a 100644
--- a/support/texlab/src/features/completion/component_environment.rs
+++ b/support/texlab/src/features/completion/component_environment.rs
@@ -1,12 +1,7 @@
use cancellation::CancellationToken;
-use cstree::TextRange;
use lsp_types::CompletionParams;
-use crate::{
- component_db::COMPONENT_DATABASE,
- features::cursor::CursorContext,
- syntax::{latex, CstNode},
-};
+use crate::{component_db::COMPONENT_DATABASE, features::cursor::CursorContext};
use super::types::{InternalCompletionItem, InternalCompletionItemData};
@@ -17,18 +12,7 @@ pub fn complete_component_environments<'a>(
) -> Option<()> {
cancellation_token.result().ok()?;
- let token = context.cursor.as_latex()?;
- let group = latex::CurlyGroupWord::cast(token.parent())
- .filter(|group| context.is_inside_latex_curly(group))?;
- if !matches!(group.syntax().parent()?.kind(), latex::BEGIN | latex::END) {
- return None;
- }
-
- let range = if token.kind() == latex::WORD {
- token.text_range()
- } else {
- TextRange::empty(context.offset)
- };
+ let (_, range) = context.find_environment_name()?;
for component in COMPONENT_DATABASE.linked_components(&context.request.subset) {
cancellation_token.result().ok()?;
diff --git a/support/texlab/src/features/completion/field.rs b/support/texlab/src/features/completion/field.rs
index d7297b481b..ad1042b04d 100644
--- a/support/texlab/src/features/completion/field.rs
+++ b/support/texlab/src/features/completion/field.rs
@@ -26,7 +26,7 @@ pub fn complete_fields<'a>(
let parent = token.parent();
if let Some(entry) = bibtex::Entry::cast(parent) {
- if entry.key()?.text_range() == token.text_range() {
+ if entry.key()?.small_range() == token.text_range() {
return None;
}
} else {
diff --git a/support/texlab/src/features/completion/glossary_ref.rs b/support/texlab/src/features/completion/glossary_ref.rs
index 4529129fd7..66d20e46ff 100644
--- a/support/texlab/src/features/completion/glossary_ref.rs
+++ b/support/texlab/src/features/completion/glossary_ref.rs
@@ -1,5 +1,4 @@
use cancellation::CancellationToken;
-use cstree::TextRange;
use lsp_types::CompletionParams;
use crate::{
@@ -16,15 +15,8 @@ pub fn complete_glossary_entries<'a>(
) -> Option<()> {
cancellation_token.result().ok()?;
- let token = context.cursor.as_latex()?;
- let group = latex::CurlyGroupWord::cast(token.parent())
- .filter(|group| context.is_inside_latex_curly(group))?;
+ let (_, range, group) = context.find_curly_group_word()?;
latex::GlossaryEntryReference::cast(group.syntax().parent()?)?;
- let range = if token.kind() == latex::WORD {
- token.text_range()
- } else {
- TextRange::empty(context.offset)
- };
for document in &context.request.subset.documents {
if let Some(data) = document.data.as_latex() {
@@ -33,8 +25,8 @@ pub fn complete_glossary_entries<'a>(
if let Some(name) = latex::GlossaryEntryDefinition::cast(node)
.and_then(|entry| entry.name())
- .and_then(|name| name.word())
- .map(|name| name.text())
+ .and_then(|name| name.key())
+ .map(|name| name.to_string())
{
items.push(InternalCompletionItem::new(
range,
@@ -42,8 +34,8 @@ pub fn complete_glossary_entries<'a>(
));
} else if let Some(name) = latex::AcronymDefinition::cast(node)
.and_then(|entry| entry.name())
- .and_then(|name| name.word())
- .map(|name| name.text())
+ .and_then(|name| name.key())
+ .map(|name| name.to_string())
{
items.push(InternalCompletionItem::new(
range,
diff --git a/support/texlab/src/features/completion/import.rs b/support/texlab/src/features/completion/import.rs
index ac5f2e6e40..da4c12c02b 100644
--- a/support/texlab/src/features/completion/import.rs
+++ b/support/texlab/src/features/completion/import.rs
@@ -1,5 +1,4 @@
use cancellation::CancellationToken;
-use cstree::TextRange;
use lsp_types::CompletionParams;
use rustc_hash::FxHashSet;
use smol_str::SmolStr;
@@ -17,15 +16,7 @@ pub fn complete_imports<'a>(
items: &mut Vec<InternalCompletionItem<'a>>,
cancellation_token: &CancellationToken,
) -> Option<()> {
- let token = context.cursor.as_latex()?;
- let range = if token.kind() == latex::WORD {
- token.text_range()
- } else {
- TextRange::empty(context.offset)
- };
-
- let group = latex::CurlyGroupWordList::cast(token.parent())
- .filter(|group| context.is_inside_latex_curly(group))?;
+ let (_, range, group) = context.find_curly_group_word_list()?;
let (extension, mut factory): (
&str,
@@ -76,6 +67,8 @@ pub fn complete_imports<'a>(
#[cfg(test)]
mod tests {
+ use cstree::TextRange;
+
use crate::features::testing::FeatureTester;
use super::*;
diff --git a/support/texlab/src/features/completion/include.rs b/support/texlab/src/features/completion/include.rs
index c711ea5ce7..4a8e561866 100644
--- a/support/texlab/src/features/completion/include.rs
+++ b/support/texlab/src/features/completion/include.rs
@@ -25,15 +25,8 @@ pub fn complete_includes<'a>(
return None;
}
- let token = context.cursor.as_latex()?;
- let (path_text, path_range) = if token.kind() == latex::WORD {
- (token.text(), token.text_range())
- } else {
- ("", TextRange::empty(context.offset))
- };
+ let (path_text, path_range, group) = context.find_curly_group_word_list()?;
- let group = latex::CurlyGroupWordList::cast(token.parent())
- .filter(|group| context.is_inside_latex_curly(group))?;
let include = group.syntax().parent()?;
let (include_extension, extensions): (bool, &[&str]) = match include.kind() {
latex::PACKAGE_INCLUDE => (false, &["sty"]),
@@ -62,7 +55,7 @@ pub fn complete_includes<'a>(
TextRange::new(start, path_range.end())
};
- let current_dir = current_dir(context, path_text)?;
+ let current_dir = current_dir(context, &path_text)?;
for entry in fs::read_dir(current_dir).ok()?.filter_map(Result::ok) {
let mut path = entry.path();
diff --git a/support/texlab/src/features/completion/label.rs b/support/texlab/src/features/completion/label.rs
index 2f7e2d8f77..3efb168d0d 100644
--- a/support/texlab/src/features/completion/label.rs
+++ b/support/texlab/src/features/completion/label.rs
@@ -18,26 +18,7 @@ pub fn complete_labels<'a>(
) -> Option<()> {
cancellation_token.result().ok()?;
- let token = context.cursor.as_latex()?;
- let is_math = latex::CurlyGroupWordList::cast(token.parent())
- .filter(|group| context.is_inside_latex_curly(group))
- .and_then(|group| group.syntax().parent())
- .and_then(|reference| latex::LabelReference::cast(reference))
- .and_then(|refernce| refernce.command())
- .map(|reference| reference.text() == "\\eqref")
- .or_else(|| {
- latex::CurlyGroupWord::cast(token.parent())
- .filter(|group| context.is_inside_latex_curly(group))
- .and_then(|group| group.syntax().parent())
- .and_then(|reference| latex::LabelReferenceRange::cast(reference))
- .map(|_| false)
- })?;
-
- let range = if token.kind() == latex::WORD {
- token.text_range()
- } else {
- TextRange::empty(context.offset)
- };
+ let (range, is_math) = find_reference(context).or_else(|| find_reference_range(context))?;
for document in &context.request.subset.documents {
if let Some(data) = document.data.as_latex() {
@@ -49,10 +30,10 @@ pub fn complete_labels<'a>(
{
if let Some(name) = label
.name()
- .and_then(|name| name.word())
- .map(|name| name.text())
+ .and_then(|name| name.key())
+ .map(|name| name.to_string())
{
- match render_label(&context.request.subset, name, Some(label)) {
+ match render_label(&context.request.subset, &name, Some(label)) {
Some(rendered_label) => {
let kind = match &rendered_label.object {
LabelledObject::Section { .. } => Structure::Section,
@@ -112,6 +93,19 @@ pub fn complete_labels<'a>(
Some(())
}
+fn find_reference(context: &CursorContext<CompletionParams>) -> Option<(TextRange, bool)> {
+ let (_, range, group) = context.find_curly_group_word_list()?;
+ let reference = latex::LabelReference::cast(group.syntax().parent()?)?;
+ let is_math = reference.command()?.text() == "\\eqref";
+ Some((range, is_math))
+}
+
+fn find_reference_range(context: &CursorContext<CompletionParams>) -> Option<(TextRange, bool)> {
+ let (_, range, group) = context.find_curly_group_word()?;
+ latex::LabelReferenceRange::cast(group.syntax().parent()?)?;
+ Some((range, false))
+}
+
#[cfg(test)]
mod tests {
use cstree::TextRange;
@@ -193,4 +187,24 @@ mod tests {
assert_eq!(item.range, TextRange::new(11.into(), 11.into()));
}
}
+
+ #[test]
+ fn test_multi_word() {
+ let request = FeatureTester::builder()
+ .files(vec![("main.tex", "\\ref{foo}\\label{foo bar}")])
+ .main("main.tex")
+ .line(0)
+ .character(8)
+ .build()
+ .completion();
+
+ let context = CursorContext::new(request);
+ let mut actual_items = Vec::new();
+ complete_labels(&context, &mut actual_items, CancellationToken::none());
+
+ assert!(!actual_items.is_empty());
+ for item in actual_items {
+ assert_eq!(item.range, TextRange::new(5.into(), 8.into()));
+ }
+ }
}
diff --git a/support/texlab/src/features/completion/theorem.rs b/support/texlab/src/features/completion/theorem.rs
index 54db031a4b..25eea87ab7 100644
--- a/support/texlab/src/features/completion/theorem.rs
+++ b/support/texlab/src/features/completion/theorem.rs
@@ -1,11 +1,7 @@
use cancellation::CancellationToken;
-use cstree::TextRange;
use lsp_types::CompletionParams;
-use crate::{
- features::cursor::CursorContext,
- syntax::{latex, CstNode},
-};
+use crate::features::cursor::CursorContext;
use super::types::{InternalCompletionItem, InternalCompletionItemData};
@@ -18,18 +14,7 @@ pub fn complete_theorem_environments<'a>(
return None;
}
- let token = context.cursor.as_latex()?;
- let group = latex::CurlyGroupWord::cast(token.parent())
- .filter(|group| context.is_inside_latex_curly(group))?;
- if !matches!(group.syntax().parent()?.kind(), latex::BEGIN | latex::END) {
- return None;
- }
-
- let range = if token.kind() == latex::WORD {
- token.text_range()
- } else {
- TextRange::empty(context.offset)
- };
+ let (_, range) = context.find_environment_name()?;
for document in &context.request.subset.documents {
if let Some(data) = document.data.as_latex() {
@@ -49,6 +34,8 @@ pub fn complete_theorem_environments<'a>(
#[cfg(test)]
mod tests {
+ use cstree::TextRange;
+
use crate::features::testing::FeatureTester;
use super::*;
diff --git a/support/texlab/src/features/completion/tikz_library.rs b/support/texlab/src/features/completion/tikz_library.rs
index da2a26cc9b..b9c5e3ec7a 100644
--- a/support/texlab/src/features/completion/tikz_library.rs
+++ b/support/texlab/src/features/completion/tikz_library.rs
@@ -1,5 +1,4 @@
use cancellation::CancellationToken;
-use cstree::TextRange;
use lsp_types::CompletionParams;
use crate::{
@@ -17,15 +16,8 @@ pub fn complete_tikz_libraries<'a>(
) -> Option<()> {
cancellation_token.result().ok()?;
- let token = context.cursor.as_latex()?;
- let range = if token.kind() == latex::WORD {
- token.text_range()
- } else {
- TextRange::empty(context.offset)
- };
+ let (_, range, group) = context.find_curly_group_word_list()?;
- let group = latex::CurlyGroupWordList::cast(token.parent())
- .filter(|group| context.is_inside_latex_curly(group))?;
let import = latex::TikzLibraryImport::cast(group.syntax().parent()?)?;
if import.command()?.text() == "\\usepgflibrary" {
@@ -49,6 +41,8 @@ pub fn complete_tikz_libraries<'a>(
#[cfg(test)]
mod tests {
+ use cstree::TextRange;
+
use crate::features::testing::FeatureTester;
use super::*;
diff --git a/support/texlab/src/features/completion/types.rs b/support/texlab/src/features/completion/types.rs
index b58a155fc4..b7e5c09592 100644
--- a/support/texlab/src/features/completion/types.rs
+++ b/support/texlab/src/features/completion/types.rs
@@ -40,7 +40,7 @@ pub enum InternalCompletionItemData<'a> {
BeginCommand,
Citation {
uri: Arc<Uri>,
- key: &'a str,
+ key: String,
text: String,
ty: Structure,
},
@@ -67,10 +67,10 @@ pub enum InternalCompletionItemData<'a> {
name: &'a str,
},
Acronym {
- name: &'a str,
+ name: String,
},
GlossaryEntry {
- name: &'a str,
+ name: String,
},
File {
name: SmolStr,
@@ -79,7 +79,7 @@ pub enum InternalCompletionItemData<'a> {
name: SmolStr,
},
Label {
- name: &'a str,
+ name: String,
kind: Structure,
header: Option<String>,
footer: Option<String>,
diff --git a/support/texlab/src/features/completion/user_environment.rs b/support/texlab/src/features/completion/user_environment.rs
index a1a5701fac..5529143adc 100644
--- a/support/texlab/src/features/completion/user_environment.rs
+++ b/support/texlab/src/features/completion/user_environment.rs
@@ -1,11 +1,7 @@
use cancellation::CancellationToken;
-use cstree::TextRange;
use lsp_types::CompletionParams;
-use crate::{
- features::cursor::CursorContext,
- syntax::{latex, CstNode},
-};
+use crate::features::cursor::CursorContext;
use super::types::{InternalCompletionItem, InternalCompletionItemData};
@@ -16,18 +12,7 @@ pub fn complete_user_environments<'a>(
) -> Option<()> {
cancellation_token.result().ok()?;
- let token = context.cursor.as_latex()?;
- let group = latex::CurlyGroupWord::cast(token.parent())
- .filter(|group| context.is_inside_latex_curly(group))?;
- if !matches!(group.syntax().parent()?.kind(), latex::BEGIN | latex::END) {
- return None;
- }
-
- let range = if token.kind() == latex::WORD {
- token.text_range()
- } else {
- TextRange::empty(context.offset)
- };
+ let (name, range) = context.find_environment_name()?;
for document in &context.request.subset.documents {
if let Some(data) = document.data.as_latex() {
@@ -35,7 +20,7 @@ pub fn complete_user_environments<'a>(
.extras
.environment_names
.iter()
- .filter(|name| name.as_str() != token.text())
+ .filter(|n| n.as_str() != name)
{
cancellation_token.result().ok()?;
items.push(InternalCompletionItem::new(
diff --git a/support/texlab/src/features/cursor.rs b/support/texlab/src/features/cursor.rs
index 19079b841b..6e8719987a 100644
--- a/support/texlab/src/features/cursor.rs
+++ b/support/texlab/src/features/cursor.rs
@@ -1,7 +1,7 @@
use cstree::{TextRange, TextSize};
use lsp_types::{
- CompletionParams, GotoDefinitionParams, HoverParams, Position, ReferenceParams, RenameParams,
- TextDocumentPositionParams,
+ CompletionParams, DocumentHighlightParams, GotoDefinitionParams, HoverParams, Position,
+ ReferenceParams, RenameParams, TextDocumentPositionParams,
};
use crate::{
@@ -42,6 +42,14 @@ impl Cursor {
return Some(Self::Latex(right));
}
+ if left.kind() == latex::WHITESPACE && left.parent().kind() == latex::KEY {
+ return Some(Self::Latex(left));
+ }
+
+ if right.kind() == latex::WHITESPACE && right.parent().kind() == latex::KEY {
+ return Some(Self::Latex(right));
+ }
+
Some(Self::Latex(right))
}
@@ -149,66 +157,116 @@ impl<P: HasPosition> CursorContext<P> {
group.small_range().contains(self.offset) || group.right_curly().is_none()
}
- pub fn find_citation_key_word(&self) -> Option<(&str, TextRange)> {
- let key = self
+ pub fn find_citation_key_word(&self) -> Option<(String, TextRange)> {
+ let word = self
.cursor
.as_latex()
.filter(|token| token.kind() == latex::WORD)?;
- let group = latex::CurlyGroupWordList::cast(key.parent())?;
+ let key = latex::Key::cast(word.parent())?;
+
+ let group = latex::CurlyGroupWordList::cast(key.syntax().parent()?)?;
latex::Citation::cast(group.syntax().parent()?)?;
- Some((key.text(), key.text_range()))
+ Some((key.to_string(), key.small_range()))
}
- pub fn find_citation_key_command(&self) -> Option<(&str, TextRange)> {
+ pub fn find_citation_key_command(&self) -> Option<(String, TextRange)> {
let command = self.cursor.as_latex()?;
let citation = latex::Citation::cast(command.parent())?;
- let key = citation.key_list()?.words().next()?;
- Some((key.text(), key.text_range()))
+ let key = citation.key_list()?.keys().next()?;
+ Some((key.to_string(), key.small_range()))
}
- pub fn find_entry_key(&self) -> Option<(&str, TextRange)> {
- let key = self
+ pub fn find_entry_key(&self) -> Option<(String, TextRange)> {
+ let word = self
.cursor
.as_bibtex()
.filter(|token| token.kind() == bibtex::WORD)?;
- bibtex::Entry::cast(key.parent())?;
- Some((key.text(), key.text_range()))
+ let key = bibtex::Key::cast(word.parent())?;
+
+ bibtex::Entry::cast(key.syntax().parent()?)?;
+ Some((key.to_string(), key.small_range()))
}
- pub fn find_label_name_word(&self) -> Option<(&str, TextRange)> {
+ pub fn find_label_name_key(&self) -> Option<(String, TextRange)> {
let name = self
.cursor
.as_latex()
.filter(|token| token.kind() == latex::WORD)?;
+ let key = latex::Key::cast(name.parent())?;
+
if matches!(
- name.parent().parent()?.kind(),
+ key.syntax().parent()?.parent()?.kind(),
latex::LABEL_DEFINITION | latex::LABEL_REFERENCE | latex::LABEL_REFERENCE_RANGE
) {
- Some((name.text(), name.text_range()))
+ Some((key.to_string(), key.small_range()))
} else {
None
}
}
- pub fn find_label_name_command(&self) -> Option<(&str, TextRange)> {
+ pub fn find_label_name_command(&self) -> Option<(String, TextRange)> {
let node = self.cursor.as_latex()?.parent();
if let Some(label) = latex::LabelDefinition::cast(node) {
- let name = label.name()?.word()?;
- Some((name.text(), name.text_range()))
+ let name = label.name()?.key()?;
+ Some((name.to_string(), name.small_range()))
} else if let Some(label) = latex::LabelReference::cast(node) {
- let name = label.name_list()?.words().next()?;
- Some((name.text(), name.text_range()))
+ let name = label.name_list()?.keys().next()?;
+ Some((name.to_string(), name.small_range()))
} else if let Some(label) = latex::LabelReferenceRange::cast(node) {
- let name = label.from()?.word()?;
- Some((name.text(), name.text_range()))
+ let name = label.from()?.key()?;
+ Some((name.to_string(), name.small_range()))
} else {
None
}
}
+
+ pub fn find_environment_name(&self) -> Option<(String, TextRange)> {
+ let (name, range, group) = self.find_curly_group_word()?;
+
+ if !matches!(group.syntax().parent()?.kind(), latex::BEGIN | latex::END) {
+ return None;
+ }
+
+ Some((name, range))
+ }
+
+ pub fn find_curly_group_word(&self) -> Option<(String, TextRange, latex::CurlyGroupWord)> {
+ let token = self.cursor.as_latex()?;
+ let key = latex::Key::cast(token.parent());
+
+ let group = key
+ .as_ref()
+ .and_then(|key| key.syntax().parent())
+ .unwrap_or(token.parent());
+
+ let group =
+ latex::CurlyGroupWord::cast(group).filter(|group| self.is_inside_latex_curly(group))?;
+
+ key.map(|key| (key.to_string(), key.small_range(), group))
+ .or_else(|| Some((String::new(), TextRange::empty(self.offset), group)))
+ }
+
+ pub fn find_curly_group_word_list(
+ &self,
+ ) -> Option<(String, TextRange, latex::CurlyGroupWordList)> {
+ let token = self.cursor.as_latex()?;
+ let key = latex::Key::cast(token.parent());
+
+ let group = key
+ .as_ref()
+ .and_then(|key| key.syntax().parent())
+ .unwrap_or(token.parent());
+
+ let group = latex::CurlyGroupWordList::cast(group)
+ .filter(|group| self.is_inside_latex_curly(group))?;
+
+ key.map(|key| (key.to_string(), key.small_range(), group))
+ .or_else(|| Some((String::new(), TextRange::empty(self.offset), group)))
+ }
}
pub trait HasPosition {
@@ -250,3 +308,9 @@ impl HasPosition for GotoDefinitionParams {
self.text_document_position_params.position
}
}
+
+impl HasPosition for DocumentHighlightParams {
+ fn position(&self) -> Position {
+ self.text_document_position_params.position
+ }
+}
diff --git a/support/texlab/src/features/definition/entry.rs b/support/texlab/src/features/definition/entry.rs
index 7f489ec848..b04490dc32 100644
--- a/support/texlab/src/features/definition/entry.rs
+++ b/support/texlab/src/features/definition/entry.rs
@@ -13,29 +13,31 @@ pub fn goto_entry_definition(
) -> Option<Vec<LocationLink>> {
let main_document = context.request.main_document();
- let key = context
+ let word = context
.cursor
.as_latex()
.filter(|token| token.kind() == latex::WORD)?;
- latex::Citation::cast(key.parent().parent()?)?;
+ let key = latex::Key::cast(word.parent())?;
+
+ latex::Citation::cast(key.syntax().parent()?.parent()?)?;
let origin_selection_range = main_document
.line_index
- .line_col_lsp_range(key.text_range());
+ .line_col_lsp_range(key.small_range());
for document in &context.request.subset.documents {
if let Some(data) = document.data.as_bibtex() {
for entry in data.root.children().filter_map(bibtex::Entry::cast) {
cancellation_token.result().ok()?;
- if let Some(key) = entry.key().filter(|k| k.text() == key.text()) {
+ if let Some(key) = entry.key().filter(|k| k.to_string() == key.to_string()) {
return Some(vec![LocationLink {
origin_selection_range: Some(origin_selection_range),
target_uri: document.uri.as_ref().clone().into(),
target_selection_range: document
.line_index
- .line_col_lsp_range(key.text_range()),
+ .line_col_lsp_range(key.small_range()),
target_range: document.line_index.line_col_lsp_range(entry.small_range()),
}]);
}
diff --git a/support/texlab/src/features/definition/label.rs b/support/texlab/src/features/definition/label.rs
index 65f0981de0..fd30b1fbc5 100644
--- a/support/texlab/src/features/definition/label.rs
+++ b/support/texlab/src/features/definition/label.rs
@@ -1,7 +1,10 @@
use cancellation::CancellationToken;
use lsp_types::{GotoDefinitionParams, LocationLink};
-use crate::{features::cursor::CursorContext, find_label_definition, render_label, LineIndexExt};
+use crate::{
+ features::cursor::CursorContext, find_label_definition, render_label, syntax::CstNode,
+ LineIndexExt,
+};
pub fn goto_label_definition(
context: &CursorContext<GotoDefinitionParams>,
@@ -10,7 +13,7 @@ pub fn goto_label_definition(
let main_document = context.request.main_document();
let (name_text, name_range) = context
- .find_label_name_word()
+ .find_label_name_key()
.or_else(|| context.find_label_name_command())?;
let origin_selection_range = main_document.line_index.line_col_lsp_range(name_range);
@@ -18,10 +21,10 @@ pub fn goto_label_definition(
for document in &context.request.subset.documents {
cancellation_token.result().ok()?;
if let Some(data) = document.data.as_latex() {
- if let Some(definition) = find_label_definition(&data.root, name_text) {
- let target_selection_range = definition.name()?.word()?.text_range();
+ if let Some(definition) = find_label_definition(&data.root, &name_text) {
+ let target_selection_range = definition.name()?.key()?.small_range();
let target_range =
- render_label(&context.request.subset, name_text, Some(definition))
+ render_label(&context.request.subset, &name_text, Some(definition))
.map(|label| label.range)
.unwrap_or(target_selection_range);
diff --git a/support/texlab/src/features/formatting.rs b/support/texlab/src/features/formatting.rs
index 4492a0532d..c7c2dc410a 100644
--- a/support/texlab/src/features/formatting.rs
+++ b/support/texlab/src/features/formatting.rs
@@ -4,7 +4,7 @@ mod latexindent;
use cancellation::CancellationToken;
use lsp_types::{DocumentFormattingParams, TextEdit};
-use crate::BibtexFormatter;
+use crate::{BibtexFormatter, LatexFormatter};
use self::{bibtex_internal::format_bibtex_internal, latexindent::format_with_latexindent};
@@ -19,6 +19,10 @@ pub fn format_source_code(
edits = edits.or_else(|| format_bibtex_internal(&request, cancellation_token));
}
+ if request.context.options.read().unwrap().latex_formatter == LatexFormatter::Texlab {
+ edits = edits.or_else(|| Some(vec![]));
+ }
+
edits = edits.or_else(|| format_with_latexindent(&request, cancellation_token));
edits
}
diff --git a/support/texlab/src/features/formatting/bibtex_internal.rs b/support/texlab/src/features/formatting/bibtex_internal.rs
index 8481f561e7..641bee0cfe 100644
--- a/support/texlab/src/features/formatting/bibtex_internal.rs
+++ b/support/texlab/src/features/formatting/bibtex_internal.rs
@@ -148,7 +148,7 @@ impl<'a> Formatter<'a> {
self.visit_token_lowercase(entry.ty().unwrap());
self.output.push('{');
if let Some(key) = entry.key() {
- self.output.push_str(key.text());
+ self.output.push_str(&key.to_string());
self.output.push(',');
self.output.push('\n');
for field in entry.fields() {
diff --git a/support/texlab/src/features/formatting/latexindent.rs b/support/texlab/src/features/formatting/latexindent.rs
index f603728a5d..300f512578 100644
--- a/support/texlab/src/features/formatting/latexindent.rs
+++ b/support/texlab/src/features/formatting/latexindent.rs
@@ -1,50 +1,98 @@
use std::{
- io::{BufWriter, Write},
+ fs,
process::{Command, Stdio},
};
use cancellation::CancellationToken;
use cstree::{TextLen, TextRange};
use lsp_types::{DocumentFormattingParams, TextEdit};
+use tempfile::tempdir;
-use crate::{features::FeatureRequest, LineIndexExt};
+use crate::{features::FeatureRequest, DocumentLanguage, LineIndexExt};
pub fn format_with_latexindent(
request: &FeatureRequest<DocumentFormattingParams>,
_cancellation_token: &CancellationToken,
) -> Option<Vec<TextEdit>> {
+ let directory = tempdir().ok()?;
let document = request.main_document();
- let current_dir = &request.context.current_directory;
let options = request.context.options.read().unwrap();
- let current_dir = match &options.root_directory {
- Some(root_directory) => current_dir.join(root_directory),
- None => current_dir.clone(),
+ let current_dir = options
+ .root_directory
+ .as_ref()
+ .cloned()
+ .or_else(|| {
+ if document.uri.scheme() == "file" {
+ document
+ .uri
+ .to_file_path()
+ .unwrap()
+ .parent()
+ .map(ToOwned::to_owned)
+ } else {
+ None
+ }
+ })
+ .unwrap_or_else(|| ".".into());
+
+ let local = match &options.latexindent.local {
+ Some(local) => format!("--local={}", local),
+ None => "-l".to_string(),
};
+
+ let modify_line_breaks = options.latexindent.modify_line_breaks;
+
drop(options);
- let mut process = Command::new("latexindent")
- .arg("-l")
+ let path = directory.path();
+ let _ = fs::copy(
+ current_dir.join("localSettings.yaml"),
+ path.join("localSettings.yaml"),
+ );
+ let _ = fs::copy(
+ current_dir.join(".localSettings.yaml"),
+ path.join(".localSettings.yaml"),
+ );
+ let _ = fs::copy(
+ current_dir.join("latexindent.yaml"),
+ path.join("latexindent.yaml"),
+ );
+
+ let name = if document.language() == DocumentLanguage::Bibtex {
+ "file.bib"
+ } else {
+ "file.tex"
+ };
+
+ fs::write(directory.path().join(name), &document.text).ok()?;
+
+ let mut args = Vec::new();
+ if modify_line_breaks {
+ args.push("--modifylinebreaks");
+ }
+ args.push(&local);
+ args.push(name);
+
+ let output = Command::new("latexindent")
+ .args(&args)
.current_dir(current_dir)
- .stdin(Stdio::piped())
+ .stdin(Stdio::null())
.stdout(Stdio::piped())
.stderr(Stdio::null())
- .spawn()
+ .current_dir(directory.path())
+ .output()
.ok()?;
- let stdin = process.stdin.take()?;
- let mut stdin = BufWriter::new(stdin);
- stdin.write_all(document.text.as_bytes()).ok()?;
- drop(stdin);
-
- let output = process.wait_with_output().ok()?;
-
let new_text = String::from_utf8_lossy(&output.stdout).into_owned();
-
- Some(vec![TextEdit {
- range: document
- .line_index
- .line_col_lsp_range(TextRange::new(0.into(), document.text.text_len())),
- new_text,
- }])
+ if new_text.is_empty() {
+ None
+ } else {
+ Some(vec![TextEdit {
+ range: document
+ .line_index
+ .line_col_lsp_range(TextRange::new(0.into(), document.text.text_len())),
+ new_text,
+ }])
+ }
}
diff --git a/support/texlab/src/features/highlight.rs b/support/texlab/src/features/highlight.rs
index e1aea6e2ad..386018f353 100644
--- a/support/texlab/src/features/highlight.rs
+++ b/support/texlab/src/features/highlight.rs
@@ -5,11 +5,12 @@ use lsp_types::{DocumentHighlight, DocumentHighlightParams};
use self::label::find_label_highlights;
-use super::FeatureRequest;
+use super::{cursor::CursorContext, FeatureRequest};
pub fn find_document_highlights(
request: FeatureRequest<DocumentHighlightParams>,
- token: &CancellationToken,
+ cancellation_token: &CancellationToken,
) -> Option<Vec<DocumentHighlight>> {
- find_label_highlights(&request, token)
+ let context = CursorContext::new(request);
+ find_label_highlights(&context, cancellation_token)
}
diff --git a/support/texlab/src/features/highlight/label.rs b/support/texlab/src/features/highlight/label.rs
index 4c94180f2a..9694993033 100644
--- a/support/texlab/src/features/highlight/label.rs
+++ b/support/texlab/src/features/highlight/label.rs
@@ -2,48 +2,32 @@ use cancellation::CancellationToken;
use lsp_types::{DocumentHighlight, DocumentHighlightKind, DocumentHighlightParams};
use crate::{
- features::FeatureRequest,
+ features::cursor::CursorContext,
syntax::{latex, CstNode},
LineIndexExt,
};
pub fn find_label_highlights(
- request: &FeatureRequest<DocumentHighlightParams>,
- token: &CancellationToken,
+ context: &CursorContext<DocumentHighlightParams>,
+ cancellation_token: &CancellationToken,
) -> Option<Vec<DocumentHighlight>> {
- let main_document = request.main_document();
-
- let offset = main_document
- .line_index
- .offset_lsp(request.params.text_document_position_params.position);
+ let (name_text, _) = context.find_label_name_key()?;
+ let main_document = context.request.main_document();
let data = main_document.data.as_latex()?;
- let name = data.root.token_at_offset(offset).right_biased()?;
- if name.kind() != latex::WORD {
- return None;
- }
-
- if !matches!(
- name.parent().parent()?.kind(),
- latex::LABEL_DEFINITION | latex::LABEL_REFERENCE | latex::LABEL_REFERENCE_RANGE
- ) {
- return None;
- }
let mut highlights = Vec::new();
for node in data.root.descendants() {
- if token.is_canceled() {
- return None;
- }
+ cancellation_token.result().ok()?;
if let Some(label_name) = latex::LabelDefinition::cast(node)
.and_then(|label| label.name())
- .and_then(|label_name| label_name.word())
- .filter(|label_name| label_name.text() == name.text())
+ .and_then(|label_name| label_name.key())
+ .filter(|label_name| label_name.to_string() == name_text)
{
let range = main_document
.line_index
- .line_col_lsp_range(label_name.text_range());
+ .line_col_lsp_range(label_name.small_range());
highlights.push(DocumentHighlight {
range,
@@ -53,12 +37,12 @@ pub fn find_label_highlights(
for label_name in label
.name_list()
.into_iter()
- .flat_map(|name| name.words())
- .filter(|label_name| label_name.text() == name.text())
+ .flat_map(|name| name.keys())
+ .filter(|label_name| label_name.to_string() == name_text)
{
let range = main_document
.line_index
- .line_col_lsp_range(label_name.text_range());
+ .line_col_lsp_range(label_name.small_range());
highlights.push(DocumentHighlight {
range,
@@ -68,12 +52,12 @@ pub fn find_label_highlights(
} else if let Some(label) = latex::LabelReferenceRange::cast(node) {
if let Some(label_name) = label
.from()
- .and_then(|label_name| label_name.word())
- .filter(|label_name| label_name.text() == name.text())
+ .and_then(|label_name| label_name.key())
+ .filter(|label_name| label_name.to_string() == name_text)
{
let range = main_document
.line_index
- .line_col_lsp_range(label_name.text_range());
+ .line_col_lsp_range(label_name.small_range());
highlights.push(DocumentHighlight {
range,
@@ -83,12 +67,12 @@ pub fn find_label_highlights(
if let Some(label_name) = label
.to()
- .and_then(|label_name| label_name.word())
- .filter(|label_name| label_name.text() == name.text())
+ .and_then(|label_name| label_name.key())
+ .filter(|label_name| label_name.to_string() == name_text)
{
let range = main_document
.line_index
- .line_col_lsp_range(label_name.text_range());
+ .line_col_lsp_range(label_name.small_range());
highlights.push(DocumentHighlight {
range,
@@ -118,8 +102,9 @@ mod tests {
.character(0)
.build()
.highlight();
+ let context = CursorContext::new(request);
- let actual_links = find_label_highlights(&request, CancellationToken::none());
+ let actual_links = find_label_highlights(&context, CancellationToken::none());
assert!(actual_links.is_none());
}
@@ -133,8 +118,9 @@ mod tests {
.character(0)
.build()
.highlight();
+ let context = CursorContext::new(request);
- let actual_links = find_label_highlights(&request, CancellationToken::none());
+ let actual_links = find_label_highlights(&context, CancellationToken::none());
assert!(actual_links.is_none());
}
@@ -148,8 +134,9 @@ mod tests {
.character(7)
.build();
let request = tester.highlight();
+ let context = CursorContext::new(request);
- let actual_highlights = find_label_highlights(&request, CancellationToken::none()).unwrap();
+ let actual_highlights = find_label_highlights(&context, CancellationToken::none()).unwrap();
let expected_highlights = vec![
DocumentHighlight {
diff --git a/support/texlab/src/features/hover/label.rs b/support/texlab/src/features/hover/label.rs
index 79afe7d250..26477feb7c 100644
--- a/support/texlab/src/features/hover/label.rs
+++ b/support/texlab/src/features/hover/label.rs
@@ -10,10 +10,10 @@ pub fn find_label_hover(
let main_document = context.request.main_document();
let (name_text, name_range) = context
- .find_label_name_word()
+ .find_label_name_key()
.or_else(|| context.find_label_name_command())?;
- let label = render_label(&context.request.subset, name_text, None)?;
+ let label = render_label(&context.request.subset, &name_text, None)?;
Some(Hover {
range: Some(main_document.line_index.line_col_lsp_range(name_range)),
diff --git a/support/texlab/src/features/reference/entry.rs b/support/texlab/src/features/reference/entry.rs
index fbbcbdb4cc..a9e15ba5b6 100644
--- a/support/texlab/src/features/reference/entry.rs
+++ b/support/texlab/src/features/reference/entry.rs
@@ -26,9 +26,9 @@ pub fn find_entry_references(
.descendants()
.filter_map(latex::Citation::cast)
.filter_map(|citation| citation.key_list())
- .flat_map(|keys| keys.words())
- .filter(|key| key.text() == key_text)
- .map(|key| document.line_index.line_col_lsp_range(key.text_range()))
+ .flat_map(|keys| keys.keys())
+ .filter(|key| key.to_string() == key_text)
+ .map(|key| document.line_index.line_col_lsp_range(key.small_range()))
.for_each(|range| {
references.push(Location::new(document.uri.as_ref().clone().into(), range));
});
@@ -38,8 +38,8 @@ pub fn find_entry_references(
.children()
.filter_map(bibtex::Entry::cast)
.filter_map(|entry| entry.key())
- .filter(|key| key.text() == key_text)
- .map(|key| document.line_index.line_col_lsp_range(key.text_range()))
+ .filter(|key| key.to_string() == key_text)
+ .map(|key| document.line_index.line_col_lsp_range(key.small_range()))
.for_each(|range| {
references.push(Location::new(document.uri.as_ref().clone().into(), range));
});
diff --git a/support/texlab/src/features/reference/label.rs b/support/texlab/src/features/reference/label.rs
index e9aa3a8510..45c6b90137 100644
--- a/support/texlab/src/features/reference/label.rs
+++ b/support/texlab/src/features/reference/label.rs
@@ -11,7 +11,7 @@ pub fn find_label_references(
cancellation_token.result().ok()?;
let (name_text, _) = context
- .find_label_name_word()
+ .find_label_name_key()
.or_else(|| context.find_label_name_command())?;
for document in &context.request.subset.documents {
diff --git a/support/texlab/src/features/rename/entry.rs b/support/texlab/src/features/rename/entry.rs
index 14fbfd42d7..35a77d926e 100644
--- a/support/texlab/src/features/rename/entry.rs
+++ b/support/texlab/src/features/rename/entry.rs
@@ -4,7 +4,7 @@ use cancellation::CancellationToken;
use lsp_types::{Range, RenameParams, TextEdit, WorkspaceEdit};
use crate::{
- features::cursor::{Cursor, CursorContext, HasPosition},
+ features::cursor::{CursorContext, HasPosition},
syntax::{bibtex, latex, CstNode},
DocumentData, LineIndexExt,
};
@@ -13,18 +13,9 @@ pub fn prepare_entry_rename<P: HasPosition>(
context: &CursorContext<P>,
_cancellation_token: &CancellationToken,
) -> Option<Range> {
- let range = match &context.cursor {
- Cursor::Latex(token) if token.kind() == latex::WORD => {
- let group = latex::CurlyGroupWordList::cast(token.parent())?;
- latex::Citation::cast(group.syntax().parent()?)?;
- token.text_range()
- }
- Cursor::Bibtex(token) if token.kind() == bibtex::WORD => {
- bibtex::Entry::cast(token.parent())?;
- token.text_range()
- }
- _ => return None,
- };
+ let (_, range) = context
+ .find_citation_key_word()
+ .or_else(|| context.find_entry_key())?;
Some(
context
@@ -41,11 +32,9 @@ pub fn rename_entry(
) -> Option<WorkspaceEdit> {
cancellation_token.result().ok()?;
prepare_entry_rename(context, cancellation_token)?;
- let key_text = context
- .cursor
- .as_latex()
- .map(|token| token.text())
- .or_else(|| context.cursor.as_bibtex().map(|token| token.text()))?;
+ let (key_text, _) = context
+ .find_citation_key_word()
+ .or_else(|| context.find_entry_key())?;
let mut changes = HashMap::new();
for document in &context.request.subset.documents {
@@ -57,9 +46,9 @@ pub fn rename_entry(
.descendants()
.filter_map(latex::Citation::cast)
.filter_map(|citation| citation.key_list())
- .flat_map(|keys| keys.words())
- .filter(|key| key.text() == key_text)
- .map(|key| document.line_index.line_col_lsp_range(key.text_range()))
+ .flat_map(|keys| keys.keys())
+ .filter(|key| key.to_string() == key_text)
+ .map(|key| document.line_index.line_col_lsp_range(key.small_range()))
.map(|range| TextEdit::new(range, context.request.params.new_name.clone()))
.collect();
changes.insert(document.uri.as_ref().clone().into(), edits);
@@ -70,8 +59,8 @@ pub fn rename_entry(
.descendants()
.filter_map(bibtex::Entry::cast)
.filter_map(|entry| entry.key())
- .filter(|key| key.text() == key_text)
- .map(|key| document.line_index.line_col_lsp_range(key.text_range()))
+ .filter(|key| key.to_string() == key_text)
+ .map(|key| document.line_index.line_col_lsp_range(key.small_range()))
.map(|range| TextEdit::new(range, context.request.params.new_name.clone()))
.collect();
changes.insert(document.uri.as_ref().clone().into(), edits);
diff --git a/support/texlab/src/features/rename/label.rs b/support/texlab/src/features/rename/label.rs
index 11b414ccfa..a73a0064bf 100644
--- a/support/texlab/src/features/rename/label.rs
+++ b/support/texlab/src/features/rename/label.rs
@@ -13,20 +13,14 @@ pub fn prepare_label_rename<P: HasPosition>(
context: &CursorContext<P>,
_cancellation_token: &CancellationToken,
) -> Option<Range> {
- let name = context.cursor.as_latex()?;
- name.parent().parent().filter(|node| {
- matches!(
- node.kind(),
- latex::LABEL_DEFINITION | latex::LABEL_REFERENCE | latex::LABEL_REFERENCE_RANGE
- )
- })?;
+ let (_, range) = context.find_label_name_key()?;
Some(
context
.request
.main_document()
.line_index
- .line_col_lsp_range(name.text_range()),
+ .line_col_lsp_range(range),
)
}
@@ -35,7 +29,8 @@ pub fn rename_label(
cancellation_token: &CancellationToken,
) -> Option<WorkspaceEdit> {
prepare_label_rename(context, cancellation_token)?;
- let name_text = context.cursor.as_latex()?.text();
+ let (name_text, _) = context.find_label_name_key()?;
+
let mut changes = HashMap::new();
for document in &context.request.subset.documents {
cancellation_token.result().ok()?;
@@ -44,9 +39,9 @@ pub fn rename_label(
for node in data.root.descendants() {
if let Some(range) = latex::LabelDefinition::cast(node)
.and_then(|label| label.name())
- .and_then(|name| name.word())
- .filter(|name| name.text() == name_text)
- .map(|name| document.line_index.line_col_lsp_range(name.text_range()))
+ .and_then(|name| name.key())
+ .filter(|name| name.to_string() == name_text)
+ .map(|name| document.line_index.line_col_lsp_range(name.small_range()))
{
edits.push(TextEdit::new(
range,
@@ -57,9 +52,9 @@ pub fn rename_label(
latex::LabelReference::cast(node)
.and_then(|label| label.name_list())
.into_iter()
- .flat_map(|label| label.words())
- .filter(|name| name.text() == name_text)
- .map(|name| document.line_index.line_col_lsp_range(name.text_range()))
+ .flat_map(|label| label.keys())
+ .filter(|name| name.to_string() == name_text)
+ .map(|name| document.line_index.line_col_lsp_range(name.small_range()))
.for_each(|range| {
edits.push(TextEdit::new(
range,
@@ -70,22 +65,22 @@ pub fn rename_label(
if let Some(label) = latex::LabelReferenceRange::cast(node) {
if let Some(name1) = label
.from()
- .and_then(|name| name.word())
- .filter(|name| name.text() == name_text)
+ .and_then(|name| name.key())
+ .filter(|name| name.to_string() == name_text)
{
edits.push(TextEdit::new(
- document.line_index.line_col_lsp_range(name1.text_range()),
+ document.line_index.line_col_lsp_range(name1.small_range()),
context.request.params.new_name.clone(),
));
}
if let Some(name2) = label
.from()
- .and_then(|name| name.word())
- .filter(|name| name.text() == name_text)
+ .and_then(|name| name.key())
+ .filter(|name| name.to_string() == name_text)
{
edits.push(TextEdit::new(
- document.line_index.line_col_lsp_range(name2.text_range()),
+ document.line_index.line_col_lsp_range(name2.small_range()),
context.request.params.new_name.clone(),
));
}
diff --git a/support/texlab/src/features/symbol/bibtex.rs b/support/texlab/src/features/symbol/bibtex.rs
index e030195880..db555a7176 100644
--- a/support/texlab/src/features/symbol/bibtex.rs
+++ b/support/texlab/src/features/symbol/bibtex.rs
@@ -68,7 +68,7 @@ pub fn find_bibtex_symbols(
.unwrap_or(BibtexEntryTypeCategory::Misc);
buf.push(InternalSymbol {
- name: key.text().to_string(),
+ name: key.to_string(),
label: None,
kind: InternalSymbolKind::Entry(category),
deprecated: false,
@@ -77,7 +77,7 @@ pub fn find_bibtex_symbols(
.line_col_lsp_range(entry.small_range()),
selection_range: main_document
.line_index
- .line_col_lsp_range(key.text_range()),
+ .line_col_lsp_range(key.small_range()),
children,
});
}
diff --git a/support/texlab/src/features/symbol/latex.rs b/support/texlab/src/features/symbol/latex.rs
index ce584c0c76..ec549c87fe 100644
--- a/support/texlab/src/features/symbol/latex.rs
+++ b/support/texlab/src/features/symbol/latex.rs
@@ -59,25 +59,25 @@ fn visit(context: &mut Context, node: &latex::SyntaxNode) -> Vec<InternalSymbol>
latex::ENVIRONMENT => latex::Environment::cast(node)
.and_then(|env| env.begin())
.and_then(|begin| begin.name())
- .and_then(|name| name.word())
- .map(|name| name.text())
+ .and_then(|name| name.key())
+ .map(|name| name.to_string())
.and_then(|name| {
if LANGUAGE_DATA
.math_environments
.iter()
- .any(|env| env == name)
+ .any(|env| env == &name)
{
visit_equation_environment(context, node)
} else if LANGUAGE_DATA
.enum_environments
.iter()
- .any(|env| env == name)
+ .any(|env| env == &name)
{
- visit_enumeration(context, node, name)
- } else if let Ok(float_kind) = LabelledFloatKind::from_str(name) {
+ visit_enumeration(context, node, &name)
+ } else if let Ok(float_kind) = LabelledFloatKind::from_str(&name) {
visit_float(context, node, float_kind)
} else {
- visit_theorem(context, node, name)
+ visit_theorem(context, node, &name)
}
}),
_ => None,
@@ -161,12 +161,12 @@ fn visit_enum_item(context: &mut Context, node: &latex::SyntaxNode) -> Option<In
.filter_map(latex::Environment::cast)
.filter_map(|environment| environment.begin())
.filter_map(|begin| begin.name())
- .filter_map(|name| name.word())
+ .filter_map(|name| name.key())
.any(|name| {
LANGUAGE_DATA
.enum_environments
.iter()
- .any(|e| e == name.text())
+ .any(|e| e == &name.to_string())
})
{
return None;
@@ -471,7 +471,7 @@ fn find_label_by_parent(
) -> Option<NumberedLabel> {
let node = parent.children().find_map(latex::LabelDefinition::cast)?;
- let name = node.name()?.word()?.text();
+ let name = node.name()?.key()?.to_string();
let range = context
.subset
.documents
@@ -479,7 +479,7 @@ fn find_label_by_parent(
.line_index
.line_col_lsp_range(node.small_range());
- let number = find_label_number(&context.subset, name);
+ let number = find_label_number(&context.subset, &name);
Some(NumberedLabel {
name: name.to_string(),
range,
diff --git a/support/texlab/src/label.rs b/support/texlab/src/label.rs
index eead07814e..3d40b1620c 100644
--- a/support/texlab/src/label.rs
+++ b/support/texlab/src/label.rs
@@ -157,8 +157,9 @@ pub fn find_label_definition<'a>(
.find(|label| {
label
.name()
- .and_then(|name| name.word())
- .map(|name| name.text())
+ .and_then(|name| name.key())
+ .map(|name| name.to_string())
+ .as_deref()
== Some(label_name)
})
}
@@ -178,7 +179,7 @@ fn render_label_float(
number: &mut Option<String>,
) -> Option<RenderedLabel> {
let environment = latex::Environment::cast(parent)?;
- let environment_name = environment.begin()?.name()?.word()?.text();
+ let environment_name = environment.begin()?.name()?.key()?.to_string();
let kind = LabelledFloatKind::from_str(&environment_name).ok()?;
let caption = find_caption_by_parent(&parent)?;
Some(RenderedLabel {
@@ -235,12 +236,12 @@ fn render_label_equation(
number: &mut Option<String>,
) -> Option<RenderedLabel> {
let environment = latex::Environment::cast(parent)?;
- let environment_name = environment.begin()?.name()?.word()?.text();
+ let environment_name = environment.begin()?.name()?.key()?.to_string();
if !LANGUAGE_DATA
.math_environments
.iter()
- .any(|name| name == environment_name)
+ .any(|name| name == &environment_name)
{
return None;
}
@@ -261,7 +262,7 @@ fn render_label_theorem(
let begin = environment.begin()?;
let description = begin.options().and_then(|options| options.content_text());
- let environment_name = begin.name()?.word()?.text();
+ let environment_name = begin.name()?.key()?.to_string();
let theorem = subset.documents.iter().find_map(|document| {
document.data.as_latex().and_then(|data| {
diff --git a/support/texlab/src/line_index.rs b/support/texlab/src/line_index.rs
index 868fe41232..3b36cd6802 100644
--- a/support/texlab/src/line_index.rs
+++ b/support/texlab/src/line_index.rs
@@ -214,4 +214,4 @@ where
}
left
-} \ No newline at end of file
+}
diff --git a/support/texlab/src/line_index_ext.rs b/support/texlab/src/line_index_ext.rs
index 8e28207edd..8c8f83f7b4 100644
--- a/support/texlab/src/line_index_ext.rs
+++ b/support/texlab/src/line_index_ext.rs
@@ -30,7 +30,7 @@ impl LineIndexExt for LineIndex {
fn line_col_lsp(&self, offset: TextSize) -> Position {
let position = self.line_col(offset);
- let LineColUtf16 { line , col } = self.to_utf16(position);
+ let LineColUtf16 { line, col } = self.to_utf16(position);
Position::new(line, col)
}
diff --git a/support/texlab/src/options.rs b/support/texlab/src/options.rs
index 09eea1110f..2626143e18 100644
--- a/support/texlab/src/options.rs
+++ b/support/texlab/src/options.rs
@@ -12,6 +12,9 @@ pub struct Options {
#[serde(default)]
pub bibtex_formatter: BibtexFormatter,
+ #[serde(default)]
+ pub latex_formatter: LatexFormatter,
+
pub formatter_line_length: Option<i32>,
pub diagnostics_delay: Option<u64>,
@@ -22,6 +25,9 @@ pub struct Options {
#[serde(default)]
pub chktex: ChktexOptions,
+ #[serde(default)]
+ pub latexindent: LatexindentOptions,
+
pub forward_search: Option<ForwardSearchOptions>,
}
@@ -38,6 +44,28 @@ impl Default for BibtexFormatter {
}
}
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
+#[serde(rename_all = "kebab-case")]
+pub enum LatexFormatter {
+ Texlab,
+ Latexindent,
+}
+
+impl Default for LatexFormatter {
+ fn default() -> Self {
+ Self::Latexindent
+ }
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct LatexindentOptions {
+ pub local: Option<String>,
+
+ #[serde(default)]
+ pub modify_line_breaks: bool,
+}
+
#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BuildOptions {
diff --git a/support/texlab/src/syntax/bibtex/cst.rs b/support/texlab/src/syntax/bibtex/cst.rs
index 7f824681dc..ba860c1ee7 100644
--- a/support/texlab/src/syntax/bibtex/cst.rs
+++ b/support/texlab/src/syntax/bibtex/cst.rs
@@ -1,4 +1,5 @@
use cstree::TextRange;
+use itertools::{EitherOrBoth, Itertools};
use crate::syntax::CstNode;
@@ -159,15 +160,42 @@ impl<'a> HasType<'a> for Entry<'a> {}
impl<'a> HasDelimiters<'a> for Entry<'a> {}
impl<'a> Entry<'a> {
- pub fn key(&self) -> Option<&'a SyntaxToken> {
+ pub fn key(&self) -> Option<Key<'a>> {
+ self.syntax().children().find_map(Key::cast)
+ }
+
+ pub fn fields(&self) -> impl Iterator<Item = Field<'a>> {
+ self.syntax().children().filter_map(Field::cast)
+ }
+}
+
+cst_node!(Key, KEY);
+
+impl<'a> Key<'a> {
+ pub fn words(&self) -> impl Iterator<Item = &'a SyntaxToken> {
self.syntax()
.children_with_tokens()
.filter_map(|node| node.into_token())
- .find(|node| node.kind() == WORD)
+ .filter(|node| node.kind() == WORD)
}
+}
- pub fn fields(&self) -> impl Iterator<Item = Field<'a>> {
- self.syntax().children().filter_map(Field::cast)
+impl<'a> PartialEq for Key<'a> {
+ fn eq(&self, other: &Self) -> bool {
+ self.words()
+ .zip_longest(other.words())
+ .all(|result| match result {
+ EitherOrBoth::Both(left, right) => left.text() == right.text(),
+ EitherOrBoth::Left(_) | EitherOrBoth::Right(_) => false,
+ })
+ }
+}
+
+impl<'a> Eq for Key<'a> {}
+
+impl<'a> ToString for Key<'a> {
+ fn to_string(&self) -> std::string::String {
+ self.words().map(|word| word.text()).join(" ")
}
}
diff --git a/support/texlab/src/syntax/bibtex/kind.rs b/support/texlab/src/syntax/bibtex/kind.rs
index fcb26b69bd..91f62fd3b8 100644
--- a/support/texlab/src/syntax/bibtex/kind.rs
+++ b/support/texlab/src/syntax/bibtex/kind.rs
@@ -26,6 +26,7 @@ pub enum SyntaxKind {
STRING,
COMMENT,
ENTRY,
+ KEY,
FIELD,
VALUE,
TOKEN,
diff --git a/support/texlab/src/syntax/bibtex/parser.rs b/support/texlab/src/syntax/bibtex/parser.rs
index ffdb1c94a0..6e8c4b3b59 100644
--- a/support/texlab/src/syntax/bibtex/parser.rs
+++ b/support/texlab/src/syntax/bibtex/parser.rs
@@ -174,7 +174,7 @@ impl<'a> Parser<'a> {
self.builder.finish_node();
return;
}
- self.eat();
+ self.key();
while let Some(kind) = self.peek() {
match kind {
@@ -190,6 +190,18 @@ impl<'a> Parser<'a> {
self.builder.finish_node();
}
+ fn key(&mut self) {
+ self.builder.start_node(KEY.into());
+ while self
+ .peek()
+ .filter(|&kind| matches!(kind, WORD | WHITESPACE))
+ .is_some()
+ {
+ self.eat();
+ }
+ self.builder.finish_node();
+ }
+
fn field(&mut self) {
self.builder.start_node(FIELD.into());
self.eat();
diff --git a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_complete_parens.snap b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_complete_parens.snap
index cfd469f161..d86d2fb035 100644
--- a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_complete_parens.snap
+++ b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_complete_parens.snap
@@ -7,7 +7,8 @@ ROOT@0..50
ENTRY@0..50
ENTRY_TYPE@0..8 "@article"
L_PAREN@8..9 "("
- WORD@9..12 "foo"
+ KEY@9..12
+ WORD@9..12 "foo"
COMMA@12..13 ","
WHITESPACE@13..14 " "
FIELD@14..32
diff --git a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields.snap b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields.snap
index a98df7e382..e5df412782 100644
--- a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields.snap
+++ b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields.snap
@@ -7,7 +7,8 @@ ROOT@0..14
ENTRY@0..14
ENTRY_TYPE@0..8 "@article"
L_CURLY@8..9 "{"
- WORD@9..12 "foo"
+ KEY@9..12
+ WORD@9..12 "foo"
COMMA@12..13 ","
R_CURLY@13..14 "}"
diff --git a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields_missing_comma.snap b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields_missing_comma.snap
index b83037aae0..b15c871298 100644
--- a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields_missing_comma.snap
+++ b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_no_fields_missing_comma.snap
@@ -7,6 +7,7 @@ ROOT@0..13
ENTRY@0..13
ENTRY_TYPE@0..8 "@article"
L_CURLY@8..9 "{"
- WORD@9..12 "foo"
+ KEY@9..12
+ WORD@9..12 "foo"
R_CURLY@12..13 "}"
diff --git a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field.snap b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field.snap
index 704cbbbd47..0bd43ac612 100644
--- a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field.snap
+++ b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field.snap
@@ -7,7 +7,8 @@ ROOT@0..33
ENTRY@0..33
ENTRY_TYPE@0..8 "@article"
L_CURLY@8..9 "{"
- WORD@9..12 "foo"
+ KEY@9..12
+ WORD@9..12 "foo"
COMMA@12..13 ","
WHITESPACE@13..14 " "
FIELD@14..32
diff --git a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_number_key.snap b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_number_key.snap
index 8f00c5ee1c..09bb00872f 100644
--- a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_number_key.snap
+++ b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_number_key.snap
@@ -7,7 +7,8 @@ ROOT@0..37
ENTRY@0..37
ENTRY_TYPE@0..8 "@article"
L_CURLY@8..9 "{"
- WORD@9..16 "foo2021"
+ KEY@9..16
+ WORD@9..16 "foo2021"
COMMA@16..17 ","
WHITESPACE@17..18 " "
FIELD@18..36
diff --git a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_trailing_comma.snap b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_trailing_comma.snap
index af8b1593df..51adbbc275 100644
--- a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_trailing_comma.snap
+++ b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_one_field_trailing_comma.snap
@@ -7,7 +7,8 @@ ROOT@0..34
ENTRY@0..34
ENTRY_TYPE@0..8 "@article"
L_CURLY@8..9 "{"
- WORD@9..12 "foo"
+ KEY@9..12
+ WORD@9..12 "foo"
COMMA@12..13 ","
WHITESPACE@13..14 " "
FIELD@14..32
diff --git a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields.snap b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields.snap
index f47b3b6917..384d582ef9 100644
--- a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields.snap
+++ b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields.snap
@@ -7,7 +7,8 @@ ROOT@0..56
ENTRY@0..56
ENTRY_TYPE@0..8 "@article"
L_CURLY@8..9 "{"
- WORD@9..12 "foo"
+ KEY@9..12
+ WORD@9..12 "foo"
COMMA@12..13 ","
WHITESPACE@13..14 " "
FIELD@14..32
diff --git a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields_incomplete.snap b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields_incomplete.snap
index 34a9019582..cbe00beff5 100644
--- a/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields_incomplete.snap
+++ b/support/texlab/src/syntax/bibtex/snapshots/texlab__syntax__bibtex__parser__tests__entry_two_fields_incomplete.snap
@@ -7,7 +7,8 @@ ROOT@0..36
ENTRY@0..36
ENTRY_TYPE@0..8 "@article"
L_CURLY@8..9 "{"
- WORD@9..12 "foo"
+ KEY@9..12
+ WORD@9..12 "foo"
COMMA@12..13 ","
WHITESPACE@13..14 " "
FIELD@14..32
diff --git a/support/texlab/src/syntax/latex/analysis/environment.rs b/support/texlab/src/syntax/latex/analysis/environment.rs
index 3b83b40b2f..7cda0c126b 100644
--- a/support/texlab/src/syntax/latex/analysis/environment.rs
+++ b/support/texlab/src/syntax/latex/analysis/environment.rs
@@ -4,7 +4,7 @@ use super::LatexAnalyzerContext;
pub fn analyze_begin(context: &mut LatexAnalyzerContext, node: &latex::SyntaxNode) -> Option<()> {
let begin = latex::Begin::cast(node)?;
- let name = begin.name()?.word()?.text();
+ let name = begin.name()?.key()?.to_string();
let extras = &mut context.extras;
extras.environment_names.insert(name.into());
Some(())
diff --git a/support/texlab/src/syntax/latex/analysis/explicit_link.rs b/support/texlab/src/syntax/latex/analysis/explicit_link.rs
index 363a576aaa..f177354ac7 100644
--- a/support/texlab/src/syntax/latex/analysis/explicit_link.rs
+++ b/support/texlab/src/syntax/latex/analysis/explicit_link.rs
@@ -23,22 +23,22 @@ pub fn analyze_include(context: &mut LatexAnalyzerContext, node: &latex::SyntaxN
ExplicitLinkKind::Class => &["cls"],
};
- for path in include.path_list()?.words() {
- let stem = path.text();
- let mut targets = vec![Arc::new(context.base_uri.join(stem).ok()?.into())];
+ for path in include.path_list()?.keys() {
+ let stem = path.to_string();
+ let mut targets = vec![Arc::new(context.base_uri.join(&stem).ok()?.into())];
for extension in extensions {
let path = format!("{}.{}", stem, extension);
targets.push(Arc::new(context.base_uri.join(&path).ok()?.into()));
}
- resolve_distro_file(&context.inner.resolver.lock().unwrap(), stem, extensions)
+ resolve_distro_file(&context.inner.resolver.lock().unwrap(), &stem, extensions)
.into_iter()
.for_each(|target| targets.push(Arc::new(target)));
context.extras.explicit_links.push(ExplicitLink {
kind,
stem: stem.into(),
- stem_range: path.text_range(),
+ stem_range: path.small_range(),
targets,
});
}
@@ -52,19 +52,19 @@ pub fn analyze_import(context: &mut LatexAnalyzerContext, node: &latex::SyntaxNo
let mut targets = Vec::new();
let directory = context
.base_uri
- .join(import.directory()?.word()?.text())
+ .join(&import.directory()?.key()?.to_string())
.ok()?;
- let file = import.file()?.word()?;
- let stem = file.text();
- targets.push(Arc::new(directory.join(stem).ok()?.into()));
+ let file = import.file()?.key()?;
+ let stem = file.to_string();
+ targets.push(Arc::new(directory.join(&stem).ok()?.into()));
targets.push(Arc::new(
directory.join(&format!("{}.tex", stem)).ok()?.into(),
));
context.extras.explicit_links.push(ExplicitLink {
stem: stem.into(),
- stem_range: file.text_range(),
+ stem_range: file.small_range(),
targets,
kind: ExplicitLinkKind::Latex,
});
diff --git a/support/texlab/src/syntax/latex/analysis/label_name.rs b/support/texlab/src/syntax/latex/analysis/label_name.rs
index d0410b953c..e5ff6829cd 100644
--- a/support/texlab/src/syntax/latex/analysis/label_name.rs
+++ b/support/texlab/src/syntax/latex/analysis/label_name.rs
@@ -18,10 +18,10 @@ fn analyze_label_definition_name(
node: &latex::SyntaxNode,
) -> Option<()> {
let label = latex::LabelDefinition::cast(node)?;
- let name = label.name()?.word()?;
+ let name = label.name()?.key()?;
context.extras.label_names.push(LabelName {
- text: name.text().into(),
- range: name.text_range(),
+ text: name.to_string().into(),
+ range: name.small_range(),
is_definition: true,
});
Some(())
@@ -32,10 +32,10 @@ fn analyze_label_reference_name(
node: &latex::SyntaxNode,
) -> Option<()> {
let label = latex::LabelReference::cast(node)?;
- for name in label.name_list()?.words() {
+ for name in label.name_list()?.keys() {
context.extras.label_names.push(LabelName {
- text: name.text().into(),
- range: name.text_range(),
+ text: name.to_string().into(),
+ range: name.small_range(),
is_definition: false,
});
}
@@ -47,18 +47,18 @@ fn analyze_label_reference_range_name(
node: &latex::SyntaxNode,
) -> Option<()> {
let label = LabelReferenceRange::cast(node)?;
- if let Some(name1) = label.from().and_then(|name| name.word()) {
+ if let Some(name1) = label.from().and_then(|name| name.key()) {
context.extras.label_names.push(LabelName {
- text: name1.text().into(),
- range: name1.text_range(),
+ text: name1.to_string().into(),
+ range: name1.small_range(),
is_definition: false,
});
}
- if let Some(name2) = label.to().and_then(|name| name.word()) {
+ if let Some(name2) = label.to().and_then(|name| name.key()) {
context.extras.label_names.push(LabelName {
- text: name2.text().into(),
- range: name2.text_range(),
+ text: name2.to_string().into(),
+ range: name2.small_range(),
is_definition: false,
});
}
diff --git a/support/texlab/src/syntax/latex/analysis/label_number.rs b/support/texlab/src/syntax/latex/analysis/label_number.rs
index de8d0dc1e1..93ad09523f 100644
--- a/support/texlab/src/syntax/latex/analysis/label_number.rs
+++ b/support/texlab/src/syntax/latex/analysis/label_number.rs
@@ -7,7 +7,7 @@ pub fn analyze_label_number(
node: &latex::SyntaxNode,
) -> Option<()> {
let number = latex::LabelNumber::cast(node)?;
- let name = number.name()?.word()?.text().into();
+ let name = number.name()?.key()?.to_string();
let text = number
.text()?
.syntax()
diff --git a/support/texlab/src/syntax/latex/analysis/theorem.rs b/support/texlab/src/syntax/latex/analysis/theorem.rs
index 0c365f0ef5..50236e24a5 100644
--- a/support/texlab/src/syntax/latex/analysis/theorem.rs
+++ b/support/texlab/src/syntax/latex/analysis/theorem.rs
@@ -10,7 +10,7 @@ pub fn analyze_theorem_definition(
node: &latex::SyntaxNode,
) -> Option<()> {
let theorem = latex::TheoremDefinition::cast(node)?;
- let name = theorem.name()?.word()?.text().into();
+ let name = theorem.name()?.key()?.to_string();
let description = theorem.description()?;
let description = description.content_text()?;
diff --git a/support/texlab/src/syntax/latex/analysis/types.rs b/support/texlab/src/syntax/latex/analysis/types.rs
index f089721397..bd2789b3b7 100644
--- a/support/texlab/src/syntax/latex/analysis/types.rs
+++ b/support/texlab/src/syntax/latex/analysis/types.rs
@@ -20,9 +20,9 @@ pub struct Extras {
pub explicit_links: Vec<ExplicitLink>,
pub has_document_environment: bool,
pub command_names: FxHashSet<SmolStr>,
- pub environment_names: FxHashSet<SmolStr>,
+ pub environment_names: FxHashSet<String>,
pub label_names: Vec<LabelName>,
- pub label_numbers_by_name: FxHashMap<SmolStr, String>,
+ pub label_numbers_by_name: FxHashMap<String, String>,
pub theorem_environments: Vec<TheoremEnvironment>,
}
@@ -61,7 +61,7 @@ impl ExplicitLink {
#[derive(Debug, PartialEq, Eq, Clone, Default, Hash)]
pub struct TheoremEnvironment {
- pub name: SmolStr,
+ pub name: String,
pub description: String,
}
diff --git a/support/texlab/src/syntax/latex/cst.rs b/support/texlab/src/syntax/latex/cst.rs
index 0b839b706d..a800236ebf 100644
--- a/support/texlab/src/syntax/latex/cst.rs
+++ b/support/texlab/src/syntax/latex/cst.rs
@@ -1,4 +1,5 @@
use cstree::TextRange;
+use itertools::{EitherOrBoth, Itertools};
use crate::syntax::CstNode;
@@ -6,7 +7,7 @@ use super::{Language, SyntaxKind::*, SyntaxNode, SyntaxToken};
macro_rules! cst_node {
($name:ident, $($kind:pat),+) => {
- #[derive(Clone)]
+ #[derive(Clone, Copy)]
#[repr(transparent)]
pub struct $name<'a>(&'a SyntaxNode);
@@ -45,6 +46,15 @@ macro_rules! cst_node {
cst_node!(Text, TEXT);
+impl<'a> Text<'a> {
+ pub fn words(&self) -> impl Iterator<Item = &'a SyntaxToken> {
+ self.syntax()
+ .children_with_tokens()
+ .filter_map(|node| node.into_token())
+ .filter(|node| node.kind() == WORD)
+ }
+}
+
pub trait HasCurly<'a>: CstNode<'a, Lang = Language> {
fn left_curly(&self) -> Option<&'a SyntaxToken> {
self.syntax()
@@ -168,11 +178,8 @@ cst_node!(CurlyGroupWord, CURLY_GROUP_WORD);
impl<'a> HasCurly<'a> for CurlyGroupWord<'a> {}
impl<'a> CurlyGroupWord<'a> {
- pub fn word(&self) -> Option<&'a SyntaxToken> {
- self.syntax()
- .children_with_tokens()
- .filter_map(|node| node.into_token())
- .find(|node| node.kind() == WORD)
+ pub fn key(&self) -> Option<Key<'a>> {
+ self.syntax().children().find_map(Key::cast)
}
}
@@ -181,11 +188,8 @@ cst_node!(BrackGroupWord, BRACK_GROUP_WORD);
impl<'a> HasBrack<'a> for BrackGroupWord<'a> {}
impl<'a> BrackGroupWord<'a> {
- pub fn word(&self) -> Option<&'a SyntaxToken> {
- self.syntax()
- .children_with_tokens()
- .filter_map(|node| node.into_token())
- .find(|node| node.kind() == WORD)
+ pub fn key(&self) -> Option<Key<'a>> {
+ self.syntax().children().find_map(Key::cast)
}
}
@@ -194,11 +198,8 @@ cst_node!(CurlyGroupWordList, CURLY_GROUP_WORD_LIST);
impl<'a> HasCurly<'a> for CurlyGroupWordList<'a> {}
impl<'a> CurlyGroupWordList<'a> {
- pub fn words(&self) -> impl Iterator<Item = &'a SyntaxToken> {
- self.syntax()
- .children_with_tokens()
- .filter_map(|node| node.into_token())
- .filter(|node| node.kind() == WORD)
+ pub fn keys(&self) -> impl Iterator<Item = Key<'a>> {
+ self.syntax().children().filter_map(Key::cast)
}
}
@@ -226,6 +227,25 @@ impl<'a> Key<'a> {
}
}
+impl<'a> PartialEq for Key<'a> {
+ fn eq(&self, other: &Self) -> bool {
+ self.words()
+ .zip_longest(other.words())
+ .all(|result| match result {
+ EitherOrBoth::Both(left, right) => left.text() == right.text(),
+ EitherOrBoth::Left(_) | EitherOrBoth::Right(_) => false,
+ })
+ }
+}
+
+impl<'a> Eq for Key<'a> {}
+
+impl<'a> ToString for Key<'a> {
+ fn to_string(&self) -> String {
+ self.words().map(|word| word.text()).join(" ")
+ }
+}
+
cst_node!(Value, VALUE);
cst_node!(KeyValuePair, KEY_VALUE_PAIR);
diff --git a/support/texlab/src/syntax/latex/parser.rs b/support/texlab/src/syntax/latex/parser.rs
index 4333235ba5..a21674f51d 100644
--- a/support/texlab/src/syntax/latex/parser.rs
+++ b/support/texlab/src/syntax/latex/parser.rs
@@ -173,20 +173,6 @@ impl<'a> Parser<'a> {
self.builder.finish_node();
}
- fn group_with_token(
- &mut self,
- node_kind: SyntaxKind,
- content_kind: SyntaxKind,
- right_kind: SyntaxKind,
- ) {
- self.builder.start_node(node_kind.into());
- self.eat();
- self.trivia();
- self.expect(content_kind);
- self.expect(right_kind);
- self.builder.finish_node();
- }
-
fn curly_group(&mut self) {
self.builder.start_node(CURLY_GROUP.into());
self.eat();
@@ -219,7 +205,23 @@ impl<'a> Parser<'a> {
}
fn curly_group_word(&mut self) {
- self.group_with_token(CURLY_GROUP_WORD, WORD, R_CURLY);
+ self.builder.start_node(CURLY_GROUP_WORD.into());
+ self.eat();
+ self.trivia();
+ match self.peek() {
+ Some(WORD) => {
+ self.key();
+ }
+ Some(PARAMETER) => {
+ self.eat();
+ self.trivia();
+ }
+ Some(_) | None => {
+ self.builder.token(MISSING.into(), "");
+ }
+ }
+ self.expect(R_CURLY);
+ self.builder.finish_node();
}
fn curly_group_word_list(&mut self) {
@@ -228,10 +230,14 @@ impl<'a> Parser<'a> {
while self
.peek()
- .filter(|&kind| matches!(kind, WHITESPACE | COMMENT | WORD | COMMA))
+ .filter(|&kind| matches!(kind, WHITESPACE | COMMENT | WORD | COMMA | PARAMETER))
.is_some()
{
- self.eat();
+ if self.peek() == Some(WORD) {
+ self.key();
+ } else {
+ self.eat();
+ }
}
self.expect(R_CURLY);
@@ -239,7 +245,24 @@ impl<'a> Parser<'a> {
}
fn curly_group_command(&mut self) {
- self.group_with_token(CURLY_GROUP_COMMAND, GENERIC_COMMAND_NAME, R_CURLY);
+ self.builder.start_node(CURLY_GROUP_COMMAND.into());
+ self.eat();
+ self.trivia();
+ match self.peek() {
+ Some(kind) if kind.is_command_name() => {
+ self.eat();
+ self.trivia();
+ }
+ Some(PARAMETER) => {
+ self.eat();
+ self.trivia();
+ }
+ Some(_) | None => {
+ self.builder.token(MISSING.into(), "");
+ }
+ }
+ self.expect(R_CURLY);
+ self.builder.finish_node();
}
fn brack_group(&mut self) {
@@ -271,37 +294,24 @@ impl<'a> Parser<'a> {
}
fn brack_group_word(&mut self) {
- self.group_with_token(BRACK_GROUP_WORD, WORD, R_BRACK);
- }
-
- // fn paren_group(&mut self) {
- // self.builder.start_node(PAREN_GROUP.into());
- // self.eat();
- // while self
- // .peek()
- // .filter(|&kind| {
- // !matches!(
- // kind,
- // R_CURLY
- // | R_BRACK
- // | R_PAREN
- // | PART_NAME
- // | CHAPTER_NAME
- // | SECTION_NAME
- // | SUBSECTION_NAME
- // | PARAGRAPH_NAME
- // | SUBPARAGRAPH_NAME
- // | ENUM_ITEM_NAME
- // | END_ENVIRONMENT_NAME
- // )
- // })
- // .is_some()
- // {
- // self.content();
- // }
- // self.expect(R_PAREN);
- // self.builder.finish_node();
- // }
+ self.builder.start_node(BRACK_GROUP_WORD.into());
+ self.eat();
+ self.trivia();
+ match self.peek() {
+ Some(WORD) => {
+ self.key();
+ }
+ Some(PARAMETER) => {
+ self.eat();
+ self.trivia();
+ }
+ Some(_) | None => {
+ self.builder.token(MISSING.into(), "");
+ }
+ }
+ self.expect(R_BRACK);
+ self.builder.finish_node();
+ }
fn mixed_group(&mut self) {
self.builder.start_node(MIXED_GROUP.into());
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acronym_declaration.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acronym_declaration.snap
index dfd05750d3..a92180efb3 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acronym_declaration.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acronym_declaration.snap
@@ -9,7 +9,8 @@ ROOT@0..64
ACRONYM_DECLARATION_NAME@0..15 "\\DeclareAcronym"
CURLY_GROUP_WORD@15..19
L_CURLY@15..16 "{"
- WORD@16..18 "eg"
+ KEY@16..18
+ WORD@16..18 "eg"
R_CURLY@18..19 "}"
CURLY_GROUP_KEY_VALUE@19..64
L_CURLY@19..20 "{"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_options.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_options.snap
index 1838e80f9a..80043c18e7 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_options.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_options.snap
@@ -27,7 +27,8 @@ ROOT@0..76
R_BRACK@42..43 "]"
CURLY_GROUP_WORD@43..53
L_CURLY@43..44 "{"
- WORD@44..52 "fpsLabel"
+ KEY@44..52
+ WORD@44..52 "fpsLabel"
R_CURLY@52..53 "}"
CURLY_GROUP@53..58
L_CURLY@53..54 "{"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_simple.snap
index 1d32bed249..74ae2219de 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_definition_simple.snap
@@ -9,7 +9,8 @@ ROOT@0..44
ACRONYM_DEFINITION_NAME@0..11 "\\newacronym"
CURLY_GROUP_WORD@11..21
L_CURLY@11..12 "{"
- WORD@12..20 "fpsLabel"
+ KEY@12..20
+ WORD@12..20 "fpsLabel"
R_CURLY@20..21 "}"
CURLY_GROUP@21..26
L_CURLY@21..22 "{"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_options.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_options.snap
index ce5b85c1cf..6a1c2cdcbe 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_options.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_options.snap
@@ -24,6 +24,7 @@ ROOT@0..32
R_BRACK@21..22 "]"
CURLY_GROUP_WORD@22..32
L_CURLY@22..23 "{"
- WORD@23..31 "fpsLabel"
+ KEY@23..31
+ WORD@23..31 "fpsLabel"
R_CURLY@31..32 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_simple.snap
index 5df8059f1b..9924c7175c 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__acroynm_reference_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..19
ACRONYM_REFERENCE_NAME@0..9 "\\acrshort"
CURLY_GROUP_WORD@9..19
L_CURLY@9..10 "{"
- WORD@10..18 "fpsLabel"
+ KEY@10..18
+ WORD@10..18 "fpsLabel"
R_CURLY@18..19 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_options.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_options.snap
index c910699363..3189cabd46 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_options.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_options.snap
@@ -25,6 +25,7 @@ ROOT@0..42
R_BRACK@28..29 "]"
CURLY_GROUP_WORD_LIST@29..42
L_CURLY@29..30 "{"
- WORD@30..41 "foo/bar.bib"
+ KEY@30..41
+ WORD@30..41 "foo/bar.bib"
R_CURLY@41..42 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_simple.snap
index 3549b985c4..3166d13aff 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__biblatex_include_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..28
BIBLATEX_INCLUDE_NAME@0..15 "\\addbibresource"
CURLY_GROUP_WORD_LIST@15..28
L_CURLY@15..16 "{"
- WORD@16..27 "foo/bar.bib"
+ KEY@16..27
+ WORD@16..27 "foo/bar.bib"
R_CURLY@27..28 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__bibtex_include_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__bibtex_include_simple.snap
index f0d30ebfa3..db58621c75 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__bibtex_include_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__bibtex_include_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..22
BIBTEX_INCLUDE_NAME@0..13 "\\bibliography"
CURLY_GROUP_WORD_LIST@13..22
L_CURLY@13..14 "{"
- WORD@14..21 "foo/bar"
+ KEY@14..21
+ WORD@14..21 "foo/bar"
R_CURLY@21..22 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_figure.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_figure.snap
index 4b963caabd..b3bf7589d8 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_figure.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__caption_figure.snap
@@ -10,7 +10,8 @@ ROOT@0..39
BEGIN_ENVIRONMENT_NAME@0..6 "\\begin"
CURLY_GROUP_WORD@6..14
L_CURLY@6..7 "{"
- WORD@7..13 "figure"
+ KEY@7..13
+ WORD@7..13 "figure"
R_CURLY@13..14 "}"
CAPTION@14..27
CAPTION_NAME@14..22 "\\caption"
@@ -23,6 +24,7 @@ ROOT@0..39
END_ENVIRONMENT_NAME@27..31 "\\end"
CURLY_GROUP_WORD@31..39
L_CURLY@31..32 "{"
- WORD@32..38 "figure"
+ KEY@32..38
+ WORD@32..38 "figure"
R_CURLY@38..39 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_missing_brace.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_missing_brace.snap
index 363f8b0142..61cd6d8f0b 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_missing_brace.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_missing_brace.snap
@@ -9,6 +9,7 @@ ROOT@0..9
CITATION_NAME@0..5 "\\cite"
CURLY_GROUP_WORD_LIST@5..9
L_CURLY@5..6 "{"
- WORD@6..9 "foo"
+ KEY@6..9
+ WORD@6..9 "foo"
MISSING@9..9 ""
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_multiple_keys.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_multiple_keys.snap
index dafc826a97..7195e8992e 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_multiple_keys.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_multiple_keys.snap
@@ -9,9 +9,11 @@ ROOT@0..15
CITATION_NAME@0..5 "\\cite"
CURLY_GROUP_WORD_LIST@5..15
L_CURLY@5..6 "{"
- WORD@6..9 "foo"
+ KEY@6..9
+ WORD@6..9 "foo"
COMMA@9..10 ","
WHITESPACE@10..11 " "
- WORD@11..14 "bar"
+ KEY@11..14
+ WORD@11..14 "bar"
R_CURLY@14..15 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote.snap
index 93d83bb448..b5d92886aa 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote.snap
@@ -14,6 +14,7 @@ ROOT@0..15
R_BRACK@9..10 "]"
CURLY_GROUP_WORD_LIST@10..15
L_CURLY@10..11 "{"
- WORD@11..14 "bar"
+ KEY@11..14
+ WORD@11..14 "bar"
R_CURLY@14..15 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote_postnote.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote_postnote.snap
index 3acaafea3b..ba99b66e35 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote_postnote.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_prenote_postnote.snap
@@ -19,6 +19,7 @@ ROOT@0..20
R_BRACK@14..15 "]"
CURLY_GROUP_WORD_LIST@15..20
L_CURLY@15..16 "{"
- WORD@16..19 "baz"
+ KEY@16..19
+ WORD@16..19 "baz"
R_CURLY@19..20 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_redundant_comma.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_redundant_comma.snap
index 12f34f16ae..9062479f7a 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_redundant_comma.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_redundant_comma.snap
@@ -10,7 +10,8 @@ ROOT@0..12
CURLY_GROUP_WORD_LIST@5..12
L_CURLY@5..6 "{"
COMMA@6..7 ","
- WORD@7..10 "foo"
+ KEY@7..10
+ WORD@7..10 "foo"
COMMA@10..11 ","
R_CURLY@11..12 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_simple.snap
index a22129f85f..335b9d461c 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..10
CITATION_NAME@0..5 "\\cite"
CURLY_GROUP_WORD_LIST@5..10
L_CURLY@5..6 "{"
- WORD@6..9 "foo"
+ KEY@6..9
+ WORD@6..9 "foo"
R_CURLY@9..10 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_star.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_star.snap
index 4388596dfd..e6d5dad128 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_star.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__citation_star.snap
@@ -9,6 +9,7 @@ ROOT@0..10
CITATION_NAME@0..7 "\\nocite"
CURLY_GROUP_WORD_LIST@7..10
L_CURLY@7..8 "{"
- WORD@8..9 "*"
+ KEY@8..9
+ WORD@8..9 "*"
R_CURLY@9..10 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_options.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_options.snap
index 0d0eb1b250..ac20c4b8ac 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_options.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_options.snap
@@ -32,6 +32,7 @@ ROOT@0..44
R_BRACK@34..35 "]"
CURLY_GROUP_WORD_LIST@35..44
L_CURLY@35..36 "{"
- WORD@36..43 "article"
+ KEY@36..43
+ WORD@36..43 "article"
R_CURLY@43..44 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_simple.snap
index 85e21b47a8..07c426101e 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__class_include_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..23
CLASS_INCLUDE_NAME@0..14 "\\documentclass"
CURLY_GROUP_WORD_LIST@14..23
L_CURLY@14..15 "{"
- WORD@15..22 "article"
+ KEY@15..22
+ WORD@15..22 "article"
R_CURLY@22..23 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_definition_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_definition_simple.snap
index e4adfd534c..64eee4351b 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_definition_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_definition_simple.snap
@@ -9,11 +9,13 @@ ROOT@0..33
COLOR_DEFINITION_NAME@0..12 "\\definecolor"
CURLY_GROUP_WORD@12..17
L_CURLY@12..13 "{"
- WORD@13..16 "foo"
+ KEY@13..16
+ WORD@13..16 "foo"
R_CURLY@16..17 "}"
CURLY_GROUP_WORD@17..22
L_CURLY@17..18 "{"
- WORD@18..21 "rgb"
+ KEY@18..21
+ WORD@18..21 "rgb"
R_CURLY@21..22 "}"
CURLY_GROUP@22..33
L_CURLY@22..23 "{"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_reference_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_reference_simple.snap
index 41a3700122..cb0ee151b9 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_reference_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_reference_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..13
COLOR_REFERENCE_NAME@0..6 "\\color"
CURLY_GROUP_WORD@6..13
L_CURLY@6..7 "{"
- WORD@7..12 "black"
+ KEY@7..12
+ WORD@7..12 "black"
R_CURLY@12..13 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error1.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error1.snap
index 42095ff974..59688f0902 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error1.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error1.snap
@@ -9,21 +9,26 @@ ROOT@0..39
COLOR_SET_DEFINITION_NAME@0..15 "\\definecolorset"
BRACK_GROUP_WORD@15..19
L_BRACK@15..16 "["
- WORD@16..18 "ty"
+ KEY@16..18
+ WORD@16..18 "ty"
R_BRACK@18..19 "]"
CURLY_GROUP_WORD_LIST@19..29
L_CURLY@19..20 "{"
- WORD@20..23 "rgb"
+ KEY@20..23
+ WORD@20..23 "rgb"
COMMA@23..24 ","
- WORD@24..28 "HTML"
+ KEY@24..28
+ WORD@24..28 "HTML"
R_CURLY@28..29 "}"
CURLY_GROUP_WORD@29..34
L_CURLY@29..30 "{"
- WORD@30..33 "foo"
+ KEY@30..33
+ WORD@30..33 "foo"
R_CURLY@33..34 "}"
CURLY_GROUP_WORD@34..39
L_CURLY@34..35 "{"
- WORD@35..38 "bar"
+ KEY@35..38
+ WORD@35..38 "bar"
R_CURLY@38..39 "}"
MISSING@39..39 ""
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error2.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error2.snap
index 718d49a3e3..cbbeacb649 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error2.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error2.snap
@@ -9,13 +9,16 @@ ROOT@0..30
COLOR_SET_DEFINITION_NAME@0..15 "\\definecolorset"
CURLY_GROUP_WORD_LIST@15..25
L_CURLY@15..16 "{"
- WORD@16..19 "rgb"
+ KEY@16..19
+ WORD@16..19 "rgb"
COMMA@19..20 ","
- WORD@20..24 "HTML"
+ KEY@20..24
+ WORD@20..24 "HTML"
R_CURLY@24..25 "}"
CURLY_GROUP_WORD@25..30
L_CURLY@25..26 "{"
- WORD@26..29 "foo"
+ KEY@26..29
+ WORD@26..29 "foo"
R_CURLY@29..30 "}"
MISSING@30..30 ""
MISSING@30..30 ""
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error3.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error3.snap
index f92d813123..826bea28b6 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error3.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_error3.snap
@@ -9,9 +9,11 @@ ROOT@0..25
COLOR_SET_DEFINITION_NAME@0..15 "\\definecolorset"
CURLY_GROUP_WORD_LIST@15..25
L_CURLY@15..16 "{"
- WORD@16..19 "rgb"
+ KEY@16..19
+ WORD@16..19 "rgb"
COMMA@19..20 ","
- WORD@20..24 "HTML"
+ KEY@20..24
+ WORD@20..24 "HTML"
R_CURLY@24..25 "}"
MISSING@25..25 ""
MISSING@25..25 ""
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_simple.snap
index f9a736c65f..9d32e127ef 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__color_set_definition_simple.snap
@@ -9,24 +9,30 @@ ROOT@0..44
COLOR_SET_DEFINITION_NAME@0..15 "\\definecolorset"
BRACK_GROUP_WORD@15..19
L_BRACK@15..16 "["
- WORD@16..18 "ty"
+ KEY@16..18
+ WORD@16..18 "ty"
R_BRACK@18..19 "]"
CURLY_GROUP_WORD_LIST@19..29
L_CURLY@19..20 "{"
- WORD@20..23 "rgb"
+ KEY@20..23
+ WORD@20..23 "rgb"
COMMA@23..24 ","
- WORD@24..28 "HTML"
+ KEY@24..28
+ WORD@24..28 "HTML"
R_CURLY@28..29 "}"
CURLY_GROUP_WORD@29..34
L_CURLY@29..30 "{"
- WORD@30..33 "foo"
+ KEY@30..33
+ WORD@30..33 "foo"
R_CURLY@33..34 "}"
CURLY_GROUP_WORD@34..39
L_CURLY@34..35 "{"
- WORD@35..38 "bar"
+ KEY@35..38
+ WORD@35..38 "bar"
R_CURLY@38..39 "}"
CURLY_GROUP_WORD@39..44
L_CURLY@39..40 "{"
- WORD@40..43 "baz"
+ KEY@40..43
+ WORD@40..43 "baz"
R_CURLY@43..44 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_simple.snap
index e5f2377fcf..b0d9b225d0 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__command_definition_simple.snap
@@ -10,7 +10,8 @@ ROOT@0..23
MISSING@11..11 ""
BRACK_GROUP_WORD@11..14
L_BRACK@11..12 "["
- WORD@12..13 "1"
+ KEY@12..13
+ WORD@12..13 "1"
R_BRACK@13..14 "]"
CURLY_GROUP@14..19
L_CURLY@14..15 "{"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_definition.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_definition.snap
index df3c0d56fb..982d3b8667 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_definition.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_definition.snap
@@ -9,11 +9,13 @@ ROOT@0..47
ENVIRONMENT_DEFINIITION_NAME@0..15 "\\newenvironment"
CURLY_GROUP_WORD@15..20
L_CURLY@15..16 "{"
- WORD@16..19 "bar"
+ KEY@16..19
+ WORD@16..19 "bar"
R_CURLY@19..20 "}"
BRACK_GROUP_WORD@20..23
L_BRACK@20..21 "["
- WORD@21..22 "1"
+ KEY@21..22
+ WORD@21..22 "1"
R_BRACK@22..23 "]"
CURLY_GROUP@23..36
L_CURLY@23..24 "{"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested.snap
index a5c566f773..3a65af3a2b 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested.snap
@@ -10,7 +10,8 @@ ROOT@0..43
BEGIN_ENVIRONMENT_NAME@0..6 "\\begin"
CURLY_GROUP_WORD@6..12
L_CURLY@6..7 "{"
- WORD@7..10 "foo"
+ KEY@7..10
+ WORD@7..10 "foo"
R_CURLY@10..11 "}"
WHITESPACE@11..12 " "
ENVIRONMENT@12..34
@@ -18,20 +19,23 @@ ROOT@0..43
BEGIN_ENVIRONMENT_NAME@12..18 "\\begin"
CURLY_GROUP_WORD@18..24
L_CURLY@18..19 "{"
- WORD@19..22 "qux"
+ KEY@19..22
+ WORD@19..22 "qux"
R_CURLY@22..23 "}"
WHITESPACE@23..24 " "
END@24..34
END_ENVIRONMENT_NAME@24..28 "\\end"
CURLY_GROUP_WORD@28..34
L_CURLY@28..29 "{"
- WORD@29..32 "baz"
+ KEY@29..32
+ WORD@29..32 "baz"
R_CURLY@32..33 "}"
WHITESPACE@33..34 " "
END@34..43
END_ENVIRONMENT_NAME@34..38 "\\end"
CURLY_GROUP_WORD@38..43
L_CURLY@38..39 "{"
- WORD@39..42 "bar"
+ KEY@39..42
+ WORD@39..42 "bar"
R_CURLY@42..43 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested_missing_braces.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested_missing_braces.snap
index 9ff76605d6..973e6e9a9f 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested_missing_braces.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_nested_missing_braces.snap
@@ -10,33 +10,36 @@ ROOT@0..52
BEGIN_ENVIRONMENT_NAME@0..6 "\\begin"
CURLY_GROUP_WORD@6..11
L_CURLY@6..7 "{"
- WORD@7..10 "foo"
- WHITESPACE@10..11 " "
+ KEY@7..11
+ WORD@7..10 "foo"
+ WHITESPACE@10..11 " "
MISSING@11..11 ""
ENVIRONMENT@11..44
- BEGIN@11..22
+ BEGIN@11..34
BEGIN_ENVIRONMENT_NAME@11..17 "\\begin"
- CURLY_GROUP_WORD@17..22
+ CURLY_GROUP_WORD@17..34
L_CURLY@17..18 "{"
- WORD@18..21 "qux"
- WHITESPACE@21..22 " "
- MISSING@22..22 ""
- TEXT@22..34
- WORD@22..27 "Hello"
- WHITESPACE@27..28 " "
- WORD@28..33 "World"
- WHITESPACE@33..34 " "
+ KEY@18..34
+ WORD@18..21 "qux"
+ WHITESPACE@21..22 " "
+ WORD@22..27 "Hello"
+ WHITESPACE@27..28 " "
+ WORD@28..33 "World"
+ WHITESPACE@33..34 " "
+ MISSING@34..34 ""
END@34..44
END_ENVIRONMENT_NAME@34..38 "\\end"
CURLY_GROUP_WORD@38..44
L_CURLY@38..39 "{"
- WORD@39..42 "baz"
+ KEY@39..42
+ WORD@39..42 "baz"
R_CURLY@42..43 "}"
WHITESPACE@43..44 " "
END@44..52
END_ENVIRONMENT_NAME@44..48 "\\end"
CURLY_GROUP_WORD@48..52
L_CURLY@48..49 "{"
- WORD@49..52 "bar"
+ KEY@49..52
+ WORD@49..52 "bar"
MISSING@52..52 ""
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_simple.snap
index d58f5b26c4..b8b85f1348 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__environment_simple.snap
@@ -10,7 +10,8 @@ ROOT@0..33
BEGIN_ENVIRONMENT_NAME@0..6 "\\begin"
CURLY_GROUP_WORD@6..12
L_CURLY@6..7 "{"
- WORD@7..10 "foo"
+ KEY@7..10
+ WORD@7..10 "foo"
R_CURLY@10..11 "}"
WHITESPACE@11..12 " "
TEXT@12..24
@@ -22,6 +23,7 @@ ROOT@0..33
END_ENVIRONMENT_NAME@24..28 "\\end"
CURLY_GROUP_WORD@28..33
L_CURLY@28..29 "{"
- WORD@29..32 "bar"
+ KEY@29..32
+ WORD@29..32 "bar"
R_CURLY@32..33 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_label_reference_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_label_reference_simple.snap
index 7a851233ef..9123fafcf2 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_label_reference_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_label_reference_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..11
LABEL_REFERENCE_NAME@0..6 "\\eqref"
CURLY_GROUP_WORD_LIST@6..11
L_CURLY@6..7 "{"
- WORD@7..10 "foo"
+ KEY@7..10
+ WORD@7..10 "foo"
R_CURLY@10..11 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_begin.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_begin.snap
index fe065667c3..9a2af78417 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_begin.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_begin.snap
@@ -10,7 +10,8 @@ ROOT@0..28
BEGIN_ENVIRONMENT_NAME@0..6 "\\begin"
CURLY_GROUP_WORD@6..10
L_CURLY@6..7 "{"
- WORD@7..8 "a"
+ KEY@7..8
+ WORD@7..8 "a"
R_CURLY@8..9 "}"
WHITESPACE@9..10 " "
TEXT@10..18
@@ -25,6 +26,7 @@ ROOT@0..28
END_ENVIRONMENT_NAME@21..25 "\\end"
CURLY_GROUP_WORD@25..28
L_CURLY@25..26 "{"
- WORD@26..27 "b"
+ KEY@26..27
+ WORD@26..27 "b"
R_CURLY@27..28 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_end.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_end.snap
index f7b6205ffb..3085037fac 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_end.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__equation_missing_end.snap
@@ -10,7 +10,8 @@ ROOT@0..28
BEGIN_ENVIRONMENT_NAME@0..6 "\\begin"
CURLY_GROUP_WORD@6..10
L_CURLY@6..7 "{"
- WORD@7..8 "a"
+ KEY@7..8
+ WORD@7..8 "a"
R_CURLY@8..9 "}"
WHITESPACE@9..10 " "
EQUATION@10..21
@@ -26,6 +27,7 @@ ROOT@0..28
END_ENVIRONMENT_NAME@21..25 "\\end"
CURLY_GROUP_WORD@25..28
L_CURLY@25..26 "{"
- WORD@26..27 "b"
+ KEY@26..27
+ WORD@26..27 "b"
R_CURLY@27..28 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_definition_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_definition_simple.snap
index d1b31e275a..519abf75e8 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_definition_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_definition_simple.snap
@@ -9,7 +9,8 @@ ROOT@0..39
GLOSSARY_ENTRY_DEFINITION_NAME@0..17 "\\newglossaryentry"
CURLY_GROUP_WORD@17..22
L_CURLY@17..18 "{"
- WORD@18..21 "foo"
+ KEY@18..21
+ WORD@18..21 "foo"
R_CURLY@21..22 "}"
CURLY_GROUP_KEY_VALUE@22..39
L_CURLY@22..23 "{"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_options.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_options.snap
index ad5c44885a..494c0be0a0 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_options.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_options.snap
@@ -27,6 +27,7 @@ ROOT@0..25
R_BRACK@19..20 "]"
CURLY_GROUP_WORD@20..25
L_CURLY@20..21 "{"
- WORD@21..24 "baz"
+ KEY@21..24
+ WORD@21..24 "baz"
R_CURLY@24..25 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_simple.snap
index 2a6b845733..94af3796fc 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__glossary_entry_reference_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..9
GLOSSARY_ENTRY_REFERENCE_NAME@0..4 "\\gls"
CURLY_GROUP_WORD@4..9
L_CURLY@4..5 "{"
- WORD@5..8 "foo"
+ KEY@5..8
+ WORD@5..8 "foo"
R_CURLY@8..9 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_options.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_options.snap
index 910a4848ef..14e2413323 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_options.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_options.snap
@@ -20,6 +20,7 @@ ROOT@0..39
R_BRACK@25..26 "]"
CURLY_GROUP_WORD_LIST@26..39
L_CURLY@26..27 "{"
- WORD@27..38 "foo/bar.pdf"
+ KEY@27..38
+ WORD@27..38 "foo/bar.pdf"
R_CURLY@38..39 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_simple.snap
index fa6fbf1a14..f4c640bca8 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__graphics_include_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..29
GRAPHICS_INCLUDE_NAME@0..16 "\\includegraphics"
CURLY_GROUP_WORD_LIST@16..29
L_CURLY@16..17 "{"
- WORD@17..28 "foo/bar.pdf"
+ KEY@17..28
+ WORD@17..28 "foo/bar.pdf"
R_CURLY@28..29 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_incomplete.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_incomplete.snap
index 3dae1f433a..c8634d6269 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_incomplete.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_incomplete.snap
@@ -9,7 +9,8 @@ ROOT@0..11
IMPORT_NAME@0..7 "\\import"
CURLY_GROUP_WORD@7..11
L_CURLY@7..8 "{"
- WORD@8..11 "foo"
+ KEY@8..11
+ WORD@8..11 "foo"
MISSING@11..11 ""
MISSING@11..11 ""
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_simple.snap
index 6e21f65cbf..c94f34eb3f 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__import_simple.snap
@@ -9,10 +9,12 @@ ROOT@0..17
IMPORT_NAME@0..7 "\\import"
CURLY_GROUP_WORD@7..12
L_CURLY@7..8 "{"
- WORD@8..11 "foo"
+ KEY@8..11
+ WORD@8..11 "foo"
R_CURLY@11..12 "}"
CURLY_GROUP_WORD@12..17
L_CURLY@12..13 "{"
- WORD@13..16 "bar"
+ KEY@13..16
+ WORD@13..16 "bar"
R_CURLY@16..17 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_options.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_options.snap
index d1fd2df652..8b95509be6 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_options.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_options.snap
@@ -20,6 +20,7 @@ ROOT@0..30
R_BRACK@20..21 "]"
CURLY_GROUP_WORD_LIST@21..30
L_CURLY@21..22 "{"
- WORD@22..29 "foo/bar"
+ KEY@22..29
+ WORD@22..29 "foo/bar"
R_CURLY@29..30 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_simple.snap
index 59f50c36d3..e3d1f9bdfd 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__inkscape_include_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..20
SVG_INCLUDE_NAME@0..11 "\\includesvg"
CURLY_GROUP_WORD_LIST@11..20
L_CURLY@11..12 "{"
- WORD@12..19 "foo/bar"
+ KEY@12..19
+ WORD@12..19 "foo/bar"
R_CURLY@19..20 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_definition_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_definition_simple.snap
index 7eacd65c59..2d15533f87 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_definition_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_definition_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..11
LABEL_DEFINITION_NAME@0..6 "\\label"
CURLY_GROUP_WORD@6..11
L_CURLY@6..7 "{"
- WORD@7..10 "foo"
+ KEY@7..10
+ WORD@7..10 "foo"
R_CURLY@10..11 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_number.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_number.snap
index 46392d7574..a63752d80e 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_number.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_number.snap
@@ -9,7 +9,8 @@ ROOT@0..21
LABEL_NUMBER_NAME@0..9 "\\newlabel"
CURLY_GROUP_WORD@9..14
L_CURLY@9..10 "{"
- WORD@10..13 "foo"
+ KEY@10..13
+ WORD@10..13 "foo"
R_CURLY@13..14 "}"
CURLY_GROUP@14..21
L_CURLY@14..15 "{"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_multiple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_multiple.snap
index e399397e09..0176c770e8 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_multiple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_multiple.snap
@@ -9,9 +9,11 @@ ROOT@0..14
LABEL_REFERENCE_NAME@0..4 "\\ref"
CURLY_GROUP_WORD_LIST@4..14
L_CURLY@4..5 "{"
- WORD@5..8 "foo"
+ KEY@5..8
+ WORD@5..8 "foo"
COMMA@8..9 ","
WHITESPACE@9..10 " "
- WORD@10..13 "bar"
+ KEY@10..13
+ WORD@10..13 "bar"
R_CURLY@13..14 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_error.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_error.snap
index 2894a9c2ec..ee65f8a02f 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_error.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_error.snap
@@ -9,10 +9,12 @@ ROOT@0..19
LABEL_REFERENCE_RANGE_NAME@0..10 "\\crefrange"
CURLY_GROUP_WORD@10..14
L_CURLY@10..11 "{"
- WORD@11..14 "foo"
+ KEY@11..14
+ WORD@11..14 "foo"
MISSING@14..14 ""
CURLY_GROUP_WORD@14..19
L_CURLY@14..15 "{"
- WORD@15..18 "bar"
+ KEY@15..18
+ WORD@15..18 "bar"
R_CURLY@18..19 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_incomplete.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_incomplete.snap
index 0a1753867e..3dbe4bbab6 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_incomplete.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_incomplete.snap
@@ -9,7 +9,8 @@ ROOT@0..15
LABEL_REFERENCE_RANGE_NAME@0..10 "\\crefrange"
CURLY_GROUP_WORD@10..15
L_CURLY@10..11 "{"
- WORD@11..14 "foo"
+ KEY@11..14
+ WORD@11..14 "foo"
R_CURLY@14..15 "}"
MISSING@15..15 ""
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_simple.snap
index c06c31c1b7..094d0e2870 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_range_simple.snap
@@ -9,10 +9,12 @@ ROOT@0..20
LABEL_REFERENCE_RANGE_NAME@0..10 "\\crefrange"
CURLY_GROUP_WORD@10..15
L_CURLY@10..11 "{"
- WORD@11..14 "foo"
+ KEY@11..14
+ WORD@11..14 "foo"
R_CURLY@14..15 "}"
CURLY_GROUP_WORD@15..20
L_CURLY@15..16 "{"
- WORD@16..19 "bar"
+ KEY@16..19
+ WORD@16..19 "bar"
R_CURLY@19..20 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_simple.snap
index ed06f5dfc1..9b6e622ef9 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__label_reference_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..9
LABEL_REFERENCE_NAME@0..4 "\\ref"
CURLY_GROUP_WORD_LIST@4..9
L_CURLY@4..5 "{"
- WORD@5..8 "foo"
+ KEY@5..8
+ WORD@5..8 "foo"
R_CURLY@8..9 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_include_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_include_simple.snap
index 34565aa072..dbdeaad2f7 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_include_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_include_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..17
LATEX_INCLUDE_NAME@0..8 "\\include"
CURLY_GROUP_WORD_LIST@8..17
L_CURLY@8..9 "{"
- WORD@9..16 "foo/bar"
+ KEY@9..16
+ WORD@9..16 "foo/bar"
R_CURLY@16..17 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_input_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_input_simple.snap
index 208e898407..efa0d9b675 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_input_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__latex_input_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..19
LATEX_INCLUDE_NAME@0..6 "\\input"
CURLY_GROUP_WORD_LIST@6..19
L_CURLY@6..7 "{"
- WORD@7..18 "foo/bar.tex"
+ KEY@7..18
+ WORD@7..18 "foo/bar.tex"
R_CURLY@18..19 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_multiple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_multiple.snap
index e68b98d1b5..2df92fd909 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_multiple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_multiple.snap
@@ -9,9 +9,11 @@ ROOT@0..28
PACKAGE_INCLUDE_NAME@0..11 "\\usepackage"
CURLY_GROUP_WORD_LIST@11..28
L_CURLY@11..12 "{"
- WORD@12..19 "amsmath"
+ KEY@12..19
+ WORD@12..19 "amsmath"
COMMA@19..20 ","
WHITESPACE@20..21 " "
- WORD@21..27 "lipsum"
+ KEY@21..27
+ WORD@21..27 "lipsum"
R_CURLY@27..28 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_options.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_options.snap
index a33c4e0bd7..0f87570023 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_options.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_options.snap
@@ -32,6 +32,7 @@ ROOT@0..41
R_BRACK@31..32 "]"
CURLY_GROUP_WORD_LIST@32..41
L_CURLY@32..33 "{"
- WORD@33..40 "amsmath"
+ KEY@33..40
+ WORD@33..40 "amsmath"
R_CURLY@40..41 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_simple.snap
index 00c075fdfe..a28dd39a13 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__package_include_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..20
PACKAGE_INCLUDE_NAME@0..11 "\\usepackage"
CURLY_GROUP_WORD_LIST@11..20
L_CURLY@11..12 "{"
- WORD@12..19 "amsmath"
+ KEY@12..19
+ WORD@12..19 "amsmath"
R_CURLY@19..20 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__pgf_library_import_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__pgf_library_import_simple.snap
index 8f289f97a4..c36bf857bb 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__pgf_library_import_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__pgf_library_import_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..19
TIKZ_LIBRARY_IMPORT_NAME@0..14 "\\usepgflibrary"
CURLY_GROUP_WORD_LIST@14..19
L_CURLY@14..15 "{"
- WORD@15..18 "foo"
+ KEY@15..18
+ WORD@15..18 "foo"
R_CURLY@18..19 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_enum_item.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_enum_item.snap
index 43dcae1987..0ca7421ac6 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_enum_item.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__structure_enum_item.snap
@@ -10,7 +10,8 @@ ROOT@0..60
BEGIN_ENVIRONMENT_NAME@0..6 "\\begin"
CURLY_GROUP_WORD@6..18
L_CURLY@6..7 "{"
- WORD@7..16 "enumerate"
+ KEY@7..16
+ WORD@7..16 "enumerate"
R_CURLY@16..17 "}"
WHITESPACE@17..18 " "
ENUM_ITEM@18..26
@@ -40,6 +41,7 @@ ROOT@0..60
END_ENVIRONMENT_NAME@45..49 "\\end"
CURLY_GROUP_WORD@49..60
L_CURLY@49..50 "{"
- WORD@50..59 "enumerate"
+ KEY@50..59
+ WORD@50..59 "enumerate"
R_CURLY@59..60 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_options.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_options.snap
index 863f27cf56..3140282630 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_options.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_options.snap
@@ -20,6 +20,7 @@ ROOT@0..34
R_BRACK@20..21 "]"
CURLY_GROUP_WORD_LIST@21..34
L_CURLY@21..22 "{"
- WORD@22..33 "foo/bar.svg"
+ KEY@22..33
+ WORD@22..33 "foo/bar.svg"
R_CURLY@33..34 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_simple.snap
index 02db942d99..2cf133b4d0 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__svg_include_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..24
SVG_INCLUDE_NAME@0..11 "\\includesvg"
CURLY_GROUP_WORD_LIST@11..24
L_CURLY@11..12 "{"
- WORD@12..23 "foo/bar.svg"
+ KEY@12..23
+ WORD@12..23 "foo/bar.svg"
R_CURLY@23..24 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_full.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_full.snap
index d8fe3816ad..7f21c0ef52 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_full.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_full.snap
@@ -9,11 +9,13 @@ ROOT@0..31
THEOREM_DEFINITION_NAME@0..11 "\\newtheorem"
CURLY_GROUP_WORD@11..16
L_CURLY@11..12 "{"
- WORD@12..15 "foo"
+ KEY@12..15
+ WORD@12..15 "foo"
R_CURLY@15..16 "}"
BRACK_GROUP_WORD@16..21
L_BRACK@16..17 "["
- WORD@17..20 "bar"
+ KEY@17..20
+ WORD@17..20 "bar"
R_BRACK@20..21 "]"
CURLY_GROUP@21..26
L_CURLY@21..22 "{"
@@ -22,6 +24,7 @@ ROOT@0..31
R_CURLY@25..26 "}"
BRACK_GROUP_WORD@26..31
L_BRACK@26..27 "["
- WORD@27..30 "baz"
+ KEY@27..30
+ WORD@27..30 "baz"
R_BRACK@30..31 "]"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_counter.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_counter.snap
index 9e550b19a4..d7bb29bf58 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_counter.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_counter.snap
@@ -9,11 +9,13 @@ ROOT@0..21
THEOREM_DEFINITION_NAME@0..11 "\\newtheorem"
CURLY_GROUP_WORD@11..16
L_CURLY@11..12 "{"
- WORD@12..15 "foo"
+ KEY@12..15
+ WORD@12..15 "foo"
R_CURLY@15..16 "}"
BRACK_GROUP_WORD@16..21
L_BRACK@16..17 "["
- WORD@17..20 "bar"
+ KEY@17..20
+ WORD@17..20 "bar"
R_BRACK@20..21 "]"
MISSING@21..21 ""
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description.snap
index 356dc079f1..7c8b49efa1 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description.snap
@@ -9,7 +9,8 @@ ROOT@0..21
THEOREM_DEFINITION_NAME@0..11 "\\newtheorem"
CURLY_GROUP_WORD@11..16
L_CURLY@11..12 "{"
- WORD@12..15 "foo"
+ KEY@12..15
+ WORD@12..15 "foo"
R_CURLY@15..16 "}"
CURLY_GROUP@16..21
L_CURLY@16..17 "{"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description_and_counter.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description_and_counter.snap
index cc6e34d378..3322a9a116 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description_and_counter.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_name_with_description_and_counter.snap
@@ -9,11 +9,13 @@ ROOT@0..26
THEOREM_DEFINITION_NAME@0..11 "\\newtheorem"
CURLY_GROUP_WORD@11..16
L_CURLY@11..12 "{"
- WORD@12..15 "foo"
+ KEY@12..15
+ WORD@12..15 "foo"
R_CURLY@15..16 "}"
BRACK_GROUP_WORD@16..21
L_BRACK@16..17 "["
- WORD@17..20 "bar"
+ KEY@17..20
+ WORD@17..20 "bar"
R_BRACK@20..21 "]"
CURLY_GROUP@21..26
L_CURLY@21..22 "{"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_only_name.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_only_name.snap
index 27a040b7ff..0ba62df76c 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_only_name.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__theorem_definition_only_name.snap
@@ -9,7 +9,8 @@ ROOT@0..16
THEOREM_DEFINITION_NAME@0..11 "\\newtheorem"
CURLY_GROUP_WORD@11..16
L_CURLY@11..12 "{"
- WORD@12..15 "foo"
+ KEY@12..15
+ WORD@12..15 "foo"
R_CURLY@15..16 "}"
MISSING@16..16 ""
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__tikz_library_import_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__tikz_library_import_simple.snap
index 4915306c55..4cd63e6728 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__tikz_library_import_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__tikz_library_import_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..20
TIKZ_LIBRARY_IMPORT_NAME@0..15 "\\usetikzlibrary"
CURLY_GROUP_WORD_LIST@15..20
L_CURLY@15..16 "{"
- WORD@16..19 "foo"
+ KEY@16..19
+ WORD@16..19 "foo"
R_CURLY@19..20 "}"
diff --git a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__verbatim_include_simple.snap b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__verbatim_include_simple.snap
index 399e16d791..48d6b816f3 100644
--- a/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__verbatim_include_simple.snap
+++ b/support/texlab/src/syntax/latex/snapshots/texlab__syntax__latex__parser__tests__verbatim_include_simple.snap
@@ -9,6 +9,7 @@ ROOT@0..27
VERBATIM_INCLUDE_NAME@0..14 "\\verbatiminput"
CURLY_GROUP_WORD_LIST@14..27
L_CURLY@14..15 "{"
- WORD@15..26 "foo/bar.txt"
+ KEY@15..26
+ WORD@15..26 "foo/bar.txt"
R_CURLY@26..27 "}"
diff --git a/support/texlab/tests/integration/completion.rs b/support/texlab/tests/integration/completion.rs
index 33af77f003..488415e2d6 100644
--- a/support/texlab/tests/integration/completion.rs
+++ b/support/texlab/tests/integration/completion.rs
@@ -239,6 +239,40 @@ mod latex {
}
#[test]
+ fn test_citation_multi_word() -> Result<()> {
+ let server = ServerTester::launch_new_instance()?;
+ server.initialize(ClientCapabilities::default(), None)?;
+ let tex_uri = server.open(
+ "main.tex",
+ r#"
+ \documentclass{article}
+ \bibliography{main}
+ \begin{document}
+ \cite{foo 2
+ \end{document}
+ "#,
+ "latex",
+ false,
+ )?;
+ server.open(
+ "main.bib",
+ r#"
+ @article{foo 2019,
+ author = {Foo Bar},
+ title = {Baz Qux},
+ year = {2019},
+ }
+
+ @article{bar:2005,}
+ "#,
+ "bibtex",
+ false,
+ )?;
+ assert_json_snapshot!(complete_and_resolve(&server, tex_uri, 3, 6)?);
+ Ok(())
+ }
+
+ #[test]
fn test_citation_after() -> Result<()> {
let server = ServerTester::launch_new_instance()?;
server.initialize(ClientCapabilities::default(), None)?;
diff --git a/support/texlab/tests/integration/snapshots/integration__completion__latex__citation_multi_word.snap b/support/texlab/tests/integration/snapshots/integration__completion__latex__citation_multi_word.snap
new file mode 100644
index 0000000000..2ce23ae3fa
--- /dev/null
+++ b/support/texlab/tests/integration/snapshots/integration__completion__latex__citation_multi_word.snap
@@ -0,0 +1,34 @@
+---
+source: tests/integration/completion.rs
+expression: "complete_and_resolve(&server, tex_uri, 3, 6)?"
+
+---
+{
+ "isIncomplete": false,
+ "items": [
+ {
+ "label": "foo 2019",
+ "kind": 1,
+ "documentation": {
+ "kind": "markdown",
+ "value": "Bar, F. (2019). *Baz Qux*."
+ },
+ "preselect": false,
+ "sortText": "00 foo 2019 @articlefoo 2019 author Foo Bar title Baz Qux year 2019",
+ "filterText": "foo 2019 @articlefoo 2019 author Foo Bar title Baz Qux year 2019",
+ "textEdit": {
+ "range": {
+ "start": {
+ "line": 3,
+ "character": 6
+ },
+ "end": {
+ "line": 3,
+ "character": 11
+ }
+ },
+ "newText": "foo 2019"
+ }
+ }
+ ]
+}
diff --git a/support/texlab/texlab.pdf b/support/texlab/texlab.pdf
index bf485f9295..27f915c944 100644
--- a/support/texlab/texlab.pdf
+++ b/support/texlab/texlab.pdf
Binary files differ
diff --git a/support/texlab/texlab.tex b/support/texlab/texlab.tex
new file mode 100644
index 0000000000..7faff8b122
--- /dev/null
+++ b/support/texlab/texlab.tex
@@ -0,0 +1,78 @@
+\documentclass{article}
+\usepackage[utf8]{inputenc}
+\usepackage{hyperref}
+
+\date{\today}
+\author{Eric Förster \and Patrick Förster}
+\title{\TeX{}Lab}
+
+\begin{document}
+
+\maketitle{}
+
+\section{Introduction}
+
+TexLab is a cross-platform implementation of the
+\href{https://microsoft.github.io/language-server-protocol/specifications/specification-current/}{Language Server Protocol}
+for the \LaTeX{} typesetting system.
+It aims to produce high quality code completion results.
+The server may be used with any editor that implements the Language Server Protocol.
+It is written in Rust, a blazingly fast systems programming language.
+
+\section{Features}
+
+The language server implements most of the Language Server Protocol specification.
+In addition to that, it implements additional functionality like
+building and forward search.
+
+\section{Availability}
+
+TexLab is available on \href{https://github.com/latex-lsp/texlab}{GitHub},
+various package managers and CTAN\@.
+Pre-compiled binaries are available on the
+\href{https://github.com/latex-lsp/texlab/releases}{GitHub Releases} page.
+Some editor extensions are able to automatically download TexLab.
+
+\section{Installation}
+
+There are various ways to install TexLab:
+\begin{itemize}
+ \item
+ TexLab is included in some package managers like \texttt{brew},
+ \texttt{pacman} and \texttt{scoop}.
+ Please refer to the badges in the README to see if your package manager
+ includes TexLab.
+ \item
+ You can download a pre-compiled binary from our
+ \href{https://github.com/latex-lsp/texlab/releases}{GitHub Releases} page.
+ \item
+ Some extensions like the Visual Studio Code extension or
+ \texttt{coc-texlab} can automatically download the server for you.
+ \item
+ You can download the sources from either GitHub or CTAN
+ and compile the server with \texttt{cargo build --release}.
+ The \texttt{texlab} binary can be found inside \texttt{target/release}.
+\end{itemize}
+
+\section{Usage}
+
+\subsection{Synopsis}
+
+\texttt{texlab [FLAGS] [OPTIONS]}
+
+\subsection{Flags}
+
+\begin{itemize}
+ \item \texttt{-h}, \texttt{--help} Prints help information
+ \item \texttt{-q}, \texttt{--quiet} No output printed to stderr
+ \item \texttt{-V}, \texttt{--version} Prints version information
+ \item \texttt{-v}, \texttt{--verbosity} Increase message verbosity (\texttt{-vvvv} for max verbosity)
+\end{itemize}
+
+\subsection{Options}
+
+\begin{itemize}
+ \item \texttt{--log-file <FILE>} WRite the logging output to \texttt{FILE}
+\end{itemize}
+
+\end{document} \ No newline at end of file
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index 007bd46ba2..880c0686f6 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -48,9 +48,7 @@ $mirrors = {
'Korea' => {
'http://ftp.ktug.org/tex-archive/' => 1,
'https://cran.asia/tex/' => 1,
- 'https://ftp.harukasan.org/CTAN/' => 1,
'https://ftp.kaist.ac.kr/pub/tex-archive/' => 1,
- 'https://mirror.kakao.com/CTAN/' => 1,
'https://mirror.navercorp.com/CTAN/' => 1,
'https://mirror.yongbok.net/ctan/' => 1,
},
@@ -171,9 +169,7 @@ $mirrors = {
'https://ctan.math.ca/tex-archive/' => 1,
'https://ctan.mirror.colo-serv.net/' => 1,
'https://ctan.mirror.globo.tech/' => 1,
- 'https://ctan.mirror.rafal.ca/' => 1,
'https://mirror.0xem.ma/tex-archive/' => 1,
- 'https://mirror.its.dal.ca/ctan/' => 1,
'https://muug.ca/mirror/ctan/' => 1,
},
'Costa Rica' => {
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 02778998a7..42477494ed 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,11 +26,11 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2021
-depend revision/59441
+depend revision/59459
name 00texlive.image
category TLCore
-revision 59433
+revision 59458
shortdesc TeX Live files only in the source repository
longdesc The files here are not copied by the installer and containers
longdesc are not built for them; they exist only in the source
@@ -4394,7 +4394,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 59428
+revision 59443
shortdesc TeX Live standalone installer package
longdesc This package defines the files to go into the installer
longdesc archives (install-tl-unx.tar.gz, install-tl.zip) built by the
@@ -40774,20 +40774,19 @@ catalogue-version 1.1
name bjfuthesis
category Package
-revision 59396
+revision 59445
shortdesc A thesis class for Beijing Forestry University
relocated 1
-longdesc This package provides a LaTeX class intended for students at
-longdesc Beijing Forestry University (BJFU) to write their theses. The
-longdesc class is based on the ctexbook class. It modifies some of the
-longdesc layout and style definitions of these packages in order to
-longdesc provide a document layout that should be compatible with the
-longdesc Beijing Forestry University Thesis Standard.
-containersize 2504
-containerchecksum 273a76ea529e61f72c4165c6657537c50d12f46ecd75f54b90cff635af846f775256bfda2c4c68479576ac8e9e1753b363642704d1cc97b435b4b7451e26c250
-doccontainersize 7054428
-doccontainerchecksum c1b3b2cd60da232580061322c65e24b8385b8cc4673df1a6a8bbbaa73a0bab2f5bfa3d314b4c6cb82137f76dc7b4fc705e7f784a93b482d840b3e24ff754f009
-docfiles size=1867
+longdesc This is a class file for producing dissertations and theses
+longdesc according to the Beijing Forestry University (BJFU) Guidelines
+longdesc for Undergraduate Theses and Dissertations. The class should
+longdesc meet all current requirements and is updated whenever the
+longdesc university guidelines change.
+containersize 2488
+containerchecksum 2996cfa1664cc0c99b2cbf537c35aa54d4a8e0259cb7885bb2d1114d4b344ebb72dc6c4afc4bbb0ae42321f9ac4778c2a2901a56685b009a1e034eeceed02e07
+doccontainersize 9533004
+doccontainerchecksum 3a8c58074292b6c20e2914634a6f7ef010cf39ac45219ff3197e461860b1cb0a96c686046ac560d30e7d009651a59c0579ec23447901e05c4348c0ff4d2d9793
+docfiles size=2463
RELOC/doc/latex/bjfuthesis/LICENSE
RELOC/doc/latex/bjfuthesis/README.md details="Readme"
RELOC/doc/latex/bjfuthesis/documentation/bjfuthesis.pdf details="Package documentation" language="zh,en"
@@ -40800,17 +40799,19 @@ docfiles size=1867
RELOC/doc/latex/bjfuthesis/example/contents/acknowledge.tex
RELOC/doc/latex/bjfuthesis/example/contents/mainbody.tex
RELOC/doc/latex/bjfuthesis/example/cover.pdf
+ RELOC/doc/latex/bjfuthesis/example/figures/admin-knowledge-graph.png
RELOC/doc/latex/bjfuthesis/example/figures/admin-movie.png
+ RELOC/doc/latex/bjfuthesis/example/figures/admin-navigation.png
RELOC/doc/latex/bjfuthesis/example/figures/anonymous-category.png
RELOC/doc/latex/bjfuthesis/example/figures/anonymous-details.png
RELOC/doc/latex/bjfuthesis/example/figures/anonymous-index.png
+ RELOC/doc/latex/bjfuthesis/example/figures/anonymous-search.png
RELOC/doc/latex/bjfuthesis/example/figures/enhanced-recommendation.png
RELOC/doc/latex/bjfuthesis/example/figures/general-details.png
RELOC/doc/latex/bjfuthesis/example/figures/illustration-of-ripple-sets.png
RELOC/doc/latex/bjfuthesis/example/figures/jwt.pdf
RELOC/doc/latex/bjfuthesis/example/figures/recommendation-procedure.pdf
RELOC/doc/latex/bjfuthesis/example/figures/ripplenet-framework.png
- RELOC/doc/latex/bjfuthesis/example/figures/sign-up.png
RELOC/doc/latex/bjfuthesis/example/figures/use-case.pdf
RELOC/doc/latex/bjfuthesis/example/thesis.pdf details="Example of use" language="zh"
RELOC/doc/latex/bjfuthesis/example/thesis.tex
@@ -40820,7 +40821,7 @@ catalogue-contact-repository https://github.com/bjfu-projects/bjfuthesis
catalogue-ctan /macros/latex/contrib/bjfuthesis
catalogue-license gpl3
catalogue-topics class doc-templ dissertation std-conform chinese
-catalogue-version 1.0.0
+catalogue-version 1.0.1
name blacklettert1
category Package
@@ -56078,7 +56079,7 @@ catalogue-version 1.3
name circuit-macros
category Package
-revision 57308
+revision 59444
shortdesc M4 macros for electric circuit diagrams
relocated 1
longdesc A set of m4 macros for drawing high-quality electric circuits
@@ -56096,11 +56097,11 @@ longdesc structured. (The m4 and pic processors are readily available
longdesc for Unix and PC machines.) Alternative output macros can create
longdesc TeX output to be read by pstricks, TikZ commands for use by the
longdesc pgf bundle, or SVG.
-containersize 1500
-containerchecksum 38e9ed7362e27f836d3a364ea50f54593aac93f30b7a2b90a7bab9f0dd72f28a14cae86fd5d3dad2f47c00ef511afb458c2da29c5da203c3d65c9829b32aad52
-doccontainersize 2234380
-doccontainerchecksum 44251146179c9021159523d00acc93969c1caeb92bd0efca9701d95804fe57c8ba218f41cdab878aad8b942cdb21ace7d0266ed7c7c9373d0eb9676b9e636492
-docfiles size=1246
+containersize 1496
+containerchecksum 6b862b6824ea16cad1cd6b458be6016e414f33812c25486a7485933860b0bb827892fec17c378ae7a11ae1ecbbd6bcf4a4ca54c94175f452d0ed3e58ef679602
+doccontainersize 2248888
+doccontainerchecksum e7e1263662d82cd5dbd934409e7991ae8fc70dc7eaebb68020700701f1ff1ea5200d1e220ffaef1adbe5a47bfb38131b5bb147bfe0647129e757e3b9f39908aa
+docfiles size=1266
RELOC/doc/latex/circuit-macros/CHANGES
RELOC/doc/latex/circuit-macros/Copying
RELOC/doc/latex/circuit-macros/INSTALL
@@ -56120,9 +56121,7 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/doc/Bip.tex
RELOC/doc/latex/circuit-macros/doc/BipMan.m4
RELOC/doc/latex/circuit-macros/doc/Buffer.m4
- RELOC/doc/latex/circuit-macros/doc/Capture.JPG
- RELOC/doc/latex/circuit-macros/doc/CctTable.tex
- RELOC/doc/latex/circuit-macros/doc/CctTableMan.m4
+ RELOC/doc/latex/circuit-macros/doc/CapacitorsMan.m4
RELOC/doc/latex/circuit-macros/doc/Circuit_macros.bib
RELOC/doc/latex/circuit-macros/doc/Circuit_macros.pdf details="Package manual"
RELOC/doc/latex/circuit-macros/doc/Circuit_macros.tex
@@ -56156,12 +56155,14 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/doc/Headers.tex
RELOC/doc/latex/circuit-macros/doc/HeadersMan.m4
RELOC/doc/latex/circuit-macros/doc/HybridPi.m4
+ RELOC/doc/latex/circuit-macros/doc/InductorsMan.m4
RELOC/doc/latex/circuit-macros/doc/Jack.tex
RELOC/doc/latex/circuit-macros/doc/JackMan.m4
RELOC/doc/latex/circuit-macros/doc/Logic.tex
RELOC/doc/latex/circuit-macros/doc/LogicMan.m4
RELOC/doc/latex/circuit-macros/doc/Loop.m4
RELOC/doc/latex/circuit-macros/doc/Makefile
+ RELOC/doc/latex/circuit-macros/doc/MoreTableMan.m4
RELOC/doc/latex/circuit-macros/doc/Multiplexer.tex
RELOC/doc/latex/circuit-macros/doc/MultiplexerMan.m4
RELOC/doc/latex/circuit-macros/doc/NLG.tex
@@ -56179,6 +56180,7 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/doc/Potentiometers.m4
RELOC/doc/latex/circuit-macros/doc/Relay.tex
RELOC/doc/latex/circuit-macros/doc/RelayMan.m4
+ RELOC/doc/latex/circuit-macros/doc/ResistorsMan.m4
RELOC/doc/latex/circuit-macros/doc/Series.m4
RELOC/doc/latex/circuit-macros/doc/ShiftR.tex
RELOC/doc/latex/circuit-macros/doc/ShiftRMan.m4
@@ -56212,8 +56214,8 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/doc/fetMan.m4
RELOC/doc/latex/circuit-macros/doc/lrarrows.m4
RELOC/doc/latex/circuit-macros/doc/mplex.m4
- RELOC/doc/latex/circuit-macros/doc/oax.m4
- RELOC/doc/latex/circuit-macros/doc/oaxbody.m4
+ RELOC/doc/latex/circuit-macros/doc/opampex.m4
+ RELOC/doc/latex/circuit-macros/doc/opampexbody.m4
RELOC/doc/latex/circuit-macros/doc/quick.m4
RELOC/doc/latex/circuit-macros/doc/relaycoilMan.m4
RELOC/doc/latex/circuit-macros/doc/sampleIC.m4
@@ -56232,8 +56234,8 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/examples/Alogix.m4
RELOC/doc/latex/circuit-macros/examples/AmpTable.m4
RELOC/doc/latex/circuit-macros/examples/Antennas.m4
- RELOC/doc/latex/circuit-macros/examples/AntiqueClock.m4
RELOC/doc/latex/circuit-macros/examples/Arrester.m4
+ RELOC/doc/latex/circuit-macros/examples/ArrowFn.m4
RELOC/doc/latex/circuit-macros/examples/Attention.m4
RELOC/doc/latex/circuit-macros/examples/Audio.m4
RELOC/doc/latex/circuit-macros/examples/Autoencoder.m4
@@ -56246,8 +56248,9 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/examples/Byte.m4
RELOC/doc/latex/circuit-macros/examples/CSlight.m4
RELOC/doc/latex/circuit-macros/examples/CanLogic.m4
- RELOC/doc/latex/circuit-macros/examples/CctTable.m4
+ RELOC/doc/latex/circuit-macros/examples/Capacitors.m4
RELOC/doc/latex/circuit-macros/examples/Ccurve.m4
+ RELOC/doc/latex/circuit-macros/examples/Chips.m4
RELOC/doc/latex/circuit-macros/examples/Chuck.m4
RELOC/doc/latex/circuit-macros/examples/Conn.m4
RELOC/doc/latex/circuit-macros/examples/Connectors.m4
@@ -56283,6 +56286,7 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/examples/Incl.pdf
RELOC/doc/latex/circuit-macros/examples/Incleps.m4
RELOC/doc/latex/circuit-macros/examples/Inclpdf.m4
+ RELOC/doc/latex/circuit-macros/examples/Inductors.m4
RELOC/doc/latex/circuit-macros/examples/Jack.m4
RELOC/doc/latex/circuit-macros/examples/Koch.m4
RELOC/doc/latex/circuit-macros/examples/Logic.m4
@@ -56291,6 +56295,7 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/examples/MC.m4
RELOC/doc/latex/circuit-macros/examples/Makefile
RELOC/doc/latex/circuit-macros/examples/Mixer.m4
+ RELOC/doc/latex/circuit-macros/examples/MoreTable.m4
RELOC/doc/latex/circuit-macros/examples/MotorControl.m4
RELOC/doc/latex/circuit-macros/examples/Multiplexer.m4
RELOC/doc/latex/circuit-macros/examples/NLG.m4
@@ -56303,11 +56308,13 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/examples/PPA.m4
RELOC/doc/latex/circuit-macros/examples/Pconn.m4
RELOC/doc/latex/circuit-macros/examples/Planes.m4
+ RELOC/doc/latex/circuit-macros/examples/Plate.m4
RELOC/doc/latex/circuit-macros/examples/PushPull.m4
RELOC/doc/latex/circuit-macros/examples/Quantum.m4
RELOC/doc/latex/circuit-macros/examples/README-examples
RELOC/doc/latex/circuit-macros/examples/Rectifiers.m4
RELOC/doc/latex/circuit-macros/examples/Relay.m4
+ RELOC/doc/latex/circuit-macros/examples/Resistors.m4
RELOC/doc/latex/circuit-macros/examples/Resolver.m4
RELOC/doc/latex/circuit-macros/examples/Rotbox.m4
RELOC/doc/latex/circuit-macros/examples/SPM.m4
@@ -56401,7 +56408,7 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/examples/svg/AlogixSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/AmpTableSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/AntennasSVG.m4
- RELOC/doc/latex/circuit-macros/examples/svg/AntiqueClockSVG.m4
+ RELOC/doc/latex/circuit-macros/examples/svg/ArrowFnSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/AudioSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/AutoencoderSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/Banking.m4
@@ -56410,13 +56417,14 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/examples/svg/ButtonsSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/ByteSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/CanLogicSVG.m4
+ RELOC/doc/latex/circuit-macros/examples/svg/CapacitorsSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/CctTableSVG.m4
+ RELOC/doc/latex/circuit-macros/examples/svg/ChipsSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/ConnSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/ConnectorsSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/ContactSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/ContactsSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/CountingSVG.m4
- RELOC/doc/latex/circuit-macros/examples/svg/CrossbarSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/CrowSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/CrullerSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/CsourceSVG.m4
@@ -56425,7 +56433,9 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/examples/svg/DiniSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/DiodesSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/DriveSVG.m4
+ RELOC/doc/latex/circuit-macros/examples/svg/EEPSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/EmarrowsSVG.m4
+ RELOC/doc/latex/circuit-macros/examples/svg/EscherSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/FlowSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/FontsSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/FourbarSVG.m4
@@ -56438,14 +56448,15 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/examples/svg/I2LSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/Incl.jpg
RELOC/doc/latex/circuit-macros/examples/svg/InclepsSVG.m4
+ RELOC/doc/latex/circuit-macros/examples/svg/InductorsSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/JackSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/LgateSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/LogicSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/LoglogSVG.m4
- RELOC/doc/latex/circuit-macros/examples/svg/LyapSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/MCSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/Makefile
RELOC/doc/latex/circuit-macros/examples/svg/MixerSVG.m4
+ RELOC/doc/latex/circuit-macros/examples/svg/MoreTableSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/MotorControlSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/MultiplexerSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/NLGSVG.m4
@@ -56455,10 +56466,12 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/examples/svg/OpampSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/OptoisoSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/PconnSVG.m4
+ RELOC/doc/latex/circuit-macros/examples/svg/PlateSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/PushPullSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/QuantumSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/RectifiersSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/RelaySVG.m4
+ RELOC/doc/latex/circuit-macros/examples/svg/ResistorsSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/RotboxSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/SQUIDSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/SVGconfig.m4
@@ -56474,14 +56487,12 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/examples/svg/TimerSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/TtreeSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/TubediagsSVG.m4
- RELOC/doc/latex/circuit-macros/examples/svg/UNO.m4
RELOC/doc/latex/circuit-macros/examples/svg/UNOSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/VariableSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/WindingsSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/XORSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/XformSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/Xtest.m4
- RELOC/doc/latex/circuit-macros/examples/svg/Y14-5SVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/controlSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/cscSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/diamondSVG.m4
@@ -56518,6 +56529,7 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/examples/svg/roseSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/sfgSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/shapesSVG.m4
+ RELOC/doc/latex/circuit-macros/examples/svg/sldtestsSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/thyristorSVG.m4
RELOC/doc/latex/circuit-macros/examples/svg/tstSVG.htmx
RELOC/doc/latex/circuit-macros/examples/svg/ujtSVG.m4
@@ -56526,11 +56538,12 @@ docfiles size=1246
RELOC/doc/latex/circuit-macros/examples/test.m4
RELOC/doc/latex/circuit-macros/examples/testpdf.tex
RELOC/doc/latex/circuit-macros/examples/thyristor.m4
- RELOC/doc/latex/circuit-macros/examples/tikz.tex
RELOC/doc/latex/circuit-macros/examples/tst.tex
RELOC/doc/latex/circuit-macros/examples/tst1.tex
+ RELOC/doc/latex/circuit-macros/examples/tsttikz.tex
RELOC/doc/latex/circuit-macros/examples/tubedefs.m4
RELOC/doc/latex/circuit-macros/examples/ujt.m4
+ RELOC/doc/latex/circuit-macros/examples/venus.m4
RELOC/doc/latex/circuit-macros/examples/windows.m4
RELOC/doc/latex/circuit-macros/examples/worm.m4
RELOC/doc/latex/circuit-macros/examples/xfig/Makefile
@@ -56552,13 +56565,13 @@ docfiles size=1246
runfiles size=1
RELOC/tex/latex/circuit-macros/boxdims.sty
catalogue-also circ circuitikz
+catalogue-contact-bugs https://gitlab.com/aplevich/circuit_macros/issues
catalogue-contact-home https://ece.uwaterloo.ca/~aplevich/Circuit_macros/
catalogue-contact-repository https://gitlab.com/aplevich/circuit_macros
-catalogue-contact-support https://gitlab.com/aplevich/circuit_macros/issues
catalogue-ctan /graphics/circuit_macros
catalogue-license lppl1.3c
catalogue-topics diagram-circ electronic
-catalogue-version 9.5
+catalogue-version 9.6
name circuitikz
category Package
@@ -88870,22 +88883,29 @@ catalogue-version 0.9.1
name derivative
category Package
-revision 59379
+revision 59453
shortdesc Nice and easy derivatives
relocated 1
-longdesc This package provides a set of commands \NewOdvVariant,
-longdesc \NewPdvVariant etc. that can be used to define derivatives.
-longdesc Each derivative comes with a great number of options that tweak
-longdesc the derivative's format to your liking. The following types of
-longdesc derivatives come readily defined: \odv Ordinary derivative,
-longdesc \pdv Partial derivative, \fdv Functional derivative, \mdv
-longdesc Material derivative, \adv Average rate of change, \jdv
-longdesc Jacobian.
-containersize 8124
-containerchecksum 5f15025becf3611a9860b3e57f3c067cadbb5bb736ee851ea7d8a640c5320d4323f17742dc12176b23c5b925d5f6c663c66d03a357b44d2c460a9a4db7fd05cd
-doccontainersize 194764
-doccontainerchecksum e25606454c1899c0fd1bf793e2906c81e33a99f9b9f0128af8f8a8ad142e31117d94a17e7f2691f02f0ccc2c0e60efb04c9904533d4e49e8dfdc8916a3716eb7
-docfiles size=70
+longdesc Typesetting derivatives and differentials in a consistent way
+longdesc are clumsy and require care to ensure the preferred formatting.
+longdesc Several packages have been developed for this purpose, each
+longdesc with its own features and drawbacks, with the most ambitious
+longdesc one being diffcoeff. While this package is comparable to
+longdesc diffcoeff in terms of features, it takes a different approach.
+longdesc One difference is this package provides more options to tweak
+longdesc the format of the derivatives and differentials. However, the
+longdesc automatic calculation of the total order isn't as developed as
+longdesc the one in diffcoeff. This package makes it easy to write
+longdesc derivatives and differentials consistently with its predefined
+longdesc commands. It also provides a set of commands that can define
+longdesc custom derivatives and differential operators. The options
+longdesc follow a consistent naming scheme making them easy to use and
+longdesc understand.
+containersize 8604
+containerchecksum 0b386fae5bbbda6bdc5124807d8995e7137b48ef04cafbd798f472514ca2c2c29e16066193d305f1e5640eb4ea2d0eba2bde71a016931fde600e00e9bff62a01
+doccontainersize 196092
+doccontainerchecksum 8af91b830d2ae2bc70be524c6c07a8aadb39ab645cbc7c2deaef89469b53b55c3b32631c32329dbf9f0ced7d9066a96ff0de0dd26b842e45a58a99fec3a785a9
+docfiles size=72
RELOC/doc/latex/derivative/README.md details="Readme"
RELOC/doc/latex/derivative/derivative.pdf details="Package documentation"
RELOC/doc/latex/derivative/derivative.tex
@@ -88895,7 +88915,7 @@ catalogue-also diffcoeff
catalogue-ctan /macros/latex/contrib/derivative
catalogue-license lppl1.3
catalogue-topics maths expl3
-catalogue-version 1.01
+catalogue-version 1.1
name detex
category TLCore
@@ -95057,17 +95077,17 @@ catalogue-version 2.08h
name dtk-bibliography
category Package
-revision 58212
+revision 59447
shortdesc Bibliography of "Die TeXnische Komodie"
relocated 1
longdesc This package contains the bibliography for "Die TeXnische
longdesc Komodie", the journal of the German-speaking TeX User Group. It
longdesc is updated on a quarterly basis.
containersize 516
-containerchecksum 24d9c6fbec620031e612be1820a971dfcf763bb457ec440757ea3b40e953cca21b2eb5ea550fb7dbfb773663e04b3b37f99fdd83e592e2405c00cebbf558dc11
-doccontainersize 412068
-doccontainerchecksum 8b4256fd9dfebf80f5ee1a957b546746ae34801b552db1459a05a1a80be24bf8e64e968cc47c52226b6f4e0c8ee02876de4aa5fd41fb413389130d23be3f2c0d
-docfiles size=220
+containerchecksum 8b52e1235cd868ad6efda3155f94bdd203e068392a13266c3a3156655a81791fccce11d8061ca6967b9c943a2e310c7c4a0be4eb73ed0ad03410137fad7a7004
+doccontainersize 412992
+doccontainerchecksum b82a6411a25f78302d81f9f0072ad4ed65fd878a357f1b2e150d8894e75a24d3fccb506bc259f390d06039751a8a1ec3afafd03a4a0f8abe3bb2c303466c315e
+docfiles size=221
RELOC/doc/bibtex/dtk-bibliography/README.md details="Readme"
RELOC/doc/bibtex/dtk-bibliography/dtk-authoryear.bbx
RELOC/doc/bibtex/dtk-bibliography/dtk-authoryear.dbx
@@ -95080,7 +95100,7 @@ catalogue-contact-support https://github.com/dante-ev/dtk-bibliography/issues
catalogue-ctan /info/dtk-bibliography
catalogue-license lppl1.3c
catalogue-topics journ-digest review-document german-doc
-catalogue-version 2021-01
+catalogue-version 2021-02
name dtl
category TLCore
@@ -98886,24 +98906,24 @@ catalogue-topics notes editorial
name easybook
category Package
-revision 59434
+revision 59454
shortdesc Typeset Chinese books or notes
relocated 1
longdesc Easybook is a minimalist style template based on the ctexbook
longdesc book document class.
-containersize 14100
-containerchecksum 69c363ba59a8cb6a5d61287a23a3f27532e6ddd928b11dd9c801c7c7fbb3057de15d3e9f2ab7d7a71d45d04e9ab8a27151714e45b81a7168cefc64b41c670963
-doccontainersize 314752
-doccontainerchecksum 64ad786206b63a2056f36c8a3eb825200f73734707c3df49775f68252e01455342f63e3df3dfeaf12b3cb0ec0bb0af3baf8d50171691b3dc4cff01c1a6077848
-docfiles size=79
+containersize 14184
+containerchecksum c13d8fdc1dfcfefb3ce4e93fcb9c062a8e01aecc0a3c743278857c9d71ea6eb24adf123db642254311e8391d114ab026e0afb76450b516ed895a6fe9938866fe
+doccontainersize 314636
+doccontainerchecksum 7a91d4ee1e38f621b49c0432617a90ef9f5dc426b5497a6fafa3f8256dad4cc6ee3946157755127c81d33f573ae97c7bdfa26eb158b9235b03e4dbba02342669
+docfiles size=78
RELOC/doc/latex/easybook/README.md details="Readme"
RELOC/doc/latex/easybook/easybook.pdf details="Package documentation" language="zh"
-srccontainersize 30768
-srccontainerchecksum 446543ba3cd834df1beaa14430f0c173582830ce2b5ac1751cdff50e614baf01b0d93665bf6f636418654338c09600b8e103d16c1f7b7bc1dd6764da8a2081ca
+srccontainersize 30840
+srccontainerchecksum 63dbb6d1e7de8f9d45a4497db2b5f67701a7deb91c1423314fbc80238c7ddc68668aae66a7a3c31fdda45ade31602e20508e8a22b0265075167a94c7e7135597
srcfiles size=33
RELOC/source/latex/easybook/easybook.dtx
RELOC/source/latex/easybook/easybook.ins
-runfiles size=18
+runfiles size=17
RELOC/tex/latex/easybook/easybase.sty
RELOC/tex/latex/easybook/easybook.cls
catalogue-also ctex
@@ -98911,7 +98931,7 @@ catalogue-contact-repository https://gitee.com/texl3/easybook
catalogue-ctan /macros/latex/contrib/easybook
catalogue-license cc-by-4
catalogue-topics book-pub class chinese expl3
-catalogue-version 1.25q
+catalogue-version 1.25r
name easyfig
category Package
@@ -111824,7 +111844,7 @@ catalogue-version 5.1b
name expkv
category Package
-revision 59342
+revision 59452
shortdesc An expandable key=val implementation
relocated 1
longdesc expkv is a minimalistic but fast and expandable <key>=<val>
@@ -111837,15 +111857,15 @@ longdesc brace-stripping behaviour and handles commas and equal signs
longdesc with category codes 12 and 13 correctly. A key-defining
longdesc interface that is not as rudimentary as the macros provided in
longdesc this package is contained in expkv-def.
-containersize 4740
-containerchecksum e26c1a0a69e80ef2a05672c9002595e9293cf7e4d10290fde2fd8b515e8219bd905c48120e38002d859850767ce1f3c658de48c8eb0eeeb23a82bd7c7f26d5f7
-doccontainersize 470564
-doccontainerchecksum 87eed244c33edc5b71ded7e97cbb708d79bf8c4b7040324a1574f823e59630dcce6339c4b6cbaa9fd69a35bea9a70f983d5da0997c83c3b0928825d3a853a2a6
+containersize 4760
+containerchecksum eae87f34183df52ebf14e7a30e01e4a122cc51f598415f68ef6166fdeb04d751aef421f903e062fd36276102f75ad762eec88939c9d84ede1a914f258022476e
+doccontainersize 470104
+doccontainerchecksum 8568fc323e34ae85dc8368b8850db2f3683227e050728bd325b631dd949630a7fa4e25fea25ed0068d77f424ae2cf7b8b7924914f26513f7550a438f4d7e98f1
docfiles size=119
RELOC/doc/latex/expkv/README.md details="Readme"
RELOC/doc/latex/expkv/expkv.pdf details="Package documentation"
-srccontainersize 26948
-srccontainerchecksum 967f7f810754501ebac21d88efb0d3c7bc407e2192b43c5552e5942ecda61e5e0d40f74a8ad8a15e175de7afd564fd0bbc62247084de243b2af8710be0b72803
+srccontainersize 27036
+srccontainerchecksum c7b811df8310976603c17778c3d4c41bf9b0c572694fdf1882212a884428ea17e38952072e1ab32a4c58ccc42c426f3ec560c78520940dc64806bc6d9820c795
srcfiles size=27
RELOC/source/latex/expkv/expkv.dtx
runfiles size=7
@@ -111856,11 +111876,11 @@ catalogue-contact-repository https://github.com/Skillmon/tex_expkv
catalogue-ctan /macros/generic/expkv
catalogue-license lppl1.3c
catalogue-topics keyval
-catalogue-version 1.8
+catalogue-version 1.8a
name expkv-cs
category Package
-revision 59340
+revision 59451
shortdesc Define expandable key=val macros using expkv
relocated 1
longdesc This package is a frontend to define expandable macros with
@@ -111878,15 +111898,15 @@ longdesc nicely on LaTeX's package loading system, but that package is
longdesc not needed and does not provide more functionality than the
longdesc generic code in expkv-cs.tex. Note: In this context, "cs"
longdesc stands for "control sequence" (i.e.: macro).
-containersize 4508
-containerchecksum 2a6b3067683b2dce38fc4592328a246f1bd444c1a20aa8856d82ccd6370fad7648935d667d1cf062b0065dd0bcd4395eea67036289a96f314fe8e06ae7374ac1
-doccontainersize 355600
-doccontainerchecksum a1960fe4ba925ea8bde059aad6d620b3faad2dfb5202d4013a1256774858c0d45e2224d466988584483cfd5e2367d3fbcc3f116abc98c95e5b68e0efa2f47843
+containersize 4488
+containerchecksum 9b49bb023cbb06f2ffca007e133a46831d4e5eeb81aea65864f044bd066bcd6d24c0df0832eb2499025eed0da8074ff1de02fef38fb106ec71d3f1dff6b5b08e
+doccontainersize 353196
+doccontainerchecksum 22237b71151c83a0b7a0e104d58a1f1d2b3eab61fa10cdd857b8938adea7df9355544a8d18f594e09b64eee841832db9fb256243a6f11664b016b95f76c17589
docfiles size=90
RELOC/doc/latex/expkv-cs/README.md details="Readme"
RELOC/doc/latex/expkv-cs/expkv-cs.pdf details="Package documentation"
-srccontainersize 19092
-srccontainerchecksum 9700b383bf73dd9bec49c51735008eb22b588c55097fee6d2dbe8ec5770f4c6b7643f03a436e02426c62b8f730960d3e2884bf8d41f9fa23c013f52621bcf6b6
+srccontainersize 18820
+srccontainerchecksum 8bb0b138cdcaf4e382dd623e9e73031deb73c728ff2209668a11295ea705fbfc9899806557bb90158a9543321019935469042ca0e6b1e5564d4d8c2bd211d69f
srcfiles size=21
RELOC/source/latex/expkv-cs/expkv-cs.dtx
runfiles size=8
@@ -111897,7 +111917,7 @@ catalogue-contact-repository https://github.com/Skillmon/tex_expkv-cs
catalogue-ctan /macros/generic/expkv-cs
catalogue-license lppl1.3c
catalogue-topics keyval macro-supp macro-gen
-catalogue-version 0.9
+catalogue-version 0.10
name expkv-def
category Package
@@ -184100,7 +184120,7 @@ catalogue-version 1.0.5
name lua-typo
category Package
-revision 58744
+revision 59457
shortdesc Highlighting typographical flaws with LuaLaTeX
relocated 1
longdesc This package tracks common typographic flaws in LuaLaTeX
@@ -184109,11 +184129,11 @@ longdesc over two pages, consecutive lines ending with hyphens,
longdesc paragraphs ending on too short lines, etc. Customisable colours
longdesc are used to highlight these flaws, and the list of pages on
longdesc which typographical flaws were found is printed.
-containersize 6232
-containerchecksum 940664d9898524e99966b6116056bb4f811d39c58a29926afee82846dfe6c77eadfc7e8cc37a3e417401cca1cab7f16043677d84947c51f695109e3f2eb58655
-doccontainersize 180604
-doccontainerchecksum 18485d5b079306fb6d943256453f4643f33b9b6781133a2fb0f1ecc5b87d8a755bb0c60428d565a6e42c6aedd3f23f0d03aacd3af5ac4055e1950289fc99dcec
-docfiles size=53
+containersize 8804
+containerchecksum 85c217ddc1114990127baae0b4023fc42f2ddf5d59beaa22cf8ab05746d2769699850b60f3623774326265359211597eeabeba304831f650adc1114445bc76ef
+doccontainersize 214628
+doccontainerchecksum be62c81f33224b98bdec4e0ba84886d4020a05d4ae18c9a4549ebbd13394867a9d835c36615d275fb5a938158dffc4d8b8f4c4a73508d45040580e3cf2ecf3e4
+docfiles size=59
RELOC/doc/lualatex/lua-typo/README.md details="Readme"
RELOC/doc/lualatex/lua-typo/lua-typo-demo.pdf details="Example of use"
RELOC/doc/lualatex/lua-typo/lua-typo-demo.tex
@@ -184121,17 +184141,18 @@ docfiles size=53
RELOC/doc/lualatex/lua-typo/lua-typo-fr.pdf details="Package documentation (French)" language="fr"
RELOC/doc/lualatex/lua-typo/lua-typo.ltx
RELOC/doc/lualatex/lua-typo/lua-typo.pdf details="Package documentation (English)"
-srccontainersize 18612
-srccontainerchecksum 348aa0eb23bd9a94f50851a8e71633377347c1ce1942d4d84faa3b8d612ff26c2d0be192fa1a14097be6fb8fab3e363de0b1f77c2bba737a027e7ee279c55729
-srcfiles size=18
+srccontainersize 22768
+srccontainerchecksum ec1c817294ed0800225ea03180e7cd5361c1ac5fb7396b09f18b313e5bb511a626bbda8995d2ae5a61b1da2ee054c053751e4a5048b679db44db4254f8c45ee9
+srcfiles size=23
RELOC/source/lualatex/lua-typo/lua-typo.dtx
-runfiles size=8
+runfiles size=17
+ RELOC/tex/lualatex/lua-typo/lua-typo-2021-04-18.sty
RELOC/tex/lualatex/lua-typo/lua-typo.cfg
RELOC/tex/lualatex/lua-typo/lua-typo.sty
catalogue-ctan /macros/luatex/latex/lua-typo
catalogue-license lppl1.3c
catalogue-topics luatex text-layout
-catalogue-version 0.32
+catalogue-version 0.50
name lua-uca
category Package
@@ -212965,7 +212986,7 @@ catalogue-version 1.0
name newtx
category Package
-revision 59420
+revision 59446
shortdesc Alternative uses of the TX fonts, with improved metrics
relocated 1
longdesc The bundle splits txfonts.sty (from the TX fonts distribution)
@@ -212980,10 +213001,10 @@ longdesc garamondx package, thus offering a garamond-alike
longdesc text-with-maths combination.
depend kastrup
execute addMap newtx.map
-containersize 5604532
-containerchecksum 80ddd6cb5c8818b395b9d7423d5e212e597623cfb9b844a001386b5b165340f2048dd9a660a1e4850c0a2fd35e6a9ec0949ebdcd722bc5b4b351e300d78c79b6
-doccontainersize 966984
-doccontainerchecksum 165c05e946dded1c4eb17e19cf436de407744231f67523105b6ddc6c06ac3172e5e7bd33a88a8a3953db11ef18804fc42938efe88137bb0410561391f745d3ae
+containersize 5604400
+containerchecksum 2325e8cd8963c7afcadf3e43b18aa270764519be2e9cd7367da555642826443289032abc2af710b7da3787b301799c1a5cc46658bdca0c95c62e6b8dfe94ac0e
+doccontainersize 966920
+doccontainerchecksum 2942e2340ff4be337d0a344f30d86ca5da79a33642e1a5cb6fd11617498cacd2333b02c515daebcccfa35fd4ec106d8e396925a3fb951b2630a47612d0723449
docfiles size=436
RELOC/doc/fonts/newtx/MANIFEST-newtx.txt
RELOC/doc/fonts/newtx/README details="Readme"
@@ -213821,7 +213842,7 @@ catalogue-also minion2newtx
catalogue-ctan /fonts/newtx
catalogue-license lppl1.3
catalogue-topics font font-body font-maths font-serif font-proportional font-type1 font-otf font-supp font-t1enc
-catalogue-version 1.654
+catalogue-version 1.655
name newtxsf
category Package
@@ -229906,7 +229927,7 @@ catalogue-version 0.5
name ocgx2
category Package
-revision 57531
+revision 59455
shortdesc Drop-in replacement for 'ocgx' and 'ocg-p'
relocated 1
longdesc This package serves as a drop-in replacement for the packages
@@ -229917,14 +229938,14 @@ longdesc known engines and back-ends including: LaTeX - dvips -
longdesc ps2pdf/Distiller (Xe)LaTeX(x) - dvipdfmx pdfLaTeX and LuaLaTeX
longdesc . It also ensures compatibility with the media9 and animate
longdesc packages.
-containersize 13444
-containerchecksum 2b09a488d273992f02034b66ffda3ac7a7f9251e8b57c7794cd50d8e68f5bc2d1b55d1388bfab41e3a46ee037cc5de4e1e137a7175b5191fe9d68fb6b3513ffd
-doccontainersize 6052
-doccontainerchecksum 5f310667aaebcae98fdac38c301ba587c00290d6fe21944a0f85f87cbbf393c02179621886409956739696137900d119d3c69cc3b597bc38fe283315af03995a
+containersize 14820
+containerchecksum 0e5407bae305b3f0f261403634ff3ca3a9ac527795349d494ed4cbbdda37fe33b85fa86731703c8e7271aa88b5d5451fbc2c7c0ba64c7d67c0417bcab1722d27
+doccontainersize 6088
+doccontainerchecksum 52ab77b6c28fe51c64541523bdb44ce48e827e59c0dc28bfc9ac137d5d6d692cd10aaefb80364d2d998f0271efcce460421a07f9abceb05781eb9ad3bf6877ed
docfiles size=5
RELOC/doc/latex/ocgx2/ChangeLog
RELOC/doc/latex/ocgx2/README.txt
-runfiles size=18
+runfiles size=34
RELOC/tex/latex/ocgx2/fixocgx.sty
RELOC/tex/latex/ocgx2/ocgbase.sty
RELOC/tex/latex/ocgx2/ocgx2.sty
@@ -229933,7 +229954,7 @@ catalogue-contact-repository https://gitlab.com/agrahn/ocgx2
catalogue-ctan /macros/latex/contrib/ocgx2
catalogue-license lppl
catalogue-topics pdf-feat adobe-distiller expl3
-catalogue-version 0.50
+catalogue-version 0.51
name ocherokee
category Package
@@ -233205,7 +233226,7 @@ catalogue-version 1.0
name optex
category Package
-revision 59209
+revision 59458
shortdesc LuaTeX format based on Plain TeX and OPmac
longdesc OpTeX is a LuaTeX format based on Plain TeX macros with power
longdesc from OPmac (fonts selection system, colors, external graphics,
@@ -233220,21 +233241,22 @@ depend optex.ARCH
depend rsfs
depend unicode-data
execute AddFormat name=optex engine=luatex patterns=hyphen-lan.opm options="optex.ini" fmttriggers=amsfonts,cm,ec,hyphen-base,lm,rsfs,unicode-data
-containersize 787872
-containerchecksum 6c5192323baadd32cd34d96c3800425e8ce60a3b2ed42f2f3a2c32d1175dd145dddacaacb8a708c3dc5f74d3ef383533c3d4ec491e9807fb7d94c22bc17cc26a
-doccontainersize 1438692
-doccontainerchecksum 9d25ef307bb2e470e2e2362849aa7aa019dcb7aab8fc16a5f3f50e77ecde7c6fca7bf292145aab15676e07c2ba1acf8f5e67969503b027b71315b919776df455
-docfiles size=402
+containersize 796388
+containerchecksum f8805714ea3d9459a4d3441b79cec180f37e7517b9c386c53cb3d4444f7642f1db75d797a4b0271444f5b576ccb90cb115c961367e5964a21881e3543849170d
+doccontainersize 1418780
+doccontainerchecksum 29a5e643d0953ad0fb6d5193a07793074729eec2345c59fbb3de5da88858acb2a7a909047cfcab4a70fd2601ef342cc187a54e9772b4f69f0ac2f7df433d6c4c
+docfiles size=399
texmf-dist/doc/man/man1/optex.1
texmf-dist/doc/man/man1/optex.man1.pdf
texmf-dist/doc/optex/base/README details="Readme"
+ texmf-dist/doc/optex/base/mte-doc.tex
texmf-dist/doc/optex/base/omls.tex
texmf-dist/doc/optex/base/optex-doc.pdf details="Package documentation"
texmf-dist/doc/optex/base/optex-doc.tex
texmf-dist/doc/optex/base/optex-math.tex
texmf-dist/doc/optex/base/optex-techdoc.tex
texmf-dist/doc/optex/base/optex-userdoc.tex
-runfiles size=482
+runfiles size=493
texmf-dist/tex/optex/base/alloc.opm
texmf-dist/tex/optex/base/basic-macros.opm
texmf-dist/tex/optex/base/bib-iso690.opm
@@ -233250,6 +233272,7 @@ runfiles size=482
texmf-dist/tex/optex/base/f-cursor.opm
texmf-dist/tex/optex/base/f-dejavu.opm
texmf-dist/tex/optex/base/f-ebgaramond.opm
+ texmf-dist/tex/optex/base/f-erewhon.opm
texmf-dist/tex/optex/base/f-garamondl.opm
texmf-dist/tex/optex/base/f-gfsbodoni.opm
texmf-dist/tex/optex/base/f-heros.opm
@@ -233331,6 +233354,7 @@ runfiles size=482
texmf-dist/tex/optex/demo/op-slides-bg.png
texmf-dist/tex/optex/demo/op-slides.tex
texmf-dist/tex/optex/pkg/emoji.opm
+ texmf-dist/tex/optex/pkg/mte.opm
texmf-dist/tex/optex/pkg/plain-at.opm
texmf-dist/tex/optex/pkg/qrcode.opm
texmf-dist/tex/optex/pkg/vlna.opm
@@ -233339,7 +233363,7 @@ catalogue-contact-home http://petr.olsak.net/optex
catalogue-ctan /macros/optex
catalogue-license pd
catalogue-topics format luatex plain-ext
-catalogue-version 1.02
+catalogue-version 1.03
name optex.aarch64-linux
category Package
@@ -258076,7 +258100,7 @@ catalogue-version 1.2
name pxchfon
category Package
-revision 56537
+revision 59449
shortdesc Japanese font setup for pLaTeX and upLaTeX
relocated 1
longdesc This package enables users to declare in their document which
@@ -258089,11 +258113,11 @@ longdesc for each new font. This package also supports setup for the
longdesc fonts used in the japanese-otf package. System requirements:
longdesc TeX format: LaTeX. TeX engine: pTeX or upTeX. DVIware:
longdesc dvipdfmx. Prerequisite packages: atbegshi.
-containersize 19104
-containerchecksum 0883ab31076052a9f970e8a2704d6fe69e4cc4d98e5e58528b48393c4878177cc206baa454539a6f228252c82199a409333ba9dc250b6c79d429e00f8da26cc1
-doccontainersize 312660
-doccontainerchecksum 4bfdcbf0eec187e6726978dfc55dab1217f00a06063d43fdcd6ba640739bedc72fcaa9f5d51f9471173f6d55085076155e7dd2f549739fd15cccf74bb03206f8
-docfiles size=101
+containersize 19936
+containerchecksum 816c45ea035ceca853795857e93cf064d94ac0937ad9774b3bf2316f6e6e15e58df64814116a0fca5a1aea3a986e31982f80d365a53447fa86e1e771a4ffa429
+doccontainersize 322528
+doccontainerchecksum 72e778b111639ef592d23d5f6c19f109654f26d81794e9af685dff38bd77056e29ace46d2b5e6dd5efc54efc91fd88e43ff2d9b1c28bf075d008994f8480f116
+docfiles size=105
RELOC/doc/platex/pxchfon/LICENSE
RELOC/doc/platex/pxchfon/README-ja.md details="Readme" language="ja"
RELOC/doc/platex/pxchfon/README.md details="Readme"
@@ -258105,7 +258129,7 @@ docfiles size=101
RELOC/doc/platex/pxchfon/sample-2004jis.tex
RELOC/doc/platex/pxchfon/sample-pxchfon.pdf
RELOC/doc/platex/pxchfon/sample-pxchfon.tex
-runfiles size=106
+runfiles size=108
RELOC/fonts/sfd/pxchfon/PXcjk0.sfd
RELOC/fonts/tfm/public/pxchfon/cfjam-r-l0j.tfm
RELOC/fonts/tfm/public/pxchfon/cfjam-r-l5j.tfm
@@ -258198,7 +258222,7 @@ catalogue-contact-repository https://github.com/zr-tex8r/PXchfon
catalogue-ctan /language/japanese/pxchfon
catalogue-license mit
catalogue-topics japanese font-supp
-catalogue-version 1.7e
+catalogue-version 1.9
name pxcjkcat
category Package
@@ -289803,7 +289827,7 @@ catalogue-version 1.0
name tex-nutshell
category Package
-revision 58471
+revision 59448
shortdesc A short document about TeX principles
relocated 1
longdesc This document is meant for users who are looking for
@@ -289812,17 +289836,17 @@ longdesc brevity. The pure TeX features are described, no features
longdesc provided by macro extensions. Only the last section gives a
longdesc summary of plain TeX macros.
containersize 512
-containerchecksum 63075927692bcb796c0aaa29303682f9bcd0984e41a344a4dbe7c21ac467ea2fbb5ea952655373e877d8125c676b867f8f26786bc3e40eafddc446a0e92ba4e6
-doccontainersize 265580
-doccontainerchecksum 0e73d7735132f81ffe5aec90254e640e3da839da8fa6b5e72afbc45266cdd806f0c1ac5ef0d88b1a2e606164f37ca5086082f1e12af28726847e39fd5bd61387
-docfiles size=87
+containerchecksum 87db8b6801e09084f619bf20576ae68f94998934736eef07c9bdf18895624e5964bcdbb505a6a9b7a936dedc09b3e07d4f2827f3e7acdbf0bc99cdd67a75f96b
+doccontainersize 285872
+doccontainerchecksum c62d2c448a6cda88efe7ea10c56367fcadefca423def8ff67f5e81fa62b0a64df2f9a524b4d2e3b2b579aa50c386005727eeb71462b9ee5415cca6e08aaf83ff
+docfiles size=94
RELOC/doc/plain/tex-nutshell/README details="Readme"
RELOC/doc/plain/tex-nutshell/tex-nutshell.pdf details="The document itself"
RELOC/doc/plain/tex-nutshell/tex-nutshell.tex
catalogue-ctan /info/tex-nutshell
catalogue-license pd
catalogue-topics documentation tut-plaintex
-catalogue-version 0.6
+catalogue-version 0.7
name tex-overview
category Package
@@ -290719,7 +290743,7 @@ binfiles arch=x86_64-solaris size=1
name tex4ht
category Package
-revision 59414
+revision 59459
shortdesc Convert (La)TeX to HTML/XML
longdesc A converter from TeX and LaTeX to SGML-based formats such as
longdesc (X)HTML, MathML, OpenDocument, and Docbook, providing a
@@ -290732,10 +290756,10 @@ longdesc helper DVI file that it can then process. This technique allows
longdesc TeX4ht to approach the robustness characteristic of
longdesc restricted-syntax systems such as gellmu.
depend tex4ht.ARCH
-containersize 908136
-containerchecksum 3031f7a853bbf9fc5b4e113c51c29252d3eb28b3fa8b6cbea558db7e1aea8271b2a992493abbf406c3c675959febf582289e31c2e6c1a7178e0209d74d691876
-doccontainersize 136384
-doccontainerchecksum 75cec2bd33707f3ae54186b06e447641575bda5577a3820b74c7d4bf8124c832be03dd7e15aac1b380c18eac3d56998fd34e5606a0492d55a4095a221780a6a0
+containersize 908004
+containerchecksum 5a51db0b4cfacba33f9cd83b757d45f83c8470bb451a0376f328a1e78ffe39e5f22dcf2be6f9bed5724eed373ff020c8fa4aa38d9bf34bb45a05186e224e144e
+doccontainersize 136388
+doccontainerchecksum de7c2fb855010f62d8dc7dda39826a549aa38daf5acb9e89abf19cf26724db5ac25f362a490058a1456a056ee9954eaa52985b9a05dcb89d6a947474593a77cb
docfiles size=260
texmf-dist/doc/generic/tex4ht/Makefile
texmf-dist/doc/generic/tex4ht/README details="Readme"
@@ -290807,8 +290831,8 @@ docfiles size=260
texmf-dist/doc/generic/tex4ht/mn56.html
texmf-dist/doc/generic/tex4ht/mn5x.png
texmf-dist/doc/generic/tex4ht/mn6x.png
-srccontainersize 1206216
-srccontainerchecksum 9514fc9205513c49c5abdf45ed9bf75d23f4f31bb1c5227b6396adf285721a6fbe028f68f0f42876a27a1f2b3e1b074dc37e006d01219b27af5fa3669de34e7d
+srccontainersize 1206324
+srccontainerchecksum 80f8b32cf18dc9546f6d53e7ab99d590c843219255bdcca207dbda9c42a01f3d19424cf7375f88f7f139039dd369b7ca896a922ded688580376a6748a4f464f5
srcfiles size=3624
texmf-dist/source/generic/tex4ht/ChangeLog
texmf-dist/source/generic/tex4ht/Makefile
@@ -299914,7 +299938,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 59428
+revision 59443
shortdesc TeX Live infrastructure programs
longdesc Includes install-tl, tl-portable, rungs, etc.; not needed for
longdesc tlmgr to run but still ours. Not included in tlcritical.
@@ -299922,10 +299946,10 @@ depend texlive-scripts.ARCH
depend texlive.infra
execute addMap mathpple.map
postaction shortcut type=menu name="TeX Live command-line" cmd=TEXDIR/tlpkg/installer/tl-cmd.bat
-containersize 107992
-containerchecksum 78e16c6605891dec3bca1eec3fb3750aaabc95c709b2e4e8b4eb453389051c21dd264c2f5a6ab00bd7b88031411177d4ae0be42118c601fe5ca53199bd0e36c9
-doccontainersize 397312
-doccontainerchecksum 6da5281f8e74411313437ab0c6b0dfaec191805fbcfd9d096d7db0cb75485d17c3aa1652fecaa17cad168daf175512e037522b17df98da43cf4b836c16a93eed
+containersize 107952
+containerchecksum 7e226de755a3fd30e977ab4d46d099dcef22bd485883127da7d471db9bcb1c9798326097a1f4b63a68487e293942158f0d6fc4effa3815d7cf4eb2052e8fff25
+doccontainersize 397652
+doccontainerchecksum 18545d6840d606c858297d230aeeb7568226372a68356ba416dcceac17f7bae3f977b959b0865d34e13738991ed1c0a54776a464e2f7dd858b9732ddbf033b16
docfiles size=490
doc.html
texmf-dist/doc/man/man1/fmtutil-sys.1
@@ -315224,7 +315248,7 @@ catalogue-version 1.0
name tuda-ci
category Package
-revision 59370
+revision 59456
shortdesc LaTeX templates of Technische Universitat Darmstadt
relocated 1
longdesc The TUDa-CI-Bundle provides a possibility to use the Corporate
@@ -315232,10 +315256,10 @@ longdesc Design of TU Darmstadt in LaTeX. It contains documentclasses as
longdesc well as some helper packages and config files together with
longdesc some templates for user documentation, which currently are only
longdesc available in German.
-containersize 42892
-containerchecksum 27dde18d82414dc17b4c026c4f85bf8f5a2bba2a009e91d30d34aacb2a88dedcffec9e92985169bc871ea9cd4397a000ae010d9c3c5c57f5538676e76ea169f7
-doccontainersize 1121212
-doccontainerchecksum ae08d190fd17c5e2e15068a14a5c02638ac817c54ae299c66a32347ce7ce5300639edaf50d3faaa33563a5f094506efdae480c3c461e2dad66e11b7f84f7b177
+containersize 42908
+containerchecksum f02c87c15634fb777e87db7b3cea2fcbdd6e23dca2766e0a283769b60d9024d50719dc3fffdb101a7febe21ee4b4beb1d8fdd76fac9eabda5f32653174aac087
+doccontainersize 1121940
+doccontainerchecksum 85e214c21db2a70492a2239c4e0bd988537083e32409fce980db23ce1f22c35c56a1633efafba10915377612725e5ce4b2444c35ae1f3d6c59597f0e30e8508b
docfiles size=1675
RELOC/doc/latex/tuda-ci/DEMO-TUDaAnnouncement.pdf
RELOC/doc/latex/tuda-ci/DEMO-TUDaAnnouncement.tex
@@ -315298,7 +315322,7 @@ catalogue-contact-repository https://github.com/tudace/tuda_latex_templates
catalogue-ctan /macros/latex/contrib/tuda-ci
catalogue-license lppl1.3c
catalogue-topics class doc-templ letter dissertation presentation poster std-conform
-catalogue-version 3.15
+catalogue-version 3.16
name tudscr
category Package
@@ -323203,7 +323227,7 @@ catalogue-topics barcode
name uplatex
category Package
-revision 58842
+revision 59450
shortdesc pLaTeX2e and miscellaneous macros for upTeX
longdesc The bundle provides pLaTeX2e macros for upTeX by Takuji Tanaka.
longdesc This is a community edition syncing with platex. The bundle
@@ -323230,10 +323254,10 @@ depend uptex
depend uptex-fonts
execute AddFormat name=uplatex engine=euptex options="*uplatex.ini" patterns=language.dat fmttriggers=atbegshi,atveryend,babel,cm,everyshi,firstaid,hyphen-base,l3backend,l3kernel,l3packages,latex,latex-fonts,tex-ini-files,unicode-data,uptex-fonts,platex,latex
execute AddFormat name=uplatex-dev engine=euptex options="*uplatex.ini" patterns=language.dat fmttriggers=atbegshi,atveryend,babel,cm,everyshi,firstaid,hyphen-base,l3backend,l3kernel,l3packages,latex,latex-fonts,tex-ini-files,unicode-data,uptex-fonts,platex,l3kernel,latex-base-dev,latex-firstaid-dev
-containersize 14752
-containerchecksum 83f8e209949e0f7cdef7f440bfceea51ba1a7ddc4c145bb23c6b8de07a84e6b207bac0c00399a3e33c7b40b4558e7b5195addaafe7f40bd56206a9e1e04bbcf2
-doccontainersize 776292
-doccontainerchecksum 39ad4ffb959c34515ed40f8fb0245554d57a246610c452888f56f7f499681fba0e1b8e08f4b2020f1c2ff37f275ecd6b061584385dd6fb58bcf898f2eb4a510a
+containersize 14828
+containerchecksum 6d9c990c0458138c3753cb8ef1d0ae075ed8322cfdd1e4173374fc37f6918b951152f3e2385b3d24f0278e20c6d0da9a256fda2db3d0a3869cb000ee9f8a99a2
+doccontainersize 776324
+doccontainerchecksum e18c72acbbd80445b7a45d91a40230bf57a806c6e0c74387d20cba12261fb43fecc9b2183dc7e754905ef27a50e2cb209099761adc91144077b5661db3f661bb
docfiles size=201
texmf-dist/doc/man/man1/uplatex.1
texmf-dist/doc/man/man1/uplatex.man1.pdf
@@ -323243,9 +323267,9 @@ docfiles size=201
texmf-dist/doc/uplatex/base/uplatex-en.pdf details="Package documentation"
texmf-dist/doc/uplatex/base/uplatex.pdf details="Package documentation" language="ja"
texmf-dist/doc/uplatex/base/upldoc.pdf
-srccontainersize 50384
-srccontainerchecksum 0f018972d98bb2e3a9f280b50a812b7cba30d846e46cbf325d5c9283bc7b5576ffa631808604a0f7149e409e9ba9bffc39c049d48511920be35d94de7134434b
-srcfiles size=71
+srccontainersize 50744
+srccontainerchecksum e567fb0b2a557f2b1cf441fbbe80b0341e31a71bb848f5aa924ca3602db9df9cffd023ac10d1eb388bd3b31aaf88f9f6fca323d0eb8ce774872cb20f3d34eb65
+srcfiles size=73
texmf-dist/source/uplatex/base/Makefile
texmf-dist/source/uplatex/base/ujclasses.dtx
texmf-dist/source/uplatex/base/ukinsoku.dtx
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index cc789fb1ce..312dd5e4f1 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-5bcedc61e48f74b5f453b5252d837e7b texlive.tlpdb
+14b2a2f477a44592e32b2db9ffe0762c texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index b70dafaec4..39c12e7b01 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-9763533dd881f056b9d2b4d15361a4a16b54071918f838f2422963f9412391c281b679fa1b32e30044227957c53f20fb64f0ff24ed1784f8e694bb258742d6f8 texlive.tlpdb
+ec351353eb9452b104cffcd9cabf0c6e51c016e5ffaedd566684594ed459e0965f7c9bc261310effde145fee0423db67dc2bfab876471a2d3672d589baa8cba0 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index d8f6d94815..9787347826 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
@@ -1,10 +1,10 @@
-----BEGIN PGP SIGNATURE-----
-iQEcBAEBCgAGBQJguBoJAAoJEEzhh34ZQ4xwLXgH/25WXAH0Qp4mIRs8RN+wM541
-BowCtgdLzOlI5ZcpAgf6+Ekxq+29jiWeXH3rhICQ5Uq9H/o3eUyKvgruI4GgUSIQ
-9O4ccmDcQsqq8pnLd8L6vCQxn1McDOqeCWBTq9QLe0dRC0nMqtnAS9t8trUiu89w
-zKjRkLOgWCt5V4+6pKapIuZ7ExA80jnoKYzljXpGEhq4kL1eYT2R0yacYeq/3yHb
-iv7VKOMtLWYaLUldAoMEROCr9zVAMmA9hzldSAFk/ehX1+mtavNqW+TXwEb9z2CG
-2ZyQXhRsr/JyXjoshpr6ZQ99OoM/jyxjppeIfBTH8VIGQ8h2C8CAq0C7A7DYCew=
-=8pxt
+iQEcBAEBCgAGBQJguWusAAoJEEzhh34ZQ4xwxvgH/iq9tkkzcQliywUestRveUZN
+4pE7f6yUosF/IcYwi3TWT2n6dq1Ax99OEuSiXFWqCvnTkrJPw5X7V0IGZ7SYmzyR
+/fL39PvsBIWzbJdVnwnvHdtfpNQfAWFWLVDQasMj4vDpQRPWVM2025N/ANclSuc1
+h8tcjdZi1SgE0xLQx5FgO7Aaa4strxXI7pKFSZcGB/LOO2OR1aJgN/JnRd7zSUYI
+vLwXDwVn2aWwp91FR220NRU0ybOFRfw8qPK9cCxDqIHvLZO9woBtVvsRHdvIBTnP
+YQfuyYMP6GLm9tC2zb9GN5A6jlrlJyxD5Kuu/D4AmpwiQbxMTWwaSe5eSkpbp/c=
+=T1Q4
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index acc53e0ddc..adf48b0788 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/files.csv.lzma b/systems/win32/miktex/tm/packages/files.csv.lzma
index 609914a8fc..66237d886c 100644
--- a/systems/win32/miktex/tm/packages/files.csv.lzma
+++ b/systems/win32/miktex/tm/packages/files.csv.lzma
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/files.csv.lzma b/systems/win32/miktex/tm/packages/next/files.csv.lzma
index 91c5394e11..28690e9456 100644
--- a/systems/win32/miktex/tm/packages/next/files.csv.lzma
+++ b/systems/win32/miktex/tm/packages/next/files.csv.lzma
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index 76bfdd0e30..081c8241b9 100644
--- a/systems/win32/miktex/tm/packages/next/pr.ini
+++ b/systems/win32/miktex/tm/packages/next/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1622664860
+date=1622751409
lastupd=miktex-arctrl-bin-2.9 miktex-arctrl-bin-x64-2.9 miktex-asymptote-bin-2.9 miktex-asymptote-bin-x64-2.9 miktex-autosp-bin-2.9 miktex-autosp-bin-x64-2.9 miktex-axohelp-bin-2.9 miktex-axohelp-bin-x64-2.9 miktex-bibarts-bin-2.9 miktex-bibarts-bin-x64-2.9 miktex-bibtex-bin-2.9 miktex-bibtex-bin-x64-2.9 miktex-bibtex8bit-bin-2.9 miktex-bibtex8bit-bin-x64-2.9 miktex-bzip2-bin-2.9 miktex-bzip2-bin-x64-2.9 miktex-cairo-bin-2.9 miktex-cairo-bin-x64-2.9 miktex-chktex-bin-2.9 miktex-chktex-bin-x64-2.9
-lstdigest=e6ab10abc48b9d8a0fdde6368de3e3c4
-numpkg=4103
+lstdigest=12e5867d26fd62d6de63873ccca37074
+numpkg=4105
relstate=next
-version=7823
+version=7824
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: fy6V+EU8/QEXuYcb0Qc0m6KYcXxc7g4tjKS4ivSJKkKlXqqEDYuMpDq8G0ALyd+f6Om3nQ//dYdxBGbA2aquTENLTg7QakjbXb9Z4N36jwuBAoALPc6Bki9QEomQxPPzmNRH2HHp+a7gBVS9kauiSN/UpmMKEYvkxWYqJvfAJOOXNvEN1sJlfmngBD0SB3Q5HTYUPaF1DsUsqMaVXX5NMwchw1pGWNe4goFj7d7IyF7pfL3sfJsI4P2Asj4qqZ71Tz0xvl7lXvto1XrD8Ct7lGvSjiraEGj+NFKzSSODvTpcInjoTaFAEQsOmgVRIgiTfpWcb7xTFQos9Tvybk+RVA==
+;;;; signature/miktex: ZIghxlyFfebPp+uWpvmOulmg/OAyOthE2fa/EGhdq+IrCiQ3JWRaZZywEP+eJ/rl7zlIBQaXz5f5bqloBHXZitTArUmuTiHjMlgJkbl2OUO5gkr5nbxj/UbJm8R5aubdXwwzbnf5zRRzO78XomFAM1gxAIThdK3G2ZpfID0/Bj7oXswo9IcO2GDLYCovHLUjCQ+DFHD4LmDQBIsOhFmDUCTV08s4I7JBrWrK7jmDYRwjERVWtzQFPNoTFgqj6q307VO0TGu64yOi2kjWC5XM/0MFyg2hXEocVr4vV1tHYQGpVusrIjVDhWzRJOuUpTLoPbtq+der0jlZYB/Jzd12Iw==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index 504de5176f..69e490fcc4 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1622664676
-lastupd=aalok acmart acrotex babel-spanish beamer beaulivre bjfuthesis bmstu-iu8 colorist derivative easybook econ-bst einfart expkv expkv-cs expkv-def fei fithesis fontsize graphics-def
-lstdigest=29f34a8c47eef6793b65ae740cae6c46
-numpkg=4103
+date=1622751068
+lastupd=amsmath babel biblatex-cv bjfuthesis changes circuitikz graphics graphics-def hep-paper hvarabic hvfloat keyfloat l3kernel l3packages libertinust1math ltxbase lua-typo lwarp musixtex-fonts newpx
+lstdigest=fa4651293aac9b516ff87b0e1edab61e
+numpkg=4105
relstate=stable
-version=7823
+version=7824
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: TC7EHEWlKuaE3KzYDZYfk84TpPI/cZ+EaWTm5JCcgBQWTeyErQA7L/MmD2K/ijbaPUaBWj96KBeAMRAJzZYfDhwJdKVLMHfwYQ21TgScjB4vi2Uy2qNcM96d6wsAOED/WnzkanNkpQaqj9CjTO21XbmYdPlhenFIFVQBke+6BOlfTJfZIuzpxPPjsOtbqTNf5AAs61JhRemsuUBW4n49vC1JcCLQoukqJO+pJw42UVKflQFY1OnBVil5pwaZrVJQkSny/SfPFQVX7ijA8JxiCMHgXMIYUPtBukL1EOZp4vWKBIYp0MF7EbExB8lHEQpjC2hJWfvZZFxJWZNmQYsIkg==
+;;;; signature/miktex: KAcjcMcpwu51qNQZeBotizTeZT6xoE/ajES7iEdFw198oEvdWArwtOyzQYwemKlbjZdgCly1AhXrmehmbNJcY1yicHDAuW2rPtDMm7uJqGHDAAYEOtnfz4UhN/FeAnnV7cZ696vvRu6AXJTYxuXD0Q77D33w+Ur1hNdvjxab7y7DT9fiIX7IoTZnaNENNsMtT/cYllx6p5Oy+gjy9EkRKsyq4jTxAJXqQh77efqD5Mqxywznj+KghMvA+fmIm84hlH29TzwCMzHBNCCb3iSMOqgm8eVBOgycKHiPr+rP0R4SLMvwO54rQrYOdbhBn8qb3b0DLch0VioNNf/HmlxL5w==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/w32tex/ChangeLog b/systems/win32/w32tex/ChangeLog
index 2e78e2af55..5c88b391f1 100644
--- a/systems/win32/w32tex/ChangeLog
+++ b/systems/win32/w32tex/ChangeLog
@@ -1,5 +1,47 @@
W32TeX (x86 & x64) ChangeLog
+[2021/06/03]
+(01) aleph-w32.tar.xz
+ Update format files.
+(02) biblatex-biber.tar.xz
+ Add biblatex-cv.
+(03) cjkzr.tar.xz
+ Update pxchfon.
+(04) dvipdfm-w32.tar.xz
+ Update dvipdfmx.dll.
+(05) jtex-w32.tar.xz
+ Update format files.
+(06) latex.tar.xz
+ Update latex-base.
+(07) latex-dev.tar.xz
+ Update format files.
+(08) luatex-dev-w32.tar.xz
+ Update format files.
+(09) luatex-exp-w32.tar.xz
+ Update format files.
+(10) luatex-w32.tar.xz
+ Update format files.
+(11) newtxpx-boondoxfonts.tar.xz
+ Update newpx.
+(12) pdftex-w32.tar.xz
+ Update format files.
+(13) ptex-ng-w32.tar.xz
+ Update libdpx. Update format files.
+(14) ptex-w32.tar.xz
+ Update format files.
+(15) uptex-w32.tar.x
+ Update format files.
+(16) web2c-lib.tar.xz
+ Update babel (3.60).
+(17) xetex-w32.tar.xz
+ Update dvipdfmx.dll. Update format files.
+(18) win64/dvipdfm-w64.tar.xz
+ Update dvipdfmx.dll.
+(19) win64/ptex-ng-w64.tar.xz
+ Update libdpx.
+(20) win64/xetex-w64.tar.xz
+ Update dvipdfmx.dll.
+
[2021/06/02]
(01) context.tar.xz
ConTeXt version: 2021.06.01 17:00.
diff --git a/timestamp b/timestamp
index d597c5c296..21574f23d9 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2021-06-03-02-02
+2021-06-04-02-02