summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-12-21 03:01:35 +0000
committerNorbert Preining <norbert@preining.info>2020-12-21 03:01:35 +0000
commit4cc7922324b7a08ba0418e8f245cf1dcfa1891ac (patch)
treecd90cb6c072285e779f7555a85966b81a8757e15
parent2d9d44100d72263a7df34c12aaa89dbe6ee6fe0c (diff)
CTAN sync 202012210301
-rw-r--r--FILES.byname1681
-rw-r--r--FILES.byname.gzbin2246602 -> 2247305 bytes
-rw-r--r--FILES.last07days1109
-rw-r--r--fonts/cochineal/README5
-rw-r--r--fonts/cochineal/tex/uzcochmia.fd4
-rw-r--r--fonts/notomath/README5
-rw-r--r--fonts/notomath/tfm/notobmia.tfmbin2384 -> 2400 bytes
-rw-r--r--fonts/notomath/tfm/notomia.tfmbin2368 -> 2380 bytes
-rw-r--r--fonts/notomath/vf/notobmia.vfbin2064 -> 2092 bytes
-rw-r--r--fonts/notomath/vf/notomia.vfbin2056 -> 2084 bytes
-rw-r--r--fonts/scholax/README5
-rw-r--r--fonts/scholax/tfm/zncbmia.tfmbin1920 -> 1932 bytes
-rw-r--r--fonts/scholax/tfm/zncfbmia.tfmbin2136 -> 2144 bytes
-rw-r--r--fonts/scholax/tfm/zncfmia.tfmbin2096 -> 2104 bytes
-rw-r--r--fonts/scholax/tfm/zncmia.tfmbin1932 -> 1940 bytes
-rw-r--r--fonts/scholax/vf/zncbmia.vfbin1520 -> 1544 bytes
-rw-r--r--fonts/scholax/vf/zncfbmia.vfbin1704 -> 1728 bytes
-rw-r--r--fonts/scholax/vf/zncfmia.vfbin1700 -> 1720 bytes
-rw-r--r--fonts/scholax/vf/zncmia.vfbin1516 -> 1540 bytes
-rw-r--r--graphics/circuit_macros/CHANGES6
-rw-r--r--graphics/circuit_macros/Copying2
-rw-r--r--graphics/circuit_macros/INSTALL4
-rw-r--r--graphics/circuit_macros/README64
-rw-r--r--graphics/circuit_macros/darrow.m43
-rw-r--r--graphics/circuit_macros/doc/ACsymbol.m44
-rw-r--r--graphics/circuit_macros/doc/AntennasMan.m44
-rw-r--r--graphics/circuit_macros/doc/ArrestersMan.m475
-rw-r--r--graphics/circuit_macros/doc/CctTableMan.m42
-rw-r--r--graphics/circuit_macros/doc/Circuit_macros.pdfbin1285894 -> 950156 bytes
-rw-r--r--graphics/circuit_macros/doc/DCsymbol.m44
-rw-r--r--graphics/circuit_macros/doc/GroundsMan.m46
-rw-r--r--graphics/circuit_macros/doc/Makefile10
-rw-r--r--graphics/circuit_macros/doc/Version.tex2
-rw-r--r--graphics/circuit_macros/doc/body.tex357
-rw-r--r--graphics/circuit_macros/doc/defines.tex122
-rw-r--r--graphics/circuit_macros/dpictools.pic2
-rw-r--r--graphics/circuit_macros/examples/ASME_Y14-5.m4168
-rw-r--r--graphics/circuit_macros/examples/Antennas.m44
-rw-r--r--graphics/circuit_macros/examples/Attention.m441
-rw-r--r--graphics/circuit_macros/examples/Autoencoder.m482
-rw-r--r--graphics/circuit_macros/examples/CctTable.m43
-rw-r--r--graphics/circuit_macros/examples/Chuck.m4162
-rw-r--r--graphics/circuit_macros/examples/Conn.m44
-rw-r--r--graphics/circuit_macros/examples/Connectors.m422
-rw-r--r--graphics/circuit_macros/examples/Coxeter.m438
-rw-r--r--graphics/circuit_macros/examples/Flow.m466
-rw-r--r--graphics/circuit_macros/examples/FlowchartDefs.m4199
-rw-r--r--graphics/circuit_macros/examples/Geometry.m446
-rw-r--r--graphics/circuit_macros/examples/Grounds.m46
-rw-r--r--graphics/circuit_macros/examples/Heathkit.m4204
-rw-r--r--graphics/circuit_macros/examples/Lyap.m4159
-rw-r--r--graphics/circuit_macros/examples/MC.m429
-rw-r--r--graphics/circuit_macros/examples/Makefile90
-rw-r--r--graphics/circuit_macros/examples/PushPull.m410
-rw-r--r--graphics/circuit_macros/examples/Timer.m452
-rw-r--r--graphics/circuit_macros/examples/Variable.m410
-rw-r--r--graphics/circuit_macros/examples/ex01.m455
-rw-r--r--graphics/circuit_macros/examples/ex09.m41
-rw-r--r--graphics/circuit_macros/examples/examples.pdfbin893788 -> 876477 bytes
-rw-r--r--graphics/circuit_macros/examples/examples.tex2
-rw-r--r--graphics/circuit_macros/examples/files.tex16
-rw-r--r--graphics/circuit_macros/examples/ics.m410
-rw-r--r--graphics/circuit_macros/examples/mf/cct.mf2
-rw-r--r--graphics/circuit_macros/examples/mpost/Makefile2
-rw-r--r--graphics/circuit_macros/examples/nsvg/Makefile92
-rw-r--r--graphics/circuit_macros/examples/nsvg/dev/F_test.tex5
-rw-r--r--graphics/circuit_macros/examples/nsvg/dev/Makefile81
-rw-r--r--graphics/circuit_macros/examples/nsvg/dev/test-1.svg162
-rw-r--r--graphics/circuit_macros/examples/nsvg/dev/test.pdfbin0 -> 35308 bytes
-rw-r--r--graphics/circuit_macros/examples/nsvg/dev/test.pic383
-rw-r--r--graphics/circuit_macros/examples/nsvg/dev/test.svg239
-rw-r--r--graphics/circuit_macros/examples/nsvg/dev/test.tex1136
-rw-r--r--graphics/circuit_macros/examples/nsvg/dev/tikztosvg181
-rw-r--r--graphics/circuit_macros/examples/nsvg/dev/tstSVG.htmx62
-rw-r--r--graphics/circuit_macros/examples/nsvg/examples.pdfbin0 -> 897744 bytes
-rw-r--r--graphics/circuit_macros/examples/nsvg/examplesSVG.htmx70
-rw-r--r--graphics/circuit_macros/examples/oFlow.m4108
-rw-r--r--graphics/circuit_macros/examples/psfrag/Makefile3
-rw-r--r--graphics/circuit_macros/examples/random.m44
-rw-r--r--graphics/circuit_macros/examples/shapes.m44
-rw-r--r--graphics/circuit_macros/examples/svg/AutoencoderSVG.m497
-rw-r--r--graphics/circuit_macros/examples/svg/Banking.m459
-rw-r--r--graphics/circuit_macros/examples/svg/BtreeSVG.m476
-rw-r--r--graphics/circuit_macros/examples/svg/CctTableSVG.m473
-rw-r--r--graphics/circuit_macros/examples/svg/ConnectorsSVG.m42
-rw-r--r--graphics/circuit_macros/examples/svg/FlowSVG.m4222
-rw-r--r--graphics/circuit_macros/examples/svg/FourbarSVG.m459
-rw-r--r--graphics/circuit_macros/examples/svg/GeometrySVG.m446
-rw-r--r--graphics/circuit_macros/examples/svg/JackSVG.m42
-rw-r--r--graphics/circuit_macros/examples/svg/LyapSVG.m4159
-rw-r--r--graphics/circuit_macros/examples/svg/MCSVG.m434
-rw-r--r--graphics/circuit_macros/examples/svg/Makefile46
-rw-r--r--graphics/circuit_macros/examples/svg/OpampSVG.m42
-rw-r--r--graphics/circuit_macros/examples/svg/PconnSVG.m42
-rw-r--r--graphics/circuit_macros/examples/svg/UNO.m4265
-rw-r--r--graphics/circuit_macros/examples/svg/UNOSVG.m4577
-rw-r--r--graphics/circuit_macros/examples/svg/Xtest.m458
-rw-r--r--graphics/circuit_macros/examples/svg/Y14-5SVG.m4173
-rw-r--r--graphics/circuit_macros/examples/svg/ex01SVG.m458
-rw-r--r--graphics/circuit_macros/examples/svg/ex05SVG.m466
-rw-r--r--graphics/circuit_macros/examples/svg/examplesSVG.htmx734
-rw-r--r--graphics/circuit_macros/examples/svg/paletteSVG.m44
-rw-r--r--graphics/circuit_macros/examples/svg/pwrsupplySVG.m4102
-rw-r--r--graphics/circuit_macros/examples/svg/quickSVG.m48
-rw-r--r--graphics/circuit_macros/examples/svg/randomSVG.m44
-rw-r--r--graphics/circuit_macros/examples/svg/tstSVG.htmx3
-rw-r--r--graphics/circuit_macros/examples/xfig/xfiglib.fig2
-rw-r--r--graphics/circuit_macros/gpic.m42
-rw-r--r--graphics/circuit_macros/lib3D.m412
-rw-r--r--graphics/circuit_macros/libcct.m4209
-rw-r--r--graphics/circuit_macros/libgen.m4107
-rw-r--r--graphics/circuit_macros/liblog.m42
-rw-r--r--graphics/circuit_macros/mfpic.m42
-rw-r--r--graphics/circuit_macros/mpost.m42
-rw-r--r--graphics/circuit_macros/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.m48
-rw-r--r--graphics/circuit_macros/svg.m45
-rw-r--r--graphics/circuit_macros/xfig.m42
-rw-r--r--info/apprendre-a-programmer-en-tex/README53
-rw-r--r--info/apprendre-a-programmer-en-tex/output/apprendre-a-programmer-en-tex.pdfbin4356465 -> 4012401 bytes
-rw-r--r--info/apprendre-a-programmer-en-tex/output/progtexcode.txt2
-rw-r--r--info/apprendre-a-programmer-en-tex/source/apprendre-a-programmer-en-tex.tex18
-rw-r--r--macros/latex/contrib/curve2e/README.txt2
-rw-r--r--macros/latex/contrib/curve2e/curve2e-manual.pdfbin571161 -> 571391 bytes
-rw-r--r--macros/latex/contrib/curve2e/curve2e.dtx49
-rw-r--r--macros/latex/contrib/curve2e/curve2e.pdfbin654000 -> 654227 bytes
-rw-r--r--macros/latex/contrib/easyfloats/DEPENDS.txt14
-rw-r--r--macros/latex/contrib/easyfloats/README.md49
-rw-r--r--macros/latex/contrib/easyfloats/doc/content/bug-reports-and-contributions.tex41
-rw-r--r--macros/latex/contrib/easyfloats/doc/content/documentation.tex1082
-rw-r--r--macros/latex/contrib/easyfloats/doc/content/examples.tex355
-rw-r--r--macros/latex/contrib/easyfloats/doc/content/installation.tex8
-rw-r--r--macros/latex/contrib/easyfloats/doc/content/license.tex17
-rw-r--r--macros/latex/contrib/easyfloats/doc/content/motivation.tex378
-rw-r--r--macros/latex/contrib/easyfloats/doc/content/names.tex18
-rw-r--r--macros/latex/contrib/easyfloats/doc/content/other-packages.tex51
-rw-r--r--macros/latex/contrib/easyfloats/doc/content/titlepage.tex17
-rw-r--r--macros/latex/contrib/easyfloats/doc/content/used-packages.tex29
-rw-r--r--macros/latex/contrib/easyfloats/doc/easyfloats.bib141
-rw-r--r--macros/latex/contrib/easyfloats/doc/easyfloats.pdfbin0 -> 546772 bytes
-rw-r--r--macros/latex/contrib/easyfloats/doc/easyfloats.tex63
-rw-r--r--macros/latex/contrib/easyfloats/doc/lexer/latex_atletter.py17
-rw-r--r--macros/latex/contrib/easyfloats/doc/links.tex44
-rw-r--r--macros/latex/contrib/easyfloats/doc/preamble/bibliography.tex35
-rw-r--r--macros/latex/contrib/easyfloats/doc/preamble/description-links.tex224
-rw-r--r--macros/latex/contrib/easyfloats/doc/preamble/examplecode.tex778
-rw-r--r--macros/latex/contrib/easyfloats/doc/preamble/keydoc.tex754
-rw-r--r--macros/latex/contrib/easyfloats/doc/preamble/link.tex53
-rw-r--r--macros/latex/contrib/easyfloats/doc/preamble/macros.tex218
-rw-r--r--macros/latex/contrib/easyfloats/doc/preamble/markdown.tex153
-rw-r--r--macros/latex/contrib/easyfloats/doc/preamble/pdfstring.tex35
-rw-r--r--macros/latex/contrib/easyfloats/doc/undescribed-keywords.tex247
-rw-r--r--macros/latex/contrib/easyfloats/easyfloats-file-list.txt40
-rw-r--r--macros/latex/contrib/easyfloats/easyfloats.dtx1897
-rw-r--r--macros/latex/contrib/easyfloats/easyfloats.ins82
-rw-r--r--macros/latex/contrib/pdfpc/pdfpc-doc.pdfbin173566 -> 173201 bytes
-rw-r--r--macros/latex/contrib/pdfpc/pdfpc-doc.tex2
-rw-r--r--macros/latex/contrib/pdfpc/pdfpc.sty6
-rw-r--r--macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdfbin197373 -> 197373 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-criticalnotes.pdfbin195586 -> 195586 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-sidenotes.pdfbin291128 -> 291128 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-tabular.pdfbin280887 -> 280887 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdfbin197414 -> 197414 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/1-verses.pdfbin197363 -> 197363 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-antilabe.pdfbin205371 -> 205371 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-cross_referencing.pdfbin196250 -> 196250 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdfbin199696 -> 199696 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-glossaries.pdfbin280642 -> 280642 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-indexing.pdfbin279716 -> 279716 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdfbin273887 -> 273887 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdfbin289371 -> 289371 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-linespacing.pdfbin284597 -> 284597 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdfbin285213 -> 285213 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-notes-width.pdfbin202991 -> 202991 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdfbin208585 -> 208585 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-performances.pdfbin281520 -> 281520 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdfbin31045 -> 31052 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdfbin304585 -> 304585 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdfbin283465 -> 283465 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdfbin196014 -> 196014 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdfbin23264 -> 23269 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdfbin172561 -> 172561 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdfbin32053 -> 32053 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdfbin284700 -> 284700 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdfbin190058 -> 190058 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdfbin189290 -> 189290 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdfbin168066 -> 168066 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdfbin189692 -> 189692 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdfbin188622 -> 188622 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdfbin188675 -> 188675 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdfbin188809 -> 188809 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdfbin209918 -> 209918 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdfbin208856 -> 208856 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdfbin201188 -> 201188 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdfbin292929 -> 292929 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdfbin200260 -> 200260 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdfbin221533 -> 221533 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdfbin246187 -> 246187 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdfbin200801 -> 200801 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdfbin196882 -> 196882 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdfbin297242 -> 297242 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdfbin203241 -> 203241 bytes
-rw-r--r--macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdfbin192355 -> 192355 bytes
-rw-r--r--macros/latex/contrib/reledmac/reledmac.dtx5
-rw-r--r--macros/latex/contrib/reledmac/reledmac.pdfbin2021684 -> 2021691 bytes
-rw-r--r--macros/latex/contrib/reledmac/reledpar.pdfbin986955 -> 986981 bytes
-rw-r--r--macros/luatex/generic/luaxml/README2
-rw-r--r--macros/luatex/generic/luaxml/luaxml-cssquery.lua184
-rw-r--r--macros/luatex/generic/luaxml/luaxml-domobject.lua3
-rw-r--r--macros/luatex/generic/luaxml/luaxml-entities.lua2
-rw-r--r--macros/luatex/generic/luaxml/luaxml-namedentities.lua4167
-rw-r--r--macros/luatex/generic/luaxml/luaxml-parse-query.lua19
-rw-r--r--macros/luatex/generic/luaxml/luaxml-transform.lua161
-rw-r--r--macros/luatex/generic/luaxml/luaxml.pdfbin99665 -> 107935 bytes
-rw-r--r--macros/luatex/generic/luaxml/luaxml.tex61
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl1
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb116
-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.xzbin2254556 -> 2255136 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini8
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini8
-rw-r--r--systems/win32/w32tex/ChangeLog4
-rw-r--r--timestamp2
227 files changed, 17947 insertions, 4565 deletions
diff --git a/FILES.byname b/FILES.byname
index 550e3898bb..df2a2a5c47 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -5025,7 +5025,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2020/12/19 | 155999 | FILES.last07days
+2020/12/20 | 197325 | 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
@@ -23039,7 +23039,7 @@
2020/09/15 | 231836 | fonts/cochineal/opentype/Cochineal-Bold.otf
2020/09/15 | 231680 | fonts/cochineal/opentype/Cochineal-Italic.otf
2020/09/15 | 230184 | fonts/cochineal/opentype/Cochineal-Roman.otf
-2020/09/24 | 6852 | fonts/cochineal/README
+2020/12/20 | 6953 | fonts/cochineal/README
2016/01/31 | 196 | fonts/cochineal/tex/cochineal.fontspec
2020/09/21 | 6802 | fonts/cochineal/tex/cochineal.sty
2016/02/17 | 1195 | fonts/cochineal/tex/LGRCochineal-LF.fd
@@ -23077,7 +23077,7 @@
2018/10/15 | 1199 | fonts/cochineal/tex/TS1Cochineal-OsF.fd
2018/10/15 | 1199 | fonts/cochineal/tex/TS1Cochineal-TLF.fd
2018/10/15 | 1216 | fonts/cochineal/tex/TS1Cochineal-TOsF.fd
-2016/01/19 | 681 | fonts/cochineal/tex/uzcochmia.fd
+2020/12/20 | 713 | fonts/cochineal/tex/uzcochmia.fd
2019/10/16 | 1448 | fonts/cochineal/tfm/cochBMI.tfm
2019/10/16 | 1184 | fonts/cochineal/tfm/cochBRM.tfm
2020/09/15 | 1144 | fonts/cochineal/tfm/Cochineal-alph.tfm
@@ -23598,7 +23598,7 @@
2020/09/15 | 2584 | fonts/cochineal/vf/zcochbmi.vf
2020/09/24 | 1956 | fonts/cochineal/vf/zcochmia.vf
2020/09/15 | 2496 | fonts/cochineal/vf/zcochmi.vf
-2020/09/24 | 5874675 | fonts/cochineal.zip
+2020/12/20 | 5874721 | fonts/cochineal.zip
2020/04/13 | 63456 | fonts/coelacanth/doc/coelacanth-samples.pdf
2019/10/10 | 712 | fonts/coelacanth/doc/coelacanth-samples.tex
2019/10/10 | 4433 | fonts/coelacanth/doc/LICENSE.md
@@ -81153,19 +81153,19 @@
2020/08/05 | 15233 | fonts/notomath/doc/notomath-doc.tex
2020/08/04 | 65497 | fonts/notomath/doc/samplerSerif-crop.pdf
2020/08/05 | 364 | fonts/notomath/map/NotoMath.map
-2020/08/05 | 585 | fonts/notomath/README
+2020/12/20 | 644 | fonts/notomath/README
2020/07/27 | 158 | fonts/notomath/tex/newtx-notosans-subs.tex
2020/07/27 | 158 | fonts/notomath/tex/newtx-noto-subs.tex
2020/08/04 | 3171 | fonts/notomath/tex/notomath.sty
2020/08/05 | 761 | fonts/notomath/tex/omlnotomi.fd
2020/08/05 | 825 | fonts/notomath/tex/omlnotosansmi.fd
-2020/07/31 | 2384 | fonts/notomath/tfm/notobmia.tfm
+2020/12/20 | 2400 | fonts/notomath/tfm/notobmia.tfm
2020/07/31 | 3288 | fonts/notomath/tfm/notobmi.tfm
2020/07/31 | 1548 | fonts/notomath/tfm/NotoMathBMI.tfm
2020/07/31 | 1076 | fonts/notomath/tfm/NotoMathBRM.tfm
2020/07/31 | 1532 | fonts/notomath/tfm/NotoMathMI.tfm
2020/07/31 | 724 | fonts/notomath/tfm/NotoMathRM.tfm
-2020/07/31 | 2368 | fonts/notomath/tfm/notomia.tfm
+2020/12/20 | 2380 | fonts/notomath/tfm/notomia.tfm
2020/07/31 | 3244 | fonts/notomath/tfm/notomi.tfm
2020/07/31 | 2380 | fonts/notomath/tfm/notosansbmia.tfm
2020/07/31 | 3276 | fonts/notomath/tfm/notosansbmi.tfm
@@ -81183,15 +81183,15 @@
2020/08/05 | 22218 | fonts/notomath/type1/NotoSansMathBRM.pfb
2020/08/05 | 30944 | fonts/notomath/type1/NotoSansMathMI.pfb
2020/08/05 | 14657 | fonts/notomath/type1/NotoSansMathRM.pfb
-2020/07/31 | 2064 | fonts/notomath/vf/notobmia.vf
+2020/12/20 | 2092 | fonts/notomath/vf/notobmia.vf
2020/07/31 | 2460 | fonts/notomath/vf/notobmi.vf
-2020/07/31 | 2056 | fonts/notomath/vf/notomia.vf
+2020/12/20 | 2084 | fonts/notomath/vf/notomia.vf
2020/07/31 | 2352 | fonts/notomath/vf/notomi.vf
2020/07/31 | 2124 | fonts/notomath/vf/notosansbmia.vf
2020/07/31 | 2540 | fonts/notomath/vf/notosansbmi.vf
2020/07/31 | 2116 | fonts/notomath/vf/notosansmia.vf
2020/07/31 | 2432 | fonts/notomath/vf/notosansmi.vf
-2020/08/05 | 709830 | fonts/notomath.zip
+2020/12/20 | 709956 | fonts/notomath.zip
2019/12/11 | 3002 | fonts/noto/README
2019/12/10 | 9072 | fonts/noto/tfm/NotoSans-BlackItalic-lf-lgr.tfm
2019/12/10 | 11328 | fonts/noto/tfm/NotoSans-BlackItalic-lf-ly1.tfm
@@ -116452,7 +116452,7 @@
2020/12/19 | 154216 | fonts/scholax/opentype/TeXGyreScholaX-Italic.otf
2020/12/19 | 145912 | fonts/scholax/opentype/TeXGyreScholaX-Regular.otf
2020/12/19 | 164568 | fonts/scholax/opentype/TeXGyreScholaX-Slanted.otf
-2020/12/19 | 2645 | fonts/scholax/README
+2020/12/20 | 2743 | fonts/scholax/README
2020/12/19 | 2395 | fonts/scholax/tex/LY1TeXGyreScholaX-Inf.fd
2019/12/24 | 2462 | fonts/scholax/tex/LY1TeXGyreScholaX-LF.fd
2019/12/24 | 2501 | fonts/scholax/tex/LY1TeXGyreScholaX-OsF.fd
@@ -116843,14 +116843,14 @@
2020/12/19 | 8020 | fonts/scholax/tfm/zcs-Italic-tlf-th-ly1.tfm
2020/12/19 | 3424 | fonts/scholax/tfm/zcs-Italic-tlf-th-ot1.tfm
2020/12/19 | 12020 | fonts/scholax/tfm/zcs-Italic-tlf-th-t1.tfm
-2020/06/01 | 1920 | fonts/scholax/tfm/zncbmia.tfm
-2020/06/01 | 3404 | fonts/scholax/tfm/zncbmi.tfm
-2020/06/01 | 2136 | fonts/scholax/tfm/zncfbmia.tfm
-2020/06/01 | 3372 | fonts/scholax/tfm/zncfbmi.tfm
-2020/06/01 | 2096 | fonts/scholax/tfm/zncfmia.tfm
-2020/06/01 | 3400 | fonts/scholax/tfm/zncfmi.tfm
-2020/06/01 | 1932 | fonts/scholax/tfm/zncmia.tfm
-2020/06/01 | 3396 | fonts/scholax/tfm/zncmi.tfm
+2020/12/20 | 1932 | fonts/scholax/tfm/zncbmia.tfm
+2020/12/20 | 3404 | fonts/scholax/tfm/zncbmi.tfm
+2020/12/20 | 2144 | fonts/scholax/tfm/zncfbmia.tfm
+2020/12/20 | 3372 | fonts/scholax/tfm/zncfbmi.tfm
+2020/12/20 | 2104 | fonts/scholax/tfm/zncfmia.tfm
+2020/12/20 | 3400 | fonts/scholax/tfm/zncfmi.tfm
+2020/12/20 | 1940 | fonts/scholax/tfm/zncmia.tfm
+2020/12/20 | 3396 | fonts/scholax/tfm/zncmi.tfm
2020/03/09 | 14199 | fonts/scholax/type1/NCXFourierBMI.pfb
2020/03/09 | 13585 | fonts/scholax/type1/NCXFourierBMR.pfb
2020/03/09 | 15080 | fonts/scholax/type1/NCXFourierMI.pfb
@@ -117003,15 +117003,15 @@
2020/12/19 | 1704 | fonts/scholax/vf/TeXGyreScholaX-Slanted-tosf-sc-t1.vf
2020/12/19 | 1728 | fonts/scholax/vf/TeXGyreScholaX-Slanted-tosf-t1.vf
2020/12/19 | 976 | fonts/scholax/vf/TeXGyreScholaX-Slanted-tosf-ts1.vf
-2020/06/01 | 1520 | fonts/scholax/vf/zncbmia.vf
-2020/06/01 | 2824 | fonts/scholax/vf/zncbmi.vf
-2020/06/01 | 1704 | fonts/scholax/vf/zncfbmia.vf
-2020/06/01 | 2788 | fonts/scholax/vf/zncfbmi.vf
-2020/06/01 | 1700 | fonts/scholax/vf/zncfmia.vf
-2020/06/01 | 2676 | fonts/scholax/vf/zncfmi.vf
-2020/06/01 | 1516 | fonts/scholax/vf/zncmia.vf
-2020/06/01 | 2672 | fonts/scholax/vf/zncmi.vf
-2020/12/19 | 3426213 | fonts/scholax.zip
+2020/12/20 | 1544 | fonts/scholax/vf/zncbmia.vf
+2020/12/20 | 2824 | fonts/scholax/vf/zncbmi.vf
+2020/12/20 | 1728 | fonts/scholax/vf/zncfbmia.vf
+2020/12/20 | 2788 | fonts/scholax/vf/zncfbmi.vf
+2020/12/20 | 1720 | fonts/scholax/vf/zncfmia.vf
+2020/12/20 | 2676 | fonts/scholax/vf/zncfmi.vf
+2020/12/20 | 1540 | fonts/scholax/vf/zncmia.vf
+2020/12/20 | 2672 | fonts/scholax/vf/zncmi.vf
+2020/12/20 | 3426395 | fonts/scholax.zip
2014/12/02 | 998647 | fonts/schulschriften/doc/schulschriften.pdf
2014/12/02 | 42250 | fonts/schulschriften/doc/schulschriften.tex
2014/12/02 | 4784 | fonts/schulschriften/README
@@ -132895,439 +132895,469 @@
2020/05/24 | 7475 | graphics/bookshelf/README.md
2020/05/24 | 41 | graphics/bookshelf/VERSION
2020/05/24 | 1783280 | graphics/bookshelf.zip
-2020/05/01 | 1185 | graphics/circuit_macros/boxdims.sty
-2020/05/01 | 12244 | graphics/circuit_macros/CHANGES
-2020/05/01 | 462 | graphics/circuit_macros/Copying
-2020/05/01 | 14346 | graphics/circuit_macros/darrow.m4
-2020/05/01 | 494 | graphics/circuit_macros/doc/AmpTableMan.m4
-2020/05/01 | 1940 | graphics/circuit_macros/doc/AmpTable.tex
-2020/05/01 | 1211 | graphics/circuit_macros/doc/AntennasMan.m4
-2020/05/01 | 2634 | graphics/circuit_macros/doc/AudioMan.m4
-2020/05/01 | 10164 | graphics/circuit_macros/doc/Audio.tex
-2020/05/01 | 131 | graphics/circuit_macros/doc/Axes.m4
-2020/05/01 | 614 | graphics/circuit_macros/doc/BigResistor.m4
-2020/05/01 | 1619 | graphics/circuit_macros/doc/BipMan.m4
-2020/05/01 | 5545 | graphics/circuit_macros/doc/Bip.tex
-2020/05/01 | 1074 | graphics/circuit_macros/doc/bistableMan.m4
-2020/05/01 | 1860 | graphics/circuit_macros/doc/bi_trans.m4
-2020/05/01 | 130 | graphics/circuit_macros/doc/bitrbody.m4
-2020/05/01 | 50 | graphics/circuit_macros/doc/bitr.m4
-2020/05/01 | 136113 | graphics/circuit_macros/doc/body.tex
-2020/05/01 | 1953 | graphics/circuit_macros/doc/Buffer.m4
-2020/05/01 | 25460 | graphics/circuit_macros/doc/Capture.JPG
-2020/05/01 | 2670 | graphics/circuit_macros/doc/CctTableMan.m4
-2020/05/01 | 29074 | graphics/circuit_macros/doc/CctTable.tex
-2020/05/01 | 4073 | graphics/circuit_macros/doc/Circuit_macros.bib
-2020/05/01 | 1285894 | graphics/circuit_macros/doc/Circuit_macros.pdf
-2020/05/01 | 2639 | graphics/circuit_macros/doc/Circuit_macros.tex
-2020/05/01 | 1857 | graphics/circuit_macros/doc/Composite.m4
-2020/05/01 | 1120 | graphics/circuit_macros/doc/ConfigA.m4
-2020/05/01 | 1257 | graphics/circuit_macros/doc/ConfigB.m4
-2020/05/01 | 1291 | graphics/circuit_macros/doc/ConfigC.m4
-2020/05/01 | 2179 | graphics/circuit_macros/doc/ConnMan.m4
-2020/05/01 | 6550 | graphics/circuit_macros/doc/Conn.tex
-2020/05/01 | 3326 | graphics/circuit_macros/doc/ContactMan.m4
-2020/05/01 | 1585 | graphics/circuit_macros/doc/ContactsMan.m4
-2020/05/01 | 6067 | graphics/circuit_macros/doc/Contacts.tex
-2020/05/01 | 13833 | graphics/circuit_macros/doc/Contact.tex
-2020/05/01 | 1995 | graphics/circuit_macros/doc/Corners.m4
-2020/05/01 | 1329 | graphics/circuit_macros/doc/currents.m4
-2020/05/01 | 2389 | graphics/circuit_macros/doc/Dac.m4
-2020/05/01 | 1151 | graphics/circuit_macros/doc/Darlington.m4
-2020/05/01 | 77979 | graphics/circuit_macros/doc/defines.tex
-2020/05/01 | 1485 | graphics/circuit_macros/doc/DemultiplexerMan.m4
-2020/05/01 | 4817 | graphics/circuit_macros/doc/Demultiplexer.tex
-2020/05/01 | 1467 | graphics/circuit_macros/doc/DiodesMan.m4
-2020/05/01 | 12050 | graphics/circuit_macros/doc/Diodes.tex
-2020/05/01 | 483 | graphics/circuit_macros/doc/eboxdims.m4
-2020/05/01 | 980 | graphics/circuit_macros/doc/EmarrowsMan.m4
-2020/05/01 | 5502 | graphics/circuit_macros/doc/Emarrows.tex
-2020/05/01 | 1229 | graphics/circuit_macros/doc/fbfilter.m4
-2020/05/01 | 4489 | graphics/circuit_macros/doc/fetMan.m4
-2020/05/01 | 16420 | graphics/circuit_macros/doc/fet.tex
-2020/05/01 | 329 | graphics/circuit_macros/doc/FF.m4
-2020/05/01 | 1975 | graphics/circuit_macros/doc/FlipFlop.m4
-2020/05/01 | 960 | graphics/circuit_macros/doc/Flowdiag.m4
-2020/05/01 | 999 | graphics/circuit_macros/doc/FusesMan.m4
-2020/05/01 | 4789 | graphics/circuit_macros/doc/Fuses.tex
-2020/05/01 | 815 | graphics/circuit_macros/doc/GroundsMan.m4
-2020/05/01 | 2661 | graphics/circuit_macros/doc/Grounds.tex
-2020/05/01 | 1132 | graphics/circuit_macros/doc/HeadersMan.m4
-2020/05/01 | 7503 | graphics/circuit_macros/doc/Headers.tex
-2020/05/01 | 2013 | graphics/circuit_macros/doc/HybridPi.m4
-2020/05/01 | 2362 | graphics/circuit_macros/doc/JackMan.m4
-2020/05/01 | 12006 | graphics/circuit_macros/doc/Jack.tex
-2020/05/01 | 2119 | graphics/circuit_macros/doc/LogicMan.m4
-2020/05/01 | 7533 | graphics/circuit_macros/doc/Logic.tex
-2020/05/01 | 269 | graphics/circuit_macros/doc/Loop.m4
-2020/05/01 | 387 | graphics/circuit_macros/doc/lrarrows.m4
-2020/05/01 | 4483 | graphics/circuit_macros/doc/Makefile
-2020/05/01 | 1575 | graphics/circuit_macros/doc/mplex.m4
-2020/05/01 | 1400 | graphics/circuit_macros/doc/MultiplexerMan.m4
-2020/05/01 | 4964 | graphics/circuit_macros/doc/Multiplexer.tex
-2020/05/01 | 499 | graphics/circuit_macros/doc/NLGMan.m4
-2020/05/01 | 3183 | graphics/circuit_macros/doc/NLG.tex
-2020/05/01 | 1128 | graphics/circuit_macros/doc/NPDTMan.m4
-2020/05/01 | 5137 | graphics/circuit_macros/doc/NPDT.tex
-2020/05/01 | 1040 | graphics/circuit_macros/doc/NportMan.m4
-2020/05/01 | 4666 | graphics/circuit_macros/doc/Nport.tex
-2020/05/01 | 137 | graphics/circuit_macros/doc/oaxbody.m4
-2020/05/01 | 48 | graphics/circuit_macros/doc/oax.m4
-2020/05/01 | 782 | graphics/circuit_macros/doc/Oblique.m4
-2020/05/01 | 1433 | graphics/circuit_macros/doc/OpampMan.m4
-2020/05/01 | 835 | graphics/circuit_macros/doc/Opto.m4
-2020/05/01 | 1624 | graphics/circuit_macros/doc/ParSeries.m4
-2020/05/01 | 1802 | graphics/circuit_macros/doc/PconnMan.m4
-2020/05/01 | 15033 | graphics/circuit_macros/doc/Pconn.tex
-2020/05/01 | 801 | graphics/circuit_macros/doc/Potentiometers.m4
-2020/05/01 | 774 | graphics/circuit_macros/doc/quick.m4
-2020/05/01 | 1921 | graphics/circuit_macros/doc/relaycoilMan.m4
-2020/05/01 | 1259 | graphics/circuit_macros/doc/RelayMan.m4
-2020/05/01 | 7316 | graphics/circuit_macros/doc/Relay.tex
-2020/05/01 | 369 | graphics/circuit_macros/doc/sampleIC.m4
-2020/05/01 | 404 | graphics/circuit_macros/doc/Series.m4
-2020/05/01 | 1406 | graphics/circuit_macros/doc/ShiftRMan.m4
-2020/05/01 | 9425 | graphics/circuit_macros/doc/ShiftR.tex
-2020/05/01 | 421 | graphics/circuit_macros/doc/Sinus.m4
-2020/05/01 | 2165 | graphics/circuit_macros/doc/SourcesMan.m4
-2020/05/01 | 15388 | graphics/circuit_macros/doc/Sources.tex
-2020/05/01 | 217 | graphics/circuit_macros/doc/stringdims.m4
-2020/05/01 | 3973 | graphics/circuit_macros/doc/SwitchesMan.m4
-2020/05/01 | 19142 | graphics/circuit_macros/doc/Switches.tex
-2020/05/01 | 1464 | graphics/circuit_macros/doc/Taps.m4
-2020/05/01 | 11 | graphics/circuit_macros/doc/test.tex
-2020/05/01 | 1022 | graphics/circuit_macros/doc/TgateMan.m4
-2020/05/01 | 4178 | graphics/circuit_macros/doc/Tgate.tex
-2020/05/01 | 144 | graphics/circuit_macros/doc/Thermal.m4
-2020/05/01 | 3321 | graphics/circuit_macros/doc/thyristorMan.m4
-2020/05/01 | 20418 | graphics/circuit_macros/doc/thyristor.tex
-2020/05/01 | 535 | graphics/circuit_macros/doc/Tline.m4
-2020/05/01 | 165 | graphics/circuit_macros/doc/tranbody.m4
-2020/05/01 | 660 | graphics/circuit_macros/doc/ujtMan.m4
-2020/05/01 | 2441 | graphics/circuit_macros/doc/ujt.tex
-2020/05/01 | 926 | graphics/circuit_macros/doc/VariableMan.m4
-2020/05/01 | 10401 | graphics/circuit_macros/doc/Variable.tex
-2020/05/01 | 12 | graphics/circuit_macros/doc/Version.tex
-2020/05/01 | 3346 | graphics/circuit_macros/doc/WindingsMan.m4
-2020/05/01 | 449 | graphics/circuit_macros/doc/woodchips.m4
-2020/05/01 | 2912 | graphics/circuit_macros/doc/Workflow.m4
-2020/05/01 | 1526 | graphics/circuit_macros/doc/XformMan.m4
-2020/05/01 | 25849 | graphics/circuit_macros/doc/Xform.tex
-2020/05/01 | 19250 | graphics/circuit_macros/dpictools.pic
-2020/05/01 | 1730 | graphics/circuit_macros/examples/ABlogix.m4
-2020/05/01 | 2402 | graphics/circuit_macros/examples/Adder.m4
-2020/05/01 | 4205 | graphics/circuit_macros/examples/Alogix.m4
-2020/05/01 | 494 | graphics/circuit_macros/examples/AmpTable.m4
-2020/05/01 | 1211 | graphics/circuit_macros/examples/Antennas.m4
-2020/05/01 | 5042 | graphics/circuit_macros/examples/AntiqueClock.m4
-2020/05/01 | 777 | graphics/circuit_macros/examples/Arrester.m4
-2020/05/01 | 2634 | graphics/circuit_macros/examples/Audio.m4
-2020/05/01 | 1962 | graphics/circuit_macros/examples/Autologix.m4
-2020/05/01 | 4638 | graphics/circuit_macros/examples/Ball.m4
-2020/05/01 | 1619 | graphics/circuit_macros/examples/Bip.m4
-2020/05/01 | 905 | graphics/circuit_macros/examples/birds.m4
-2020/05/01 | 1075 | graphics/circuit_macros/examples/bistable.m4
-2020/05/01 | 3175 | graphics/circuit_macros/examples/Blogix.m4
-2020/05/01 | 2542 | graphics/circuit_macros/examples/brace.m4
-2020/05/01 | 1024 | graphics/circuit_macros/examples/Btree.m4
-2020/05/01 | 3508 | graphics/circuit_macros/examples/Buttons.m4
-2020/05/01 | 991 | graphics/circuit_macros/examples/Byte.m4
-2020/05/01 | 6371 | graphics/circuit_macros/examples/CanLogic.m4
-2020/05/01 | 2670 | graphics/circuit_macros/examples/CctTable.m4
-2020/05/01 | 233 | graphics/circuit_macros/examples/Ccurve.m4
-2020/05/01 | 1039 | graphics/circuit_macros/examples/chaos.m4
-2020/05/01 | 8955 | graphics/circuit_macros/examples/Chuck.m4
-2020/05/01 | 482 | graphics/circuit_macros/examples/clock.m4
-2020/05/01 | 674 | graphics/circuit_macros/examples/Connectors.m4
-2020/05/01 | 2179 | graphics/circuit_macros/examples/Conn.m4
-2020/05/01 | 3326 | graphics/circuit_macros/examples/Contact.m4
-2020/05/01 | 1585 | graphics/circuit_macros/examples/Contacts.m4
-2020/05/01 | 4288 | graphics/circuit_macros/examples/control.m4
-2020/05/01 | 551 | graphics/circuit_macros/examples/Counting.m4
-2020/05/01 | 1358 | graphics/circuit_macros/examples/Crossbar.m4
-2020/05/01 | 2520 | graphics/circuit_macros/examples/Crow.m4
-2020/05/01 | 1879 | graphics/circuit_macros/examples/Cruller.m4
-2020/05/01 | 2295 | graphics/circuit_macros/examples/csc.m4
-2020/05/01 | 6003 | graphics/circuit_macros/examples/CSlight.m4
-2020/05/01 | 5890 | graphics/circuit_macros/examples/Csource.m4
-2020/05/01 | 460 | graphics/circuit_macros/examples/debug1.tex
-2020/05/01 | 1959 | graphics/circuit_macros/examples/debug2.m4
-2020/05/01 | 655 | graphics/circuit_macros/examples/Decoder.m4
-2020/05/01 | 1485 | graphics/circuit_macros/examples/Demultiplexer.m4
-2020/05/01 | 654 | graphics/circuit_macros/examples/diamond.m4
-2020/05/01 | 6854 | graphics/circuit_macros/examples/Dini.m4
-2020/05/01 | 1467 | graphics/circuit_macros/examples/Diodes.m4
-2020/05/01 | 1966 | graphics/circuit_macros/examples/Drive.m4
-2020/05/01 | 980 | graphics/circuit_macros/examples/Emarrows.m4
-2020/05/01 | 2584 | graphics/circuit_macros/examples/Escher.m4
-2020/05/01 | 4305 | graphics/circuit_macros/examples/Euro.m4
-2020/05/01 | 2412 | graphics/circuit_macros/examples/ex00.m4
-2020/05/01 | 697 | graphics/circuit_macros/examples/ex01.m4
-2020/05/01 | 1100 | graphics/circuit_macros/examples/ex02.m4
-2020/05/01 | 673 | graphics/circuit_macros/examples/ex03.m4
-2020/05/01 | 1654 | graphics/circuit_macros/examples/ex04.m4
-2020/05/01 | 1608 | graphics/circuit_macros/examples/ex05.m4
-2020/05/01 | 2170 | graphics/circuit_macros/examples/ex06.m4
-2020/05/01 | 2556 | graphics/circuit_macros/examples/ex08.m4
-2020/05/01 | 4312 | graphics/circuit_macros/examples/ex09.m4
-2020/05/01 | 1492 | graphics/circuit_macros/examples/ex10.m4
-2020/05/01 | 2361 | graphics/circuit_macros/examples/ex11.m4
-2020/05/01 | 3339 | graphics/circuit_macros/examples/ex12.m4
-2020/05/01 | 1003 | graphics/circuit_macros/examples/ex15.m4
-2020/05/01 | 1865 | graphics/circuit_macros/examples/ex16.m4
-2020/05/01 | 1126 | graphics/circuit_macros/examples/ex17.m4
-2020/05/01 | 865 | graphics/circuit_macros/examples/ex18.m4
-2020/05/01 | 2000 | graphics/circuit_macros/examples/ex21.m4
-2020/05/01 | 893788 | graphics/circuit_macros/examples/examples.pdf
-2020/05/01 | 1766 | graphics/circuit_macros/examples/examples.tex
-2020/05/01 | 8372 | graphics/circuit_macros/examples/exp.m4
-2020/05/01 | 4489 | graphics/circuit_macros/examples/fet.m4
-2020/05/01 | 17076 | graphics/circuit_macros/examples/files.tex
-2020/05/01 | 645 | graphics/circuit_macros/examples/Floor.m4
-2020/05/01 | 5552 | graphics/circuit_macros/examples/FlowchartDefs.m4
-2020/05/01 | 3911 | graphics/circuit_macros/examples/Flow.m4
-2020/05/01 | 999 | graphics/circuit_macros/examples/Fuses.m4
-2020/05/01 | 421 | graphics/circuit_macros/examples/GrayCode.m4
-2020/05/01 | 5478 | graphics/circuit_macros/examples/graysurf.m4
-2020/05/01 | 815 | graphics/circuit_macros/examples/Grounds.m4
-2020/05/01 | 1132 | graphics/circuit_macros/examples/Headers.m4
-2020/05/01 | 1458 | graphics/circuit_macros/examples/header.tex
-2020/05/01 | 13026 | graphics/circuit_macros/examples/Heathkit.m4
-2020/05/01 | 2068 | graphics/circuit_macros/examples/I2L.m4
-2020/05/01 | 1668 | graphics/circuit_macros/examples/IC10107.m4
-2020/05/01 | 9861 | graphics/circuit_macros/examples/ics.m4
-2020/05/01 | 32 | graphics/circuit_macros/examples/Incl.eps.bb
-2020/05/01 | 45323 | graphics/circuit_macros/examples/Incl.eps.gz
-2020/05/01 | 741 | graphics/circuit_macros/examples/Incleps.m4
-2020/05/01 | 29772 | graphics/circuit_macros/examples/Incl.pdf
-2020/05/01 | 709 | graphics/circuit_macros/examples/Inclpdf.m4
-2020/05/01 | 2362 | graphics/circuit_macros/examples/Jack.m4
-2020/05/01 | 2696 | graphics/circuit_macros/examples/keyval.m4
-2020/05/01 | 489 | graphics/circuit_macros/examples/Koch.m4
-2020/05/01 | 7113 | graphics/circuit_macros/examples/lcct.m4
-2020/05/01 | 2119 | graphics/circuit_macros/examples/Logic.m4
-2020/05/01 | 2304 | graphics/circuit_macros/examples/Loglog.m4
-2020/05/01 | 8815 | graphics/circuit_macros/examples/Makefile
-2020/05/01 | 2939 | graphics/circuit_macros/examples/MC.m4
-2020/05/01 | 94474 | graphics/circuit_macros/examples/mf/cct.mf
-2020/05/01 | 776 | graphics/circuit_macros/examples/mf/cct.tfm
-2020/05/01 | 4615 | graphics/circuit_macros/examples/mf/font.m4
-2020/05/01 | 1529 | graphics/circuit_macros/examples/mf/Makefile
-2020/05/01 | 1076 | graphics/circuit_macros/examples/mf/mftest
-2020/05/01 | 3785 | graphics/circuit_macros/examples/Mixer.m4
-2020/05/01 | 1922 | graphics/circuit_macros/examples/MotorControl.m4
-2020/05/01 | 409 | graphics/circuit_macros/examples/mpost/examplesmpost.tex
-2020/05/01 | 4240 | graphics/circuit_macros/examples/mpost/Makefile
-2020/05/01 | 685 | graphics/circuit_macros/examples/mpost/mptest
-2020/05/01 | 703 | graphics/circuit_macros/examples/mpost/README-mpost
-2020/05/01 | 418 | graphics/circuit_macros/examples/mpost/tstmpost.tex
-2020/05/01 | 1400 | graphics/circuit_macros/examples/Multiplexer.m4
-2020/05/01 | 499 | graphics/circuit_macros/examples/NLG.m4
-2020/05/01 | 1128 | graphics/circuit_macros/examples/NPDT.m4
-2020/05/01 | 1040 | graphics/circuit_macros/examples/Nport.m4
-2020/05/01 | 2792 | graphics/circuit_macros/examples/OpAmpFilter.m4
-2020/05/01 | 1433 | graphics/circuit_macros/examples/Opamp.m4
-2020/05/01 | 2442 | graphics/circuit_macros/examples/Optoiso.m4
-2020/05/01 | 1852 | graphics/circuit_macros/examples/Orbits.m4
-2020/05/01 | 1802 | graphics/circuit_macros/examples/Pconn.m4
-2020/05/01 | 1375 | graphics/circuit_macros/examples/person.m4
-2020/05/01 | 2674 | graphics/circuit_macros/examples/Planes.m4
-2020/05/01 | 1174 | graphics/circuit_macros/examples/PPA.m4
-2020/05/01 | 715 | graphics/circuit_macros/examples/psfrag/examplespsfrag.tex
-2020/05/01 | 4670 | graphics/circuit_macros/examples/psfrag/Makefile
-2020/05/01 | 317 | graphics/circuit_macros/examples/psfrag/README-psfrag.txt
-2020/05/01 | 371 | graphics/circuit_macros/examples/psfrag/tstpsfrag.tex
-2020/05/01 | 3919 | graphics/circuit_macros/examples/PushPull.m4
-2020/05/01 | 2014 | graphics/circuit_macros/examples/pwrsupply.m4
-2020/05/01 | 918 | graphics/circuit_macros/examples/Quantum.m4
-2020/05/01 | 774 | graphics/circuit_macros/examples/quick.m4
-2020/05/01 | 3545 | graphics/circuit_macros/examples/random.m4
-2020/05/01 | 2828 | graphics/circuit_macros/examples/README-examples
-2020/05/01 | 7006 | graphics/circuit_macros/examples/Rectifiers.m4
-2020/05/01 | 3825 | graphics/circuit_macros/examples/recycle.m4
-2020/05/01 | 1921 | graphics/circuit_macros/examples/relaycoil.m4
-2020/05/01 | 1259 | graphics/circuit_macros/examples/Relay.m4
-2020/05/01 | 1443 | graphics/circuit_macros/examples/Resolver.m4
-2020/05/01 | 4569 | graphics/circuit_macros/examples/rose.m4
-2020/05/01 | 221 | graphics/circuit_macros/examples/rotate.tex
-2020/05/01 | 1525 | graphics/circuit_macros/examples/rotatetext.m4
-2020/05/01 | 518 | graphics/circuit_macros/examples/Rotbox.m4
-2020/05/01 | 365 | graphics/circuit_macros/examples/rotellipse.m4
-2020/05/01 | 740 | graphics/circuit_macros/examples/SampleFlow.m4
-2020/05/01 | 1778 | graphics/circuit_macros/examples/Schottky.m4
-2020/05/01 | 2761 | graphics/circuit_macros/examples/sfg.m4
-2020/05/01 | 4751 | graphics/circuit_macros/examples/Shaky.m4
-2020/05/01 | 7529 | graphics/circuit_macros/examples/shapes.m4
-2020/05/01 | 1406 | graphics/circuit_macros/examples/ShiftR.m4
-2020/05/01 | 1331 | graphics/circuit_macros/examples/Sierpinski.m4
-2020/05/01 | 419 | graphics/circuit_macros/examples/Sixpole.m4
-2020/05/01 | 370 | graphics/circuit_macros/examples/snake.m4
-2020/05/01 | 2165 | graphics/circuit_macros/examples/Sources.m4
-2020/05/01 | 1906 | graphics/circuit_macros/examples/SPM.m4
-2020/05/01 | 380 | graphics/circuit_macros/examples/SQUID.m4
-2020/05/01 | 947 | graphics/circuit_macros/examples/squiggle.m4
-2020/05/01 | 1955 | graphics/circuit_macros/examples/svg/ABlogixSVG.m4
-2020/05/01 | 2528 | graphics/circuit_macros/examples/svg/AdderSVG.m4
-2020/05/01 | 4337 | graphics/circuit_macros/examples/svg/AlogixSVG.m4
-2020/05/01 | 538 | graphics/circuit_macros/examples/svg/AmpTableSVG.m4
-2020/05/01 | 1090 | graphics/circuit_macros/examples/svg/AntennasSVG.m4
-2020/05/01 | 5044 | graphics/circuit_macros/examples/svg/AntiqueClockSVG.m4
-2020/05/01 | 2720 | graphics/circuit_macros/examples/svg/AudioSVG.m4
-2020/05/01 | 1812 | graphics/circuit_macros/examples/svg/BipSVG.m4
-2020/05/01 | 1080 | graphics/circuit_macros/examples/svg/BtreeSVG.m4
-2020/05/01 | 3567 | graphics/circuit_macros/examples/svg/ButtonsSVG.m4
-2020/05/01 | 937 | graphics/circuit_macros/examples/svg/ByteSVG.m4
-2020/05/01 | 6413 | graphics/circuit_macros/examples/svg/CanLogicSVG.m4
-2020/05/01 | 2180 | graphics/circuit_macros/examples/svg/CctTableSVG.m4
-2020/05/01 | 726 | graphics/circuit_macros/examples/svg/ConnectorsSVG.m4
-2020/05/01 | 2111 | graphics/circuit_macros/examples/svg/ConnSVG.m4
-2020/05/01 | 1737 | graphics/circuit_macros/examples/svg/ContactsSVG.m4
-2020/05/01 | 3646 | graphics/circuit_macros/examples/svg/ContactSVG.m4
-2020/05/01 | 3206 | graphics/circuit_macros/examples/svg/controlSVG.m4
-2020/05/01 | 793 | graphics/circuit_macros/examples/svg/CountingSVG.m4
-2020/05/01 | 1387 | graphics/circuit_macros/examples/svg/CrossbarSVG.m4
-2020/05/01 | 2525 | graphics/circuit_macros/examples/svg/CrowSVG.m4
-2020/05/01 | 1882 | graphics/circuit_macros/examples/svg/CrullerSVG.m4
-2020/05/01 | 2324 | graphics/circuit_macros/examples/svg/cscSVG.m4
-2020/05/01 | 7418 | graphics/circuit_macros/examples/svg/CsourceSVG.m4
-2020/05/01 | 745 | graphics/circuit_macros/examples/svg/DecoderSVG.m4
-2020/05/01 | 1373 | graphics/circuit_macros/examples/svg/DemultiplexerSVG.m4
-2020/05/01 | 609 | graphics/circuit_macros/examples/svg/diamondSVG.m4
-2020/05/01 | 6854 | graphics/circuit_macros/examples/svg/DiniSVG.m4
-2020/05/01 | 1429 | graphics/circuit_macros/examples/svg/DiodesSVG.m4
-2020/05/01 | 1966 | graphics/circuit_macros/examples/svg/DriveSVG.m4
-2020/05/01 | 1070 | graphics/circuit_macros/examples/svg/EmarrowsSVG.m4
-2020/05/01 | 2443 | graphics/circuit_macros/examples/svg/ex00SVG.m4
-2020/05/01 | 933 | graphics/circuit_macros/examples/svg/ex01SVG.m4
-2020/05/01 | 1093 | graphics/circuit_macros/examples/svg/ex02SVG.m4
-2020/05/01 | 855 | graphics/circuit_macros/examples/svg/ex03SVG.m4
-2020/05/01 | 1891 | graphics/circuit_macros/examples/svg/ex04SVG.m4
-2020/05/01 | 1807 | graphics/circuit_macros/examples/svg/ex05SVG.m4
-2020/05/01 | 2018 | graphics/circuit_macros/examples/svg/ex06SVG.m4
-2020/05/01 | 2559 | graphics/circuit_macros/examples/svg/ex08SVG.m4
-2020/05/01 | 4119 | graphics/circuit_macros/examples/svg/ex09SVG.m4
-2020/05/01 | 1699 | graphics/circuit_macros/examples/svg/ex10SVG.m4
-2020/05/01 | 2685 | graphics/circuit_macros/examples/svg/ex11SVG.m4
-2020/05/01 | 3522 | graphics/circuit_macros/examples/svg/ex12SVG.m4
-2020/05/01 | 970 | graphics/circuit_macros/examples/svg/ex15SVG.m4
-2020/05/01 | 1893 | graphics/circuit_macros/examples/svg/ex16SVG.m4
-2020/05/01 | 1204 | graphics/circuit_macros/examples/svg/ex17SVG.m4
-2020/05/01 | 1065 | graphics/circuit_macros/examples/svg/ex18SVG.m4
-2020/05/01 | 2177 | graphics/circuit_macros/examples/svg/ex21SVG.m4
-2020/05/01 | 13734 | graphics/circuit_macros/examples/svg/examplesSVG.htmx
-2020/05/01 | 10589 | graphics/circuit_macros/examples/svg/expSVG.m4
-2020/05/01 | 3836 | graphics/circuit_macros/examples/svg/fetSVG.m4
-2020/05/01 | 9954 | graphics/circuit_macros/examples/svg/FlowSVG.m4
-2020/05/01 | 538 | graphics/circuit_macros/examples/svg/FontsSVG.m4
-2020/05/01 | 959 | graphics/circuit_macros/examples/svg/FusesSVG.m4
-2020/05/01 | 422 | graphics/circuit_macros/examples/svg/GrayCodeSVG.m4
-2020/05/01 | 5521 | graphics/circuit_macros/examples/svg/graysurfSVG.m4
-2020/05/01 | 810 | graphics/circuit_macros/examples/svg/GroundsSVG.m4
-2020/05/01 | 1265 | graphics/circuit_macros/examples/svg/HeadersSVG.m4
-2020/05/01 | 12711 | graphics/circuit_macros/examples/svg/HeathkitSVG.m4
-2020/05/01 | 2171 | graphics/circuit_macros/examples/svg/I2LSVG.m4
-2020/05/01 | 9276 | graphics/circuit_macros/examples/svg/icsSVG.m4
-2020/05/01 | 4003 | graphics/circuit_macros/examples/svg/InclepsSVG.m4
-2020/05/01 | 21384 | graphics/circuit_macros/examples/svg/Incl.jpg
-2020/05/01 | 2051 | graphics/circuit_macros/examples/svg/JackSVG.m4
-2020/05/01 | 7203 | graphics/circuit_macros/examples/svg/lcctSVG.m4
-2020/05/01 | 6216 | graphics/circuit_macros/examples/svg/LgateSVG.m4
-2020/05/01 | 63 | graphics/circuit_macros/examples/svg/local_init.m4
-2020/05/01 | 1931 | graphics/circuit_macros/examples/svg/LogicSVG.m4
-2020/05/01 | 2241 | graphics/circuit_macros/examples/svg/LoglogSVG.m4
-2020/05/01 | 4582 | graphics/circuit_macros/examples/svg/Makefile
-2020/05/01 | 3421 | graphics/circuit_macros/examples/svg/MCSVG.m4
-2020/05/01 | 3489 | graphics/circuit_macros/examples/svg/MixerSVG.m4
-2020/05/01 | 1953 | graphics/circuit_macros/examples/svg/MotorControlSVG.m4
-2020/05/01 | 1467 | graphics/circuit_macros/examples/svg/MultiplexerSVG.m4
-2020/05/01 | 532 | graphics/circuit_macros/examples/svg/NLGSVG.m4
-2020/05/01 | 1157 | graphics/circuit_macros/examples/svg/NPDTSVG.m4
-2020/05/01 | 748 | graphics/circuit_macros/examples/svg/Np.m4
-2020/05/01 | 1238 | graphics/circuit_macros/examples/svg/NportSVG.m4
-2020/05/01 | 1034 | graphics/circuit_macros/examples/svg/OpampSVG.m4
-2020/05/01 | 2551 | graphics/circuit_macros/examples/svg/OptoisoSVG.m4
-2020/05/01 | 10445 | graphics/circuit_macros/examples/svg/paletteSVG.m4
-2020/05/01 | 1776 | graphics/circuit_macros/examples/svg/PconnSVG.m4
-2020/05/01 | 3779 | graphics/circuit_macros/examples/svg/PushPullSVG.m4
-2020/05/01 | 862 | graphics/circuit_macros/examples/svg/pwrsupplySVG.m4
-2020/05/01 | 947 | graphics/circuit_macros/examples/svg/QuantumSVG.m4
-2020/05/01 | 839 | graphics/circuit_macros/examples/svg/quickSVG.m4
-2020/05/01 | 3573 | graphics/circuit_macros/examples/svg/randomSVG.m4
-2020/05/01 | 7546 | graphics/circuit_macros/examples/svg/RectifiersSVG.m4
-2020/05/01 | 3825 | graphics/circuit_macros/examples/svg/recycleSVG.m4
-2020/05/01 | 2069 | graphics/circuit_macros/examples/svg/relaycoilSVG.m4
-2020/05/01 | 1431 | graphics/circuit_macros/examples/svg/RelaySVG.m4
-2020/05/01 | 4624 | graphics/circuit_macros/examples/svg/roseSVG.m4
-2020/05/01 | 545 | graphics/circuit_macros/examples/svg/RotboxSVG.m4
-2020/05/01 | 1837 | graphics/circuit_macros/examples/svg/SchottkySVG.m4
-2020/05/01 | 3290 | graphics/circuit_macros/examples/svg/sfgSVG.m4
-2020/05/01 | 7526 | graphics/circuit_macros/examples/svg/shapesSVG.m4
-2020/05/01 | 1446 | graphics/circuit_macros/examples/svg/ShiftRSVG.m4
-2020/05/01 | 1331 | graphics/circuit_macros/examples/svg/SierpinskiSVG.m4
-2020/05/01 | 419 | graphics/circuit_macros/examples/svg/SixpoleSVG.m4
-2020/05/01 | 1907 | graphics/circuit_macros/examples/svg/SourcesSVG.m4
-2020/05/01 | 417 | graphics/circuit_macros/examples/svg/SQUIDSVG.m4
-2020/05/01 | 1050 | graphics/circuit_macros/examples/svg/SVGconfig.m4
-2020/05/01 | 4309 | graphics/circuit_macros/examples/svg/SwitchesSVG.m4
-2020/05/01 | 1055 | graphics/circuit_macros/examples/svg/TgateSVG.m4
-2020/05/01 | 1444 | graphics/circuit_macros/examples/svg/ThreeSVG.m4
-2020/05/01 | 3310 | graphics/circuit_macros/examples/svg/thyristorSVG.m4
-2020/05/01 | 1612 | graphics/circuit_macros/examples/svg/TimerSVG.m4
-2020/05/01 | 9198 | graphics/circuit_macros/examples/svg/tstSVG.htmx
-2020/05/01 | 1675 | graphics/circuit_macros/examples/svg/TTLnandSVG.m4
-2020/05/01 | 3091 | graphics/circuit_macros/examples/svg/TtreeSVG.m4
-2020/05/01 | 12478 | graphics/circuit_macros/examples/svg/TubediagsSVG.m4
-2020/05/01 | 682 | graphics/circuit_macros/examples/svg/ujtSVG.m4
-2020/05/01 | 988 | graphics/circuit_macros/examples/svg/VariableSVG.m4
-2020/05/01 | 2994 | graphics/circuit_macros/examples/svg/WindingsSVG.m4
-2020/05/01 | 353 | graphics/circuit_macros/examples/svg/windows.m4
-2020/05/01 | 3631 | graphics/circuit_macros/examples/svg/wormSVG.m4
-2020/05/01 | 1559 | graphics/circuit_macros/examples/svg/XformSVG.m4
-2020/05/01 | 1985 | graphics/circuit_macros/examples/svg/XORSVG.m4
-2020/05/01 | 3973 | graphics/circuit_macros/examples/Switches.m4
-2020/05/01 | 591 | graphics/circuit_macros/examples/test.m4
-2020/05/01 | 416 | graphics/circuit_macros/examples/testpdf.tex
-2020/05/01 | 1022 | graphics/circuit_macros/examples/Tgate.m4
-2020/05/01 | 1287 | graphics/circuit_macros/examples/Three.m4
-2020/05/01 | 3321 | graphics/circuit_macros/examples/thyristor.m4
-2020/05/01 | 382 | graphics/circuit_macros/examples/tikz.tex
-2020/05/01 | 1546 | graphics/circuit_macros/examples/Timer.m4
-2020/05/01 | 219 | graphics/circuit_macros/examples/tst1.tex
-2020/05/01 | 613 | graphics/circuit_macros/examples/tst.tex
-2020/05/01 | 1558 | graphics/circuit_macros/examples/TTLnand.m4
-2020/05/01 | 2097 | graphics/circuit_macros/examples/Ttree.m4
-2020/05/01 | 9840 | graphics/circuit_macros/examples/tubedefs.m4
-2020/05/01 | 13264 | graphics/circuit_macros/examples/Tubediags.m4
-2020/05/01 | 660 | graphics/circuit_macros/examples/ujt.m4
-2020/05/01 | 926 | graphics/circuit_macros/examples/Variable.m4
-2020/05/01 | 442 | graphics/circuit_macros/examples/Wheat.m4
-2020/05/01 | 3346 | graphics/circuit_macros/examples/Windings.m4
-2020/05/01 | 353 | graphics/circuit_macros/examples/windows.m4
-2020/05/01 | 2799 | graphics/circuit_macros/examples/worm.m4
-2020/05/01 | 337 | graphics/circuit_macros/examples/xfig/Makefile
-2020/05/01 | 21230 | graphics/circuit_macros/examples/xfig/xfiglib.fig
-2020/05/01 | 5969 | graphics/circuit_macros/examples/xfig/xfiglib.m4
-2020/05/01 | 1526 | graphics/circuit_macros/examples/Xform.m4
-2020/05/01 | 1823 | graphics/circuit_macros/examples/XOR.m4
-2020/05/01 | 656 | graphics/circuit_macros/examples/Zcos.m4
-2020/05/01 | 1019 | graphics/circuit_macros/gpic.m4
-2020/05/01 | 3946 | graphics/circuit_macros/INSTALL
-2020/05/01 | 11273 | graphics/circuit_macros/lib3D.m4
-2020/05/01 | 161931 | graphics/circuit_macros/libcct.m4
-2020/05/01 | 78720 | graphics/circuit_macros/libgen.m4
-2020/05/01 | 47768 | graphics/circuit_macros/liblog.m4
-2020/05/01 | 19176 | graphics/circuit_macros/Licence.txt
-2020/05/01 | 1639 | graphics/circuit_macros/Makefile
-2020/05/01 | 1114 | graphics/circuit_macros/mfpic.m4
-2020/05/01 | 1640 | graphics/circuit_macros/mpost.m4
-2020/05/01 | 2085 | graphics/circuit_macros/pgf.m4
-2020/05/01 | 2834 | graphics/circuit_macros/postscript.m4
-2020/05/01 | 706 | graphics/circuit_macros/psfrag.m4
-2020/05/01 | 2099 | graphics/circuit_macros/pstricks.m4
-2020/05/01 | 16140 | graphics/circuit_macros/README
-2020/05/01 | 9902 | graphics/circuit_macros/svg.m4
-2020/05/01 | 1029 | graphics/circuit_macros/xfig.m4
-2020/05/01 | 2533091 | graphics/circuit_macros.zip
+2020/12/20 | 1185 | graphics/circuit_macros/boxdims.sty
+2020/12/20 | 12472 | graphics/circuit_macros/CHANGES
+2020/12/20 | 462 | graphics/circuit_macros/Copying
+2020/12/20 | 14287 | graphics/circuit_macros/darrow.m4
+2020/12/20 | 26 | graphics/circuit_macros/doc/ACsymbol.m4
+2020/12/20 | 494 | graphics/circuit_macros/doc/AmpTableMan.m4
+2020/12/20 | 1940 | graphics/circuit_macros/doc/AmpTable.tex
+2020/12/20 | 1230 | graphics/circuit_macros/doc/AntennasMan.m4
+2020/12/20 | 1618 | graphics/circuit_macros/doc/ArrestersMan.m4
+2020/12/20 | 2634 | graphics/circuit_macros/doc/AudioMan.m4
+2020/12/20 | 10164 | graphics/circuit_macros/doc/Audio.tex
+2020/12/20 | 131 | graphics/circuit_macros/doc/Axes.m4
+2020/12/20 | 614 | graphics/circuit_macros/doc/BigResistor.m4
+2020/12/20 | 1619 | graphics/circuit_macros/doc/BipMan.m4
+2020/12/20 | 5545 | graphics/circuit_macros/doc/Bip.tex
+2020/12/20 | 1074 | graphics/circuit_macros/doc/bistableMan.m4
+2020/12/20 | 1860 | graphics/circuit_macros/doc/bi_trans.m4
+2020/12/20 | 130 | graphics/circuit_macros/doc/bitrbody.m4
+2020/12/20 | 50 | graphics/circuit_macros/doc/bitr.m4
+2020/12/20 | 137028 | graphics/circuit_macros/doc/body.tex
+2020/12/20 | 1953 | graphics/circuit_macros/doc/Buffer.m4
+2020/12/20 | 25460 | graphics/circuit_macros/doc/Capture.JPG
+2020/12/20 | 2735 | graphics/circuit_macros/doc/CctTableMan.m4
+2020/12/20 | 29074 | graphics/circuit_macros/doc/CctTable.tex
+2020/12/20 | 4073 | graphics/circuit_macros/doc/Circuit_macros.bib
+2020/12/20 | 950156 | graphics/circuit_macros/doc/Circuit_macros.pdf
+2020/12/20 | 2639 | graphics/circuit_macros/doc/Circuit_macros.tex
+2020/12/20 | 1857 | graphics/circuit_macros/doc/Composite.m4
+2020/12/20 | 1120 | graphics/circuit_macros/doc/ConfigA.m4
+2020/12/20 | 1257 | graphics/circuit_macros/doc/ConfigB.m4
+2020/12/20 | 1291 | graphics/circuit_macros/doc/ConfigC.m4
+2020/12/20 | 2179 | graphics/circuit_macros/doc/ConnMan.m4
+2020/12/20 | 6550 | graphics/circuit_macros/doc/Conn.tex
+2020/12/20 | 3326 | graphics/circuit_macros/doc/ContactMan.m4
+2020/12/20 | 1585 | graphics/circuit_macros/doc/ContactsMan.m4
+2020/12/20 | 6067 | graphics/circuit_macros/doc/Contacts.tex
+2020/12/20 | 13833 | graphics/circuit_macros/doc/Contact.tex
+2020/12/20 | 1995 | graphics/circuit_macros/doc/Corners.m4
+2020/12/20 | 1329 | graphics/circuit_macros/doc/currents.m4
+2020/12/20 | 2389 | graphics/circuit_macros/doc/Dac.m4
+2020/12/20 | 1151 | graphics/circuit_macros/doc/Darlington.m4
+2020/12/20 | 26 | graphics/circuit_macros/doc/DCsymbol.m4
+2020/12/20 | 81656 | graphics/circuit_macros/doc/defines.tex
+2020/12/20 | 1485 | graphics/circuit_macros/doc/DemultiplexerMan.m4
+2020/12/20 | 4817 | graphics/circuit_macros/doc/Demultiplexer.tex
+2020/12/20 | 1467 | graphics/circuit_macros/doc/DiodesMan.m4
+2020/12/20 | 12050 | graphics/circuit_macros/doc/Diodes.tex
+2020/12/20 | 483 | graphics/circuit_macros/doc/eboxdims.m4
+2020/12/20 | 980 | graphics/circuit_macros/doc/EmarrowsMan.m4
+2020/12/20 | 5502 | graphics/circuit_macros/doc/Emarrows.tex
+2020/12/20 | 1229 | graphics/circuit_macros/doc/fbfilter.m4
+2020/12/20 | 4489 | graphics/circuit_macros/doc/fetMan.m4
+2020/12/20 | 16420 | graphics/circuit_macros/doc/fet.tex
+2020/12/20 | 329 | graphics/circuit_macros/doc/FF.m4
+2020/12/20 | 1975 | graphics/circuit_macros/doc/FlipFlop.m4
+2020/12/20 | 960 | graphics/circuit_macros/doc/Flowdiag.m4
+2020/12/20 | 999 | graphics/circuit_macros/doc/FusesMan.m4
+2020/12/20 | 4789 | graphics/circuit_macros/doc/Fuses.tex
+2020/12/20 | 831 | graphics/circuit_macros/doc/GroundsMan.m4
+2020/12/20 | 2661 | graphics/circuit_macros/doc/Grounds.tex
+2020/12/20 | 1132 | graphics/circuit_macros/doc/HeadersMan.m4
+2020/12/20 | 7503 | graphics/circuit_macros/doc/Headers.tex
+2020/12/20 | 2013 | graphics/circuit_macros/doc/HybridPi.m4
+2020/12/20 | 2362 | graphics/circuit_macros/doc/JackMan.m4
+2020/12/20 | 12006 | graphics/circuit_macros/doc/Jack.tex
+2020/12/20 | 2119 | graphics/circuit_macros/doc/LogicMan.m4
+2020/12/20 | 7533 | graphics/circuit_macros/doc/Logic.tex
+2020/12/20 | 269 | graphics/circuit_macros/doc/Loop.m4
+2020/12/20 | 387 | graphics/circuit_macros/doc/lrarrows.m4
+2020/12/20 | 4687 | graphics/circuit_macros/doc/Makefile
+2020/12/20 | 1575 | graphics/circuit_macros/doc/mplex.m4
+2020/12/20 | 1400 | graphics/circuit_macros/doc/MultiplexerMan.m4
+2020/12/20 | 4964 | graphics/circuit_macros/doc/Multiplexer.tex
+2020/12/20 | 499 | graphics/circuit_macros/doc/NLGMan.m4
+2020/12/20 | 3183 | graphics/circuit_macros/doc/NLG.tex
+2020/12/20 | 1128 | graphics/circuit_macros/doc/NPDTMan.m4
+2020/12/20 | 5137 | graphics/circuit_macros/doc/NPDT.tex
+2020/12/20 | 1040 | graphics/circuit_macros/doc/NportMan.m4
+2020/12/20 | 4666 | graphics/circuit_macros/doc/Nport.tex
+2020/12/20 | 137 | graphics/circuit_macros/doc/oaxbody.m4
+2020/12/20 | 48 | graphics/circuit_macros/doc/oax.m4
+2020/12/20 | 782 | graphics/circuit_macros/doc/Oblique.m4
+2020/12/20 | 1433 | graphics/circuit_macros/doc/OpampMan.m4
+2020/12/20 | 835 | graphics/circuit_macros/doc/Opto.m4
+2020/12/20 | 1624 | graphics/circuit_macros/doc/ParSeries.m4
+2020/12/20 | 1802 | graphics/circuit_macros/doc/PconnMan.m4
+2020/12/20 | 15033 | graphics/circuit_macros/doc/Pconn.tex
+2020/12/20 | 801 | graphics/circuit_macros/doc/Potentiometers.m4
+2020/12/20 | 774 | graphics/circuit_macros/doc/quick.m4
+2020/12/20 | 1921 | graphics/circuit_macros/doc/relaycoilMan.m4
+2020/12/20 | 1259 | graphics/circuit_macros/doc/RelayMan.m4
+2020/12/20 | 7316 | graphics/circuit_macros/doc/Relay.tex
+2020/12/20 | 369 | graphics/circuit_macros/doc/sampleIC.m4
+2020/12/20 | 404 | graphics/circuit_macros/doc/Series.m4
+2020/12/20 | 1406 | graphics/circuit_macros/doc/ShiftRMan.m4
+2020/12/20 | 9425 | graphics/circuit_macros/doc/ShiftR.tex
+2020/12/20 | 421 | graphics/circuit_macros/doc/Sinus.m4
+2020/12/20 | 2165 | graphics/circuit_macros/doc/SourcesMan.m4
+2020/12/20 | 15388 | graphics/circuit_macros/doc/Sources.tex
+2020/12/20 | 217 | graphics/circuit_macros/doc/stringdims.m4
+2020/12/20 | 3973 | graphics/circuit_macros/doc/SwitchesMan.m4
+2020/12/20 | 19142 | graphics/circuit_macros/doc/Switches.tex
+2020/12/20 | 1464 | graphics/circuit_macros/doc/Taps.m4
+2020/12/20 | 11 | graphics/circuit_macros/doc/test.tex
+2020/12/20 | 1022 | graphics/circuit_macros/doc/TgateMan.m4
+2020/12/20 | 4178 | graphics/circuit_macros/doc/Tgate.tex
+2020/12/20 | 144 | graphics/circuit_macros/doc/Thermal.m4
+2020/12/20 | 3321 | graphics/circuit_macros/doc/thyristorMan.m4
+2020/12/20 | 20418 | graphics/circuit_macros/doc/thyristor.tex
+2020/12/20 | 535 | graphics/circuit_macros/doc/Tline.m4
+2020/12/20 | 165 | graphics/circuit_macros/doc/tranbody.m4
+2020/12/20 | 660 | graphics/circuit_macros/doc/ujtMan.m4
+2020/12/20 | 2441 | graphics/circuit_macros/doc/ujt.tex
+2020/12/20 | 926 | graphics/circuit_macros/doc/VariableMan.m4
+2020/12/20 | 10401 | graphics/circuit_macros/doc/Variable.tex
+2020/12/20 | 12 | graphics/circuit_macros/doc/Version.tex
+2020/12/20 | 3346 | graphics/circuit_macros/doc/WindingsMan.m4
+2020/12/20 | 449 | graphics/circuit_macros/doc/woodchips.m4
+2020/12/20 | 2912 | graphics/circuit_macros/doc/Workflow.m4
+2020/12/20 | 1526 | graphics/circuit_macros/doc/XformMan.m4
+2020/12/20 | 25849 | graphics/circuit_macros/doc/Xform.tex
+2020/12/20 | 19250 | graphics/circuit_macros/dpictools.pic
+2020/12/20 | 1730 | graphics/circuit_macros/examples/ABlogix.m4
+2020/12/20 | 2402 | graphics/circuit_macros/examples/Adder.m4
+2020/12/20 | 4205 | graphics/circuit_macros/examples/Alogix.m4
+2020/12/20 | 494 | graphics/circuit_macros/examples/AmpTable.m4
+2020/12/20 | 1230 | graphics/circuit_macros/examples/Antennas.m4
+2020/12/20 | 5042 | graphics/circuit_macros/examples/AntiqueClock.m4
+2020/12/20 | 777 | graphics/circuit_macros/examples/Arrester.m4
+2020/12/20 | 6243 | graphics/circuit_macros/examples/ASME_Y14-5.m4
+2020/12/20 | 771 | graphics/circuit_macros/examples/Attention.m4
+2020/12/20 | 2634 | graphics/circuit_macros/examples/Audio.m4
+2020/12/20 | 2517 | graphics/circuit_macros/examples/Autoencoder.m4
+2020/12/20 | 1962 | graphics/circuit_macros/examples/Autologix.m4
+2020/12/20 | 4638 | graphics/circuit_macros/examples/Ball.m4
+2020/12/20 | 1619 | graphics/circuit_macros/examples/Bip.m4
+2020/12/20 | 905 | graphics/circuit_macros/examples/birds.m4
+2020/12/20 | 1075 | graphics/circuit_macros/examples/bistable.m4
+2020/12/20 | 3175 | graphics/circuit_macros/examples/Blogix.m4
+2020/12/20 | 2542 | graphics/circuit_macros/examples/brace.m4
+2020/12/20 | 1024 | graphics/circuit_macros/examples/Btree.m4
+2020/12/20 | 3508 | graphics/circuit_macros/examples/Buttons.m4
+2020/12/20 | 991 | graphics/circuit_macros/examples/Byte.m4
+2020/12/20 | 6371 | graphics/circuit_macros/examples/CanLogic.m4
+2020/12/20 | 2736 | graphics/circuit_macros/examples/CctTable.m4
+2020/12/20 | 233 | graphics/circuit_macros/examples/Ccurve.m4
+2020/12/20 | 1039 | graphics/circuit_macros/examples/chaos.m4
+2020/12/20 | 7673 | graphics/circuit_macros/examples/Chuck.m4
+2020/12/20 | 482 | graphics/circuit_macros/examples/clock.m4
+2020/12/20 | 746 | graphics/circuit_macros/examples/Connectors.m4
+2020/12/20 | 2179 | graphics/circuit_macros/examples/Conn.m4
+2020/12/20 | 3326 | graphics/circuit_macros/examples/Contact.m4
+2020/12/20 | 1585 | graphics/circuit_macros/examples/Contacts.m4
+2020/12/20 | 4288 | graphics/circuit_macros/examples/control.m4
+2020/12/20 | 551 | graphics/circuit_macros/examples/Counting.m4
+2020/12/20 | 1521 | graphics/circuit_macros/examples/Coxeter.m4
+2020/12/20 | 1358 | graphics/circuit_macros/examples/Crossbar.m4
+2020/12/20 | 2520 | graphics/circuit_macros/examples/Crow.m4
+2020/12/20 | 1879 | graphics/circuit_macros/examples/Cruller.m4
+2020/12/20 | 2295 | graphics/circuit_macros/examples/csc.m4
+2020/12/20 | 6003 | graphics/circuit_macros/examples/CSlight.m4
+2020/12/20 | 5890 | graphics/circuit_macros/examples/Csource.m4
+2020/12/20 | 460 | graphics/circuit_macros/examples/debug1.tex
+2020/12/20 | 1959 | graphics/circuit_macros/examples/debug2.m4
+2020/12/20 | 655 | graphics/circuit_macros/examples/Decoder.m4
+2020/12/20 | 1485 | graphics/circuit_macros/examples/Demultiplexer.m4
+2020/12/20 | 654 | graphics/circuit_macros/examples/diamond.m4
+2020/12/20 | 6854 | graphics/circuit_macros/examples/Dini.m4
+2020/12/20 | 1467 | graphics/circuit_macros/examples/Diodes.m4
+2020/12/20 | 1966 | graphics/circuit_macros/examples/Drive.m4
+2020/12/20 | 980 | graphics/circuit_macros/examples/Emarrows.m4
+2020/12/20 | 2584 | graphics/circuit_macros/examples/Escher.m4
+2020/12/20 | 4305 | graphics/circuit_macros/examples/Euro.m4
+2020/12/20 | 2412 | graphics/circuit_macros/examples/ex00.m4
+2020/12/20 | 2279 | graphics/circuit_macros/examples/ex01.m4
+2020/12/20 | 1100 | graphics/circuit_macros/examples/ex02.m4
+2020/12/20 | 673 | graphics/circuit_macros/examples/ex03.m4
+2020/12/20 | 1654 | graphics/circuit_macros/examples/ex04.m4
+2020/12/20 | 1608 | graphics/circuit_macros/examples/ex05.m4
+2020/12/20 | 2170 | graphics/circuit_macros/examples/ex06.m4
+2020/12/20 | 2556 | graphics/circuit_macros/examples/ex08.m4
+2020/12/20 | 4313 | graphics/circuit_macros/examples/ex09.m4
+2020/12/20 | 1492 | graphics/circuit_macros/examples/ex10.m4
+2020/12/20 | 2361 | graphics/circuit_macros/examples/ex11.m4
+2020/12/20 | 3339 | graphics/circuit_macros/examples/ex12.m4
+2020/12/20 | 1003 | graphics/circuit_macros/examples/ex15.m4
+2020/12/20 | 1865 | graphics/circuit_macros/examples/ex16.m4
+2020/12/20 | 1126 | graphics/circuit_macros/examples/ex17.m4
+2020/12/20 | 865 | graphics/circuit_macros/examples/ex18.m4
+2020/12/20 | 2000 | graphics/circuit_macros/examples/ex21.m4
+2020/12/20 | 876477 | graphics/circuit_macros/examples/examples.pdf
+2020/12/20 | 1765 | graphics/circuit_macros/examples/examples.tex
+2020/12/20 | 8372 | graphics/circuit_macros/examples/exp.m4
+2020/12/20 | 4489 | graphics/circuit_macros/examples/fet.m4
+2020/12/20 | 17196 | graphics/circuit_macros/examples/files.tex
+2020/12/20 | 645 | graphics/circuit_macros/examples/Floor.m4
+2020/12/20 | 11270 | graphics/circuit_macros/examples/FlowchartDefs.m4
+2020/12/20 | 4751 | graphics/circuit_macros/examples/Flow.m4
+2020/12/20 | 999 | graphics/circuit_macros/examples/Fuses.m4
+2020/12/20 | 1250 | graphics/circuit_macros/examples/Geometry.m4
+2020/12/20 | 421 | graphics/circuit_macros/examples/GrayCode.m4
+2020/12/20 | 5478 | graphics/circuit_macros/examples/graysurf.m4
+2020/12/20 | 828 | graphics/circuit_macros/examples/Grounds.m4
+2020/12/20 | 1132 | graphics/circuit_macros/examples/Headers.m4
+2020/12/20 | 1458 | graphics/circuit_macros/examples/header.tex
+2020/12/20 | 13324 | graphics/circuit_macros/examples/Heathkit.m4
+2020/12/20 | 2068 | graphics/circuit_macros/examples/I2L.m4
+2020/12/20 | 1668 | graphics/circuit_macros/examples/IC10107.m4
+2020/12/20 | 9686 | graphics/circuit_macros/examples/ics.m4
+2020/12/20 | 32 | graphics/circuit_macros/examples/Incl.eps.bb
+2020/12/20 | 45323 | graphics/circuit_macros/examples/Incl.eps.gz
+2020/12/20 | 741 | graphics/circuit_macros/examples/Incleps.m4
+2020/12/20 | 29772 | graphics/circuit_macros/examples/Incl.pdf
+2020/12/20 | 709 | graphics/circuit_macros/examples/Inclpdf.m4
+2020/12/20 | 2362 | graphics/circuit_macros/examples/Jack.m4
+2020/12/20 | 2696 | graphics/circuit_macros/examples/keyval.m4
+2020/12/20 | 489 | graphics/circuit_macros/examples/Koch.m4
+2020/12/20 | 7113 | graphics/circuit_macros/examples/lcct.m4
+2020/12/20 | 2119 | graphics/circuit_macros/examples/Logic.m4
+2020/12/20 | 2304 | graphics/circuit_macros/examples/Loglog.m4
+2020/12/20 | 4459 | graphics/circuit_macros/examples/Lyap.m4
+2020/12/20 | 9800 | graphics/circuit_macros/examples/Makefile
+2020/12/20 | 2986 | graphics/circuit_macros/examples/MC.m4
+2020/12/20 | 94474 | graphics/circuit_macros/examples/mf/cct.mf
+2020/12/20 | 776 | graphics/circuit_macros/examples/mf/cct.tfm
+2020/12/20 | 4615 | graphics/circuit_macros/examples/mf/font.m4
+2020/12/20 | 1529 | graphics/circuit_macros/examples/mf/Makefile
+2020/12/20 | 1076 | graphics/circuit_macros/examples/mf/mftest
+2020/12/20 | 3785 | graphics/circuit_macros/examples/Mixer.m4
+2020/12/20 | 1922 | graphics/circuit_macros/examples/MotorControl.m4
+2020/12/20 | 409 | graphics/circuit_macros/examples/mpost/examplesmpost.tex
+2020/12/20 | 4247 | graphics/circuit_macros/examples/mpost/Makefile
+2020/12/20 | 685 | graphics/circuit_macros/examples/mpost/mptest
+2020/12/20 | 703 | graphics/circuit_macros/examples/mpost/README-mpost
+2020/12/20 | 418 | graphics/circuit_macros/examples/mpost/tstmpost.tex
+2020/12/20 | 1400 | graphics/circuit_macros/examples/Multiplexer.m4
+2020/12/20 | 499 | graphics/circuit_macros/examples/NLG.m4
+2020/12/20 | 1128 | graphics/circuit_macros/examples/NPDT.m4
+2020/12/20 | 1040 | graphics/circuit_macros/examples/Nport.m4
+2020/12/20 | 135 | graphics/circuit_macros/examples/nsvg/dev/F_test.tex
+2020/12/20 | 2453 | graphics/circuit_macros/examples/nsvg/dev/Makefile
+2020/12/20 | 39908 | graphics/circuit_macros/examples/nsvg/dev/test-1.svg
+2020/12/20 | 35308 | graphics/circuit_macros/examples/nsvg/dev/test.pdf
+2020/12/20 | 18958 | graphics/circuit_macros/examples/nsvg/dev/test.pic
+2020/12/20 | 55406 | graphics/circuit_macros/examples/nsvg/dev/test.svg
+2020/12/20 | 36472 | graphics/circuit_macros/examples/nsvg/dev/test.tex
+2020/12/20 | 2854 | graphics/circuit_macros/examples/nsvg/dev/tikztosvg
+2020/12/20 | 1484 | graphics/circuit_macros/examples/nsvg/dev/tstSVG.htmx
+2020/12/20 | 897744 | graphics/circuit_macros/examples/nsvg/examples.pdf
+2020/12/20 | 1692 | graphics/circuit_macros/examples/nsvg/examplesSVG.htmx
+2020/12/20 | 2725 | graphics/circuit_macros/examples/nsvg/Makefile
+2020/12/20 | 3911 | graphics/circuit_macros/examples/oFlow.m4
+2020/12/20 | 2792 | graphics/circuit_macros/examples/OpAmpFilter.m4
+2020/12/20 | 1433 | graphics/circuit_macros/examples/Opamp.m4
+2020/12/20 | 2442 | graphics/circuit_macros/examples/Optoiso.m4
+2020/12/20 | 1852 | graphics/circuit_macros/examples/Orbits.m4
+2020/12/20 | 1802 | graphics/circuit_macros/examples/Pconn.m4
+2020/12/20 | 1375 | graphics/circuit_macros/examples/person.m4
+2020/12/20 | 2674 | graphics/circuit_macros/examples/Planes.m4
+2020/12/20 | 1174 | graphics/circuit_macros/examples/PPA.m4
+2020/12/20 | 715 | graphics/circuit_macros/examples/psfrag/examplespsfrag.tex
+2020/12/20 | 4683 | graphics/circuit_macros/examples/psfrag/Makefile
+2020/12/20 | 317 | graphics/circuit_macros/examples/psfrag/README-psfrag.txt
+2020/12/20 | 371 | graphics/circuit_macros/examples/psfrag/tstpsfrag.tex
+2020/12/20 | 3954 | graphics/circuit_macros/examples/PushPull.m4
+2020/12/20 | 2014 | graphics/circuit_macros/examples/pwrsupply.m4
+2020/12/20 | 918 | graphics/circuit_macros/examples/Quantum.m4
+2020/12/20 | 774 | graphics/circuit_macros/examples/quick.m4
+2020/12/20 | 3727 | graphics/circuit_macros/examples/random.m4
+2020/12/20 | 2828 | graphics/circuit_macros/examples/README-examples
+2020/12/20 | 7006 | graphics/circuit_macros/examples/Rectifiers.m4
+2020/12/20 | 3825 | graphics/circuit_macros/examples/recycle.m4
+2020/12/20 | 1921 | graphics/circuit_macros/examples/relaycoil.m4
+2020/12/20 | 1259 | graphics/circuit_macros/examples/Relay.m4
+2020/12/20 | 1443 | graphics/circuit_macros/examples/Resolver.m4
+2020/12/20 | 4569 | graphics/circuit_macros/examples/rose.m4
+2020/12/20 | 221 | graphics/circuit_macros/examples/rotate.tex
+2020/12/20 | 1525 | graphics/circuit_macros/examples/rotatetext.m4
+2020/12/20 | 518 | graphics/circuit_macros/examples/Rotbox.m4
+2020/12/20 | 365 | graphics/circuit_macros/examples/rotellipse.m4
+2020/12/20 | 740 | graphics/circuit_macros/examples/SampleFlow.m4
+2020/12/20 | 1778 | graphics/circuit_macros/examples/Schottky.m4
+2020/12/20 | 2761 | graphics/circuit_macros/examples/sfg.m4
+2020/12/20 | 4751 | graphics/circuit_macros/examples/Shaky.m4
+2020/12/20 | 7721 | graphics/circuit_macros/examples/shapes.m4
+2020/12/20 | 1406 | graphics/circuit_macros/examples/ShiftR.m4
+2020/12/20 | 1331 | graphics/circuit_macros/examples/Sierpinski.m4
+2020/12/20 | 419 | graphics/circuit_macros/examples/Sixpole.m4
+2020/12/20 | 370 | graphics/circuit_macros/examples/snake.m4
+2020/12/20 | 2165 | graphics/circuit_macros/examples/Sources.m4
+2020/12/20 | 1906 | graphics/circuit_macros/examples/SPM.m4
+2020/12/20 | 380 | graphics/circuit_macros/examples/SQUID.m4
+2020/12/20 | 947 | graphics/circuit_macros/examples/squiggle.m4
+2020/12/20 | 1955 | graphics/circuit_macros/examples/svg/ABlogixSVG.m4
+2020/12/20 | 2528 | graphics/circuit_macros/examples/svg/AdderSVG.m4
+2020/12/20 | 4337 | graphics/circuit_macros/examples/svg/AlogixSVG.m4
+2020/12/20 | 538 | graphics/circuit_macros/examples/svg/AmpTableSVG.m4
+2020/12/20 | 1090 | graphics/circuit_macros/examples/svg/AntennasSVG.m4
+2020/12/20 | 5044 | graphics/circuit_macros/examples/svg/AntiqueClockSVG.m4
+2020/12/20 | 2720 | graphics/circuit_macros/examples/svg/AudioSVG.m4
+2020/12/20 | 2989 | graphics/circuit_macros/examples/svg/AutoencoderSVG.m4
+2020/12/20 | 1668 | graphics/circuit_macros/examples/svg/Banking.m4
+2020/12/20 | 1812 | graphics/circuit_macros/examples/svg/BipSVG.m4
+2020/12/20 | 4258 | graphics/circuit_macros/examples/svg/BtreeSVG.m4
+2020/12/20 | 3567 | graphics/circuit_macros/examples/svg/ButtonsSVG.m4
+2020/12/20 | 937 | graphics/circuit_macros/examples/svg/ByteSVG.m4
+2020/12/20 | 6413 | graphics/circuit_macros/examples/svg/CanLogicSVG.m4
+2020/12/20 | 2661 | graphics/circuit_macros/examples/svg/CctTableSVG.m4
+2020/12/20 | 715 | graphics/circuit_macros/examples/svg/ConnectorsSVG.m4
+2020/12/20 | 2111 | graphics/circuit_macros/examples/svg/ConnSVG.m4
+2020/12/20 | 1737 | graphics/circuit_macros/examples/svg/ContactsSVG.m4
+2020/12/20 | 3646 | graphics/circuit_macros/examples/svg/ContactSVG.m4
+2020/12/20 | 3206 | graphics/circuit_macros/examples/svg/controlSVG.m4
+2020/12/20 | 793 | graphics/circuit_macros/examples/svg/CountingSVG.m4
+2020/12/20 | 1387 | graphics/circuit_macros/examples/svg/CrossbarSVG.m4
+2020/12/20 | 2525 | graphics/circuit_macros/examples/svg/CrowSVG.m4
+2020/12/20 | 1882 | graphics/circuit_macros/examples/svg/CrullerSVG.m4
+2020/12/20 | 2324 | graphics/circuit_macros/examples/svg/cscSVG.m4
+2020/12/20 | 7418 | graphics/circuit_macros/examples/svg/CsourceSVG.m4
+2020/12/20 | 745 | graphics/circuit_macros/examples/svg/DecoderSVG.m4
+2020/12/20 | 1373 | graphics/circuit_macros/examples/svg/DemultiplexerSVG.m4
+2020/12/20 | 609 | graphics/circuit_macros/examples/svg/diamondSVG.m4
+2020/12/20 | 6854 | graphics/circuit_macros/examples/svg/DiniSVG.m4
+2020/12/20 | 1429 | graphics/circuit_macros/examples/svg/DiodesSVG.m4
+2020/12/20 | 1966 | graphics/circuit_macros/examples/svg/DriveSVG.m4
+2020/12/20 | 1070 | graphics/circuit_macros/examples/svg/EmarrowsSVG.m4
+2020/12/20 | 2443 | graphics/circuit_macros/examples/svg/ex00SVG.m4
+2020/12/20 | 2625 | graphics/circuit_macros/examples/svg/ex01SVG.m4
+2020/12/20 | 1093 | graphics/circuit_macros/examples/svg/ex02SVG.m4
+2020/12/20 | 855 | graphics/circuit_macros/examples/svg/ex03SVG.m4
+2020/12/20 | 1891 | graphics/circuit_macros/examples/svg/ex04SVG.m4
+2020/12/20 | 3390 | graphics/circuit_macros/examples/svg/ex05SVG.m4
+2020/12/20 | 2018 | graphics/circuit_macros/examples/svg/ex06SVG.m4
+2020/12/20 | 2559 | graphics/circuit_macros/examples/svg/ex08SVG.m4
+2020/12/20 | 4119 | graphics/circuit_macros/examples/svg/ex09SVG.m4
+2020/12/20 | 1699 | graphics/circuit_macros/examples/svg/ex10SVG.m4
+2020/12/20 | 2685 | graphics/circuit_macros/examples/svg/ex11SVG.m4
+2020/12/20 | 3522 | graphics/circuit_macros/examples/svg/ex12SVG.m4
+2020/12/20 | 970 | graphics/circuit_macros/examples/svg/ex15SVG.m4
+2020/12/20 | 1893 | graphics/circuit_macros/examples/svg/ex16SVG.m4
+2020/12/20 | 1204 | graphics/circuit_macros/examples/svg/ex17SVG.m4
+2020/12/20 | 1065 | graphics/circuit_macros/examples/svg/ex18SVG.m4
+2020/12/20 | 2177 | graphics/circuit_macros/examples/svg/ex21SVG.m4
+2020/12/20 | 23972 | graphics/circuit_macros/examples/svg/examplesSVG.htmx
+2020/12/20 | 10589 | graphics/circuit_macros/examples/svg/expSVG.m4
+2020/12/20 | 3836 | graphics/circuit_macros/examples/svg/fetSVG.m4
+2020/12/20 | 5171 | graphics/circuit_macros/examples/svg/FlowSVG.m4
+2020/12/20 | 538 | graphics/circuit_macros/examples/svg/FontsSVG.m4
+2020/12/20 | 1992 | graphics/circuit_macros/examples/svg/FourbarSVG.m4
+2020/12/20 | 959 | graphics/circuit_macros/examples/svg/FusesSVG.m4
+2020/12/20 | 1250 | graphics/circuit_macros/examples/svg/GeometrySVG.m4
+2020/12/20 | 422 | graphics/circuit_macros/examples/svg/GrayCodeSVG.m4
+2020/12/20 | 5521 | graphics/circuit_macros/examples/svg/graysurfSVG.m4
+2020/12/20 | 810 | graphics/circuit_macros/examples/svg/GroundsSVG.m4
+2020/12/20 | 1265 | graphics/circuit_macros/examples/svg/HeadersSVG.m4
+2020/12/20 | 12711 | graphics/circuit_macros/examples/svg/HeathkitSVG.m4
+2020/12/20 | 2171 | graphics/circuit_macros/examples/svg/I2LSVG.m4
+2020/12/20 | 9276 | graphics/circuit_macros/examples/svg/icsSVG.m4
+2020/12/20 | 4003 | graphics/circuit_macros/examples/svg/InclepsSVG.m4
+2020/12/20 | 21384 | graphics/circuit_macros/examples/svg/Incl.jpg
+2020/12/20 | 2051 | graphics/circuit_macros/examples/svg/JackSVG.m4
+2020/12/20 | 7203 | graphics/circuit_macros/examples/svg/lcctSVG.m4
+2020/12/20 | 6216 | graphics/circuit_macros/examples/svg/LgateSVG.m4
+2020/12/20 | 63 | graphics/circuit_macros/examples/svg/local_init.m4
+2020/12/20 | 1931 | graphics/circuit_macros/examples/svg/LogicSVG.m4
+2020/12/20 | 2241 | graphics/circuit_macros/examples/svg/LoglogSVG.m4
+2020/12/20 | 4521 | graphics/circuit_macros/examples/svg/LyapSVG.m4
+2020/12/20 | 5424 | graphics/circuit_macros/examples/svg/Makefile
+2020/12/20 | 3473 | graphics/circuit_macros/examples/svg/MCSVG.m4
+2020/12/20 | 3489 | graphics/circuit_macros/examples/svg/MixerSVG.m4
+2020/12/20 | 1953 | graphics/circuit_macros/examples/svg/MotorControlSVG.m4
+2020/12/20 | 1467 | graphics/circuit_macros/examples/svg/MultiplexerSVG.m4
+2020/12/20 | 532 | graphics/circuit_macros/examples/svg/NLGSVG.m4
+2020/12/20 | 1157 | graphics/circuit_macros/examples/svg/NPDTSVG.m4
+2020/12/20 | 748 | graphics/circuit_macros/examples/svg/Np.m4
+2020/12/20 | 1238 | graphics/circuit_macros/examples/svg/NportSVG.m4
+2020/12/20 | 1034 | graphics/circuit_macros/examples/svg/OpampSVG.m4
+2020/12/20 | 2551 | graphics/circuit_macros/examples/svg/OptoisoSVG.m4
+2020/12/20 | 10447 | graphics/circuit_macros/examples/svg/paletteSVG.m4
+2020/12/20 | 1776 | graphics/circuit_macros/examples/svg/PconnSVG.m4
+2020/12/20 | 3779 | graphics/circuit_macros/examples/svg/PushPullSVG.m4
+2020/12/20 | 2027 | graphics/circuit_macros/examples/svg/pwrsupplySVG.m4
+2020/12/20 | 947 | graphics/circuit_macros/examples/svg/QuantumSVG.m4
+2020/12/20 | 886 | graphics/circuit_macros/examples/svg/quickSVG.m4
+2020/12/20 | 3756 | graphics/circuit_macros/examples/svg/randomSVG.m4
+2020/12/20 | 7546 | graphics/circuit_macros/examples/svg/RectifiersSVG.m4
+2020/12/20 | 3825 | graphics/circuit_macros/examples/svg/recycleSVG.m4
+2020/12/20 | 2069 | graphics/circuit_macros/examples/svg/relaycoilSVG.m4
+2020/12/20 | 1431 | graphics/circuit_macros/examples/svg/RelaySVG.m4
+2020/12/20 | 4624 | graphics/circuit_macros/examples/svg/roseSVG.m4
+2020/12/20 | 545 | graphics/circuit_macros/examples/svg/RotboxSVG.m4
+2020/12/20 | 1837 | graphics/circuit_macros/examples/svg/SchottkySVG.m4
+2020/12/20 | 3290 | graphics/circuit_macros/examples/svg/sfgSVG.m4
+2020/12/20 | 7526 | graphics/circuit_macros/examples/svg/shapesSVG.m4
+2020/12/20 | 1446 | graphics/circuit_macros/examples/svg/ShiftRSVG.m4
+2020/12/20 | 1331 | graphics/circuit_macros/examples/svg/SierpinskiSVG.m4
+2020/12/20 | 419 | graphics/circuit_macros/examples/svg/SixpoleSVG.m4
+2020/12/20 | 1907 | graphics/circuit_macros/examples/svg/SourcesSVG.m4
+2020/12/20 | 417 | graphics/circuit_macros/examples/svg/SQUIDSVG.m4
+2020/12/20 | 1050 | graphics/circuit_macros/examples/svg/SVGconfig.m4
+2020/12/20 | 4309 | graphics/circuit_macros/examples/svg/SwitchesSVG.m4
+2020/12/20 | 1055 | graphics/circuit_macros/examples/svg/TgateSVG.m4
+2020/12/20 | 1444 | graphics/circuit_macros/examples/svg/ThreeSVG.m4
+2020/12/20 | 3310 | graphics/circuit_macros/examples/svg/thyristorSVG.m4
+2020/12/20 | 1612 | graphics/circuit_macros/examples/svg/TimerSVG.m4
+2020/12/20 | 9380 | graphics/circuit_macros/examples/svg/tstSVG.htmx
+2020/12/20 | 1675 | graphics/circuit_macros/examples/svg/TTLnandSVG.m4
+2020/12/20 | 3091 | graphics/circuit_macros/examples/svg/TtreeSVG.m4
+2020/12/20 | 12478 | graphics/circuit_macros/examples/svg/TubediagsSVG.m4
+2020/12/20 | 682 | graphics/circuit_macros/examples/svg/ujtSVG.m4
+2020/12/20 | 9747 | graphics/circuit_macros/examples/svg/UNO.m4
+2020/12/20 | 24133 | graphics/circuit_macros/examples/svg/UNOSVG.m4
+2020/12/20 | 988 | graphics/circuit_macros/examples/svg/VariableSVG.m4
+2020/12/20 | 2994 | graphics/circuit_macros/examples/svg/WindingsSVG.m4
+2020/12/20 | 353 | graphics/circuit_macros/examples/svg/windows.m4
+2020/12/20 | 3631 | graphics/circuit_macros/examples/svg/wormSVG.m4
+2020/12/20 | 1559 | graphics/circuit_macros/examples/svg/XformSVG.m4
+2020/12/20 | 1985 | graphics/circuit_macros/examples/svg/XORSVG.m4
+2020/12/20 | 1546 | graphics/circuit_macros/examples/svg/Xtest.m4
+2020/12/20 | 6150 | graphics/circuit_macros/examples/svg/Y14-5SVG.m4
+2020/12/20 | 3973 | graphics/circuit_macros/examples/Switches.m4
+2020/12/20 | 591 | graphics/circuit_macros/examples/test.m4
+2020/12/20 | 416 | graphics/circuit_macros/examples/testpdf.tex
+2020/12/20 | 1022 | graphics/circuit_macros/examples/Tgate.m4
+2020/12/20 | 1287 | graphics/circuit_macros/examples/Three.m4
+2020/12/20 | 3321 | graphics/circuit_macros/examples/thyristor.m4
+2020/12/20 | 382 | graphics/circuit_macros/examples/tikz.tex
+2020/12/20 | 219 | graphics/circuit_macros/examples/tst1.tex
+2020/12/20 | 613 | graphics/circuit_macros/examples/tst.tex
+2020/12/20 | 1558 | graphics/circuit_macros/examples/TTLnand.m4
+2020/12/20 | 2097 | graphics/circuit_macros/examples/Ttree.m4
+2020/12/20 | 9840 | graphics/circuit_macros/examples/tubedefs.m4
+2020/12/20 | 13264 | graphics/circuit_macros/examples/Tubediags.m4
+2020/12/20 | 660 | graphics/circuit_macros/examples/ujt.m4
+2020/12/20 | 932 | graphics/circuit_macros/examples/Variable.m4
+2020/12/20 | 442 | graphics/circuit_macros/examples/Wheat.m4
+2020/12/20 | 3346 | graphics/circuit_macros/examples/Windings.m4
+2020/12/20 | 353 | graphics/circuit_macros/examples/windows.m4
+2020/12/20 | 2799 | graphics/circuit_macros/examples/worm.m4
+2020/12/20 | 337 | graphics/circuit_macros/examples/xfig/Makefile
+2020/12/20 | 21230 | graphics/circuit_macros/examples/xfig/xfiglib.fig
+2020/12/20 | 5969 | graphics/circuit_macros/examples/xfig/xfiglib.m4
+2020/12/20 | 1526 | graphics/circuit_macros/examples/Xform.m4
+2020/12/20 | 1823 | graphics/circuit_macros/examples/XOR.m4
+2020/12/20 | 656 | graphics/circuit_macros/examples/Zcos.m4
+2020/12/20 | 1019 | graphics/circuit_macros/gpic.m4
+2020/12/20 | 4079 | graphics/circuit_macros/INSTALL
+2020/12/20 | 11566 | graphics/circuit_macros/lib3D.m4
+2020/12/20 | 164867 | graphics/circuit_macros/libcct.m4
+2020/12/20 | 81505 | graphics/circuit_macros/libgen.m4
+2020/12/20 | 47768 | graphics/circuit_macros/liblog.m4
+2020/12/20 | 19176 | graphics/circuit_macros/Licence.txt
+2020/12/20 | 1639 | graphics/circuit_macros/Makefile
+2020/12/20 | 1114 | graphics/circuit_macros/mfpic.m4
+2020/12/20 | 1640 | graphics/circuit_macros/mpost.m4
+2020/12/20 | 2085 | graphics/circuit_macros/pgf.m4
+2020/12/20 | 2834 | graphics/circuit_macros/postscript.m4
+2020/12/20 | 706 | graphics/circuit_macros/psfrag.m4
+2020/12/20 | 2099 | graphics/circuit_macros/pstricks.m4
+2020/12/20 | 16205 | graphics/circuit_macros/README
+2020/12/20 | 10059 | graphics/circuit_macros/svg.m4
+2020/12/20 | 1029 | graphics/circuit_macros/xfig.m4
+2020/12/20 | 3395920 | 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
@@ -145356,21 +145386,21 @@
2005/10/16 | 610 | info/amslatex/vietnamese/src/Makefile
2004/11/05 | 168 | info/amslatex/vietnamese/TODO
2005/10/17 | 1214340 | info/amslatex/vietnamese.zip
-2019/04/27 | 2270333 | info/apprendre-a-programmer-en-tex/cover/couverture.pdf
-2019/04/27 | 26646490 | info/apprendre-a-programmer-en-tex/fonts/libertine-legacy.zip
-2019/04/27 | 3370866 | info/apprendre-a-programmer-en-tex/fonts/linlibmonoc.zip
-2019/04/27 | 4356465 | info/apprendre-a-programmer-en-tex/output/apprendre-a-programmer-en-tex.pdf
-2019/04/27 | 335917 | info/apprendre-a-programmer-en-tex/output/progtexcode.txt
-2019/04/27 | 7465 | info/apprendre-a-programmer-en-tex/README
-2019/04/27 | 1320861 | info/apprendre-a-programmer-en-tex/source/apprendre-a-programmer-en-tex.tex
-2019/04/27 | 993472 | info/apprendre-a-programmer-en-tex/source/mandelbrot.pdf
-2019/04/27 | 1142 | info/apprendre-a-programmer-en-tex/source/mandelbrot.tex
-2019/04/27 | 83734 | info/apprendre-a-programmer-en-tex/source/pg0001.pdf
-2019/04/27 | 83363 | info/apprendre-a-programmer-en-tex/source/pg0002.pdf
-2019/04/27 | 83475 | info/apprendre-a-programmer-en-tex/source/pg0003.pdf
-2019/04/27 | 81497 | info/apprendre-a-programmer-en-tex/source/progtexmacro.tex
-2019/04/27 | 39113 | info/apprendre-a-programmer-en-tex/source/vignette.png
-2019/04/27 | 37638601 | info/apprendre-a-programmer-en-tex.zip
+2020/12/20 | 2270333 | info/apprendre-a-programmer-en-tex/cover/couverture.pdf
+2020/12/20 | 306184 | info/apprendre-a-programmer-en-tex/fonts/GMC.zip
+2020/12/20 | 26646490 | info/apprendre-a-programmer-en-tex/fonts/libertine-legacy.zip
+2020/12/20 | 4012401 | info/apprendre-a-programmer-en-tex/output/apprendre-a-programmer-en-tex.pdf
+2020/12/20 | 335917 | info/apprendre-a-programmer-en-tex/output/progtexcode.txt
+2020/12/20 | 6640 | info/apprendre-a-programmer-en-tex/README
+2020/12/20 | 1320848 | info/apprendre-a-programmer-en-tex/source/apprendre-a-programmer-en-tex.tex
+2020/12/20 | 993472 | info/apprendre-a-programmer-en-tex/source/mandelbrot.pdf
+2020/12/20 | 1142 | info/apprendre-a-programmer-en-tex/source/mandelbrot.tex
+2020/12/20 | 83734 | info/apprendre-a-programmer-en-tex/source/pg0001.pdf
+2020/12/20 | 83363 | info/apprendre-a-programmer-en-tex/source/pg0002.pdf
+2020/12/20 | 83475 | info/apprendre-a-programmer-en-tex/source/pg0003.pdf
+2020/12/20 | 81497 | info/apprendre-a-programmer-en-tex/source/progtexmacro.tex
+2020/12/20 | 39113 | info/apprendre-a-programmer-en-tex/source/vignette.png
+2020/12/20 | 34224145 | info/apprendre-a-programmer-en-tex.zip
2010/07/08 | 2504858 | info/apprends-latex/Apprends_LaTeX.pdf
2010/07/08 | 289639 | info/apprends-latex/Apprends_LaTeX.tex
2010/03/28 | 2703 | info/apprends-latex/avance.bib
@@ -168863,7 +168893,6 @@
2019/10/25 | 2401518 | install/fonts/clearsans.tds.zip
2016/02/14 | 739416 | install/fonts/cm/cmtiup.tds.zip
2010/04/20 | 535128 | install/fonts/cmll.tds.zip
-2020/09/24 | 5935971 | install/fonts/cochineal.tds.zip
2020/04/13 | 9646462 | install/fonts/coelacanth.tds.zip
2019/06/24 | 1223758 | install/fonts/comfortaa.tds.zip
2020/04/26 | 1498480 | install/fonts/comicneue.tds.zip
@@ -168925,7 +168954,6 @@
2020/11/02 | 3203408 | install/fonts/newpx.tds.zip
2020/02/15 | 441366 | install/fonts/newtxtt.tds.zip
2020/01/29 | 5685191 | install/fonts/nimbus15.tds.zip
-2020/08/05 | 715344 | install/fonts/notomath.tds.zip
2019/12/10 | 107860149 | install/fonts/noto.tds.zip
2020/05/30 | 3595835 | install/fonts/oldstandard.tds.zip
2019/06/24 | 4612348 | install/fonts/opensans.tds.zip
@@ -191730,12 +191758,12 @@
1999/01/19 | 1335 | macros/latex/contrib/cursor/cursor.tex
1999/01/19 | 420 | macros/latex/contrib/cursor/read.me
2007/01/01 | 16025 | macros/latex/contrib/cursor.zip
-2020/12/12 | 183897 | macros/latex/contrib/curve2e/curve2e.dtx
-2020/12/12 | 571161 | macros/latex/contrib/curve2e/curve2e-manual.pdf
+2020/12/20 | 183801 | macros/latex/contrib/curve2e/curve2e.dtx
+2020/12/20 | 571391 | macros/latex/contrib/curve2e/curve2e-manual.pdf
2020/12/12 | 74595 | macros/latex/contrib/curve2e/curve2e-manual.tex
-2020/12/12 | 654000 | macros/latex/contrib/curve2e/curve2e.pdf
-2020/12/12 | 5989 | macros/latex/contrib/curve2e/README.txt
-2020/12/12 | 1297427 | macros/latex/contrib/curve2e.zip
+2020/12/20 | 654227 | macros/latex/contrib/curve2e/curve2e.pdf
+2020/12/20 | 5989 | macros/latex/contrib/curve2e/README.txt
+2020/12/20 | 1297880 | macros/latex/contrib/curve2e.zip
2010/12/14 | 88817 | macros/latex/contrib/curve/curve.dtx
2010/12/14 | 3268 | macros/latex/contrib/curve/curve.el
2010/12/14 | 1746 | macros/latex/contrib/curve/curve.ins
@@ -193174,6 +193202,36 @@
2018/03/30 | 175553 | macros/latex/contrib/easyfig/easyfig.pdf
2018/03/30 | 775 | macros/latex/contrib/easyfig/README
2018/03/30 | 180117 | macros/latex/contrib/easyfig.zip
+2020/12/20 | 366 | macros/latex/contrib/easyfloats/DEPENDS.txt
+2020/12/20 | 2036 | macros/latex/contrib/easyfloats/doc/content/bug-reports-and-contributions.tex
+2020/12/20 | 56881 | macros/latex/contrib/easyfloats/doc/content/documentation.tex
+2020/12/20 | 12318 | macros/latex/contrib/easyfloats/doc/content/examples.tex
+2020/12/20 | 241 | macros/latex/contrib/easyfloats/doc/content/installation.tex
+2020/12/20 | 790 | macros/latex/contrib/easyfloats/doc/content/license.tex
+2020/12/20 | 17611 | macros/latex/contrib/easyfloats/doc/content/motivation.tex
+2020/12/20 | 1075 | macros/latex/contrib/easyfloats/doc/content/names.tex
+2020/12/20 | 3133 | macros/latex/contrib/easyfloats/doc/content/other-packages.tex
+2020/12/20 | 566 | macros/latex/contrib/easyfloats/doc/content/titlepage.tex
+2020/12/20 | 1305 | macros/latex/contrib/easyfloats/doc/content/used-packages.tex
+2020/12/20 | 3618 | macros/latex/contrib/easyfloats/doc/easyfloats.bib
+2020/12/20 | 546772 | macros/latex/contrib/easyfloats/doc/easyfloats.pdf
+2020/12/20 | 1738 | macros/latex/contrib/easyfloats/doc/easyfloats.tex
+2020/12/20 | 536 | macros/latex/contrib/easyfloats/doc/lexer/latex_atletter.py
+2020/12/20 | 2761 | macros/latex/contrib/easyfloats/doc/links.tex
+2020/12/20 | 920 | macros/latex/contrib/easyfloats/doc/preamble/bibliography.tex
+2020/12/20 | 6764 | macros/latex/contrib/easyfloats/doc/preamble/description-links.tex
+2020/12/20 | 27712 | macros/latex/contrib/easyfloats/doc/preamble/examplecode.tex
+2020/12/20 | 26125 | macros/latex/contrib/easyfloats/doc/preamble/keydoc.tex
+2020/12/20 | 1530 | macros/latex/contrib/easyfloats/doc/preamble/link.tex
+2020/12/20 | 7207 | macros/latex/contrib/easyfloats/doc/preamble/macros.tex
+2020/12/20 | 4735 | macros/latex/contrib/easyfloats/doc/preamble/markdown.tex
+2020/12/20 | 971 | macros/latex/contrib/easyfloats/doc/preamble/pdfstring.tex
+2020/12/20 | 5056 | macros/latex/contrib/easyfloats/doc/undescribed-keywords.tex
+2020/12/20 | 60576 | macros/latex/contrib/easyfloats/easyfloats.dtx
+2020/12/20 | 1255 | macros/latex/contrib/easyfloats/easyfloats-file-list.txt
+2020/12/20 | 3098 | macros/latex/contrib/easyfloats/easyfloats.ins
+2020/12/20 | 1924 | macros/latex/contrib/easyfloats/README.md
+2020/12/20 | 617115 | macros/latex/contrib/easyfloats.zip
2002/03/19 | 3468 | macros/latex/contrib/easy/for-latex2html/easybib.perl
2002/03/19 | 3140 | macros/latex/contrib/easy/for-latex2html/easybmat.perl
2002/03/19 | 10211 | macros/latex/contrib/easy/for-latex2html/easyeqn.perl
@@ -203915,11 +203973,11 @@
2018/07/21 | 904 | macros/latex/contrib/pdfpc-movie/pdfpc-movie.ins
2018/07/21 | 1374 | macros/latex/contrib/pdfpc-movie/README.md
2018/07/21 | 81193 | macros/latex/contrib/pdfpc-movie.zip
-2020/11/15 | 173566 | macros/latex/contrib/pdfpc/pdfpc-doc.pdf
-2020/11/15 | 5035 | macros/latex/contrib/pdfpc/pdfpc-doc.tex
-2020/11/15 | 5058 | macros/latex/contrib/pdfpc/pdfpc.sty
-2020/11/15 | 1147 | macros/latex/contrib/pdfpc/README.md
-2020/11/15 | 176730 | macros/latex/contrib/pdfpc.zip
+2020/12/20 | 173201 | macros/latex/contrib/pdfpc/pdfpc-doc.pdf
+2020/12/20 | 5035 | macros/latex/contrib/pdfpc/pdfpc-doc.tex
+2020/12/20 | 5060 | macros/latex/contrib/pdfpc/pdfpc.sty
+2020/12/20 | 1147 | macros/latex/contrib/pdfpc/README.md
+2020/12/20 | 176362 | macros/latex/contrib/pdfpc.zip
2017/12/03 | 19452 | macros/latex/contrib/pdfprivacy/LICENSE
2017/12/03 | 14446 | macros/latex/contrib/pdfprivacy/pdfprivacy.dtx
2017/12/03 | 1975 | macros/latex/contrib/pdfprivacy/pdfprivacy.ins
@@ -205464,111 +205522,111 @@
2020/11/24 | 243 | macros/latex/contrib/reledmac/doc-more/makefile
2020/11/29 | 40836 | macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf
2020/11/24 | 4645 | macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.tex
-2020/11/29 | 197373 | macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
-2020/11/24 | 1979 | macros/latex/contrib/reledmac/examples/1-criticalendnotes.tex
-2020/11/29 | 195586 | macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
-2020/11/24 | 2161 | macros/latex/contrib/reledmac/examples/1-criticalnotes.tex
-2020/11/29 | 291128 | macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
-2020/11/24 | 9804 | macros/latex/contrib/reledmac/examples/1-sidenotes.tex
-2020/11/29 | 280887 | macros/latex/contrib/reledmac/examples/1-tabular.pdf
-2020/11/24 | 2004 | macros/latex/contrib/reledmac/examples/1-tabular.tex
-2020/11/29 | 197414 | macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
-2020/11/24 | 2592 | macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.tex
-2020/11/29 | 197363 | macros/latex/contrib/reledmac/examples/1-verses.pdf
-2020/11/24 | 1902 | macros/latex/contrib/reledmac/examples/1-verses.tex
-2020/11/29 | 205371 | macros/latex/contrib/reledmac/examples/2-antilabe.pdf
-2020/11/24 | 1998 | macros/latex/contrib/reledmac/examples/2-antilabe.tex
-2020/11/29 | 196250 | macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
-2020/11/24 | 1857 | macros/latex/contrib/reledmac/examples/2-cross_referencing.tex
-2020/11/29 | 199696 | macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
-2020/11/24 | 6806 | macros/latex/contrib/reledmac/examples/2-footnote_spacing.tex
-2020/11/29 | 280642 | macros/latex/contrib/reledmac/examples/2-glossaries.pdf
-2020/11/24 | 1776 | macros/latex/contrib/reledmac/examples/2-glossaries.tex
-2020/11/29 | 279716 | macros/latex/contrib/reledmac/examples/2-indexing.pdf
-2020/11/24 | 2761 | macros/latex/contrib/reledmac/examples/2-indexing.tex
-2020/11/29 | 273887 | macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
-2020/11/28 | 1140 | macros/latex/contrib/reledmac/examples/2-lemma_disambigution.tex
-2020/11/29 | 289371 | macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
-2020/11/24 | 11391 | macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.tex
-2020/11/29 | 284597 | macros/latex/contrib/reledmac/examples/2-linespacing.pdf
-2020/11/24 | 1488 | macros/latex/contrib/reledmac/examples/2-linespacing.tex
-2020/11/29 | 285213 | macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
-2020/11/24 | 21449 | macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.tex
-2020/11/29 | 202991 | macros/latex/contrib/reledmac/examples/2-notes-width.pdf
-2020/11/24 | 1528 | macros/latex/contrib/reledmac/examples/2-notes-width.tex
-2020/11/29 | 208585 | macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
-2020/11/24 | 5161 | macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.tex
-2020/11/29 | 281520 | macros/latex/contrib/reledmac/examples/2-performances.pdf
-2020/11/24 | 2710 | macros/latex/contrib/reledmac/examples/2-performances.tex
-2020/11/29 | 31045 | macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
+2020/12/19 | 197373 | macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
+2020/11/29 | 1979 | macros/latex/contrib/reledmac/examples/1-criticalendnotes.tex
+2020/12/19 | 195586 | macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
+2020/11/29 | 2161 | macros/latex/contrib/reledmac/examples/1-criticalnotes.tex
+2020/12/19 | 291128 | macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
+2020/11/29 | 9804 | macros/latex/contrib/reledmac/examples/1-sidenotes.tex
+2020/12/19 | 280887 | macros/latex/contrib/reledmac/examples/1-tabular.pdf
+2020/11/29 | 2004 | macros/latex/contrib/reledmac/examples/1-tabular.tex
+2020/12/19 | 197414 | macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
+2020/11/29 | 2592 | macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.tex
+2020/12/19 | 197363 | macros/latex/contrib/reledmac/examples/1-verses.pdf
+2020/11/29 | 1902 | macros/latex/contrib/reledmac/examples/1-verses.tex
+2020/12/19 | 205371 | macros/latex/contrib/reledmac/examples/2-antilabe.pdf
+2020/11/29 | 1998 | macros/latex/contrib/reledmac/examples/2-antilabe.tex
+2020/12/19 | 196250 | macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
+2020/11/29 | 1857 | macros/latex/contrib/reledmac/examples/2-cross_referencing.tex
+2020/12/19 | 199696 | macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
+2020/11/29 | 6806 | macros/latex/contrib/reledmac/examples/2-footnote_spacing.tex
+2020/12/19 | 280642 | macros/latex/contrib/reledmac/examples/2-glossaries.pdf
+2020/11/29 | 1776 | macros/latex/contrib/reledmac/examples/2-glossaries.tex
+2020/12/19 | 279716 | macros/latex/contrib/reledmac/examples/2-indexing.pdf
+2020/11/29 | 2761 | macros/latex/contrib/reledmac/examples/2-indexing.tex
+2020/12/19 | 273887 | macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
+2020/11/29 | 1140 | macros/latex/contrib/reledmac/examples/2-lemma_disambigution.tex
+2020/12/19 | 289371 | macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
+2020/11/29 | 11391 | macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.tex
+2020/12/19 | 284597 | macros/latex/contrib/reledmac/examples/2-linespacing.pdf
+2020/11/29 | 1488 | macros/latex/contrib/reledmac/examples/2-linespacing.tex
+2020/12/19 | 285213 | macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
+2020/11/29 | 21449 | macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.tex
+2020/12/19 | 202991 | macros/latex/contrib/reledmac/examples/2-notes-width.pdf
+2020/11/29 | 1528 | macros/latex/contrib/reledmac/examples/2-notes-width.tex
+2020/12/19 | 208585 | macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
+2020/11/29 | 5161 | macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.tex
+2020/12/19 | 281520 | macros/latex/contrib/reledmac/examples/2-performances.pdf
+2020/11/29 | 2710 | macros/latex/contrib/reledmac/examples/2-performances.tex
+2020/12/19 | 31052 | macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
2020/11/24 | 3159 | macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.tex
-2020/11/29 | 304585 | macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
-2020/11/24 | 15949 | macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.tex
-2020/11/29 | 283465 | macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
-2020/11/24 | 3065 | macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.tex
-2020/11/29 | 196014 | macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
-2020/11/24 | 2006 | macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.tex
-2020/11/29 | 23264 | macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
+2020/12/19 | 304585 | macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
+2020/11/29 | 15949 | macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.tex
+2020/12/19 | 283465 | macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
+2020/11/29 | 3065 | macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.tex
+2020/12/19 | 196014 | macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
+2020/11/29 | 2006 | macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.tex
+2020/12/19 | 23269 | macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
2020/11/24 | 2388 | macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.tex
-2020/11/29 | 172561 | macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
-2020/11/24 | 2912 | macros/latex/contrib/reledmac/examples/3-reledpar_mwe.tex
-2020/11/29 | 32053 | macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
+2020/12/19 | 172561 | macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
+2020/11/29 | 2912 | macros/latex/contrib/reledmac/examples/3-reledpar_mwe.tex
+2020/12/19 | 32053 | macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
2020/11/24 | 2027 | macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.tex
-2020/11/29 | 284700 | macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
-2020/11/24 | 20137 | macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.tex
-2020/11/29 | 190058 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
-2020/11/24 | 1665 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.tex
-2020/11/29 | 189290 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
-2020/11/24 | 1627 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.tex
-2020/11/29 | 168066 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
-2020/11/24 | 1553 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.tex
-2020/11/29 | 188622 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
-2020/11/29 | 189692 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
-2020/11/24 | 1644 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.tex
-2020/11/24 | 1603 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.tex
-2020/11/29 | 188675 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
-2020/11/24 | 1609 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.tex
-2020/11/29 | 188809 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
-2020/11/24 | 1611 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.tex
-2020/11/29 | 209918 | macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
-2020/11/24 | 13642 | macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.tex
-2020/11/29 | 208856 | macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
-2020/11/24 | 12681 | macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.tex
-2020/11/29 | 201188 | macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
-2020/11/24 | 3005 | macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.tex
-2020/11/29 | 292929 | macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
-2020/11/24 | 5587 | macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.tex
-2020/11/29 | 200260 | macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
-2020/11/24 | 11558 | macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.tex
-2020/11/29 | 221533 | macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
-2020/11/24 | 10033 | macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.tex
-2020/11/29 | 246187 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
-2020/11/24 | 43045 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.tex
-2020/11/29 | 200801 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
-2020/11/24 | 6540 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.tex
-2020/11/29 | 196882 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
-2020/11/24 | 4504 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.tex
-2020/11/29 | 297242 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
-2020/11/24 | 9314 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.tex
-2020/11/29 | 203241 | macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
-2020/11/24 | 8510 | macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.tex
-2020/11/29 | 192355 | macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
-2020/11/24 | 2157 | macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.tex
+2020/12/19 | 284700 | macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
+2020/11/29 | 20137 | macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.tex
+2020/12/19 | 190058 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
+2020/11/29 | 1665 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.tex
+2020/12/19 | 189290 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
+2020/11/29 | 1627 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.tex
+2020/12/19 | 168066 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
+2020/11/29 | 1553 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.tex
+2020/12/19 | 188622 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
+2020/12/19 | 189692 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
+2020/11/29 | 1644 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.tex
+2020/11/29 | 1603 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.tex
+2020/12/19 | 188675 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
+2020/11/29 | 1609 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.tex
+2020/12/19 | 188809 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
+2020/11/29 | 1611 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.tex
+2020/12/19 | 209918 | macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
+2020/11/29 | 13642 | macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.tex
+2020/12/19 | 208856 | macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
+2020/11/29 | 12681 | macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.tex
+2020/12/19 | 201188 | macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
+2020/11/29 | 3005 | macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.tex
+2020/12/19 | 292929 | macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
+2020/11/29 | 5587 | macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.tex
+2020/12/19 | 200260 | macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
+2020/11/29 | 11558 | macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.tex
+2020/12/19 | 221533 | macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
+2020/11/29 | 10033 | macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.tex
+2020/12/19 | 246187 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
+2020/11/29 | 43045 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.tex
+2020/12/19 | 200801 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
+2020/11/29 | 6540 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.tex
+2020/12/19 | 196882 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
+2020/11/29 | 4504 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.tex
+2020/12/19 | 297242 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
+2020/11/29 | 9314 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.tex
+2020/12/19 | 203241 | macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
+2020/11/29 | 8510 | macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.tex
+2020/12/19 | 192355 | macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
+2020/11/29 | 2157 | macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.tex
2020/11/24 | 49 | macros/latex/contrib/reledmac/examples/latexmkrc
-2020/11/24 | 816 | macros/latex/contrib/reledmac/examples/makefile
+2020/11/29 | 816 | macros/latex/contrib/reledmac/examples/makefile
2020/11/24 | 2269 | macros/latex/contrib/reledmac/examples/reledmac.xdy
2020/11/24 | 16 | macros/latex/contrib/reledmac/latexmkrc
2020/11/29 | 1718 | macros/latex/contrib/reledmac/makefile
2020/11/24 | 3495 | macros/latex/contrib/reledmac/migration.dtx
2020/11/29 | 357849 | macros/latex/contrib/reledmac/migration.pdf
2020/11/29 | 3962 | macros/latex/contrib/reledmac/README.md
-2020/11/29 | 888580 | macros/latex/contrib/reledmac/reledmac.dtx
+2020/12/19 | 888720 | macros/latex/contrib/reledmac/reledmac.dtx
2020/11/24 | 2691 | macros/latex/contrib/reledmac/reledmac.ins
-2020/11/29 | 2021684 | macros/latex/contrib/reledmac/reledmac.pdf
+2020/12/19 | 2021691 | macros/latex/contrib/reledmac/reledmac.pdf
2020/11/29 | 306011 | macros/latex/contrib/reledmac/reledpar.dtx
2020/11/24 | 2638 | macros/latex/contrib/reledmac/reledpar.ins
-2020/11/29 | 986955 | macros/latex/contrib/reledmac/reledpar.pdf
-2020/11/29 | 13285125 | macros/latex/contrib/reledmac.zip
+2020/12/19 | 986981 | macros/latex/contrib/reledmac/reledpar.pdf
+2020/12/20 | 13285013 | macros/latex/contrib/reledmac.zip
1999/02/05 | 10370 | macros/latex/contrib/relenc/2sidedoc.sty
2011/04/06 | 6770 | macros/latex/contrib/relenc/README
1999/02/05 | 13969 | macros/latex/contrib/relenc/reldemo.tex
@@ -214482,20 +214540,21 @@
2020/06/02 | 3788 | macros/luatex/generic/luavlna/luavlna.tex
2020/06/02 | 3321 | macros/luatex/generic/luavlna/README.md
2020/06/02 | 103067 | macros/luatex/generic/luavlna.zip
-2020/07/20 | 8816 | macros/luatex/generic/luaxml/luaxml-cssquery.lua
-2020/07/20 | 15874 | macros/luatex/generic/luaxml/luaxml-domobject.lua
-2020/07/20 | 1352 | macros/luatex/generic/luaxml/luaxml-entities.lua
-2020/07/20 | 11332 | macros/luatex/generic/luaxml/luaxml-mod-handler.lua
-2020/07/20 | 20712 | macros/luatex/generic/luaxml/luaxml-mod-xml.lua
-2020/07/20 | 41070 | macros/luatex/generic/luaxml/luaxml-namedentities.lua
-2020/07/20 | 1484 | macros/luatex/generic/luaxml/luaxml-parse-query.lua
-2020/07/20 | 99665 | macros/luatex/generic/luaxml/luaxml.pdf
-2020/07/20 | 2265 | macros/luatex/generic/luaxml/luaxml-pretty.lua
-2020/07/20 | 1230 | macros/luatex/generic/luaxml/luaxml-stack.lua
-2020/07/20 | 3239 | macros/luatex/generic/luaxml/luaxml-testxml.lua
-2020/07/20 | 21581 | macros/luatex/generic/luaxml/luaxml.tex
-2020/07/20 | 1155 | macros/luatex/generic/luaxml/README
-2020/07/20 | 136891 | macros/luatex/generic/luaxml.zip
+2020/12/20 | 14954 | macros/luatex/generic/luaxml/luaxml-cssquery.lua
+2020/12/20 | 15891 | macros/luatex/generic/luaxml/luaxml-domobject.lua
+2020/12/20 | 1357 | macros/luatex/generic/luaxml/luaxml-entities.lua
+2020/12/20 | 11332 | macros/luatex/generic/luaxml/luaxml-mod-handler.lua
+2020/12/20 | 20712 | macros/luatex/generic/luaxml/luaxml-mod-xml.lua
+2020/12/20 | 41032 | macros/luatex/generic/luaxml/luaxml-namedentities.lua
+2020/12/20 | 2109 | macros/luatex/generic/luaxml/luaxml-parse-query.lua
+2020/12/20 | 107935 | macros/luatex/generic/luaxml/luaxml.pdf
+2020/12/20 | 2265 | macros/luatex/generic/luaxml/luaxml-pretty.lua
+2020/12/20 | 1230 | macros/luatex/generic/luaxml/luaxml-stack.lua
+2020/12/20 | 3239 | macros/luatex/generic/luaxml/luaxml-testxml.lua
+2020/12/20 | 24614 | macros/luatex/generic/luaxml/luaxml.tex
+2020/12/20 | 4233 | macros/luatex/generic/luaxml/luaxml-transform.lua
+2020/12/20 | 1155 | macros/luatex/generic/luaxml/README
+2020/12/20 | 149137 | macros/luatex/generic/luaxml.zip
2020/10/23 | 12610 | macros/luatex/generic/nodetree/nodetree.dtx
2020/10/23 | 2250 | macros/luatex/generic/nodetree/nodetree.ins
2020/10/23 | 43720 | macros/luatex/generic/nodetree/nodetree.lua
@@ -260845,13 +260904,13 @@
2019/02/28 | 388 | systems/texlive/tlnet/archive/fontools.amd64-freebsd.r25997.tar.xz
2019/02/28 | 388 | systems/texlive/tlnet/archive/fontools.amd64-netbsd.r30191.tar.xz
2019/02/28 | 384 | systems/texlive/tlnet/archive/fontools.armhf-linux.r30015.tar.xz
-2020/07/31 | 125148 | systems/texlive/tlnet/archive/fontools.doc.r55997.tar.xz
+2020/12/20 | 125544 | systems/texlive/tlnet/archive/fontools.doc.r57171.tar.xz
2019/02/28 | 384 | systems/texlive/tlnet/archive/fontools.i386-cygwin.r25997.tar.xz
2019/02/28 | 388 | systems/texlive/tlnet/archive/fontools.i386-freebsd.r25997.tar.xz
2019/02/28 | 384 | systems/texlive/tlnet/archive/fontools.i386-linux.r25997.tar.xz
2019/02/28 | 384 | systems/texlive/tlnet/archive/fontools.i386-netbsd.r30191.tar.xz
2019/02/28 | 384 | systems/texlive/tlnet/archive/fontools.i386-solaris.r25997.tar.xz
-2020/07/31 | 50204 | systems/texlive/tlnet/archive/fontools.r55997.tar.xz
+2020/12/20 | 50068 | systems/texlive/tlnet/archive/fontools.r57171.tar.xz
2019/02/28 | 728 | systems/texlive/tlnet/archive/fontools.win32.r25997.tar.xz
2019/02/28 | 388 | systems/texlive/tlnet/archive/fontools.x86_64-cygwin.r33557.tar.xz
2019/02/28 | 396 | systems/texlive/tlnet/archive/fontools.x86_64-darwinlegacy.r43871.tar.xz
@@ -263593,9 +263652,9 @@
2020/06/24 | 1348 | systems/texlive/tlnet/archive/menucard.r55643.tar.xz
2020/06/24 | 3764 | systems/texlive/tlnet/archive/menucard.source.r55643.tar.xz
2019/02/28 | 115344 | systems/texlive/tlnet/archive/menu.doc.r15878.tar.xz
-2020/11/01 | 580224 | systems/texlive/tlnet/archive/menukeys.doc.r56822.tar.xz
-2020/11/01 | 5988 | systems/texlive/tlnet/archive/menukeys.r56822.tar.xz
-2020/11/01 | 18352 | systems/texlive/tlnet/archive/menukeys.source.r56822.tar.xz
+2020/12/20 | 573880 | systems/texlive/tlnet/archive/menukeys.doc.r57172.tar.xz
+2020/12/20 | 6072 | systems/texlive/tlnet/archive/menukeys.r57172.tar.xz
+2020/12/20 | 18496 | systems/texlive/tlnet/archive/menukeys.source.r57172.tar.xz
2019/02/28 | 2132 | systems/texlive/tlnet/archive/menu.r15878.tar.xz
2019/02/28 | 5648 | systems/texlive/tlnet/archive/menu.source.r15878.tar.xz
2020/08/07 | 24311052 | systems/texlive/tlnet/archive/mercatormap.doc.r56060.tar.xz
@@ -264262,8 +264321,8 @@
2019/02/28 | 4000 | systems/texlive/tlnet/archive/nevelok.source.r39029.tar.xz
2019/02/28 | 407624 | systems/texlive/tlnet/archive/newcommand.doc.r18704.tar.xz
2019/02/28 | 496 | systems/texlive/tlnet/archive/newcommand.r18704.tar.xz
-2020/12/15 | 1662560 | systems/texlive/tlnet/archive/newcomputermodern.doc.r57138.tar.xz
-2020/12/15 | 4535036 | systems/texlive/tlnet/archive/newcomputermodern.r57138.tar.xz
+2020/12/20 | 1662584 | systems/texlive/tlnet/archive/newcomputermodern.doc.r57170.tar.xz
+2020/12/20 | 4539132 | systems/texlive/tlnet/archive/newcomputermodern.r57170.tar.xz
2019/02/28 | 1632 | systems/texlive/tlnet/archive/newenviron.doc.r29331.tar.xz
2019/02/28 | 2488 | systems/texlive/tlnet/archive/newenviron.r29331.tar.xz
2019/02/28 | 147644 | systems/texlive/tlnet/archive/newfile.doc.r15878.tar.xz
@@ -266129,9 +266188,9 @@
2019/02/28 | 7580 | systems/texlive/tlnet/archive/rjlparshap.source.r15878.tar.xz
2019/02/28 | 59272 | systems/texlive/tlnet/archive/rlepsf.doc.r19082.tar.xz
2019/02/28 | 3012 | systems/texlive/tlnet/archive/rlepsf.r19082.tar.xz
-2020/12/12 | 248896 | systems/texlive/tlnet/archive/rmathbr.doc.r57114.tar.xz
-2020/12/12 | 8364 | systems/texlive/tlnet/archive/rmathbr.r57114.tar.xz
-2020/12/12 | 13896 | systems/texlive/tlnet/archive/rmathbr.source.r57114.tar.xz
+2020/12/20 | 252508 | systems/texlive/tlnet/archive/rmathbr.doc.r57173.tar.xz
+2020/12/20 | 8656 | systems/texlive/tlnet/archive/rmathbr.r57173.tar.xz
+2020/12/20 | 14392 | systems/texlive/tlnet/archive/rmathbr.source.r57173.tar.xz
2020/03/04 | 553688 | systems/texlive/tlnet/archive/rmpage.doc.r54080.tar.xz
2020/03/04 | 61812 | systems/texlive/tlnet/archive/rmpage.r54080.tar.xz
2020/03/24 | 394584 | systems/texlive/tlnet/archive/roboto.doc.r54512.tar.xz
@@ -266298,8 +266357,8 @@
2020/03/09 | 424 | systems/texlive/tlnet/archive/scheme-minimal.r54191.tar.xz
2020/03/09 | 636 | systems/texlive/tlnet/archive/scheme-small.r54191.tar.xz
2020/03/04 | 736 | systems/texlive/tlnet/archive/scheme-tetex.r54074.tar.xz
-2020/12/02 | 201472 | systems/texlive/tlnet/archive/scholax.doc.r57042.tar.xz
-2020/12/02 | 1883144 | systems/texlive/tlnet/archive/scholax.r57042.tar.xz
+2020/12/20 | 201476 | systems/texlive/tlnet/archive/scholax.doc.r57169.tar.xz
+2020/12/20 | 1883320 | systems/texlive/tlnet/archive/scholax.r57169.tar.xz
2020/07/15 | 904720 | systems/texlive/tlnet/archive/schooldocs.doc.r55838.tar.xz
2020/07/15 | 3028 | systems/texlive/tlnet/archive/schooldocs.r55838.tar.xz
2020/07/15 | 10336 | systems/texlive/tlnet/archive/schooldocs.source.r55838.tar.xz
@@ -267409,7 +267468,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
-2020/12/19 | 218656 | systems/texlive/tlnet/archive/texlive-scripts.doc.r57164.tar.xz
+2020/12/20 | 218656 | systems/texlive/tlnet/archive/texlive-scripts.doc.r57168.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
@@ -267433,7 +267492,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
-2020/12/19 | 132144 | systems/texlive/tlnet/archive/texlive-scripts.r57164.tar.xz
+2020/12/20 | 132124 | systems/texlive/tlnet/archive/texlive-scripts.r57168.tar.xz
2020/08/24 | 36336 | systems/texlive/tlnet/archive/texlive-scripts.win32.r56157.tar.xz
2020/05/17 | 588 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r55172.tar.xz
2020/05/12 | 592 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-darwinlegacy.r55117.tar.xz
@@ -269093,16 +269152,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
2020/12/03 | 105972 | systems/texlive/tlnet/install-tl
-2020/12/19 | 5501026 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2020/12/19 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2020/12/19 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2020/12/20 | 5500900 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2020/12/20 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2020/12/20 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2020/08/23 | 4889 | systems/texlive/tlnet/install-tl-windows.bat
-2020/12/19 | 19383285 | systems/texlive/tlnet/install-tl-windows.exe
-2020/12/19 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2020/12/19 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2020/12/19 | 24270384 | systems/texlive/tlnet/install-tl.zip
-2020/12/19 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2020/12/19 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2020/12/20 | 19386273 | systems/texlive/tlnet/install-tl-windows.exe
+2020/12/20 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2020/12/20 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2020/12/20 | 24270379 | systems/texlive/tlnet/install-tl.zip
+2020/12/20 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2020/12/20 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2020/03/05 | 1215 | systems/texlive/tlnet/README.md
2020/04/06 | 5961 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
2016/04/12 | 600 | systems/texlive/tlnet/tlpkg/gpg/random_seed
@@ -269111,7 +269170,7 @@
2020/04/06 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2020/11/22 | 49274 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2020/12/17 | 6660 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2020/12/19 | 6612 | 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
2018/04/29 | 13647 | systems/texlive/tlnet/tlpkg/installer/DirSelect.pm
@@ -269158,12 +269217,12 @@
2020/05/17 | 20322 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2020/05/03 | 4786 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2020/09/22 | 27563 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2020/12/19 | 16752034 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2020/12/19 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2020/12/20 | 16752038 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2020/12/20 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2020/05/13 | 86417 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2020/12/19 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2020/12/19 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2020/12/19 | 2254556 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/12/20 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/12/20 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2020/12/20 | 2255136 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2020/04/15 | 58761 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2020/03/20 | 41736 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2020/05/11 | 15010 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -273729,7 +273788,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
-2020/12/19 | 551128 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/12/20 | 551128 | 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
@@ -274907,9 +274966,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2020/12/14 | 39268 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2020/12/14 | 43043 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/12/19 | 205133 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2020/12/19 | 1230532 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2020/12/19 | 1148115 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/12/20 | 205128 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/12/20 | 1230582 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/12/20 | 1148353 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2020/12/14 | 13302 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2020/12/14 | 14143 | 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
@@ -275066,187 +275125,187 @@
2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma
2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma
2020/09/06 | 231669 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
-2020/12/19 | 551121 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2020/12/19 | 50441 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2020/12/19 | 55998 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2020/12/19 | 964964 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2020/12/19 | 1077044 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2020/12/19 | 28621 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2020/12/19 | 30932 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2020/12/19 | 28905 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2020/12/19 | 33978 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2020/12/19 | 49795 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2020/12/19 | 57298 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2020/12/19 | 84960 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2020/12/19 | 93682 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2020/12/19 | 65713 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2020/12/19 | 73391 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2020/12/19 | 27017 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2020/12/19 | 30690 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2020/12/19 | 329592 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2020/12/19 | 392059 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2020/12/19 | 32345 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2020/12/19 | 36313 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2020/12/19 | 50545 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2020/12/19 | 55631 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2020/12/19 | 204127 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2020/12/19 | 224200 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2020/12/19 | 179448 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2020/12/19 | 195372 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2020/12/19 | 51924 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2020/12/19 | 58634 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2020/12/19 | 20845 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2020/12/19 | 23022 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2020/12/19 | 460648 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2020/12/19 | 45331 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2020/12/19 | 51137 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2020/12/19 | 279853 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2020/12/19 | 318324 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2020/12/19 | 40888 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2020/12/19 | 45013 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2020/12/19 | 115932 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2020/12/19 | 130506 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2020/12/19 | 1278048 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2020/12/19 | 1413906 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2020/12/19 | 86648 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2020/12/19 | 98562 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2020/12/19 | 42928 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2020/12/19 | 47700 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2020/12/19 | 24884 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2020/12/19 | 27768 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2020/12/19 | 55873 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2020/12/19 | 62919 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2020/12/19 | 133575 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2020/12/19 | 151973 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2020/12/19 | 72875 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2020/12/19 | 77282 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2020/12/19 | 71733 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2020/12/19 | 80732 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2020/12/19 | 258255 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2020/12/19 | 295208 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2020/12/19 | 21866 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2020/12/19 | 24806 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2020/12/19 | 99310 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2020/12/19 | 114670 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2020/12/19 | 63595 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2020/12/19 | 72730 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2020/12/19 | 94465 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2020/12/19 | 113608 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2020/12/19 | 37705 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2020/12/19 | 42249 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2020/12/19 | 482442 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2020/12/19 | 567636 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2020/12/19 | 147018 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2020/12/19 | 159541 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2020/12/19 | 94621 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2020/12/19 | 108924 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2020/12/19 | 16000 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2020/12/19 | 17644 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2020/12/19 | 27992 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2020/12/19 | 29686 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2020/12/19 | 623280 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2020/12/19 | 677613 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2020/12/19 | 531319 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2020/12/19 | 596933 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2020/12/19 | 557616 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2020/12/19 | 599538 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2020/12/19 | 93713 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2020/12/19 | 102826 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2020/12/19 | 1713628 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2020/12/19 | 1951868 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2020/12/19 | 67420 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2020/12/19 | 74034 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2020/12/19 | 27083 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2020/12/19 | 31183 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2020/12/19 | 7573 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2020/12/19 | 8573 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2020/12/19 | 194229 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2020/12/19 | 212191 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2020/12/19 | 248675 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2020/12/19 | 282456 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2020/12/19 | 96476 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2020/12/19 | 101471 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2020/12/19 | 58523 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2020/12/19 | 65910 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2020/12/19 | 119080 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2020/12/19 | 130466 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2020/12/19 | 144033 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2020/12/19 | 160025 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2020/12/19 | 199323 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2020/12/19 | 179942 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2020/12/19 | 64501 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2020/12/19 | 74263 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2020/12/19 | 31026 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2020/12/19 | 34792 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2020/12/19 | 36669 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2020/12/19 | 41056 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2020/12/19 | 42636 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2020/12/19 | 46544 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2020/12/19 | 45802 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2020/12/19 | 52181 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2020/12/19 | 192728 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2020/12/19 | 210492 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2020/12/19 | 35171 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2020/12/19 | 39361 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2020/12/19 | 736572 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2020/12/19 | 809954 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2020/12/19 | 197792 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2020/12/19 | 202700 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2020/12/19 | 207337 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2020/12/19 | 243096 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2020/12/19 | 78398 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2020/12/19 | 87420 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2020/12/19 | 1168654 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2020/12/19 | 1302917 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2020/12/19 | 19948 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2020/12/19 | 23640 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2020/12/19 | 31242 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2020/12/19 | 36959 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2020/12/19 | 63284 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2020/12/19 | 71551 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2020/12/19 | 42668 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2020/12/19 | 50932 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2020/12/19 | 1127660 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2020/12/19 | 1246215 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2020/12/19 | 42082 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2020/12/19 | 51471 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2020/12/19 | 56005 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2020/12/19 | 59589 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2020/12/19 | 26916 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2020/12/19 | 29220 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2020/12/19 | 16001 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2020/12/19 | 17764 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2020/12/19 | 63093 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2020/12/19 | 69679 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2020/12/19 | 151768 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2020/12/19 | 165644 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2020/12/19 | 56643 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2020/12/19 | 65233 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2020/12/19 | 97461 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2020/12/19 | 104553 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2020/12/19 | 2513005 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2020/12/19 | 2634436 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2020/12/19 | 54739 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2020/12/19 | 61949 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2020/12/19 | 33113 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2020/12/19 | 36955 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2020/12/19 | 27056 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2020/12/19 | 32914 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2020/12/19 | 65951 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2020/12/19 | 70043 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2020/12/19 | 250951 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2020/12/19 | 280509 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2020/12/19 | 581013 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2020/12/19 | 617334 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2020/12/19 | 38952 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2020/12/19 | 43103 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/12/19 | 205061 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2020/12/19 | 1230955 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2020/12/19 | 1148904 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2020/12/19 | 13305 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2020/12/19 | 14165 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2020/12/20 | 551121 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2020/12/20 | 50443 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2020/12/20 | 55998 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2020/12/20 | 964963 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2020/12/20 | 1077045 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2020/12/20 | 28621 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2020/12/20 | 30933 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2020/12/20 | 28905 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/12/20 | 33980 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/12/20 | 49797 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2020/12/20 | 57299 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2020/12/20 | 84961 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2020/12/20 | 93681 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2020/12/20 | 65714 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2020/12/20 | 73390 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2020/12/20 | 27016 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2020/12/20 | 30688 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2020/12/20 | 329591 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2020/12/20 | 392057 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2020/12/20 | 32344 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2020/12/20 | 36313 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2020/12/20 | 50545 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2020/12/20 | 55631 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2020/12/20 | 204128 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2020/12/20 | 224201 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2020/12/20 | 179447 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2020/12/20 | 195373 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/12/20 | 51924 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2020/12/20 | 58634 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2020/12/20 | 20845 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2020/12/20 | 23021 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2020/12/20 | 460648 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2020/12/20 | 45330 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2020/12/20 | 51137 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2020/12/20 | 279851 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2020/12/20 | 318325 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2020/12/20 | 40889 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2020/12/20 | 45013 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2020/12/20 | 115931 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2020/12/20 | 130507 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2020/12/20 | 1278050 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2020/12/20 | 1413906 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/12/20 | 86649 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2020/12/20 | 98562 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/12/20 | 42928 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2020/12/20 | 47701 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2020/12/20 | 24884 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2020/12/20 | 27768 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2020/12/20 | 55873 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2020/12/20 | 62919 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2020/12/20 | 133576 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2020/12/20 | 151973 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2020/12/20 | 72874 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2020/12/20 | 77283 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2020/12/20 | 71734 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2020/12/20 | 80731 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/12/20 | 258254 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2020/12/20 | 295211 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2020/12/20 | 21867 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2020/12/20 | 24806 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2020/12/20 | 99309 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2020/12/20 | 114671 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2020/12/20 | 63593 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2020/12/20 | 72731 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2020/12/20 | 94466 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2020/12/20 | 113608 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2020/12/20 | 37704 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2020/12/20 | 42249 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2020/12/20 | 482442 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2020/12/20 | 567637 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2020/12/20 | 147021 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2020/12/20 | 159542 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2020/12/20 | 94620 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2020/12/20 | 108925 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2020/12/20 | 16001 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2020/12/20 | 17644 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2020/12/20 | 27991 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2020/12/20 | 29686 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2020/12/20 | 623280 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2020/12/20 | 677615 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2020/12/20 | 531319 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2020/12/20 | 596934 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2020/12/20 | 557620 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2020/12/20 | 599538 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2020/12/20 | 93712 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2020/12/20 | 102827 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2020/12/20 | 1713628 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2020/12/20 | 1951869 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2020/12/20 | 67422 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2020/12/20 | 74034 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/12/20 | 27083 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2020/12/20 | 31182 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2020/12/20 | 7573 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2020/12/20 | 8572 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2020/12/20 | 194227 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2020/12/20 | 212192 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2020/12/20 | 248675 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2020/12/20 | 282457 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2020/12/20 | 96477 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2020/12/20 | 101471 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2020/12/20 | 58523 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2020/12/20 | 65911 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/12/20 | 119079 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2020/12/20 | 130467 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2020/12/20 | 144034 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2020/12/20 | 160026 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2020/12/20 | 199323 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2020/12/20 | 179943 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2020/12/20 | 64501 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2020/12/20 | 74264 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2020/12/20 | 31026 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/12/20 | 34792 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2020/12/20 | 36669 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2020/12/20 | 41057 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2020/12/20 | 42637 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2020/12/20 | 46545 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2020/12/20 | 45802 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2020/12/20 | 52182 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2020/12/20 | 192726 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2020/12/20 | 210493 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2020/12/20 | 35171 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2020/12/20 | 39362 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2020/12/20 | 736572 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2020/12/20 | 809955 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2020/12/20 | 197794 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2020/12/20 | 202700 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2020/12/20 | 207337 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/12/20 | 243096 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2020/12/20 | 78401 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2020/12/20 | 87422 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/12/20 | 1168653 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2020/12/20 | 1302916 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2020/12/20 | 19948 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2020/12/20 | 23639 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2020/12/20 | 31242 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2020/12/20 | 36958 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2020/12/20 | 63285 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2020/12/20 | 71550 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2020/12/20 | 42666 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2020/12/20 | 50934 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2020/12/20 | 1127660 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/12/20 | 1246215 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2020/12/20 | 42082 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2020/12/20 | 51471 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2020/12/20 | 56005 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2020/12/20 | 59590 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2020/12/20 | 26914 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2020/12/20 | 29218 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/12/20 | 16002 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2020/12/20 | 17763 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2020/12/20 | 63093 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2020/12/20 | 69678 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2020/12/20 | 151767 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2020/12/20 | 165643 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/12/20 | 56644 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2020/12/20 | 65235 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2020/12/20 | 97460 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/12/20 | 104553 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2020/12/20 | 2513009 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2020/12/20 | 2634437 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2020/12/20 | 54739 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2020/12/20 | 61947 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2020/12/20 | 33112 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2020/12/20 | 36955 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2020/12/20 | 27056 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2020/12/20 | 32914 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2020/12/20 | 65951 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2020/12/20 | 70045 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2020/12/20 | 250952 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2020/12/20 | 280511 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2020/12/20 | 581008 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2020/12/20 | 617335 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2020/12/20 | 38950 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2020/12/20 | 43100 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2020/12/20 | 205175 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2020/12/20 | 1230287 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2020/12/20 | 1148368 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2020/12/20 | 13304 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2020/12/20 | 14164 | 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
-2020/12/19 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2020/12/20 | 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
@@ -275572,7 +275631,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
2020/10/27 | 357822 | systems/win32/miktex/tm/packages/principia.tar.lzma
-2020/12/19 | 1129 | systems/win32/miktex/tm/packages/pr.ini
+2020/12/20 | 1129 | 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
@@ -276740,7 +276799,7 @@
2020/12/17 | 5176928 | systems/win32/w32tex/aleph-w32.tar.xz
2020/11/16 | 65991060 | systems/win32/w32tex/biblatex-biber.tar.xz
2016/12/13 | 65971452 | systems/win32/w32tex/cbfonts.tar.xz
-2020/12/18 | 754414 | systems/win32/w32tex/ChangeLog
+2020/12/19 | 754488 | 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
@@ -276748,7 +276807,7 @@
2017/06/24 | 644754 | systems/win32/w32tex/ChangeLog.4
2020/10/20 | 23448752 | systems/win32/w32tex/cjkzr.tar.xz
2013/04/27 | 15858676 | systems/win32/w32tex/context-doc.tar.xz
-2020/12/17 | 141670032 | systems/win32/w32tex/context.tar.xz
+2020/12/19 | 141663632 | systems/win32/w32tex/context.tar.xz
2020/12/05 | 911348 | systems/win32/w32tex/cweb-w32.tar.xz
2020/09/21 | 6434128 | systems/win32/w32tex/datetime2.tar.xz
2020/12/05 | 846308 | systems/win32/w32tex/dvi2ps-w32.tar.xz
@@ -276960,7 +277019,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2020/12/20 | 186 | timestamp
+2020/12/21 | 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 b001405ec4..69e8a52c78 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 64663f5751..a766649aa2 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,10 +1,783 @@
-2020/12/19 | 99310 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2020/12/20 | 999 | graphics/circuit_macros/examples/Fuses.m4
+2020/12/20 | 999 | graphics/circuit_macros/doc/FusesMan.m4
+2020/12/20 | 993472 | info/apprendre-a-programmer-en-tex/source/mandelbrot.pdf
+2020/12/20 | 99309 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2020/12/20 | 991 | graphics/circuit_macros/examples/Byte.m4
+2020/12/20 | 988 | graphics/circuit_macros/examples/svg/VariableSVG.m4
+2020/12/20 | 98562 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/12/20 | 9840 | graphics/circuit_macros/examples/tubedefs.m4
+2020/12/20 | 980 | graphics/circuit_macros/examples/Emarrows.m4
+2020/12/20 | 980 | graphics/circuit_macros/doc/EmarrowsMan.m4
+2020/12/20 | 9800 | graphics/circuit_macros/examples/Makefile
+2020/12/20 | 9747 | graphics/circuit_macros/examples/svg/UNO.m4
+2020/12/20 | 97460 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/12/20 | 971 | macros/latex/contrib/easyfloats/doc/preamble/pdfstring.tex
+2020/12/20 | 970 | graphics/circuit_macros/examples/svg/ex15SVG.m4
+2020/12/20 | 9686 | graphics/circuit_macros/examples/ics.m4
+2020/12/20 | 964963 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2020/12/20 | 96477 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2020/12/20 | 960 | graphics/circuit_macros/doc/Flowdiag.m4
+2020/12/20 | 959 | graphics/circuit_macros/examples/svg/FusesSVG.m4
+2020/12/20 | 950156 | graphics/circuit_macros/doc/Circuit_macros.pdf
+2020/12/20 | 947 | graphics/circuit_macros/examples/svg/QuantumSVG.m4
+2020/12/20 | 947 | graphics/circuit_macros/examples/squiggle.m4
+2020/12/20 | 94620 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2020/12/20 | 94474 | graphics/circuit_macros/examples/mf/cct.mf
+2020/12/20 | 94466 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2020/12/20 | 9425 | graphics/circuit_macros/doc/ShiftR.tex
+2020/12/20 | 9380 | graphics/circuit_macros/examples/svg/tstSVG.htmx
+2020/12/20 | 937 | graphics/circuit_macros/examples/svg/ByteSVG.m4
+2020/12/20 | 93712 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2020/12/20 | 93681 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2020/12/20 | 932 | graphics/circuit_macros/examples/Variable.m4
+2020/12/20 | 9276 | graphics/circuit_macros/examples/svg/icsSVG.m4
+2020/12/20 | 926 | graphics/circuit_macros/doc/VariableMan.m4
+2020/12/20 | 920 | macros/latex/contrib/easyfloats/doc/preamble/bibliography.tex
+2020/12/20 | 918 | graphics/circuit_macros/examples/Quantum.m4
+2020/12/20 | 905 | graphics/circuit_macros/examples/birds.m4
+2020/12/20 | 897744 | graphics/circuit_macros/examples/nsvg/examples.pdf
+2020/12/20 | 886 | graphics/circuit_macros/examples/svg/quickSVG.m4
+2020/12/20 | 876477 | graphics/circuit_macros/examples/examples.pdf
+2020/12/20 | 87422 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/12/20 | 86649 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2020/12/20 | 865 | graphics/circuit_macros/examples/ex18.m4
+2020/12/20 | 8656 | systems/texlive/tlnet/archive/rmathbr.r57173.tar.xz
+2020/12/20 | 8572 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2020/12/20 | 855 | graphics/circuit_macros/examples/svg/ex03SVG.m4
+2020/12/20 | 84961 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2020/12/20 | 83734 | info/apprendre-a-programmer-en-tex/source/pg0001.pdf
+2020/12/20 | 8372 | graphics/circuit_macros/examples/exp.m4
+2020/12/20 | 835 | graphics/circuit_macros/doc/Opto.m4
+2020/12/20 | 83475 | info/apprendre-a-programmer-en-tex/source/pg0003.pdf
+2020/12/20 | 83363 | info/apprendre-a-programmer-en-tex/source/pg0002.pdf
+2020/12/20 | 831 | graphics/circuit_macros/doc/GroundsMan.m4
+2020/12/20 | 828 | graphics/circuit_macros/examples/Grounds.m4
+2020/12/20 | 81656 | graphics/circuit_macros/doc/defines.tex
+2020/12/20 | 81505 | graphics/circuit_macros/libgen.m4
+2020/12/20 | 81497 | info/apprendre-a-programmer-en-tex/source/progtexmacro.tex
+2020/12/20 | 810 | graphics/circuit_macros/examples/svg/GroundsSVG.m4
+2020/12/20 | 809955 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2020/12/20 | 80731 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/12/20 | 801 | graphics/circuit_macros/doc/Potentiometers.m4
+2020/12/20 | 793 | graphics/circuit_macros/examples/svg/CountingSVG.m4
+2020/12/20 | 790 | macros/latex/contrib/easyfloats/doc/content/license.tex
+2020/12/20 | 78401 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2020/12/20 | 782 | graphics/circuit_macros/doc/Oblique.m4
+2020/12/20 | 777 | graphics/circuit_macros/examples/Arrester.m4
+2020/12/20 | 776 | graphics/circuit_macros/examples/mf/cct.tfm
+2020/12/20 | 774 | graphics/circuit_macros/examples/quick.m4
+2020/12/20 | 774 | graphics/circuit_macros/doc/quick.m4
+2020/12/20 | 77283 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2020/12/20 | 7721 | graphics/circuit_macros/examples/shapes.m4
+2020/12/20 | 771 | graphics/circuit_macros/examples/Attention.m4
+2020/12/20 | 7673 | graphics/circuit_macros/examples/Chuck.m4
+2020/12/20 | 7573 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2020/12/20 | 7546 | graphics/circuit_macros/examples/svg/RectifiersSVG.m4
+2020/12/20 | 7533 | graphics/circuit_macros/doc/Logic.tex
+2020/12/20 | 7526 | graphics/circuit_macros/examples/svg/shapesSVG.m4
+2020/12/20 | 7503 | graphics/circuit_macros/doc/Headers.tex
+2020/12/20 | 748 | graphics/circuit_macros/examples/svg/Np.m4
+2020/12/20 | 746 | graphics/circuit_macros/examples/Connectors.m4
+2020/12/20 | 745 | graphics/circuit_macros/examples/svg/DecoderSVG.m4
+2020/12/20 | 74264 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2020/12/20 | 741 | graphics/circuit_macros/examples/Incleps.m4
+2020/12/20 | 7418 | graphics/circuit_macros/examples/svg/CsourceSVG.m4
+2020/12/20 | 740 | graphics/circuit_macros/examples/SampleFlow.m4
+2020/12/20 | 74034 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/12/20 | 736572 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2020/12/20 | 73390 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2020/12/20 | 7316 | graphics/circuit_macros/doc/Relay.tex
+2020/12/20 | 72874 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2020/12/20 | 72731 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2020/12/20 | 7207 | macros/latex/contrib/easyfloats/doc/preamble/macros.tex
+2020/12/20 | 7203 | graphics/circuit_macros/examples/svg/lcctSVG.m4
+2020/12/20 | 71734 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2020/12/20 | 715 | graphics/circuit_macros/examples/svg/ConnectorsSVG.m4
+2020/12/20 | 715 | graphics/circuit_macros/examples/psfrag/examplespsfrag.tex
+2020/12/20 | 71550 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2020/12/20 | 713 | fonts/cochineal/tex/uzcochmia.fd
+2020/12/20 | 7113 | graphics/circuit_macros/examples/lcct.m4
+2020/12/20 | 709 | graphics/circuit_macros/examples/Inclpdf.m4
+2020/12/20 | 709956 | fonts/notomath.zip
+2020/12/20 | 706 | graphics/circuit_macros/psfrag.m4
+2020/12/20 | 703 | graphics/circuit_macros/examples/mpost/README-mpost
+2020/12/20 | 7006 | graphics/circuit_macros/examples/Rectifiers.m4
+2020/12/20 | 70045 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2020/12/20 | 69678 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2020/12/20 | 6953 | fonts/cochineal/README
+2020/12/20 | 685 | graphics/circuit_macros/examples/mpost/mptest
+2020/12/20 | 6854 | graphics/circuit_macros/examples/svg/DiniSVG.m4
+2020/12/20 | 6854 | graphics/circuit_macros/examples/Dini.m4
+2020/12/20 | 682 | graphics/circuit_macros/examples/svg/ujtSVG.m4
+2020/12/20 | 677615 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2020/12/20 | 6764 | macros/latex/contrib/easyfloats/doc/preamble/description-links.tex
+2020/12/20 | 67422 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2020/12/20 | 673 | graphics/circuit_macros/examples/ex03.m4
+2020/12/20 | 6640 | info/apprendre-a-programmer-en-tex/README
+2020/12/20 | 660 | graphics/circuit_macros/examples/ujt.m4
+2020/12/20 | 660 | graphics/circuit_macros/doc/ujtMan.m4
+2020/12/20 | 65951 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2020/12/20 | 65911 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/12/20 | 65714 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2020/12/20 | 656 | graphics/circuit_macros/examples/Zcos.m4
+2020/12/20 | 655 | graphics/circuit_macros/examples/Decoder.m4
+2020/12/20 | 6550 | graphics/circuit_macros/doc/Conn.tex
+2020/12/20 | 654 | graphics/circuit_macros/examples/diamond.m4
+2020/12/20 | 654227 | macros/latex/contrib/curve2e/curve2e.pdf
+2020/12/20 | 65235 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2020/12/20 | 645 | graphics/circuit_macros/examples/Floor.m4
+2020/12/20 | 64501 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2020/12/20 | 644 | fonts/notomath/README
+2020/12/20 | 6413 | graphics/circuit_macros/examples/svg/CanLogicSVG.m4
+2020/12/20 | 63 | graphics/circuit_macros/examples/svg/local_init.m4
+2020/12/20 | 6371 | graphics/circuit_macros/examples/CanLogic.m4
+2020/12/20 | 63593 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2020/12/20 | 63285 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2020/12/20 | 63093 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2020/12/20 | 62919 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2020/12/20 | 6243 | graphics/circuit_macros/examples/ASME_Y14-5.m4
+2020/12/20 | 623280 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2020/12/20 | 6216 | graphics/circuit_macros/examples/svg/LgateSVG.m4
+2020/12/20 | 61947 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2020/12/20 | 617335 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2020/12/20 | 617115 | macros/latex/contrib/easyfloats.zip
+2020/12/20 | 6150 | graphics/circuit_macros/examples/svg/Y14-5SVG.m4
+2020/12/20 | 614 | graphics/circuit_macros/doc/BigResistor.m4
+2020/12/20 | 613 | graphics/circuit_macros/examples/tst.tex
+2020/12/20 | 609 | graphics/circuit_macros/examples/svg/diamondSVG.m4
+2020/12/20 | 6072 | systems/texlive/tlnet/archive/menukeys.r57172.tar.xz
+2020/12/20 | 6067 | graphics/circuit_macros/doc/Contacts.tex
+2020/12/20 | 60576 | macros/latex/contrib/easyfloats/easyfloats.dtx
+2020/12/20 | 6003 | graphics/circuit_macros/examples/CSlight.m4
+2020/12/20 | 599538 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2020/12/20 | 5989 | macros/latex/contrib/curve2e/README.txt
+2020/12/20 | 5969 | graphics/circuit_macros/examples/xfig/xfiglib.m4
+2020/12/20 | 596934 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2020/12/20 | 59590 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2020/12/20 | 591 | graphics/circuit_macros/examples/test.m4
+2020/12/20 | 5890 | graphics/circuit_macros/examples/Csource.m4
+2020/12/20 | 5874721 | fonts/cochineal.zip
+2020/12/20 | 58634 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2020/12/20 | 58523 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2020/12/20 | 581008 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2020/12/20 | 573880 | systems/texlive/tlnet/archive/menukeys.doc.r57172.tar.xz
+2020/12/20 | 57299 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2020/12/20 | 571391 | macros/latex/contrib/curve2e/curve2e-manual.pdf
+2020/12/20 | 56881 | macros/latex/contrib/easyfloats/doc/content/documentation.tex
+2020/12/20 | 567637 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2020/12/20 | 566 | macros/latex/contrib/easyfloats/doc/content/titlepage.tex
+2020/12/20 | 56644 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2020/12/20 | 56005 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2020/12/20 | 55998 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2020/12/20 | 55873 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2020/12/20 | 557620 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2020/12/20 | 55631 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2020/12/20 | 5545 | graphics/circuit_macros/doc/Bip.tex
+2020/12/20 | 55406 | graphics/circuit_macros/examples/nsvg/dev/test.svg
+2020/12/20 | 5521 | graphics/circuit_macros/examples/svg/graysurfSVG.m4
+2020/12/20 | 551 | graphics/circuit_macros/examples/Counting.m4
+2020/12/20 | 551128 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/12/20 | 551121 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2020/12/20 | 5502 | graphics/circuit_macros/doc/Emarrows.tex
+2020/12/20 | 5500900 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2020/12/20 | 5478 | graphics/circuit_macros/examples/graysurf.m4
+2020/12/20 | 54739 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2020/12/20 | 546772 | macros/latex/contrib/easyfloats/doc/easyfloats.pdf
+2020/12/20 | 545 | graphics/circuit_macros/examples/svg/RotboxSVG.m4
+2020/12/20 | 5424 | graphics/circuit_macros/examples/svg/Makefile
+2020/12/20 | 538 | graphics/circuit_macros/examples/svg/FontsSVG.m4
+2020/12/20 | 538 | graphics/circuit_macros/examples/svg/AmpTableSVG.m4
+2020/12/20 | 536 | macros/latex/contrib/easyfloats/doc/lexer/latex_atletter.py
+2020/12/20 | 535 | graphics/circuit_macros/doc/Tline.m4
+2020/12/20 | 532 | graphics/circuit_macros/examples/svg/NLGSVG.m4
+2020/12/20 | 531319 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2020/12/20 | 52182 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2020/12/20 | 51924 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2020/12/20 | 518 | graphics/circuit_macros/examples/Rotbox.m4
+2020/12/20 | 5171 | graphics/circuit_macros/examples/svg/FlowSVG.m4
+2020/12/20 | 51471 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2020/12/20 | 5137 | graphics/circuit_macros/doc/NPDT.tex
+2020/12/20 | 51137 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2020/12/20 | 50 | graphics/circuit_macros/doc/bitr.m4
+2020/12/20 | 50934 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2020/12/20 | 5060 | macros/latex/contrib/pdfpc/pdfpc.sty
+2020/12/20 | 5056 | macros/latex/contrib/easyfloats/doc/undescribed-keywords.tex
+2020/12/20 | 50545 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2020/12/20 | 5044 | graphics/circuit_macros/examples/svg/AntiqueClockSVG.m4
+2020/12/20 | 50443 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2020/12/20 | 5042 | graphics/circuit_macros/examples/AntiqueClock.m4
+2020/12/20 | 5035 | macros/latex/contrib/pdfpc/pdfpc-doc.tex
+2020/12/20 | 50068 | systems/texlive/tlnet/archive/fontools.r57171.tar.xz
+2020/12/20 | 499 | graphics/circuit_macros/examples/NLG.m4
+2020/12/20 | 499 | graphics/circuit_macros/doc/NLGMan.m4
+2020/12/20 | 49797 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2020/12/20 | 4964 | graphics/circuit_macros/doc/Multiplexer.tex
+2020/12/20 | 494 | graphics/circuit_macros/examples/AmpTable.m4
+2020/12/20 | 494 | graphics/circuit_macros/doc/AmpTableMan.m4
+2020/12/20 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2020/12/20 | 48 | graphics/circuit_macros/doc/oax.m4
+2020/12/20 | 489 | graphics/circuit_macros/examples/Koch.m4
+2020/12/20 | 483 | graphics/circuit_macros/doc/eboxdims.m4
+2020/12/20 | 482 | graphics/circuit_macros/examples/clock.m4
+2020/12/20 | 482442 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2020/12/20 | 4817 | graphics/circuit_macros/doc/Demultiplexer.tex
+2020/12/20 | 4789 | graphics/circuit_macros/doc/Fuses.tex
+2020/12/20 | 47768 | graphics/circuit_macros/liblog.m4
+2020/12/20 | 47701 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2020/12/20 | 4751 | graphics/circuit_macros/examples/Shaky.m4
+2020/12/20 | 4751 | graphics/circuit_macros/examples/Flow.m4
+2020/12/20 | 4735 | macros/latex/contrib/easyfloats/doc/preamble/markdown.tex
+2020/12/20 | 4687 | graphics/circuit_macros/doc/Makefile
+2020/12/20 | 4683 | graphics/circuit_macros/examples/psfrag/Makefile
+2020/12/20 | 4666 | graphics/circuit_macros/doc/Nport.tex
+2020/12/20 | 46545 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2020/12/20 | 4638 | graphics/circuit_macros/examples/Ball.m4
+2020/12/20 | 462 | graphics/circuit_macros/Copying
+2020/12/20 | 4624 | graphics/circuit_macros/examples/svg/roseSVG.m4
+2020/12/20 | 4615 | graphics/circuit_macros/examples/mf/font.m4
+2020/12/20 | 460 | graphics/circuit_macros/examples/debug1.tex
+2020/12/20 | 460648 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2020/12/20 | 45802 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2020/12/20 | 4569 | graphics/circuit_macros/examples/rose.m4
+2020/12/20 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2020/12/20 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2020/12/20 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2020/12/20 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2020/12/20 | 4539132 | systems/texlive/tlnet/archive/newcomputermodern.r57170.tar.xz
+2020/12/20 | 45330 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2020/12/20 | 45323 | graphics/circuit_macros/examples/Incl.eps.gz
+2020/12/20 | 4521 | graphics/circuit_macros/examples/svg/LyapSVG.m4
+2020/12/20 | 45013 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2020/12/20 | 449 | graphics/circuit_macros/doc/woodchips.m4
+2020/12/20 | 4489 | graphics/circuit_macros/examples/fet.m4
+2020/12/20 | 4489 | graphics/circuit_macros/doc/fetMan.m4
+2020/12/20 | 4459 | graphics/circuit_macros/examples/Lyap.m4
+2020/12/20 | 442 | graphics/circuit_macros/examples/Wheat.m4
+2020/12/20 | 4337 | graphics/circuit_macros/examples/svg/AlogixSVG.m4
+2020/12/20 | 4313 | graphics/circuit_macros/examples/ex09.m4
+2020/12/20 | 43100 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2020/12/20 | 4309 | graphics/circuit_macros/examples/svg/SwitchesSVG.m4
+2020/12/20 | 4305 | graphics/circuit_macros/examples/Euro.m4
+2020/12/20 | 42928 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2020/12/20 | 4288 | graphics/circuit_macros/examples/control.m4
+2020/12/20 | 42666 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2020/12/20 | 42637 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2020/12/20 | 4258 | graphics/circuit_macros/examples/svg/BtreeSVG.m4
+2020/12/20 | 4247 | graphics/circuit_macros/examples/mpost/Makefile
+2020/12/20 | 4233 | macros/luatex/generic/luaxml/luaxml-transform.lua
+2020/12/20 | 422 | graphics/circuit_macros/examples/svg/GrayCodeSVG.m4
+2020/12/20 | 42249 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2020/12/20 | 421 | graphics/circuit_macros/examples/GrayCode.m4
+2020/12/20 | 421 | graphics/circuit_macros/doc/Sinus.m4
+2020/12/20 | 42082 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2020/12/20 | 4205 | graphics/circuit_macros/examples/Alogix.m4
+2020/12/20 | 419 | graphics/circuit_macros/examples/svg/SixpoleSVG.m4
+2020/12/20 | 419 | graphics/circuit_macros/examples/Sixpole.m4
+2020/12/20 | 418 | graphics/circuit_macros/examples/mpost/tstmpost.tex
+2020/12/20 | 417 | graphics/circuit_macros/examples/svg/SQUIDSVG.m4
+2020/12/20 | 4178 | graphics/circuit_macros/doc/Tgate.tex
+2020/12/20 | 416 | graphics/circuit_macros/examples/testpdf.tex
+2020/12/20 | 4119 | graphics/circuit_macros/examples/svg/ex09SVG.m4
+2020/12/20 | 41057 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2020/12/20 | 41032 | macros/luatex/generic/luaxml/luaxml-namedentities.lua
+2020/12/20 | 409 | graphics/circuit_macros/examples/mpost/examplesmpost.tex
+2020/12/20 | 40889 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2020/12/20 | 4079 | graphics/circuit_macros/INSTALL
+2020/12/20 | 4073 | graphics/circuit_macros/doc/Circuit_macros.bib
+2020/12/20 | 404 | graphics/circuit_macros/doc/Series.m4
+2020/12/20 | 4012401 | info/apprendre-a-programmer-en-tex/output/apprendre-a-programmer-en-tex.pdf
+2020/12/20 | 4003 | graphics/circuit_macros/examples/svg/InclepsSVG.m4
+2020/12/20 | 39908 | graphics/circuit_macros/examples/nsvg/dev/test-1.svg
+2020/12/20 | 3973 | graphics/circuit_macros/examples/Switches.m4
+2020/12/20 | 3973 | graphics/circuit_macros/doc/SwitchesMan.m4
+2020/12/20 | 3954 | graphics/circuit_macros/examples/PushPull.m4
+2020/12/20 | 39362 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2020/12/20 | 392057 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2020/12/20 | 3911 | graphics/circuit_macros/examples/oFlow.m4
+2020/12/20 | 39113 | info/apprendre-a-programmer-en-tex/source/vignette.png
+2020/12/20 | 38950 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2020/12/20 | 387 | graphics/circuit_macros/doc/lrarrows.m4
+2020/12/20 | 3836 | graphics/circuit_macros/examples/svg/fetSVG.m4
+2020/12/20 | 382 | graphics/circuit_macros/examples/tikz.tex
+2020/12/20 | 3825 | graphics/circuit_macros/examples/svg/recycleSVG.m4
+2020/12/20 | 3825 | graphics/circuit_macros/examples/recycle.m4
+2020/12/20 | 380 | graphics/circuit_macros/examples/SQUID.m4
+2020/12/20 | 3785 | graphics/circuit_macros/examples/Mixer.m4
+2020/12/20 | 3779 | graphics/circuit_macros/examples/svg/PushPullSVG.m4
+2020/12/20 | 37704 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2020/12/20 | 3756 | graphics/circuit_macros/examples/svg/randomSVG.m4
+2020/12/20 | 3727 | graphics/circuit_macros/examples/random.m4
+2020/12/20 | 371 | graphics/circuit_macros/examples/psfrag/tstpsfrag.tex
+2020/12/20 | 370 | graphics/circuit_macros/examples/snake.m4
+2020/12/20 | 369 | graphics/circuit_macros/doc/sampleIC.m4
+2020/12/20 | 36958 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2020/12/20 | 36955 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2020/12/20 | 366 | macros/latex/contrib/easyfloats/DEPENDS.txt
+2020/12/20 | 36669 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2020/12/20 | 365 | graphics/circuit_macros/examples/rotellipse.m4
+2020/12/20 | 36472 | graphics/circuit_macros/examples/nsvg/dev/test.tex
+2020/12/20 | 3646 | graphics/circuit_macros/examples/svg/ContactSVG.m4
+2020/12/20 | 3631 | graphics/circuit_macros/examples/svg/wormSVG.m4
+2020/12/20 | 36313 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2020/12/20 | 3618 | macros/latex/contrib/easyfloats/doc/easyfloats.bib
+2020/12/20 | 3567 | graphics/circuit_macros/examples/svg/ButtonsSVG.m4
+2020/12/20 | 353 | graphics/circuit_macros/examples/windows.m4
+2020/12/20 | 353 | graphics/circuit_macros/examples/svg/windows.m4
+2020/12/20 | 35308 | graphics/circuit_macros/examples/nsvg/dev/test.pdf
+2020/12/20 | 3522 | graphics/circuit_macros/examples/svg/ex12SVG.m4
+2020/12/20 | 35171 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2020/12/20 | 3508 | graphics/circuit_macros/examples/Buttons.m4
+2020/12/20 | 3489 | graphics/circuit_macros/examples/svg/MixerSVG.m4
+2020/12/20 | 34792 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2020/12/20 | 3473 | graphics/circuit_macros/examples/svg/MCSVG.m4
+2020/12/20 | 3426395 | fonts/scholax.zip
+2020/12/20 | 34224145 | info/apprendre-a-programmer-en-tex.zip
+2020/12/20 | 3404 | fonts/scholax/tfm/zncbmi.tfm
+2020/12/20 | 3400 | fonts/scholax/tfm/zncfmi.tfm
+2020/12/20 | 33980 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/12/20 | 3396 | fonts/scholax/tfm/zncmi.tfm
+2020/12/20 | 3395920 | graphics/circuit_macros.zip
+2020/12/20 | 3390 | graphics/circuit_macros/examples/svg/ex05SVG.m4
+2020/12/20 | 337 | graphics/circuit_macros/examples/xfig/Makefile
+2020/12/20 | 3372 | fonts/scholax/tfm/zncfbmi.tfm
+2020/12/20 | 335917 | info/apprendre-a-programmer-en-tex/output/progtexcode.txt
+2020/12/20 | 3346 | graphics/circuit_macros/examples/Windings.m4
+2020/12/20 | 3346 | graphics/circuit_macros/doc/WindingsMan.m4
+2020/12/20 | 3339 | graphics/circuit_macros/examples/ex12.m4
+2020/12/20 | 3326 | graphics/circuit_macros/examples/Contact.m4
+2020/12/20 | 3326 | graphics/circuit_macros/doc/ContactMan.m4
+2020/12/20 | 3321 | graphics/circuit_macros/examples/thyristor.m4
+2020/12/20 | 3321 | graphics/circuit_macros/doc/thyristorMan.m4
+2020/12/20 | 33112 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2020/12/20 | 3310 | graphics/circuit_macros/examples/svg/thyristorSVG.m4
+2020/12/20 | 32 | graphics/circuit_macros/examples/Incl.eps.bb
+2020/12/20 | 329 | graphics/circuit_macros/doc/FF.m4
+2020/12/20 | 329591 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2020/12/20 | 32914 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2020/12/20 | 3290 | graphics/circuit_macros/examples/svg/sfgSVG.m4
+2020/12/20 | 3239 | macros/luatex/generic/luaxml/luaxml-testxml.lua
+2020/12/20 | 32344 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2020/12/20 | 3206 | graphics/circuit_macros/examples/svg/controlSVG.m4
+2020/12/20 | 3183 | graphics/circuit_macros/doc/NLG.tex
+2020/12/20 | 318325 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2020/12/20 | 317 | graphics/circuit_macros/examples/psfrag/README-psfrag.txt
+2020/12/20 | 3175 | graphics/circuit_macros/examples/Blogix.m4
+2020/12/20 | 3133 | macros/latex/contrib/easyfloats/doc/content/other-packages.tex
+2020/12/20 | 31242 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2020/12/20 | 31182 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2020/12/20 | 31026 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/12/20 | 3098 | macros/latex/contrib/easyfloats/easyfloats.ins
+2020/12/20 | 30933 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2020/12/20 | 3091 | graphics/circuit_macros/examples/svg/TtreeSVG.m4
+2020/12/20 | 30688 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2020/12/20 | 306184 | info/apprendre-a-programmer-en-tex/fonts/GMC.zip
+2020/12/20 | 2994 | graphics/circuit_macros/examples/svg/WindingsSVG.m4
+2020/12/20 | 2989 | graphics/circuit_macros/examples/svg/AutoencoderSVG.m4
+2020/12/20 | 2986 | graphics/circuit_macros/examples/MC.m4
+2020/12/20 | 29772 | graphics/circuit_macros/examples/Incl.pdf
+2020/12/20 | 29686 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2020/12/20 | 295211 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2020/12/20 | 29218 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/12/20 | 2912 | graphics/circuit_macros/doc/Workflow.m4
+2020/12/20 | 29074 | graphics/circuit_macros/doc/CctTable.tex
+2020/12/20 | 28905 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/12/20 | 28621 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2020/12/20 | 2854 | graphics/circuit_macros/examples/nsvg/dev/tikztosvg
+2020/12/20 | 2834 | graphics/circuit_macros/postscript.m4
+2020/12/20 | 2828 | graphics/circuit_macros/examples/README-examples
+2020/12/20 | 2824 | fonts/scholax/vf/zncbmi.vf
+2020/12/20 | 282457 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2020/12/20 | 280511 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2020/12/20 | 2799 | graphics/circuit_macros/examples/worm.m4
+2020/12/20 | 27991 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2020/12/20 | 279851 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2020/12/20 | 2792 | graphics/circuit_macros/examples/OpAmpFilter.m4
+2020/12/20 | 2788 | fonts/scholax/vf/zncfbmi.vf
+2020/12/20 | 27768 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2020/12/20 | 27712 | macros/latex/contrib/easyfloats/doc/preamble/examplecode.tex
+2020/12/20 | 2761 | macros/latex/contrib/easyfloats/doc/links.tex
+2020/12/20 | 2761 | graphics/circuit_macros/examples/sfg.m4
+2020/12/20 | 2743 | fonts/scholax/README
+2020/12/20 | 2736 | graphics/circuit_macros/examples/CctTable.m4
+2020/12/20 | 2735 | graphics/circuit_macros/doc/CctTableMan.m4
+2020/12/20 | 2725 | graphics/circuit_macros/examples/nsvg/Makefile
+2020/12/20 | 2720 | graphics/circuit_macros/examples/svg/AudioSVG.m4
+2020/12/20 | 27083 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2020/12/20 | 27056 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2020/12/20 | 27016 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2020/12/20 | 26 | graphics/circuit_macros/doc/DCsymbol.m4
+2020/12/20 | 26 | graphics/circuit_macros/doc/ACsymbol.m4
+2020/12/20 | 269 | graphics/circuit_macros/doc/Loop.m4
+2020/12/20 | 2696 | graphics/circuit_macros/examples/keyval.m4
+2020/12/20 | 26914 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2020/12/20 | 2685 | graphics/circuit_macros/examples/svg/ex11SVG.m4
+2020/12/20 | 2676 | fonts/scholax/vf/zncfmi.vf
+2020/12/20 | 2674 | graphics/circuit_macros/examples/Planes.m4
+2020/12/20 | 2672 | fonts/scholax/vf/zncmi.vf
+2020/12/20 | 26646490 | info/apprendre-a-programmer-en-tex/fonts/libertine-legacy.zip
+2020/12/20 | 2661 | graphics/circuit_macros/examples/svg/CctTableSVG.m4
+2020/12/20 | 2661 | graphics/circuit_macros/doc/Grounds.tex
+2020/12/20 | 2639 | graphics/circuit_macros/doc/Circuit_macros.tex
+2020/12/20 | 2634 | graphics/circuit_macros/examples/Audio.m4
+2020/12/20 | 2634 | graphics/circuit_macros/doc/AudioMan.m4
+2020/12/20 | 2634437 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2020/12/20 | 2625 | graphics/circuit_macros/examples/svg/ex01SVG.m4
+2020/12/20 | 26125 | macros/latex/contrib/easyfloats/doc/preamble/keydoc.tex
+2020/12/20 | 2584 | graphics/circuit_macros/examples/Escher.m4
+2020/12/20 | 25849 | graphics/circuit_macros/doc/Xform.tex
+2020/12/20 | 258254 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2020/12/20 | 2559 | graphics/circuit_macros/examples/svg/ex08SVG.m4
+2020/12/20 | 2556 | graphics/circuit_macros/examples/ex08.m4
+2020/12/20 | 2551 | graphics/circuit_macros/examples/svg/OptoisoSVG.m4
+2020/12/20 | 25460 | graphics/circuit_macros/doc/Capture.JPG
+2020/12/20 | 2542 | graphics/circuit_macros/examples/brace.m4
+2020/12/20 | 2528 | graphics/circuit_macros/examples/svg/AdderSVG.m4
+2020/12/20 | 2525 | graphics/circuit_macros/examples/svg/CrowSVG.m4
+2020/12/20 | 252508 | systems/texlive/tlnet/archive/rmathbr.doc.r57173.tar.xz
+2020/12/20 | 2520 | graphics/circuit_macros/examples/Crow.m4
+2020/12/20 | 2517 | graphics/circuit_macros/examples/Autoencoder.m4
+2020/12/20 | 2513009 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2020/12/20 | 250952 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2020/12/20 | 24884 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2020/12/20 | 248675 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2020/12/20 | 24806 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2020/12/20 | 24614 | macros/luatex/generic/luaxml/luaxml.tex
+2020/12/20 | 2453 | graphics/circuit_macros/examples/nsvg/dev/Makefile
+2020/12/20 | 2443 | graphics/circuit_macros/examples/svg/ex00SVG.m4
+2020/12/20 | 2442 | graphics/circuit_macros/examples/Optoiso.m4
+2020/12/20 | 2441 | graphics/circuit_macros/doc/ujt.tex
+2020/12/20 | 243096 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2020/12/20 | 24270379 | systems/texlive/tlnet/install-tl.zip
+2020/12/20 | 241 | macros/latex/contrib/easyfloats/doc/content/installation.tex
+2020/12/20 | 24133 | graphics/circuit_macros/examples/svg/UNOSVG.m4
+2020/12/20 | 2412 | graphics/circuit_macros/examples/ex00.m4
+2020/12/20 | 2402 | graphics/circuit_macros/examples/Adder.m4
+2020/12/20 | 2400 | fonts/notomath/tfm/notobmia.tfm
+2020/12/20 | 23972 | graphics/circuit_macros/examples/svg/examplesSVG.htmx
+2020/12/20 | 2389 | graphics/circuit_macros/doc/Dac.m4
+2020/12/20 | 2380 | fonts/notomath/tfm/notomia.tfm
+2020/12/20 | 23639 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2020/12/20 | 2362 | graphics/circuit_macros/examples/Jack.m4
+2020/12/20 | 2362 | graphics/circuit_macros/doc/JackMan.m4
+2020/12/20 | 2361 | graphics/circuit_macros/examples/ex11.m4
+2020/12/20 | 233 | graphics/circuit_macros/examples/Ccurve.m4
+2020/12/20 | 2324 | graphics/circuit_macros/examples/svg/cscSVG.m4
+2020/12/20 | 2304 | graphics/circuit_macros/examples/Loglog.m4
+2020/12/20 | 23021 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2020/12/20 | 2295 | graphics/circuit_macros/examples/csc.m4
+2020/12/20 | 2279 | graphics/circuit_macros/examples/ex01.m4
+2020/12/20 | 2270333 | info/apprendre-a-programmer-en-tex/cover/couverture.pdf
+2020/12/20 | 2265 | macros/luatex/generic/luaxml/luaxml-pretty.lua
+2020/12/20 | 2255136 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/12/20 | 224201 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2020/12/20 | 2241 | graphics/circuit_macros/examples/svg/LoglogSVG.m4
+2020/12/20 | 221 | graphics/circuit_macros/examples/rotate.tex
+2020/12/20 | 219 | graphics/circuit_macros/examples/tst1.tex
+2020/12/20 | 21867 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2020/12/20 | 218656 | systems/texlive/tlnet/archive/texlive-scripts.doc.r57168.tar.xz
+2020/12/20 | 217 | graphics/circuit_macros/doc/stringdims.m4
+2020/12/20 | 2179 | graphics/circuit_macros/examples/Conn.m4
+2020/12/20 | 2179 | graphics/circuit_macros/doc/ConnMan.m4
+2020/12/20 | 2177 | graphics/circuit_macros/examples/svg/ex21SVG.m4
+2020/12/20 | 2171 | graphics/circuit_macros/examples/svg/I2LSVG.m4
+2020/12/20 | 2170 | graphics/circuit_macros/examples/ex06.m4
+2020/12/20 | 2165 | graphics/circuit_macros/examples/Sources.m4
+2020/12/20 | 2165 | graphics/circuit_macros/doc/SourcesMan.m4
+2020/12/20 | 2144 | fonts/scholax/tfm/zncfbmia.tfm
+2020/12/20 | 21384 | graphics/circuit_macros/examples/svg/Incl.jpg
+2020/12/20 | 21230 | graphics/circuit_macros/examples/xfig/xfiglib.fig
+2020/12/20 | 212192 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2020/12/20 | 2119 | graphics/circuit_macros/examples/Logic.m4
+2020/12/20 | 2119 | graphics/circuit_macros/doc/LogicMan.m4
+2020/12/20 | 2111 | graphics/circuit_macros/examples/svg/ConnSVG.m4
+2020/12/20 | 2109 | macros/luatex/generic/luaxml/luaxml-parse-query.lua
+2020/12/20 | 2104 | fonts/scholax/tfm/zncfmia.tfm
+2020/12/20 | 210493 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2020/12/20 | 2099 | graphics/circuit_macros/pstricks.m4
+2020/12/20 | 2097 | graphics/circuit_macros/examples/Ttree.m4
+2020/12/20 | 2092 | fonts/notomath/vf/notobmia.vf
+2020/12/20 | 2085 | graphics/circuit_macros/pgf.m4
+2020/12/20 | 2084 | fonts/notomath/vf/notomia.vf
+2020/12/20 | 20845 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2020/12/20 | 207337 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/12/20 | 20712 | macros/luatex/generic/luaxml/luaxml-mod-xml.lua
+2020/12/20 | 2069 | graphics/circuit_macros/examples/svg/relaycoilSVG.m4
+2020/12/20 | 2068 | graphics/circuit_macros/examples/I2L.m4
+2020/12/20 | 2051 | graphics/circuit_macros/examples/svg/JackSVG.m4
+2020/12/20 | 205175 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2020/12/20 | 205128 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/12/20 | 20418 | graphics/circuit_macros/doc/thyristor.tex
+2020/12/20 | 204128 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2020/12/20 | 2036 | macros/latex/contrib/easyfloats/doc/content/bug-reports-and-contributions.tex
+2020/12/20 | 2027 | graphics/circuit_macros/examples/svg/pwrsupplySVG.m4
+2020/12/20 | 202700 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2020/12/20 | 2018 | graphics/circuit_macros/examples/svg/ex06SVG.m4
+2020/12/20 | 2014 | graphics/circuit_macros/examples/pwrsupply.m4
+2020/12/20 | 201476 | systems/texlive/tlnet/archive/scholax.doc.r57169.tar.xz
+2020/12/20 | 2013 | graphics/circuit_macros/doc/HybridPi.m4
+2020/12/20 | 2000 | graphics/circuit_macros/examples/ex21.m4
+2020/12/20 | 1995 | graphics/circuit_macros/doc/Corners.m4
+2020/12/20 | 19948 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2020/12/20 | 199323 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2020/12/20 | 1992 | graphics/circuit_macros/examples/svg/FourbarSVG.m4
+2020/12/20 | 1985 | graphics/circuit_macros/examples/svg/XORSVG.m4
+2020/12/20 | 197794 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2020/12/20 | 1975 | graphics/circuit_macros/doc/FlipFlop.m4
+2020/12/20 | 1966 | graphics/circuit_macros/examples/svg/DriveSVG.m4
+2020/12/20 | 1966 | graphics/circuit_macros/examples/Drive.m4
+2020/12/20 | 1962 | graphics/circuit_macros/examples/Autologix.m4
+2020/12/20 | 1959 | graphics/circuit_macros/examples/debug2.m4
+2020/12/20 | 1955 | graphics/circuit_macros/examples/svg/ABlogixSVG.m4
+2020/12/20 | 1953 | graphics/circuit_macros/examples/svg/MotorControlSVG.m4
+2020/12/20 | 1953 | graphics/circuit_macros/doc/Buffer.m4
+2020/12/20 | 195373 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/12/20 | 1951869 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2020/12/20 | 194227 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2020/12/20 | 1940 | graphics/circuit_macros/doc/AmpTable.tex
+2020/12/20 | 1940 | fonts/scholax/tfm/zncmia.tfm
+2020/12/20 | 19386273 | systems/texlive/tlnet/install-tl-windows.exe
+2020/12/20 | 1932 | fonts/scholax/tfm/zncbmia.tfm
+2020/12/20 | 1931 | graphics/circuit_macros/examples/svg/LogicSVG.m4
+2020/12/20 | 192726 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2020/12/20 | 19250 | graphics/circuit_macros/dpictools.pic
+2020/12/20 | 1924 | macros/latex/contrib/easyfloats/README.md
+2020/12/20 | 1922 | graphics/circuit_macros/examples/MotorControl.m4
+2020/12/20 | 1921 | graphics/circuit_macros/examples/relaycoil.m4
+2020/12/20 | 1921 | graphics/circuit_macros/doc/relaycoilMan.m4
+2020/12/20 | 19176 | graphics/circuit_macros/Licence.txt
+2020/12/20 | 19142 | graphics/circuit_macros/doc/Switches.tex
+2020/12/20 | 1907 | graphics/circuit_macros/examples/svg/SourcesSVG.m4
+2020/12/20 | 1906 | graphics/circuit_macros/examples/SPM.m4
+2020/12/20 | 18958 | graphics/circuit_macros/examples/nsvg/dev/test.pic
+2020/12/20 | 1893 | graphics/circuit_macros/examples/svg/ex16SVG.m4
+2020/12/20 | 1891 | graphics/circuit_macros/examples/svg/ex04SVG.m4
+2020/12/20 | 1883320 | systems/texlive/tlnet/archive/scholax.r57169.tar.xz
+2020/12/20 | 1882 | graphics/circuit_macros/examples/svg/CrullerSVG.m4
+2020/12/20 | 1879 | graphics/circuit_macros/examples/Cruller.m4
+2020/12/20 | 1865 | graphics/circuit_macros/examples/ex16.m4
+2020/12/20 | 1860 | graphics/circuit_macros/doc/bi_trans.m4
+2020/12/20 | 1857 | graphics/circuit_macros/doc/Composite.m4
+2020/12/20 | 1852 | graphics/circuit_macros/examples/Orbits.m4
+2020/12/20 | 18496 | systems/texlive/tlnet/archive/menukeys.source.r57172.tar.xz
+2020/12/20 | 183801 | macros/latex/contrib/curve2e/curve2e.dtx
+2020/12/20 | 1837 | graphics/circuit_macros/examples/svg/SchottkySVG.m4
+2020/12/20 | 1823 | graphics/circuit_macros/examples/XOR.m4
+2020/12/20 | 1812 | graphics/circuit_macros/examples/svg/BipSVG.m4
+2020/12/20 | 1802 | graphics/circuit_macros/examples/Pconn.m4
+2020/12/20 | 1802 | graphics/circuit_macros/doc/PconnMan.m4
+2020/12/20 | 179943 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2020/12/20 | 179447 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2020/12/20 | 1778 | graphics/circuit_macros/examples/Schottky.m4
+2020/12/20 | 1776 | graphics/circuit_macros/examples/svg/PconnSVG.m4
+2020/12/20 | 17763 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2020/12/20 | 1765 | graphics/circuit_macros/examples/examples.tex
+2020/12/20 | 17644 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2020/12/20 | 176362 | macros/latex/contrib/pdfpc.zip
+2020/12/20 | 17611 | macros/latex/contrib/easyfloats/doc/content/motivation.tex
+2020/12/20 | 1738 | macros/latex/contrib/easyfloats/doc/easyfloats.tex
+2020/12/20 | 1737 | graphics/circuit_macros/examples/svg/ContactsSVG.m4
+2020/12/20 | 173201 | macros/latex/contrib/pdfpc/pdfpc-doc.pdf
+2020/12/20 | 1730 | graphics/circuit_macros/examples/ABlogix.m4
+2020/12/20 | 1728 | fonts/scholax/vf/zncfbmia.vf
+2020/12/20 | 1720 | fonts/scholax/vf/zncfmia.vf
+2020/12/20 | 17196 | graphics/circuit_macros/examples/files.tex
+2020/12/20 | 1713628 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2020/12/20 | 1699 | graphics/circuit_macros/examples/svg/ex10SVG.m4
+2020/12/20 | 1692 | graphics/circuit_macros/examples/nsvg/examplesSVG.htmx
+2020/12/20 | 1675 | graphics/circuit_macros/examples/svg/TTLnandSVG.m4
+2020/12/20 | 16752038 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2020/12/20 | 1668 | graphics/circuit_macros/examples/svg/Banking.m4
+2020/12/20 | 1668 | graphics/circuit_macros/examples/IC10107.m4
+2020/12/20 | 1662584 | systems/texlive/tlnet/archive/newcomputermodern.doc.r57170.tar.xz
+2020/12/20 | 165 | graphics/circuit_macros/doc/tranbody.m4
+2020/12/20 | 165643 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/12/20 | 1654 | graphics/circuit_macros/examples/ex04.m4
+2020/12/20 | 164867 | graphics/circuit_macros/libcct.m4
+2020/12/20 | 16420 | graphics/circuit_macros/doc/fet.tex
+2020/12/20 | 1640 | graphics/circuit_macros/mpost.m4
+2020/12/20 | 1639 | graphics/circuit_macros/Makefile
+2020/12/20 | 1624 | graphics/circuit_macros/doc/ParSeries.m4
+2020/12/20 | 16205 | graphics/circuit_macros/README
+2020/12/20 | 1619 | graphics/circuit_macros/examples/Bip.m4
+2020/12/20 | 1619 | graphics/circuit_macros/doc/BipMan.m4
+2020/12/20 | 1618 | graphics/circuit_macros/doc/ArrestersMan.m4
+2020/12/20 | 1612 | graphics/circuit_macros/examples/svg/TimerSVG.m4
+2020/12/20 | 1608 | graphics/circuit_macros/examples/ex05.m4
+2020/12/20 | 16002 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2020/12/20 | 160026 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2020/12/20 | 16001 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2020/12/20 | 159542 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2020/12/20 | 15891 | macros/luatex/generic/luaxml/luaxml-domobject.lua
+2020/12/20 | 1585 | graphics/circuit_macros/examples/Contacts.m4
+2020/12/20 | 1585 | graphics/circuit_macros/doc/ContactsMan.m4
+2020/12/20 | 1575 | graphics/circuit_macros/doc/mplex.m4
+2020/12/20 | 1559 | graphics/circuit_macros/examples/svg/XformSVG.m4
+2020/12/20 | 1558 | graphics/circuit_macros/examples/TTLnand.m4
+2020/12/20 | 1546 | graphics/circuit_macros/examples/svg/Xtest.m4
+2020/12/20 | 1544 | fonts/scholax/vf/zncbmia.vf
+2020/12/20 | 1540 | fonts/scholax/vf/zncmia.vf
+2020/12/20 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2020/12/20 | 15388 | graphics/circuit_macros/doc/Sources.tex
+2020/12/20 | 1530 | macros/latex/contrib/easyfloats/doc/preamble/link.tex
+2020/12/20 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2020/12/20 | 1529 | graphics/circuit_macros/examples/mf/Makefile
+2020/12/20 | 1526 | graphics/circuit_macros/examples/Xform.m4
+2020/12/20 | 1526 | graphics/circuit_macros/doc/XformMan.m4
+2020/12/20 | 1525 | graphics/circuit_macros/examples/rotatetext.m4
+2020/12/20 | 1521 | graphics/circuit_macros/examples/Coxeter.m4
+2020/12/20 | 151973 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2020/12/20 | 151767 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2020/12/20 | 15033 | graphics/circuit_macros/doc/Pconn.tex
+2020/12/20 | 14954 | macros/luatex/generic/luaxml/luaxml-cssquery.lua
+2020/12/20 | 1492 | graphics/circuit_macros/examples/ex10.m4
+2020/12/20 | 149137 | macros/luatex/generic/luaxml.zip
+2020/12/20 | 1485 | graphics/circuit_macros/examples/Demultiplexer.m4
+2020/12/20 | 1485 | graphics/circuit_macros/doc/DemultiplexerMan.m4
+2020/12/20 | 1484 | graphics/circuit_macros/examples/nsvg/dev/tstSVG.htmx
+2020/12/20 | 147021 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2020/12/20 | 1467 | graphics/circuit_macros/examples/svg/MultiplexerSVG.m4
+2020/12/20 | 1467 | graphics/circuit_macros/examples/Diodes.m4
+2020/12/20 | 1467 | graphics/circuit_macros/doc/DiodesMan.m4
+2020/12/20 | 1464 | graphics/circuit_macros/doc/Taps.m4
+2020/12/20 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2020/12/20 | 1458 | graphics/circuit_macros/examples/header.tex
+2020/12/20 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/12/20 | 144 | graphics/circuit_macros/doc/Thermal.m4
+2020/12/20 | 1446 | graphics/circuit_macros/examples/svg/ShiftRSVG.m4
+2020/12/20 | 1444 | graphics/circuit_macros/examples/svg/ThreeSVG.m4
+2020/12/20 | 1443 | graphics/circuit_macros/examples/Resolver.m4
+2020/12/20 | 144034 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2020/12/20 | 14392 | systems/texlive/tlnet/archive/rmathbr.source.r57173.tar.xz
+2020/12/20 | 1433 | graphics/circuit_macros/examples/Opamp.m4
+2020/12/20 | 1433 | graphics/circuit_macros/doc/OpampMan.m4
+2020/12/20 | 1431 | graphics/circuit_macros/examples/svg/RelaySVG.m4
+2020/12/20 | 1429 | graphics/circuit_macros/examples/svg/DiodesSVG.m4
+2020/12/20 | 14287 | graphics/circuit_macros/darrow.m4
+2020/12/20 | 14164 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2020/12/20 | 1413906 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/12/20 | 1406 | graphics/circuit_macros/examples/ShiftR.m4
+2020/12/20 | 1406 | graphics/circuit_macros/doc/ShiftRMan.m4
+2020/12/20 | 1400 | graphics/circuit_macros/examples/Multiplexer.m4
+2020/12/20 | 1400 | graphics/circuit_macros/doc/MultiplexerMan.m4
+2020/12/20 | 1387 | graphics/circuit_macros/examples/svg/CrossbarSVG.m4
+2020/12/20 | 13833 | graphics/circuit_macros/doc/Contact.tex
+2020/12/20 | 137 | graphics/circuit_macros/doc/oaxbody.m4
+2020/12/20 | 1375 | graphics/circuit_macros/examples/person.m4
+2020/12/20 | 1373 | graphics/circuit_macros/examples/svg/DemultiplexerSVG.m4
+2020/12/20 | 137028 | graphics/circuit_macros/doc/body.tex
+2020/12/20 | 135 | graphics/circuit_macros/examples/nsvg/dev/F_test.tex
+2020/12/20 | 1358 | graphics/circuit_macros/examples/Crossbar.m4
+2020/12/20 | 1357 | macros/luatex/generic/luaxml/luaxml-entities.lua
+2020/12/20 | 133576 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2020/12/20 | 13324 | graphics/circuit_macros/examples/Heathkit.m4
+2020/12/20 | 1331 | graphics/circuit_macros/examples/svg/SierpinskiSVG.m4
+2020/12/20 | 1331 | graphics/circuit_macros/examples/Sierpinski.m4
+2020/12/20 | 13304 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2020/12/20 | 1329 | graphics/circuit_macros/doc/currents.m4
+2020/12/20 | 13285013 | macros/latex/contrib/reledmac.zip
+2020/12/20 | 13264 | graphics/circuit_macros/examples/Tubediags.m4
+2020/12/20 | 132124 | systems/texlive/tlnet/archive/texlive-scripts.r57168.tar.xz
+2020/12/20 | 1320848 | info/apprendre-a-programmer-en-tex/source/apprendre-a-programmer-en-tex.tex
+2020/12/20 | 131 | graphics/circuit_macros/doc/Axes.m4
+2020/12/20 | 130 | graphics/circuit_macros/doc/bitrbody.m4
+2020/12/20 | 1305 | macros/latex/contrib/easyfloats/doc/content/used-packages.tex
+2020/12/20 | 130507 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2020/12/20 | 130467 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2020/12/20 | 1302916 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2020/12/20 | 12 | graphics/circuit_macros/doc/Version.tex
+2020/12/20 | 1297880 | macros/latex/contrib/curve2e.zip
+2020/12/20 | 1291 | graphics/circuit_macros/doc/ConfigC.m4
+2020/12/20 | 1287 | graphics/circuit_macros/examples/Three.m4
+2020/12/20 | 1278050 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2020/12/20 | 12711 | graphics/circuit_macros/examples/svg/HeathkitSVG.m4
+2020/12/20 | 1265 | graphics/circuit_macros/examples/svg/HeadersSVG.m4
+2020/12/20 | 1259 | graphics/circuit_macros/examples/Relay.m4
+2020/12/20 | 1259 | graphics/circuit_macros/doc/RelayMan.m4
+2020/12/20 | 1257 | graphics/circuit_macros/doc/ConfigB.m4
+2020/12/20 | 1255 | macros/latex/contrib/easyfloats/easyfloats-file-list.txt
+2020/12/20 | 125544 | systems/texlive/tlnet/archive/fontools.doc.r57171.tar.xz
+2020/12/20 | 1250 | graphics/circuit_macros/examples/svg/GeometrySVG.m4
+2020/12/20 | 1250 | graphics/circuit_macros/examples/Geometry.m4
+2020/12/20 | 12478 | graphics/circuit_macros/examples/svg/TubediagsSVG.m4
+2020/12/20 | 12472 | graphics/circuit_macros/CHANGES
+2020/12/20 | 1246215 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2020/12/20 | 1238 | graphics/circuit_macros/examples/svg/NportSVG.m4
+2020/12/20 | 12318 | macros/latex/contrib/easyfloats/doc/content/examples.tex
+2020/12/20 | 1230 | macros/luatex/generic/luaxml/luaxml-stack.lua
+2020/12/20 | 1230 | graphics/circuit_macros/examples/Antennas.m4
+2020/12/20 | 1230 | graphics/circuit_macros/doc/AntennasMan.m4
+2020/12/20 | 1230582 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/12/20 | 1230287 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2020/12/20 | 1229 | graphics/circuit_macros/doc/fbfilter.m4
+2020/12/20 | 12050 | graphics/circuit_macros/doc/Diodes.tex
+2020/12/20 | 1204 | graphics/circuit_macros/examples/svg/ex17SVG.m4
+2020/12/20 | 12006 | graphics/circuit_macros/doc/Jack.tex
+2020/12/20 | 11 | graphics/circuit_macros/doc/test.tex
+2020/12/20 | 119079 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2020/12/20 | 1185 | graphics/circuit_macros/boxdims.sty
+2020/12/20 | 1174 | graphics/circuit_macros/examples/PPA.m4
+2020/12/20 | 1168653 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2020/12/20 | 115931 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2020/12/20 | 1157 | graphics/circuit_macros/examples/svg/NPDTSVG.m4
+2020/12/20 | 11566 | graphics/circuit_macros/lib3D.m4
+2020/12/20 | 1155 | macros/luatex/generic/luaxml/README
+2020/12/20 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2020/12/20 | 1151 | graphics/circuit_macros/doc/Darlington.m4
+2020/12/20 | 1148368 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2020/12/20 | 1148353 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/12/20 | 1147 | macros/latex/contrib/pdfpc/README.md
+2020/12/20 | 114671 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2020/12/20 | 1142 | info/apprendre-a-programmer-en-tex/source/mandelbrot.tex
+2020/12/20 | 113608 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2020/12/20 | 11332 | macros/luatex/generic/luaxml/luaxml-mod-handler.lua
+2020/12/20 | 1132 | graphics/circuit_macros/examples/Headers.m4
+2020/12/20 | 1132 | graphics/circuit_macros/doc/HeadersMan.m4
+2020/12/20 | 1129 | systems/win32/miktex/tm/packages/pr.ini
+2020/12/20 | 1128 | graphics/circuit_macros/examples/NPDT.m4
+2020/12/20 | 1128 | graphics/circuit_macros/doc/NPDTMan.m4
+2020/12/20 | 1127660 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/12/20 | 11270 | graphics/circuit_macros/examples/FlowchartDefs.m4
+2020/12/20 | 1126 | graphics/circuit_macros/examples/ex17.m4
+2020/12/20 | 1120 | graphics/circuit_macros/doc/ConfigA.m4
+2020/12/20 | 1114 | graphics/circuit_macros/mfpic.m4
+2020/12/20 | 1100 | graphics/circuit_macros/examples/ex02.m4
+2020/12/20 | 1093 | graphics/circuit_macros/examples/svg/ex02SVG.m4
+2020/12/20 | 1090 | graphics/circuit_macros/examples/svg/AntennasSVG.m4
+2020/12/20 | 108925 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2020/12/20 | 107935 | macros/luatex/generic/luaxml/luaxml.pdf
+2020/12/20 | 1077045 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2020/12/20 | 1076 | graphics/circuit_macros/examples/mf/mftest
+2020/12/20 | 1075 | macros/latex/contrib/easyfloats/doc/content/names.tex
+2020/12/20 | 1075 | graphics/circuit_macros/examples/bistable.m4
+2020/12/20 | 1074 | graphics/circuit_macros/doc/bistableMan.m4
+2020/12/20 | 1070 | graphics/circuit_macros/examples/svg/EmarrowsSVG.m4
+2020/12/20 | 1065 | graphics/circuit_macros/examples/svg/ex18SVG.m4
+2020/12/20 | 10589 | graphics/circuit_macros/examples/svg/expSVG.m4
+2020/12/20 | 1055 | graphics/circuit_macros/examples/svg/TgateSVG.m4
+2020/12/20 | 1050 | graphics/circuit_macros/examples/svg/SVGconfig.m4
+2020/12/20 | 104553 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2020/12/20 | 10447 | graphics/circuit_macros/examples/svg/paletteSVG.m4
+2020/12/20 | 1040 | graphics/circuit_macros/examples/Nport.m4
+2020/12/20 | 1040 | graphics/circuit_macros/doc/NportMan.m4
+2020/12/20 | 10401 | graphics/circuit_macros/doc/Variable.tex
+2020/12/20 | 1039 | graphics/circuit_macros/examples/chaos.m4
+2020/12/20 | 1034 | graphics/circuit_macros/examples/svg/OpampSVG.m4
+2020/12/20 | 1029 | graphics/circuit_macros/xfig.m4
+2020/12/20 | 102827 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2020/12/20 | 1024 | graphics/circuit_macros/examples/Btree.m4
+2020/12/20 | 1022 | graphics/circuit_macros/examples/Tgate.m4
+2020/12/20 | 1022 | graphics/circuit_macros/doc/TgateMan.m4
+2020/12/20 | 1019 | graphics/circuit_macros/gpic.m4
+2020/12/20 | 10164 | graphics/circuit_macros/doc/Audio.tex
+2020/12/20 | 101471 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2020/12/20 | 10059 | graphics/circuit_macros/svg.m4
+2020/12/20 | 1003 | graphics/circuit_macros/examples/ex15.m4
2020/12/19 | 992 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-tlf-ot1G.vf
2020/12/19 | 992 | fonts/scholax/vf/TeXGyreScholaX-BoldItalic-tlf-ot1G.vf
2020/12/19 | 988 | fonts/scholax/vf/TeXGyreScholaX-Slanted-tlf-ot1G.vf
2020/12/19 | 988 | fonts/scholax/vf/TeXGyreScholaX-Regular-tlf-ot1G.vf
2020/12/19 | 988 | fonts/scholax/vf/TeXGyreScholaX-Italic-tlf-ot1G.vf
-2020/12/19 | 98562 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/12/19 | 986981 | macros/latex/contrib/reledmac/reledpar.pdf
2020/12/19 | 984 | fonts/scholax/vf/TeXGyreScholaX-Bold-tlf-ot1G.vf
2020/12/19 | 984 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-tosf-ts1.vf
2020/12/19 | 984 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-tlf-ts1.vf
@@ -30,17 +803,10 @@
2020/12/19 | 976 | fonts/scholax/vf/TeXGyreScholaX-Bold-tlf-ts1.vf
2020/12/19 | 976 | fonts/scholax/vf/TeXGyreScholaX-Bold-osf-ts1.vf
2020/12/19 | 976 | fonts/scholax/vf/TeXGyreScholaX-Bold-lf-ts1.vf
-2020/12/19 | 97461 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2020/12/19 | 964964 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2020/12/19 | 96476 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
2020/12/19 | 9548 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-sc-ly1.tfm
2020/12/19 | 9544 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-sc-ly1.tfm
2020/12/19 | 9540 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-sc-ly1.tfm
2020/12/19 | 9512 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tosf-sc-ly1.tfm
-2020/12/19 | 94621 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2020/12/19 | 94465 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2020/12/19 | 93713 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2020/12/19 | 93682 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
2020/12/19 | 9324 | fonts/scholax/tfm/TeXGyreScholaX-Regular-lf-sc-ly1.tfm
2020/12/19 | 9320 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-sc-ly1.tfm
2020/12/19 | 9316 | fonts/scholax/tfm/TeXGyreScholaX-Regular-osf-sc-ly1.tfm
@@ -61,18 +827,15 @@
2020/12/19 | 8928 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-sc-ly1.tfm
2020/12/19 | 8924 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-sc-ly1.tfm
2020/12/19 | 8900 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-sc-ly1.tfm
-2020/12/19 | 87420 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/12/19 | 888720 | macros/latex/contrib/reledmac/reledmac.dtx
2020/12/19 | 8680 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-ly1.tfm
2020/12/19 | 8672 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-ly1.tfm
2020/12/19 | 8672 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-ly1.tfm
-2020/12/19 | 86648 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
2020/12/19 | 8644 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tosf-ly1.tfm
2020/12/19 | 8612 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-ly1.tfm
2020/12/19 | 8604 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-ly1.tfm
2020/12/19 | 8600 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-ly1.tfm
-2020/12/19 | 8573 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
2020/12/19 | 8572 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-ly1.tfm
-2020/12/19 | 84960 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
2020/12/19 | 8448 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-lf-ly1.tfm
2020/12/19 | 8444 | fonts/scholax/tfm/TeXGyreScholaX-Regular-lf-ly1.tfm
2020/12/19 | 8436 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-ly1.tfm
@@ -113,89 +876,15 @@
2020/12/19 | 820 | fonts/scholax/vf/TeXGyreScholaX-Bold-tlf-sc-ot1.vf
2020/12/19 | 820 | fonts/scholax/vf/TeXGyreScholaX-Bold-osf-sc-ot1.vf
2020/12/19 | 820 | fonts/scholax/vf/TeXGyreScholaX-Bold-lf-sc-ot1.vf
-2020/12/19 | 809954 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2020/12/19 | 80732 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
2020/12/19 | 8048 | fonts/scholax/tfm/zcs-Italic-osf-th-ly1.tfm
2020/12/19 | 8020 | fonts/scholax/tfm/zcs-Italic-tlf-th-ly1.tfm
2020/12/19 | 79470 | macros/latex/contrib/menukeys/menukeys.dtx
-2020/12/19 | 78398 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2020/12/19 | 77282 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2020/12/19 | 7573 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2020/12/19 | 74263 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2020/12/19 | 74034 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2020/12/19 | 736572 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2020/12/19 | 73391 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2020/12/19 | 72875 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2020/12/19 | 72730 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2020/12/19 | 71733 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2020/12/19 | 71551 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2020/12/19 | 70043 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2020/12/19 | 69679 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2020/12/19 | 677613 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2020/12/19 | 67420 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2020/12/19 | 754488 | systems/win32/w32tex/ChangeLog
2020/12/19 | 6645 | fonts/scholax/tex/scholax.sty
-2020/12/19 | 65951 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2020/12/19 | 65910 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2020/12/19 | 65713 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2020/12/19 | 65233 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2020/12/19 | 64501 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2020/12/19 | 63595 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2020/12/19 | 63284 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2020/12/19 | 63093 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2020/12/19 | 62919 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2020/12/19 | 623280 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2020/12/19 | 61949 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2020/12/19 | 617334 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2020/12/19 | 599538 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2020/12/19 | 596933 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2020/12/19 | 59589 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2020/12/19 | 6612 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2020/12/19 | 591873 | macros/latex/contrib/menukeys.zip
-2020/12/19 | 58634 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2020/12/19 | 58523 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2020/12/19 | 581013 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
2020/12/19 | 579072 | macros/latex/contrib/menukeys/menukeys.pdf
-2020/12/19 | 57298 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2020/12/19 | 567636 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2020/12/19 | 56643 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2020/12/19 | 56005 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2020/12/19 | 55998 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2020/12/19 | 55873 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2020/12/19 | 557616 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2020/12/19 | 55631 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2020/12/19 | 551128 | systems/win32/miktex/tm/packages/files.csv.lzma
-2020/12/19 | 551121 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2020/12/19 | 5501026 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2020/12/19 | 54739 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2020/12/19 | 531319 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2020/12/19 | 52181 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2020/12/19 | 51924 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2020/12/19 | 51471 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2020/12/19 | 51137 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2020/12/19 | 50932 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2020/12/19 | 50545 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2020/12/19 | 50441 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2020/12/19 | 49795 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2020/12/19 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2020/12/19 | 482442 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2020/12/19 | 47700 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2020/12/19 | 46544 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2020/12/19 | 460648 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2020/12/19 | 45802 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2020/12/19 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2020/12/19 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2020/12/19 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2020/12/19 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
-2020/12/19 | 45331 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2020/12/19 | 45013 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2020/12/19 | 43103 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/12/19 | 42928 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2020/12/19 | 42668 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2020/12/19 | 42636 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2020/12/19 | 42249 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2020/12/19 | 42082 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2020/12/19 | 41056 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
2020/12/19 | 4092 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-sc-ot1.tfm
-2020/12/19 | 40888 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
2020/12/19 | 4084 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-sc-ot1.tfm
2020/12/19 | 4084 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-sc-ot1.tfm
2020/12/19 | 4056 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tosf-sc-ot1.tfm
@@ -205,12 +894,9 @@
2020/12/19 | 3960 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-sc-ot1.tfm
2020/12/19 | 3956 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-sc-ot1.tfm
2020/12/19 | 3952 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-sc-ot1.tfm
-2020/12/19 | 39361 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
2020/12/19 | 3928 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-sc-ot1.tfm
-2020/12/19 | 392059 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
2020/12/19 | 3919 | fonts/scholax/enc/zcs_y6waxr.enc
2020/12/19 | 3916 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-sc-ot1.tfm
-2020/12/19 | 38952 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
2020/12/19 | 388 | systems/texlive/tlnet/archive/texlive-docindex.r57163.tar.xz
2020/12/19 | 3888 | fonts/scholax/tfm/TeXGyreScholaX-Italic-lf-sc-ot1.tfm
2020/12/19 | 3868 | fonts/scholax/tfm/TeXGyreScholaX-Italic-osf-sc-ot1.tfm
@@ -225,7 +911,6 @@
2020/12/19 | 3780 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-ot1.tfm
2020/12/19 | 3772 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-ot1.tfm
2020/12/19 | 3772 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-ot1.tfm
-2020/12/19 | 37705 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
2020/12/19 | 3764 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-ot1G.tfm
2020/12/19 | 3760 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-sc-ot1.tfm
2020/12/19 | 3756 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-ot1.tfm
@@ -236,16 +921,12 @@
2020/12/19 | 3744 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-ot1.tfm
2020/12/19 | 3720 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-sc-ot1.tfm
2020/12/19 | 3716 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-ot1.tfm
-2020/12/19 | 36959 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2020/12/19 | 36955 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2020/12/19 | 36669 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
2020/12/19 | 3660 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-lf-ot1.tfm
2020/12/19 | 3648 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-osf-ot1.tfm
2020/12/19 | 3636 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-ot1G.tfm
2020/12/19 | 363584 | fonts/scholax/afm/TeXGyreScholaX-Slanted.afm
2020/12/19 | 363400 | fonts/scholax/afm/TeXGyreScholaX-Regular.afm
2020/12/19 | 3631 | fonts/scholax/enc/zcs_xrqdd6.enc
-2020/12/19 | 36313 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
2020/12/19 | 3624 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-ot1.tfm
2020/12/19 | 3602 | fonts/scholax/enc/zcs_wg6py3.enc
2020/12/19 | 3600 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-ot1.tfm
@@ -268,126 +949,108 @@
2020/12/19 | 3528 | fonts/scholax/tfm/TeXGyreScholaX-Regular-osf-ot1.tfm
2020/12/19 | 3528 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-ot1.tfm
2020/12/19 | 3524 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-ot1.tfm
-2020/12/19 | 35171 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
2020/12/19 | 3500 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-ot1.tfm
2020/12/19 | 3500 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-ot1.tfm
2020/12/19 | 3496 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-ot1.tfm
-2020/12/19 | 34792 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
2020/12/19 | 3452 | fonts/scholax/tfm/zcs-Italic-osf-th-ot1.tfm
2020/12/19 | 3433 | fonts/scholax/enc/zcs_litts3.enc
-2020/12/19 | 3426213 | fonts/scholax.zip
2020/12/19 | 3424 | fonts/scholax/tfm/zcs-Italic-tlf-th-ot1.tfm
2020/12/19 | 3412 | fonts/scholax/enc/zcs_c3rnvk.enc
2020/12/19 | 3402 | fonts/scholax/enc/zcs_jkq3qs.enc
-2020/12/19 | 33978 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
2020/12/19 | 3381 | fonts/scholax/enc/zcs_ioc2dx.enc
2020/12/19 | 3352 | fonts/scholax/enc/zcs_x5uxyb.enc
2020/12/19 | 3322 | fonts/scholax/enc/zcs_dodlyj.enc
-2020/12/19 | 33113 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
2020/12/19 | 3303 | fonts/scholax/enc/zcs_c5ugpk.enc
-2020/12/19 | 329592 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2020/12/19 | 32914 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
2020/12/19 | 32805 | fonts/scholax/map/ScholaX.map
2020/12/19 | 3273 | fonts/scholax/enc/zcs_wlo5nq.enc
-2020/12/19 | 32345 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2020/12/19 | 318324 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2020/12/19 | 32053 | macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
2020/12/19 | 31788 | systems/texlive/tlnet/archive/jadetex.doc.r57165.tar.xz
2020/12/19 | 3159 | fonts/scholax/enc/zcs_zgzte3.enc
2020/12/19 | 3151 | fonts/scholax/enc/zcs_2p3dps.enc
2020/12/19 | 3128 | fonts/scholax/enc/zcs_wylu46.enc
-2020/12/19 | 31242 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
2020/12/19 | 3120 | fonts/scholax/enc/zcs_2zpiql.enc
-2020/12/19 | 31183 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
2020/12/19 | 3108 | fonts/scholax/enc/zcs_mnnbkz.enc
-2020/12/19 | 31026 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/12/19 | 31052 | macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
2020/12/19 | 3100 | fonts/scholax/enc/zcs_heobe3.enc
-2020/12/19 | 30932 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
2020/12/19 | 3077 | fonts/scholax/enc/zcs_2ulndi.enc
2020/12/19 | 3070 | fonts/scholax/enc/zcs_lewktp.enc
2020/12/19 | 3069 | fonts/scholax/enc/zcs_mett7y.enc
-2020/12/19 | 30690 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
2020/12/19 | 3058 | fonts/scholax/enc/zcs_7xuij4.enc
+2020/12/19 | 304585 | macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
2020/12/19 | 3027 | fonts/scholax/enc/zcs_ra2vxf.enc
2020/12/19 | 3021 | fonts/scholax/enc/zcs_ujimmk.enc
2020/12/19 | 3020 | fonts/scholax/enc/zcs_qfh2v7.enc
2020/12/19 | 2997 | fonts/scholax/enc/zcs_3uk2yo.enc
2020/12/19 | 29896 | systems/texlive/tlnet/archive/jadetex.r57165.tar.xz
2020/12/19 | 2978 | fonts/scholax/enc/zcs_aisocu.enc
-2020/12/19 | 29686 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2020/12/19 | 297242 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
2020/12/19 | 2966 | fonts/scholax/enc/zcs_xzuu25.enc
-2020/12/19 | 295208 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
2020/12/19 | 2947 | fonts/scholax/enc/zcs_k56gxg.enc
-2020/12/19 | 29220 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/12/19 | 292929 | macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
2020/12/19 | 2916 | fonts/scholax/enc/zcs_t6txtr.enc
-2020/12/19 | 28905 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/12/19 | 291128 | macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
+2020/12/19 | 289371 | macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
2020/12/19 | 2867 | fonts/scholax/enc/zcs_fn6vum.enc
-2020/12/19 | 28621 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2020/12/19 | 282456 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2020/12/19 | 280509 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2020/12/19 | 27992 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2020/12/19 | 279853 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2020/12/19 | 27768 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2020/12/19 | 27083 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2020/12/19 | 27056 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2020/12/19 | 27017 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2020/12/19 | 26916 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2020/12/19 | 2645 | fonts/scholax/README
-2020/12/19 | 2634436 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2020/12/19 | 258255 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2020/12/19 | 2513005 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2020/12/19 | 250951 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2020/12/19 | 24884 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2020/12/19 | 248675 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2020/12/19 | 24806 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2020/12/19 | 243096 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2020/12/19 | 24270384 | systems/texlive/tlnet/install-tl.zip
+2020/12/19 | 285213 | macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
+2020/12/19 | 284700 | macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
+2020/12/19 | 284597 | macros/latex/contrib/reledmac/examples/2-linespacing.pdf
+2020/12/19 | 283465 | macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
+2020/12/19 | 281520 | macros/latex/contrib/reledmac/examples/2-performances.pdf
+2020/12/19 | 280887 | macros/latex/contrib/reledmac/examples/1-tabular.pdf
+2020/12/19 | 280642 | macros/latex/contrib/reledmac/examples/2-glossaries.pdf
+2020/12/19 | 279716 | macros/latex/contrib/reledmac/examples/2-indexing.pdf
+2020/12/19 | 273887 | macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
+2020/12/19 | 246187 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
2020/12/19 | 2395 | fonts/scholax/tex/OT1TeXGyreScholaX-Sup.fd
2020/12/19 | 2395 | fonts/scholax/tex/OT1TeXGyreScholaX-Inf.fd
2020/12/19 | 2395 | fonts/scholax/tex/LY1TeXGyreScholaX-Sup.fd
2020/12/19 | 2395 | fonts/scholax/tex/LY1TeXGyreScholaX-Inf.fd
2020/12/19 | 2371 | fonts/scholax/tex/T1TeXGyreScholaX-Sup.fd
2020/12/19 | 2371 | fonts/scholax/tex/T1TeXGyreScholaX-Inf.fd
-2020/12/19 | 23640 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2020/12/19 | 23022 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2020/12/19 | 2254556 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
-2020/12/19 | 224200 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2020/12/19 | 21866 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2020/12/19 | 218656 | systems/texlive/tlnet/archive/texlive-scripts.doc.r57164.tar.xz
+2020/12/19 | 23269 | macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
+2020/12/19 | 221533 | macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
2020/12/19 | 213025 | fonts/scholax/type1/TeXGyreScholaX-BoldItalic.pfb
-2020/12/19 | 212191 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
2020/12/19 | 210961 | fonts/scholax/type1/TeXGyreScholaX-BoldSlanted.pfb
-2020/12/19 | 210492 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2020/12/19 | 20845 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2020/12/19 | 207337 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/12/19 | 209918 | macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
+2020/12/19 | 208856 | macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
+2020/12/19 | 208585 | macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
2020/12/19 | 207312 | fonts/scholax/type1/TeXGyreScholaX-Slanted.pfb
-2020/12/19 | 205133 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2020/12/19 | 205061 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2020/12/19 | 204127 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2020/12/19 | 205371 | macros/latex/contrib/reledmac/examples/2-antilabe.pdf
+2020/12/19 | 203241 | macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
+2020/12/19 | 202991 | macros/latex/contrib/reledmac/examples/2-notes-width.pdf
2020/12/19 | 202887 | fonts/utilities/fontools.zip
-2020/12/19 | 202700 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2020/12/19 | 19948 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2020/12/19 | 199323 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2020/12/19 | 197792 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2020/12/19 | 2021691 | macros/latex/contrib/reledmac/reledmac.pdf
+2020/12/19 | 201188 | macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
+2020/12/19 | 200801 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
+2020/12/19 | 200260 | macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
+2020/12/19 | 199696 | macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
2020/12/19 | 1976 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-sup-t1.tfm
2020/12/19 | 1976 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-sup-ly1.tfm
+2020/12/19 | 197414 | macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
+2020/12/19 | 197373 | macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
+2020/12/19 | 197363 | macros/latex/contrib/reledmac/examples/1-verses.pdf
2020/12/19 | 1972 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-sup-t1--base.tfm
+2020/12/19 | 196882 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
+2020/12/19 | 196250 | macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
2020/12/19 | 1960 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-sup-ly1.tfm
-2020/12/19 | 195372 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/12/19 | 196014 | macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
+2020/12/19 | 195586 | macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
2020/12/19 | 1952 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-sup-t1.tfm
-2020/12/19 | 1951868 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
2020/12/19 | 1948 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-sup-t1--base.tfm
-2020/12/19 | 194229 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2020/12/19 | 19383285 | systems/texlive/tlnet/install-tl-windows.exe
2020/12/19 | 19312 | systems/texlive/tlnet/archive/jadetex.source.r57165.tar.xz
-2020/12/19 | 192728 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2020/12/19 | 192355 | macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
2020/12/19 | 1916 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-sup-t1.tfm
2020/12/19 | 1912 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-sup-t1--base.tfm
2020/12/19 | 1904 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-sup-ly1.tfm
+2020/12/19 | 190058 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
+2020/12/19 | 189692 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
2020/12/19 | 1892 | fonts/scholax/tfm/TeXGyreScholaX-Italic-sup-ly1.tfm
+2020/12/19 | 189290 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
2020/12/19 | 1888 | fonts/scholax/tfm/TeXGyreScholaX-Italic-sup-t1.tfm
+2020/12/19 | 188809 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
+2020/12/19 | 188675 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
+2020/12/19 | 188622 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
2020/12/19 | 1884 | fonts/scholax/tfm/TeXGyreScholaX-Italic-sup-t1--base.tfm
-2020/12/19 | 179942 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2020/12/19 | 179448 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
2020/12/19 | 1788 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-sc-ly1--base.tfm
2020/12/19 | 1788 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-sc-ly1--base.tfm
2020/12/19 | 1784 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-sc-ly1--base.tfm
@@ -398,12 +1061,10 @@
2020/12/19 | 1780 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-ts1.tfm
2020/12/19 | 1780 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-ts1.tfm
2020/12/19 | 1780 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-sc-ly1--base.tfm
-2020/12/19 | 17764 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
2020/12/19 | 1772 | macros/latex/contrib/menukeys/menukeys.ins
2020/12/19 | 1764 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-sc-t1--base.tfm
2020/12/19 | 1764 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-sc-t1--base.tfm
2020/12/19 | 1764 | fonts/scholax/tfm/TeXGyreScholaX-Italic-lf-sc-ly1--base.tfm
-2020/12/19 | 17644 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
2020/12/19 | 1760 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tosf-sc-ly1--base.tfm
2020/12/19 | 1760 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-sc-ly1--base.tfm
2020/12/19 | 1760 | fonts/scholax/tfm/TeXGyreScholaX-Italic-osf-sc-ly1--base.tfm
@@ -459,6 +1120,7 @@
2020/12/19 | 1728 | fonts/scholax/vf/TeXGyreScholaX-Italic-lf-t1.vf
2020/12/19 | 1728 | fonts/scholax/vf/TeXGyreScholaX-Bold-tosf-t1.vf
2020/12/19 | 172866 | fonts/scholax/type1/TeXGyreScholaX-Italic.pfb
+2020/12/19 | 172561 | macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
2020/12/19 | 1724 | fonts/scholax/vf/TeXGyreScholaX-Bold-tlf-t1.vf
2020/12/19 | 1724 | fonts/scholax/vf/TeXGyreScholaX-Bold-osf-t1.vf
2020/12/19 | 1724 | fonts/scholax/vf/TeXGyreScholaX-Bold-lf-t1.vf
@@ -476,7 +1138,6 @@
2020/12/19 | 1720 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-inf-t1.tfm
2020/12/19 | 1716 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-inf-t1--base.tfm
2020/12/19 | 1716 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-inf-ly1.tfm
-2020/12/19 | 1713628 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
2020/12/19 | 1712 | fonts/scholax/tfm/TeXGyreScholaX-Italic-lf-sc-t1--base.tfm
2020/12/19 | 1708 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-tosf-sc-t1.vf
2020/12/19 | 1708 | fonts/scholax/tfm/TeXGyreScholaX-Italic-osf-sc-t1--base.tfm
@@ -534,6 +1195,7 @@
2020/12/19 | 1696 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-ts1.tfm
2020/12/19 | 1680 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-tosf-sc-ly1.vf
2020/12/19 | 1680 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-inf-t1.tfm
+2020/12/19 | 168066 | macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
2020/12/19 | 1676 | fonts/scholax/vf/TeXGyreScholaX-Slanted-tosf-sc-ly1.vf
2020/12/19 | 1676 | fonts/scholax/vf/TeXGyreScholaX-Regular-tosf-sc-ly1.vf
2020/12/19 | 1676 | fonts/scholax/vf/TeXGyreScholaX-BoldSlanted-tlf-sc-ly1.vf
@@ -546,7 +1208,6 @@
2020/12/19 | 1676 | fonts/scholax/tfm/TeXGyreScholaX-Italic-lf-t1--base.tfm
2020/12/19 | 1676 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-inf-t1--base.tfm
2020/12/19 | 1676 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-inf-ly1.tfm
-2020/12/19 | 16752034 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
2020/12/19 | 1672 | fonts/scholax/vf/TeXGyreScholaX-Slanted-tlf-sc-ly1.vf
2020/12/19 | 1672 | fonts/scholax/vf/TeXGyreScholaX-Slanted-osf-sc-ly1.vf
2020/12/19 | 1672 | fonts/scholax/vf/TeXGyreScholaX-Slanted-lf-sc-ly1.vf
@@ -568,7 +1229,6 @@
2020/12/19 | 1664 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-ts1--base.tfm
2020/12/19 | 1664 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-ts1--base.tfm
2020/12/19 | 1656 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-t1--base.tfm
-2020/12/19 | 165644 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
2020/12/19 | 1652 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-t1--base.tfm
2020/12/19 | 165164 | fonts/scholax/opentype/TeXGyreScholaX-BoldSlanted.otf
2020/12/19 | 1648 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-sc-t1--base.tfm
@@ -581,10 +1241,6 @@
2020/12/19 | 1636 | fonts/scholax/tfm/TeXGyreScholaX-Italic-inf-ly1.tfm
2020/12/19 | 1612 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-t1--base.tfm
2020/12/19 | 1608 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-t1--base.tfm
-2020/12/19 | 160025 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2020/12/19 | 16001 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2020/12/19 | 16000 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2020/12/19 | 159541 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
2020/12/19 | 1592 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-ts1.tfm
2020/12/19 | 1592 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-ts1.tfm
2020/12/19 | 158344 | fonts/scholax/type1/TeXGyreScholaX-Regular.pfb
@@ -610,7 +1266,6 @@
2020/12/19 | 1540 | fonts/scholax/tfm/TeXGyreScholaX-Regular-osf-ts1--base.tfm
2020/12/19 | 1540 | fonts/scholax/tfm/TeXGyreScholaX-Regular-lf-ts1--base.tfm
2020/12/19 | 1540 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-sup-ot1.tfm
-2020/12/19 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
2020/12/19 | 1536 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-ts1.tfm
2020/12/19 | 1536 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-sc-ly1--base.tfm
2020/12/19 | 1536 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-ts1.tfm
@@ -619,13 +1274,10 @@
2020/12/19 | 1532 | fonts/scholax/tfm/TeXGyreScholaX-Regular-lf-sc-t1--base.tfm
2020/12/19 | 1532 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-ts1--base.tfm
2020/12/19 | 1532 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-ts1--base.tfm
-2020/12/19 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
2020/12/19 | 1524 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-sc-t1--base.tfm
2020/12/19 | 1524 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-sc-t1--base.tfm
2020/12/19 | 1524 | fonts/scholax/tfm/TeXGyreScholaX-Bold-inf-t1.tfm
2020/12/19 | 1520 | fonts/scholax/tfm/TeXGyreScholaX-Bold-inf-t1--base.tfm
-2020/12/19 | 151973 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2020/12/19 | 151768 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
2020/12/19 | 1512 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-sup-ot1.tfm
2020/12/19 | 1512 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-t1--base.tfm
2020/12/19 | 1512 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-t1--base.tfm
@@ -642,19 +1294,14 @@
2020/12/19 | 149416 | fonts/scholax/opentype/TeXGyreScholaX-Bold.otf
2020/12/19 | 1476 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-t1--base.tfm
2020/12/19 | 1476 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-t1--base.tfm
-2020/12/19 | 147018 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2020/12/19 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
2020/12/19 | 145912 | fonts/scholax/opentype/TeXGyreScholaX-Regular.otf
-2020/12/19 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2020/12/19 | 144033 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
2020/12/19 | 1436 | fonts/scholax/tfm/TeXGyreScholaX-Italic-sup-ot1.tfm
2020/12/19 | 1432 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-sup-ot1.tfm
2020/12/19 | 1428 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-sc-ot1--base.tfm
2020/12/19 | 1428 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-sc-ot1--base.tfm
2020/12/19 | 1424 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-osf-sc-ot1--base.tfm
2020/12/19 | 1424 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-sc-ot1--base.tfm
-2020/12/19 | 14165 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
-2020/12/19 | 1413906 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/12/19 | 141663632 | systems/win32/w32tex/context.tar.xz
2020/12/19 | 1412 | macros/latex/contrib/menukeys/README
2020/12/19 | 1400 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-sc-ot1--base.tfm
2020/12/19 | 1400 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-sc-ot1--base.tfm
@@ -685,26 +1332,19 @@
2020/12/19 | 13472 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-sc-t1.tfm
2020/12/19 | 13440 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-sc-t1.tfm
2020/12/19 | 13408 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-sc-t1.tfm
-2020/12/19 | 133575 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2020/12/19 | 13305 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
2020/12/19 | 13272 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-sc-t1.tfm
2020/12/19 | 13256 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-sc-t1.tfm
2020/12/19 | 13248 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-sc-t1.tfm
2020/12/19 | 13220 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-sc-t1.tfm
-2020/12/19 | 132144 | systems/texlive/tlnet/archive/texlive-scripts.r57164.tar.xz
2020/12/19 | 1316 | fonts/scholax/tfm/TeXGyreScholaX-Bold-sup-ot1.tfm
2020/12/19 | 1312 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tlf-sc-ot1--base.tfm
2020/12/19 | 1308 | fonts/scholax/tfm/TeXGyreScholaX-Italic-tosf-sc-ot1--base.tfm
2020/12/19 | 13064 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-sc-t1.tfm
-2020/12/19 | 130506 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
2020/12/19 | 1304 | fonts/scholax/tfm/TeXGyreScholaX-Regular-sup-ot1.tfm
2020/12/19 | 13048 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-sc-t1.tfm
-2020/12/19 | 130466 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
2020/12/19 | 13040 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-sc-t1.tfm
-2020/12/19 | 1302917 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
2020/12/19 | 13012 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-sc-t1.tfm
2020/12/19 | 1288 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-inf-ot1.tfm
-2020/12/19 | 1278048 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
2020/12/19 | 1268 | fonts/scholax/tfm/TeXGyreScholaX-Italic-inf-ot1.tfm
2020/12/19 | 12656 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-lf-t1.tfm
2020/12/19 | 12648 | fonts/scholax/tfm/TeXGyreScholaX-Slanted-tlf-t1.tfm
@@ -713,7 +1353,6 @@
2020/12/19 | 12488 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-lf-t1.tfm
2020/12/19 | 12480 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-osf-t1.tfm
2020/12/19 | 12476 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tlf-t1.tfm
-2020/12/19 | 1246215 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
2020/12/19 | 12448 | fonts/scholax/tfm/TeXGyreScholaX-BoldSlanted-tosf-t1.tfm
2020/12/19 | 12420 | fonts/scholax/tfm/TeXGyreScholaX-Regular-lf-t1.tfm
2020/12/19 | 12412 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-t1.tfm
@@ -723,8 +1362,6 @@
2020/12/19 | 12384 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-t1.tfm
2020/12/19 | 12372 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tlf-t1.tfm
2020/12/19 | 12348 | fonts/scholax/tfm/TeXGyreScholaX-BoldItalic-tosf-t1.tfm
-2020/12/19 | 1230955 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2020/12/19 | 1230532 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
2020/12/19 | 12280 | fonts/scholax/tfm/TeXGyreScholaX-Bold-lf-t1.tfm
2020/12/19 | 12272 | fonts/scholax/tfm/TeXGyreScholaX-Bold-osf-t1.tfm
2020/12/19 | 12268 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-t1.tfm
@@ -741,33 +1378,17 @@
2020/12/19 | 1192 | fonts/scholax/tfm/TeXGyreScholaX-Regular-lf-sc-ot1--base.tfm
2020/12/19 | 1192 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tosf-sc-ot1--base.tfm
2020/12/19 | 1192 | fonts/scholax/tfm/TeXGyreScholaX-Bold-tlf-sc-ot1--base.tfm
-2020/12/19 | 119080 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
2020/12/19 | 1168 | fonts/scholax/tfm/TeXGyreScholaX-Bold-inf-ot1.tfm
-2020/12/19 | 1168654 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
2020/12/19 | 1164 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tosf-sc-ot1--base.tfm
2020/12/19 | 1164 | fonts/scholax/tfm/TeXGyreScholaX-Regular-tlf-sc-ot1--base.tfm
-2020/12/19 | 115932 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2020/12/19 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
2020/12/19 | 115296 | systems/texlive/tlnet/archive/pdfxup.doc.r57166.tar.xz
2020/12/19 | 1148 | fonts/scholax/tfm/TeXGyreScholaX-Regular-inf-ot1.tfm
-2020/12/19 | 1148904 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2020/12/19 | 1148115 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2020/12/19 | 114670 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2020/12/19 | 113608 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2020/12/19 | 1129 | systems/win32/miktex/tm/packages/pr.ini
-2020/12/19 | 1127660 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2020/12/19 | 108924 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2020/12/19 | 1077044 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2020/12/19 | 104553 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2020/12/19 | 102826 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2020/12/19 | 101471 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
2020/12/18 | 9473 | fonts/utilities/fontools/bin/splitttc
2020/12/18 | 8791728 | systems/texlive/tlnet/archive/libertinus-type1.r57159.tar.xz
2020/12/18 | 87036 | macros/latex/contrib/rmathbr/rmathbr.dtx
2020/12/18 | 8556551 | fonts/newcomputermodern.zip
2020/12/18 | 8032 | fonts/utilities/fontools/share/fontools_lgr.enc
2020/12/18 | 7878 | fonts/newcomputermodern/README
-2020/12/18 | 754414 | systems/win32/w32tex/ChangeLog
2020/12/18 | 68663 | fonts/utilities/fontools/doc/autoinst.pdf
2020/12/18 | 6519264 | systems/texlive/tlnet/archive/inter.r57158.tar.xz
2020/12/18 | 5724 | systems/texlive/tlnet/archive/pbalance.r57161.tar.xz
@@ -818,7 +1439,6 @@
2020/12/17 | 7593 | support/pdfxup/pdfxup.1
2020/12/17 | 6766 | biblio/bibtex/contrib/gbt7714/README.md
2020/12/17 | 672412 | systems/texlive/tlnet/archive/babel.source.r57153.tar.xz
-2020/12/17 | 6660 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2020/12/17 | 6608484 | systems/win32/w32tex/ptex-ng-w32.tar.xz
2020/12/17 | 58 | systems/mac/mactex/MacTeXtras-20201217.zip.md5
2020/12/17 | 58641849 | systems/win32/w32tex/TLARM64W/tl-arm64-windows.zip
@@ -850,7 +1470,6 @@
2020/12/17 | 173112 | systems/texlive/tlnet/archive/josefin.doc.r57152.tar.xz
2020/12/17 | 172732 | systems/texlive/tlnet/archive/babel.r57153.tar.xz
2020/12/17 | 1641 | support/pdfxup/RELEASES
-2020/12/17 | 141670032 | systems/win32/w32tex/context.tar.xz
2020/12/17 | 1390 | support/pdfxup/README
2020/12/17 | 13340 | systems/texlive/tlnet/archive/bookcover.source.r57151.tar.xz
2020/12/17 | 115510 | biblio/bibtex/contrib/gbt7714/gbt7714.dtx
@@ -2085,7 +2704,6 @@
2020/12/15 | 785 | info/docsurvey/README.txt
2020/12/15 | 739868 | systems/texlive/tlnet/archive/fontsetup.doc.r57141.tar.xz
2020/12/15 | 5828 | systems/texlive/tlnet/archive/fontsetup.r57141.tar.xz
-2020/12/15 | 4535036 | systems/texlive/tlnet/archive/newcomputermodern.r57138.tar.xz
2020/12/15 | 44738 | info/docsurvey/docsurvey.tex
2020/12/15 | 424340 | systems/texlive/tlnet/archive/causets.doc.r57139.tar.xz
2020/12/15 | 3672 | systems/texlive/tlnet/archive/causets.r57139.tar.xz
@@ -2093,7 +2711,6 @@
2020/12/15 | 304199 | info/docsurvey.zip
2020/12/15 | 292549 | info/docsurvey/docsurvey.pdf
2020/12/15 | 2907884 | systems/texlive/tlnet/archive/beamer.doc.r57140.tar.xz
-2020/12/15 | 1662560 | systems/texlive/tlnet/archive/newcomputermodern.doc.r57138.tar.xz
2020/12/15 | 165744 | systems/texlive/tlnet/archive/beamer.r57140.tar.xz
2020/12/15 | 144152 | systems/texlive/tlnet/archive/bibtexperllibs.source.r57137.tar.xz
2020/12/15 | 12284 | systems/texlive/tlnet/archive/bibtexperllibs.r57137.tar.xz
@@ -2416,79 +3033,3 @@
2020/12/14 | 102808 | systems/win32/miktex/tm/packages/miktex-lua53-bin-x64-2.9.tar.lzma
2020/12/14 | 1016 | systems/win32/miktex/setup/rpm/fedora/32/repodata/12e0c759f2d453f16fa8fcf93b69160fe85d00c4d2bec19fbd6db493387b7e3b-other.sqlite.bz2
2020/12/14 | 101692 | systems/win32/miktex/tm/packages/miktex-mfware-bin-x64-2.9.tar.lzma
-2020/12/13 | 9896 | systems/texlive/tlnet/archive/curve2e.r57117.tar.xz
-2020/12/13 | 982 | macros/latex/contrib/babel-contrib/japanese/Makefile
-2020/12/13 | 973272 | fonts/newcomputermodern/NewCMMath-Regular.otf
-2020/12/13 | 95260 | info/ptex-manual/eptex_resume.tex
-2020/12/13 | 940 | support/bibtexperllibs/LaTeX-ToUnicode/MYMETA.json
-2020/12/13 | 76552 | info/ptex-manual/ptex-manual.tex
-2020/12/13 | 694464 | info/ptex-manual/eptex_resume.pdf
-2020/12/13 | 64126 | info/ptex-manual/eptexdoc.tex
-2020/12/13 | 610 | support/bibtexperllibs/LaTeX-ToUnicode/MYMETA.yml
-2020/12/13 | 5628 | support/bibtexperllibs/LaTeX-ToUnicode/lib/LaTeX/ToUnicode.pm
-2020/12/13 | 521800 | macros/latex/contrib/babel-contrib/japanese.zip
-2020/12/13 | 517 | support/bibtexperllibs/LaTeX-ToUnicode/META.yml
-2020/12/13 | 508 | support/bibtexperllibs/Makefile
-2020/12/13 | 483948 | systems/win32/w32tex/dvi2tty-w32.tar.xz
-2020/12/13 | 470 | support/bibtexperllibs/LaTeX-ToUnicode/Changes
-2020/12/13 | 466432 | macros/latex/contrib/enotez.zip
-2020/12/13 | 46352 | systems/texlive/tlnet/archive/curve2e.source.r57117.tar.xz
-2020/12/13 | 451515 | macros/latex/contrib/enotez/enotez_en.pdf
-2020/12/13 | 448132 | systems/win32/w32tex/win64/dvi2tty-w64.tar.xz
-2020/12/13 | 4282 | info/ptex-manual/ptex-manual.sty
-2020/12/13 | 42357 | info/ptex-manual/ptexdoc_asciimw.tex
-2020/12/13 | 414163 | graphics/pgf/contrib/causets/causets.pdf
-2020/12/13 | 408 | support/bibtexperllibs/LaTeX-ToUnicode/dist.ini
-2020/12/13 | 40042 | info/ptex-manual/ptex-guide-en.tex
-2020/12/13 | 3977 | macros/unicodetex/latex/fontsetup/fontsetup.sty
-2020/12/13 | 3842036 | systems/win32/w32tex/luajittex-w32.tar.xz
-2020/12/13 | 3828220 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
-2020/12/13 | 37938 | macros/latex/contrib/babel-contrib/japanese/babel-japanese-sample.pdf
-2020/12/13 | 37364 | macros/latex/contrib/enotez/enotez.sty
-2020/12/13 | 35293 | info/ptex-manual/jtex_asciimw.tex
-2020/12/13 | 348138 | info/ptex-manual/eptexdoc.pdf
-2020/12/13 | 3446540 | systems/win32/w32tex/win64/luajittex-w64.tar.xz
-2020/12/13 | 3443292 | systems/win32/w32tex/win64/luajittex-exp-w64.tar.xz
-2020/12/13 | 339 | support/bibtexperllibs/LaTeX-ToUnicode/README
-2020/12/13 | 338833 | macros/latex/contrib/babel-contrib/japanese/japanese.pdf
-2020/12/13 | 3372 | info/ptex-manual/fam256p.tex
-2020/12/13 | 33485 | macros/latex/contrib/babel-contrib/japanese/japanese.tex
-2020/12/13 | 3263 | macros/latex/contrib/enotez/enotez_split_example.tex
-2020/12/13 | 3173 | info/ptex-manual/fam256d.tex
-2020/12/13 | 3124432 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
-2020/12/13 | 3120948 | systems/win32/w32tex/win64/luatex-w64.tar.xz
-2020/12/13 | 29213 | support/bibtexperllibs/LaTeX-ToUnicode/Makefile
-2020/12/13 | 284296 | info/ptex-manual/ptex-manual.pdf
-2020/12/13 | 27232 | graphics/pgf/contrib/causets/causets.tex
-2020/12/13 | 264764 | info/ptex-manual/ptexdoc_asciimw.pdf
-2020/12/13 | 25964 | info/ptex-manual/jfm.tex
-2020/12/13 | 2589792 | systems/win32/w32tex/tex4htk-w32.tar.xz
-2020/12/13 | 251872 | info/ptex-manual/jtex_asciimw.pdf
-2020/12/13 | 2465257 | info/ptex-manual.zip
-2020/12/13 | 2447 | macros/latex/contrib/babel-contrib/japanese/README.md
-2020/12/13 | 22314 | graphics/pgf/contrib/causets/causet_tikz_example2.pdf
-2020/12/13 | 22193 | macros/latex/contrib/enotez/enotez_en.tex
-2020/12/13 | 20940 | systems/texlive/tlnet/archive/mcf2graph.r57116.tar.xz
-2020/12/13 | 2059 | graphics/pgf/contrib/causets/README.md
-2020/12/13 | 20341 | info/ptex-manual/jtexdoc_asciimw.tex
-2020/12/13 | 20295 | macros/latex/contrib/babel-contrib/japanese/babel-japanese.dtx
-2020/12/13 | 19615 | info/ptex-manual/ptexskip_asciimw.tex
-2020/12/13 | 1958 | support/bibtexperllibs/LaTeX-ToUnicode/t/convert.t
-2020/12/13 | 17024 | graphics/pgf/contrib/causets/causet_tikz_example1.pdf
-2020/12/13 | 164929 | info/ptex-manual/ptexskip_asciimw.pdf
-2020/12/13 | 164504 | info/ptex-manual/jfm.pdf
-2020/12/13 | 15915 | graphics/pgf/contrib/causets/causets.sty
-2020/12/13 | 1516 | info/ptex-manual/LICENSE
-2020/12/13 | 145704 | info/ptex-manual/jtexdoc_asciimw.pdf
-2020/12/13 | 135234 | macros/latex/contrib/babel-contrib/japanese/babel-japanese.pdf
-2020/12/13 | 1338 | macros/latex/contrib/babel-contrib/japanese/babel-japanese.ins
-2020/12/13 | 1312 | macros/latex/contrib/enotez/README
-2020/12/13 | 1287 | support/bibtexperllibs/README
-2020/12/13 | 12817 | support/bibtexperllibs/LaTeX-ToUnicode/lib/LaTeX/ToUnicode/Tables.pm
-2020/12/13 | 1226331 | systems/win32/miktex/tm/packages/curve2e.tar.lzma
-2020/12/13 | 1206 | info/ptex-manual/README.md
-2020/12/13 | 1170464 | systems/texlive/tlnet/archive/curve2e.doc.r57117.tar.xz
-2020/12/13 | 1103059 | systems/win32/miktex/tm/packages/mcf2graph.tar.lzma
-2020/12/13 | 1080348 | systems/texlive/tlnet/archive/mcf2graph.doc.r57116.tar.xz
-2020/12/13 | 1043 | support/bibtexperllibs/LaTeX-ToUnicode/Makefile.PL
-2020/12/13 | 104080 | info/ptex-manual/ptex-guide-en.pdf
diff --git a/fonts/cochineal/README b/fonts/cochineal/README
index 26ed1dfad9..46bd9939be 100644
--- a/fonts/cochineal/README
+++ b/fonts/cochineal/README
@@ -19,7 +19,10 @@ Files provided "as is", with no warranties.
The support files are provided in encodings OT1, T1, TS1 and LY1 for users of Western scripts, LGR for Greek scripts and T2A and OT2 for Cyrillic scripts.
-Current version: 1.064 (2020-09-23)
+Current version: 1.065 (2020-12-19)
+
+Changes in version 1.065
+Modified uzcochmia.fd and related metric files to add proper scale factor.
Changes in version 1.064
Corrected my generating script, which had overwritten the newest versions of zcoch[b]mia.{tfm,vf} with older versions made using encodings that are no longer supplied.
diff --git a/fonts/cochineal/tex/uzcochmia.fd b/fonts/cochineal/tex/uzcochmia.fd
index 53d51f503c..91eb72c8c7 100644
--- a/fonts/cochineal/tex/uzcochmia.fd
+++ b/fonts/cochineal/tex/uzcochmia.fd
@@ -10,11 +10,11 @@
\DeclareFontFamily{U}{zcochmia}{\skewchar \font =127}
\DeclareFontShape{U}{zcochmia}{m}{it}{
- <-> zcochmia
+ <-> \ntxmath@scaled zcochmia
}{}
\DeclareFontShape{U}{zcochmia}{b}{it}{
- <-> zcochbmia
+ <-> \ntxmath@scaled zcochbmia
}{}
\DeclareFontShape{U}{zcochmia}{m}{sl}{<->ssub * zcochmia/m/it}{}
diff --git a/fonts/notomath/README b/fonts/notomath/README
index 81565d6468..fd5f32106c 100644
--- a/fonts/notomath/README
+++ b/fonts/notomath/README
@@ -1,8 +1,9 @@
This small package provides a math package that amounts to modifications of the NotoSerif and NotoSans Roman and Greek letters with most symbols taken from newtxmath which must of course be installed (version 1.629 or higher) and its map file enabled. The eight font files in this package are in pfb format, licensed under the SIL OFL, version 1.1. All other LaTeX support files are subject to the LaTeX Project Public License. See
http://www.ctan.org/license/lppl1.3 for the details of that license.
-Current version: 1.00 2020-08-04
-
+Current version: 1.01 2020-12-19
+Changes in version 1.01
+Added some Greek Blackboard glyphs.
Maintainer: Michael Sharpe, msharpe@ucsd.edu \ No newline at end of file
diff --git a/fonts/notomath/tfm/notobmia.tfm b/fonts/notomath/tfm/notobmia.tfm
index e2592a607e..9ee6be9989 100644
--- a/fonts/notomath/tfm/notobmia.tfm
+++ b/fonts/notomath/tfm/notobmia.tfm
Binary files differ
diff --git a/fonts/notomath/tfm/notomia.tfm b/fonts/notomath/tfm/notomia.tfm
index d978180c41..b830788372 100644
--- a/fonts/notomath/tfm/notomia.tfm
+++ b/fonts/notomath/tfm/notomia.tfm
Binary files differ
diff --git a/fonts/notomath/vf/notobmia.vf b/fonts/notomath/vf/notobmia.vf
index 447f9da4df..419def74aa 100644
--- a/fonts/notomath/vf/notobmia.vf
+++ b/fonts/notomath/vf/notobmia.vf
Binary files differ
diff --git a/fonts/notomath/vf/notomia.vf b/fonts/notomath/vf/notomia.vf
index 550f0233d9..2f5966ada6 100644
--- a/fonts/notomath/vf/notomia.vf
+++ b/fonts/notomath/vf/notomia.vf
Binary files differ
diff --git a/fonts/scholax/README b/fonts/scholax/README
index bee2c60537..a7d84694f7 100644
--- a/fonts/scholax/README
+++ b/fonts/scholax/README
@@ -8,7 +8,10 @@ The licence of fourier-GUTenberg is LPPL (Latex Public
Project Licence) and the licence for TeXGyre fonts is equivalent to the LPPL, so this package is released under the LPPL.
-Current version: 1.028 2020-12-18
+Current version: 1.029 2020-12-19
+
+Changes in version 1.029
+Added a number of Blackboard Bold Greek glyphs to math family lettersA.
Changes in version 1.028
Corrected ts1 encoding so that glyph coverage is complete.
diff --git a/fonts/scholax/tfm/zncbmia.tfm b/fonts/scholax/tfm/zncbmia.tfm
index 788b33e59f..720ac343f1 100644
--- a/fonts/scholax/tfm/zncbmia.tfm
+++ b/fonts/scholax/tfm/zncbmia.tfm
Binary files differ
diff --git a/fonts/scholax/tfm/zncfbmia.tfm b/fonts/scholax/tfm/zncfbmia.tfm
index e9982be5a7..1242666696 100644
--- a/fonts/scholax/tfm/zncfbmia.tfm
+++ b/fonts/scholax/tfm/zncfbmia.tfm
Binary files differ
diff --git a/fonts/scholax/tfm/zncfmia.tfm b/fonts/scholax/tfm/zncfmia.tfm
index 86cd4b2413..b2784f1671 100644
--- a/fonts/scholax/tfm/zncfmia.tfm
+++ b/fonts/scholax/tfm/zncfmia.tfm
Binary files differ
diff --git a/fonts/scholax/tfm/zncmia.tfm b/fonts/scholax/tfm/zncmia.tfm
index 63f686649a..5d4b5b037a 100644
--- a/fonts/scholax/tfm/zncmia.tfm
+++ b/fonts/scholax/tfm/zncmia.tfm
Binary files differ
diff --git a/fonts/scholax/vf/zncbmia.vf b/fonts/scholax/vf/zncbmia.vf
index c197a610a4..c0a5b4a442 100644
--- a/fonts/scholax/vf/zncbmia.vf
+++ b/fonts/scholax/vf/zncbmia.vf
Binary files differ
diff --git a/fonts/scholax/vf/zncfbmia.vf b/fonts/scholax/vf/zncfbmia.vf
index aa8db1cfd7..aa71009df5 100644
--- a/fonts/scholax/vf/zncfbmia.vf
+++ b/fonts/scholax/vf/zncfbmia.vf
Binary files differ
diff --git a/fonts/scholax/vf/zncfmia.vf b/fonts/scholax/vf/zncfmia.vf
index 67a11055e0..439f2b892e 100644
--- a/fonts/scholax/vf/zncfmia.vf
+++ b/fonts/scholax/vf/zncfmia.vf
Binary files differ
diff --git a/fonts/scholax/vf/zncmia.vf b/fonts/scholax/vf/zncmia.vf
index 35242d2295..25cb520046 100644
--- a/fonts/scholax/vf/zncmia.vf
+++ b/fonts/scholax/vf/zncmia.vf
Binary files differ
diff --git a/graphics/circuit_macros/CHANGES b/graphics/circuit_macros/CHANGES
index 5427774e17..1f84acc33b 100644
--- a/graphics/circuit_macros/CHANGES
+++ b/graphics/circuit_macros/CHANGES
@@ -1,6 +1,10 @@
CHANGES
-Version 9.2.x: New macro ACsymbol, Proxim, Magn, options for mosfet, ground,
+Version 9.4: Changes to examples and additional SVG examples. New
+ macros RightAngle, PerpTo, langle, ArcAngle, DCsymbol. Rewritten
+ arrester macro. Tweaked Equidist3, ground, antenna, NeedDpicTools.
+ Modified List of Macros.
+Version 9.3: New macro ACsymbol, Proxim, Magn, options for mosfet, ground,
microphone, consource. Bugfix for the source macro. Tweaked examples,
macro svg_font. Added a short discussion of integrated circuits
and connectors. Removed compression of the manual to restore broken
diff --git a/graphics/circuit_macros/Copying b/graphics/circuit_macros/Copying
index 30acd259ab..1c8e4d1950 100644
--- a/graphics/circuit_macros/Copying
+++ b/graphics/circuit_macros/Copying
@@ -1,4 +1,4 @@
-* Circuit_macros Version 9.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 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/INSTALL b/graphics/circuit_macros/INSTALL
index 73ccc6bd3e..5d841884b7 100644
--- a/graphics/circuit_macros/INSTALL
+++ b/graphics/circuit_macros/INSTALL
@@ -38,6 +38,10 @@ INSTALLATION:
In case of difficulty, go to the examples directory, look at debug1.tex
and debug2.m4, and follow instructions.
+Installation on a Mac:
+ For a nice outline of how to install on a Mac, go to
+ https://www.hamish.science/2020/06/24/circuitmacros
+
TESTING:
To test your installation, go to the examples directory (or copy the
files Makefile, tst.tex, and any .m4 sources you might like to test
diff --git a/graphics/circuit_macros/README b/graphics/circuit_macros/README
index 982ea2a097..1ae81ea52e 100644
--- a/graphics/circuit_macros/README
+++ b/graphics/circuit_macros/README
@@ -1,5 +1,5 @@
-* Circuit_macros Version 9.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 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 *
@@ -166,7 +166,7 @@ DPIC:
older versions, see https://repology.org/project/dpic/badges
The best advice is to obtain the newest version.
- The dpic distribution includes a manual dpic-doc.pdf containing a summary
+ The dpic distribution includes dpic-doc.pdf, a manual containing a summary
of the pic language and of features unique to dpic.
EXAMPLES
@@ -182,7 +182,7 @@ EXAMPLES
The examples directory Makefile automates the generation of .ps, .eps,
.png, and .pdf files for individual diagrams. Subdirectories of the
examples directory are for testing metafont, metapost, pgf, psfrag,
- pdf, and xfig examples.
+ and xfig examples.
INTEGRATION WITH OTHER TOOLS:
Installation and usage of the macros have evolved smewhat since the
@@ -191,7 +191,7 @@ INTEGRATION WITH OTHER TOOLS:
I simply added commands to the appropriate Makefiles. However, others
have developed tools that simplify workflow for their circumstances.
The following are representative but keep in mind that systems and
- installations evolve ovr time:
+ installations evolve over time:
A Python-based GUI called PyCirkuit is
at https://pypi.org/project/pycirkuit/ and
@@ -216,15 +216,18 @@ INTEGRATION WITH OTHER TOOLS:
A KDE interface created by Matteo Agostinelli can be found
at http://wwwu.uni-klu.ac.at/magostin/cirkuit.html. A git
- repository of a newer version of cirkuit by Andrew G. for Linux
- is at https://github.com/ag-ckt/cirkuit/tree/V0.5.0. There is
- uncertainty about installation possibilities because of changes in
- library dependencies.
+ repository of a newer version by Andrew G. for Linux is at
+ https://github.com/ag-ckt/cirkuit/tree/V0.5.0. There is uncertainty
+ about installation possibilities because of evolving library dependencies.
A wiki offering examples and tips is at
http://swwiki.e-dschungel.de/circuit_macros
It is in German but Google translate works well on the page.
+ Another recent introduction is at
+ https://www.root.cz/clanky/publikovanie-elektrickych-schem-a-diagramov-pomocou-circuit-macros/
+ It is in Czech but, again, Google translate works well.
+
LaTeX automation tools are discussed at, for example,
http://tex.stackexchange.com/questions/64/tools-for-automating-document-compilation
@@ -240,10 +243,12 @@ VARIATIONS
needs and taste. They continue to evolve in my own library as I use
them and as others send comments. No such collection can hope to
include all possible circuit-related symbols, so you will probably
- find yourself writing your own macros or adapting some of these. Be
- careful to rename modified macros to avoid confusion. The learning
- curve compares well to other packages, but there is no trivially easy
- way to produce high-quality graphics.
+ find yourself writing your own macros or adapting some of these.
+ Be careful to rename modified macros to avoid confusion. The learning
+ curve compares well to other packages, but there is no trivially
+ easy way to produce high-quality graphics. (If a picture is worth
+ a thousand words, ask yourself how long it would take to write and
+ revise a thousand words.)
See eschpic on Github for IEC-style electrical drawings.
@@ -282,28 +287,23 @@ Postscript, CorelDraw, Adobe Illustrator:
SVG output, Inkscape:
Dpic -v produces svg output. If the result is to be directly
- inserted into html, then as for Postscript output, the diagram source
- file has to be adapted to remove any LaTeX formatting. The configuration
- file svg.m4 contains macros that can assist.
-
- If SVG is the ultimate goal, then it may be advisable to use the tool
- dvisvgm to convert dvi to svg. An alternative on some systems is to
- produce pdf and then use pdf2svg, since the font selection and formatting
- problems associated with direct production of svg are eliminated.
+ inserted into html, then as for Postscript output, the diagram
+ source file has to be adapted to remove any LaTeX formatting. The
+ configuration file svg.m4 contains macros that can assist. To avoid
+ this problem at the expense of an extra postprocessing step,
+ sophisticated text formatting and font selection can be retained
+ by first producing pdf output and then converting to SVG using,
+ say, pdf2svg (https://github.com/dawbarton/pdf2svg) or dvisvgm
+ (https://www.ctan.org/pkg/dvisvgm).
SVG is the native file format for the Inkscape graphics editor.
- Therefore, elements defined by these macros can be output by dpic -v
- in svg format for later manipulation by Inkscape. A basic palette
- of circuit elements for importing into Inkscape is found in
- examples/svg/paletteSVG.m4. In the svg subdirectory, type
- "make paletteSVG.svg", read the resulting file into Inkscape, and then
- ungroup the elements as desired. You would probably wish to add to or
- customize these elements for extensive use.
-
- Recent Inkscape versions can export graphics to eps or pdf format
- and text to tex format, so that labels can be formatted by LaTeX and
- overlaid on the graphics file. This process allows the use of Inkscape
- to place and embellish circuit elements.
+ Therefore, elements defined by these macros can be output by dpic
+ -v in svg format for later manipulation by Inkscape. A very basic
+ palette of circuit elements for importing into Inkscape is found
+ in examples/svg/paletteSVG.m4. In the svg subdirectory, type "make
+ paletteSVG.svg", read the resulting file into Inkscape, and then ungroup
+ the elements as desired. You would probably wish to add to or customize
+ these elements for extensive use.
Metafont:
The file examples/mf/cct.mf is a Metafont source for a few variants of
diff --git a/graphics/circuit_macros/darrow.m4 b/graphics/circuit_macros/darrow.m4
index c2742857af..44da3b45da 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.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 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 *
@@ -276,7 +276,6 @@ define(`darc',`[ C: (0,0)
line thick linethick/2 \
from C+(rect_(r+dlthick/2-lthick/4,ae))-(X.x,X.y) to \
C+(rect_(r-dlthick/2+lthick/4,ae))-(X.x,X.y)')
-# { "S" at S; "E" at E; "C" at C; "TS" at TS; "TE" at TE }
rp_ang := ae+pi__/2
] with ifelse(`$1',,.S at Here,.C at `$1')
move to last [].E
diff --git a/graphics/circuit_macros/doc/ACsymbol.m4 b/graphics/circuit_macros/doc/ACsymbol.m4
new file mode 100644
index 0000000000..114a0f1879
--- /dev/null
+++ b/graphics/circuit_macros/doc/ACsymbol.m4
@@ -0,0 +1,4 @@
+.PS
+cct_init
+ACsymbol
+.PE
diff --git a/graphics/circuit_macros/doc/AntennasMan.m4 b/graphics/circuit_macros/doc/AntennasMan.m4
index 6053cd2e3f..a2bb3be5f0 100644
--- a/graphics/circuit_macros/doc/AntennasMan.m4
+++ b/graphics/circuit_macros/doc/AntennasMan.m4
@@ -31,9 +31,9 @@ sinclude(Circuit_macros.dim)
s_box(T1) below rjust at A.T1
s_box(T2) below ljust at A.T2
s_box(`\tt (,{,}D)') at A.n above
- A: antenna(at A.T+(elen_,0),,P)
+ A: antenna(at A.T+(elen_,0),dimen_*3/4,P)
s_box(T) below at A.T
- s_box(`\tt (,{,}P)') at A.n above
+ s_box(`\tt (,dimen\_*3/4,P)') at A.n above
A: antenna(at A.T+(elen_,0),,F)
s_box(T) below at A.T
s_box(`\tt (,{,}F)') at A.n above
diff --git a/graphics/circuit_macros/doc/ArrestersMan.m4 b/graphics/circuit_macros/doc/ArrestersMan.m4
new file mode 100644
index 0000000000..dc08e40429
--- /dev/null
+++ b/graphics/circuit_macros/doc/ArrestersMan.m4
@@ -0,0 +1,75 @@
+.PS
+# ArrestersMan.m4
+cct_init
+
+ sep = 0.2
+
+R1: [
+ arrester
+ {`"\tt arrester"' at last line.c+(0,-0.2)}
+ move sep
+ arrester(,G)
+ {`"\tt arrester(,G)"' at last line.c+(0,-0.2)}
+ move sep
+ arrester(,g)
+ {`"\tt ...(,g)"' at last line.c+(0,-0.2)}
+ move sep
+ arrester(,M)
+ {`"\tt \ldots(,M)"' at last line.c+(0,-0.2)}
+ move sep
+ arrester(,C)
+ {`"\tt \ldots(,C)"' at last line.c+(0,-0.2)}
+ move sep
+ arrester(,A)
+ {`"\tt \ldots(,A)"' at last line.c+(0,-0.2)}
+ ]
+
+R2: [
+ arrester(,H)
+ {`"\tt \ldots(,H)"' at last line.c+(0,-0.2)}
+ move sep
+ arrester(,HR)
+ {`"\tt \ldots(,HR)"' at last line.c+(0,-0.2)}
+ move sep
+ arrester(,P)
+ {`"\tt \ldots(,P)"' at last line.c+(0,-0.2)}
+ move sep
+ arrester(,s)
+ {`"\tt \ldots(,s)"' at last line.c+(0,-0.2)}
+ move sep
+ arrester(,F)
+ {`"\tt \ldots(,F)"' at last line.c+(0,-0.2)}
+ move sep
+ arrester(,S)
+ {`"\tt \ldots(,S)"' at last line.c+(0,-0.2)}
+
+ ] with .nw at R1.sw+(0,-0.2)
+
+ define(`Dlabels',
+ `{ thinlines_
+ arrow <- from A.A up 0.1 left 0.1; "\sl A" rjust
+ arrow <- from A.B up 0.1 right 0.1; "\sl B" ljust
+ arrow <- from A.G up 0.05 right 0.15; "\sl G" ljust
+ thicklines_ }')
+[
+ arrester(,E)
+ {`"\tt \ldots(,E)"' at last line.c+(0,-0.25)}
+ move sep
+ A: arrester(,DE)
+ {`"\tt \ldots(,DE)"' at last [].s+(0,-0.1)}
+ Dlabels
+ move sep*3
+ A: arrester(,DS)
+ {`"\tt \ldots(,DS)"' at last [].s+(0,-0.1)}
+ Dlabels
+ move sep*3
+ A: arrester(,DEL)
+ {`"\tt \ldots(,DEL)"' at last [].s+(0,-0.1)}
+ Dlabels
+ move sep*3
+ A: arrester(,DSL)
+ {`"\tt \ldots(,DSL)"' at last [].s+(0,-0.1)}
+ Dlabels
+ ] with .nw at R2.sw+(0,-0.2)
+
+.PE
diff --git a/graphics/circuit_macros/doc/CctTableMan.m4 b/graphics/circuit_macros/doc/CctTableMan.m4
index f7e47d0758..221c62b737 100644
--- a/graphics/circuit_macros/doc/CctTableMan.m4
+++ b/graphics/circuit_macros/doc/CctTableMan.m4
@@ -85,6 +85,8 @@ vm = 0.28
}
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.pdf b/graphics/circuit_macros/doc/Circuit_macros.pdf
index 78a14a9ca9..6e50fe8ba6 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/DCsymbol.m4 b/graphics/circuit_macros/doc/DCsymbol.m4
new file mode 100644
index 0000000000..5d66149410
--- /dev/null
+++ b/graphics/circuit_macros/doc/DCsymbol.m4
@@ -0,0 +1,4 @@
+.PS
+cct_init
+DCsymbol
+.PE
diff --git a/graphics/circuit_macros/doc/GroundsMan.m4 b/graphics/circuit_macros/doc/GroundsMan.m4
index e93fadf33c..a2aeba6e7f 100644
--- a/graphics/circuit_macros/doc/GroundsMan.m4
+++ b/graphics/circuit_macros/doc/GroundsMan.m4
@@ -1,5 +1,5 @@
.PS
-# `Grounds.m4'
+# GroundsMan.m4
cct_init
sep = 0.65
@@ -22,7 +22,7 @@ D: B+(0,11bp__)
"{\tt (,{,}E)}" at (GE,D)}
-GS: ground(,,S)
+GS: ground(,dimen_/2,S)
move right sep
GS90: [ground(,,S,90) ] with .n at Here
move right sep from GS90.n
@@ -36,7 +36,7 @@ GPA: ground(,T,PA)
C: Here+(0,-0.5)
E: C+(0,11bp__)
- "{\tt (,{,}S)}" at (GS,C)
+ "{\tt (,dimen\_/2,S)}" at (GS,C)
"{\tt (,{,}S,90)}" at (GS90,E)
"{\tt (,{,}Q)}" at (GQ,C)
"{\tt (,{,}L)}" at (GL,E)
diff --git a/graphics/circuit_macros/doc/Makefile b/graphics/circuit_macros/doc/Makefile
index 9e27cc0b27..fb7ed9bc93 100644
--- a/graphics/circuit_macros/doc/Makefile
+++ b/graphics/circuit_macros/doc/Makefile
@@ -5,11 +5,12 @@ DOC = Circuit_macros
DOCSRC = Circuit_macros.tex body.tex defines.tex
PICTEX = \
- AmpTableMan.tex AntennasMan.tex AudioMan.tex Axes.tex \
+ 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 \
- Dac.tex Darlington.tex DemultiplexerMan.tex DiodesMan.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 \
Loop.tex MultiplexerMan.tex NPDTMan.tex NLGMan.tex NportMan.tex \
@@ -89,6 +90,11 @@ $(DOC).$(SFX): mode.tex citations $(PICTEX)
@printf "\n No file $(DOC).$(SFX)\n\n" ; \
$(LATEX) $(DOC) ; bibtex $(DOC) ; fi
+ACsymbol.tex DCsymbol.tex:
+ touch $(DOC).dim
+ $(M4) $(M4LIBS) $(DOC).dim $*.m4 > $*.pic
+ $(PRE) $(PIC) $*.pic | sed -e '/end{tikzpicture}/s/$$/%/' > $*.tex
+
citations: mode.tex $(DOC).bbl $(PICTEX)
@printf "\n citations:\n\n"
$(LATEX) $(DOC) ; bibtex $(DOC)
diff --git a/graphics/circuit_macros/doc/Version.tex b/graphics/circuit_macros/doc/Version.tex
index ca449b0a0b..9d14ec204e 100644
--- a/graphics/circuit_macros/doc/Version.tex
+++ b/graphics/circuit_macros/doc/Version.tex
@@ -1 +1 @@
-Version 9.3
+Version 9.4
diff --git a/graphics/circuit_macros/doc/body.tex b/graphics/circuit_macros/doc/body.tex
index cbb2fdb058..ac8db93ef5 100644
--- a/graphics/circuit_macros/doc/body.tex
+++ b/graphics/circuit_macros/doc/body.tex
@@ -92,7 +92,7 @@ The result is passed through a
\pic interpreter to produce {\tt .tex} output that can be inserted
into a {\tt .tex} document using the \verb|\input| command.
-\begin{figure}[hbt]
+\begin{figure}[ht]
\pdftooltip{\input Flowdiag }{Flow diagram for the inclusion of figures}
\caption{Inclusion of figures and macros in the \latex document.
\label{Flowdiag}}
@@ -193,7 +193,7 @@ A configuration file ({\tt pstricks.m4} and {\tt pgf.m4} in the
above examples) is {\em always} the first file to be given to \Mfour.
Put the following or its equivalent in the document body:
\begin{verbatim}
-\begin{figure}[hbt]
+\begin{figure}[ht]
\centering
\input quick
\caption{Customized caption for the figure.}
@@ -218,7 +218,7 @@ to be read, thereby defining the macro {\tt cct\_init}.
The diagram source file is then read and
the circuit-element macros in {\tt libcct.m4} are defined during
expansion of {\tt cct\_init}.
-\begin{figure}[hbt]
+\begin{figure}[ht]
\input ConfigA
\caption{The command
{\tt m4 pstricks.m4 quick.m4 > quick.pic}.
@@ -239,7 +239,7 @@ the commands are
\noindent
and the figure inclusion statements are as shown:
\begin{verbatim}
-\begin{figure}[hbt]
+\begin{figure}[ht]
\input quick
\centerline{\box\graph}
\caption{Customized caption for the figure.}
@@ -470,7 +470,7 @@ The construction
\noindent
truncates the line at each end by {\tt x} (which may be negative)
or, if {\tt x} is omitted, by
-the current circle radius, which is convenient when A and B are
+the current circle radius, a convenience when A and B are
circular graph nodes, for example. Otherwise
{\tt line from A to B chop x chop y}
@@ -728,7 +728,11 @@ operating-system commands, \pic macros, and external file inclusion.
There is a fundamental difference between the two-terminal elements, each
of which is drawn along an invisible straight-line segment,
and other elements, which are compound objects mentioned
-in \SR{Compoundobjects:}. The two-terminal element macros follow a
+in \SR{Compoundobjects:}.
+% Specifying the straight-line segment requires four numbers, the coordinates
+% of the start and end, or equivalent, but default values are used if
+% not specified.
+The two-terminal element macros follow a
set of conventions described in this section, and other elements will
be described in \SR{Composite:}.
@@ -745,7 +749,7 @@ The first part of the source file for this figure is
%as follows:
on the left:
-\begin{figure}[hbt]
+\begin{figure}[ht]
\parbox{2in}{\tt .PS\\ \hbox{}\quad cct\_init\\ \hbox{}\quad linewid = 2.0\\
\hbox{}\quad linethick\_(2.0)\\ R1: resistor}
\raisebox{-0.3in}{\hbox{\input{BigResistor.tex}}}
@@ -829,7 +833,8 @@ were added after the previously shown source:
\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{Switches}.
+to~\REF{Arresters}.
Several elements are included more than once to illustrate
some of their arguments, which are listed in \SR{defines}.
\enlargethispage{\baselineskip}
@@ -846,12 +851,13 @@ 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}[hbt]
+\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)}
@@ -862,7 +868,7 @@ vertices per side.
The macro {\tt up\_} evaluates to {\tt up} but also resets the current
directional parameters to point up.
-\begin{figure}[hbt]
+\begin{figure}[ht]
\input SourcesMan
% \ifpdf\vspace*{-0.5\baselineskip}\fi%
\caption{Sources and source-like elements.}
@@ -875,11 +881,16 @@ 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 to an ebox:
+the {\tt sinusoid} macro. For example to add the sumbol
+(\input{ACsymbol.tex}) to an ebox:
\par
{\tt ebox; $\lbrace$\ ACsymbol(at last [],{,},dimen\_/8) $\rbrace$}
-\begin{figure}[hbt]
+\noindent
+For direct current (\input{DCsymbol.tex}), there is also
+{\tt DCsymbol(at {\sl position, length, height,} U|D|L|R|{\sl degrees})}.
+
+\begin{figure}[ht]
\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])}.
@@ -923,6 +934,8 @@ The first argument of the macro
\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,
\par
{\tt diode(right\_ 0.4); reversed(`diode',right\_ 0.4)}
@@ -930,11 +943,6 @@ Thus,
\noindent
draws two diodes to the right, but the second one points left.
-\begin{figure}[bt]
- \input EmarrowsMan
- \caption{Radiation arrows: {\tt em\_arrows({\sl type, angle, length})}}
- \label{Emarrows}
- \end{figure}
Similarly, the macro
\par
{\tt resized(}{\sl factor},`{\sl macro name}',{\sl macro arguments}{\tt )}
@@ -949,12 +957,31 @@ 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]
+ \input EmarrowsMan
+ \caption{Radiation arrows: {\tt em\_arrows({\sl type, angle, length})}}
+ \label{Emarrows}
+ \end{figure}
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
@@ -979,7 +1006,7 @@ thus, the following line draws the resistor in \FR{Variable}:
\par
{\tt resistor(down\_ dimen\_); variable(,uN)}
-\begin{figure}[h!t]
+\begin{figure}[ht]
\vspace*{-\baselineskip}
\input VariableMan
\caption{Illustrating
@@ -1011,7 +1038,7 @@ 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}[h!t]
+\begin{figure}[ht]
% \ifpdf\vspace*{-0.5\baselineskip}\fi%
\input currents
\caption{Illustrating {\tt b\_current, larrow,} and {\tt rarrow}.
@@ -1153,7 +1180,7 @@ The macro {\tt eleminit\_} in the two-terminal elements invokes
to establish element length and direction.
As shown in \FR{Oblique},
-\begin{figure}[h!b]
+\begin{figure}[ht]
\vspace{-\baselineskip}
\parbox{4.5in}{\small \verbatiminput{Oblique.m4}}%
\hfill\raise-0.7in\llap{\hbox{\input Oblique }}%
@@ -1196,7 +1223,7 @@ makes some geometries particularly simple. Thus,
\noindent
draws three elements in series
as shown in the top line of \FR{Series}.
-\begin{figure}[h!t]
+\begin{figure}[ht]
\vspace{-\baselineskip}
\input Series
\caption{Three ways of drawing basic elements in series.}
@@ -1247,7 +1274,7 @@ producing the left circuit in \FR{ParSeries}:
line from L.end to C.end
\end{verbatim}
-\begin{figure}[h!t]
+\begin{figure}[ht]
% \vspace*{-\baselineskip}
\input ParSeries
\vspace*{-\baselineskip}
@@ -1305,7 +1332,7 @@ first draws a resistor along the specified line, then adds arrows for taps
at fractional positions along the body, with default or specified length.
A negative length draws the arrow from the right of the current drawing
direction.
-\begin{figure}[h!t]
+\begin{figure}[ht!]
\input Potentiometers
\caption{Default and multiple-tap potentiometer.}
\label{Potentiometers}
@@ -1317,7 +1344,7 @@ The macro {\tt
$\ldots$)},
shown in \FR{Taps}, will add taps to the
immediately preceding two-terminal element.
-\begin{figure}[h!t]
+\begin{figure}[ht]
\input Taps
\caption{Macros for adding taps to two-terminal elements.}
\label{Taps}
@@ -1338,7 +1365,17 @@ drawn elements.
A few composite symbols derived from two-terminal elements
are shown in \FR{Composite}.
+\begin{figure}[h!b]
+ \vspace*{-0.5ex}
+% \vspace*{-\baselineskip}
+ \input Composite
+ \vspace*{-0.5ex}
+ \caption{Composite elements {\tt KelvinR({\sl cycles},[R],{\sl cycle wid})}
+ and {\tt FTcap({\sl chars})} .}
+ \label{Composite}
+ \end{figure}
+\enlargethispage{\baselineskip}
The ground symbol is shown in \FR{Grounds}.
The first argument specifies position; for example, the two lines shown
have identical effect:
@@ -1347,15 +1384,6 @@ have identical effect:
\par
ground(at (1.5,2)) }
-\begin{figure}[h!t]
- \vspace*{-0.5ex}
- \input Composite
- \vspace*{-0.5ex}
- \caption{Composite elements {\tt KelvinR({\sl cycles},[R],{\sl cycle wid})}
- and {\tt FTcap({\sl chars})} .}
- \label{Composite}
- \end{figure}
-
%\noindent
The second argument truncates
the stem, and the third defines the symbol type.
@@ -1369,26 +1397,27 @@ macro and reset at the end using {\tt resetdir\_}.
\input GroundsMan
\caption{The
{\tt ground( at }{\sl position}{\tt,
- T, N|F|S|L|P[A]|E, U|D|L|R|{\sl degrees} )}
+ T|{\sl stem length}, N|F|S|L|P[A]|E, U|D|L|R|{\sl degrees} )}
macro.}
\label{Grounds}
\end{figure}
-The arguments of the macro
-{\tt antenna( at }{\sl position}{\tt,
- T, A|L|T|S|D|P|F, U|D|L|R|{\sl degrees} )}
+The arguments of
+{\tt antenna(at }{\sl position}{\tt,
+ T|{\sl stem length}, A|L|T|S|D|P|F, U|D|L|R|{\sl degrees})}
shown in \FR{Antennas} are similar to those of {\tt ground}.
-\begin{figure}[h!t]
+\begin{figure}[h!]
\input AntennasMan
\caption{Antenna symbols, with macro arguments shown above and
terminal names below.}
\label{Antennas}
\end{figure}
-\pagebreak
\FR{Opamp} illustrates the macro
{\tt opamp({\sl\linespec, - label, + label, size, chars})\label{OPAMP}}.
-\begin{figure}[h!t]
+The element is enclosed in a block
+containing the predefined internal locations shown.
+\begin{figure}[ht]
% \ifpdf\vspace*{-0.5\baselineskip}\fi%
\input OpampMan
\caption{Operational amplifiers. The {\tt P} option adds
@@ -1396,8 +1425,6 @@ shown in \FR{Antennas} are similar to those of {\tt ground}.
to place and rotate arbitrary text at {\tt In1} and {\tt In2}.}
\label{Opamp}
\end{figure}
-The element is enclosed in a block
-containing the predefined internal locations shown.
These locations can be referenced in later
commands, for example as ``{\tt last [].Out}.''
The first argument defines the direction and length of the opamp, but the
@@ -1418,7 +1445,7 @@ using postprocessor commands (for example \PSTricks \verb|\rput|)
as second and third arguments.
The code in \FR{oax} places an opamp with three connections.
-\begin{figure}[h!t]
+\begin{figure}[h!b]
\parbox{4in}{\small \verbatiminput{oaxbody.m4}}%
\quad\raise-0.2in\hbox{\input oax }%
% \vspace{-\baselineskip}
@@ -1430,6 +1457,14 @@ The code in \FR{oax} places an opamp with three connections.
\FR{Xform} shows variants of the transformer macro,
which has predefined internal locations
{\sl P1,} {\sl P2,} {\sl S1,} {\sl S2,} {\sl TP,} and {\sl TS.}
+\begin{figure}[h!t]
+ \input XformMan
+ \caption{The {\tt transformer(\linespec,L|R,{\sl np},%
+[A|P][W|L][D1|D2|D12|D21],{\sl ns})}
+ macro (drawing direction {\tt down}), showing predefined terminal
+ and centre-tap points.}
+ \label{Xform}
+ \end{figure}
The first argument
specifies the direction and distance from {\sl P1} to {\sl P2}, with
position determined by the enclosing block as for opamps. The second
@@ -1442,21 +1477,18 @@ if a {\tt P}, the core is dashed (powder);
and if it contains a {\tt W}, wide windings are drawn.
A {\tt D1} puts phase dots at the {\sl P1, S1} end, {\tt D2} at the
{\sl P2, S2} ends, and {\tt D12} or {\tt D21} puts dots at opposite ends.
-\begin{figure}[h!t]
-% \ifpdf\vspace*{-\baselineskip}\fi%
- \input XformMan
-% \vspace{-\baselineskip}
- \caption{The {\tt transformer(\linespec,L|R,{\sl np},%
-[A|P][W|L][D1|D2|D12|D21],{\sl ns})}
- macro (drawing direction {\tt down}), showing predefined terminal
- and centre-tap points.}
- \label{Xform}
- \end{figure}
-\pagebreak
\FR{Audio} shows some audio devices, defined in {\tt []} blocks,
with predefined internal locations as shown.
-\begin{figure}[h!t]
+The first argument specifies the device orientation.
+Thus,
+\par
+{\tt S: speaker(U) with .In2 at Here}
+
+\noindent
+places an upward-facing speaker with input {\sl In2} at the
+current location.
+\begin{figure}[ht]
% \ifpdf\vspace*{-\baselineskip}\fi%
\input AudioMan
% \ifpdf\vspace*{-\baselineskip}\fi%
@@ -1466,20 +1498,11 @@ with predefined internal locations as shown.
earphone}, with their internally named positions and components.}
\label{Audio}
\end{figure}
-The first argument specifies the device orientation.
-
-Thus,
-
-{\tt S: speaker(U) with .In2 at Here}
-
-\noindent
-places an upward-facing speaker with input {\sl In2} at the
-current location.
The {\tt nport({\sl box specs {\tt[;} other commands{\tt]},
nw, nn, ne, ns, space ratio, pin lgth, style})}
macro is shown in \FR{Nport}.
-\begin{figure}[h!t]
+\begin{figure}[ht]
% \ifpdf\vspace*{-\baselineskip}\fi
\input NportMan
% \ifpdf\vspace*{-\baselineskip}\fi
@@ -1520,7 +1543,6 @@ immediately after drawing it but within the enclosing block:
If this trick were to be used extensively, then the following custom wrapper
would save typing, add the labels, and pass all arguments to
{\tt nport}:
-\pagebreak
\begin{verbatim}
define(`nullor',`nport(`$1'
@@ -1529,33 +1551,21 @@ define(`nullor',`nport(`$1'
\end{verbatim}
The above example and the related gyrator macro are illustrated in
-\FR{NLG}.
-% \ifpdf\vspace*{\baselineskip}\fi%
-\begin{figure}[h!t]
+\FR{NLG}.\hfill\break
+
+\begin{figure}[ht]
\input NLGMan
\caption{The {\tt nullor} example and the {\tt gyrator}
macro are customizations of the {\tt nport} macro.}
\label{NLG}
\end{figure}
-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!t]
-% \ifpdf\vspace*{-0.5\baselineskip}\fi%
- \input NPDTMan
-% \ifpdf\vspace*{-0.5\baselineskip}\fi%
- \caption{Multipole double-throw switches drawn by
- {\tt NPDT({\sl npoles}, [R])}.}
- \label{NPDT}
- \end{figure}
-
\FR{Contact} shows the macro {\tt contact({\sl chars})},
which contains predefined locations {\sl P, C, O}
for the armature and normally closed and normally
open terminals.
An {\tt I} in the first argument draws open circles for contacts.
-\begin{figure}[h!t]
+\begin{figure}[ht]
% \ifpdf\vspace*{-\baselineskip}\else\vspace*{-0.5\baselineskip}\fi%
\input ContactMan
\vspace{-1ex}
@@ -1565,11 +1575,9 @@ An {\tt I} in the first argument draws open circles for contacts.
\label{Contact}
\end{figure}
-\pagebreak
The {\tt contacts({\sl poles, chars})} macro in \FR{Contacts}
draws multiple contacts.
-\begin{figure}[h!t]
-% \ifpdf\vspace*{-\baselineskip}\else\vspace*{-0.5\baselineskip}\fi%
+\begin{figure}[ht]
\input ContactsMan
\vspace{-1ex}
\caption{The {\tt contacts({\sl poles, chars})}
@@ -1581,7 +1589,9 @@ 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.
-\begin{figure}[h!t]
+
+\pagebreak
+\begin{figure}[ht]
% \ifpdf\vspace*{-\baselineskip}\else\vspace*{-0.5\baselineskip}\fi%
\input relaycoilMan
\vspace{-1ex}
@@ -1591,9 +1601,8 @@ actuator types.
The {\tt relay({\sl poles, chars})} macro in \FR{Relay}
defines coil terminals {\sl V1, V2} and contact
-terminals {\sl P$_i$, C$_i$, O$_i$.}
-\begin{figure}[h!t]
-% \ifpdf\vspace*{-\baselineskip}\else\vspace*{-0.5\baselineskip}\fi%
+terminals {\sl P$_i$, C$_i$, O$_i$.}
+\begin{figure}[ht]
\input RelayMan
\vspace{-1ex}
\caption{The {\tt relay({\sl poles, chars})}
@@ -1602,14 +1611,14 @@ terminals {\sl P$_i$, C$_i$, O$_i$.}
\end{figure}
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!t]
+illustrated in \FR{Jack}.
+The first argument of both macros establishes the drawing direction.
+\begin{figure}[h!]
\input JackMan
\vspace{-1ex}
\caption{The {\tt jack(U|D|L|R|{\sl degrees}, {\sl chars})}
- and {\tt plug(U|D|L|R|{\sl degrees},[2|3][R])} components
- and their defined points.}
+ and {\tt plug(U|D|L|R|{\sl degrees},[2|3][R])} components
+ and their defined points.}
\label{Jack}
\end{figure}
The second argument is a string of characters defining drawn components.
@@ -1628,14 +1637,14 @@ 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}[h!t]
+\begin{figure}[ht]
% \ifpdf\vspace*{-0.5\baselineskip}\fi%
\input HeadersMan
% \ifpdf{\vspace*{-0.5ex}}\fi%
\caption{Macro {\tt Header(1|2, {\sl rows, wid, ht, type})}.}
\label{Headers}
\end{figure}
-\begin{figure}[h!t]
+\begin{figure}[ht]
\input ConnMan
% \ifpdf{\vspace*{-0.5ex}}\fi%
\caption{Macros {\tt tstrip(R|L|U|D|{\sl degrees}, {\sl chars})},
@@ -1645,7 +1654,7 @@ for width and height.
\label{Conn}
% \ifpdf{\vspace*{-1ex}}\fi%
\end{figure}
-\begin{figure}[h!t]
+\begin{figure}[ht]
% \ifpdf{\vspace*{-1ex}}\fi%
\input PconnMan
% \ifpdf{\vspace*{-0.5ex}}\fi%
@@ -1655,13 +1664,23 @@ for width and height.
\label{Pconn}
\end{figure}
-\pagebreak
+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]
+ \ifpdf{\vspace*{-1ex}}\fi%
+ \input NPDTMan
+ \caption{Multipole double-throw switches drawn by
+ {\tt NPDT({\sl npoles}, [R])}.}
+ \label{NPDT}
+ \end{figure}
+
A basic winding macro for magnetic-circuit sketches and similar figures
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!t]
+\begin{figure}[h!b]
\vspace*{-\baselineskip}%
% \ifpdf\vspace*{-2\baselineskip}\else \vspace{-\baselineskip}\fi
\input WindingsMan
@@ -1679,7 +1698,7 @@ is first drawn and then blanked in appropriate places using the background
which contains predefined internal locations {\sl E},
{\sl B}, {\sl C}.
The first argument defines the distance and direction from {\sl E}
-\begin{figure}[h!t]
+\begin{figure}[ht]
% \ifpdf\vspace*{-0.5\baselineskip}\fi%
\input BipMan
% \ifpdf\vspace*{-0.5\baselineskip}\fi%
@@ -1694,7 +1713,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}[h!t]
+\begin{figure}[ht]
\input Darlington
\caption{Macro {\tt Darlington(L|R,[E][P][B1][E1|R1][E2|R2][D][Z])},
drawing direction {\tt up\_}.}
@@ -1703,8 +1722,8 @@ 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}[h!t]
-\vspace*{-\baselineskip}
+\begin{figure}[ht]
+%\vspace*{-\baselineskip}
\quad\quad\parbox{4in}{\small \verbatiminput{bitrbody.m4}}%
\quad\raise-0.4in\hbox{\input bitr }%
\vspace{-\baselineskip}
@@ -1717,8 +1736,8 @@ 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}[h!t]
-\vspace*{-0.5\baselineskip}
+\begin{figure}[ht]
+%\vspace*{-0.5\baselineskip}
\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
@@ -1734,7 +1753,7 @@ 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}[h!t]
+\begin{figure}[ht]
% \ifpdf\vspace*{-\baselineskip}\else\vspace*{-0.5\baselineskip}\fi%
\input ujtMan
% \ifpdf\vspace*{-0.5\baselineskip}\fi%
@@ -1768,7 +1787,7 @@ draws the element from position {\sl A} to position {\sl B} with label
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}[h!t]
+\begin{figure}[ht]
% \ifpdf\vspace*{-\baselineskip}\fi%
\input fetMan
% \ifpdf\vspace*{-\baselineskip}\fi%
@@ -1806,7 +1825,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}[h!t]
+\begin{figure}[ht]
% \ifpdf\vspace*{-\baselineskip}\fi%
\input TgateMan
\caption{The {\tt tgate({\sl linespec,} [B][R|L])} element, derived from
@@ -1824,7 +1843,7 @@ 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}[h!t]
+\begin{figure}[ht]
\input bistableMan
% \vspace{-1ex}
\caption{Bipolar transistor circuit, illustrating {\tt crossover}
@@ -1936,7 +1955,7 @@ two-terminal element.
Input locations retain their positions relative to the gate body
regardless of gate orientation, as in \FR{FF}.
-\begin{figure}[h!t]
+\begin{figure}[ht]
\vspace*{-\baselineskip}
\parbox{4.75in}{\small \verbatiminput{FF.m4}}%
\input FF
@@ -1944,7 +1963,7 @@ regardless of gate orientation, as in \FR{FF}.
\caption{$SR$ flip-flop.}
\label{FF}
\end{figure}
-\begin{figure}[h!t]
+\begin{figure}[ht]
\input mplex
\caption{Eight-input multiplexer, showing a gate with wings.}
\label{exVIII}
@@ -2018,7 +2037,7 @@ 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}[h!t]
+\begin{figure}[ht]
\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
@@ -2027,28 +2046,12 @@ but requires internal locations of the block to be referenced using
\label{Buffer}
\end{figure}
-\FR{Multiplexer} shows a multiplexer block with variations, and
- \FR{Demultiplexer} shows
-the very similar demultiplexer.
-\begin{figure}[h!t]
- \input MultiplexerMan
- \caption{The {\tt Mux({\sl input count}, {\sl label},
- [L][B|H|X][N[$n$]|S[$n$]][[N]OE],{\sl wid},{\sl ht})} macro.}
- \label{Multiplexer}
- \end{figure}
-\begin{figure}[h!t]
- \input DemultiplexerMan
- \caption{The {\tt Demux({\sl input count}, {\sl label},
- [L][B|H|X][N[$n$]|S[$n$]][[N]OE],{\sl wid},{\sl ht})} macro.}
- \label{Demultiplexer}
- \end{figure}
-
\FR{FlipFlops} shows
the macro {\tt FlipFlop(D|T|RS|JK, {\sl label, boxspec, pinlength})},
which is a
wrapper for the more general macro {\tt FlipFlopX(}{\sl boxspec, label,
leftpins, toppins, rightpins, bottompins, pinlength}{\tt )}.
-\begin{figure}[h!t]
+\begin{figure}[ht]
\input FlipFlop
\caption{The {\tt FlipFlop} and {\tt FlipFlopX} macros, with variations.}
\label{FlipFlops}
@@ -2070,27 +2073,45 @@ 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.
+\begin{figure}[h!t]
+ \input MultiplexerMan
+ \caption{The {\tt Mux({\sl input count}, {\sl label},
+ [L][B|H|X][N[$n$]|S[$n$]][[N]OE],{\sl wid},{\sl ht})} macro.}
+ \label{Multiplexer}
+ \end{figure}
+\begin{figure}[h!t]
+ \input DemultiplexerMan
+ \caption{The {\tt Demux({\sl input count}, {\sl label},
+ [L][B|H|X][N[$n$]|S[$n$]][[N]OE],{\sl wid},{\sl ht})} macro.}
+ \label{Demultiplexer}
+ \end{figure}
+
Customized gates can be defined simply.
For example, the following code defines the custom flipflops in \FR{ShiftR}.
+\begin{verbatim}
+define(`customFF',`FlipFlopX(wid 10*L_unit ht FF_ht*L_unit,,
+ :S;NE:CK;:R, N:PR, :Q;;ifelse(`$1',1,:lg_bartxt(Q)), N:CLR) ')
+\end{verbatim}
\begin{figure}[h!t]
\input ShiftRMan
\caption{A 5-bit shift register.}
\label{ShiftR}
\end{figure}
-\begin{verbatim}
-define(`customFF',`FlipFlopX(wid 10*L_unit ht FF_ht*L_unit,,
- :S;NE:CK;:R, N:PR, :Q;;ifelse(`$1',1,:lg_bartxt(Q)), N:CLR) ')
-\end{verbatim}
This definition makes use of macros \verb|L_unit| and
\verb|FF_ht| that predefine default dimensions.
-There are three pins on the right side; the centre pin is null 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
of which can be specified as macro arguments.
-\begin{figure}[h!t]
+\begin{figure}[ht]
% \ifpdf\vspace*{-\baselineskip}\fi%
\input Dac
% \ifpdf\vspace*{-\baselineskip}\fi%
@@ -2145,7 +2166,7 @@ can be given to the
\char96{}{\sl actions}\char39,
{\sl value1, value2, $\ldots$})}
which executes the given actions successively with
- {\sl variable} = {\sl value1}, {\sl value2} $ldots$ and the
+ {\sl variable} = {\sl value1}, {\sl value2} $\ldots$ and the
counter {\tt m4Lx} set to 1, 2, $\ldots$ as in the diagram.
\xection{Element and diagram scaling\label{Scaling:}}
@@ -2291,7 +2312,7 @@ A few examples will be given.
Custom two-terminal elements can often be defined by writing a wrapper
for an existing element. For example, an enclosed thermal switch
can be defined as shown in \FR{Thermal}.
-\begin{figure}[h!t]
+\begin{figure}[ht]
\parbox{4.2in}{\tt define(`thermalsw',\hfill\break
\hbox{}\space`dswitch(`\$1',`\$2',WDdBTh)\hfill\break
\hbox{}\space\space circle rad distance(M4T,last line.c)
@@ -2360,7 +2381,7 @@ define(`hybrid_PI_BJT',
`"$\mathrm{r_o}$"' at Ro.c+vec_(hunit/4,0)
`$2' ] ')
\end{verbatim}
-\begin{figure}[h!t]
+\begin{figure}[ht]
\vspace*{-0.5ex}
\input HybridPi
\vspace*{-0.5ex}
@@ -2368,10 +2389,10 @@ define(`hybrid_PI_BJT',
\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,
+\FR{Sinus} customizes the {\tt source} macro to show a cycle of a horizontal sinusoid with adjustable phase given by argument 2 in degrees,
as might be wanted for a 3-phase circuit:
\begin{figure}[ht]
\hfill\input Sinus
@@ -2391,14 +2412,13 @@ $3,$4,$5)')
\end{figure}
\Example{5}
-Repeated subcircuits might have different orientations
-that
-include only the element and its mirror image, for example, so the
+Repeated subcircuits might appear only
+as the subcircuit and its mirror image, for example, so the
power of the \verb|vec_()| and \verb|rvec_()| macros is not required.
Suppose that an optoisolator is to be drawn with left-right or right-left
orientation as shown in \FR{Opto}.
%\vspace*{-0.5em}
-\begin{figure}[h!t]
+\begin{figure}[h!b]
\input Opto
\caption{Showing {\tt opto} and {\tt opto(BR)} with defined labels.}
\label{Opto}
@@ -2423,6 +2443,7 @@ for readability; this usage is made possible by testing the argument string
using the {\tt ifinstr()} macro rather than requiring an exact match.
A draft of the macro follows, and the file {\tt Optoiso.m4} in the examples
directory adds a third type option.
+
\begin{verbatim}
# `opto([R|L][A|B])'
define(`opto',`[{u = dimen_/2
@@ -2470,7 +2491,7 @@ F2: fbfilter(L,R,K_2,C_{23},R_3) with .In at F1.In
ground(at F2.G)
\end{verbatim}
\vspace*{-0.5em}
-\begin{figure}[h!t]
+\begin{figure}[ht]
\input fbfilter
\caption{Showing the result of two invocations of the {\tt fbfilter} macro,
with labels.}
@@ -2546,8 +2567,8 @@ main document source is \latex{}ed to input the diagram and format the
text, and also to write the text dimensions into a supplementary file.
Then the diagram source is processed again, reading the required
dimensions from the supplementary file and producing a diagram ready
-for final \latex{}ing. This hackery is summarized below, with an example
-in \FR{stringdim}.
+for final \latex{}ing.
+This hackery is summarized below, with an example in \FR{stringdim}.
\begin{itemize}
\item Put \verb|\usepackage{boxdims}| into the document source.
\item Insert the following at the beginning of the diagram source,
@@ -2558,9 +2579,9 @@ in \FR{stringdim}.
typeset text of known size, or alternatively, invoke the macros
\verb|\boxdims| and \verb|boxdim| described later.
The argument of {\tt s\_box} need not be text exclusively; it can
- be anything that produces a \TeX\ box.
+ be anything that produces a \TeX\ box, for example, \verb|\includegraphics|.
\end{itemize}
-\begin{figure}[h!t]
+\begin{figure}[ht]
\parbox{3.5in}{\small\tt.PS\\
gen\_init\\
sinclude(Circuit\_macros.dim)\\
@@ -2649,6 +2670,8 @@ 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)}
@@ -2682,7 +2705,7 @@ Objects can be taylored to their attached text by invoking
The small source file in \FR{boxdims}, for example,
produces the box in the figure.
%\vspace*{-\baselineskip}%
-\begin{figure}[h!t]
+\begin{figure}[ht]
\parbox{4.2in}{\small \input eboxdims.verb }%
\hfill\llap{\raise-0.35in\hbox{\input eboxdims }}%
\vspace{-\baselineskip}
@@ -2736,13 +2759,12 @@ More tricks can be played. The example
\noindent shows a nice way of including eps graphics in a diagram. The
included picture (named {\tt Picture} in the example) has known position and
dimensions, which can be used to add vector graphics or text to the
-picture. To aid in overlaying objects, the macro {\tt boxcoord(}{\sl
-object name, x-fraction, y-fraction}{\tt)} evaluates to a position,
-with {\tt boxcoord(}{\sl object name}{\tt,0,0)} at the lower left
-corner of the object, and {\tt boxcoord(}{\sl object name}{\tt,1,1)} at
-its upper right.
+picture. To aid in overlaying objects, the macro
+{\tt boxcoord(}{\sl object name, x-fraction, y-fraction}{\tt)}
+evaluates to a position, with {\tt boxcoord(}{\sl object name}{\tt,0,0)}
+at the lower left corner of the object, and {\tt boxcoord(}{\sl object
+name}{\tt,1,1)} at its upper right.
-\pagebreak
\xection{\PSTricks and other tricks\label{Pstricks:}}
This section applies only to a \pic processor (\dpic) that is
capable of producing output compatible with
@@ -2764,7 +2786,7 @@ which contains both horizontal text and text rotated $90^\circ$ along the
vertical line.
This rotation of text is also implemented by the macro
{\tt rs\_box}, which is similar
-to {\tt s\_box} but rotates its text argument by $90^\circ,$ a default angle
+to {\tt s\_box} but rotates its argument by~$90^\circ,$ a default angle
that can be changed by preceding invocation with
\verb|define(`text_ang',|{\sl degrees}{\tt )}. The {\tt rs\_box} macro
requires either \PSTricks or \TPGF and, like {\tt s\_box}, it calculates the
@@ -2814,15 +2836,6 @@ macros such as {\tt rs\_box}, {\tt shade}, and {\tt rgbfill} mentioned
previously can be used to hide code differences.
\subsection{\Tikz\ with pic}\label{Tikzwithpic:}
-%The line
-%
-%\vspace{\parsep}
-%\noindent{\tt command "}{\sl string}{\tt "}
-%\vspace{\parsep}
-%
-%\noindent
-%allows arbitrary postprocessor code to be embedded in \pic output. However,
-%one can also embed
Arbitrary \pic output can be inserted into a {\tt \bsl{}tikzpicture}
environment. The trick is to keep the \pic and \Tikz coordinate systems
the same.
@@ -2830,14 +2843,14 @@ The lines
\vspace{\parsep}
\noindent\verb|\begin{tikzpicture}[scale=2.54]|\\
-\noindent\verb|\end{tikzpicture}|
+\noindent\verb|\end{tikzpicture}%|
\vspace{\parsep}
\noindent in the {\tt dpic -g} output must be changed to
\vspace{\parsep}
\noindent\verb|\begin{scope}[scale=2.54]|\\
-\noindent\verb|\end{scope}|
+\noindent\verb|\end{scope}%|
\vspace{\parsep}
This is accomplished, for example, by adapting the {\tt \bsl{}mtotex}
@@ -3010,6 +3023,7 @@ 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.
@@ -3181,6 +3195,8 @@ repaired by using an \Mfour loop:
{\tt for\_(1,5,1,`s\_box(A[m4x]); move')}
+Note that the loop index variable {\tt m4x} is automatically defined.
+
\item
\bflistitem{Quotes}{quotes}
Single quote characters are stripped in pairs by \Mfour, so the string
@@ -3201,6 +3217,11 @@ repaired by using an \Mfour loop:
not optimal or where the quotes could be omitted, and there are
rare exceptions such as the {\tt parallel\_} macro.
+ To keep track of paired single quotes, parentheses ``{\tt (}, {\tt)},''
+ braces ``\lbr, \rbr,'' and brackets ``{\tt [}, {\tt ]},'' use an editor
+ that highlights these pairs. For example, the vim editor highlights
+ single quotes with the command \verb|:set mps+=`:'|.
+
\item
\bflistitem{Dollar signs}{dollarsigns}
The $i$-th argument of an \Mfour macro is {\tt \$}$i,$ where $i$ is
diff --git a/graphics/circuit_macros/doc/defines.tex b/graphics/circuit_macros/doc/defines.tex
index cb3a1a5dae..fdc1f85c35 100644
--- a/graphics/circuit_macros/doc/defines.tex
+++ b/graphics/circuit_macros/doc/defines.tex
@@ -8,11 +8,11 @@
%
\newbox\Defbox
-\newcommand{\macx}[2]{%
- \phantomsection\pdfbookmark[subsection]{#1}{#2}#1}
+%\newcommand{\macx}[2]{%
+% \phantomsection\pdfbookmark[subsection]{#1}{#2}#1}
\newcommand{\macrodef}[5]{%\begin{samepage}%
-\phantomsection\pdfbookmark[subsection]{#1}{#2}%
+\phantomsection\pdfbookmark[subsubsection]{#1}{#2}%
\setbox\Defbox=\hbox{\tt #1#3}%
\ifdim\wd\Defbox>\textwidth%
\setbox\Defbox=\hbox{\parbox{\textwidth}{\tt #1#3}}\fi
@@ -22,12 +22,26 @@
\hbox to \libwid{#4\hfill}\parbox[t]{\rightwid}%
{\raggedright #5}%
% \end{samepage}%
- \vspace{\parsep}\\}
+ \vspace{\parsep}\\}%
\newcommand{\seesect}[1]{ (\SR{#1})}
+\newcommand{\Letter}[1]{\noindent%
+ \pdfbookmark[subsection]{#1}{#1}%
+ \hskip-2em\hbox to 2em{#1\label{#1}\hfill}\relax}%
+
+\newcommand{\LR}[1]{\hyperref[#1]{{#1}}\hskip1em}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
\vspace{\abovedisplayskip}
\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}
+\\
+
+\Letter{A}%
\macrodef{above\_}{above_}{}
{gen}
{string position above relative to current direction}
@@ -39,8 +53,8 @@
{cct}
{draw an AC symbol ( 1-cycle sine wave); If arg 4 contains A, two arcs
are drawn. The current drawing direction is default, otherwise Up, Down,
- Left, Right, or at {\sl degrees} slant; e.g.,
- {\tt ebox; $\lbrace$ ACsymbol(at last [],{,}dimen\_/8) $\rbrace$} }
+ Left, Right, or at {\sl degrees} slant; \seesect{Twoterminal:} e.g.,\\
+ {\tt ebox; $\lbrace$ACsymbol(at last [],{,}dimen\_/8)$\rbrace$}}
\macrodef{adc}{adc}{({\sl width,height,nIn,nN,nOut,nS})}
{cct}
{ADC with defined width, height, and number of inputs {\tt In$i$},
@@ -107,6 +121,12 @@
{\sl modifiers}) }
{gen}
{arc with acute angle (obtuse if radius is negative), drawn in a [ ] block}
+\macrodef{ArcAngle}{ArcAngle}{({\sl position, position, position, radius,
+ modifiers}) }
+ {gen}
+ {Arc angle symbol drawn ccw at arg2. Arg4 is the radius from arg2;
+ arg5 contains line attributes, e.g., {\tt thick linethick/2}}
+
\macrodef{arcd}{arcd}{({\sl center},
{\sl radius},{\sl start degrees},{\sl end degrees}) }
{gen}
@@ -139,6 +159,29 @@
radius},[dashed|dotted])}
{gen}
{line toward position 1 with rounded corner toward position 2}
+\macrodef{arrester}{arrester}{(\linespec,{\sl chars},
+ {\sl len}[:arrowhead ht],
+ {\sl ht}[:arrowhead wid] )}
+ {cct}
+{
+ {\sl Arg2 chars:}
+ {\tt G=} spark gap (default),
+ {\tt g=} general (dots),
+ {\tt E=} gas discharge,
+ {\tt S=} box enclosure,
+ {\tt C=} carbon block,
+ {\tt A=} electrolytic cell,
+ {\tt H=} horn gap,
+ {\tt P=} protective gap,
+ {\tt s=} sphere gap,
+ {\tt F=} film element,
+ {\tt M=} multigap.
+ {\sl Modifiers in arg2:}
+ {\tt R=} right orientation,
+ {\tt L=} left orientation,
+ {\tt D=} 3-terminal element for {\tt S, E}
+ only, with terminals {\sl A, B, G}
+ \seesect{Twoterminal:}}
\macrodef{arrowline}{arrowline}{(\linespec)}
{cct}
{line (dotted, dashed permissible) with centred arrowhead
@@ -176,6 +219,7 @@
Setting {\tt offset=}{\sl value} displaces the
drawn input list in order to disambiguate the input connections when {\tt L}
is used}
+\Letter{B}%
\macrodef{b\_}{b_}{}
{gen}
{blue color value}
@@ -276,6 +320,7 @@
{cct}
{buzzer, {\sl In1} to {\sl In3} defined, C=curved
\seesect{Composite:}}
+\Letter{C}%
\macrodef{c\_fet}{c_fet}{(\linespec,L|R,P)}
{cct}
{left or right, plain or negated pin simplified MOSFET}
@@ -387,6 +432,7 @@
\macrodef{csdim\_}{csdim_}{}
{cct}
{controlled-source width}
+\Letter{D}%
\macrodef{d\_fet}{d_fet}{(\linespec,L|R,P,S,E|S)}
{cct}
{left or right, N or P depletion MOSFET, normal or simplified,
@@ -473,6 +519,14 @@
\macrodef{dcosine3D}{dcosine3D}{({\sl i,x,y,z})}
{3D}
{extract i-th entry of triple x,y,z}
+\macrodef{DCsymbol}{DCsymbol}{(at {\sl position, len, ht,}
+ U|D|L|R|{\sl degrees}) }
+ {cct}
+ {A DC symbol (a dashed line below a solid line).
+ The current drawing direction is default, otherwise Up, Down,
+ Left, Right, or at {\sl degrees} slant; e.g.,
+ {\tt source(up\_ dimen\_); $\lbrace$ DCsymbol(at last [],,,R) $\rbrace$}
+ \seesect{Twoterminal:} }
\macrodef{delay\_rad\_}{delay_rad_}{}
{cct}
{delay radius}
@@ -510,7 +564,7 @@
{difference of two triples}
\macrodef{dimen\_}{dimen_}{}
{cct}
- {size parameter for circuit elements \seesect{Circuitscaling:}}
+ {size parameter for scaling circuit element bodies \seesect{Circuitscaling:}}
\macrodef{dimension\_}{dimension_}{(\linespec,{\sl offset},{\sl label},
D|H|W|{\sl blank width},{\sl tic offset},{\sl arrowhead })}
{gen}
@@ -653,6 +707,7 @@ B|CR|D|G|L|LE[R]|P[R]|S|Sh|T|V|v|w|Z|chars,%
\macrodef{dturn}{dturn}{({\sl degrees ccw})}
{darrow}
{turn dline arg1 degrees left (ccw)}
+\Letter{E}%
\macrodef{E\_\_}{E__}{}
{gen}
{the constant $e$}
@@ -692,14 +747,15 @@ B|CR|D|G|L|LE[R]|P[R]|S|Sh|T|V|v|w|Z|chars,%
\macrodef{endshade}{endshade}{}
{gen}
{end gray shading, see {\tt beginshade}}
-\macrodef{Equidist3}{Equidist3}{({\sl Pos1, Pos2, Pos3, Result})}
+\macrodef{Equidist3}{Equidist3}{({\sl Pos1, Pos2, Pos3, Result, distance})}
{gen}
{Calculates location named {\sl Result} equidistant from the first three
positions, i.e.\ the centre of the circle passing through the three
- positions}
+ positions. If arg5 is nonblank, it is equated to the radius.}
\macrodef{expe}{expe}{}
{gen}
{exponential, base $e$}
+\Letter{F}%
\macrodef{f\_box}{f_box}{({\sl boxspecs},{\sl text},{\sl expr1},$\cdots$)}
{gen}
{like {\tt s\_box} but the text is overlaid on a box of identical size.
@@ -778,6 +834,7 @@ B|CR|D|G|L|LE[R]|P[R]|S|Sh|T|V|v|w|Z|chars,%
{cct}
{fuse symbol, type$=$
{\tt A|B|C|D|S|HB|HC|SB} or {\tt dA=D}\seesect{Twoterminal:}}
+\Letter{G}%
\macrodef{g\_}{g_}{}
{gen}
{green color value}
@@ -809,10 +866,10 @@ B|CR|D|G|L|LE[R]|P[R]|S|Sh|T|V|v|w|Z|chars,%
\macrodef{grid\_}{grid_}{({\sl x},{\sl y})}
{log}
{absolute grid location}
-\macrodef{ground}{ground}{(at {\sl location}, T, N|F|S|L|P[A]|E, U|D|L|R|{\sl
- degrees})}
+\macrodef{ground}{ground}{(at {\sl location}, T|{\sl stem length},
+ N|F|S|L|P[A]|E, U|D|L|R|{\sl degrees})}
{cct}
- { ground, without stem for nonblank 2nd arg;
+ { ground, without stem for 2nd arg = T;
{\tt N}=normal, {\tt F}=frame, {\tt S}=signal, {\tt L}=low-noise,
{\tt P}=protective,
{\tt PA}=protective alternate,
@@ -828,6 +885,7 @@ B|CR|D|G|L|LE[R]|P[R]|S|Sh|T|V|v|w|Z|chars,%
{Gyrator two-port wrapper for {\tt nport}, {\tt N} omits pin dots; {\tt V}
gives a vertical orientation
\seesect{Composite:}}
+\Letter{H}%
\macrodef{H\_ht}{H_ht}{}
{log}
{hysteresis symbol dimension in {\tt L\_unit}s}
@@ -867,6 +925,7 @@ n|e|s|w,{\sl length})}
\macrodef{ht\_}{ht_}{}
{gen}
{height relative to current direction}
+\Letter{I}%
\macrodef{ifdpic}{ifdpic}{({\sl if true},{\sl if false})}
{gen}
{test if dpic has been specified as pic processor}
@@ -942,6 +1001,7 @@ n|e|s|w,{\sl length})}
along the line; {\tt P}= label only;
{\tt N}=with {\tt NOT\_circle};
{\tt R}=circle to right of current direction }
+\Letter{J}%
\macrodef{j\_fet}{j_fet}{(\linespec,L|R,P,E)}
{cct}
{left or right, N or P JFET, without or with envelope
@@ -952,10 +1012,12 @@ n|e|s|w,{\sl length})}
one or more {\tt L[M][B]} for L and auxiliary contacts with make or break
points; {\tt S[M][B]} for S and auxiliary contacts
\seesect{Composite:}}
+\Letter{K}%
\macrodef{KelvinR}{KelvinR}{({\sl cycles},[R],{\sl cycle wid})}
{cct}
{IEEE resistor in a {\tt [ ]} block with Kelvin taps {\sl T1} and {\sl T2}
\seesect{Composite:}}
+\Letter{L}%
\macrodef{L\_unit}{L_unit}{}
{log}
{logic-element grid size}
@@ -1073,6 +1135,7 @@ n|e|s|w,{\sl length})}
\macrodef{lthick}{lthick}{}
{gen}
{current line thickness in drawing units}
+\Letter{M}%
\macrodef{m4\_arrow}{m4_arrow}{(\linespec,{\sl ht},{\sl wid})}
{gen}
{arrow with adjustable head, filled when possible}
@@ -1169,6 +1232,7 @@ n|e|s|w,{\sl length})}
\macrodef{Mx\_pins}{Mx_pins}{}
{log}
{max number of gate inputs without wings}
+\Letter{N}%
\macrodef{n\_}{n_}{}
{gen}
{.n with respect to current direction}
@@ -1254,6 +1318,7 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
Otherwise, arg1 can be a sequence of letters {\tt P|N}
to define normal or negated inputs.
\seesect{Logicgates:}}
+\Letter{O}%
\macrodef{opamp}{opamp}{(\linespec,{\sl label},{\sl label},{\sl size},{\sl
chars}, other commands)}
{cct}
@@ -1283,6 +1348,7 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{OR\_rad}{OR_rad}{}
{log}
{radius of OR input face in {\tt L\_unit}s}
+\Letter{P}%
\macrodef{parallel\_}{parallel_}{(\char96{\sl elementspec}\char39,%
\char96{\sl elementspec}\char39 $\ldots$)}
{cct}
@@ -1339,12 +1405,19 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{point\_}{point_}{({\sl angle})}
{gen}
{(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
+ from {\sl Point} to {\sl Line}.}
\macrodef{Point\_}{Point_}{({\sl integer})}
{gen}
{sets direction cosines in degrees \seesect{Placing:}}
\macrodef{polar\_}{polar_}{({\sl x},{\sl y})}
{gen}
{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}.}
\macrodef{potentiometer}{potentiometer}{(\linespec,%
{\sl cycles},{\sl fractional pos},{\sl length},$\cdots$)}
{cct}
@@ -1371,6 +1444,7 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
{cct}
{pass transistor; {\tt L=} left orientation
\seesect{Semiconductors:}}
+\Letter{R}%
\macrodef{r\_}{r_}{}
{gen}
{red color value}
@@ -1450,9 +1524,12 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
{reverse polarity of 2-terminal element}
\macrodef{rgbdraw}{rgbdraw}{({\sl color triple}, {\sl drawing commands})}
{gen}
- {color drawing for PSTricks, pgf, MetaPost, svg postprocessors;
+ {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:}}
+ 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
@@ -1470,6 +1547,11 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\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 =
+ line attributes, e.g., {\tt outlined "gray"}}
\macrodef{rjust\_}{rjust_}{}
{gen}
{right justify with respect to current direction}
@@ -1538,6 +1620,7 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{rvec\_}{rvec_}{({\sl x},{\sl y})}
{gen}
{location relative to current direction}
+\Letter{S}%
\macrodef{s\_}{s_}{}
{gen}
{.s with respect to current direction}
@@ -1611,6 +1694,12 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
{gen}
{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
+ 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}
@@ -1784,6 +1873,7 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
if arg4=B (button switch): arg3 = O{\tt|}C
O=normally open, C=normally closed,
if arg4=D: arg3 = same as for dswitch \seesect{Twoterminal:}}
+\Letter{T}%
\macrodef{ta\_xy}{ta_xy}{({\sl x, y})}
{cct}
{macro-internal coordinates adjusted for {\tt L|R}}
@@ -1901,6 +1991,7 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{twopi\_}{twopi_}{}
{gen}
{$2\pi$}
+\Letter{U}%
\macrodef{ujt}{ujt}{(\linespec,R,P,E)}
{cct}
{unijunction transistor, right, P-channel, envelope
@@ -1914,6 +2005,7 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{up\_}{up_}{}
{gen}
{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})}
{cct}
@@ -1961,6 +2053,7 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
{gen}
{{\tt Vsum\_(A,B)} evaluates to {\tt A+B} with dpic, {\tt A+(B.x,B.y)}
with gpic}
+\Letter{W}%
\macrodef{w\_}{w_}{}
{gen}
{.w with respect to current direction}
@@ -1984,6 +2077,7 @@ nw,nn,ne,ns,pin lgth,style, other commands})}
\macrodef{XOR\_off}{XOR_off}{}
{log}
{XOR and NXOR offset of input face}
+\Letter{X}%
\macrodef{xtal}{xtal}{(\linespec)}
{cct}
{quartz crystal\seesect{Twoterminal:}}
diff --git a/graphics/circuit_macros/dpictools.pic b/graphics/circuit_macros/dpictools.pic
index 8f39057417..008360f9a4 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.3, copyright (c) 2020 J. D. Aplevich under #
+# Circuit_macros Version 9.4, copyright (c) 2020 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/examples/ASME_Y14-5.m4 b/graphics/circuit_macros/examples/ASME_Y14-5.m4
new file mode 100644
index 0000000000..fbcf8eb003
--- /dev/null
+++ b/graphics/circuit_macros/examples/ASME_Y14-5.m4
@@ -0,0 +1,168 @@
+divert(-1)
+# `datumarrow(linespec,wid,ht)'
+define(`datumarrow',`line `$1'
+ M4_E: last line.end
+ datum_ht = ifelse(`$3',,`textht',`$3')
+ M4_P: vperp(last line,(datum_ht*2/sqrt(3)))
+ M4_X: datum_ht/lin_leng(last line) between M4_E and last line.start
+ {ifsvg(,`m4fshade(m4fill,')line from M4_E to M4_E+M4_P/2 dnl
+ then to M4_X then to M4_E-M4_P/2 then to M4_E ifsvg(`fill_(0)',`)')}')
+
+# `Y14_frame( arg1, arg2, ... )
+ Each arg is a ;-separated sequence of 1 or more of
+ "string"[ wid val],
+ "(letter)",
+ or tolerance symbol.
+ The term "(letter)" expands to the circled letter.
+ The frame contains as many boxes as arguments.'
+ `Symbol definitions from ASME Y14.5 Appendix C'
+define(`Y14_frameht',`textht*2')
+define(`Y14_defaultwid',`textht*2')
+#
+define(`Y14_frame',`[ tmpthick = linethick; thicklines_
+ right_; B:[ Y14_fram_($@) ]
+ box wid B.wid ht Y14_frameht at B
+ linethick = tmpthick ]')
+define(`Y14_fram_',`ifelse(`$1',,,
+`stacksplit_(`Y14',`$1',;) stackreverse_(`Y14')
+ Bx: [stackdo_(`Y14',
+ `[ifelse(index(Y14,`"('),0,
+ `circle diam textht*5/3
+ patsubst(Y14,`"(\(.\))"',`"\1"') ht textht*0.8 at last circle',
+ index(Y14,`"'),0,
+ `Y14 ifinstr(Y14,`wid ',,`wid textht*2/3*(len(Y14)-2)')',
+ `Y14')]
+ move right max(last [].wid+textht/2,Y14_defaultwid) with .c at last []; ')]
+ ifelse(`$2',,,`{ line up Y14_frameht with .c at Here }')
+ Y14_fram_(shift($@))') ')
+
+# Each symbol definition has an abbreviated version
+define(`Y14_straightness',
+`line right textht*2 ')
+define(`Y14_str_',`Y14_straightness($@)')
+
+define(`Y14_flatness',
+`line right textht*3/4 then down textht left textht/2 \
+ then left textht*3/2 then up textht right textht/2 \
+ then right textht*3/4 ')
+define(`Y14_fla_',`Y14_flatness($@)')
+
+define(`Y14_circularity',`circle diam textht*3/2 ')
+define(`Y14_cir_',`Y14_circularity($@)')
+
+define(`Y14_cylindricity',
+`circle diam textht
+ Y14_C: last circle
+ Y14_R: (Rect_(last circle.rad,-30))
+ Y14_A: (Rect_(textht,60))
+ line from Y14_C+Y14_R+Y14_A to Y14_C+Y14_R-Y14_A/2
+ line from Y14_C-Y14_R-Y14_A to Y14_C-Y14_R+Y14_A/2 ')
+define(`Y14_cyl_',`Y14_cylindricity($@)')
+
+define(`Y14_lineprofile',`arc from (textht,0) to (-textht,0) with .c at Here ')
+define(`Y14_lin_',`Y14_lineprofile($@)')
+
+define(`Y14_surfaceprofile',
+`arc from (textht,0) to (-textht,0) with .c at Here
+ line from last arc.start to last arc.end ')
+define(`Y14_sur_',`Y14_surfaceprofile($@)')
+
+define(`Y14_perpendicularity',
+`line from (-textht,0) to (textht,0)
+ line from (0,0) to (0,textht*3/2) ')
+define(`Y14_per_',`Y14_perpendicularity($@)')
+
+define(`Y14_angularity',
+`line from (textht*3/2,0) to (0,0) then to (textht*3/2,textht*sqrt(3)/2) ')
+define(`Y14_ang_',`Y14_angularity($@)')
+
+define(`Y14_parallelism',
+`line up textht*3/2*sqrt(3)/2 right textht*3/4
+ move right textht*0.6
+ line down textht*3/2*sqrt(3)/2 left textht*3/4 ')
+define(`Y14_par_',`Y14_parallelism($@)')
+
+define(`Y14_symmetry', dnl obsolete!
+`line from (-textht/2,0) to (textht/2,0)
+ line from (-textht/3,textht/4) to (textht/3,textht/4)
+ line from (-textht/3,-textht/4) to (textht/3,-textht/4) ')
+define(`Y14_sym_',`Y14_symmetry($@)')
+
+define(`Y14_position',
+`circle diam textht
+ line up textht*3/2 with .c at last circle
+ line right textht*3/2 with .c at last circle ')
+define(`Y14_pos_',`Y14_position($@)')
+
+define(`Y14_concentricity', dnl obsolete!
+`circle diam textht
+ circle diam textht/2 at last circle ')
+define(`Y14_con_',`Y14_concentricity($@)')
+
+define(`Y14_circularrunout',
+`arrow ht textht*0.8 wid textht*0.6 up textht*3/2 right textht*3/2 ')
+define(`Y14_cir_',`Y14_circularrunout($@)')
+
+define(`Y14_totalrunout',
+`arrow <-> ht textht*0.8 wid textht*0.6 \
+ down textht*3/2 left textht*3/2 then right textht*1.1 \
+ then up textht*3/2 right textht*3/2 ')
+define(`Y14_tot_',`Y14_totalrunout($@)')
+
+define(`Y14_diameter',
+`circle diam textht
+ line up textht*3/2 right textht*3/4 with .c at last circle')
+define(`Y14_dia_',`Y14_diameter($@)')
+
+# The following are not Y14.5 but go well with them:
+
+ `r_box(angle,pos,string)
+ Rotated text on a white background
+ (requires pstricks)'
+define(`r_box',
+ `ifpstricks(`M4tmp: ifelse(`$2',,Here,`$2')
+ command sprintf("\rput{%g}(%g,%g){",`$1',crl(M4tmp.x),crl(M4tmp.y))
+ f_box(`$3') at Orig
+ command "}%"')')
+define(`crl',`int(`($1)'/scale*1000000)/1000000')
+
+ `r_dimen(linespec,offset,label,tic offset,<->,pos)
+ dimension_ with rotated text on white background'
+define(`r_dimen',
+ `M4tmp: dimension_(`$1',`$2',,,`$4',`$5')
+ r_box(rp_ang*rtod_,ifelse(`$6',,M4tmp+vec_(0,`$2'),`$6'),`$3')')
+
+ `ctrline(linespec,cycle len)
+ Centerline'
+define(`cdashl',0.1*scale)
+define(`cgapl',0.03*scale)
+define(`ctrline',`rpoint_(ifelse(`$1',,`to rvec_(linewid,0)',`$1'))
+ define(`m4h',ifelse(`$2',,1*scale,`$2'))dnl
+ m4n = int(rp_len/2/(m4h))*2+1
+ for i=1 to m4n do {
+ line to rvec_(rp_len/m4n/2-cdashl/2-cgapl,0)
+ move to rvec_(cgapl,0); line to rvec_(cdashl,0); move to rvec_(cgapl,0)
+ line to rvec_(rp_len/m4n/2-cdashl/2-cgapl,0) } ')
+
+ `ctrarcr(pos,radius,startang,endang,len)
+ Arc cr centerline'
+define(`ctrarcr',`dnl
+ define(`m5h',ifelse(`$5',,1*scale,`$5'))dnl
+ rp_len = abs((`$2')*(`$4'-(`$3')))
+ m5n = int(rp_len/2/(m5h))*2+1
+ m5a = (rp_len/m5n/2-cdashl/2-cgapl)/(`$2')
+ m5s = cdashl/(`$2')
+ m5sa = `$3'
+ for m4irr=1 to m5n do {
+ arc from `$1'+(rect_(`$2',m5sa)) to `$1'+(rect_(`$2',m5sa+m5a)) \
+ with .c at `$1'
+ m5sa = m5sa+m5a+cgapl/(`$2')
+ arc from `$1'+(rect_(`$2',m5sa)) to `$1'+(rect_(`$2',m5sa+m5s)) \
+ with .c at `$1'
+ m5sa = m5sa+m5s+cgapl/(`$2')
+ arc from `$1'+(rect_(`$2',m5sa)) to `$1'+(rect_(`$2',m5sa+m5a)) \
+ with .c at `$1'
+ m5sa = m5sa+m5a
+ } ')
+
+divert(0)dnl
diff --git a/graphics/circuit_macros/examples/Antennas.m4 b/graphics/circuit_macros/examples/Antennas.m4
index 6053cd2e3f..a2bb3be5f0 100644
--- a/graphics/circuit_macros/examples/Antennas.m4
+++ b/graphics/circuit_macros/examples/Antennas.m4
@@ -31,9 +31,9 @@ sinclude(Circuit_macros.dim)
s_box(T1) below rjust at A.T1
s_box(T2) below ljust at A.T2
s_box(`\tt (,{,}D)') at A.n above
- A: antenna(at A.T+(elen_,0),,P)
+ A: antenna(at A.T+(elen_,0),dimen_*3/4,P)
s_box(T) below at A.T
- s_box(`\tt (,{,}P)') at A.n above
+ s_box(`\tt (,dimen\_*3/4,P)') at A.n above
A: antenna(at A.T+(elen_,0),,F)
s_box(T) below at A.T
s_box(`\tt (,{,}F)') at A.n above
diff --git a/graphics/circuit_macros/examples/Attention.m4 b/graphics/circuit_macros/examples/Attention.m4
new file mode 100644
index 0000000000..7f0b7127c7
--- /dev/null
+++ b/graphics/circuit_macros/examples/Attention.m4
@@ -0,0 +1,41 @@
+.PS
+# Attention.m4
+gen_init
+scale = 2.54
+linethick = 0.2
+
+define dot2 { (($1).x*($2).x + ($1).y*($2).y) }
+
+ nlines = 128
+ nr = 50
+ innerrad = 1
+ outerrad = 8
+ diff = outerrad - innerrad
+B: box wid outerrad*2 ht outerrad*2 outline "red" shaded "red"
+C: circle rad outerrad at B
+ circle rad innerrad at C shaded "black"
+ P[0]: C+(innerrad,0)
+ t = 0
+ for i=1 to nr do {
+ r = innerrad+i/nr*diff
+ t = t + i/nr*(-pi_/2)/nr
+ P[i]: C+(rect_(r,t))
+ }
+ dth = twopi_/nlines
+ R: (cos(dth),-sin(dth))
+ S: (sin(dth),cos(dth))
+ for j = 0 to nlines-1 do {
+ for i=0 to nr do {
+ X: P[i]-C
+ Q[nr-i]: (dot2(R,X),dot2(S,X)) + C
+ }
+ shade(j%2,
+ fitcurve(P,nr)
+ line from P[nr] to Q[0]
+ fitcurve(Q,nr)
+ line from Q[nr] to P[0]
+ )
+ for i=0 to nr do { P[i]: Q[nr-i] }
+ }
+
+.PE
diff --git a/graphics/circuit_macros/examples/Autoencoder.m4 b/graphics/circuit_macros/examples/Autoencoder.m4
new file mode 100644
index 0000000000..92a81ac950
--- /dev/null
+++ b/graphics/circuit_macros/examples/Autoencoder.m4
@@ -0,0 +1,82 @@
+.PS
+# Masked_Autoencoder.m4
+gen_init
+NeedDpicTools
+
+ circlerad = 0.2
+ circlesep = 0.5
+ rowsep = 0.9
+ arrowht = arrowht*0.8
+ arrowwid = arrowwid*1.4
+ linethick = 1
+
+define plan {
+ m = 0
+ for i=1 to 4 do {
+ for j=1 to ncircles[i] do {
+ exec sprintf("C[i,j]: circle thick 1.6 at Here \"\large\sf $%g\"",m+j)
+ if i>1 then {
+ if "$1"=="" then {
+ for k=1 to ncircles[i-1] do { arrow from C[i,j] to C[i-1,k] chop } }
+ }
+ if j!=ncircles[i] then { move right_ circlesep from C[i,j] }
+ }
+ m += ncircles[i]
+ case(i,
+ move to C[1,1]+(-circlesep/2,-rowsep),
+ move to C[2,1]+(0,-rowsep),
+ move to C[3,1]+(circlesep/2,-rowsep), )
+ }
+ }
+ gridsiz = 0.78/4
+define grid { [ SW: 0,0
+ for i=1 to $1 do {
+ move to (0,(0.5-i)*gridsiz)
+ exec sprintf("fv = $%g",2+i)
+ for j=1 to $2 do { fl = 1-(int(fv / 2^(j-1)) % 2)
+ box wid gridsiz ht gridsiz outlined "gray" shaded rgbstring(fl,fl,fl) }
+ } ]}
+define cxt {
+ m = 1
+ for i=2 to 4 do {
+ for j=1 to ncircles[i] do {
+ exec sprintf("narrows = $%g",m)
+ for k=1 to narrows do {
+ exec sprintf("cnum = $%g",m+k)
+ arrow from C[i,j] to C[i-1,cnum] chop
+ }
+ m += narrows+1
+ } } }
+
+ array(ncircles,3,4,4,3)
+ plan()
+ for j=1 to 3 do {
+ sprintf("$\hat{x}_%g$",j) at C[1,j].n above
+ sprintf("$x_%g$",j) at C[4,j].s+(0,-2bp__) below
+ }
+ "V" at 0.5 between C[2,1].w and C[1,1].w
+ "W$^2$" at 0.5 between C[3,1].w and C[2,1].w
+ "W$^1$" at 0.5 between C[3,1].w and C[4,1].w
+
+GV: grid(3,4,0,15,6) with .w at C[2,4]+(circlerad*2,rowsep/2)
+ "$=\hbox{M}^{\hbox{V}}$" at GV.e ljust
+G2: grid(4,4,13,0,0,13) with .w at (GV.w,C[3,4]+(circlerad*2,rowsep/2))
+ "$=\hbox{M}^{\hbox{V}^2}$" at G2.e ljust
+G1: grid(4,3,1,5,1,1) with .w at (GV.w,C[4,3]+(circlerad*2,rowsep/2))
+ "$=\hbox{M}^{\hbox{V}^1}$" at G1.e ljust
+
+ move to (GV.x+3*circlesep,C[1,1].y)
+ plan(3,1,2,1,2,2,1,2,1,2,2,3,1,2)
+ for i=2 to 4 do {
+ rgbdraw(0.5,0.5,0.5,
+ cxt(2,1,3,0,0,2,1,3, 0,4,1,2,3,4,0,0, 0,4,1,2,3,4,0) )
+ cxt(0,1,1,1,1,0, 2,2,3,0,2,2,3,2,2,3, 0,0,3,1,3,4)
+ }
+ for j=1 to 3 do { sprintf("$x_%g$",j) at C[4,j].s+(0,-2bp__) below }
+ arrow dotted from C[1,2].n up circlesep/2; "$p(x_2)$" above
+ "$p(x_3|x_2)$" at (C[1,3]+(circlesep/2,0),last "") above
+ arrow dotted from C[1,3] to last "".s chop circlerad chop textoffset
+ "$p(x_1|x_2,x_3)$" at (C[1,1]+(-circlesep/2,0),last "") above
+ arrow dotted from C[1,1] to last "".s chop circlerad chop textoffset
+
+.PE
diff --git a/graphics/circuit_macros/examples/CctTable.m4 b/graphics/circuit_macros/examples/CctTable.m4
index f7e47d0758..443c398b46 100644
--- a/graphics/circuit_macros/examples/CctTable.m4
+++ b/graphics/circuit_macros/examples/CctTable.m4
@@ -85,6 +85,9 @@ vm = 0.28
}
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/Chuck.m4 b/graphics/circuit_macros/examples/Chuck.m4
index 152d4b87db..2e36626c5b 100644
--- a/graphics/circuit_macros/examples/Chuck.m4
+++ b/graphics/circuit_macros/examples/Chuck.m4
@@ -1,53 +1,28 @@
.PS
-threeD_init s_init(Views) sinclude(tst.dim)
-#
# Chuck.m4
+threeD_init s_init(Views) sinclude(tst.dim)
#
+#################################################################
divert(-1)
- `Dimensioning for diagrams
- dimension_(linespec,vert offset,
- label,blank width,tic offset,<-|->,R)'
-define(`dimension_',`rpoint_(`$1') ; {
- define(`m4h',`(rp_len ifelse((`$4'),(),,`-($4)'))')dnl
- ifelse((`$2'),(),,`if (`$2') != 0 then {
- {move to rvec_(0, ifelse(`$5',,`sign($2)*3.6bp__',`$5'))
- line to rvec_(0,`$2')}
- {move to rvec_(rp_len,ifelse(`$5',,`sign($2)*3.6bp__',`$5'))
- line to rvec_(0,`$2')}
- move to rvec_(0,`$2') }')
- if m4h > 2*arrowht then {
- { line ifelse(`$6',,<-,index($6,<),0,<-) to rvec_(m4h/2,0)
- ifelse((`$4'),(),,`move to rvec_(($4),0)')
- line ifelse(`$6',,->,eval(index($6,>)>0),1,->) to rvec_(m4h/2,0) }
- } else {
- { arrow from rvec_(-arrowht*1.5,0) to Here
- arrow from rvec_(rp_len+arrowht*1.5,0) to rvec_(rp_len,0) }
- }
- define(`m4txt',`ifelse(`$7',,
- `ifelse(index(`$3',"),0,`$3',"`$3'")',
- `ifdef(`pstricks_',`sprintf("\rput{%g}(0,0){`$3'}",rp_ang*rtod_)',`"$3"')')')
- ifelse(`$3',,,`m4txt at rvec_(rp_len/2,0)')
- }')
-define(`rottxt',
- `ifdef(`pstricks_',`sprintf("\rput{%g}(0,0){`$2'}",`$1')')')
- `rotate(angle,at pos, objects at origin)'
-define(`rotate',
- `ifdef(`pstricks_',`M4tmp: "" ifelse(`$2',,Here,`$2')
- sprintf("\rput{%g}(%g,%g){`$3'}",`$1',M4tmp.x/scale,M4tmp.y/scale)')')
- `r_box(angle,pos,string)'
-define(`crl',`int(`($1)'/scale*1000000)/1000000')
+ `r_box(angle,pos,string)
+ Rotated text on a white background
+ (requires pstricks)'
define(`r_box',
- `ifdef(`pstricks_',`M4tmp: ifelse(`$2',,Here,`$2')
+ `ifpstricks(`M4tmp: ifelse(`$2',,Here,`$2')
command sprintf("\rput{%g}(%g,%g){",`$1',crl(M4tmp.x),crl(M4tmp.y))
- w_box(`$3') at Orig
+ f_box(`$3') at Orig
command "}%"')')
- `r_dimen(linespec,offset,label,tic offset,<->,pos)'
+define(`crl',`int(`($1)'/scale*1000000)/1000000')
+
+ `r_dimen(linespec,offset,label,tic offset,<->,pos)
+ dimension_ with rotated text on white background'
define(`r_dimen',
`M4tmp: dimension_(`$1',`$2',,,`$4',`$5')
r_box(rp_ang*rtod_,ifelse(`$6',,M4tmp+vec_(0,`$2'),`$6'),`$3')')
- `ctrline(linespec,len)'
+ `ctrline(linespec,len)
+ Centerline'
define(`cdashl',0.1*scale)
define(`cgapl',0.03*scale)
define(`ctrline',`rpoint_(ifelse(`$1',,`to rvec_(linewid,0)',`$1'))
@@ -58,7 +33,8 @@ define(`ctrline',`rpoint_(ifelse(`$1',,`to rvec_(linewid,0)',`$1'))
move to rvec_(cgapl,0); line to rvec_(cdashl,0); move to rvec_(cgapl,0)
line thick dimensionth to rvec_(rp_len/m4n/2-cdashl/2-cgapl,0) } ')
- `ctrarcr(pos,radius,startang,endang,len)'
+ `ctrarcr(pos,radius,startang,endang,len)
+ Arc cr centerline'
define(`ctrarcr',`dnl
define(`m5h',ifelse(`$5',,1*scale,`$5'))dnl
rp_len = abs((`$2')*(`$4'-(`$3')))
@@ -79,6 +55,7 @@ define(`ctrarcr',`dnl
} ')
divert(0)dnl
+#################################################################
scale = 25.4*2
tic = 3.6bp__
@@ -90,9 +67,9 @@ command "{\sf"
#include(Lettering.m4)
#Letter_init
-define(`visible',`linethick_(visibleth)')
-define(`hidden',`linethick_(hiddenth)')
-define(`dimension',`linethick_(dimensionth)
+define(`visible_thick',`linethick_(visibleth)')
+define(`hidden_thick',`linethick_(hiddenth)')
+define(`dimension_thick',`linethick_(dimensionth)
arrowwid = 1.5*arrowwid; arrowht = 1.5*arrowht; ')
d1 = 230
@@ -104,7 +81,7 @@ d3 = 140
hiddenth = dimensionth
Orig: Here
-visible
+visible_thick
D3: circle diam d3 at Orig
D2: circle diam d2 at Orig
@@ -115,42 +92,32 @@ visible
X1: rect_(rr,thet)
P1: rect_(rr+r,thet)
-dimension
+dimension_thick
cross(at (P1.x,-P1.y))
cross(at (-P1.x,P1.y))
# Top outer visible line
-visible
-# arc ccw from (-P1.x,h) to (-X1.x,X1.y) rad r with .c at (-P1.x,P1.y)
- arcs = atan2(P1.x-X1.x,P1.y-X1.y)
- n = 0
- nn = 8
- for i = 0 to nn do {P[n]:(-P1.x,P1.y)+(rect_(r,-twopi_/4+i/nn*arcs)); n=n+1}
- for i = 1 to nn do {P[n]:Orig+(rect_(rr,pi_-thet-i/nn/2*(pi_-2*thet))); n=n+1}
- n = n-1
- for i = 1 to n do { P[n+i]:(-P[n-i].x,P[n-i].y) }
- fitcurve(P,2*n)
-# top arc
-# arc cw to X1 rad rr with .c at Orig
-# arc ccw from X1 to (P1.x,h) rad 4 with .c at P1
+visible_thick
+# top arcs
+ arc ccw from (-P1.x,h) to (-X1.x,X1.y) with .c at (-P1.x,P1.y)
+ arc cw to X1 with .c at Orig
+ arc ccw from X1 to (P1.x,h) with .c at P1
# right end
line from (P1.x,h) to (305/2,h) then to (305/2,32/2) then left 40-3
arc ccw rad 3
line down 32-2*3
arc ccw rad 3
-dimension {
+dimension_thick {
r_dimen(up 32 with .c at (305/2-5,0),0,32)
arrow <- up 8 right 8 then right 4 from last arc.sw
"3$\,$R" ljust
r_dimen(up h*2 at (305/2,0),-10,110)
-}; visible
+}; visible_thick
line right 40-3 then to (305/2,-h) then to (P1.x,-h)
-# arc ccw to (X1.x,-X1.y) rad r with .c at P1.x,-P1.y
-# bottom arc
- for i = 0 to 2*n do { P[i]: (-P[2*n-i].x,-P[i].y) }
- fitcurve(P,2*n)
-# arc cw to (-X1.x,-X1.y) rad rr with .c at Orig
-# arc ccw to (-P1.x,-h) rad r with .c at (-P1.x,-P1.y)
+# bottom arcs
+ arc ccw to (X1.x,-X1.y) with .c at P1.x,-P1.y
+ arc cw to (-X1.x,-X1.y) with .c at Orig
+ arc ccw to (-P1.x,-h) with .c at (-P1.x,-P1.y)
# left end
line from (-P1.x,-h) to (-305/2,-h) then to (-305/2,-25/2) then right 25
down; arc ccw rad 3
@@ -163,7 +130,7 @@ dimension {
arc ccw rad 3
line to (-305/2,25/2) then to (-305/2,h) then to (-P1.x,h)
-dimension
+dimension_thick
# centre
ctrline(right 305-30 with .c at Orig,60)
ctrline(up d1+10 with .c at Orig,)
@@ -172,7 +139,7 @@ dimension
Q: line invis from BX.n to BX.s; R: line invis from BX.se up 10 left 10
X: Intersect_(Q,R)
line <-> from BX.se to X then to (X.x,-X.y) then to BX.nw
- r_box(90,BX,`3$\,$R')
+ r_box(90,BX,```3$\,$R''')
# Drill centres
D[1]: 35,sqrt(85^2-35^2)
@@ -185,41 +152,42 @@ dimension
ctrline(from D[2] to D[4] chop 15)
ctrline(to rvec_(2*15,0))
ctrline(from D[2]+vec_(-15,0) to D[2]+vec_(15,0))
-visible
+visible_thick
for i=1 to 4 do {
circle diam 16 at D[i]
for j = 0 to 7 do { arcr(D[i],23/2,j/8*twopi_,(j+3/4)/8*twopi_) ccw }
}
-hidden
+hidden_thick
for s=-1 to 1 by 2 do {
- line dashed from (-305/2,s*h) to (305/2,s*h)
- line dashed from (-305/2,s*30.6) to (305/2,s*30.6)
- line dashed from (-305/2,s*21.1) to (305/2,s*21.1)
- line dashed from (-305/2+25+2,s*21.1) to (305/2,s*21.1)
- line dashed dashwid/2 from (-305/2+25,s*25/2) down -s*(40/2-25/2-2);
- if s<0 then { arc dashed dashwid/4 ccw rad 2 } else { up; arc dashed dashwid/4 cw rad 2 }
- line dashed to ((305/2,0),Here)
- for k = -1 to 1 by 2 do {
- move to (k*305/2,s*(30.6+10))
- { dashline(from Here+(0,s*9.5/2) right -k*16,,dashwid/2)
- dashline(right -k*9.5/2/2 up -s*9.5/2,,dashwid/3)
- dashline(left -k*9.5/2/2 up -s*9.5/2,,dashwid/3)
- dashline(left -k*16,,dashwid/2)
- dashline(from Here+(-k*16,0) up s*9.5,,dashwid/2.5) }
- { dashline(from Here+(0,s*11/2) right -k*36.5,,dashwid/2)
- dashline(right -k*11/2/2 up -s*11/2,,dashwid/3)
- dashline(left -k*11/2/2 up -s*11/2,,dashwid/3)
- dashline(left -k*36.5,,dashwid/2)
- dashline(from Here+(-k*36.5,0) up s*11,,dashwid/2.5) }
- { dashline(from Here+(0,s*13/2) right -k*32,,dashwid/2)
- dashline(down s*13,,dashwid/2)
- dashline(left -k*32,,dashwid/2) }
- ctrline(right -k*20 chop -3 chop 0); ctrline(right -k*20 chop 0 chop -3)
+ line dashed from (-305/2,s*h) to (305/2,s*h)
+ line dashed from (-305/2,s*30.6) to (305/2,s*30.6)
+ line dashed from (-305/2,s*21.1) to (305/2,s*21.1)
+ line dashed from (-305/2+25+2,s*21.1) to (305/2,s*21.1)
+ line dashed dashwid/2 from (-305/2+25,s*25/2) down -s*(40/2-25/2-2);
+ if s<0 then { arc dashed dashwid/4 ccw rad 2 } \
+ else { up; arc dashed dashwid/4 cw rad 2 }
+ line dashed to ((305/2,0),Here)
+ for k = -1 to 1 by 2 do {
+ move to (k*305/2,s*(30.6+10))
+ { dashline(from Here+(0,s*9.5/2) right -k*16,,dashwid/2)
+ dashline(right -k*9.5/2/2 up -s*9.5/2,,dashwid/3)
+ dashline(left -k*9.5/2/2 up -s*9.5/2,,dashwid/3)
+ dashline(left -k*16,,dashwid/2)
+ dashline(from Here+(-k*16,0) up s*9.5,,dashwid/2.5) }
+ { dashline(from Here+(0,s*11/2) right -k*36.5,,dashwid/2)
+ dashline(right -k*11/2/2 up -s*11/2,,dashwid/3)
+ dashline(left -k*11/2/2 up -s*11/2,,dashwid/3)
+ dashline(left -k*36.5,,dashwid/2)
+ dashline(from Here+(-k*36.5,0) up s*11,,dashwid/2.5) }
+ { dashline(from Here+(0,s*13/2) right -k*32,,dashwid/2)
+ dashline(down s*13,,dashwid/2)
+ dashline(left -k*32,,dashwid/2) }
+ ctrline(right -k*20 chop -3 chop 0); ctrline(right -k*20 chop 0 chop -3)
+ }
}
- }
-dimension
+dimension_thick
# bottom
dimension_(from (-305/2,-h) to (305/2,-h),-(rr*1.1-h),"305",20pt__)
# outer radii
@@ -233,7 +201,7 @@ dimension
r_dimen(from (Rect_(d3/2,180-12)) to (Rect_(d3/2,-12)),,140,,,(Rect_(25,-12)))
# bolt hole placement diameter
- r_dimen(from Orig to (Rect_(85,-43)),,`85$\,$R',,->,(Rect_(20,-43)))
+ r_dimen(from Orig to (Rect_(85,-43)),,``85$\,$R'',,->,(Rect_(20,-43)))
# left slot
r_dimen(from (-305/2+6,-25/2) up 25,0,25)
r_dimen(from (-305/2,-26) right 40,0,40)
@@ -256,8 +224,8 @@ dimension
# arrow <- down 30 left 30 from D[3] chop 16/2 chop 0 then left 5
# "16 DRILL 23 CBORE" rjust "4 HOLES" rjust
- arrow <- from (-305/2,30.6+10+2) up 5 left 5 then up 13
- s_box(SEE (A)) with .sw at Here+(-5pt__,2pt__)
+# arrow <- from (-305/2,30.6+10+2) up 5 left 5 then up 13
+# s_box(SEE (A)) with .sw at Here+(-5pt__,2pt__)
command "}%"
.PE
diff --git a/graphics/circuit_macros/examples/Conn.m4 b/graphics/circuit_macros/examples/Conn.m4
index 204ad5d96a..1e5fd5781a 100644
--- a/graphics/circuit_macros/examples/Conn.m4
+++ b/graphics/circuit_macros/examples/Conn.m4
@@ -59,9 +59,9 @@ Y: [
B: [
tbox(V_2)
{ `"\tt tbox(V\_2)"' at last [].sw below ljust }
- tbox(V_1,,,<) with .sw at last [].se+(0.75,0)
+ tbox(V_1,,,<) with .sw at last [].se+(1.25,0)
{ `"\tt tbox(V\_1,{,},<)"' at last [].s below }
- tbox(V_1,,,<>) with .sw at last [].se+(0.75,0)
+ tbox(V_1,,,<>) with .sw at last [].se+(1.25,0)
{ `"\tt tbox(V\_1,{,},<>)"' at last [].s below }
] with .nw at T.sw+(0,-0.2)
diff --git a/graphics/circuit_macros/examples/Connectors.m4 b/graphics/circuit_macros/examples/Connectors.m4
index 5c3207c17d..64ed3e6854 100644
--- a/graphics/circuit_macros/examples/Connectors.m4
+++ b/graphics/circuit_macros/examples/Connectors.m4
@@ -3,22 +3,26 @@
log_init
include(ics.m4)
+ ifelse(ifpgf(T)`'ifpstricks(T)`'ifpsfrag(T),T,`command "{\small\sf"')
# ArduinoUno
-# "{\sf Arduino Uno Rev 3}" at last [].Connector.s below
Ar: ArduinoLeonardo #with .sw at last [].se+(0.25,0)
- "{\sf Arduino Leonardo}" at last [].Connector.s below
RPI: RPi with .sw at last [].se+(0.25,0)
- "{\sf Raspberry Pi 4 GPIO}" at last [].GPIO.s below
HD: HDMI_micro with .nw at last [].ne+(0.25,0.5)
- "\sf Micro" rjust at HD.Base.sw+(-2bp__,10bp__) "\sf HDMI" rjust
S: USB_C_Socket with .sw at (HD.e.x+0.25,RPI.s.y)
- "\sf USB-C Socket" at S.Base.s below
- "\sf B12" at S.B12.end above ljust
- "\sf B1" at S.B1.end above ljust
- "\sf A1" at S.A1.end above rjust
- "\sf A12" at S.A12.end above rjust
+
+ ifelse(ifpgf(T)`'ifpstricks(T)`'ifpsfrag(T),T,`command "}"')
+
+ "{\sf Arduino Leonardo}" at Ar.Connector.s below
+ "{\sf Raspberry Pi 4 GPIO}" at RPI.GPIO.s below
+ "\sf Micro" rjust at HD.Base.sw+(-2bp__,0) "\sf HDMI" rjust
+
+ "\sf USB-C Socket" at S.Base.s below
+ "\sf B12" at S.B12.end above ljust
+ "\sf B1" at S.B1.end above ljust
+ "\sf A1" at S.A1.end above rjust
+ "\sf A12" at S.A12.end above rjust
.PE
diff --git a/graphics/circuit_macros/examples/Coxeter.m4 b/graphics/circuit_macros/examples/Coxeter.m4
new file mode 100644
index 0000000000..4d186f9dbe
--- /dev/null
+++ b/graphics/circuit_macros/examples/Coxeter.m4
@@ -0,0 +1,38 @@
+.PS
+# Coxeter.m4
+darrow_init
+
+ customlinethick = 1.5
+
+ linethick = customlinethick
+ define(`dotrad_',`(3/2*linethick pt__)')
+
+ Orig: (0,0)
+ for i=0 to 4 do { P[i]: dot(at (i*linewid,0)) }
+ line from Orig to P[4]
+ P[-1]: dot(at (Rect_(linewid, 120))); line to Orig
+ P[-2]: dot(at (Rect_(linewid,-120))); line to Orig
+
+ Pa: dot(at P[4]+(linewid,0)); "$a$" at last [].n above
+ arrow from P[4] to Pa chop linewid/4
+ Pd: dot(at Pa+(linewid,0)); "$d$" at last [].w rjust
+ Pe: dot(at Pd+(linewid,0)); "$e$" at last [].n above
+ Pf: dot(at Pe+(linewid,0)); "$f$" at last [].n above
+ Pb: dot(at Pd+(Rect_(linewid,120))); "$b$" at last [].w rjust
+ Pc: dot(at Pd+(Rect_(linewid,-120))); "$c$" at last [].w rjust
+ line from Pb to Pd then to Pc
+ line from Pd to Pf
+
+ define(`customarc',
+ `pushdef(`dfillcolor',`0.7,0.7,0.7') linethick_(0.4); dnl
+ Darc(`$1',linewid, (`$2')*dtor_, (`$3')*dtor_,
+ thick=linewid/6; wid=linewid*0.3; ht=linewid/6; ends=<->)dnl
+ linethick_(customlinethick); popdef(`dfillcolor')')
+
+ customarc((linewid,-linewid/3), 25,155); "$d$" at (linewid,linewid*2/3)
+ customarc((2*linewid,-linewid/3), 25,155); "$e$" at (2*linewid,linewid*2/3)
+ customarc((3*linewid,-linewid/3), 25,155); "$f$" at (3*linewid,linewid*2/3)
+ customarc(Orig,130,230); "$a$" at (Rect_(linewid,180))
+ customarc(Orig, 10,110); "$b$" at (Rect_(linewid, 60))
+ customarc(Orig,-110,-10); "$c$" at (Rect_(linewid,-60))
+.PE
diff --git a/graphics/circuit_macros/examples/Flow.m4 b/graphics/circuit_macros/examples/Flow.m4
index f4fa766f1a..f0f8a842f0 100644
--- a/graphics/circuit_macros/examples/Flow.m4
+++ b/graphics/circuit_macros/examples/Flow.m4
@@ -3,19 +3,41 @@
gen_init
ifdef(`FlowchartDefs_',,`include(FlowchartDefs.m4)')
-# Could use xcolor with option dvipsnames but define color here for portability:
define(`Thistle',`rgbstring(0.85,0.75,0.85)')dnl
define(`RubineRed',`rgbstring(0.81,0,0.35)')dnl
define(`YellowGreen',`rgbstring(0.68,1,0.18)')dnl
define(`SeaGreen',`rgbstring(0.13,0.70,0.67)')dnl
define(`Goldenrod',`rgbstring(0.85,0.65,0.13)')dnl
+define(`Beaublue',`rgbstring(0.74,0.83,0.9)')dnl
+define(`Celadon',`rgbstring(0.67,0.88,0.69)')dnl
linethick_(1.0)
arrowwid = 0.05
arrowht = 0.1
- fillval = 0.8
- down
-
+ fillval = 0.9
+ maxpsht = 20
+
+define(`shad',`shaded rgbstring(0.9,0.8,0.7)')
+define(`Below',`with .nw at last [].sw+(0,-0.25)')
+TL: Here
+Simple: [
+ Fbox("\tt F{}box",,shad)
+ Ftest("\tt F{}test",,shad) Below
+ Fdata("\tt F{}data") Below
+ Fprep("\tt F{}prep",) Below
+ Fkeying("\tt F{}keying") Below
+ Fkeyboard("\tt F{}keyboard") Below
+ Fdocument("\tt F{}document",,shaded rgbstring(0.9,0.8,0.7)) Below
+ Fdelay("\tt F{}delay",,shaded Beaublue) Below
+ Fdisplay("\tt F{}display",,shaded Celadon) Below
+ Fstored("\tt F{}stored",,shaded Thistle) Below
+ Fconnect(,,shaded Thistle) Below
+ Fconnect("45",wid boxwid ht boxht:45,shaded Thistle) \
+ with .w at last [].e+(boxht/8,0)
+ "\tt F{}connect" at last [].nw + (0,boxht/6)
+ ] with .nw at TL+(0.1,0); move from Simple.nw to TL
+#showbox_
+Complex: [
Case: Fcase(,
"Test 1",[Fbox("Task 1",, shaded Thistle); W:last [].W; N:last [].N
arrow down linewid/3 from last [].S
@@ -28,35 +50,32 @@ Case: Fcase(,
"\sl .N" at Case.N rjust above; "\sl .S" at Case.S rjust below
"\sl .E" at Case.E ljust; "\sl .W" at Case.W rjust
- "\sl Case statement" below at Case.s+(0,-0.2)
- move to Case.nw+(-12bp__,10bp__)
+ "\tt F{}case" below at Case.s #+(0,-0.1)
Whiledo: Fwhiledo("$i < n$",,,Fbox("Task"),"T" above ljust at Test.E) \
with .nw at Case.ne+(0.25,0)
"\sl .N" at Whiledo.N rjust; "\sl .S" at Whiledo.S rjust below
"\sl .E" at Whiledo.E ljust; "\sl .W" at Whiledo.W rjust
- "\sl While-do" below at Whiledo.s+(0,-0.2)
+ "\tt F{}whiledo" below at Whiledo.s
Repeatuntil: Frepeatuntil("$n \geq 5$",,,Fbox("Task"),
- "T" at Test.E above ljust) with .nw at Whiledo.sw + (0.25,-1)
+ "T" at Test.E above ljust) with .nw at Whiledo.sw + (0.25,-0.5)
"\sl .N" at Repeatuntil.N rjust above; "\sl .S" at Repeatuntil.S rjust below
"\sl .E" at Repeatuntil.E ljust; "\sl .W" at Repeatuntil.W rjust
- "\sl Repeat-until" below at Repeatuntil.s+(0,-0.2)
+ "\tt F{}repeatuntil" below at Repeatuntil.se +(-0.0,0.2)
Ifthenelse: Fifthenelse("$A<B$",,,
Fbox("False"),
Fbox("True",ht fboxht*1.2 wid fboxwid)dnl
- ) with .nw at Repeatuntil.sw +(0.5,-0.5)
+ ) with .nw at Repeatuntil.sw +(-0.5,-0.3)
"\sl .N" at Ifthenelse.N rjust above; "\sl .S" at Ifthenelse.S below rjust
- "\sl .E" at Ifthenelse.E ljust; "\sl .W" at Ifthenelse.W rjust
- "\sl If-then-else" below at Ifthenelse.s+(0,-0.3) \
- "\sl (the True and False tasks are optional)"
+ "\sl .E" wid 12bp__ at Ifthenelse.E ljust; "\sl .W" at Ifthenelse.W rjust
+ "\tt F{}ifthenelse" below at Ifthenelse.s+(0,-0.15)
-# Compound statement:
-[ right
+Compound: [ right
ellipse shaded YellowGreen "Start"
arrow right linewid/2
@@ -71,9 +90,12 @@ Ifthenelse: Fifthenelse("$A<B$",,,
"T" at Test.E above ljust),
"T" at Test.E above ljust) with .N at Here
- A: arrow down 0.25 from last [].S ] with .nw at Case.sw + (-12bp__,-0.7)
+ A: arrow down 0.25 from last [].S ] with .nw at Case.sw + (-12bp__,-0.3)
+
+ "\sl Compound statements" at last [].A.end+(0.1,0) ljust above
- "\sl Compound statement" below at last [].A.end
+ ] with .nw at Simple.ne+(0.1,0)
+#showbox_
Example: [ fillvalue = 0.8; awid = linewid/2; right_
Start: ellipse wid boxwid/2 ht boxwid/3 shaded "green"
@@ -99,10 +121,12 @@ Example: [ fillvalue = 0.8; awid = linewid/2; right_
arrow from RT.E to (B3.S,RT.E) then to B3.S
B4: Fbox(`"Extra\c{c}\~ao"') with .S at B3.N+(0,awid)
arrow from B3.N to B4.S
- arrow right_ awid from B4.E
+# arrow right_ awid from B4.E
+ arrow up_ awid from B4.N
B5: Fbox(`"Conclus\~ao"')
- ellipse wid boxwid/2 ht boxwid/3 shaded "red" at (B5.S,Start)
- arrow down_ awid from B5.S to last ellipse.n
-] with .nw at last [].sw+(0,-fboxht)
+ arrow up_ awid from B5.N
+ ellipse wid boxwid/2 ht boxwid/3 shaded "red" # at (B5.S,Start)
+# arrow down_ awid from B5.S to last ellipse.n
+] with .nw at last [].Compound.sw+(0,2.5*fboxht)
.PE
diff --git a/graphics/circuit_macros/examples/FlowchartDefs.m4 b/graphics/circuit_macros/examples/FlowchartDefs.m4
index bb039338da..2e5c3ade9e 100644
--- a/graphics/circuit_macros/examples/FlowchartDefs.m4
+++ b/graphics/circuit_macros/examples/FlowchartDefs.m4
@@ -1,8 +1,9 @@
divert(-1)
+ Google flowchart display symbol
FlowchartDefs.m4
`Some experimental flow-chart macros.
- In the following, every subchart is in
- [] brackets, with .N, .S, .E and .W
+ In the following, every block (subchart) is
+ in [] brackets, with .N, .S, .E and .W
internally defined. Follow this convention
if you create compound constructs.
@@ -19,18 +20,17 @@ divert(-1)
define(`FlowchartDefs_')
- `Default sizes:'
+ `Default sizes:'
define(`fboxwid',linewid*2)
define(`fboxht',linewid*0.75)
define(`farrowht',linewid*0.5)
- `Fbox( "text", wid expr ht expr,
- attributes ) The basic task box: arg1 may
- be 1 or more label strings. Attributes
- include box line and fill specs.
- To adjust the box size to the size of
- the typeset text, see the \boxdims macro
- in the manual. Example:
+ `Fbox( "text", wid expr ht expr, attributes )
+ The basic task box: arg1 may be 1 or more
+ text strings. Attributes include box
+ line and fill specs. To adjust the box
+ size to the size of the typeset text, see
+ the \boxdims macro in the manual. Example:
Fbox("$x < 1$",,
shaded rgbstring(0.46,0.53,0.63))'
define(`Fbox',`[ boxwid = fboxwid; boxht = fboxht
@@ -38,26 +38,149 @@ define(`Fbox',`[ boxwid = fboxwid; boxht = fboxht
N: Box.n; S:Box.s; E:Box.e; W: Box.w
`$4']')
- `If-then
+ `Fdelay("text",wid expr ht expr,attributes)'
+define(`Fdelay',`[ boxwid = fboxwid; boxht = fboxht
+ Box: box invis `$2'
+ N: Box.n; S: Box.s; E: Box.e; W: Box.w
+ arc from Box.se-(Box.ht/2,0) to Box.ne-(Box.ht/2,0) \
+ with .c at Box.e-(Box.ht/2,0) `$3'
+ line to Box.nw to Box.sw to Box.se-(Box.ht/2,0) `$3'
+ ifelse(`$1',,,`$1' at Box)
+ `$4']')
+
+ `Fdisplay("text",wid expr ht expr,attributes)'
+define(`Fdisplay',`[ boxwid = fboxwid; boxht = fboxht
+ Box: box invis `$2'
+ N: Box.n; S: Box.s; E: Box.e; W: Box.w
+ NE: Box.ne-(Box.ht/4,0); SE: (NE,Box.s)
+ NW: Box.nw+(Box.ht/2,0); SW: (NW,Box.s)
+ ifelse(`$3',,,`
+ box wid NE.x-NW.x ht Box.ht with .ne at NE `$3' invis
+ line from W to NW then to SW then to W `$3' invis ')
+ arc from SE to NE with .c at E-(Box.ht*2/3,0) `$3'
+ line to NW `$3'
+ arc from NW to W with .c at (NW,Box)+(Box.ht/4,-Box.ht/4) `$3'
+ arc from W to SW with .c at (NW,Box)+(Box.ht/4,Box.ht/4) `$3'
+ line to SE `$3'
+ ifelse(`$1',,,`$1' at Box)
+ `$4']')
+
+ `Fstored("text",wid expr ht expr,attributes)'
+define(`Fstored',`[ boxwid = fboxwid; boxht = fboxht
+ Box: box invis `$2'
+ r = Box.ht*7/8; d = r - sqrt(r^2-(Box.ht/2)^2)
+ N: Box.n; S: Box.s; E: Box.e-(d,0); W: Box.w
+ NW: Box.nw+(d,0); SW: (NW,Box.s); NE: Box.ne; SE: Box.se
+ ifelse(`$3',,,`
+ box wid NE.x-NW.x ht Box.ht with .nw at NW `$3' invis ')
+ arc from NW to SW with .c at Box.w+(r,0) `$3'; round
+ line to SE; round
+ arc cw to NE with .c at E+(r,0) fill_(1); round
+ line to NW `$3'; round
+ ifelse(`$1',,,`$1' at Box)
+ `$4']')
+
+ `Fconnect("text",
+ wid expr ht expr[:U|D|L|R|angle], attributes)'
+define(`Fconnect',`[ boxht = fboxht; boxwid = boxht
+ define(`m4wh',`m4Leftstr(`$2')')dnl
+ define(`m4wid',`patsubst(patsubst(m4wh, ht .*),^wid ,)')dnl
+ ifelse(m4wid,,`define(`m4wid',boxwid)')dnl
+ define(`m4ht',`patsubst(m4wh,.* *ht *,)')dnl
+ ifelse(m4ht,,`define(`m4ht',boxht)')dnl
+ define(`m4cpt',`m4Rightstr(`$2')')dnl
+ setdir_(ifelse(m4cpt,,`ifdef(`m4a_',rp_ang*rtod_,0)',m4cpt))
+# {Box: [lbox(m4wid,m4ht,invis)]}
+ W: Here; NW: vec_(0,m4ht/2); N: vec_(m4wid/2,m4ht/2); NE: vec_(m4wid,m4ht/2)
+ SW: vec_(0,-m4ht/2); S: vec_(m4wid/2,-m4ht/2); SE: vec_(m4wid,-m4ht/2)
+ E: vec_(m4wid,0); C: 3/8 between W and E
+ line from 1/2 between NW and N \
+ to NW to SW to S to E to N to 1/2 between NW and N `$3'
+ ifelse(`$1',,,`$1' at C)
+ `$4'; resetdir_ ]')
+
+ `Fdata("text",wid expr ht expr,
+ xslant,attributes)'
+define(`Fdata',`[ boxwid = fboxwid; boxht = fboxht
+ Box: box invis `$2'
+ xs = ifelse(`$3',,fboxht/6,`($3)/2')
+ NE: Box.ne+(xs,0); SE: Box.se-(xs,0)
+ NW: Box.nw+(xs,0); SW: Box.sw-(xs,0)
+ N: Box.n; E: Box.e; S: Box.s; W: Box.w
+ line from N to NE then to SE then to SW then to NW then to N \
+ ifelse(`$4',,`fill_(fillval)',`$4')
+ ifelse(`$1',,,`$1' at Box)
+ `$5']')
+
+ `Fprep("text",wid expr ht expr,attributes)'
+define(`Fprep',`[ boxwid = fboxwid; boxht = fboxht
+ Box: box invis `$2'
+ NE: Box.ne-(fboxht/4,0); E: Box.e; SE: (NE,Box.s); N: Box.n
+ NW: Box.nw+(fboxht/4,0); W: Box.w; SW: (NW,Box.s); S: Box.s
+ line from N to NE to E to SE to SW to W to NW to N \
+ ifelse(`$3',,`fill_(fillval)',`$3')
+ ifelse(`$1',,,`$1' at Box)
+ `$4']')
+
+ `Fkeyboard("text",wid expr ht expr,attributes)'
+define(`Fkeyboard',`[ boxwid = fboxwid; boxht = fboxht
+ Box: box invis `$2'
+ NW: Box.nw-(0,min(Box.ht/4,Box.wid/16)); W: Box.w; SW: Box.sw; S: Box.s
+ NE: Box.ne+(0,min(Box.ht/4,Box.wid/16)); E: Box.e; SE: Box.se; N: 0.5 between NW and NE
+ line from N to NE to SE to SW to NW to N ifelse(`$3',,`fill_(fillval)',`$3')
+ ifelse(`$1',,,`$1' at Box)
+ `$4']')
+
+ `Fdocument("text",wid expr ht expr,attributes)'
+define(`Fdocument',`[ boxwid = fboxwid; boxht = fboxht
+ Box: box invis `$2'; Q: move from Box.sw to Box.se
+ NE: Box.ne; E: Box.e; SE: Box.se-(0,Box.ht/4); N: Box.n
+ NW: Box.nw; W: Box.w; SW: Box.sw-(0,Box.ht/4); S: Box.s-(0,Box.ht/4)
+ line from SE to NE to NW to SW `$3'
+ arc to S with .c at (0.5 between SW and S) + (0,Box.ht) `$3'
+ arc to SE with .c at (0.5 between S and SE) -(0,Box.ht) cw \
+ ifelse(`$3',,,``$3' shaded rgbstring(1,1,1)')
+ ifelse(`$1',,,`$1' at Box)
+ `$4']')
+
+ `Fkeying("text",wid expr ht expr,attributes)'
+define(`Fkeying',`[ boxwid = fboxwid; boxht = fboxht
+ Box: box `$2' invis
+ hsq = (Box.wid/2)^2-(Box.ht/2)^2
+ if hsq > 0 then { d = Box.wid/2-sqrt(hsq) } else { d = 0 }
+ W: Box.w; NW: Box.nw+(d,0); N: Box.n; NE: Box.ne-(d,0)
+ E: Box.e; SE: Box.se-(d,0); S: Box.s; SW: Box.sw+(d,0)
+ if hsq >= 0 then { x = 0 } else { x = sqrt(-hsq) }
+ box wid NE.x-NW.x ht N.y-S.y `$3' invis at Box
+ arc from SE to NE with .c at Box - (x,0) `$3'; round(,,`$3')
+ line to NW `$3'; round(,,`$3')
+ arc to SW with .c at Box + (x,0) `$3'; round(,,`$3')
+ line to SE `$3'; round(,,`$3')
+ ifelse(`$1',,,`$1' at Box)
+ `$4']')
+
+ `If-then
Ftest( "text", wid expr ht expr, attributes )'
define(`Ftest',`[boxwid = fboxwid*0.8; boxht = fboxht*1.4
Box: box ifelse(`$2',,,`$2') invis
N: Box.n; S: Box.s; E: Box.e; W: Box.w
- line from 0.5 between last box.n and last box.e \
- to last box.e then to last box.s then to last box.w then to last box.n \
- then to 0.5 between last box.n and last box.e \
+ line from 0.5 between last box.n and last box.e to last box.e to last box.s \
+ to last box.w to last box.n to 0.5 between last box.n and last box.e \
ifelse(`$3',,`fill_(fillval)',`$3')
ifelse(`$1',,,`$1' at Box)
`$4']')
- `case statement
- Fcase(wid expr ht expr,
- "Test string 1",task, ...,
- "Test string n",task)'
- `arg1 adjusts the size of the tests
- A task is a flow subchart with internal names .E and .S defined
- The test blocks are labeled Test1, Test2, ... and the tasks are
- labeled Task1, Task2, ... '
+ `Fcase: case statement
+ Fcase(wid expr ht expr,
+ "Test string 1"[:attributes],task, ...,
+ "Test string n"[:attributes],task )'
+ `arg1 adjusts the size of the tests
+ The optional attributes for each string apply
+ to the Ftest containing the string.
+ The Ftest blocks are labeled Test1, Test2, ...
+ A task is a flow subchart with internal
+ names .E and .S defined. The tasks are
+ labeled Task1, Task2, ... '
define(`Fcase',`[ down; S: Here; sx = S.x
Fcaseloop_(1,$@)
ifelse(`$2',,`E:S; W:S; N:S',
@@ -66,7 +189,8 @@ define(`Fcase',`[ down; S: Here; sx = S.x
arrow from E to (E,S) then to S ]')
define(`Fcaseloop_',`ifelse(`$3',,,
- `Test`$1': Ftest(`$3',`$2') with .N at S
+ `Test`$1': Ftest(patsubst(`$3',":.*,"),`$2',
+ ifinstr(`$3',":,`patsubst(`$3',.*":,)')) with .N at S
Task`$1': `$4' with .nw at Test`$1'.E+(linewid/2,min(Test`$1'.ht,fboxht)/2)
arrow right linewid/4 from Test`$1'.E \
then down Test`$1'.E.y-Task`$1'.W.y then to Task`$1'.W
@@ -76,11 +200,12 @@ define(`Fcase',`[ down; S: Here; sx = S.x
Fcaseloop_(incr($1),`$2',shift(shift(shift(shift($@)))))')')
define(`Fcasearrow_',`ifelse(`$3',,,
`arrow from Task`$1'.E to (E,Task`$1'.E)
- Fcasearrow_(incr($1),`$2',shift(shift(shift(shift($@)))))')')
+ Fcasearrow_(incr($1),,shift(shift(shift(shift($@)))))')')
- `while statement with explicit test
- Fwhiledo("test text", wid x ht y, attributes, task spec )
- The task structure is given label Task '
+ `while statement with explicit test
+ Fwhiledo("test text", wid x ht y,
+ attributes, task spec )
+ The task structure is given label Task '
define(`Fwhiledo',`[ down
Test: Ftest(`$1',`$2',`$3')
arrow right linewid/2 from Test.E
@@ -92,24 +217,26 @@ define(`Fwhiledo',`[ down
arrow to Test.n
`$5']')
- `repeat statement with explicit test
- Frepeatuntil("test",wid x ht y,attributes, task spec )
- The task structure is given label Task '
+ `repeat statement with explicit test
+ Frepeatuntil("test",wid x ht y,
+ attributes, task spec )
+ The task structure is given label Task '
define(`Frepeatuntil',`[ N: Here
Task: ifelse(`$4',,Here,`$4' with .N at N)
W: Task.W
- arrow down linewid/3
+ arrow from Task.S down linewid/3
Test: Ftest(`$1',`$2',`$3')
E: Task.E+(linewid/2+max(0,Test.e.x-Task.e.x),0)
arrow from Test.e to (E,Test) then to E then to Task.E
S: Test.S
`$5']')
- `if-then-else
- Fifthenelse( "test", wid x ht y, attributes,
- left tasks, right tasks)
- The left task structure is given label Ltask and the right
- task structure is given label Rtask '
+ `if-then-else
+ Fifthenelse( "test", wid x ht y, attributes,
+ left tasks, right tasks)
+ The left task structure is given label
+ Ltask and the right task structure is
+ given label Rtask '
define(`Fifthenelse',`[ Test: Ftest(`$1',`$2',`$3')
N: Test.N
Ltask: ifelse(`$4',,`Test.S; W:Test.W; LS:Ltask',
diff --git a/graphics/circuit_macros/examples/Geometry.m4 b/graphics/circuit_macros/examples/Geometry.m4
new file mode 100644
index 0000000000..ae0a661012
--- /dev/null
+++ b/graphics/circuit_macros/examples/Geometry.m4
@@ -0,0 +1,46 @@
+.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
+ AB: line from A to B
+ BC: line from B to C
+ CA: line from C to A
+
+ PerpTo(A,BC,L); "L" at L below
+ AL: line from A to L; RightAngle(A,L,C)
+
+ angleLAC = atan2(C.x-L.x,A.y-L.y)
+ S: move from A to (sin(angleLAC/2),-cos(angleLAC/2))
+ AW: line from A to Intersect_(S,BC)
+ W: Here; "W" at W below rjust
+
+ PerpTo(C,AB,N); "N" at N above rjust
+ CN: line from C to N; RightAngle(C,N,B)
+
+ PerpTo(B,CA,M); "M" at M above
+ CM: line from B to M; RightAngle(B,M,C)
+
+ H: Intersect_(CN,AL); "H" at H +(4bp__,10bp__)
+
+ thinlines_
+ Equidist3(B,L,N,CC1,c1rad); C1: circle rad c1rad at CC1
+ Equidist3(B,W,N,CC2,c2rad); C2: circle rad c2rad at CC2
+ Equidist3(B,C,N,CC3,c3rad); C3: circle rad c3rad at CC3
+ Equidist3(W,C,M,CC4,c4rad); C4: circle rad c4rad at CC4
+ thicklines_
+
+ Z: LCintersect(AW,CC2,C2.rad); "Z" at Z+(-5bp__,-5bp__)
+ HZ: move from H to Z
+ Y: LCintersect(HZ,CC4,C4.rad,R); "Y" at Y above
+ X: LCintersect(HZ,CC2,C2.rad); "X" at X above rjust
+
+ Loopover_(`P',`dot(at P)',X,Y,Z)
+
+ line dashed from X to Y chop -linewid/2
+ RightAngle(A,Z,Y)
+
+.PE
diff --git a/graphics/circuit_macros/examples/Grounds.m4 b/graphics/circuit_macros/examples/Grounds.m4
index e93fadf33c..84427ac8dc 100644
--- a/graphics/circuit_macros/examples/Grounds.m4
+++ b/graphics/circuit_macros/examples/Grounds.m4
@@ -1,5 +1,5 @@
.PS
-# `Grounds.m4'
+# Grounds.m4
cct_init
sep = 0.65
@@ -22,7 +22,7 @@ D: B+(0,11bp__)
"{\tt (,{,}E)}" at (GE,D)}
-GS: ground(,,S)
+GS: ground(,dimen_/2,S)
move right sep
GS90: [ground(,,S,90) ] with .n at Here
move right sep from GS90.n
@@ -36,7 +36,7 @@ GPA: ground(,T,PA)
C: Here+(0,-0.5)
E: C+(0,11bp__)
- "{\tt (,{,}S)}" at (GS,C)
+ "{\tt (,dimen\_/2,S)}" at (GS,C)
"{\tt (,{,}S,90)}" at (GS90,E)
"{\tt (,{,}Q)}" at (GQ,C)
"{\tt (,{,}L)}" at (GL,E)
diff --git a/graphics/circuit_macros/examples/Heathkit.m4 b/graphics/circuit_macros/examples/Heathkit.m4
index 8d3ec5ad00..4127c8287e 100644
--- a/graphics/circuit_macros/examples/Heathkit.m4
+++ b/graphics/circuit_macros/examples/Heathkit.m4
@@ -5,9 +5,13 @@ cct_init
maxpswid = 11
maxpsht = 8.5
-# Set small text size
- iflatex(`ifpsfrag(`textht = 7.5bp__; textoffset = 0.5bp__',
- `latexcommand({\tiny\sf)') ')
+# Set small text size: tikz-pgf changes
+# text offset for globally-defined tiny font
+# so we define tsf() to set size locally
+ iflatex(`ifpsfrag(`define(`tsf',"`$1'") dnl
+ textht = 7.5bp__; textoffset = 0.5bp__',
+ `define(`tsf',`"\tiny\sf `$1'"')')',
+ `define(`tsf',"`$1'")')
# Grid parameters
picwid = 8.5
@@ -52,32 +56,32 @@ ifdpic(`
# Circuit board
Board: box dashed thick 2 wid 58*g ht 55*g with .se at L1.end+(-7*g,-2*g)
P: box invis wid 12*g ht 4*g with .s at Board.sw+(26*g,0)
- { "POWER SUPPLY" ljust "CIRCUIT BOARD" ljust at P.w+(g,0) }
+ { tsf(POWER SUPPLY) ljust tsf(CIRCUIT BOARD) ljust at P.w+(g,0) }
line dashed thick 2 from P.sw to P.nw; line dashed thick 2 to P.ne
line dashed thick 2 to P.se
-define Pad { P`$1': box fill_(1) "$1" }
+define Pad { P`$1': box fill_(1) tsf($1) }
# Board connections on the right
Pad(1) at (Board.e,L1.end)
- line from P1.e to L1.end "RED" above
+ line from P1.e to L1.end tsf(RED) above
Pad(2) at (Board.e,L1.start)
- line from P2.e to L1.start "RED" above
+ line from P2.e to L1.start tsf(RED) above
Pad(3) at (Board.e,L2.end)
- GRN1: line left 4*g from L2.start "GRN" above ; ground
- GRN2: line from P3.e to L2.end "GRN" above
+ GRN1: line left 4*g from L2.start tsf(GRN) above ; ground
+ GRN2: line from P3.e to L2.end tsf(GRN) above
spline <-> from GRN2.end+(-g,0) up 2.5*g right 0.5*g then up 5*g left g \
then up 2.5*g right 0.5*g
- box invis fill_(1) wid 3*g ht g "\SI{6}{VAC}" at L2.c-(2*g,0)
+ box invis fill_(1) wid 3*g ht g tsf(6 VAC) at L2.c-(2*g,0)
Pad(4) at P3-(0,3*g)
- line right_ 3*g from P4.e "BRN" above
+ line right_ 3*g from P4.e tsf(BRN) above
arrow down_ 2*g ht arrowht*2/3
- "TO DIAL" "LAMPS" at Here+(0,-g)below
+ tsf(TO DIAL) tsf(LAMPS) at Here+(0,-g)below
Pad(5) at (Board.e,L3.end)
- line from P5.e to L3.end "BLU" above
+ line from P5.e to L3.end tsf(BLU) above
Pad(7) at (Board.e,L3.start)
- line from P7.e to L3.start "BLU" above
+ line from P7.e to L3.start tsf(BLU) above
Pad(6) at 0.5 between P5 and P7
- line from P6.e to L3.c "BLU-YEL" above
+ line from P6.e to L3.c tsf(BLU-YEL) above
# Power wiring, plug, switch
define(`socket',`[
@@ -88,19 +92,19 @@ define(`socket',`[
line from Outer.e to R.e
] ')
- BLK: line from L4.end to (int(L4.end.x/g+8)*g,L4.end.y) "BLK" below ; dot
+ BLK: line from L4.end to (int(L4.end.x/g+8)*g,L4.end.y) tsf(BLK) below ; dot
b = lin_leng(BLK)
- BLKYEL: line from L4.start right_ b "BLK-YEL" above ; dot
- BLKGRN: line from L5.end right_ b "BLK-GRN" below ; dot
- BLKRED: line from L5.start right_ b "BLK-RED" above ; dot
+ BLKYEL: line from L4.start right_ b tsf(BLK-YEL) above ; dot
+ BLKGRN: line from L5.end right_ b tsf(BLK-GRN) below ; dot
+ BLKRED: line from L5.start right_ b tsf(BLK-RED) above ; dot
line right_ g; PL: dot
line from BLKYEL.end right g then to Here+(0,-g)
fuse(down_ 3*g,D)
- rlabel(,"\SI{3}{\ampere} FUSE" rjust "SLOW BLOW")
+ rlabel(,tsf(3 A FUSE) rjust tsf(SLOW BLOW))
line to (Here.x,int(Here.y/g)*g-g); dot
Sckt1: socket at Here+(5*g,0)
- line from Sckt1.w to (PL,Sckt1); A: dot; "A" rjust
- line from Sckt1.e right_ lin_leng(last line); B: dot; "B" ljust
+ line from Sckt1.w to (PL,Sckt1); A: dot; tsf(A) rjust
+ line from Sckt1.e right_ lin_leng(last line); B: dot; tsf(B) ljust
Sckt2: socket at (Sckt1,P1+(0,6*g))
line from Sckt2.w to (A,Sckt2); dot
line from Sckt2.e to (B,Sckt2); dot
@@ -117,22 +121,22 @@ define(`plug',`[ w = dimen_*2/3; q = 0.25*w
line from T2 to (T2,F.c)-(0,2*g) ]')
PP: plug with .F.c at Sckt3+(0,-8*g)
- "\SI{120}{VAC}" ljust "\SI{50/60}{\hertz}" ljust at PP.e
+ tsf(120 VAC) ljust tsf(50/60 Hz) ljust at PP.e
define(`pwrswitch',`[ right; circlerad = 1.75*g/2
- C1: circle "1"
- C4: circle "4"
- C2: circle "2" with .n at C1.s+(0,-C1.rad)
- C5: circle "5"
- C3: circle "3" with .n at C2.s+(0,-C1.rad)
- C6: circle "6"
+ C1: circle tsf(1)
+ C4: circle tsf(4)
+ C2: circle tsf(2) with .n at C1.s+(0,-C1.rad)
+ C5: circle tsf(5)
+ C3: circle tsf(3) with .n at C2.s+(0,-C1.rad)
+ C6: circle tsf(6)
hatchbox(wid g ht C2.n.y-C3.s.y,0.05) with .w at 0.5 between C5.e and C6.e
]')
Psw: pwrswitch with .C4.e at Sckt1+(0,-4*g)
- "POWER" at Psw.w+(-2*g,0) rjust
+ tsf(POWER) at Psw.w+(-2*g,0) rjust
arrow up Psw.ht/2 at Psw.e+(1.5*g,0)
- "ON" above; "OFF" at last arrow.start below
+ tsf(ON) above; tsf(OFF) at last arrow.start below
line from Psw.C1.w to (A,Psw.C1) then to A
line from Psw.C2.w to (A,Psw.C2); contline to (Here,PP.T1) then to PP.T1
line from PP.T2 to (B,PP.T2) then to (B,L4.end) then to L4.end
@@ -140,12 +144,12 @@ define(`pwrswitch',`[ right; circlerad = 1.75*g/2
# Bottom connections
Pad(25) at Board.se+(-3*g,0)
- R516: resistor(down_ 6*g from P25.s); rlabel(,"R516" rjust "22"); ground(,T)
+ R516: resistor(down_ 6*g from P25.s); rlabel(,tsf(R516) rjust tsf(22)); ground(,T)
dot(at P25.s+(0,-g)); line right_ 5*g
- reversed(`source',down_ 4*g,B); llabel(,"No 49" ljust "HI" ljust "TEMP")
+ reversed(`source',down_ 4*g,B); llabel(,tsf(No 49) ljust tsf(HI) ljust tsf(TEMP))
line to (P25,Here); dot
t = linethick; linethick_(0.4)
- arrow <- from P25.s+(0,-g/2) right_ 2*g up_ g/4; "BRN" ljust; linethick_(t)
+ arrow <- from P25.s+(0,-g/2) right_ 2*g up_ g/4; tsf(BRN) ljust; linethick_(t)
Pad(24) at P25+(-4*g,0)
line from P24.s to (P24,R516.end); ground(,T)
@@ -153,28 +157,28 @@ define(`pwrswitch',`[ right; circlerad = 1.75*g/2
line from P23.s to (P23,R516.end); ground(,T)
Pad(22) at Board.sw+(0,3*g)
- R514: resistor(right_ 8*g from P22.e); llabel(,"R514")
- rlabel(,"\SI{680}{\kilo{}}")
+ R514: resistor(right_ 8*g from P22.e); llabel(,tsf(R514))
+ rlabel(,tsf(680 k))
dot; { ground }
line to (P23,Here) then to P23.n
# Diode bridge
BE: dot(at (P24,L1.c))
d1h = lin_leng(L1)/2
- diode(left_ d1h up_ d1h); rlabel(,,"D508")
+ diode(left_ d1h up_ d1h); rlabel(,,tsf(D508))
BN: dot
- diode(left_ d1h down_ d1h); rlabel("D506")
+ diode(left_ d1h down_ d1h); rlabel(tsf(D506))
BW: dot
- diode(from BE left_ d1h down_ d1h); llabel(,,"D509")
+ diode(from BE left_ d1h down_ d1h); llabel(,,tsf(D509))
BS: dot
- diode(left_ d1h up_ d1h); llabel(D507)
- capacitor(down_ from BN to BS,C); llabel("C507",,\num{.22})
+ diode(left_ d1h up_ d1h); llabel(tsf(D507))
+ capacitor(down_ from BN to BS,C); llabel(tsf(C507),,tsf(.22))
line from BE to P24.n
line from BN to P2.w
line from BS to P1.w
spline <-> from (BE.x+2*g,BS.y) \
up d1h/2 right g/2 then up d1h left g then up d1h/2 right g/2
- box invis fill_(1) ht 2*g wid 2*g "57" "VAC" at last spline.c
+ box invis fill_(1) ht 2*g wid 2*g tsf(57) tsf(VAC) at last spline.c
# Left board connections
Pad(21) at (Board.w,BW); line from P21.e to BW
@@ -184,41 +188,40 @@ define(`pwrswitch',`[ right; circlerad = 1.75*g/2
# Transistor with circles
define(`hbi_tr',`[ linewid = linewid*4/4.16
Q: bi_tr(`$1',`$2',`$3',E)
- E: circle rad m4_xyU at 5/4 between Q.A1 and Q.E "E"
- B: circle rad m4_xyU at 5/4 between Q.A1 and Q.B "B"
- C: circle rad m4_xyU at 5/4 between Q.A1 and Q.C "C"
+ E: circle rad m4_xyU at 5/4 between Q.A1 and Q.E tsf(E)
+ B: circle rad m4_xyU at 5/4 between Q.A1 and Q.B tsf(B)
+ C: circle rad m4_xyU at 5/4 between Q.A1 and Q.C tsf(C)
]')
# Interior circuits
line from P6.w left 2*g; ground
line from P5.w left 4*g; dot
- { C504: capacitor(down_ 4*g,C); llabel("C504",,\num{.22}); ground(,T) }
- D504: diode(left_ 5*g); rlabel(,"D504"); dot
+ { C504: capacitor(down_ 4*g,C); llabel(tsf(C504),,tsf(.22)); ground(,T) }
+ D504: diode(left_ 5*g); rlabel(,tsf(D504)); dot
{ C505: capacitor(down_ to (Here,C504.end),C+L)
- rlabel("C505",\num{100},\SI{75}{\volt}); ground(,T) }
+ rlabel(tsf(C505),tsf(100),tsf(75 V)); ground(,T) }
line right_ to (Here,P7); dot
- { D503: reversed(`diode',to (D504.start,Here)); llabel(,"D503")
+ { D503: reversed(`diode',to (D504.start,Here)); llabel(,tsf(D503))
line to P7.w }
d3 = lin_leng(L3)
spline <-> from C504.start+(g/2,0) \
up d3/4 right g/4 then up d3*2/4 left g/2 then up d3/4 right g/4
- box invis fill_(1) ht g wid 4*g "\SI{100}{VAC}" \
- at last spline.c+(-g,0)
+ box invis fill_(1) ht g wid 4*g tsf(100 VAC) at last spline.c+(-g,0)
down_
Q503: hbi_tr(,R,P) with .E at (C505,P3)
line from Q503.C.e to (P25,Q503.C) then to P25.n
line from Q503.B.s to (Q503.B.x,Q503.E.y-4*g)
- R513: resistor(down_ 5*g); llabel(,"R513" ljust "1500"); ground(,T)
+ R513: resistor(down_ 5*g); llabel(,tsf(R513) ljust tsf(1500)); ground(,T)
line from P19.e to (BW-(2*g,0),P19) then up Q503.E.y-P19.y+2*g
- R511: resistor(right_ 5*g); llabel(,"R511"); rlabel(,\num{470});
+ R511: resistor(right_ 5*g); llabel(,tsf(R511)); rlabel(,tsf(470));
line to (Q503.E,Here) then to Q503.E.n
line from P20.e to (BW,P20) then up R513.end.y-P20.y
resistor(up_ lin_leng(R513))
- rlabel(,"R512" ljust "5600" ljust "\SI{1}{\watt}")
+ rlabel(,tsf(R512) ljust tsf(5600) ljust tsf(1 W))
line to (Here,Q503.B) then to Q503.B.w
- "Q503" "S2091 HI TEMP" "CONTROL" at Q503.E+(1.5*g,4*g)
- D505: reversed(`diode',right_ from Q503.E.e to (C504,Q503.E)); llabel(,"D505")
+ tsf(Q503) tsf(S2091 HI TEMP) tsf(CONTROL) at Q503.E+(1.5*g,4*g)
+ D505: reversed(`diode',right_ from Q503.E.e to (C504,Q503.E)); llabel(,tsf(D505))
line to P3.w
line from P4.w left_ 2*g then up P3.y-P4.y; dot
@@ -226,23 +229,23 @@ define(`hbi_tr',`[ linewid = linewid*4/4.16
{ Pad(8) at (Here,Board.n) }
{ line to P8.s }
R505: resistor(down_ to (Here,P6))
- llabel(,"R505" ljust "\SI{12}{\kilo{}}"); dot
+ llabel(,tsf(R505) ljust tsf(12 k)); dot
{ C503: capacitor(down_ to (Here,C505.end),C+L)
- rlabel(,"C503" rjust "100" rjust "\SI{70}{\volt}")
+ rlabel(,tsf(C503) rjust tsf(100) rjust tsf(70 V))
ground(,T) }
right_
Q502: hbi_tr(,R) with .B at (R511.start,Here)
line from Q502.C.e to R505.start
line from Q502.B.e to R505.end
R504: resistor(down_ from Q502.B.s to (Q502.B,C505.end))
- rlabel(,"R504" rjust "\SI{51}{\kilo{}}"); ground(,T)
- "Q502" "TA7311" "REGULATOR" "CONTROL" at Q502.C+(-1*g,3.5*g)
+ rlabel(,tsf(R504) rjust tsf(51 k)); ground(,T)
+ tsf(Q502) tsf(TA7311) tsf(REGULATOR) tsf(CONTROL) at Q502.C+(-1*g,3.5*g)
Pad(9) at (Q502.E,Board.n)
line from Q502.E.n to P9.s
Pad(10) at (Q502.B-(9*g,0),Board.n)
R502: resistor(left_ from Q502.E.w to (P10,Q502.E))
- rlabel(,"R502"); llabel(,\num{150}); dot
+ rlabel(,tsf(R502)); llabel(,tsf(150)); dot
Pad(11) at (Board.w,Q502.E)
Pad(14) at P11+(0,2.5*g)
@@ -257,7 +260,7 @@ define(`hbi_tr',`[ linewid = linewid*4/4.16
line from Q501.B.s to P9.n
line from Q501.C.e to (P8,Q501.C) then to P8.n
line from Q501.E.w to (P10,Q501.E) then to P10.n
- "Q501" "2N3055" "REGULATOR" at Q501.n+(0,2*g)
+ tsf(Q501) tsf(2N3055) tsf(REGULATOR) at Q501.n+(0,2*g)
line from P14.e to (P10,P14); dot
Pad(17) at (Board.w,R511)
@@ -270,84 +273,81 @@ define(`hbi_tr',`[ linewid = linewid*4/4.16
line from P17.e to Q504.E.w
line from Q504.B.s to (Q504.B,R513.start)
R508:resistor(down_ to (Here,R513.end))
- llabel(,"R508" ljust "680"); ground(,T)
+ llabel(,tsf(R508) ljust tsf(680)); ground(,T)
dot(at (P10,P15))
{ line to P10.s }
{ resistor(down_ 5*g)
llabel(,
- "R510" ljust "225" ljust "\SI{10}{\watt}" ljust "\SI{5}{\hbox{\%}}")
+ tsf(R510) ljust tsf(225) ljust tsf(10 W) ljust tsf(5 \%))
line to Q504.C.n }
- R503:resistor(left_ 10*g); rlabel(,"R503")
- { "290" "\SI{10}{\watt} \SI{5}{\hbox{\%}}" at last [].s+(0,-1.3*g) }
+ R503:resistor(left_ 10*g); rlabel(,tsf(R503))
+ { tsf(290) tsf(10 W 5 \%) at last [].s+(0,-1.3*g) }
dot
line to (Here,Q504.B)
- resistor(right_ to Q504.B.w); llabel(,"R507"); rlabel(,\num{100})
+ resistor(right_ to Q504.B.w); llabel(,tsf(R507)); rlabel(,tsf(100))
line from P15.e to R503.end
-# "Q504" "40409" "REGULATOR" at Q504.C+(3.5*g,3*g)
- "Q504" "40409" "REGULATOR" at Q504.n+(-2*g,3*g)
- resistor(left_ from R502.end to (R503.end,P11)); rlabel(,"R501")
- {"390" "\SI{5}{\watt} \SI{5}{\hbox{\%}}" at last [].s+(0,-1.3*g)}
+ tsf(Q504) tsf(40409) tsf(REGULATOR) at Q504.n+(-2*g,3*g)
+ resistor(left_ from R502.end to (R503.end,P11)); rlabel(,tsf(R501))
+ {tsf(390) tsf(5 W 5 \%) at last [].s+(0,-1.3*g)}
line to P11.e
- resistor(right_ from P16.e to (R514.end,P16)); llabel(,"R506")
- rlabel(,\num{82})
+ resistor(right_ from P16.e to (R514.end,P16)); llabel(,tsf(R506))
+ rlabel(,tsf(82))
line down P16.y-P17.y; dot
dot(at (R514.end,P11))
- C501: capacitor(down_ 6*g,C+); llabel("C501")
- {"100" ljust "\SI{30}{\volt}" ljust at last [].s+(0,-g) below }
+ C501: capacitor(down_ 6*g,C+); llabel(tsf(C501))
+ {tsf(100) ljust tsf(30 V) ljust at last [].s+(0,-g) below }
ground(,T)
dot(at (Here.x+4*g,P11.y))
- ZD501: reversed(`diode',down_ lin_leng(C501),Z); llabel("ZD501"); ground(,T)
+ ZD501: reversed(`diode',down_ lin_leng(C501),Z); llabel(tsf(ZD501)); ground(,T)
dot(at (R514.end,P15))
- C502: capacitor(down_ 6*g,C+); llabel("C502")
- {"100" ljust "\SI{30}{\volt}" ljust at last [].s+(0,-g) below }
+ C502: capacitor(down_ 6*g,C+); llabel(tsf(C502))
+ {tsf(100) ljust tsf(30 V) ljust at last [].s+(0,-g) below }
ground(,T)
dot(at (Here.x+4*g,P15.y))
- ZD502: reversed(`diode',down_ lin_leng(C502),Z); llabel("ZD502"); ground(,T)
+ ZD502: reversed(`diode',down_ lin_leng(C502),Z); llabel(tsf(ZD502)); ground(,T)
line from (C502,P17) to (C502,R508.start+(0,g))
- C506: capacitor(down_ to (Here,R508.end),C+); llabel("C506")
- {"100" ljust "\SI{30}{\volt}" ljust at last [].s+(0,-g) below }
+ C506: capacitor(down_ to (Here,R508.end),C+); llabel(tsf(C506))
+ {tsf(100) ljust tsf(30 V) ljust at last [].s+(0,-g) below }
ground(,T)
# Left-side boxes
boxwid = 10*g
boxht = 5*g
- line left 3*g from P22.w "GRY" above
- line left 3*g from P19.w "VIOL" above
+ line left 3*g from P22.w tsf(GRY) above
+ line left 3*g from P19.w tsf(VIOL) above
box with .e at (Here,0.5 between P19 and P22) \
- "\shortstack[l]{TO SIGNAL\\ METER\\ CIRCUIT}"
+ tsf(\shortstack[l]{TO SIGNAL\\ METER\\ CIRCUIT})
- line left 8*g from P21.w "RED TO C508" above
- line left 8*g from P20.w "VIOL" above
+ line left 8*g from P21.w tsf(RED TO C508) above
+ line left 8*g from P20.w tsf(VIOL) above
- line left 3*g from P17.w "RED" above
- line left 3*g from P18.w "WHT-" "RED" above
+ line left 3*g from P17.w tsf(RED) above
+ line left 3*g from P18.w tsf(WHT-) tsf(RED) above
box with .e at (Here,0.5 between P17 and P18) \
- "\shortstack[l]{\SI{12.7}{\volt} SOURCE\\ TO MULTIPLEX}"
+ tsf(\shortstack[l]{12.7 V SOURCE\\ TO MULTIPLEX})
- line left 3*g from P16.w "WHT" above
+ line left 3*g from P16.w tsf(WHT) above
box with .se at Here+(0,-g) \
- "\shortstack[l]{\SI{12}{\volt} SOURCE\\ TO FM TUNER\\ SOURCE SWITCH}"
+ tsf(\shortstack[l]{12 V SOURCE\\ TO FM TUNER\\ SOURCE SWITCH})
- line left 3*g from P15.w "ORG" above
+ line left 3*g from P15.w tsf(ORG) above
box ht 3*g with .e at Here \
- "\shortstack[l]{\SI{15}{\volt} SOURCE\\ TO FM TUNER}"
+ tsf(\shortstack[l]{15 V SOURCE\\ TO FM TUNER})
- line left 3*g from P13.w "BLU" above
- line left 3*g from P12.w " WHT-" "RED"
- line left 3*g from P11.w "RED" above
+ line left 3*g from P13.w tsf(BLU) above
+ line left 3*g from P12.w tsf( WHT-) tsf(RED)
+ line left 3*g from P11.w tsf(RED) above
box ht 6*g with .e at (Here,P12) \
- "\shortstack[l]{\SI{27}{\volt} SOURCE\\ TO CONTROL\\ PREAMP AND\\ PWR\
- AMPLIFIER}"
+ tsf(\shortstack[l]{27 V SOURCE\\ TO CONTROL\\ PREAMP AND\\ PWR\
+ AMPLIFIER})
line left 3*g from P14.w
- { "WHT-" "GRY-" "GRN" at last line.c+(0,2*g) }
+ { tsf(WHT-) tsf(GRY-) tsf(GRN) at last line.c+(0,2*g) }
box with .se at Here+(0,-g) \
- "\shortstack[l]{\SI{50}{\volt} SOURCE\\ TO PHONO\\ PREAMP}"
-
- iflatex(`ifpsfrag(,`latexcommand(})')')
+ tsf(\shortstack[l]{50 V SOURCE\\ TO PHONO\\ PREAMP})
.PE
diff --git a/graphics/circuit_macros/examples/Lyap.m4 b/graphics/circuit_macros/examples/Lyap.m4
new file mode 100644
index 0000000000..a1b40a8ad0
--- /dev/null
+++ b/graphics/circuit_macros/examples/Lyap.m4
@@ -0,0 +1,159 @@
+.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,<-)
+ "$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)
+"$x_1$" rjust below
+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)
+"$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
+
+.PE
diff --git a/graphics/circuit_macros/examples/MC.m4 b/graphics/circuit_macros/examples/MC.m4
index d76016c6e4..260a567aad 100644
--- a/graphics/circuit_macros/examples/MC.m4
+++ b/graphics/circuit_macros/examples/MC.m4
@@ -36,45 +36,46 @@ MC: [
]
Three: [
+ gapht = 4*dimen_
dv = dimen_*0.6
- dh = dimen_
+ dh = dimen_*5/6
define(`swfet',`mosfet(`$1',,dMEDSuBQPy)')
define(`swpair',`[ up_
BS: swfet(up_ dimen_); { "`$1'" at BS.D-(0,2bp__) rjust }
- L: line up_ 3*dimen_ from BS.D
+ L: line up_ gapht-2*dimen_ from BS.D
TS: swfet(up_ dimen_) with .S at Here; { "`$2'" at TS.S+(0,2bp__) rjust }
T: TS.D
B: BS.S
C: L.c
]')
- V1: gap(up_ 5*dimen_,1,A); { "$V_1$" at last arrow.c rjust }
- line right_ dh/2
+ V1: gap(up_ gapht,1,A); { "$V_1$" at last arrow.c rjust }
+ line right_ dimen_/2
{ C1: capacitor(down_ to (Here,V1.start)); llabel(C_1) }
for_(1,3,1,`
- line right_ dh ifelse(m4x,1,,*5/4)
+ line right_ dimen_ ifelse(m4x,1,,*5/4)
{SP1`'m4x: swpair(S1`'eval(m4x+3),S1`'m4x) with .T at Here
dot(at last [].C + (0,(2-m4x)*dh))
- line right_ (3-m4x)*dh*5/4
+ line right_ (3-m4x)*dimen_*5/4 + dimen_/4
inductor(right_ dimen_,L); llabel(,L_{1\char`'eval(64+m4x)})
- line down_ (2-m4x)*dimen_*2/3
+ line down_ (2-m4x)*dh*2/3
pushdef(`dimen_',dimen_*1.2) inductor(right_ dimen_*3/4) popdef(`dimen_')
- line down_ (2-m4x)*dimen_/3
+ line down_ (2-m4x)*dh/3
M: move right_ dimen_/8
- line up_ (2-m4x)*dimen_/3
+ line up_ (2-m4x)*dh/3
pushdef(`dimen_',dimen_*1.2) inductor(right_ dimen_*3/4) popdef(`dimen_')
- line up_ (2-m4x)*dimen_*2/3
+ line up_ (2-m4x)*dh*2/3
inductor(right_ dimen_,L); llabel(,L_{2\char`'eval(64+m4x)})
- line right_ dimen_/8+(m4x-1)*dh*5/4
+ line right_ dimen_/8+(m4x-1)*dh*5/4 + dimen_/4
dot
SP2`'m4x: swpair(S2`'eval(m4x+3),S2`'m4x) with .C at Here+(0,(m4x-2)*dh) }
')
- "$T_r$" at M.c+(0,dimen_/2)
+ "$T_r$" at M.c+(0,dimen_*2/3)
line from V1.start to SP13.B
line from SP21.B to SP23.B+(dh*3/4,0)
{ C2: capacitor(up_ to (Here,V1.end)); llabel(,,C_2) }
- line right_ dh/2
- gap(up_ 5*dimen_,1,A); { "$V_2$" at last arrow.c ljust }
+ line right_ dimen_/2
+ gap(up_ gapht,1,A); { "$V_2$" at last arrow.c ljust }
line to SP21.T chop dotrad_ chop 0
] with .nw at MC.sw+(0,-0.2)
diff --git a/graphics/circuit_macros/examples/Makefile b/graphics/circuit_macros/examples/Makefile
index d729596a17..cd0500c40c 100644
--- a/graphics/circuit_macros/examples/Makefile
+++ b/graphics/circuit_macros/examples/Makefile
@@ -5,10 +5,11 @@
# Type "make <diag>.ps" to make a postscript file from <diag>.m4
# It may be necessary to type "make clean" before this or any of the following:
# Type "make <diag>.eps" to make an .eps file from <diag>.m4
+# Type "make <diag>.svg" to make an .svg file from <diag>.m4 using pdf2svg
# The following require ImageMagick convert:
# Type "make <diag>.png" to make a .png file from <diag>.m4
# Type "make <diag>.tif" to make a .tif file from <diag>.m4
-# Type "make <diag>.svg" to make a .svg file from <diag>.m4
+#
# See also: the svg subdirectory for generating svg directly.
#
# To test the file test.m4, type "make tst" if boxdims is used, otherwise
@@ -28,9 +29,9 @@ LIBDIR = ..
# The dpic processor:
PIC = dpic -p
#PIC = $$HOME/dpic/build/p2c/ftp/dpic -p
-#PIC = $$HOME/dpic/dev/p2c/ftp/dpic -p
+#PIC = $$HOME/dpic/pa*dev/p2c/ftp/dpic -p
#PIC = $$HOME/dpic/bison/dpic -p
-#PIC = $$HOME/dpic/bdev/dpic -p
+#PIC = $$HOME/dpic/bi*v/dpic -p
CONFIGFILE = pstricks.m4
@@ -66,21 +67,21 @@ PICS = \
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 Logic.tex Loglog.tex MC.tex Mixer.tex MotorControl.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 \
Schottky.tex sfg.tex shapes.tex ShiftR.tex Sierpinski.tex Sixpole.tex \
Sources.tex SQUID.tex Switches.tex \
- Tgate.tex Three.tex thyristor.tex Timer.tex \
+ Tgate.tex Three.tex thyristor.tex \
TTLnand.tex Ttree.tex Tubediags.tex ujt.tex Variable.tex Windings.tex \
worm.tex Xform.tex XOR.tex
# Files that have to be processed twice:
-BOXDIMS = ex09.tex Crow.tex Incleps.tex Loglog.tex Opamp.tex random.tex \
- Ttree.tex Windings.tex
-BOXPICS = ex09.pic Crow.pic Incleps.pic Loglog.pic Opamp.pic random.pic \
- Ttree.pic Windings.pic
+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
@@ -91,6 +92,18 @@ BS = tr '|' '\134'
# Might be needed (change latex commands to $(LTX) )
# LTX = latex --shell-escape
+LTXFILE=printf "|documentclass[11pt]{article}\n\
+|usepackage{times,pstricks,boxdims,graphicx,pst-grad,pst-slpe}\n\
+|usepackage{siunitx}\n\
+|setlength{|textwidth}{28cm}|setlength{|textheight}{28cm}\n\
+|setlength{|oddsidemargin}{0pt}|setlength{|evensidemargin}{0pt}\n\
+|setlength{|hoffset}{-1cm}\n\
+|pagestyle{empty}|thispagestyle{empty}\n\
+|newbox|graph\n\
+|begin{document}\n\
+|noindent|input{"$*".tex}\n\
+|end{document}\n" | $(BS)
+
.SUFFIXES: .ps .dvi .tex .m4 .pic .eps .png .pdf .svg .tif .gif
.dvi.ps:
dvips $(DVIPSOPTS) $* -o $*.ps
@@ -106,25 +119,25 @@ BS = tr '|' '\134'
@if test -n "$(DIMFILE)" ; then touch $(DIMFILE) ; fi
$(M4) $(M4LIBS) $(DIMFILE) $*.m4 > $*.pic
.m4.dvi:
- make $*.tex
- printf "|documentclass[11pt]{article}\n\
-|usepackage{times,pstricks,boxdims,graphicx,pst-grad,pst-slpe}\n\
-|usepackage{siunitx}\n\
-|setlength{|textwidth}{28cm}|setlength{|textheight}{28cm}\n\
-|setlength{|oddsidemargin}{0pt}|setlength{|evensidemargin}{0pt}\n\
-|setlength{|hoffset}{-1cm}\n\
-|pagestyle{empty}|thispagestyle{empty}\n\
-|newbox|graph\n\
-|begin{document}\n\
-|noindent|input{"$*".tex}\n\
-|end{document}\n" | $(BS) > F_$*.tex
- latex F_$*
+ @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
+ latex --quiet F_$*
touch F_$*.dim $(DIMFILE) ; rm -f $*.tex $*.pic ; make $*.tex
- latex F_$*
+ latex --quiet F_$*
touch F_$*.dim $(DIMFILE) ; rm -f $*.tex $*.pic ; make $*.tex
- latex F_$*
+ latex --quiet F_$*
.m4.eps:
- make $*.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
+ 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
+ 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
@@ -140,9 +153,9 @@ BS = tr '|' '\134'
make $*.tex && mv $*.tex test.tex; latex tst
dvips $(DVIPSOPTS) tst -o $*.ps
chmod 644 $*.ps
-.m4.svg:
- make $*.eps
- convert $(EPSOPTS) $*.eps $*.svg
+#.m4.svg:
+# make $*.eps
+# convert $(EPSOPTS) $*.eps $*.svg
.m4.png:
make $*.eps
convert $(PNGOPTS) $*.eps $*.png
@@ -161,11 +174,24 @@ BS = tr '|' '\134'
$(PIC) -g $*.pic > test.tex
sed -e '/^\\usepackage.*graphicx/s/^.*$$/\\usepackage{tikz}/' \
-e '/pstricks/d' tst.tex > F_$*.tex
- pdflatex F_$*
+ pdflatex --quiet F_$*
+ $(M4) pgf.m4 F_$*.dim $*.m4 > $*.pic
+ $(PIC) -g $*.pic > test.tex
+ pdflatex --quiet F_$*
+ mv F_$*.pdf $*.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 F_$*
+ pdflatex --quiet F_$*
mv F_$*.pdf $*.pdf
+ pdf2svg $*.pdf $*.svg
+ rm -f $*.pdf $*.pic F_$**
#########################################################################
@@ -237,7 +263,7 @@ clobber: clean
do (if test -d $$dir ; then cd $$dir; make clobber; fi) ; done
rm -f *.warn
rm -f examples.pdf
- rm -rf index.html html basenames *.png* dist zips htmlfiles svgfiles
+ rm -rf index.html html basenames *.png* dist zips htmlfiles
rm -rf $(TMP)/Cir* $(ECETMP)/Cir* $(ECEDIR)
if test -f Incl.pdf ; then \
mv Incl.pdf Incl.pdx; rm -f *.pdf; mv Incl.pdx Incl.pdf ; fi
@@ -249,7 +275,7 @@ clobber: clean
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*
+ 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 *.tfm *[0-9]pk *.png *.1 *.gif
diff --git a/graphics/circuit_macros/examples/PushPull.m4 b/graphics/circuit_macros/examples/PushPull.m4
index 24669faf29..d9545616bf 100644
--- a/graphics/circuit_macros/examples/PushPull.m4
+++ b/graphics/circuit_macros/examples/PushPull.m4
@@ -21,13 +21,13 @@ define(`Xform21',
T1: Xform21
line left_ del from T1.L3.end; corner; ground(,,F)
line left_ 2*del from T1.L3.start
- In: dot(,,1); { "RF" wid 12bp__ at In.n above }
+ In: dot(,,1); { "\small RF" wid 12bp__ at In.n above }
up_
Q1: mosfet(,,dBSDFQM1,E) with .G0 at T1.T+(2*dimen_+del/2,dimen_)
- { "3N200" at last [].n above }
+ { "\small 3N200" at last [].n above }
line from T1.L2.end to (T1.L2.end,Q1.G0) then to Q1.G0
Q2: mosfet(,,dBSDFQM1,E) with .G0 at (Q1.G0.x,T1.T.y-dimen_)
- { "3N200" at last [].n above }
+ { "\small 3N200" at last [].n above }
line from T1.L1.start to (T1.L1.start,Q2.G0) then to Q2.G0
resistor(right_ dimen_ from T1.T); llabel(,\SI{330}{\Omega}); Tx:dot
@@ -63,7 +63,7 @@ define(`Xform21',
line right_ del from T2.L3.start; corner
capacitor(down_ dimen_,C); llabel(\SI{1000}{pF}); ground(,T,F)
line right_ 2*del from T2.L3.end
- Out: dot(,,1); { "IF" wid 12bp__ at Out.n above }; move right_ 0.3
+ Out: dot(,,1); { "\small IF" wid 12bp__ at Out.n above }; move right_ 0.3
line from T2.L1.start to (T2.L1,Q1.D) then to Q1.D
line from T2.L2.end to (T2.L2.end,Q2.D) then to Q2.D
@@ -83,7 +83,7 @@ define(`Xform21',
dot(at Q3.B+(del,0))
line up_ (TL.y+Q3.C.y)/2 - Here.y+del/4 then left_ Here.x-TL.x
reversed(`capacitor',left_ dimen_,C); llabel(,\SI{1500}{pF})
- Osc: dot(,,1); { "Osc" above at Osc.n }
+ Osc: dot(,,1); { "\small Osc" above at Osc.n }
line from Q3.B to (Vc,Q3.B)
line from Q3.C to (Q3.C,TL); dot
diff --git a/graphics/circuit_macros/examples/Timer.m4 b/graphics/circuit_macros/examples/Timer.m4
deleted file mode 100644
index a5db32c800..0000000000
--- a/graphics/circuit_macros/examples/Timer.m4
+++ /dev/null
@@ -1,52 +0,0 @@
-.PS
-# Timer.m4
-cct_init
-iflatex(`latexcommand({\small\sf)')
-
-define(`ic555',`[Chip: box ht boxwid wid boxwid "555"
- P7: "7" ljust at 1/6<Chip.sw,Chip.nw>
- P6: "6" ljust at 1/2<Chip.sw,Chip.nw>
- P2: "2" ljust at 5/6<Chip.sw,Chip.nw>
- P4: "4" below at 1/3<Chip.nw,Chip.ne>
- P8: "8" below at 2/3<Chip.nw,Chip.ne>
- P3: "3" rjust at Chip.e
- P1: "1" above at Chip.s
- ]')
-
- define(`elen_',`linewid')
-Vs: dot
- down_
- variable(`resistor(,E); llabel(,\SI{1}{M})')
- resistor(,E); llabel(,\SI{100}{\kilo{}})
- capacitor(,E); llabel(\SI{220}{\micro{}})
-Zero: dot
-
- dot(at Vs+(elen_*4/3,0))
- resistor(,E); llabel(,\SI{33}{\kilo{}})
- line to (Here,Zero) chop 0 chop elen_
-C2: capacitor; llabel(\SI{0.1}{\micro{}})
- dot
-
-IC1: ic555 with .P7 at C2.start + (elen_,0)
- line from IC1.P4 to (IC1.P4,Vs); dot
- line from IC1.P8 to (IC1.P8,Vs); dot
- line from IC1.P1 to (IC1.P1,Zero); dot
- line from IC1.P2 to (C2,IC1.P2); dot
- crossover(from IC1.P7 to (Zero,IC1.P7),R,C2); dot
- line from IC1.P6 left elen_/2 then down IC1.P6.y-IC1.P7.y; dot
- line from IC1.P3 right elen_*2/3
-R: dot
- line right_ elen_/3
-B: buzzer(,,C) with .In3 at Here
- line from B.In1 to (R,B.In1)
- reversed(`diode',to (Here,Vs),LE); "red" at last line.c+(elen_/2,0)
- resistor(down_ elen_ from R,E); llabel(,\num{470})
- diode(to (Here,Zero),LE); {"green" at last line.c+(elen_*2/3,0)}
- line to Zero chop 0 chop -elen_
- line up_ (Vs.y-Here.y)/3
- battery(up_ (Vs.y-Here.y)/3); rlabel(,,\SI{9}{V})
- switch(to (Here,Vs),,D)
- line to (R,Vs)
-
-iflatex(`latexcommand(})')
-.PE
diff --git a/graphics/circuit_macros/examples/Variable.m4 b/graphics/circuit_macros/examples/Variable.m4
index e52e30913d..72573f38cc 100644
--- a/graphics/circuit_macros/examples/Variable.m4
+++ b/graphics/circuit_macros/examples/Variable.m4
@@ -3,11 +3,11 @@
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
+[ { variable(`resistor',A) }; {"\tt A" at last line.end below}; move right
+ { variable(`resistor',N) }; {"\tt N" at last line.end below}; move right
+ { variable(`resistor',uN) }; {"\tt uN" at last line.end below}; move right
+ { variable(`resistor',NN) }; {"\tt NN" at last line.end below}; move right
+ { variable(`resistor',uNN) }; {"\tt uNN" at last line.end below};
]
[
skp = 0.4
diff --git a/graphics/circuit_macros/examples/ex01.m4 b/graphics/circuit_macros/examples/ex01.m4
index a5bcef47ab..e672fccc36 100644
--- a/graphics/circuit_macros/examples/ex01.m4
+++ b/graphics/circuit_macros/examples/ex01.m4
@@ -1,6 +1,56 @@
.PS
-# ex01.m4
+# Timer.m4
cct_init
+iflatex(`latexcommand({\small\sf)')
+
+define(`ic555',`[Chip: box ht boxwid wid boxwid "555"
+ P7: "7" ljust at 1/6<Chip.sw,Chip.nw>
+ P6: "6" ljust at 1/2<Chip.sw,Chip.nw>
+ P2: "2" ljust at 5/6<Chip.sw,Chip.nw>
+ P4: "4" below at 1/3<Chip.nw,Chip.ne>
+ P8: "8" below at 2/3<Chip.nw,Chip.ne>
+ P3: "3" rjust at Chip.e
+ P1: "1" above at Chip.s
+ ]')
+
+Timer: [
+ define(`elen_',`linewid')
+Vs: dot
+ down_
+ variable(`resistor(,E); llabel(,\SI{1}{M})')
+ resistor(,E); llabel(,\SI{100}{\kilo{}})
+ capacitor(,E); llabel(\SI{220}{\micro{}})
+Zero: dot
+
+ dot(at Vs+(elen_*4/3,0))
+ resistor(,E); llabel(,\SI{33}{\kilo{}})
+ line to (Here,Zero) chop 0 chop elen_
+C2: capacitor; llabel(\SI{0.1}{\micro{}})
+ dot
+
+IC1: ic555 with .P7 at C2.start + (elen_,0)
+ line from IC1.P4 to (IC1.P4,Vs); dot
+ line from IC1.P8 to (IC1.P8,Vs); dot
+ line from IC1.P1 to (IC1.P1,Zero); dot
+ line from IC1.P2 to (C2,IC1.P2); dot
+ crossover(from IC1.P7 to (Zero,IC1.P7),R,C2); dot
+ line from IC1.P6 left elen_/2 then down IC1.P6.y-IC1.P7.y; dot
+ line from IC1.P3 right elen_*2/3
+R: dot
+ line right_ elen_/3
+B: buzzer(,,C) with .In3 at Here
+ line from B.In1 to (R,B.In1)
+ reversed(`diode',to (Here,Vs),LE); "red" at last line.c+(elen_/2,0)
+ resistor(down_ elen_ from R,E); llabel(,\num{470})
+ diode(to (Here,Zero),LE); {"green" at last line.c+(elen_*2/3,0)}
+ line to Zero chop 0 chop -elen_
+ line up_ (Vs.y-Here.y)/3
+ battery(up_ (Vs.y-Here.y)/3); rlabel(,,\SI{9}{V})
+ switch(to (Here,Vs),,D)
+ line to (R,Vs)
+]
+Ex01: [
+# ex01.m4
linewid = linewid*1.5 # let's make the circuit elements bigger than usual
define(`elen_',linewid) # but not longer
del = elen_/4 # a spacing parameter
@@ -18,4 +68,7 @@ cct_init
arcd(last []+(4pt__,0),del,30,330) <- ; "$i_2$" at last arc
arcd(Vin.c+(4*del,0),2*del,30,330) <- ; "$i_1$" at last arc
+ ] with .sw at Timer.se+(0.5,0)
+
+iflatex(`latexcommand(}%)')
.PE
diff --git a/graphics/circuit_macros/examples/ex09.m4 b/graphics/circuit_macros/examples/ex09.m4
index a5ee6f1109..036ee00ccf 100644
--- a/graphics/circuit_macros/examples/ex09.m4
+++ b/graphics/circuit_macros/examples/ex09.m4
@@ -132,4 +132,5 @@ T: C+(-0.45*sk,-1.0*sk)
] with .nw at 1st [].ne+(0.8*sk,0)
+
.PE
diff --git a/graphics/circuit_macros/examples/examples.pdf b/graphics/circuit_macros/examples/examples.pdf
index d59436e0a3..a2f15a2c9a 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 e2f90fc585..720e78861f 100644
--- a/graphics/circuit_macros/examples/examples.tex
+++ b/graphics/circuit_macros/examples/examples.tex
@@ -35,7 +35,7 @@
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, type, for example, "make {\sl file}.pdf."
+ {\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.
diff --git a/graphics/circuit_macros/examples/files.tex b/graphics/circuit_macros/examples/files.tex
index 334c7657f6..f320c34f9c 100644
--- a/graphics/circuit_macros/examples/files.tex
+++ b/graphics/circuit_macros/examples/files.tex
@@ -195,11 +195,9 @@
}
\bfig{
- \centerline{\getpic{ex01}\quad
- \getpic{Timer}}
+ \centerline{\getpic{ex01}}
\caption{Two simple labeled circuits
- \src{ex01.m4}%
- \src{Timer.m4}.}
+ \src{ex01.m4}.}
}
\bfig{
@@ -457,7 +455,7 @@
The function tree is drawn, then a row or column of inputs, then
the connections. The default result is on the left,
a custom element at the top, and a tree of gates only is shown
- on the right.
+ on the right. THe lower examples illustrate the L, R, and V options.)
\src{Alogix.m4}.}
}
@@ -554,7 +552,7 @@
\bfig{
\centerline{\getpic{random}}
- \caption{Testing random numbers
+ \caption{Testing random number generation
\src{random.m4}.}
}
@@ -586,6 +584,12 @@
}
\bfig{
+ \centerline{\getpic{Lyap}}
+ \caption{Illustrating a Lyapunov function
+ \src{Lyap.m4}.}
+ }
+
+\bfig{
\centerline{\getpic{csc}}
\caption{Conestoga Sailing Club (illustrating the filling of arbitrary
shapes)
diff --git a/graphics/circuit_macros/examples/ics.m4 b/graphics/circuit_macros/examples/ics.m4
index 15e0f05bb8..c07cb61ea2 100644
--- a/graphics/circuit_macros/examples/ics.m4
+++ b/graphics/circuit_macros/examples/ics.m4
@@ -118,7 +118,6 @@ define(`ArduinoUno',`[
define(`m4bwid',`ifelse(`$1',,`24*L_unit',`$1')')dnl
define(`m4bht',`ifelse(`$2',,`20*lg_pinsep',`$2')')dnl
#
- command "{\small\sf"
Connector: box wid m4bwid ht m4bht
#
plen = ifelse(`$4',,`2*L_unit',`$4')
@@ -135,7 +134,6 @@ Loopover_(`x',`ifelse(x,nul,,
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)
#
- command "}"
`$4'] ')
`ArduinoLeonardo( wid,ht,pinlen )'
@@ -143,7 +141,6 @@ define(`ArduinoLeonardo',`[
define(`m4bwid',`ifelse(`$1',,`24*L_unit',`$1')')dnl
define(`m4bht',`ifelse(`$2',,`20*lg_pinsep',`$2')')dnl
#
- command "{\small\sf"
Connector: box wid m4bwid ht m4bht
#
plen = ifelse(`$4',,`2*L_unit',`$4')
@@ -161,7 +158,6 @@ Loopover_(`x',`ifelse(x,nul,,
\char126 D13, D12, \char126 D11, \char126 D10, \char126 D9, D8,
nul, D7, \char126 D6, \char126 D5, D4, \char126 D3, D2, TX D1, RX D0)
#
- command "}"
`$4'] ')
`RPi( wid,ht,pinlen )'
@@ -169,7 +165,6 @@ define(`RPi',`[
define(`m4bwid',`ifelse(`$1',,`34*L_unit',`$1')')dnl
define(`m4bht',`ifelse(`$2',,`21*lg_pinsep',`$2')')dnl
#
- command "{\small\sf"
GPIO: box wid m4bwid ht m4bht
plen = ifelse(`$4',,`6*L_unit',`$4')
#
@@ -212,14 +207,12 @@ Loopover_(`x',`ifelse(x,nul,,`A_RightGPIO(m4Lx,patsubst(x,;,`,'))')',
;GND,
16;, 20;, 21; )
#
- command "}"
`$4'] ')
`USB_C_Socket( wid, ht, pinlen )'
define(`USB_C_Socket',`[
define(`m4bwid',`ifelse(`$1',,`18*L_unit',`$1')')dnl
define(`m4bht',`ifelse(`$2',,`14*lg_pinsep',`$2')')dnl
- command "{\small\sf"
#
Base: box wid m4bwid ht m4bht rad 5/3*lg_pinsep
plen = ifelse(`$4',,`6*L_unit',`$4')
@@ -235,14 +228,12 @@ define(`USB_C_Socket',`[
{"x" rjust at last line.start}',
GND, TX1$+$, TX1$-$, VBUS, CC1, D$+$, D$-$, SBU1, VBUS, RX2$-$, RX2$+$, GND)
#
- command "}"
`$4']')
`HDMI_micro( wid, ht, pinlen )'
define(`HDMI_micro',`[
define(`m4bwid',`ifelse(`$1',,`16*L_unit',`$1')')dnl
define(`m4bht',`ifelse(`$2',,`20*lg_pinsep+m4bwid*2/3',`$2')')dnl
- command "{\small\sf"
#
Base:[line up m4bht/2 then right m4bwid*2/3 \
then right m4bwid/3 down m4bwid/3 \
@@ -269,7 +260,6 @@ define(`HDMI_micro',`[
r_text(22) at last line.c+(-5bp__,0)
r_text(SH3) at last line.start + (0, 10bp__)
#
- command "}"
`$4']')
divert(0)dnl
diff --git a/graphics/circuit_macros/examples/mf/cct.mf b/graphics/circuit_macros/examples/mf/cct.mf
index 7134b617a0..e28b40c9f9 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 2020/05/01 at 17:17
+% from TeX source "font" on 2020/12/20 at 17:40
numeric mfpicversion; mfpicversion := 110;
if unknown mode: mode := localfont; fi
if unknown mag: mag := 1000/1000; fi
diff --git a/graphics/circuit_macros/examples/mpost/Makefile b/graphics/circuit_macros/examples/mpost/Makefile
index 2b8099c34d..18bb0ad576 100644
--- a/graphics/circuit_macros/examples/mpost/Makefile
+++ b/graphics/circuit_macros/examples/mpost/Makefile
@@ -27,7 +27,7 @@ FIGS = Adder.1 Alogix.1 ABlogix.1 Antennas.1 AmpTable.1 Audio.1 \
Decoder.1 Demultiplexer.1 Dini.1 Diodes.1 Drive.1 \
Emarrows.1 Flow.1 Fuses.1 \
GrayCode.1 Grounds.1 Headers.1 Heathkit.1 I2L.1 Inclpdf.1 Jack.1 \
- Logic.1 Loglog.1 MC.1 Mixer.1 MotorControl.1 Multiplexer.1 \
+ Lyap.1 Logic.1 Loglog.1 MC.1 Mixer.1 MotorControl.1 Multiplexer.1 \
NLG.1 NPDT.1 Nport.1 \
Opamp.1 Optoiso.1 Pconn.1 PushPull.1 Quantum.1 \
Rectifiers.1 Relay.1 relaycoil.1 Rotbox.1 \
diff --git a/graphics/circuit_macros/examples/nsvg/Makefile b/graphics/circuit_macros/examples/nsvg/Makefile
new file mode 100644
index 0000000000..b2132e1ee8
--- /dev/null
+++ b/graphics/circuit_macros/examples/nsvg/Makefile
@@ -0,0 +1,92 @@
+LIBDIR = $$HOME/lib
+M4LIBS = svg.m4 SVGconfig.m4
+M4LIBS = svg.m4
+
+# To process a single file, copy it to test.m4 and type "make tst"
+# to produce tstSVG.html
+
+DPIC = dpic
+#DPIC = $$HOME/dpic/build/p2c/ftp/dpic
+#DPIC = ../../../dpic/build/p2c/ftp/dpic
+#DPIC = ../../../dpic/bison/dpic
+#DPIC = ../../../dpic/bdev/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
+# do not work at present with the Windows version.
+# M4LIBS = svg.m4 windows.m4
+# DPIC = ../../../dpic/bison/distsrc/Windows/dpic
+
+.SUFFIXES: .pic .svg .m4
+.pic.svg:
+ $(DPIC) -v $*.pic > $*.svg
+ grep '<\!-- width' $*.svg | sed -e 's%<\!-- *%%' -e 's% *-->%%' > $*.siz
+.m4.svg:
+ m4 $(M4LIBS) $*.m4 | sed -e '/^\%/d' > $*.pic
+ $(DPIC) -v $*.pic > $*.svg
+ grep '<\!-- width' $*.svg | sed -e 's%<\!-- *%%' -e 's% *-->%%' > $*.siz
+
+PAGES = examples_1.svg
+
+examplesSVG.html: examplesSVG.htmx pages
+ Version=`sed -e 's/Version //' $(LIBDIR)/doc/Version.tex` ; \
+ sed -e 's/Version XXX/Version '$$Version'/' examplesSVG.htmx \
+ | m4 > examplesSVG.html
+
+pages:
+ (cd .. ; make )
+ cp ../examples.pdf .
+ pdf2svg examples.pdf
+ touch pages
+
+SED = sed -e '/^\%/d'
+TEST = test
+tst:
+ 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
+ $(DPIC) -v $(TEST).pic > $(TEST).svg
+ grep '<\!-- width' $(TEST).svg | sed -e 's%<\!-- *%%' -e 's% *-->%%' \
+ > $(TEST).siz
+ make tstSVG.html
+
+test.pic:
+ if test -f test.pic ; then echo "Usage: make clean tst" ; fi
+ m4 $(M4LIBS) test.m4 | $(SED) > test.pic
+ m4 $(M4LIBS) test.m4 | $(SED) > test.pic
+
+tstSVG.html: tstSVG.htmx $(TEST).svg
+ Version=`sed -e 's/Version //' $(LIBDIR)/doc/Version.tex` ; \
+ sed -e 's/Version XXX/Version '$$Version'/' \
+ -e 's/XXXXX/'$(TEST)'/g' \
+ tstSVG.htmx | m4 > tstSVG.html
+# cp tstSVG.html $(TEST) $$HOME/public_html/svg
+
+xst: Incleps.png
+
+AntiqueClockSVG.svg ConnectorsSVG.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
+
+InclepsSVG.svg: InclepsSVG.m4
+ m4 $(M4LIBS) $*.m4 | sed -e '/^\%/d' > $*.pic
+ $(DPIC) -v $*.pic > $*.svg
+ $(DPIC) -v $*.pic > $*.svg
+
+Incleps.png:
+ (cd ..; make Incleps.png); cp ../Incleps.png .
+
+clean:
+ @printf "\n svg clean:\n"
+ rm -f *.svg *.dim *.ps *log *.siz *.pic examplesSVG.html Incleps.png
+ rm -f tstSVG.html copy_tmp__
+ rm -f pages
+ @printf "\n"
+
+clobber: clean
+ (cd dev; make clobber)
+ rm -f test.m4
diff --git a/graphics/circuit_macros/examples/nsvg/dev/F_test.tex b/graphics/circuit_macros/examples/nsvg/dev/F_test.tex
new file mode 100644
index 0000000000..68098bbf3a
--- /dev/null
+++ b/graphics/circuit_macros/examples/nsvg/dev/F_test.tex
@@ -0,0 +1,5 @@
+\documentclass[crop,tikz,multi=false]{standalone}
+\usepackage{boxdims,siunitx,amssymb}
+\begin{document}
+\input test.tex
+\end{document}
diff --git a/graphics/circuit_macros/examples/nsvg/dev/Makefile b/graphics/circuit_macros/examples/nsvg/dev/Makefile
new file mode 100644
index 0000000000..cdc126d8bd
--- /dev/null
+++ b/graphics/circuit_macros/examples/nsvg/dev/Makefile
@@ -0,0 +1,81 @@
+LIBDIR = $$HOME/lib
+M4LIBS = pgf.m4
+M4 = m4
+
+# To process a single file, copy it to test.m4 and type "make tst"
+# to produce tstSVG.html
+
+DPIC = dpic
+#DPIC = $$HOME/dpic/build/p2c/ftp/dpic
+#DPIC = $$HOME/dpic/build/p2c/ftp/dpic
+#DPIC = $$HOME/dpic/bison/dpic
+#DPIC = $$HOME/dpic/bdev/dpic
+
+.SUFFIXES: .pic .svg .m4 .pdf
+.pic.svg:
+ $(DPIC) -v $*.pic > $*.svg
+ grep '<\!-- width' $*.svg | sed -e 's%<\!-- *%%' -e 's% *-->%%' > $*.siz
+.m4.svg:
+ touch F_$*.dim
+ $(M4) pgf.m4 F_$*.dim $*.m4 > $*.pic
+ $(DPIC) -g $*.pic >> $*.tex
+ echo "\documentclass[crop,tikz,multi=false]{standalone}" > F_$*.tex
+ echo "\usepackage{boxdims,siunitx,amssymb}" >> F_$*.tex
+ echo "\begin{document}" >> F_$*.tex
+ echo "\input $*.tex" >> F_$*.tex
+ echo "\end{document}" >> F_$*.tex
+ pdflatex --quiet F_$*
+ $(M4) pgf.m4 F_$*.dim $*.m4 > $*.pic
+ $(DPIC) -g $*.pic >> $*.tex
+ pdflatex --quiet F_$*
+ pdf2svg F_$*.pdf $*.svg
+ rm -f F_$**
+.m4.pdf:
+ touch F_$*.dim
+ $(M4) pgf.m4 F_$*.dim $*.m4 > $*.pic
+ $(DPIC) -g $*.pic >> $*.tex
+ echo "\documentclass[crop,tikz,multi=false]{standalone}" > F_$*.tex
+ echo "\usepackage{boxdims,siunitx,amssymb}" >> F_$*.tex
+ echo "\begin{document}" >> F_$*.tex
+ echo "\input $*.tex" >> F_$*.tex
+ echo "\end{document}" >> F_$*.tex
+ pdflatex --quiet F_$*
+ $(M4) pgf.m4 F_$*.dim $*.m4 > $*.pic
+ $(DPIC) -g $*.pic >> $*.tex
+ pdflatex --quiet F_$*
+ mv F_$*.pdf $*.pdf
+
+examplesSVG.html: examplesSVG.htmx pages
+ Version=`sed -e 's/Version //' $(LIBDIR)/doc/Version.tex` ; \
+ sed -e 's/Version XXX/Version '$$Version'/' examplesSVG.htmx \
+ | m4 > examplesSVG.html
+
+SED = sed -e '/^\%/d'
+TEST = test
+tst:
+ 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
+ $(DPIC) -v $(TEST).pic > $(TEST).svg
+ grep '<\!-- width' $(TEST).svg | sed -e 's%<\!-- *%%' -e 's% *-->%%' \
+ > $(TEST).siz
+ make tstSVG.html
+
+tstSVG.html: tstSVG.htmx $(TEST).svg
+ Version=`sed -e 's/Version //' $(LIBDIR)/doc/Version.tex` ; \
+ sed -e 's/Version XXX/Version '$$Version'/' \
+ -e 's/XXXXX/'$(TEST)'/g' \
+ tstSVG.htmx | m4 > tstSVG.html
+# cp tstSVG.html $(TEST) $$HOME/public_html/svg
+
+clean:
+ @printf "\n svg clean:\n"
+ rm -f *.svg *.dim *.ps *log *.siz *.pic examplesSVG.html Incleps.png
+ rm -f tstSVG.html copy_tmp__
+ rm -f pages
+ @printf "\n"
+
+clobber: clean
+ (cd dev; make clobber)
+ rm -f test.m4
diff --git a/graphics/circuit_macros/examples/nsvg/dev/test-1.svg b/graphics/circuit_macros/examples/nsvg/dev/test-1.svg
new file mode 100644
index 0000000000..7c48b506b4
--- /dev/null
+++ b/graphics/circuit_macros/examples/nsvg/dev/test-1.svg
@@ -0,0 +1,162 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- This file was generated by dvisvgm 2.6.3 -->
+<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='337.972pt' height='139.358pt' viewBox='0 -139.358 337.972 139.358'>
+<g id='page1'>
+<g transform='matrix(1 0 0 -1 0 0)'>
+<path d='M14.37648 26.83561C13.78867 26.447172 13.44992 26.237797 12.46398 26.237797C11.02929 26.237797 10.13304 27.73217 10.13304 29.16655C10.13304 30.52123 10.95961 32.08498 12.48367 32.08498C13.19117 32.08498 13.6393 31.91592 14.18711 31.56717L14.32648 32.38405C13.89836 32.59311 13.13117 32.7228 12.49367 32.7228C10.65086 32.7228 9.236483 31.16873 9.236483 29.07686C9.236483 27.50311 10.4218 25.590297 12.49367 25.590297C13.41023 25.590297 13.78867 25.749672 14.43617 26.148109L14.37648 26.83561Z'/>
+<path d='M7.0763 92.0121H6.19974L3.600049 85.098973H4.33692L5.10411 87.13116H8.00286L8.75974 85.098973H9.6763L7.0763 92.0121ZM7.78349 87.68897H5.31317L5.96067 89.49179C6.17005 90.0796 6.4788 90.92616 6.54849 91.29491H6.55849C6.57817 91.15554 6.64817 90.90647 6.87724 90.24897L7.78349 87.68897ZM14.5152 88.34647C14.5152 89.13335 14.4755 90.0596 14.0571 90.86647C13.6486 91.61366 12.96146 91.85272 12.45333 91.85272C11.86552 91.85272 11.16833 91.58366 10.75989 90.6971C10.43114 89.96991 10.38145 89.14335 10.38145 88.34647C10.38145 87.55929 10.42114 86.8321 10.72021 86.10491C11.11864 85.148661 11.87552 84.879911 12.44333 84.879911C13.17052 84.879911 13.798 85.288348 14.1168 85.975536C14.4158 86.62304 14.5152 87.28054 14.5152 88.34647ZM12.45333 85.487411C11.93521 85.487411 11.52708 85.865848 11.32771 86.58335C11.16833 87.15085 11.15833 87.68897 11.15833 88.46585C11.15833 89.09335 11.15833 89.69116 11.32771 90.23897C11.38739 90.42835 11.63646 91.24491 12.44333 91.24491C13.22021 91.24491 13.4793 90.48804 13.549 90.30866C13.7383 89.75085 13.7383 89.08335 13.7383 88.46585C13.7383 87.80835 13.7383 87.18085 13.559 86.55335C13.29989 85.646786 12.77208 85.487411 12.45333 85.487411Z'/>
+<path d='M7.0763 113.61213H6.19974L3.600049 106.699004H4.33692L5.10411 108.73119H8.00286L8.75974 106.699004H9.6763L7.0763 113.61213ZM7.78349 109.289H5.31317L5.96067 111.09182C6.17005 111.67963 6.4788 112.52619 6.54849 112.89494H6.55849C6.57817 112.75557 6.64817 112.5065 6.87724 111.849L7.78349 109.289ZM12.94145 113.45275H12.74208C12.15458 112.84494 11.32771 112.81525 10.84958 112.79525V112.21744C11.17833 112.22744 11.65645 112.24744 12.15458 112.4565V107.276817H10.90927V106.699004H14.1865V107.276817H12.94145V113.45275Z'/>
+<path d='M7.0763 135.21314H6.19974L3.600049 128.300016H4.33692L5.10411 130.3322H8.00286L8.75974 128.300016H9.6763L7.0763 135.21314ZM7.78349 130.89002H5.31317L5.96067 132.69283C6.17005 133.28064 6.4788 134.1272 6.54849 134.49595H6.55849C6.57817 134.35658 6.64817 134.10752 6.87724 133.45002L7.78349 130.89002ZM11.69614 130.17283L10.46114 128.937516V128.300016H14.4355V129.007203H12.62271C12.50302 129.007203 12.38364 128.997203 12.26396 128.997203H11.17833C11.49708 129.276266 12.25395 130.02345 12.56302 130.3122C12.75208 130.49158 13.26021 130.9097 13.4496 131.08908C13.8977 131.53752 14.4355 132.06533 14.4355 132.9122C14.4355 134.05752 13.6286 135.05377 12.31396 135.05377C11.17833 135.05377 10.62052 134.27689 10.38145 133.42002C10.50083 133.25064 10.55083 133.19095 10.57052 133.16095C10.59052 133.14127 10.6902 133.01158 10.78989 132.8722C10.98895 133.63908 11.26802 134.41627 12.17427 134.41627C13.11083 134.41627 13.6186 133.66908 13.6186 132.8922C13.6186 132.04533 13.05114 131.47752 12.46333 130.88002L11.69614 130.17283Z'/>
+<path d='M16.464844 131.762H43.4648' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M56.0625 131.762L43.4648 124.5586V138.961L56.0625 131.762' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M61.4648 131.762C61.4648 133.254 60.2539 134.461 58.7617 134.461C57.2695 134.461 56.0625 133.254 56.0625 131.762S57.2695 129.0586 58.7617 129.0586C60.2539 129.0586 61.4648 130.27 61.4648 131.762Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M61.4648 131.762H79.4648' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M97.4648 131.762L84.8633 124.5586V138.961L97.4648 131.762' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M84.8672 131.762C84.8672 133.254 83.6563 134.461 82.1641 134.461S79.4609 133.254 79.4609 131.762S80.6719 129.0586 82.1641 129.0586S84.8672 130.27 84.8672 131.762Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M16.464844 110.1602H43.4648' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M56.0625 110.1602L43.4648 102.9609V117.3594L56.0625 110.1602' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M61.4648 110.1602C61.4648 111.6523 60.2539 112.8594 58.7617 112.8594C57.2695 112.8594 56.0625 111.6523 56.0625 110.1602C56.0625 108.668 57.2695 107.457 58.7617 107.457C60.2539 107.457 61.4648 108.668 61.4648 110.1602Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M61.4648 110.1602H79.4648' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M97.4648 110.1602L84.8633 102.9609V117.3594L97.4648 110.1602' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M84.8672 110.1602C84.8672 111.6523 83.6563 112.8594 82.1641 112.8594S79.4609 111.6523 79.4609 110.1602C79.4609 108.668 80.6719 107.457 82.1641 107.457S84.8672 108.668 84.8672 110.1602Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M16.464844 88.5586H43.4648' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M56.0625 88.5586L43.4648 81.3594V95.7617L56.0625 88.5586' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M61.4648 88.5586C61.4648 90.0508 60.2539 91.2617 58.7617 91.2617C57.2695 91.2617 56.0625 90.0508 56.0625 88.5586C56.0625 87.0664 57.2695 85.8594 58.7617 85.8594C60.2539 85.8594 61.4648 87.0664 61.4648 88.5586Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M61.4648 88.5586H79.4648' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M97.4648 88.5586L84.8633 81.3594V95.7617L97.4648 88.5586' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M84.8672 88.5586C84.8672 90.0508 83.6563 91.2617 82.1641 91.2617S79.4609 90.0508 79.4609 88.5586C79.4609 87.0664 80.6719 85.8594 82.1641 85.8594S84.8672 87.0664 84.8672 88.5586Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M58.7617 29.160156L46.1641 21.95703V36.35937L58.7617 29.160156' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M39.2617 77.7578H30.4648' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M30.7891 77.918C34.1055 71.0508 34.1328 63.0469 30.8633 56.1602' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M30.4648 56.1602H39.2617' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M39.2617 77.7578C46.4961 77.7578 53.0625 73.5391 56.0625 66.957' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M39.2617 56.1602C46.4961 56.1602 53.0625 60.3789 56.0625 66.957' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M61.4648 66.957C61.4648 68.4492 60.2539 69.6602 58.7617 69.6602C57.2695 69.6602 56.0625 68.4492 56.0625 66.957C56.0625 65.4687 57.2695 64.2578 58.7617 64.2578C60.2539 64.2578 61.4648 65.4687 61.4648 66.957Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M84.4648 56.1602H75.6641' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M75.9883 56.3164C79.3047 49.4492 79.332 41.4492 76.0625 34.55859' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M75.6641 34.55859H84.4648' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M84.4648 56.1602C91.6953 56.1602 98.2617 51.9375 101.2656 45.3594' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M84.4648 34.55859C91.6953 34.55859 98.2617 38.78125 101.2656 45.3594' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M106.6641 45.3594C106.6641 46.8516 105.457 48.0625 103.9648 48.0625C102.4727 48.0625 101.2617 46.8516 101.2617 45.3594C101.2617 43.8672 102.4727 42.6602 103.9648 42.6602C105.457 42.6602 106.6641 43.8672 106.6641 45.3594Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M202.066 112.8594H187.664V134.461H202.066' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M202.066 134.461C208.027 134.461 212.867 129.625 212.867 123.6602C212.867 117.6953 208.027 112.8594 202.066 112.8594' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M202.066 42.6602H187.664V64.2578H202.066' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M202.066 64.2578C208.027 64.2578 212.867 59.4258 212.867 53.457C212.867 47.4961 208.027 42.6602 202.066 42.6602' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M245.266 58.8594H230.867V80.4609H245.266' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M245.266 80.4609C251.23 80.4609 256.066 75.625 256.066 69.6602C256.066 63.6953 251.23 58.8594 245.266 58.8594' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M280.621 129.0586H271.82' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M272.145 129.219C275.461 122.3477 275.488 114.3516 272.219 107.4609' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M271.82 107.4609H280.621' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M280.621 129.0586C287.852 129.0586 294.418 124.8398 297.418 118.2617' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M280.621 107.4609C287.852 107.4609 294.418 111.6797 297.418 118.2617' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M302.82 118.2617C302.82 119.75 301.613 120.9609 300.121 120.9609C298.629 120.9609 297.418 119.75 297.418 118.2617C297.418 116.7695 298.629 115.5586 300.121 115.5586C301.613 115.5586 302.82 116.7695 302.82 118.2617Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M280.621 69.6602H271.82' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M272.145 69.8164C275.461 62.9492 275.488 54.9492 272.219 48.0586' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M271.82 48.0586H280.621' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M280.621 69.6602C287.852 69.6602 294.418 65.4375 297.418 58.8594' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M280.621 48.0586C287.852 48.0586 294.418 52.2812 297.418 58.8594' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M302.82 58.8594C302.82 60.3516 301.613 61.5625 300.121 61.5625C298.629 61.5625 297.418 60.3516 297.418 58.8594C297.418 57.3672 298.629 56.1602 300.121 56.1602C301.613 56.1602 302.82 57.3672 302.82 58.8594Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M139.52534 9.38724C139.56534 9.59661 139.57503 9.6963 139.77441 9.73599C139.86409 9.75599 140.14284 9.75599 140.32222 9.75599C141.48784 9.75599 141.84628 9.58661 141.84628 8.59036C141.84628 8.32161 141.82628 8.08255 141.79659 7.82349H142.04566L142.23472 10.06474H136.14847L135.58066 7.82349H135.82972C136.25816 9.36755 136.35784 9.75599 137.95159 9.75599C138.10097 9.75599 138.33003 9.75599 138.38972 9.74599C138.59909 9.72599 138.64878 9.6963 138.64878 9.54661C138.64878 9.46692 138.62878 9.37755 138.61878 9.29786L137.74222 4.078174C137.69253 3.759424 137.66253 3.629736 136.60659 3.629736H136.22816L136.17847 3.320986C136.42753 3.340986 136.86566 3.340986 137.11472 3.340986L138.07097 3.350986C138.52909 3.350986 139.54534 3.350986 139.95378 3.320986L140.00347 3.629736H139.62503C138.77816 3.629736 138.61878 3.709424 138.61878 3.928486C138.61878 3.938486 138.61878 3.978486 138.63878 4.087861L139.52534 9.38724Z'/>
+<path d='M145.9198 5.85099C145.9198 6.95692 145.1426 7.78349 144.06698 7.78349C142.6523 7.78349 141.4373 6.39911 141.4373 5.07411C141.4373 4.038174 142.19417 3.211299 143.3098 3.211299C144.6348 3.211299 145.9198 4.40661 145.9198 5.85099ZM143.3498 3.460361C143.07073 3.460361 142.23417 3.560049 142.23417 4.75536C142.23417 5.12411 142.36355 6.21974 142.6723 6.72786C143.16042 7.52474 143.85761 7.56442 144.02698 7.56442C144.34573 7.56442 145.1526 7.41505 145.1526 6.29942C145.1526 6.07036 145.0729 4.99442 144.7245 4.33692C144.41542 3.769111 143.86761 3.460361 143.3498 3.460361Z'/>
+<path d='M154.2178 5.85099C154.2178 6.95692 153.4407 7.78349 152.365 7.78349C150.9503 7.78349 149.7353 6.39911 149.7353 5.07411C149.7353 4.038174 150.4922 3.211299 151.6078 3.211299C152.9328 3.211299 154.2178 4.40661 154.2178 5.85099ZM151.6478 3.460361C151.3688 3.460361 150.5322 3.560049 150.5322 4.75536C150.5322 5.12411 150.6616 6.21974 150.9703 6.72786C151.4585 7.52474 152.1557 7.56442 152.325 7.56442C152.6438 7.56442 153.4507 7.41505 153.4507 6.29942C153.4507 6.07036 153.371 4.99442 153.0225 4.33692C152.7135 3.769111 152.1657 3.460361 151.6478 3.460361ZM156.5094 7.30536H157.9338C157.9538 7.40505 157.9638 7.51474 157.9838 7.61442H156.5594L156.8582 9.44724H156.6091C156.4497 8.51067 155.9219 7.55442 155.0053 7.52474L154.9753 7.30536H155.8122L155.3638 4.58599C155.3341 4.40661 155.3341 4.38692 155.3341 4.257236C155.3341 3.290986 156.141 3.211299 156.4397 3.211299C156.9078 3.211299 157.2166 3.520361 157.396 3.858799C157.5753 4.167549 157.5953 4.297236 157.7247 5.12411H157.4757C157.3563 4.39692 157.3363 4.257236 157.2069 3.998486C157.1272 3.848799 156.8978 3.460361 156.5194 3.460361C156.101 3.460361 156.0016 3.848799 156.0016 4.137861C156.0016 4.247236 156.0113 4.287236 156.0213 4.35692L156.5094 7.30536ZM163.0535 6.33911C163.0835 6.51849 163.0835 6.54849 163.0835 6.70786C163.0835 7.46474 162.5954 7.7238 161.9079 7.7238C161.0614 7.7238 160.5332 7.1163 160.3342 6.78755L160.3242 6.79755L160.902 10.23411L159.6467 10.13442C159.627 10.13442 159.4776 10.12442 159.4676 10.11442C159.4376 10.09474 159.3979 9.84567 159.3979 9.81567C159.9654 9.81567 160.1051 9.76599 160.1051 9.49692C160.1051 9.48692 160.1051 9.41724 160.0751 9.23786L159.2085 4.058174C159.1489 3.679736 159.1089 3.629736 158.3717 3.629736H158.3617L158.312 3.320986C158.6507 3.330986 159.1785 3.350986 159.4376 3.350986C159.6867 3.350986 160.2245 3.330986 160.5432 3.320986L160.6029 3.629736C160.1051 3.629736 159.876 3.629736 159.876 3.878799C159.876 3.908799 159.9457 4.287236 159.9754 4.4863C160.0451 4.92474 160.1151 5.36317 160.1948 5.8013C160.2445 6.13005 160.3342 6.60817 160.8223 7.0763C161.121 7.34536 161.4995 7.50474 161.8282 7.50474C162.2167 7.50474 162.416 7.30536 162.416 6.83724C162.416 6.68786 162.396 6.57817 162.3064 6.00067L161.9676 4.008174C161.9079 3.629736 161.7485 3.629736 161.141 3.629736H161.131L161.0814 3.320986C161.4198 3.330986 161.9479 3.350986 162.207 3.350986C162.4557 3.350986 162.9939 3.330986 163.3126 3.320986L163.3723 3.629736C162.8742 3.629736 162.6451 3.629736 162.6451 3.878799C162.6451 3.918799 162.6551 3.978486 162.6651 4.028174L163.0535 6.33911ZM167.7918 5.62192C168.0309 5.62192 168.0509 5.62192 168.0806 5.8113C168.1106 6.03036 168.1106 6.18974 168.1106 6.24974C168.1106 7.42505 167.3237 7.78349 166.6065 7.78349C165.2615 7.78349 164.1359 6.4388 164.1359 5.1338C164.1359 4.018174 164.9528 3.211299 165.9987 3.211299C167.224 3.211299 167.8515 4.34692 167.8515 4.5163C167.8515 4.5563 167.8315 4.62599 167.7421 4.62599C167.6621 4.62599 167.6425 4.58599 167.5925 4.4863C167.1143 3.570049 166.3275 3.460361 166.0584 3.460361C165.6003 3.460361 164.9331 3.749424 164.9331 4.82505C164.9331 5.12411 164.9928 5.47255 165.0225 5.62192H167.7918ZM165.0625 5.8313C165.4112 7.41505 166.3575 7.56442 166.5965 7.56442C167.4631 7.56442 167.4631 6.58817 167.4631 6.38911C167.4631 6.17005 167.4531 6.10005 167.4134 5.8313H165.0625ZM170.187 6.68786L170.3564 7.7238L169.141 7.63411C168.9617 7.62411 168.952 7.60442 168.942 7.55442C168.942 7.52474 168.902 7.32536 168.902 7.30536C169.4698 7.30536 169.6092 7.25567 169.6092 6.98661C169.6092 6.97661 169.6092 6.90692 169.5795 6.72786L169.131 4.058174C169.0714 3.679736 169.0317 3.629736 168.2945 3.629736H168.2845L168.2348 3.320986C168.6332 3.330986 169.0914 3.350986 169.3801 3.350986C169.4401 3.350986 170.3167 3.340986 170.6354 3.320986C170.6551 3.420674 170.6651 3.530049 170.6851 3.629736H170.4957C169.8882 3.629736 169.7685 3.689424 169.7685 3.908799C169.7685 4.048174 170.0873 5.8113 170.1373 6.01036C170.3067 6.56849 170.7151 7.50474 171.6214 7.50474V7.49474C171.462 7.42505 171.3526 7.24567 171.3526 7.04661C171.3526 6.74755 171.6017 6.67786 171.731 6.67786C171.9801 6.67786 172.2192 6.87724 172.2192 7.17599C172.2192 7.49474 171.9501 7.7238 171.5617 7.7238C170.9242 7.7238 170.436 7.19599 170.197 6.67786L170.187 6.68786Z'/>
+<path d='M178.0887 10.23411L176.8334 10.13442C176.8137 10.13442 176.664 10.12442 176.6543 10.11442C176.6243 10.09474 176.5843 9.84567 176.5843 9.81567C177.1521 9.81567 177.2918 9.76599 177.2918 9.49692C177.2918 9.48692 177.2918 9.41724 177.2618 9.23786L176.3953 4.058174C176.3353 3.679736 176.2956 3.629736 175.5584 3.629736H175.5484L175.4987 3.320986C175.8275 3.330986 176.3553 3.350986 176.6043 3.350986C176.8434 3.350986 177.3415 3.330986 177.7 3.320986L177.76 3.629736C177.2618 3.629736 177.0328 3.629736 177.0328 3.878799C177.0328 3.918799 177.0428 3.978486 177.0528 4.028174L178.0887 10.23411ZM182.8385 4.76536C182.7985 4.5063 182.7288 4.087861 182.6991 3.998486C182.6194 3.699424 182.43 3.570049 182.2807 3.570049C182.0616 3.570049 181.9916 3.789111 181.9916 3.978486C181.9916 4.078174 182.0813 4.56599 182.1013 4.69567C182.161 5.01442 182.3903 6.30942 182.3903 6.52849C182.3903 7.28567 181.7128 7.78349 180.876 7.78349C179.87 7.78349 179.1925 7.13599 179.1925 6.57817C179.1925 6.40911 179.2922 6.18974 179.601 6.18974C179.89 6.18974 180.1191 6.4288 180.1191 6.70786C180.1191 6.96692 179.9397 7.0963 179.7007 7.1063C180.0094 7.45474 180.5472 7.56442 180.8463 7.56442C181.4141 7.56442 181.7128 7.0963 181.7128 6.59817C181.7128 6.49849 181.6432 5.96067 181.6032 5.93067C181.5835 5.92099 181.5635 5.92099 181.3344 5.91099C179.6907 5.85099 178.5053 5.06411 178.5053 4.137861C178.5053 3.370674 179.4716 3.211299 179.9497 3.211299C180.8363 3.211299 181.3044 3.908799 181.3841 4.048174C181.3841 3.360986 181.8125 3.261299 182.0216 3.261299C182.3107 3.261299 182.8685 3.460361 182.9878 4.187549C183.0178 4.317236 183.0278 4.39692 183.0875 4.76536H182.8385ZM181.4338 4.81505C181.3841 4.5163 181.3344 4.207549 180.9557 3.839111C180.7166 3.600049 180.3682 3.430674 180.0194 3.430674C179.591 3.430674 179.2722 3.709424 179.2722 4.117861C179.2722 4.127861 179.2722 5.61192 181.5835 5.71161L181.4338 4.81505ZM185.3094 7.30536H186.7338C186.7538 7.40505 186.7638 7.51474 186.7838 7.61442H185.3594L185.6582 9.44724H185.4091C185.2497 8.51067 184.7219 7.55442 183.8053 7.52474L183.7753 7.30536H184.6122L184.1638 4.58599C184.1341 4.40661 184.1341 4.38692 184.1341 4.257236C184.1341 3.290986 184.941 3.211299 185.2397 3.211299C185.7078 3.211299 186.0166 3.520361 186.196 3.858799C186.3753 4.167549 186.3953 4.297236 186.5247 5.12411H186.2757C186.1563 4.39692 186.1363 4.257236 186.0069 3.998486C185.9272 3.848799 185.6978 3.460361 185.3194 3.460361C184.901 3.460361 184.8016 3.848799 184.8016 4.137861C184.8016 4.247236 184.8113 4.287236 184.8213 4.35692L185.3094 7.30536ZM191.0267 7.16599C190.5089 7.14599 190.4589 6.73755 190.4589 6.63817C190.4589 6.4688 190.5585 6.24974 190.8673 6.24974C191.1164 6.24974 191.3954 6.4388 191.3954 6.83724C191.3954 7.48474 190.6782 7.78349 190.0207 7.78349C188.656 7.78349 187.4607 6.4788 187.4607 5.09411C187.4607 3.958486 188.2776 3.211299 189.2735 3.211299C190.6082 3.211299 191.1164 4.41661 191.1164 4.5063C191.1164 4.58599 191.0467 4.60599 190.997 4.60599C190.9173 4.60599 190.9073 4.58599 190.8473 4.46661C190.5189 3.789111 189.951 3.460361 189.3732 3.460361C188.8851 3.460361 188.2676 3.809111 188.2676 4.88505C188.2676 6.22974 188.9848 7.53474 190.0207 7.53474C190.1601 7.53474 190.7379 7.51474 191.0267 7.16599Z'/>
+<path d='M196.0042 6.33911C196.0342 6.51849 196.0342 6.54849 196.0342 6.70786C196.0342 7.46474 195.546 7.7238 194.8585 7.7238C194.012 7.7238 193.4839 7.1163 193.2848 6.78755L193.2748 6.79755L193.8526 10.23411L192.5973 10.13442C192.5776 10.13442 192.4282 10.12442 192.4182 10.11442C192.3882 10.09474 192.3485 9.84567 192.3485 9.81567C192.916 9.81567 193.0557 9.76599 193.0557 9.49692C193.0557 9.48692 193.0557 9.41724 193.0257 9.23786L192.1592 4.058174C192.0995 3.679736 192.0595 3.629736 191.3223 3.629736H191.3123L191.2626 3.320986C191.6014 3.330986 192.1292 3.350986 192.3882 3.350986C192.6373 3.350986 193.1751 3.330986 193.4939 3.320986L193.5535 3.629736C193.0557 3.629736 192.8267 3.629736 192.8267 3.878799C192.8267 3.908799 192.8964 4.287236 192.926 4.4863C192.9957 4.92474 193.0657 5.36317 193.1454 5.8013C193.1951 6.13005 193.2848 6.60817 193.7729 7.0763C194.0717 7.34536 194.4501 7.50474 194.7789 7.50474C195.1673 7.50474 195.3667 7.30536 195.3667 6.83724C195.3667 6.68786 195.3467 6.57817 195.257 6.00067L194.9182 4.008174C194.8585 3.629736 194.6992 3.629736 194.0917 3.629736H194.0817L194.032 3.320986C194.3704 3.330986 194.8985 3.350986 195.1576 3.350986C195.4064 3.350986 195.9445 3.330986 196.2632 3.320986L196.3229 3.629736C195.8248 3.629736 195.5957 3.629736 195.5957 3.878799C195.5957 3.918799 195.6057 3.978486 195.6157 4.028174L196.0042 6.33911ZM200.7425 5.62192C200.9815 5.62192 201.0015 5.62192 201.0312 5.8113C201.0612 6.03036 201.0612 6.18974 201.0612 6.24974C201.0612 7.42505 200.2743 7.78349 199.5571 7.78349C198.2121 7.78349 197.0865 6.4388 197.0865 5.1338C197.0865 4.018174 197.9034 3.211299 198.9493 3.211299C200.1746 3.211299 200.8021 4.34692 200.8021 4.5163C200.8021 4.5563 200.7821 4.62599 200.6928 4.62599C200.6128 4.62599 200.5931 4.58599 200.5431 4.4863C200.065 3.570049 199.2781 3.460361 199.009 3.460361C198.5509 3.460361 197.8837 3.749424 197.8837 4.82505C197.8837 5.12411 197.9434 5.47255 197.9731 5.62192H200.7425ZM198.0131 5.8313C198.3618 7.41505 199.3081 7.56442 199.5471 7.56442C200.4137 7.56442 200.4137 6.58817 200.4137 6.38911C200.4137 6.17005 200.4037 6.10005 200.364 5.8313H198.0131ZM204.9507 7.53474C204.9704 7.62411 204.9704 7.64411 204.9704 7.67411C204.9704 7.7338 204.9407 7.78349 204.861 7.78349C204.821 7.78349 204.801 7.78349 204.6517 7.65411C204.5323 7.56442 204.5223 7.56442 204.4526 7.50474C204.1239 7.78349 203.6854 7.78349 203.556 7.78349C202.1317 7.78349 201.7629 6.88724 201.7629 6.40911C201.7629 6.07036 201.9223 5.8413 202.1217 5.67192C202.3907 5.44286 202.6895 5.38286 203.1576 5.29317C203.5957 5.2038 204.1935 5.08411 204.1935 4.47661C204.1935 4.137861 203.9445 3.430674 202.8885 3.430674C202.4004 3.430674 201.8129 3.600049 201.7529 4.80536C201.7432 4.96474 201.7432 5.01442 201.6235 5.01442C201.5239 5.01442 201.5139 4.98442 201.4842 4.80536L201.2551 3.470361C201.2351 3.380674 201.2351 3.360986 201.2351 3.320986C201.2351 3.251299 201.2748 3.211299 201.3448 3.211299C201.3945 3.211299 201.4045 3.221299 201.6135 3.420674C201.6732 3.470361 201.8129 3.600049 201.8626 3.649736C202.1217 3.310986 202.5001 3.211299 202.8885 3.211299C204.3429 3.211299 204.7214 4.267236 204.7214 4.78536C204.7214 5.1638 204.562 5.41286 204.3829 5.58224C204.0939 5.88099 203.8351 5.93067 203.297 6.03036C202.8489 6.12005 202.291 6.22974 202.291 6.72786C202.291 6.73755 202.291 7.59442 203.556 7.59442C203.7454 7.59442 204.5323 7.59442 204.5323 6.68786C204.5323 6.55849 204.5123 6.4288 204.5123 6.39911C204.5123 6.30942 204.602 6.29942 204.632 6.29942C204.7414 6.29942 204.7514 6.35911 204.7814 6.52849L204.9507 7.53474Z'/>
+<path d='M32.7109 72.3594H16.464844' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M8.704212 75.81309V68.899969H11.3239C13.01734 68.899969 14.37202 70.41403 14.37202 72.29684C14.37202 74.22934 13.02734 75.81309 11.31421 75.81309H8.704212ZM9.56077 69.457781V75.25528H11.08484C12.47952 75.25528 13.51546 74.04997 13.51546 72.29684C13.51546 70.60341 12.47952 69.457781 11.08484 69.457781H9.56077Z'/>
+<path d='M32.7109 61.5586H16.464844' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M14.10396 61.37616V61.98397H10.81678V64.3446H12.19146C12.31115 64.3446 12.43053 64.3346 12.55021 64.3346H14.37303V64.9821H9.930214V58.098973H14.5124V58.806161H13.2574C13.13771 58.806161 13.01834 58.796161 12.89865 58.796161H10.81678V61.37616H14.10396Z'/>
+<path d='M25.14844 61.5586C25.14844 62.3555 24.50391 63 23.71094 63C22.91406 63 22.26953 62.3555 22.26953 61.5586C22.26953 60.7656 22.91406 60.1211 23.71094 60.1211C24.50391 60.1211 25.14844 60.7656 25.14844 61.5586Z'/>
+<path d='M25.14844 61.5586C25.14844 62.3555 24.50391 63 23.71094 63C22.91406 63 22.26953 62.3555 22.26953 61.5586C22.26953 60.7656 22.91406 60.1211 23.71094 60.1211C24.50391 60.1211 25.14844 60.7656 25.14844 61.5586Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M23.71094 61.5586V39.957H77.9102' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M16.464844 29.160156H46.1641' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M71.9023 131.762C71.9023 132.555 71.2578 133.199 70.4648 133.199C69.668 133.199 69.0234 132.555 69.0234 131.762C69.0234 130.965 69.668 130.32 70.4648 130.32C71.2578 130.32 71.9023 130.965 71.9023 131.762Z'/>
+<path d='M71.9023 131.762C71.9023 132.555 71.2578 133.199 70.4648 133.199C69.668 133.199 69.0234 132.555 69.0234 131.762C69.0234 130.965 69.668 130.32 70.4648 130.32C71.2578 130.32 71.9023 130.965 71.9023 131.762Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M70.4648 131.762V120.9609' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M70.4648 120.9609H133.664' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M131.863 21.95703L133.664 14.7578L135.465 21.95703Z'/>
+<path d='M131.863 21.95703L133.664 14.7578L135.465 21.95703Z' stroke='#000' fill='none' stroke-width='0.5' stroke-miterlimit='10'/>
+<path d='M133.664 120.9609V16.4062' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M71.9023 110.1602C71.9023 110.9531 71.2578 111.6016 70.4648 111.6016C69.668 111.6016 69.0234 110.9531 69.0234 110.1602C69.0234 109.3633 69.668 108.7188 70.4648 108.7188C71.2578 108.7188 71.9023 109.3633 71.9023 110.1602Z'/>
+<path d='M71.9023 110.1602C71.9023 110.9531 71.2578 111.6016 70.4648 111.6016C69.668 111.6016 69.0234 110.9531 69.0234 110.1602C69.0234 109.3633 69.668 108.7188 70.4648 108.7188C71.2578 108.7188 71.9023 109.3633 71.9023 110.1602Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M70.4648 110.1602V99.3594' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M70.4648 99.3594H124.664' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M122.863 21.95703L124.664 14.7578L126.465 21.95703Z'/>
+<path d='M122.863 21.95703L124.664 14.7578L126.465 21.95703Z' stroke='#000' fill='none' stroke-width='0.5' stroke-miterlimit='10'/>
+<path d='M124.664 99.3594V16.4062' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M71.9023 88.5586C71.9023 89.3555 71.2578 90 70.4648 90C69.668 90 69.0234 89.3555 69.0234 88.5586C69.0234 87.7656 69.668 87.1211 70.4648 87.1211C71.2578 87.1211 71.9023 87.7656 71.9023 88.5586Z'/>
+<path d='M71.9023 88.5586C71.9023 89.3555 71.2578 90 70.4648 90C69.668 90 69.0234 89.3555 69.0234 88.5586C69.0234 87.7656 69.668 87.1211 70.4648 87.1211C71.2578 87.1211 71.9023 87.7656 71.9023 88.5586Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M70.4648 88.5586V77.7578' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M70.4648 77.7578H115.6641' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M113.8633 21.95703L115.6641 14.7578L117.465 21.95703Z'/>
+<path d='M113.8633 21.95703L115.6641 14.7578L117.465 21.95703Z' stroke='#000' fill='none' stroke-width='0.5' stroke-miterlimit='10'/>
+<path d='M115.6641 77.7578V16.4062' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M71.9023 67.0391C71.9023 67.832 71.2578 68.4766 70.4648 68.4766C69.668 68.4766 69.0234 67.832 69.0234 67.0391C69.0234 66.2422 69.668 65.5977 70.4648 65.5977C71.2578 65.5977 71.9023 66.2422 71.9023 67.0391Z'/>
+<path d='M71.9023 67.0391C71.9023 67.832 71.2578 68.4766 70.4648 68.4766C69.668 68.4766 69.0234 67.832 69.0234 67.0391C69.0234 66.2422 69.668 65.5977 70.4648 65.5977C71.2578 65.5977 71.9023 66.2422 71.9023 67.0391Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M70.4648 67.0391V50.7578H77.9102' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M187.664 131.762H151.664' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M149.863 21.95703L151.664 14.7578L153.465 21.95703Z'/>
+<path d='M149.863 21.95703L151.664 14.7578L153.465 21.95703Z' stroke='#000' fill='none' stroke-width='0.5' stroke-miterlimit='10'/>
+<path d='M151.664 131.762V16.4062' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M187.664 126.3594H160.664' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M158.863 21.95703L160.664 14.7578L162.465 21.95703Z'/>
+<path d='M158.863 21.95703L160.664 14.7578L162.465 21.95703Z' stroke='#000' fill='none' stroke-width='0.5' stroke-miterlimit='10'/>
+<path d='M160.664 126.3594V16.4062' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M187.664 120.9609H169.664' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M167.863 21.95703L169.664 14.7578L171.465 21.95703Z'/>
+<path d='M167.863 21.95703L169.664 14.7578L171.465 21.95703Z' stroke='#000' fill='none' stroke-width='0.5' stroke-miterlimit='10'/>
+<path d='M169.664 120.9609V16.4062' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M187.664 115.5586H178.664' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M176.863 21.95703L178.664 14.7578L180.465 21.95703Z'/>
+<path d='M176.863 21.95703L178.664 14.7578L180.465 21.95703Z' stroke='#000' fill='none' stroke-width='0.5' stroke-miterlimit='10'/>
+<path d='M178.664 115.5586V16.4062' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M97.4648 131.762H151.664' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M153.105 131.762C153.105 132.555 152.461 133.199 151.664 133.199S150.223 132.555 150.223 131.762C150.223 130.965 150.867 130.32 151.664 130.32S153.105 130.965 153.105 131.762Z'/>
+<path d='M153.105 131.762C153.105 132.555 152.461 133.199 151.664 133.199S150.223 132.555 150.223 131.762C150.223 130.965 150.867 130.32 151.664 130.32S153.105 130.965 153.105 131.762Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M97.4648 110.1602H160.664' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M162.105 110.1602C162.105 110.9531 161.461 111.6016 160.664 111.6016S159.223 110.9531 159.223 110.1602C159.223 109.3633 159.867 108.7188 160.664 108.7188S162.105 109.3633 162.105 110.1602Z'/>
+<path d='M162.105 110.1602C162.105 110.9531 161.461 111.6016 160.664 111.6016S159.223 110.9531 159.223 110.1602C159.223 109.3633 159.867 108.7188 160.664 108.7188S162.105 109.3633 162.105 110.1602Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M97.4648 88.5586H169.664' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M171.105 88.5586C171.105 89.3555 170.461 90 169.664 90C168.871 90 168.223 89.3555 168.223 88.5586C168.223 87.7656 168.871 87.1211 169.664 87.1211C170.461 87.1211 171.105 87.7656 171.105 88.5586Z'/>
+<path d='M171.105 88.5586C171.105 89.3555 170.461 90 169.664 90C168.871 90 168.223 89.3555 168.223 88.5586C168.223 87.7656 168.871 87.1211 169.664 87.1211C170.461 87.1211 171.105 87.7656 171.105 88.5586Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M61.4648 66.957L178.664 67.0391' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M180.105 67.0391C180.105 67.832 179.461 68.4766 178.664 68.4766C177.871 68.4766 177.227 67.832 177.227 67.0391C177.227 66.2422 177.871 65.5977 178.664 65.5977C179.461 65.5977 180.105 66.2422 180.105 67.0391Z'/>
+<path d='M180.105 67.0391C180.105 67.832 179.461 68.4766 178.664 68.4766C177.871 68.4766 177.227 67.832 177.227 67.0391C177.227 66.2422 177.871 65.5977 178.664 65.5977C179.461 65.5977 180.105 66.2422 180.105 67.0391Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M187.664 61.5586H151.664' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M153.105 61.5586C153.105 62.3555 152.461 63 151.664 63S150.223 62.3555 150.223 61.5586C150.223 60.7656 150.867 60.1211 151.664 60.1211S153.105 60.7656 153.105 61.5586Z'/>
+<path d='M153.105 61.5586C153.105 62.3555 152.461 63 151.664 63S150.223 62.3555 150.223 61.5586C150.223 60.7656 150.867 60.1211 151.664 60.1211S153.105 60.7656 153.105 61.5586Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M187.664 56.1602H160.664' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M162.105 56.1602C162.105 56.9531 161.461 57.5977 160.664 57.5977S159.223 56.9531 159.223 56.1602C159.223 55.3633 159.867 54.7187 160.664 54.7187S162.105 55.3633 162.105 56.1602Z'/>
+<path d='M162.105 56.1602C162.105 56.9531 161.461 57.5977 160.664 57.5977S159.223 56.9531 159.223 56.1602C159.223 55.3633 159.867 54.7187 160.664 54.7187S162.105 55.3633 162.105 56.1602Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M187.664 50.7578H169.664' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M171.105 50.7578C171.105 51.5547 170.461 52.1992 169.664 52.1992C168.871 52.1992 168.223 51.5547 168.223 50.7578C168.223 49.9648 168.871 49.3203 169.664 49.3203C170.461 49.3203 171.105 49.9648 171.105 50.7578Z'/>
+<path d='M171.105 50.7578C171.105 51.5547 170.461 52.1992 169.664 52.1992C168.871 52.1992 168.223 51.5547 168.223 50.7578C168.223 49.9648 168.871 49.3203 169.664 49.3203C170.461 49.3203 171.105 49.9648 171.105 50.7578Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M106.6641 45.3594H187.664' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M144.105 45.3594C144.105 46.1562 143.461 46.8008 142.664 46.8008C141.867 46.8008 141.223 46.1562 141.223 45.3594C141.223 44.5625 141.867 43.918 142.664 43.918C143.461 43.918 144.105 44.5625 144.105 45.3594Z'/>
+<path d='M144.105 45.3594C144.105 46.1562 143.461 46.8008 142.664 46.8008C141.867 46.8008 141.223 46.1562 141.223 45.3594C141.223 44.5625 141.867 43.918 142.664 43.918C143.461 43.918 144.105 44.5625 144.105 45.3594Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M140.863 21.95703L142.664 14.7578L144.465 21.95703Z'/>
+<path d='M140.863 21.95703L142.664 14.7578L144.465 21.95703Z' stroke='#000' fill='none' stroke-width='0.5' stroke-miterlimit='10'/>
+<path d='M142.664 45.3594V16.4062' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M212.867 123.6602H274.066' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M302.82 118.2617H311.82' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M313.262 118.2617C313.262 119.0547 312.617 119.6992 311.82 119.6992C311.023 119.6992 310.379 119.0547 310.379 118.2617C310.379 117.4648 311.023 116.8203 311.82 116.8203C312.617 116.8203 313.262 117.4648 313.262 118.2617Z'/>
+<path d='M313.262 118.2617C313.262 119.0547 312.617 119.6992 311.82 119.6992C311.023 119.6992 310.379 119.0547 310.379 118.2617C310.379 117.4648 311.023 116.8203 311.82 116.8203C312.617 116.8203 313.262 117.4648 313.262 118.2617Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M311.82 118.2617H320.82' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M327.64537 115.750748C328.731 116.59731 329.09975 117.81262 329.09975 118.85856C329.09975 120.95044 327.65537 122.55418 326.00162 122.55418C324.30819 122.55418 322.893811 120.93044 322.893811 118.85856C322.893811 116.74669 324.36819 115.202935 325.99162 115.202935C326.151 115.202935 326.51975 115.212935 326.94819 115.381998L327.80475 114.177H328.83069L327.64537 115.750748ZM326.55944 115.930123C326.54975 115.930123 326.29069 115.840435 326.00162 115.840435C324.82631 115.840435 323.75037 117.00575 323.75037 118.85856C323.75037 120.72137 324.83631 121.91669 325.99162 121.91669C327.18725 121.91669 328.24287 120.70137 328.24287 118.85856C328.24287 118.21106 328.1235 117.12544 327.22694 116.30856L326.44006 117.3545H325.5535L326.55944 115.930123ZM331.98037 121.24919C332.10006 121.24919 332.21944 121.25918 332.3391 121.25918H333.5444C332.07006 119.63575 331.1835 117.64325 331.1835 115.31231H332.02037C332.02037 118.30075 333.4447 120.43262 334.2216 121.30919V121.95669H330.08787V121.24919H331.98037Z'/>
+<path d='M311.82 118.2617V100.2617L221.867 84.0586' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M221.867 84.0586V75.0586H230.867' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M274.066 112.8594H221.867' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M221.867 112.8594V103.8594L311.82 76.8594' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M311.82 76.8594V58.9375L302.82 58.8594' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M256.066 69.6602H265.066' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M265.066 69.6602V64.2578H274.066' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M212.867 53.457H274.066' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M230.867 64.2578H221.867' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M220.066 21.95703L221.867 14.7578L223.664 21.95703Z'/>
+<path d='M220.066 21.95703L221.867 14.7578L223.664 21.95703Z' stroke='#000' fill='none' stroke-width='0.5' stroke-miterlimit='10'/>
+<path d='M221.867 64.2578V16.4062' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M223.305 29.160156C223.305 29.953125 222.66 30.59766 221.867 30.59766C221.07 30.59766 220.426 29.953125 220.426 29.160156C220.426 28.363281 221.07 27.71875 221.867 27.71875C222.66 27.71875 223.305 28.363281 223.305 29.160156Z'/>
+<path d='M223.305 29.160156C223.305 29.953125 222.66 30.59766 221.867 30.59766C221.07 30.59766 220.426 29.953125 220.426 29.160156C220.426 28.363281 221.07 27.71875 221.867 27.71875C222.66 27.71875 223.305 28.363281 223.305 29.160156Z' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+<path d='M221.867 29.160156H58.7617' stroke='#000' fill='none' stroke-width='0.8' stroke-miterlimit='10'/>
+</g>
+</g>
+</svg> \ No newline at end of file
diff --git a/graphics/circuit_macros/examples/nsvg/dev/test.pdf b/graphics/circuit_macros/examples/nsvg/dev/test.pdf
new file mode 100644
index 0000000000..05af7c1263
--- /dev/null
+++ b/graphics/circuit_macros/examples/nsvg/dev/test.pdf
Binary files differ
diff --git a/graphics/circuit_macros/examples/nsvg/dev/test.pic b/graphics/circuit_macros/examples/nsvg/dev/test.pic
new file mode 100644
index 0000000000..d035baa113
--- /dev/null
+++ b/graphics/circuit_macros/examples/nsvg/dev/test.pic
@@ -0,0 +1,383 @@
+.PS
+# ex08.m4
+# log_init Version 9.3: TikZ PGF m4 macro settings.
+
+# log_init begin
+ # gen_init Version 9.3: TikZ PGF m4 macro settings.
+
+
+ define rpoint__ {
+ rp_wid = last line.end.x-last line.start.x
+ rp_ht = last line.end.y-last line.start.y
+ rp_len = sqrt(abs((rp_wid)^2+(rp_ht)^2)); move to last line.start
+ rp_ang = atan2(rp_ht,rp_wid) }
+
+ rtod_ = 57.295779513082323; dtor_ = 0.017453292519943295
+ twopi_ = 6.2831853071795862; pi_ = (twopi_/2)
+ rp_ang = 0; right
+
+
+ linethick = 0.8
+ arrowwid = 0.05*scale; arrowht = 0.1*scale
+
+
+ # gen_init end
+
+
+# log_init end
+
+
+
+
+# Input labels
+C: (0,0); "\sf C " rjust at C
+DE: C+(0,((linewid/10))*((2*3)*7/4))
+A0: DE+(0,((linewid/10))*(4*3/2)); "\sf A0 " rjust at A0
+A1: A0+(0,((linewid/10))*(4*3/2)); "\sf A1 " rjust at A1
+A2: A1+(0,((linewid/10))*(4*3/2)); "\sf A2 " rjust at A2
+ move to (-0.2,0) # Lettering within the global object
+
+# Buffer strings
+ line right 3*(linewid/10)*5/2 from A2
+ B1: [Tm: line from (((linewid/10))*(3.5),0) \
+ to (0,((linewid/10))*(-4/2)) \
+ then to (0,((linewid/10))*(4/2)) \
+ then to (((linewid/10))*(3.5),0)
+ Tc: (((linewid/10))*(3.5/2),0)
+ NE: (((linewid/10))*(3.5/2),((linewid/10))*(4/4))
+ SE: (((linewid/10))*(3.5/2),((linewid/10))*(-4/4))
+ Out: (((linewid/10))*(3.5+(3/2)),0)
+ N_Out: circle diam (3/2)*(linewid/10) \
+ at (((linewid/10))*(3.5+((3/2)/2)),0)
+ In1: (0,0)
+ C: (((linewid/10))*(3.5/3),0)
+
+
+
+ ]; line right 2*(linewid/10)*5/2
+ T1: last line.c
+ B2: [Tm: line from (((linewid/10))*(3.5),0) \
+ to (0,((linewid/10))*(-4/2)) \
+ then to (0,((linewid/10))*(4/2)) \
+ then to (((linewid/10))*(3.5),0)
+ Tc: (((linewid/10))*(3.5/2),0)
+ In1: (((linewid/10))*(-(3/2)),0)
+ N_In1: circle diam (3/2)*(linewid/10) \
+ at (((linewid/10))*(-((3/2)/2)),0)
+ NE: (((linewid/10))*(3.5/2),((linewid/10))*(4/4))
+ SE: (((linewid/10))*(3.5/2),((linewid/10))*(-4/4))
+ Out: (((linewid/10))*(3.5),0)
+ C: (((linewid/10))*(3.5/3),0)
+
+
+
+ ]
+ line right 3*(linewid/10)*5/2 from A1
+ B3: [Tm: line from (((linewid/10))*(3.5),0) \
+ to (0,((linewid/10))*(-4/2)) \
+ then to (0,((linewid/10))*(4/2)) \
+ then to (((linewid/10))*(3.5),0)
+ Tc: (((linewid/10))*(3.5/2),0)
+ NE: (((linewid/10))*(3.5/2),((linewid/10))*(4/4))
+ SE: (((linewid/10))*(3.5/2),((linewid/10))*(-4/4))
+ Out: (((linewid/10))*(3.5+(3/2)),0)
+ N_Out: circle diam (3/2)*(linewid/10) \
+ at (((linewid/10))*(3.5+((3/2)/2)),0)
+ In1: (0,0)
+ C: (((linewid/10))*(3.5/3),0)
+
+
+
+ ]; line right 2*(linewid/10)*5/2
+ T2: last line.c
+ B4: [Tm: line from (((linewid/10))*(3.5),0) \
+ to (0,((linewid/10))*(-4/2)) \
+ then to (0,((linewid/10))*(4/2)) \
+ then to (((linewid/10))*(3.5),0)
+ Tc: (((linewid/10))*(3.5/2),0)
+ In1: (((linewid/10))*(-(3/2)),0)
+ N_In1: circle diam (3/2)*(linewid/10) \
+ at (((linewid/10))*(-((3/2)/2)),0)
+ NE: (((linewid/10))*(3.5/2),((linewid/10))*(4/4))
+ SE: (((linewid/10))*(3.5/2),((linewid/10))*(-4/4))
+ Out: (((linewid/10))*(3.5),0)
+ C: (((linewid/10))*(3.5/3),0)
+
+
+
+ ]
+ line right 3*(linewid/10)*5/2 from A0
+ B5: [Tm: line from (((linewid/10))*(3.5),0) \
+ to (0,((linewid/10))*(-4/2)) \
+ then to (0,((linewid/10))*(4/2)) \
+ then to (((linewid/10))*(3.5),0)
+ Tc: (((linewid/10))*(3.5/2),0)
+ NE: (((linewid/10))*(3.5/2),((linewid/10))*(4/4))
+ SE: (((linewid/10))*(3.5/2),((linewid/10))*(-4/4))
+ Out: (((linewid/10))*(3.5+(3/2)),0)
+ N_Out: circle diam (3/2)*(linewid/10) \
+ at (((linewid/10))*(3.5+((3/2)/2)),0)
+ In1: (0,0)
+ C: (((linewid/10))*(3.5/3),0)
+
+
+
+ ]; line right 2*(linewid/10)*5/2
+ T3: last line.c
+ B6: [Tm: line from (((linewid/10))*(3.5),0) \
+ to (0,((linewid/10))*(-4/2)) \
+ then to (0,((linewid/10))*(4/2)) \
+ then to (((linewid/10))*(3.5),0)
+ Tc: (((linewid/10))*(3.5/2),0)
+ In1: (((linewid/10))*(-(3/2)),0)
+ N_In1: circle diam (3/2)*(linewid/10) \
+ at (((linewid/10))*(-((3/2)/2)),0)
+ NE: (((linewid/10))*(3.5/2),((linewid/10))*(4/4))
+ SE: (((linewid/10))*(3.5/2),((linewid/10))*(-4/4))
+ Out: (((linewid/10))*(3.5),0)
+ C: (((linewid/10))*(3.5/3),0)
+
+
+
+ ]
+
+
+B7: [Tm: line from (((linewid/10))*(3.5),0) \
+ to (0,((linewid/10))*(-4/2)) \
+ then to (0,((linewid/10))*(4/2)) \
+ then to (((linewid/10))*(3.5),0)
+ Tc: (((linewid/10))*(3.5/2),0)
+ NE: (((linewid/10))*(3.5/2),((linewid/10))*(4/4))
+ SE: (((linewid/10))*(3.5/2),((linewid/10))*(-4/4))
+ Out: (((linewid/10))*(3.5),0)
+ In1: (0,0)
+ C: (((linewid/10))*(3.5/3),0)
+
+
+
+ ] at (B1,C)
+
+G1: [ Bt: line from (((linewid/10))*(0+7/3),((linewid/10))*((2*3)/2)) \
+ to (0,((linewid/10))*((2*3)/2)) chop 0 chop -(linethick *(scale/72)/2)
+ ArcB: arc cw to (0,((linewid/10))*(-(2*3)/2)) \
+ with .c at (((linewid/10))*(0-sqrt((7*(2*3)/((2*3)))^2-((2*3)/2)^2)),0)
+ Bb: line to (((linewid/10))*(0+7/3),((linewid/10))*(-(2*3)/2)) chop -(linethick *(scale/72)/2) chop 0
+ ArcN: arc cw from (((linewid/10))*(0+7/3),((linewid/10))*((2*3)/2)) \
+ to (((linewid/10))*(0+7),0) \
+ with .c at (((linewid/10))*(0+7/3),((linewid/10))*(-((7*2/3)^2-((2*3)/2)^2)/((2*3))))
+ ArcS: arc ccw from (((linewid/10))*(0+7/3),((linewid/10))*(-(2*3)/2)) \
+ to (((linewid/10))*(0+7),0) \
+ with .c at (((linewid/10))*(0+7/3),((linewid/10))*(((7*2/3)^2-((2*3)/2)^2)/((2*3))))
+ NE: (((linewid/10))*(0+7/3),((linewid/10))*(-((7*2/3)^2-((2*3)/2)^2)/((2*3))))+(((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(cos((60)*dtor_))),((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(sin((60)*dtor_))))
+ SE: (((linewid/10))*(0+7/3),((linewid/10))*(((7*2/3)^2-((2*3)/2)^2)/((2*3))))+(((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(cos((-60)*dtor_))),((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(sin((-60)*dtor_))))
+ N_Out: circle diam (3/2)*(linewid/10) \
+ at (((linewid/10))*(0+7+((3/2)/2)),0)
+ Out: (((linewid/10))*(0+7+(3/2)),0)
+ In1: (((linewid/10))*(-sqrt((7*(2*3)/((2*3)))^2-((2*3)/2)^2)+sqrt((7*(2*3)/((2*3)))^2-((2*3)/2/min(2,6-1)*(2+1-2*1))^2)),((linewid/10))*((2*3)/2/min(2,6-1)*(2+1-2*1)))
+
+ In2: (((linewid/10))*(-sqrt((7*(2*3)/((2*3)))^2-((2*3)/2)^2)+sqrt((7*(2*3)/((2*3)))^2-((2*3)/2/min(2,6-1)*(2+1-2*2))^2)),((linewid/10))*((2*3)/2/min(2,6-1)*(2+1-2*2)))
+
+
+
+ C: (((linewid/10))*(0+7/2),0)
+ ] with .Out at (B1.Out,DE)
+G2: [ Bt: line from (((linewid/10))*(0+7/3),((linewid/10))*((2*3)/2)) \
+ to (0,((linewid/10))*((2*3)/2)) chop 0 chop -(linethick *(scale/72)/2)
+ ArcB: arc cw to (0,((linewid/10))*(-(2*3)/2)) \
+ with .c at (((linewid/10))*(0-sqrt((7*(2*3)/((2*3)))^2-((2*3)/2)^2)),0)
+ Bb: line to (((linewid/10))*(0+7/3),((linewid/10))*(-(2*3)/2)) chop -(linethick *(scale/72)/2) chop 0
+ ArcN: arc cw from (((linewid/10))*(0+7/3),((linewid/10))*((2*3)/2)) \
+ to (((linewid/10))*(0+7),0) \
+ with .c at (((linewid/10))*(0+7/3),((linewid/10))*(-((7*2/3)^2-((2*3)/2)^2)/((2*3))))
+ ArcS: arc ccw from (((linewid/10))*(0+7/3),((linewid/10))*(-(2*3)/2)) \
+ to (((linewid/10))*(0+7),0) \
+ with .c at (((linewid/10))*(0+7/3),((linewid/10))*(((7*2/3)^2-((2*3)/2)^2)/((2*3))))
+ NE: (((linewid/10))*(0+7/3),((linewid/10))*(-((7*2/3)^2-((2*3)/2)^2)/((2*3))))+(((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(cos((60)*dtor_))),((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(sin((60)*dtor_))))
+ SE: (((linewid/10))*(0+7/3),((linewid/10))*(((7*2/3)^2-((2*3)/2)^2)/((2*3))))+(((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(cos((-60)*dtor_))),((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(sin((-60)*dtor_))))
+ N_Out: circle diam (3/2)*(linewid/10) \
+ at (((linewid/10))*(0+7+((3/2)/2)),0)
+ Out: (((linewid/10))*(0+7+(3/2)),0)
+ In1: (((linewid/10))*(-sqrt((7*(2*3)/((2*3)))^2-((2*3)/2)^2)+sqrt((7*(2*3)/((2*3)))^2-((2*3)/2/min(2,6-1)*(2+1-2*1))^2)),((linewid/10))*((2*3)/2/min(2,6-1)*(2+1-2*1)))
+
+ In2: (((linewid/10))*(-sqrt((7*(2*3)/((2*3)))^2-((2*3)/2)^2)+sqrt((7*(2*3)/((2*3)))^2-((2*3)/2/min(2,6-1)*(2+1-2*2))^2)),((linewid/10))*((2*3)/2/min(2,6-1)*(2+1-2*2)))
+
+
+
+ C: (((linewid/10))*(0+7/2),0)
+ ] at (B2+(((linewid/10))*(((3/2)/2)),0),G1-(0,((linewid/10))*((2*3))))
+G3: [ Bm: line from (((linewid/10))*(7-(2*3)/2),((linewid/10))*(-(2*3)/2)) \
+ to (0,((linewid/10))*(-(2*3)/2)) \
+ then to (0,((linewid/10))*((2*3)/2)) then \
+ to (((linewid/10))*(7-(2*3)/2),((linewid/10))*((2*3)/2))
+ Arc: arc cw rad (2*3)/2 \
+ to Here+(0,((linewid/10))*(-(2*3))) \
+ with .c at Here+(0,((linewid/10))*(-(2*3)/2))
+ NE: (((linewid/10))*(7-(2*3)/2),0)+(((linewid/10))*(((2*3)/2)*(cos((45)*dtor_))),((linewid/10))*(((2*3)/2)*(sin((45)*dtor_))))
+ SE: (((linewid/10))*(7-(2*3)/2),0)+(((linewid/10))*(((2*3)/2)*(cos((-45)*dtor_))),((linewid/10))*(((2*3)/2)*(sin((-45)*dtor_))))
+ Out: (((linewid/10))*(7),0)
+
+ In1: (0,((linewid/10))*((2*3)/min(4,6-1)*((4+1)/2-1)))
+ In2: (0,((linewid/10))*((2*3)/min(4,6-1)*((4+1)/2-2)))
+ In3: (0,((linewid/10))*((2*3)/min(4,6-1)*((4+1)/2-3)))
+ In4: (0,((linewid/10))*((2*3)/min(4,6-1)*((4+1)/2-4)))
+
+ C: (((linewid/10))*(7/2),0)
+ ] with .In1 at (G2.Out+(9*(linewid/10)*5/2,0),A2)
+G5: [ Bm: line from (((linewid/10))*(7-(2*3)/2),((linewid/10))*(-(2*3)/2)) \
+ to (0,((linewid/10))*(-(2*3)/2)) \
+ then to (0,((linewid/10))*((2*3)/2)) then \
+ to (((linewid/10))*(7-(2*3)/2),((linewid/10))*((2*3)/2))
+ Arc: arc cw rad (2*3)/2 \
+ to Here+(0,((linewid/10))*(-(2*3))) \
+ with .c at Here+(0,((linewid/10))*(-(2*3)/2))
+ NE: (((linewid/10))*(7-(2*3)/2),0)+(((linewid/10))*(((2*3)/2)*(cos((45)*dtor_))),((linewid/10))*(((2*3)/2)*(sin((45)*dtor_))))
+ SE: (((linewid/10))*(7-(2*3)/2),0)+(((linewid/10))*(((2*3)/2)*(cos((-45)*dtor_))),((linewid/10))*(((2*3)/2)*(sin((-45)*dtor_))))
+ Out: (((linewid/10))*(7),0)
+
+ In1: (0,((linewid/10))*((2*3)/min(4,6-1)*((4+1)/2-1)))
+ In2: (0,((linewid/10))*((2*3)/min(4,6-1)*((4+1)/2-2)))
+ In3: (0,((linewid/10))*((2*3)/min(4,6-1)*((4+1)/2-3)))
+ In4: (0,((linewid/10))*((2*3)/min(4,6-1)*((4+1)/2-4)))
+
+ C: (((linewid/10))*(7/2),0)
+ ] with .In4 at (G3.In1,G2.Out)
+G6: [ Bm: line from (((linewid/10))*(7-(2*3)/2),((linewid/10))*(-(2*3)/2)) \
+ to (0,((linewid/10))*(-(2*3)/2)) \
+ then to (0,((linewid/10))*((2*3)/2)) then \
+ to (((linewid/10))*(7-(2*3)/2),((linewid/10))*((2*3)/2))
+ Arc: arc cw rad (2*3)/2 \
+ to Here+(0,((linewid/10))*(-(2*3))) \
+ with .c at Here+(0,((linewid/10))*(-(2*3)/2))
+ NE: (((linewid/10))*(7-(2*3)/2),0)+(((linewid/10))*(((2*3)/2)*(cos((45)*dtor_))),((linewid/10))*(((2*3)/2)*(sin((45)*dtor_))))
+ SE: (((linewid/10))*(7-(2*3)/2),0)+(((linewid/10))*(((2*3)/2)*(cos((-45)*dtor_))),((linewid/10))*(((2*3)/2)*(sin((-45)*dtor_))))
+ Out: (((linewid/10))*(7),0)
+
+ In1: (0,((linewid/10))*((2*3)/min(2,6-1)*((2+1)/2-1)))
+ In2: (0,((linewid/10))*((2*3)/min(2,6-1)*((2+1)/2-2)))
+
+ C: (((linewid/10))*(7/2),0)
+ ] at G5+(((linewid/10))*(7),((linewid/10))*((2*3)*3/4))+((linewid/10)*5/2*2,0)
+G4: [ Bt: line from (((linewid/10))*(0+7/3),((linewid/10))*((2*3)/2)) \
+ to (0,((linewid/10))*((2*3)/2)) chop 0 chop -(linethick *(scale/72)/2)
+ ArcB: arc cw to (0,((linewid/10))*(-(2*3)/2)) \
+ with .c at (((linewid/10))*(0-sqrt((7*(2*3)/((2*3)))^2-((2*3)/2)^2)),0)
+ Bb: line to (((linewid/10))*(0+7/3),((linewid/10))*(-(2*3)/2)) chop -(linethick *(scale/72)/2) chop 0
+ ArcN: arc cw from (((linewid/10))*(0+7/3),((linewid/10))*((2*3)/2)) \
+ to (((linewid/10))*(0+7),0) \
+ with .c at (((linewid/10))*(0+7/3),((linewid/10))*(-((7*2/3)^2-((2*3)/2)^2)/((2*3))))
+ ArcS: arc ccw from (((linewid/10))*(0+7/3),((linewid/10))*(-(2*3)/2)) \
+ to (((linewid/10))*(0+7),0) \
+ with .c at (((linewid/10))*(0+7/3),((linewid/10))*(((7*2/3)^2-((2*3)/2)^2)/((2*3))))
+ NE: (((linewid/10))*(0+7/3),((linewid/10))*(-((7*2/3)^2-((2*3)/2)^2)/((2*3))))+(((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(cos((60)*dtor_))),((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(sin((60)*dtor_))))
+ SE: (((linewid/10))*(0+7/3),((linewid/10))*(((7*2/3)^2-((2*3)/2)^2)/((2*3))))+(((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(cos((-60)*dtor_))),((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(sin((-60)*dtor_))))
+ N_Out: circle diam (3/2)*(linewid/10) \
+ at (((linewid/10))*(0+7+((3/2)/2)),0)
+ Out: (((linewid/10))*(0+7+(3/2)),0)
+ In1: (((linewid/10))*(-sqrt((7*(2*3)/((2*3)))^2-((2*3)/2)^2)+sqrt((7*(2*3)/((2*3)))^2-((2*3)/2/min(2,6-1)*(2+1-2*1))^2)),((linewid/10))*((2*3)/2/min(2,6-1)*(2+1-2*1)))
+
+ In2: (((linewid/10))*(-sqrt((7*(2*3)/((2*3)))^2-((2*3)/2)^2)+sqrt((7*(2*3)/((2*3)))^2-((2*3)/2/min(2,6-1)*(2+1-2*2))^2)),((linewid/10))*((2*3)/2/min(2,6-1)*(2+1-2*2)))
+
+
+
+ C: (((linewid/10))*(0+7/2),0)
+ ] with .In1 at (G6.Out,G3)+(2*(linewid/10)*5/2,0)
+G7: [ Bt: line from (((linewid/10))*(0+7/3),((linewid/10))*((2*3)/2)) \
+ to (0,((linewid/10))*((2*3)/2)) chop 0 chop -(linethick *(scale/72)/2)
+ ArcB: arc cw to (0,((linewid/10))*(-(2*3)/2)) \
+ with .c at (((linewid/10))*(0-sqrt((7*(2*3)/((2*3)))^2-((2*3)/2)^2)),0)
+ Bb: line to (((linewid/10))*(0+7/3),((linewid/10))*(-(2*3)/2)) chop -(linethick *(scale/72)/2) chop 0
+ ArcN: arc cw from (((linewid/10))*(0+7/3),((linewid/10))*((2*3)/2)) \
+ to (((linewid/10))*(0+7),0) \
+ with .c at (((linewid/10))*(0+7/3),((linewid/10))*(-((7*2/3)^2-((2*3)/2)^2)/((2*3))))
+ ArcS: arc ccw from (((linewid/10))*(0+7/3),((linewid/10))*(-(2*3)/2)) \
+ to (((linewid/10))*(0+7),0) \
+ with .c at (((linewid/10))*(0+7/3),((linewid/10))*(((7*2/3)^2-((2*3)/2)^2)/((2*3))))
+ NE: (((linewid/10))*(0+7/3),((linewid/10))*(-((7*2/3)^2-((2*3)/2)^2)/((2*3))))+(((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(cos((60)*dtor_))),((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(sin((60)*dtor_))))
+ SE: (((linewid/10))*(0+7/3),((linewid/10))*(((7*2/3)^2-((2*3)/2)^2)/((2*3))))+(((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(cos((-60)*dtor_))),((linewid/10))*(((2*3)/2+((7*2/3)^2-((2*3)/2)^2)/((2*3)))*(sin((-60)*dtor_))))
+ N_Out: circle diam (3/2)*(linewid/10) \
+ at (((linewid/10))*(0+7+((3/2)/2)),0)
+ Out: (((linewid/10))*(0+7+(3/2)),0)
+ In1: (((linewid/10))*(-sqrt((7*(2*3)/((2*3)))^2-((2*3)/2)^2)+sqrt((7*(2*3)/((2*3)))^2-((2*3)/2/min(2,6-1)*(2+1-2*1))^2)),((linewid/10))*((2*3)/2/min(2,6-1)*(2+1-2*1)))
+
+ In2: (((linewid/10))*(-sqrt((7*(2*3)/((2*3)))^2-((2*3)/2)^2)+sqrt((7*(2*3)/((2*3)))^2-((2*3)/2/min(2,6-1)*(2+1-2*2))^2)),((linewid/10))*((2*3)/2/min(2,6-1)*(2+1-2*2)))
+
+
+
+ C: (((linewid/10))*(0+7/2),0)
+ ] with .In2 at (G4.In2,G5.Out)
+
+# Output to other latches
+TOL: (G2.Out,C)+(4*(linewid/10)*5/2,-4*(linewid/10))
+ move to TOL+(3*(linewid/10)*5/2,-(linewid/10)*5/2/3) ; {move down 0.15}
+ "\sf {\sl To other latches}" below
+
+# Remaining input lines
+ line from G1.In1 to (DE,G1.In1); "\sf D " rjust
+ line from G1.In2 to (DE,G1.In2); "\sf E " rjust
+ [ circle rad (0.04*linewid) fill 0 ] with .c at G1.In2-((linewid/10)*5/2,0)
+ move to last [].c; line to (Here,G2.In2) then to G2.In2
+ line from C to B7.In1
+
+# Connect Bi, and connect to output bus
+ [ circle rad (0.04*linewid) fill 0 ] with .c at T1.c
+ move to last [].c ; line down (A2.y-A1.y)/2
+ line to (TOL-(1*(linewid/10)*5/2,0),Here) ; arrow to (Here,TOL)
+ [ circle rad (0.04*linewid) fill 0 ] with .c at T2.c
+ move to last [].c ; line down (A2.y-A1.y)/2
+ line to (TOL-(2*(linewid/10)*5/2,0),Here) ; arrow to (Here,TOL)
+ [ circle rad (0.04*linewid) fill 0 ] with .c at T3.c
+ move to last [].c ; line down (A2.y-A1.y)/2
+ line to (TOL-(3*(linewid/10)*5/2,0),Here) ; arrow to (Here,TOL)
+
+
+# G1 to G2
+ [ circle rad (0.04*linewid) fill 0 ] with .c at (T1.c,G1)
+ move to last [].c; line to (Here,G2.In1) then to G2.In1
+
+# Upper And inputs to output bus
+ line left 4*(linewid/10)*5/2 from G3.In1
+ arrow to (Here,TOL)
+ line left 3*(linewid/10)*5/2 from G3.In2
+ arrow to (Here,TOL)
+ line left 2*(linewid/10)*5/2 from G3.In3
+ arrow to (Here,TOL)
+ line left 1*(linewid/10)*5/2 from G3.In4
+ arrow to (Here,TOL)
+
+
+ line from B2.Out to (G3.In1,B2)-(4*(linewid/10)*5/2,0) ; [ circle rad (0.04*linewid) fill 0 ] with .c at Here
+ move to last [].c
+ line from B4.Out to (G3.In2,B4)-(3*(linewid/10)*5/2,0) ; [ circle rad (0.04*linewid) fill 0 ] with .c at Here
+ move to last [].c
+ line from B6.Out to (G3.In3,B6)-(2*(linewid/10)*5/2,0) ; [ circle rad (0.04*linewid) fill 0 ] with .c at Here
+ move to last [].c
+ line from G1.Out to (G3.In4,G1)-((linewid/10)*5/2,0) ; [ circle rad (0.04*linewid) fill 0 ] with .c at Here
+ move to last [].c
+
+# Lower And inputs
+ line left 4*(linewid/10)*5/2 from G5.In1 ; [ circle rad (0.04*linewid) fill 0 ] with .c at Here
+ move to last [].c
+ line left 3*(linewid/10)*5/2 from G5.In2 ; [ circle rad (0.04*linewid) fill 0 ] with .c at Here
+ move to last [].c
+ line left 2*(linewid/10)*5/2 from G5.In3 ; [ circle rad (0.04*linewid) fill 0 ] with .c at Here
+ move to last [].c
+ line from G2.Out to G5.In4 ; [ circle rad (0.04*linewid) fill 0 ] with .c at (TOL,Here)
+ move to last [].c ; arrow to (Here,TOL)
+
+# Fix up G4, G6, G7
+ line from G3.Out to G4.In1
+ line right (linewid/10)*5/2 from G4.Out
+ {[ circle rad (0.04*linewid) fill 0 ] with .c at Here
+ move to last [].c; line right (linewid/10)*5/2 ; "\sf Q7" ljust; move right 0.2 } # letters in object
+ line down 2*(linewid/10)*5/2 then to G6.In1+(-(linewid/10)*5/2,(linewid/10)*5/2)
+ line to (Here,G6.In1) then to G6.In1
+ line from G4.In2 to (G6.In1+(-(linewid/10)*5/2,0),G4.In2)
+ line down (linewid/10)*5/2 then to G7.Out+((linewid/10)*5/2,2*(linewid/10)*5/2)
+ line to (Here,G7) then to G7.Out
+ line from G6.Out right (linewid/10)*5/2 ; line to (Here,G7.In1) then to G7.In1
+ line from G5.Out to G7.In2
+ line left (linewid/10)*5/2 from G6.In2 ; arrow to (Here,TOL)
+ [ circle rad (0.04*linewid) fill 0 ] with .c at (Here,C)
+ move to last [].c ; line to B7.Out
+
+.PE
diff --git a/graphics/circuit_macros/examples/nsvg/dev/test.svg b/graphics/circuit_macros/examples/nsvg/dev/test.svg
new file mode 100644
index 0000000000..a9c554efdc
--- /dev/null
+++ b/graphics/circuit_macros/examples/nsvg/dev/test.svg
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="337.972pt" height="139.358pt" viewBox="0 0 337.972 139.358" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 5.796875 -1.140625 C 5.21875 -0.75 4.875 -0.53125 3.890625 -0.53125 C 2.453125 -0.53125 1.5625 -2.03125 1.5625 -3.46875 C 1.5625 -4.828125 2.375 -6.390625 3.90625 -6.390625 C 4.609375 -6.390625 5.0625 -6.21875 5.609375 -5.875 L 5.75 -6.6875 C 5.328125 -6.890625 4.5625 -7.03125 3.921875 -7.03125 C 2.078125 -7.03125 0.65625 -5.46875 0.65625 -3.375 C 0.65625 -1.796875 1.84375 0.109375 3.921875 0.109375 C 4.828125 0.109375 5.21875 -0.046875 5.859375 -0.453125 Z M 5.796875 -1.140625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 3.765625 -6.921875 L 2.875 -6.921875 L 0.28125 0 L 1.015625 0 L 1.78125 -2.03125 L 4.6875 -2.03125 L 5.4375 0 L 6.359375 0 Z M 4.46875 -2.59375 L 2 -2.59375 L 2.640625 -4.390625 C 2.84375 -4.984375 3.15625 -5.828125 3.234375 -6.203125 C 3.265625 -6.0625 3.328125 -5.8125 3.5625 -5.15625 Z M 4.46875 -2.59375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 4.5625 -3.25 C 4.5625 -4.03125 4.515625 -4.96875 4.09375 -5.765625 C 3.6875 -6.515625 3 -6.765625 2.5 -6.765625 C 1.90625 -6.765625 1.203125 -6.484375 0.796875 -5.609375 C 0.46875 -4.875 0.421875 -4.046875 0.421875 -3.25 C 0.421875 -2.46875 0.453125 -1.734375 0.75 -1 C 1.15625 -0.046875 1.90625 0.21875 2.484375 0.21875 C 3.203125 0.21875 3.84375 -0.1875 4.15625 -0.875 C 4.453125 -1.53125 4.5625 -2.1875 4.5625 -3.25 Z M 2.5 -0.390625 C 1.96875 -0.390625 1.5625 -0.765625 1.359375 -1.484375 C 1.203125 -2.046875 1.203125 -2.59375 1.203125 -3.375 C 1.203125 -4 1.203125 -4.59375 1.359375 -5.140625 C 1.421875 -5.328125 1.671875 -6.15625 2.484375 -6.15625 C 3.265625 -6.15625 3.515625 -5.390625 3.59375 -5.21875 C 3.78125 -4.65625 3.78125 -3.984375 3.78125 -3.375 C 3.78125 -2.71875 3.78125 -2.078125 3.59375 -1.453125 C 3.34375 -0.546875 2.8125 -0.390625 2.5 -0.390625 Z M 2.5 -0.390625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 2.984375 -6.765625 L 2.78125 -6.765625 C 2.1875 -6.15625 1.359375 -6.125 0.890625 -6.09375 L 0.890625 -5.515625 C 1.21875 -5.53125 1.6875 -5.546875 2.1875 -5.765625 L 2.1875 -0.578125 L 0.953125 -0.578125 L 0.953125 0 L 4.234375 0 L 4.234375 -0.578125 L 2.984375 -0.578125 Z M 2.984375 -6.765625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 1.734375 -1.875 L 0.5 -0.640625 L 0.5 0 L 4.46875 0 L 4.46875 -0.703125 L 2.65625 -0.703125 C 2.546875 -0.703125 2.421875 -0.703125 2.296875 -0.703125 L 1.21875 -0.703125 C 1.53125 -0.984375 2.296875 -1.71875 2.609375 -2.015625 C 2.796875 -2.1875 3.296875 -2.609375 3.484375 -2.796875 C 3.9375 -3.234375 4.46875 -3.765625 4.46875 -4.609375 C 4.46875 -5.765625 3.671875 -6.765625 2.359375 -6.765625 C 1.21875 -6.765625 0.65625 -5.984375 0.421875 -5.125 C 0.53125 -4.953125 0.59375 -4.890625 0.609375 -4.859375 C 0.625 -4.84375 0.734375 -4.71875 0.828125 -4.578125 C 1.03125 -5.34375 1.3125 -6.125 2.21875 -6.125 C 3.15625 -6.125 3.65625 -5.375 3.65625 -4.59375 C 3.65625 -3.75 3.09375 -3.1875 2.5 -2.578125 Z M 1.734375 -1.875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 0.953125 -6.921875 L 0.953125 0 L 3.578125 0 C 5.28125 0 6.625 -1.515625 6.625 -3.40625 C 6.625 -5.328125 5.28125 -6.921875 3.5625 -6.921875 Z M 1.8125 -0.5625 L 1.8125 -6.359375 L 3.34375 -6.359375 C 4.734375 -6.359375 5.765625 -5.15625 5.765625 -3.40625 C 5.765625 -1.703125 4.734375 -0.5625 3.34375 -0.5625 Z M 1.8125 -0.5625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 5.109375 -3.28125 L 5.109375 -3.890625 L 1.828125 -3.890625 L 1.828125 -6.25 L 3.203125 -6.25 C 3.3125 -6.25 3.4375 -6.234375 3.5625 -6.234375 L 5.390625 -6.234375 L 5.390625 -6.890625 L 0.9375 -6.890625 L 0.9375 0 L 5.515625 0 L 5.515625 -0.703125 L 4.265625 -0.703125 C 4.140625 -0.703125 4.03125 -0.703125 3.90625 -0.703125 L 1.828125 -0.703125 L 1.828125 -3.28125 Z M 5.109375 -3.28125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 5.3125 -0.328125 C 6.40625 -1.171875 6.765625 -2.390625 6.765625 -3.4375 C 6.765625 -5.53125 5.328125 -7.140625 3.671875 -7.140625 C 1.96875 -7.140625 0.5625 -5.515625 0.5625 -3.4375 C 0.5625 -1.328125 2.03125 0.21875 3.65625 0.21875 C 3.8125 0.21875 4.1875 0.203125 4.609375 0.046875 L 5.46875 1.25 L 6.5 1.25 Z M 4.234375 -0.515625 C 4.21875 -0.515625 3.953125 -0.421875 3.671875 -0.421875 C 2.5 -0.421875 1.421875 -1.578125 1.421875 -3.4375 C 1.421875 -5.296875 2.5 -6.5 3.65625 -6.5 C 4.859375 -6.5 5.90625 -5.28125 5.90625 -3.4375 C 5.90625 -2.796875 5.796875 -1.703125 4.890625 -0.890625 L 4.109375 -1.9375 L 3.21875 -1.9375 Z M 4.234375 -0.515625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 2.3125 -5.828125 C 2.4375 -5.828125 2.546875 -5.84375 2.671875 -5.84375 L 3.875 -5.84375 C 2.40625 -4.21875 1.515625 -2.21875 1.515625 0.109375 L 2.359375 0.109375 C 2.359375 -2.875 3.78125 -5.015625 4.5625 -5.890625 L 4.5625 -6.546875 L 0.421875 -6.546875 L 0.421875 -5.828125 Z M 2.3125 -5.828125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 5.046875 -6.078125 C 5.09375 -6.28125 5.109375 -6.375 5.296875 -6.421875 C 5.390625 -6.4375 5.671875 -6.4375 5.859375 -6.4375 C 7.015625 -6.4375 7.375 -6.265625 7.375 -5.28125 C 7.375 -5 7.359375 -4.765625 7.328125 -4.5 L 7.578125 -4.5 L 7.765625 -6.75 L 1.671875 -6.75 L 1.109375 -4.5 L 1.359375 -4.5 C 1.78125 -6.046875 1.890625 -6.4375 3.484375 -6.4375 C 3.625 -6.4375 3.859375 -6.4375 3.921875 -6.4375 C 4.125 -6.40625 4.171875 -6.375 4.171875 -6.234375 C 4.171875 -6.15625 4.15625 -6.0625 4.140625 -5.984375 L 3.265625 -0.75 C 3.21875 -0.4375 3.1875 -0.3125 2.140625 -0.3125 L 1.75 -0.3125 L 1.703125 0 C 1.953125 -0.015625 2.390625 -0.015625 2.640625 -0.015625 L 3.59375 -0.03125 C 4.0625 -0.03125 5.078125 -0.03125 5.484375 0 L 5.53125 -0.3125 L 5.15625 -0.3125 C 4.3125 -0.3125 4.140625 -0.390625 4.140625 -0.609375 C 4.140625 -0.625 4.140625 -0.65625 4.171875 -0.765625 Z M 5.046875 -6.078125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-2">
+<path style="stroke:none;" d="M 5.078125 -2.53125 C 5.078125 -3.640625 4.3125 -4.46875 3.234375 -4.46875 C 1.8125 -4.46875 0.59375 -3.078125 0.59375 -1.75 C 0.59375 -0.71875 1.359375 0.109375 2.46875 0.109375 C 3.796875 0.109375 5.078125 -1.09375 5.078125 -2.53125 Z M 2.515625 -0.140625 C 2.234375 -0.140625 1.390625 -0.234375 1.390625 -1.4375 C 1.390625 -1.796875 1.53125 -2.90625 1.828125 -3.40625 C 2.328125 -4.203125 3.015625 -4.25 3.1875 -4.25 C 3.515625 -4.25 4.3125 -4.09375 4.3125 -2.984375 C 4.3125 -2.75 4.234375 -1.671875 3.890625 -1.015625 C 3.578125 -0.453125 3.03125 -0.140625 2.515625 -0.140625 Z M 2.515625 -0.140625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-3">
+<path style="stroke:none;" d="M 2.390625 -3.984375 L 3.8125 -3.984375 C 3.84375 -4.09375 3.84375 -4.203125 3.875 -4.296875 L 2.4375 -4.296875 L 2.734375 -6.125 L 2.5 -6.125 C 2.328125 -5.1875 1.796875 -4.234375 0.890625 -4.203125 L 0.859375 -3.984375 L 1.6875 -3.984375 L 1.25 -1.265625 C 1.21875 -1.09375 1.21875 -1.0625 1.21875 -0.9375 C 1.21875 0.03125 2.03125 0.109375 2.328125 0.109375 C 2.796875 0.109375 3.09375 -0.203125 3.28125 -0.53125 C 3.453125 -0.84375 3.484375 -0.984375 3.609375 -1.796875 L 3.359375 -1.796875 C 3.234375 -1.078125 3.21875 -0.9375 3.09375 -0.671875 C 3.015625 -0.53125 2.78125 -0.140625 2.40625 -0.140625 C 1.984375 -0.140625 1.890625 -0.53125 1.890625 -0.8125 C 1.890625 -0.921875 1.890625 -0.96875 1.90625 -1.03125 Z M 2.390625 -3.984375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-4">
+<path style="stroke:none;" d="M 5.0625 -3.015625 C 5.09375 -3.203125 5.09375 -3.234375 5.09375 -3.390625 C 5.09375 -4.140625 4.609375 -4.40625 3.921875 -4.40625 C 3.078125 -4.40625 2.546875 -3.796875 2.34375 -3.46875 L 2.328125 -3.484375 L 2.90625 -6.921875 L 1.65625 -6.8125 C 1.640625 -6.8125 1.484375 -6.8125 1.46875 -6.796875 C 1.453125 -6.78125 1.40625 -6.53125 1.40625 -6.5 C 1.96875 -6.5 2.109375 -6.453125 2.109375 -6.1875 C 2.109375 -6.171875 2.109375 -6.09375 2.078125 -5.921875 L 1.21875 -0.734375 C 1.15625 -0.359375 1.109375 -0.3125 0.375 -0.3125 L 0.3125 0 C 0.65625 -0.015625 1.1875 -0.03125 1.453125 -0.03125 C 1.6875 -0.03125 2.234375 -0.015625 2.546875 0 L 2.609375 -0.3125 C 2.109375 -0.3125 1.890625 -0.3125 1.890625 -0.5625 C 1.890625 -0.59375 1.953125 -0.96875 1.984375 -1.171875 C 2.046875 -1.609375 2.125 -2.046875 2.203125 -2.484375 C 2.25 -2.8125 2.34375 -3.296875 2.828125 -3.765625 C 3.125 -4.03125 3.515625 -4.1875 3.84375 -4.1875 C 4.234375 -4.1875 4.421875 -3.984375 4.421875 -3.515625 C 4.421875 -3.375 4.40625 -3.265625 4.3125 -2.6875 L 3.984375 -0.6875 C 3.921875 -0.3125 3.765625 -0.3125 3.15625 -0.3125 L 3.140625 -0.3125 L 3.09375 0 C 3.421875 -0.015625 3.953125 -0.03125 4.21875 -0.03125 C 4.46875 -0.03125 5 -0.015625 5.328125 0 L 5.390625 -0.3125 C 4.890625 -0.3125 4.65625 -0.3125 4.65625 -0.5625 C 4.65625 -0.59375 4.671875 -0.65625 4.671875 -0.703125 Z M 5.0625 -3.015625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-5">
+<path style="stroke:none;" d="M 4.265625 -2.296875 C 4.5 -2.296875 4.53125 -2.296875 4.5625 -2.5 C 4.578125 -2.71875 4.578125 -2.875 4.578125 -2.9375 C 4.578125 -4.109375 3.796875 -4.46875 3.078125 -4.46875 C 1.734375 -4.46875 0.609375 -3.125 0.609375 -1.8125 C 0.609375 -0.703125 1.421875 0.109375 2.46875 0.109375 C 3.703125 0.109375 4.328125 -1.03125 4.328125 -1.203125 C 4.328125 -1.234375 4.3125 -1.3125 4.21875 -1.3125 C 4.140625 -1.3125 4.109375 -1.265625 4.0625 -1.171875 C 3.59375 -0.25 2.796875 -0.140625 2.53125 -0.140625 C 2.078125 -0.140625 1.40625 -0.421875 1.40625 -1.5 C 1.40625 -1.796875 1.46875 -2.15625 1.5 -2.296875 Z M 1.53125 -2.515625 C 1.890625 -4.09375 2.828125 -4.25 3.078125 -4.25 C 3.9375 -4.25 3.9375 -3.265625 3.9375 -3.078125 C 3.9375 -2.84375 3.921875 -2.78125 3.890625 -2.515625 Z M 1.53125 -2.515625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-6">
+<path style="stroke:none;" d="M 2.234375 -3.375 L 2.40625 -4.40625 L 1.1875 -4.3125 C 1 -4.3125 1 -4.28125 0.984375 -4.234375 C 0.984375 -4.203125 0.953125 -4 0.953125 -3.984375 C 1.515625 -3.984375 1.65625 -3.9375 1.65625 -3.671875 C 1.65625 -3.65625 1.65625 -3.59375 1.625 -3.40625 L 1.171875 -0.734375 C 1.109375 -0.359375 1.078125 -0.3125 0.34375 -0.3125 L 0.328125 -0.3125 L 0.28125 0 C 0.671875 -0.015625 1.140625 -0.03125 1.421875 -0.03125 C 1.484375 -0.03125 2.359375 -0.015625 2.6875 0 C 2.703125 -0.09375 2.71875 -0.203125 2.734375 -0.3125 L 2.546875 -0.3125 C 1.9375 -0.3125 1.8125 -0.375 1.8125 -0.59375 C 1.8125 -0.734375 2.140625 -2.5 2.1875 -2.6875 C 2.359375 -3.25 2.765625 -4.1875 3.671875 -4.1875 L 3.671875 -4.171875 C 3.515625 -4.109375 3.40625 -3.921875 3.40625 -3.734375 C 3.40625 -3.421875 3.65625 -3.359375 3.78125 -3.359375 C 4.03125 -3.359375 4.265625 -3.5625 4.265625 -3.859375 C 4.265625 -4.171875 4 -4.40625 3.609375 -4.40625 C 2.96875 -4.40625 2.484375 -3.875 2.25 -3.359375 Z M 2.234375 -3.375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-7">
+<path style="stroke:none;" d="M 2.921875 -6.921875 L 1.671875 -6.8125 C 1.640625 -6.8125 1.5 -6.8125 1.484375 -6.796875 C 1.453125 -6.78125 1.421875 -6.53125 1.421875 -6.5 C 1.984375 -6.5 2.125 -6.453125 2.125 -6.1875 C 2.125 -6.171875 2.125 -6.09375 2.09375 -5.921875 L 1.21875 -0.734375 C 1.171875 -0.359375 1.125 -0.3125 0.390625 -0.3125 L 0.375 -0.3125 L 0.328125 0 C 0.65625 -0.015625 1.1875 -0.03125 1.4375 -0.03125 C 1.671875 -0.03125 2.171875 -0.015625 2.53125 0 L 2.59375 -0.3125 C 2.09375 -0.3125 1.859375 -0.3125 1.859375 -0.5625 C 1.859375 -0.59375 1.875 -0.65625 1.890625 -0.703125 Z M 2.921875 -6.921875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-8">
+<path style="stroke:none;" d="M 4.90625 -1.453125 C 4.859375 -1.1875 4.796875 -0.765625 4.765625 -0.671875 C 4.6875 -0.375 4.5 -0.25 4.34375 -0.25 C 4.125 -0.25 4.0625 -0.46875 4.0625 -0.65625 C 4.0625 -0.75 4.140625 -1.25 4.171875 -1.375 C 4.234375 -1.6875 4.453125 -2.984375 4.453125 -3.203125 C 4.453125 -3.96875 3.78125 -4.46875 2.9375 -4.46875 C 1.9375 -4.46875 1.25 -3.8125 1.25 -3.265625 C 1.25 -3.09375 1.359375 -2.875 1.671875 -2.875 C 1.953125 -2.875 2.1875 -3.109375 2.1875 -3.390625 C 2.1875 -3.65625 2 -3.78125 1.765625 -3.78125 C 2.078125 -4.140625 2.609375 -4.25 2.90625 -4.25 C 3.484375 -4.25 3.78125 -3.78125 3.78125 -3.28125 C 3.78125 -3.1875 3.703125 -2.640625 3.671875 -2.609375 C 3.65625 -2.609375 3.625 -2.609375 3.40625 -2.59375 C 1.75 -2.53125 0.5625 -1.75 0.5625 -0.8125 C 0.5625 -0.046875 1.53125 0.109375 2.015625 0.109375 C 2.90625 0.109375 3.375 -0.59375 3.453125 -0.734375 C 3.453125 -0.046875 3.875 0.0625 4.09375 0.0625 C 4.375 0.0625 4.9375 -0.140625 5.046875 -0.875 C 5.078125 -1 5.09375 -1.078125 5.15625 -1.453125 Z M 3.5 -1.5 C 3.453125 -1.203125 3.40625 -0.890625 3.015625 -0.515625 C 2.78125 -0.28125 2.4375 -0.109375 2.078125 -0.109375 C 1.65625 -0.109375 1.328125 -0.390625 1.328125 -0.796875 C 1.328125 -0.8125 1.328125 -2.296875 3.65625 -2.390625 Z M 3.5 -1.5 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-9">
+<path style="stroke:none;" d="M 4.234375 -3.84375 C 3.71875 -3.828125 3.671875 -3.421875 3.671875 -3.3125 C 3.671875 -3.15625 3.765625 -2.9375 4.078125 -2.9375 C 4.328125 -2.9375 4.609375 -3.125 4.609375 -3.515625 C 4.609375 -4.171875 3.890625 -4.46875 3.234375 -4.46875 C 1.859375 -4.46875 0.671875 -3.15625 0.671875 -1.78125 C 0.671875 -0.640625 1.484375 0.109375 2.484375 0.109375 C 3.8125 0.109375 4.328125 -1.09375 4.328125 -1.1875 C 4.328125 -1.265625 4.25 -1.28125 4.203125 -1.28125 C 4.125 -1.28125 4.109375 -1.265625 4.0625 -1.140625 C 3.734375 -0.46875 3.15625 -0.140625 2.578125 -0.140625 C 2.09375 -0.140625 1.46875 -0.484375 1.46875 -1.5625 C 1.46875 -2.90625 2.1875 -4.21875 3.234375 -4.21875 C 3.375 -4.21875 3.953125 -4.203125 4.234375 -3.84375 Z M 4.234375 -3.84375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-10">
+<path style="stroke:none;" d="M 4.046875 -4.21875 C 4.0625 -4.3125 4.0625 -4.328125 4.0625 -4.359375 C 4.0625 -4.421875 4.03125 -4.46875 3.953125 -4.46875 C 3.921875 -4.46875 3.890625 -4.46875 3.75 -4.34375 C 3.625 -4.25 3.625 -4.25 3.546875 -4.1875 C 3.21875 -4.46875 2.78125 -4.46875 2.65625 -4.46875 C 1.21875 -4.46875 0.859375 -3.5625 0.859375 -3.09375 C 0.859375 -2.75 1.015625 -2.515625 1.21875 -2.359375 C 1.484375 -2.125 1.78125 -2.0625 2.25 -1.96875 C 2.6875 -1.890625 3.296875 -1.765625 3.296875 -1.15625 C 3.296875 -0.8125 3.046875 -0.109375 1.984375 -0.109375 C 1.5 -0.109375 0.90625 -0.28125 0.84375 -1.484375 C 0.84375 -1.640625 0.84375 -1.6875 0.71875 -1.6875 C 0.625 -1.6875 0.609375 -1.671875 0.578125 -1.484375 L 0.34375 -0.15625 C 0.328125 -0.0625 0.328125 -0.046875 0.328125 0 C 0.328125 0.0625 0.375 0.109375 0.4375 0.109375 C 0.484375 0.109375 0.5 0.09375 0.703125 -0.09375 C 0.765625 -0.15625 0.90625 -0.28125 0.953125 -0.328125 C 1.21875 0.015625 1.59375 0.109375 1.984375 0.109375 C 3.4375 0.109375 3.8125 -0.953125 3.8125 -1.46875 C 3.8125 -1.84375 3.65625 -2.09375 3.484375 -2.265625 C 3.1875 -2.5625 2.9375 -2.609375 2.390625 -2.71875 C 1.9375 -2.796875 1.390625 -2.90625 1.390625 -3.40625 C 1.390625 -3.421875 1.390625 -4.28125 2.65625 -4.28125 C 2.84375 -4.28125 3.625 -4.28125 3.625 -3.375 C 3.625 -3.234375 3.609375 -3.109375 3.609375 -3.078125 C 3.609375 -2.984375 3.703125 -2.984375 3.734375 -2.984375 C 3.84375 -2.984375 3.84375 -3.046875 3.875 -3.203125 Z M 4.046875 -4.21875 "/>
+</symbol>
+</g>
+</defs>
+<g id="surface1">
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="8.579" y="113.658"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-2" x="3.321" y="54.259"/>
+ <use xlink:href="#glyph0-3" x="9.963065" y="54.259"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-2" x="3.321" y="32.659"/>
+ <use xlink:href="#glyph0-4" x="9.963065" y="32.659"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-2" x="3.321" y="11.058"/>
+ <use xlink:href="#glyph0-5" x="9.963065" y="11.058"/>
+</g>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00184375 102.601344 L 27.001844 102.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 39.5995 102.601344 L 27.001844 95.402125 L 27.001844 109.800563 L 39.5995 102.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 45.001844 102.601344 C 45.001844 104.093531 43.790906 105.300563 42.298719 105.300563 C 40.806531 105.300563 39.5995 104.093531 39.5995 102.601344 C 39.5995 101.109156 40.806531 99.898219 42.298719 99.898219 C 43.790906 99.898219 45.001844 101.109156 45.001844 102.601344 Z M 45.001844 102.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 45.001844 102.601344 L 63.001844 102.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 81.001844 102.601344 L 68.400281 95.402125 L 68.400281 109.800563 L 81.001844 102.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 68.404188 102.601344 C 68.404188 104.093531 67.19325 105.300563 65.701063 105.300563 C 64.208875 105.300563 62.997938 104.093531 62.997938 102.601344 C 62.997938 101.109156 64.208875 99.898219 65.701063 99.898219 C 67.19325 99.898219 68.404188 101.109156 68.404188 102.601344 Z M 68.404188 102.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00184375 80.999781 L 27.001844 80.999781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 39.5995 80.999781 L 27.001844 73.800563 L 27.001844 88.202906 L 39.5995 80.999781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 45.001844 80.999781 C 45.001844 82.491969 43.790906 83.702906 42.298719 83.702906 C 40.806531 83.702906 39.5995 82.491969 39.5995 80.999781 C 39.5995 79.507594 40.806531 78.300563 42.298719 78.300563 C 43.790906 78.300563 45.001844 79.507594 45.001844 80.999781 Z M 45.001844 80.999781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 45.001844 80.999781 L 63.001844 80.999781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 81.001844 80.999781 L 68.400281 73.800563 L 68.400281 88.202906 L 81.001844 80.999781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 68.404188 80.999781 C 68.404188 82.491969 67.19325 83.702906 65.701063 83.702906 C 64.208875 83.702906 62.997938 82.491969 62.997938 80.999781 C 62.997938 79.507594 64.208875 78.300563 65.701063 78.300563 C 67.19325 78.300563 68.404188 79.507594 68.404188 80.999781 Z M 68.404188 80.999781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00184375 59.402125 L 27.001844 59.402125 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 39.5995 59.402125 L 27.001844 52.199 L 27.001844 66.601344 L 39.5995 59.402125 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 45.001844 59.402125 C 45.001844 60.890406 43.790906 62.101344 42.298719 62.101344 C 40.806531 62.101344 39.5995 60.890406 39.5995 59.402125 C 39.5995 57.909938 40.806531 56.699 42.298719 56.699 C 43.790906 56.699 45.001844 57.909938 45.001844 59.402125 Z M 45.001844 59.402125 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 45.001844 59.402125 L 63.001844 59.402125 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 81.001844 59.402125 L 68.400281 52.199 L 68.400281 66.601344 L 81.001844 59.402125 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 68.404188 59.402125 C 68.404188 60.890406 67.19325 62.101344 65.701063 62.101344 C 64.208875 62.101344 62.997938 60.890406 62.997938 59.402125 C 62.997938 57.909938 64.208875 56.699 65.701063 56.699 C 67.19325 56.699 68.404188 57.909938 68.404188 59.402125 Z M 68.404188 59.402125 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 42.298719 -0.00021875 L 29.701063 -7.199437 L 29.701063 7.199 L 42.298719 -0.00021875 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 22.798719 48.601344 L 14.001844 48.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 14.326063 48.757594 C 17.642469 41.890406 17.669813 33.890406 14.400281 26.999781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 14.001844 26.999781 L 22.798719 26.999781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 22.798719 48.601344 C 30.033094 48.601344 36.5995 44.378688 39.5995 37.800563 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 22.798719 26.999781 C 30.033094 26.999781 36.5995 31.222438 39.5995 37.800563 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 45.001844 37.800563 C 45.001844 39.29275 43.790906 40.499781 42.298719 40.499781 C 40.806531 40.499781 39.5995 39.29275 39.5995 37.800563 C 39.5995 36.308375 40.806531 35.097438 42.298719 35.097438 C 43.790906 35.097438 45.001844 36.308375 45.001844 37.800563 Z M 45.001844 37.800563 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 68.001844 26.999781 L 59.201063 26.999781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 59.525281 27.156031 C 62.841688 20.288844 62.869031 12.288844 59.5995 5.398219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 59.201063 5.398219 L 68.001844 5.398219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 68.001844 26.999781 C 75.232313 26.999781 81.798719 22.781031 84.802625 16.199 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 68.001844 5.398219 C 75.232313 5.398219 81.798719 9.620875 84.802625 16.199 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 90.201063 16.199 C 90.201063 17.691188 88.994031 18.902125 87.501844 18.902125 C 86.009656 18.902125 84.798719 17.691188 84.798719 16.199 C 84.798719 14.706813 86.009656 13.499781 87.501844 13.499781 C 88.994031 13.499781 90.201063 14.706813 90.201063 16.199 Z M 90.201063 16.199 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 185.603406 83.702906 L 171.201063 83.702906 L 171.201063 105.300563 L 185.603406 105.300563 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 185.603406 105.300563 C 191.564344 105.300563 196.404188 100.464625 196.404188 94.499781 C 196.404188 88.534938 191.564344 83.702906 185.603406 83.702906 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 185.603406 13.499781 L 171.201063 13.499781 L 171.201063 35.101344 L 185.603406 35.101344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 185.603406 35.101344 C 191.564344 35.101344 196.404188 30.265406 196.404188 24.300563 C 196.404188 18.335719 191.564344 13.499781 185.603406 13.499781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 228.802625 29.699 L 214.404188 29.699 L 214.404188 51.300563 L 228.802625 51.300563 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 228.802625 51.300563 C 234.767469 51.300563 239.603406 46.464625 239.603406 40.499781 C 239.603406 34.534938 234.767469 29.699 228.802625 29.699 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 264.158094 99.902125 L 255.357313 99.902125 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 255.681531 100.058375 C 258.997937 93.191188 259.025281 85.191188 255.75575 78.300563 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 255.357313 78.300563 L 264.158094 78.300563 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 264.158094 99.902125 C 271.388562 99.902125 277.954969 95.679469 280.954969 89.101344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 264.158094 78.300563 C 271.388562 78.300563 277.954969 82.523219 280.954969 89.101344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 286.357312 89.101344 C 286.357312 90.593531 285.150281 91.800563 283.658094 91.800563 C 282.165906 91.800563 280.954969 90.593531 280.954969 89.101344 C 280.954969 87.609156 282.165906 86.398219 283.658094 86.398219 C 285.150281 86.398219 286.357312 87.609156 286.357312 89.101344 Z M 286.357312 89.101344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 264.158094 40.499781 L 255.357313 40.499781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 255.681531 40.656031 C 258.997937 33.788844 259.025281 25.788844 255.75575 18.898219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 255.357313 18.898219 L 264.158094 18.898219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 264.158094 40.499781 C 271.388562 40.499781 277.954969 36.281031 280.954969 29.699 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 264.158094 18.898219 C 271.388562 18.898219 277.954969 23.120875 280.954969 29.699 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 286.357312 29.699 C 286.357312 31.191188 285.150281 32.402125 283.658094 32.402125 C 282.165906 32.402125 280.954969 31.191188 280.954969 29.699 C 280.954969 28.210719 282.165906 26.999781 283.658094 26.999781 C 285.150281 26.999781 286.357312 28.210719 286.357312 29.699 Z M 286.357312 29.699 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-1" x="134.475" y="136.037"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-2" x="140.843094" y="136.037"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-2" x="149.14194" y="136.037"/>
+ <use xlink:href="#glyph1-3" x="154.12324" y="136.037"/>
+ <use xlink:href="#glyph1-4" x="157.997695" y="136.037"/>
+ <use xlink:href="#glyph1-5" x="163.532915" y="136.037"/>
+ <use xlink:href="#glyph1-6" x="167.960295" y="136.037"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-7" x="175.180191" y="136.037"/>
+ <use xlink:href="#glyph1-8" x="177.947801" y="136.037"/>
+ <use xlink:href="#glyph1-3" x="182.929101" y="136.037"/>
+ <use xlink:href="#glyph1-9" x="186.803557" y="136.037"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-4" x="190.961946" y="136.037"/>
+ <use xlink:href="#glyph1-5" x="196.497166" y="136.037"/>
+ <use xlink:href="#glyph1-10" x="200.924546" y="136.037"/>
+</g>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 16.247938 43.199 L 0.00184375 43.199 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-6" x="7.748" y="70.458"/>
+</g>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 16.247938 32.398219 L 0.00184375 32.398219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-7" x="8.994" y="81.259"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 8.685438 32.398219 C 8.685438 33.195094 8.040906 33.839625 7.247938 33.839625 C 6.451063 33.839625 5.806531 33.195094 5.806531 32.398219 C 5.806531 31.60525 6.451063 30.960719 7.247938 30.960719 C 8.040906 30.960719 8.685438 31.60525 8.685438 32.398219 Z M 8.685438 32.398219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 7.247938 32.398219 L 7.247938 10.800563 L 61.447156 10.800563 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00184375 -0.00021875 L 29.701063 -0.00021875 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 55.439344 102.601344 C 55.439344 103.398219 54.794813 104.04275 54.001844 104.04275 C 53.204969 104.04275 52.560438 103.398219 52.560438 102.601344 C 52.560438 101.804469 53.204969 101.159938 54.001844 101.159938 C 54.794813 101.159938 55.439344 101.804469 55.439344 102.601344 Z M 55.439344 102.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 54.001844 102.601344 L 54.001844 91.800563 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 54.001844 91.800563 L 117.201063 91.800563 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.12;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 115.400281 -7.199437 L 117.201063 -14.398656 L 119.001844 -7.199437 Z M 115.400281 -7.199437 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 117.201063 91.800563 L 117.201063 -12.750219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 55.439344 80.999781 C 55.439344 81.796656 54.794813 82.441188 54.001844 82.441188 C 53.204969 82.441188 52.560438 81.796656 52.560438 80.999781 C 52.560438 80.206813 53.204969 79.562281 54.001844 79.562281 C 54.794813 79.562281 55.439344 80.206813 55.439344 80.999781 Z M 55.439344 80.999781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 54.001844 80.999781 L 54.001844 70.202906 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 54.001844 70.202906 L 108.201063 70.202906 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.12;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 106.400281 -7.199437 L 108.201063 -14.398656 L 110.001844 -7.199437 Z M 106.400281 -7.199437 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 108.201063 70.202906 L 108.201063 -12.750219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 55.439344 59.402125 C 55.439344 60.195094 54.794813 60.839625 54.001844 60.839625 C 53.204969 60.839625 52.560438 60.195094 52.560438 59.402125 C 52.560438 58.60525 53.204969 57.960719 54.001844 57.960719 C 54.794813 57.960719 55.439344 58.60525 55.439344 59.402125 Z M 55.439344 59.402125 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 54.001844 59.402125 L 54.001844 48.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 54.001844 48.601344 L 99.201063 48.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.12;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 97.400281 -7.199437 L 99.201063 -14.398656 L 101.001844 -7.199437 Z M 97.400281 -7.199437 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 99.201063 48.601344 L 99.201063 -12.750219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 55.439344 37.878688 C 55.439344 38.675563 54.794813 39.320094 54.001844 39.320094 C 53.204969 39.320094 52.560438 38.675563 52.560438 37.878688 C 52.560438 37.081813 53.204969 36.437281 54.001844 36.437281 C 54.794813 36.437281 55.439344 37.081813 55.439344 37.878688 Z M 55.439344 37.878688 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 54.001844 37.878688 L 54.001844 21.601344 L 61.447156 21.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 171.201063 102.601344 L 135.201063 102.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.12;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 133.400281 -7.199437 L 135.201063 -14.398656 L 137.001844 -7.199437 Z M 133.400281 -7.199437 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 135.201063 102.601344 L 135.201063 -12.750219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 171.201063 97.202906 L 144.201063 97.202906 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.12;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 142.400281 -7.199437 L 144.201063 -14.398656 L 146.001844 -7.199437 Z M 142.400281 -7.199437 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 144.201063 97.202906 L 144.201063 -12.750219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 171.201063 91.800563 L 153.201063 91.800563 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.12;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 151.400281 -7.199437 L 153.201063 -14.398656 L 155.001844 -7.199437 Z M 151.400281 -7.199437 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 153.201063 91.800563 L 153.201063 -12.750219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 171.201063 86.402125 L 162.201063 86.402125 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.12;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 160.400281 -7.199437 L 162.201063 -14.398656 L 164.001844 -7.199437 Z M 160.400281 -7.199437 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 162.201063 86.402125 L 162.201063 -12.750219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 81.001844 102.601344 L 135.201063 102.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 136.642469 102.601344 C 136.642469 103.398219 135.997938 104.04275 135.201063 104.04275 C 134.404188 104.04275 133.759656 103.398219 133.759656 102.601344 C 133.759656 101.804469 134.404188 101.159938 135.201063 101.159938 C 135.997938 101.159938 136.642469 101.804469 136.642469 102.601344 Z M 136.642469 102.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 81.001844 80.999781 L 144.201063 80.999781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 145.642469 80.999781 C 145.642469 81.796656 144.997938 82.441188 144.201063 82.441188 C 143.404188 82.441188 142.759656 81.796656 142.759656 80.999781 C 142.759656 80.206813 143.404188 79.562281 144.201063 79.562281 C 144.997938 79.562281 145.642469 80.206813 145.642469 80.999781 Z M 145.642469 80.999781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 81.001844 59.402125 L 153.201063 59.402125 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 154.642469 59.402125 C 154.642469 60.195094 153.997938 60.839625 153.201063 60.839625 C 152.408094 60.839625 151.759656 60.195094 151.759656 59.402125 C 151.759656 58.60525 152.408094 57.960719 153.201063 57.960719 C 153.997938 57.960719 154.642469 58.60525 154.642469 59.402125 Z M 154.642469 59.402125 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 45.001844 37.800563 L 162.201063 37.878688 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 163.642469 37.878688 C 163.642469 38.675563 162.997938 39.320094 162.201063 39.320094 C 161.408094 39.320094 160.763563 38.675563 160.763563 37.878688 C 160.763563 37.081813 161.408094 36.437281 162.201063 36.437281 C 162.997938 36.437281 163.642469 37.081813 163.642469 37.878688 Z M 163.642469 37.878688 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 171.201063 32.398219 L 135.201063 32.398219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 136.642469 32.398219 C 136.642469 33.195094 135.997938 33.839625 135.201063 33.839625 C 134.404188 33.839625 133.759656 33.195094 133.759656 32.398219 C 133.759656 31.60525 134.404188 30.960719 135.201063 30.960719 C 135.997938 30.960719 136.642469 31.60525 136.642469 32.398219 Z M 136.642469 32.398219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 171.201063 26.999781 L 144.201063 26.999781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 145.642469 26.999781 C 145.642469 27.796656 144.997938 28.441188 144.201063 28.441188 C 143.404188 28.441188 142.759656 27.796656 142.759656 26.999781 C 142.759656 26.206813 143.404188 25.558375 144.201063 25.558375 C 144.997938 25.558375 145.642469 26.206813 145.642469 26.999781 Z M 145.642469 26.999781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 171.201063 21.601344 L 153.201063 21.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 154.642469 21.601344 C 154.642469 22.394313 153.997938 23.038844 153.201063 23.038844 C 152.408094 23.038844 151.759656 22.394313 151.759656 21.601344 C 151.759656 20.804469 152.408094 20.159938 153.201063 20.159938 C 153.997938 20.159938 154.642469 20.804469 154.642469 21.601344 Z M 154.642469 21.601344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 90.201063 16.199 L 171.201063 16.199 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 127.642469 16.199 C 127.642469 16.995875 126.997938 17.640406 126.201063 17.640406 C 125.404188 17.640406 124.759656 16.995875 124.759656 16.199 C 124.759656 15.406031 125.404188 14.7615 126.201063 14.7615 C 126.997938 14.7615 127.642469 15.406031 127.642469 16.199 Z M 127.642469 16.199 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.12;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 124.400281 -7.199437 L 126.201063 -14.398656 L 128.001844 -7.199437 Z M 124.400281 -7.199437 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 126.201063 16.199 L 126.201063 -12.750219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 196.404188 94.499781 L 257.603406 94.499781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 286.357312 89.101344 L 295.357312 89.101344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 296.798719 89.101344 C 296.798719 89.898219 296.154187 90.54275 295.357312 90.54275 C 294.560437 90.54275 293.915906 89.898219 293.915906 89.101344 C 293.915906 88.304469 294.560437 87.659938 295.357312 87.659938 C 296.154187 87.659938 296.798719 88.304469 296.798719 89.101344 Z M 296.798719 89.101344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 295.357312 89.101344 L 304.357312 89.101344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-8" x="322.336" y="23.936"/>
+ <use xlink:href="#glyph0-9" x="329.66947" y="23.936"/>
+</g>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 295.357312 89.101344 L 295.357312 71.101344 L 205.404188 54.902125 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 205.404188 54.902125 L 205.404188 45.902125 L 214.404188 45.902125 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 257.603406 83.702906 L 205.404188 83.702906 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 205.404188 83.702906 L 205.404188 74.702906 L 295.357312 47.699 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 295.357312 47.699 L 295.357312 29.777125 L 286.357312 29.699 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 239.603406 40.499781 L 248.603406 40.499781 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 248.603406 40.499781 L 248.603406 35.101344 L 257.603406 35.101344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 196.404188 24.300563 L 257.603406 24.300563 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 214.404188 35.101344 L 205.404188 35.101344 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.12;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 203.603406 -7.199437 L 205.404188 -14.398656 L 207.201063 -7.199437 Z M 203.603406 -7.199437 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 205.404188 35.101344 L 205.404188 -12.750219 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 206.841688 -0.00021875 C 206.841688 0.796656 206.197156 1.441188 205.404188 1.441188 C 204.607313 1.441188 203.962781 0.796656 203.962781 -0.00021875 C 203.962781 -0.797094 204.607313 -1.441625 205.404188 -1.441625 C 206.197156 -1.441625 206.841688 -0.797094 206.841688 -0.00021875 Z M 206.841688 -0.00021875 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+<path style="fill:none;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 205.404188 -0.00021875 L 42.298719 -0.00021875 " transform="matrix(1,0,0,-1,16.463,110.199)"/>
+</g>
+</svg>
diff --git a/graphics/circuit_macros/examples/nsvg/dev/test.tex b/graphics/circuit_macros/examples/nsvg/dev/test.tex
new file mode 100644
index 0000000000..e4361f7033
--- /dev/null
+++ b/graphics/circuit_macros/examples/nsvg/dev/test.tex
@@ -0,0 +1,1136 @@
+\begin{tikzpicture}[scale=2.54]
+% dpic version 2020.06.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
+\draw (0,0) node[left=-2bp]{\sf C };
+\draw (0,0.825) node[left=-2bp]{\sf A0 };
+\draw (0,1.125) node[left=-2bp]{\sf A1 };
+\draw (0,1.425) node[left=-2bp]{\sf A2 };
+\dpicdraw (0,1.425)
+ --(0.375,1.425)\dpicstop
+\dpicdraw (0.55,1.425)
+ --(0.375,1.325)
+ --(0.375,1.525)
+ --(0.55,1.425)\dpicstop
+\dpicdraw (0.5875,1.425) circle (0.014764in)\dpicstop
+\dpicdraw (0.625,1.425)
+ --(0.875,1.425)\dpicstop
+\dpicdraw (1.125,1.425)
+ --(0.95,1.325)
+ --(0.95,1.525)
+ --(1.125,1.425)\dpicstop
+\dpicdraw (0.9125,1.425) circle (0.014764in)\dpicstop
+\dpicdraw (0,1.125)
+ --(0.375,1.125)\dpicstop
+\dpicdraw (0.55,1.125)
+ --(0.375,1.025)
+ --(0.375,1.225)
+ --(0.55,1.125)\dpicstop
+\dpicdraw (0.5875,1.125) circle (0.014764in)\dpicstop
+\dpicdraw (0.625,1.125)
+ --(0.875,1.125)\dpicstop
+\dpicdraw (1.125,1.125)
+ --(0.95,1.025)
+ --(0.95,1.225)
+ --(1.125,1.125)\dpicstop
+\dpicdraw (0.9125,1.125) circle (0.014764in)\dpicstop
+\dpicdraw (0,0.825)
+ --(0.375,0.825)\dpicstop
+\dpicdraw (0.55,0.825)
+ --(0.375,0.725)
+ --(0.375,0.925)
+ --(0.55,0.825)\dpicstop
+\dpicdraw (0.5875,0.825) circle (0.014764in)\dpicstop
+\dpicdraw (0.625,0.825)
+ --(0.875,0.825)\dpicstop
+\dpicdraw (1.125,0.825)
+ --(0.95,0.725)
+ --(0.95,0.925)
+ --(1.125,0.825)\dpicstop
+\dpicdraw (0.9125,0.825) circle (0.014764in)\dpicstop
+\dpicdraw (0.5875,0)
+ --(0.4125,-0.1)
+ --(0.4125,0.1)
+ --(0.5875,0)\dpicstop
+\dpicdraw (0.316667,0.675)
+ --(0.194444,0.675)\dpicstop
+\dpicdraw (0.198957,0.677179)
+ ..controls (0.245009,0.581799) and (0.245392,0.470695)
+ ..(0.2,0.375)\dpicstop
+\dpicdraw (0.194444,0.375)
+ --(0.316667,0.375)\dpicstop
+\dpicdraw (0.316667,0.675)
+ ..controls (0.417105,0.675) and (0.508302,0.616374)
+ ..(0.55,0.525)\dpicstop
+\dpicdraw (0.316667,0.375)
+ ..controls (0.417105,0.375) and (0.508302,0.433626)
+ ..(0.55,0.525)\dpicstop
+\dpicdraw (0.5875,0.525) circle (0.014764in)\dpicstop
+\dpicdraw (0.944444,0.375)
+ --(0.822222,0.375)\dpicstop
+\dpicdraw (0.826735,0.377179)
+ ..controls (0.872787,0.281799) and (0.87317,0.170695)
+ ..(0.827778,0.075)\dpicstop
+\dpicdraw (0.822222,0.075)
+ --(0.944444,0.075)\dpicstop
+\dpicdraw (0.944444,0.375)
+ ..controls (1.044883,0.375) and (1.136079,0.316374)
+ ..(1.177778,0.225)\dpicstop
+\dpicdraw (0.944444,0.075)
+ ..controls (1.044883,0.075) and (1.136079,0.133626)
+ ..(1.177778,0.225)\dpicstop
+\dpicdraw (1.215278,0.225) circle (0.014764in)\dpicstop
+\dpicdraw (2.577778,1.1625)
+ --(2.377778,1.1625)
+ --(2.377778,1.4625)
+ --(2.577778,1.4625)\dpicstop
+\dpicdraw (2.577778,1.4625)
+ ..controls (2.66062,1.4625) and (2.727778,1.395343)
+ ..(2.727778,1.3125)
+ ..controls (2.727778,1.229657) and (2.66062,1.1625)
+ ..(2.577778,1.1625)\dpicstop
+\dpicdraw (2.577778,0.1875)
+ --(2.377778,0.1875)
+ --(2.377778,0.4875)
+ --(2.577778,0.4875)\dpicstop
+\dpicdraw (2.577778,0.4875)
+ ..controls (2.66062,0.4875) and (2.727778,0.420343)
+ ..(2.727778,0.3375)
+ ..controls (2.727778,0.254657) and (2.66062,0.1875)
+ ..(2.577778,0.1875)\dpicstop
+\dpicdraw (3.177778,0.4125)
+ --(2.977778,0.4125)
+ --(2.977778,0.7125)
+ --(3.177778,0.7125)\dpicstop
+\dpicdraw (3.177778,0.7125)
+ ..controls (3.26062,0.7125) and (3.327778,0.645343)
+ ..(3.327778,0.5625)
+ ..controls (3.327778,0.479657) and (3.26062,0.4125)
+ ..(3.177778,0.4125)\dpicstop
+\dpicdraw (3.668802,1.3875)
+ --(3.54658,1.3875)\dpicstop
+\dpicdraw (3.551093,1.389679)
+ ..controls (3.597145,1.294299) and (3.597528,1.183195)
+ ..(3.552136,1.0875)\dpicstop
+\dpicdraw (3.54658,1.0875)
+ --(3.668802,1.0875)\dpicstop
+\dpicdraw (3.668802,1.3875)
+ ..controls (3.769241,1.3875) and (3.860437,1.328874)
+ ..(3.902136,1.2375)\dpicstop
+\dpicdraw (3.668802,1.0875)
+ ..controls (3.769241,1.0875) and (3.860437,1.146126)
+ ..(3.902136,1.2375)\dpicstop
+\dpicdraw (3.939636,1.2375) circle (0.014764in)\dpicstop
+\dpicdraw (3.668802,0.5625)
+ --(3.54658,0.5625)\dpicstop
+\dpicdraw (3.551093,0.564679)
+ ..controls (3.597145,0.469299) and (3.597528,0.358195)
+ ..(3.552136,0.2625)\dpicstop
+\dpicdraw (3.54658,0.2625)
+ --(3.668802,0.2625)\dpicstop
+\dpicdraw (3.668802,0.5625)
+ ..controls (3.769241,0.5625) and (3.860437,0.503874)
+ ..(3.902136,0.4125)\dpicstop
+\dpicdraw (3.668802,0.2625)
+ ..controls (3.769241,0.2625) and (3.860437,0.321126)
+ ..(3.902136,0.4125)\dpicstop
+\dpicdraw (3.939636,0.4125) circle (0.014764in)\dpicstop
+\draw (2.127778,-0.241667) node[below=-2bp]{\sf {\sl To other latches}};
+\dpicdraw (0.225642,0.6)
+ --(0,0.6)\dpicstop
+\draw (0,0.6) node[left=-2bp]{\sf D };
+\dpicdraw (0.225642,0.45)
+ --(0,0.45)\dpicstop
+\draw (0,0.45) node[left=-2bp]{\sf E };
+\dpicdraw[fill=black](0.100642,0.45) circle (0.007874in)\dpicstop
+\dpicdraw (0.100642,0.45)
+ --(0.100642,0.15)
+ --(0.85342,0.15)\dpicstop
+\dpicdraw (0,0)
+ --(0.4125,0)\dpicstop
+\dpicdraw[fill=black](0.75,1.425) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,1.425)
+ --(0.75,1.275)\dpicstop
+\dpicdraw (0.75,1.275)
+ --(1.627778,1.275)\dpicstop
+\filldraw[line width=0bp](1.602778,-0.1)
+ --(1.627778,-0.2)
+ --(1.652778,-0.1) --cycle\dpicstop
+\dpicdraw (1.627778,1.275)
+ --(1.627778,-0.177094)\dpicstop
+\dpicdraw[fill=black](0.75,1.125) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,1.125)
+ --(0.75,0.975)\dpicstop
+\dpicdraw (0.75,0.975)
+ --(1.502778,0.975)\dpicstop
+\filldraw[line width=0bp](1.477778,-0.1)
+ --(1.502778,-0.2)
+ --(1.527778,-0.1) --cycle\dpicstop
+\dpicdraw (1.502778,0.975)
+ --(1.502778,-0.177094)\dpicstop
+\dpicdraw[fill=black](0.75,0.825) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,0.825)
+ --(0.75,0.675)\dpicstop
+\dpicdraw (0.75,0.675)
+ --(1.377778,0.675)\dpicstop
+\filldraw[line width=0bp](1.352778,-0.1)
+ --(1.377778,-0.2)
+ --(1.402778,-0.1) --cycle\dpicstop
+\dpicdraw (1.377778,0.675)
+ --(1.377778,-0.177094)\dpicstop
+\dpicdraw[fill=black](0.75,0.526089) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,0.526089)
+ --(0.75,0.3)
+ --(0.85342,0.3)\dpicstop
+\dpicdraw (2.377778,1.425)
+ --(1.877778,1.425)\dpicstop
+\filldraw[line width=0bp](1.852778,-0.1)
+ --(1.877778,-0.2)
+ --(1.902778,-0.1) --cycle\dpicstop
+\dpicdraw (1.877778,1.425)
+ --(1.877778,-0.177094)\dpicstop
+\dpicdraw (2.377778,1.35)
+ --(2.002778,1.35)\dpicstop
+\filldraw[line width=0bp](1.977778,-0.1)
+ --(2.002778,-0.2)
+ --(2.027778,-0.1) --cycle\dpicstop
+\dpicdraw (2.002778,1.35)
+ --(2.002778,-0.177094)\dpicstop
+\dpicdraw (2.377778,1.275)
+ --(2.127778,1.275)\dpicstop
+\filldraw[line width=0bp](2.102778,-0.1)
+ --(2.127778,-0.2)
+ --(2.152778,-0.1) --cycle\dpicstop
+\dpicdraw (2.127778,1.275)
+ --(2.127778,-0.177094)\dpicstop
+\dpicdraw (2.377778,1.2)
+ --(2.252778,1.2)\dpicstop
+\filldraw[line width=0bp](2.227778,-0.1)
+ --(2.252778,-0.2)
+ --(2.277778,-0.1) --cycle\dpicstop
+\dpicdraw (2.252778,1.2)
+ --(2.252778,-0.177094)\dpicstop
+\dpicdraw (1.125,1.425)
+ --(1.877778,1.425)\dpicstop
+\dpicdraw[fill=black](1.877778,1.425) circle (0.007874in)\dpicstop
+\dpicdraw (1.125,1.125)
+ --(2.002778,1.125)\dpicstop
+\dpicdraw[fill=black](2.002778,1.125) circle (0.007874in)\dpicstop
+\dpicdraw (1.125,0.825)
+ --(2.127778,0.825)\dpicstop
+\dpicdraw[fill=black](2.127778,0.825) circle (0.007874in)\dpicstop
+\dpicdraw (0.625,0.525)
+ --(2.252778,0.526089)\dpicstop
+\dpicdraw[fill=black](2.252778,0.526089) circle (0.007874in)\dpicstop
+\dpicdraw (2.377778,0.45)
+ --(1.877778,0.45)\dpicstop
+\dpicdraw[fill=black](1.877778,0.45) circle (0.007874in)\dpicstop
+\dpicdraw (2.377778,0.375)
+ --(2.002778,0.375)\dpicstop
+\dpicdraw[fill=black](2.002778,0.375) circle (0.007874in)\dpicstop
+\dpicdraw (2.377778,0.3)
+ --(2.127778,0.3)\dpicstop
+\dpicdraw[fill=black](2.127778,0.3) circle (0.007874in)\dpicstop
+\dpicdraw (1.252778,0.225)
+ --(2.377778,0.225)\dpicstop
+\dpicdraw[fill=black](1.752778,0.225) circle (0.007874in)\dpicstop
+\filldraw[line width=0bp](1.727778,-0.1)
+ --(1.752778,-0.2)
+ --(1.777778,-0.1) --cycle\dpicstop
+\dpicdraw (1.752778,0.225)
+ --(1.752778,-0.177094)\dpicstop
+\dpicdraw (2.727778,1.3125)
+ --(3.577778,1.3125)\dpicstop
+\dpicdraw (3.977136,1.2375)
+ --(4.102136,1.2375)\dpicstop
+\dpicdraw[fill=black](4.102136,1.2375) circle (0.007874in)\dpicstop
+\dpicdraw (4.102136,1.2375)
+ --(4.227136,1.2375)\dpicstop
+\draw (4.227136,1.2375) node[right=-2bp]{\sf Q7};
+\dpicdraw (4.102136,1.2375)
+ --(4.102136,0.9875)
+ --(2.852778,0.7625)\dpicstop
+\dpicdraw (2.852778,0.7625)
+ --(2.852778,0.6375)
+ --(2.977778,0.6375)\dpicstop
+\dpicdraw (3.577778,1.1625)
+ --(2.852778,1.1625)\dpicstop
+\dpicdraw (2.852778,1.1625)
+ --(2.852778,1.0375)
+ --(4.102136,0.6625)\dpicstop
+\dpicdraw (4.102136,0.6625)
+ --(4.102136,0.413589)
+ --(3.977136,0.4125)\dpicstop
+\dpicdraw (3.327778,0.5625)
+ --(3.452778,0.5625)\dpicstop
+\dpicdraw (3.452778,0.5625)
+ --(3.452778,0.4875)
+ --(3.577778,0.4875)\dpicstop
+\dpicdraw (2.727778,0.3375)
+ --(3.577778,0.3375)\dpicstop
+\dpicdraw (2.977778,0.4875)
+ --(2.852778,0.4875)\dpicstop
+\filldraw[line width=0bp](2.827778,-0.1)
+ --(2.852778,-0.2)
+ --(2.877778,-0.1) --cycle\dpicstop
+\dpicdraw (2.852778,0.4875)
+ --(2.852778,-0.177094)\dpicstop
+\dpicdraw[fill=black](2.852778,0) circle (0.007874in)\dpicstop
+\dpicdraw (2.852778,0)
+ --(0.5875,0)\dpicstop
+\end{tikzpicture}
+\begin{tikzpicture}[scale=2.54]
+% dpic version 2020.06.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
+\draw (0,0) node[left=-2bp]{\sf C };
+\draw (0,0.825) node[left=-2bp]{\sf A0 };
+\draw (0,1.125) node[left=-2bp]{\sf A1 };
+\draw (0,1.425) node[left=-2bp]{\sf A2 };
+\dpicdraw (0,1.425)
+ --(0.375,1.425)\dpicstop
+\dpicdraw (0.55,1.425)
+ --(0.375,1.325)
+ --(0.375,1.525)
+ --(0.55,1.425)\dpicstop
+\dpicdraw (0.5875,1.425) circle (0.014764in)\dpicstop
+\dpicdraw (0.625,1.425)
+ --(0.875,1.425)\dpicstop
+\dpicdraw (1.125,1.425)
+ --(0.95,1.325)
+ --(0.95,1.525)
+ --(1.125,1.425)\dpicstop
+\dpicdraw (0.9125,1.425) circle (0.014764in)\dpicstop
+\dpicdraw (0,1.125)
+ --(0.375,1.125)\dpicstop
+\dpicdraw (0.55,1.125)
+ --(0.375,1.025)
+ --(0.375,1.225)
+ --(0.55,1.125)\dpicstop
+\dpicdraw (0.5875,1.125) circle (0.014764in)\dpicstop
+\dpicdraw (0.625,1.125)
+ --(0.875,1.125)\dpicstop
+\dpicdraw (1.125,1.125)
+ --(0.95,1.025)
+ --(0.95,1.225)
+ --(1.125,1.125)\dpicstop
+\dpicdraw (0.9125,1.125) circle (0.014764in)\dpicstop
+\dpicdraw (0,0.825)
+ --(0.375,0.825)\dpicstop
+\dpicdraw (0.55,0.825)
+ --(0.375,0.725)
+ --(0.375,0.925)
+ --(0.55,0.825)\dpicstop
+\dpicdraw (0.5875,0.825) circle (0.014764in)\dpicstop
+\dpicdraw (0.625,0.825)
+ --(0.875,0.825)\dpicstop
+\dpicdraw (1.125,0.825)
+ --(0.95,0.725)
+ --(0.95,0.925)
+ --(1.125,0.825)\dpicstop
+\dpicdraw (0.9125,0.825) circle (0.014764in)\dpicstop
+\dpicdraw (0.5875,0)
+ --(0.4125,-0.1)
+ --(0.4125,0.1)
+ --(0.5875,0)\dpicstop
+\dpicdraw (0.316667,0.675)
+ --(0.194444,0.675)\dpicstop
+\dpicdraw (0.198957,0.677179)
+ ..controls (0.245009,0.581799) and (0.245392,0.470695)
+ ..(0.2,0.375)\dpicstop
+\dpicdraw (0.194444,0.375)
+ --(0.316667,0.375)\dpicstop
+\dpicdraw (0.316667,0.675)
+ ..controls (0.417105,0.675) and (0.508302,0.616374)
+ ..(0.55,0.525)\dpicstop
+\dpicdraw (0.316667,0.375)
+ ..controls (0.417105,0.375) and (0.508302,0.433626)
+ ..(0.55,0.525)\dpicstop
+\dpicdraw (0.5875,0.525) circle (0.014764in)\dpicstop
+\dpicdraw (0.944444,0.375)
+ --(0.822222,0.375)\dpicstop
+\dpicdraw (0.826735,0.377179)
+ ..controls (0.872787,0.281799) and (0.87317,0.170695)
+ ..(0.827778,0.075)\dpicstop
+\dpicdraw (0.822222,0.075)
+ --(0.944444,0.075)\dpicstop
+\dpicdraw (0.944444,0.375)
+ ..controls (1.044883,0.375) and (1.136079,0.316374)
+ ..(1.177778,0.225)\dpicstop
+\dpicdraw (0.944444,0.075)
+ ..controls (1.044883,0.075) and (1.136079,0.133626)
+ ..(1.177778,0.225)\dpicstop
+\dpicdraw (1.215278,0.225) circle (0.014764in)\dpicstop
+\dpicdraw (2.577778,1.1625)
+ --(2.377778,1.1625)
+ --(2.377778,1.4625)
+ --(2.577778,1.4625)\dpicstop
+\dpicdraw (2.577778,1.4625)
+ ..controls (2.66062,1.4625) and (2.727778,1.395343)
+ ..(2.727778,1.3125)
+ ..controls (2.727778,1.229657) and (2.66062,1.1625)
+ ..(2.577778,1.1625)\dpicstop
+\dpicdraw (2.577778,0.1875)
+ --(2.377778,0.1875)
+ --(2.377778,0.4875)
+ --(2.577778,0.4875)\dpicstop
+\dpicdraw (2.577778,0.4875)
+ ..controls (2.66062,0.4875) and (2.727778,0.420343)
+ ..(2.727778,0.3375)
+ ..controls (2.727778,0.254657) and (2.66062,0.1875)
+ ..(2.577778,0.1875)\dpicstop
+\dpicdraw (3.177778,0.4125)
+ --(2.977778,0.4125)
+ --(2.977778,0.7125)
+ --(3.177778,0.7125)\dpicstop
+\dpicdraw (3.177778,0.7125)
+ ..controls (3.26062,0.7125) and (3.327778,0.645343)
+ ..(3.327778,0.5625)
+ ..controls (3.327778,0.479657) and (3.26062,0.4125)
+ ..(3.177778,0.4125)\dpicstop
+\dpicdraw (3.668802,1.3875)
+ --(3.54658,1.3875)\dpicstop
+\dpicdraw (3.551093,1.389679)
+ ..controls (3.597145,1.294299) and (3.597528,1.183195)
+ ..(3.552136,1.0875)\dpicstop
+\dpicdraw (3.54658,1.0875)
+ --(3.668802,1.0875)\dpicstop
+\dpicdraw (3.668802,1.3875)
+ ..controls (3.769241,1.3875) and (3.860437,1.328874)
+ ..(3.902136,1.2375)\dpicstop
+\dpicdraw (3.668802,1.0875)
+ ..controls (3.769241,1.0875) and (3.860437,1.146126)
+ ..(3.902136,1.2375)\dpicstop
+\dpicdraw (3.939636,1.2375) circle (0.014764in)\dpicstop
+\dpicdraw (3.668802,0.5625)
+ --(3.54658,0.5625)\dpicstop
+\dpicdraw (3.551093,0.564679)
+ ..controls (3.597145,0.469299) and (3.597528,0.358195)
+ ..(3.552136,0.2625)\dpicstop
+\dpicdraw (3.54658,0.2625)
+ --(3.668802,0.2625)\dpicstop
+\dpicdraw (3.668802,0.5625)
+ ..controls (3.769241,0.5625) and (3.860437,0.503874)
+ ..(3.902136,0.4125)\dpicstop
+\dpicdraw (3.668802,0.2625)
+ ..controls (3.769241,0.2625) and (3.860437,0.321126)
+ ..(3.902136,0.4125)\dpicstop
+\dpicdraw (3.939636,0.4125) circle (0.014764in)\dpicstop
+\draw (2.127778,-0.241667) node[below=-2bp]{\sf {\sl To other latches}};
+\dpicdraw (0.225642,0.6)
+ --(0,0.6)\dpicstop
+\draw (0,0.6) node[left=-2bp]{\sf D };
+\dpicdraw (0.225642,0.45)
+ --(0,0.45)\dpicstop
+\draw (0,0.45) node[left=-2bp]{\sf E };
+\dpicdraw[fill=black](0.100642,0.45) circle (0.007874in)\dpicstop
+\dpicdraw (0.100642,0.45)
+ --(0.100642,0.15)
+ --(0.85342,0.15)\dpicstop
+\dpicdraw (0,0)
+ --(0.4125,0)\dpicstop
+\dpicdraw[fill=black](0.75,1.425) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,1.425)
+ --(0.75,1.275)\dpicstop
+\dpicdraw (0.75,1.275)
+ --(1.627778,1.275)\dpicstop
+\filldraw[line width=0bp](1.602778,-0.1)
+ --(1.627778,-0.2)
+ --(1.652778,-0.1) --cycle\dpicstop
+\dpicdraw (1.627778,1.275)
+ --(1.627778,-0.177094)\dpicstop
+\dpicdraw[fill=black](0.75,1.125) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,1.125)
+ --(0.75,0.975)\dpicstop
+\dpicdraw (0.75,0.975)
+ --(1.502778,0.975)\dpicstop
+\filldraw[line width=0bp](1.477778,-0.1)
+ --(1.502778,-0.2)
+ --(1.527778,-0.1) --cycle\dpicstop
+\dpicdraw (1.502778,0.975)
+ --(1.502778,-0.177094)\dpicstop
+\dpicdraw[fill=black](0.75,0.825) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,0.825)
+ --(0.75,0.675)\dpicstop
+\dpicdraw (0.75,0.675)
+ --(1.377778,0.675)\dpicstop
+\filldraw[line width=0bp](1.352778,-0.1)
+ --(1.377778,-0.2)
+ --(1.402778,-0.1) --cycle\dpicstop
+\dpicdraw (1.377778,0.675)
+ --(1.377778,-0.177094)\dpicstop
+\dpicdraw[fill=black](0.75,0.526089) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,0.526089)
+ --(0.75,0.3)
+ --(0.85342,0.3)\dpicstop
+\dpicdraw (2.377778,1.425)
+ --(1.877778,1.425)\dpicstop
+\filldraw[line width=0bp](1.852778,-0.1)
+ --(1.877778,-0.2)
+ --(1.902778,-0.1) --cycle\dpicstop
+\dpicdraw (1.877778,1.425)
+ --(1.877778,-0.177094)\dpicstop
+\dpicdraw (2.377778,1.35)
+ --(2.002778,1.35)\dpicstop
+\filldraw[line width=0bp](1.977778,-0.1)
+ --(2.002778,-0.2)
+ --(2.027778,-0.1) --cycle\dpicstop
+\dpicdraw (2.002778,1.35)
+ --(2.002778,-0.177094)\dpicstop
+\dpicdraw (2.377778,1.275)
+ --(2.127778,1.275)\dpicstop
+\filldraw[line width=0bp](2.102778,-0.1)
+ --(2.127778,-0.2)
+ --(2.152778,-0.1) --cycle\dpicstop
+\dpicdraw (2.127778,1.275)
+ --(2.127778,-0.177094)\dpicstop
+\dpicdraw (2.377778,1.2)
+ --(2.252778,1.2)\dpicstop
+\filldraw[line width=0bp](2.227778,-0.1)
+ --(2.252778,-0.2)
+ --(2.277778,-0.1) --cycle\dpicstop
+\dpicdraw (2.252778,1.2)
+ --(2.252778,-0.177094)\dpicstop
+\dpicdraw (1.125,1.425)
+ --(1.877778,1.425)\dpicstop
+\dpicdraw[fill=black](1.877778,1.425) circle (0.007874in)\dpicstop
+\dpicdraw (1.125,1.125)
+ --(2.002778,1.125)\dpicstop
+\dpicdraw[fill=black](2.002778,1.125) circle (0.007874in)\dpicstop
+\dpicdraw (1.125,0.825)
+ --(2.127778,0.825)\dpicstop
+\dpicdraw[fill=black](2.127778,0.825) circle (0.007874in)\dpicstop
+\dpicdraw (0.625,0.525)
+ --(2.252778,0.526089)\dpicstop
+\dpicdraw[fill=black](2.252778,0.526089) circle (0.007874in)\dpicstop
+\dpicdraw (2.377778,0.45)
+ --(1.877778,0.45)\dpicstop
+\dpicdraw[fill=black](1.877778,0.45) circle (0.007874in)\dpicstop
+\dpicdraw (2.377778,0.375)
+ --(2.002778,0.375)\dpicstop
+\dpicdraw[fill=black](2.002778,0.375) circle (0.007874in)\dpicstop
+\dpicdraw (2.377778,0.3)
+ --(2.127778,0.3)\dpicstop
+\dpicdraw[fill=black](2.127778,0.3) circle (0.007874in)\dpicstop
+\dpicdraw (1.252778,0.225)
+ --(2.377778,0.225)\dpicstop
+\dpicdraw[fill=black](1.752778,0.225) circle (0.007874in)\dpicstop
+\filldraw[line width=0bp](1.727778,-0.1)
+ --(1.752778,-0.2)
+ --(1.777778,-0.1) --cycle\dpicstop
+\dpicdraw (1.752778,0.225)
+ --(1.752778,-0.177094)\dpicstop
+\dpicdraw (2.727778,1.3125)
+ --(3.577778,1.3125)\dpicstop
+\dpicdraw (3.977136,1.2375)
+ --(4.102136,1.2375)\dpicstop
+\dpicdraw[fill=black](4.102136,1.2375) circle (0.007874in)\dpicstop
+\dpicdraw (4.102136,1.2375)
+ --(4.227136,1.2375)\dpicstop
+\draw (4.227136,1.2375) node[right=-2bp]{\sf Q7};
+\dpicdraw (4.102136,1.2375)
+ --(4.102136,0.9875)
+ --(2.852778,0.7625)\dpicstop
+\dpicdraw (2.852778,0.7625)
+ --(2.852778,0.6375)
+ --(2.977778,0.6375)\dpicstop
+\dpicdraw (3.577778,1.1625)
+ --(2.852778,1.1625)\dpicstop
+\dpicdraw (2.852778,1.1625)
+ --(2.852778,1.0375)
+ --(4.102136,0.6625)\dpicstop
+\dpicdraw (4.102136,0.6625)
+ --(4.102136,0.413589)
+ --(3.977136,0.4125)\dpicstop
+\dpicdraw (3.327778,0.5625)
+ --(3.452778,0.5625)\dpicstop
+\dpicdraw (3.452778,0.5625)
+ --(3.452778,0.4875)
+ --(3.577778,0.4875)\dpicstop
+\dpicdraw (2.727778,0.3375)
+ --(3.577778,0.3375)\dpicstop
+\dpicdraw (2.977778,0.4875)
+ --(2.852778,0.4875)\dpicstop
+\filldraw[line width=0bp](2.827778,-0.1)
+ --(2.852778,-0.2)
+ --(2.877778,-0.1) --cycle\dpicstop
+\dpicdraw (2.852778,0.4875)
+ --(2.852778,-0.177094)\dpicstop
+\dpicdraw[fill=black](2.852778,0) circle (0.007874in)\dpicstop
+\dpicdraw (2.852778,0)
+ --(0.5875,0)\dpicstop
+\end{tikzpicture}
+\begin{tikzpicture}[scale=2.54]
+% dpic version 2020.06.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
+\draw (0,0) node[left=-2bp]{\sf C };
+\draw (0,0.825) node[left=-2bp]{\sf A0 };
+\draw (0,1.125) node[left=-2bp]{\sf A1 };
+\draw (0,1.425) node[left=-2bp]{\sf A2 };
+\dpicdraw (0,1.425)
+ --(0.375,1.425)\dpicstop
+\dpicdraw (0.55,1.425)
+ --(0.375,1.325)
+ --(0.375,1.525)
+ --(0.55,1.425)\dpicstop
+\dpicdraw (0.5875,1.425) circle (0.014764in)\dpicstop
+\dpicdraw (0.625,1.425)
+ --(0.875,1.425)\dpicstop
+\dpicdraw (1.125,1.425)
+ --(0.95,1.325)
+ --(0.95,1.525)
+ --(1.125,1.425)\dpicstop
+\dpicdraw (0.9125,1.425) circle (0.014764in)\dpicstop
+\dpicdraw (0,1.125)
+ --(0.375,1.125)\dpicstop
+\dpicdraw (0.55,1.125)
+ --(0.375,1.025)
+ --(0.375,1.225)
+ --(0.55,1.125)\dpicstop
+\dpicdraw (0.5875,1.125) circle (0.014764in)\dpicstop
+\dpicdraw (0.625,1.125)
+ --(0.875,1.125)\dpicstop
+\dpicdraw (1.125,1.125)
+ --(0.95,1.025)
+ --(0.95,1.225)
+ --(1.125,1.125)\dpicstop
+\dpicdraw (0.9125,1.125) circle (0.014764in)\dpicstop
+\dpicdraw (0,0.825)
+ --(0.375,0.825)\dpicstop
+\dpicdraw (0.55,0.825)
+ --(0.375,0.725)
+ --(0.375,0.925)
+ --(0.55,0.825)\dpicstop
+\dpicdraw (0.5875,0.825) circle (0.014764in)\dpicstop
+\dpicdraw (0.625,0.825)
+ --(0.875,0.825)\dpicstop
+\dpicdraw (1.125,0.825)
+ --(0.95,0.725)
+ --(0.95,0.925)
+ --(1.125,0.825)\dpicstop
+\dpicdraw (0.9125,0.825) circle (0.014764in)\dpicstop
+\dpicdraw (0.5875,0)
+ --(0.4125,-0.1)
+ --(0.4125,0.1)
+ --(0.5875,0)\dpicstop
+\dpicdraw (0.316667,0.675)
+ --(0.194444,0.675)\dpicstop
+\dpicdraw (0.198957,0.677179)
+ ..controls (0.245009,0.581799) and (0.245392,0.470695)
+ ..(0.2,0.375)\dpicstop
+\dpicdraw (0.194444,0.375)
+ --(0.316667,0.375)\dpicstop
+\dpicdraw (0.316667,0.675)
+ ..controls (0.417105,0.675) and (0.508302,0.616374)
+ ..(0.55,0.525)\dpicstop
+\dpicdraw (0.316667,0.375)
+ ..controls (0.417105,0.375) and (0.508302,0.433626)
+ ..(0.55,0.525)\dpicstop
+\dpicdraw (0.5875,0.525) circle (0.014764in)\dpicstop
+\dpicdraw (0.944444,0.375)
+ --(0.822222,0.375)\dpicstop
+\dpicdraw (0.826735,0.377179)
+ ..controls (0.872787,0.281799) and (0.87317,0.170695)
+ ..(0.827778,0.075)\dpicstop
+\dpicdraw (0.822222,0.075)
+ --(0.944444,0.075)\dpicstop
+\dpicdraw (0.944444,0.375)
+ ..controls (1.044883,0.375) and (1.136079,0.316374)
+ ..(1.177778,0.225)\dpicstop
+\dpicdraw (0.944444,0.075)
+ ..controls (1.044883,0.075) and (1.136079,0.133626)
+ ..(1.177778,0.225)\dpicstop
+\dpicdraw (1.215278,0.225) circle (0.014764in)\dpicstop
+\dpicdraw (2.577778,1.1625)
+ --(2.377778,1.1625)
+ --(2.377778,1.4625)
+ --(2.577778,1.4625)\dpicstop
+\dpicdraw (2.577778,1.4625)
+ ..controls (2.66062,1.4625) and (2.727778,1.395343)
+ ..(2.727778,1.3125)
+ ..controls (2.727778,1.229657) and (2.66062,1.1625)
+ ..(2.577778,1.1625)\dpicstop
+\dpicdraw (2.577778,0.1875)
+ --(2.377778,0.1875)
+ --(2.377778,0.4875)
+ --(2.577778,0.4875)\dpicstop
+\dpicdraw (2.577778,0.4875)
+ ..controls (2.66062,0.4875) and (2.727778,0.420343)
+ ..(2.727778,0.3375)
+ ..controls (2.727778,0.254657) and (2.66062,0.1875)
+ ..(2.577778,0.1875)\dpicstop
+\dpicdraw (3.177778,0.4125)
+ --(2.977778,0.4125)
+ --(2.977778,0.7125)
+ --(3.177778,0.7125)\dpicstop
+\dpicdraw (3.177778,0.7125)
+ ..controls (3.26062,0.7125) and (3.327778,0.645343)
+ ..(3.327778,0.5625)
+ ..controls (3.327778,0.479657) and (3.26062,0.4125)
+ ..(3.177778,0.4125)\dpicstop
+\dpicdraw (3.668802,1.3875)
+ --(3.54658,1.3875)\dpicstop
+\dpicdraw (3.551093,1.389679)
+ ..controls (3.597145,1.294299) and (3.597528,1.183195)
+ ..(3.552136,1.0875)\dpicstop
+\dpicdraw (3.54658,1.0875)
+ --(3.668802,1.0875)\dpicstop
+\dpicdraw (3.668802,1.3875)
+ ..controls (3.769241,1.3875) and (3.860437,1.328874)
+ ..(3.902136,1.2375)\dpicstop
+\dpicdraw (3.668802,1.0875)
+ ..controls (3.769241,1.0875) and (3.860437,1.146126)
+ ..(3.902136,1.2375)\dpicstop
+\dpicdraw (3.939636,1.2375) circle (0.014764in)\dpicstop
+\dpicdraw (3.668802,0.5625)
+ --(3.54658,0.5625)\dpicstop
+\dpicdraw (3.551093,0.564679)
+ ..controls (3.597145,0.469299) and (3.597528,0.358195)
+ ..(3.552136,0.2625)\dpicstop
+\dpicdraw (3.54658,0.2625)
+ --(3.668802,0.2625)\dpicstop
+\dpicdraw (3.668802,0.5625)
+ ..controls (3.769241,0.5625) and (3.860437,0.503874)
+ ..(3.902136,0.4125)\dpicstop
+\dpicdraw (3.668802,0.2625)
+ ..controls (3.769241,0.2625) and (3.860437,0.321126)
+ ..(3.902136,0.4125)\dpicstop
+\dpicdraw (3.939636,0.4125) circle (0.014764in)\dpicstop
+\draw (2.127778,-0.241667) node[below=-2bp]{\sf {\sl To other latches}};
+\dpicdraw (0.225642,0.6)
+ --(0,0.6)\dpicstop
+\draw (0,0.6) node[left=-2bp]{\sf D };
+\dpicdraw (0.225642,0.45)
+ --(0,0.45)\dpicstop
+\draw (0,0.45) node[left=-2bp]{\sf E };
+\dpicdraw[fill=black](0.100642,0.45) circle (0.007874in)\dpicstop
+\dpicdraw (0.100642,0.45)
+ --(0.100642,0.15)
+ --(0.85342,0.15)\dpicstop
+\dpicdraw (0,0)
+ --(0.4125,0)\dpicstop
+\dpicdraw[fill=black](0.75,1.425) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,1.425)
+ --(0.75,1.275)\dpicstop
+\dpicdraw (0.75,1.275)
+ --(1.627778,1.275)\dpicstop
+\filldraw[line width=0bp](1.602778,-0.1)
+ --(1.627778,-0.2)
+ --(1.652778,-0.1) --cycle\dpicstop
+\dpicdraw (1.627778,1.275)
+ --(1.627778,-0.177094)\dpicstop
+\dpicdraw[fill=black](0.75,1.125) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,1.125)
+ --(0.75,0.975)\dpicstop
+\dpicdraw (0.75,0.975)
+ --(1.502778,0.975)\dpicstop
+\filldraw[line width=0bp](1.477778,-0.1)
+ --(1.502778,-0.2)
+ --(1.527778,-0.1) --cycle\dpicstop
+\dpicdraw (1.502778,0.975)
+ --(1.502778,-0.177094)\dpicstop
+\dpicdraw[fill=black](0.75,0.825) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,0.825)
+ --(0.75,0.675)\dpicstop
+\dpicdraw (0.75,0.675)
+ --(1.377778,0.675)\dpicstop
+\filldraw[line width=0bp](1.352778,-0.1)
+ --(1.377778,-0.2)
+ --(1.402778,-0.1) --cycle\dpicstop
+\dpicdraw (1.377778,0.675)
+ --(1.377778,-0.177094)\dpicstop
+\dpicdraw[fill=black](0.75,0.526089) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,0.526089)
+ --(0.75,0.3)
+ --(0.85342,0.3)\dpicstop
+\dpicdraw (2.377778,1.425)
+ --(1.877778,1.425)\dpicstop
+\filldraw[line width=0bp](1.852778,-0.1)
+ --(1.877778,-0.2)
+ --(1.902778,-0.1) --cycle\dpicstop
+\dpicdraw (1.877778,1.425)
+ --(1.877778,-0.177094)\dpicstop
+\dpicdraw (2.377778,1.35)
+ --(2.002778,1.35)\dpicstop
+\filldraw[line width=0bp](1.977778,-0.1)
+ --(2.002778,-0.2)
+ --(2.027778,-0.1) --cycle\dpicstop
+\dpicdraw (2.002778,1.35)
+ --(2.002778,-0.177094)\dpicstop
+\dpicdraw (2.377778,1.275)
+ --(2.127778,1.275)\dpicstop
+\filldraw[line width=0bp](2.102778,-0.1)
+ --(2.127778,-0.2)
+ --(2.152778,-0.1) --cycle\dpicstop
+\dpicdraw (2.127778,1.275)
+ --(2.127778,-0.177094)\dpicstop
+\dpicdraw (2.377778,1.2)
+ --(2.252778,1.2)\dpicstop
+\filldraw[line width=0bp](2.227778,-0.1)
+ --(2.252778,-0.2)
+ --(2.277778,-0.1) --cycle\dpicstop
+\dpicdraw (2.252778,1.2)
+ --(2.252778,-0.177094)\dpicstop
+\dpicdraw (1.125,1.425)
+ --(1.877778,1.425)\dpicstop
+\dpicdraw[fill=black](1.877778,1.425) circle (0.007874in)\dpicstop
+\dpicdraw (1.125,1.125)
+ --(2.002778,1.125)\dpicstop
+\dpicdraw[fill=black](2.002778,1.125) circle (0.007874in)\dpicstop
+\dpicdraw (1.125,0.825)
+ --(2.127778,0.825)\dpicstop
+\dpicdraw[fill=black](2.127778,0.825) circle (0.007874in)\dpicstop
+\dpicdraw (0.625,0.525)
+ --(2.252778,0.526089)\dpicstop
+\dpicdraw[fill=black](2.252778,0.526089) circle (0.007874in)\dpicstop
+\dpicdraw (2.377778,0.45)
+ --(1.877778,0.45)\dpicstop
+\dpicdraw[fill=black](1.877778,0.45) circle (0.007874in)\dpicstop
+\dpicdraw (2.377778,0.375)
+ --(2.002778,0.375)\dpicstop
+\dpicdraw[fill=black](2.002778,0.375) circle (0.007874in)\dpicstop
+\dpicdraw (2.377778,0.3)
+ --(2.127778,0.3)\dpicstop
+\dpicdraw[fill=black](2.127778,0.3) circle (0.007874in)\dpicstop
+\dpicdraw (1.252778,0.225)
+ --(2.377778,0.225)\dpicstop
+\dpicdraw[fill=black](1.752778,0.225) circle (0.007874in)\dpicstop
+\filldraw[line width=0bp](1.727778,-0.1)
+ --(1.752778,-0.2)
+ --(1.777778,-0.1) --cycle\dpicstop
+\dpicdraw (1.752778,0.225)
+ --(1.752778,-0.177094)\dpicstop
+\dpicdraw (2.727778,1.3125)
+ --(3.577778,1.3125)\dpicstop
+\dpicdraw (3.977136,1.2375)
+ --(4.102136,1.2375)\dpicstop
+\dpicdraw[fill=black](4.102136,1.2375) circle (0.007874in)\dpicstop
+\dpicdraw (4.102136,1.2375)
+ --(4.227136,1.2375)\dpicstop
+\draw (4.227136,1.2375) node[right=-2bp]{\sf Q7};
+\dpicdraw (4.102136,1.2375)
+ --(4.102136,0.9875)
+ --(2.852778,0.7625)\dpicstop
+\dpicdraw (2.852778,0.7625)
+ --(2.852778,0.6375)
+ --(2.977778,0.6375)\dpicstop
+\dpicdraw (3.577778,1.1625)
+ --(2.852778,1.1625)\dpicstop
+\dpicdraw (2.852778,1.1625)
+ --(2.852778,1.0375)
+ --(4.102136,0.6625)\dpicstop
+\dpicdraw (4.102136,0.6625)
+ --(4.102136,0.413589)
+ --(3.977136,0.4125)\dpicstop
+\dpicdraw (3.327778,0.5625)
+ --(3.452778,0.5625)\dpicstop
+\dpicdraw (3.452778,0.5625)
+ --(3.452778,0.4875)
+ --(3.577778,0.4875)\dpicstop
+\dpicdraw (2.727778,0.3375)
+ --(3.577778,0.3375)\dpicstop
+\dpicdraw (2.977778,0.4875)
+ --(2.852778,0.4875)\dpicstop
+\filldraw[line width=0bp](2.827778,-0.1)
+ --(2.852778,-0.2)
+ --(2.877778,-0.1) --cycle\dpicstop
+\dpicdraw (2.852778,0.4875)
+ --(2.852778,-0.177094)\dpicstop
+\dpicdraw[fill=black](2.852778,0) circle (0.007874in)\dpicstop
+\dpicdraw (2.852778,0)
+ --(0.5875,0)\dpicstop
+\end{tikzpicture}
+\begin{tikzpicture}[scale=2.54]
+% dpic version 2020.06.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
+\draw (0,0) node[left=-2bp]{\sf C };
+\draw (0,0.825) node[left=-2bp]{\sf A0 };
+\draw (0,1.125) node[left=-2bp]{\sf A1 };
+\draw (0,1.425) node[left=-2bp]{\sf A2 };
+\dpicdraw (0,1.425)
+ --(0.375,1.425)\dpicstop
+\dpicdraw (0.55,1.425)
+ --(0.375,1.325)
+ --(0.375,1.525)
+ --(0.55,1.425)\dpicstop
+\dpicdraw (0.5875,1.425) circle (0.014764in)\dpicstop
+\dpicdraw (0.625,1.425)
+ --(0.875,1.425)\dpicstop
+\dpicdraw (1.125,1.425)
+ --(0.95,1.325)
+ --(0.95,1.525)
+ --(1.125,1.425)\dpicstop
+\dpicdraw (0.9125,1.425) circle (0.014764in)\dpicstop
+\dpicdraw (0,1.125)
+ --(0.375,1.125)\dpicstop
+\dpicdraw (0.55,1.125)
+ --(0.375,1.025)
+ --(0.375,1.225)
+ --(0.55,1.125)\dpicstop
+\dpicdraw (0.5875,1.125) circle (0.014764in)\dpicstop
+\dpicdraw (0.625,1.125)
+ --(0.875,1.125)\dpicstop
+\dpicdraw (1.125,1.125)
+ --(0.95,1.025)
+ --(0.95,1.225)
+ --(1.125,1.125)\dpicstop
+\dpicdraw (0.9125,1.125) circle (0.014764in)\dpicstop
+\dpicdraw (0,0.825)
+ --(0.375,0.825)\dpicstop
+\dpicdraw (0.55,0.825)
+ --(0.375,0.725)
+ --(0.375,0.925)
+ --(0.55,0.825)\dpicstop
+\dpicdraw (0.5875,0.825) circle (0.014764in)\dpicstop
+\dpicdraw (0.625,0.825)
+ --(0.875,0.825)\dpicstop
+\dpicdraw (1.125,0.825)
+ --(0.95,0.725)
+ --(0.95,0.925)
+ --(1.125,0.825)\dpicstop
+\dpicdraw (0.9125,0.825) circle (0.014764in)\dpicstop
+\dpicdraw (0.5875,0)
+ --(0.4125,-0.1)
+ --(0.4125,0.1)
+ --(0.5875,0)\dpicstop
+\dpicdraw (0.316667,0.675)
+ --(0.194444,0.675)\dpicstop
+\dpicdraw (0.198957,0.677179)
+ ..controls (0.245009,0.581799) and (0.245392,0.470695)
+ ..(0.2,0.375)\dpicstop
+\dpicdraw (0.194444,0.375)
+ --(0.316667,0.375)\dpicstop
+\dpicdraw (0.316667,0.675)
+ ..controls (0.417105,0.675) and (0.508302,0.616374)
+ ..(0.55,0.525)\dpicstop
+\dpicdraw (0.316667,0.375)
+ ..controls (0.417105,0.375) and (0.508302,0.433626)
+ ..(0.55,0.525)\dpicstop
+\dpicdraw (0.5875,0.525) circle (0.014764in)\dpicstop
+\dpicdraw (0.944444,0.375)
+ --(0.822222,0.375)\dpicstop
+\dpicdraw (0.826735,0.377179)
+ ..controls (0.872787,0.281799) and (0.87317,0.170695)
+ ..(0.827778,0.075)\dpicstop
+\dpicdraw (0.822222,0.075)
+ --(0.944444,0.075)\dpicstop
+\dpicdraw (0.944444,0.375)
+ ..controls (1.044883,0.375) and (1.136079,0.316374)
+ ..(1.177778,0.225)\dpicstop
+\dpicdraw (0.944444,0.075)
+ ..controls (1.044883,0.075) and (1.136079,0.133626)
+ ..(1.177778,0.225)\dpicstop
+\dpicdraw (1.215278,0.225) circle (0.014764in)\dpicstop
+\dpicdraw (2.577778,1.1625)
+ --(2.377778,1.1625)
+ --(2.377778,1.4625)
+ --(2.577778,1.4625)\dpicstop
+\dpicdraw (2.577778,1.4625)
+ ..controls (2.66062,1.4625) and (2.727778,1.395343)
+ ..(2.727778,1.3125)
+ ..controls (2.727778,1.229657) and (2.66062,1.1625)
+ ..(2.577778,1.1625)\dpicstop
+\dpicdraw (2.577778,0.1875)
+ --(2.377778,0.1875)
+ --(2.377778,0.4875)
+ --(2.577778,0.4875)\dpicstop
+\dpicdraw (2.577778,0.4875)
+ ..controls (2.66062,0.4875) and (2.727778,0.420343)
+ ..(2.727778,0.3375)
+ ..controls (2.727778,0.254657) and (2.66062,0.1875)
+ ..(2.577778,0.1875)\dpicstop
+\dpicdraw (3.177778,0.4125)
+ --(2.977778,0.4125)
+ --(2.977778,0.7125)
+ --(3.177778,0.7125)\dpicstop
+\dpicdraw (3.177778,0.7125)
+ ..controls (3.26062,0.7125) and (3.327778,0.645343)
+ ..(3.327778,0.5625)
+ ..controls (3.327778,0.479657) and (3.26062,0.4125)
+ ..(3.177778,0.4125)\dpicstop
+\dpicdraw (3.668802,1.3875)
+ --(3.54658,1.3875)\dpicstop
+\dpicdraw (3.551093,1.389679)
+ ..controls (3.597145,1.294299) and (3.597528,1.183195)
+ ..(3.552136,1.0875)\dpicstop
+\dpicdraw (3.54658,1.0875)
+ --(3.668802,1.0875)\dpicstop
+\dpicdraw (3.668802,1.3875)
+ ..controls (3.769241,1.3875) and (3.860437,1.328874)
+ ..(3.902136,1.2375)\dpicstop
+\dpicdraw (3.668802,1.0875)
+ ..controls (3.769241,1.0875) and (3.860437,1.146126)
+ ..(3.902136,1.2375)\dpicstop
+\dpicdraw (3.939636,1.2375) circle (0.014764in)\dpicstop
+\dpicdraw (3.668802,0.5625)
+ --(3.54658,0.5625)\dpicstop
+\dpicdraw (3.551093,0.564679)
+ ..controls (3.597145,0.469299) and (3.597528,0.358195)
+ ..(3.552136,0.2625)\dpicstop
+\dpicdraw (3.54658,0.2625)
+ --(3.668802,0.2625)\dpicstop
+\dpicdraw (3.668802,0.5625)
+ ..controls (3.769241,0.5625) and (3.860437,0.503874)
+ ..(3.902136,0.4125)\dpicstop
+\dpicdraw (3.668802,0.2625)
+ ..controls (3.769241,0.2625) and (3.860437,0.321126)
+ ..(3.902136,0.4125)\dpicstop
+\dpicdraw (3.939636,0.4125) circle (0.014764in)\dpicstop
+\draw (2.127778,-0.241667) node[below=-2bp]{\sf {\sl To other latches}};
+\dpicdraw (0.225642,0.6)
+ --(0,0.6)\dpicstop
+\draw (0,0.6) node[left=-2bp]{\sf D };
+\dpicdraw (0.225642,0.45)
+ --(0,0.45)\dpicstop
+\draw (0,0.45) node[left=-2bp]{\sf E };
+\dpicdraw[fill=black](0.100642,0.45) circle (0.007874in)\dpicstop
+\dpicdraw (0.100642,0.45)
+ --(0.100642,0.15)
+ --(0.85342,0.15)\dpicstop
+\dpicdraw (0,0)
+ --(0.4125,0)\dpicstop
+\dpicdraw[fill=black](0.75,1.425) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,1.425)
+ --(0.75,1.275)\dpicstop
+\dpicdraw (0.75,1.275)
+ --(1.627778,1.275)\dpicstop
+\filldraw[line width=0bp](1.602778,-0.1)
+ --(1.627778,-0.2)
+ --(1.652778,-0.1) --cycle\dpicstop
+\dpicdraw (1.627778,1.275)
+ --(1.627778,-0.177094)\dpicstop
+\dpicdraw[fill=black](0.75,1.125) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,1.125)
+ --(0.75,0.975)\dpicstop
+\dpicdraw (0.75,0.975)
+ --(1.502778,0.975)\dpicstop
+\filldraw[line width=0bp](1.477778,-0.1)
+ --(1.502778,-0.2)
+ --(1.527778,-0.1) --cycle\dpicstop
+\dpicdraw (1.502778,0.975)
+ --(1.502778,-0.177094)\dpicstop
+\dpicdraw[fill=black](0.75,0.825) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,0.825)
+ --(0.75,0.675)\dpicstop
+\dpicdraw (0.75,0.675)
+ --(1.377778,0.675)\dpicstop
+\filldraw[line width=0bp](1.352778,-0.1)
+ --(1.377778,-0.2)
+ --(1.402778,-0.1) --cycle\dpicstop
+\dpicdraw (1.377778,0.675)
+ --(1.377778,-0.177094)\dpicstop
+\dpicdraw[fill=black](0.75,0.526089) circle (0.007874in)\dpicstop
+\dpicdraw (0.75,0.526089)
+ --(0.75,0.3)
+ --(0.85342,0.3)\dpicstop
+\dpicdraw (2.377778,1.425)
+ --(1.877778,1.425)\dpicstop
+\filldraw[line width=0bp](1.852778,-0.1)
+ --(1.877778,-0.2)
+ --(1.902778,-0.1) --cycle\dpicstop
+\dpicdraw (1.877778,1.425)
+ --(1.877778,-0.177094)\dpicstop
+\dpicdraw (2.377778,1.35)
+ --(2.002778,1.35)\dpicstop
+\filldraw[line width=0bp](1.977778,-0.1)
+ --(2.002778,-0.2)
+ --(2.027778,-0.1) --cycle\dpicstop
+\dpicdraw (2.002778,1.35)
+ --(2.002778,-0.177094)\dpicstop
+\dpicdraw (2.377778,1.275)
+ --(2.127778,1.275)\dpicstop
+\filldraw[line width=0bp](2.102778,-0.1)
+ --(2.127778,-0.2)
+ --(2.152778,-0.1) --cycle\dpicstop
+\dpicdraw (2.127778,1.275)
+ --(2.127778,-0.177094)\dpicstop
+\dpicdraw (2.377778,1.2)
+ --(2.252778,1.2)\dpicstop
+\filldraw[line width=0bp](2.227778,-0.1)
+ --(2.252778,-0.2)
+ --(2.277778,-0.1) --cycle\dpicstop
+\dpicdraw (2.252778,1.2)
+ --(2.252778,-0.177094)\dpicstop
+\dpicdraw (1.125,1.425)
+ --(1.877778,1.425)\dpicstop
+\dpicdraw[fill=black](1.877778,1.425) circle (0.007874in)\dpicstop
+\dpicdraw (1.125,1.125)
+ --(2.002778,1.125)\dpicstop
+\dpicdraw[fill=black](2.002778,1.125) circle (0.007874in)\dpicstop
+\dpicdraw (1.125,0.825)
+ --(2.127778,0.825)\dpicstop
+\dpicdraw[fill=black](2.127778,0.825) circle (0.007874in)\dpicstop
+\dpicdraw (0.625,0.525)
+ --(2.252778,0.526089)\dpicstop
+\dpicdraw[fill=black](2.252778,0.526089) circle (0.007874in)\dpicstop
+\dpicdraw (2.377778,0.45)
+ --(1.877778,0.45)\dpicstop
+\dpicdraw[fill=black](1.877778,0.45) circle (0.007874in)\dpicstop
+\dpicdraw (2.377778,0.375)
+ --(2.002778,0.375)\dpicstop
+\dpicdraw[fill=black](2.002778,0.375) circle (0.007874in)\dpicstop
+\dpicdraw (2.377778,0.3)
+ --(2.127778,0.3)\dpicstop
+\dpicdraw[fill=black](2.127778,0.3) circle (0.007874in)\dpicstop
+\dpicdraw (1.252778,0.225)
+ --(2.377778,0.225)\dpicstop
+\dpicdraw[fill=black](1.752778,0.225) circle (0.007874in)\dpicstop
+\filldraw[line width=0bp](1.727778,-0.1)
+ --(1.752778,-0.2)
+ --(1.777778,-0.1) --cycle\dpicstop
+\dpicdraw (1.752778,0.225)
+ --(1.752778,-0.177094)\dpicstop
+\dpicdraw (2.727778,1.3125)
+ --(3.577778,1.3125)\dpicstop
+\dpicdraw (3.977136,1.2375)
+ --(4.102136,1.2375)\dpicstop
+\dpicdraw[fill=black](4.102136,1.2375) circle (0.007874in)\dpicstop
+\dpicdraw (4.102136,1.2375)
+ --(4.227136,1.2375)\dpicstop
+\draw (4.227136,1.2375) node[right=-2bp]{\sf Q7};
+\dpicdraw (4.102136,1.2375)
+ --(4.102136,0.9875)
+ --(2.852778,0.7625)\dpicstop
+\dpicdraw (2.852778,0.7625)
+ --(2.852778,0.6375)
+ --(2.977778,0.6375)\dpicstop
+\dpicdraw (3.577778,1.1625)
+ --(2.852778,1.1625)\dpicstop
+\dpicdraw (2.852778,1.1625)
+ --(2.852778,1.0375)
+ --(4.102136,0.6625)\dpicstop
+\dpicdraw (4.102136,0.6625)
+ --(4.102136,0.413589)
+ --(3.977136,0.4125)\dpicstop
+\dpicdraw (3.327778,0.5625)
+ --(3.452778,0.5625)\dpicstop
+\dpicdraw (3.452778,0.5625)
+ --(3.452778,0.4875)
+ --(3.577778,0.4875)\dpicstop
+\dpicdraw (2.727778,0.3375)
+ --(3.577778,0.3375)\dpicstop
+\dpicdraw (2.977778,0.4875)
+ --(2.852778,0.4875)\dpicstop
+\filldraw[line width=0bp](2.827778,-0.1)
+ --(2.852778,-0.2)
+ --(2.877778,-0.1) --cycle\dpicstop
+\dpicdraw (2.852778,0.4875)
+ --(2.852778,-0.177094)\dpicstop
+\dpicdraw[fill=black](2.852778,0) circle (0.007874in)\dpicstop
+\dpicdraw (2.852778,0)
+ --(0.5875,0)\dpicstop
+\end{tikzpicture}
diff --git a/graphics/circuit_macros/examples/nsvg/dev/tikztosvg b/graphics/circuit_macros/examples/nsvg/dev/tikztosvg
new file mode 100644
index 0000000000..8e9523347c
--- /dev/null
+++ b/graphics/circuit_macros/examples/nsvg/dev/tikztosvg
@@ -0,0 +1,181 @@
+#!/bin/bash
+
+puts()
+{
+ echo "[$1] $2"
+}
+
+error()
+{
+ puts "ERROR" "$1" r
+
+ if [ -n "$2" ]
+ then
+ exit $2
+ else
+ exit 1
+ fi
+}
+
+message()
+{
+ puts "TIKZTOSVG" "$1" g
+}
+
+showHelp()
+{
+ man tikztosvg
+ exit 0
+}
+
+showVersion()
+{
+ echo 0.1.0
+ exit 0
+}
+
+if [ -z "$(which xelatex)" ]
+then
+ error "xelatex could not be found"
+fi
+
+if [ -z "$(which pdf2svg)" ]
+then
+ error "pdf2svg could not be found"
+fi
+
+# Parsing the arguments
+PACKAGES=()
+while [ $# -gt 1 ]
+do
+ case "$1" in
+ -h|--help)
+ showHelp
+ ;;
+ -v|--version)
+ showVersion
+ ;;
+ -p|--package)
+ if [ -z "$2" ]
+ then
+ error "Unnexpected EOF"
+ else
+ PACKAGES+=("$2")
+ shift
+ shift
+ fi
+ ;;
+ -o|--output)
+ if [ -n "$OUTPUT" ]
+ then
+ error "The output path was specified multiple times"
+ else if [ -z "$2" ]
+ then
+ error "Unexpected EOF"
+ exit 1
+ else
+ OUTPUT="$2"
+ shift
+ shift
+ fi
+ fi
+ ;;
+ -q|--quit)
+ QUIET=1
+ shift
+ ;;
+ *)
+ error "Unexpected token: \"$1\""
+ ;;
+ esac
+done
+
+case "$1" in
+ -h|--help)
+ showHelp
+ ;;
+ -v|--version)
+ showVersion
+ ;;
+ "")
+ error "No input path provided"
+ ;;
+ *)
+ INPUT="$1"
+esac
+
+if [ -z "$OUTPUT" ]
+then
+ OUTPUT="$(echo $(basename $INPUT) | cut -d "." -f1)"
+fi
+
+TEMP_DIR="$(mktemp -d)"
+TEX_FILE="$TEMP_DIR/tmp.tex"
+
+# Generate the LaTeX document
+echo "\documentclass[crop,tikz,multi=false]{standalone}" > $TEX_FILE
+
+for PACKAGE in "${PACKAGES[@]}"
+do
+ echo "\usepackage{$PACKAGE}" >> $TEX_FILE
+done
+
+echo "\begin{document}" >> $TEX_FILE
+echo "\huge" >> $TEX_FILE
+
+cat $INPUT >> $TEX_FILE
+
+if [ $? -ne 0 ]
+then
+ rm $TEMP_DIR -r
+ error "File not found: $INPUT"
+fi
+
+echo "\end{document}" >> $TEX_FILE
+
+if [ -z "$QUIET" ]
+then
+ message "Rendering the LaTeX document. . ."
+ xelatex -output-directory=$TEMP_DIR $TEX_FILE
+else
+ xelatex -halt-on-error -output-directory=$TEMP_DIR $TEX_FILE 1> /dev/null 2>&1
+fi
+
+S=$?
+if [ $S -ne 0 ]
+then
+ rm $TEMP_DIR -r
+ if [ -z "$QUIET" ]
+ then
+ error "xelatex exited with code $S" $S
+ else
+ exit $S
+ fi
+fi
+
+if [ -z "$QUIET" ]
+then
+ message "Converting the output to SVG. . ."
+fi
+
+pdf2svg "$TEMP_DIR/tmp.pdf" $OUTPUT 1
+
+S=$?
+if [ $S -ne 0 ]
+then
+ rm $TEMP_DIR -r
+ if [ -z "$QUIET" ]
+ then
+ error "pdf2svg exited with code $S" $S
+ else
+ exit $S
+ fi
+fi
+
+if [ -z "$QUIET" ]
+then
+ message "Done!"
+fi
+
+rm "$TEMP_DIR" -r
+
diff --git a/graphics/circuit_macros/examples/nsvg/dev/tstSVG.htmx b/graphics/circuit_macros/examples/nsvg/dev/tstSVG.htmx
new file mode 100644
index 0000000000..9e1884c146
--- /dev/null
+++ b/graphics/circuit_macros/examples/nsvg/dev/tstSVG.htmx
@@ -0,0 +1,62 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<HTML>
+<HEAD>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<!--meta http-equiv="Content-Script-Type" content="text/javascript"-->
+<TITLE>SVG Examples: Circuit_macros Version XXX</TITLE>
+<style type="text/css">
+.svg{display:none}
+*>.svg{display:inline}
+</style>
+<link rel="shortcut icon" href="../Circuit_macros.ico" type="image/x-icon" />
+</HEAD>
+
+<BODY>
+<H2>SVG Circuit_macros examples, Version XXX</H2>
+<hr>
+
+<p>
+These diagrams are the result of applying pdf2svg to examples.pdf.
+ <p>
+ Click on the link to view the source of each diagram.
+</p>
+<hr>
+
+define(`for_',`ifelse(eval(`$1'!=(`$2'+(`$3'))),1,`pushdef(`m4x',`$1') $4
+ popdef(`m4x')for_(eval(`$1'+(`$3')),`$2',`$3',`$4')')')
+
+define(`cfig',`
+<p>
+
+<!--[if lte IE 8]><embed src="$1.svg" sinclude($1.siz)><![endif]-->
+
+<!--[if gte IE 9]>
+<object dx="4" data="$1.svg" width="612" height="792" type="image/svg+xml" class="img">
+ </object> <![endif]-->
+
+<!--[if !IE]><!-->
+<object data="$1.svg" width="612" height="792" type="image/svg+xml" class="img">
+ </object> <!--<![endif]-->
+
+<br>
+<!--
+<a href="$1.txt" TYPE="text/plain" TARGET="_blank" alt="$1">$1.m4</a>
+--
+</p>
+<hr>')
+
+define(`m4tt',`<g style="font-family:monospace">')
+
+<!--
+<embed pluginspage="http://www.adobe.com/svg/viewer/install/" />
+-->
+
+
+cfig(test)
+#for_(1,46,1,
+#cfig(examples_```'''m4x)
+#)
+
+</BODY>
+</HTML>
diff --git a/graphics/circuit_macros/examples/nsvg/examples.pdf b/graphics/circuit_macros/examples/nsvg/examples.pdf
new file mode 100644
index 0000000000..b52e15195e
--- /dev/null
+++ b/graphics/circuit_macros/examples/nsvg/examples.pdf
Binary files differ
diff --git a/graphics/circuit_macros/examples/nsvg/examplesSVG.htmx b/graphics/circuit_macros/examples/nsvg/examplesSVG.htmx
new file mode 100644
index 0000000000..bb2265a90f
--- /dev/null
+++ b/graphics/circuit_macros/examples/nsvg/examplesSVG.htmx
@@ -0,0 +1,70 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<HTML>
+<HEAD>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<!--meta http-equiv="Content-Script-Type" content="text/javascript"-->
+<TITLE>SVG Examples: Circuit_macros Version XXX</TITLE>
+<style type="text/css">
+.svg{display:none}
+*>.svg{display:inline}
+</style>
+<link rel="shortcut icon" href="../Circuit_macros.ico" type="image/x-icon" />
+</HEAD>
+
+<BODY>
+<H2>SVG Circuit_macros examples, Version XXX</H2>
+<hr>
+
+<p>
+ These diagrams are in .svg format.
+ <A HREF="examples.pdf">Pdf</A>
+ and
+ <A HREF="examples.html">png</A>
+ versions are also available.
+ The PDF equivalent can be found in examples.pdf of the distribution.
+</p>
+ <p>
+ Click on the link to view the source of each diagram.
+</p>
+<hr>
+
+define(`for_',`ifelse(eval(`$1'!=(`$2'+(`$3'))),1,`pushdef(`m4x',`$1') $4
+ popdef(`m4x')for_(eval(`$1'+(`$3')),`$2',`$3',`$4')')')
+
+define(`cfig',`
+<p>
+
+<!--[if lte IE 8]><embed src="$1.svg" sinclude($1.siz)><![endif]-->
+
+<!--[if gte IE 9]>
+<object dx="4" data="$1.svg" width="612" height="792" type="image/svg+xml" class="img">
+ </object> <![endif]-->
+
+<!--[if !IE]><!-->
+<object data="$1.svg" width="612" height="792" type="image/svg+xml" class="img">
+ </object> <!--<![endif]-->
+
+<br>
+<!--
+<a href="$1.txt" TYPE="text/plain" TARGET="_blank" alt="$1">$1.m4</a>
+--
+</p>
+<hr>')
+
+define(`m4tt',`<g style="font-family:monospace">')
+
+<!--
+<embed pluginspage="http://www.adobe.com/svg/viewer/install/" />
+-->
+
+<p>
+These diagrams are the result of applying pdf2svg to examples.pdf.
+
+
+for_(1,46,1,
+cfig(examples_```'''m4x)
+)
+
+</BODY>
+</HTML>
diff --git a/graphics/circuit_macros/examples/oFlow.m4 b/graphics/circuit_macros/examples/oFlow.m4
new file mode 100644
index 0000000000..f4fa766f1a
--- /dev/null
+++ b/graphics/circuit_macros/examples/oFlow.m4
@@ -0,0 +1,108 @@
+.PS
+# Flow.m4
+gen_init
+ifdef(`FlowchartDefs_',,`include(FlowchartDefs.m4)')
+
+# Could use xcolor with option dvipsnames but define color here for portability:
+define(`Thistle',`rgbstring(0.85,0.75,0.85)')dnl
+define(`RubineRed',`rgbstring(0.81,0,0.35)')dnl
+define(`YellowGreen',`rgbstring(0.68,1,0.18)')dnl
+define(`SeaGreen',`rgbstring(0.13,0.70,0.67)')dnl
+define(`Goldenrod',`rgbstring(0.85,0.65,0.13)')dnl
+
+ linethick_(1.0)
+ arrowwid = 0.05
+ arrowht = 0.1
+ fillval = 0.8
+ down
+
+Case: Fcase(,
+ "Test 1",[Fbox("Task 1",, shaded Thistle); W:last [].W; N:last [].N
+ arrow down linewid/3 from last [].S
+ Fbox("Task 1.5",, shaded Thistle) with .N at Here
+ E:last [].E; S:last [].S],
+ "Test 2",Fbox("Task 2" "is bigger", wid fboxwid*1.2 ht fboxht*3/2, \
+ shaded SeaGreen),
+ "Test 3",Fbox("Task 3",, shaded RubineRed)dnl
+ )
+
+ "\sl .N" at Case.N rjust above; "\sl .S" at Case.S rjust below
+ "\sl .E" at Case.E ljust; "\sl .W" at Case.W rjust
+ "\sl Case statement" below at Case.s+(0,-0.2)
+ move to Case.nw+(-12bp__,10bp__)
+
+Whiledo: Fwhiledo("$i < n$",,,Fbox("Task"),"T" above ljust at Test.E) \
+ with .nw at Case.ne+(0.25,0)
+
+ "\sl .N" at Whiledo.N rjust; "\sl .S" at Whiledo.S rjust below
+ "\sl .E" at Whiledo.E ljust; "\sl .W" at Whiledo.W rjust
+ "\sl While-do" below at Whiledo.s+(0,-0.2)
+
+Repeatuntil: Frepeatuntil("$n \geq 5$",,,Fbox("Task"),
+ "T" at Test.E above ljust) with .nw at Whiledo.sw + (0.25,-1)
+
+ "\sl .N" at Repeatuntil.N rjust above; "\sl .S" at Repeatuntil.S rjust below
+ "\sl .E" at Repeatuntil.E ljust; "\sl .W" at Repeatuntil.W rjust
+ "\sl Repeat-until" below at Repeatuntil.s+(0,-0.2)
+
+Ifthenelse: Fifthenelse("$A<B$",,,
+ Fbox("False"),
+ Fbox("True",ht fboxht*1.2 wid fboxwid)dnl
+ ) with .nw at Repeatuntil.sw +(0.5,-0.5)
+
+ "\sl .N" at Ifthenelse.N rjust above; "\sl .S" at Ifthenelse.S below rjust
+ "\sl .E" at Ifthenelse.E ljust; "\sl .W" at Ifthenelse.W rjust
+ "\sl If-then-else" below at Ifthenelse.s+(0,-0.3) \
+ "\sl (the True and False tasks are optional)"
+
+# Compound statement:
+[ right
+ ellipse shaded YellowGreen "Start"
+ arrow right linewid/2
+
+ Fbox("First task") with .W at Here
+ arrow down linewid/2 from last [].S
+
+ Fifthenelse("Test 1",,,
+ Frepeatuntil("$i \geq 5$",,shaded Goldenrod,Fbox("Task")),
+ Fifthenelse("$A < B$",,shaded Goldenrod,
+ Fbox("Left"),
+ Fbox("Right"),
+ "T" at Test.E above ljust),
+ "T" at Test.E above ljust) with .N at Here
+
+ A: arrow down 0.25 from last [].S ] with .nw at Case.sw + (-12bp__,-0.7)
+
+ "\sl Compound statement" below at last [].A.end
+
+Example: [ fillvalue = 0.8; awid = linewid/2; right_
+ Start: ellipse wid boxwid/2 ht boxwid/3 shaded "green"
+ arrow right_ awid
+ B1: Fbox("Planejamento")
+ B2: Fbox(`"Execu\c{c}\~ao"') with .W at B1.E+(awid*3,0)
+ B3: Fbox(`"Sele\c{c}\~ao"') with .W at B2.E+(awid*3,0)
+ LT: Ftest(`"Avalia\c{c}\~ao do" "Planejamento"',
+ wid fboxwid*1.5 ht fboxht*2.0,
+ shaded YellowGreen,
+ "Correto" at Box.e above ljust;
+ "Incompleto" at Box.w above rjust) with .S at 0.5 between B1.ne and B2.nw
+ arrow from B1.E to (LT.S,B1.E) then to LT.S
+ arrow from LT.W to (B1.N,LT.W) then to B1.N
+ arrow from LT.E to (B2.N,LT.E) then to B2.N
+ RT: Ftest(`"Avalia\c{c}\~ao da" "Execu\c{c}\~ao"',
+ wid fboxwid*1.5 ht fboxht*2.0,
+ shaded YellowGreen,
+ "Correto" at Box.e below ljust;
+ "Incompleto" at Box.w below rjust) with .N at 0.5 between B2.se and B3.sw
+ arrow from B2.E to (RT.N,B2.E) then to RT.N
+ arrow from RT.W to (B2.S,RT.W) then to B2.S
+ arrow from RT.E to (B3.S,RT.E) then to B3.S
+ B4: Fbox(`"Extra\c{c}\~ao"') with .S at B3.N+(0,awid)
+ arrow from B3.N to B4.S
+ arrow right_ awid from B4.E
+ B5: Fbox(`"Conclus\~ao"')
+ ellipse wid boxwid/2 ht boxwid/3 shaded "red" at (B5.S,Start)
+ arrow down_ awid from B5.S to last ellipse.n
+] with .nw at last [].sw+(0,-fboxht)
+
+.PE
diff --git a/graphics/circuit_macros/examples/psfrag/Makefile b/graphics/circuit_macros/examples/psfrag/Makefile
index 314d8c3ef1..e79d5bee4d 100644
--- a/graphics/circuit_macros/examples/psfrag/Makefile
+++ b/graphics/circuit_macros/examples/psfrag/Makefile
@@ -31,7 +31,8 @@ FIGS = Adder.eps Alogix.eps ABlogix.eps Antennas.eps Audio.eps AmpTable.eps \
Emarrows.eps Flow.eps Fuses.eps \
GrayCode.eps Grounds.eps Headers.eps Heathkit.eps Jack.eps \
I2L.eps Inclpdf.eps \
- Logic.eps Loglog.eps MC.eps Mixer.eps MotorControl.eps Multiplexer.eps \
+ Lyap.eps Logic.eps Loglog.eps \
+ MC.eps Mixer.eps MotorControl.eps Multiplexer.eps \
NLG.eps NPDT.eps Nport.eps \
Opamp.eps Optoiso.eps Pconn.eps PushPull.eps Quantum.eps \
Rectifiers.eps Relay.eps Rotbox.eps \
diff --git a/graphics/circuit_macros/examples/random.m4 b/graphics/circuit_macros/examples/random.m4
index d375cb6eb4..88c2ce41db 100644
--- a/graphics/circuit_macros/examples/random.m4
+++ b/graphics/circuit_macros/examples/random.m4
@@ -8,6 +8,7 @@ s_init(random)
################################################################
# hscale(right length,nlabels,
# minlabel,maxlabel,[T][N])
+# arg5=T: top axis, N: nolabels
define(`hscale',`[ define(`hs_nl',`ifelse(`$2',,5,`$2')')
A: line `$1' ; Start: A.start; End: A.end
td = 1/(hs_nl-1)*A.len/5
@@ -26,6 +27,7 @@ s_init(random)
]')
# vscale(up length,nlabels,
# minlabel,maxlabel,[R][N] )
+# arg5=R: right axis, N: nolabels
define(`vscale',`[ define(`vs_nl',`ifelse(`$2',,5,`$2')')
A: line `$1' ; Start: A.start; End: A.end
td = 1/(vs_nl-1)*A.len/5
@@ -48,7 +50,7 @@ s_init(random)
################################################################
[
- n = 2000
+ n = 2000 # number of samples
stddev = 0.25
graphsize = 2
diff --git a/graphics/circuit_macros/examples/shapes.m4 b/graphics/circuit_macros/examples/shapes.m4
index 914778c73c..646584da7a 100644
--- a/graphics/circuit_macros/examples/shapes.m4
+++ b/graphics/circuit_macros/examples/shapes.m4
@@ -43,6 +43,10 @@ define(`cylinder3D',`[ Start: (0,0)
`cone3D(xdispl,ydispl,zdispl,diameter,
[colored "color"])'
+ `internal positions:
+ Start (centre of base),
+ End (point),
+ C (axis centre)'
define(`cone3D',`[ Start: (0,0)
xdispl = `$1'; ydispl = `$2'; zdispl = `$3'
define(`M4CL',`xdispl,ydispl,zdispl')dnl
diff --git a/graphics/circuit_macros/examples/svg/AutoencoderSVG.m4 b/graphics/circuit_macros/examples/svg/AutoencoderSVG.m4
new file mode 100644
index 0000000000..05921e1bcc
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/AutoencoderSVG.m4
@@ -0,0 +1,97 @@
+.PS
+# Masked_Autoencoder.m4
+gen_init
+NeedDpicTools
+svg_font(sans-serif,12bp__,textoffset)
+
+ circlerad = 0.2
+ circlesep = 0.5
+ rowsep = 0.9
+ arrowht = arrowht*0.8
+ arrowwid = arrowwid*1.4
+ linethick = 1
+
+define plan {
+ m = 0
+ for i=1 to 4 do {
+ for j=1 to ncircles[i] do {
+ exec sprintf("C[i,j]: circle thick 1.6 \"%g\" at Here",m+j)
+ if i>1 then {
+ if "$1"=="" then {
+ for k=1 to ncircles[i-1] do { arrow from C[i,j] to C[i-1,k] chop } }
+ }
+ if j!=ncircles[i] then { move right_ circlesep from C[i,j] }
+ }
+ m += ncircles[i]
+ case(i,
+ move to C[1,1]+(-circlesep/2,-rowsep),
+ move to C[2,1]+(0,-rowsep),
+ move to C[3,1]+(circlesep/2,-rowsep), )
+ }
+ }
+ gridsiz = 0.78/4
+define grid { [ SW: 0,0
+ for i=1 to $1 do {
+ move to (0,(0.5-i)*gridsiz)
+ exec sprintf("fv = $%g",2+i)
+ for j=1 to $2 do { fl = 1-(int(fv / 2^(j-1)) % 2)
+ box wid gridsiz ht gridsiz outlined "gray" shaded rgbstring(fl,fl,fl) }
+ } ]}
+
+define cxt {
+ m = 1
+ for i=2 to 4 do {
+ for j=1 to ncircles[i] do {
+ exec sprintf("narrows = $%g",m)
+ for k=1 to narrows do {
+ exec sprintf("cnum = $%g",m+k)
+ exec sprintf("arrow from C[i,j] to C[i-1,cnum] $%g chop", $+)
+ }
+ m += narrows+1
+ } } }
+
+B: box invis ht 8 wid 8
+[
+ array(ncircles,3,4,4,3)
+ plan()
+ svg_font(Times,12bp__,textoffset)
+ for j=1 to 3 do {
+ sprintf("svg_it(x)`'svg_sub(%g,60%)",j) at C[1,j].n+(0,2bp__) above
+ "svg_circ" at last ""+(-1bp__,1bp__)
+ sprintf("svg_it(x)`'svg_sub(%g,60%)",j) at C[4,j].s+(0,-2bp__) below
+ }
+
+ "V" at 0.5 between C[2,1].w and C[1,1].w
+ "W`'svg_sup(2)" at 0.5 between C[3,1].w and C[2,1].w
+ "W`'svg_sup(1)" at 0.5 between C[3,1].w and C[4,1].w
+
+GV: grid(3,4,0,15,6) with .w at C[2,4]+(circlerad*2,rowsep/2)
+ "=M`'svg_sup(V)" at GV.e ljust
+G2: grid(4,4,13,0,0,13) with .w at (GV.w,C[3,4]+(circlerad*2,rowsep/2))
+ "=M`'svg_sup(V`'svg_sup(2))" at G2.e ljust
+G1: grid(4,3,1,5,1,1) with .w at (GV.w,C[4,3]+(circlerad*2,rowsep/2))
+ "=M`'svg_sup(V`'svg_sup(1))" at G1.e ljust
+ command "</g>"
+
+ move to (GV.x+3*circlesep,C[1,1].y)
+ plan(3,1,2,1,2,2,1,2,1,2,2,3,1,2)
+ for i=2 to 4 do {
+ cxt(2,1,3,0,0,2,1,3, 0,4,1,2,3,4,0,0, 0,4,1,2,3,4,0, \
+ outlined rgbstring(0.5,0.5,0.5) shaded rgbstring(0.5,0.5,0.5) )
+ cxt(0,1,1,1,1,0, 2,2,3,0,2,2,3,2,2,3, 0,0,3,1,3,4,)
+ }
+ svg_font(Times,12bp__,textoffset)
+ for j=1 to 3 do { sprintf("svg_it(x)`'svg_sub(%g,60%)",j) \
+ at C[4,j].s+(0,-2bp__) below }
+ arrow dotted from C[1,2].n up circlesep/2
+ "svg_it(p(x`'svg_sub(2)))" at Here+(0,2bp__) above
+ "svg_it(p(x`'svg_sub(3)|x`'svg_sub(2)))" at (C[1,3]+(circlesep/2,0),last "")
+ arrow dotted from C[1,3] to last "".s chop circlerad chop textoffset
+ "svg_it(p(x`'svg_sub(1)|x`'svg_sub(2),x`'svg_sub(3)))" \
+ at (C[1,1]+(-circlesep/2,0),last "")
+ arrow dotted from C[1,1] to last "".s chop circlerad chop textoffset
+ command "</g>"
+
+ ] at B
+ command "</g>"
+.PE
diff --git a/graphics/circuit_macros/examples/svg/Banking.m4 b/graphics/circuit_macros/examples/svg/Banking.m4
new file mode 100644
index 0000000000..630326f867
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/Banking.m4
@@ -0,0 +1,59 @@
+.PS
+#Banking.m4
+
+gen_init
+
+ scale = 2.54 # use cm
+ svg_font(Arial Black,11 bp__,2 bp__)
+ boxwid = 6.8
+ boxht = 4.5
+ linethick_(1.5)
+
+ define(`heading',
+ `<tspan font-style=\"bold\" font-size=\"120%\" fill=\"white\">`$1'</tspan>')
+ define(`subheading',
+ `<tspan fill=\"white\" font-size=\"75%\" font-style=\"bold\">[`$1']</tspan>')
+ define(`wtext',`<tspan fill=\"white\">`$1'</tspan>')
+
+ C: circle diam 2.6 colored "mediumblue"
+ Person: box rad boxht/4 colored "mediumblue" with .n at C.s+(0,C.rad/8) \
+ "heading(Personal Banking)" \
+ "" \
+ "heading(Customer)" \
+ "subheading(Person)" \
+ "" \
+ "wtext(A customer of the bank`,' with)" \
+ "wtext(personal bank accounts.)"
+
+ A1: arrow thick 1.5 dashed down 3.5 from Person.s
+ svg_font(Arial,11 bp__,2 bp__)
+ { box invis fill 1 ht 0.4 wid 1.0 "Uses" at A1 }
+ command "</g>"
+ Internet: box colored "steelblue" \
+ "heading(Internet Banking System)" \
+ "subheading(Software system)" \
+ "" \
+ "wtext(Allows customers to view)" \
+ "wtext(information about their bank)" \
+ "wtext(accounts`,' and make payments.)"
+
+ svg_font(Arial,11 bp__,2 bp__)
+ A2: arrow thick 1.5 dashed right 5.4 from Internet.e \
+ "Sends e-mail" above "using" below
+ command "</g>"
+ Email: box colored "slategrey" \
+ "heading(E-mail System)" \
+ "subheading(Software system)" \
+ "" \
+ "wtext(Internal Microsoft Exchange)" \
+ "wtext(e-mail system.)"
+
+ A3:arrow thick 1.5 dashed from Email.nw+(0.4,0) to Person.se+(0.3,Person.ht/5)
+ svg_font(Arial,11 bp__,2 bp__)
+ { box invis fill 1 ht 0.4 wid 3.3 "Sends e-mails to" at A3 }
+ command "</g>"
+
+# etc
+
+ command "</g>" # font
+.PE
diff --git a/graphics/circuit_macros/examples/svg/BtreeSVG.m4 b/graphics/circuit_macros/examples/svg/BtreeSVG.m4
index 312249605e..158b475b7b 100644
--- a/graphics/circuit_macros/examples/svg/BtreeSVG.m4
+++ b/graphics/circuit_macros/examples/svg/BtreeSVG.m4
@@ -2,7 +2,10 @@
# Btree.m4
# One way to draw a binary tree using pic macros
gen_init(svg_font(sans-serif,11bp__))
-circlerad = 0.30
+sinclude(tst.dim)
+s_init(Btree)
+Btree: [
+circlerad = 0.45
define n { [C: circle fill_(0.9) $1
if "$2" != "" then {
@@ -29,5 +32,76 @@ define Vega { n("Vega") }
# Build the tree from the root
S: Sirius
+
+ command "</g>" # end font
+]
+Ttree: [
+# TtreeSVG.m4
+svg_font(sans-serif,10bp__)
+
+# `Node(no in row, head [location],
+# displacement of top of body (.n) wrt head,
+# body Node 1, body Node 2, ...) '
+define(`Node',`
+ Head`$1': `$2'
+ ifelse(`$3',,,` Body`$1': [
+ Loopover_(`v',`v; define(`m4ct',m4Lx)',shift(shift(shift($@))))
+ ] with .n at Head`$1' + `$3'
+ connect(`$1',m4ct)')')
+
+define(`connect',`Bot: move from Head$1.sw-(0,5bp__) to Head$1.se-(0,5bp__)
+for_(1,`$2',1,
+ `Top: move from Body$1.Head`'m4x.nw+(0,2bp__) \
+ to Body$1.Head`'m4x.ne+(0,2bp__)
+ Mov: move from Head$1 to Body$1.Head`'m4x
+ if Bot.len*Top.len*Mov.len > 0 then {
+ line from Intersect_(Mov,Top) to Intersect_(Mov,Bot)}')')
+
+ vsep = 0.75
+define(`txw',`wid `$1'mm__')dnl scaled by 14/12 for 14 pt type
+
+ Node(1,"svg_it(h(h(h(x`'svg_sub(1),x`'svg_sub(2))," \
+ + "h(x`'svg_sub(3),x`'svg_sub(4))),h(h(x`'svg_sub(5),x`'svg_sub(6))," \
+ + "h(x`'svg_sub(7),x`'svg_sub(8)))))" txw(70) ,
+ (0,-vsep),
+ Node(1,"svg_it(h(h(x`'svg_sub(1),x`'svg_sub(2)),h(x`'svg_sub(3)," \
+ + "x`'svg_sub(4))))" txw(32) ,
+ (0,-vsep),
+ Node(1,"svg_it(h(x`'svg_sub(1),x`'svg_sub(2)))" txw(14) ,
+ (0,-vsep),
+ Node(1,"svg_it(x`'svg_sub(1):=((A,pk`'svg_sub(A)),h`'svg_sub(1)))" \
+ txw(29) ),
+ Node(2,"svg_it(x`'svg_sub(2):=((B,pk`'svg_sub(B)),h`'svg_sub(2)))" \
+ txw(29) with .n at last "".ne+(0.2,-vsep*2/3))),
+ Node(2,"svg_it(h(x`'svg_sub(3),x`'svg_sub(4)))" txw(14) \
+ with .nw at Head1.ne+(Body1.wid/2+0.1,0),
+ (0,-vsep),
+ Node(1,"svg_it(x`'svg_sub(3):=" \
+ + "((A,pk`'svg_prime`'svg_sub(A,,,-0.5ex)),h`'svg_sub(3)))" \
+ txw(29)),
+ Node(2,"svg_it(x`'svg_sub(4):=((D,pk`'svg_sub(D)),h`'svg_sub(4)))" \
+ txw(29) with .n at last "".ne+(0.2,-vsep*2/3)))),
+ Node(2,"svg_it(h(h(x`'svg_sub(5),x`'svg_sub(6)),h(x`'svg_sub(7)," \
+ + "x`'svg_sub(8))))" txw(29) with .nw at Head1.ne+(Body1.wid/2,0),
+ (0,-vsep),
+ Node(1, "svg_it(h(x`'svg_sub(5),x`'svg_sub(6)))" txw(14) ,
+ (0,-vsep*5/4),
+ Node(1,"svg_it(x`'svg_sub(5):=((E,pk`'svg_sub(E)),h`'svg_sub(5)))" \
+ txw(29) ),
+ Node(2,"svg_it(x`'svg_sub(6):=((H,pk`'svg_sub(H)),h`'svg_sub(6)))" \
+ txw(29) with .n at last "".ne+(0.2,-vsep*2/3))),
+ Node(2,"svg_it(h(x`'svg_sub(7),x`'svg_sub(8)))" txw(14) \
+ with .nw at Head1.ne+(Body1.wid/2+0.1,0),
+ (0,-vsep*5/4),
+ Node(1,"svg_it(x`'svg_sub(7):=" \
+ + "((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)),
+ 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)
+
command "</g>" # end font
.PE
diff --git a/graphics/circuit_macros/examples/svg/CctTableSVG.m4 b/graphics/circuit_macros/examples/svg/CctTableSVG.m4
index 3c79a32d6b..e46bb97a76 100644
--- a/graphics/circuit_macros/examples/svg/CctTableSVG.m4
+++ b/graphics/circuit_macros/examples/svg/CctTableSVG.m4
@@ -5,74 +5,91 @@ 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) = ebox'" ljust}
+ {resistor(,,E) ; move
+ "`resistor(,,E) = ebox'" ljust}
}
move down vm; right_
-{ {resistor(,,ES) ; move ;"`resistor(,,ES) '" ljust}
+{ {resistor(,,ES) ; move ; "`resistor(,,ES) '" ljust}
move right_ hm
- {resistor(,4,QR) ; move ;"`resistor(,4,QR) '" ljust}
+ {resistor(,,H) ; move ; "`resistor(,,H) '" ljust}
move right_ hm
- {resistor(,,H) ; move ;"`resistor(,,H) '" ljust}
+ {ebox(,,,0.5) ; move ; "`ebox(,,,0.5) '" ljust}
}
move down vm; right_
-{ {resistor(,,V) ; move ;"`resistor(,,V)'" ljust}
+{ {resistor(,,V) ; move ; "`resistor(,,V) '" ljust}
move right_ hm
- {ebox(,,,0.5) ; move ;"`ebox(,,,0.5)'" ljust}
+ {move down_ 0.05; right_
+ thermocouple ; move; "`thermocouple '" ljust; move up_ 0.05}
move right_ hm
- {ebox(,0.5,0.3) ; move ;"`ebox(,0.5,0.3)'" ljust}
+ {ebox(,0.5,0.3) ; move ; "`ebox(,0.5,0.3) '" ljust}
}
move down vm; right_
-{ {inductor ; move ;"`inductor'" ljust}
+{ {inductor ; move ; "`inductor '" ljust}
move right_ hm
- {inductor(,W); move ;"`inductor(,W)'" ljust}
+ {inductor(,W); move ; "`inductor(,W) '" ljust}
move right_ hm
- {inductor(,L); move ;"`inductor(,L)'" ljust}
+ {inductor(,L); move ; "`inductor(,L) '" ljust}
}
move down vm; right_
-{ {inductor(,,,M) ; move ;"`inductor(,,,M)'" ljust}
+{ {inductor(,,,M) ; move ; "`inductor(,,,M) '" ljust}
move right_ hm
- {inductor(,W,6,P); move ;"`inductor(,W,6,P)'" ljust}
+ {inductor(,W,6,P); move ; "`inductor(,W,6,P) '" ljust}
move right_ hm
- {ttmotor(,G) ; move ;"`ttmotor(,G)'" ljust}
+ {move right_ 0.2; ttmotor(,G) ; move ; "`ttmotor(,G) '" ljust}
}
move down vm; right_
-{ {capacitor ; move ;"`capacitor'" ljust}
+{ {capacitor ; move ; "`capacitor '" ljust}
move right_ hm
- {capacitor(,C); move ;"`capacitor(,C)'" ljust}
+ {capacitor(,C); move ; "`capacitor(,C) '" ljust}
move right_ hm
- {capacitor(,C+); move ;"`capacitor(,C+)'" ljust}
+ {capacitor(,C+); move ; "`capacitor(,C+) '" ljust}
}
move down vm; right_
-{ {capacitor(,P); move ;"`capacitor(,P)'" ljust}
+{ {capacitor(,P); move ; "`capacitor(,P) '" ljust}
move right_ hm
- {capacitor(,E); move ;"`capacitor(,E)'" ljust}
+ {capacitor(,E); move ; "`capacitor(,E) '" ljust}
move right_ hm
- {capacitor(,K); move ;"`capacitor(,K)'" ljust}
+ {capacitor(,K); move ; "`capacitor(,K) '" ljust}
}
move down 0.25; right_
-{ {capacitor(,M); move ;"`capacitor(,M)'" ljust}
+{ {capacitor(,M); move ; "`capacitor(,M) '" ljust}
move right_ hm
- {capacitor(,N); move ;"`capacitor(,N)'" ljust}
+ {capacitor(,N); move ; "`capacitor(,N) '" ljust}
move right_ hm
- {xtal ; move ;"`xtal'" ljust}
+ {xtal ; move ; "`xtal '" ljust}
}
move down 0.25; right_
-{ {memristor ; move;"`memristor'" ljust}
+{ {memristor ; move; "`memristor '" ljust}
move right_ hm
- {heater; move;"`heater'" ljust}
+ {heater; move; "`heater '" ljust}
move right_ hm
- {tline ; move;"`tline'" ljust}
+ {tline ; move; "`tline '" ljust}
}
move down 0.25; right_
-{ {gap ; move ;"`gap'" ljust}
+{ {move up_ 0.05; right_; gap ; move ; "`gap '" ljust}
+ move right_ hm
+ {gap(,,A) ; move ; "`gap(,,A) '" ljust}
move right_ hm
- {gap(,,A) ; move ;"`gap(,,A)'" ljust}
+ {arrowline ; move; "`arrowline '" ljust}
+}
+ move down 0.25; right_
+{ {lamp ; move; "`lamp '" 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_
+{ {pvcell ; move; "`pvcell '" ljust}
move right_ hm
- {arrowline ; move;"`arrowline'" ljust}
+ {arrester ; move ; "`arrester '" ljust}
}
command "</g>" # end font
diff --git a/graphics/circuit_macros/examples/svg/ConnectorsSVG.m4 b/graphics/circuit_macros/examples/svg/ConnectorsSVG.m4
index 59860a2d1e..67f89e5348 100644
--- a/graphics/circuit_macros/examples/svg/ConnectorsSVG.m4
+++ b/graphics/circuit_macros/examples/svg/ConnectorsSVG.m4
@@ -16,7 +16,7 @@ svg_rot_init(ConnectorsSVG)
"Raspberry Pi 4 GPIO" at last [].GPIO.s below
HD: HDMI_micro with .nw at last [].ne+(0.25,0.5)
- "Micro" rjust at HD.Base.sw+(0,10bp__) "HDMI" rjust
+ "Micro" rjust at HD.Base.sw "HDMI" rjust
S: USB_C_Socket with .sw at (HD.e.x+0.25,RPI.s.y)
"USB-C Socket" at S.Base.s below
diff --git a/graphics/circuit_macros/examples/svg/FlowSVG.m4 b/graphics/circuit_macros/examples/svg/FlowSVG.m4
index d0ba138493..f0f5b6df71 100644
--- a/graphics/circuit_macros/examples/svg/FlowSVG.m4
+++ b/graphics/circuit_macros/examples/svg/FlowSVG.m4
@@ -1,142 +1,15 @@
-divert(-1)
- FlowchartDefs.m4
- `Some experimental flow-chart macros.
- In the following, every subchart is in
- [] brackets, with .N, .S, .E and .W
- internally defined. Follow this convention
- if you create compound constructs.
-
- Generally, the first argument is one
- or more strings; the second adjusts
- the size, and the third can be used
- to add color, dashed lines, labels,
- or other embellishements. Default is
- grey fill if arg3 is blank.
-
- These macros have been renamed from earlier
- versions because of slight differences of
- arguments.'
-
-define(`FlowchartDefs_')
-
- `Default sizes:'
-define(`fboxwid',linewid*2)
-define(`fboxht',linewid*0.75)
-define(`farrowht',linewid*0.5)
-
- `Fbox( "text", wid expr ht expr,
- attributes ) The basic task box: arg1 may
- be 1 or more label strings. Attributes
- include box line and fill specs.
- To adjust the box size to the size of
- the typeset text, see the \boxdims macro
- in the manual. Example:
- Fbox("svg_it(x svg_symbol(&`#'60;) 1)",,
- shaded rgbstring(0.46,0.53,0.63))'
-define(`Fbox',`[ boxwid = fboxwid; boxht = fboxht
- Box: box `$2' ifelse(`$3',,`fill_(fillval)',`$3') `$1'
- N: Box.n; S:Box.s; E:Box.e; W: Box.w
- `$4']')
-
- `If-then
- Ftest( "text", wid expr ht expr, attributes )'
-define(`Ftest',`[boxwid = fboxwid*0.8; boxht = fboxht*1.4
- Box: box ifelse(`$2',,,`$2') invis
- N: Box.n; S: Box.s; E: Box.e; W: Box.w
- line from 0.5 between last box.n and last box.e \
- to last box.e then to last box.s then to last box.w then to last box.n \
- then to 0.5 between last box.n and last box.e \
- ifelse(`$3',,`fill_(fillval)',`$3')
- ifelse(`$1',,,`$1' at Box)
- `$4']')
-
- `case statement
- Fcase(wid expr ht expr,
- "Test string 1",task, ...,
- "Test string n",task)'
- `arg1 adjusts the size of the tests
- A task is a flow subchart with internal names .E and .S defined
- The test blocks are labeled Test1, Test2, ... and the tasks are
- labeled Task1, Task2, ... '
-define(`Fcase',`[ down; S: Here; sx = S.x
- Fcaseloop_(1,$@)
- ifelse(`$2',,`E:S; W:S; N:S',
- `E:(sx+linewid/2,Task1.E.y); W:Test1.W; N:Test1.N')
- Fcasearrow_(1,$@)
- arrow from E to (E,S) then to S ]')
-
- define(`Fcaseloop_',`ifelse(`$3',,,
- `Test`$1': Ftest(`$3',`$2') with .N at S
- Task`$1': `$4' with .nw at Test`$1'.E+(linewid/2,min(Test`$1'.ht,fboxht)/2)
- arrow right linewid/4 from Test`$1'.E \
- then down Test`$1'.E.y-Task`$1'.W.y then to Task`$1'.W
- S: (Test`$1'.S.x,min(Test`$1'.S.y,Task`$1'.S.y)-linewid/3)
- ifelse(`$5',,`line',`arrow') from Test`$1'.S to S
- sx = max(sx,Task`$1'.E.x)
- Fcaseloop_(incr($1),`$2',shift(shift(shift(shift($@)))))')')
- define(`Fcasearrow_',`ifelse(`$3',,,
- `arrow from Task`$1'.E to (E,Task`$1'.E)
- Fcasearrow_(incr($1),`$2',shift(shift(shift(shift($@)))))')')
-
- `while statement with explicit test
- Fwhiledo("test text", wid x ht y, attributes, task spec )
- The task structure is given label Task '
-define(`Fwhiledo',`[ down
- Test: Ftest(`$1',`$2',`$3')
- arrow right linewid/2 from Test.E
- Task: `$4' with .W at Here
- E: Task.E; W: Test.w; S: Test.S
- arrow up max(linewid/4,Test.n.y-Task.n.y+arrowht*1.5) \
- from Task.N then left Task.x-Test.x
- N: Here
- arrow to Test.n
- `$5']')
-
- `repeat statement with explicit test
- Frepeatuntil("test",wid x ht y,attributes, task spec )
- The task structure is given label Task '
-define(`Frepeatuntil',`[ N: Here
- Task: ifelse(`$4',,Here,`$4' with .N at N)
- W: Task.W
- arrow down linewid/3
- Test: Ftest(`$1',`$2',`$3')
- E: Task.E+(linewid/2+max(0,Test.e.x-Task.e.x),0)
- arrow from Test.e to (E,Test) then to E then to Task.E
- S: Test.S
- `$5']')
-
- `if-then-else
- Fifthenelse( "test", wid x ht y, attributes,
- left tasks, right tasks)
- The left task structure is given label Ltask and the right
- task structure is given label Rtask '
-define(`Fifthenelse',`[ Test: Ftest(`$1',`$2',`$3')
- N: Test.N
- Ltask: ifelse(`$4',,`Test.S; W:Test.W; LS:Ltask',
- `$4 with .ne at ((Test.W.x+Test.x)/2,Test.S.y)
- W: Ltask.W; LS:Ltask.S
- arrow from Test.W to (Ltask.N,Test.W) then to Ltask.N')
- Rtask: ifelse(`$5',,`Test.S; E:Test.E; RS:Rtask',
- `$5 with .nw at ((Test.E.x+Test.x)/2,Test.S.y)
- E: Rtask.E; RS: Rtask.S
- arrow from Test.E to (Rtask.N,Test.E) then to Rtask.N')
- S: (Test.x,min(LS.y,RS.y)-linewid/3)
- arrow from LS to (LS,S)
- arrow from RS to (RS,S)
- line to (LS,Here)
- `$6']')
-
-divert(0)dnl
.PS
-# Here is a test file exercising the above definitions
+# FlowSVG.m4
gen_init(svg_font(sans-serif,11bp__,2.5bp__))
+ifdef(`FlowchartDefs_',,`include(../FlowchartDefs.m4)')
-# Could use xcolor with option dvipsnames but define color here for portability
define(`Thistle',`rgbstring(0.85,0.75,0.85)')dnl
define(`RubineRed',`rgbstring(0.81,0,0.35)')dnl
define(`YellowGreen',`rgbstring(0.68,1,0.18)')dnl
define(`SeaGreen',`rgbstring(0.13,0.70,0.67)')dnl
define(`Goldenrod',`rgbstring(0.85,0.65,0.13)')dnl
+define(`Beaublue',`rgbstring(0.74,0.83,0.9)')dnl
+define(`Celadon',`rgbstring(0.67,0.88,0.69)')dnl
# Accented characters
define(`svg_ccedilla',`svg_symbol(&`#'231;)')dnl
@@ -145,9 +18,31 @@ define(`svg_atilde',`svg_symbol(&`#'227;)')dnl
linethick_(1.0)
arrowwid = 0.05
arrowht = 0.1
- fillval = 0.8
- down
-
+ fillval = 0.9
+ maxpsht = 20
+
+define(`shad',`shaded rgbstring(0.9,0.8,0.7)')
+define(`Below',`with .nw at last [].sw+(0,-0.25)')
+TL: Here
+Simple: [
+ Fbox("svg_tt(`Fbox')",,shad)
+ Ftest("svg_tt(``Ftest'')",,shad) Below
+ Fdata("svg_tt(``Fdata'')",,,shad) Below
+ Fprep("svg_tt(``Fprep'')",) Below
+ Fkeying("svg_tt(``Fkeying'')") Below
+ Fkeyboard("svg_tt(``Fkeyboard'')") Below
+ Fdocument("svg_tt(``Fdocument'')",,shaded rgbstring(0.9,0.8,0.7)) Below
+ Fdelay("svg_tt(``Fdelay'')",,shaded Beaublue) Below
+ Fdisplay("svg_tt(``Fdisplay'')",,shaded Celadon) Below
+ Fstored("svg_tt(``Fstored'')",,shaded Thistle) Below
+ Fconnect(,,shaded Thistle) Below
+ Fconnect("45",wid boxwid ht boxht:45,shaded Thistle) \
+ with .w at last [].e+(boxht/8,0)
+ "svg_tt(`Fconnect')" at last [].nw + (0,boxht/6)
+ ] with .nw at TL+(0.1,0); move from Simple.nw to TL
+
+#showbox_
+Complex: [
Case: Fcase(,
"Test 1",[Fbox("Task 1",, shaded Thistle); W:last [].W; N:last [].N
arrow down linewid/3 from last [].S
@@ -158,46 +53,42 @@ Case: Fcase(,
"Test 3",Fbox("Task 3",, shaded RubineRed)dnl
)
- "svg_it(.N)" at Case.N rjust above
- "svg_it(.S)" at Case.S rjust below
- "svg_it(.E)" at Case.E ljust
- "svg_it(.W)" at Case.W rjust
- "svg_it(Case statement)" below at Case.s+(0,-0.2)
- move to Case.nw+(-12bp__,10bp__)
+ "svg_it(.N)" at Case.N rjust above
+ "svg_it(.S)" at Case.S rjust below
+ "svg_it(.E)" at Case.E ljust
+ "svg_it(.W)" at Case.W rjust
+ "svg_tt(`Fcase')" below at Case.s #+(0,-0.1)
-Whiledo: Fwhiledo("svg_it(i svg_lt n)",,,Fbox("Task"),
- "T" above ljust at Test.E) \
+Whiledo: Fwhiledo("svg_it(i svg_lt n)",,,Fbox("Task"),"T" above ljust at Test.E) \
with .nw at Case.ne+(0.25,0)
"svg_it(.N)" at Whiledo.N rjust
"svg_it(.S)" at Whiledo.S rjust below
"svg_it(.E)" at Whiledo.E ljust
"svg_it(.W)" at Whiledo.W rjust
- "svg_it(While-do)" below at Whiledo.s+(0,-0.2)
+ "svg_tt(`Fwhiledo')" below at Whiledo.s
-Repeatuntil: Frepeatuntil("svg_it(n svg_geq 5)",,,Fbox("Task"),
- "T" at Test.E above ljust) with .nw at Whiledo.sw + (0.25,-1)
+Repeatuntil: Frepeatuntil("svg_it(n svg_gt 5)",,,Fbox("Task"),
+ "T" at Test.E above ljust) with .nw at Whiledo.sw + (0.25,-0.5)
"svg_it(.N)" at Repeatuntil.N rjust above
"svg_it(.S)" at Repeatuntil.S rjust below
"svg_it(.E)" at Repeatuntil.E ljust
"svg_it(.W)" at Repeatuntil.W rjust
- "svg_it(Repeat-until)" below at Repeatuntil.s+(0,-0.2)
+ "svg_tt(`Frepeatuntil')" below at Repeatuntil.se +(-0.0,0.2)
-Ifthenelse: Fifthenelse("svg_it(A`'svg_lt`'B)",,,
+Ifthenelse: Fifthenelse("svg_it(A svg_lt B)",,,
Fbox("False"),
Fbox("True",ht fboxht*1.2 wid fboxwid)dnl
- ) with .nw at Repeatuntil.sw +(0.5,-0.5)
+ ) with .nw at Repeatuntil.sw +(-0.5,-0.3)
- "svg_it(.N)" at Ifthenelse.N rjust above;
+ "svg_it(.N)" at Ifthenelse.N rjust above
"svg_it(.S)" at Ifthenelse.S below rjust
- "svg_it(.E)" at Ifthenelse.E ljust
+ "svg_it(.E)" wid 12bp__ at Ifthenelse.E ljust
"svg_it(.W)" at Ifthenelse.W rjust
- "svg_it(If-then-else)" at Ifthenelse.s+(0,-0.3) \
- "svg_it((the True and False tasks are optional))"
+ "svg_tt(`Fifthenelse')" below at Ifthenelse.s+(0,-0.15)
-# Compound statement:
-[ right
+Compound: [ right
ellipse shaded YellowGreen "Start"
arrow right linewid/2
@@ -212,18 +103,18 @@ Ifthenelse: Fifthenelse("svg_it(A`'svg_lt`'B)",,,
"T" at Test.E above ljust),
"T" at Test.E above ljust) with .N at Here
- A: arrow down 0.25 from last [].S ] with .nw at Case.sw + (-12bp__,-0.7)
+ A: arrow down 0.25 from last [].S ] with .nw at Case.sw + (-12bp__,-0.3)
+
+ "svg_it(Compound statements)" at last [].A.end+(0.1,0) ljust above
- "svg_it(Compound statement)" below at last [].A.end
+ ] with .nw at Simple.ne+(0.1,0)
Example: [ fillvalue = 0.8; awid = linewid/2; right_
Start: ellipse wid boxwid/2 ht boxwid/3 shaded "green"
arrow right_ awid
B1: Fbox("Planejamento")
- B2: Fbox("Execu`'svg_ccedilla`'svg_atilde`'o") \
- with .W at B1.E+(awid*3,0)
- B3: Fbox("Sele`'svg_ccedilla`'svg_atilde`'o") \
- with .W at B2.E+(awid*3,0)
+ B2: Fbox("Execu`'svg_ccedilla`'svg_atilde`'o") with .W at B1.E+(awid*3,0)
+ B3: Fbox("Sele`'svg_ccedilla`'svg_atilde`'o") with .W at B2.E+(awid*3,0)
LT: Ftest("Avalia`'svg_ccedilla`'svg_atilde`'o do" "Planejamento",
wid fboxwid*1.5 ht fboxht*2.0,
shaded YellowGreen,
@@ -241,14 +132,13 @@ Example: [ fillvalue = 0.8; awid = linewid/2; right_
arrow from B2.E to (RT.N,B2.E) then to RT.N
arrow from RT.W to (B2.S,RT.W) then to B2.S
arrow from RT.E to (B3.S,RT.E) then to B3.S
- B4: Fbox("Extra`'svg_ccedilla`'svg_atilde`'o") \
- with .S at B3.N+(0,awid)
+ B4: Fbox("Extra`'svg_ccedilla`'svg_atilde`'o") with .S at B3.N+(0,awid)
arrow from B3.N to B4.S
- arrow right_ awid from B4.E
+ arrow up_ awid from B4.N
B5: Fbox("Conclus`'svg_atilde`'o")
- ellipse wid boxwid/2 ht boxwid/3 shaded "red" at (B5.S,Start)
- arrow down_ awid from B5.S to last ellipse.n
-] with .nw at last [].sw+(0,-fboxht)
+ arrow up_ awid from B5.N
+ ellipse wid boxwid/2 ht boxwid/3 shaded "red"
+] with .nw at last [].Compound.sw+(0,2.5*fboxht)
command "</g>" # end font
.PE
diff --git a/graphics/circuit_macros/examples/svg/FourbarSVG.m4 b/graphics/circuit_macros/examples/svg/FourbarSVG.m4
new file mode 100644
index 0000000000..208e817822
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/FourbarSVG.m4
@@ -0,0 +1,59 @@
+.PS
+# FourbarSVG.m4
+# https://tex.stackexchange.com/questions/563831/how-to-draw-four-bar-linkage-with-center-of-mass
+gen_init
+scale = 25.4
+
+ a = 18
+ b = 73
+ c = 47
+ d = 72
+ A0: Here
+ B0: A0+(d,0)
+ circlerad = 1
+
+define(`pivot',`[
+ C: circle
+ line down_ 4 from C+(2,0)
+ arc from last line.start to C+(-2,0) with .c at C
+ line down_ 4
+ B: line thick 1.6 right 7 with .c at (C,Here)
+ thinlines_
+ sep = 0.9
+ nhash = B.len/sep
+#for i=0 to nhash do { line down sep left sep from B.start+(i/nhash*B.len,0) }
+ for i=0 to nhash do { line down sep left sep from B.end-(i/nhash*B.len,0) }
+ thicklines_
+ ]')
+
+ pivot with .C at A0; "svg_it(A`'svg_sub(0))" at A0-(5,0)
+ circle dashed rad a at A0
+ pivot with .C at B0; "svg_it(B`'svg_sub(0))" at B0-(5,0)
+ "svg_it(d = A`'svg_sub(0)B`'svg_sub(0))" at 0.5<A0,B0>
+
+ B1: Cintersect(A0,a+b,B0,c)
+ B2: Cintersect(A0,b-a,B0,c)
+ arc dashed from B1 to B2 with .c at B0
+
+ A0B1: line thick 1.6 from A0 to B1 chop 2 chop
+ line thick 1.6 from B0 to B1 chop 2 chop "svg_it(c)" ljust
+ circle fill_(1) at B1; "svg_it(B`'svg_sub(1))" wid 3 at B1+(5,0)
+ A1: circle fill_(1) at LCintersect(A0B1,A0,a,R)
+ "svg_it(A`'svg_sub(1))" at A1+(5,0)
+
+ A2: b/(b-a) between B2 and A0; "svg_it(a)" at 0.4<A2,A0> above rjust
+ "svg_it(b)" at 0.4<A1,B1> above rjust
+ A2B2: line thick 1.6 from A2 to B2
+ line thick 1.6 from B0 to B2 chop 2 chop 0
+ circle fill_(1) at B2; "svg_it(B`'svg_sub(2))" at B2+(5,0)
+ circle fill_(1) at A2; "svg_it(A`'svg_sub(2))" at A2+(5,0)
+
+ thinlines_
+ line from B0+(3,0) right 4
+ ArcAngle(Here,B0,B1,5) ->; "svg_psi`'svg_sub(0)" at last arc.ne above ljust
+ ArcAngle(B1,B0,B2,8) ->; "svg_psi" at last arc.n+(-3,0) above
+ ArcAngle(A1,A0,B2,b*0.45) ->; "svg_theta" at last arc.start+(0,4)
+ line from A0+(3,0) right 8
+ ArcAngle(Here,A0,B1,9) -> ; "svg_theta`'svg_sub(0)" at last arc.start+(2,2)
+
+.PE
diff --git a/graphics/circuit_macros/examples/svg/GeometrySVG.m4 b/graphics/circuit_macros/examples/svg/GeometrySVG.m4
new file mode 100644
index 0000000000..ae0a661012
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/GeometrySVG.m4
@@ -0,0 +1,46 @@
+.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
+ AB: line from A to B
+ BC: line from B to C
+ CA: line from C to A
+
+ PerpTo(A,BC,L); "L" at L below
+ AL: line from A to L; RightAngle(A,L,C)
+
+ angleLAC = atan2(C.x-L.x,A.y-L.y)
+ S: move from A to (sin(angleLAC/2),-cos(angleLAC/2))
+ AW: line from A to Intersect_(S,BC)
+ W: Here; "W" at W below rjust
+
+ PerpTo(C,AB,N); "N" at N above rjust
+ CN: line from C to N; RightAngle(C,N,B)
+
+ PerpTo(B,CA,M); "M" at M above
+ CM: line from B to M; RightAngle(B,M,C)
+
+ H: Intersect_(CN,AL); "H" at H +(4bp__,10bp__)
+
+ thinlines_
+ Equidist3(B,L,N,CC1,c1rad); C1: circle rad c1rad at CC1
+ Equidist3(B,W,N,CC2,c2rad); C2: circle rad c2rad at CC2
+ Equidist3(B,C,N,CC3,c3rad); C3: circle rad c3rad at CC3
+ Equidist3(W,C,M,CC4,c4rad); C4: circle rad c4rad at CC4
+ thicklines_
+
+ Z: LCintersect(AW,CC2,C2.rad); "Z" at Z+(-5bp__,-5bp__)
+ HZ: move from H to Z
+ Y: LCintersect(HZ,CC4,C4.rad,R); "Y" at Y above
+ X: LCintersect(HZ,CC2,C2.rad); "X" at X above rjust
+
+ Loopover_(`P',`dot(at P)',X,Y,Z)
+
+ line dashed from X to Y chop -linewid/2
+ RightAngle(A,Z,Y)
+
+.PE
diff --git a/graphics/circuit_macros/examples/svg/JackSVG.m4 b/graphics/circuit_macros/examples/svg/JackSVG.m4
index ea14a04e59..6af8b6b301 100644
--- a/graphics/circuit_macros/examples/svg/JackSVG.m4
+++ b/graphics/circuit_macros/examples/svg/JackSVG.m4
@@ -1,6 +1,6 @@
.PS
# `Jack.m4'
-cct_init(svg_font(sans-serif,11bp__))
+cct_init(svg_font(sans-serif,10bp__))
P: [
P1: plug
diff --git a/graphics/circuit_macros/examples/svg/LyapSVG.m4 b/graphics/circuit_macros/examples/svg/LyapSVG.m4
new file mode 100644
index 0000000000..6ed269a428
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/LyapSVG.m4
@@ -0,0 +1,159 @@
+.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/MCSVG.m4 b/graphics/circuit_macros/examples/svg/MCSVG.m4
index cececf42b5..8fcff10ea1 100644
--- a/graphics/circuit_macros/examples/svg/MCSVG.m4
+++ b/graphics/circuit_macros/examples/svg/MCSVG.m4
@@ -1,5 +1,5 @@
.PS
-#MC.m4
+#MCSVG.m4
cct_init(svg_font(Times,11bp__))
textoffset = 3bp__
@@ -44,50 +44,52 @@ MC:[
]
Three: [
+ gapht = 4*dimen_
dv = dimen_*0.6
- dh = dimen_
+ dh = dimen_*5/6
define(`swfet',`mosfet(`$1',,dMEDSuBQPy)')
define(`swpair',`[ up_
BS: swfet(up_ dimen_); { "`$1'" at BS.D-(0,2bp__) rjust }
- L: line up_ 3*dimen_ from BS.D
+ L: line up_ gapht-2*dimen_ from BS.D
TS: swfet(up_ dimen_) with .S at Here; { "`$2'" at TS.S+(0,2bp__) rjust }
T: TS.D
B: BS.S
C: L.c
]')
- V1: gap(up_ 5*dimen_,1,A)
+ V1: gap(up_ gapht,1,A)
{ "svg_it(V)svg_sub(1)" wid 12bp__ at last arrow.c rjust }
- line right_ dh/2
+ line right_ dimen_/2
{ C1: capacitor(down_ to (Here,V1.start)); llabel(svg_it(C)svg_sub(1)) }
for_(1,3,1,`
- line right_ dh ifelse(m4x,1,,*5/4)
+ line right_ dimen_ ifelse(m4x,1,,*5/4)
{SP1`'m4x: swpair(svg_it(S`'svg_sub(1`'eval(m4x+3))),
svg_it(S`'svg_sub(1`'m4x))) with .T at Here
- dot(at last [].C + (0,(2-m4x)*dh))
- line right_ (3-m4x)*dh*5/4
+ dot(at last [].C + (0,(2-m4x)*dh))
+ line right_ (3-m4x)*dimen_*5/4+dimen_/4
inductor(right_ dimen_,L)
{sprintf("svg_it(L`'svg_sub(1&`#'%g;,70%))",64+m4x) at last [].n+(0,8bp__)}
- line down_ (2-m4x)*dimen_*2/3
+ line down_ (2-m4x)*dh*2/3
pushdef(`dimen_',dimen_*1.2) inductor(right_ dimen_*3/4) popdef(`dimen_')
- line down_ (2-m4x)*dimen_/3
+ line down_ (2-m4x)*dh/3
M: move right_ dimen_/8
- line up_ (2-m4x)*dimen_/3
+ line up_ (2-m4x)*dh/3
pushdef(`dimen_',dimen_*1.2) inductor(right_ dimen_*3/4) popdef(`dimen_')
- line up_ (2-m4x)*dimen_*2/3
+ line up_ (2-m4x)*dh*2/3
inductor(right_ dimen_,L)
{sprintf("svg_it(L`'svg_sub(2&`#'%g;,70%))",64+m4x) at last [].n+(0,8bp__)}
- line right_ dimen_/8+(m4x-1)*dh*5/4
+ line right_ dimen_/8+(m4x-1)*dh*5/4 + dimen_/4
dot
SP2`'m4x: swpair(svg_it(S`'svg_sub(2`'eval(m4x+3))),
- svg_it(S`'svg_sub(2`'m4x))) with .C at Here+(0,(m4x-2)*dh) }
+ svg_it(S`'svg_sub(2`'m4x))) \
+ with .C at Here+(0,(m4x-2)*dh) }
')
"svg_it(T)svg_sub(r)" at M.c+(0,dimen_*2/3)
line from V1.start to SP13.B
line from SP21.B to SP23.B+(dh*3/4,0)
{ C2: capacitor(up_ to (Here,V1.end)); llabel(,,svg_it(C`'svg_sub(2))) }
- line right_ dh/2
- gap(up_ 5*dimen_,1,A)
+ line right_ dimen_/2
+ gap(up_ gapht,1,A)
{ "svg_it(V`'svg_sub(2))" wid 12bp__ at last arrow.c ljust }
line to SP21.T chop dotrad_ chop 0
diff --git a/graphics/circuit_macros/examples/svg/Makefile b/graphics/circuit_macros/examples/svg/Makefile
index 4471d513f4..4436cd1aa5 100644
--- a/graphics/circuit_macros/examples/svg/Makefile
+++ b/graphics/circuit_macros/examples/svg/Makefile
@@ -1,15 +1,18 @@
LIBDIR = $$HOME/lib
M4LIBS = svg.m4 SVGconfig.m4
M4LIBS = svg.m4
+M4 = m4
+# PDFCONVERT = pdf2svg
+PDFCONVERT = dvisvgm
# To process a single file, copy it to test.m4 and type "make tst"
# to produce tstSVG.html
DPIC = dpic
-#DPIC = $$HOME/dpic/build/p2c/ftp/dpic
-#DPIC = ../../../dpic/build/p2c/ftp/dpic
+#DPIC = $$HOME/dpic/pascal/p2c/ftp/dpic
+#DPIC = ../../../dpic/pascal/p2c/ftp/dpic
#DPIC = ../../../dpic/bison/dpic
-#DPIC = ../../../dpic/bdev/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
@@ -17,7 +20,7 @@ DPIC = dpic
# M4LIBS = svg.m4 windows.m4
# DPIC = ../../../dpic/bison/distsrc/Windows/dpic
-.SUFFIXES: .pic .svg .m4
+.SUFFIXES: .pic .svg .m4 .xsvg
.pic.svg:
$(DPIC) -v $*.pic > $*.svg
grep '<\!-- width' $*.svg | sed -e 's%<\!-- *%%' -e 's% *-->%%' > $*.siz
@@ -25,6 +28,25 @@ DPIC = dpic
m4 $(M4LIBS) $*.m4 | sed -e '/^\%/d' > $*.pic
$(DPIC) -v $*.pic > $*.svg
grep '<\!-- width' $*.svg | sed -e 's%<\!-- *%%' -e 's% *-->%%' > $*.siz
+.m4.xsvg:
+ touch F_$*.dim
+ $(M4) pgf.m4 F_$*.dim $*.m4 > $*.pic
+ $(DPIC) -g $*.pic >> $*.tex
+ echo "\documentclass[crop,tikz,multi=false]{standalone}" > F_$*.tex
+ echo "\usepackage{boxdims,siunitx,amssymb}" >> F_$*.tex
+ echo "\begin{document}" >> F_$*.tex
+ echo "\input $*.tex" >> F_$*.tex
+ echo "\end{document}" >> F_$*.tex
+ pdflatex --quiet F_$*
+ $(M4) pgf.m4 F_$*.dim $*.m4 > $*.pic
+ $(DPIC) -g $*.pic >> $*.tex
+ pdflatex --quiet F_$*
+ if test "$(PDFCONVERT)" = "pdf2svg" ; then \
+ pdf2svg F_$*.pdf $*.xsvg && cp $*.xsvg $*.svg ; \
+ else \
+ dvisvgm --pdf F_$*.pdf && mv F_$**.svg $*.svg ; cp $*.svg $*.xsvg ; \
+ fi
+ rm -f F_$**
CCTSVG = \
AdderSVG.svg AlogixSVG.svg ABlogixSVG.svg AmpTableSVG.svg AntennasSVG.svg \
@@ -35,16 +57,17 @@ CCTSVG = \
CountingSVG.svg CrossbarSVG.svg CrowSVG.svg CsourceSVG.svg \
DecoderSVG.svg DemultiplexerSVG.svg DiniSVG.svg DiodesSVG.svg DriveSVG.svg \
EmarrowsSVG.svg \
- FlowSVG.svg FontsSVG.svg FusesSVG.svg GrayCodeSVG.svg GroundsSVG.svg \
+ FlowSVG.svg FontsSVG.svg FusesSVG.svg \
+ GeometrySVG.svg GrayCodeSVG.svg GroundsSVG.svg \
HeadersSVG.svg HeathkitSVG.svg InclepsSVG.svg I2LSVG.svg JackSVG.svg \
- LogicSVG.svg LoglogSVG.svg \
+ LyapSVG.svg LogicSVG.svg LoglogSVG.svg \
MCSVG.svg MixerSVG.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\
SchottkySVG.svg ShiftRSVG.svg SierpinskiSVG.svg \
SixpoleSVG.svg SourcesSVG.svg SQUIDSVG.svg SwitchesSVG.svg \
- TTLnandSVG.svg TgateSVG.svg TtreeSVG.svg ThreeSVG.svg TimerSVG.svg \
+ TTLnandSVG.svg TgateSVG.svg ThreeSVG.svg \
TubediagsSVG.svg VariableSVG.svg WindingsSVG.svg XformSVG.svg \
controlSVG.svg cscSVG.svg diamondSVG.svg ex00SVG.svg \
ex01SVG.svg ex02SVG.svg ex03SVG.svg ex04SVG.svg ex05SVG.svg ex06SVG.svg \
@@ -53,10 +76,12 @@ 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 wormSVG.svg XORSVG.svg Np.svg
+ thyristorSVG.svg ujtSVG.svg UNOSVG.svg wormSVG.svg XORSVG.svg Np.svg \
+ Y14-5SVG.svg
examplesSVG.html: examplesSVG.htmx
- make $(CCTSVG)
+ cp ../quick.m4 .
+ make $(CCTSVG) quick.xsvg
Version=`sed -e 's/Version //' $(LIBDIR)/doc/Version.tex` ; \
sed -e 's/Version XXX/Version '$$Version'/' examplesSVG.htmx \
| m4 > examplesSVG.html
@@ -112,7 +137,8 @@ Incleps.png:
clean:
@printf "\n svg clean:\n"
rm -f *.svg *.dim *.ps *log *.siz *.pic examplesSVG.html Incleps.png
- rm -f tstSVG.html copy_tmp__
+ rm -f tstSVG.html copy_tmp__ quick.m4 quick.xsvg
+ rm -f *.otf xx* *png *.pdf *.css *.xml quick.tex
@printf "\n"
clobber: clean
diff --git a/graphics/circuit_macros/examples/svg/OpampSVG.m4 b/graphics/circuit_macros/examples/svg/OpampSVG.m4
index 65ea9233b0..7137e428ce 100644
--- a/graphics/circuit_macros/examples/svg/OpampSVG.m4
+++ b/graphics/circuit_macros/examples/svg/OpampSVG.m4
@@ -29,7 +29,7 @@ cct_init(svg_font(sans-serif,11bp__))
"`Point_(90); opamp'" at C.s-(0,0.25)
right_
D: opamp(,,,,T) with .sw at C.se+(0.65,0)
- "`opamp(,,,,T)'" wid 0.75 at D.s-(0,0.25)
+ "`opamp(,,,,T)'" wid 0.85 at D.s-(0,0.25)
command "</g>" # end font
.PE
diff --git a/graphics/circuit_macros/examples/svg/PconnSVG.m4 b/graphics/circuit_macros/examples/svg/PconnSVG.m4
index b0fdb65e80..43fb2d20eb 100644
--- a/graphics/circuit_macros/examples/svg/PconnSVG.m4
+++ b/graphics/circuit_macros/examples/svg/PconnSVG.m4
@@ -31,7 +31,7 @@ P1: [
C7: pconnex(U,J) with .w at last [].e+(0.25,0)
`"(U,J)"' at last [].s below
C8: pconnex(U,JF) with .w at last [].e+(0.25,0)
- `"(U,JF)"' wid 21bp__ at last [].s below
+ `"(U,JF)"' wid 28bp__ at last [].s below
]
P2: [
diff --git a/graphics/circuit_macros/examples/svg/UNO.m4 b/graphics/circuit_macros/examples/svg/UNO.m4
new file mode 100644
index 0000000000..60689f15ec
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/UNO.m4
@@ -0,0 +1,265 @@
+.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
new file mode 100644
index 0000000000..8ae314f1af
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/UNOSVG.m4
@@ -0,0 +1,577 @@
+.PS
+# UNOSVG.m4
+log_init
+include(../icsSVG.m4)
+textoffset = 1.5bp__
+svg_font(sans-serif,8.5bp__,textoffset)
+
+divert(-1)
+
+ `Header([A][1|2], rows, wid, ht,
+ boxspec, pinlen;pinsize)
+ arg1: A= type A; number of columns
+ 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
+ ifinstr(`$6',;,
+ `stacksplit_(`m4Jdr',`$6',;)dnl
+ define(`m4Jps',ifelse(m4Jdr,,`L_unit',m4Jdr))popdef(`m4Jdr')dnl
+ define(`m4Jpl',ifelse(m4Jdr,,`lg_plen*L_unit',m4Jdr))popdef(`m4Jdr') ',
+ `define(`m4Jps',L_unit)dnl
+ define(`m4Jpl',`ifelse(`$6',,lg_plen*L_unit,`$6')')')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_(m4Jps*3/2,-(m4x-1/2)*m4Hh/m4Hm),
+ ifinstr(m4tp,A,1,eval(m4Hct-1)),
+ P`'m4Hct, w, (m4Jpl+m4Jps);m4Jps) define(`m4Hct',incr(m4Hct))
+ ifelse(m4Hn, 2, `HeaderPin(Block.NE+vec_(-m4Jps*3/2,-(m4x-1/2)*m4Hh/m4Hm),
+ 1, P`'m4Hct, e, (m4Jpl+m4Jps);m4Hps) define(`m4Hct',incr(m4Hct))') ')
+ ifelse(`m4Hq',A,`popdef(`L_unit')')
+ `$7' ]')
+ `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,
+ 10;XTAL2,
+ 304;nul, 305;nul)
+ lg_pin(Pin305+(0,lg_pinsep),RESET,Pin1,wN,1,pinlen)
+ ]')
+
+define(`rswitch',`dswitch(`$1',,WBoDCP)
+ DS: last line.start; DC: last line.c; DE: last line.end
+ DL: DC-vec_(dimen_/6,0); DR: DC+vec_(dimen_/6,0)
+ {{"1" at DL above rjust}; {"3" at DR above ljust}
+ { line from DL to DL-vec_(0,dimen_/6) chop dotrad_ chop 0
+ {"2" below rjust}
+ continue to DS-vec_(0,dimen_/6) then to DS; dot }
+ { line from DR to DR+vec_(0,-dimen_/6) chop dotrad_ chop 0
+ {"4" below ljust}
+ continue to DE+vec_(0,-dimen_/6) then to DE; dot }
+ line from DC+vec_(dimen_/10,-dimen_/6) to DC+vec_(-dimen_/10,-dimen_/6)
+ move to last line.c; line to rvec_(0,-dimen_/3) \
+ then to rvec_(-dimen_/3,-dimen_/3)
+ {"5" below}} ')
+
+divert(0)dnl
+
+ maxpswid = 20
+ maxpsht = 20
+
+ define(`pinlen',`30bp__')
+ define(`lg_pinsep',(1.2*lg_pinsep))
+ del = lg_pinsep
+ define(`pindiam',0.1)
+
+ define(`egnd',`ground(,,E); "GND" at last line.c below')
+
+ 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+(-2.5,-10*del)
+ `"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(left_ from U3.Pin33.end to (XT2,U3.Pin33))
+ rlabel(1,,2); llabel(,GROUND)
+ 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(,22`'pF)
+ C9: capacitor(from XT1 to (Here,XT1)); {"C9" "22`'pF" at last [].s+(0,-11bp__)}
+ { line to C11.end }
+ dot
+ G1: egnd
+ 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(+)5 V" at last line.c above}
+
+ line from U3.Pin4.end left_ 2*del
+ capacitor(down_ 3*del); { llabel(C7,,100n) }
+ G3: ground(,T,E); {"GND" at last line.c below }
+
+ line from U3.Pin30.end to (G1.x-2*del,U3.Pin30.y); TD: Here
+ continue to (Here,U3.Pin32)
+ { "RD`'svg_it(-)" above rjust }; continue left_ 1.5*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 (TD.x-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,,)
+ rlabel(,L1); llabel("svg_thinsp`'BLM21" ljust); 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
+
+ line from U3.Pin18.end right_ 3.5*del
+ JP2: Header(A2,2,4*del,2*lg_pinsep,,0.2;pindiam) with .P3.end at Here
+ "JP2" at JP2.Block.nw above ljust
+ "2X2M - NM" at JP2.s below
+ "1" at JP2.P3.end above ljust; "3" at JP2.P1.end above ljust
+ "2" at JP2.P4.end above rjust; "4" at JP2.P2.end above rjust
+ line from JP2.P1.end to (JP2.P1.end,U3.Pin19) then to U3.Pin19.end
+ dot(at JP2.P1.end); line up 3.5*del
+ TPPB5: dot(,,1); {"PB5" at last [].e ljust}
+ TPPB4: dot(at TPPB5-(del*3/2,0),,1); {"PB4" at last [].w rjust}
+ line to (Here,JP2.P3); dot
+ line from JP2.P2.end to (JP2.P2.end,TPPB4)
+ TPPB7: dot(,,1); {"PB7" at last [].w rjust}
+ line from JP2.P4.end right del*3/2; continue to (Here,TPPB4)
+ TPPB6: dot(,,1); {"PB6" at last [].n above}
+ line from U3.Pin20.end right del then up del; continue to (TPPB6,Here); dot
+ line from U3.Pin21.end up del; continue to (TPPB7,Here); dot
+
+ ICSP1: Header(A2,3,4*del,2.5*lg_pinsep,,0.2;pindiam) \
+ with .P1.end at (JP2.P1.end,U3.Pin14)
+ "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')
+ line from ICSP1.P1.end to (ICSP1.P1.end,U3.Pin17) then to U3.Pin17.end
+ line from ICSP1.P3.end left del; continue to (Here,U3.Pin15) \
+ then to U3.Pin15.end
+
+ dot(at U3.Pin24.end);
+ RN1C: resistor(up_ 5*lg_pinsep,,E); rlabel(,10K,RN1C); llabel(5,,3) dot
+# D3: diode(up_ 5*lg_pinsep); rlabel(,,D3); dot
+ line up_ 2*del; ground(,T,E,U); {"+5 V" at last line.w rjust}
+ dot(at U3.Pin24.end-(del,0));
+# RN1C: resistor(up_ D3.len,,E); llabel(,10K,RN1C)
+ D3: diode(up_ RN1C.len); llabel(,,D3)
+ line to (TPPB6.x+del,Here.y)
+ continue to (Here,ICSP1.P2.end) then to ICSP1.P2.end
+ line from ICSP1.P5.end down 2*del; continue to (TPPB6.x+2*del,Here.y)
+ TRESET2: Here
+ continue to (Here.x,D3.end.y+del) then to (RN1C.end.x-2.5*del,D3.end.y+del)
+ continue to (Here,U3.Pin24) then to U3.Pin24.end
+ G4: ground(at ICSP1.P6.end,,E); {"GND" at last line.c below }
+ line from ICSP1.P4.end right del then up U3.Pin16.y-ICSP1.P4.y \
+ then to U3.Pin16.end
+ dot(at ICSP1.P1.end); line left_ 2.5*del then down_ 5*del
+ MISO2: dot(,,1); {"MISO2" at last [].s below }
+ dot(at ICSP1.P3.end-(del,0)); line to (Here,MISO2)
+ SCK2: dot(,,1); {"SCK2" at last [].s below ljust }
+ dot(at TRESET2); line to (Here,SCK2)
+ RESET2: dot(,,1); {"RESET2" wid 36bp__ at last [].s below }
+ dot(at ICSP1.P4.end+(del,0)); line to (Here,RESET2)
+ MOSI2: dot(,,1); {"MOSI2" at last [].s-(del,0) below }
+
+ line right_ del from U3.Pin11.end then up_ del*3/2
+ TXLED: reversed(`diode',right_ elen_,LER)
+ rlabel(,YELLOW); llabel(TX); dot
+ {line up_ del; TPTXL: dot(,,1); "TXL" at last [].n above}
+ RN2C: resistor(right_ elen_,,E); llabel(,1 K RN2C); rlabel(6,,3); dot
+ line from U3.Pin10.end to (TXLED.start,U3.Pin10)
+ RXLED: reversed(`diode',to (TXLED.end,Here),LER)
+ rlabel(,YELLOW); llabel(RX); dot
+ {line up_ del; dot(,,1); "RXL" at last [].n above}
+ RN2B: resistor(right_ elen_,,E); llabel(,1 K RN2B); rlabel(7,,2)
+ line to (Here,TPTXL); ground(,T,E,U); "+5 V" at last line.c above
+
+# ZU4 connections
+ line left_ del*3/2 from ZU4.Pin7.end; dot
+ {line up_ del; G4: ground(,T,E,U); "+5 V" at last line.c above }
+ C6: capacitor(down dimen_); llabel(100n,,C6); dot
+ { dot(at ZU4.Pin8.end) }; dot(at (ZU4.Pin8.end,Here))
+ { G4: ground(at Here+(0,-del),,E); {"GND" at last line.c below }
+ line to ZU4.Pin22.end }
+ line left_ Here.x-C6.x + dimen_*5/4
+ C10: capacitor(up_ C6.len); llabel(100n,,C10); dot
+ { line to (Here,ZU4.Pin20) then to ZU4.Pin20.end }
+# L2: ebox(right_ to C6.start,,,0.2); rlabel(,L2); llabel(,100`'svg_micro`'H)
+ L2: inductor(right_ to C6.start,W); rlabel(,L2); llabel(,100`'svg_micro`'H)
+
+ line left 2*del from ZU4.Pin9.end; PE: dot
+ R2: resistor(up_ to (Here,ZU4.Pin10),,E); llabel(,R2); rlabel(,1 M); dot
+ dot(at Here-(del*4.0,0)); { "XTAL2" above ljust }
+ XTAL: xtal(down_ R2.len); llabel(16 MHz); dot; { "XTAL1" below ljust }
+ pushdef(`dimen_',dimen_/2)
+ capacitor(left_ del from 0.25 between XTAL.start and XTAL.end)
+ capacitor(left_ del from 0.75 between XTAL.start and XTAL.end)
+ popdef(`dimen_')
+ line up XTAL.len/2
+ line left del from last line.c then down del
+ G5: ground(,T,E); "GND" at last line.c below
+ line down_ del from XTAL.end; dot(,,1); "XT1" at last [].s below
+ line up del from XTAL.start; dot(,,1); "XT2" at last [].n above
+ line from XTAL.start to ZU4.Pin10.end
+ line from XTAL.end to ZU4.Pin9.end
+ line left 2*del from ZU4.Pin1.end; dot
+# dot(at ZU4.Pin1.end)
+ D2: diode(up_ dimen_); rlabel(,D2)
+ dot(at D2.start-(2.5*del,0))
+ RN1D: resistor(up_ D2.len,,E); rlabel(10 K,,RN1D); dot
+ { line to D2.end }
+ line up_ del; ground(,T,E,U); "+5 V" at last line.c above
+
+ line from ZU4.Pin1.end to (RN1D-(1.5*del,0),ZU4.Pin1) then up 7*del
+ continue to (ZU4.Chip.w,Here)+(del,0); BRB: dot
+ { line down_ 2*del; Br2: brdge(right_ dimen_)
+ llabel(1,,2); rlabel(,RESET_EN); line up_ 2*del; dot }
+ line right_ dimen_+del
+ C5: capacitor(right_ dimen_); llabel(,C5); rlabel(100n); dot
+ { RN2D: resistor(down_ dimen_,,E); rlabel(,1 K); llabel(,RN2D)
+ G6: ground(,T,E); "GND" at last line below }
+ { line up_ del; DTR: dot(,,1); "DTR" at last [].e ljust }
+ line from U3.Pin13.end right del/2; continue to (Here,U3.Chip.s) \
+ then left+2*del; continue to (Here,BRB) then to C5.end
+ TP2: Here; continue to C5.end
+
+ line up 3*del from BRB
+ TP1: dot #; line left BRB.x-RN1D.x
+ RESET: rswitch( right_ dimen_ from (USB.e,Here)+(del/2,0))
+ { "RESET" at RESET+(-del*1.7,1.0*del) above }
+ line left del from RESET.start then down del
+ G7: ground(,T,E); "GND" at last line.c below
+
+ ICSP: Header(A2,3,4*del,2.5*lg_pinsep,,0.2;pindiam) \
+ with .Block.sw at ZU4.Pin19.end+(2*del,del*3)
+ "ICSP" at ICSP.Block.nw above ljust
+ "3X2 M" at ICSP.Block.sw below ljust
+ for_(1,5,2,`"m4x" at ICSP.P`'m4x.end above ljust')
+ for_(2,6,2,`"m4x" at ICSP.P`'m4x.end above rjust')
+ dot(at ZU4.Pin19.end); line to (Here,ICSP.P3) then to ICSP.P3.end
+ line from ZU4.Pin18.end right del; dot
+ line to (Here,ICSP.P1) then to ICSP.P1.end
+ move to ICSP.P5.end; line to (ZU4.Pin19.end,Here)-(del,0);
+ continue to (Here,TP1); dot
+ line from ICSP.P2.end up_ del; ground(,T,E,U); "+5 V" at last line.c above
+ line from ICSP.P6.end down_ del; G9: ground(,T,E); "GND" at last line.c below
+ move to ICSP.P4.end; line right_ del then down Here.y - ZU4.Pin17.y; dot
+# move to ICSP.P4.end; line right_ del then down Here.y - G9.y + del
+# continue to (ICSP.P1.end.x+del,Here.y) then down_ Here.y-ZU4.Pin17.y; dot
+
+ line right_ from RESET.end to (U3.Chip.e+(12*del,0),TP1)
+ POWER: Header(A1,8,1.5*del,7*lg_pinsep,,0.2;pindiam) with .P3.end at Here
+ "POWER" wid 36bp__ at POWER.Block.nw above ljust
+ "8X1F-H8.5" at POWER.Block.sw below ljust
+ for_(1,8,1,`"m4x" at POWER.P`'m4x.end above ljust')
+ line from POWER.P2.end left del/2 then down POWER.P2.y-POWER.P5.y ; dot
+ line from POWER.P4.end left 2.5*del; "+3V3" above ljust
+ dot(at POWER.P3.end-(del*1.5,0)); line up 2*del
+ dot(,,1); "RESET" at last [].n above
+ line from POWER.P5.end left 3.5*del then up 4*del; ground(,T,E,U)
+ "+5 V" at last line.c above
+ line left del*2 from POWER.P8.end; "VIN" above ljust
+ line left del/2 from POWER.P7.end; dot
+ line from POWER.P6.end to (Here,POWER.P6.end) then to Here+(0,-2.5*del)
+ G10: ground(,T,E); "GND" at last line.c below
+
+ right_
+
+ IOH: Header(A1,10,1.5*del,10*lg_pinsep,,0.2;pindiam) \
+ with .P10.end at ZU4.Pin14.end + (del*15,0)
+ "IOH" at IOH.Block.nw above ljust
+ "10X1F-H8.5" at IOH.Block.se below ljust
+ for_(0,9,1,`
+ { "incr(m4x)" above ljust at IOH.P`'eval(10-m4x).end }
+ move to IOH.P`'eval(10-m4x).start-(pindiam/2+dotrad_/2,0)
+ ifelse(m4x,6,,`dot')
+ move to IOH.P`'eval(10-m4x).end
+ ifelse(eval(m4x<6),1,`line from ZU4.Pin`'eval(14+m4x).end to Here ')
+ ifelse(m4x,6,,` line right del*4; dot(,pindiam/2,1) ')
+ ifelse(eval(m4x<6),1,`"eval(8+m4x)" at last [].e ljust ')')
+ "SCL" at last [].e ljust
+ "SDA" at 3rd last [].e ljust
+ "AREF" at 5th last [].e ljust
+
+ AD: Header(A1,6,1.5*del,6*lg_pinsep,,0.2;pindiam) \
+ with .P6.end at (IOH.P10.end,ZU4.Pin23) #.end + (del*6,0)
+# with .P6.end at ZU4.Pin23.end + (del*6,0)
+ "AD" at AD.Block.nw above ljust
+ "6X1F-H8.5" at AD.Block.se below ljust
+ for_(0,5,1,`
+ dot(at AD.P`'eval(6-m4x).start-(pindiam/2+dotrad_/2,0))
+ line from ZU4.Pin`'eval(23+m4x).end \
+ to AD.P`'eval(6-m4x).end; {"incr(m4x)" above ljust}
+ line right del*4; dot(,pindiam/2,1)
+ "A`'m4x" at last [].e ljust ')
+
+ IOL: Header(A1,8,1.5*del,8*lg_pinsep,,0.2;pindiam) \
+ with .P8.end at (AD.P1.end,ZU4.Pin2)
+ "IOL" at IOL.Block.nw above ljust
+ "8X1F-H8.5" at IOL.Block.sw ljust below
+ for_(0,7,1,`
+ dot(at IOL.P`'eval(8-m4x).start-(pindiam/2+dotrad_/2,0))
+ line from ZU4.Pin`'eval(ifelse(eval(m4x<5),1,2,6)+m4x).end \
+ to IOL.P`'eval(8-m4x).end; {"incr(m4x)" above ljust}
+ line right del*4; dot(,pindiam/2,1)
+ "m4x" at last [].e ljust ')
+
+ line from ZU4.Pin21.end up RESET.y-ZU4.Pin21.y-del \
+ then right ICSP.P4.end.x-ZU4.Pin21.end.x + 2*del
+ continue to (Here,IOH.P3)+(0,del*3/2); dot
+ { C4: capacitor(down_ 3.0*del); llabel(C4,,100n)
+ { ground(,T,E); "GND" at last line.e ljust}
+ line from IOH.P4.end to (Here,IOH.P4); dot }
+ line right del*3/2; continue to (Here,IOH.P3) then to IOH.P3.end
+
+ line left del/2 from IOH.P2.end; continue to (Here,AD.P2); dot
+ line left del*3/2 from IOH.P1.end; continue to (Here,AD.P1); dot
+
+# line right_ del*2 from U3.Pin9.end then down_ 5.5*lg_pinsep; dot
+ line right_ del*2 from U3.Pin9.end then down_ 3.5*lg_pinsep; dot
+ { line right_ 2*del; dot(,,1); "RX" at last [].e ljust }
+ line to (Here,RESET)-(0,del)
+ RN4B: resistor(down_ dimen_,,E); llabel(7,"RN4B" ljust "1 K" ljust,2)
+ line down_ del then left_ Here.x - IOH.P9.end.x + del*2.5
+ continue to (Here,ZU4.Pin2); dot
+
+ line right_ del from U3.Pin8.end; dot
+ { line right_ 3*del; dot(,,1); "TX" at last [].e ljust }
+ line to (Here,RN4B.start)
+ RN4A: resistor(down_ dimen_,,E); rlabel(8,"RN4A" rjust "1 K" rjust,1)
+ line to (IOH.P9.end,Here)-(del*3.5,0); continue to (Here,ZU4.Pin3); dot
+
+Pwr: [
+ Vin: line right 2*del "VIN" above
+ RN1A: resistor(down_ dimen_*5/4,,E); rlabel(8, "RN1A" rjust "10 K" rjust ,1)
+ CMP: dot
+ RN1B: resistor(down_ dimen_*5/4,,E); rlabel(2, "RN1B" rjust "10 K" rjust ,7)
+ B12: ground(,T,E); "GND" at last line below
+
+ line right_ 2*del from CMP; dot
+ { line up_ 2*del; dot(,,1); "CMP" at last [].n above }
+ line right_ del
+ POA: opamp(,"+" ljust,"-" ljust) with .In1 at Here
+ "U5A" at last [].n; "1" at POA.Out above rjust
+ "3" at POA.In1 rjust above; "2" at POA.In2 rjust above
+ line left_ del from POA.In2 then down_ del; "+3V3" below
+ dot(at POA.Out); {line up_ 2*del; dot(,,1); "GATE" at last [].n above }
+ T1: mosfet(down_ dimen_*1.5,R,dMdPyEDSQdB,) with .G at Here
+ "T1" at T1 + (-dimen_/4,del*5/4)
+ "FDN340P" at T1 + (0,-del*5/4) rjust
+# "USBVCC" at T1.D rjust
+ dot(at T1.S); { line up_ 2*del; ground(,T,E,U); "+5 V" at last line above }
+ ] with .RN1B at (USB.e.x+del,RN1C.y-2*del)
+ dot(at XUSB+(0,-del/2))
+ F1: fuse(right_ to (Pwr.T1.D,Here)); { "500 mA" ljust }
+ { "MF-MSMF050-2" at last [].sw below ljust }
+ line to Pwr.T1.D
+
+ line from Pwr.T1.S right_ 2.5*lg_pinsep
+ { U2:box ht 3*lg_pinsep wid 5*lg_pinsep with .nw at Here+(0,lg_pinsep/2) }
+ {"1" above rjust}; {"IN" ljust}
+ "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)
+ 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
+ U2P5: (U2.e.x,U2.e.y+lg_pinsep)
+ "OUT" at U2P5 rjust; "5" at U2P5 above ljust
+ line from U2P5 right 2*del "+3V3" below; dot
+ { line up_ del; dot(,,1); "3V3" at last [].n above }
+ C3: capacitor(down_ to(Here,G15)); rlabel(,"C3" rjust "1`'svg_micro" rjust)
+ ground(,T,E); "GND" at last line.c below
+ "NC/FB" at (U2.e.x,U2P2.y) rjust
+
+ "SCK" above ljust at Pwr.Vin + (0,4*del)
+ line right_ 3*del
+ U5B: opamp(,"+" ljust, "-" ljust) with .In1 at Here
+ "5" at U5B.In1 above rjust; "6" at U5B.In2 above rjust
+ "U5B" at last [].n; "7" at U5B.Out above rjust
+ line from U5B.In2 left del then down del then right U5B.Out.x-U5B.In1.x+del
+ TD2: dot
+ dot(at U5B.Out); dot(at Here+(0,2*del),,1); "LCMD" at last [].e ljust
+ line down_ from last [].s to TD2
+ RN2A: resistor(right_ dimen_*5/4,,E); llabel(8,"1K",1); rlabel(,RN2A)
+ dot; {line up_ 2*del; dot(,,1); "LL" at last [].n above }
+ diode(right_ dimen_*5/4,LE); rlabel(,YELLOW)
+ line down_ dimen_/4; egnd
+
+ X1:box ht 3*lg_pinsep wid 5*lg_pinsep with .w at (U2.x,U5B.y+del)
+ "X1 DC21MMX" at X1.nw above ljust; "PWR SUPPLY" at X1.nw below ljust
+ X1P1: 1/3 between X1.sw and X1.se; "1" at X1P1 rjust below
+ X1P2: 2/3 between X1.sw and X1.se; "2" at X1P2 rjust below
+ line down_ del from X1P1; dot; { egnd }
+ line right X1.e.x+del - Here.x then up_ X1.e.y-Here.y then to X1.e
+ "3" above ljust at X1.e
+ line from X1P2 down del/2 then right X1.e.x+del*2 - X1P2.x \
+ then up X1.n.y - X1P2.y + del/2; dot
+ { line up_ 2*del; PWRIN: dot(,,1); "PWRIN" at last [].w rjust }
+ D1: diode(right_ dimen_); llabel(,D1); rlabel(,M7); dot
+ { PC1: capacitor(down_ dimen_,C); llabel(,"PC1" ljust "47`'svg_micro" ljust)
+ G16: egnd }
+ { line to (Here,PWRIN); dot(,,1); "VIN" at last [].e ljust }
+ line right 3*del; { "3" above rjust }
+ U1P1: Here
+ U1: box ht 3*lg_pinsep wid 4*lg_pinsep with .nw at Here+(0,lg_pinsep/2)
+ "IN" at U1P1 ljust; "OUT" at (U1.e,U1P1) rjust
+ "1" below rjust at U1.s
+ "U1" at U1.nw + (0,textht/dptextratio) above ljust \
+ "NCP1117ST50T3G" ljust
+ line from U1.s to (U1.s,G16); egnd
+ U1P4: (U1.e,U1P1); U1P2: U1P4+(0,-del)
+ { "4" at U1P4 above ljust }; { "2" at U1P2 above ljust };
+ line right_ 2*del from U1P4; dot;
+ line from U1P2 to (Here,U1P2); dot; { line to (Here,U1P4) }
+ { PC2: capacitor(down_ to (Here,G16),C)
+ llabel(,"PC2" ljust "47`'svg_micro" ljust); egnd }
+ line right_ del*3/2 from (Here,U1P4); dot
+ { line to (Here,PWRIN); ground(,T,E,U); "+5V" at last line.c above }
+ line right_ del*3/2; dot; { line to (Here,PC2.start)
+ C2: capacitor(down_ to (Here,G16),C)
+ llabel(,"C2" ljust "100`'svg_micro" ljust); egnd }
+ { line to (Here,PWRIN); dot(,,1); "5V" at last [].n above }
+ line right_ del*3/2 then to (Here.x+del*3/2,PWRIN.y); dot(,,1)
+ "5V1" at last [].n above
+
+
+
+ command "</g>"
+.PE
diff --git a/graphics/circuit_macros/examples/svg/Xtest.m4 b/graphics/circuit_macros/examples/svg/Xtest.m4
new file mode 100644
index 0000000000..6758043816
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/Xtest.m4
@@ -0,0 +1,58 @@
+.PS
+# test.m4
+gen_init
+
+divert(-1)
+
+divert(0)dnl
+
+gs = 0.1
+gw = 3
+gh = 3
+define grid {($1*gs,$2*gs)}
+B: box invis wid gw+2 ht gh+2 with .c at (0,0)
+bix = gw/gs/2
+G:[
+C: 0,0
+for i=-bix to bix do { line wid 0.4 outlined "gray" from grid(-bix,i) right gw }
+for i=-bix to bix by 5 do { sprintf("%g",i) at grid(-bix,i) rjust }
+for j=-bix to bix do { line wid 0.4 outlined "gray" from grid(j,-bix) up gh }
+for j=-bix to bix by 5 do { sprintf("%g",j) at grid(j,-bix) below }
+
+ line from grid(-bix,0) right gw
+ line from grid(0,-bix) up gh
+] with .C at B
+
+textoffset = 0
+xwid = 0.71; svg_font(Times,72bp__)
+#xwid = 0.65; svg_font(sans-serif,72bp__)
+#xwid = 0.64; svg_font(Arial,1)
+#xwid = 0.64; svg_font(Helvetica,1)
+#xwid = 0.54; svg_font(Courier,1)
+#xwid = 0.67; svg_font(Cursive,1)
+#xwid = 0.64; svg_font(Verdana,1)
+#xwid = 0.70; svg_font(Georgia,1)
+#xwid = 0.70; svg_font(Palatino,1)
+#xwid = 0.70; svg_font(Garamond,1)
+#xwid = 0.70; svg_font(Bookman,1)
+##xwid = 0.70; svg_font(Comic Sans MS,1)
+#xwid = 0.55; svg_font(Trebuchet MS,1)
+#xwid = 0.78; svg_font(Arial Black,1)
+#xwid = 0.49; svg_font(Impact,1)
+[
+C: 0,0
+ "X" wid xwid at grid(0,0) above ljust ; showbox_(last "")
+ "X" wid xwid at grid(0,0) below ljust ; showbox_(last "")
+ "X" wid xwid at grid(0,0) above rjust ; showbox_(last "")
+ "X" wid xwid at grid(0,0) below rjust ; showbox_(last "")
+] with .C at G.C
+[
+ Q: box wid gw ht gh "X" ljust "Y" rjust "Z"
+ line from Q.n to Q.s; line from Q.w to Q.e
+] with .w at B.e
+
+ "X" wid xwid at G.n above; showbox_(last "")
+
+
+ command "</g>"
+.PE
diff --git a/graphics/circuit_macros/examples/svg/Y14-5SVG.m4 b/graphics/circuit_macros/examples/svg/Y14-5SVG.m4
new file mode 100644
index 0000000000..84cc6bcda6
--- /dev/null
+++ b/graphics/circuit_macros/examples/svg/Y14-5SVG.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,10bp__)',
+`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/ex01SVG.m4 b/graphics/circuit_macros/examples/svg/ex01SVG.m4
index 3a20d90a18..b8787d1539 100644
--- a/graphics/circuit_macros/examples/svg/ex01SVG.m4
+++ b/graphics/circuit_macros/examples/svg/ex01SVG.m4
@@ -1,7 +1,56 @@
.PS
-# ex01.m4
+# TimerSVG.m4
cct_init(svg_font(sans-serif,10.5bp__))
+define(`ic555',`[Chip: box ht boxwid wid boxwid "555"
+ P7: "7" ljust at 1/6<Chip.sw,Chip.nw>
+ P6: "6" ljust at 1/2<Chip.sw,Chip.nw>
+ P2: "2" ljust at 5/6<Chip.sw,Chip.nw>
+ P4: "4" below at 1/3<Chip.nw,Chip.ne>
+ P8: "8" below at 2/3<Chip.nw,Chip.ne>
+ P3: "3" rjust at Chip.e
+ P1: "1" above at Chip.s
+ ]')
+
+Timer: [
+ define(`elen_',`linewid')
+Vs: dot
+ down_
+ variable(`resistor(,E); llabel(,svg_norm(1 M`'svg_ohm))');
+ resistor(,E); llabel(,svg_norm(100 k`'svg_ohm))
+ capacitor(,E); llabel(svg_norm(220 svg_micro`'F))
+Zero: dot
+
+ dot(at Vs+(elen_*4/3,0))
+ resistor(,E); llabel(,svg_norm(33 k`'svg_ohm))
+ line to (Here,Zero) chop 0 chop elen_
+C2: capacitor; llabel(svg_norm(0.1 svg_micro`'F))
+ dot
+
+IC1: ic555 with .P7 at C2.start + (elen_,0)
+ line from IC1.P4 to (IC1.P4,Vs); dot
+ line from IC1.P8 to (IC1.P8,Vs); dot
+ line from IC1.P1 to (IC1.P1,Zero); dot
+ line from IC1.P2 to (C2,IC1.P2); dot
+ crossover(from IC1.P7 to (Zero,IC1.P7),R,C2); dot
+ line from IC1.P6 left elen_/2 then down IC1.P6.y-IC1.P7.y; dot
+ line from IC1.P3 right elen_*2/3
+R: dot
+ line right_ elen_/3
+B: buzzer(,,C) with .In3 at Here
+ line from B.In1 to (R,B.In1)
+ reversed(`diode',to (Here,Vs),LE); "red" at last line.c+(elen_/2,0)
+ resistor(down_ elen_ from R,E); llabel(,svg_norm(470 svg_ohm))
+ diode(to (Here,Zero),LE); {"green" wid 0.4 at last line.c+(elen_*2/3,0)}
+ line to Zero chop 0 chop -elen_
+ line up_ (Vs.y-Here.y)/3
+ battery(up_ (Vs.y-Here.y)/3); rlabel(,,svg_norm(9 V))
+ switch(to (Here,Vs),,D)
+ line to (R,Vs)
+]
+Ex01: [
+# ex01.m4
+
linewid = linewid*1.5 # let's make the circuit elements bigger than usual
define(`elen_',linewid) # but not longer
@@ -10,11 +59,13 @@ define(`elen_',linewid) # but not longer
Vin: source(up_ elen_ + 2*del, V); llabel(,v`'svg_sub(s),)
switch(right_ elen_,,C); rlabel(,t = svg_norm(0),)
- resistor; llabel(,svg_norm(47 ohm),); b_current(i`'svg_sub(R),above rjust)
+ resistor; llabel(,svg_norm(47 ohm),); b_current()
+ { "svg_it(i`'svg_sub(R))" at last arrow.end+(0,3bp__) above rjust }
line right_ elen_/2 then down_ del
- parallel_(`inductor(,W); llabel(,"L" wid 0.15,); b_current(i`'svg_sub(L))',
+ P:parallel_(`L:inductor(,W); llabel(,"L" wid 0.15,); b_current()',
`capacitor(,C); rlabel(+,v`'svg_sub(C),-); llabel(,,C)')
+ { "svg_it(i`'svg_sub(L))" at P.E1.L.start+(2bp__,0) ljust below }
line to (Here,Vin.start) then to Vin.start
define(`meshcurrent',`[arc -> cw with .c at (0,0) \
@@ -23,6 +74,7 @@ Vin: source(up_ elen_ + 2*del, V); llabel(,v`'svg_sub(s),)
right_
meshcurrent(del,i`'svg_sub(2)) at last[].C
meshcurrent(2*del,i`'svg_sub(1)) at Vin.start + (4*del,3*del)
+ ] with .sw at Timer.se+(0.5,0)
command "</g>" # end font
.PE
diff --git a/graphics/circuit_macros/examples/svg/ex05SVG.m4 b/graphics/circuit_macros/examples/svg/ex05SVG.m4
index 0ca39bf4f5..52284a3e33 100644
--- a/graphics/circuit_macros/examples/svg/ex05SVG.m4
+++ b/graphics/circuit_macros/examples/svg/ex05SVG.m4
@@ -1,21 +1,26 @@
.PS
-# ex05.m4
+# ex05SVG.m4
darrow_init
- fillval = 0.8 # environmental variable
+Kalman: [
+ fillval = 0.8
- dx = boxht/5 # diagram parameters wrt scaled env variables
+ boxht = 0.35
+ boxwid = 1.5*boxht
+ dx = boxht/5
circlerad = boxht*3/8
extlen=4*dx
indel = boxht/3
+ define(`dlthick',dlthick*3/4)
-COb: box fill_ "CO"
- { line right textht*0.5 from COb+(0,textht*0.5) }
+define(`overbar',`line right textht*0.8 \
+ with .c at last box.c + ((`$1')*textht,0.7*textht)')
+
+COb: box fill_ "CO"; overbar(0.5)
CO:box fill_ with .nw at last box.se+(dx,-dx) "CO"
CbOb: box fill_ with .nw at last box.se+(dx,-dx) "CO"
- { line right textht*1.0 with .c at CbOb+(-textht*0.1,textht*0.5) }
-CbO: box fill_ with .nw at last box.se+(dx,-dx) "CO"
- { line left textht*0.5 from CbO+(-textht*0.2,textht*0.5) }
+ overbar(-0.5); overbar(0.5)
+CbO: box fill_ with .nw at last box.se+(dx,-dx) "CO"; overbar(-0.5)
dline(from CbO.s down_ dx,,t,,!-)
dright
@@ -28,7 +33,7 @@ NE: (CbO.e,COb.n)+(dx,dx)
SB: shadebox(box wid NE.x-SW.x ht NE.y-SW.y with .sw at SW)
U: COb.w-(3*dx+extlen,0)
- {"svg_bf(u)" wid 0.1 rjust at U}
+ {"svg_it(U)" wid 0.1 rjust at U}
dline(from U right_ extlen+dx,,t,,|-)
TU: dtee(R)
{darrow(to COb.w,t)}
@@ -60,10 +65,51 @@ TU: dtee(R)
darrow(left_ from Sum.w to Dum.e)
dline(from Dum.w to (SB.w-(0.1,0),Dum)); darrow(to (U,Here))
- {"svg_bf(y)" rjust}
+ {"svg_it(Y)" rjust}
move left 0.23
circle at Sum
circle at Dum
+ ]
+Coxeter: [
+# Coxeter.m4
+
+ customlinethick = 1.5
+
+ linethick = customlinethick
+ define(`dotrad_',`(3/2*linethick pt__)')
+
+ Orig: (0,0)
+ for i=0 to 4 do { P[i]: dot(at (i*linewid,0)) }
+ line from Orig to P[4]
+ P[-1]: dot(at (Rect_(linewid, 120))); line to Orig
+ P[-2]: dot(at (Rect_(linewid,-120))); line to Orig
+
+ Pa: dot(at P[4]+(linewid,0)); "svg_it(a)" at last [].n above
+ arrow from P[4] to Pa chop linewid/4
+ Pd: dot(at Pa+(linewid,0)); "svg_it(d)" at last [].w rjust
+ Pe: dot(at Pd+(linewid,0)); "svg_it(e)" at last [].n above
+ Pf: dot(at Pe+(linewid,0)); "svg_it(f)" at last [].n above
+ Pb: dot(at Pd+(Rect_(linewid,120))); "svg_it(b)" at last [].w rjust
+ Pc: dot(at Pd+(Rect_(linewid,-120))); "svg_it(c)" at last [].w rjust
+ line from Pb to Pd then to Pc
+ line from Pd to Pf
+
+ define(`customarc',
+ `pushdef(`dfillcolor',`0.7,0.7,0.7') linethick_(0.4); dnl
+ Darc(`$1',linewid, (`$2')*dtor_, (`$3')*dtor_,
+ thick=linewid/6; wid=linewid*0.3; ht=linewid/6; ends=<->)dnl
+ linethick_(customlinethick); popdef(`dfillcolor')')
+
+ customarc((linewid,-linewid/3), 25,155)
+ "svg_it(d)" at (linewid,linewid*2/3)
+ customarc((2*linewid,-linewid/3), 25,155)
+ "svg_it(e)" at (2*linewid,linewid*2/3)
+ customarc((3*linewid,-linewid/3), 25,155)
+ "svg_it(f)" at (3*linewid,linewid*2/3)
+ customarc(Orig,130,230); "svg_it(a)" at (Rect_(linewid,180))
+ customarc(Orig, 10,110); "svg_it(b)" at (Rect_(linewid, 60))
+ customarc(Orig,-110,-10); "svg_it(c)" at (Rect_(linewid,-60))
+ ] with .sw at Kalman.se+(15bp__,0)
.PE
diff --git a/graphics/circuit_macros/examples/svg/examplesSVG.htmx b/graphics/circuit_macros/examples/svg/examplesSVG.htmx
index 825c1d5cf4..8bec348222 100644
--- a/graphics/circuit_macros/examples/svg/examplesSVG.htmx
+++ b/graphics/circuit_macros/examples/svg/examplesSVG.htmx
@@ -5,29 +5,27 @@
<meta http-equiv="Content-Style-Type" content="text/css">
<!--meta http-equiv="Content-Script-Type" content="text/javascript"-->
<TITLE>SVG Examples: Circuit_macros Version XXX</TITLE>
+<meta name="keywords" content="HTML"
+content='Circuit elements, basic circuits, logic circuits and other diagrams,
+electric circuits, resistor, capacitor, inductor, diode, sources, amplifier,
+integrator, fuse, switch, antenna, opamp, transformer, relay, contact, jack,
+plug, FET, UJT, thyristor, bipolar transistor, nport, windings, timer,
+optical isolator, rectifier, bistable, oscillator, CMOS, MOSFET, power supply,
+NAND gate, controlled source, synchronous machine, digital circuit, signal-flow
+graph, latch, decoder, flipflop, full adder, logic diagram, crossbar switch,
+dimensioning, control system, graph, RGB colors, recursion, binary tree,
+flowcharts, picture overlay, ASME Y14.5' >
+
<style type="text/css">
-.svg{display:none}
-*>.svg{display:inline}
</style>
<link rel="shortcut icon" href="../Circuit_macros.ico" type="image/x-icon" />
</HEAD>
-<BODY>
-<H2>SVG Circuit_macros examples, Version XXX</H2>
-<hr>
+<!-- ---------------------------------------------------------------------
+define(`ifinstr',`ifelse(`$2',,`$1',index(`$1',`$2'),-1,
+ `ifinstr(shift(shift(shift($@))))',`$3')')
-<p>
- These diagrams are in .svg format.
- <A HREF="examples.pdf">Pdf</A>
- and
- <A HREF="examples.html">png</A>
- versions are also available.
- The PDF equivalent can be found in examples.pdf of the distribution.
-</p>
- <p>
- Click on the link to view the source of each diagram.
-</p>
-<hr>
+define(`m4tt',`<g style="font-family:monospace">')
define(`cfig',`
<p>
@@ -40,40 +38,62 @@ define(`cfig',`
<!--[if !IE]><!-->
<object data="$1.svg" sinclude($1.siz) type="image/svg+xml" class="img">
- </object> <!--<![endif]-->
+ </object> <![endif]-->
+
+<br><br>
+ifelse(`$2',,,`
+<a href="$1.txt" TYPE="text/plain" TARGET="_blank" alt="$1">$1.m4:</a>
+`$2' changecom(,)&`#'8194;changecom(`#')')
-<br>
-<a href="$1.txt" TYPE="text/plain" TARGET="_blank" alt="$1">$1.m4</a>
</p>
-<hr>')
+ifinstr(`$3',y,,`<hr>')')
-define(`m4tt',`<g style="font-family:monospace">')
+--------------------------------------------------------------------- -->
-<!--
-<embed pluginspage="http://www.adobe.com/svg/viewer/install/" />
--->
+<BODY>
+<table cellpadding="0" cellspacing="0" width="700px" border="0" align="center" >
+<tr>
+<td>
+<H2>SVG Circuit_macros examples, Version XXX</H2>
+<hr>
<p>
-These diagrams have been adapted from the Circuit_macros examples in
-order to test the <em>experimental</em> svg output of dpic.
-Generating the line art is relatively straightforward, but
-the labeling is not created by a text processor and therefore must be
-more basic. Some of these diagrams might benefit from a little more
-tweaking of fonts and labels.
+ This file shows diagrams in .svg format;
+ <A HREF="examples.html">png</A>
+ versions are also available.
+ The PDF equivalent can be found in examples.pdf of the distribution.
</p>
+
<p>
-These examples conform to the latest dpic, which has changed the
-treatment of text sizing. That is, "Text" ht y sets the true height
-of SVG text to y rather than the nominal height as previously.
+The diagrams shown below have been adapted from the Circuit_macros
+examples in order to test the svg output of dpic. Generating svg line
+art is straightforward, but TeX, LaTeX, and related word
+processors do not produce svg. Either less-sophisticated text formatting
+must be employed or an
+ <A HREF="https://en.wikibooks.org/wiki/LaTeX/Export_To_Other_Formats">
+ intermediate format</A>
+such as pdf can be
+produced, followed by an additional processing step to convert to svg.
+Two possibilities for the latter are
+ <A HREF="https://www.ctan.org/pkg/dvisvgm">dvisvgm</A>
+and
+ <A HREF="https://github.com/dawbarton/pdf2svg">pdf2svg</A> although
+there may be font-related issues for some diagrams.
+<br>
+Many circuit and similar diagrams intended for the web do not
+require sophisticated labels, however; the examples shown below might
+be representative.
</p>
<p>
+ Click on the link to view the source of each diagram.
+</p>
+<hr>
+<p>
There are a number of other issues:
<ul>
<li> Embedding .svg files in html documents with the &lt;embed&gt; or
&lt;object&gt; tag seems to be a perennial issue.
<li> This file has been tested mainly by using Firefox.
- Chrome also seems to work well with two issues detected to date:
- a difference handling color fills and text links in svg.
<li> The Adobe reader apparently requires a line of the form
<br> &lt;embed src="figure.svg" width="x" height="y" type="image/svg+xml"
/&gt;
@@ -86,11 +106,11 @@ There are a number of other issues:
otherwise this could be tedious.
<li> The default font face is not specified in all of these diagrams but is
inherited from the enclosing document, so the appearance of labels can
- differ depend on the browser. Some of these diagrams set the font at
+ differ depending on the browser. Some of these diagrams set the font at
the beginning of the diagram source.
<li> The &lt;svg tag may require modification
from the default used for this test. Dpic might be modified to
- allow the generation of custom headers but that has not yet been done.
+ allow the generation of custom headers but that has not been done.
<li> Diagrams such as these contain text labels
that have to be treated differently from the LaTeX-compatible versions.
Apparently there is no direct way to know the bounding box of arbitrary svg
@@ -103,7 +123,7 @@ There are a number of other issues:
Rather than patch the original source files for svg production, edited copies
have been used. The configuration file svg.m4 read by m4
prior to libcct.m4 contains the following macros defined for svg.
- Others should be defined to exercise some of the media capabilties of svg.
+ Others could be defined to exercise some of the media capabilties of svg.
They are subject to change:
<ul>
<li>
@@ -161,191 +181,511 @@ There are a number of other issues:
<li>m4tt svgLinkString</g> as above but for strings attached to objects
<li> Greek and other symbols:
-<table cellpadding="0" cellspacing="0" width="100%" >
-<table cellpadding="0" cellspacing="0" width="100%" >
+<!--
+ Reference:
+ https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
+ -->
+<hr width="100%" align="left">
+<table cellpadding="2" cellspacing="0" width="75%" >
<tr>
-<td width="8%"> m4tt svg_alpha</g> <td align="left"> changecom(,)&`#'945;changecom(`#')
-<td width="8%"> m4tt svg_beta</g> <td align="left"> changecom(,)&`#'946;changecom(`#')
-<td width="8%"> m4tt svg_Gamma</g> <td align="left"> changecom(,)&`#'915;changecom(`#')
-<td width="8%"> m4tt svg_gamma</g> <td align="left"> changecom(,)&`#'947;changecom(`#')
-<td width="8%"> m4tt svg_Delta</g> <td align="left"> changecom(,)&`#'916;changecom(`#')
-<td width="8%"> m4tt svg_delta</g> <td align="left"> changecom(,)&`#'948;changecom(`#')
+<td width="10%"> m4tt svg_alpha</g> <td align="left"> changecom(,)&`#'945;changecom(`#')
+<td width="10%"> m4tt svg_beta</g> <td align="left"> changecom(,)&`#'946;changecom(`#')
+<td width="10%"> m4tt svg_Gamma</g> <td align="left"> changecom(,)&`#'915;changecom(`#')
+<td width="10%"> m4tt svg_gamma</g> <td align="left"> changecom(,)&`#'947;changecom(`#')
+<td width="10%"> m4tt svg_Delta</g> <td align="left"> changecom(,)&`#'916;changecom(`#')
+<td width="10%"> m4tt svg_delta</g> <td align="left"> changecom(,)&`#'948;changecom(`#')
<td width="10%"> m4tt svg_epsilon</g> <td align="left"> changecom(,)&`#'949;changecom(`#')
-<td width="8%"> m4tt svg_zeta</g> <td align="left"> changecom(,)&`#'950;changecom(`#')
+<td width="10%"> m4tt svg_zeta</g> <td align="left"> changecom(,)&`#'950;changecom(`#')
+</tr>
<tr>
-<td width="8%"> m4tt svg_eta</g> <td align="left"> changecom(,)&`#'951;changecom(`#')
-<td width="8%"> m4tt svg_Theta</g> <td align="left"> changecom(,)&`#'920;changecom(`#')
-<td width="8%"> m4tt svg_theta</g> <td align="left"> changecom(,)&`#'952;changecom(`#')
-<td width="8%"> m4tt svg_iota</g> <td align="left"> changecom(,)&`#'953;changecom(`#')
-<td width="8%"> m4tt svg_kappa</g> <td align="left"> changecom(,)&`#'954;changecom(`#')
-<td width="8%"> m4tt svg_Lambda</g> <td align="left"> changecom(,)&`#'923;changecom(`#')
-<td width="8%"> m4tt svg_lambda</g> <td align="left"> changecom(,)&`#'955;changecom(`#')
-<td width="8%"> m4tt svg_mu</g> <td align="left"> changecom(,)&`#'956;changecom(`#')
+<td width="10%"> m4tt svg_eta</g> <td align="left"> changecom(,)&`#'951;changecom(`#')
+<td width="10%"> m4tt svg_Theta</g> <td align="left"> changecom(,)&`#'920;changecom(`#')
+<td width="10%"> m4tt svg_theta</g> <td align="left"> changecom(,)&`#'952;changecom(`#')
+<td width="10%"> m4tt svg_iota</g> <td align="left"> changecom(,)&`#'953;changecom(`#')
+<td width="10%"> m4tt svg_kappa</g> <td align="left"> changecom(,)&`#'954;changecom(`#')
+<td width="10%"> m4tt svg_Lambda</g> <td align="left"> changecom(,)&`#'923;changecom(`#')
+<td width="10%"> m4tt svg_lambda</g> <td align="left"> changecom(,)&`#'955;changecom(`#')
+<td width="10%"> m4tt svg_mu</g> <td align="left"> changecom(,)&`#'956;changecom(`#')
+</tr>
<tr>
-<td width="8%"> m4tt svg_nu</g> <td align="left"> changecom(,)&`#'957;changecom(`#')
-<td width="8%"> m4tt svg_Xi</g> <td align="left"> changecom(,)&`#'926;changecom(`#')
-<td width="8%"> m4tt svg_xi</g> <td align="left"> changecom(,)&`#'958;changecom(`#')
-<td width="8%"> m4tt svg_Pi</g> <td align="left"> changecom(,)&`#'928;changecom(`#')
-<td width="8%"> m4tt svg_pi</g> <td align="left"> changecom(,)&`#'960;changecom(`#')
-<td width="8%"> m4tt svg_rho</g> <td align="left"> changecom(,)&`#'961;changecom(`#')
-<td width="8%"> m4tt svg_Sigma</g> <td align="left"> changecom(,)&`#'931;changecom(`#')
-<td width="8%"> m4tt svg_sigma</g> <td align="left"> changecom(,)&`#'963;changecom(`#')
+<td width="10%"> m4tt svg_nu</g> <td align="left"> changecom(,)&`#'957;changecom(`#')
+<td width="10%"> m4tt svg_Xi</g> <td align="left"> changecom(,)&`#'926;changecom(`#')
+<td width="10%"> m4tt svg_xi</g> <td align="left"> changecom(,)&`#'958;changecom(`#')
+<td width="10%"> m4tt svg_Pi</g> <td align="left"> changecom(,)&`#'928;changecom(`#')
+<td width="10%"> m4tt svg_pi</g> <td align="left"> changecom(,)&`#'960;changecom(`#')
+<td width="10%"> m4tt svg_rho</g> <td align="left"> changecom(,)&`#'961;changecom(`#')
+<td width="10%"> m4tt svg_Sigma</g> <td align="left"> changecom(,)&`#'931;changecom(`#')
+<td width="10%"> m4tt svg_sigma</g> <td align="left"> changecom(,)&`#'963;changecom(`#')
+</tr>
<tr>
-<td width="8%"> m4tt svg_tau</g> <td align="left"> changecom(,)&`#'964;changecom(`#')
+<td width="10%"> m4tt svg_tau</g> <td align="left"> changecom(,)&`#'964;changecom(`#')
<td width="10%"> m4tt svg_upsilon</g> <td align="left"> changecom(,)&`#'965;changecom(`#')
-<td width="8%"> m4tt svg_Phi</g> <td align="left"> changecom(,)&`#'934;changecom(`#')
-<td width="8%"> m4tt svg_phi</g> <td align="left"> changecom(,)&`#'966;changecom(`#')
-<td width="8%"> m4tt svg_chi</g> <td align="left"> changecom(,)&`#'967;changecom(`#')
-<td width="8%"> m4tt svg_Psi</g> <td align="left"> changecom(,)&`#'936;changecom(`#')
-<td width="8%"> m4tt svg_psi</g> <td align="left"> changecom(,)&`#'968;changecom(`#')
-<td width="8%"> m4tt svg_Omega</g> <td align="left"> changecom(,)&`#'937;changecom(`#')
+<td width="10%"> m4tt svg_Phi</g> <td align="left"> changecom(,)&`#'934;changecom(`#')
+<td width="10%"> m4tt svg_phi</g> <td align="left"> changecom(,)&`#'966;changecom(`#')
+<td width="10%"> m4tt svg_chi</g> <td align="left"> changecom(,)&`#'967;changecom(`#')
+<td width="10%"> m4tt svg_Psi</g> <td align="left"> changecom(,)&`#'936;changecom(`#')
+<td width="10%"> m4tt svg_psi</g> <td align="left"> changecom(,)&`#'968;changecom(`#')
+<td width="10%"> m4tt svg_Omega</g> <td align="left"> changecom(,)&`#'937;changecom(`#')
+</tr>
<tr>
-<td width="8%"> m4tt svg_omega</g> <td align="left"> changecom(,)&`#'969;changecom(`#')
-<td width="8%"> m4tt svg_micro</g> <td align="left"> changecom(,)&`#'956;changecom(`#')
-<td width="8%"> m4tt svg_ohm</g> <td align="left"> changecom(,)&`#'937;changecom(`#')
-<td width="8%"> m4tt svg_lt</g> <td align="left"> changecom(,)&`#'60;changecom(`#')
-<td width="8%"> m4tt svg_gt</g> <td align="left"> changecom(,)&`#'62;changecom(`#')
-<td width="8%"> m4tt svg_leq</g> <td align="left"> changecom(,)&`#'8804;changecom(`#')
-<td width="8%"> m4tt svg_geq</g> <td align="left"> changecom(,)&`#'8805;changecom(`#')
-<td width="8%"> m4tt svg_prime</g> <td align="left"> changecom(,)&`#'8242;changecom(`#')
+<td width="10%"> m4tt svg_omega</g> <td align="left"> changecom(,)&`#'969;changecom(`#')
+<td width="10%"> m4tt svg_micro</g> <td align="left"> changecom(,)&`#'956;changecom(`#')
+<td width="10%"> m4tt svg_ohm</g> <td align="left"> changecom(,)&`#'937;changecom(`#')
+<td width="10%"> m4tt svg_lt</g> <td align="left"> changecom(,)&`#'60;changecom(`#')
+<td width="10%"> m4tt svg_gt</g> <td align="left"> changecom(,)&`#'62;changecom(`#')
+<td width="10%"> m4tt svg_leq</g> <td align="left"> changecom(,)&`#'8804;changecom(`#')
+<td width="10%"> m4tt svg_geq</g> <td align="left"> changecom(,)&`#'8805;changecom(`#')
+<td width="10%"> m4tt svg_prime</g> <td align="left"> changecom(,)&`#'8242;changecom(`#')
+</tr>
<tr>
-<td width="8%"> m4tt svg_backsl</g> <td align="left"> changecom(,)&`#'92;changecom(`#')
-<td width="8%"> m4tt svg_pound</g> <td align="left"> changecom(,)&`#'35;changecom(`#')
-<td width="8%"> m4tt svg_comma</g> <td align="left"> changecom(,)&`#'44;changecom(`#')
-<td width="8%"> m4tt svg_lparen</g> <td align="left"> changecom(,)&`#'40;changecom(`#')
-<td width="8%"> m4tt svg_rparen</g> <td align="left"> changecom(,)&`#'41;changecom(`#')
-<td width="8%"> m4tt svg_emsp</g> <td align="left"> |changecom(,)&`#'8195;changecom(`#')|
-<td width="8%"> m4tt svg_ensp</g> <td align="left"> |changecom(,)&`#'8194;changecom(`#')|
-<td width="8%"> m4tt svg_thinsp</g> <td align="left"> |changecom(,)&`#'8201;changecom(`#')|
+<td width="10%"> m4tt svg_backsl</g> <td align="left"> changecom(,)&`#'92;changecom(`#')
+<td width="10%"> m4tt svg_pound</g> <td align="left"> changecom(,)&`#'35;changecom(`#')
+<td width="10%"> m4tt svg_comma</g> <td align="left"> changecom(,)&`#'44;changecom(`#')
+<td width="10%"> m4tt svg_lparen</g> <td align="left"> changecom(,)&`#'40;changecom(`#')
+<td width="10%"> m4tt svg_rparen</g> <td align="left"> changecom(,)&`#'41;changecom(`#')
+<td width="10%"> m4tt svg_circ</g> <td align="left"> changecom(,)&`#'710;changecom(`#')
+<td width="10%"> m4tt svg_deg</g> <td align="left"> changecom(,)&`#'176;changecom(`#')
+</tr>
</table>
+<table cellpadding="2" cellspacing="0" width="75%" >
+<tr>
+<td width="8%"> m4tt svg_emsp</g> <td width="50px" align="left"> |changecom(,)&`#'8195;changecom(`#')|
+<td width="8%"> m4tt svg_ensp</g> <td width="50px" align="left"> |changecom(,)&`#'8194;changecom(`#')|
+<td width="8%"> m4tt svg_thinsp</g> <td width="50px" align="left"> |changecom(,)&`#'8201;changecom(`#')|
+</tr>
+</table>
+<hr width="100%" align="left">
</ul>
<li> Inkscape: It may be efficient to define elements by macro and to
- place them using a WYSIWYG graphics editor. A draft page intended
+ place them using a wysiwyg graphics editor. A draft page intended
for Inkscape is included. A reasonable variety of elements is defined
but many more could be added and they should be customized for
- particular applications.
+ particular applications. Adjustments may also have to be made to
+ obtain the proper snap-to actions.
<li> Link experiments: Click on the resistor or source of quickSVG
to go to external
files in new windows. Click on "n-port" in NportSVG to replace the diagram
and then "back" to return.
- <li> Some of the assumptions used to create this draft may be naive. Comments
- are welcome.
+ <li> Some of the assumptions used to create this draft may be
+ na&`#'239;ve.
+ Comments are welcome.
</ul>
+
+<!--
+<embed pluginspage="http://www.adobe.com/svg/viewer/install/" />
+-->
+
+<hr>
+
+<table>
+<tr>
+<td width="50%">
+<table><tr>cfig(quickSVG,
+ SVG produced by dpic,y)
+<!-- <tr> SVG produced by dpic --> </table>
+<td>
+<table><tr>cfig(quick,
+ SVG produced from quick.pdf by dvisvgm,y)
+<!-- <tr> SVG produced from quick.pdf by dvisvgm --> </table>
+</table>
+
<hr>
-cfig(quickSVG)
-cfig(CctTableSVG)
-cfig(DiodesSVG)
-cfig(EmarrowsSVG)
-cfig(SourcesSVG)
-cfig(VariableSVG)
-cfig(AmpTableSVG)
-cfig(FusesSVG)
-cfig(SwitchesSVG)
-cfig(GroundsSVG)
-cfig(AntennasSVG)
-cfig(AudioSVG)
-cfig(OpampSVG)
-cfig(XformSVG)
-cfig(NPDTSVG)
-cfig(ContactSVG)
-cfig(ContactsSVG)
-cfig(relaycoilSVG)
-cfig(RelaySVG)
-cfig(JackSVG)
-cfig(ConnSVG)
-cfig(PconnSVG)
-cfig(HeadersSVG)
-cfig(ConnectorsSVG)
-cfig(fetSVG)
-cfig(ujtSVG)
-cfig(thyristorSVG)
-cfig(BipSVG)
-cfig(TgateSVG)
-cfig(NportSVG)
-cfig(NLGSVG)
-cfig(WindingsSVG)
-cfig(ex01SVG)
-cfig(TimerSVG)
-cfig(OptoisoSVG)
-cfig(MixerSVG)
-cfig(PushPullSVG)
-cfig(QuantumSVG)
-cfig(SQUIDSVG)
-cfig(SixpoleSVG)
-cfig(ex18SVG)
-cfig(MCSVG)
-cfig(ex10SVG)
-cfig(ThreeSVG)
-cfig(ex17SVG)
-cfig(ex02SVG)
-cfig(ex12SVG)
-cfig(pwrsupplySVG)
-cfig(TTLnandSVG)
-cfig(I2LSVG)
-cfig(SchottkySVG)
-cfig(ex11SVG)
-cfig(ex04SVG)
-cfig(CsourceSVG)
-cfig(DriveSVG)
-cfig(ex16SVG)
-cfig(ex03SVG)
-cfig(MotorControlSVG)
-cfig(RectifiersSVG)
-cfig(HeathkitSVG)
-cfig(lcctSVG)
-cfig(TubediagsSVG)
-cfig(sfgSVG)
-cfig(LogicSVG)
-cfig(ex08SVG)
-cfig(DecoderSVG)
-cfig(ex21SVG)
-cfig(MultiplexerSVG)
-cfig(DemultiplexerSVG)
-cfig(ShiftRSVG)
-cfig(AdderSVG)
-cfig(CanLogicSVG)
-cfig(AlogixSVG)
-cfig(ABlogixSVG)
-cfig(XORSVG)
-cfig(paletteSVG)
-cfig(ex00SVG)
-cfig(controlSVG)
-cfig(GrayCodeSVG)
-cfig(CrossbarSVG)
-cfig(ByteSVG)
-cfig(RotboxSVG)
-cfig(ex06SVG)
-cfig(ex09SVG)
-cfig(ex05SVG)
-cfig(LoglogSVG)
-cfig(randomSVG)
-cfig(expSVG)
-cfig(graysurfSVG)
-cfig(shapesSVG)
-cfig(AntiqueClockSVG)
-cfig(cscSVG)
-cfig(roseSVG)
-cfig(diamondSVG)
-cfig(wormSVG)
-cfig(ButtonsSVG)
-cfig(DiniSVG)
-cfig(SierpinskiSVG)
-cfig(recycleSVG)
-cfig(ex15SVG)
-cfig(CountingSVG)
-cfig(CrowSVG)
-cfig(FlowSVG)
+cfig(CctTableSVG,
+ Two-terminal elements, showing some variations)
+
+cfig(DiodesSVG,
+ Diodes: a m4tt`'K</g> in the second argument draws an open
+ arrowhead)
+
+cfig(EmarrowsSVG,
+ Radiation arrows)
+
+cfig(SourcesSVG,
+ Sources and source-like elements)
+
+cfig(VariableSVG,
+ Arrows and marks indicating variability)
+
+cfig(AmpTableSVG,
+ Macros m4tt`'amp`,' delay</g>`,' and m4tt`'integrator</g>)
+
+cfig(FusesSVG,
+ Macros m4tt`'fuse</g> and m4tt`'cbreaker</g>)
+
+cfig(SwitchesSVG,
+ The switch macros; m4tt`'switch(`,'`,'`,'L|B|D)</g> is a wrapper
+ for m4tt`'lswitch</g>`,' m4tt`'bswitch</g>`,' and m4tt`'dswitch</g>)
+
+cfig(GroundsSVG,
+ Ground symbols)
+
+cfig(AntennasSVG,
+ Antenna symbols)
+
+cfig(AudioSVG,
+ Audio elements)
+
+cfig(OpampSVG,
+ The opamp)
+
+cfig(XformSVG,
+ The transformer element`,' drawing direction down)
+
+cfig(NPDTSVG,
+ Double throw with the m4tt`'NPDT</g> macro)
+
+cfig(ContactSVG,
+ A non-exhaustive sampling of m4tt`'contact</g> macro variations)
+
+cfig(ContactsSVG,
+ The m4tt`'contacts</g> macro)
+
+cfig(relaycoilSVG,
+ The m4tt`'relaycoil</g> macro)
+
+cfig(RelaySVG,
+ Some variants of the m4tt`'relay</g> macro)
+
+cfig(JackSVG,
+ The m4tt`'jack</g> and m4tt`'plug</g> macros)
+
+cfig(ConnSVG,
+ The m4tt`'tstrip`,' ccoax`,' tconn</g>`,' and m4tt`'tbox</g> macros)
+
+cfig(PconnSVG,
+ The m4tt`'pconnex</g> macro)
+
+cfig(HeadersSVG,
+ The m4tt`'Header</g> macro)
+
+cfig(ConnectorsSVG,
+ Some connectors with simple geometry and lists of labels)
+
+cfig(fetSVG,
+ FETs`,' showing programmable components and example customizations)
+
+cfig(ujtSVG,
+ UJT examples)
+
+cfig(thyristorSVG,
+ Thyristor examples)
+
+cfig(BipSVG,
+ Bipolar transistors (drawing direction: up))
+
+cfig(TgateSVG,
+ The m4tt`'tgate</g> and m4tt`'ptrans</g> elements)
+
+cfig(NportSVG,
+ The m4tt`'nport</g> and m4tt`'nterm</g> macros)
+
+cfig(NLGSVG,
+ Some customizations of m4tt`'nport</g>)
+
+cfig(WindingsSVG,
+ The macro
+ m4tt`'winding(L|R`,'diam`,'pitch`,'turns`,'core wid`,'core color)</g>)
+
+cfig(ex01SVG,
+ Two simple labeled circuits)
+
+cfig(ex02SVG,
+ Elements at obtuse angles)
+
+cfig(OptoisoSVG,
+ Optical isolator: a circuit with right or left orientation)
+
+cfig(MixerSVG,
+ A balanced mixer`,' using m4tt`'mosfet</g> and a custom transformer)
+
+cfig(PushPullSVG,
+ A push-pull mixer`,' showing FETs with multiple gates)
+
+cfig(QuantumSVG,
+ A quantum circuit)
+
+cfig(SQUIDSVG,
+ Superconducting quantum interface device (drawing direction down))
+
+cfig(SixpoleSVG,
+ A six-pole filter)
+
+cfig(ex18SVG,
+ Precision half-wave rectifier and a tunnel diode circuit
+ (illustrating m4tt`'opamp`,' diode`,' resistor`,' ground`,'</g>
+ and labels))
+
+cfig(MCSVG,
+ A three-phase switched AC-AC converter and a DC-DC converter)
+
+cfig(ex10SVG,
+ Non-planar graph and bistable circuit
+ (illustrating the m4tt`'crossover</g> macro and colored elements))
+
+cfig(ThreeSVG,
+ Three-phase oscillator)
+
+cfig(ex17SVG,
+ A repetitive network created by Pic looping and
+ a skewed circuit used to test the macro m4tt`'parallel_</g>)
+
+cfig(ex12SVG,
+ A CMOS NAND gate`,' a test circuit`,' and an XMOSFET example)
+
+cfig(pwrsupplySVG,
+ An elementary power supply circuit with colored elements`,'
+ and a multiple-winding transformer with 3-phase rectifier)
+
+cfig(TTLnandSVG,
+ TTL NAND gate illustrating a transistor with multiple emitters)
+
+cfig(I2LSVG,
+ Gate circuit and equivalent embedded components
+ illustrating multiple collectors)
+
+cfig(SchottkySVG,
+ A 4-input NAND circuit illustrating the m4tt`'S</g> (Schottky)
+ option of m4tt`'bi_trans</g>)
+
+cfig(ex11SVG,
+ Transistor radio audio chain)
+
+cfig(ex04SVG,
+ Labels on non-manhattan elements)
+
+cfig(CsourceSVG,
+ Realization of a controlled source
+ (illustrating stacked element labels))
+
+cfig(DriveSVG,
+ Synchronous machine driven by variable-speed drive and rectifier)
+
+cfig(ex16SVG,
+ A rate 1/2 binary convolutional coder and its state diagram)
+
+cfig(ex03SVG,
+ Digital filter)
+
+cfig(MotorControlSVG,
+ Motor control connections)
+
+cfig(RectifiersSVG,
+ Rectifier circuits and waveforms)
+
+cfig(HeathkitSVG,
+ The power supply of a Heathkit AR-15 (Now`,' <i>that</i>
+ was a receiver!) with custom transformer and other elements`,'
+ drawn on a grid (partially shown) to aid in placement)
+
+cfig(lcctSVG,
+ A digital circuit of moderate size`,'
+ redrawn from M. P. Maclenan and G. M. Burns`,'
+ "An Approach to Drawing Circuit Diagrams for Text Books`,'"
+ Tugboat (12)1`,' March 1991`,' pp. 66-69)
+
+cfig(UNOSVG,
+ An Arduino UNO circuit adapted and redrawn)
+ <!--
+ m4tt`'https://content.arduino.cc/assets/UNO-TH_Rev3e_sch.pdf</g>
+ -->
+
+cfig(TubediagsSVG,
+ Electron-tube diagrams: a few bottom-view base diagrams`,'
+ a generic triode test circuit`,' and a 25-watt audio amplifier adapted
+ from F. Langford-Smith`,' <i>Radiotron Designers Handbook</i>`,' fourth
+ edition`,' Harrison`,' NJ: Radio Corporation of America`,' 1952)
+
+cfig(sfgSVG,
+ Signal-flow graphs)
+
+cfig(LogicSVG,
+ Basic logic gates)
+
+cfig(ex08SVG,
+ General-purpose latch: a small logic circuit)
+
+cfig(DecoderSVG,
+ Decoder logic`,' constructed using the m4tt`'for_</g> macro)
+
+cfig(ex21SVG,
+ Some flip-flops)
+
+cfig(MultiplexerSVG,
+ Multiplexer)
+
+cfig(DemultiplexerSVG,
+ Demultiplexer)
+
+cfig(ShiftRSVG,
+ A 5-bit shift register drawn using a custom flip-flop)
+
+cfig(AdderSVG,
+ A full adder and a cascade of n-bit adders)
+
+cfig(CanLogicSVG,
+ A way of automatically drawing two-layer logic diagrams)
+
+cfig(AlogixSVG,
+ The m4tt`'Autologix(`'<i>Boolean expression</i>;
+ <i>Boolean expression</i>... `,' <i>options</i>)</g>
+ macro automatically draws Boolean expressions in function notation.
+ The function tree is drawn`,' then a row or column of inputs`,' then
+ the connections. The default result is on the left`,'
+ a custom element at the top`,' and a tree of gates only is shown
+ on the right. THe lower examples illustrate the L`,' R`,' and V options.)
+
+cfig(ABlogixSVG,
+ The m4tt`'Autologix</g> macro can draw inputs on the left but
+ the added drawing complexity may require hand tuning with
+ second-argument options: m4tt`'L</g> puts the inputs on the left`,'
+ m4tt`'R reverses their order`,' m4tt`'V</g> scans the input arguments
+ in reverse order`,' and m4tt`'offset=</g>`'<i>value</i> displaces
+ the array of inputs)
+
+cfig(XORSVG,
+ Realizations of the XOR function using m4tt`'Autologix</g>)
+
+cfig(paletteSVG,
+ A draft palette of a few elements for Inkscape using
+ a 1 mm grid)
+
+cfig(ex00SVG,
+ Line diagrams)
+
+cfig(controlSVG,
+ Control-system block diagrams that do not require m4)
+
+cfig(GrayCodeSVG,
+ Gray code 10-bit encoder disk pattern)
+
+cfig(CrossbarSVG,
+ A crossbar switch)
+
+cfig(ByteSVG,
+ Elementary splines)
+
+cfig(RotboxSVG,
+ The macro
+ m4tt`'rotbox(<i>wid,ht,type,</i>[r|t=<i>val</i>])</g>
+ draws a box in the current direction)
+
+cfig(ex06SVG,
+ Crosshatching by m4tt`'for</g> loops)
+
+cfig(ex09SVG,
+ Illustrating the macro
+ m4tt`'dimension_(<i>linespec`,' offset`,' label`,' </i>
+ H|W|D|<i>blank width</i>`,' <i>tic offset</i>`,' <-|->)</g>.
+ A negative second argument implies an offset to the right of the
+ <i>linespec</i> direction. A <i>label</i> starting with
+ m4tt`'"</g> or
+ m4tt`'sprintf</g> is copied literally. If <i>label</i> is an
+ m4tt`'s_box(...)</g> then setting argument 4 to m4tt`'H</g>`,'
+ m4tt`'W</g>`,'
+ or m4tt`'D</g> tailors the blank width to the m4tt`'s_box</g> height`,'
+ width`,' or diagonal respectively; i.e.`,' m4tt`'W</g> is equivalent to
+ m4tt`'s_wd+textoffset*2</g>.
+ The macro m4tt`'arcdimension_</g> is similar but the first argument
+ specifies the arc to be dimensioned and the second argument is
+ the outward radial offset of the dimension arrow arc.)
+
+cfig(Y14-5SVG,
+ Dimensioning with tolerances according to ASME Y14.5)
+ Use of m4tt`'darrow</g> and m4tt`'Darc</g>)
+
+cfig(ex05SVG,
+ Use of m4tt`'darrow</g> and m4tt`'Darc</g>)
+
+cfig(LoglogSVG,
+ A graph drawn using the pic language)
+
+cfig(GeometrySVG,
+ A plane geometry example)
+
+cfig(LyapSVG,
+ Illustrating a Lyapunov function)
+
+cfig(randomSVG,
+ Testing random numbers)
+
+cfig(expSVG,
+ Test of m4tt`'project</g> and other m4tt`'lib3D</g>
+ macros`,' showing the projection of a solid onto
+ the <i>y1`,'z1</i> plane by sighting along the x1 axis.)
+
+cfig(graysurfSVG,
+ Plotting surfaces using gray scales. A sort algorithm
+ determines plotting order)
+
+cfig(shapesSVG,
+ Basic shapes)
+
+cfig(AntiqueClockSVG,
+ An antique clock face)
+
+cfig(cscSVG,
+ Conestoga Sailing Club (illustrating the filling of arbitrary
+ shapes))
+
+cfig(roseSVG,
+ Redrawn from a detail of the set design for the musical
+ <i>Dracula</i>`,' used for testing m4tt`'dpic</g>. 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)
+
+cfig(diamondSVG,
+ Variations on M. Goossens`,' S. Rahtz`,' and F. Mittelbach`,'
+ <i>The LaTeX Graphics Companion</i>`,' Addison-Wesley 1997`,' pp. 57-58)
+
+cfig(wormSVG,
+ An exercise in calculating RGB colours)
+
+cfig(ButtonsSVG,
+ Shading in color)
+
+cfig(DiniSVG,
+ Dini surface and an icosahedron)
+
+cfig(SierpinskiSVG,
+ The Sierpinski triangle and a Cayley graph:
+ tests of pic macro recursion)
+
+cfig(recycleSVG,
+ Modest repetition and partial fill)
+
+cfig(ex15SVG,
+ Simple diagrams that are easily drawn by looping)
+
+cfig(CountingSVG,
+ An example of enumeration)
+
+cfig(CrowSVG,
+ Illustrating m4tt`'shadebox</g> and a custom crowfoot line
+ termination)
+
+cfig(FlowSVG,
+ A flowchart sampler)
<!-- <p>
More flow-chart examples? Try
<a href="https://buraphakit.sourceforge.io/EFI/EFI_2019_S2_W13.shtml"
TARGET="_blank">here.</a>
</p> -->
-cfig(BtreeSVG)
-cfig(TtreeSVG)
-cfig(InclepsSVG)
+
+cfig(BtreeSVG,
+ Binary trees)
+
+cfig(InclepsSVG,
+ Overlaying a figure with line graphics)
+
cfig(FontsSVG)
+</td>
+</tr>
+</table>
</BODY>
</HTML>
diff --git a/graphics/circuit_macros/examples/svg/paletteSVG.m4 b/graphics/circuit_macros/examples/svg/paletteSVG.m4
index 2bad59ba93..6128441fc8 100644
--- a/graphics/circuit_macros/examples/svg/paletteSVG.m4
+++ b/graphics/circuit_macros/examples/svg/paletteSVG.m4
@@ -333,8 +333,8 @@ A:Gridbox( FlipFlop(D)
] with .nw at (0,0)
-"A draft palette of a few elements for Inkscape using a 1 mm grid" \
- ljust below at last [].sw
+#"A draft palette of a few elements for Inkscape using a 1 mm grid" \
+# ljust below at last [].sw
command "</g>" # end font
.PE
diff --git a/graphics/circuit_macros/examples/svg/pwrsupplySVG.m4 b/graphics/circuit_macros/examples/svg/pwrsupplySVG.m4
index 843c6660b5..37c7524070 100644
--- a/graphics/circuit_macros/examples/svg/pwrsupplySVG.m4
+++ b/graphics/circuit_macros/examples/svg/pwrsupplySVG.m4
@@ -1,42 +1,76 @@
.PS
-# Pwrsupply.m4
+# pwrsupply.m4
cct_init
ifdef(`m4pco',`resetrgb')
- linewid = linewid*1.2
- down_
-T:transformer
- line left_ elen_/4 from T.P1
- rgbdraw(0,0,255,fuse(left_ elen_/3,D))
- reversed(`switch')
- gap(down_ to (Here,T.P2))
- { fuse(right_ 2*dimen_/5 at last []) }
- line to T.P2
- blen = dimen_/2
-W: T.TS+(dimen_,0)
-N: W+(blen,blen)
-S: W+(blen,-blen)
-E: S+(blen,blen)
- diode(from W to N)
- diode(from S to E)
-G:gap(from E+(dimen_*4/3,0) down_ (E.y-S.y)*5/4); llabel("+" wid 0.1*scale,,-)
-C:capacitor(down_ G.start.y-G.end.y from 0.5 between E and G.start,C)
+Singlephase:[
+ linewid = linewid*1.2
+ down_
+ T:transformer
+ line left_ elen_/8 from T.P1
+ rgbdraw(0,0,1,fuse(left_ elen_/3,D))
+ reversed(`switch',left_ elen_*2/3)
+ gap(down_ to (Here,T.P2))
+ { fuse(right_ 2*dimen_/5 at last []) }
+ line to T.P2
+ blen = dimen_/2
+ W: T.TS+(dimen_/2,0)
+ N: W+(blen,blen)
+ S: W+(blen,-blen)
+ E: S+(blen,blen)
+ diode(from W to N)
+ diode(from S to E)
+ G: gap(from E+(dimen_,0) down_ (E.y-S.y)*5/4); llabel(+,,-)
+ C: capacitor(down_ G.start.y-G.end.y from 0.5 between E and G.start,C)
+
+ setrgb(255,0,0)
+ line from T.S1 to (T.S1,N); line to N
+ dot
+ diode(to E); dot
+ line from E to G.start; dot
+ dot(at C.start)
+ resetrgb
+
+ setrgb(0,255,0,,D)
+ dot(at C.end)
+ dot(at G.end)
+ ground
+ line to (W,Here); line to W; dot
+ diode(to S); dot
+ line to (T.S2,Here); line to T.S2
+ resetrgb
+ ]
-setrgb(255,0,0)
- line from T.S1 to (T.S1,N); line to N
- dot
- diode(to E); dot
- line from E to G.start; dot
- dot(at C.start)
-resetrgb
+Threephase: [
+L:[ loadht = 2*elen_
+ Load: ebox(down_ loadht,0.4,0.25); llabel(+,,-)
+ hsep = dimen_*3/4
+ for_(1,3,1,
+ `line left_ hsep; ifelse(m4x,3,,dot)
+ { diode(up_ loadht/3) ; line up_ loadht/3; diode(up_ loadht/3)
+ T`'m4x: ifelse(m4x,3,Here,dot)
+ line right hsep } ')
+ ]
-setrgb(0,255,0,,D)
- dot(at C.end)
- dot(at G.end)
- ground
- line to (W,Here); line to W; dot
- diode(to S); dot
- line to (T.S2,Here); line to T.S2
-resetrgb
+T:[
+ X1: transformer(down_ dimen_*2/3,,,,4)
+ X2: transformer(down_ dimen_*2/3,,,,4) with .P1 at X1.P2
+ X3: transformer(down_ dimen_*2/3,,,,4) with .P1 at X2.P2
+ line from X1.M4Core1.end to X3.M4Core1.start
+ line from X1.M4Core2.end to X3.M4Core2.start
+ for_(1,3,1,
+ `move to X`'m4x.P2 ; ifelse(m4x,3,,dot)
+ line left_ dimen_
+ P`'m4x: dot(,,1)')
+ line left_ dimen_/2 from X1.P1 then down X1.P1.y-P3.y; dot
+ B: X1.S2+(dimen_/2,0)
+ line from X1.S1 right B.x-X1.S2.x then down X1.S1.y-X3.S1.y then to X3.S1
+ line from X2.S1 to (B,X2.S1); dot
+ ] with .X2.S2 at L.w-(dimen_,0)
+
+ line from T.X1.S2 to (L.T3,T.X1.S2); dot
+ line from T.X2.S2 to (L.T2,T.X2.S2); dot
+ line from T.X3.S2 to (L.T1,T.X3.S2); dot
+] with .sw at Singlephase.se+(0.3,0)
.PE
diff --git a/graphics/circuit_macros/examples/svg/quickSVG.m4 b/graphics/circuit_macros/examples/svg/quickSVG.m4
index 7b63ec6db7..3e77ad1694 100644
--- a/graphics/circuit_macros/examples/svg/quickSVG.m4
+++ b/graphics/circuit_macros/examples/svg/quickSVG.m4
@@ -5,16 +5,16 @@ elen = 0.75 # Variables are allowed; default units are inches
move right 0.4
Origin: Here # Position names are capitalized
svgLink(SourcesSVG.svg,source(up_ elen))
- llabel(-,v`'svg_sub(s),+)
- svgLink(CctTableSVG.svg,resistor(right_ elen)); rlabel(,R,)
+ llabel(-,svg_it(v`'svg_sub(s)),+)
+ svgLink(CctTableSVG.svg,resistor(right_ elen)); rlabel(,svg_it(R),)
dot
{ # Save current position and direction
capacitor(down_ to (Here,Origin)) #(Here,Origin) = (Here.x,Origin.y)
- rlabel(+,v,-); llabel(,,C)
+ rlabel(+,svg_it(v),-); llabel(,svg_it(C))
dot
} # Restore position and direction
line right_ elen*2/3
{move right 0.2}
- inductor(down_ Here.y-Origin.y); rlabel(,L,); b_current("i")
+ inductor(down_ Here.y-Origin.y); rlabel(,svg_it(L),); b_current("svg_it(i)")
line to Origin
.PE # Pic input ends
diff --git a/graphics/circuit_macros/examples/svg/randomSVG.m4 b/graphics/circuit_macros/examples/svg/randomSVG.m4
index e482d9f1e4..4ca2056d68 100644
--- a/graphics/circuit_macros/examples/svg/randomSVG.m4
+++ b/graphics/circuit_macros/examples/svg/randomSVG.m4
@@ -6,6 +6,7 @@ NeedDpicTools
################################################################
# hscale(right length,nlabels,
# minlabel,maxlabel,[T][N])
+# arg5=T: top axis, N: nolabels
define(`hscale',`[ define(`hs_nl',`ifelse(`$2',,5,`$2')')
A: line `$1' ; Start: A.start; End: A.end
td = 1/(hs_nl-1)*A.len/5
@@ -24,6 +25,7 @@ NeedDpicTools
]')
# vscale(up length,nlabels,
# minlabel,maxlabel,[R][N] )
+# arg5=R: right axis, N: nolabels
define(`vscale',`[ define(`vs_nl',`ifelse(`$2',,5,`$2')')
A: line `$1' ; Start: A.start; End: A.end
td = 1/(vs_nl-1)*A.len/5
@@ -46,7 +48,7 @@ NeedDpicTools
################################################################
[
- n = 2000
+ n = 2000 # number of samples
stddev = 0.25
graphsize = 2
diff --git a/graphics/circuit_macros/examples/svg/tstSVG.htmx b/graphics/circuit_macros/examples/svg/tstSVG.htmx
index 6bb5ab2029..d81a22927a 100644
--- a/graphics/circuit_macros/examples/svg/tstSVG.htmx
+++ b/graphics/circuit_macros/examples/svg/tstSVG.htmx
@@ -168,6 +168,9 @@ more basic.
<td width="8%"> m4tt svg_emsp</g> <td align="left"> |changecom(,)&`#'8195;changecom(`#')|
<td width="8%"> m4tt svg_ensp</g> <td align="left"> |changecom(,)&`#'8194;changecom(`#')|
<td width="8%"> m4tt svg_thinsp</g> <td align="left"> |changecom(,)&`#'8201;changecom(`#')|
+<tr>
+<td width="8%"> m4tt svg_circ</g> <td align="left"> |changecom(,)&`#'710;changecom(`#')|
+<td width="8%"> m4tt svg_deg</g> <td align="left"> |changecom(,)&`#'176;changecom(`#')|
</table>
</ul>
diff --git a/graphics/circuit_macros/examples/xfig/xfiglib.fig b/graphics/circuit_macros/examples/xfig/xfiglib.fig
index 6b3d4fb3e4..255d8170c1 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 2020.06.01 option -x for Fig 3.2
+# dpic version 2021.01.01 option -x for Fig 3.2
1200 2
6 0 0 3975 5025
6 0 0 3975 5025
diff --git a/graphics/circuit_macros/gpic.m4 b/graphics/circuit_macros/gpic.m4
index 16d58c7a15..70e5c38427 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.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 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 e469841036..81bde54de0 100644
--- a/graphics/circuit_macros/lib3D.m4
+++ b/graphics/circuit_macros/lib3D.m4
@@ -3,7 +3,7 @@ lib3D.m4 Macros for rotation, projection, and other
operations on argument triples representing
3D vectors.
-* Circuit_macros Version 9.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 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 *
@@ -92,8 +92,9 @@ 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')')
- Assign the direction cosines to variables
- `assign3D([u],[v],[w],x,y,z); eg
+
+ `Assign the direction cosines to variables
+ 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'
@@ -101,6 +102,11 @@ define(`assign3D',
`ifelse(`$1',,,`$1' = `$4')
ifelse(`$2',,,`$2' = `$5')
ifelse(`$3',,,`$3' = `$6')')
+ `vassign3D(name,x,y,z); eg
+ vassign3D(u,x,y,z)
+ assigns u[1] to x, u[2] to y, u[3] to 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')')
diff --git a/graphics/circuit_macros/libcct.m4 b/graphics/circuit_macros/libcct.m4
index 0ae189ad17..81d36357c6 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.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 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 *
@@ -189,11 +189,12 @@ define(`capacitor',
line to rvec_(rp_len,0) invis ')')
`resistor( linespec, cycles, chars, cycle wid)
+ cycles: default 3
chars : E=ebox
ES=ebox with slash
Q=offset
- H=squared (default 3 cycles)
- N=IEEE (default 3 cycles)
+ H=squared
+ N=IEEE (default)
V=varistor variant
R=to right of drawing direction
arg4: cycle width, default dimen_/6'
@@ -845,56 +846,113 @@ define(`fuse',`eleminit_(`$1')
{[box invis ht_ m4ht wid_ m4wd] at rvec_(rp_len/2,0)}
line to rvec_(rp_len,0) invis ')
- `arrester( linespec, [G|E|S][D[L]], len, ht )
- G= spark gap (default)
- E= gas discharge
- S= surge
- D= double (creates 3-terminal element)
- DL= double, left orientation'
+ `arrester( linespec, [G|E|S][D[L|R]],
+ len[:arrowhead ht], ht[:arrowhead wid] )
+ arg2 chars:
+ G= spark gap (default)
+ g= general (dots)
+ E= gas discharge
+ S= box enclosure
+ C= carbon block
+ A= electrolytic cell
+ H= horn gap
+ P= protective gap
+ s= sphere gap
+ F= film element
+ M= multigap
+ modifiers:
+ R= right orientation
+ L= left orientation
+ D= 3-terminal element for S, E only with
+ terminals A, B, G'
define(`arrester',
- `define(`m4wd',ifelse(`$3',,`dimen_/2',`($3)'))dnl
- define(`m4ht',ifelse(`$4',,`dimen_/5',`($4)'))dnl
- define(`m4arm',ifinstr(`$2',L,,-))dnl
- define(`m4ardna',`patsubst(patsubst(`$2',L),D)')dnl
- define(`m4awd',arrowwid*4/3)define(`m4aht',arrowht*2/3)dnl
- define(`m4len',`ifinstr(`$2',D,`ifelse(`$1',,dimen_)',`$1')')dnl
- ifinstr(`$2',D,[)eleminit_(m4len)ifinstr(`$2',D,,`;{')dnl
- ifinstr( m4ardna,S,
- `line to rvec_(max(0,rp_len/2-m4wd/2),0)
- {lbox(m4wd,m4ht)}
- {arrow to rvec_(m4wd*0.4,0) wid m4awd ht m4aht}
- ifinstr(`$2',D,
- `A: 3rd last line.start; B: last line.end; C: 1/2 between A and B
- move to rvec_(m4wd/2,m4arm`'(-m4ht/2))
- Gb: line to rvec_(0,m4arm`'(m4ht*2))
- G: Here]',
- `line from rvec_(m4wd,0) to rvec_(max(0,rp_len/2+m4wd/2),0)}
- {[box invis ht_ m4ht wid_ m4wd] at rvec_(rp_len/2,0)}
- line to rvec_(rp_len,0) invis ') ',
- m4ardna,E,
- `arrow to rvec_(max(0,rp_len/2-m4wd/8),0) wid m4awd ht m4aht
- {dot(at rvec_(-m4aht/4,-m4wd/4),dotrad_*2/3)}
- {move to rvec_(m4wd/4,0)
- arrow <- to rvec_(max(0,rp_len/2-m4wd/8),0) wid m4awd ht m4aht }
- {circle diam m4wd at rvec_(m4wd/8,0)}
- ifinstr(`$2',D,
- `A: 2nd last arrow.start; B: last arrow.end; C: last circle.c
- move to rvec_(m4wd/8,m4arm`'(-m4ht/2))
- Gb: line to rvec_(0,m4arm`'ifelse(`$3',,`dimen_/2',`($3)'))
- G: Here]',
- `}; {[box invis ht_ m4wd wid_ m4wd] at rvec_(rp_len/2,0)}
- line to rvec_(rp_len,0) invis ')',
- `define(`m4wd',ifelse(`$3',,`dimen_/8',`($3)'))dnl
- arrow to rvec_(max(0,rp_len/2-m4wd/2),0) wid m4awd ht m4aht
- { move to rvec_(m4wd,0)
- arrow <- to rvec_(max(0,rp_len/2-m4wd/2),0) wid m4awd ht m4aht }
+ `define(`m4rdna',`patsubst(`$2',D\|L\|R)')dnl
+ ifelse(m4rdna,,`define(`m4rdna',G)')dnl
+ define(`m4rL',ifinstr(`$2',L,-))dnl
+ define(`m4rR',ifinstr(`$2',R,-))dnl
+
+ define(`m4aht',`m4Rightstr(`$3',arrowht*2/3)')dnl
+ define(`m4awd',`m4Rightstr(`$3',arrowwid*4/3)')dnl
+
+ define(`m4wd',
+ `ifinstr(m4rdna,C,`m4Leftstr(`$3',dimen_/3)',
+ m4rdna,F,`m4Leftstr(`$3',dimen_/3)',
+ m4rdna,s,`m4Leftstr(`$3',dimen_/4)',
+ m4rdna,E,`m4Leftstr(`$3',dimen_*5/8)',
+ `m4Leftstr(`$3',dimen_/2)')')dnl
+
+ define(`m4ht',
+ `ifinstr(Loopover_(`Z',`ifinstr(m4rdna,Z,T)',C,A,s),T,
+ `m4Leftstr(`$4',dimen_/4)',
+ ifinstr(m4rdna,F,T),T,`m4Leftstr(`$4',dimen_/3)',
+ `m4Leftstr(`$4',dimen_/5)')')dnl
+
ifinstr(`$2',D,
- `A: 2nd last arrow.start; B: last arrow.end; C: 1/2 between A and B
- move to rvec_(m4wd/2,m4arm`'(-m4awd))
- Gb: line to rvec_(0,m4arm`'ifelse(`$3',,`dimen_/2',`($3)'))
- G: Here]',
- `}; {[box invis ht_ m4ht wid_ m4wd+2*m4aht] at rvec_(rp_len/2,0)}
- line to rvec_(rp_len,0) invis ')')')
+ `[ define(`m4LL',m4rL)dnl
+ ifinstr(m4rdna,S,
+ `R: arrester(ifelse(`$1',,`to rvec_(dimen_,0)'),m4rdna,shift(shift($@)))
+ Gb: line from R.c+vec_(0,m4LL m4ht/2) to R.c+vec_(0,m4LL (-m4ht*3/2)) ',
+ m4rdna,E,
+ `R: arrester(ifelse(`$1',,`to rvec_(dimen_,0)'),m4rdna,shift(shift($@)))
+ Gb: line from R.c+vec_(0,m4LL m4wd/8) to R.c+vec_(0,m4LL (-m4wd*3/4)) ')
+ A: R.start; B: R.end; C: R.c; G: Here ]',
+
+ `eleminit_(`$1',elen_)
+ {line to rvec_(max(0,rp_len/2-m4wd/2),0)
+ {[ Orig: Here
+ ifinstr(m4rdna,G,
+ `{arrow to rvec_(m4aht,0) wid m4awd ht m4aht}
+ move to rvec_(m4wd,0)
+ arrow to rvec_(-m4aht,0) wid m4awd ht m4aht',
+ m4rdna,g,
+ `{dot(at rvec_(dotrad_,0))}; dot(at rvec_(m4wd-dotrad_,0))',
+ m4rdna,M,
+ `{dot(at rvec_(dotrad_,0))}
+ {dot(at rvec_(m4wd/2,0))}; dot(at rvec_(m4wd-dotrad_,0))',
+ m4rdna,C,
+ `lbox(m4wd/3,m4ht); move to rvec_(m4wd/3,0)
+ lbox(m4wd/3,m4ht)',
+ m4rdna,A,
+ `{line to rvec_(m4wd/4,0)}
+ for_(1,3,1,`line from rvec_(0,m4ht/2) to rvec_(m4wd/4,0) \
+ then to rvec_(0,-m4ht/2); move to rvec_(m4wd/4,m4ht/2)
+ ifelse(m4x,3,,move to rvec_(m4wd/8,0))') ',
+ m4rdna,H,
+ `line to rvec_(m4ht,0); round
+ {arc ifelse(m4rR,-,,c)cw from Here to rvec_(-m4ht,m4rR m4ht) \
+ with .c at rvec_(-m4ht,0)}
+ move to rvec_(m4wd-2*m4ht,0); round
+ {arc ifelse(m4rR,-,c)cw from Here to rvec_(m4ht,m4rR m4ht) \
+ with .c at rvec_(m4ht,0)}
+ line to rvec_(m4ht,0)',
+ m4rdna,P,
+ `{open_arrow(to rvec_(m4aht,0),m4awd,m4aht)}
+ move to rvec_(m4wd,0)
+ open_arrow(to rvec_(-m4aht,0),m4awd,m4aht)',
+ m4rdna,s,
+ `{line to rvec_(m4ht/2*(sqrt(2)-1),0)}
+ {arc from rvec_(0,-m4ht/2) to rvec_(0,m4ht/2) \
+ with .c at rvec_(-m4ht/2,0)}
+ move to rvec_(m4wd,0)
+ {arc from rvec_(0,m4ht/2) to rvec_(0,-m4ht/2) \
+ with .c at rvec_(m4ht/2,0)}
+ {line to rvec_(-m4ht/2*(sqrt(2)-1),0)}',
+ m4rdna,F,
+ `{line from rvec_(0,m4ht/2) to rvec_(0,-m4ht/2)}
+ {line from rvec_(m4wd/2,m4ht/2) to rvec_(m4wd/2,-m4ht/2)}
+ line from rvec_(m4wd,m4ht/2) to rvec_(m4wd,-m4ht/2)',
+ m4rdna,S,
+ `{lbox(m4wd,m4ht)}
+ arrow to rvec_(m4wd/2,0) wid m4awd ht m4aht',
+ m4rdna,E,
+ `{circle diam m4wd at rvec_(m4wd/2,0)}
+ {arrow to rvec_(m4wd*3/8,0) wid m4awd ht m4aht}
+ {arrow <- from rvec_(m4wd*5/8,0) to rvec_(m4wd,0) wid m4awd ht m4aht}
+ dot(at rvec_(m4wd*6/8,m4wd/4),dotrad_*2/3) ')
+ ] with .Orig at Here }
+ line from rvec_(m4wd,0) to rvec_(max(0,rp_len/2+m4wd/2),0) }
+ line invis to rvec_(rp_len,0)')
+ ')
`memristor( linespec, wid, ht )'
define(`memristor',`eleminit_(`$1')
@@ -1038,7 +1096,7 @@ define(`arrowline',`line ifelse(`$1',,`to rvec_(elen_,0)',`$1')
chop lin_leng(last line)/2-arrowht/2
[box invis ht_ arrowwid wid_ arrowht] at last line.c }')
- `ground( at position, T, N|F|S|L|P[A]|E,
+ `ground( at position, T|stem length, N|F|S|L|P[A]|E,
D|U|L|R|degrees)
T=truncated stem; N=normal ground,
F=frame, S=signal, L=low-noise, P=protective,
@@ -1047,7 +1105,8 @@ define(`arrowline',`line ifelse(`$1',,`to rvec_(elen_,0)',`$1')
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'))
- ifelse(`$2',,`line from last box.c to rvec_(dimen_/4,0)')
+ ifelse(`$2',,`line from last box.c to rvec_(dimen_/4,0)',
+ `$2',T,,`line from last box.c to rvec_(`$2',0)')
ifelse(`$3',F,
`{line from rvec_(dimen_/8,m4v-dimen_/12) \
to rvec_(0,m4v) \
@@ -1089,7 +1148,8 @@ define(`ground',`box invis ht 0 wid 0 with .c ifelse(`$1',,`at Here',`$1')
to rvec_(2*m4h,-dimen_/14)')
resetdir_} ')
- `antenna(at position, T, A|L|T|S|D|P|F, U|D|L|R|degrees)
+ `antenna(at position, T|stem length, A|L|T|S|D|P|F,
+ U|D|L|R|degrees)
arg2=T: truncate stem
arg3= A=aerial; L=loop, T=triangle, S=diamond,
D=dipole, P=phased, F=fork;
@@ -1101,7 +1161,7 @@ define(`antenna',`[ T: Here
ifelse(
m4atype,L,
`T1: rvec_(0,m4h); T2: rvec_(0,-m4h)
- ifelse(`$2',,`move to rvec_(m4h*2,0)')
+ ifelse(`$2',,`move to rvec_(m4h*2,0)', `$2',T,,`move to rvec_(`$2',0)')
line from T1 to rvec_(0,m4h) \
then to rvec_(0,m4v/2) \
then to rvec_(m4v-m4h,m4v/2) \
@@ -1114,7 +1174,7 @@ define(`antenna',`[ T: Here
then to rvec_(0,-m4h) \
then to T2',
m4atype,T,
- `ifelse(`$2',,`move to rvec_(m4h*2,0)')
+ `ifelse(`$2',,`move to rvec_(m4h*2,0)', `$2',T,,`move to rvec_(`$2',0)')
line to rvec_(m4v*3/4,m4v*sqrt(3)/4) \
then to rvec_(m4v*3/4,-m4v*sqrt(3)/4) \
then to Here
@@ -1122,7 +1182,7 @@ define(`antenna',`[ T: Here
to T',
m4atype,S,
`T1: rvec_(0,m4h); T2: rvec_(0,-m4h)
- ifelse(`$2',,`move to rvec_(m4h*2,0)')
+ ifelse(`$2',,`move to rvec_(m4h*2,0)', `$2',T,,`move to rvec_(`$2',0)')
line from T1 to rvec_(0,m4h) \
then to rvec_(m4v*3/4-m4h,m4v*3/4) \
then to rvec_(2*m4v*3/4-m4h,0) \
@@ -1131,20 +1191,20 @@ define(`antenna',`[ T: Here
then to T2',
m4atype,D,
`T1: rvec_(0,m4h); T2: rvec_(0,-m4h)
- ifelse(`$2',,`move to rvec_(m4v,0)')
+ ifelse(`$2',,`move to rvec_(m4v,0)', `$2',T,,`move to rvec_(`$2',0)')
{ line from T1 to rvec_(0,m4h) \
then to rvec_(0,m4h*3) }
{ line from T2 to rvec_(0,-m4h) \
then to rvec_(0,-m4h*3) }',
m4atype,P,
- `ifelse(`$2',,`move to rvec_(m4v*2/3,0)')
+ `ifelse(`$2',,`move to rvec_(m4h*2/3,0)', `$2',T,,`move to rvec_(`$2',0)')
line from T to Here
{ line from rvec_(0,-m4v/3) \
to rvec_(0,m4v/3) }
{ line from rvec_(m4h,-m4v*2/3) \
to rvec_(m4h,m4v*2/3) }',
m4atype,F,
- `ifelse(`$2',,`move to rvec_(m4h*2,0)')
+ `ifelse(`$2',,`move to rvec_(m4h*2,0)', `$2',T,,`move to rvec_(`$2',0)')
{ line from rvec_(m4v*3/4,m4v*sqrt(3)/4) \
to rvec_(0,m4v*sqrt(3)/4) \
then to rvec_(0,-m4v*sqrt(3)/4) \
@@ -1152,12 +1212,12 @@ define(`antenna',`[ T: Here
line from rvec_(m4v*3/4,0) \
to T',
m4atype,A,
- `ifelse(`$2',,`move to rvec_(m4h*2,0)')
- { line from rvec_(m4v*3/4, m4v*sqrt(3)/4) to Here \
- then to rvec_(m4v*3/4,-m4v*sqrt(3)/4) }
- line from rvec_(m4v*3/4,0) \
+ `ifelse(`$2',,`move to rvec_(m4h*2,0)', `$2',T,,`move to rvec_(`$2',0)')
+ { line from rvec_(m4v*3/4, m4v*sqrt(3)/4) to 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')')
`switch( linespec,L|R,[O|C][D],L|B|D )
Wrapper for bswitch, lswitch, dswitch
@@ -1449,7 +1509,8 @@ define(`m4R',`ifelse(`$2',R,-)')define(`m4sc',`dimen_/24')dnl
}
line to rvec_(rp_len,0) invis ')
- `Amplifier amp( linespec,size )'
+ `amp( linespec,size )
+ Amplifier'
define(`amp',`eleminit_(`$1') define(`m4wd',`ifelse(`$2',,`dimen_',`($2)')')dnl
{line to rvec_(max(0,rp_len/2-m4wd/2),0)
line from rvec_(m4wd,0) \
@@ -2365,7 +2426,8 @@ define(`ta_xy',`vec_(vscal_(m4_xyU,`$1',ifelse(`$2',0,0,m4_xyS`($2)')))')
`Relative adjusted macro-internal coordinates'
define(`tr_xy',`M4_xyO+vec_(vscal_(m4_xyU,`$1',ifelse(`$2',0,0,m4_xyS`($2)')))')
`Initialize tr_xy_init(origin,unit,-)'
-define(`tr_xy_init',`M4_xyO: ifelse(`$1',,Here,`$1')
+define(`tr_xy_init',
+`M4_xyO: ifelse(`$1',,Here,`$1')
define(`m4_xyU',`$2')dnl
define(`m4_xyS',`$3')')
@@ -2388,8 +2450,10 @@ define(`sc_draw',`m4_dna(`$1',`$2')ifelse(m4I_,-1,`$4',`$3')')
we temporarily turn off comments for svg'
define(`rlabel',`ifsvg(`changecom(,)')dnl
m4label(`$1',`$2',`$3',.s_,below_,`$4')`'ifsvg(`changecom(`#',)')')
+
define(`llabel',`ifsvg(`changecom(,)')dnl
m4label(`$1',`$2',`$3',.n_,above_,`$4')`'ifsvg(`changecom(`#',)')')
+
define(`clabel',`ifsvg(`changecom(,)')dnl
m4label(`$1',`$2',`$3',,,`$4')`'ifsvg(`changecom(`#',)')')
labels at centre and both ends of an element `dimen_' long
@@ -3218,6 +3282,17 @@ define(`ACsymbol',`[ Origin: Here
with .Origin at Origin } ')
`$5'; resetdir_ ] with .Origin 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)')')
+ setdir_(ifelse(`$4',,`ifdef(`m4a_',rp_ang*rtod_,0)',`$4'))
+ 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')')
+
`n-terminal box
nterm(box specs; other commands,
nw,nn,ne,ns,
diff --git a/graphics/circuit_macros/libgen.m4 b/graphics/circuit_macros/libgen.m4
index e03ab1ae27..7aabd68c83 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.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 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 *
@@ -41,8 +41,13 @@ ifdef(`__file__',
the installation folder, e.g.
dnl define(`HOMELIB_',`D:\Dwight\lib')
+ `NeedDpicTools( path )
+ If path is empty then HOMELIB_ is used
+ e.g. NeedDpicTools or NeedDpicTools(/home/lib/)'
define(`NeedDpicTools',`if "dpictools" != "1" then {
- copy "HOMELIB_`'dpictools.pic" } define(`dfitpoints__') define(`dfitcurve__') ')
+ ifelse(`$1',,`copy "HOMELIB_`'dpictools.pic"',`copy "`$1'dpictools.pic"')
+ define(`dfitpoints__') define(`dfitcurve__')}')
+
Processor shortcuts
define(`ifdpic',`ifelse(m4picprocessor,dpic,`$1',`$2')')
define(`ifgpic',`ifelse(m4picprocessor,gpic,`$1',`$2')')
@@ -56,7 +61,6 @@ define(`ifpstricks',`ifelse(m4postprocessor,pstricks,`$1',`$2')')
define(`ifsvg',`ifelse(m4postprocessor,svg,`$1',`$2')')
define(`iftpic',`ifelse(m4postprocessor,tpic,`$1',`$2')')
define(`ifxfig',`ifelse(m4postprocessor,xfig,`$1',`$2')')
-#efine(`ifpsfrag',ifinstr(ifdef(`psfrag',T)`'ifdef(`psfrag_',T),T,`$1',`$2'))
define(`ifpsfrag',ifelse(ifdef(`psfrag',T,`ifdef(`psfrag_',T)'),T,`$1',`$2'))
`iflatex(latextrue,latexfalse)
@@ -181,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.3: ifelse(m4picprocessor,gpic,`Gpic',
+`#' `$1' Version 9.4: ifelse(m4picprocessor,gpic,`Gpic',
m4postprocessor,pstricks,`PSTricks',
m4postprocessor,pgf,`TikZ PGF',
m4postprocessor,mfpic,`Mfpic',
@@ -424,6 +428,14 @@ ifinstr(`$2',m4sep,`pushdef(`$1',substr(`$2',0,index(`$2',m4sep)))dnl
stacksplit_(`$1',substr(`$2',incr(index(`$2',m4sep))),m4sep)',
`pushdef(`$1',`$2')')')
+ `m4Leftstr(str,default) leftmost substring
+ to the left of : (arg2 if blank)'
+define(`m4Leftstr',`ifelse(patsubst(`$1',:.*),,`$2',patsubst(`$1',:.*))')
+ `m4Rightstr(str,default) rightmost substring
+ to the right of : (arg2 if blank)'
+define(`m4Rightstr',`ifinstr(`$1',:,
+ `ifelse(patsubst(`$1',.*:),,`$2',`patsubst(`$1',.*:)')',`$2')')
+
`basename_(path,sep)
Extract rightmost name from arg2-separated
path, default dot (.)'
@@ -743,10 +755,11 @@ define(`m4Delch',
`ifelse(substr(`$1',0,1),ifelse(`$2',,_,`$2'),`substr(`$1',1)',`$1')')
`setkey_(string,key,default,[N])
- pushdef macro m4key equal to val when
- string contains key=val;
- default if not in string
- arg4= blank defines m4key as (val)'
+ string contains semicolon-separated
+ terms of the form key=val
+ If string contains key=val; then
+ pushdef(`m4key',(val)) otherwise use default.
+ Nonblank arg4 omits the parentheses.'
define(`setkey_',
`pushdef(`m4xt',index(`$1',`$2'=))ifelse(m4xt,-1,
`pushdef(`m4'$2,`ifelse(`$3',,,ifelse(`$4',,(`$3'),`$3'))')',
@@ -777,10 +790,11 @@ define(`text_ang',90)
(requires PSTricks, pgf, or svg)'
define(`r_text',`define(`m4txt',
`ifelse(index(`$1',"),0,`substr(`$1',1,eval(len(`$1')-2))',`$1')')dnl
-define(`m4rtang',`ifelse(`$2',,90,`$2')')dnl
+ifelse(ifpstricks(T)`'ifpgf(T)`'ifsvg(T),T,
+`define(`m4rtang',`ifelse(`$2',,90,`$2')')dnl
ifsvg(`svg_rot(m4rtang,"m4txt")')dnl
ifpstricks(`"\rput[c]{m4rtang}(0,0){m4txt}"')dnl
-ifpgf(`"\pgftext[rotate=m4rtang]{m4txt}"')')
+ifpgf(`"\pgftext[rotate=m4rtang]{m4txt}"')',"m4txt")')
`Like s_box but text is rotated text_ang degrees
(requires PSTricks or pgf)'
@@ -824,12 +838,12 @@ define(`dot',`[define(`m4ft',`ifelse(`$3',,0,(`$3'))')dnl
`circle rad ifelse(`$2',,`dotrad_',`$2') fill_(m4ft)')') dnl
`$4'] with .c ifelse(`$1',,`at Here',`$1')
move to last [].c')
- `cross(at location); assumes that a
+ `cross(at location,size); assumes that a
cross always has manhattan directions'
-define(`crosswd_',(0.05*scale))
+define(`crosswd_',`ifelse(`$2',,`(0.05*scale)',`($2)')')
define(`cross',`[{line from Here+(0,neg_(crosswd_)) to Here+(0,crosswd_)}
line from Here+(neg_(crosswd_),0) to Here+(crosswd_,0)
- `$2'] with .c ifelse(`$1',,`at Here',`$1'); move to last [].c')
+ `$3'] with .c ifelse(`$1',,`at Here',`$1'); move to last [].c')
`boxcoord(name,xfraction,yfraction)
internal position in a named planar object'
@@ -954,6 +968,7 @@ define(`rotellipse',
`[define(`m4ehw',(ifelse(`$1',,ellipsewid,`($1)')/2))dnl
define(`m4ehh',(ifelse(`$2',,ellipseht,`($2)')/2))dnl
N: vec_(0,m4ehh); E: vec_(m4ehw,0); S: vec_(0,-m4ehh); W: vec_(-m4ehw,0)
+ C: (0,0)
spline ifdpic(
`ctension_ from S to vec_(m4ehw,-m4ehh) \
then to vec_(m4ehw,m4ehh) then to vec_(-m4ehw,m4ehh) \
@@ -1006,7 +1021,8 @@ define(`m4lstring',`ifelse(
D: blank width is the diagonal length of arg3
H: blank width is height of arg3 + textoffset*2
W: blank width is width of arg3 + textoffset*2
- otherwise: arg4 is absolute blank width '
+ otherwise: arg4 is absolute blank width
+ If arg 3 begins with [ it is copied verbatim '
define(`dimension_',`rpoint_(`$1') ; {
define(`m4g',ifelse(`$4',,0,
`$4',W,(s_wd + ifdpic(textoffset,`2 bp__')*2),
@@ -1015,18 +1031,23 @@ define(`dimension_',`rpoint_(`$1') ; {
define(`m4h',`(rp_len ifelse((`$4'),(),,neg_(m4g)))')dnl
ifelse((`$2'),(),,`if (`$2') != 0 then {
m4toff = sign(`$2')*ifelse(`$5',,`3.6bp__',(`$5'))
- {move to rvec_(0, m4toff); line to rvec_(0,`$2')}
- {move to rvec_(rp_len,m4toff); line to rvec_(0,`$2')}
- move to rvec_(0,`$2') }')
+ {move to rvec_(0, m4toff)
+ S_dimen_: line to rvec_(0,`$2')}
+ {move to rvec_(rp_len,m4toff)
+ E_dimen_: line to rvec_(0,`$2')}
+ move to rvec_(0,`$2')
+ AS_C: rvec_(rp_len/2,0) }')
if m4h > 2*arrowht then {
- { line ifelse(`$6',,<-,index($6,<),0,<-) to rvec_(m4h/2,0)
+ { AS_dimen_: line ifelse(`$6',,<-,index($6,<),0,<-) to rvec_(m4h/2,0)
ifelse((`$4'),(),,`move to rvec_(m4g,0)')
- line ifelse(`$6',,->,eval(index($6,>)>0),1,->) to rvec_(m4h/2,0) }
+ AE_dimen_: line ifelse(`$6',,->,eval(index($6,>)>0),1,->) \
+ to rvec_(m4h/2,0) }
} else {
- { arrow from rvec_(-arrowht*1.5,0) to Here
- arrow from rvec_(rp_len+arrowht*1.5,0) to rvec_(rp_len,0) }
+ { AS_dimen_: arrow from rvec_(-arrowht*1.5,0) to Here
+ AE_dimen_: arrow from rvec_(rp_len+arrowht*1.5,0) to rvec_(rp_len,0) }
}
ifelse(`$3',,,
+ index(`$3',[),0,``$3' at rvec_(rp_len/2,0)',
`m4lstring(`$3',"`$3'") at rvec_(rp_len/2,0)')
}')
`Dimensioning for arcs:
@@ -1093,7 +1114,7 @@ define(`shade',`beginshade(`$1')
#
# `ShadedPolygon(vertexseq,line attributes,
# sweep angle (degrees),colorseq)
-# arg1 is a colon (:) separated sequence of
+# arg1 is a colon (:)-separated sequence of
# positions or position names, the vertices in
# order (cw or ccw) of the polygon. Colored
# shade lines are drawn perpendicular to the
@@ -1275,12 +1296,13 @@ define(`Vperp',
define(`m4pdy',`(`$2'.y-`$1'.y)')dnl
define(`m4pdl',`ifelse(`$3',,`/vlength(m4pdx,m4pdy)',`$3',0,,
`*(`$3')/vlength(m4pdx,m4pdy)')')dnl
- ifinstr(`$4',R,,-)m4pdy`'m4pdl,\
- m4pdx`'m4pdl')
+ ifinstr(`$4',R,
+ `(m4pdy`'m4pdl),(-m4pdx`'m4pdl)',`(-m4pdy`'m4pdl),(m4pdx`'m4pdl)')')
- `Equidist3(Pos1,Pos2,Pos3,Result)
+ `Equidist3(Pos1,Pos2,Pos3,Result,distance)
Result is the name of the point equidistant
from named Pos1, Pos2, Pos3
+ arg4 nonblank: the common distance
eg Equidist3(A,B,C,D)
arc from A to C with .c at D'
define(`Equidist3',`
@@ -1289,7 +1311,8 @@ define(`Equidist3',`
M4tmp_P2: 0.5 between `$2' and `$3'
M4tmp_T2: M4tmp_P2+(Vperp(`$2',`$3'))
`$4': intersect_(M4tmp_P1,M4tmp_T1,M4tmp_P2,M4tmp_T2)
- ')
+ ifelse(`$5',,,`$5 = distance(`$4',`$1');') ')
+
`Cintersect(Pos1,rad1,Pos2,rad2,[R])
Upper (lower if arg5=R) intersection of
circles at Pos1 and Pos2, radius rad1 and rad2
@@ -1360,6 +1383,38 @@ define(`M4LP',`($1-($2))')dnl
define(`M4LET',`LCtangent((M4LP.x/m4LEta,M4LP.y/m4LEtb),`(0,0)',1,`$5')')dnl
(`$2'+(M4LET.x*m4LEta,M4LET.y*m4LEtb))')
+ `langle(Start,End)
+ Angle relative to horizontal of a line
+ between two points'
+define(`langle',
+`atan2(M4Pos(`$2').y-M4Pos(`$1').y,M4Pos(`$2').x-M4Pos(`$1').x)')
+
+ `ArcAngle(Pos1,Pos2,Pos3,radius,attributes)
+ arc angle symbol drawn ccw at Pos2
+ arg4: radius from Pos2
+ arg5: line attributes, e.g. thick linethick/2'
+define(`ArcAngle',`arcr(`$2',ifelse(`$4',,arcrad,`$4'),
+ langle(`$2',`$1'),langle(`$2',`$3'),`$5') ')
+
+ `RightAngle(Pos1,Pos2,Pos3,linelen,attributes)
+ Draw a right angle symbol at Pos2
+ arg4: size
+ arg5: line attributes, e.g. outlined "gray"'
+define(`RightAngle',
+ `RightA_C: `$1'; RightA_N: `$2'; RightA_B: `$3'
+define(`m4AngleLen',`ifelse(`$4',,linewid/5,`$4')')
+ angleCNB = atan2(RightA_C.y-RightA_N.y,RightA_C.x-RightA_N.x)
+ M4AB0: (RightA_B-RightA_N)/distance(RightA_B,RightA_N)
+ M4CN0: (RightA_N-RightA_C)/distance(RightA_N,RightA_C)
+ move to RightA_N - M4CN0*m4AngleLen
+ line to Here + M4AB0*m4AngleLen then to RightA_N + M4AB0*m4AngleLen `$5'
+')
+ `PerpTo(Pos,Line,Point)
+ The point on Line of the perpendicular to Pos'
+define(`PerpTo',
+`PerpTo_T: move from `$1' to `$1'-(vperp(`$2'))
+ ifelse(`$3',,PerpTo_P,`$3'): Intersect_(PerpTo_T,`$2') ')
+
`Convenience fraction along a linear obj'
define(`along_',`between `$1'.start and `$1'.end')
diff --git a/graphics/circuit_macros/liblog.m4 b/graphics/circuit_macros/liblog.m4
index ce261707ca..99c68076ef 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.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 J. D. Aplevich under *
* the LaTeX Project Public Licence in file Licence.txt. The files of *
* this distribution may be redistributed or modified provided that this *
* copyright notice is included and provided that modifications are clearly *
diff --git a/graphics/circuit_macros/mfpic.m4 b/graphics/circuit_macros/mfpic.m4
index 6e68706e24..c631f784d1 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.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 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 0698a3d8d9..778f38e216 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.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 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 5b292ccaea..791be9765c 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.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 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 21072c1d17..c33c1a7afc 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.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 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 7bf1df5656..d11b9dd0bf 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.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 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 efe7cafe16..0dbd8ef7f1 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.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 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 *
@@ -29,8 +29,8 @@ define(`linethick_',`linethick = ifelse(`$1',,`0.8',`$1'); dnl
arrowht = ifelse(`$1',,`0.1',linethick/8)*scale;')
`Patch PSTricks to use all coordinate pairs
- inside \pscustom'
- `Older version for PSTricks prior to Aug 2010:'
+ inside \pscustom
+ Older version for PSTricks prior to Aug 2010:'
define(`M4PatchPSTricks',
`command "\makeatletter\@ifundefined{ifPst@noCurrentPoint}%
{\@ifundefined{MPS@Patch}{\gdef\MPS@Patch{}%
@@ -41,7 +41,7 @@ define(`M4PatchPSTricks',
{\@ifundefined{MPS@PatchMsg}{\gdef\MPS@PatchMsg{}%
\typeout{ Dpic -p: Setting noCurrentPoint to use all coord pairs }}{}%
\psset{noCurrentPoint}}\makeatother%"')
- `For PSTricks since Aug 2010'
+ `For PSTricks since Aug 2010:'
define(`M4PatchPSTricks',`command "\psset{noCurrentPoint}%"')
divert(0)dnl
diff --git a/graphics/circuit_macros/svg.m4 b/graphics/circuit_macros/svg.m4
index 84f7e21e06..1b3a285ffb 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.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 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 *
@@ -95,6 +95,7 @@ dptextratio)')
`see http://www.ascii.cl/htmlcodes.htm
and http://webdesign.about.com/od/localization/l/blhtmlcodes-gr.htm'
+`These macros are used in strings so the double quote is entered as \". '
define(`svg_symbol',`changecom(,)`$1'changecom(`#',)')
define(`svg_it',`<tspan font-style=\"italic\">`$1'</tspan>')
define(`svg_tt',`<tspan font-family=\"Courier\">`$1'</tspan>')
@@ -171,6 +172,8 @@ define(`svg_emsp',`svg_symbol(&`#'8195;)')
define(`svg_thinsp',`svg_symbol(&`#'8201;)')
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(`svgcolor',`sprintf("rgb(%g,%g,%g)",\
diff --git a/graphics/circuit_macros/xfig.m4 b/graphics/circuit_macros/xfig.m4
index f092b44df5..c9498cf628 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.3, copyright (c) 2020 J. D. Aplevich under *
+* Circuit_macros Version 9.4, copyright (c) 2020 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/apprendre-a-programmer-en-tex/README b/info/apprendre-a-programmer-en-tex/README
index ed792bf046..6b73c79516 100644
--- a/info/apprendre-a-programmer-en-tex/README
+++ b/info/apprendre-a-programmer-en-tex/README
@@ -53,35 +53,27 @@ d'utiliser dans le Matériel la police à chasse fixe « Luximono » qui était
employée dans le livre, car elle n'est pas sous licence libre.
Faire un choix de police de remplacement n'a pas été facile mais finalement,
-LinuxLibertineMono a été adoptée. Cela donne une certaine cohérence à
-l'ensemble puisque la police du texte est LinuxLibertine. Malheureusement,
-telle qu'elle est conçue, son énorme défaut est de chasser beaucoup trop. Il a
-donc fallu la modifier pour créer deux autres polices plus « condensées » :
-
- a) pour les caractères dans le corps du texte, j'ai créé une police
- LinuxlibertineMonoTC où les glyphes de LinuxLibertineMonoT ont été, via
- fontforge, réduits de 75% horizontalement et 92% verticalement. Ce sont,
- après bien des essais, les coefficients qui lui permettent de s'insérer au
- mieux (à mon goût) dans le texte, qui donnent une chasse proche de celle de
- Luximono et qui rendent le gris typographique acceptable ;
-
- b) pour les codes figurant dans le texte du livre, la police
- LinuxlibertineMonoTCC a été créée, toujours à partir de LinuxLibertineMonoT,
- mais les glyphes ont été davantage réduit horizontalement : 67%
- horizontalement et 92% verticalement.
+GoMono a été adoptée. Cette police est quasiment identique à LuxiMono,
+exception faite de la lettre "l", mais c'est sans grande importance car elles
+ont les mêmes chasses : à peinr 52sp de différence à l'échelle 0.8 qui est
+utilisée dans ce livre. C'est une différence insigifiante.
+
+Pour les codes figurant dans le texte du livre, la police GMC a été créée à
+partir de GoMono en multipliant par 0.8 la dimension horizontale de tous les
+glyphes.
3) Enfin, la dernière conséquence est que le fichier pdf produit après
compilation du code source n'est pas exactement celui qui a servi à imprimer le
livre. Il n'y a que très peu de modifications :
- a) les polices à chasse fixe sont différentes, comme expliqué ci-dessus.
- Outre les considérations esthétiques sur lesquelles je ne m'étendrai pas,
- cela ne devrait pas entraîner de modification de la mise en page car la
- chasse de LinuxlibertineMonoTC est extrêmement proche de celle de Luximono ;
+ a) les polices à chasse fixe sont légèrement différentes, comme expliqué
+ ci-dessus.
+ Cela ne devrait pas entraîner de modification de la mise en page car la chasse
+ de GoMono est extrêmement proche de celle de Luximono ;
- b) les mentions Luximono sont changées pour LinuxlibertineMonoTC ;
+ b) les mentions Luximono sont changées pour GoMono ;
- c) la licence est modifiée (page réelle 6) ;
+ c) la licence est modifiée (voir page réelle 6) ;
d) quelques corrections ont été faites (coquilles, erreurs dans les codes,
etc.), mais une infime partie en regard de ce qui resterait à faire !
@@ -101,8 +93,8 @@ est dessiné l'ensemble de Mandelbrot à l'aide d'une version modifiée de TeX.
Par ailleurs, toujours par souci de simplicité :
- tout le code source est dans un seul fichier « livre.tex », qui est le
code source à compiler avec l'exécutable pdflatex ;
- - seules 3 fontes sont à installer à la main, à savoir LinuxlibertineMonoTC,
- LinuxlibertineMonoTCC et les fontes de libertine-legacy.
+ - seules les fontes GMC et les fontes de libertine-legacy sont à installer
+ à la main.
Pour installer ces fontes, il faut aller dans le répertoire /fonts où se
trouvent des fichiers zippés permettant ces installations. La procédure est
@@ -117,19 +109,18 @@ donnée pour GNU-linux avec TeXlive car je ne connais ni windows ni mikTeX.
c) aller dans /fonts/maps/dvips/libertine-legacy et lancer dans la console la
commande suivante
- updmap -user --enable map=libertine-legacy.map
+ updmap -user --enable Map=libertine-legacy.map
-2) Installation des fontes LinuxLibertineMono « condensées » :
+2) Installation des fontes GMC :
- a) dézipper le fichier linlibmonoc.zip
+ a) dézipper le fichier GMC.zip
b) copier les répertoires /fonts et /tex dans le texmf personnel (permettre
d'écrire à l'intérieur des dossiers existants)
- c) aller dans /fonts/maps/dvips/linlibmonoc et lancer dans la console les
- deux commandes suivantes :
- updmap -user --enable map=LinuxLibertineMonoTC.map
- updmap -user --enable map=LinuxLibertineMonoTCC.map
+ c) aller dans /fonts/maps/dvips/GMC et lancer dans la console la
+ commande suivante :
+ updmap -user --enable Map=GMC.map
On peut s'assurer que l'installation s'est correctement déroulée en examinant
la sortie générée par la commande
diff --git a/info/apprendre-a-programmer-en-tex/output/apprendre-a-programmer-en-tex.pdf b/info/apprendre-a-programmer-en-tex/output/apprendre-a-programmer-en-tex.pdf
index 9e349e04e8..1785280676 100644
--- a/info/apprendre-a-programmer-en-tex/output/apprendre-a-programmer-en-tex.pdf
+++ b/info/apprendre-a-programmer-en-tex/output/apprendre-a-programmer-en-tex.pdf
Binary files differ
diff --git a/info/apprendre-a-programmer-en-tex/output/progtexcode.txt b/info/apprendre-a-programmer-en-tex/output/progtexcode.txt
index fcd1a19ec7..e41a520b5d 100644
--- a/info/apprendre-a-programmer-en-tex/output/progtexcode.txt
+++ b/info/apprendre-a-programmer-en-tex/output/progtexcode.txt
@@ -7,7 +7,7 @@
%% Encodage ISO 8859-1 %%
%% _____ %%
%% %%
-%% 2014 Christian Tellechea %%
+%% 2014-2020 Christian Tellechea %%
%% %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/info/apprendre-a-programmer-en-tex/source/apprendre-a-programmer-en-tex.tex b/info/apprendre-a-programmer-en-tex/source/apprendre-a-programmer-en-tex.tex
index 529d26e798..bc5a675f36 100644
--- a/info/apprendre-a-programmer-en-tex/source/apprendre-a-programmer-en-tex.tex
+++ b/info/apprendre-a-programmer-en-tex/source/apprendre-a-programmer-en-tex.tex
@@ -8,7 +8,7 @@
%% %%
%% ___ %%
%% %%
-%% 2014 Christian Tellechea %%
+%% 2014-2020 Christian Tellechea %%
%% %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -18,7 +18,6 @@
%| Encodage ISO 8859-1 (latin1) |
%| compiler avec pdflatex en mode pdf |
%|___________________________________________________________________________|
-
\RequirePackage{etex}
\documentclass[fontsize=10pt,chapterprefix=true]{scrbook}
@@ -104,7 +103,8 @@
%| |
\usepackage{amssymb,textcomp,eurosym,libertine}
\usepackage[libertine]{newtxmath}
-\renewcommand*\ttdefault{LinuxLibertineMonoTC-TLF}
+\newcommand*\GMC@scale{0.8}
+\usepackage[scaled=0.8]{GoMono}
\DeclareRobustCommand*\libLegacyGlyph[1]{{\ifcsname fxl@#1\endcsname\@nameuse{fxl@#1}\else\errmessage{glyphe fxl@#1 non dfini}\fi}}
\DeclareRobustCommand*\bioLegacyKeyGlyph[1]{{\ifcsname fxk@#1\endcsname\@nameuse{fxk@#1}\else\errmessage{glyphe fxk@#1 non dfini}\fi}}
\newcommand*\DeclareTextGlyphX[5]{\@namedef{#1@#4}{{\fontfamily{#3}\fontencoding{#2}\selectfont\char#5\relax}}}
@@ -501,7 +501,7 @@
%% Encodage ISO 8859-1 %%
%% _____ %%
%% %%
-%% 2014 Christian Tellechea %%
+%% 2014-2020 Christian Tellechea %%
%% %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -642,7 +642,7 @@
}% chappement ...
\defactive\%{\unexpanded{\@commenttrue\itshape\color{codegray}\%}}% commentaire
\defactive\^^M{\unexpanded{\if@comment\normalfont\ttfamily\color{black}\fi\@commentfalse}\par\leavevmode}% retour charriot
- \normalfont\renewcommand*\ttdefault{LinuxLibertineMonoTCC-TLF}\ttfamily
+ \normalfont\renewcommand*\ttdefault{GMC-TLF}\ttfamily
\setbox\z@\hbox{0}\edef\tt@spc{\hskip\the\wd\z@\relax}%
\catcode`\ =13
\begingroup
@@ -1138,10 +1138,10 @@
\small
ISBN 978-2-9548602-0-6\medskip
- \textcopyright{} Christian \textsc{Tellechea}, 2014\medskip
+ \textcopyright{} Christian \textsc{Tellechea}, 2014--2020\medskip
\scriptsize
- Rvision \no2a, 26/04/2019\medskip
+ Rvision \no2b, 20/12/2020\medskip
Photo couverture \textcopyright{} Christian~\textsc{Tellechea}\par
Photo 4\ieme{} couverture \textcopyright{} Willi~\textsc{Heidelbach}.
@@ -16563,7 +16563,7 @@ Avant de btir un algorithme permettant de composer un texte dans un cadre qui f
\item \idx\pagegoal est la dimension verticale du texte composer dans la page en cours.
\end{itemize}
-La dimension \idx\pagetotal n'est pas actualise en permanence, mais seulement aprs chaque paragraphe compos. Par ailleurs, au tout dbut de la construction d'une page, lorsqu'elle est vide, \idx\pagetotal vaut \numprint[pt]0 alors que \idx\pagegoal vaut \numprint[pt]{16383,99999}\footnote{Lire le \TeX book page~133 et plus gnralement le chapitre 15 en entier.}, soit \idx\maxdimen. Par consquent, notre futur algorithme devra tenir compte de cette spcificit au dbut des pages. Afin que \idx\pagegoal prenne une valeur refltant la hauteur de la page, il faudra donc, avant de mesurer quoi que ce soit, faire en sorte que la nouvelle page ne soit pas vide . Insrer le matriel vertical \idx\hbox\verb-{}-\idx\nointerlineskip teindra lieu de remplissage de haut de page, tout en ne prenant aucune place verticalement. Ainsi, aprs cette opration, \idx\pagegoal sera gal la hauteur de la zone de texte en haut d'une page. Nous sommes maintenant assurs que, quelles que soient les circonstances, la diffrence entre \idx\pagegoal et \idx\pagetotal sera la hauteur de l'espace vertical disponible restant dans la page en cours.
+La dimension \idx\pagetotal n'est pas actualise en permanence, mais seulement aprs chaque paragraphe compos. Par ailleurs, au tout dbut de la construction d'une page, lorsqu'elle est vide, \idx\pagetotal vaut \numprint[pt]0 alors que \idx\pagegoal vaut \numprint[pt]{16383,99999}\footnote{Lire le \TeX book page~133 et plus gnralement le chapitre 15 en entier.}, soit \idx\maxdimen. Par consquent, notre futur algorithme devra tenir compte de cette spcificit au dbut des pages. Afin que \idx\pagegoal prenne une valeur refltant la hauteur de la page, il faudra donc, avant de mesurer quoi que ce soit, faire en sorte que la nouvelle page ne soit pas vide . Insrer le matriel vertical \idx\hbox\verb-{}-\idx\nointerlineskip tiendra lieu de remplissage de haut de page, tout en ne prenant aucune place verticalement. Ainsi, aprs cette opration, \idx\pagegoal sera gal la hauteur de la zone de texte en haut d'une page. Nous sommes maintenant assurs que, quelles que soient les circonstances, la diffrence entre \idx\pagegoal et \idx\pagetotal sera la hauteur de l'espace vertical disponible restant dans la page en cours.
Ces deux primitives taient ce qui nous manquait pour construire l'algorithme permettent de couper $n$ fois une boite verticale pour la loger sur $n+1$ pages.
@@ -17450,7 +17450,7 @@ Peut-on effectuer les coupures, mais ne pas insrer de caractre de coupure ? La
Nom de la fonte = \fontname\font\par\idx*\fontname\idx*\font
\printallchars/
-Par chance, il semblerait que dans la \idx{fonte} chasse fixe utilise dans ce livre (qui est \texttt{LinLibertineMTC} ), le caractre \no23 de cette \idx{fonte} n'ait aucune dimension horizontale. Vrifions-le :
+Par chance, il semblerait que dans la \idx{fonte} chasse fixe utilise dans ce livre (qui est \texttt{GoMono} ), le caractre \no23 de cette \idx{fonte} n'ait aucune dimension horizontale. Vrifions-le :
\showcode/\setbox0=\hbox{\tt\char23}\idx*\setbox\idx*\hbox\idx*\tt\idx*\char
Largeur = \the\wd0 \qquad Hauteur = \the\ht0 \qquad Profondeur = \the\dp0 \idx*\the\idx*\wd\idx*\ht\idx*\dp/
diff --git a/macros/latex/contrib/curve2e/README.txt b/macros/latex/contrib/curve2e/README.txt
index 5a65cdd630..94b76a5f68 100644
--- a/macros/latex/contrib/curve2e/README.txt
+++ b/macros/latex/contrib/curve2e/README.txt
@@ -5,7 +5,7 @@
%% License information appended
%%
File README.txt for package curve2e
- [2020-12-12 v.2.2.12 Extension package for pict2e]
+ [2020-12-20 v.2.2.13 Extension package for pict2e]
The package bundle curve2e is composed of the following files
curve2e.dtx
diff --git a/macros/latex/contrib/curve2e/curve2e-manual.pdf b/macros/latex/contrib/curve2e/curve2e-manual.pdf
index 5e9bfb45d9..11e45b42be 100644
--- a/macros/latex/contrib/curve2e/curve2e-manual.pdf
+++ b/macros/latex/contrib/curve2e/curve2e-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/curve2e/curve2e.dtx b/macros/latex/contrib/curve2e/curve2e.dtx
index 8fc95e6fc3..e9de1ccc69 100644
--- a/macros/latex/contrib/curve2e/curve2e.dtx
+++ b/macros/latex/contrib/curve2e/curve2e.dtx
@@ -46,7 +46,7 @@ README.txt and curve2e-v161.sty.
%<+package>\ProvidesPackage{curve2e}%
%<+readme>File README.txt for package curve2e
%<*package|readme>
- [2020-12-12 v.2.2.12 Extension package for pict2e]
+ [2020-12-20 v.2.2.13 Extension package for pict2e]
%</package|readme>
%<*driver>
\documentclass{ltxdoc}\errorcontextlines=9
@@ -1373,19 +1373,19 @@ README.txt and curve2e-v161.sty.
% \section{Labelling the graphical elements}
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% While drawing any thing with the \pack{curve2e} package, it might be
-% necessary to identify some graphical objects with some sort of “label”.
+% necessary to identify some graphical objects with some sort of “label”.^^A
%\footnote{Do not confuse this identifier label with the \cs{label}
% command.}
%
% Some commands such as \cs{legenda} (legend), \cs{Zbox}, and \cs{Pbox}
-% have been always usede in the documentation of this package and its
+% have been always used in the documentation of this package and its
% siblings; but we used them in many other documents; therefore we thought
% it was useful to have them available with the general user of
% \pack{curve2e}.
%
%Their commands follow the following syntax.
-%|\Pbox|\parg{coordinates}\oarg{position}\marg{text}\oarg{dot diameter}\meta{\texttt{*}}\aarg{angle}
%\begin{flushleft}\ttfamily\obeylines
+%|\Pbox|\parg{coordinates}\oarg{position}\marg{text}\oarg{dot diameter}\meta{\texttt{*}}\aarg{angle}
%|\Zbox|\parg{coordinates}\oarg{position}\marg{formula}\oarg{dot diameter}
%|\legenda|\parg{coordinates}\marg{formula}
%\end{flushleft}
@@ -1417,7 +1417,8 @@ README.txt and curve2e-v161.sty.
% mandatory argument may contain almost anything.
%%
%\item[\meta{dot diameter}] the dot diameter default value is positive;
-% for |\Zbox| it is |1\unitlength| and the user should be careful in
+% for |\Zbox| this parameter equals |1\unitlength|, while for |\Pbox|
+% it equals \texttt{0.5ex}; the user should be careful in
% modifying this value; but if the dot diameter is set to zero, the
% dot is absent and the |\Zbox| command behaves almost as an unframed
% legend. The small difference is that |\Zbox| accepts a \meta{position}
@@ -1425,24 +1426,24 @@ README.txt and curve2e-v161.sty.
%%
%\item[\meta{\texttt{*}}] is an optional star; if specified the
% “label” is framed with a visible border, otherwise it is framed
-% with an invisible border but with a blank separator that tries to
-% adjust the border so that the “label” is always at the same distance
+% with an invisible one but with a blank gap that tries to
+% adjust its thickness so that the “label” is always at the same distance
% from the reference point; if this reference point corresponds to
-% a box corner it is reduced by approximately a factor equal to
+% a box corner it thickness is reduced by approximately a factor equal to
% $\sqrt{0.5}$, in oder to take into account the diagonal of the
-% blank border angle.
+% blank gap angle.
%%
-%\item[\meta{angle}] is the rotation angle about the reference point
-% of the “label”; sometimes such “labels” have to be rotated 90°
-% anticlockwise; sometimes they need a positive or negative rotation
-% angle (in degrees) in order to match the general direction of the
-% “labelled” object, be it an oblique line, an axis, or whatever.
+%\item[\meta{angle}] is the rotation angle (in degrees) of the “label”
+% about its reference point; sometimes such “labels” have to be
+% rotated 90° anticlockwise; sometimes they need a positive or
+% negative rotation angle in order to match the general direction of
+% the “labelled” object, be it an oblique line, an axis, or whatever.
% We found it very useful also to label the cartesian axes, but
-% also in other situations; for example to label the $x$ axis the
-% |\Pbox| command might have the arrow tip coordinates for the
+% also in other situations. For example, in order to label the $x$ axis
+% the |\Pbox| command might have the arrow tip coordinates for the
% reference point and have \texttt{tr} for the \meta{position};
% for the $y$ axis, the reference point is again the arrow tip,
-% and again the position would be again \texttt{tr} if the “label”
+% and the position would be again \texttt{tr} if the “label”
% sits on the left of the axis.
%\end{description}
%
@@ -1476,12 +1477,8 @@ README.txt and curve2e-v161.sty.
% With the above labelling facilities and with use of the \pack{xfp}
% functionalities it is not difficult to create diagrams with linear
-% or logarithmic axes. In effects the \pack{graphpaper} class contains
-% those various and other labelling macros and uses them. We plan to
-% extract some general macros from that class and to create a stand
-% alone package, so as to use them whenever the user wants to draw
-% some diagrams.
-
+% or logarithmic axes. In effects the \pack{graphpaper} class uses
+% these labelling macros and several other ones.
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \section{Math operations on fractional operands}
%^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1531,8 +1528,8 @@ README.txt and curve2e-v161.sty.
% of the usual \texttt{>}, \texttt{=}, and \texttt{<} operators that may
% be negated with the “not’ operator \texttt{!}; furthermore the logical
% results of these comparisons may be acted upon with the “and” operator
-% \texttt{\&\&} and the “or” operator \texttt{||}. The \meta{true
-% code}, and \meta{code} are executed if or while the
+% \texttt{\&\&} and the “or” operator \texttt{\string|\string|}.
+% The \meta{true code}, and \meta{code} are executed if or while the
% \meta{logical expression} is true, while the \meta{false code} is
% executed if the \meta{logical expression} is false
%
@@ -1671,7 +1668,7 @@ README.txt and curve2e-v161.sty.
% \end{macrocode}
%
%
-% Sometimes tie argument of a complex number is necessary; therefore with
+% Sometimes the argument of a complex number is necessary; therefore with
% macro \verb|\ArgOfVect| we calculate the four quadrant arctangent (in
% degrees) of the given vector taking into account the sings of the
% vector components. We use the |xfp| |atand| with two arguments, so
diff --git a/macros/latex/contrib/curve2e/curve2e.pdf b/macros/latex/contrib/curve2e/curve2e.pdf
index 94f8117ecd..6b89208d52 100644
--- a/macros/latex/contrib/curve2e/curve2e.pdf
+++ b/macros/latex/contrib/curve2e/curve2e.pdf
Binary files differ
diff --git a/macros/latex/contrib/easyfloats/DEPENDS.txt b/macros/latex/contrib/easyfloats/DEPENDS.txt
new file mode 100644
index 0000000000..2f8165695e
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/DEPENDS.txt
@@ -0,0 +1,14 @@
+# packages loaded by default
+float
+caption
+subcaption
+graphicx # can be disabled using package option nographic
+pgfkeys
+etoolbox
+environ
+array # can be disabled using package option noarray
+booktabs # can be disabled using package option nobooktabs
+
+# packages loaded if the corresponding package option is given
+soft longtable
+soft graphbox
diff --git a/macros/latex/contrib/easyfloats/README.md b/macros/latex/contrib/easyfloats/README.md
new file mode 100644
index 0000000000..58cca59837
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/README.md
@@ -0,0 +1,49 @@
+# Abstract
+
+In standard LaTeX inserting objects like figures or tables requires too much knowledge for beginners and too much typing effort and hardcoding for people like me.
+This package aims to make insertion of figures and tables easier for both beginners and experts.
+Despite the term *floats* in it's name it also allows to disable floating of such objects.
+
+
+# Documentation
+
+The documentation is contained in the file [doc/easyfloats.pdf](doc/easyfloats.pdf).
+
+The source code for the documentation is *not* contained in the dtx file but in the directory [doc](doc).
+To build the documentation run:
+```sh
+cd doc
+pdflatex easyfloats.tex
+biber easyfloats
+pdflatex easyfloats.tex
+pdflatex easyfloats.tex
+```
+
+
+# Dependencies
+
+The dependencies are listed in [DEPENDS.txt](DEPENDS.txt).
+It's syntax is explained on http://tug.org/texlive/pkgcontrib.html#deps.
+See also section *Used packages* in the [documentation](doc/easyfloats.pdf).
+
+
+# License
+
+This package and it's documentation are distributed under the [LaTeX Project Public License](https://www.latex-project.org/lppl/), version 1.3 or later.
+The preamble of the documentation may alternatively, at your choice, be reused under the terms of the [WTFPL](http://www.wtfpl.net/), version 2 or later.
+
+Additionally to the rights granted by the LaTeX Project Public License
+you have permission to freely distribute *unmodified* copies
+of the files [easyfloats.sty](easyfloats.sty) and [doc/easyfloats.pdf](doc/easyfloats.pdf) without other files of this work.
+The other files of this work can be found at:
+https://gitlab.com/erzo/latex-easyfloats
+
+The examples and tests are distributed under the [WTFPL](http://www.wtfpl.net/), version 2 or later.
+
+
+# Contact
+
+Bug reports and feature requests can be submitted at
+https://gitlab.com/erzo/latex-easyfloats/-/issues.
+
+Please see also section *Bug reports and contributions* in the [documentation](doc/easyfloats.pdf).
diff --git a/macros/latex/contrib/easyfloats/doc/content/bug-reports-and-contributions.tex b/macros/latex/contrib/easyfloats/doc/content/bug-reports-and-contributions.tex
new file mode 100644
index 0000000000..ccfb7dce9a
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/content/bug-reports-and-contributions.tex
@@ -0,0 +1,41 @@
+% !TeX root = ../easyfloats.tex
+
+\section{Bug reports and contributions}
+\label{bug-reports-and-contributions}
+
+If you find a bug please open an issue for it
+on \url{https://gitlab.com/erzo/latex-easyfloats/-/issues}
+including a minimal example where the bug occurs,
+an explanation of what you expected to happen
+and the version of \LaTeX\ and the packages you are using (which are included in the log file).
+Issues which are not reproducible will be closed.
+
+If you have a feature request please open an issue for it
+on \url{https://gitlab.com/erzo/latex-easyfloats/-/issues}
+including a minimal example which you would like to work,
+an explanation of what it should do
+and a use case explaining why this would be useful.
+
+Before opening an issue please check that there is not yet an issue for it already.
+
+If you want to resolve an issue yourself please create a merge request.
+Make the changes in \filename{easyfloats.dtx}.
+You can generate the sty file with \verb|tex easyfloats.ins|
+but you do not need to do that manually because \filename{test/autotest.py} does that automatically for you.
+Before creating a merge request please make sure that the automated tests still pass.
+Run the python3 script \filename{test/autotest.py} from the project root or test directory without arguments.
+While running the tests it shows a progress bar in square brackets.
+A dot stands for a successful test, an F for a failed test and an E for an error in the test script.
+Merge requests where a test prints F will most likely be rejected.
+If you get an E please create a bug report issue.
+
+Please use *tabs* for indentation.
+
+A merge request should include:
+\begin{itemize}
+\item The changes to \filename{easyfloats.dtx}
+\item The automatically generated \filename{easyfloats.sty}
+\item Additions to the documentation
+\item Automated tests in the \filename{test} directory to make sure the new feature or bug fix does not break in the future
+\item A link in the merge request description to the issue which it is supposed to close
+\end{itemize}
diff --git a/macros/latex/contrib/easyfloats/doc/content/documentation.tex b/macros/latex/contrib/easyfloats/doc/content/documentation.tex
new file mode 100644
index 0000000000..6dd1d9b62d
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/content/documentation.tex
@@ -0,0 +1,1082 @@
+% !TeX root = ../easyfloats.tex
+
+\section{Documentation}
+\label{documentation}
+
+This section contains the documentation on how to use this package.
+
+\Cref{options} gives general information on options which environments and commands defined by this package may take.
+The options themselves are explained in \cref{environments,commands} where the environments and commands defined by this package are explained.
+
+\Cref{initialization} describes what is happening when loading this package.
+\Cref{package-options} describes the options which can be passed to `\usepackage` when loading this package.
+
+\Cref{help} explains a few features which may help you to get a better understanding about what is going on.
+This might be useful if you run into unexpected errors or this package behaves different than you expected.
+
+
+\subsection{Options}
+\label{options}
+
+The environments and commands defined by this package take options (implemented with the \pkg{pgfkeys} package).
+Options are a comma separated list of `<key>`s or `<key>=<value>` pairs.
+
+Which keys are allowed for which environment\slash command and which values are allowed for which key is specified in \cref{environments,commands} where the environments and commands are documented.
+This section gives general information about these options.
+
+This section does *not* apply to the package options which are explained in \cref{package-options}.
+
+
+\subsubsection{Initial vs default values}
+\label{initial-vs-default-values}
+
+I am using the words *initial value* and *default value* like they are used in the \mycite{tikz}.
+
+The *initial* value of an option is the value which is used if the key is *not* given.
+
+The *default* value of an option is the value which is used if the key is given without a value.
+Most keys don't have a default value, i.e.\ if you use the key you must explicitly give it a value.
+
+\subsubsection{Options scope}
+\label{options-scope}
+
+Setting an option always applies until the end of the current group.
+For the argument of an environment this is the corresponding `\end` command.
+For the argument of the \cmd{\includegraphicobject} command this is the end of this command.
+For the argument of \cmd{\objectset} this may be the end of the document.
+
+If you are not familiar with the concept of groups in \TeX\ \mycite[chapter~10]{texbytopic} is one possible place to read up on it.
+
+\subsubsection{Special characters in options}
+\label{special-characters-in-options}
+
+If a value contains a comma or an equals sign it must be wrapped in curly braces.
+
+Spaces before and after a comma (separating an option) and before or after an equals sign (separating key and value) are ignored.
+However, a space after the opening brace is *not* ignored.
+So if you put the first key on the next line make sure to comment out the linebreak.
+If a leading or trailing space in a value is desired wrap the value in curly braces.
+
+`\par` (aka an empty line) is forbidden in keys but allowed in values.
+
+\subsubsection{Key patterns}
+\label{key-patterns}
+
+Sometimes I am talking about entire groups of keys instead of individual keys.
+I specify those groups with a pattern which matches the keys that I am referring to.
+In these patterns parenthesis stand for something optional and angular brackets for wildcards.
+
+For example the pattern `(<env>) arg(s)` matches the keys `tabular* arg` and `args` (and many more)
+but not `env arg` because `env` is not an existing environment.
+
+If a key has a version which ends on a `+` to append a value instead of replacing it the space in front of the `+` is optional.
+
+\subsubsection{Key name vs key path}
+\label{key-name-vs-key-path}
+
+\pkg{pgfkeys} organizes all keys \textcquote[page~954]{tikz}{in a large tree that is reminiscent of the Unix file tree.}
+The keys of this package are located in the three paths `/object`, `/subobject` and `/graphicobject`.
+
+In error messages thrown by the \pkg{pgfkeys} package the full path of a key is shown.
+
+When setting keys, however, you need not and should not specify the full path.
+The commands and environments of this package set the path automatically.
+Using full paths does not directly cause an error or a warning but trying to set options for a style or style group with \cmd{\objectset} causes undefined behavior.
+
+Therefore, error messages thrown directly by this package omit the path and show the name of the key only.
+
+\subsubsection{Key types}
+\label{key-types}
+
+In \pkg{pgfkeys} there are different types of keys.
+Which type a key belongs to is relevant for debugging if you want to check the value of a key, see \cref{help}.
+
+\keytypedoc{storing key}
+ Keys of this type are like a variable.
+ They store the given value.
+ This value can be showed using the `.show value` handler (see \cref{help}).
+
+\keytypedoc{executed key}
+ Keys of this type are like a function.
+ They execute some predefined code and possibly take a value as argument.
+
+\keytypedoc{boolean key}
+ is a special case of an executed key which sets a plain \TeX\ if command.
+ This if command and it's meaning can be showed with the `.show boolean` handler (which is *not* contained in \pkg{pgfkeys}, I have defined it in this package).
+
+ The allowed values for a key of this type are `true` and `false`.
+ The default value (i.e.\ the value which is assumed if the key is given without a value) is `true`.
+
+\keytypedoc{forwarding key}
+ is a special case of an executed key which calls another key.
+
+\keytypedoc{handler}
+ Keys defined in the path `/handlers`.
+ They can be applied to other keys by appending them to the path.
+ For users of this package they can be helpful for debugging.
+ For example `\objectset{env/.show value}` shows the value of the key `env`.
+
+ The \pkg{pgfkeys} package also defines handlers which expand the value.
+ I haven't come up with an example where this might be useful in the context of this package but e.g.\ `tabular arg/.expand once=\colspec,` works as expected.
+
+\keytypedoc{unknown key handler}
+ is a special key which is called if a given key does not exist and it's name is not a handler.
+ I am using this to implement key patterns.
+\endkeytypedoc
+
+\subsubsection{Styles}
+\label{styles}
+\DescribeMeta{style}
+\DescribeMeta{styles}
+
+This package defines two styles, one for figures and one for tables.
+
+You can think of these styles as an extension of the \pkg{float} package's float styles.
+
+These styles are somewhat inspired by the \pkg{pgfkeys} styles but are different.
+They are neither set nor applied in the same way.
+
+A style is a list of options which is not set immediately but locally for each object belonging to that style.
+
+The options of a style can be set by passing the name of the style as an optional argument to the \cmd{\objectset} command,
+e.g.\ `\objectset[figure]{<options>}` or `\objectset[table]{<options>}`.
+
+A style is applied by using the corresponding environment (e.g.\ \env{figureobject} or \env{tableobject})
+or `\graphicobjectstyle{<style>}` for \cmd{\includegraphicobject}.
+
+New styles can be defined with `\NewObjectStyle` as explained in \cref{new-object-styles-and-types}.
+
+\subsubsection{Style groups}
+\label{style-groups}
+\DescribeMeta{group}
+
+This package defines one group of styles called `all` which contains all defined styles.
+
+When setting options one can use a group name instead of a style name.
+In that case the options are set for all styles in the group.
+
+\subsubsection{Options processing order}
+\label{options-processing-order}
+
+\begin{enumerate}
+\item Options set with `\objectset{<options>}` have the lowest priority.
+\item Options set for a specific style with `\objectset[<styles>]{<options>}` take precedence because they are set later (at the object, not the `\objectset` command).
+\item Options passed directly to the object have the highest priority.
+\end{enumerate}
+
+For example:
+
+\begin{examplecode}
+\objectset[figure]{placement=p}
+\objectset{placement=H}
+\objectset[table]{placement=htbp}
+\end{examplecode}
+
+Given the above preamble both figure- and tableobjects are floating.
+Tableobjects are allowed to be placed where they are specified in the source code.
+Figureobjects are put on a separate float page.
+The second line (which would disable floating) has no effect (unless you define a custom style) because it is overridden not only by the third but also the first line.
+
+
+\subsection{Environments}
+\label{environments}
+
+This package defines the following environments.
+Each of them takes exactly one mandatory argument,
+options as a comma separated key=value list.
+
+\subsubsection{`object` environment}
+\label{object-environment}
+\begingroup
+\keydocpath{/object}
+\DescribeEnv{object}
+The `object` environment is used internally by \env{figureobject} and \env{tableobject}.
+Don't use this directly.
+You can define more environments like `figureobject` or `tableobject` with \cmd{\NewObjectStyle} if needed.
+
+This environment redefines the `\caption` and `\label` commands to set the \key{caption}\slash `label` option so that you can use them as usual except you cannot create several labels.
+If you really need several labels for the same object put the additional `\label` command(s) inside of the caption argument, there `\label` has it's original meaning.
+The location or the order of `\caption` and `\label` inside of the object environment is not relevant.
+Nevertheless I recommend to always put the `\label` after the `\caption` as it is usually required in order to get the references right (if you choose to use these commands instead of the options).
+Where the caption is typeset (above or below the object) is determined by the float style.
+
+This environment takes the following options:
+\keydoc{type = <type>}{storing key}
+\DescribeMeta{type}
+ The floating environment to use, e.g.\ `figure` or \env{table}.
+\keydoc[initial value=empty]{float style = plain | plaintop | ruled | boxed | <empty>}{storing key}
+ How the object is supposed to look like,
+ most importantly whether the caption is supposed to be above or below the object.
+ See the \pkg{float} package for more information.
+
+ If the value is empty the float type is *not* restyled before the\slash each object.
+ However, this package restyles \env{table} to `plaintop` and `figure` to `plain` when it is loaded.
+ The reasoning is explained in~\autocite{texexchange_caption_position}.
+
+\keydoc{caption = <text>}{storing key}
+ The caption to place above or below the float.
+
+ The appearance of the caption can be configured using `\captionsetup` defined by the \pkg{caption} package.
+ The \pkg{caption} package is loaded automatically by this package.
+\keydoc{list caption = <text>}{storing key}
+ The caption to place in the list of `<type>`s.
+ If this is not given, the value of \key{caption} is used instead.
+\keydoc{details = <text>}{storing key}
+ This is appended to the caption which is placed above or below the object but not to the list of `<type>`s.
+ \begin{examplecodekey}
+ caption=CTAN lion drawing by Duane Bibby,
+ details=Thanks to \url{www.ctan.org}.
+ \end{examplecodekey}
+ is equivalent to
+ \begin{examplecodekey\starred}{\ExamplecodeEscapeinside $ $}
+ list caption=CTAN lion drawing by Duane Bibby,
+ caption=CTAN lion drawing by Duane Bibby.$\\$ Thanks to \url{www.ctan.org}.
+ \end{examplecodekey\starred}
+\keydoc[initial value=a full stop followed by a space]{details sep = <text>}{storing key}
+ The separator to be placed between caption and details if details are given.
+\keydoc{label = <label>}{storing key}
+ Defines a label to reference this object.
+\keydoc{add label = <label>}{storing key}
+ Defines an additional label which can be used synonymously to label.
+ If this key is given several times, only the last one will have an effect.
+\keydoc[initial value=empty]{placement = [htbp]+!? | H | <empty>}{storing key}
+ The optional argument passed to the floating environment.
+ Allowed values:
+ \begin{itemize}
+ \item any combination of the letters `htbp` (where no letter is occuring more than once), optionally combined with an exclamation mark.
+ This means that the object will be a floating object.
+ The order of the letters makes no difference.
+ They have the following meanings:
+ \begin{itemize}
+ \item `h`: \LaTeX\ is allowed to place the object `h`ere, where it is defined.
+ \item `t`: \LaTeX\ is allowed to place the object at the `t`op of a page.
+ \item `b`: \LaTeX\ is allowed to place the object at the `b`ottom of a page.
+ \item `p`: \LaTeX\ is allowed to place the object on a separate `p`age only for floats.
+ \item `!`: \textcquote[page~27]{latex2e}{\LaTeX\ ignores the restrictions on both the number of floats that can appear and the relative amounts of float and non-float text on the page.}
+ \end{itemize}
+ \item `H`: \LaTeX\ places the object exactly here, no matter how unfitting that may be.
+ In contrast to a single `h` or `h!` where the object is still a floating object which may float somewhere else if it does not fit here,
+ `H` means here and nowhere else.
+ `H` is defined by the \pkg{float} package which is loaded by this package automatically.
+ \item empty: do *not* pass the optional argument.
+ In this case the placement of the float can be changed using the `\floatplacement` command of the \pkg{float} package.
+ I have defined this key instead of advertising `\floatplacement` because `\floatplacement` does not allow the value~`H`.
+ \end{itemize}
+
+\keydoc[initial value=`\centering`]{align = <code>}{storing key}
+ \TeX\ code which is inserted at the beginning of the `<type>` environment.
+\keydoc[initial value=empty]{exec = <code>}{storing key} /
+\keydoc{exec += <code>}{executed key}
+ \TeX\ code which is inserted at the beginning of the `<type>` environment before align.
+ Can be used to define a command for this object, see \cref{local-definitions-in-tables}.
+\keydoc{graphic <option> = <value>}{unknown key handler}
+\keylinktarget{graphic width}
+ Is applied to \cmd{\includegraphicobject} and \cmd{\includegraphicsubobject}.
+ Is ignored for other objects.
+
+ `<option>` can be any key which is unique to one of these two commands and any key allowed by the `\includegraphics` command (see \pkg{graphicx}\slash \pkg{graphbox} package).
+ Unlike `\setkeys{Gin}{<options>}` this works with all keys (compare \pkg{graphicx} documentation~\autocite[section~4.6]{graphicx}, unfortunately it's not getting more specific than \enquote{Most of the keyval keys}).
+
+ I am checking if the key is existing immediately but I cannot check the value (only whether it is required).
+ Therefore if you pass a wrong value the error message will not appear where you set this option but at the object where it is applied.
+
+ If you set `graphic width` globally and want to override it locally you can use `graphic width=!`.
+ This is a feature of the graphicx package but it is not well documented in it's documentation~\autocite{graphicx}.
+ (Which is why I am mentioning it here.)
+ The exclamation mark is mentioned for the `\resizebox` command.
+
+\bigpar
+
+\keydoc[initial value=empty]{env = <env>}{storing key}
+ The name of an additional inner environment in which the body is wrapped, e.g.\ `tabular`, \env{tabularx}, `tikzpicture`.
+ If empty the body is *not* wrapped in another environment (additional to object).
+
+ Please note that using this option can lead to difficult to find errors with confusing error messages
+ if you forget that you used it or it has a different value than you think it has.
+ In this case `show env args` may help you.
+
+ Please note that due to the way how environments are implemented in \LaTeX2 (this will change in \LaTeX3~\autocite{ltx3env})
+ it is not possible to check whether a given name is an environment or a command.
+ But if you pass something that is *not* defined you will get an error.
+
+ If you have loaded the \pkg{longtable} package (either with the package option \pkgoptn{longtable} or with a `\usepackage{longtable}`)
+ you can set the value of this key to \val{longtable}.
+ In that case the necessary changes are performed
+ so that the content of this object environment is set in a \env{longtable} environment
+ and does *not* float but can span across page breaks.
+ In this case `type`, `placement` and `align` are ignored.
+
+\keydoc{<env> arg = <value>}{unknown key handler}
+\keylinktarget{(<env>) arg(s) (+)}
+\keylinktarget{(<env>) arg(s)}
+\keylinktarget{tabularx arg+}
+\keylinktarget{tabularx arg}
+\keylinktarget{\detokenize{tabular* arg}}
+\keylinktarget{tabular arg}
+\NoDescribeKey{env arg}
+ The value is wrapped in braces and passed as argument to the additional inner environment if the value of `env` is not empty and `<env>` equals the value of `env`.
+ Arguments to this environment can be given as an argument to the `*object` environment as well but this key provides the possibility to pass arguments on a global level (or to override a globally passed argument).
+ For example this can be used to give all tabularx-tables a consistent width:
+
+ \begin{examplecode}
+ % in preamble
+ \objectset[table]{tabularx arg=.8\linewidth}
+
+ % in document
+ \begin{tableobject}{caption=Test Table, label=tab1, env=tabularx}{XX}
+ ...
+ \end{tableobject}
+ \end{examplecode}
+
+\keydoc{<env> args = <value>}{unknown key handler}
+ Same like `<env> arg` except that the value is *not* wrapped in braces.
+ This can be used to pass several arguments or an optional argument.
+ Please not that this key cannot be used to pass exactly one undelimited argument consisting of more (or less) than one token because `\pgfkeys` (which I am using internally) strips several levels of braces.
+\keydoc{arg = <value>}{unknown key handler}
+ If `env` has a non-empty value this is an abbreviation of `<env> arg` where `<env>` is the value of `env`.
+
+ Please note that because this key depends on the value of another key the order in which these two keys are given is important.
+
+ The value of `env` is considered when this key is evaluated.
+ If you use `\objectset[<styles>]{<options>}` (with it's optional argument) the processing of the keys is delayed but it makes some basic error handling already so that the line numbers are as fitting as possible.
+ For this error handling only the options passed to this call of the command are considered.
+ (Trying to consider previously set values correctly would make things more difficult because you might be applying these options to several styles at once where one might have `env` set and another not.)
+ Therefore the following causes an error message:
+
+ \begin{examplecode}
+ \objectset[table]{env=tabularx}
+ \objectset[table]{arg=.8\linewidth}
+ \end{examplecode}
+
+ While this would not:
+
+ \begin{examplecode}
+ \objectset{env=tabularx}
+ \objectset{arg=.8\linewidth}
+ \end{examplecode}
+
+ Anyway, I recommend to always use this option directly after `env` (if you intend to use it).
+ `env` and it's `args` belong together:
+
+ \begin{examplecode}
+ \objectset{env=tabularx, arg=.8\linewidth}
+ \end{examplecode}
+
+\keydoc{args = <value>}{unknown key handler}
+ If `env` has a non-empty value this is an abbreviation of `<env> args` where `<env>` is the value of `env`.
+ The notes on error handling of the `arg` key apply to this key as well.
+\keydoc{(<env>) arg(s) += <value>}{unknown key handler}
+ A plus sign can be appended to the key (patterns) `<env> arg`, `<env> args`, `args` and `arg`.
+ In that case a possibly previously passed argument is not overridden but this value is appended to it.
+ For example the following pattern allows to easily switch between tabular and tabularx tables on a global level:
+
+ \begin{examplecode}
+ % in preamble
+ \objectset[table]{tabularx arg=.8\linewidth, env=tabularx}
+ \newcolumntype{Y}{>{\raggedleft\arraybackslash}X}
+
+ % in document
+ \begin{tableobject}{caption=Test Table, label=tab1, tabular arg=lr, tabularx arg+=XY}
+ ...
+ \end{tableobject}
+ \end{examplecode}
+
+\bigpar
+
+\keydoc{first head = <code>}{storing key}
+ Is inserted at the beginning of the object (if `env` is non-empty: inside of the inner environment and after possibly specified `(<env>) arg(s)`).
+ If this is not given, `head` is used instead.
+\keydoc{last foot = <code>}{storing key}
+ Is inserted at the end of the object (if `env` is non-empty: inside of the inner environment).
+ If this is not given, `foot` is used instead.
+\keydoc[initial value=empty]{head = <code>}{storing key}
+ This value is used for `first head` if `first head` is not given.
+ If `env=longtable` this is the head after a pagebreak inside of the table.
+\keydoc[initial value=empty]{foot}{storing key}
+ This value is used for `last foot` if `last foot` is not given.
+ If `env=longtable` this is the foot before a pagebreak inside of the table.
+\keydoc{table head = <code>}{executed key}
+ This is a convenience key which sets `first head`, `last foot`, `head` and `foot`.
+ The value is the column headers without rules\slash lines and without the trailing `\\`.
+\keydoc{table break text = <text>}{storing key}
+ A text put in the `foot` by `table head`.
+\keydoc{table head style = <code>}{executed key}
+ Defines how `table head` fills out `first head`, `last foot`, `head` and `foot`.
+
+ Initial value:
+
+ \begin{examplecode}
+ {%
+ first head =
+ \toprule
+ #1 \\
+ \midrule,
+ head =
+ #1 \\
+ \midrule,
+ foot =
+ \midrule
+ \ifx\object@tableBreakText\@empty
+ \else
+ \multicolumn{\the\LT@cols}{r@\relax}{\object@tableBreakText}%
+ \fi,
+ last foot =
+ \bottomrule,
+ }
+ \end{examplecode}
+
+ (Note the curly braces which are required because the value contains commas and equal signs, see \cref{special-characters-in-options}.
+ `\the\LT@cols` is the number of columns of the longtable and `\object@tableBreakText` is the value of `table break text`.
+ Commands containing an @ in their name are internal commands and can only be used between `\makeatletter` and `\makeatother`, see also \autocite{texexchange_make_at}.)
+
+\bigpar
+
+\keydoc[initial value=`false`, default value=`true`]{show env args =? true | false}{boolean key}
+ Show the code which is assembled from the `env` and `(<env>) arg(s) (+)` keys before executing it.
+ See \cref{help}.
+ Please note that arguments may be given as additional arguments and not as `(<env>) arg(s) (+)` like in `\begin{tableobject}{env=tabular}{cl}`.
+ Such arguments are *not* shown by this key.
+ This key applies to subobjects as well.
+
+\keydoc[initial value=`true`, default value=`true`]{warn no caption =? true | false}{boolean key}
+ Give a warning if \key{caption} is *not* given.
+\keydoc[initial value=`true`, default value=`true`]{warn no label =? true | false}{boolean key}
+ Give a warning if `label` is *not* given.
+\keydoc[initial value=`false`, default value=`true`]{warn other env =? true | false}{boolean key}
+ Give a warning when `<env> args` is given if `env` does not have the value `<env>` and the value of `env` is not empty.
+ This applies to subobjects as well.
+
+ The \cmd{\objectset} command if used with it's optional argument does not set the options immediately but stores them in different macros for different object styles.
+ Therefore if you change this value for certain styles this change does not affect following `\objectset` commands.
+ Without the optional style argument, however, the change takes effect immediately.
+
+ In order to avoid duplicates this warning is printed only where the key is passed by the user
+ and *not* where it is applied implicitly because of a previous `\objectset[<styles>]{<options>}`.
+
+\keydoc[initial value=`false`, default value=`true`]{contains subobjects =? true | false}{boolean key} /
+\keydoc{sub =? true | false}{forwarding key}
+ Specifies that this object contains subobjects, see \cref{subobject-environment}.
+ Is relevant only if `env` is set.
+ The value of `env` is applied to the subobjects instead of this object.
+ This is not executed immediately but only after all options have been processed so that you do not need to pay special attention to pass `env` before `contains subobjects`.
+
+ If this is *not* given (or more precisely: if this is false)
+ and the value of `env` is *not* empty I look ahead whether the object contains a subobject.
+ If I find a subobject I pretend you had passed this option and print a warning.
+ I insist on you explicitly passing this option because the lookahead does not work in all situations.
+ It ignores space and `\par` tokens but if there is any other token before the subobject,
+ for example a `\small` to fit two tables side by side which are a little too wide
+ (which may not be the best solution but an easy quick fix)
+ or a `\typeout` for debugging,
+ the lookahead does not find the subobject (possibly) resulting in unpredictable errors.
+ For example if you set `env=tabular` it will most likely complain about an \errormessage{Illegal pream-token}
+ or about a \errormessage{Missing number, treated as zero} with `env=tabular*` because the required arguments are missing.
+\endkeydoc
+
+
+All `(<env>) arg(s) (+)` options apply to subobjects as well.
+
+Additionally the following options are passed through to the corresponding options of all subobjects inside of this object, they are all \keytype[forwarding key]{forwarding keys}.
+\newcommand{\TargetKey}[2]{/subobject/\stripsubobject #2\relax}%
+\def\stripsubobject subobject #1\relax{\stripoptplus{#1}}%
+See \env{subobject} environment.
+\forwardingkeydoc{subobject linewidth = <dimen>}
+\forwardingkeydoc{subobject sep = <code>}
+\forwardingkeydoc{subobject hor =? <code>}
+\forwardingkeydoc{subobject hor sep (+)= <code>}
+\forwardingkeydoc{subobject ver =? <code>}
+\forwardingkeydoc{subobject ver sep (+)= <code>}
+\forwardingkeydoc{subobject exec (+)= <code>}
+\forwardingkeydoc{subobject env = <env>}
+\forwardingkeydoc[target=/subobject/subcaptionbox]{subcaptionbox}
+\forwardingkeydoc[target=/subobject/subcaptionbox inner pos]{subcaptionbox inner pos = c | l | r | s | <empty>}
+\forwardingkeydoc[target=/subobject/subpage]{subpage}
+\forwardingkeydoc[target=/subobject/subpage outer pos]{subpage outer pos = c | t | b | T | B | auto | Auto | <empty>}
+\forwardingkeydoc[target=/subobject/subpage height]{subpage height = <dimen>}
+\forwardingkeydoc[target=/subobject/subpage inner pos]{subpage inner pos = c | t | b | s | <empty>}
+\forwardingkeydoc[target=/subobject/subpage align]{subpage align = <code>}
+
+\forwardingkeydoc{subobject warn no caption =? true | false}
+\forwardingkeydoc{subobject warn no label =? true | false}
+\endkeydoc
+\endgroup
+
+
+\subsubsection{`figureobject` environment}
+\label{figureobject-environment}
+\DescribeEnv{figureobject}
+Is used for inserting figures.
+Takes the same options like the \env{object} environment.
+It differs in the following initial values:
+\begin{itemize}
+\item `type=figure`
+\end{itemize}
+
+\subsubsection{`tableobject` environment}
+\label{tableobject-environment}
+\DescribeEnv{tableobject}
+Is used for inserting tables.
+Takes the same options like the \env{object} environment.
+It differs in the following initial values:
+\begin{itemize}
+\item `type=table`
+\end{itemize}
+
+
+\subsubsection{`subobject` environment}
+\label{subobject-environment}
+\begingroup
+\keydocpath{/subobject}
+\DescribeEnv{subobject}
+To be used inside of an `*object` environment if you want to place several images\slash tables\slash whatever together.
+See also \cmd{\includegraphicsubobject}.
+
+I recommend to *not* put anything between the subobjects manually so that you can control their positioning with the `hor` and `ver` options.
+(Spaces after a subobject are ignored but empty lines are not.)
+
+Unlike the `object` environment, `\caption` and `\label` *cannot* be used inside of the subobject environment.
+Use the \key{caption} and `label` options instead.
+
+There are two different backends available, both provided by the \pkg{subcaption} package.
+See the `subcaptionbox` and `subpage` keys.
+
+The `subobject` environment has exactly one mandatory argument, a comma separated list of the following options.
+
+
+The following options correspond to those of an `object`.
+See \cref{object-environment}.
+\newcommand{\TargetKey}[2]{/object/#2}%
+\correspondingkeydoc{label = <label>}{storing key}
+
+\correspondingkeydoc{caption = <text>}{storing key}
+
+\correspondingkeydoc{list caption = <text>}{storing key}
+
+ (The \pkg{subcaption} package disables subcaptions in the list of figures\slash tables\slash whatever by default.
+ To enable them use `\captionsetup[sub]{list=true}`.)
+\correspondingkeydoc{details = <text>}{storing key}
+
+\correspondingkeydoc{details sep = <text>}{storing key}
+
+\correspondingkeydoc{exec = <code>}{storing key} /
+\correspondingkeydoc{exec += <code>}{executed key}
+
+\correspondingkeydoc{graphic <option> = <value>}{unknown key handler}
+
+ (This key is completely useless.
+ It only has a meaning in the context of \cmd{\includegraphicsubobject} but there these options can be used directly without the prefix `graphic`.
+ I am allowing it anyway in order to support the same key like in \cmd{\objectset} which is supported by \cmd{\includegraphicobject} as well.)
+\correspondingkeydoc{env = <env>}{storing key}
+
+ (See also the `contains subobjects` option of the \env{object} environment.)
+\correspondingkeydoc{(<env>) arg(s) (+) = <value>}{unknown key handler}
+
+ (All values passed to the corresponding keys of the \env{object} environment apply to this option, too.)
+
+\correspondingkeydoc{warn no caption =? true | false}{boolean key}
+
+\correspondingkeydoc{warn no label =? true | false}{boolean key}
+
+\forwardingkeydoc[target=/object]{warn other env =? true | false}
+
+\forwardingkeydoc[target=/object]{show env args =? true | false}
+
+\endkeydoc
+
+The following options are unique for the `subobject` environment:
+\keydoc[initial value=`.5\linewidth`]{linewidth = <dimen>}{storing key}
+ The horizontal space available for the subobject.
+ The content of the subobject is centered within this width.
+ If two subobjects displayed side by side have a small width they may appear too far apart from each other with the initial value.
+ Then you can decrease this value so that they come closer together.
+ (With `subcaptionbox` this value may be empty.
+ In that case the subobject takes as much space as it needs
+ and `\linewidth` inside of the subobject is the same like in the parent object.)
+
+ If you want to place more than two subobjects side by side you must decrease this value accordingly.
+ Keep in mind that you need to consider the width of `hor sep` as well if you changed it.
+
+ Dimensions can be given relative to other dimensions or in numbers.
+ Aside from absolute units like `pt` or `cm` \TeX\ also recognizes units relative to the current font size: `em` and `ex`.
+ For more information on dimensions see \mycite[chapter~10]{texbook} or \mycite[chapter~8]{texbytopic}.
+
+\keydoc{sep = <code>}{storing key}
+ A separator which is inserted before each subobject except for the first subobject inside of the current parent object.
+
+\keydoc[default value=empty]{hor =? <code>}{executed key}
+ Set the value of `sep` to the value of `hor sep` so that the subobjects are placed side by side.
+ If you pass a value the value will be appended to `sep` after setting it to `hor sep`.
+
+ Please note that options are only valid until the end of a group.
+ Therefore if you use this inside of a subobject it does *not* apply for the following subobject.
+ Instead use `subobject hor` on the parent object.
+
+\keydoc[initial value=empty]{hor sep = <code>}{storing key} /
+\keydoc{hor sep += <code>}{executed key}
+ The separator to be used if the subobjects are suppossed to be placed side by side.
+
+ Please note that `hor` must be used *after* setting this key, otherwise this option will not take effect.
+
+\keydoc[default value=empty]{ver =? <code>}{executed key}
+ Set the value of `sep` to the value of `ver sep` so that the subobjects are placed below each other.
+ If you pass a value the value will be appended to `sep` after setting it to `ver sep`.
+
+ Please note that options are only valid until the end of a group.
+ Therefore if you use this inside of a subobject it does *not* apply for the following subobject.
+ Instead use `subobject ver` on the parent object.
+
+\keydoc[initial value=`\par\bigskip`]{ver sep = <code>}{storing key} /
+\keydoc{ver sep += <code>}{executed key}
+ The separator to be used if the subobjects are suppossed to be placed below each other.
+
+ Please note that `ver` must be used *after* setting this key, otherwise this option will not take effect.
+
+\bigpar
+
+\keydoc{subcaptionbox}{executed key}
+ The \pkg{subcaption} package provides several possibilities to insert subobjects.
+ This option tells the subobject environment to use the `\subcaptionbox` command instead of the `subfigure` or `subtable` environment, see option `subpage`.
+ (This key does *not* take a value.)
+
+ This option allows to pass an empty value to `linewidth`.
+ It can be useful if you have subobjects with a small width
+ so that you don't need to try different `subobject linewidth`s.
+ The example in \cref{subobjects-2} could be rewritten as following:
+
+ \begin{examplecode}
+ \documentclass{article}
+ \usepackage{easyfloats}
+
+ \objectset[table]{%
+ env = tabular,
+ subcaptionbox,
+ subobject linewidth =,
+ subobject hor = \qquad,
+ }
+ \captionsetup[sub]{list=true}
+
+ \begin{document}
+ \begin{tableobject}{contains subobjects,
+ caption = Two test tables,
+ label = tabs abc 123,
+ }
+ \begin{subobject}{caption=Abc \& 123, arg=rl}
+ \toprule
+ abc & 123 \\
+ de & 45 \\
+ f & 6 \\
+ \bottomrule
+ \end{subobject}
+ \begin{subobject}{caption=123 \& abc, arg=lr}
+ \toprule
+ 123 & abc \\
+ 45 & de \\
+ 6 & f \\
+ \bottomrule
+ \end{subobject}
+ \end{tableobject}
+ \end{document}
+ \end{examplecode}
+
+ Note that this works only if the subobject captions are very short.
+ If they are wider than the subobjects the line breaks which looks ugly.
+
+ If you want to use this option with `env=tabular` (or similar) you must pass the column specification with the option `arg=lr` (instead of as a separate argument).
+ Otherwise you will get the error message \errormessage{Package array Error: Illegal pream-token (\BODY): `c' used.}
+
+ This option is *not* compatible with `env=tabularx` and does not allow verbatim content inside of the subobject.
+
+\keydoc{subcaptionbox inner pos = c | l | r | s | <empty>}{storing key}
+ The horizontal position of the content in the box.
+ Also allowed is any justification defined with `\DeclareCaptionJustification`
+ (see the \pkg{caption} package documentation).
+ An empty value means that this optional argument is
+ *not* passed to the `\subcaptionbox` command.
+ This option has no effect if `linewidth` is empty.
+ I discourage using this option because it destroys
+ the alignment of (sub)object and (sub)caption.
+
+\bigpar
+
+\keydoc{subpage}{executed key}
+ This is (after `subcaptionbox`) the second and nowadays initial backend for the `subobject` environment.
+ It uses the `subfigure`\slash `subtable` environment defined by the \pkg{subcaption} package.
+ (This key does *not* take a value.)
+
+ The `subfigure` and `subtable` environments are minipages and take the same arguments
+ which can be set with `linewidth`, `subpage outer pos`, `subpage height` and `subpage inner pos`.
+
+\keydoc[initial value=`auto`]{subpage outer pos = c | t | b | T | B | auto | Auto | <empty>}{storing key}
+ The vertical position of the minipage on the baseline.
+
+ Additionally to the values `t`, `c` and `b` supported by the minipage environment
+ the \pkg{subcaption} package v1.2 adds the allowed values `T` and `B`
+ and this key also allows the values `auto`, `Auto` and empty.
+
+ While `t` and `b` align the top\slash bottom *baseline* of the content
+ `T` and `B` align the very top\slash bottom of the content.
+
+ `c` aligns the center of the content.
+
+ `auto` means `t` if the caption is displayed at the top
+ or `b` if the caption is displayed at the bottom
+ so that the captions are aligned
+ (same behavior like `subcaptionbox`).
+
+ If a subobject has neither caption nor label `auto` may not work as expected.
+ Instead `Auto` can be used which is based on `T` and `B` instead of `t` and `b`.
+ Note that `Auto` requires version 1.2 or newer of the \pkg{subcaption} package.
+
+ Empty is equivalent to `c`.
+
+ Invalid values are silently ignored and are equivalent to `c`.
+
+
+\keydoc[initial value=empty]{subpage height = <dimen>}{storing key}
+ The height of the minipage.
+ An empty value means that this optional argument is
+ *not* passed to the `subfigure`\slash `subtable` environment.
+
+ Dimensions can be given relative to other dimensions or in numbers.
+ Aside from absolute units like `pt` or `cm` \TeX\ also recognizes units relative to the current font size: `em` and `ex`.
+ For more information on dimensions see \mycite[chapter~10]{texbook} or \mycite[chapter~8]{texbytopic}.
+
+\keydoc[initial value=empty]{subpage inner pos = c | t | b | s | <empty>}{storing key}
+ The vertical position of the content on the minipage.
+ Empty means that this optional argument is
+ *not* passed to the `subfigure`\slash `subtable` environment.
+ This option has no effect if `subpage height` is empty.
+
+\keydoc[initial value=`\centering`]{subpage align = <code>}{storing key}
+
+ \TeX\ code which is inserted at the beginning of the `subfigure`\slash `subtable` environment.
+\endkeydoc
+
+If you want to change the numbering of subobjects please refer to the \pkg{subcaption} package documentation~\autocite[section~5 \sectionname{The `\DeclareCaptionSubType` command}]{subcaption}.
+The \pkg{subcaption} package is loaded automatically by this package.
+\endgroup
+
+
+\subsection{Commands}
+\label{commands}
+
+In this section I am describing the commands defined by this package.
+
+
+\subsubsection{`\includegraphicobject` command}
+\label{includegraphicobject-command}
+\begingroup
+\keydocpath{/graphicobject}
+\DescribeMacro{\includegraphicobject}
+`\includegraphicobject{<filename>}` \\
+`\includegraphicobject[<options>]{<filename>}` \\
+`\includegraphicobject[<style>][<options>]{<filename>}`
+
+Is used for inserting graphics from a different file.
+It is very similar to \pkg{graphicx}' `\includegraphics` command, except that the graphic is automatically set in a \env{figureobject} environment.
+You can change this by setting the object style with \cmd{\graphicobjectstyle} or an additional optional argument given *before* the usual optional argument.
+The mandatory argument is the same: The name of the graphics file to include *without* the file extension.
+The optional argument accepts---aside from all the options defined by \pkg{graphicx}\slash \pkg{graphbox}---also all options of the \env{figureobject} environment.
+Additionally there are the following unique options:
+\keydoc[initial value=`true`, default value=`true`]{auto caption =? true | false}{boolean key}
+ If no \key{caption} is given the file name is used as caption.
+ All underscores in the file name are replaced by `\textunderscore`.
+ This option is intended to be used on a global level but works in the optional argument of this command as well.
+\keydoc[initial value=`false`, default value=`true`]{auto caption strip path =? true | false}{boolean key}
+ If `auto caption` is true and the file name is used as caption
+ a possibly leading path is stripped (everything before and including the last slash in `<filename>`).
+ This is initially false because I am assuming that in most cases where the path should not be displayed `\graphicspath{{path/}}` would be used.
+\keydoc[initial value=`true`, default value=`true`]{auto label =? true | false}{boolean key}
+ If no `label` is given the file name is used as label.
+ This option is intended to be used on a global level but works in the optional argument of this command as well.
+\keydoc[initial value=`false`, default value=`true`]{auto label strip path =? true | false}{boolean key}
+ If `auto label` is true and the file name is used as label
+ a possibly leading path is stripped (everything before and including the last slash in `<filename>`).
+ This is initially false because I am assuming that in most cases where the filename without path is unique `\graphicspath{{path/}}` would be used.
+\keydoc[initial value=`true`, default value=`true`]{warn env =? true | false}{boolean key}
+ Give a warning if `env` is not empty.
+\keydoc[initial value=`true`, default value=`true`]{no env =? true | false}{boolean key}
+ Reset `env` to an empty value.
+ This happens after evaluating `warn env`.
+\endkeydoc
+
+You may not use this command inside of an `*object` environment.
+Otherwise you will get an \errormessage{object environment may not be nested} error.
+See also \cmd{\includegraphicsubobject}.
+\endgroup
+
+\subsubsection{`\includegraphicsubobject` command}
+\label{includegraphicsubobject-command}
+\DescribeMacro{\includegraphicsubobject}
+`\includegraphicsubobject{<filename>}` \\
+`\includegraphicsubobject[<options>]{<filename>}`
+
+To be used if you want to place several graphics from different files in one object.
+
+It takes the same options like \cmd{\includegraphicobject} except that it takes options for the \env{subobject} environment instead of options for the `object` environment.
+Also it does *not* take the optional `<style>` argument.
+
+You may not use this command outside of an `*object` environment.
+Otherwise you will get a \errormessage{subobject environment may not be used outside of an object} error.
+See also \cmd{\includegraphicobject}.
+
+
+\subsubsection{Setting options globally}
+\label{setting-options-globally}
+
+\DescribeMacro{\objectset}
+`\objectset{<options>}` \\
+`\objectset[<styles>]{<options>}`
+
+Sets the passed options for all following objects until the end of the current group.
+All options of the \env{object} environment are allowed.
+
+A comma separated list of styles or style groups can be given in an optional argument.
+In that case the options are not set immediately but appended to the specified style(s).
+The options are set locally for any following object of the specified style(s) in the same group.
+Although setting the options is delayed the options are checked immediately so that error messages and warnings point to the line where the option is specified in the code, not where it is technically set.
+(In order for that to work properly it is important that options are specified with the key name only and not with the full path, see \cref{key-name-vs-key-path}.)
+However, the value can usually *not* be checked immediately, only whether it is required or not.
+Therefore if you pass a wrong value the error message will not appear where you set this option but at the object where it is applied.
+An exception is the key `env` where the value is checked immediately for plausibility whether it might be the name of an environment.
+
+If `<styles>` is empty or an empty group the options are not applied.
+No error or warning is printed.
+
+There is a style group called `all` which all styles belong to.
+`\objectset{<options>}` and `\objectset[all]{<options>}` are mostly equivalent
+except that the former (without optional argument) is more efficient because it sets the options immediately
+and the latter (with the optional argument given) is able to override options set for a style.
+
+
+\DescribeMacro{\graphicobjectstyle}
+`\graphicobjectstyle{<style>}` can be used to change the object style used by \cmd{\includegraphicobject}.
+For example, if you have a single table in a file called \filename{catcodes.pdf} you can insert it as following.
+Alternatively, you can use the optional `<style>` argument.
+
+\begin{examplecode}
+\begingroup
+\graphicobjectstyle{table}
+\includegraphicobject[caption=Catcodes]{catcodes}
+\endgroup
+\end{examplecode}
+
+
+\DescribeMacro{\graphicspath}
+`\graphicspath{{path/}}`: see \pkg{graphicx} package documentation~\autocite[section~4.5]{graphicx}.
+
+
+\subsubsection{New object styles and types}
+\label{new-object-styles-and-types}
+
+This section explains how to define a new object `<style>` in the sense of \cref{styles}.
+It is *not* about how to define a new `<floatstyle>` which can be used as value for the `float style` key.
+
+\DescribeMacro{\NewObjectStyle}
+`\NewObjectStyle{<style>}{<options>}`
+defines a new environment called `<style>object` analogous to `figureobject` and `tableobject`.
+`<options>` are set for the new object style as if you had used `\objectset[<style>]{<options>}`.
+You must always specify the `type`.
+If this package is loaded without `allowstandardfloats`
+the float environment which is passed to `type` is redefined to issue a warning that `<style>object` should be used instead.
+This warning should not influence the environment's usual behavior.
+If the float environment was already passed as `type` to a previous call of `\NewObjectStyle` it is not redefined again but `<style>object` is appended to the list of replacement suggestions.
+
+If you define a new object style you may also want to define a new float type.
+The \pkg{float} package (which is automatically loaded by this package) defines the following command for doing so:
+
+\DescribeMacro{\newfloat}
+`\newfloat{<type>}{<placement>}{<ext>}[<within>]`
+\begin{itemize}
+\item `<type>` is the floating environment to be defined.
+ This value is also used as the float name which is displayed in front of the caption, therefore it should be capitalized.
+ Alternatively the name can be changed using `\floatname{<type>}{<name>}`.
+\item `<placement>` is the value to be used if the `placement` key is not given (or has an empty value).
+ This is initially `tbp` for the standard float types.
+\item `<ext>` is the extension of a file used to save the list of `<type>`s.
+ This is `lof` (list of figures) for `type=figure` and `lot` (list of tables) for `type=table`.
+ This file extension should be unique.
+\item `<within>` is a counter whose value is prepended to the `<type>` counter. The `<type>` counter is reset every time the `<within>` counter is incremented.
+\item Make sure an appropriate default float style is active when using `\newfloat`.
+ The default float style can be activated using `\floatstyle{<floatstyle>}`, see the \pkg{float} package documentation~\autocite{float}.
+ It should be `plain` for something like an image or `plaintop` for something like a table.
+ The reasoning is explained in~\autocite{texexchange_caption_position}.
+ Alternatively you can specify the float style using the `float style` key in the `<options>` of `\NewObjectStyle`.
+\end{itemize}
+
+`\NewObjectStyle` automatically defines the corresponding environment needed for `subobject` if possible, i.e.\ if the \pkg{caption} package is new enough.
+If the \pkg{caption} package is older than August~30, 2020 and you want to use subobjects you need to define the subtype manually by putting the following line *before* loading this package \autocite{texexchange_subtype_workaround}:
+\begin{examplecode}
+\AtBeginDocument{\DeclareCaptionSubType{<type>}}
+\end{examplecode}
+
+\DescribeMacro{\trivfloat}
+The \pkg{trivfloat} package provides the `\trivfloat{<type>}` command which is an easier alternative to `\newfloat`.
+If you use it you should be aware that it does not define the new float type environment immediately but at `\begin{document}`.
+This does *not* affect `\NewObjectStyle` (you can still use it directly afterwards)
+but it means that the float style active at `\begin{document}` is applied and not the float style active at `\trivfloat`.
+Therefore I recommend to pass the `float style` option to `\NewObjectStyle`,
+then it does not matter which float style was active when the float type was defined because it is restyled before each use of an object where this option applies.
+`\trivfloat` must be used before `\AtBeginDocument{\DeclareCaptionSubType{<type>}}`.
+
+\DescribeMacro{\DeclareFloatingEnvironment}
+The \pkg{newfloat} package provides the `\DeclareFloatingEnvironment[<options>]{<type>}` command which is a newer alternative to `\newfloat` and `\trivfloat`.
+With it's key=value options it is more intuitive than `\newfloat` and more flexible than `\trivfloat`.
+Unlike `\newfloat` and `\trivfloat` it automatically capitalizes `<type>` before using it as float name.
+It seems to ignore `\floatstyle` so you need to specify that in the options.
+The \pkg{newfloat} package is written by the same author like the \pkg{subcaption} package so you don't need to worry about defining subtypes manually.
+
+
+\subsubsection{New object style groups}
+\label{new-object-style-groups}
+
+Several object styles can be combined to a group.
+You can set options for all styles contained in a group using `\objectset[<group>]{<options>}`.
+
+\DescribeMacro{\NewObjectStyleGroup}
+`\NewObjectStyleGroup{<group>}{<styles*>}`
+defines a new style group consisting of the styles `<styles*>`.
+`<styles*>` is a comma separated list of styles.
+In contrast to `<styles>` it may *not* contain style groups.
+
+\DescribeMacro{\AddObjectStyleToGroup}
+`\AddObjectStyleToGroup{<group>}{<style>}`
+adds an existing style to an existing group.
+
+
+\subsubsection{Hooks}
+\label{hooks}
+
+This package provides several commands similar to `\AtBeginDocument`
+which take one argument, \TeX\ code which is executed at a later point in time.
+
+
+\DescribeMacro{\AtBeginObject}
+`\AtBeginObject{<code>}`
+ runs `<code>` every time at the begin of an \env{object} environment
+ (including \env{figureobject}, \env{tableobject} and \cmd{\includegraphicobject}).
+ This hook is inside of the group but before any options are processed.
+
+\DescribeMacro{\AtBeginSubobject}
+`\AtBeginSubobject{<code>}`
+ runs `<code>` every time at the begin of a \env{subobject} environment
+ (including \cmd{\includegraphicsubobject}).
+ This hook is inside of the group but before any options are processed.
+
+\DescribeMacro{\AtBeginGraphicObject}
+`\AtBeginGraphicObject{<code>}`
+ runs `<code>` every time in \cmd{\includegraphicobject} and \cmd{\includegraphicsubobject}.
+ This hook is after the object\slash subobject hook but before any options are processed.
+
+
+\subsection{Initialization}
+\label{initialization}
+
+This package uses the \pkg{float} package to restyle \env{table} to `plaintop` and `figure` to `plain`
+so that captions of tables appear always above the table and captions of figures always below the figure.
+The reasoning is explained in~\autocite{texexchange_caption_position}.
+If you really want to place captions differently you can do that with `\restylefloat` (see \pkg{float} package documentation~\autocite{float}) or by setting the `float style` option.
+However, I would advice to rethink why you would want to do that.
+
+Unless this package is loaded with the \pkgoptn{allowstandardfloats} option
+it redefines the \env{table} and `figure` environments to issue a warning if they are used directly.
+This warning should not influence their usual behavior, though.
+Instead of \env{table}\slash `figure` you should use \env{tableobject}\slash \env{figureobject} or \cmd{\includegraphicobject},
+otherwise this package cannot help you.
+
+Unless this package is loaded with the \pkgoptn{nographic} option
+it loads the \pkg{graphicx} package in order to include graphics.
+It also guarantees that the paper size of the generated pdf matches \LaTeX' point of view (instead of depending on the system settings).
+
+Unless this package is loaded with the \pkgoptn{noarray} option
+it loads the \pkg{array} package which defines additional column specification features like `>{<prefix>}`, `<{<suffix>}` and `!{<addcolsep>}`
+and the `\newcolumntype{<col>}[<args>]{<spec>}` command.
+It also changes the implementation of how lines (rules) are drawn
+but that is irrelevant if you use the recommendations given in the \pkg{booktabs} package documentation~\autocite[section~2 \sectionname{The layout of formal tables}]{booktabs}.
+Loading the \pkg{array} package is merely for convenience. This package does not use any of it's features.
+
+Unless this package is loaded with the \pkgoptn{nobooktabs} option
+it loads the \pkg{booktabs} package which defines commands for formatting tables, most importantly `\toprule`, `\midrule` and `\bottomrule`.
+These are used by the `table head` key unless you redefine it using `table head style`.
+
+Other packages loaded by this package are listed in \cref{used-packages}.
+
+
+\subsection{Package options}
+\label{package-options}
+
+The package options are implemented using the standard \LaTeX\ package options handling functionality as described in~\autocite{clsguide}.
+Therefore they do *not* take any values but consist of keys only.
+Instead I usually provide two separate keys, one which enables an option and another which disables the option.
+The keys with a~\radioon\ are active by default and the keys with a~\radiooff\ are inactive by default.
+
+\pkgoptndoc*{graphicx} use the \pkg{graphicx} package as backend for \cmd{\includegraphicobject}.
+\pkgoptndoc{graphbox} use the \pkg{graphbox} package as backend for \cmd{\includegraphicobject}.
+\pkgoptndoc{nographic} do not load \pkg{graphicx} or \pkg{graphbox}.
+ If you use this option \cmd{\includegraphicobject} and \cmd{\includegraphicsubobject} are not defined.
+
+ Warning: Without driver specific packages like \pkg{graphicx}, \pkg{geometry} or \pkg{hyperref} the paper size of the resulting pdf depends on the system settings, independent of what you set in \LaTeX. \autocite{texexchange_papersize}
+
+\pkgoptndoc*{array} load the \pkg{array} package.
+ There is no difference between using this package option or a separate `\usepackage{array}`.
+\pkgoptndoc{noarray} do *not* load the \pkg{array} package.
+
+\pkgoptndoc*{booktabs} load the \pkg{booktabs} package.
+ There is no difference between using this package option or a separate `\usepackage{booktabs}`.
+\pkgoptndoc{nobooktabs} do *not* load the \pkg{booktabs} package.
+ Please note that the `table head` key initially relies on the booktabs package.
+ If you want to use it with this package option you need to redefine it with `table head style`.
+
+\pkgoptndoc{longtable} load the \pkg{longtable} package.
+ There is no difference between using this package option or a separate `\usepackage{longtable}`.
+\pkgoptndoc*{nolongtable} do *not* load the \pkg{longtable} package.
+
+\pkgoptndoc{allowstandardfloats} do not redefine the \env{table} and `figure` environments.
+ Without this option they are redefined to issue a warning if they are used directly.
+ This warning should not influence their usual behavior.
+ Instead of \env{table}\slash `figure` you should use \env{tableobject}\slash \env{figureobject} or \cmd{\includegraphicobject},
+ otherwise this package cannot help you.
+\endpkgoptndoc
+
+
+\subsection{Help}
+\label{help}
+
+If you get an error message and don't understand where it comes from
+or the output is different from what you expected
+the following features may give you a better understanding of what this package is doing.
+These features are based on the \TeX\ primitive `\show`.
+
+\DescribeMacro{\show}
+`\show` shows (among other information) the parameter text and the replacement text of a macro on the terminal and in the log file.
+If you use one of the following features you most likely want to know the replacement text which is the part between `->` and the last `.` on the line.
+In errorstopmode mode (i.e.\ without `--interaction=nonstopmode` which most IDEs pass by default) \TeX\ stops after `\show` and waits until you confirm that you have read the information and it may proceed by pressing enter.
+For more information see \mycite[section~34.1]{texbytopic}.
+
+\DescribeHandler{.show value}
+The `.show value` handler can be used to show the value of a \keytype{storing key}
+(see \pkg{pgfkeys} documentation~\autocite[section~87.4.9 \sectionname{Handlers for Key Inspection}]{tikz}).
+For example:
+
+\begin{examplecode}
+\includegraphicsubobject[sep/.show value]{<filename>}
+\end{examplecode}
+
+\DescribeHandler{.show boolean}
+This package also defines a new handler called `.show boolean` which can be used to show the value of a \keytype{boolean key}.
+For example:
+
+\begin{examplecode}
+\objectset{warn other env/.show boolean}
+\end{examplecode}
+
+\DescribeMacro{\ShowObjectStylesInGroup}
+`\ShowObjectStylesInGroup{<group>}` shows all object styles which are contained in the given group.
+The styles are wrapped in curly braces so that I can iterate over them with the \LaTeX\ command `\@tfor`.
+
+\DescribeMacro{\ShowObjectStyleOptions}
+`\ShowObjectStyleOptions{<style>}` shows the options set for a specific style.
+Please note that this does *not* show directly set options (i.e.\ options set by `\objectset` without the optional argument and options in the options argument of the object).
+
+\DescribeKey{show env args}
+See also the `show env args` key of the \env{object} and \env{subobject} environments.
diff --git a/macros/latex/contrib/easyfloats/doc/content/examples.tex b/macros/latex/contrib/easyfloats/doc/content/examples.tex
new file mode 100644
index 0000000000..b712740b9b
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/content/examples.tex
@@ -0,0 +1,355 @@
+% !TeX root = ../easyfloats.tex
+
+\section{Examples}
+\label{examples}
+
+Let's start with a few examples.
+Environments, commands and keys defined by this package are links (both in the code and in the text).
+Klicking on them will get you to their explanation in \cref{documentation}.
+
+\Cref{motivation} gives a motivation why this package is useful.
+There is a list of related packages in \cref{used-packages,other-packages}.
+Package names link to the rather short description in that list.
+
+
+\subsection{Table}
+\label{table}
+Use the \env{tableobject} environment for inserting tables.
+Pass caption and label as keyword arguments.
+You can't mess up the order of caption and label and you get a warning if you forget to specify them.
+You don't need two environments (one for the float, one for the table---`tableobject` can do both).
+\pkg{booktabs} (and \pkg{array}) are loaded automatically (if not disabled, see \cref{package-options}).
+
+\begin{examplecode}
+\documentclass{article}
+\usepackage{easyfloats}
+\objectset{warn no label=false}
+
+\begin{document}
+\begin{tableobject}{caption=Some catcodes, env=tabular}{cl}
+ \toprule
+ Catcode & Meaning \\
+ \midrule
+ 0 & Escape Character \\
+ 1 & Begin Group \\
+ 2 & End Group \\
+ \vdots & \quad \vdots \\
+ \bottomrule
+\end{tableobject}
+\end{document}
+\end{examplecode}
+
+You can reduce typing effort even further by using the `table head` key, see \cref{longtable}.
+
+
+\subsection{Graphic}
+\label{graphic}
+Use the \cmd{\includegraphicobject} command to insert a graphic.
+It is a wrapper around \pkg{graphicx}' `\includegraphics` command taking the same arguments.
+No need for a surrounding `figure` environment.
+I have extended the allowed optional keyword argument to also accept caption, label and more.
+`details` are appended to the caption below the figure but not in the list of figures.
+Select with the \pkgoptn{graphicx} or \pkgoptn{graphbox} package options whether you want to use the commonly used \pkg{graphicx} package or it's extension \pkg{graphbox}.
+
+\begin{examplecode}
+\documentclass{article}
+\usepackage{easyfloats}
+\usepackage{hyperref}
+\objectset[figure]{graphic width=.8\linewidth}
+
+\begin{document}
+\includegraphicobject[%
+ label = lion,
+ caption = CTAN lion drawing by Duane Bibby,
+ details = Thanks to \href{https://ctan.org/lion/files}{www.ctan.org}.,
+]{graphics/ctan_lion}
+
+\listoffigures
+\end{document}
+\end{examplecode}
+
+If you omit \key{caption} or `label` the file name is used.
+See `auto label`, `auto caption`, `auto label strip path` and `auto caption strip path`.
+
+
+\subsection{Subobjects}
+\label{subobjects-2}
+Use the \env{subobject} environment to combine two (or more) subobjects to one big object.
+The `contains subobjects` option causes the `env` option to be applied to the subobjects instead of the containing object.
+Changing the `subobject linewidth` is usually not necessary but in this example the tables fill only a small part of the width
+so they are too far apart from each other if each is centered on `.5\linewidth`.
+Pay attention to *not* insert an empty line between the subobjects, otherwise they will be placed below each other instead of side by side.
+If you want them to be placed below each other you can use the `ver` option.
+
+`\captionsetup` is explained in the \pkg{caption} package documentation~\autocite{caption}.
+
+\begin{examplecode}
+\documentclass{article}
+\usepackage{easyfloats}
+
+\objectset[table]{env=tabular}
+\captionsetup[sub]{list=true}
+
+\begin{document}
+\begin{tableobject}{contains subobjects,
+ caption = Two test tables,
+ label = tabs abc 123,
+ subobject linewidth = .25\linewidth,
+ }
+ \begin{subobject}{caption=Abc \& 123}{rl}
+ \toprule
+ abc & 123 \\
+ de & 45 \\
+ f & 6 \\
+ \bottomrule
+ \end{subobject}
+ \begin{subobject}{caption=123 \& abc}{lr}
+ \toprule
+ 123 & abc \\
+ 45 & de \\
+ 6 & f \\
+ \bottomrule
+ \end{subobject}
+\end{tableobject}
+\end{document}
+\end{examplecode}
+
+\subsection{Longtable}
+\label{longtable}
+If you are undecided whether to use floating `tabular`s or \env{longtable}s which can break across pages you can use the following approach.
+Changing between them is as easy as changing `env=longtable` to `env=tabular` once.
+The table head and foot are set by the key `table head` and are by default formatted with the \pkg{booktabs} package.
+(If you don't like this you can change the definition of `table head` with `table head style`.)
+The column specification cannot be given as a separate argument (like in the example above) but must be set with the `arg` key
+because otherwise the column specification would be after the table head.
+
+\begin{examplecode}
+\documentclass{article}
+\usepackage[longtable]{easyfloats}
+\usepackage{siunitx}
+
+\newcommand\pminfty{\multicolumn1r{$\pm\infty$}}
+
+\objectset[table]{env=longtable}
+
+\begin{document}
+\begin{tableobject}{%
+ caption = Trigonometric functions,
+ label = trifun,
+ arg = {
+ S[table-format=2.0, table-space-text-post=\si{\degree}] <{\si{\degree}} !\quad
+ *2{S[table-format=+1.2]}
+ S[table-format=+4.2]
+ },
+ table head = \multicolumn1{c!\quad}{$x$} & $\sin x$ & $\cos x$ & $\tan x$,
+}
+
+ 0 & 0.00 & 1.00 & 0.00 \\
+ 5 & 0.09 & 1.00 & 0.09 \\
+ 10 & 0.17 & 0.98 & 0.18 \\
+ 15 & 0.26 & 0.97 & 0.27 \\
+ 20 & 0.34 & 0.94 & 0.36 \\
+ 25 & 0.42 & 0.91 & 0.47 \\
+ 30 & 0.50 & 0.87 & 0.58 \\
+ 35 & 0.57 & 0.82 & 0.70 \\
+ 40 & 0.64 & 0.77 & 0.84 \\
+ 45 & 0.71 & 0.71 & 1.00 \\
+ 50 & 0.77 & 0.64 & 1.19 \\
+ 55 & 0.82 & 0.57 & 1.43 \\
+ 60 & 0.87 & 0.50 & 1.73 \\
+ 65 & 0.91 & 0.42 & 2.14 \\
+ 70 & 0.94 & 0.34 & 2.75 \\
+ 75 & 0.97 & 0.26 & 3.73 \\
+ 80 & 0.98 & 0.17 & 5.67 \\
+ 85 & 1.00 & 0.09 & 11.43 \\
+ 90 & 1.00 & 0.00 & \pminfty \\
+\end{tableobject}
+\begin{tableobject}{%
+ caption = Squared trigonometric functions,
+ label = trifun2,
+ arg = {
+ S[table-format=2.0, table-space-text-post=\si{\degree}] <{\si{\degree}} !\quad
+ *2{S[table-format=+1.2]}
+ S[table-format=+4.2]
+ },
+ table head = \multicolumn1{c!\quad}{$x$} & {$\sin^2 x$} & {$\cos^2 x$} & {$\tan^2 x$},
+}
+
+ 0 & 0.00 & 1.00 & 0.00 \\
+ 5 & 0.01 & 0.99 & 0.01 \\
+ 10 & 0.03 & 0.97 & 0.03 \\
+ 15 & 0.07 & 0.93 & 0.07 \\
+ 20 & 0.12 & 0.88 & 0.13 \\
+ 25 & 0.18 & 0.82 & 0.22 \\
+ 30 & 0.25 & 0.75 & 0.33 \\
+ 35 & 0.33 & 0.67 & 0.49 \\
+ 40 & 0.41 & 0.59 & 0.70 \\
+ 45 & 0.50 & 0.50 & 1.00 \\
+ 50 & 0.59 & 0.41 & 1.42 \\
+ 55 & 0.67 & 0.33 & 2.04 \\
+ 60 & 0.75 & 0.25 & 3.00 \\
+ 65 & 0.82 & 0.18 & 4.60 \\
+ 70 & 0.88 & 0.12 & 7.55 \\
+ 75 & 0.93 & 0.07 & 13.93 \\
+ 80 & 0.97 & 0.03 & 32.16 \\
+ 85 & 0.99 & 0.01 & 130.65 \\
+ 90 & 1.00 & 0.00 & \pminfty \\
+\end{tableobject}
+\begin{tableobject}{%
+ caption = Cubed trigonometric functions,
+ label = trifun3,
+ arg = {
+ S[table-format=2.0, table-space-text-post=\si{\degree}] <{\si{\degree}} !\quad
+ *2{S[table-format=+1.2]}
+ S[table-format=+4.2]
+ },
+ table head = \multicolumn1{c!\quad}{$x$} & {$\sin^3 x$} & {$\cos^3 x$} & {$\tan^3 x$},
+}
+
+ 0 & 0.00 & 1.00 & 0.00 \\
+ 5 & 0.00 & 0.99 & 0.00 \\
+ 10 & 0.01 & 0.96 & 0.01 \\
+ 15 & 0.02 & 0.90 & 0.02 \\
+ 20 & 0.04 & 0.83 & 0.05 \\
+ 25 & 0.08 & 0.74 & 0.10 \\
+ 30 & 0.12 & 0.65 & 0.19 \\
+ 35 & 0.19 & 0.55 & 0.34 \\
+ 40 & 0.27 & 0.45 & 0.59 \\
+ 45 & 0.35 & 0.35 & 1.00 \\
+ 50 & 0.45 & 0.27 & 1.69 \\
+ 55 & 0.55 & 0.19 & 2.91 \\
+ 60 & 0.65 & 0.13 & 5.20 \\
+ 65 & 0.74 & 0.08 & 9.86 \\
+ 70 & 0.83 & 0.04 & 20.74 \\
+ 75 & 0.90 & 0.02 & 51.98 \\
+ 80 & 0.96 & 0.01 & 182.41 \\
+ 85 & 0.99 & 0.00 & 1493.29 \\
+ 90 & 1.00 & 0.00 & \pminfty \\
+\end{tableobject}
+\end{document}
+\end{examplecode}
+
+\subsection{Local definitions in tables}
+\label{local-definitions-in-tables}
+
+If you want to define a command locally for one table you cannot put it's definition in the first cell because each cell is a separate group
+(meaning that the definition will be forgotten at the end of the cell).
+Instead I provide the `exec` key whose value is executed inside of the object but before `env`.
+If you want to tinker around with catcodes keep in mind that arguments are always read entirely before expansion and execution.
+The \eTeX\ primitive `\scantokens` can be useful to define active characters.
+If you are unfamiliar with how \TeX\ processes a file you can read up on it in \mycite[section~1]{texbytopic}.
+
+\begin{examplecode}
+\documentclass{article}
+\usepackage{easyfloats}
+\usepackage[table]{xcolor}
+
+% avoid Warning: Font shape `OMS/cmtt/m/n' undefined
+\usepackage[T1]{fontenc}
+% fontenc T1 causes unclean/pixelated font on some systems
+% and trouble with copying ligatures from pdf => change font
+% lmodern is relatively close to the default font but unmaintained
+\usepackage{lmodern}
+
+\colorlet{rowbg}{gray!50}
+
+\newcommand\charsym[1]{\texttt{#1}}
+\newcommand\charname[1]{$\langle$#1$\rangle$}
+
+\begin{document}
+\begin{tableobject}{%
+ caption = Category Codes,
+ details = Highlighted catcodes have no tokens.,
+ label = catcodes,
+ env = tabular,
+ arg = cll,
+ table head = Catcode & Meaning & Characters,
+ exec = {%
+ \catcode`* = \active
+ \scantokens{\def*{\rowcolor{rowbg}}}%
+ \catcode`= = \the\catcode`&%
+ \catcode`, = \the\catcode`&%
+ },
+}
+ * 0 = Escape character, \charsym\textbackslash \\
+ 1 = Begin grouping, \charsym\{ \\
+ 2 = End grouping, \charsym\} \\
+ 3 = Math shift, \charsym\$ \\
+ 4 = Alignment tab, \charsym\& \\
+ * 5 = End of line, \charname{return} \\
+ 6 = Parameter, \charsym\# \\
+ 7 = Superscript, \charsym\^ \\
+ 8 = Subscript, \charsym\_ \\
+ * 9 = Ignored character, \charname{null} \\
+ 10 = Space, \charname{space} and
+ \charname{tab} \\
+ 11 = Letter, \charsym{a}--\charsym{z} and
+ \charsym{A}--\charsym{Z} \\
+ 12 = Other, other characters \\
+ % "In plain TeX this is only the tie character ~"
+ % TeX by Topic, page 30
+ 13 = Active character, \charsym{\string~} \\
+ * 14 = Comment character, \charsym\% \\
+ * 15 = Invalid character, \charname{delete} \\
+\end{tableobject}
+\end{document}
+\end{examplecode}
+
+\subsection{New object style~\slash\ `tikzobject`}
+\label{new-object-style-tikzobject}
+
+You can easily define new object environments.
+For more information see \cref{new-object-styles-and-types}.
+
+\begin{examplecode}
+\documentclass{article}
+\usepackage{easyfloats}
+\usepackage{tikz}
+
+\NewObjectStyle{tikz}{type=figure, env=tikzpicture}
+% I am not using `arg=[3D]` so that I can still pass an optional argument to tikz3dobject
+\NewObjectStyle{tikz3d}{type=figure, env=tikzpicture, exec=\tikzset{3D}}
+
+\tikzset{
+ 3D/.style = {
+ x = {(-3.85mm, -3.85mm)},
+ y = {(1cm, 0cm)},
+ z = {(0cm, 1cm)},
+ },
+}
+\objectset{warn no label=false}
+
+\begin{document}
+\begin{tikzobject}{caption=2D coordinate system}
+ \newcommand\n{5}
+ \newcommand\w{.075}
+ \draw[->] (0,0) -- ++(\n,0);
+ \draw[->] (0,0) -- ++(0,\n);
+ \foreach \i in {1,...,\n-1} {
+ \draw (\i,0) +(0,\w) -- +(0,-\w);
+ \draw (0,\i) +(\w,0) -- +(-\w,0);
+ }
+\end{tikzobject}
+\begin{tikz3dobject}{caption=3D coordinate system}
+ \newcommand\n{5}
+ \newcommand\w{.075}
+ \draw[->] (0,0,0) -- ++(\n,0,0);
+ \draw[->] (0,0,0) -- ++(0,\n,0);
+ \draw[->] (0,0,0) -- ++(0,0,\n);
+ \foreach \i in {1,...,\n-1} {
+ \draw (\i,0,0) +(0,\w,0) -- +(0,-\w,0);
+ \draw (0,\i,0) +(\w,0,0) -- +(-\w,0,0);
+ \draw (0,0,\i) +(0,\w,0) -- +(0,-\w,0);
+ }
+\end{tikz3dobject}
+\end{document}
+\end{examplecode}
+
+\subsection{Nonfloating objects}
+\label{nonfloating-objects}
+If your professor absolutely won't allow floating objects you can easily disable them globally
+(for all objects based on the \env{object} environment defined by this package which is internally used by \env{tableobject} and \cmd{\includegraphicobject}).
+
+\begin{examplecode}
+\objectset{placement=H}
+\end{examplecode}
diff --git a/macros/latex/contrib/easyfloats/doc/content/installation.tex b/macros/latex/contrib/easyfloats/doc/content/installation.tex
new file mode 100644
index 0000000000..a8dbe09394
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/content/installation.tex
@@ -0,0 +1,8 @@
+% !TeX root = ../easyfloats.tex
+
+\section{Installation}
+\label{installation}
+
+This package is still very new.
+If it is not yet contained in your \TeX\ distribution
+just download the \filename{sty-file} and put it next to your main document.
diff --git a/macros/latex/contrib/easyfloats/doc/content/license.tex b/macros/latex/contrib/easyfloats/doc/content/license.tex
new file mode 100644
index 0000000000..5babf2b965
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/content/license.tex
@@ -0,0 +1,17 @@
+% !TeX root = ../easyfloats.tex
+
+\section{License}
+\label{license}
+
+This package and it's documentation are distributed under the \license{lppl}, version 1.3 or later.
+See \filename{license.txt}.
+The preamble of the documentation may alternatively, at your choice, be reused under the terms of the \license{wtfpl}, version 2 or later.
+
+Additionally to the rights granted by the \LaTeX\ Project Public License
+you have permission to freely distribute *unmodified* copies
+of the files \filename{easyfloats.sty} and \filename{doc/easyfloats.pdf} without other files of this work.
+The other files of this work can be found at:
+\url{https://gitlab.com/erzo/latex-easyfloats}
+
+The examples and tests are distributed under the \license{wtfpl}, version 2 or later.
+See \filename{test/license.txt}.
diff --git a/macros/latex/contrib/easyfloats/doc/content/motivation.tex b/macros/latex/contrib/easyfloats/doc/content/motivation.tex
new file mode 100644
index 0000000000..8de941b839
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/content/motivation.tex
@@ -0,0 +1,378 @@
+% !TeX root = ../easyfloats.tex
+
+\section{Motivation}
+\label{motivation}
+
+In this section I will explain how to insert figures and tables in standard \LaTeX\ without this package and how this package can improve that.
+If you are only interested in how to use this package not why, see \cref{examples} for examples and \cref{documentation} for an explanation of the commands, environments and options defined by this package.
+
+\subsection{Graphics}
+\label{graphics}
+
+Inserting a graphic without using this package requires 6 lines of code (\pkg{graphicx} or \pkg{graphbox} must be loaded for `\includegraphics`):
+\begin{examplecode\starred}{\ExamplecodeNoBox\ExamplecodeLinenumbers}
+\begin{figure}
+ \centering
+ \includegraphics[graphic width=.8\linewidth]{ctan_lion}
+ \caption{CTAN lion drawing by Duane Bibby}
+ \label{ctan_lion}
+\end{figure}
+\end{examplecode\starred}
+
+\begin{description}
+\item[Lines 1 and 6]
+ open\slash close a floating environment.
+ The content of this environment can float around so that it won't cause a bad page break.
+ You don't need this if you really just want to insert a graphic exactly here (like a logo in a header)
+ but a graphic cannot break across pages so if it is too large for the end of the current page it will move to the next page leaving the end of this page empty.
+ This is a waste of paper and may confuse a reader by suggesting this might be the end of a chapter.
+ A floating environment can help you by putting the figure where it fits best.
+
+ The placement determines where a float is allowed to be placed.
+ Initially that's the top or bottom of a text page or a separate page just for floats.
+ The placement can be specified for a single floating object by passing an optional argument to the floating environment
+ or for all floating objects using the `\floatplacement` command defined by the \pkg{float} package.
+ (The floating environments `figure` and \env{table} are standard \LaTeX\ and do not require the \pkg{float} package.)
+ The allowed values for the placement are described in the description of the \env{object} environment's `placement` key.
+
+ There are people who are concerned that a figure not sitting at the exact position might confuse a reader.
+ However, a graphic naturally attracts the reader's attention.
+ Therefore it does not matter where it is located on the double page.
+ The reader will see it.
+
+ Of course the author must ensure that the figure does not float too far away.
+ If that is the case changing the size of this or another graphic,
+ `\usepackage[section]{placeins}`,
+ `\FloatBarrier` (defined by the \pkg{placeins} package),
+ moving this block of lines in the code,
+ changing the placement or
+ tweaking the parameters which govern the placing of floats \autocite[page~28]{latex2e}
+ can help.
+
+\item[Line 2]
+ centers the graphic horizontally on the line.
+
+ The `\centering` command is used instead of the `center` environment because the latter would insert additional vertical space.
+
+ \begin{examplecode\starred}{\ExamplecodeNoBox}
+ \begin{center}
+ ...
+ \end{center}
+ \end{examplecode\starred}
+ is in \LaTeX2\footnote{This will change in \LaTeX3~\autocite{ltx3env}.}
+ \makeatletter
+ (somewhat simplified\footnote{`\begin` checks that it's argument is defined, `\end` checks that it's argument matches that of `\begin` and deals with `\ignorespacesafterend` and `\@endparenv`. Since 2019/10/01 `\begin` and `\end` are robust. Since 2020/10/01 they include hooks. \autocite[section \sectionname{ltmiscen.dtx}]{source2e}})
+ \makeatother
+ equivalent to
+ \begin{examplecode\starred}{\ExamplecodeNoBox}
+ \begingroup
+ \center
+ ...
+ \endcenter
+ \endgroup
+ \end{examplecode\starred}
+
+ This means that if you accidentally try to use `\centering` as an environment instead of a command you will *not* get an error.
+ You might expect to get an error at least for `\endcentering` not being defined
+ but the \TeX\ primitive `\csname` which is used to produce the `\endcentering` token instead defines it to `\relax`, a no operation.
+
+ The output, however, will not be as desired: the group is closed before the end of the paragraph and `\centering` is forgotten before it can take effect.
+
+\item[Line 3]
+ inserts the graphic.
+ This requires the \pkg{graphicx} or \pkg{graphbox} package.
+
+ If you want all graphics to have the same width you can set the `width` globally with `\setkeys{Gin}{width=<dimen>}`.
+ However, that does not work with all options.
+ Unfortunately the \pkg{graphicx} package documentation~\autocite[section~4.6]{graphicx} is not getting more specific than that this works with \enquote{Most of the keyval keys}.
+
+\item[Line 4]
+ inserts the caption.
+
+ Captions for a figure should be placed *below* the figure.
+ Captions for a table should be placed *above* the table.
+ \autocite{texexchange_caption_position}
+
+ `\caption` can be used inside of a floating environment only.
+ If you need a caption for a non-floating object you can either use `\captionof{<type>}{<caption>}` defined by the \pkg{capt-of} or \pkg{caption} package
+ or use a floating environment with the placement `H` defined by the \pkg{float} package.
+ Although the placement can usually be set globally with `\floatplacement` that does *not* work with `H`.
+
+\item[Line 5]
+ defines a label.
+ This is not visible in the output but can be referenced using `\ref{<label>}` or `\pageref{<label>}`.
+ You might want to consider using the \pkg{cleveref} package for references.
+
+ The label must be set inside of or after the caption.
+ A label always refers to the last `\refstepcounter` inside of the current group. \autocite[section \sectionname{ltxref.dtx}]{source2e}
+ `\refstepcounter` is used for example by `\caption` and `\section`.
+ Therefore if you use `\label` after the caption it refers to the caption.
+ If you use it before the caption it refers to the current section\slash subsection\slash subsubsection.
+\end{description}
+
+There are many things that a beginner can do wrong without even getting a warning.
+Three out of this six lines are always the same (lines 1, 2 and~6).
+I don't want to always write them out.
+There is no way to easily switch floating on or off globally.
+
+\bigpar
+
+This package reduces these six lines to a single command and loads \pkg{graphicx} automatically (unless this package is loaded with the `nographic` option).
+\begin{examplecode\starred}{}
+\includegraphicobject[%
+ caption = CTAN lion drawing by Duane Bibby,
+ graphic width = .8\linewidth,
+]{ctan_lion}
+\end{examplecode\starred}
+
+The floating environment is applied automatically.
+It can be changed using the `type` key but I discourage doing so manually.
+Instead I recommend to use the separate optional `<style>` argument if necessary.
+If you do not want the object to float you can pass `placement=H`.
+This works also globally with `\objectset`.
+
+`\centering` is applied automatically.
+It can be changed using the `align` key.
+
+You can set any of the options passed to the `\includegraphics` command globally using:
+\begin{examplecode\starred}{}
+\objectset[figure]{graphic width=.8\linewidth}
+\end{examplecode\starred}
+
+Caption and label can be passed as options.
+Which one is specified first makes no difference.
+I recommend to stick with caption first in case you ever need to work without this package and to not confuse other people who are not familiar with this package.
+If you omit one of them the file name is used.
+See `auto label`, `auto caption`, `auto label strip path` and `auto caption strip path`.
+
+Whether the caption is put above or below the object is specified by the `float style`.
+
+\subsection{Tables}
+\label{tables}
+
+Inserting a table is similar to inserting a graphic except that you replace the `\includegraphics` command with an environment which creates a table, place the caption above the table not below it and use another floating environment, namely \env{table} instead of `figure`.
+
+The following example (not using this package) requires the \pkg{booktabs} package for the horizontal rules and the \pkg{caption} package to have an appropriate space below the caption.
+
+\begin{examplecode\starred}{\ExamplecodeNoBox\ExamplecodeLinenumbers}
+\begin{table}
+ \centering
+ \caption{Some catcodes}
+ \label{catcodes}
+ \begin{tabular}{cl}
+ \toprule
+ Catcode & Meaning \\
+ \midrule
+ 0 & Escape Character \\
+ 1 & Begin Group \\
+ 2 & End Group \\
+ \vdots & \quad \vdots \\
+ \bottomrule
+ \end{tabular}
+\end{table}
+\end{examplecode\starred}
+
+What I have said about floating environments, `\centering`, `\caption` and `\label` in \cref{graphics} is also valid for tables.
+New are lines 5--14.
+We now have two environments nested inside of each other.
+The outer environment (lines 1 and~15) is the floating environment.
+The inner environment (lines 5--14) is the environment which creates the table.
+The inner environment takes a column specification telling \LaTeX\ how many columns the table has and how they are supposed to be aligned.
+In this case that is `cl`: Two columns, the first centered, the second left aligned.
+For more information about column specifications see the \pkg{array} package documentation~\autocite[section~1]{array}.
+
+`\toprule`, `\midrule` and `\bottomrule` (defined by the \pkg{booktabs} package) produce horizontal lines.
+They differ in the width of the line and\slash or spacing around them.
+In contrast to the standard \LaTeX\ `\hline` command they have proper spacing around them.
+
+`&` separates columns, `\\` separates rows.
+Indentation and spaces at the beginning and end of a cell are ignored.
+
+\bigpar
+
+Using this package we don't need two environments and we don't even need to type out the rule commands if we use `table head`.
+The packages \pkg{caption}, \pkg{booktabs} and \pkg{array} are loaded automatically (unless you load this package with `nobooktabs` or `noarray`).
+\begin{examplecode\starred}{}
+\begin{tableobject}{%
+ caption = Some catcodes,
+ label = catcodes,
+ env = tabular,
+ arg = cl,
+ table head = Catcode & Meaning,
+}
+ 0 & Escape Character \\
+ 1 & Begin Group \\
+ 2 & End Group \\
+ \vdots & \quad \vdots \\
+\end{tableobject}
+\end{examplecode\starred}
+
+Also we gain the possibility to easily switch between different tabular-like environments, see \cref{longtable} and the example given for the `(<env>) arg(s) +` key in \cref{object-environment}.
+
+\subsection{Subobjects}
+\label{subobjects}
+
+There are several packages to combine several figures\slash tables into a single floating environment.
+\mycite{l2tabu} recommends using \pkg{subcaption} over \pkg{subfig} and the long deprecated \pkg{subfigure}.
+
+The \pkg{subcaption} package provides several ways to do this.
+The first one is using the `\subcaptionbox` command.
+
+\begin{examplecode\starred}{\ExamplecodeNoBox\ExamplecodeLinenumbers}
+\begin{table}
+ \centering
+ \caption{Category and character codes}
+ \label{codes}
+ \subcaptionbox{Category codes\label{catcodes}}{%
+ \begin{tabular}{cl}
+ \toprule
+ Catcode & Category \\
+ \midrule
+ 0 & Escape Character \\
+ 1 & Begin Group \\
+ 2 & End Group \\
+ \vdots & \quad \vdots \\
+ \bottomrule
+ \end{tabular}%
+ }%
+ \qquad
+ \subcaptionbox{Character codes\label{charcodes}}{%
+ \begin{tabular}{cr<{\hspace{1.3em}}}
+ \toprule
+ Character & \multicolumn1c{Charcode} \\
+ \midrule
+ \textbackslash & \number`\\ \\
+ \{ & \number`\{ \\
+ \} & \number`\} \\
+ \vdots & \vdots \phantom{0} \\
+ \bottomrule
+ \end{tabular}%
+ }%
+\end{table}
+\end{examplecode\starred}
+
+As the subobjects are inside of an argument they cannot contain code which relies on changing catcodes e.g.\ `\verb`.
+Aside from that it just doesn't seem elegant to put an environment inside of an argument.
+
+If you accidentally put the label in the second argument of `\subcaptionbox` instead of in the first it refers to the parent object instead of the subobject and you won't get an error or a warning for that.
+
+Note how I have commented out line breaks in order to avoid undesired spaces.
+
+The second way is to use the `subfigure`\slash `subtable` environment.
+Because the subobject is not inside of an argument it is possible to use `\verb`.
+
+\begin{examplecode\starred}{\ExamplecodeNoBox\ExamplecodeLinenumbers}
+\begin{table}
+ \caption{Category and character codes}
+ \label{codes}
+ \begin{subtable}{.5\linewidth}
+ \centering
+ \caption{Category codes}
+ \label{catcodes}
+ \begin{tabular}{cl}
+ \toprule
+ Catcode & Category \\
+ \midrule
+ 0 & Escape Character \\
+ 1 & Begin Group \\
+ 2 & End Group \\
+ \vdots & \quad \vdots \\
+ \bottomrule
+ \end{tabular}%
+ \end{subtable}%
+ \begin{subtable}{.5\linewidth}
+ \centering
+ \caption{Character codes}
+ \label{charcodes}
+ \begin{tabular}{cr<{\hspace{1.3em}}}
+ \toprule
+ Character & \multicolumn1c{Charcode} \\
+ \midrule
+ \verb|\| & \number`\\ \\
+ \verb|{| & \number`\{ \\
+ \verb|}| & \number`\} \\
+ \vdots & \vdots \phantom{0} \\
+ \bottomrule
+ \end{tabular}%
+ \end{subtable}%
+\end{table}
+\end{examplecode\starred}
+
+But why having different environments for subfigures and subtables?
+The floating environment specifies the type already.
+
+These environments are based on a minipage and require you to always explicitly specify the width of this minipage.
+On the one hand I don't want to always type that out.
+On the other hand I want to be able to change the width once for all subobjects for easier consistency.
+
+Caption and label must be placed correctly, see \cref{graphics}.
+Even if you restyle the floating environment to always put the caption at the top or bottom using the \pkg{float} package this does *not* apply to subobjects.
+
+It is important to comment out line breaks because the widths of the two minipages add up to the line width, a space between them would cause an overfull hbox or a line break.
+
+We need two `\centering`s, one for each subobject.
+Remember what I said about `\centering` and `center` in \cref{graphics}.
+
+\bigpar
+
+This package defines an environment called `subobject` which is a unified wrapper around `\subcaptionbox` and `subfigure`\slash `subtable`.
+Which of these two backends should be used can be specified with the `subcaptionbox` and `subpage` options.
+`subpage` is used by default so that you can usually use `\verb` in the content.
+
+`subobject` can be used inside of any `*object` environment.
+If you define a new object environment with `\NewObjectStyle` it defines a corresponding subpage environment like `subfigure`\slash `subtable` if it does not exist already and if the \pkg{caption} package is new enough.
+If the \pkg{caption} package is older than August~30, 2020 you need to define the subtype manually by putting the following line *before* loading this package \autocite{texexchange_subtype_workaround}:
+\begin{examplecode\starred}{}
+\AtBeginDocument{\DeclareCaptionSubType{<type>}}
+\end{examplecode\starred}
+
+You don't need to write out the width, `.5\linewidth` is used automatically. You can change this value for all subobjects using
+\begin{examplecode\starred}{}
+\objectset{subobject linewidth=<dimen>}
+\end{examplecode\starred}
+
+Caption and label are given as options like for `tableobject`.
+Their order does not matter.
+They are placed above or below the subobject based on the internal command `\caption@iftop` defined by the \pkg{caption} package.
+
+Spaces after `\begin{subobject}` and before and after `\end{subobject}` are ignored so you don't need to comment out the line breaks.
+\unskip\footnote{Actually, spaces after `\begin{subobject}` and before `\end{subobject}` are ignored only if `env` is empty. But if `env` is not empty I am expecting it to be a tabular-like environment where spaces are ignored at the beginning and end of a cell or a tikzpicture where spaces are ignored as well. Spaces after `\end{subobject}` are ignored regardless of `env`.}
+Just make sure you don't have an empty line between the subobject environments.
+That would *not* be ignored.
+
+`\centering` is inserted automatically. It can be changed with `subpage align`.
+
+\begin{examplecode\starred}{}
+\begin{tableobject}{caption=Category and character codes, label=codes, env=tabular, sub}
+ \begin{subobject}{caption=Category codes, label=catcodes}{cl}
+ \toprule
+ Catcode & Category \\
+ \midrule
+ 0 & Escape Character \\
+ 1 & Begin Group \\
+ 2 & End Group \\
+ \vdots & \quad \vdots \\
+ \bottomrule
+ \end{subobject}
+ \begin{subobject}{caption=Character codes, label=charcodes}{cr<{\hspace{1.3em}}}
+ \toprule
+ Character & \multicolumn1c{Charcode} \\
+ \midrule
+ \verb|\| & \number`\\ \\
+ \verb|{| & \number`\{ \\
+ \verb|}| & \number`\} \\
+ \vdots & \vdots \phantom{0} \\
+ \bottomrule
+ \end{subobject}
+\end{tableobject}
+\end{examplecode\starred}
+
+A separator for the subobjects could be defined globally using `sep`, see also `hor` and `ver`.
+
+For including a graphic from an external file this package defines a wrapper command around `subobject` and `\includegraphics` in order to reduce the typing effort:
+\begin{examplecode\starred}{}
+\begin{figureobject}{caption=Two lions, label=lions, sub}
+ \includegraphicsubobject[caption=A lion]{lion-1}
+ \includegraphicsubobject[caption=Another lion]{lion-2}
+\end{figureobject}
+\end{examplecode\starred}
diff --git a/macros/latex/contrib/easyfloats/doc/content/names.tex b/macros/latex/contrib/easyfloats/doc/content/names.tex
new file mode 100644
index 0000000000..e8f6708072
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/content/names.tex
@@ -0,0 +1,18 @@
+% !TeX root = ../easyfloats.tex
+
+\section{Names}
+\label{names}
+
+You have probably heard the term *floating object* or *float* for short.
+That is mainly what this package is about.
+However, I intended to avoid the term *floating* in the name of this package because this package also allows
+to globally disable the floating of those objects.
+Therefore I decided to name this package *objects*.
+
+This name, however, has been rejected by \TeX\ Live as being too generic.
+And they are right, especially for people with an object oriented programming background that name might be misleading.
+\TeX\ Live has informed me that floating objects are still called floats even if they are technically not floating.
+Therefore I have decided to rename this package to *easyfloats*.
+
+I have *not* changed the user interface because the package has already been online for more than half a year on my gitlab repository and I don't know how many people are using the package already.
+Therefore all commands and environments defined by this package still carry the old name *object* in them.
diff --git a/macros/latex/contrib/easyfloats/doc/content/other-packages.tex b/macros/latex/contrib/easyfloats/doc/content/other-packages.tex
new file mode 100644
index 0000000000..609e5fb33b
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/content/other-packages.tex
@@ -0,0 +1,51 @@
+% !TeX root = ../easyfloats.tex
+
+\section{Other packages}
+\label{other-packages}
+
+Other useful packages for dealing with figures or tables:
+\pkgdoc{placeins}
+ When loaded with the `section` package option it prevents floats from floating to another section.
+ It provides the `\FloatBarrier` command which prevents floats from floating past a certain point.
+\pkgdoc{flafter}
+ ensures that floats are not placed before their inclusion in the source code.
+ (With the placement=t it is possible that they are placed on the top of the same page.)
+\pkgdoc{booktabs}
+ for formatting tables
+\pkgdoc{xcolor}
+ When loaded with the package option \pkgoptn{table} it provides commands for coloring tables.
+
+ `\rowcolor{<color>}` sets a background color for a single row. See \cref{local-definitions-in-tables}.
+
+ `\rowcolors{<firstrow>}{<oddcolor>}{<evencolor>}` can be used with the `exec` key and sets alternating row colors for the entire table.
+
+\pkgdoc{array}
+ extends the column specification syntax and defines the `\newcolumntype` command to define custom column types.
+ Also changes the approach how rules are drawn but that is irrelevant if you apply \pkg{booktabs}' guidelines~\autocite[section~2 \sectionname{The layout of formal tables}]{booktabs}.
+\pkgdoc{siunitx}
+ for typesetting numbers and units.
+ It provides the `S` column to align numbers at their decimal separator.
+\pkgdoc{tabularx}
+ A table where the columns adapt to the width of the table, not the other way around.
+ Unlike `tabular*` the space goes into the columns, not between the columns.
+\pkgdoc{longtable}
+ provides tables where a pagebreak is allowed,
+ see \cref{longtable}
+\pkgdoc{hyperref}
+ automatically creates links in the pdf document for example from references to floating objects.
+ With the package option `pdfusetitle` it automatically sets the pdf title and author based on `\title` and `\author`.
+\pkgdoc{cleveref}
+ to reference an object.
+ In contrast to the standard `\ref` and `\pageref`, `\cref` and `\cpageref` automatically detect the type of object and can handle multiple references at once.
+ With the `nameinlink` package option the object type in front of the number becomes part of the link created by hyperref (i.e.\ the link is \enquote{figure 1} instead of \enquote{1} and \enquote{figure } being before the link.)
+ With the `noabbrev` option references are not abbreviated (by default references are abbreviated but only the lower case variants, not the upper case variants which seems inconsistent to me. Abbreviating at the beginning of a sentence is considered bad style~\autocite{texexchange_abbrev_bad_style}.)
+\pkgdoc{biblatex}
+ If you input graphics you need to specify the source.
+ Biblatex creates an entire bibliography for you.
+\pkgdoc{tikz}
+ is an amazingly powerful package to create your own graphics in \LaTeX.
+\pkgdoc{newfloat} provides a more modern command to define new floating environments than the \pkg{float} package.
+\endpkgdoc
+
+
+For more information about floats see \url{https://latexref.xyz/Floats.html} (it seems this is an html version of the above quoted pdf~\autocite{latex2e}).
diff --git a/macros/latex/contrib/easyfloats/doc/content/titlepage.tex b/macros/latex/contrib/easyfloats/doc/content/titlepage.tex
new file mode 100644
index 0000000000..2dd36aa6c8
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/content/titlepage.tex
@@ -0,0 +1,17 @@
+% !TeX root = ../easyfloats.tex
+
+\maketitle
+\thispagestyle{empty}
+\vfill
+\begin{abstract}
+In standard \LaTeX\ inserting objects like figures or tables requires too much knowledge for beginners and too much typing effort and hardcoding for people like me.
+This package aims to make insertion of figures and tables easier for both beginners and experts.
+Despite the term *floats* in it's name it also allows to disable floating of such objects.
+\end{abstract}
+\vfill
+\vspace{20em}
+\url{https://gitlab.com/erzo/latex-easyfloats}
+\clearpage
+
+\tableofcontents
+\pagebreak
diff --git a/macros/latex/contrib/easyfloats/doc/content/used-packages.tex b/macros/latex/contrib/easyfloats/doc/content/used-packages.tex
new file mode 100644
index 0000000000..90efa04688
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/content/used-packages.tex
@@ -0,0 +1,29 @@
+% !TeX root = ../easyfloats.tex
+
+\section{Used packages}
+\label{used-packages}
+
+This package uses the following packages (but depending on the package options it may load more or less packages, see \cref{package-options}):
+\pkgdoc{float}
+ for `placement=H` and `float style`.
+ It also gives you the possibility to define new float types.
+\pkgdoc{caption}
+ In the standard document classes there is no distance at all between a table and it's caption above.
+ The caption package fixes this.
+ It also defines the `\phantomcaption` command which I am using in case that no caption is given.
+ (The documentation of `\phantomcaption` is in the \pkg{subcaption} package.)
+ It also gives you the possibility to customize the layout of captions but I am not changing the default layout.
+ And it is a dependency of the \pkg{subcaption} package.
+\pkgdoc{subcaption}
+ for \hyperref[subobject-environment]{subobjects}
+\pkgdoc{graphicx}/\pkgdoc{graphbox}
+ for inserting graphics
+ (see \cmd{\includegraphicobject})
+\pkgdoc{pgfkeys}
+ for parsing key=value lists
+\pkgdoc{etoolbox}
+ is a collection of small helpers for programming.
+\pkgdoc{environ}
+ to define environments which save their content in a macro.
+ I am using this for the `subcaptionbox` backend of the \env{subobject} environment.
+\endpkgdoc
diff --git a/macros/latex/contrib/easyfloats/doc/easyfloats.bib b/macros/latex/contrib/easyfloats/doc/easyfloats.bib
new file mode 100644
index 0000000000..4a850db306
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/easyfloats.bib
@@ -0,0 +1,141 @@
+@book{texbook,
+ title = {The \TeX book},
+ author = {Donald E. Knuth},
+ year = {1986},
+ isbn = {0-201-13448-9},
+ publisher = {Addison-Wesley},
+}
+
+@book{texbytopic,
+ title = {\TeX\ by Topic},
+ author = {Victor Eijkhout},
+ year = {2007},
+ url = {https://ctan.org/pkg/texbytopic},
+}
+
+@manual{latex2e,
+ title = {\LaTeXe: An unofficial reference manual},
+ url = {https://ctan.org/pkg/latex2e-help-texinfo},
+ date = {2018-10},
+ language = {english},
+}
+
+@manual{clsguide,
+ title = {\LaTeXe\space for class and package writers},
+ author = {The \LaTeX3 Project},
+ url = {https://ctan.org/pkg/clsguide},
+ date = {2006-02-15},
+}
+
+@manual{source2e,
+ title = {The \LaTeXe\ Sources},
+ author = {Johannes Braams
+ and David Carlisle
+ and Alan Jeffrey
+ and Leslie Lamport
+ and Frank Mittelbach
+ and Chris Rowley
+ and Rainer Schöpf},
+ url = {https://ctan.org/pkg/source2e},
+ date = {2020-10-01},
+ language = {english},
+}
+
+@manual{l2tabu,
+ title = {Das \LaTeXe-Sündenregister},
+ author = {Mark Trettin and Marc Ensenbach},
+ url = {https://ctan.org/pkg/l2tabu},
+ date = {2016-02-03},
+ language = {german},
+ addendum = {An English translation of an older version is available at \url{https://ctan.org/pkg/l2tabu-english}},
+}
+
+% ------- Joseph Wright's blog -------
+
+@online{ltx3env,
+ url = {https://www.texdev.net/2011/01/09/latex3-and-document-environments/},
+ urldate = {2020-07-17},
+ author = {Joseph Wright},
+ title = {\LaTeX3 and document environments},
+}
+
+% ------- tex exchange -------
+
+@online{texexchange_abbrev_bad_style,
+ url = {https://tex.stackexchange.com/questions/256849/cleveref-change-behaviour-of-cref-to-use-the-abbreviated-form#comment791998_256849},
+ author = {Toby Cubitt},
+ date = {2016-08-10T18:29:00},
+}
+
+@online{texexchange_caption_position,
+ title = {Why should a table caption be placed above the table?},
+ url = {https://tex.stackexchange.com/questions/3243/why-should-a-table-caption-be-placed-above-the-table},
+ urldate = {2020-07-17},
+}
+
+@online{texexchange_make_at,
+ url = {https://tex.stackexchange.com/questions/201348/why-doesnt-makeatletter-work-inside-newcommand},
+ author = {Manuel},
+ date = {2014-09-16},
+}
+
+@online{texexchange_papersize,
+ url = {https://tex.stackexchange.com/questions/404673/paperwidth-too-large/404693#comment1008643_404673},
+ author = {David Carlisle},
+ date = {2017-12-05},
+}
+
+@online{texexchange_subtype_workaround,
+ url = {https://tex.stackexchange.com/a/63967},
+ author = {user2574},
+ date = {2012-07-19},
+}
+
+% ------- package documentations -------
+
+@manual{array,
+ title = {A new implementation of \LaTeX's tabular and array environment},
+ author = {Frank Mittelbach and David Carlisle},
+ date = {2020-10-01},
+ url = {https://ctan.org/pkg/array},
+}
+
+@manual{booktabs,
+ title = {Publication quality tables in \LaTeX},
+ author = {Simon Fear},
+ date = {2016-04-29},
+ url = {https://ctan.org/pkg/booktabs},
+}
+
+@manual{tikz,
+ title = {\TikZ~\& PGF Manual},
+ author = {Till Tantau},
+ date = {2019-05-09},
+ url = {https://ctan.org/pkg/pgf},
+}
+
+@manual{graphicx,
+ title = {Packages in the `graphics' bundle},
+ author = {D. P. Carlisle},
+ date = {2017-06-01},
+ url = {https://ctan.org/pkg/graphicx},
+}
+
+@manual{float,
+ title = {An Improved Environment for Floats},
+ author = {Anselm Lingnau},
+ date = {2001-11-08},
+ url = {https://ctan.org/pkg/float},
+}
+@manual{caption,
+ title = {Customizing captions of floating environments},
+ author = {Axel Sommerfeldt},
+ date = {2020-09-12},
+ url = {https://ctan.org/pkg/caption},
+}
+@manual{subcaption,
+ title = {The subcaption package},
+ author = {Axel Sommerfeldt},
+ date = {2020-08-24},
+ url = {https://ctan.org/pkg/subcaption},
+}
diff --git a/macros/latex/contrib/easyfloats/doc/easyfloats.pdf b/macros/latex/contrib/easyfloats/doc/easyfloats.pdf
new file mode 100644
index 0000000000..56ea0de9aa
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/easyfloats.pdf
Binary files differ
diff --git a/macros/latex/contrib/easyfloats/doc/easyfloats.tex b/macros/latex/contrib/easyfloats/doc/easyfloats.tex
new file mode 100644
index 0000000000..6e77baccc4
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/easyfloats.tex
@@ -0,0 +1,63 @@
+% !TeX program = pdflatex
+% !TeX option = --shell-escape
+
+% underline links generated with the keyword api defined in preamble/keydoc.tex
+% does *not* affect \ref, \cite, table of contents etc.
+\newif\ifunderlinelinks
+\underlinelinkstrue
+
+\documentclass[a4paper]{ltxdoc}
+
+\usepackage{dtxdescribe}
+\usepackage{parskip}
+\usepackage{csquotes}
+
+\input{preamble/bibliography}
+\input{preamble/macros}
+\input{preamble/examplecode}
+\input{preamble/markdown}
+\input{preamble/link}
+\input{preamble/keydoc}
+\input{preamble/description-links}
+\input{preamble/pdfstring}
+
+\usepackage[hidelinks, pdfusetitle]{hyperref}
+\usepackage[nameinlink, noabbrev]{cleveref}
+
+\newlicense{lppl}{\LaTeX\ Project Public License}{https://www.latex-project.org/lppl/}
+\newlicense{wtfpl}{WTFPL}{http://www.wtfpl.net/}
+
+\makeindex
+
+\title{An easier interface to insert figures, tables and other objects in \LaTeX}
+\author{Erik Zöllner}
+\date{December~20, 2020}
+\package{\jobname}
+\version{v1.0.0}
+
+\newcommand{\myinput}[1]{\input{#1}\unskip}
+
+\input{links}
+\begin{document}
+ \myinput{undescribed-keywords}
+ \myinput{content/titlepage}
+ \myinput{content/examples}
+ \myinput{content/names}
+ \myinput{content/documentation}
+ \myinput{content/installation}
+ \myinput{content/bug-reports-and-contributions}
+ \myinput{content/license}
+
+ \appendix
+ \addtocontents{toc}{\protect\setcounter{tocdepth}{1}}
+ \myinput{content/motivation}
+ \myinput{content/used-packages}
+ \myinput{content/other-packages}
+
+ \section{\refname}
+ Works cited in this documentation (ordered by appearance in this document,
+ if there are several versions on CTAN I am referring to the English pdf):
+ \printbibliography[heading=none]
+
+ \addtocontents{toc}{\protect\setcounter{tocdepth}{3}}
+\end{document}
diff --git a/macros/latex/contrib/easyfloats/doc/lexer/latex_atletter.py b/macros/latex/contrib/easyfloats/doc/lexer/latex_atletter.py
new file mode 100644
index 0000000000..41670d07a8
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/lexer/latex_atletter.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+
+# Copyright © 2020 E. Zöllner
+# Alternatively to the terms of the LPPL, at your choice,
+# you can redistribute and/or modify this file under the
+# terms of the Do What The Fuck You Want To Public License, Version 2,
+# as published by Sam Hocevar. See http://www.wtfpl.net/about/.
+
+from pygments.lexers.markup import TexLexer
+
+re_cmd = r'\\([a-zA-Z@]+|.)'
+
+tokens_root = TexLexer.tokens['root']
+t = next(t for t in tokens_root if 'command' in t)
+i = tokens_root.index(t)
+t = (re_cmd,) + t[1:]
+tokens_root[i] = t
diff --git a/macros/latex/contrib/easyfloats/doc/links.tex b/macros/latex/contrib/easyfloats/doc/links.tex
new file mode 100644
index 0000000000..d304bf308b
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/links.tex
@@ -0,0 +1,44 @@
+\newurllink{etoolbox}{https://ctan.org/pkg/etoolbox}
+\newurllink{environ}{https://ctan.org/pkg/environ}
+\newurllink{placeins}{https://ctan.org/pkg/placeins}
+\newurllink{flafter}{https://tex.stackexchange.com/questions/15706/force-floats-to-be-typeset-after-their-occurrence-in-the-source-text}
+\newurllink{siunitx}{https://ctan.org/pkg/siunitx}
+\newurllink{tabularx}{https://ctan.org/pkg/tabularx}
+\newurllink{cleveref}{https://ctan.org/pkg/cleveref}
+\newurllink{biblatex}{https://ctan.org/pkg/biblatex}
+\newlabellink{storing key}{key-types}
+\newlabellink{executed key}{key-types}
+\newlabellink{boolean key}{key-types}
+\newlabellink{forwarding key}{key-types}
+\newlabellink{unknown key handler}{key-types}
+\newurllink{float}{https://ctan.org/pkg/float}
+\newurllink{graphicx}{https://ctan.org/pkg/graphicx}
+\newurllink{graphics}{https://ctan.org/pkg/graphicx}
+\newurllink{graphbox}{https://ctan.org/pkg/graphbox}
+\newurllink{tikz}{https://www.ctan.org/pkg/pgf}
+\newurllink{array}{https://ctan.org/pkg/array}
+\newurllink{booktabs}{https://ctan.org/pkg/booktabs}
+\newurllink{xcolor}{https://ctan.org/pkg/xcolor}
+\newurllink{longtable}{https://ctan.org/pkg/longtable}
+\newurllink{caption}{https://ctan.org/pkg/caption}
+\newurllink{subcaption}{https://ctan.org/pkg/subcaption}
+\newurllink{newfloat}{https://ctan.org/pkg/newfloat}
+\newurllink{pgfkeys}{https://ctan.org/pkg/pgfkeys}
+\newurllink{hyperref}{https://ctan.org/pkg/hyperref}
+\newurllink{geometry}{https://ctan.org/pkg/geometry}
+\newurllink{trivfloat}{https://ctan.org/pkg/trivfloat}
+\newurllink{capt-of}{https://ctan.org/pkg/capt-of}
+\newurllink{subfigure}{https://ctan.org/pkg/subfigure}
+\newurllink{subfig}{https://ctan.org/pkg/subfig}
+\newurllink{latex2e}{https://ctan.org/pkg/latex2e-help-texinfo}
+\newurllink{clsguide}{https://ctan.org/pkg/clsguide}
+\newurllink{source2e}{https://ctan.org/pkg/source2e}
+\newurllink{l2tabu}{https://ctan.org/pkg/l2tabu}
+\newurllink{texbytopic}{https://ctan.org/pkg/texbytopic}
+\newurllink{eTeX}{https://ctan.org/pkg/etex}
+\newurllink{ltx3env}{https://www.texdev.net/2011/01/09/latex3-and-document-environments/}
+\newurllink{texexchange_abbrev_bad_style}{https://tex.stackexchange.com/questions/256849/cleveref-change-behaviour-of-cref-to-use-the-abbreviated-form#comment791998_256849}
+\newurllink{texexchange_caption_position}{https://tex.stackexchange.com/questions/3243/why-should-a-table-caption-be-placed-above-the-table}
+\newurllink{texexchange_make_at}{https://tex.stackexchange.com/questions/201348/why-doesnt-makeatletter-work-inside-newcommand}
+\newurllink{texexchange_papersize}{https://tex.stackexchange.com/questions/404673/paperwidth-too-large/404693#comment1008643_404673}
+\newurllink{texexchange_subtype_workaround}{https://tex.stackexchange.com/a/63967}
diff --git a/macros/latex/contrib/easyfloats/doc/preamble/bibliography.tex b/macros/latex/contrib/easyfloats/doc/preamble/bibliography.tex
new file mode 100644
index 0000000000..ad24a2b445
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/preamble/bibliography.tex
@@ -0,0 +1,35 @@
+% !TeX root = ../easyfloats.tex
+
+% Copyright © 2020 E. Zöllner
+% Alternatively to the terms of the LPPL, at your choice,
+% you can redistribute and/or modify this file under the
+% terms of the Do What The Fuck You Want To Public License, Version 2,
+% as published by Sam Hocevar. See http://www.wtfpl.net/about/.
+
+\usepackage[%
+ sorting=none, % none=citation order
+]{biblatex}
+
+\setcounter{biburllcpenalty}{8000}
+\setcounter{biburlucpenalty}{8000}
+\setcounter{biburlnumpenalty}{8000}
+
+\addbibresource{\jobname.bib}
+
+\SetCiteCommand\autocite
+
+\newcommand{\mycite}[2][]{%
+ \citetitle{#2}~\autocite[#1]{#2}%
+}
+
+%https://tex.stackexchange.com/a/108349
+\DeclareCiteCommand{\citetitle}
+ {\boolfalse{citetracker}%
+ \boolfalse{pagetracker}%
+ \usebibmacro{prenote}}
+ {\ifciteindex
+ {\indexfield{indextitle}}
+ {}%
+ \printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}
+ {\multicitedelim}
+ {\usebibmacro{postnote}}
diff --git a/macros/latex/contrib/easyfloats/doc/preamble/description-links.tex b/macros/latex/contrib/easyfloats/doc/preamble/description-links.tex
new file mode 100644
index 0000000000..6eac79bc1c
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/preamble/description-links.tex
@@ -0,0 +1,224 @@
+% !TeX root = ../easyfloats.tex
+
+% Copyright © 2020 E. Zöllner
+% Alternatively to the terms of the LPPL, at your choice,
+% you can redistribute and/or modify this file under the
+% terms of the Do What The Fuck You Want To Public License, Version 2,
+% as published by Sam Hocevar. See http://www.wtfpl.net/about/.
+
+% Links all \cmd, \env and \handler to the corresponding \Describe*.
+% Links all \pkg to a reference defined with \newurllink (see link.tex)
+% Defines \pkgoptndoc to document package otions and links all \pkgoptn to it.
+%
+% \pkgoptndoc{<packageoption>}
+% \pkgoptndoc*{<packageoption>}
+% The starred version is for default package options.
+% The non-starred version is for options disabled by default.
+% Empty lines before a \pkgoptndoc are relevant:
+% Without an empty line they are considered to belong together.
+% With an empty line they do not and \pkgoptndoc@afterpar is inserted as separator.
+% A list of \pkgoptndoc must be closed with \endpkgoptndoc.
+%
+% Defines
+% \NoDescribeMacro{<cs>}
+% \NoDescribeEnv{<environment>}
+% to declare undescribed control sequences or environments
+% which shall not produce a warning when being referenced.
+%
+% Warning: \cmd and \DescribeMacro are not intended for use with control characters.
+%
+% depends on
+% \NewKeyword[\unexpanded]{<keywordtype>}{<keyword>}{<formatmacro-bg>}{<formatmacro-fg>}{<text>}
+% \NoKeyword{<keywordtype>}{<keyword>}{<formatmacro-bg>}{<formatmacro-fg>}
+% \LinkKeyword{<keywordtype>}{<keyword>}<formatmacro-bg><formatmacro-fg>{<text>}
+% from preamble/keydoc.tex
+
+\makeatletter
+
+% --------- \cmd & \(No)DescribeMacro ----------
+
+\newcommand{\DlCmdLabelName}[1]{\detokenize{#1}}
+\newcommand{\Cmd}[1]{\expandafter{\detokenize{#1}\unskip}}
+\newcommand{\CmdBg}{\formatcode}
+\let\DlOriginalDescribeMacro=\DescribeMacro
+\renewcommand{\DescribeMacro}[1]{%
+ \begingroup
+ \def\cmd##1{\formatcodeinmarginpar{\Cmd{##1}}}%
+ \DlOriginalDescribeMacro{#1}%
+ \endgroup
+ \NewKeyword[\unexpanded]{cs}{\DlCmdLabelName{#1}}{\CmdBg}{\Cmd}{}%
+ \AbbrevKeyword[\unexpanded]{}{\DlCmdLabelName{#1}} {cs}{\DlCmdLabelName{#1}}%
+ \ignorespaces
+}
+\newcommand{\NoDescribeMacro}[1]{%
+ \NoKeyword[\unexpanded]{cs}{\DlCmdLabelName{#1}}{\CmdBg}{\Cmd}%
+ \AbbrevKeyword[\unexpanded]{}{\DlCmdLabelName{#1}} {cs}{\DlCmdLabelName{#1}}%
+ \ignorespaces
+}
+\renewrobustcmd{\cmd}[1]{%
+ \LinkKeyword{cs}{\detokenize{#1}}\CmdBg\Cmd{#1}%
+}
+
+
+% --------- \env & \(No)DescribeEnv ----------
+
+\let\DlOriginalDescribeEnv=\DescribeEnv
+\renewcommand{\DescribeEnv}[1]{%
+ \DlOriginalDescribeEnv{#1}%
+ \NewKeyword{env}{#1}{\DlEnvBg}{\DlOriginalEnv}{}%
+ \AbbrevKeyword{}{#1} {env}{#1}%
+ \ignorespaces
+}
+\newcommand{\NoDescribeEnv}[1]{%
+ \NoKeyword{env}{#1}{\DlEnvBg}{\DlOriginalEnv}%
+ \AbbrevKeyword{}{#1} {env}{#1}%
+ \ignorespaces
+}
+\let\DlOriginalEnv=\env
+\renewcommand{\env}[1]{\LinkKeyword{env}{#1}\DlEnvBg\DlOriginalEnv{#1}}
+\newcommand{\DlEnvBg}{\formatcode}
+
+
+% --------- \handler & \DescribeHandler ----------
+
+\let\DlOriginalDescribeHandler=\DescribeHandler
+\renewcommand{\DescribeHandler}[1]{%
+ \DlOriginalDescribeHandler{#1}%
+ \NewKeyword{handler}{#1}{\DlHandlerBg}{\DlOriginalHandler}{}%
+ \AbbrevKeyword{}{#1} {handler}{#1}%
+ \ignorespaces
+}
+\let\DlOriginalHandler=\handler
+\renewcommand{\handler}[1]{\LinkKeyword{handler}{#1}\DlHandlerBg\DlOriginalHandler{#1}}
+\newcommand{\DlHandlerBg}{\formatcode}
+
+\newcommand{\NoDescribeHandler}[1]{%
+ \NoKeyword{handler}{#1}{\DlHandlerBg}{\DlOriginalHandler}%
+ \AbbrevKeyword{}{#1} {handler}{#1}%
+ \ignorespaces
+}
+
+
+% --------- \NoDescribeKey, \NoDescribeVal ----------
+
+\newcommand{\NoDescribeKey}[1]{%
+ \NoKeyword{key}{#1}{\keydoc@key@bg}{\keydoc@original@key}%
+ \AbbrevKeyword{}{#1} {key}{#1}%
+ \ignorespaces
+}
+\newcommand{\NoDescribeVal}[1]{%
+ \NoKeyword{}{#1}{\formatcode}{\val}%
+ \ignorespaces
+}
+
+
+% --------- \DescribeMeta ----------
+
+\newcommand{\DescribeMeta}[1]{%
+ \NewKeyword{meta}{#1}{\formatcode}{\val}{}%
+ \ignorespaces
+}
+
+\let\meta@nolink=\meta
+\renewcommand{\meta}[1]{%
+ \IfKeywordUndefined{meta}{#1}%
+ {\@firstofone}%
+ {\LinkUnformattedKeyword{meta}{#1}}%
+ {\meta@nolink{#1}}%
+}
+
+
+% --------- \pkgoptn & \pkgoptndoc ----------
+
+\let\DlOriginalPkgoptn=\pkgoptn
+\renewcommand{\pkgoptn}[1]{\LinkKeyword{pkgoptn}{#1}\DlPkgoptnBg\DlOriginalPkgoptn{#1}}
+\newcommand{\DlPkgoptnBg}{\formatcode}
+
+\newcommand{\begin@pkgoptndoc}{\begin{itemize}}
+\def \endpkgoptndoc {\end{itemize}}
+\newcommand{\pkgoptndoc@beforepkg@normal}{\item[\radiooff]}
+\newcommand{\pkgoptndoc@beforepkg@default}{\item[\radioon]}
+% inserted before \pkgoptndoc if it was preceded by an empty line
+\newcommand{\pkgoptndoc@afterpar}{\bigpar}
+
+\newif\if@inpkgoptndoc
+
+\newcommand{\pkgoptndoc}{%
+ \unless\if@inpkgoptndoc
+ \begin@pkgoptndoc
+ \@inpkgoptndoctrue
+ \else
+ \ifvmode
+ \pkgoptndoc@afterpar
+ \fi
+ \fi
+ \@ifstar
+ {\pkgoptndoc@beforepkg@default\@pkgoptndoc@do}%
+ {\pkgoptndoc@beforepkg@normal\@pkgoptndoc@do}%
+}
+\newcommand{\@pkgoptndoc@do}[1]{%
+ \NewKeyword{pkgoptn}{#1}{\DlPkgoptnBg}{\DlOriginalPkgoptn}{#1}%
+ \AbbrevKeyword{}{#1} {pkgoptn}{#1}%
+}
+
+\newcommand{\NoDescribePkgoptn}[1]{%
+ \NoKeyword{pkgoptn}{#1}{\DlPkgoptnBg}{\DlOriginalPkgoptn}%
+ \AbbrevKeyword{}{#1} {pkgoptn}{#1}%
+ \ignorespaces
+}
+
+
+% --------- \pkg & \pkgdoc, \NoDescribePkg ----------
+
+\let\DlOriginalPkg=\pkg
+\newcommand{\DlPkgBg}[1]{#1}
+\renewcommand{\pkg}[1]{\LinkKeyword{pkg}{#1}\DlPkgBg\DlOriginalPkg{#1}}
+\newcommand{\pkgdoc}[1]{%
+ \unless\if@inpkgdoc
+ \begin@pkgdoc
+ \@inpkgdoctrue
+ \fi
+ \pkgdoc@beforepkg
+ \NewKeyword{pkg}{#1}{\DlPkgBg}{\DlOriginalPkg}{\link[#1]{#1}}%
+ %\AbbrevKeyword{}{#1} {pkg}{#1}%
+ \let\pkgdoc@beforepkg=\pkgdoc@beforepkg@bak
+ \pkgdoc@lookahead
+}
+\newcommand{\pkgdoc@lookahead}{%
+ \futurelet \pkgdoc@nexttoken \pkgdoc@lookahead@check
+}
+\newcommand{\pkgdoc@lookahead@check}{%
+ \ifcat \noexpand\pkgdoc@nexttoken \space
+ \let\pkgdoc@lookahead@do=\pkgdoc@lookahead
+ \let\pkgdoc@lookahead@gobble=\@firstofone
+ \else\ifx \pkgdoc@nexttoken /%
+ \pkgdoc@pkgsep
+ \let\pkgdoc@beforepkg=\relax
+ \let\pkgdoc@lookahead@do=\pkgdoc@lookahead
+ \let\pkgdoc@lookahead@gobble=\@gobble
+ \else\ifx \pkgdoc@nexttoken \pkgdoc
+ \let\pkgdoc@lookahead@do=\relax
+ \let\pkgdoc@lookahead@gobble=\@empty
+ \else
+ \pkgdoc@descriptionsep
+ \let\pkgdoc@lookahead@do=\relax
+ \let\pkgdoc@lookahead@gobble=\@empty
+ \fi \fi \fi
+ \expandafter \pkgdoc@lookahead@do \pkgdoc@lookahead@gobble
+}
+
+\newcommand{\begin@pkgdoc}{\begin{itemize}}
+\def \endpkgdoc {\end{itemize}}
+\newif\if@inpkgdoc
+\newcommand{\pkgdoc@beforepkg}{\item}
+\newcommand{\pkgdoc@pkgsep}{/}
+\newcommand{\pkgdoc@descriptionsep}{ }
+\let\pkgdoc@beforepkg@bak=\pkgdoc@beforepkg
+
+\newcommand{\NoDescribePkg}[1]{%
+ \NoKeyword{pkg}{#1}{\DlPkgBg}{\DlOriginalPkg}%
+ %\AbbrevKeyword{}{#1} {pkg}{#1}%
+ \ignorespaces
+}
+
+\makeatother
diff --git a/macros/latex/contrib/easyfloats/doc/preamble/examplecode.tex b/macros/latex/contrib/easyfloats/doc/preamble/examplecode.tex
new file mode 100644
index 0000000000..79d3c7f424
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/preamble/examplecode.tex
@@ -0,0 +1,778 @@
+% !TeX root = ../easyfloats.tex
+
+% Copyright © 2020 E. Zöllner
+% Alternatively to the terms of the LPPL, at your choice,
+% you can redistribute and/or modify this file under the
+% terms of the Do What The Fuck You Want To Public License, Version 2,
+% as published by Sam Hocevar. See http://www.wtfpl.net/about/.
+
+% Defines an environment to typeset LaTeX code:
+% \begin{examplecode}
+% \let\do=\@makeother
+% \dospecials
+% \end{examplecode}
+% @ is treated as letter.
+%
+% A starred version takes one argument, TeX code to be executed inside of the group.
+% It can be used to change catcodes or to define escape characters.
+% \begin{examplecode*}{\ExamplecodeEscapeinside $ $}
+% a long$\\$long line
+% \end{examplecode*}
+%
+% \ExamplecodeEscapeinside takes two arguments
+% characters between which the code is executed normally.
+%
+% \ExamplecodeNoBox
+% disables the tcolorbox
+%
+% \ExamplecodeLinenumbers
+% enables line numbers
+%
+% \\ is redefined to cause a linebreak marked with \ExamplecodePostBreakText.
+
+
+
+\makeatletter
+% ---------- settings ---------
+
+\usepackage{xcolor}
+\usepackage{tcolorbox}
+\tcbuselibrary{breakable,skins}
+\usepackage{latexsym}
+\usepackage{textcomp}
+
+
+% taken from /usr/lib/python3/dist-packages/pygments/styles/default.py
+\definecolor{math}{RGB}{"BA,"21,"21}
+\definecolor{aligntab}{RGB}{"00,"80,"00}
+\definecolor{parameter}{RGB}{"19,"17,"7C}
+\colorlet{superscript}{black}
+\colorlet{subscript}{superscript}
+\colorlet{brace}{aligntab}
+\colorlet{controlsequence}{aligntab}
+\definecolor{comment}{RGB}{"40,"80,"80}
+\definecolor{codebackground}{rgb}{0.9,0.9,1}
+\colorlet{codeborder}{codebackground!50!black}
+\colorlet{codelinkcolor}{white}
+
+\newtcolorbox{examplecodebox}{breakable, skin=enhanced,
+ colback = codebackground,
+ colframe = codeborder,
+ size = fbox, % normal|title|small|fbox|tight|minimal
+ %left = 0pt, right = 0pt,
+ %top = 0pt, bottom = 0pt,
+ %boxrule = 1pt,
+ %arc = 3pt,
+}
+\newcommand{\ExamplecodeNoBox}{%
+ \let\examplecodebox=\par
+ \let\endexamplecodebox=\par
+}
+
+\newcommand{\NewExamplecodeFormatMandatoryArgument}[2]{% #1: control sequence, #2: replacement text where ##1 is the unprocessed argument
+ \expandafter\newcommand\csname @examplecode@formatarg\detokenize{#1}\endcsname[1]{\ExamplecodeProcessBeginGroup{\{}#2\ExamplecodeProcessEndGroup{\}}\ExamplecodeAllowLinebreakBeforeNext\@examplecode@loop}%
+}
+\newcommand{\NewExamplecodeFormatOptionalArgument}[4]{% #1: control sequence, #2: bracket open, #3: bracket close, #4: replacement text where ##1 is the unprocessed argument
+ \expandafter\def\csname @examplecode@formatoptarg\detokenize{#1}#2\endcsname##1#3{\ExamplecodeProcessBracket{#2}#4\ExamplecodeProcessBracket{#3}\ExamplecodeAllowLinebreakBeforeNext\@examplecode@loop}%
+}
+\NewExamplecodeFormatMandatoryArgument\begin{\ExamplecodeProcessEnv{#1}\ExamplecodeSetCmd{#1}}
+\NewExamplecodeFormatMandatoryArgument\end{\ExamplecodeProcessEnv{#1}\ExamplecodeNoCmd}
+\NewExamplecodeFormatMandatoryArgument\usepackage{\ExamplecodeProcessPkg{#1}\ExamplecodeNoCmd}
+\NewExamplecodeFormatMandatoryArgument{object}{\ExamplecodeParseKeys{/object}#1\ExamplecodeEndParseKeys\ExamplecodeNoCmd}
+\NewExamplecodeFormatMandatoryArgument{tableobject}{\ExamplecodeParseKeys{/object}#1\ExamplecodeEndParseKeys\ExamplecodeNoCmd}
+\NewExamplecodeFormatMandatoryArgument{figureobject}{\ExamplecodeParseKeys{/object}#1\ExamplecodeEndParseKeys\ExamplecodeNoCmd}
+\NewExamplecodeFormatMandatoryArgument{subobject}{\ExamplecodeParseKeys{/object}#1\ExamplecodeEndParseKeys\ExamplecodeNoCmd}
+\NewExamplecodeFormatMandatoryArgument\objectset{\ExamplecodeParseKeys{/object}#1\ExamplecodeEndParseKeys\ExamplecodeNoCmd}
+\NewExamplecodeFormatOptionalArgument\includegraphicobject[]{\ExamplecodeParseKeys{}#1\ExamplecodeEndParseKeys\ExamplecodeNoCmd}
+\NewExamplecodeFormatOptionalArgument\includegraphicsubobject[]{\ExamplecodeParseKeys{}#1\ExamplecodeEndParseKeys\ExamplecodeNoCmd}
+\NewExamplecodeFormatMandatoryArgument\NewObjectStyle{\ExamplecodeParse\relax\relax\ExamplecodeEndParseKeys#1\ExamplecodeEndParseKeys\ExamplecodeSetCmd{\NewObjectStyle2}}
+\NewExamplecodeFormatMandatoryArgument{\NewObjectStyle2}{\ExamplecodeParseKeys{/object}#1\ExamplecodeEndParseKeys\ExamplecodeNoCmd}
+
+% custom styles defined in example
+\NewExamplecodeFormatMandatoryArgument{tikzobject}{\ExamplecodeParseKeys{/object}#1\ExamplecodeEndParseKeys\ExamplecodeNoCmd}
+\NewExamplecodeFormatMandatoryArgument{tikz3dobject}{\ExamplecodeParseKeys{/object}#1\ExamplecodeEndParseKeys\ExamplecodeNoCmd}
+
+\newcommand{\ExamplecodeFormatMeta}[1]{{\normalfont\meta{#1}}}
+
+\newcommand{\ExamplecodePrint}[1]{#1}
+
+\newcommand{\ExamplecodePostBreakSymbol}{\footnotesize$\hookrightarrow$\quad}
+\newcommand{\ExamplecodeIndentation}{}% don't change this, it is overwritten later to always contain the indentation of the current line
+\newcommand{\ExamplecodePostBreakText}{\hbox{\ExamplecodeIndentation\ExamplecodePostBreakSymbol}}
+\newcommand{\ExamplecodeAllowLinebreak}{\discretionary{}{\ExamplecodePostBreakText}{}}
+\newcommand{\ExamplecodeAllowLinebreakBeforeNext}{\@examplecode@allowlinebreakbeforenexttrue}
+\newcommand{\ExamplecodeLinebreak}{\newline\ExamplecodePostBreakText}
+
+\newcommand{\ExamplecodeFormatCmd}[1]{{\leavevmode\color{controlsequence}\LinkUnformattedKeyword{cs}{\detokenize{#1}}{\string#1}}\ExamplecodeAllowLinebreakBeforeNext} % catcode 0/16
+\newcommand{\ExamplecodeFormatEnv}[1]{\LinkUnformattedKeyword{env}{#1}{#1}}
+\newcommand{\ExamplecodeFormatPkg}[1]{\LinkUnformattedKeyword{pkg}{#1}{#1}}
+
+\newcommand{\ExamplecodeFormatBeginGroup}[1]{\textcolor{brace}{#1}} % catcode 1
+\newcommand{\ExamplecodeFormatEndGroup}[1]{\textcolor{brace}{#1}\ExamplecodeAllowLinebreakBeforeNext} % catcode 2
+\newcommand{\ExamplecodeFormatMathShift}[1]{\textup{#1}} % catcode 3, see \ExamplecodeFormatMath
+\newcommand{\ExamplecodeFormatAlignmentTab}[1]{\textcolor{aligntab}{#1}} % catcode 4
+% catcode 5: \ExamplecodeEndOfLine
+\newcommand{\ExamplecodeFormatParameter}[1]{\textcolor{parameter}{#1}} % catcode 6
+\newcommand{\ExamplecodeFormatSuperscript}[1]{\textcolor{superscript}{#1}} % catcode 7
+\newcommand{\ExamplecodeFormatSubscript}[1]{\textcolor{subscript}{#1}} % catcode 8
+% catcode 9: ignored
+% catcode 10: \ExamplecodeSpace, \ExamplecodeTab
+\newcommand{\ExamplecodeFormatText}[1]{%
+ \ifx`#1%
+ \textasciigrave
+ \else\ifx'#1%
+ \textquotesingle
+ \else
+ #1%
+ \fi\fi
+} % catcode 11, 12
+\newcommand{\ExamplecodeFormatBracket}[1]{#1} % catcode 11
+% catcode 13: active (uses \ExamplecodeFormatCmd, too)
+
+% in contrast to the other format macros this does
+% *not* take an argument. Instead it applies the
+% format for the rest of the group.
+\newcommand{\ExamplecodeFormatComment}{%
+ \leavevmode
+ \color{comment}%
+ \itshape
+ \let\color=\@gobble
+} % catcode 14
+\newcommand{\ExamplecodeFormatMath}{%
+ \leavevmode
+ \color{math}%
+ \itshape
+ \let\color=\@gobble
+ \ExamplecodeForbidLinebreaks
+}
+\newcommand{\ExamplecodeForbidLinebreaks}{%
+ \let\discretionary=\@thirdofthree
+} % catcode 3
+
+% catcode 15: invalid
+
+\newcommand{\ExamplecodeSpaceSymbol}{\space}
+\newcommand{\ExamplecodeTabSymbol}{\qquad}
+\newcommand{\ExamplecodeIndentationSpace}{\EnsureHMode\nobreak\space}
+\newcommand{\ExamplecodeIndentationTab}{\EnsureHMode\nobreak\qquad}
+\newcommand{\ExamplecodeNormalSpace}{\discretionary{}{\ExamplecodePostBreakText}{\hbox{\ExamplecodeSpaceSymbol}}}
+\newcommand{\ExamplecodeNormalTab}{\discretionary{}{\ExamplecodePostBreakText}{\hbox{\ExamplecodeTabSymbol}}}
+\newcommand{\ExamplecodeEndOfLine}{\EnsureHMode\par}
+
+
+\newcommand{\ExamplecodeTabsize}{4}
+
+
+\newcommand{\ExamplecodeAllowLinebreakAfter}[1]{\expandafter\def\csname @examplecode@breakafter@#1\endcsname{\ExamplecodeAllowLinebreakBeforeNext}}
+\ExamplecodeAllowLinebreakAfter]
+
+
+% ---------- process ---------
+
+\newif\ifExamplecodeInAlign
+
+\newcommand{\ExamplecodeProcessCmd}[1]{\ExamplecodePrint{\ExamplecodeFormatCmd{#1}}} % catcode 0/16
+\newcommand{\ExamplecodeProcessEnv}[1]{\ExamplecodePrint{\ExamplecodeFormatEnv{#1}}}
+\newcommand{\ExamplecodeProcessPkg}[1]{\ExamplecodePrint{\ExamplecodeFormatPkg{#1}}}
+\newcommand{\ExamplecodeProcessBeginGroup}[1]{\ExamplecodePrint{\ExamplecodeFormatBeginGroup{#1}}} % catcode 1
+\newcommand{\ExamplecodeProcessEndGroup}[1]{\ExamplecodePrint{\ExamplecodeFormatEndGroup{#1}}} % catcode 2
+\newcommand{\ExamplecodeProcessMathShift}[1]{\ExamplecodePrint{\ExamplecodeFormatMathShift{#1}}} % catcode 3
+\newcommand{\ExamplecodeProcessBeginMath}{\ExamplecodePrint{\begingroup\ExamplecodeFormatMath}} % catcode 3
+\newcommand{\ExamplecodeProcessEndMath}{\ExamplecodePrint{\endgroup}}
+\newcommand{\ExamplecodeProcessAlignmentTab}[1]{\ExamplecodePrint{%
+ \ifExamplecodeInAlign
+ \endgroup
+ \fi
+ \ExamplecodeAllowLinebreak
+ \begingroup
+ \ExamplecodeInAligntrue
+ \ExamplecodeForbidLinebreaks
+ \ExamplecodeFormatAlignmentTab{#1}%
+}} % catcode 4
+\newcommand{\ExamplecodeProcessEndOfLine}{\ExamplecodePrint{%
+ \ifExamplecodeInAlign
+ \endgroup
+ \fi
+ \ExamplecodeEndOfLine
+}} % catcode 5
+\newcommand{\ExamplecodeProcessParameter}[1]{\ExamplecodePrint{\ExamplecodeFormatParameter{#1}}} % catcode 6
+\newcommand{\ExamplecodeProcessSuperscript}[1]{\ExamplecodePrint{\ExamplecodeFormatSuperscript{#1}}} % catcode 7
+\newcommand{\ExamplecodeProcessSubscript}[1]{\ExamplecodePrint{\ExamplecodeFormatSubscript{#1}}} % catcode 8
+% catcode 9: ignored
+\newcommand{\ExamplecodeProcessSpace}{\ExamplecodePrint{\ExamplecodeSpace}\ExamplecodeAppendIndentation{\ExamplecodeSpace}} % catcode 10
+\newcommand{\ExamplecodeProcessTab}{\ExamplecodePrint{\ExamplecodeTab}\ExamplecodeAppendIndentation{\ExamplecodeTab}} % catcode 10
+\newcommand{\ExamplecodeProcessText}[1]{\ExamplecodePrint{\ExamplecodeFormatText{#1}}} % catcode 11, 12
+\newcommand{\ExamplecodeProcessBracket}[1]{\ExamplecodePrint{\ExamplecodeFormatBracket{#1}}} % catcode 11
+% catcode 13: active (uses \ExamplecodeProcessCmd, too)
+\newcommand{\ExamplecodeProcessBeginComment}{\ExamplecodePrint{\begingroup\ExamplecodeFormatComment}} % catcode 14
+\newcommand{\ExamplecodeProcessEndComment}{\ExamplecodePrint{\endgroup}}
+% catcode 15: invalid
+
+\newcommand{\ExamplecodeProcessCleanup}{\ExamplecodePrint{%
+ \ifExamplecodeInAlign
+ \endgroup
+ \fi
+}}
+
+\newcommand{\ExamplecodeProcessMeta}[1]{\ExamplecodePrint{\ExamplecodeFormatMeta{#1}}}
+
+
+% ---------- key=value options ---------
+
+\newcommand{\ExamplecodeParseKeys}[1]{% #1: key path
+ \ExamplecodeParse
+ {\@examplecode@prepare@parsekeys{#1}}%
+ {\@examplecode@cleanup@parsekeys}%
+ \ExamplecodeEndParseKeys
+}
+\newcommand{\@examplecode@prepare@parsekeys}[1]{% #1: key path
+ \let\@examplecode@print@original=\ExamplecodePrint
+ \ExamplecodeNoCmd
+ \def\@examplecode@key@cmd{\key@withopt@unformatted}%
+ \def\@examplecode@keypath{#1}%
+ \let\@examplecode@pathsep=\@empty
+ \def\ExamplecodeProcessText##1{% ##1: current token
+ \ifx,##1%
+ \ifExamplecodeInAlign
+ \endgroup
+ \fi
+ \@examplecode@endkey
+ \let\@examplecode@beginkey=\@examplecode@beginkey@bak
+ \@examplecode@print@original{\ExamplecodeFormatText{##1}}%
+ \else\ifx=##1%
+ \@examplecode@endkey
+ \let\@examplecode@beginkey=\relax
+ \@examplecode@print@original{\ExamplecodeFormatText{##1}}%
+ \else\ifx/##1%
+ \@examplecode@beginkey
+ \@examplecode@appendpathsep{##1}%
+ \else\ifx.##1%
+ \unless \ifx \@examplecode@pathsep \@empty
+ \@examplecode@endkey
+ \expandafter\@examplecode@print@original\expandafter{\expandafter\ExamplecodeFormatText\expandafter{\@examplecode@pathsep}}%
+ \fi
+ \@examplecode@beginkey
+ \ifx \@examplecode@key \@empty
+ \def\@examplecode@key@cmd[####1]####2{\LinkUnformattedKeyword{handler}{####2}{####2}}%
+ \fi
+ \@examplecode@appendkey{##1}%
+ \else
+ \@examplecode@beginkey
+ \@examplecode@appendkey{##1}%
+ \fi \fi \fi \fi
+ }%
+ \def\@examplecode@appendkey##1{%
+ \ExamplecodePrint{\ExamplecodeFormatText{##1}}%
+ }%
+ \def\@examplecode@appendpathsep##1{%
+ \ExamplecodePrint{\ExamplecodeFormatText{##1}}%
+ }%
+ \def\ExamplecodeProcessBeginComment{%
+ \@examplecode@endkey
+ \begingroup
+ \let\@examplecode@beginkey=\relax
+ \let\@examplecode@beginkey@bak=\relax
+ \@examplecode@print@original{\begingroup\ExamplecodeFormatComment}%
+ \let\ExamplecodePrint=\@examplecode@print@original
+ }%
+ \def\ExamplecodeProcessEndComment{%
+ \@examplecode@print@original{\endgroup}%
+ \endgroup
+ }%
+ \def\ExamplecodeProcessBeginGroup##1{%
+ \begingroup
+ \let\@examplecode@beginkey=\relax
+ \let\@examplecode@beginkey@bak=\relax
+ \ExamplecodePrint{\ExamplecodeFormatBeginGroup{##1}}%
+ }%
+ \def\ExamplecodeProcessEndGroup##1{%
+ \ExamplecodePrint{\ExamplecodeFormatEndGroup{##1}}%
+ \endgroup
+ }%
+}
+\newcommand{\@examplecode@cleanup@parsekeys}{%
+ \@examplecode@endkey
+ \ExamplecodeProcessCleanup
+}
+\newcommand{\@examplecode@beginkey}{%
+ \begingroup
+ \def\@examplecode@key{}%
+ \let\@examplecode@keyspace=\@empty
+ \def\@examplecode@appendkey##1{%
+ \unless \ifx \@examplecode@keyspace \@empty
+ \appto\@examplecode@key{ }%
+ \let\@examplecode@keyspace=\@empty
+ \fi
+ \@examplecode@applypathsep
+ \appto\@examplecode@key{##1}%
+ }%
+ \def\@examplecode@appendpathsep##1{%
+ \unless \ifx \@examplecode@keyspace \@empty
+ \appto\@examplecode@key{ }%
+ \let\@examplecode@keyspace=\@empty
+ \fi
+ \appto\@examplecode@pathsep{##1}%
+ }%
+ \def\@examplecode@applypathsep{%
+ \unless \ifx \@examplecode@pathsep \@empty
+ \eappto\@examplecode@key{\@examplecode@pathsep}%
+ \let\@examplecode@pathsep=\@empty
+ \fi
+ }%
+ \def\ExamplecodePrint##1{%
+ \@examplecode@endkey
+ \@examplecode@print@original{##1}%
+ }%
+ \def\ExamplecodeProcessSpace{%
+ \@examplecode@applypathsep
+ \appto\@examplecode@keyspace{\ExamplecodeSpace}%
+ }%
+ \let\@examplecode@beginkey=\relax
+ \def\@examplecode@endkey{%
+ \edef\@examplecode@do{\noexpand\@examplecode@print@original{%
+ \expandafter\noexpand\@examplecode@key@cmd[\@examplecode@keypath]{\@examplecode@key}%
+ \expandonce{\@examplecode@pathsep}%
+ \expandonce{\@examplecode@keyspace}%
+ }}%
+ \@examplecode@do
+ \endgroup
+ }%
+}
+\let\@examplecode@beginkey@bak=\@examplecode@beginkey
+\newcommand{\@examplecode@endkey}{}
+
+\newcommand{\ExamplecodeEndParseKeys}{\PackageError{examplecode}{This should never be expanded}{}}
+
+
+% ---------- parsing command ---------
+
+\newcommand{\ExamplecodeParse}[3]{% #1: prepare, #2: cleanup, #3: end token
+ \begingroup
+ #1%
+ \let\@examplecode@endtoken=#3%
+ \def\@examplecode@checkend##1{#2\@examplecode@beforeline\endgroup}%
+ \@examplecode@loop
+}
+
+% WARNING: reads end token before changing catcodes
+% compares end token with \ifx in case it is a control sequence
+% => does not find end token if it's catcode is changed
+% => \xc`...` does not work directly but inside of macro
+\newcommand{\@xc@prepare}{%
+ \def\ExamplecodeNormalSpace{\ExamplecodeSpaceSymbol}%
+ \def\ExamplecodeNormalTab{\ExamplecodeTabSymbol}%
+ \@examplecode@setcatcodes
+ \@examplecode@state@normal
+ \let\ExamplecodeAllowLinebreak=\relax
+ \gdef\@xc@code{}%
+ \def\ExamplecodePrint{\gappto\@xc@code}%
+}%
+\newcommand{\@xc@afterend}{%
+ \formatcode{\@xc@code}%
+}
+\newcommand{\xc}{%
+ \ExamplecodeParse{%
+ \@xc@prepare
+ }{%
+ \ExamplecodeProcessCleanup
+ \@xc@afterend
+ }%
+}
+\newcommand{\xckey}{%
+ \ExamplecodeParse{%
+ \@xc@prepare
+ \@examplecode@prepare@parsekeys{}%
+ }{%
+ \@examplecode@cleanup@parsekeys
+ \@xc@afterend
+ }%
+}
+
+
+% ---------- escape inside ---------
+
+\newcommand{\ExamplecodeEscapeinside}[2]{% #1: begin token, #2: end token
+ \def\@examplecode@escapeinside#1##1#2{##1\@examplecode@loop}%
+ \let\@examplecode@escapeinside@startchar=#1%
+}
+
+
+% ---------- line numbers ---------
+
+\newcounter{ExamplecodeLinecounter}
+\newcommand{\ExamplecodeLinenumbers}{%
+ \setcounter{ExamplecodeLinecounter}{1}%
+ \let\@examplecode@beforeline@hook=\@examplecode@insertlinenumber
+}
+\newcommand\@examplecode@insertlinenumber{%
+ \makebox[0pt][r]{{\ExamplecodeFormatLinenumber{\theExamplecodeLinecounter}}\quad}%
+ \stepcounter{ExamplecodeLinecounter}%
+}
+\newcommand\ExamplecodeFormatLinenumber[1]{%
+ \normalfont
+ \footnotesize
+ #1%
+}
+
+
+% ---------- parsing environment ---------
+
+\newenvironment{examplecode}{%
+ \csname examplecode*\endcsname{}%
+}{%
+ \csname endexamplecode*\endcsname{}%
+}
+\newenvironment{examplecode*}[1]{%
+ \let\@examplecode@envname=\@currenvir
+ \@examplecode@setcatcodes
+ \let\@examplecode@endtoken=\end
+ #1%
+ \begin{examplecodebox}%
+ \colorlet{linkcolor}{codelinkcolor}%
+ \raggedright
+ \ttfamily
+ \leavevmode
+ \parskip=0pt
+ \parindent=0pt\relax
+ \let\\=\ExamplecodeLinebreak
+ \@examplecode@state@firstindent
+ \@examplecode@gobblefirsteol
+}{%
+ \end{examplecodebox}%
+}
+
+\newenvironment{examplecodekey}{%
+ \csname examplecodekey*\endcsname{}%
+}{%
+ \csname endexamplecodekey*\endcsname{}%
+}
+\newenvironment{examplecodekey*}[1]{%
+ \csname examplecode*\endcsname{%
+ \@examplecode@prepare@parsekeys{}%
+ #1%
+ }%
+}{%
+ \@examplecode@cleanup@parsekeys
+ \csname endexamplecode*\endcsname
+}
+
+
+\newcommand{\@examplecode@setcatcodes}{%
+ \@makeother\^^M% end of line
+ \@makeother\^^I% tab
+ \@makeother\ % space
+ \@makeother\%%
+ \makeatletter
+ % changed
+ \@makeother*%
+ \@makeother`%
+}
+\begingroup
+\@makeother\^^M %
+\@makeother\^^I %
+\@firstofone{%
+\endgroup%
+\let\EolOther=^^M%
+\let\TabOther=^^I%
+}
+\begingroup\@makeother\%\@firstofone{\endgroup\let\PercentOther=%}
+
+\newcommand{\@examplecode@error@catcodes@indentation}{\PackageError{examplecode}{failed to change catcodes, indentation will be screwed up}{}}
+\newcommand{\@examplecode@error@mixedtabsandspaces}{\PackageWarning{examplecode}{mixed use of tabs and spaces}}
+
+\newcount\@examplecode@count@outerindent
+\newcount\@examplecode@count@gobbledindent
+\newif\if@examplecode@allowlinebreakbeforenext
+
+\newcommand{\EnsureHMode}{\leavevmode\@examplecode@beforeline\let\EnsureHMode\relax}%
+\let\@EnsureHMode@bak=\EnsureHMode
+
+
+\newcommand{\@examplecode@beforeline}{%
+ \@examplecode@beforeline@hook
+ \let\@examplecode@beforeline=\relax
+}
+\let\@examplecode@beforeline@bak=\@examplecode@beforeline
+\let\@examplecode@beforeline@hook=\relax
+
+\newcommand{\@examplecode@state@firstindent}{%
+ \@examplecode@beforeline
+ \let\@examplecode@check@spaces=\@examplecode@check@firstindent
+}
+\newcommand{\@examplecode@state@gobbleindent}{%
+ \let\@examplecode@beforeline=\@examplecode@beforeline@bak
+ \let\@examplecode@state@normal=\@examplecode@state@normal@bak
+ \ifnum \@examplecode@count@outerindent > 0
+ \@examplecode@count@gobbledindent=0
+ \let\@examplecode@check@spaces=\@examplecode@check@gobbleindent
+ \else
+ \@examplecode@state@indent
+ \fi
+ \let\EnsureHMode=\@EnsureHMode@bak
+}
+\newcommand{\@examplecode@state@indent}{%
+ \let\@examplecode@check@spaces=\@examplecode@check@normalspaces
+ \let\ExamplecodeSpace=\ExamplecodeIndentationSpace
+ \let\ExamplecodeTab=\ExamplecodeIndentationTab
+ \def\ExamplecodeAppendIndentation##1{\eappto\ExamplecodeIndentation{\expandonce{##1}}}%
+ \let\ExamplecodeIndentation=\@empty
+}
+\newcommand{\@examplecode@state@normal}{%
+ \@examplecode@beforeline
+ \let\@examplecode@check@spaces=\@examplecode@check@normalspaces
+ \let\ExamplecodeSpace=\ExamplecodeNormalSpace
+ \let\ExamplecodeTab=\ExamplecodeNormalTab
+ \let\@examplecode@state@normal=\relax
+ \let\ExamplecodeAppendIndentation=\@gobble
+}
+\let\@examplecode@state@normal@bak=\@examplecode@state@normal
+
+
+\newcommand{\@examplecode@gobblefirsteol}[1]{%
+ \ifx \EolOther #1\relax
+ \else
+ \PackageError{examplecode}{unexpected code on same line after \string\begin{examplecode}}{}%
+ \detokenize{#1}%
+ \fi
+ \@examplecode@loop
+}
+
+\newcommand{\@examplecode@loop}{%
+ \futurelet \@examplecode@nexttoken \@examplecode@check
+}
+\newcommand{\@examplecode@check}{%
+ \ifx \@examplecode@nexttoken \@examplecode@endtoken
+ \expandafter \@examplecode@checkend
+ \else
+ \if@examplecode@allowlinebreakbeforenext
+ \ExamplecodeAllowLinebreak
+ \@examplecode@allowlinebreakbeforenextfalse
+ \fi
+ \expandafter \@examplecode@check@ii
+ \fi
+}
+
+\newcommand{\@examplecode@check@ii}{%
+ \ifcat \noexpand\@examplecode@nexttoken \relax
+ \def\@examplecode@do{\@examplecode@handle@cs}%
+ \else
+ \def\@examplecode@do{\@examplecode@check@spaces}%
+ \fi
+ \@examplecode@do
+}
+\newcommand{\@examplecode@handle@cs}[1]{%
+ \ExamplecodeSetCmd{#1}%
+ \@examplecode@state@normal
+ \ExamplecodeProcessCmd{#1}%
+ \@examplecode@loop
+}
+\newcommand{\ExamplecodeSetCmd}[1]{\edef\@examplecode@cs{\detokenize{#1}}}
+\newcommand{\ExamplecodeNoCmd}{\def\@examplecode@cs{}}
+\ExamplecodeNoCmd
+
+\newcommand{\@examplecode@check@normalspaces}{%
+ \ifcat \noexpand\@examplecode@nexttoken \space
+ \def\@examplecode@do##1{\ExamplecodeProcessSpace\@examplecode@loop##1}%
+ \else\if \noexpand\@examplecode@nexttoken \space
+ \def\@examplecode@do##1{\ExamplecodeProcessSpace\@examplecode@loop}%
+ \else\ifx \@examplecode@nexttoken \TabOther
+ \def\@examplecode@do##1{\ExamplecodeProcessTab\@examplecode@loop}%
+ \else
+ \def\@examplecode@do{\@examplecode@check@iv}%
+ \fi \fi \fi
+ \@examplecode@do
+}
+% count the indentation of the first line
+\newcommand{\@examplecode@check@firstindent}{%
+ \ifcat \noexpand\@examplecode@nexttoken \space
+ \@examplecode@error@catcodes@indentation
+ \advance\@examplecode@count@outerindent by 1
+ \def\@examplecode@do##1{\@examplecode@loop##1}%
+ \else\if \noexpand\@examplecode@nexttoken \space
+ \advance\@examplecode@count@outerindent by 1
+ \def\@examplecode@do##1{\@examplecode@loop}%
+ \else\ifx \@examplecode@nexttoken \TabOther
+ \advance\@examplecode@count@outerindent by \ExamplecodeTabsize
+ \def\@examplecode@do##1{\@examplecode@loop}%
+ \else
+ \def\@examplecode@do{\@examplecode@check@iv}%
+ \fi \fi \fi
+ \@examplecode@do
+}
+% gobble indentation as far as the first line was indented
+\newcommand{\@examplecode@check@gobbleindent}{%
+ \ifcat \noexpand\@examplecode@nexttoken \space
+ \@examplecode@error@catcodes@indentation
+ \@examplecode@gobbleindent{1}%
+ \def\@examplecode@do##1{\@examplecode@loop##1}%
+ \else\if \noexpand\@examplecode@nexttoken \space
+ \@examplecode@gobbleindent{1}%
+ \def\@examplecode@do##1{\@examplecode@loop}%
+ \else\ifx \@examplecode@nexttoken \TabOther
+ \@examplecode@gobbleindent{\ExamplecodeTabsize}%
+ \def\@examplecode@do##1{\@examplecode@loop}%
+ \else
+ \def\@examplecode@do{\@examplecode@check@iv}%
+ \fi \fi \fi
+ \@examplecode@do
+}
+\newcommand{\@examplecode@gobbleindent}[1]{%
+ \advance\@examplecode@count@gobbledindent by #1
+ \ifnum \@examplecode@count@gobbledindent = \@examplecode@count@outerindent
+ \@examplecode@state@indent
+ \else\ifnum \@examplecode@count@gobbledindent > \@examplecode@count@outerindent
+ \@examplecode@error@mixedtabsandspaces
+ \@examplecode@state@indent
+ \fi \fi
+}
+\newcommand{\@examplecode@check@iv}{%
+ \def\@examplecode@do{\@examplecode@check@v}%
+ \unless\ifx \@examplecode@escapeinside@startchar \relax
+ \if \noexpand\@examplecode@nexttoken \noexpand\@examplecode@escapeinside@startchar
+ \def\@examplecode@do{\@examplecode@escapeinside}%
+ \fi
+ \fi
+ \@examplecode@do
+}
+\newcommand{\@examplecode@check@v}{%
+ \ifcat \noexpand\@examplecode@nexttoken \bgroup% catcode 1
+ \def\@examplecode@do{\@examplecode@handlebgroup}%
+ \else\ifcat \noexpand\@examplecode@nexttoken \egroup% catcode 2
+ \def\@examplecode@do{\expandafter\@examplecode@handlespecialtoken\expandafter\ExamplecodeProcessEndGroup\string}%
+ \else\ifcat \noexpand\@examplecode@nexttoken $% catcode 3
+ \def\@examplecode@do{\@examplecode@handlemathshift}%
+ \else\ifcat \noexpand\@examplecode@nexttoken &% catcode 4
+ \def\@examplecode@do{\@examplecode@handlespecialtoken\ExamplecodeProcessAlignmentTab}%
+ \else\ifx \@examplecode@nexttoken \EolOther% catcode 5
+ \@examplecode@endcomment
+ \def\@examplecode@do##1{%
+ \ExamplecodeProcessEndOfLine
+ \@examplecode@state@gobbleindent
+ \@examplecode@loop
+ }%
+ \else\ifcat \noexpand\@examplecode@nexttoken ##% catcode 6
+ \def\@examplecode@do{\@examplecode@handleparameter}%
+ \else\ifcat \noexpand\@examplecode@nexttoken ^% catcode 7
+ \def\@examplecode@do{\@examplecode@handlespecialtoken\ExamplecodeProcessSuperscript}%
+ \else\ifcat \noexpand\@examplecode@nexttoken _% catcode 8
+ \def\@examplecode@do{\@examplecode@handlespecialtoken\ExamplecodeProcessSubscript}%
+ % catcode 9: ignored characters
+ % catcode 10: space, handled in \@examplecode@check@spaces
+ % catcode 11: letter, handled in \else
+ % catcode 12: other, handled in \else
+ \else\ifx \@examplecode@nexttoken <%
+ \def\@examplecode@do{\@examplecode@handlepossiblemeta}%
+ % catcode 13: active, handled in \@examplecode@check@ii (after \futurelet it's indistinguishable from a control sequence)
+ \else\ifx \@examplecode@nexttoken \PercentOther% catcode 14
+ \@examplecode@state@normal
+ \ExamplecodeProcessBeginComment
+ \def\@examplecode@endcomment{\ExamplecodeProcessEndComment}%
+ \def\@examplecode@do{\@examplecode@handlenormaltoken}%
+ % catcode 15: invalid characters
+ \else% catcode 11, 12
+ \def\@examplecode@do{\@examplecode@handlenormaltoken}%
+ \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi
+ \@examplecode@do
+}
+\newcommand{\@examplecode@endcomment}{}
+\newcommand{\@examplecode@handlebgroup}{%
+ \ifcsundef{@examplecode@formatarg\@examplecode@cs}{%
+ \expandafter\@examplecode@handlespecialtoken\expandafter\ExamplecodeProcessBeginGroup\string
+ }{%
+ \csname @examplecode@formatarg\@examplecode@cs\endcsname
+ }%
+}
+\newcommand{\@examplecode@handlenormaltoken}[1]{%
+ \@examplecode@state@normal
+ \ifcsundef{@examplecode@formatoptarg\@examplecode@cs#1}{%
+ \csname @examplecode@breakafter@#1\endcsname
+ \ExamplecodeProcessText{#1}%
+ \@examplecode@loop
+ }{%
+ \csname @examplecode@formatoptarg\@examplecode@cs#1\endcsname
+ }%
+}
+\newcommand{\@examplecode@handlespecialtoken}[2]{%
+ \@examplecode@state@normal
+ #1{\string#2}%
+ \@examplecode@loop
+}
+
+\newcommand{\@examplecode@handlemathshift}[1]{%
+ \@examplecode@math@begin
+ \ExamplecodeProcessMathShift{\string#1}%
+ \@examplecode@math@end
+ \@examplecode@loop
+}
+\newcommand{\@examplecode@math@begin}{%
+ \@examplecode@state@normal
+ \begingroup
+ \let\@examplecode@handlemeta=\@examplecode@handlenormaltoken
+ \ExamplecodeProcessBeginMath
+ \let\@examplecode@math@begin=\relax
+ \def\@examplecode@math@end{\def\@examplecode@math@end{\ExamplecodeProcessEndMath\endgroup}}%
+}
+
+\newcommand{\@examplecode@handleparameter}[1]{%
+ \edef\@examplecode@parameter{\string#1}%
+ \@examplecode@parameterloop
+}
+\newcommand{\@examplecode@parameterloop}{%
+ \futurelet \@examplecode@nexttoken \@examplecode@parametercheck
+}
+\newcommand{\@examplecode@parametercheck}{%
+ \ifcat \noexpand\@examplecode@nexttoken ##%
+ \def\@examplecode@do##1{%
+ \edef\@examplecode@parameter{\@examplecode@parameter\string##1}%
+ \@examplecode@parameterloop
+ }%
+ \else\ifcat \noexpand\@examplecode@nexttoken 1%
+ \def\@examplecode@do##1{%
+ \edef\@examplecode@parameter{\@examplecode@parameter##1}%
+ \expandafter\ExamplecodeProcessParameter\expandafter{\@examplecode@parameter}%
+ \@examplecode@loop
+ }%
+ \else
+ \def\@examplecode@do{%
+ \expandafter\ExamplecodeProcessParameter\expandafter{\@examplecode@parameter}%
+ \@examplecode@check
+ }%
+ \fi \fi
+ \@examplecode@do
+}
+
+\newcommand{\@examplecode@handlepossiblemeta}[1]{%
+ \def\@examplecode@tmp{#1}%
+ \futurelet \@examplecode@nexttoken \@examplecode@checkmeta
+}
+\newcommand{\@examplecode@checkmeta}{%
+ \ifcat \@examplecode@nexttoken a%
+ \def\@examplecode@do{\@examplecode@handlemeta}%
+ \else
+ \def\@examplecode@do{\@examplecode@handlenormaltoken}%
+ \fi
+ \expandafter\@examplecode@do\@examplecode@tmp
+}
+\def\@examplecode@handlemeta<#1>{%
+ \ExamplecodeProcessMeta{#1}%
+ \@examplecode@loop
+}
+
+\newcommand{\@examplecode@checkend}[2]{%
+ \def\@examplecode@arg{#2}%
+ \ifx \@examplecode@arg \@examplecode@envname
+ \expandafter \@firstoftwo
+ \else
+ \expandafter \@secondoftwo
+ \fi{%
+ \end{#2}%
+ }{%
+ \@examplecode@state@normal
+ \ExamplecodeProcessCmd{#1}%
+ \ExamplecodeProcessBeginGroup{\{}%
+ \ExamplecodeProcessEnv{#2}%
+ \ExamplecodeProcessEndGroup{\}}%
+ \@examplecode@loop
+ }%
+}%
+\makeatother
diff --git a/macros/latex/contrib/easyfloats/doc/preamble/keydoc.tex b/macros/latex/contrib/easyfloats/doc/preamble/keydoc.tex
new file mode 100644
index 0000000000..3116266bef
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/preamble/keydoc.tex
@@ -0,0 +1,754 @@
+% !TeX root = ../easyfloats.tex
+
+% Copyright © 2020 E. Zöllner
+% Alternatively to the terms of the LPPL, at your choice,
+% you can redistribute and/or modify this file under the
+% terms of the Do What The Fuck You Want To Public License, Version 2,
+% as published by Sam Hocevar. See http://www.wtfpl.net/about/.
+
+\usepackage{etoolbox}
+\usepackage{pgfkeys}
+
+% Defines a macro to document a macro or environment key:
+% \keydoc{<keyname> = <allowedvalues>}{<keytype>}
+% \keydoc[<options>]{<keyname> = <allowedvalues>}{<keytype>}
+% Following text is assumed to be a description of the key.
+% If it is instead followed by another \keydoc it is assumed
+% that this key has no description.
+% If a description applies to two keys separate the \keydocs
+% by a slash.
+% Do *not* put an empty line between a \keydoc and it's description.
+% Spaces after (the second argument of) \keydoc are ignored.
+% <options> is a comma separated list of the following possible key=value pairs:
+% - target = the full key to another key.
+% The name of this key is made into a link to target.
+% This is used by \forwardingkeydoc.
+% - initial value
+% - default value
+% Values are separated by pipes.
+% Wildcards are put in angular brackets.
+%
+% The description of a \keydoc is assumed to reach up to the
+% next \keydoc, \section, \subsection or \subsubsection.
+% If that is not the case you must explicitly end it with
+% \endkeydoc
+% If the description of a \keydoc is ended by a \*section macro
+% there must be a \par (aka an empty line) before that \*section.
+% Otherwise \keydoc@descriptionsep will be inserted.
+%
+% There is a special macro for forwarding keys:
+% \forwardingkeydoc[<options>]{<keyname>}
+% In contrast to \keydoc, the target option can be a path, name or full key.
+% If target is not given it is tried to generate it by expanding
+% \TargetKey{<keypath>}{<keyname>}
+% This macro is given the path (without trailing slash) and name
+% of the key to be described and is expected to expand to a full key.
+% You must define it yourself if you want to leave out the optional argument.
+%
+% \forwardingkeydoc uses internally a more generalized macro:
+% \correspondingkeydoc[<options>]{<keyname>}{<keytype>}
+% target is as flexible as for \forwardingkeydoc
+% but it also takes a <keytype> like \keydoc.
+%
+% Examples for a key pattern can be specified with
+% \keylinktarget{<keyexample>}
+% It must be specified directly following the \keydoc it refers to.
+%
+% \key is redefined to link to \keydoc.
+% However, different environments can have different keys
+% with the same name. In that case a path must be set to
+% distinguish these keys:
+% \keydocpath{<path>}
+% Sets the path for all following \keydoc in the same group.
+% Unambiguous keys can be referenced without a path:
+% \key{sub}
+% For ambiguous keys the path must given as an optional argument:
+% \key[/object]{label}
+% Paths may *not* include a trailing slash.
+%
+% Internals:
+% \begin@keydoc is put before the first \keydoc.
+% \endkeydoc is put after the last description of a \keydoc.
+% \keydoc@beforekey is put before each \keydoc but only once
+% for \keydocs which belong together.
+% \keydoc@keysep is put between \keydocs which belong together.
+% \keydoc@descriptionsep is put between a \keydoc and it's description.
+% If a \keydoc is followed by a \par neither \keydoc@keysep
+% nor \keydoc@descriptionsep is inserted.
+
+
+\makeatletter
+
+% ---------- \keydoc settings ---------
+
+\newcommand{\begin@keydoc}{\begin{itemize}}
+\def \endkeydoc {\end{itemize}}
+
+\newcommand{\keydoc@beforekey}{\item}
+\newcommand{\keydoc@keysep}{~/ }
+\newcommand{\keydoc@descriptionsep}{\nopagebreak\par}
+
+\newcommand{\keydoc@mandatoryvalueformat}[1]{#1}
+\newcommand{\keydoc@optionalvalueformat}{\textcolor{gray}}
+
+\newcommand{\keydoc@keytype}[1]{\,\ensuremath{^{\pgfmanualcslinkpreskip=.33em\pgfmanualcslinkpostskip=\pgfmanualcslinkpreskip\LinkUnformattedKeyword{keytype}{#1}{\keytypesymbol{#1}}}}}
+\newcommand{\keytypedoc@keytype}[1]{\raisebox{.2ex}{\bfseries\keytypesymbol{#1}}}
+
+% ---------- key type symbols ---------
+
+\newcommand{\keytypesymbolformat}[1]{\hbox{\scriptsize(#1)}}
+\newcommand{\newkeytypesymbol}[2]{% #1: key type, #2: symbol
+ \expandafter\newcommand\csname keytypesymbol@#1\endcsname{#2}%
+}
+\newcommand{\keytypesymbol}[1]{% #1: key type
+ \@ifundefined{keytypesymbol@#1}%
+ {\PackageError{keydoc}{undefined keytype `#1'}{}}%
+ {\keytypesymbolformat{\csname keytypesymbol@#1\endcsname}}%
+}
+
+\newkeytypesymbol{storing key}{sto}
+\newkeytypesymbol{executed key}{exe}
+\newkeytypesymbol{boolean key}{bool}
+\newkeytypesymbol{forwarding key}{fwd}
+\newkeytypesymbol{handler}{hdl}
+\newkeytypesymbol{unknown key handler}{unk}
+
+
+% ---------- optional dependencies ---------
+
+\providecommand{\key}[2][]{% #1: key path/group, #2: key name
+ \texttt{#2}%
+}
+
+
+% ---------- auxiliary macros ---------
+
+% \ifendsonspace{<text>}{<then>}{<else>}
+% Checks if the last token of <text> is a space.
+% If it is it expands to <then>{<text-without-last-space>}.
+% If it is not it expands to <else>{<text>}.
+% <text> may not contain \relax.
+\newcommand\ifendsonspace{\ifendson{ }}
+\newcommand\ifendson[2]{%
+ \def\endson@check##1#1\relax.##2\relax\relax##3##4{%
+ \if \relax\detokenize{##2}\relax
+ \def\endson@do{##4}%
+ \endson@stripandappto##1%
+ \else
+ \def\endson@do{##3{##1}}%
+ \fi
+ \endson@do
+ }%
+ \def\endson@stripandappto##1\relax.{\appto\endson@do{{##1}}}%
+ \endson@check#2\relax.#1\relax.\relax\relax
+}
+
+% \newstripoptend{<cs>}{<suffix>}
+% Defines a new control sequence <cs> which checks if it's argument ends on <suffix>.
+% If the argument of <cs> ends on <suffix> it is stripped.
+% If the argument of <cs> does not end on <suffix> <cs> expands to the argument.
+% <cs> is expandable.
+% The number of required expansion steps depends on whether the argument ends on <suffix> or not.
+\newcommand\newstripoptend[2]{% #1: cs, #2: end
+ \expandafter\def\csname\string#1@do\endcsname##1#2\relax.##2\relax\relax{%
+ \if \relax\detokenize{##2}\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\csname\string#1@strip\endcsname##1}%
+ {##1}%
+ }%
+ \expandafter\def\csname\string#1@strip\endcsname##1\relax.{##1}%
+ \newcommand#1[1]{\csname\string#1@do\endcsname##1\relax.#2\relax.\relax\relax}%
+}
+\newstripoptend\stripoptplus{ (+)}
+
+
+% ---------- \FormatKey ---------
+
+\newcommand{\FormatKey}[1]{%
+ \def\FormatKeyText{}%
+ \FormatKey@lookahead#1\pgfeov
+ \let\FormatKey@original=\FormatKey
+ \let\FormatKey=\@firstofone
+ \KeyFormat@original@key{\FormatKeyText}%
+ \let\FormatKey=\FormatKey@original
+}
+\newcommand{\FormatKey@lookahead}{%
+ \futurelet \FormatKey@nexttoken \FormatKey@check
+}
+\newcommand{\FormatKey@check}{%
+ \ifx \FormatKey@nexttoken (%
+ \def\FormatKey@do{\FormatKey@optional}%
+ \else\ifx \FormatKey@nexttoken <%
+ \def\FormatKey@do{\FormatKey@var}%
+ \else\ifcat \noexpand\FormatKey@nexttoken \space
+ \def\FormatKey@do{\FormatKey@space}%
+ \else\ifx \FormatKey@nexttoken \pgfeov
+ \def\FormatKey@do{\FormatKey@endofloop}%
+ \else\ifx \FormatKey@nexttoken \bgroup
+ \def\FormatKey@do{\FormatKey@arg}%
+ \else
+ \def\FormatKey@do{\FormatKey@normaltoken}%
+ \fi \fi \fi \fi \fi
+ \FormatKey@do
+}
+\def\FormatKey@normaltoken#1{%
+ \appto\FormatKeyText{#1}%
+ \FormatKey@lookahead
+}
+\def\FormatKey@arg#1{%
+ \let\FormatKey@text@backup=\FormatKeyText
+ \def\FormatKeyText{}%
+ \FormatKey@lookahead#1\pgfeov
+ \eappto\FormatKey@text@backup{{\expandonce{\FormatKeyText}}}%
+ \let\FormatKeyText=\FormatKey@text@backup
+ \FormatKey@lookahead
+}
+\def\FormatKey@optional(#1){%
+ \appto\FormatKeyText{{\normalfont\color{gray}(}}%
+ \FormatKey@lookahead#1\pgfeov
+ \appto\FormatKeyText{{\normalfont\color{gray})}}%
+ \FormatKey@lookahead
+}
+\providecommand{\meta@nolink}{\meta}
+\def\FormatKey@var<#1>{%
+ \appto\FormatKeyText{{\normalfont\meta@nolink{#1}}}%
+ \FormatKey@lookahead
+}
+\@firstofone{\def\FormatKey@space} {%
+ \appto\FormatKeyText{ }%
+ \FormatKey@lookahead
+}
+\def\FormatKey@endofloop\pgfeov{%
+}
+
+\providecommand{\pgfeov}{\textcolor{red}{\textbf{eov, this should never be expanded}}}
+
+\let\KeyFormat@original@key=\key
+\renewcommand{\key}{\FormatKey}
+
+
+% ---------- format allowed values ---------
+
+\def\FormatVal@var#1{{\normalfont\meta{#1}}}
+\def\FormatVal@or{\unskip\,\ensuremath{|}\,\ignorespaces}
+
+\newcommand{\FormatValue}[1]{%
+ \def\FormatValue@val{}%
+ \expandafter\FormatValue@loop#1\pgfeov
+ \FormatValue@val
+}
+\newcommand{\FormatValue@loop}{%
+ \futurelet \FormatValue@nexttoken \FormatValue@check
+}
+\newcommand{\FormatValue@check}{%
+ \ifx \FormatValue@nexttoken \pgfeov
+ \def\FormatValue@do##1{}%
+ \else\ifcat \noexpand\FormatValue@nexttoken \space
+ \appto\FormatValue@val{ }%
+ \def\FormatValue@do##1{\FormatValue@loop##1}%
+ \else
+ \def\FormatValue@do{\FormatValue@check@ii}%
+ \fi \fi
+ \FormatValue@do
+}
+\newcommand{\FormatValue@check@ii}[1]{%
+ \if|\noexpand#1%
+ \appto\FormatValue@val{\FormatVal@or}%
+ \def\FormatValue@do{\FormatValue@loop}%
+ \else\if<\noexpand#1%
+ \def\FormatValue@do##1>{\appto\FormatValue@val{\FormatVal@var{##1}}\FormatValue@loop}%
+ \else
+ \appto\FormatValue@val{#1}%
+ \def\FormatValue@do{\FormatValue@loop}%
+ \fi \fi
+ \FormatValue@do
+}
+
+
+% ---------- keyword ---------
+% This is a generalized api to link certain keywords.
+% Use the following macro in a description:
+% \NewKeyword[\unexpanded]{<keywordtype>}{<keyword>}{<formatmacro-bg>}{<formatmacro-fg>}{<text>}
+% Use the following macro in references:
+% \LinkKeyword{<keywordtype>}{<keyword>}<formatmacro-bg><formatmacro-fg>{<text>}
+% <keywordtype> and <keyword> are used to generate/
+% link to a hyper link target. They are not visible
+% in the resulting document.
+% <formatmacro-bg/fg>: TeX code which takes one mandatory argument
+% and formats it as desired. Usually those passed to \NewKeyword are used
+% for both the description and the link.
+% Those passed to \LinkKeyword are used only if the link is undefined.
+% <formatmacro-bg> is applied before \FormatLink.
+% <formatmacro-fg> is applied inside of \FormatLink.
+% Setting a background color must happen in <formatmacro-bg>
+% otherwise it will cover the underline produced by \FormatLink.
+% Using \detokenize must happen in <formatmacro-fg>
+% otherwise \FormatLink will not be executed but printed to the pdf.
+% Changing the font can happen in either one.
+% <text>: TeX code to produce the displayed text.
+% The optional argument of \NewKeyword is a macro which
+% takes the <keyword> as argument and can protect it
+% from expansion when writing it to an auxiliary file.
+% If you try to link an undefined keyword you will
+% get a warning.
+%
+% You can define abbreviations so you do not always
+% need to type out the full name:
+% \AbbrevKeyword[\unexpanded]{<abbrevtype>}{<abbrevname>}{<fulltype>}{<fullname>}
+% If two abbreviations are ambiguous they will not
+% cause an error where they are defined but where
+% they are referenced so you can create abbreviations
+% automatically without trouble.
+%
+% In order to avoid warnings for undescribed keywords
+% \NoKeyword[\unexpanded]{<keywordtype>}{<keyword>}{<formatmacro-bg>}{<formatmacro-fg>}
+% can be used. It is used similar to \NewKeyword but
+% does not display any text and \LinkKeyword to this keyword
+% will not result in a link and will not give a warning.
+% The separation in <formatmacro-bg> and <formatmacro-fg>
+% is only for compatability with \NewKeyword.
+%
+% Links are defined in a temporary file which is loaded in the
+% preamble so that \LinkKeyword can be used before \NewKeyword.
+% I am not using the aux file for that because
+% (a) the aux file is loaded twice (once in \begin{document}
+% and once in \end{document}) and
+% (b) the aux file is loaded in a group so all definitions need
+% to be global but \newcommand can't do that and \gdef does not
+% check if a macro is already defined.
+
+
+% https://github.com/pgf-tikz/pgf/blob/master/tex/latex/pgf/doc/pgfmanual-en-macros.tex
+\colorlet{linkcolor}{black!8}
+\newdimen\pgfmanualcslinkpreskip
+\newdimen\pgfmanualcslinkpostskip
+\ifunderlinelinks
+\newcommand{\FormatLink}[1]{%
+ \begingroup
+ \setbox0=\hbox{#1}%
+ \rlap{{%
+ \keyword@original@color{linkcolor}%
+ \dimen0\wd0
+ \advance\dimen0by-\pgfmanualcslinkpreskip
+ \advance\dimen0by-\pgfmanualcslinkpostskip
+ \hskip\pgfmanualcslinkpreskip
+ \vrule width\dimen0 height-1pt depth1.6pt
+ }}%
+ \box0%
+ \endgroup
+}
+\else
+\newcommand{\FormatLink}[1]{#1}
+\fi
+
+
+% is used in the first run when the keyword is not yet defined
+% or if an abbreviation is ambiguous
+\newcommand{\keyword@placeholder}[1]{%
+ {\keyword@original@color{yellow}%
+ #1%
+ }%
+}
+\let\keyword@original@color=\color
+
+\newcommand{\keyword@targetname}[2]{% #1: keyword type, #2: name
+ keyword:#1:#2%
+}
+\newcommand{\keyword@csname}[2]{% #1: keyword type, #2: name
+ keyword@#1@#2%
+}
+\newcommand{\keyword@link}[3]{% #1: keyword type, #2: name, #3: text
+ \hyperlink{\keyword@targetname{#1}{#2}}{#3}%
+}
+\newcommand{\DisableLinks}{%
+ \let\keyword@link=\@thirdofthree
+ \let\FormatLink=\@firstofone
+}
+\let\keyword@formatenable=\@firstofone
+\newrobustcmd{\keyword@new}[4]{% #1: keyword type, #2: name, #3: format macro bg, #4: format macro fg
+ \expandafter\newcommand\csname\keyword@csname{#1}{#2}\endcsname[1]{\keyword@link{#1}{#2}{\keyword@formatenable{#3}{\FormatLink{\keyword@formatenable{#4}{##1}}}}}%
+}
+\newrobustcmd{\keyword@no}[4]{% #1: keyword type, #2: name, #3: format macro bg, #4: format macro fg
+ \expandafter\newcommand\csname\keyword@csname{#1}{#2}\endcsname[1]{\keyword@formatenable{#3}{\keyword@formatenable{#4}{##1}}}%
+}
+\newrobustcmd{\keyword@abbrev}[4]{% #1: abbrev keyword type, #2: abbrev name, #3: full keyword type, #4: full name
+ \IfKeywordUndefined{#3}{#4}{%
+ \PackageError{keyword}{#3 `#4' (for which you wanted to add the abbreviation `#1@#2') is undefined}{}%
+ }{\IfKeywordUndefined{#1}{#2}{%
+ \expandafter\let \csname\keyword@csname{#1}{#2}\expandafter\endcsname \csname\keyword@csname{#3}{#4}\endcsname
+ }{%
+ \expandafter\def \csname\keyword@csname{#1}{#2}\endcsname ##1{\PackageWarning{keyword}{The abbreviation #1 `#2' is ambiguous. Please specify the full name for ##1}{}\keyword@placeholder{##1}}%
+ }}%
+}
+\newcommand{\IfKeywordIsAbbrev}[4]{% key to be tested, reference key
+ \expandafter\ifx \csname\keyword@csname{#1}{#2}\expandafter\endcsname \csname\keyword@csname{#3}{#4}\endcsname
+ \expandafter \@firstoftwo
+ \else
+ \expandafter \@secondoftwo
+ \fi
+}
+
+\newcommand{\LinkKeyword}[5]{% #1: keyword type, #2: name, #3: formatmacro bg, #4: formatmacro fg, #5: displayed text
+ \IfKeywordUndefined{#1}{#2}{%
+ \edef\do{\noexpand\PackageWarning{keydoc}{Either #1 `#2' is undefined or you need to rerun LaTeX}}%
+ \do
+ \keyword@placeholder{#3{#4{#5}}}%
+ }{%
+ \csname \keyword@csname{#1}{#2}\endcsname{#5}%
+ }%
+}
+\newcommand{\LinkUnformattedKeyword}[3]{% #1: keyword type, #2: name, #3 displayed text
+ \begingroup
+ \let\keyword@formatenable=\@gobble
+ \LinkKeyword{#1}{#2}\@firstofone\@firstofone{#3}%
+ \endgroup
+}
+\newcommand{\IfKeywordUndefined}[2]{% #1: keyword type, #2: name, #3: then, #4: else
+ \expandafter \ifx \csname\keyword@csname{#1}{#2}\endcsname \relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+
+
+\newcommand\keyword@filename{\jobname.kw}
+
+\AtBeginDocument{%
+ \IfFileExists{\keyword@filename}{%
+ \makeatletter
+ \input{\keyword@filename}%
+ \makeatother
+ }{}
+ \newwrite\keyword@file
+ \immediate\openout\keyword@file=\keyword@filename\relax
+}
+
+\newcommand{\NewKeyword}[6][\@firstofone]{% [#1: name protection], #2: type, #3: name, #4: format macro bg, #5: format macro fg, #6: text
+ %https://tex.stackexchange.com/a/17138
+ \Hy@raisedlink{\hypertarget{\keyword@targetname{#2}{#3}}{}}%
+ \if\relax\detokenize{#6}\relax
+ \else
+ #4{#5{#6}}%
+ \fi
+ \immediate\write\keyword@file{\keyword@new{#2}{#1{#3}}{\unexpanded{#4}}{\unexpanded{#5}}}%
+}
+\newcommand{\AbbrevKeyword}[5][\@firstofone]{% abbrev = full
+ \immediate\write\keyword@file{\keyword@abbrev{#2}{#1{#3}} {#1{#4}}{#1{#5}}}%
+}
+\newrobustcmd{\NoKeyword}[5][\@firstofone]{% #2: keyword type, #3: name, #4: format macro bg, #5: format macro fg
+ \immediate\write\keyword@file{\keyword@no{#2}{#1{#3}}{\unexpanded{#4}}{\unexpanded{#5}}}%
+}
+
+
+% ---------- \keydoc ---------
+
+\newif\if@inkeydoc
+\newif\ifkeydoc@isrelated
+
+\newcommand\keydoc@keypath{}
+\newcommand{\keydocpath}[1]{\def\keydoc@keypath{#1}}
+
+\pgfqkeys{/keydoc}{%
+ target/.initial,
+ target/.value required,
+ %
+ initial value/.initial,
+ initial value/.value required,
+ %
+ default value/.initial,
+ default value/.value required,
+}
+
+\newcommand{\keydoc@printvalues}{%
+ \pgfkeysgetvalue{/keydoc/initial value}{\keydoc@initialvalue}%
+ \pgfkeysgetvalue{/keydoc/default value}{\keydoc@defaultvalue}%
+ \let\keydoc@initdefault=\@empty
+ %
+ \unless\ifx \keydoc@defaultvalue \pgfkeysnovalue@text
+ \appto\keydoc@initdefault{\hyperref[initial-vs-default-values]{Default value}: \keydoc@defaultvalue.}%
+ \fi
+ \unless\ifx \keydoc@initialvalue \pgfkeysnovalue@text
+ \unless\ifx \keydoc@initdefault \@empty
+ \appto\keydoc@initdefault{ }%
+ \fi
+ \appto\keydoc@initdefault{\hyperref[initial-vs-default-values]{Initial value}: \keydoc@initialvalue.}%
+ \fi
+ \unless\ifx \keydoc@initdefault \@empty
+ \\%
+ {\MaxFontSize\footnotesize\keydoc@initdefault}%
+ \fi
+ \pgfkeyssetvalue{/keydoc/initial value}{\pgfkeysnovalue}%
+ \pgfkeyssetvalue{/keydoc/default value}{\pgfkeysnovalue}%
+}
+\newcommand{\MaxFontSize}[1]{%
+ #1%
+ \def\MaxFontSize@do##1#1##2\relax{%
+ \@tfor\MaxFontSize@fontsize:=##1\do{%
+ \expandafter\let\MaxFontSize@fontsize=\relax
+ }%
+ }%
+ \MaxFontSize@do\Huge\huge\LARGE\Large\large\normalsize\small\footnotesize\scriptsize\tiny\relax
+}
+
+\newcommand{\keydoc}[3][]{% [#1: options], #2: key name, #3: key type
+ \unless \if@inkeydoc
+ \begin@keydoc
+ \keydoc@registerend
+ \@inkeydoctrue
+ \fi
+ \pgfkeyssetvalue{/keydoc/target}{\pgfkeysnovalue}%
+ \pgfqkeys{/keydoc}{#1}%
+ \keydoc@parsekey#2=\relax%
+ \def\keydoc@abbrev{%
+ \AbbrevKeyword{key}{\keydoc@keypattern} {key}{\keydoc@keypath/\keydoc@keypattern}%
+ \AbbrevKeyword{}{\keydoc@keypattern} {key}{\keydoc@keypath/\keydoc@keypattern}%
+ }%
+ \pgfkeysgetvalue{/keydoc/target}{\keydoc@targetkey}%
+ \ifx \keydoc@targetkey \pgfkeysnovalue@text
+ \let\keydoc@link=\@firstofone
+ \else
+ \def\keydoc@link{\LinkKeyword{key}{\keydoc@targetkey}\keydoc@key@bg\keydoc@original@key}%
+ \IfKeywordUndefined{}{\keydoc@keypattern}{%
+ % keep \keydoc@abbrev
+ }{\IfKeywordIsAbbrev{}{\keydoc@keypattern} {key}{\keydoc@keypath/\keydoc@keypattern}{%
+ % keep \keydoc@abbrev
+ }{%
+ \let\keydoc@abbrev=\relax
+ }}%
+ \fi
+ \ifkeydoc@isrelated
+ \keydoc@keysep
+ \else
+ \keydoc@beforekey
+ \fi
+ \edef\keydoc@do{%
+ \noexpand\NewKeyword{key}{\keydoc@keypath/\keydoc@keypattern}{\noexpand\keydoc@key@bg}{\noexpand\keydoc@original@key}{\noexpand\keydoc@link{\keydoc@keypattern}%
+ \noexpand\keydoc@valueformat{\keydoc@keyvalsep\noexpand\FormatValue\noexpand\keydoc@keyval}}%
+ }%
+ \keydoc@do
+ \keydoc@abbrev
+ \keydoc@keytype{#3}%
+ \keydoc@isrelatedfalse
+ \keydoc@lookahead
+}
+\def\keydoc@parsekey#1=#2\relax{%
+ \if \relax\detokenize{#2}\relax
+ \def\keydoc@keypattern{#1}%
+ \def\keydoc@keyval{}%
+ \def\keydoc@keyvalsep{}%
+ \let\keydoc@valueformat=\@firstofone
+ \else
+ \expandafter\def\expandafter\keydoc@keyval\expandafter{\keydoc@stripeq#2\relax}%
+ \expandafter\keydoc@checkifvalueisoptional\keydoc@keyval\relax
+ \ifendsonspace{#1}{%
+ \def\keydoc@keyvalsep{\ =}%
+ \def\keydoc@keypattern%{#1 without space}
+ }{%
+ \def\keydoc@keyvalsep{=}%
+ \def\keydoc@keypattern%{#1}
+ }%
+ \fi
+}
+\def\keydoc@stripeq#1=\relax{#1}
+\def\keydoc@checkifvalueisoptional#1#2\relax{%
+ \pgfkeysgetvalue{/keydoc/default value}{\keydoc@defaultvalue}%
+ \ifx?#1%
+ \ifx \keydoc@defaultvalue \pgfkeysnovalue@text
+ \ifx \keydoc@link \@firstofone
+ \PackageWarning{keydoc}{keydoc with optional value but default value is not given}{}%
+ \fi
+ \fi
+ \def\keydoc@keyval{#2}%
+ \let\keydoc@valueformat=\keydoc@optionalvalueformat
+ \else
+ \unless\ifx \keydoc@defaultvalue \pgfkeysnovalue@text
+ \PackageWarning{keydoc}{keydoc with default value but value is not optional}{}%
+ \fi
+ \let\keydoc@valueformat=\keydoc@mandatoryvalueformat
+ \fi
+}
+
+
+
+\newcommand{\keydoc@lookahead}{%
+ \futurelet \keydoc@nexttoken \keydoc@lookahead@check
+}
+\newcommand{\keydoc@lookahead@check}{%
+ \ifcat \noexpand\keydoc@nexttoken \space
+ \let\keydoc@lookahead@do=\keydoc@lookahead
+ \let\keydoc@lookahead@gobble=\@firstofone
+ \else\ifx \keydoc@nexttoken \par
+ \let\keydoc@lookahead@do=\keydoc@afterlookahead
+ \let\keydoc@lookahead@gobble=\@empty
+ \else\ifx \keydoc@nexttoken /%
+ \keydoc@isrelatedtrue
+ \let\keydoc@lookahead@do=\keydoc@lookahead
+ \let\keydoc@lookahead@gobble=\@gobble
+ \else\ifx \keydoc@nexttoken \keydoc
+ \let\keydoc@lookahead@do=\keydoc@afterlookahead
+ \let\keydoc@lookahead@gobble=\@empty
+ \else\ifx \keydoc@nexttoken \forwardingkeydoc
+ \let\keydoc@lookahead@do=\keydoc@afterlookahead
+ \let\keydoc@lookahead@gobble=\@empty
+ \else\ifx \keydoc@nexttoken \correspondingkeydoc
+ \let\keydoc@lookahead@do=\keydoc@afterlookahead
+ \let\keydoc@lookahead@gobble=\@empty
+ \else\ifx \keydoc@nexttoken \endkeydoc
+ \let\keydoc@lookahead@do=\keydoc@afterlookahead
+ \let\keydoc@lookahead@gobble=\@empty
+ \else
+ \ifkeydoc@isrelated
+ \PackageError{keydoc}{expexcted another keydoc command after /}{}%
+ \fi
+ \keydoc@printvalues
+ \keydoc@descriptionsep
+ \let\keydoc@lookahead@do=\relax
+ \let\keydoc@lookahead@gobble=\@empty
+ \fi \fi \fi \fi \fi \fi \fi
+ \expandafter \keydoc@lookahead@do \keydoc@lookahead@gobble
+}
+\newcommand{\keydoc@afterlookahead}{%
+ \unless\ifkeydoc@isrelated
+ \keydoc@printvalues
+ \fi
+}
+\newcommand{\RegisterEnd}[1]{%
+ \@tfor \@sec@cmd :=\section\subsection\subsubsection \do{%
+ \expandafter\appto\csname My\expandafter\string\@sec@cmd Hook\endcsname{#1}%
+ }%
+}
+\newcommand{\keydoc@registerend}{\RegisterEnd\endkeydoc}
+
+\newcommand{\keylinktarget}[1]{%
+ \AbbrevKeyword{key}{\keydoc@keypath/#1} {key}{\keydoc@keypath/\keydoc@keypattern}%
+ \AbbrevKeyword{key}{#1} {key}{\keydoc@keypath/\keydoc@keypattern}%
+ \AbbrevKeyword{}{#1} {key}{\keydoc@keypath/\keydoc@keypattern}%
+ \ignorespaces
+}
+
+\let\keydoc@original@key=\key
+\newcommand{\keydoc@key@bg}{\formatcode}
+% I cannot say \renewcommand{\key}[1][] because that would break \keydoc@original@key
+\renewcommand{\key}{%
+ \@ifnextchar [
+ \key@withopt
+ \key@withoutopt
+}
+\newcommand{\key@withopt}{}
+\def\key@withopt[#1]#2{%
+ \ifx\relax#1\relax
+ \LinkKeyword{key}{#2}\keydoc@key@bg\keydoc@original@key{#2}%
+ \else
+ \LinkKeyword{key}{#1/#2}\keydoc@key@bg\keydoc@original@key{#2}%
+ \fi
+}
+\newcommand{\key@withoutopt}[1]{%
+ \LinkKeyword{key}{#1}\keydoc@key@bg\keydoc@original@key{#1}%
+}
+
+\def\key@withopt@unformatted[#1]#2{%
+ \ifx\relax#1\relax
+ \LinkUnformattedKeyword{key}{#2}{#2}%
+ \else
+ \LinkUnformattedKeyword{key}{#1/#2}{#2}%
+ \fi
+}
+
+
+% ---------- \forwardingkeydoc ---------
+
+\newcommand{\forwardingkeydoc}[2][]{% [#1: name, path or full key of target], #2: name
+ \correspondingkeydoc[#1]{#2}{forwarding key}%
+}
+\newcommand{\correspondingkeydoc}[3][]{% [#1: options], #2: name, #3: key type
+ \keydoc[#1, /utils/exec=\forwardingkeydoc@parsetarget{#2}]{#2}{#3}%
+}
+\newcommand{\forwardingkeydoc@parsetarget}[1]{% #1: this key name
+ % parse target which may be a name, path or full key of corresponding key
+ \pgfkeysgetvalue{/keydoc/target}{\forwardingkeydoc@targetkey}%
+ \ifx\forwardingkeydoc@targetkey\pgfkeysnovalue@text
+ \ifundef\TargetKey{%
+ \PackageError{keydoc}
+ {\string\TargetKey{<keypath>}{<keyname>} must be defined if the the optional argument of \forwardingkeydoc\space is not passed}
+ {\string\TargetKey\space shall expand to path/name of the linked key given the path (without trailing slash) and name of the forwarding key.}%
+ }{%
+ \def\forwardingkeydoc@targetkey{\TargetKey{\keydoc@keypath}}%
+ \edef\forwardingkeydoc@targetkey{\expandafter\forwardingkeydoc@targetkey\expandafter{\forwardingkeydoc@stripval#1=\relax}}%
+ \expandafter\ifendsonspace\expandafter{\forwardingkeydoc@targetkey}%
+ {\def\forwardingkeydoc@targetkey}%
+ {\def\forwardingkeydoc@targetkey}%
+ \pgfkeyslet{/keydoc/target}{\forwardingkeydoc@targetkey}%
+ }%
+ \else
+ \forwardingkeydoc@parse{\forwardingkeydoc@targetkey}{\keydoc@keypath}{#1}%
+ \pgfkeyslet{/keydoc/target}{\forwardingkeydoc@targetkey}%
+ \fi
+}
+\newcommand\forwardingkeydoc@parse[3]{% #1: key name, key path or full key of target, #2: path of source, #3: name of source
+ \IfStartsWithSlash{#1}{%
+ \edef\forwardingkeydoc@targetkey@original{#1}%
+ \edef\forwardingkeydoc@targetkey{#1/\forwardingkeydoc@stripval#3=\relax}%
+ \expandafter\ifendsonspace\expandafter{\forwardingkeydoc@targetkey}%
+ {\def\forwardingkeydoc@targetkey}%
+ {\def\forwardingkeydoc@targetkey}%
+ \IfKeywordUndefined{key}{\forwardingkeydoc@targetkey}{%
+ \let\forwardingkeydoc@targetkey=\forwardingkeydoc@targetkey@original
+ }{}%
+ }{%
+ \def\forwardingkeydoc@targetkey{#2/#1}%
+ }%
+}
+\def\forwardingkeydoc@stripval#1=#2\relax{#1}
+
+\newcommand{\IfStartsWithSlash}[1]{%
+ \expandafter\IfStartsWithSlash@do#1\relax
+}
+\def\IfStartsWithSlash@do#1#2\relax{%
+ \ifx/#1%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+
+
+% ---------- \keytypedoc ---------
+
+\newcommand{\begin@keytypedoc}{\begin{itemize}}
+\def \endkeytypedoc {\end{itemize}}
+
+\newcommand{\keytypedoc@beforekeytype}{\item}
+\newcommand{\keytypedoc@format}[1]{\emph{#1}}
+\newcommand{\keytypedoc@descriptionsep}{:}
+
+\newif\if@inkeytypedoc
+
+\newcommand{\keytypeRAW}[1]{#1}
+\newcommand{\keytype@bg}[1]{#1}
+\newcommand{\keytype}{% [#1: type name], #2: displayed text (usually the type name, but can be another grammatic form)
+ \@ifnextchar [
+ {\@keytype@do}
+ {\@dblarg\@keytype@do}%
+}
+\def\@keytype@do[#1]#2{%
+ \LinkKeyword{keytype}{#1}\keytype@bg\keytypeRAW{#2}%
+}
+
+\newcommand{\keytypedoc}[1]{% #1 key type name
+ \unless \if@inkeytypedoc
+ \begin@keytypedoc
+ \keytypedoc@registerend
+ \@inkeytypedoctrue
+ \fi
+ \keytypedoc@beforekeytype[\keytypedoc@keytype{#1}]
+ \NewKeyword{keytype}{#1}{\keytype@bg}{\keytypeRAW}{\keytypedoc@format{#1}}%
+ \keytypedoc@descriptionsep
+}
+
+\newcommand{\keytypedoc@registerend}{\RegisterEnd\endkeytypedoc}
+
+\makeatother
diff --git a/macros/latex/contrib/easyfloats/doc/preamble/link.tex b/macros/latex/contrib/easyfloats/doc/preamble/link.tex
new file mode 100644
index 0000000000..bd6daf7d42
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/preamble/link.tex
@@ -0,0 +1,53 @@
+% !TeX root = ../easyfloats.tex
+
+% Copyright © 2020 E. Zöllner
+% Alternatively to the terms of the LPPL, at your choice,
+% you can redistribute and/or modify this file under the
+% terms of the Do What The Fuck You Want To Public License, Version 2,
+% as published by Sam Hocevar. See http://www.wtfpl.net/about/.
+
+% Adds an abstraction layer above hyperref's \href and \hyperref commands.
+% Links are defined with:
+% \newurllink{<name>}{<url>}
+% \newlabellink{<name>}{<label>}
+% A text is turned into a link with
+% \link[<name>]{<text>}
+% Like in markdown the name of the link is optional.
+% If it is omitted <text> is used instead.
+% This has the advantage that all links can be declared in one place
+% and URLs don't need to be repeated.
+% Changing an external link to an internal link is easy.
+
+\makeatletter
+\newcommand{\link@csname}[1]{link@cs@#1}
+
+\newcommand\newurllink{%
+ \begingroup
+ \let\do=\@makeother
+ \dospecials
+ \catcode`{=1
+ \catcode`}=2
+ \newurllink@do
+}
+\newcommand\newurllink@do[2]{% #1: name, #2: url
+ \endgroup
+ \expandafter \newcommand \csname\link@csname{#1}\endcsname{\href{#2}}%
+}
+
+\newcommand\newlabellink[2]{% #1: name, #2: label
+ \expandafter \newcommand \csname\link@csname{#1}\endcsname{\hyperref[#2]}%
+}
+
+\newcommand\link{% [#1: name], #2: displayed text
+ \@ifnextchar [
+ {\link@do}
+ {\@dblarg\link@do}%
+}
+\def\link@do[#1]#2{%
+ \ifcsname\link@csname{#1}\endcsname
+ \csname\link@csname{#1}\endcsname{#2}%
+ \else
+ \PackageError{link}{link name `#1' undefined}{}%
+ \fi
+}
+\makeatother
diff --git a/macros/latex/contrib/easyfloats/doc/preamble/macros.tex b/macros/latex/contrib/easyfloats/doc/preamble/macros.tex
new file mode 100644
index 0000000000..2be2bc74cb
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/preamble/macros.tex
@@ -0,0 +1,218 @@
+% !TeX root = ../easyfloats.tex
+
+% Copyright © 2020 E. Zöllner
+% Alternatively to the terms of the LPPL, at your choice,
+% you can redistribute and/or modify this file under the
+% terms of the Do What The Fuck You Want To Public License, Version 2,
+% as published by Sam Hocevar. See http://www.wtfpl.net/about/.
+
+% Defines additional macros which are not provided
+% by the document class or other packages.
+%
+% \TikZ
+% Typesets the name of the TikZ package.
+% dtxdescribe defines the \tikz macro for that
+% but it's wrong, the Z is not capitalized.
+%
+% \eTeX
+% Typesets the name of eTeX.
+% In standard LaTeX there are \TeX, \LaTeX and \LaTeXe.
+% metalogo and dtxdescribe define more logos.
+% But I have failed to find a package which provides
+% the eTeX logo.
+% In contrast to the other logo macros \eTeX includes a
+% link to the eTeX manual on CTAN.
+%
+% \radioon
+% draws an activated radio button
+% \radiooff
+% draws a deactivated radio button
+%
+% \DescribeHandler[<class>]{<name>}
+% Typesets the handler name as a \marginpar.
+% The same like all other \Describe* macros defined by dtxdescribe
+% just for handlers.
+%
+% \handler{<name>}
+% To reference a handler described with \DescribeHandler.
+%
+% \filename{<filename>}
+% Typesets a file name in the pdf.
+%
+% \pkgoptn{<option>}
+% Typesets a package option in the pdf.
+% \key{<option>}
+% Typesets a macro/environment option in the pdf.
+% Usually \optn is used for both macro options and package options.
+% However, I am using pgfkeys for macro options and standard LaTeX
+% for package options making the two types of options quite different.
+% Unlike some other packages the easyfloats package does not allow to
+% pass macro options as package options.
+% Therefore I like to have a better distinction between them even
+% if they are formatted in the same way.
+% Also, dtxdescribe defines two different macros for the description:
+% \DescribeOption for package/class options and
+% \DescribeKey for macro/environment options.
+% So it is only consistent to have two different macros for typesetting
+% macro/environment and package/class options.
+% I have redefined \optn to print an error in order to avoid ambiguity.
+% \val{<value>}
+% typesets the value of a key. Package options don't have values.
+%
+% \errormessage{<message>}
+% Typesets an error message in the pdf. Changes category codes so that
+% control sequences and active characters do *not* need to be prefixed
+% by \string.
+%
+% \sectionname{<title>}
+% Format the name of a section of a different document which I am referring to.
+% For sections of this document use \cref or \Cref instead.
+%
+% \newlicense{<name>}{<display text>}{<url>}
+% \license{<name>}
+% Define a license in the preamble with displayed name and URL with \newlicense
+% and use it in the document with \license.
+% Changes catcodes for the <url> only so that special characters
+% can be used there without worrying (except for curly braces).
+%
+% \formatcode{<texcode>}
+% Formats inline code.
+% It does not change catcodes or performs any other kind of magic.
+% <texcode> is executed as TeX code.
+
+\usepackage{relsize}
+
+
+\makeatletter
+\newcommand{\version}{\newcommand\theversion}
+\newcommand{\package}{\newcommand\thepackage}
+\newcommand{\thedate}{\@date}
+\AtBeginDocument{%
+ \let\thedate=\@date
+ \ifundef{\theversion}{}{\appto\@date{\strut\\\strut\thepackage~\theversion}}%
+}
+\makeatother
+
+\makeatletter
+\newcommand\parskipintoc[1]{%
+ \def\@starttoc##1{%
+ \begingroup
+ \makeatletter
+ \parskip=#1\relax
+ \@input{\jobname.##1}%
+ \if@filesw
+ \expandafter\newwrite\csname tf@##1\endcsname
+ \immediate\openout\csname tf@##1\endcsname \jobname.##1\relax
+ \fi
+ \@nobreakfalse
+ \endgroup
+ }
+}
+\makeatother
+\parskipintoc{0pt plus .6em minus 1pt}
+
+\newcommand{\bigpar}{\par{\centering*~*~*\pagebreak[3]\par}}
+\newcommand{\bigparinlist}{\par\medskip\pagebreak[3]\par}
+\let\OriginalItemize=\itemize
+\def\itemize{\OriginalItemize\let\bigpar\bigparinlist}
+
+\newcommand{\eTeX}{\texorpdfstring{\href{https://ctan.org/pkg/etex}{\ensuremath{\varepsilon}-\TeX}}{eTeX}}
+\newcommand{\TikZ}{Ti\emph{k}Z}
+
+\newcommand{\radioon}{\radio{\fill circle (.45);}}
+\newcommand{\radiooff}{\radio\relax}
+\newcommand{\radio}[1]{\tikz[x=1ex,y=1ex,baseline=-.6ex,very thin]{\draw circle (.75);#1}}
+
+
+\newcommand{\filename}{\emph}
+
+\newcommand{\pkgoptn}{\optn}
+\newcommand{\key}{\optn}
+\let\pkgoptn=\optn
+\let\key=\optn
+\let\handler=\optn
+% Do *not* add the optional argument, otherwise \renewcommand would not only redefine \optn
+% but also two internal macros which \pkgoptn and \key depend on.
+\renewcommand{\optn}[1]{\PackageError{macros}{\string\optn\space is ambiguous}{Please use \string\key\space for macro/environment options and \string\pkgoptn\space for package/class options.}}
+
+\newcommand{\val}[1]{#1}
+
+\makeatletter
+\newcommand*{\DescribeHandler}[2][]{\DTXD@margintagindex{#1}{#2}{Handler}{handler}{usage}}
+
+\newcommand{\errormessage}{%
+ \begingroup
+ \let\do=\@makeother
+ \dospecials
+ \@makeother`
+ \catcode`{=1
+ \catcode`}=2
+ \catcode` =10
+ \do@errormessage
+}
+\newcommand{\do@errormessage}[1]{%
+ \endgroup
+ \enquote{\texttt{#1}}%
+}
+\makeatother
+
+
+\newrobustcmd{\sectionname}[1]{{\let\formatcode\formatcodeinsection\emph{#1}}}
+
+
+\makeatletter
+\newcommand{\license@csname}[1]{license@cs@#1}
+\newcommand{\FormatLicense}{\emph}
+
+\newcommand{\newlicense}[2]{%
+ \begingroup
+ \let\do=\@makeother
+ \dospecials
+ \catcode`{=1
+ \catcode`}=2
+ \newlicense@do{#1}{#2}%
+}
+\newcommand{\newlicense@do}[3]{% #1: name, #2: display text, #3: url
+ \endgroup
+ \expandafter \newcommand \csname\license@csname{#1}\endcsname{\href{#3}{\FormatLicense{#2}}}%
+}
+
+\newcommand{\license}[1]{% #1: name
+ \ifcsname\license@csname{#1}\endcsname
+ \csname\license@csname{#1}\endcsname
+ \else
+ \PackageError{macros}{license name `#1' undefined}{}%
+ \fi
+}
+
+
+% ---------- \formatcode ---------
+
+\newcommand{\formatcode}[1]{{\ttfamily\smaller[.5]\fboxsep=.5pt\colorbox{codebackground!50}{\vphantom\}\colorlet{linkcolor}{codelinkcolor}#1}}}
+\newcommand{\formatcodeinsection}[1]{{\ttfamily#1}}
+\newcommand{\formatcodeinmarginpar}[1]{\formatcodeinsection{\small#1}}
+
+% patch section commands and toc to use \formatcodeinsection instead of \formatcode
+\newcommand{\patchsection}[3]{% #1: command to be patched, #2: code to be inserted before, #3 code to be appended
+ \expandafter\let\csname @@originalsec@\string#1\endcsname #1%
+ \expandafter\def\csname @@sec@\string#1\endcsname##1##2{#2\csname @@originalsec@\string#1\endcsname##1{##2}#3}%
+ \def#1##1##{\csname @@sec@\string#1\endcsname{##1}}%
+}
+\@tfor \@sec@cmd :=\section\subsection\subsubsection \do{%
+ \expandafter\expandafter\expandafter\patchsection\expandafter\@sec@cmd\expandafter{%
+ \csname My\expandafter\string\@sec@cmd Hook\endcsname
+ \let\@original@formatcode=\formatcode
+ \let\formatcode=\formatcodeinsection
+ }{%
+ \let\formatcode=\@original@formatcode
+ }%
+}
+\let\@@original@toc=\tableofcontents
+\def\tableofcontents{{\let\formatcode\formatcodeinsection\DisableLinks\@@original@toc}}
+
+% patch \marginpar to use \formatcodeinmarginpar instead of \formatcode
+\let\@@original@marginpar=\marginpar
+\renewcommand\marginpar[1]{\@@original@marginpar{\let\formatcode=\formatcodeinmarginpar#1}}
+
+
+\makeatother
diff --git a/macros/latex/contrib/easyfloats/doc/preamble/markdown.tex b/macros/latex/contrib/easyfloats/doc/preamble/markdown.tex
new file mode 100644
index 0000000000..44662c79aa
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/preamble/markdown.tex
@@ -0,0 +1,153 @@
+% !TeX root = ../easyfloats.tex
+
+% Copyright © 2020 E. Zöllner
+% Alternatively to the terms of the LPPL, at your choice,
+% you can redistribute and/or modify this file under the
+% terms of the Do What The Fuck You Want To Public License, Version 2,
+% as published by Sam Hocevar. See http://www.wtfpl.net/about/.
+
+% Allows markdown like syntax:
+% *emph*
+% `code`
+%
+% If `<code>` is used in an argument <code> cannot contain:
+% - comment characters (percent sign)
+% - unbalanced curly braces
+%
+% If `<code>` is used in a context where fragile commands break
+% (e.g. an entry of the table of contents or list of figures):
+% - control sequences and active characters *after* the first token
+% must be preceded by \string or \protect
+%
+% If `<code>` is used in a pdf string (e.g. in \section):
+% - control sequences *after* the first token must be preceded by \cmd
+% - active characters *after* the first token must be preceded by \string
+% - curly braces *after* the first token must be escaped or preceded by \string
+%
+% If you add prefixes like `\string` or `\cmd` in a normal execution context
+% they will (of course) be treated as code to be displayed.
+% Therefore it may be necessary to pass different code for these three cases:
+% \section[\texorpdfstring
+% {`\emph{page\string~42}`}
+% {`\emph\{page\string~42\}`}]
+% {`\emph{page~42}`}
+%
+% Warning: \section uses \write without \immediate.
+% If the definition of ` is different where it is written
+% e.g. if the next page break is inside of a minted environment
+% you will get into trouble.
+%
+% Warning: With * being an active character you cannot just
+% use starred versions of environments.
+% \starred expands to a * with catcode other:
+% \begin{examplecode\starred}
+% <code>
+% \end{examplecode\starred}
+% I am redefining \@ifstar to recognize active * as well.
+% So starred commands can be used usual.
+%
+% Warning: This should be loaded last so that the
+% category changing code is appended to the hook last.
+% Otherwise there is trouble with minted.
+%
+% depends on
+% \LinkKeyword{<keywordtype>}{<keyword>}<formatmacro>{<text>}
+% from preamble/keydoc.tex
+
+\usepackage{etoolbox}
+
+\newcommand{\starred}{*}
+
+\providecommand{\mintinline}[1]{\verb}%}
+
+\makeatletter
+% An alternative version of \@ifstar which also recognizes an active star.
+% I am not changing \@ifstar here because the active * is defined in \AtBeginDocument.
+% So in the preamble \newcommand would check if the next token is an undefined control sequence token.
+% If it was it would be discarded and it would try to define the next token.
+\let\@markdown@original@ifstar=\@ifstar
+\catcode`*=\active
+\def\@markdown@ifstar#1#2{%
+ \@markdown@original@ifstar
+ {#1}%
+ {%
+ \@ifnextchar*%
+ {\@firstoftwo{#1}}%
+ {#2}%
+ }%
+}
+\@makeother*
+
+\protected\def\IfProtectedContextGobble#1{\ifx\@thirdofthree#1\relax\else#1\fi}
+\newcommand\IfUnprotectedContext{%
+ \IfProtectedContextGobble\@thirdofthree
+ \@firstoftwo
+}
+
+\catcode``=\active
+\newcommand\MarkdownVerb{%
+ \begingroup
+ \@examplecode@setcatcodes
+ \catcode\string``=\active
+ \futurelet \@MarkdownVerb@nexttoken \@MarkdownVerb@do
+}
+\long\def\@MarkdownVerb@do#1`{%
+ \IfKeywordUndefined{}{\detokenize{#1}}{%
+ \ifcat \noexpand\@MarkdownVerb@nexttoken a%
+ \xckey`#1`%
+ \else
+ \xc`#1`%
+ \fi
+ }{%
+ \catcode\string` =10
+ \catcode\string`\^^M=9
+ \def\do{\LinkKeyword{}{\detokenize{#1}}\@firstofone\@firstofone}%
+ \scantokens{\appto\do{{#1}}}%
+ \do
+ }%
+ \endgroup
+}
+\def\StringifyMarkdownVerb#1`{\string#1\noexpand`}
+\def\PdfStringifyMarkdownVerb#1#2`{%
+ \ifcat\relax\noexpand#1\relax
+ \cmd#1%
+ \else
+ \string#1%
+ \fi
+ \detokenize{#2}%
+}
+\@makeother`
+
+\write\@auxout{\string\catcode\string\string``=\active}
+
+% \AfterEndPreamble is important when used with minted
+\AfterEndPreamble{%
+ \catcode`*=\active
+ \appto\dospecials{\do\*}%
+ \scantokens{\def\ActiveAsterisc{*}}%
+ \edef\do{\def\expandonce\ActiveAsterisc##1\expandonce\ActiveAsterisc{\noexpand\emph{##1}}}%
+ \do
+ \let\@ifstar=\@markdown@ifstar
+ %
+ \catcode``=\active
+ %% If I add ` to \dospecials \mintinline will change it to catcode other
+ %% therefore not finding the active ` which marks the end resulting in
+ %% ! Paragraph ended before \minted@inline@ii was complete.
+ %% I could change the definition of \mintinline to expect an other `
+ %% but that would fail when using `...` inside of an argument.
+ %% Whether ` is contained in \dospecials or not does not seem to bother \verb.
+ %\appto\dospecials{\do\`}%
+ \scantokens{%
+ \def`{%
+ \texorpdfstring{%
+ \IfUnprotectedContext%
+ {\MarkdownVerb}
+ {\noexpand`\StringifyMarkdownVerb}%
+ }{%
+ \PdfStringifyMarkdownVerb
+ }%
+ }%
+ }%
+}
+
+\makeatother
diff --git a/macros/latex/contrib/easyfloats/doc/preamble/pdfstring.tex b/macros/latex/contrib/easyfloats/doc/preamble/pdfstring.tex
new file mode 100644
index 0000000000..0a94b3d720
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/preamble/pdfstring.tex
@@ -0,0 +1,35 @@
+% !TeX root = ../easyfloats.tex
+
+% Copyright © 2020 E. Zöllner
+% Alternatively to the terms of the LPPL, at your choice,
+% you can redistribute and/or modify this file under the
+% terms of the Do What The Fuck You Want To Public License, Version 2,
+% as published by Sam Hocevar. See http://www.wtfpl.net/about/.
+
+% Redefines \cmd so that it can be used in a pdf string,
+% e.g. in \section{...}.
+% Please note that additionally to the restrictions
+% named in the ltxdoc documentation you cannot use \cmd{\ }.
+% That is a bug in ltxdoc and unrelated to pdf strings.
+%
+% This must be loaded last, after all other modifications
+% to the \cmd macro.
+
+\let\PdfstringOriginalCmd=\cmd
+\renewcommand{\cmd}[1]{%
+ \texorpdfstring
+ {\PdfstringOriginalCmd{#1}}
+ {\expandafter\PdfstringCmd\string#1\relax}%
+}
+
+\def\PdfstringCmd#1#2#3\relax{%
+ \textbackslash
+ \ifnum\noexpand`\\=\noexpand`#2
+ \textbackslash
+ \else\ifnum\noexpand`\%=\noexpand`#2
+ \%%
+ \else
+ #2%
+ \fi\fi
+ #3%
+}
diff --git a/macros/latex/contrib/easyfloats/doc/undescribed-keywords.tex b/macros/latex/contrib/easyfloats/doc/undescribed-keywords.tex
new file mode 100644
index 0000000000..166f92423e
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/doc/undescribed-keywords.tex
@@ -0,0 +1,247 @@
+% !TeX root = easyfloats.tex
+\makeatletter
+\edef\@thecatcode@asterisc{\the\catcode\string`*}
+\@makeother*
+
+% undescribed packages
+\NoDescribePkg{graphics}
+\NoDescribePkg{subfigure}
+\NoDescribePkg{subfig}
+\NoDescribePkg{trivfloat}
+\NoDescribePkg{capt-of}
+\NoDescribePkg{geometry}
+\NoDescribePkg{fontenc}
+\NoDescribePkg{lmodern}
+
+% standard preamble
+\NoDescribeMacro\documentclass
+\NoDescribeMacro\usepackage
+\NoDescribeMacro\newcommand
+\NoDescribeMacro\AtBeginDocument
+\NoDescribeMacro\floatplacement
+\NoDescribeMacro\makeatletter
+\NoDescribeMacro\makeatother
+\NoDescribeMacro\title
+\NoDescribeMacro\author
+\NoDescribeMacro\typeout
+\NoDescribeMacro\@empty
+\NoDescribeMacro\@tfor
+
+% standard document
+\NoDescribeEnv{document}
+\NoDescribeMacro\section
+\NoDescribeMacro\begin
+\NoDescribeMacro\end
+\NoDescribeEnv{center}
+\NoDescribeMacro\centering
+\NoDescribeMacro\caption
+\NoDescribeMacro\label
+\NoDescribeMacro\texttt
+\NoDescribeMacro\small
+\NoDescribeMacro\href
+\NoDescribeMacro\vdots
+\NoDescribeMacro\quad
+\NoDescribeMacro\qquad
+\NoDescribeMacro\ref
+\NoDescribeMacro\pageref
+\NoDescribeMacro\raggedleft
+\NoDescribeMacro\bigskip
+\NoDescribeMacro\verb
+\NoDescribeMacro\hspace
+\NoDescribeMacro\phantom
+
+% escape sequences
+\NoDescribeMacro\textbackslash
+\NoDescribeMacro\{
+\NoDescribeMacro\}
+\NoDescribeMacro\$
+\NoDescribeMacro\&
+\NoDescribeMacro\#
+\NoDescribeMacro\^
+\NoDescribeMacro\_
+\NoDescribeMacro\textunderscore
+\NoDescribeMacro~
+\NoDescribeMacro\%
+
+% ambiguous values
+% e.g. placement, subpage outer pos, subcaptionbox inner pos
+\NoDescribeVal{htbp}
+\NoDescribeVal{h}
+\NoDescribeVal{t}
+\NoDescribeVal{b}
+\NoDescribeVal{p}
+\NoDescribeVal{H}
+\NoDescribeVal{h!}
+\NoDescribeVal{c}
+\NoDescribeVal{T}
+\NoDescribeVal{B}
+\NoDescribeVal{auto}
+\NoDescribeVal{Auto}
+\NoDescribeVal{l}
+\NoDescribeVal{r}
+\NoDescribeVal{s}
+\NoDescribeVal{tbp}
+\NoDescribeVal{lof}
+\NoDescribeVal{lot}
+\NoDescribeVal{cl}
+
+% float style values
+\NoDescribeVal{plain}
+\NoDescribeVal{plaintop}
+\NoDescribeVal{ruled}
+\NoDescribeVal{boxed}
+
+% plain TeX
+\NoDescribeMacro\csname
+\NoDescribeMacro\number
+
+% units
+\NoDescribeVal{cm}
+\NoDescribeVal{pt}
+\NoDescribeVal{em}
+\NoDescribeVal{ex}
+
+% this package
+\NoDescribePkg{easyfloats}
+\NoDescribeVal{all}
+\NoDescribeKey{graphic}% "prefix `graphic`"
+\NoDescribeKey{<options>}
+\NoDescribeKey{/object/<options>}
+\NoDescribeMacro\object@tableBreakText
+
+% tables
+\NoDescribeEnv{table}
+\NoDescribeEnv{tabular}
+\NoDescribeEnv{tabular*}
+\NoDescribeEnv{tabularx}
+\NoDescribeMacro\\
+\NoDescribeMacro\multicolumn
+\NoDescribeMacro\hline
+
+% booktabs
+\NoDescribeMacro\toprule
+\NoDescribeMacro\midrule
+\NoDescribeMacro\bottomrule
+
+% array
+\NoDescribeMacro\newcolumntype
+\NoDescribeMacro\arraybackslash
+
+% longtable
+\NoDescribeEnv{longtable}
+\NoDescribeMacro\LT@cols
+
+% graphics
+\NoDescribeEnv{figure}
+\NoDescribeMacro\includegraphics
+\NoDescribeMacro\linewidth
+\NoDescribeMacro\listoffigures
+\NoDescribeMacro\resizebox
+
+% float
+\NoDescribeMacro\restylefloat
+\NoDescribeMacro\floatstyle
+\NoDescribeMacro\floatname
+\NoDescribeKey{width}
+
+% (sub)caption
+\NoDescribeMacro\captionsetup
+\NoDescribeMacro\DeclareCaptionJustification
+\NoDescribeMacro\DeclareCaptionSubType
+\NoDescribeMacro\phantomcaption
+\NoDescribeEnv{subfigure}
+\NoDescribeEnv{subtable}
+\NoDescribeMacro\subcaptionbox
+\NoDescribeMacro\captionof
+
+% placeins
+\NoDescribePkgoptn{section}
+\NoDescribeMacro\FloatBarrier
+
+% xcolor
+\NoDescribeMacro\colorlet
+\NoDescribeMacro\rowcolor
+\NoDescribeMacro\rowcolors
+\NoDescribePkgoptn{table}
+
+% siunitx
+\NoDescribeMacro\si
+\NoDescribeMacro\degree
+\NoDescribeVal{S}
+
+% plain
+\NoDescribeMacro\def
+\NoDescribeMacro\catcode
+\NoDescribeMacro\active
+\NoDescribeMacro\the
+\NoDescribeMacro\string
+\NoDescribeMacro\par
+\NoDescribeMacro\ifx
+\NoDescribeMacro\else
+\NoDescribeMacro\fi
+\NoDescribeMacro\relax
+\NoDescribeMacro\begingroup
+\NoDescribeMacro\endgroup
+\NoDescribeMacro\scantokens
+
+% math
+\NoDescribeMacro\sin
+\NoDescribeMacro\cos
+\NoDescribeMacro\tan
+\NoDescribeMacro\pm
+\NoDescribeMacro\infty
+\NoDescribeMacro\langle
+\NoDescribeMacro\rangle
+
+% tikz
+\NoDescribeEnv{tikzpicture}
+\NoDescribeMacro\tikzset
+\NoDescribeMacro\draw
+\NoDescribeMacro\node
+\NoDescribeMacro\foreach
+
+% cleveref
+\NoDescribeMacro\cref
+\NoDescribeMacro\cpageref
+\NoDescribePkgoptn{nameinlink}
+\NoDescribePkgoptn{noabbrev}
+
+% hyperref
+\NoDescribeMacro\url
+\NoDescribePkgoptn{pdfusetitle}
+
+% pgfkeys
+\NoDescribeMacro\pgfkeys
+\NoDescribeVal{true}
+\NoDescribeVal{false}
+\NoDescribeHandler{.expand once}
+
+% keyval
+\NoDescribeMacro\setkeys
+
+% custom
+\NoDescribeMacro\pminfty
+\NoDescribeMacro\charsym
+\NoDescribeMacro\charname
+\NoDescribeMacro\colspec
+\NoDescribeMacro\n
+\NoDescribeMacro\i
+\NoDescribeMacro\w
+\NoDescribeEnv{tikzobject}
+\NoDescribeEnv{tikz3dobject}
+
+% not used directly
+\NoDescribeMacro\center
+\NoDescribeMacro\endcenter
+\NoDescribeMacro\refstepcounter
+\NoDescribeMacro\ignorespacesafterend
+\NoDescribeMacro\@endparenv
+\NoDescribeMacro\caption@iftop
+
+% not existing
+\NoDescribeMacro\endcentering
+\NoDescribeMacro\|
+\NoDescribeMacro|
+
+\catcode\string`*=\@thecatcode@asterisc
+\makeatother
diff --git a/macros/latex/contrib/easyfloats/easyfloats-file-list.txt b/macros/latex/contrib/easyfloats/easyfloats-file-list.txt
new file mode 100644
index 0000000000..44c333bcb5
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/easyfloats-file-list.txt
@@ -0,0 +1,40 @@
+This work is distributed under the LaTeX Project Public License, version 1.3 or later. The license is contained in the file license.txt.
+The preamble of the documentation may alternatively, at your choice, be reused under the terms of the WTFPL as published by Sam Hocevar (http://www.wtfpl.net/about/).
+This work consists of the following files:
+
+easyfloats-file-list.txt
+
+easyfloats.ins
+easyfloats.dtx
+easyfloats.sty
+README.md
+DEPENDS.txt
+
+doc/easyfloats.tex
+doc/easyfloats.pdf
+doc/easyfloats.bib
+doc/links.tex
+doc/undescribed-keywords.tex
+doc/content/bug-reports-and-contributions.tex
+doc/content/documentation.tex
+doc/content/examples.tex
+doc/content/installation.tex
+doc/content/license.tex
+doc/content/motivation.tex
+doc/content/other-packages.tex
+doc/content/names.tex
+doc/content/titlepage.tex
+doc/content/used-packages.tex
+doc/preamble/bibliography.tex
+doc/preamble/description-links.tex
+doc/preamble/examplecode.tex
+doc/preamble/keydoc.tex
+doc/preamble/link.tex
+doc/preamble/macros.tex
+doc/preamble/markdown.tex
+doc/preamble/pdfstring.tex
+doc/lexer/latex_atletter.py
+
+There are automated tests to test this work at
+https://gitlab.com/erzo/latex-easyfloats/-/tree/master/test
+These tests are licensed under the WTFPL http://www.wtfpl.net/about/.
diff --git a/macros/latex/contrib/easyfloats/easyfloats.dtx b/macros/latex/contrib/easyfloats/easyfloats.dtx
new file mode 100644
index 0000000000..eea9932e40
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/easyfloats.dtx
@@ -0,0 +1,1897 @@
+% easyfloats.dtx
+% Copyright 2020 E. Zöllner
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is E. Zöllner.
+%
+% This work consists of the files listed in easyfloats-file-list.txt.
+% The official git repository is https://gitlab.com/erzo/latex-easyfloats
+
+
+% dtx files (documented tex files) allow "to put the user documentation,
+% code documentation and code itself in one place."
+% https://www.texdev.net/2009/10/05/the-dtx-format/
+% see also
+% https://www.texdev.net/2009/10/06/a-model-dtx-file/
+% https://ctan.org/pkg/dtxtut
+%
+% This file is a lot simpler, it contains nothing but the package code with comments.
+% Technically it could be used instead of the sty file.
+% easyfloats.ins reads this file, strips comments and indentation using docstrip
+% and writes the result to the sty file in order to make it faster.
+
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{easyfloats}[2020/12/20 v1.0.0]
+
+
+% ========== options ==========
+
+% load either graphicx or graphbox
+\newif\ifesf@loadgraphics
+% load graphbox
+\newif\ifesf@loadgraphbox
+% load longtable
+\newif\ifesf@loadlongtable
+% load array
+\newif\ifesf@loadarray
+% load booktabs
+\newif\ifesf@loadbooktabs
+% print a warning if figure or table is used directly
+\newif\ifesf@warnstandardfloats
+\esf@warnstandardfloatstrue
+
+\DeclareOption{graphicx}{%
+ \esf@loadgraphicstrue
+ \esf@loadgraphboxfalse
+}
+\DeclareOption{graphbox}{%
+ \esf@loadgraphicstrue
+ \esf@loadgraphboxtrue
+}
+\DeclareOption{nographic}{%
+ \esf@loadgraphicsfalse
+ \esf@loadgraphboxfalse
+}
+
+\DeclareOption{longtable}{%
+ \esf@loadlongtabletrue
+}
+\DeclareOption{nolongtable}{%
+ \esf@loadlongtablefalse
+}
+
+\DeclareOption{booktabs}{%
+ \esf@loadbooktabstrue
+}
+\DeclareOption{nobooktabs}{%
+ \esf@loadbooktabsfalse
+}
+
+\DeclareOption{array}{%
+ \esf@loadarraytrue
+}
+\DeclareOption{noarray}{%
+ \esf@loadarrayfalse
+}
+
+% If I spell this with spaces LaTeX complains:
+% > Unknown option `allowstandardfloats'
+% It seems spaces are ignored by \usepackage
+% but not by \DeclareOption.
+% clsguide says:
+% > Note that the name of an option should contain
+% > only those characters allowed in a ‘LaTeX name’
+% So maybe it's better to not rely on that behaviour.
+\DeclareOption{allowstandardfloats}{%
+ \esf@warnstandardfloatsfalse
+}
+
+%\DeclareOption*{\objectset{\CurrentOption}}
+
+
+\ExecuteOptions{graphicx, array, booktabs}
+
+% \relax is in definition order, starred is in specification order
+\ProcessOptions\relax
+
+
+% ========== required packages ==========
+
+\RequirePackage{etoolbox}
+\RequirePackage{pgfkeys}
+
+% The float package defines the placement option H so that I don't need to
+% provide a separate inline/floating option and deal with spacing and captions
+% of inline objects. I can just use the usual environments like always.
+% It also defines float styles which move the caption to the top or bottom of
+% the object. It makes things easier for me because I can just insert the
+% caption somewhere independent of the object type.
+% I am *not* making use of it's capability to define new float types.
+% Please note that \floatplacement is overridden if the placement option is non-empty.
+\RequirePackage{float}
+
+% By default there is no space between a table and it's caption (at least with
+% the standard document classes). The caption package fixes this.
+% The caption package defines the \phantomcaption command (see object environment).
+% The caption package is required by the subcaption package.
+% It also gives the possibility to customize the layout of captions. But I am
+% leaving it to the user to do this if desired.
+\RequirePackage{caption}
+
+% subobjects
+\RequirePackage{environ}
+
+% "Die Pakete subfigure.sty und subfig.sty werden nicht mehr weiterentwickelt
+% und sind inkompatibel zu einigen aktuelleren Paketen wie hyperref.sty.
+% Als Ersatz bei Kompatibilitätsproblemen empfiehlt sich subcaption.sty."
+% (l2tabu, Version 2.4 vom 3. Februar 2016, Seite 16)
+\RequirePackage{subcaption}
+
+% \includegraphics
+\ifesf@loadgraphics
+ \ifesf@loadgraphbox
+ % extension for graphicx
+ \RequirePackage{graphbox}
+ \else
+ \RequirePackage{graphicx}
+ \fi
+\fi
+
+% Set long tables which are not floating
+% but can span across page breaks.
+% Requires several runs.
+\ifesf@loadlongtable
+ \RequirePackage{longtable}
+\fi
+
+% Additional features in column specification like <, >, !.
+% Changes also the behaviour of rules but that is irrelevant if you use booktabs.
+\ifesf@loadarray
+ \RequirePackage{array}
+\fi
+
+% Macros for formating tables.
+\ifesf@loadbooktabs
+ \RequirePackage{booktabs}
+\fi
+
+
+% ========== init ==========
+
+\newif\ifobject@directkeys
+\object@directkeystrue
+
+\newif\if@inobject
+\newif\if@firstsubobject
+\newif\if@containssubobjects
+
+\floatstyle{plaintop}
+\restylefloat{table}
+\floatstyle{plain}
+\restylefloat{figure}
+
+
+% ========== hooks ==========
+
+\newif\ifobject@isgraphic
+
+\newcommand{\object@hook}{}
+\newcommand{\subobject@hook}{}
+\newcommand{\object@graphic@hook}{}
+
+\newrobustcmd{\AtBeginObject}[1]{\appto\object@hook{#1}}
+\newrobustcmd{\AtBeginSubobject}[1]{\appto\subobject@hook{#1}}
+\newrobustcmd{\AtBeginGraphicObject}[1]{\appto\object@graphic@hook{#1}}
+
+
+% ========== key management ==========
+
+\newcommand{\esf@ifpgfkeyhasvalue}[1]{% #1: key, #2: executed if #1 is set, #3: executed if #1 has not been set
+ % WARNING: Trying to get the value defines the key to \relax if it
+ % was undefined (because of \csname). Setting the key to \relax is
+ % discouraged because it causes inconsistent behaviour [TikZ & PGF
+ % Manual v3.1.5b page 976 \pgfkeysifdefined].
+ % With eTeX: \pgfkeysifdefined will report the key as *defined*.
+ % Without eTeX: \pgfkeysifdefined will report the key as *un*defined.
+ % Therefore don't use this macro with undefined keys. If you do use
+ % it with an undefined key it will be treated as if it has been set [!].
+ \pgfkeysgetvalue{#1}{\esf@tmp@value}%
+ \ifx \pgfkeysnovalue@text \esf@tmp@value
+ \expandafter \@secondoftwo
+ \else
+ \expandafter \@firstoftwo
+ \fi
+}
+
+\newcommand{\esf@ifpgfkeyexists}[3]{%
+ % I cannot use \@firstoftwo and \@secondoftwo because \pgfkeysifdefined
+ % does not close the if statement before expanding the 2nd and 3rd argument
+ \pgfkeysifdefined{#1}
+ {#2}
+ {\pgfkeysifdefined{#1/.@cmd}{#2}{#3}}%
+}
+\newcommand{\esf@ifpgfkeyrequiresvalue}[3]{% #1: key, #2: then block, #3: else block
+ \pgfkeysifdefined{#1/.@def}{%
+ \pgfkeysgetvalue{#1/.@def}{\esf@tmp@value}%
+ \ifx \esf@tmp@value \pgfkeysvaluerequired
+ #2%
+ \else
+ #3%
+ \fi
+ }{%
+ #3%
+ }%
+}
+
+\newcommand{\esf@ifkeyvalkeyexists}[4]{% #1: family, #2: key, #3: then block, #4: else block
+ % \ifcsdef would treat \relax as defined, \ifcsundef does not
+ \ifcsundef{KV@#1@#2}{#4}{#3}%
+}
+\newcommand{\esf@ifkeyvalkeyrequiresvalue}[2]{% #1: family, #2: key, #3: then block, #4: else block
+ % \ifcsdef would treat \relax as defined, \ifcsundef does not
+ \ifcsundef{KV@#1@#2@default}%
+}
+
+\newcommand{\esf@pgfkeyscopyvalue}[2]{% #1: key to be set, #2 key to take the value from
+ % WARNING: the order of arguments is opposite of the shell command cp
+ % because all pgf macros take the key they operate on as first argument.
+ \pgfkeysgetvalue{#2}{\esf@tmp@value}%
+ \pgfkeyslet{#1}{\esf@tmp@value}%
+}
+\newcommand{\esf@pgfkeysvalueappend}[2]{% #1: key to be set, #2 value to be appended
+ \pgfkeysgetvalue{#1}{\esf@tmp@value}%
+ \appto\esf@tmp@value{#2}%
+ \pgfkeyslet{#1}{\esf@tmp@value}%
+}
+
+\pgfqkeys{/handlers}{%
+ % ------- recommended -------
+ .esf@recommended/.code={%
+ \esf@ifpgfkeyhasvalue{\pgfkeyscurrentpath}{%
+ % do nothing
+ }{%
+ \edef\esf@tmp@path{\pgfkeyscurrentpath}%
+ \PackageWarning{easyfloats}{Recommended key '\strippath\esf@tmp@path' not given. #1\ifx\pgfkeysnovalue#1\@empty\else. \fi This warning occured}%
+ }%
+ },
+ %
+ % ------- mandatory -------
+ .esf@mandatory/.code={%
+ \esf@ifpgfkeyhasvalue{\pgfkeyscurrentpath}{%
+ % do nothing
+ }{%
+ \edef\esf@tmp@path{\pgfkeyscurrentpath}%
+ \PackageError{easyfloats}{Mandatory key '\strippath\esf@tmp@path' not given\ifx\pgfkeysnovalue#1\@empty\else. \fi #1}{}%
+ }%
+ },
+ %
+ %
+ % ------- save unknown -------
+ % I can't use /pgf/keyfilters/defined with /pgf/key filter handlers/append filtered to
+ % because that appends full keys which are incompatible with keyval.
+ .esf@exec on unknown/.code={% #1: control sequence taking two args: key and value
+ \pgfkeysalso{\pgfkeyscurrentpath/.unknown/.code=% ##1: value
+ #1{\pgfkeyscurrentname}{##1}%
+ }%
+ },
+ %
+ % ------- also from -------
+ .esf@also from/.code={% #1: expandable control sequence containing options
+ \pgfkeysalsofrom{#1}%
+ },
+ %
+ % ------- debugging -------
+ .show boolean/.code={%
+ \begingroup
+ \renewcommand\pgfkeys@handle@boolean[2]{% ##1: if name, ##2: value
+ \expandafter \show \csname if##1\endcsname
+ }%
+ \edef\esf@tmp@path{\pgfkeyscurrentpath}%
+ \pgfkeysalso{\esf@tmp@path}%
+ \endgroup
+ },
+ .show boolean/.value forbidden,
+}
+
+\newcommand{\AppendToOptionsList}[3]{% #1: macro to append to, #2: key, #3: value
+ \ifdefvoid#1%
+ {}%
+ {\appto#1{, }}%
+ \eappto#1{#2}%
+ \ifx \pgfkeysnovalue #3\relax
+ % do nothing
+ \else
+ \appto#1{={#3}}%
+ \fi
+}
+
+\newcommand{\strippath}[1]{%
+ \expandafter\strippath@do#1/\pgfeov
+}
+\def\strippath@do#1/#2\pgfeov{%
+ \if\relax\detokenize{#2}\relax
+ #1%
+ \else
+ \strippath@do#2\pgfeov
+ \fi
+}
+
+
+% ========== other helper ==========
+
+\newcommand{\IfEnvironmentExistsOrIsEmpty}[1]{% #1: environment name, #2: then block, #3: else block
+ \ifstrempty{#1}{%
+ \let\IfEnvironmentExistsOrIsEmpty@do=\@firstoftwo
+ }{\IfEnvironmentExists{#1}{%
+ \let\IfEnvironmentExistsOrIsEmpty@do=\@firstoftwo
+ }{%
+ \let\IfEnvironmentExistsOrIsEmpty@do=\@secondoftwo
+ }}%
+ \IfEnvironmentExistsOrIsEmpty@do
+}
+
+\newcommand{\IfEnvironmentExists}[3]{% #1: environment name, #2: then block, #3: else block
+ \ifcsmacro{#1}{%
+ % I am not checking the existence of end#1 because for tabularx that is \relax.
+ #2%
+ }{%
+ #3%
+ }%
+}
+
+
+% \patchcmd replaces the first occurence only.
+% therefore I am recursing as long as patching was successful
+% to make sure that each occurrence was replaced.
+% it is important to replace with \textunderscore instead of \_
+% because otherwise it would replace \_ by \\_ and loop infinitely.
+\newcommand{\PatchUnderscore}[1]{% #1: macro
+ \patchcmd{#1}
+ {_}{\textunderscore}
+ {\PatchUnderscore#1}{}%
+}
+
+
+% ========== object ==========
+
+\newif\ifobject@warnotherenv
+\newif\ifobject@warnnolabel
+\newif\ifobject@warnnocaption
+\newif\ifobject@showenv
+
+% ---------- set object options ----------
+
+\newrobustcmd{\objectset}{% #1: options
+ \@ifnextchar [%]
+ \objectset@appendtostyles
+ \objectset@direct
+}
+
+\newcommand{\objectset@direct}{% #1: options
+ \pgfqkeys{/object}%
+}
+
+\newcommand{\GobbleLeadingSpaceIn}[1]{\edef#1{\expandafter\@firstofone#1}}
+
+\def\objectset@appendtostyles[#1]#2{% #1: style #2: options
+ \pgfkeyssetvalue{/object.check/env}{}%
+ \pgfqkeys{/object.check}{%
+ .esf@exec on unknown=\AppendOptionToObjectStyleGroups{#1},
+ #2%
+ }%
+}
+
+% ---------- check object options ----------
+
+\newcommand{\CheckObjectOption}[2]{% #1: key, #2: value, #3: executed if valid
+ % if #3 is *not* executed an error message is printed
+ %
+ % It is important to reset it at the beginning
+ % because the \Check* macros do not expand any
+ % of the two arguments if they throw an error.
+ \let\CheckObjectOption@handleArg=\@gobble
+ \esf@ifpgfkeyexists{/object/#1}{%
+ \esf@ifpgfkeyrequiresvalue{/object/#1}{%
+ \ifx \pgfkeysnovalue #2\relax
+ \PackageError{easyfloats}{The key '#1' requires a value. I am going to ignore this key}{}%
+ \else
+ \let\CheckObjectOption@handleArg=\@firstofone
+ \fi
+ }{%
+ \let\CheckObjectOption@handleArg=\@firstofone
+ }%
+ }{\CheckObjectGraphicOption{#1}{#2}{%
+ \let\CheckObjectOption@handleArg=\@firstofone
+ }{\CheckObjectEnvArgs{#1}{#2}{%
+ \let\CheckObjectOption@handleArg=\@firstofone
+ }{%
+ \PackageError{easyfloats}{I do not know the key '#1' and I am going to ignore it. Perhaps you misspelled it}{}%
+ }}}%
+ \CheckObjectOption@handleArg
+}
+
+
+% ---------- available object options ----------
+
+\pgfqkeys{/object}{%
+ %
+ % ------- mandatory -------
+ %
+ % The environment to use (figure|table)
+ % An empty value is allowed for longtable
+ % but that is intentionally left undocumented.
+ type/.initial,
+ type/.value required,
+ type/.code=\@ifundefined{fps@#1}
+ {\PackageError{easyfloats}{Invalid value for key 'type': '#1'. I am going to ignore this option}{}}
+ {\pgfkeyssetvalue{/object/type}{#1}},
+ %
+ % Where to place the caption, see float package (plain|plaintop|ruled|boxed)
+ % If empty do *not* perform a restyle.
+ % This is ignored if type is empty.
+ float style/.initial=,
+ float style/.value required,
+ %
+ %
+ % ------- recommended -------
+ %
+ % The caption displayed above or below the content (depending on the float style).
+ % There is *no* dot added automatically behind it.
+ caption/.initial,
+ caption/.value required,
+ caption/.prefix code={%
+ \esf@ifpgfkeyhasvalue{/object/caption}{%
+ \PackageWarning{easyfloats}{Overwriting existing value for caption with "#1"}%
+ }{%
+ % ok
+ }%
+ },
+ %
+ % A label which can be referenced by e.g. \ref{label} or \refpage{label}
+ label/.initial,
+ label/.value required,
+ label/.prefix code={%
+ \esf@ifpgfkeyhasvalue{/object/label}{%
+ \PackageWarning{easyfloats}{Overwriting existing value for label with "#1"}%
+ }{%
+ % ok
+ }%
+ },
+ %
+ %
+ % ------- optional -------
+ %
+ % Where to put the float on the page ([htbp]+ | H | <empty>)
+ % (empty means to *not* pass the optional placement argument to the foating environment)
+ % This is more powerful than \floatplacement because it allows H.
+ placement/.initial=,
+ placement/.value required,
+ %
+ % The caption used in the list of figures/list of tables
+ list caption/.initial,
+ list caption/.value required,
+ %
+ % An addition to the caption (at the object only, not in a list)
+ details/.initial=,
+ details/.value required,
+ %
+ details sep/.initial=.\space,
+ details sep/.value required,
+ %
+ % An additional label which can be used synonymously to label.
+ % If this key is given several times, only the last one will have an effect.
+ add label/.initial,
+ add label/.value required,
+ %
+ % TeX code which is inserted at the beginning of the type environment
+ align/.initial=\centering,
+ align/.value required,
+ %
+ % TeX code which is inserted at the beginning of the type environment (before align)
+ exec/.initial=,
+ exec/.value required,
+ exec +/.code=\esf@pgfkeysvalueappend{/object/exec}{#1},
+ exec +/.value required,
+ exec+/.forward to=/object/exec +,
+ exec+/.value required,
+ %
+ % An additional inner environment to wrap the content in like tabular, tabularx, tikzpicture
+ env/.code=\IfEnvironmentExistsOrIsEmpty{#1}
+ {\pgfkeyssetvalue{/object/env}{#1}}%
+ {\PackageError{easyfloats}{Environment #1 which you passed to the key 'env' does not exist}{}},
+ env/.value required,
+ env=,
+ %
+ % Specify that this object contains subobjects.
+ % This means that if env has a non-empty value
+ % this value is used for subobject env
+ % and env is set to an empty value.
+ sub/.forward to=/object/contains subobjects,
+ contains subobjects/.is if = @containssubobjects,
+ %
+ %
+ % ------- tables -------
+ % first head and last foot are optional but if they are given they have priority.
+ % head and foot always need to have a value even if it's just empty.
+ %
+ first head/.initial,
+ first head/.value required,
+ %
+ head/.initial=,
+ head/.value required,
+ %
+ foot/.initial=,
+ foot/.value required,
+ %
+ last foot/.initial,
+ last foot/.value required,
+ %
+ table head style/.code=\pgfkeysdef{/object/table head}{\pgfqkeys{/object}{#1}},
+ table head style/.value required,
+ table head style={%
+ first head =
+ \toprule
+ #1 \\
+ \midrule,
+ head =
+ #1 \\
+ \midrule,
+ foot =
+ \midrule
+ \ifx\object@tableBreakText\@empty
+ \else
+ \multicolumn{\the\LT@cols}{r@\relax}{\object@tableBreakText}%
+ \fi,
+ last foot =
+ \bottomrule,
+ },
+ %
+ % text displayed in the non-last foot of a table
+ table break text/.code=\def\object@tableBreakText{#1},
+ table break text/.value required,
+ table break text = (to be continued),
+ %
+ %
+ % ------- warnings -------
+ %
+ warn no caption/.is if=object@warnnocaption,
+ warn no caption=true,
+ %
+ warn no label/.is if=object@warnnolabel,
+ warn no label=true,
+ %
+ warn other env/.is if=object@warnotherenv,
+ warn other env=false,
+ %
+ %
+ % ------- debugging -------
+ %
+ show env args/.is if=object@showenv,
+ show env args=false,
+ %
+ %
+ % ------- subobject -------
+ % .value required is code duplication but
+ % it is necessary for \esf@ifpgfkeyrequiresvalue.
+ % It also changes the error message to report
+ % this key instead of the linked key.
+ %
+ subobject linewidth/.forward to=/subobject/linewidth,
+ subobject linewidth/.value required,
+ subobject env/.forward to=/subobject/env,
+ subobject env/.value required,
+ %
+ subcaptionbox/.forward to=/subobject/subcaptionbox,
+ subcaptionbox/.value forbidden,
+ subpage/.forward to=/subobject/subpage,
+ subpage/.value forbidden,
+ %
+ subcaptionbox inner pos/.forward to=/subobject/subcaptionbox inner pos,
+ subcaptionbox inner pos/.value required,
+ %
+ subpage inner pos/.forward to=/subobject/subpage inner pos,
+ subpage inner pos/.value required,
+ subpage height/.forward to=/subobject/subpage height,
+ subpage height/.value required,
+ subpage outer pos/.forward to=/subobject/subpage outer pos,
+ subpage outer pos/.value required,
+ subpage align/.forward to=/subobject/subpage align,
+ subpage align/.value required,
+ %
+ subobject sep/.forward to=/subobject/sep,
+ subobject sep/.value required,
+ %
+ subobject hor/.forward to=/subobject/hor,
+ %subobject hor/ value is allowed but not necessary
+ subobject hor sep/.forward to=/subobject/hor sep,
+ subobject hor sep/.value required,
+ subobject hor sep+/.forward to=/subobject/hor sep+,
+ subobject hor sep+/.value required,
+ subobject hor sep +/.forward to=/subobject/hor sep +,
+ subobject hor sep +/.value required,
+ %
+ subobject ver/.forward to=/subobject/ver,
+ %subobject ver/ value is allowed but not necessary
+ subobject ver sep/.forward to=/subobject/ver sep,
+ subobject ver sep/.value required,
+ subobject ver sep+/.forward to=/subobject/ver sep+,
+ subobject ver sep+/.value required,
+ subobject ver sep +/.forward to=/subobject/ver sep +,
+ subobject ver sep +/.value required,
+ %
+ subobject exec/.forward to=/subobject/exec,
+ subobject exec/.value required,
+ subobject exec+/.forward to=/subobject/exec+,
+ subobject exec+/.value required,
+ subobject exec +/.forward to=/subobject/exec +,
+ subobject exec +/.value required,
+ %
+ subobject warn no caption/.forward to=/subobject/warn no caption,
+ %value is allowed but not necessary
+ subobject warn no label/.forward to=/subobject/warn no label,
+ %value is allowed but not necessary
+ %
+ %
+ % ------- unknown handler / key patterns -------
+ %
+ % Two key patterns are defined to automatically pass arguments to the environments specified by the env option if the environment name matches.
+ % `<envname> arg` is for a single mandatory (undelimited) argument. It is wrapped in braces.
+ % `<envname> args` is not wrapped in braces and can be used for several arguments or an optional argument.
+ % It cannot be used for a single mandatory argument because \pgfkeys strips several levels of braces.
+ .unknown/.code={%
+ \ObjectProcessKeyPattern{\pgfkeyscurrentname}{#1}{%
+ \pgfkeysgetvalue{/object/.really unknown/.@cmd}{\esf@tmp@err}%
+ \esf@tmp@err#1\pgfeov
+ }%
+ },
+ % Setting an unknown key handler shall not override env args but set an additional unknown handler.
+ .unknown/.code/.code={%
+ \pgfkeysdef{/object/.really unknown}{#1}%
+ },
+ .really unknown/.code={%
+ \edef\do{\noexpand\pgfkeys{/errors/unknown key={\pgfkeyscurrentkey}{\unexpanded{#1}}}}%
+ \do
+ },
+}
+
+\pgfqkeys{/object.check}{%
+ env/.initial=,
+ env/.code={%
+ \ifx \pgfkeysnovalue #1\relax
+ \PackageError{easyfloats}{The key 'env' requires a value. I am going to ignore this key}{}%
+ \else
+ \IfEnvironmentExistsOrIsEmpty{#1}{%
+ % set env so that I can use the value to check args
+ \pgfkeyssetvalue{/object.check/env}{#1}%
+ % call the unknown handler which appends it to the style
+ % unlike '/errors/unknown key' '.unknown' does not take the key as argument
+ % but it may require \pgfkeyscurrentpath and \pgfkeyscurrentname to be set
+ \pgfkeys@split@path
+ \pgfkeysvalueof{\pgfkeyscurrentpath/.unknown/.@cmd}#1\pgfeov
+ }{%
+ \PackageError{easyfloats}{Environment #1 which you passed to the key 'env' does not exist}{}%
+ }%
+ \fi
+ },
+ type/.code={%
+ % set type so that I can use the value in \NewObjectStyleGroup
+ \pgfkeyssetvalue{/object.check/type}{#1}%
+ % call the unknown handler which appends it to the style
+ % unlike '/errors/unknown key' '.unknown' does not take the key as argument
+ % but it may require \pgfkeyscurrentpath and \pgfkeyscurrentname to be set
+ \pgfkeys@split@path
+ % Without the braces I got "Undefined control sequence. [...] \pgfeov"
+ % \pgfkeys strips several levels of braces around an argument.
+ % (I have already experienced that while experimenting with <env> args.
+ % That is the reason why I defined two separate keys arg and args.)
+ % I am assuming that because of that the \pgfeov ended the argument of some
+ % pgfkeys internal macro too early causing undefined behavior.
+ % I am preventing this from happening by hiding \pgfeov inside of braces
+ % which are inside of the argument so they won't get stripped.
+ % I put \@firstofone in front of them so that they do not function as a group.
+ \@firstofone{\pgfkeysvalueof{\pgfkeyscurrentpath/.unknown/.@cmd}#1\pgfeov}%
+ },
+}
+
+% ---------- process key patterns ----------
+
+\newcommand{\ObjectProcessKeyPattern}[2]{% #1: key, #2: value, #3: else
+ \expandafter\ObjectProcessKeyPattern@expandedkey\expandafter{#1}{#2}%
+}
+
+\newcommand{\ObjectProcessKeyPattern@expandedkey}[2]{% #1: key, #2: value, #3: else
+ \ObjectProcessGraphicOption@expandedkey{#1}{#2}{%
+ \@gobble
+ }{%
+ \ObjectProcessArgs@expandedkey{#1}{#2}\relax
+ }%
+}
+
+% ---------- process graphic options ----------
+
+\ifesf@loadgraphics
+
+% do not confuse this with \CheckGraphicobjectOption
+\newcommand{\CheckObjectGraphicOption}[2]{% #1: key, #2: value
+ % #3: executed if valid, #4: executed if *not* a graphic option
+ % Please note that if the option looks like a graphic option
+ % but is not valid neither #3 nor #4 is executed.
+ % Instead an appropriate error message is printed.
+ \begingroup
+ \let\ObjectCheckGraphicOption@aftergroup=\@gobbletwo
+ \renewcommand{\AppendToOptionsList}[3]{%
+ \let\ObjectCheckGraphicOption@aftergroup=\@firstoftwo
+ }%
+ \ObjectProcessGraphicOption{#1}{#2}{%
+ \let\ObjectCheckGraphicOption@aftergroup=\@secondoftwo
+ }%
+ \expandafter
+ \endgroup
+ \ObjectCheckGraphicOption@aftergroup
+}
+
+\newcommand{\ObjectProcessGraphicOption}[2]{% #1: key, #2: value
+ % #3: executed if *not* a graphic option
+ \expandafter\ObjectProcessGraphicOption@expandedkey\expandafter{#1}{#2}\relax
+}
+\newcommand{\ObjectProcessGraphicOption@expandedkey}[2]{% #1: key, #2: value
+ % #3: executed if graphic option, #4: executed if *not* a graphic option
+ \ObjectProcessGraphicOption@checkoption#1graphic \pgfeov{#2}%
+}
+\long\def\ObjectProcessGraphicOption@checkoption#1graphic #2\pgfeov#3{% #1: empty if graphic option, #2: key, #3: value
+ % #4: executed if graphic option, #5: executed if *not* a graphic option
+ \def\esf@tmp@arg{#1}%
+ \ifx \esf@tmp@arg \@empty
+ \edef\esf@opgoco@key{\StripGraphicSpace#2\pgfeov}%
+ \CheckGraphicobjectOption{\esf@opgoco@key}{#3}{%
+ \AppendGraphicobjectOption{\esf@opgoco@key}{#3}%
+ }%
+ \expandafter \@firstoftwo
+ \else
+ \expandafter \@secondoftwo
+ \fi
+}
+
+\def\StripGraphicSpace#1graphic \pgfeov{#1}
+
+\else %\ifesf@loadgraphics
+
+\newcommand{\CheckObjectGraphicOption}[2]{% #1: key, #2: value
+ % #3: executed if valid, #4: executed if *not* a graphic option
+ \@secondoftwo
+}
+
+\newcommand{\ObjectProcessGraphicOption@expandedkey}[2]{% #1: key, #2: value
+ % #3: executed if graphic option, #4: executed if *not* a graphic option
+ \@secondoftwo
+}
+
+\fi %\ifesf@loadgraphics
+
+% ---------- process env args ----------
+
+\newcommand{\@object@envkey}{/object/env}
+\newcommand{\CheckObjectEnvArgs}[2]{% #1: key, #2: value
+ % #3: executed if valid, #4: executed if *not* an <env> arg
+ % Please note that if the option looks like an <env> arg
+ % but is not valid neither #3 nor #4 is executed.
+ % Instead an appropriate error message is printed.
+ \begingroup
+ \edef\ObjectCheckArgs@key{#1}%
+ \let\ObjectCheckArgs@aftergroup=\@gobbletwo
+ \pgfkeysgetvalue{/object.check/env}{\esf@tmp@env}%
+ \pgfkeys{\@object@envkey/.expand once=\esf@tmp@env}%
+ \renewcommand{\ObjectDefineEnvargs}[2]{% ##1: env name, ##2: arguments
+ \let\ObjectCheckArgs@aftergroup=\@firstoftwo
+ }%
+ \ObjectProcessArgs{\ObjectCheckArgs@key}{#2}{%
+ \let\ObjectCheckArgs@aftergroup=\@secondoftwo
+ }%
+ \expandafter
+ \endgroup
+ \ObjectCheckArgs@aftergroup
+}
+
+
+\newcommand{\ObjectProcessArgs}[2]{% #1: key, #2: value, #3: else
+ \expandafter\ObjectProcessArgs@expandedkey\expandafter{#1}{#2}\relax
+}
+
+\newcommand{\ObjectProcessArgs@expandedkey}[2]{% #1: key, #2: value, #3: then, #4: else
+ \IfEndsOnSpacePlus{#1}{%
+ \let\ObjectProcessArgs@csdef=\csappto
+ \expandafter\ObjectProcessArgs@checkArgs\expandafter{\StripSpacePlus#1\pgfeov}{#2}%
+ }{\IfEndsOnPlus{#1}{%
+ \let\ObjectProcessArgs@csdef=\csappto
+ \expandafter\ObjectProcessArgs@checkArgs\expandafter{\StripPlus#1\pgfeov}{#2}%
+ }{%
+ \let\ObjectProcessArgs@csdef=\csdef
+ \ObjectProcessArgs@checkArgs{#1}{#2}%
+ }}%
+}
+
+\newrobustcmd{\IfEndsOn}[2]{% #1: end character, #2: text
+ \def\IfEndsOn@do##1#1##2\pgfeov{%
+ \ifstrequal{##2}{}{%
+ \let\do=\@secondoftwo
+ }{\ifstrequal{##2}{#1}{%
+ \let\do=\@firstoftwo
+ }{%
+ \def\do{\IfEndsOn@do##2\pgfeov}%
+ }}%
+ \do
+ }%
+ \IfEndsOn@do#2#1\pgfeov
+}
+\newcommand{\IfEndsOnPlus}{\IfEndsOn+}
+\newcommand{\IfEndsOnSpacePlus}{\IfEndsOn{ +}}
+
+\def\StripSpacePlus#1 +\pgfeov{#1}
+\def\StripPlus#1+\pgfeov{#1}
+
+
+\newcommand{\ObjectProcessArgs@checkArgs}[2]{% #1: key, #2: value, #3: then, #4: else
+ \ObjectProcessArgs@do#1 args\pgfeov{#2}%
+}
+\long\def\ObjectProcessArgs@do#1 arg#2\pgfeov#3{% #1: env name, #2: test value, #3: arguments, #4: then, #5: else
+ \let\ObjectProcessArgs@do@after=\@firstoftwo
+ \ifstrequal{#2}{ args}{%
+ \ObjectDefineEnvargsCheckName{#1}{{#3}}%
+ }{\ifstrequal{#2}{s args}{%
+ \ObjectDefineEnvargsCheckName{#1}{#3}%
+ }{\ifstrequal{#2}{s}{%
+ \ifstrequal{#1}{arg}{%
+ \ObjectDefineEnvargsAuto{{#3}}%
+ }{\ifstrequal{#1}{args}{%
+ \ObjectDefineEnvargsAuto{#3}%
+ }{%
+ \let\ObjectProcessArgs@do@after=\@secondoftwo
+ }}%
+ }{%
+ \let\ObjectProcessArgs@do@after=\@secondoftwo
+ }}}%
+ \ObjectProcessArgs@do@after
+}
+\newcommand{\ObjectDefineEnvargsCheckName}[2]{% #1: env name, #2: arguments
+ \ifobject@directkeys
+ \pgfkeysgetvalue{\@object@envkey}{\esf@tmp@env}%
+ \ifdefvoid{\esf@tmp@env}{%
+ }{\ifdefstring{\esf@tmp@env}{#1}{%
+ }{%
+ \ifobject@warnotherenv
+ \PackageWarning{easyfloats}{Defining 'arg(s)' for #1 but 'env=\esf@tmp@env'}%
+ \fi
+ }}%
+ \fi
+ \IfEnvironmentExists{#1}
+ {\ObjectDefineEnvargs{#1}{#2}}
+ {\PackageError{easyfloats}{Environment #1 for which you set 'arg(s)' does not exist}{}}%
+}
+\newcommand{\ObjectDefineEnvargsAuto}[1]{% #1: arguments
+ \pgfkeysgetvalue{\@object@envkey}{\esf@tmp@env}%
+ \ifx \esf@tmp@env \@empty
+ \PackageError{easyfloats}{'env' for 'arg(s)' is not defined}{}%
+ \else
+ \ObjectDefineEnvargs{\esf@tmp@env}{#1}%
+ \fi
+}
+\newcommand{\ObjectDefineEnvargs}[2]{% #1: env name, #2: arguments
+ \ObjectProcessArgs@csdef{object@#1 env@args}{#2}%
+}
+
+
+\newcommand{\ObjectAppendEnvargs}[1]{% #1: macro
+ \ifcsname object@\pgfkeysvalueof{\@object@envkey} env@args\endcsname
+ \eappto#1{\csexpandonce{object@\pgfkeysvalueof{\@object@envkey} env@args}}%
+ \fi
+}
+
+
+% ---------- object environment ----------
+
+\newcommand{\object@head}{}
+\newcommand{\object@foot}{}
+\newcommand{\object@restorestandardfloats}{}
+
+\newcommand{\object@label}[1]{%
+ \pgfkeys{/object/label={#1}}%
+}%
+\newcommand{\object@caption}[2][\pgfkeysnovalue]{%
+ \pgfkeys{/object/caption={#2}}%
+ \ifx \pgfkeysnovalue #1\relax
+ \pgfkeys{/object/list caption={#2}}%
+ \else
+ \pgfkeys{/object/list caption={#1}}%
+ \fi
+}
+\newcommand{\object@longtable@label}[1]{%
+ \ObjectDefineEnvargs{longtable}{\label{#1}}%
+}%
+\newcommand{\object@longtable@caption}[2][\pgfkeysnovalue]{%
+ \ifx \pgfkeysnovalue #1\relax
+ \ObjectDefineEnvargs{longtable}{\caption{#2}}%
+ \else
+ \ObjectDefineEnvargs{longtable}{\caption[#1]{#2}}%
+ \fi
+ \def\object@longtable@caption@sep{\ObjectDefineEnvargs{longtable}{\\}}%
+}
+
+\newenvironment{object}[1]{% #1: options
+ \if@inobject
+ \PackageError{easyfloats}{object environment may not be nested}{Did you mean to use the subobject environment instead?}%
+ \fi
+ \@inobjecttrue
+ %
+ \object@restorestandardfloats
+ %
+ \object@hook
+ \ifobject@isgraphic
+ \object@graphic@hook
+ \global\object@isgraphicfalse
+ \fi
+ %
+ % ---------- options ---------
+ %
+ \pgfqkeys{/object}{%
+ #1,
+ %
+ % ------- mandatory -------
+ type/.esf@mandatory=It should be the name of a floating environment like figure or table,
+ float style/.esf@mandatory={It should be one of plain, plaintop, ruled or boxed. See float package},
+ env/.esf@mandatory=It should be the name of an environment like tabular or empty,
+ }%
+ %
+ % ------- contains subobjects -------
+ \if@containssubobjects
+ \pgfkeysgetvalue{/object/env}{\esf@tmp@env}%
+ \ifx \esf@tmp@env \@empty
+ \else
+ \pgfkeys{/subobject/env/.expand once=\esf@tmp@env}%
+ \pgfkeyssetvalue{/object/env}{}%
+ \fi
+ \fi
+ %
+ % ---------- prepare ---------
+ %
+ \pgfkeysgetvalue{/object/env}{\esf@tmp@env}%
+ \ifdefstring\esf@tmp@env{longtable}{%
+ \object@longtable@prepare
+ }{%
+ \esf@ifpgfkeyhasvalue{/object/first head}{%
+ \pgfkeysgetvalue{/object/first head}{\object@head}%
+ }{%
+ \pgfkeysgetvalue{/object/head}{\object@head}%
+ }%
+ \esf@ifpgfkeyhasvalue{/object/last foot}{%
+ \pgfkeysgetvalue{/object/last foot}{\object@foot}%
+ }{%
+ \pgfkeysgetvalue{/object/foot}{\object@foot}%
+ }%
+ }%
+ %
+ \pgfkeysgetvalue{/object/type}{\esf@tmp@type}%
+ \ifx\esf@tmp@type\@empty
+ \let\object@floatenv@begin=\relax
+ \let\object@floatenv@end=\relax
+ \else
+ \pgfkeysgetvalue{/object/float style}{\esf@tmp@floatstyle}%
+ \ifx \esf@tmp@floatstyle \@empty
+ \else
+ \floatstyle{\esf@tmp@floatstyle}%
+ \restylefloat{\esf@tmp@type}%
+ \fi
+ \edef\object@floatenv@begin{\expandonce{\csname\esf@tmp@type\endcsname}}%
+ \edef\object@floatenv@end{\expandonce{\csname end\esf@tmp@type\endcsname}}%
+ \pgfkeysgetvalue{/object/placement}{\esf@tmp@placement}%
+ \ifx \esf@tmp@placement \@empty
+ % do nothing
+ \else
+ \eappto\object@floatenv@begin{[\esf@tmp@placement]}%
+ \fi
+ \fi
+ %
+ \pgfkeysgetvalue{/object/details}{\object@details}%
+ \ifx \object@details \@empty
+ % do nothing
+ \else
+ \preto\object@details{\pgfkeysvalueof{/object/details sep}}%
+ \fi
+ %
+ \pgfkeysgetvalue{/object/env}{\esf@tmp@env}%
+ \ifx \esf@tmp@env \@empty
+ % if you change this remember to update \object@lookahead@beforesubobject
+ \def\object@innerenv@begin{\object@head\ignorespaces}%
+ \def\object@innerenv@end{\unskip\object@foot}%
+ \else
+ \edef\object@innerenv@begin{\expandonce{\csname\esf@tmp@env\endcsname}}%
+ \edef\object@innerenv@end{\expandonce{\csname end\esf@tmp@env\endcsname}}%
+ \ObjectAppendEnvargs{\object@innerenv@begin}%
+ \eappto\object@innerenv@begin{\expandonce{\object@head}}%
+ \epreto\object@innerenv@end{\expandonce{\object@foot}}%
+ \let\object@lookahead@begin=\object@innerenv@begin
+ \ifobject@showenv
+ \show\object@innerenv@begin
+ \fi
+ \let\object@innerenv@begin=\object@lookahead
+ \fi
+ %
+ \global \@firstsubobjecttrue
+ %
+ % ---------- execute ---------
+ %
+ \object@floatenv@begin
+ \let\esf@original@label=\label
+ \let\esf@original@caption=\caption
+ \let\label=\object@label
+ \let\caption=\object@caption
+ \pgfkeysvalueof{/object/exec}%
+ \pgfkeysvalueof{/object/align}%
+ \object@innerenv@begin
+}{%
+ \object@innerenv@end
+ \if@containssubobjects
+ \if@firstsubobject
+ \PackageWarning{easyfloats}{'contains subobjects' is true but the object does not contain any subobjects.}%
+ \fi
+ \fi
+ \let\label=\esf@original@label
+ \let\caption=\esf@original@caption
+ \object@processCaptionAndLabel
+ \object@floatenv@end
+}
+
+\newcommand{\object@processCaptionAndLabel}{%
+ % position of caption (above/below) is handled by float package (see float style)
+ \esf@ifpgfkeyhasvalue{/object/caption}{%
+ \esf@ifpgfkeyhasvalue{/object/list caption}%
+ {\pgfkeysgetvalue{/object/list caption}{\esf@tmp@caption@short}}%
+ {\pgfkeysgetvalue{/object/caption}{\esf@tmp@caption@short}}%
+ \caption[\esf@tmp@caption@short]{\pgfkeysvalueof{/object/caption}\object@details}%
+ }{%
+ \ifobject@warnnocaption
+ \PackageWarning{easyfloats}{%
+ No caption given.
+ This object will not show up in the list of figures/tables/whatsoever.
+ If captions for subfigures are given they will be placed incorrectly in the list of figures.
+ If you are using hyperref links to this figure may turn out wrong.
+ This warning occured%
+ }%
+ \fi
+ % Generate an anchor for a \label.
+ % \phantomcaption is defined in the caption-package but
+ % documented in subcaption for the subfigure environment.
+ % It appears that here (without a subfigure but within a figure)
+ % references are output correctly but links created by hyperref
+ % which should be pointing to this object point to the previous caption.
+ \phantomcaption
+ }%
+ % ------- label -------
+ \esf@ifpgfkeyhasvalue{/object/label}{%
+ \label{\pgfkeysvalueof{/object/label}}%
+ }{%
+ \ifobject@warnnolabel
+ \PackageWarning{easyfloats}{%
+ No label given.
+ Without a label you cannot reference this object.
+ This warning occured%
+ }%
+ \fi
+ }%
+ \esf@ifpgfkeyhasvalue{/object/add label}%
+ {\label{\pgfkeysvalueof{/object/add label}}}%
+ {}%
+}
+
+\newcommand{\object@longtable@prepare}{%
+ \pgfkeyssetvalue{/object/type}{}%
+ \pgfkeyssetvalue{/object/align}{}%
+ \let\object@label=\label
+ \let\object@caption=\caption
+ \let\ObjectProcessArgs@csdef=\csappto
+ %
+ \let\esf@original@label=\label
+ \let\esf@original@caption=\caption
+ \let\label=\object@longtable@label
+ \let\caption=\object@longtable@caption
+ \let\object@longtable@caption@sep=\relax
+ % it seems possible to have a label without a caption in a longtable
+ % which actually makes sense because \caption may appear several times
+ % so it makes sense to increase the counter somewhere else.
+ \let\phantomcaption=\relax
+ \object@processCaptionAndLabel
+ \let\object@processCaptionAndLabel=\relax
+ \object@longtable@caption@sep
+ \let\label=\esf@original@label
+ \let\caption=\esf@original@caption
+ %
+ \esf@ifpgfkeyhasvalue{/object/first head}{%
+ \ObjectDefineEnvargs{longtable}{\pgfkeysvalueof{/object/first head}}%
+ }{%
+ \ObjectDefineEnvargs{longtable}{\pgfkeysvalueof{/object/head}}%
+ }%
+ \ObjectDefineEnvargs{longtable}{%
+ \endfirsthead
+ \pgfkeysvalueof{/object/head}%
+ \endhead
+ \pgfkeysvalueof{/object/foot}%
+ \endfoot
+ }%
+ \esf@ifpgfkeyhasvalue{/object/last foot}{%
+ \ObjectDefineEnvargs{longtable}{\pgfkeysvalueof{/object/last foot}}%
+ }{%
+ \ObjectDefineEnvargs{longtable}{\pgfkeysvalueof{/object/foot}}%
+ }%
+ \ObjectDefineEnvargs{longtable}{%
+ \endlastfoot
+ }%
+}
+
+
+% ---------- lookahead for subobjects ----------
+
+\newcommand{\object@lookahead@nosubobject}{%
+ \object@lookahead@begin
+}
+\newcommand{\object@lookahead@beforesubobject}{%
+ \PackageWarning{easyfloats}{It seems you have forgotten to specify 'contains subobjects'. I am using the value of 'env' for the subobjects instead of for \@currenvir.}%
+ \pgfkeysgetvalue{/object/env}{\esf@tmp@env}%
+ \pgfkeys{/subobject/env/.expand once=\esf@tmp@env}%
+ \pgfkeyssetvalue{/object/env}{}%
+ \let\object@innerenv@end=\unskip
+ %\ignorespaces unnecessary because I just checked
+ %that the next token is the start of a subobject
+}
+
+\newcommand{\object@lookahead}{%
+ \futurelet \next \object@lookahead@checknext
+}
+\newcommand{\object@lookahead@checknext}{%
+ \ifx \next \@implicitspace
+ \let\object@lookahead@gobble=\@gobblespace
+ \let\object@lookahead@do=\object@lookahead
+ \else\ifx \next \par
+ \let\object@lookahead@gobble=\@gobble
+ \let\object@lookahead@do=\object@lookahead
+ \else\ifx \next \begin
+ \let\object@lookahead@gobble=\@empty
+ \let\object@lookahead@do=\object@lookahead@checkbegin
+ \else\ifx \next \includegraphicsubobject
+ \let\object@lookahead@gobble=\@empty
+ \let\object@lookahead@do=\object@lookahead@beforesubobject
+ \else
+ \let\object@lookahead@gobble=\@empty
+ \let\object@lookahead@do=\object@lookahead@nosubobject
+ \fi \fi \fi \fi
+ \expandafter \object@lookahead@do \object@lookahead@gobble
+}
+\newcommand{\object@lookahead@checkbegin}[2]{% #1: \begin, #2: environment name
+ \ifstrequal{#2}{subobject}
+ \object@lookahead@beforesubobject
+ \object@lookahead@nosubobject
+ #1{#2}%
+}
+
+\@firstofone{\let\@implicitspace= }
+\@firstofone{\def\@gobblespace} {}
+
+
+% ========== object styles ==========
+
+\newcommand{\IfObjectStyleExists}[1]{% #1: style name or group name, #2: then block, #3: else block
+ \ifcsmacro{object@style@#1}%
+}
+\newcommand{\IfObjectStyleNotGroup}[1]{% #1: style name, #2: then block, #3: else block
+ \IfObjectStyleExists{#1}
+ {\edef\esf@tmp@do{\ifcsstring{object@stylegroup@#1}{{#1}}}\esf@tmp@do}%
+ \@secondoftwo
+}
+
+\newcommand{\objectstyle@init}[1]{% #1: style name or group name
+ \expandafter \newcommand \csname object@style@#1\endcsname{/utils/exec=\object@directkeysfalse}%
+ \expandafter \newcommand \csname object@stylegroup@#1\endcsname{}%
+}
+
+\newrobustcmd{\AddObjectStyleToGroup}[2]{% #1: group name, #2: style name
+ \IfObjectStyleExists{#1}{%
+ \IfObjectStyleNotGroup{#2}{%
+ \AddObjectStyleToGroup@do{#1}{#2}%
+ }{%
+ \PackageError{easyfloats}{Undefined object style: #2}{In this case you cannot use a style group instead of a group.}%
+ }}{%
+ \PackageError{easyfloats}{Undefined object style group: #1}{}%
+ }%
+}
+\newrobustcmd{\AddObjectStyleToGroup@do}[2]{% #1: group name, #2: style name
+ \expandafter\eappto\csname object@stylegroup@#1\endcsname{{#2}}%
+}
+\newrobustcmd{\ShowObjectStylesInGroup}[1]{%
+ \expandafter\show\csname object@stylegroup@#1\endcsname
+}
+
+\newcommand{\AppendOptionToObjectStyleGroups}[3]{% #1: list of style groups, #2: key, #3: value
+ \CheckObjectOption{#2}{#3}{%
+ \@for\esf@aotosg@group:=#1\do{%
+ \GobbleLeadingSpaceIn\esf@aotosg@group
+ \AppendOptionToObjectStyleGroup\esf@aotosg@group{#2}{#3}%
+ }%
+ }%
+}
+\newcommand{\AppendOptionToObjectStyleGroup}[3]{% #1: style group, #2: key, #3: value
+ \IfObjectStyleExists{#1}{%
+ \expandafter \let \expandafter \esf@tmp@listofstyles \csname object@stylegroup@#1\endcsname
+ \def\esf@tmp@loop{\@tfor\esf@aotosg@style:=}%
+ \expandafter\esf@tmp@loop\esf@tmp@listofstyles \do {%
+ \AppendOptionToObjectStyle\esf@aotosg@style{#2}{#3}%
+ }%
+ }{%
+ \PackageError{easyfloats}{Undefined object style: '#1'}{}%
+ }%
+}
+\newcommand{\AppendOptionToObjectStyle}[3]{% #1: style, #2: key, #3: value
+ \expandafter\AppendToOptionsList\csname object@style@#1\endcsname{#2}{#3}%
+}
+\newrobustcmd{\ShowObjectStyleOptions}[1]{%
+ \IfObjectStyleNotGroup{#1}
+ {\expandafter\show\csname object@style@#1\endcsname}%
+ {\PackageError{easyfloats}{Undefined object style: '#1'}{}}%
+}
+
+
+% ---------- style groups ----------
+
+\newrobustcmd{\NewObjectStyleGroup}[2]{% #1: group name, #2: list of style names
+ \IfObjectStyleExists{#1}{%
+ \PackageError{easyfloats}{Style or style group with the name '#1' exists already}{}%
+ }{%
+ \objectstyle@init{#1}%
+ \@for\esf@nosg@style:=#2\do{%
+ \GobbleLeadingSpaceIn\esf@nosg@style
+ \AddObjectStyleToGroup{#1}{\esf@nosg@style}%
+ }%
+ }%
+}
+
+% ---------- object styles ----------
+
+\newrobustcmd{\NewObjectStyle}[2]{% #1: name, #2: options
+ \IfObjectStyleExists{#1}{%
+ \PackageError{easyfloats}{Style or style group with the name '#1' exists already}{}%
+ }{%
+ \objectstyle@init{#1}%
+ \AddObjectStyleToGroup@do{#1}{#1}%
+ %hack into \objectset[#1] to retrieve the value of type
+ \pgfkeyssetvalue{/object.check/type}{\pgfkeysnovalue}%
+ \objectset[#1]{#2}%
+ \esf@ifpgfkeyhasvalue{/object.check/type}{%
+ \edef\@do{\noexpand\DeprecateStandardFloatObject{\pgfkeysvalueof{/object.check/type}}{#1object}}%
+ \@do
+ }{%
+ \PackageError{easyfloats}{Missing required key 'type'}%
+ }%
+ %
+ \AddObjectStyleToGroup{all}{#1}%
+ %
+ \newenvironment{#1object}[1]{% #1: options
+ \object{%
+ .esf@also from/.expand once=\csname object@style@#1\endcsname,
+ /utils/exec=\object@directkeystrue,
+ ##1,
+ }%
+ }{%
+ \endobject
+ }%
+ \pgfkeysgetvalue{/object.check/type}{\NewObjectStyle@type}%
+ \edef\@do{\noexpand\AfterPreamble{%
+ \noexpand\IfEnvironmentExists{sub\NewObjectStyle@type}{%
+ \noexpand\PackageInfo{easyfloats}{environment 'sub\NewObjectStyle@type' exists already}%
+ }{\NewObjectStyle@IfCaptionNewEnough{%
+ \noexpand\PackageInfo{easyfloats}{declaring new caption subtype 'sub\NewObjectStyle@type'}%
+ \noexpand\DeclareCaptionSubType{\NewObjectStyle@type}%
+ }{%
+ \noexpand\PackageWarning{easyfloats}{The caption package is too old for me to define the subtype automatically. Please insert `\string\AtBeginDocument{\string\DeclareCaptionSubType{\NewObjectStyle@type}}' before loading this package}%
+ }%
+ }%
+ }}\@do
+ }%
+}
+
+\@ifpackagelater{caption}{2020/08/30}
+ {\let\NewObjectStyle@IfCaptionNewEnough=\@firstoftwo}
+ {\let\NewObjectStyle@IfCaptionNewEnough=\@secondoftwo}
+
+
+\newcommand{\DeprecateStandardFloatObject}[2]{% #1: float environment, #2: alternative object environment
+ \ifesf@warnstandardfloats
+ \ifcsmacro{esf@#1@alternatives}{%
+ \expandafter \appto \csname esf@#1@alternatives\endcsname{ or #2}%
+ }{%
+ \AtBeginDocument{%
+ \csletcs{esf@original#1}{#1}%
+ \expandafter \preto\csname#1\endcsname{\PackageWarning{easyfloats}{In order to profit from the advantages of the easyfloats package please use \csname esf@#1@alternatives\endcsname\space instead}}%
+ }%
+ \expandafter \def \csname esf@#1@alternatives\endcsname{#2}%
+ \ifesf@loadgraphics
+ \ifstrequal{#1}{table}{%
+ % do nothing
+ }{%
+ \expandafter \appto \csname esf@#1@alternatives\endcsname{ or \string\includegraphicobject}%
+ }%
+ \fi
+ \eappto\object@restorestandardfloats{\let\expandonce{\csname #1\endcsname}=\expandonce{\csname esf@original#1\endcsname}}%
+ }%
+ \fi
+}
+
+
+% ---------- default styles ----------
+
+\NewObjectStyleGroup{all}{}
+
+\NewObjectStyle{table}{type=table}
+\NewObjectStyle{figure}{type=figure}
+
+
+% ========== include graphic object ==========
+
+\newif\ifgraphicobject@autocaption
+\newif\ifgraphicobject@autolabel
+\newif\ifgraphicobject@autocaption@strippath
+\newif\ifgraphicobject@autolabel@strippath
+\newif\ifgraphicobject@warnenv
+\newif\ifgraphicobject@noenv
+
+\ifesf@loadgraphics
+
+\newcommand\object@graphic@env{figureobject}
+\newcommand\object@graphic@path{/object}
+\newcommand\object@graphic@options{}
+
+\newrobustcmd{\graphicobjectstyle}[1]{%
+ \IfObjectStyleNotGroup{#1}{%
+ \def\object@graphic@env{#1object}%
+ }{%
+ \PackageError{easyfloats}{Undefined object style: '#1'}{}%
+ }%
+}
+
+% do not confuse this with \CheckObjectGraphicOption
+% this corresponds to \CheckObjectOption
+\newcommand{\CheckGraphicobjectOption}[2]{% #1: key, #2: value, #3: executed if valid
+ % if #3 is *not* executed an error message is printed
+ \let\CheckGraphicobjectOption@handleArg=\@gobble
+ \esf@ifpgfkeyexists{/graphicobject/#1}{%
+ \esf@ifpgfkeyrequiresvalue{/graphicobject/#1}{%
+ \ifx \pgfkeysnovalue #2\relax
+ \PackageError{easyfloats}{The key '#1' requires a value. I am going to ignore this key}{}%
+ \else
+ \let\CheckGraphicobjectOption@handleArg=\@firstofone
+ \fi
+ }{%
+ \let\CheckGraphicobjectOption@handleArg=\@firstofone
+ }%
+ }{\esf@ifkeyvalkeyexists{Gin}{#1}{%
+ \esf@ifkeyvalkeyrequiresvalue{Gin}{#1}{%
+ \ifx \pgfkeysnovalue #2\relax
+ \PackageError{easyfloats}{The key '#1' requires a value. I am going to ignore this key}{}%
+ \else
+ \let\CheckGraphicobjectOption@handleArg=\@firstofone
+ \fi
+ }{%
+ \let\CheckGraphicobjectOption@handleArg=\@firstofone
+ }%
+ }{%
+ \PackageError{easyfloats}{'#1' is not a valid graphic option key}
+ {If you intended to use a graphbox option please make sure that you loaded this package with the option 'graphbox'.}%
+ }}%
+ \CheckGraphicobjectOption@handleArg
+}
+
+\newcommand{\AppendGraphicobjectOption}[2]{% #1: key, #2: value
+ \AppendToOptionsList{\object@graphic@options}{#1}{#2}%
+}
+\newcommand{\includegraphicobject@SetGraphicobjectOption}[2]{% #1: key, #2: value
+ \pgfkeysalso{#1={#2}}%
+}
+
+% available options
+\pgfqkeys{/graphicobject}{%
+ auto caption/.is if=graphicobject@autocaption,
+ auto caption=true,
+ %
+ auto label/.is if=graphicobject@autolabel,
+ auto label=true,
+ %
+ auto caption strip path/.is if=graphicobject@autocaption@strippath,
+ auto caption strip path=false,
+ %
+ auto label strip path/.is if=graphicobject@autolabel@strippath,
+ auto label strip path=false,
+ %
+ warn env/.is if=graphicobject@warnenv,
+ warn env=true,
+ %
+ no env/.is if=graphicobject@noenv,
+ no env=true,
+}
+
+\newrobustcmd{\includegraphicobject}{% [#1: graphicstyle], [#2: options], #3: graphic filename without extension
+ \let\includegraphicobject@after=\@empty
+ \@ifnextchar [%
+ \includegraphicobject@firstarg
+ \includegraphicobject@parseoptions
+}
+\def\includegraphicobject@firstarg[#1]{%
+ \begingroup
+ \@ifnextchar [%
+ {%
+ \begingroup
+ \let\includegraphicobject@after=\endgroup
+ \graphicobjectstyle{#1}%
+ \includegraphicobject@parseoptions
+ }%
+ {%
+ \includegraphicobject@parseoptions[#1]%
+ }%
+}
+
+\newcommand{\includegraphicobject@parseoptions}{% [#1: options], #2: graphic filename without extension
+ % expanding \object@graphic@env before is important for subcaptionbox
+ % otherwise I get the error \begin{subobject} ended by \end{subobject}
+ \@ifnextchar [
+ {\expandafter\includegraphicobject@do\expandafter{\object@graphic@env}}
+ {\expandafter\includegraphicobject@do\expandafter{\object@graphic@env}[]}%
+}
+\def\includegraphicobject@do#1[#2]#3{% #1: environment name, #2: options, #3: graphic filename without extension
+ \global\object@isgraphictrue
+ \begin{#1}{%
+ /utils/exec=\def\object@graphic@options@tmp{}%
+ \let\AppendGraphicobjectOption\includegraphicobject@SetGraphicobjectOption,
+ .unknown/.code={%
+ \esf@ifkeyvalkeyexists{Gin}{\pgfkeyscurrentname}{%
+ \AppendToOptionsList{\object@graphic@options@tmp}{\pgfkeyscurrentname}{##1}%
+ }{%
+ \let\pgfkeys@searchalso@name=\pgfkeyscurrentname
+ \pgfkeysalso{%
+ /graphicobject/\pgfkeys@searchalso@name={##1},
+ }%
+ }%
+ },
+ .esf@also from=\object@graphic@options,
+ #2,
+ /utils/exec=
+ \ifgraphicobject@autocaption
+ \esf@ifpgfkeyhasvalue{\object@graphic@path/caption}{%
+ % do nothing
+ }{%
+ \def\graphicobject@caption{#3}%
+ \PatchUnderscore\graphicobject@caption
+ \ifgraphicobject@autocaption@strippath
+ \protected@edef\graphicobject@caption{\strippath\graphicobject@caption}%
+ \fi
+ \pgfkeyslet{\object@graphic@path/caption}{\graphicobject@caption}%
+ }%
+ \fi
+ \ifgraphicobject@autolabel
+ \esf@ifpgfkeyhasvalue{\object@graphic@path/label}{%
+ % do nothing
+ }{%
+ \def\graphicobject@label{#3}%
+ \ifgraphicobject@autolabel@strippath
+ \protected@edef\graphicobject@label{\strippath\graphicobject@label}%
+ \fi
+ \pgfkeyslet{\object@graphic@path/label}{\graphicobject@label}%
+ }%
+ \fi
+ \ifgraphicobject@warnenv
+ \pgfkeysalso{env/.get=\esf@tmp@env}%
+ \ifx \esf@tmp@env \@empty
+ \else
+ \ifdefstring{\object@graphic@env}{subobject}
+ {\edef\esf@tmp@name{\string\includegraphicsubobject}}
+ {\edef\esf@tmp@name{\string\includegraphicobject}}%
+ \ifgraphicobject@noenv
+ \PackageWarning{easyfloats}{I am ignoring 'env=\esf@tmp@env' in \esf@tmp@name}%
+ \else
+ \PackageWarning{easyfloats}{'env=\esf@tmp@env' in \esf@tmp@name. Is that intended?}%
+ \fi
+ \fi
+ \fi
+ \ifgraphicobject@noenv
+ \pgfkeysalso{env=}%
+ \fi
+ ,
+ }
+ \expandafter\includegraphics\expandafter[\object@graphic@options@tmp]{#3}%
+ \end{#1}%
+ % if this is \@empty it should not interfere with \ignorespacesafterend (\ignorespaces) or \@endparenv (\@doendpe)
+ \includegraphicobject@after
+}
+
+\newrobustcmd{\includegraphicsubobject}{%
+ \begingroup
+ \def\object@graphic@env{subobject}%
+ \def\object@graphic@path{/subobject}%
+ \def\includegraphicobject@after{\endgroup\ignorespaces}%
+ \includegraphicobject@parseoptions
+}
+
+
+\fi %\ifesf@loadgraphics
+
+
+% ========== sub object ==========
+
+\newif\ifsubobject@warnnolabel
+\newif\ifsubobject@warnnocaption
+
+% available options
+\pgfqkeys{/subobject}{%
+ % A label for the left/right part of the content
+ label/.initial,
+ label/.value required,
+ %
+ % A caption displayed above or below the sub content
+ % (depending on the float style).
+ % There is *no* dot added automatically behind it.
+ caption/.initial,
+ caption/.value required,
+ %
+ % A caption used in the list of figures/tables/...
+ % for the left/right part of the content.
+ list caption/.initial,
+ list caption/.value required,
+ %
+ % An addition to the caption (at the object only, not in a list)
+ details/.initial=,
+ details/.value required,
+ %
+ details sep/.initial=.\space,
+ details sep/.value required,
+ %
+ % TeX code which is inserted before env
+ exec/.initial=,
+ exec/.value required,
+ exec +/.code=\esf@pgfkeysvalueappend{/subobject/exec}{#1},
+ exec +/.value required,
+ exec+/.forward to=/subobject/exec +,
+ exec+/.value required,
+ %
+ % The width argument of \subcaptionbox or subfigure.
+ % For \subcaptionbox an empty value is allowed
+ % meaning that the argument is not passed so that
+ % \subcaptionbox takes the width of the content.
+ linewidth/.initial=.5\linewidth,
+ linewidth/.value required,
+ %
+ % Use the \subcaptionbox command.
+ % Aligns the captions.
+ % Does not allow verbatim content.
+ % Is *not* compatible with env=tabularx.
+ subcaptionbox/.code=
+ \let\subobject@begin\subobject@subcaptionbox
+ \let\subobject@end\endsubobject@subcaptionbox,
+ subcaptionbox/.value forbidden,
+ % Use the subfigure/subtable environment.
+ % Requires linewidth.
+ subpage/.code=
+ \let\subobject@begin\subobject@subpage
+ \let\subobject@end\endsubobject@subpage,
+ subpage/.value forbidden,
+ %
+ % ------- subcaptionbox options -------
+ % Horizontal position of the content in the box.
+ % Allowed values: c, l, r, s, <empty> or any
+ % justification defined with \DeclareCaptionJustification
+ % (see the caption package documentation).
+ % An empty value means that this optional argument is
+ % *not* passed to the \subcaptionbox command.
+ % This option has no effect if linewidth is empty.
+ % I discourage using this option because it destroys
+ % the alignment of (sub)object and (sub)caption.
+ subcaptionbox inner pos/.initial=,
+ subcaptionbox inner pos/.value required,
+ %
+ % ------- subfigure/subtable options -------
+ % The subfigure/subtable environments are minipages
+ % and take the same arguments.
+ % http://tug.org/texinfohtml/latex2e.html#minipage
+ %
+ % The vertical position of the minipage on the baseline.
+ % Allowed values: c, t, b, auto, <empty>.
+ % auto means t if the caption is displayed at the top
+ % or b if the caption is displayed at the bottom
+ % so that the captions are aligned if the minipages
+ % have the same height.
+ % <empty> is equivalent to c.
+ subpage outer pos/.initial=auto,
+ subpage outer pos/.value required,
+ %
+ % The height of the minipage.
+ % An empty value means that this optional argument is
+ % *not* passed to the subfigure/subtable environment.
+ subpage height/.initial=,
+ subpage height/.value required=,
+ %
+ % The vertical position of the content on the minipage.
+ % Allowed values: t, c, b, s, <empty>.
+ % <empty> means that this optional argument is
+ % *not* passed to the subfigure/subtable environment.
+ % This option has no effect if subpage height is <empty>.
+ subpage inner pos/.initial=,
+ subpage inner pos/.value required,
+ %
+ % TeX code which is inserted at the beginning of the subfigure/subtable environment
+ subpage align/.initial=\centering,
+ subpage align/.value required,
+ %
+ % ------- separator options -------
+ % Insert a separator in front of each subobject
+ % except for the first subobject.
+ sep/.initial=,
+ sep/.value required,
+ %
+ % Place the subobjects side by side.
+ hor/.code=
+ \esf@pgfkeyscopyvalue{/subobject/sep}{/subobject/hor sep}%
+ \esf@pgfkeysvalueappend{/subobject/sep}{#1},
+ hor/.default=,
+ %
+ % The separator to be used when the subobjects
+ % shall be placed side by side.
+ hor sep/.initial=,
+ hor sep/.value required,
+ hor sep+/.forward to=/subobject/hor sep +,
+ hor sep+/.value required,
+ hor sep +/.code=\esf@pgfkeysvalueappend{/subobject/hor sep}{#1},
+ hor sep +/.value required,
+ %
+ % Place the subobjects below each other.
+ ver/.code=
+ \esf@pgfkeyscopyvalue{/subobject/sep}{/subobject/ver sep}%
+ \esf@pgfkeysvalueappend{/subobject/sep}{#1},
+ ver/.default=,
+ %
+ % The separator to be used when the subobjects
+ % shall be placed below eachother.
+ ver sep/.initial=\par\bigskip,
+ ver sep/.value required,
+ ver sep+/.forward to=/subobject/ver sep +,
+ ver sep+/.value required,
+ ver sep +/.code=\esf@pgfkeysvalueappend{/subobject/ver sep}{#1},
+ ver sep +/.value required,
+ %
+ %
+ % ------- warnings -------
+ %
+ warn no caption/.is if=subobject@warnnocaption,
+ warn no caption=true,
+ %
+ warn no label/.is if=subobject@warnnolabel,
+ warn no label=false,
+ %
+ warn other env/.forward to=/object/warn other env,
+ %value is allowed but not necessary
+ %
+ %
+ % ------- debugging -------
+ %
+ show env args/.forward to=/object/show env args,
+ %
+ %
+ % ------- inner environment -------
+ %
+ % An additional inner environment to wrap the content in like tabular, tabularx, tikzpicture
+ env/.code=\IfEnvironmentExistsOrIsEmpty{#1}{%
+ \ifstrequal{#1}{longtable}{%
+ \PackageError{easyfloats}{You cannot use 'env=longtable' in a subobject}
+ {Either use 'env=tabular' instead or combine the subobjects into one longtable.}%
+ \pgfkeyssetvalue{/subobject/env}{tabular}%
+ }{%
+ \pgfkeyssetvalue{/subobject/env}{#1}%
+ }%
+ }{%
+ \PackageError{easyfloats}{Environment #1 which you passed to the key 'env' does not exist}{}%
+ },
+ env/.value required,
+ env=,
+ %
+ % ------- unknown handler / env args -------
+ %
+ % see /object
+ %
+ .unknown/.code={%
+ % Using \ObjectProcessKeyPattern instead of \ObjectProcessArgs
+ % means that keys like `graphic width` can be used in subobjects as well.
+ % For a directly used subobject this should not be allowed.
+ % But I am leaving it in for \includegraphicsubobject so that the same key
+ % which works in \objectset and \includegraphicobject also works there.
+ \ObjectProcessKeyPattern{\pgfkeyscurrentname}{#1}{%
+ \pgfkeysgetvalue{/subobject/.really unknown/.@cmd}{\esf@tmp@err}%
+ \esf@tmp@err#1\pgfeov
+ }%
+ },
+ % Setting an unknown key handler shall not override env args but set an additional unknown handler.
+ .unknown/.code/.code={%
+ \pgfkeysdef{/subobject/.really unknown}{#1}%
+ },
+ .really unknown/.code={%
+ \edef\do{\noexpand\pgfkeys{/errors/unknown key={\pgfkeyscurrentkey}{\unexpanded{#1}}}}%
+ \do
+ },
+}%
+
+\newenvironment{subobject}[1]{% #1: options
+ \if@inobject
+ \else
+ \PackageError{easyfloats}{subobject environment may not be used outside of an object}{Did you mean to use the object environment instead?}%
+ \fi
+ %
+ \subobject@hook
+ \ifobject@isgraphic
+ \object@graphic@hook
+ \global\object@isgraphicfalse
+ \fi
+ %
+ \let\label=\esf@original@label
+ \let\caption=\esf@original@caption
+ %
+ % ------- options -------
+ %
+ \renewcommand\@object@envkey{/subobject/env}%
+ \pgfqkeys{/subobject}{#1}%
+ \ifsubobject@warnnocaption
+ \pgfkeys{/subobject/caption/.esf@recommended}%
+ \fi
+ \ifsubobject@warnnolabel
+ \pgfkeys{/subobject/label/.esf@recommended}%
+ \fi
+ %
+ \esf@ifpgfkeyhasvalue{/subobject/list caption}%
+ {\pgfkeys{/subobject/list caption/.get=\subobject@caption@short}}%
+ {\pgfkeys{/subobject/caption/.get=\subobject@caption@short}}%
+ \pgfkeysgetvalue{/subobject/linewidth}{\subobject@linewidth}%
+ %
+ \pgfkeysgetvalue{/subobject/details}{\subobject@details}%
+ \ifx \subobject@details \@empty
+ % do nothing
+ \else
+ \preto\subobject@details{\pgfkeysvalueof{/subobject/details sep}}%
+ \fi
+ %
+ \pgfkeysgetvalue{/subobject/env}{\esf@tmp@env}%
+ \ifx \esf@tmp@env \@empty
+ \def\subobject@innerenv@begin{\ignorespaces}%
+ \def\subobject@innerenv@end{\unskip}%
+ \else
+ \edef\subobject@innerenv@begin{\expandonce{\csname\esf@tmp@env\endcsname}}%
+ \edef\subobject@innerenv@end{\expandonce{\csname end\esf@tmp@env\endcsname}}%
+ \ObjectAppendEnvargs{\subobject@innerenv@begin}%
+ \ifobject@showenv
+ \show\subobject@innerenv@begin
+ \fi
+ \fi
+ %
+ % ------- execute -------
+ %
+ \if@firstsubobject
+ \else
+ % No need to worry about \parskip.
+ % Inside of a floating environment it appears to be always zero.
+ \pgfkeysvalueof{/subobject/sep}%
+ \fi
+ \subobject@begin
+}{%
+ \subobject@end
+ \global \@firstsubobjectfalse
+}
+
+\NewEnviron{subobject@subcaptionbox}{%
+ \def\subobject@box{%
+ \subcaptionbox[% list caption
+ \subobject@caption@short
+ ]{% caption
+ \pgfkeysvalueof{/subobject/caption}%
+ \subobject@details
+ \esf@ifpgfkeyhasvalue{/subobject/label}
+ {\label{\pgfkeysvalueof{/subobject/label}}}
+ {}%
+ }%
+ }%
+ \ifdefvoid\subobject@linewidth{%
+ % do nothing
+ }{%
+ \appto\subobject@box{[\subobject@linewidth]}%
+ \pgfkeysgetvalue{/subobject/subcaptionbox inner pos}{\subobject@innerpos}%
+ \ifx \subobject@innerpos \@empty
+ % do nothing
+ \else
+ \eappto\subobject@box{[\subobject@innerpos]}%
+ \fi
+ }%
+ \subobject@box{% content
+ \begingroup
+ \renewcommand{\label}[1]{\PackageError{easyfloats}{\string\label\space is not allowed in subobject. Please use the 'label' option instead}{}}%
+ \renewcommand{\caption}[2][]{\PackageError{easyfloats}{\string\caption\space is not allowed in subobject. Please use the 'caption' option instead}{}}%
+ \pgfkeysvalueof{/subobject/exec}%
+ \subobject@innerenv@begin
+ \BODY
+ \subobject@innerenv@end
+ \endgroup
+ }%
+}
+
+\newenvironment{subobject@subpage}{%
+ \ifx \subobject@linewidth \@empty
+ \PackageError{easyfloats}{'linewidth' may not be empty when using the 'subpage' backend}{}%
+ \fi
+ \edef\subobject@subpage@envname{sub\pgfkeysvalueof{/object/type}}%
+ \def\subobject@subpage@begin{\csname\subobject@subpage@envname\endcsname}%
+ \def\subobject@subpage@end{\csname end\subobject@subpage@envname\endcsname}%
+ %
+ \pgfkeysgetvalue{/subobject/subpage outer pos}{\subobject@outerpos}%
+ \ifx \subobject@outerpos \@empty
+ \appto\subobject@subpage@begin{[c]}%
+ \else \ifdefstring \subobject@outerpos {auto}{%
+ \caption@iftop
+ {\eappto\subobject@subpage@begin{[t]}}%
+ {\eappto\subobject@subpage@begin{[b]}}%
+ }{\ifdefstring \subobject@outerpos {Auto}{%
+ \caption@iftop
+ {\eappto\subobject@subpage@begin{[T]}}%
+ {\eappto\subobject@subpage@begin{[B]}}%
+ }{%
+ \eappto\subobject@subpage@begin{[\subobject@outerpos]}%
+ }}\fi
+ \pgfkeysgetvalue{/subobject/subpage height}{\subobject@height}%
+ \ifx \subobject@height \@empty
+ \else
+ \appto\subobject@subpage@begin{[\subobject@height]}%
+ \pgfkeysgetvalue{/subobject/subpage inner pos}{\subobject@innerpos}%
+ \ifx \subobject@innerpos \@empty
+ \else
+ \eappto\subobject@subpage@begin{[\subobject@innerpos]}%
+ \fi
+ \fi
+ %
+ \subobject@subpage@begin{\subobject@linewidth}%
+ \pgfkeysvalueof{/subobject/subpage align}%
+ % \caption@iftop is defined by caption package
+ \caption@iftop{\subobject@subpage@captionAndLabel}{}%
+ \begingroup
+ \renewcommand{\label}[1]{\PackageError{easyfloats}{\string\label\space is not allowed in subobject. Please use the 'label' option instead}{}}%
+ \renewcommand{\caption}[2][]{\PackageError{easyfloats}{\string\caption\space is not allowed in subobject. Please use the 'caption' option instead}{}}%
+ \pgfkeysvalueof{/subobject/exec}%
+ \subobject@innerenv@begin
+}{%
+ \subobject@innerenv@end
+ \endgroup
+ \caption@iftop{}{\subobject@subpage@captionAndLabel}%
+ \subobject@subpage@end
+ \ignorespacesafterend
+}
+\newcommand{\subobject@subpage@captionAndLabel}{%
+ % ------- caption -------
+ % position of caption (above/below) is handled by float package (see float style)
+ \esf@ifpgfkeyhasvalue{/subobject/caption}{%
+ \caption[\subobject@caption@short]{\pgfkeysvalueof{/subobject/caption}\subobject@details}%
+ }{%
+ % Generate an anchor for a \label.
+ \phantomcaption
+ }%
+ % ------- label -------
+ \esf@ifpgfkeyhasvalue{/subobject/label}%
+ {\label{\pgfkeysvalueof{/subobject/label}}}%
+ {}%
+}
+
+\pgfqkeys{/subobject}{subpage}
diff --git a/macros/latex/contrib/easyfloats/easyfloats.ins b/macros/latex/contrib/easyfloats/easyfloats.ins
new file mode 100644
index 0000000000..c3f1020483
--- /dev/null
+++ b/macros/latex/contrib/easyfloats/easyfloats.ins
@@ -0,0 +1,82 @@
+% !TeX program = tex
+
+%% easyfloats.ins
+%% Copyright 2020 E. Zöllner
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is E. Zöllner.
+%
+% This work consists of the files listed in easyfloats-file-list.txt.
+% The official git repository is https://gitlab.com/erzo/latex-easyfloats
+
+
+% Make easyfloats.dtx faster by stripping comments and indentation
+% and write the result to easyfloats.sty.
+
+\input docstrip.tex
+
+\preamble
+
+Copyright 2020 E. Z\string\"ollner
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+Additionally to the rights granted by the LaTeX Project Public License
+you have permission to freely distribute unmodified copies
+of the files \jobname.sty and doc/easyfloats.pdf without other files of this work.
+The other files of this work can be found at:
+https://gitlab.com/erzo/latex-easyfloats
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is E. Z\string\"ollner.
+
+This work consists of the files listed in easyfloats-file-list.txt.
+\endpreamble
+
+\askforoverwritefalse
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+
+\def\lnout{}
+\count0=0
+\def\append#1{\advance\count0 by 1 \expandafter\def\expandafter\lnout\expandafter{\lnout#1}}
+\def\appendmany#1{\ifx\relax#1\else\append{#1}\expandafter\appendmany\fi}
+\obeyspaces
+\appendmany \relax
+\expandafter\appendmany\jobname.sty\relax
+\loop\append{ }\ifnum\count0<48\repeat
+\Msg{****************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the *}
+\Msg{* following file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* \lnout *}
+\Msg{* *}
+\Msg{* To produce the documentation run: *}
+\Msg{* $ cd doc *}
+\Msg{* $ pdflatex easyfloats.tex *}
+\Msg{* $ biber easyfloats *}
+\Msg{* $ pdflatex easyfloats.tex *}
+\Msg{* $ pdflatex easyfloats.tex *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{****************************************************}
+
+\endbatchfile
diff --git a/macros/latex/contrib/pdfpc/pdfpc-doc.pdf b/macros/latex/contrib/pdfpc/pdfpc-doc.pdf
index 775bed9e12..fbb28d42df 100644
--- a/macros/latex/contrib/pdfpc/pdfpc-doc.pdf
+++ b/macros/latex/contrib/pdfpc/pdfpc-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/pdfpc/pdfpc-doc.tex b/macros/latex/contrib/pdfpc/pdfpc-doc.tex
index 59d80c4447..354b41900f 100644
--- a/macros/latex/contrib/pdfpc/pdfpc-doc.tex
+++ b/macros/latex/contrib/pdfpc/pdfpc-doc.tex
@@ -43,7 +43,7 @@
\title{The \sty{pdfpc} package \\ {\large\url{https://github.com/pdfpc/pdfpc}}}
\author{Evgeny Stambulchik}
-\date{2020/06/19 (v0.5.0)}
+\date{2020/12/05 (v0.5.1)}
\hypersetup{pdftitle={The pdfpc package}, pdfauthor={Evgeny Stambulchik}}
diff --git a/macros/latex/contrib/pdfpc/pdfpc.sty b/macros/latex/contrib/pdfpc/pdfpc.sty
index ad0735deb5..17a813f15d 100644
--- a/macros/latex/contrib/pdfpc/pdfpc.sty
+++ b/macros/latex/contrib/pdfpc/pdfpc.sty
@@ -30,7 +30,7 @@
%
% -------------------------------------------------------------------------------------------
%
-\ProvidesPackage{pdfpc}[2020/06/19 v0.5.0 PDFPC]
+\ProvidesPackage{pdfpc}[2020/12/05 v0.5.1 PDFPC]
\NeedsTeXFormat{LaTeX2e}
%
% Require additional packages needed by \sty{pdfpc}:
@@ -130,9 +130,9 @@ ______<rdf:Description xmlns:pdfpc="https://github.com/pdfpc/pdfpc">^^J%
\hyxmp@add@simple{pdfpc:LastMinutes}{\PDFPC@lastminutes}%
\hyxmp@add@simple{pdfpc:NotesPosition}{\PDFPC@notesposition}%
\ifPDFPC@disablemarkdown%
- \hyxmp@add@simple{pdfpc:EnableMarkdown}{false}%
+ \hyxmp@add@simple{pdfpc:DisableMarkdown}{true}%
\else%
- \hyxmp@add@simple{pdfpc:EnableMarkdown}{true}%
+ \hyxmp@add@simple{pdfpc:DisableMarkdown}{false}%
\fi
\hyxmp@add@simple{pdfpc:DefaultTransition}{\PDFPC@defaulttransition}%
\hyxmp@add@to@xml{%
diff --git a/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf b/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
index 6d49a78d23..262cc371f8 100644
--- a/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf b/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
index 2eea6f2787..d935b4b70e 100644
--- a/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf b/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
index c7cc35c0b2..6342368be6 100644
--- a/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-tabular.pdf b/macros/latex/contrib/reledmac/examples/1-tabular.pdf
index 955fbbdb0d..64968b4a1d 100644
--- a/macros/latex/contrib/reledmac/examples/1-tabular.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-tabular.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf b/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
index f8cd9cddc5..26c3b5b51f 100644
--- a/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/1-verses.pdf b/macros/latex/contrib/reledmac/examples/1-verses.pdf
index 87d4aab679..7d07c413ba 100644
--- a/macros/latex/contrib/reledmac/examples/1-verses.pdf
+++ b/macros/latex/contrib/reledmac/examples/1-verses.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-antilabe.pdf b/macros/latex/contrib/reledmac/examples/2-antilabe.pdf
index 6f3d047005..b3ec2ef9c3 100644
--- a/macros/latex/contrib/reledmac/examples/2-antilabe.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-antilabe.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf b/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
index c200296dbd..938e42afb1 100644
--- a/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf b/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
index 65dd1569a7..0b86975b36 100644
--- a/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-glossaries.pdf b/macros/latex/contrib/reledmac/examples/2-glossaries.pdf
index d3d024bfac..421644ada5 100644
--- a/macros/latex/contrib/reledmac/examples/2-glossaries.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-glossaries.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-indexing.pdf b/macros/latex/contrib/reledmac/examples/2-indexing.pdf
index 713ecbe130..16562f138e 100644
--- a/macros/latex/contrib/reledmac/examples/2-indexing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-indexing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf b/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
index 404da7a58e..11fce5520c 100644
--- a/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf b/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
index bd9785768a..de91a9348a 100644
--- a/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-linespacing.pdf b/macros/latex/contrib/reledmac/examples/2-linespacing.pdf
index 9bb0d243e6..bb8a68c10f 100644
--- a/macros/latex/contrib/reledmac/examples/2-linespacing.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-linespacing.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf b/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
index 8f10eeeb33..dc02a3a8a0 100644
--- a/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-notes-width.pdf b/macros/latex/contrib/reledmac/examples/2-notes-width.pdf
index 1d47e98326..0e454bb775 100644
--- a/macros/latex/contrib/reledmac/examples/2-notes-width.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-notes-width.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf b/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
index 3b4bbab2f8..2a43b55f34 100644
--- a/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-performances.pdf b/macros/latex/contrib/reledmac/examples/2-performances.pdf
index f8f88d5895..ca78759c71 100644
--- a/macros/latex/contrib/reledmac/examples/2-performances.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-performances.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf b/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
index 49910a1f3e..c7d63023a6 100644
--- a/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf b/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
index 3a772ba51e..3ca76d7dc1 100644
--- a/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
index 1697854763..f7a9a6d5ee 100644
--- a/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf b/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
index 21cae83af1..3a6f8c02bc 100644
--- a/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
index 31ca5e79b5..5ba5c47035 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
index a0a564da3a..50d1b174a6 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
index 6f89ddb971..9419444506 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
index 5e5e71eea4..f749efdf81 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
index e83b3370dd..0a91e61571 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
index b3fc8f6e51..0b2a5bd0fb 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
index 6830faba33..3b27233bf2 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
index 0e0a194911..e3b46f18b2 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
index 2ce3db4770..2496171f58 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
index 8c46da3d51..688c8042ba 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
index 8994aac2ab..92861900ec 100644
--- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
+++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
index f3ebbb1c37..de7314016b 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
index 6b3dfdebf1..03d9e6fab7 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
index 0230f957ae..35c35f4c81 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
index 07108672f2..a06839b10a 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
index e0f83f099d..cd0a6386e9 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
index d485eb3b91..766b117702 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
index 7dbef6237e..15a8f5d7ad 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
index edee629194..d8eb74224c 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
index 736abce041..c9d50ec3d9 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
index c1a8e94524..01090e0a24 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
index 6674aa54d4..7083080621 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
index d33a684a7c..65b216de75 100644
--- a/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
+++ b/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/reledmac.dtx b/macros/latex/contrib/reledmac/reledmac.dtx
index 2a1e6ee2ed..df809b04ab 100644
--- a/macros/latex/contrib/reledmac/reledmac.dtx
+++ b/macros/latex/contrib/reledmac/reledmac.dtx
@@ -570,6 +570,7 @@
% \changes{v2.34.7}{2020/11/19}{Fix bug with \protect\cs{parafootsepX} in some circumstances (added with v2.34.4).}
% \changes{v2.35.0}{2020/11/29}{Add \protect\cs{linenumannotationothersidetrue}.}
% \changes{v2.35.0}{2020/11/29}{Add new hooks: \protect\cs{Xnolinenumber}, \protect\cs{Xendnolinenumber}, \protect\cs{Xnolinenumberifannotation}, \protect\cs{Xendnolinenumberifannotation}.}
+% \changes{v2.35.1}{2020/12/20}{Fix a bug when printing ending page number in endnotes and using the \protect\package{hyperref} package.}
% Typeset scholarly editions with \LaTeX\thanks{This file (\dtxfilename)
% has version number \fileversion, last revised \filedate.}}
%
@@ -4449,7 +4450,7 @@
% \begin{macrocode}
%<*code>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{reledmac}[2020/11/29 v2.35.0 typesetting critical editions]%
+\ProvidesPackage{reledmac}[2020/12/20 v2.35.1 typesetting critical editions]%
% \end{macrocode}
%
% \subsection{Package options}
@@ -14811,7 +14812,7 @@
{\csuse{Xendsympagenum@\@currentseries}}%
}%
{%
- \wrap@edcrossref{\@this@crossref@end}\printnpnum{#4}%
+ \wrap@edcrossref{\@this@crossref@end}{\printnpnum{#4}}%
}%
\fi%
% \end{macrocode}
diff --git a/macros/latex/contrib/reledmac/reledmac.pdf b/macros/latex/contrib/reledmac/reledmac.pdf
index 098ff0373e..5480783174 100644
--- a/macros/latex/contrib/reledmac/reledmac.pdf
+++ b/macros/latex/contrib/reledmac/reledmac.pdf
Binary files differ
diff --git a/macros/latex/contrib/reledmac/reledpar.pdf b/macros/latex/contrib/reledmac/reledpar.pdf
index f593ec914d..e1538235bd 100644
--- a/macros/latex/contrib/reledmac/reledpar.pdf
+++ b/macros/latex/contrib/reledmac/reledpar.pdf
Binary files differ
diff --git a/macros/luatex/generic/luaxml/README b/macros/luatex/generic/luaxml/README
index ab8a407dd0..9ac304ea1d 100644
--- a/macros/luatex/generic/luaxml/README
+++ b/macros/luatex/generic/luaxml/README
@@ -28,7 +28,7 @@ Author
------
Michal Hoftich
Email: michal.h21@gmail.com
-Version: v0.1m, 2020-07-19
+Version: v0.1n, 2020-12-20
Original authors: Paul Chakravarti and Manoel Campos (http://manoelcampos.com)
diff --git a/macros/luatex/generic/luaxml/luaxml-cssquery.lua b/macros/luatex/generic/luaxml/luaxml-cssquery.lua
index d353a310c4..062d66d745 100644
--- a/macros/luatex/generic/luaxml/luaxml-cssquery.lua
+++ b/macros/luatex/generic/luaxml/luaxml-cssquery.lua
@@ -58,24 +58,37 @@ local function cssquery()
local function make_nth(curr_el)
local pos = 0
local el_pos = 0
+ local type_pos = 0
-- get current node list
local siblings = curr_el:get_siblings()
if siblings then
+ local parent = curr_el:get_parent()
+ local element_types = {}
for _, other_el in ipairs(siblings) do
-- number the elements
if other_el:is_element() then
pos = pos + 1
other_el.nth = pos
+ -- save also element type, for nth-of-type and similar queries
+ local el_name = other_el:get_element_name()
+ local counter = (element_types[el_name] or 0) + 1
+ other_el.type_nth = counter
+ element_types[el_name] = counter
-- save the current element position
if other_el == curr_el then
el_pos = pos
+ type_pos = counter
end
end
end
+ -- save counter of element types
+ parent.element_types = element_types
+ -- save count of elements
+ parent.child_elements = pos
else
return false
end
- return el_pos
+ return el_pos, type_pos
end
local function test_first_child(el, nth)
@@ -83,6 +96,30 @@ local function cssquery()
return el_pos == 1
end
+ local function test_first_of_type(el, val)
+ local type_pos = el.type_nth
+ if not type_pos then _, type_pos = make_nth(el) end
+ return type_pos == 1
+ end
+
+ local function test_last_child(el, val)
+ local el_pos = el.nth or make_nth(el)
+ -- number of child elements is saved in the parent element
+ -- by make_nth function
+ local parent = el:get_parent()
+ return el_pos == parent.child_elements
+ end
+
+ local function test_last_of_type(el, val)
+ local type_pos = el.type_nth
+ if not type_pos then _, type_pos = make_nth(el) end
+ -- get table with type counts in this sibling list
+ local parent = el:get_parent()
+ local element_types = parent.element_types or {}
+ local type_count = element_types[el:get_element_name()]
+ return type_pos == type_count
+ end
+
-- test element for nth-child selector
local function test_nth_child(el, nth)
local el_pos = el.nth or make_nth(el)
@@ -90,6 +127,50 @@ local function cssquery()
return el_pos == tonumber(nth)
end
+ -- test if element has attribute
+ local function test_attr(el, attr)
+ local result = el:get_attribute(attr)
+ return result~=nil
+ end
+
+ local function test_any(el, value)
+ -- * selector
+ return true
+ end
+
+ -- test attribute values
+ local function test_attr_value(el, parts)
+ -- parts is a table: {attr_name, modifier, search value}
+ local _, name, modifier, search = table.unpack(parts)
+ local value = el:get_attribute(name)
+ if value == nil then return false end
+ -- make sure we deal with a string
+ value = tostring(value)
+ -- make the search string safe for pattern matching
+ local escaped_search = search:gsub("([%(%)%.%%%+%–%*%?%[%^%$])", "%%%1")
+ if modifier == "" then
+ return value == search
+ elseif modifier == "|" then
+ -- attribute must be exactly the value or start with value + "-"
+ return value == search or (value:match("^" .. escaped_search .. "%-")~=nil)
+ elseif modifier == "~" then
+ -- test any word
+ for word in value:gmatch("(%S+)") do
+ if word == search then return true end
+ end
+ return false
+ elseif modifier == "^" then
+ -- value start
+ return value:match("^" .. escaped_search) ~= nil
+ elseif modifier == "$" then
+ -- value ends
+ return value:match(escaped_search .. "$") ~= nil
+ elseif modifier == "*" then
+ -- value anywhere
+ return value:match(escaped_search) ~= nil
+ end
+ end
+
--- Test prepared querylist
-- @param domobj DOM element to test
-- @param querylist [optional] List of queries to test
@@ -118,6 +199,24 @@ local function cssquery()
return test_nth_child(el, value)
elseif key == "first-child" then
return test_first_child(el, value)
+ elseif key == "first-of-type" then
+ return test_first_of_type(el, value)
+ elseif key == "last-child" then
+ return test_last_child(el, value)
+ elseif key == "last-of-type" then
+ return test_last_of_type(el, value)
+ elseif key == "attr" then
+ return test_attr(el, value)
+ elseif key == "attr_value" then
+ return test_attr_value(el, value)
+ elseif key == "any" then
+ return test_any(el, value)
+ elseif key == "combinator" then
+ -- ignore combinators in this function
+ else
+ if type(value) == "table" then value = table.concat(value, ":") end
+ print("unsupported feature", key, value)
+ return false
end
-- TODO: Add more cases
-- just return true for not supported selectors
@@ -128,7 +227,9 @@ local function cssquery()
-- test one object in CSS selector
local matched = {}
for key, value in pairs(query) do
- matched[#matched+1] = test_part(key, value, el)
+ local test = test_part(key, value, el)
+ if test~= true then return false end
+ matched[#matched+1] = test
end
if #matched == 0 then return false end
for k, v in ipairs(matched) do
@@ -137,17 +238,80 @@ local function cssquery()
return true
end
- local function match_query(query, el)
+
+ -- get next CSS selector
+ local function get_next_selector(query)
local query = query or {}
- local object = table.remove(query) -- get current object from the query stack
+ local selector = table.remove(query)
+ return selector
+ end
+
+ local function get_next_combinator(query)
+ local query = query or {}
+ local combinator = " " -- default combinator
+ local selector = query[#query] -- get the last item in selector query
+ if not selector then return nil end
+ -- detect if this selector is a combinator"
+ if selector and selector.combinator then
+ -- save the combinator and select next selector from the query
+ combinator = selector.combinator
+ table.remove(query) -- remove combinator from query
+ end
+ return combinator
+ end
+
+ local function get_previous_element(el)
+ -- try to find a previous element
+ local prev = el:get_prev_node()
+ if not prev then return nil end
+ if prev:is_element() then return prev end
+ return get_previous_element(prev)
+ end
+
+
+ local function match_query(query, el)
+ local function match_parent(query, el)
+ -- loop over the whole elemnt three and try to mach the css selector
+ if el and el:is_element() then
+ local query = query or {}
+ local object = query[#query]
+ local status = test_object(object, el)
+ return status or match_parent(query, el:get_parent())
+ else
+ -- break processing if we reach top of the element tree
+ return false
+ end
+ end
+ local function match_sibling(query, el)
+ -- match potentially more distant sibling
+ if el and el:is_element() then
+ return match_query(query, el) or match_query(query, get_previous_element(el))
+ else
+ return false
+ end
+ end
+ local object = get_next_selector(query) -- get current object from the query stack
if not object then return true end -- if the query stack is empty, then we can be sure that it matched previous items
- if not el:is_element() then return false end -- if there is object to test, but current node isn't element, test failed
+ if not el or not el:is_element() then return false end -- if there is object to test, but current node isn't element, test failed
local result = test_object(object, el)
if result then
- return match_query(query, el:get_parent())
+ local combinator = get_next_combinator(query)
+ if combinator == " " then
+ -- we must traverse all parent elements to find if any matches
+ return match_parent(query, el:get_parent())
+ elseif combinator == ">" then -- simplest case, we need to match just the direct parent
+ return match_query(query, el:get_parent())
+ elseif combinator == "+" then -- match previous element
+ return match_query(query, get_previous_element(el))
+ elseif combinator == "~" then -- match all previous elements
+ return match_sibling(query, get_previous_element(el))
+ elseif combinator == nil then
+ return result
+ end
end
return false
end
+
for _,element in ipairs(querylist) do
local query = {}
for k,v in ipairs(element.query) do query[k] = v end
@@ -191,7 +355,13 @@ local function cssquery()
local t = {}
for _, atom in ipairs(part) do
local key = atom[1]
- local value = atom[2]
+ local value
+ if not atom[3] then
+ value = atom[2]
+ else
+ -- save additional selector parts when available
+ value = atom
+ end
-- support for XML namespaces in selectors
-- the namespace should be added using "|"
-- like namespace|element
diff --git a/macros/luatex/generic/luaxml/luaxml-domobject.lua b/macros/luatex/generic/luaxml/luaxml-domobject.lua
index 6d299d4157..19850ce456 100644
--- a/macros/luatex/generic/luaxml/luaxml-domobject.lua
+++ b/macros/luatex/generic/luaxml/luaxml-domobject.lua
@@ -120,7 +120,7 @@ local function serialize_dom(parser, current,level, output)
return output
elseif xtype == "CDATA" then
-- return content unescaped
- insert(string.format("<![CDATA[%s]]>", text_content))
+ insert("<![CDATA[%s]]>", text_content)
return output
end
@@ -231,6 +231,7 @@ local parse = function(
)
local el = self
if self:is_element(el) then
+ el._attr = el._attr or {}
el._attr[name] = value
return true
end
diff --git a/macros/luatex/generic/luaxml/luaxml-entities.lua b/macros/luatex/generic/luaxml/luaxml-entities.lua
index 4a6f301198..3296f5ff03 100644
--- a/macros/luatex/generic/luaxml/luaxml-entities.lua
+++ b/macros/luatex/generic/luaxml/luaxml-entities.lua
@@ -28,7 +28,7 @@ end
function M.decode(s)
- return s:gsub("&([#a-zA-Z0-9]+);?", function(m)
+ return s:gsub("&([#a-zA-Z0-9%_%:%-]-);", function(m)
-- check if this is named entity first
local named = get_named_entity(m)
local original_entity = "&" .. m .. ";"
diff --git a/macros/luatex/generic/luaxml/luaxml-namedentities.lua b/macros/luatex/generic/luaxml/luaxml-namedentities.lua
index 9a26f448f6..5c5ff00777 100644
--- a/macros/luatex/generic/luaxml/luaxml-namedentities.lua
+++ b/macros/luatex/generic/luaxml/luaxml-namedentities.lua
@@ -1,2234 +1,2233 @@
-local utf8 = require "utf8"
return {
-["Subset"]="⋐",
-["Chi"]="Χ",
-["tprime"]="‴",
-["lneq"]="⪇",
-["RightUpTeeVector"]="⥜",
-["cscr"]="𝒸",
-["leftrightarrows"]="⇆",
-["LeftRightVector"]="⥎",
-["Laplacetrf"]="ℒ",
-["boxHd"]="╤",
-["GreaterSlantEqual"]="⩾",
-["sqsub"]="⊏",
-["nvdash"]="⊬",
-["boxHu"]="╧",
-["vcy"]="в",
-["DiacriticalDoubleAcute"]="˝",
-["nvHarr"]="⤄",
-["lnapprox"]="⪉",
-["fscr"]="𝒻",
-["OverBracket"]="⎴",
-["pm"]="±",
-["ovbar"]="⌽",
-["larrhk"]="↩",
-["atilde"]="ã",
-["Igrave"]="Ì",
-["profsurf"]="⌓",
-["Sigma"]="Σ",
-["rHar"]="⥤",
-["Gcedil"]="Ģ",
-["sect"]="§",
-["nmid"]="∤",
-["escr"]="ℯ",
-["delta"]="δ",
-["male"]="♂",
-["Integral"]="∫",
-["RightUpVectorBar"]="⥔",
-["alefsym"]="ℵ",
-["nsqsube"]="⋢",
-["Nacute"]="Ń",
-["mcomma"]="⨩",
-["ApplyFunction"]=utf8.char(8289),
-["rfisht"]="⥽",
-["phmmat"]="ℳ",
-["rarrw"]="↝",
-["backepsilon"]="϶",
-["hscr"]="𝒽",
-["middot"]="·",
-["ldrushar"]="⥋",
-["supne"]="⊋",
-["Longleftrightarrow"]="⟺",
-["Oacute"]="Ó",
-["af"]="⁡",
+["Implies"]="⇒",
+["longrightarrow"]="⟶",
+["precneqq"]="⪵",
+["geqslant"]="⩾",
+["Product"]="∏",
+["Scirc"]="Ŝ",
+["lvnE"]="≨︀",
+["dotminus"]="∸",
+["sscr"]="𝓈",
+["capdot"]="⩀",
+["dlcrop"]="⌍",
+["omacr"]="ō",
+["sext"]="✶",
+["xutri"]="△",
+["xrArr"]="⟹",
+["glE"]="⪒",
+["NotSupersetEqual"]="⊉",
+["backsim"]="∽",
["sup"]="⊃",
-["lozenge"]="◊",
-["scy"]="с",
-["gscr"]="ℊ",
-["smallsetminus"]="∖",
+["realpart"]="ℜ",
["hardcy"]="ъ",
-["DoubleVerticalBar"]="∥",
-["Yuml"]="Ÿ",
-["plusdu"]="⨥",
-["NotSucceedsSlantEqual"]="⋡",
-["nwnear"]="⤧",
-["lfloor"]="⌊",
-["rcy"]="р",
-["jscr"]="𝒿",
-["AMP"]="&",
-["acute"]="´",
-["uacute"]="ú",
-["Or"]="⩔",
-["rdldhar"]="⥩",
-["langd"]="⦑",
-["Iacute"]="Í",
-["spar"]="∥",
-["ucy"]="у",
-["rsh"]="↱",
-["Kcedil"]="Ķ",
-["iscr"]="𝒾",
-["lambda"]="λ",
-["lbrkslu"]="⦍",
-["napE"]="⩰̸",
-["shcy"]="ш",
-["nsupE"]="⫆̸",
-["Ycirc"]="Ŷ",
-["sect"]="§",
-["precnapprox"]="⪹",
-["iocy"]="ё",
-["dzcy"]="џ",
+["sqcap"]="⊓",
+["brvbar"]="¦",
+["LT"]="<",
+["udarr"]="⇅",
+["lozf"]="⧫",
+["Eogon"]="Ę",
+["frac18"]="⅛",
+["lesssim"]="≲",
+["wedbar"]="⩟",
+["EmptyVerySmallSquare"]="▫",
+["aring"]="å",
+["lesdoto"]="⪁",
+["ltquest"]="⩻",
+["LeftUpTeeVector"]="⥠",
+["FilledSmallSquare"]="◼",
+["mho"]="℧",
+["NotGreaterTilde"]="≵",
+["xharr"]="⟷",
+["NotSucceedsEqual"]="⪰̸",
+["sqsupset"]="⊐",
+["Ccedil"]="Ç",
+["aacute"]="á",
+["succcurlyeq"]="≽",
+["gneq"]="⪈",
+["forall"]="∀",
+["rightharpoonup"]="⇀",
+["leftarrow"]="←",
+["ang"]="∠",
+["mapstoup"]="↥",
+["xscr"]="𝓍",
+["NotTildeEqual"]="≄",
+["ograve"]="ò",
+["boxdl"]="┐",
+["DownLeftVectorBar"]="⥖",
+["nsup"]="⊅",
+["shchcy"]="щ",
+["demptyv"]="⦱",
+["apos"]="'",
+["between"]="≬",
+["leftrightsquigarrow"]="↭",
+["gtcc"]="⪧",
+["grave"]="`",
+["bigodot"]="⨀",
+["oline"]="‾",
+["angmsdad"]="⦫",
+["NotCongruent"]="≢",
+["gtquest"]="⩼",
+["fltns"]="▱",
+["smeparsl"]="⧤",
+["Eta"]="Η",
+["ltdot"]="⋖",
+["rhard"]="⇁",
+["rscr"]="𝓇",
["ETH"]="Ð",
-["GreaterTilde"]="≳",
-["coprod"]="∐",
-["rpar"]=")",
-["lthree"]="⋋",
-["ImaginaryI"]="ⅈ",
-["DoubleUpDownArrow"]="⇕",
-["intercal"]="⊺",
-["spadesuit"]="♠",
-["boxVH"]="╬",
-["smashp"]="⨳",
-["nu"]="ν",
-["Agrave"]="À",
-["boxtimes"]="⊠",
-["sext"]="✶",
-["nsub"]="⊄",
-["oelig"]="œ",
-["GreaterEqual"]="≥",
-["TRADE"]="™",
-["dtrif"]="▾",
-["nless"]="≮",
-["mu"]="μ",
-["larrsim"]="⥳",
-["GreaterEqualLess"]="⋛",
-["Uuml"]="Ü",
-["LeftArrowBar"]="⇤",
-["ntrianglerighteq"]="⋭",
-["DiacriticalDot"]="˙",
-["LongLeftArrow"]="⟵",
-["agrave"]="à",
-["lmoustache"]="⎰",
-["nvDash"]="⊭",
-["para"]="¶",
-["nlt"]="≮",
-["Eacute"]="É",
-["spades"]="♠",
-["lrcorner"]="⌟",
-["checkmark"]="✓",
-["lessdot"]="⋖",
-["opar"]="⦷",
-["nVDash"]="⊯",
-["pertenk"]="‱",
-["range"]="⦥",
-["Pr"]="⪻",
-["Gammad"]="Ϝ",
-["ape"]="≊",
-["Longleftarrow"]="⟸",
-["boxV"]="║",
-["rightthreetimes"]="⋌",
+["iocy"]="ё",
+["semi"]=";",
+["nexists"]="∄",
+["approxeq"]="≊",
+["compfn"]="∘",
+["sstarf"]="⋆",
+["angrtvbd"]="⦝",
["gnap"]="⪊",
-["vzigzag"]="⦚",
-["Ecirc"]="Ê",
-["npar"]="∦",
-["notinvb"]="⋷",
-["Tau"]="Τ",
-["blank"]="␣",
-["Kappa"]="Κ",
-["rmoust"]="⎱",
-["GJcy"]="Ѓ",
-["ufisht"]="⥾",
-["NotLeftTriangleBar"]="⧏̸",
-["bigvee"]="⋁",
-["lrhar"]="⇋",
-["supset"]="⊃",
-["uwangle"]="⦧",
-["UpTeeArrow"]="↥",
-["supE"]="⫆",
-["imof"]="⊷",
-["leg"]="⋚",
-["notniva"]="∌",
-["nvgt"]=">⃒",
-["rthree"]="⋌",
-["yfr"]="𝔶",
-["uHar"]="⥣",
-["nshortmid"]="∤",
-["biguplus"]="⨄",
-["barvee"]="⊽",
-["iff"]="⇔",
-["boxvH"]="╪",
-["simrarr"]="⥲",
-["Egrave"]="È",
-["ntilde"]="ñ",
-["VerticalTilde"]="≀",
-["sigmaf"]="ς",
-["khcy"]="х",
-["planck"]="ℏ",
-["NotNestedGreaterGreater"]="⪢̸",
-["NonBreakingSpace"]=" ",
-["OpenCurlyQuote"]="‘",
-["supsim"]="⫈",
-["cudarrl"]="⤸",
-["theta"]="θ",
-["notindot"]="⋵̸",
-["Omicron"]="Ο",
-["ccedil"]="ç",
-["colone"]="≔",
-["bscr"]="𝒷",
-["Dagger"]="‡",
-["comma"]=",",
+["mDDot"]="∺",
+["udblac"]="ű",
["Acirc"]="Â",
-["plankv"]="ℏ",
-["boxdr"]="┌",
-["rarrap"]="⥵",
-["rmoustache"]="⎱",
-["LeftAngleBracket"]="⟨",
-["Cacute"]="Ć",
-["blk34"]="▓",
-["rfloor"]="⌋",
-["awconint"]="∳",
-["sfrown"]="⌢",
-["middot"]="·",
-["ascr"]="𝒶",
-["dot"]="˙",
-["caron"]="ˇ",
-["image"]="ℑ",
-["esdot"]="≐",
-["ohbar"]="⦵",
-["rarrb"]="⇥",
-["submult"]="⫁",
-["plusb"]="⊞",
-["oopf"]="𝕠",
-["breve"]="˘",
-["conint"]="∮",
-["angrt"]="∟",
-["nbump"]="≎̸",
-["raquo"]="»",
-["Iuml"]="Ï",
-["Rcedil"]="Ŗ",
-["minus"]="−",
-["nsucceq"]="⪰̸",
-["telrec"]="⌕",
-["CHcy"]="Ч",
-["nrightarrow"]="↛",
-["NotRightTriangle"]="⋫",
-["zfr"]="𝔷",
-["succ"]="≻",
-["Aacute"]="Á",
-["NestedLessLess"]="≪",
-["RightTeeArrow"]="↦",
-["homtht"]="∻",
-["Cup"]="⋓",
-["lcub"]="{",
-["race"]="∽̱",
-["THORN"]="Þ",
-["propto"]="∝",
-["odblac"]="ő",
-["mumap"]="⊸",
-["filig"]="fi",
-["ecir"]="≖",
-["DoubleRightArrow"]="⇒",
-["npreceq"]="⪯̸",
-["female"]="♀",
-["LeftFloor"]="⌊",
-["gtrarr"]="⥸",
-["dotsquare"]="⊡",
-["map"]="↦",
-["OverBrace"]="⏞",
-["zopf"]="𝕫",
-["rang"]="⟩",
-["laquo"]="«",
-["elsdot"]="⪗",
-["frac56"]="⅚",
-["Iuml"]="Ï",
-["ocirc"]="ô",
-["clubs"]="♣",
-["IOcy"]="Ё",
-["scnE"]="⪶",
-["deg"]="°",
-["simgE"]="⪠",
-["nap"]="≉",
-["blacktriangle"]="▴",
-["edot"]="ė",
-["epsiv"]="ϵ",
-["napprox"]="≉",
-["NotGreaterSlantEqual"]="⩾̸",
-["prap"]="⪷",
-["lnap"]="⪉",
-["circledS"]="Ⓢ",
-["lang"]="⟨",
-["qprime"]="⁗",
-["aelig"]="æ",
-["ncongdot"]="⩭̸",
-["supdsub"]="⫘",
-["nltrie"]="⋬",
-["xopf"]="𝕩",
+["UnderParenthesis"]="⏝",
+["nisd"]="⋺",
+["lneq"]="⪇",
+["Dagger"]="‡",
+["qscr"]="𝓆",
+["gneqq"]="≩",
+["doteqdot"]="≑",
+["DoubleVerticalBar"]="∥",
+["emptyset"]="∅",
+["lEg"]="⪋",
+["subseteq"]="⊆",
+["dwangle"]="⦦",
+["dotplus"]="∔",
+["NotPrecedesSlantEqual"]="⋠",
+["bnot"]="⌐",
["LeftDownVector"]="⇃",
-["duarr"]="⇵",
-["urcorner"]="⌝",
-["nvltrie"]="⊴⃒",
-["Pi"]="Π",
+["leg"]="⋚",
+["Therefore"]="∴",
+["Omega"]="Ω",
+["acE"]="∾̳",
+["Auml"]="Ä",
+["xvee"]="⋁",
["Eacute"]="É",
-["nGtv"]="≫̸",
-["icirc"]="î",
-["twoheadleftarrow"]="↞",
+["LeftFloor"]="⌊",
+["swnwar"]="⤪",
+["Jukcy"]="Є",
+["nless"]="≮",
+["NotSquareSupersetEqual"]="⋣",
+["larrfs"]="⤝",
+["gcy"]="г",
+["solbar"]="⌿",
+["rharul"]="⥬",
+["dscy"]="ѕ",
+["yen"]="¥",
+["ForAll"]="∀",
+["DownArrow"]="↓",
+["qprime"]="⁗",
+["NegativeThickSpace"]="​",
+["part"]="∂",
+["Iukcy"]="І",
+["ltcc"]="⪦",
+["xlArr"]="⟸",
+["fcy"]="ф",
+["gl"]="≷",
+["rsh"]="↱",
+["lrhar"]="⇋",
["divide"]="÷",
-["yopf"]="𝕪",
-["ntlg"]="≸",
-["Darr"]="↡",
+["bemptyv"]="⦰",
+["rx"]="℞",
+["ecy"]="э",
+["ApplyFunction"]="⁡",
+["divideontimes"]="⋇",
+["prod"]="∏",
+["boxHU"]="╩",
+["HARDcy"]="Ъ",
+["mstpos"]="∾",
+["llcorner"]="⌞",
+["rsquor"]="’",
+["NotTildeFullEqual"]="≇",
+["mlcp"]="⫛",
+["cemptyv"]="⦲",
+["Proportional"]="∝",
+["DiacriticalDoubleAcute"]="˝",
+["dcy"]="д",
+["Yacute"]="Ý",
+["egsdot"]="⪘",
["hslash"]="ℏ",
-["Coproduct"]="∐",
-["profline"]="⌒",
-["imagline"]="ℐ",
-["chcy"]="ч",
-["ccedil"]="ç",
-["PrecedesEqual"]="⪯",
-["jcirc"]="ĵ",
-["nang"]="∠⃒",
-["Icirc"]="Î",
-["nbumpe"]="≏̸",
-["incare"]="℅",
-["tint"]="∭",
-["nhArr"]="⇎",
-["emsp13"]=" ",
-["blacktriangleleft"]="◂",
-["Star"]="⋆",
-["hkswarow"]="⤦",
-["NegativeThickSpace"]="​",
-["eDot"]="≑",
-["Euml"]="Ë",
-["scaron"]="š",
-["RightDownVectorBar"]="⥕",
-["cent"]="¢",
-["jukcy"]="є",
-["backsimeq"]="⋍",
-["Ncy"]="Н",
-["DD"]="ⅅ",
-["circledast"]="⊛",
-["ccirc"]="ĉ",
-["rsaquo"]="›",
-["YIcy"]="Ї",
-["iquest"]="¿",
-["NotExists"]="∄",
-["iukcy"]="і",
-["Tab"]=" ",
-["Equilibrium"]="⇌",
-["nLt"]="≪⃒",
-["yen"]="¥",
-["CircleDot"]="⊙",
-["CircleMinus"]="⊖",
-["topf"]="𝕥",
-["equivDD"]="⩸",
-["DoubleLeftRightArrow"]="⇔",
-["ngsim"]="≵",
-["upuparrows"]="⇈",
-["ll"]="≪",
-["cirscir"]="⧂",
-["ShortLeftArrow"]="←",
-["angmsdag"]="⦮",
-["shortmid"]="∣",
-["ngeqslant"]="⩾̸",
-["subset"]="⊂",
-["curvearrowleft"]="↶",
-["gdot"]="ġ",
-["circledcirc"]="⊚",
-["Pcy"]="П",
-["asymp"]="≈",
-["boxUr"]="╙",
-["uopf"]="𝕦",
-["frac15"]="⅕",
-["Iacute"]="Í",
-["Utilde"]="Ũ",
-["Congruent"]="≡",
-["nhpar"]="⫲",
-["capbrcup"]="⩉",
-["ordf"]="ª",
-["SOFTcy"]="Ь",
-["nlArr"]="⇍",
-["not"]="¬",
-["ffllig"]="ffl",
-["nprec"]="⊀",
-["Hat"]="^",
+["infin"]="∞",
["Auml"]="Ä",
-["ntriangleleft"]="⋪",
-["longmapsto"]="⟼",
-["nvrtrie"]="⊵⃒",
-["timesb"]="⊠",
-["lsh"]="↰",
-["Jcy"]="Й",
-["gcirc"]="ĝ",
-["Oacute"]="Ó",
-["vartriangleright"]="⊳",
-["NotRightTriangleEqual"]="⋭",
-["Rightarrow"]="⇒",
-["ast"]="*",
-["hamilt"]="ℋ",
-["Ncedil"]="Ņ",
-["apE"]="⩰",
-["macr"]="¯",
-["cwconint"]="∲",
-["Kcy"]="К",
-["Ucirc"]="Û",
-["hcirc"]="ĥ",
-["yacy"]="я",
-["uml"]="¨",
-["popf"]="𝕡",
-["bumpE"]="⪮",
-["varnothing"]="∅",
-["RightUpVector"]="↾",
-["curren"]="¤",
-["Scedil"]="Ş",
-["FilledVerySmallSquare"]="▪",
-["dollar"]="$",
-["Lcy"]="Л",
-["longrightarrow"]="⟶",
-["LeftTee"]="⊣",
-["excl"]="!",
-["acirc"]="â",
-["wp"]="℘",
-["lcaron"]="ľ",
-["NotGreaterFullEqual"]="≧̸",
-["CounterClockwiseContourIntegral"]="∳",
-["sup2"]="²",
-["rnmid"]="⫮",
-["Lcedil"]="Ļ",
-["ddotseq"]="⩷",
-["tbrk"]="⎴",
-["mlcp"]="⫛",
-["rarrhk"]="↪",
-["Tilde"]="∼",
-["Mcy"]="М",
-["aring"]="å",
-["rarrsim"]="⥴",
-["nopf"]="𝕟",
-["aelig"]="æ",
-["order"]="ℴ",
-["diamondsuit"]="♦",
-["nvsim"]="∼⃒",
-["lhard"]="↽",
-["commat"]="@",
-["qint"]="⨌",
-["lsquo"]="‘",
-["sqcaps"]="⊓︀",
-["circlearrowleft"]="↺",
-["NotElement"]="∉",
-["measuredangle"]="∡",
-["Atilde"]="Ã",
-["CapitalDifferentialD"]="ⅅ",
-["kgreen"]="ĸ",
-["Cscr"]="𝒞",
+["Wcirc"]="Ŵ",
+["larrtl"]="↢",
+["Aacute"]="Á",
+["LeftTriangleEqual"]="⊴",
+["NegativeMediumSpace"]="​",
+["TripleDot"]="⃛",
+["utdot"]="⋰",
+["isinv"]="∈",
+["looparrowright"]="↬",
+["loang"]="⟬",
+["multimap"]="⊸",
["NotLessEqual"]="≰",
-["trpezium"]="⏢",
-["ne"]="≠",
-["NotSuperset"]="⊃⃒",
-["nearrow"]="↗",
-["ncong"]="≇",
-["doteqdot"]="≑",
-["supmult"]="⫂",
-["longleftrightarrow"]="⟷",
-["Rarr"]="↠",
-["DoubleUpArrow"]="⇑",
-["Dscr"]="𝒟",
-["mp"]="∓",
-["jmath"]="ȷ",
-["erarr"]="⥱",
-["searrow"]="↘",
-["Sup"]="⋑",
-["lvnE"]="≨︀",
-["ffilig"]="ffi",
-["NotSquareSupersetEqual"]="⋣",
-["bullet"]="•",
-["bigstar"]="★",
-["cylcty"]="⌭",
-["nvle"]="≤⃒",
-["TildeFullEqual"]="≅",
-["lopf"]="𝕝",
-["sqsupseteq"]="⊒",
-["lt"]="<",
-["geqslant"]="⩾",
+["midcir"]="⫰",
+["nge"]="≱",
["quot"]="\"",
-["le"]="≤",
-["square"]="□",
-["sigma"]="σ",
-["prE"]="⪳",
-["rtrie"]="⊵",
-["triangleq"]="≜",
+["REG"]="®",
+["div"]="÷",
+["complexes"]="ℂ",
+["lhblk"]="▄",
+["gvnE"]="≩︀",
+["leftharpoonup"]="↼",
+["it"]="⁢",
+["clubsuit"]="♣",
+["iff"]="⇔",
+["Hacek"]="ˇ",
+["CircleTimes"]="⊗",
+["Cacute"]="Ć",
+["rarrtl"]="↣",
+["RightDownVector"]="⇂",
+["rarrfs"]="⤞",
+["UpArrowBar"]="⤒",
+["male"]="♂",
+["RightTriangle"]="⊳",
+["GreaterTilde"]="≳",
+["Barwed"]="⌆",
+["ltlarr"]="⥶",
+["Zdot"]="Ż",
+["parsim"]="⫳",
+["Ugrave"]="Ù",
+["Dot"]="¨",
+["circleddash"]="⊝",
+["rsaquo"]="›",
+["hyphen"]="‐",
+["angrt"]="∟",
+["RightTriangleEqual"]="⊵",
+["Darr"]="↡",
+["ulcrop"]="⌏",
+["olcir"]="⦾",
+["gimel"]="ℷ",
+["gel"]="⋛",
+["SquareSubset"]="⊏",
+["Uacute"]="Ú",
+["gt"]=">",
+["lnap"]="⪉",
+["Union"]="⋃",
+["nu"]="ν",
+["and"]="∧",
+["ltcir"]="⩹",
["Fscr"]="ℱ",
+["ee"]="ⅇ",
+["laquo"]="«",
+["Hfr"]="ℌ",
+["prec"]="≺",
+["imagline"]="ℐ",
+["precnsim"]="⋨",
+["zhcy"]="ж",
+["mu"]="μ",
+["rlarr"]="⇄",
+["pound"]="£",
+["origof"]="⊶",
+["rfloor"]="⌋",
+["lnsim"]="⋦",
+["nVdash"]="⊮",
+["otimes"]="⊗",
+["iuml"]="ï",
+["Cscr"]="𝒞",
+["lsime"]="⪍",
+["ngeqq"]="≧̸",
+["Del"]="∇",
+["Coproduct"]="∐",
+["NotSubsetEqual"]="⊈",
+["HilbertSpace"]="ℋ",
+["frac58"]="⅝",
+["cap"]="∩",
+["roang"]="⟭",
+["intlarhk"]="⨗",
+["DownTee"]="⊤",
+["thickapprox"]="≈",
+["prnap"]="⪹",
+["laquo"]="«",
+["lesdot"]="⩿",
+["inodot"]="ı",
+["Hscr"]="ℋ",
+["YIcy"]="Ї",
+["ctdot"]="⋯",
+["thetav"]="ϑ",
+["DoubleUpDownArrow"]="⇕",
+["succ"]="≻",
+["nbumpe"]="≏̸",
+["ReverseElement"]="∋",
+["Oacute"]="Ó",
+["equest"]="≟",
+["Lt"]="≪",
+["Nacute"]="Ń",
["DiacriticalTilde"]="˜",
-["SucceedsSlantEqual"]="≽",
-["mopf"]="𝕞",
-["Ecaron"]="Ě",
-["UpArrowDownArrow"]="⇅",
-["ges"]="⩾",
-["nsqsupe"]="⋣",
-["ubrcy"]="ў",
-["Gscr"]="𝒢",
-["HARDcy"]="Ъ",
-["jopf"]="𝕛",
-["gtquest"]="⩼",
-["iinfin"]="⧜",
-["twixt"]="≬",
+["Escr"]="ℰ",
+["boxvH"]="╪",
+["Ifr"]="ℑ",
+["mp"]="∓",
+["ell"]="ℓ",
+["Iacute"]="Í",
+["NotNestedGreaterGreater"]="⪢̸",
+["raquo"]="»",
+["Zcy"]="З",
+["micro"]="µ",
+["dzigrarr"]="⟿",
+["rtrif"]="▸",
+["Uuml"]="Ü",
+["nvHarr"]="⤄",
+["leqslant"]="⩽",
+["tritime"]="⨻",
+["nlarr"]="↚",
+["NotRightTriangle"]="⋫",
+["apid"]="≋",
+["succeq"]="⪰",
+["NotEqualTilde"]="≂̸",
+["varphi"]="ϕ",
+["Vert"]="‖",
+["int"]="∫",
+["lurdshar"]="⥊",
+["lneqq"]="≨",
+["Jsercy"]="Ј",
+["Superset"]="⊃",
+["subsetneqq"]="⫋",
+["gap"]="⪆",
+["ssmile"]="⌣",
+["Ugrave"]="Ù",
+["IOcy"]="Ё",
+["ltimes"]="⋉",
+["UnderBracket"]="⎵",
+["subseteqq"]="⫅",
+["Dscr"]="𝒟",
+["dtrif"]="▾",
+["raquo"]="»",
+["hbar"]="ℏ",
+["ge"]="≥",
+["cudarrr"]="⤵",
+["icy"]="и",
+["plusdo"]="∔",
+["bull"]="•",
+["weierp"]="℘",
+["mapsto"]="↦",
+["Uring"]="Ů",
+["supplus"]="⫀",
+["Succeeds"]="≻",
+["Ascr"]="𝒜",
+["cdot"]="ċ",
+["nwarr"]="↖",
+["target"]="⌖",
+["dharr"]="⇂",
+["curlyvee"]="⋎",
+["supE"]="⫆",
+["emsp13"]=" ",
["ltrie"]="⊴",
+["olarr"]="↺",
+["RightTeeVector"]="⥛",
+["Vvdash"]="⊪",
+["larrsim"]="⥳",
+["varsubsetneq"]="⊊︀",
+["Not"]="⫬",
+["CenterDot"]="·",
+["PlusMinus"]="±",
+["aring"]="å",
+["Nscr"]="𝒩",
+["delta"]="δ",
+["npre"]="⪯̸",
+["Vcy"]="В",
+["NotVerticalBar"]="∤",
+["scpolint"]="⨓",
+["rcedil"]="ŗ",
+["Lmidot"]="Ŀ",
+["DScy"]="Ѕ",
+["nsubseteq"]="⊈",
+["ngE"]="≧̸",
+["NotSquareSubsetEqual"]="⋢",
+["edot"]="ė",
+["Ucy"]="У",
+["lessapprox"]="⪅",
+["niv"]="∋",
+["Kscr"]="𝒦",
+["LeftVectorBar"]="⥒",
+["nhpar"]="⫲",
+["scedil"]="ş",
+["Uacute"]="Ú",
+["ntrianglelefteq"]="⋬",
+["Otilde"]="Õ",
+["iexcl"]="¡",
+["lbrke"]="⦋",
+["simdot"]="⩪",
+["sigmaf"]="ς",
+["Bfr"]="𝔅",
+["pitchfork"]="⋔",
+["ngeqslant"]="⩾̸",
+["Pscr"]="𝒫",
+["gsime"]="⪎",
+["Ouml"]="Ö",
+["rarrsim"]="⥴",
+["subE"]="⫅",
+["otimesas"]="⨶",
+["lfloor"]="⌊",
+["prop"]="∝",
+["imacr"]="ī",
+["blacktriangleleft"]="◂",
+["Ntilde"]="Ñ",
+["llarr"]="⇇",
+["nsucc"]="⊁",
+["PartialD"]="∂",
+["Iacute"]="Í",
+["gdot"]="ġ",
+["Afr"]="𝔄",
+["Igrave"]="Ì",
["csub"]="⫏",
-["Hscr"]="ℋ",
-["leftharpoondown"]="↽",
+["Mscr"]="ℳ",
+["Scy"]="С",
+["bsime"]="⋍",
+["nequiv"]="≢",
+["scnap"]="⪺",
+["Tab"]=" ",
+["Equal"]="⩵",
+["blacklozenge"]="⧫",
+["nrarrc"]="⤳̸",
+["divide"]="÷",
["RightUpDownVector"]="⥏",
-["LongLeftRightArrow"]="⟷",
-["Im"]="ℑ",
-["dcaron"]="ď",
+["iinfin"]="⧜",
+["precnapprox"]="⪹",
+["dArr"]="⇓",
+["orslope"]="⩗",
+["Rcy"]="Р",
+["sqsub"]="⊏",
+["OverBracket"]="⎴",
+["sum"]="∑",
+["ncedil"]="ņ",
+["ltrPar"]="⦖",
+["ii"]="ⅈ",
+["Gcirc"]="Ĝ",
+["SucceedsTilde"]="≿",
+["RightFloor"]="⌋",
+["osol"]="⊘",
["barwedge"]="⌅",
-["nexist"]="∄",
-["blacktriangledown"]="▾",
-["fork"]="⋔",
-["rhard"]="⇁",
-["cent"]="¢",
-["RightTriangle"]="⊳",
-["Eta"]="Η",
-["dotminus"]="∸",
-["nles"]="⩽̸",
-["larrtl"]="↢",
-["LeftTriangleEqual"]="⊴",
-["hopf"]="𝕙",
-["gammad"]="ϝ",
-["gsime"]="⪎",
-["llhard"]="⥫",
-["precapprox"]="⪷",
-["profalar"]="⌮",
-["lnE"]="≨",
-["ddagger"]="‡",
-["leq"]="≤",
-["smile"]="⌣",
-["robrk"]="⟧",
-["Jscr"]="𝒥",
-["triangleleft"]="◃",
-["acd"]="∿",
-["prod"]="∏",
-["atilde"]="ã",
-["seArr"]="⇘",
-["therefore"]="∴",
-["iopf"]="𝕚",
-["solbar"]="⌿",
-["kcedil"]="ķ",
-["NotHumpEqual"]="≏̸",
-["nspar"]="∦",
-["frac14"]="¼",
-["nsime"]="≄",
-["DoubleLongLeftArrow"]="⟸",
-["sccue"]="≽",
-["models"]="⊧",
-["SupersetEqual"]="⊇",
-["iquest"]="¿",
-["oline"]="‾",
-["lparlt"]="⦓",
-["triplus"]="⨹",
-["nequiv"]="≢",
-["nlE"]="≦̸",
-["nldr"]="‥",
-["equals"]="=",
-["Agrave"]="À",
-["ccaron"]="č",
-["Yacute"]="Ý",
-["Oslash"]="Ø",
-["udarr"]="⇅",
-["ang"]="∠",
-["dopf"]="𝕕",
-["comp"]="∁",
-["caps"]="∩︀",
-["bowtie"]="⋈",
-["glj"]="⪤",
-["ltquest"]="⩻",
-["cirmid"]="⫯",
-["ordm"]="º",
-["esim"]="≂",
-["reals"]="ℝ",
-["LeftTriangle"]="⊲",
-["flat"]="♭",
-["eopf"]="𝕖",
-["lap"]="⪅",
-["not"]="¬",
-["ENG"]="Ŋ",
-["DiacriticalAcute"]="´",
-["sharp"]="♯",
-["longleftarrow"]="⟵",
-["dblac"]="˝",
-["UpArrow"]="↑",
-["npre"]="⪯̸",
-["bopf"]="𝕓",
-["DScy"]="Ѕ",
+["twoheadrightarrow"]="↠",
+["Gscr"]="𝒢",
+["acy"]="а",
+["dtdot"]="⋱",
+["rbrke"]="⦌",
+["imath"]="ı",
+["Hcirc"]="Ĥ",
+["num"]="#",
+["nprec"]="⊀",
+["smallsetminus"]="∖",
+["lesges"]="⪓",
+["LeftUpVector"]="↿",
+["gtdot"]="⋗",
+["theta"]="θ",
+["kappav"]="ϰ",
+["jmath"]="ȷ",
+["Lscr"]="ℒ",
+["Aogon"]="Ą",
+["ltrif"]="◂",
+["DownArrowUpArrow"]="⇵",
+["prap"]="⪷",
+["Racute"]="Ŕ",
+["curlyeqprec"]="⋞",
["bepsi"]="϶",
-["angrtvb"]="⊾",
-["ccaps"]="⩍",
-["UnderParenthesis"]="⏝",
-["subne"]="⊊",
-["succnsim"]="⋩",
-["Bumpeq"]="≎",
-["xvee"]="⋁",
-["colon"]=":",
-["deg"]="°",
-["fnof"]="ƒ",
-["Uarr"]="↟",
-["Zcaron"]="Ž",
-["copf"]="𝕔",
-["Theta"]="Θ",
-["omicron"]="ο",
-["ntriangleright"]="⋫",
-["DoubleLongRightArrow"]="⟹",
-["UnderBrace"]="⏟",
-["GT"]=">",
-["lEg"]="⪋",
-["supplus"]="⫀",
-["acute"]="´",
+["blacktriangle"]="▴",
+["nvap"]="≍⃒",
+["Supset"]="⋑",
+["angmsd"]="∡",
+["boxul"]="┘",
+["LessSlantEqual"]="⩽",
["GT"]=">",
-["upsilon"]="υ",
-["sc"]="≻",
-["xrarr"]="⟶",
-["eng"]="ŋ",
-["it"]="⁢",
-["Ntilde"]="Ñ",
-["Mu"]="Μ",
-["CircleTimes"]="⊗",
-["NotTildeTilde"]="≉",
-["NotLessLess"]="≪̸",
-["vellip"]="⋮",
-["cularrp"]="⤽",
-["UnderBracket"]="⎵",
-["aopf"]="𝕒",
-["itilde"]="ĩ",
-["latail"]="⤙",
-["Nu"]="Ν",
-["Ascr"]="𝒜",
-["complement"]="∁",
-["gjcy"]="ѓ",
-["radic"]="√",
-["maltese"]="✠",
-["glE"]="⪒",
-["plusmn"]="±",
-["curvearrowright"]="↷",
-["gt"]=">",
-["Colone"]="⩴",
-["Bscr"]="ℬ",
-["ic"]="⁣",
-["clubsuit"]="♣",
-["djcy"]="ђ",
-["Oopf"]="𝕆",
-["ltrPar"]="⦖",
-["ngtr"]="≯",
-["eqcirc"]="≖",
-["Hacek"]="ˇ",
-["vdash"]="⊢",
-["NotCupCap"]="≭",
-["Gdot"]="Ġ",
-["jsercy"]="ј",
-["marker"]="▮",
+["nexist"]="∄",
+["ccupssm"]="⩐",
+["Eacute"]="É",
+["ddarr"]="⇊",
+["ntlg"]="≸",
+["Iscr"]="ℐ",
+["Jcirc"]="Ĵ",
+["Sacute"]="Ś",
+["capand"]="⩄",
+["gesdoto"]="⪂",
+["olcross"]="⦻",
+["amalg"]="⨿",
+["rarrlp"]="↬",
+["NotLeftTriangle"]="⋪",
+["reals"]="ℝ",
+["bigcup"]="⋃",
+["NJcy"]="Њ",
+["Odblac"]="Ő",
+["hArr"]="⇔",
+["RightArrowLeftArrow"]="⇄",
+["SOFTcy"]="Ь",
+["Lambda"]="Λ",
+["RightCeiling"]="⌉",
+["Vdash"]="⊩",
+["elinters"]="⏧",
+["lsimg"]="⪏",
["Nopf"]="ℕ",
-["Wfr"]="𝔚",
-["boxHD"]="╦",
-["mho"]="℧",
-["ulcrop"]="⌏",
-["DifferentialD"]="ⅆ",
-["aacute"]="á",
-["lpar"]="(",
+["Esim"]="⩳",
+["vzigzag"]="⦚",
+["acd"]="∿",
+["ccedil"]="ç",
+["lbarr"]="⤌",
+["nmid"]="∤",
+["Backslash"]="∖",
+["Laplacetrf"]="ℒ",
+["npr"]="⊀",
+["nap"]="≉",
+["nsupseteqq"]="⫆̸",
+["igrave"]="ì",
+["LJcy"]="Љ",
+["lessgtr"]="≶",
["angle"]="∠",
-["rharu"]="⇀",
-["Breve"]="˘",
-["Dot"]="¨",
-["rect"]="▭",
-["NotNestedLessLess"]="⪡̸",
-["boxplus"]="⊞",
-["NotSucceeds"]="⊁",
-["gnapprox"]="⪊",
-["DownLeftTeeVector"]="⥞",
-["Xfr"]="𝔛",
-["Lang"]="⟪",
-["Element"]="∈",
-["sung"]="♪",
-["RightVectorBar"]="⥓",
-["simne"]="≆",
-["LeftVector"]="↼",
-["Idot"]="İ",
+["lAarr"]="⇚",
+["notin"]="∉",
+["orv"]="⩛",
+["gtreqqless"]="⪌",
+["CircleMinus"]="⊖",
+["Diamond"]="⋄",
+["map"]="↦",
+["nvsim"]="∼⃒",
+["pi"]="π",
+["pluscir"]="⨢",
+["boxVH"]="╬",
["QUOT"]="\"",
-["nsmid"]="∤",
-["fjlig"]="fj",
-["Ufr"]="𝔘",
-["cuvee"]="⋎",
+["duarr"]="⇵",
+["lgE"]="⪑",
+["lmoust"]="⎰",
+["lsquo"]="‘",
+["rightrightarrows"]="⇉",
+["times"]="×",
+["iuml"]="ï",
+["andslope"]="⩘",
+["order"]="ℴ",
+["Sub"]="⋐",
+["capcap"]="⩋",
+["nabla"]="∇",
+["ntriangleleft"]="⋪",
+["blk14"]="░",
+["Kopf"]="𝕂",
+["lArr"]="⇐",
+["Qopf"]="ℚ",
+["circledS"]="Ⓢ",
+["omid"]="⦶",
+["ord"]="⩝",
+["lvertneqq"]="≨︀",
+["updownarrow"]="↕",
+["yacute"]="ý",
+["ni"]="∋",
+["hamilt"]="ℋ",
+["Jopf"]="𝕁",
+["CupCap"]="≍",
+["lbrack"]="[",
+["preccurlyeq"]="≼",
+["Ropf"]="ℝ",
+["lessdot"]="⋖",
+["blank"]="␣",
+["SucceedsEqual"]="⪰",
+["triangleleft"]="◃",
+["ring"]="˚",
+["omega"]="ω",
+["bowtie"]="⋈",
+["Sqrt"]="√",
+["uuml"]="ü",
+["Udblac"]="Ű",
+["diams"]="♦",
+["Oslash"]="Ø",
["real"]="ℜ",
-["luruhar"]="⥦",
-["NotRightTriangleBar"]="⧐̸",
-["target"]="⌖",
-["lharu"]="↼",
-["CloseCurlyQuote"]="’",
-["rAtail"]="⤜",
-["nparallel"]="∦",
-["brvbar"]="¦",
-["Vfr"]="𝔙",
-["wedbar"]="⩟",
-["REG"]="®",
-["boxur"]="└",
-["Rcaron"]="Ř",
-["Rang"]="⟫",
-["sqsubseteq"]="⊑",
-["div"]="÷",
-["boxul"]="┘",
-["Cdot"]="Ċ",
-["vsupnE"]="⫌︀",
-["zeetrf"]="ℨ",
-["Sfr"]="𝔖",
-["roang"]="⟭",
-["LessTilde"]="≲",
-["equiv"]="≡",
-["frac12"]="½",
-["eacute"]="é",
-["rrarr"]="⇉",
-["nearhk"]="⤤",
-["Zopf"]="ℤ",
-["SucceedsTilde"]="≿",
+["egrave"]="è",
+["prurel"]="⊰",
+["LeftUpDownVector"]="⥑",
+["TildeEqual"]="≃",
+["cuwed"]="⋏",
+["times"]="×",
["ap"]="≈",
-["lfisht"]="⥼",
-["timesd"]="⨰",
-["UpDownArrow"]="↕",
-["xuplus"]="⨄",
-["cularr"]="↶",
-["iprod"]="⨼",
-["AElig"]="Æ",
-["rationals"]="ℚ",
-["geqq"]="≧",
-["Tfr"]="𝔗",
-["Yopf"]="𝕐",
-["rtimes"]="⋊",
-["Tcaron"]="Ť",
-["srarr"]="→",
-["diam"]="⋄",
-["mid"]="∣",
-["imath"]="ı",
-["PlusMinus"]="±",
-["isin"]="∈",
-["vprop"]="∝",
-["RightArrowLeftArrow"]="⇄",
-["NotSubset"]="⊂⃒",
-["bigtriangledown"]="▽",
-["ldsh"]="↲",
-["Qfr"]="𝔔",
-["nvap"]="≍⃒",
-["vert"]="|",
-["Xopf"]="𝕏",
-["lBarr"]="⤎",
-["egsdot"]="⪘",
-["Tcedil"]="Ţ",
-["xi"]="ξ",
-["LeftUpVectorBar"]="⥘",
-["circ"]="ˆ",
-["ocir"]="⊚",
-["gtlPar"]="⦕",
-["Rfr"]="ℜ",
-["RightTriangleBar"]="⧐",
-["nwarhk"]="⤣",
-["zhcy"]="ж",
-["Iukcy"]="І",
-["plusdo"]="∔",
+["lowast"]="∗",
+["Lopf"]="𝕃",
+["bdquo"]="„",
+["blacktriangledown"]="▾",
+["vBarv"]="⫩",
+["Longleftarrow"]="⟸",
+["lesg"]="⋚︀",
+["Popf"]="ℙ",
+["iogon"]="į",
+["vellip"]="⋮",
+["Ntilde"]="Ñ",
+["cwconint"]="∲",
["boxv"]="│",
-["minusb"]="⊟",
-["Ncaron"]="Ň",
-["angmsdaa"]="⦨",
-["varsubsetneqq"]="⫋︀",
-["cirfnint"]="⨐",
-["LongRightArrow"]="⟶",
-["ddarr"]="⇊",
-["piv"]="ϖ",
-["fopf"]="𝕗",
-["Ofr"]="𝔒",
-["fflig"]="ff",
-["Jukcy"]="Є",
-["xhArr"]="⟺",
-["ncy"]="н",
-["Scaron"]="Š",
-["TildeEqual"]="≃",
-["subrarr"]="⥹",
-["iacute"]="í",
-["ogt"]="⧁",
-["nvge"]="≥⃒",
-["vee"]="∨",
-["UnderBar"]="_",
-["andslope"]="⩘",
-["gopf"]="𝕘",
-["Pfr"]="𝔓",
-["die"]="¨",
+["boxbox"]="⧉",
+["langd"]="⦑",
+["diam"]="⋄",
+["boxHu"]="╧",
+["acute"]="´",
["Uopf"]="𝕌",
+["Fcy"]="Ф",
+["vee"]="∨",
+["eqslantless"]="⪕",
+["NotLeftTriangleEqual"]="⋬",
+["OverBrace"]="⏞",
+["beta"]="β",
+["Otilde"]="Õ",
+["fjlig"]="fj",
+["uacute"]="ú",
+["CirclePlus"]="⊕",
+["Mellintrf"]="ℳ",
+["Vopf"]="𝕍",
+["Gcy"]="Г",
+["searhk"]="⤥",
+["boxur"]="└",
+["LeftTeeVector"]="⥚",
+["nsubE"]="⫅̸",
+["gvertneqq"]="≩︀",
+["eqcirc"]="≖",
+["nrightarrow"]="↛",
+["DJcy"]="Ђ",
+["tdot"]="⃛",
+["Dcy"]="Д",
+["Sopf"]="𝕊",
+["range"]="⦥",
+["agrave"]="à",
+["gtrsim"]="≳",
["RightArrowBar"]="⇥",
-["orarr"]="↻",
-["Precedes"]="≺",
-["oror"]="⩖",
-["straightepsilon"]="ϵ",
-["cong"]="≅",
-["TScy"]="Ц",
-["nleftarrow"]="↚",
-["DZcy"]="Џ",
-["horbar"]="―",
+["larrlp"]="↫",
+["le"]="≤",
+["xi"]="ξ",
+["gla"]="⪥",
+["GT"]=">",
+["leftarrowtail"]="↢",
+["commat"]="@",
+["rightarrowtail"]="↣",
+["approx"]="≈",
+["sdot"]="⋅",
["Topf"]="𝕋",
-["Cayleys"]="ℭ",
-["leqq"]="≦",
-["curlyeqprec"]="⋞",
-["nLeftarrow"]="⇍",
-["pcy"]="п",
-["realine"]="ℛ",
-["nlsim"]="≴",
+["Ecy"]="Э",
+["eplus"]="⩱",
+["cir"]="○",
["Rarrtl"]="⤖",
-["CupCap"]="≍",
-["vDash"]="⊨",
-["shortparallel"]="∥",
-["ExponentialE"]="ⅇ",
-["Sopf"]="𝕊",
-["iiota"]="℩",
-["Nfr"]="𝔑",
-["pointint"]="⨕",
-["NotGreaterLess"]="≹",
-["olcross"]="⦻",
-["kcy"]="к",
-["complexes"]="ℂ",
-["varepsilon"]="ϵ",
-["Fouriertrf"]="ℱ",
-["rho"]="ρ",
-["Lsh"]="↰",
-["exponentiale"]="ⅇ",
-["hookrightarrow"]="↪",
-["Ropf"]="ℝ",
-["lAtail"]="⤛",
-["Kfr"]="𝔎",
-["bsim"]="∽",
-["jcy"]="й",
-["frac34"]="¾",
-["DotDot"]="⃜",
+["Emacr"]="Ē",
+["Dcaron"]="Ď",
+["Sc"]="⪼",
+["cent"]="¢",
+["rtri"]="▹",
+["cedil"]="¸",
+["spades"]="♠",
+["upsilon"]="υ",
+["boxminus"]="⊟",
+["angmsdaa"]="⦨",
+["zdot"]="ż",
+["Bcy"]="Б",
+["Zscr"]="𝒵",
+["looparrowleft"]="↫",
+["Dfr"]="𝔇",
+["Bumpeq"]="≎",
+["nLeftarrow"]="⇍",
+["equiv"]="≡",
+["Ccaron"]="Č",
+["UpperLeftArrow"]="↖",
+["SubsetEqual"]="⊆",
+["nrArr"]="⇏",
+["loarr"]="⇽",
+["minusdu"]="⨪",
+["sup3"]="³",
+["Zopf"]="ℤ",
+["elsdot"]="⪗",
+["NotLessLess"]="≪̸",
+["eta"]="η",
+["ubrcy"]="ў",
+["Yscr"]="𝒴",
+["subset"]="⊂",
+["Cfr"]="ℭ",
+["harrcir"]="⥈",
+["supsetneq"]="⊋",
+["LeftUpVectorBar"]="⥘",
+["LT"]="<",
+["DoubleLeftArrow"]="⇐",
+["circledcirc"]="⊚",
+["bkarow"]="⤍",
+["rangd"]="⦒",
+["downharpoonright"]="⇂",
+["Wopf"]="𝕎",
+["ast"]="*",
+["planck"]="ℏ",
+["gtrdot"]="⋗",
+["Ffr"]="𝔉",
+["rArr"]="⇒",
+["VeryThinSpace"]=" ",
+["Ecaron"]="Ě",
+["RightVectorBar"]="⥓",
+["divonx"]="⋇",
+["Xopf"]="𝕏",
+["nsubset"]="⊂⃒",
+["Otimes"]="⨷",
+["bot"]="⊥",
+["nsime"]="≄",
["thorn"]="þ",
-["ThickSpace"]="  ",
-["SquareUnion"]="⊔",
-["frac58"]="⅝",
-["dfisht"]="⥿",
-["MediumSpace"]=" ",
-["Lfr"]="𝔏",
-["Qopf"]="ℚ",
+["subsetneq"]="⊊",
+["nltri"]="⋪",
+["Cayleys"]="ℭ",
+["Efr"]="𝔈",
+["Intersection"]="⋂",
+["UnderBar"]="_",
+["fpartint"]="⨍",
+["Iuml"]="Ï",
+["rsquo"]="’",
+["ecir"]="≖",
+["nis"]="⋼",
+["fscr"]="𝒻",
+["hellip"]="…",
+["ogt"]="⧁",
["ntgl"]="≹",
-["LessFullEqual"]="≦",
-["malt"]="✠",
-["mcy"]="м",
-["NotGreaterEqual"]="≱",
-["bottom"]="⊥",
-["NotSucceedsEqual"]="⪰̸",
-["lcedil"]="ļ",
-["infintie"]="⧝",
-["Lcaron"]="Ľ",
-["NotSquareSubset"]="⊏̸",
-["brvbar"]="¦",
-["fallingdotseq"]="≒",
-["AElig"]="Æ",
-["swarhk"]="⤦",
-["Ifr"]="ℑ",
-["pi"]="π",
-["lcy"]="л",
-["copy"]="©",
-["dlcorn"]="⌞",
-["oacute"]="ó",
-["gtreqless"]="⋛",
-["neArr"]="⇗",
+["frac14"]="¼",
+["squf"]="▪",
+["circ"]="ˆ",
+["prE"]="⪳",
+["ordf"]="ª",
["ZHcy"]="Ж",
-["Vdashl"]="⫦",
-["darr"]="↓",
-["circeq"]="≗",
+["NegativeVeryThinSpace"]="​",
+["quot"]="\"",
+["excl"]="!",
+["sqcaps"]="⊓︀",
+["gfr"]="𝔤",
+["varsigma"]="ς",
+["nwarrow"]="↖",
+["reg"]="®",
+["longmapsto"]="⟼",
+["And"]="⩓",
+["cuvee"]="⋎",
+["zwj"]="‍",
+["plankv"]="ℏ",
+["varepsilon"]="ϵ",
+["Aopf"]="𝔸",
+["UpTee"]="⊥",
+["lescc"]="⪨",
+["ltri"]="◃",
+["iiint"]="∭",
+["ccups"]="⩌",
+["alefsym"]="ℵ",
+["succneqq"]="⪶",
+["hscr"]="𝒽",
+["Or"]="⩔",
["yuml"]="ÿ",
-["Jfr"]="𝔍",
-["Product"]="∏",
-["boxDL"]="╗",
-["el"]="⪙",
-["supe"]="⊇",
-["frac13"]="⅓",
-["Barwed"]="⌆",
-["larrpl"]="⤹",
-["SHCHcy"]="Щ",
-["LeftUpDownVector"]="⥑",
-["Diamond"]="⋄",
-["DownLeftVectorBar"]="⥖",
-["Cross"]="⨯",
-["ncup"]="⩂",
-["supnE"]="⫌",
-["lne"]="⪇",
-["micro"]="µ",
-["lowbar"]="_",
-["perp"]="⊥",
-["sqcap"]="⊓",
-["Gfr"]="𝔊",
-["raemptyv"]="⦳",
-["gesl"]="⋛︀",
-["drcrop"]="⌌",
-["boxUL"]="╝",
-["becaus"]="∵",
-["gne"]="⪈",
-["scap"]="⪸",
-["swarrow"]="↙",
-["nesim"]="≂̸",
-["DoubleDot"]="¨",
-["Mopf"]="𝕄",
-["apid"]="≋",
-["InvisibleComma"]="⁣",
-["Backslash"]="∖",
-["mnplus"]="∓",
-["niv"]="∋",
-["Hfr"]="ℌ",
-["rarrlp"]="↬",
-["Because"]="∵",
-["parsl"]="⫽",
-["sup1"]="¹",
-["Lt"]="≪",
-["par"]="∥",
-["Iota"]="Ι",
-["beth"]="ℶ",
-["Lopf"]="𝕃",
+["rcub"]="}",
+["lt"]="<",
+["vArr"]="⇕",
+["EqualTilde"]="≂",
+["vDash"]="⊨",
+["RightArrow"]="→",
+["dlcorn"]="⌞",
+["Barv"]="⫧",
+["nsc"]="⊁",
+["Proportion"]="∷",
+["iota"]="ι",
+["gscr"]="ℊ",
+["abreve"]="ă",
+["ThickSpace"]="  ",
+["szlig"]="ß",
+["lhard"]="↽",
+["emptyv"]="∅",
+["Tau"]="Τ",
+["sharp"]="♯",
+["bNot"]="⫭",
+["LongLeftRightArrow"]="⟷",
+["frac23"]="⅔",
+["NotEqual"]="≠",
+["scE"]="⪴",
+["jfr"]="𝔧",
+["bscr"]="𝒷",
+["uhblk"]="▀",
+["frac35"]="⅗",
+["TSHcy"]="Ћ",
+["ntrianglerighteq"]="⋭",
+["Tcedil"]="Ţ",
+["NotGreaterFullEqual"]="≧̸",
+["asympeq"]="≍",
+["oror"]="⩖",
+["ecirc"]="ê",
+["ohbar"]="⦵",
+["Rho"]="Ρ",
+["iacute"]="í",
+["ascr"]="𝒶",
+["RightUpVector"]="↾",
+["Ocirc"]="Ô",
+["cedil"]="¸",
+["sect"]="§",
+["angmsdab"]="⦩",
+["FilledVerySmallSquare"]="▪",
+["curlywedge"]="⋏",
+["lesdotor"]="⪃",
+["esdot"]="≐",
+["eqvparsl"]="⧥",
["Cap"]="⋒",
-["Aring"]="Å",
-["rarr"]="→",
-["Efr"]="𝔈",
-["bigcup"]="⋃",
-["DownLeftRightVector"]="⥐",
-["lesges"]="⪓",
-["NegativeThinSpace"]="​",
-["DownRightTeeVector"]="⥟",
-["npolint"]="⨔",
-["gEl"]="⪌",
-["lltri"]="◺",
-["ogon"]="˛",
-["LessEqualGreater"]="⋚",
-["sqsupset"]="⊐",
-["NotSubsetEqual"]="⊈",
-["Ubrcy"]="Ў",
-["ShortDownArrow"]="↓",
-["ugrave"]="ù",
-["Dcaron"]="Ď",
-["subE"]="⫅",
-["divide"]="÷",
-["bigotimes"]="⨂",
-["dscy"]="ѕ",
-["wreath"]="≀",
-["Jopf"]="𝕁",
-["pre"]="⪯",
-["tdot"]="⃛",
-["Cfr"]="ℭ",
-["Uogon"]="Ų",
-["softcy"]="ь",
-["isinE"]="⋹",
-["Dstrok"]="Đ",
-["Jsercy"]="Ј",
-["capdot"]="⩀",
-["realpart"]="ℜ",
-["hearts"]="♥",
-["Atilde"]="Ã",
-["LeftArrowRightArrow"]="⇆",
-["upharpoonleft"]="↿",
-["Iopf"]="𝕀",
-["Intersection"]="⋂",
-["midcir"]="⫰",
-["ocirc"]="ô",
-["sdot"]="⋅",
-["Dfr"]="𝔇",
-["gla"]="⪥",
-["DiacriticalGrave"]="`",
+["dscr"]="𝒹",
+["rbrace"]="}",
+["nsccue"]="⋡",
+["neArr"]="⇗",
+["rightthreetimes"]="⋌",
+["plusmn"]="±",
["Ubreve"]="Ŭ",
-["int"]="∫",
-["PrecedesSlantEqual"]="≼",
-["Square"]="□",
-["Acy"]="А",
+["ifr"]="𝔦",
+["Poincareplane"]="ℌ",
+["leftrightarrows"]="⇆",
+["scnsim"]="⋩",
+["cscr"]="𝒸",
+["NotHumpEqual"]="≏̸",
+["capbrcup"]="⩉",
+["curarr"]="↷",
+["notinvb"]="⋷",
+["LeftArrow"]="←",
+["Gopf"]="𝔾",
+["ldrushar"]="⥋",
+["nscr"]="𝓃",
+["Gg"]="⋙",
+["ouml"]="ö",
+["nsce"]="⪰̸",
+["cupbrcap"]="⩈",
+["nLt"]="≪⃒",
+["bullet"]="•",
+["nsqsupe"]="⋣",
+["rect"]="▭",
+["lbrace"]="{",
+["Fopf"]="𝔽",
+["COPY"]="©",
+["epar"]="⋕",
+["mscr"]="𝓂",
+["odsold"]="⦼",
+["cupor"]="⩅",
+["not"]="¬",
+["subsim"]="⫇",
+["hoarr"]="⇿",
+["Scedil"]="Ş",
+["eacute"]="é",
+["emsp"]=" ",
+["uml"]="¨",
+["igrave"]="ì",
+["pscr"]="𝓅",
+["LeftTee"]="⊣",
+["Cedilla"]="¸",
+["Iopf"]="𝕀",
+["HumpEqual"]="≏",
+["les"]="⩽",
+["Rcedil"]="Ŗ",
+["lsquor"]="‚",
+["raemptyv"]="⦳",
+["NotSucceedsSlantEqual"]="⋡",
+["SuchThat"]="∋",
+["vert"]="|",
+["backcong"]="≌",
["Hopf"]="ℍ",
-["precsim"]="≾",
-["nleq"]="≰",
-["urcorn"]="⌝",
-["hyphen"]="‐",
-["FilledSmallSquare"]="◼",
-["zdot"]="ż",
-["ndash"]="–",
-["hbar"]="ℏ",
-["Wopf"]="𝕎",
-["Esim"]="⩳",
-["subsetneq"]="⊊",
-["boxhD"]="╥",
-["searhk"]="⤥",
-["late"]="⪭",
+["CircleDot"]="⊙",
+["Kappa"]="Κ",
+["conint"]="∮",
+["DZcy"]="Џ",
+["prsim"]="≾",
+["Copf"]="ℂ",
+["curvearrowright"]="↷",
+["twixt"]="≬",
+["curren"]="¤",
+["rtriltri"]="⧎",
+["jscr"]="𝒿",
+["cupcup"]="⩊",
+["Lcedil"]="Ļ",
+["supseteqq"]="⫆",
+["bfr"]="𝔟",
+["lesseqqgtr"]="⪋",
+["leftleftarrows"]="⇇",
+["Bopf"]="𝔹",
+["acute"]="´",
["blacktriangleright"]="▸",
-["auml"]="ä",
-["NotLessTilde"]="≴",
-["Bfr"]="𝔅",
-["grave"]="`",
-["ltlarr"]="⥶",
-["Aogon"]="Ą",
-["sdote"]="⩦",
-["gtrsim"]="≳",
-["nvinfin"]="⧞",
-["lgE"]="⪑",
-["mdash"]="—",
-["Vopf"]="𝕍",
-["leftrightarrow"]="↔",
-["RBarr"]="⤐",
-["amalg"]="⨿",
-["preccurlyeq"]="≼",
-["EqualTilde"]="≂",
-["scpolint"]="⨓",
-["NotHumpDownHump"]="≎̸",
-["uparrow"]="↑",
-["downarrow"]="↓",
-["boxdL"]="╕",
-["Hstrok"]="Ħ",
-["Ccaron"]="Č",
-["succsim"]="≿",
-["RightFloor"]="⌋",
-["DownBreve"]="̑",
-["succapprox"]="⪸",
-["dsol"]="⧶",
-["napid"]="≋̸",
-["nprcue"]="⋠",
+["frac34"]="¾",
+["Gbreve"]="Ğ",
+["Updownarrow"]="⇕",
+["iscr"]="𝒾",
+["sigmav"]="ς",
+["trade"]="™",
+["minusb"]="⊟",
+["GJcy"]="Ѓ",
+["TildeFullEqual"]="≅",
+["DoubleRightTee"]="⊨",
+["nang"]="∠⃒",
+["ddotseq"]="⩷",
+["copy"]="©",
["Eopf"]="𝔼",
-["ell"]="ℓ",
-["cupdot"]="⊍",
-["Not"]="⫬",
-["zigrarr"]="⇝",
-["downharpoonright"]="⇂",
-["nisd"]="⋺",
-["lotimes"]="⨴",
-["plusmn"]="±",
-["ngE"]="≧̸",
-["odash"]="⊝",
-["emptyset"]="∅",
+["Psi"]="Ψ",
+["UpperRightArrow"]="↗",
+["geqq"]="≧",
+["subedot"]="⫃",
+["nvlArr"]="⤂",
+["Ncedil"]="Ņ",
+["vsupne"]="⊋︀",
+["supset"]="⊃",
["squarf"]="▪",
-["NotGreaterTilde"]="≵",
-["NotTildeFullEqual"]="≇",
-["DownArrowUpArrow"]="⇵",
-["nwarrow"]="↖",
-["looparrowright"]="↬",
+["LeftDoubleBracket"]="⟦",
+["utrif"]="▴",
["Dopf"]="𝔻",
-["oplus"]="⊕",
-["UpEquilibrium"]="⥮",
-["leftthreetimes"]="⋋",
-["DoubleLeftTee"]="⫤",
-["nabla"]="∇",
-["RuleDelayed"]="⧴",
-["euml"]="ë",
-["varsupsetneqq"]="⫌︀",
-["upsi"]="υ",
-["supsup"]="⫖",
-["bsol"]="\\",
-["Copf"]="ℂ",
-["DDotrahd"]="⤑",
-["Upsilon"]="Υ",
-["UpperRightArrow"]="↗",
-["nedot"]="≐̸",
-["NotEqual"]="≠",
-["bumpeq"]="≏",
-["emsp14"]=" ",
-["frac38"]="⅜",
-["DownTeeArrow"]="↧",
-["Bopf"]="𝔹",
-["capand"]="⩄",
-["nleqq"]="≦̸",
-["ratio"]="∶",
-["eplus"]="⩱",
-["nge"]="≱",
-["laquo"]="«",
-["urtri"]="◹",
-["LeftUpVector"]="↿",
-["gl"]="≷",
-["Gt"]="≫",
-["andd"]="⩜",
+["ape"]="≊",
+["gEl"]="⪌",
+["COPY"]="©",
+["afr"]="𝔞",
+["Acy"]="А",
+["ldquor"]="„",
+["because"]="∵",
+["Pr"]="⪻",
+["OverBar"]="‾",
+["lang"]="⟨",
+["mopf"]="𝕞",
+["crarr"]="↵",
+["Epsilon"]="Ε",
+["Nfr"]="𝔑",
+["kjcy"]="ќ",
+["TildeTilde"]="≈",
+["bsim"]="∽",
+["lcy"]="л",
+["larrb"]="⇤",
+["ncong"]="≇",
+["ENG"]="Ŋ",
+["brvbar"]="¦",
+["Rightarrow"]="⇒",
+["nopf"]="𝕟",
+["Wfr"]="𝔚",
+["ljcy"]="љ",
+["diamondsuit"]="♦",
+["latail"]="⤙",
+["lambda"]="λ",
+["frac14"]="¼",
+["mcy"]="м",
+["nparsl"]="⫽⃥",
+["lBarr"]="⤎",
+["subdot"]="⪽",
+["frac12"]="½",
+["kopf"]="𝕜",
+["LeftCeiling"]="⌈",
+["erarr"]="⥱",
+["pre"]="⪯",
+["varr"]="↕",
+["Pi"]="Π",
+["sub"]="⊂",
+["ncy"]="н",
+["marker"]="▮",
+["rpargt"]="⦔",
+["supe"]="⊇",
+["veebar"]="⊻",
+["checkmark"]="✓",
+["nbsp"]=" ",
+["sqsupseteq"]="⊒",
+["upharpoonright"]="↾",
+["lopf"]="𝕝",
+["Omicron"]="Ο",
+["ccaps"]="⩍",
+["lrhard"]="⥭",
["Lstrok"]="Ł",
-["gamma"]="γ",
-["Sc"]="⪼",
-["Aopf"]="𝔸",
-["pluscir"]="⨢",
-["Itilde"]="Ĩ",
-["DoubleRightTee"]="⊨",
-["pluse"]="⩲",
-["iiint"]="∭",
-["dotplus"]="∔",
-["vrtri"]="⊳",
-["Proportion"]="∷",
-["bne"]="=⃥",
-["cuepr"]="⋞",
+["Mfr"]="𝔐",
+["njcy"]="њ",
+["ocy"]="о",
+["Zcaron"]="Ž",
+["NotSucceeds"]="⊁",
+["rarrbfs"]="⤠",
+["gtrapprox"]="⪆",
+["oS"]="Ⓢ",
+["diamond"]="⋄",
+["gesdot"]="⪀",
+["urcorner"]="⌝",
+["lotimes"]="⨴",
+["pertenk"]="‱",
+["rfisht"]="⥽",
+["Zfr"]="ℨ",
+["Map"]="⤅",
+["cross"]="✗",
+["DifferentialD"]="ⅆ",
+["boxtimes"]="⊠",
+["horbar"]="―",
+["lg"]="≶",
+["orarr"]="↻",
+["Vbar"]="⫫",
+["ropf"]="𝕣",
+["NotDoubleVerticalBar"]="∦",
+["Sfr"]="𝔖",
+["Iuml"]="Ï",
+["leftharpoondown"]="↽",
+["atilde"]="ã",
+["VerticalTilde"]="≀",
+["DoubleContourIntegral"]="∯",
+["longleftarrow"]="⟵",
+["Im"]="ℑ",
+["RightUpVectorBar"]="⥔",
+["nGg"]="⋙̸",
+["scap"]="⪸",
+["nrarr"]="↛",
+["ycy"]="ы",
+["ucirc"]="û",
+["qopf"]="𝕢",
+["oopf"]="𝕠",
+["yacute"]="ý",
+["Xfr"]="𝔛",
+["fork"]="⋔",
+["in"]="∈",
+["xcap"]="⋂",
+["check"]="✓",
+["jcy"]="й",
+["Phi"]="Φ",
+["doteq"]="≐",
["vBar"]="⫨",
-["yucy"]="ю",
-["PrecedesTilde"]="≾",
-["varr"]="↕",
-["leftarrowtail"]="↢",
-["rangle"]="⟩",
-["subsub"]="⫕",
-["rightarrowtail"]="↣",
-["oslash"]="ø",
-["mapstodown"]="↧",
-["sqsube"]="⊑",
-["NewLine"]="\n",
-["Vdash"]="⊩",
-["num"]="#",
-["umacr"]="ū",
-["InvisibleTimes"]="⁢",
-["bemptyv"]="⦰",
+["frown"]="⌢",
["Iogon"]="Į",
-["ssmile"]="⌣",
-["timesbar"]="⨱",
-["Tstrok"]="Ŧ",
-["Icy"]="И",
-["zacute"]="ź",
-["Cedilla"]="¸",
-["daleth"]="ℸ",
-["semi"]=";",
-["ssetmn"]="∖",
-["subdot"]="⪽",
-["Bernoullis"]="ℬ",
-["otimesas"]="⨶",
-["circleddash"]="⊝",
-["circlearrowright"]="↻",
-["NotLeftTriangleEqual"]="⋬",
-["NotTilde"]="≁",
-["npart"]="∂̸",
-["Gbreve"]="Ğ",
-["gtrless"]="≷",
-["pound"]="£",
-["curlyeqsucc"]="⋟",
-["blacklozenge"]="⧫",
-["ldca"]="⤶",
-["nsucc"]="⊁",
-["top"]="⊤",
-["ufr"]="𝔲",
-["sscr"]="𝓈",
-["eDDot"]="⩷",
-["Updownarrow"]="⇕",
-["loz"]="◊",
-["Gcy"]="Г",
-["boxdl"]="┐",
+["gnsim"]="⋧",
+["nsupset"]="⊃⃒",
+["equals"]="=",
+["angmsdac"]="⦪",
+["odash"]="⊝",
+["Hstrok"]="Ħ",
+["homtht"]="∻",
+["maltese"]="✠",
+["esim"]="≂",
+["realine"]="ℛ",
+["straightepsilon"]="ϵ",
+["utri"]="▵",
+["primes"]="ℙ",
+["dbkarow"]="⤏",
+["NotLessTilde"]="≴",
+["nvrArr"]="⤃",
+["cularrp"]="⤽",
+["supsup"]="⫖",
+["rang"]="⟩",
+["nshortmid"]="∤",
+["NotCupCap"]="≭",
+["gnE"]="≩",
+["otilde"]="õ",
+["LeftTriangle"]="⊲",
+["oelig"]="œ",
+["curarrm"]="⤼",
+["orderof"]="ℴ",
+["DoubleLongLeftArrow"]="⟸",
+["OverParenthesis"]="⏜",
+["amacr"]="ā",
+["copysr"]="℗",
+["acirc"]="â",
+["LeftArrowRightArrow"]="⇆",
+["filig"]="fi",
+["uopf"]="𝕦",
+["rlhar"]="⇌",
+["dharl"]="⇃",
+["rAarr"]="⇛",
+["rarrw"]="↝",
+["isin"]="∈",
+["simg"]="⪞",
+["NoBreak"]="⁠",
+["rAtail"]="⤜",
+["ndash"]="–",
+["IJlig"]="IJ",
+["dfr"]="𝔡",
+["ohm"]="Ω",
+["breve"]="˘",
+["ccedil"]="ç",
+["topf"]="𝕥",
+["nvDash"]="⊭",
+["RBarr"]="⤐",
+["clubs"]="♣",
["napos"]="ʼn",
-["Sqrt"]="√",
-["xsqcup"]="⨆",
-["Implies"]="⇒",
-["uring"]="ů",
-["thetav"]="ϑ",
-["iiiint"]="⨌",
-["nLeftrightarrow"]="⇎",
-["lobrk"]="⟦",
-["xfr"]="𝔵",
-["Abreve"]="Ă",
-["micro"]="µ",
-["quatint"]="⨖",
-["congdot"]="⩭",
-["nrtrie"]="⋭",
-["Fcy"]="Ф",
-["hksearow"]="⤥",
-["LowerLeftArrow"]="↙",
-["rdca"]="⤷",
-["OverBar"]="‾",
-["frac12"]="½",
-["imacr"]="ī",
-["boxVL"]="╣",
-["sfr"]="𝔰",
-["ensp"]=" ",
-["dwangle"]="⦦",
-["boxh"]="─",
-["Eogon"]="Ę",
+["ngtr"]="≯",
+["Tstrok"]="Ŧ",
+["lrarr"]="⇆",
+["eqslantgtr"]="⪖",
+["efr"]="𝔢",
+["gne"]="⪈",
+["csube"]="⫑",
+["Xi"]="Ξ",
+["sopf"]="𝕤",
+["LeftVector"]="↼",
+["ggg"]="⋙",
+["Ubrcy"]="Ў",
+["die"]="¨",
+["topbot"]="⌶",
+["Rfr"]="ℜ",
+["ofcir"]="⦿",
["imped"]="Ƶ",
-["Ecy"]="Э",
-["lates"]="⪭︀",
-["phi"]="φ",
-["minusd"]="∸",
-["planckh"]="ℎ",
-["Ocirc"]="Ô",
-["lE"]="≦",
-["sum"]="∑",
-["lrtri"]="⊿",
-["ruluhar"]="⥨",
-["lAarr"]="⇚",
-["DownArrow"]="↓",
-["zscr"]="𝓏",
-["questeq"]="≟",
-["ngeqq"]="≧̸",
-["And"]="⩓",
-["Dcy"]="Д",
-["angrtvbd"]="⦝",
-["rarrpl"]="⥅",
-["thkap"]="≈",
-["Otimes"]="⨷",
-["lesssim"]="≲",
-["gE"]="≧",
-["ouml"]="ö",
-["nsubseteq"]="⊈",
-["bigcirc"]="◯",
+["plusmn"]="±",
+["nles"]="⩽̸",
+["pcy"]="п",
+["permil"]="‰",
+["notinE"]="⋹̸",
+["bigoplus"]="⨁",
+["boxplus"]="⊞",
+["doublebarwedge"]="⌆",
+["ccaron"]="č",
+["asymp"]="≈",
+["sup1"]="¹",
+["bumpeq"]="≏",
+["nrtrie"]="⋭",
+["larrbfs"]="⤟",
+["emacr"]="ē",
+["gtrless"]="≷",
+["Kfr"]="𝔎",
+["plus"]="+",
+["risingdotseq"]="≓",
+["notindot"]="⋵̸",
+["Subset"]="⋐",
+["CloseCurlyDoubleQuote"]="”",
+["nlsim"]="≴",
+["dcaron"]="ď",
["boxVR"]="╠",
-["Vert"]="‖",
-["naturals"]="ℕ",
-["plussim"]="⨦",
-["wscr"]="𝓌",
-["raquo"]="»",
-["bigodot"]="⨀",
-["dashv"]="⊣",
-["hairsp"]=" ",
-["inodot"]="ı",
-["vnsup"]="⊃⃒",
+["lne"]="⪇",
+["Pfr"]="𝔓",
+["rightsquigarrow"]="↝",
+["phone"]="☎",
+["DiacriticalDot"]="˙",
+["Congruent"]="≡",
+["SquareIntersection"]="⊓",
+["ordf"]="ª",
+["loz"]="◊",
["cire"]="≗",
-["vartriangleleft"]="⊲",
-["rbrke"]="⦌",
-["boxuL"]="╛",
-["sce"]="⪰",
-["nrtri"]="⋫",
-["loarr"]="⇽",
-["ShortRightArrow"]="→",
-["xscr"]="𝓍",
-["Bcy"]="Б",
-["HumpEqual"]="≏",
-["lmidot"]="ŀ",
-["DownLeftVector"]="↽",
-["leftharpoonup"]="↼",
+["ecaron"]="ě",
+["nsub"]="⊄",
+["Fouriertrf"]="ℱ",
+["Qfr"]="𝔔",
+["dblac"]="˝",
+["sc"]="≻",
+["xrarr"]="⟶",
+["ImaginaryI"]="ⅈ",
+["angmsdag"]="⦮",
+["wopf"]="𝕨",
+["middot"]="·",
+["gsiml"]="⪐",
+["biguplus"]="⨄",
+["Prime"]="″",
+["bigcirc"]="◯",
+["vsubnE"]="⫋︀",
+["lrtri"]="⊿",
+["nparallel"]="∦",
["lbbrk"]="❲",
-["rarrtl"]="↣",
-["SucceedsEqual"]="⪰",
-["HumpDownHump"]="≎",
-["Vee"]="⋁",
-["Gopf"]="𝔾",
-["otilde"]="õ",
-["ofr"]="𝔬",
-["Sub"]="⋐",
-["gnE"]="≩",
-["SquareSuperset"]="⊐",
-["leftrightharpoons"]="⇋",
-["tosa"]="⤩",
-["Ucirc"]="Û",
-["mscr"]="𝓂",
-["Exists"]="∃",
-["langle"]="⟨",
-["rfr"]="𝔯",
-["THORN"]="Þ",
-["gtreqqless"]="⪌",
-["eqvparsl"]="⧥",
-["NotCongruent"]="≢",
-["phiv"]="ϕ",
-["lsquor"]="‚",
-["prec"]="≺",
-["igrave"]="ì",
-["Fopf"]="𝔽",
-["nwArr"]="⇖",
-["nscr"]="𝓃",
-["gescc"]="⪩",
-["intprod"]="⨼",
-["larrlp"]="↫",
-["AMP"]="&",
-["psi"]="ψ",
-["mDDot"]="∺",
-["VDash"]="⊫",
-["Lleftarrow"]="⇚",
-["mfr"]="𝔪",
+["dotsquare"]="⊡",
+["rceil"]="⌉",
["gesles"]="⪔",
-["kscr"]="𝓀",
-["Omega"]="Ω",
-["bumpe"]="≏",
-["NotDoubleVerticalBar"]="∦",
-["frac18"]="⅛",
-["ecolon"]="≕",
-["compfn"]="∘",
-["supdot"]="⪾",
-["Alpha"]="Α",
-["rsquor"]="’",
+["roarr"]="⇾",
+["simplus"]="⨤",
+["lagran"]="ℒ",
+["pr"]="≺",
+["mnplus"]="∓",
+["Iota"]="Ι",
+["NestedLessLess"]="≪",
+["utilde"]="ũ",
+["mldr"]="…",
+["bigstar"]="★",
+["micro"]="µ",
["percnt"]="%",
-["pfr"]="𝔭",
-["frasl"]="⁄",
-["lscr"]="𝓁",
-["aleph"]="ℵ",
-["swArr"]="⇙",
-["uuml"]="ü",
-["uacute"]="ú",
-["scE"]="⪴",
-["hellip"]="…",
+["fllig"]="fl",
+["euml"]="ë",
+["circledR"]="®",
+["lltri"]="◺",
+["IEcy"]="Е",
+["notniva"]="∌",
+["or"]="∨",
+["curvearrowleft"]="↶",
+["gnapprox"]="⪊",
+["NotLessSlantEqual"]="⩽̸",
+["Cconint"]="∰",
+["NotSucceedsTilde"]="≿̸",
+["gammad"]="ϝ",
+["rightharpoondown"]="⇁",
+["CounterClockwiseContourIntegral"]="∳",
+["supdot"]="⪾",
+["upsi"]="υ",
+["nvle"]="≤⃒",
+["beth"]="ℶ",
+["nhArr"]="⇎",
+["Gamma"]="Γ",
+["complement"]="∁",
+["xoplus"]="⨁",
+["chi"]="χ",
+["backepsilon"]="϶",
+["nsube"]="⊈",
+["aopf"]="𝕒",
+["para"]="¶",
+["drbkarow"]="⤐",
+["Dstrok"]="Đ",
+["isinE"]="⋹",
+["Ecirc"]="Ê",
+["aelig"]="æ",
["ulcorner"]="⌜",
-["prnap"]="⪹",
-["Gg"]="⋙",
-["wedge"]="∧",
-["SquareSubset"]="⊏",
-["qscr"]="𝓆",
-["kfr"]="𝔨",
-["RightTee"]="⊢",
-["eqsim"]="≂",
-["rbrksld"]="⦎",
-["ohm"]="Ω",
-["lozf"]="⧫",
-["cups"]="∪︀",
-["epsilon"]="ε",
-["ncap"]="⩃",
-["Leftarrow"]="⇐",
-["ultri"]="◸",
-["egrave"]="è",
-["vBarv"]="⫩",
-["bNot"]="⫭",
-["nfr"]="𝔫",
-["rsqb"]="]",
-["OpenCurlyDoubleQuote"]="“",
-["rsquo"]="’",
-["Del"]="∇",
-["smtes"]="⪬︀",
-["varphi"]="ϕ",
-["CirclePlus"]="⊕",
-["prcue"]="≼",
-["curren"]="¤",
-["nltri"]="⋪",
-["oscr"]="ℴ",
-["Wcirc"]="Ŵ",
-["prime"]="′",
-["ifr"]="𝔦",
-["apos"]="'",
-["UpTee"]="⊥",
-["lescc"]="⪨",
-["NegativeMediumSpace"]="​",
-["DownTee"]="⊤",
-["NotSquareSubsetEqual"]="⋢",
-["LowerRightArrow"]="↘",
-["wr"]="≀",
+["Lcaron"]="Ľ",
+["bopf"]="𝕓",
+["midast"]="*",
+["barvee"]="⊽",
+["nvgt"]=">⃒",
+["bnequiv"]="≡⃥",
+["caron"]="ˇ",
["andand"]="⩕",
-["gvnE"]="≩︀",
-["lfr"]="𝔩",
-["lowast"]="∗",
-["gfr"]="𝔤",
-["digamma"]="ϝ",
-["cemptyv"]="⦲",
-["ubreve"]="ŭ",
-["dstrok"]="đ",
+["eparsl"]="⧣",
+["xhArr"]="⟺",
+["Yuml"]="Ÿ",
+["fallingdotseq"]="≒",
+["vltri"]="⊲",
+["gtrarr"]="⥸",
+["nGtv"]="≫̸",
+["congdot"]="⩭",
+["lfisht"]="⥼",
+["nrtri"]="⋫",
+["prnsim"]="⋨",
+["nsupE"]="⫆̸",
+["Colone"]="⩴",
+["SquareSuperset"]="⊐",
+["boxUL"]="╝",
+["Rrightarrow"]="⇛",
+["nleftrightarrow"]="↮",
+["Conint"]="∯",
+["ffilig"]="ffi",
+["nleqq"]="≦̸",
+["drcrop"]="⌌",
+["boxh"]="─",
+["Lang"]="⟪",
+["ldrdhar"]="⥧",
+["rbrack"]="]",
+["nvinfin"]="⧞",
+["succsim"]="≿",
+["boxhu"]="┴",
+["tau"]="τ",
+["incare"]="℅",
+["flat"]="♭",
+["angst"]="Å",
+["Oslash"]="Ø",
+["Vfr"]="𝔙",
+["tscy"]="ц",
+["lates"]="⪭︀",
+["eopf"]="𝕖",
+["Because"]="∵",
+["frac25"]="⅖",
+["daleth"]="ℸ",
+["ic"]="⁣",
+["ensp"]=" ",
+["lrm"]="‎",
+["DoubleLeftRightArrow"]="⇔",
+["kappa"]="κ",
+["fopf"]="𝕗",
+["cularr"]="↶",
+["shy"]="­",
+["yen"]="¥",
+["glj"]="⪤",
+["dzcy"]="џ",
["expectation"]="ℰ",
-["sime"]="≃",
-["ltrif"]="◂",
-["iacute"]="í",
-["chi"]="χ",
+["dash"]="‐",
+["female"]="♀",
+["UnderBrace"]="⏟",
+["rotimes"]="⨵",
+["caps"]="∩︀",
+["copf"]="𝕔",
+["lparlt"]="⦓",
+["NotLess"]="≮",
+["simrarr"]="⥲",
+["dtri"]="▿",
+["supne"]="⊋",
+["block"]="█",
+["siml"]="⪝",
+["blk12"]="▒",
+["natural"]="♮",
+["frac34"]="¾",
+["frac38"]="⅜",
+["Ufr"]="𝔘",
+["gg"]="≫",
+["Square"]="□",
+["lt"]="<",
["erDot"]="≓",
-["Vcy"]="В",
+["RightAngleBracket"]="⟩",
+["LeftDownTeeVector"]="⥡",
+["NotGreaterGreater"]="≫̸",
+["uogon"]="ų",
+["ocirc"]="ô",
+["sung"]="♪",
+["dollar"]="$",
+["Scaron"]="Š",
+["top"]="⊤",
+["iopf"]="𝕚",
+["udhar"]="⥮",
+["gjcy"]="ѓ",
+["ncap"]="⩃",
+["circlearrowleft"]="↺",
+["bernou"]="ℬ",
+["angmsdaf"]="⦭",
+["ldsh"]="↲",
+["isins"]="⋴",
+["RoundImplies"]="⥰",
+["bigtriangledown"]="▽",
+["LeftAngleBracket"]="⟨",
+["HorizontalLine"]="─",
+["Vdashl"]="⫦",
+["rHar"]="⥤",
+["Tcaron"]="Ť",
+["LeftDownVectorBar"]="⥙",
+["jopf"]="𝕛",
+["LeftRightVector"]="⥎",
+["LessGreater"]="≶",
+["npart"]="∂̸",
+["nsmid"]="∤",
+["RightTriangleBar"]="⧐",
+["nesim"]="≂̸",
+["deg"]="°",
+["LeftTeeArrow"]="↤",
+["NotHumpDownHump"]="≎̸",
+["tridot"]="◬",
+["lceil"]="⌈",
+["ExponentialE"]="ⅇ",
+["tosa"]="⤩",
+["gopf"]="𝕘",
+["ContourIntegral"]="∮",
+["late"]="⪭",
+["bbrk"]="⎵",
+["half"]="½",
["boxhd"]="┬",
-["DoubleDownArrow"]="⇓",
-["lArr"]="⇐",
-["demptyv"]="⦱",
-["smt"]="⪪",
-["intcal"]="⊺",
-["in"]="∈",
-["capcup"]="⩇",
-["kjcy"]="ќ",
-["Ccirc"]="Ĉ",
-["bnequiv"]="≡⃥",
-["Emacr"]="Ē",
-["siml"]="⪝",
-["jfr"]="𝔧",
-["gesdoto"]="⪂",
-["efr"]="𝔢",
-["precneqq"]="⪵",
-["because"]="∵",
-["Udblac"]="Ű",
-["lg"]="≶",
-["boxvr"]="├",
-["fpartint"]="⨍",
-["rbbrk"]="❳",
-["LT"]="<",
-["cap"]="∩",
-["circledR"]="®",
-["notinvc"]="⋶",
-["zwj"]="‍",
-["nle"]="≰",
-["hfr"]="𝔥",
-["bigsqcup"]="⨆",
-["nGg"]="⋙̸",
-["doublebarwedge"]="⌆",
+["hopf"]="𝕙",
+["Ouml"]="Ö",
+["Atilde"]="Ã",
+["planckh"]="ℎ",
+["MinusPlus"]="∓",
+["uharl"]="↿",
+["aleph"]="ℵ",
+["boxHD"]="╦",
+["lesseqgtr"]="⋚",
+["colon"]=":",
+["SquareSupersetEqual"]="⊒",
+["isinsv"]="⋳",
+["lnapprox"]="⪉",
+["PrecedesSlantEqual"]="≼",
+["boxuL"]="╛",
+["csup"]="⫐",
+["hstrok"]="ħ",
+["leftrightharpoons"]="⇋",
+["boxuR"]="╘",
+["DD"]="ⅅ",
+["Longrightarrow"]="⟹",
+["epsilon"]="ε",
+["NotTildeTilde"]="≉",
+["nfr"]="𝔫",
+["Vscr"]="𝒱",
+["Ncy"]="Н",
+["boxUl"]="╜",
+["searr"]="↘",
+["ddagger"]="‡",
+["KHcy"]="Х",
+["NotSuperset"]="⊃⃒",
+["Uparrow"]="⇑",
+["nsqsube"]="⋢",
+["Imacr"]="Ī",
+["nspar"]="∦",
+["supsetneqq"]="⫌",
+["Sscr"]="𝒮",
+["lobrk"]="⟦",
+["mfr"]="𝔪",
+["acirc"]="â",
+["subne"]="⊊",
+["Icirc"]="Î",
+["Re"]="ℜ",
+["nearrow"]="↗",
["YUcy"]="Ю",
-["empty"]="∅",
-["nacute"]="ń",
-["Acirc"]="Â",
-["bigtriangleup"]="△",
-["hybull"]="⁃",
-["Ycy"]="Ы",
-["isindot"]="⋵",
-["iota"]="ι",
-["numero"]="№",
-["cfr"]="𝔠",
-["llarr"]="⇇",
-["lrhard"]="⥭",
-["cross"]="✗",
+["eqsim"]="≂",
+["UnionPlus"]="⊎",
+["topcir"]="⫱",
+["boxVL"]="╣",
+["Xscr"]="𝒳",
+["QUOT"]="\"",
+["RightDownVectorBar"]="⥕",
+["epsi"]="ε",
+["natur"]="♮",
+["leftthreetimes"]="⋋",
+["hercon"]="⊹",
+["lHar"]="⥢",
+["Aring"]="Å",
+["Kcedil"]="Ķ",
+["kfr"]="𝔨",
+["Oacute"]="Ó",
["zwnj"]="‌",
+["plusdu"]="⨥",
+["Kcy"]="К",
+["sqcup"]="⊔",
+["zscr"]="𝓏",
+["Assign"]="≔",
+["zopf"]="𝕫",
+["lstrok"]="ł",
+["zigrarr"]="⇝",
+["ShortDownArrow"]="↓",
+["simlE"]="⪟",
+["mid"]="∣",
["zeta"]="ζ",
-["precnsim"]="⋨",
-["zcy"]="з",
+["gE"]="≧",
+["zeetrf"]="ℨ",
+["qfr"]="𝔮",
["zcaron"]="ž",
-["xodot"]="⨀",
-["RightDownTeeVector"]="⥝",
-["ljcy"]="љ",
+["Yacute"]="Ý",
+["hksearow"]="⤥",
+["Atilde"]="Ã",
+["zacute"]="ź",
+["bsemi"]="⁏",
+["bigtriangleup"]="△",
+["yuml"]="ÿ",
+["yucy"]="ю",
["yscr"]="𝓎",
+["yopf"]="𝕪",
["yicy"]="ї",
-["Rcy"]="Р",
-["nsubset"]="⊂⃒",
-["yen"]="¥",
-["ycy"]="ы",
-["simeq"]="≃",
-["dharr"]="⇂",
-["ycirc"]="ŷ",
-["hArr"]="⇔",
-["yacute"]="ý",
-["yacute"]="ý",
+["urcorn"]="⌝",
+["Aacute"]="Á",
+["backsimeq"]="⋍",
+["ShortUpArrow"]="↑",
["xwedge"]="⋀",
-["xoplus"]="⨁",
-["nparsl"]="⫽⃥",
-["PartialD"]="∂",
-["YAcy"]="Я",
-["xrArr"]="⟹",
-["xotime"]="⨂",
-["sstarf"]="⋆",
-["yuml"]="ÿ",
-["Int"]="∬",
-["bsolb"]="⧅",
+["Jcy"]="Й",
+["nltrie"]="⋬",
+["starf"]="★",
+["zfr"]="𝔷",
+["comma"]=",",
+["xsqcup"]="⨆",
+["boxVr"]="╟",
+["cirscir"]="⧂",
+["ucirc"]="û",
+["Cross"]="⨯",
+["naturals"]="ℕ",
+["quaternions"]="ℍ",
+["xopf"]="𝕩",
+["xodot"]="⨀",
["xnis"]="⋻",
-["xmap"]="⟼",
-["hercon"]="⊹",
-["xlArr"]="⟸",
-["xharr"]="⟷",
-["rbrack"]="]",
+["lsaquo"]="‹",
+["xlarr"]="⟵",
+["Zacute"]="Ź",
+["vdash"]="⊢",
+["submult"]="⫁",
+["Oscr"]="𝒪",
["xdtri"]="▽",
-["diamond"]="⋄",
+["LowerRightArrow"]="↘",
["xcup"]="⋃",
-["subsup"]="⫓",
-["lneqq"]="≨",
-["dharl"]="⇃",
-["Scy"]="С",
-["wopf"]="𝕨",
-["rightleftharpoons"]="⇌",
-["wfr"]="𝔴",
-["nsupseteqq"]="⫆̸",
-["boxuR"]="╘",
-["permil"]="‰",
+["Ycy"]="Ы",
+["timesb"]="⊠",
+["Ucirc"]="Û",
+["eth"]="ð",
+["wscr"]="𝓌",
+["ratail"]="⤚",
+["wr"]="≀",
+["Ograve"]="Ò",
+["wp"]="℘",
+["euml"]="ë",
+["yfr"]="𝔶",
+["rangle"]="⟩",
+["hearts"]="♥",
["wedgeq"]="≙",
-["eparsl"]="⧣",
-["RoundImplies"]="⥰",
-["afr"]="𝔞",
-["vsubne"]="⊊︀",
-["sup2"]="²",
+["wedge"]="∧",
+["gtcir"]="⩺",
+["par"]="∥",
+["swarr"]="↙",
+["phiv"]="ϕ",
+["NotElement"]="∉",
+["alpha"]="α",
+["SquareUnion"]="⊔",
+["parsl"]="⫽",
["vscr"]="𝓋",
+["rharu"]="⇀",
+["vrtri"]="⊳",
+["comp"]="∁",
+["Agrave"]="À",
+["rdca"]="⤷",
+["vprop"]="∝",
+["Tscr"]="𝒯",
["vopf"]="𝕧",
-["lbrace"]="{",
+["ldca"]="⤶",
["vnsub"]="⊂⃒",
-["vltri"]="⊲",
-["Uacute"]="Ú",
-["vfr"]="𝔳",
-["sacute"]="ś",
-["njcy"]="њ",
-["frac35"]="⅗",
-["squf"]="▪",
+["gbreve"]="ğ",
+["NotSquareSubset"]="⊏̸",
+["verbar"]="|",
+["YAcy"]="Я",
["veeeq"]="≚",
-["lsime"]="⪍",
-["mapstoleft"]="↤",
+["downharpoonleft"]="⇃",
+["Star"]="⋆",
+["xfr"]="𝔵",
+["nges"]="⩾̸",
+["GreaterGreater"]="⪢",
+["vartriangleright"]="⊳",
+["rcy"]="р",
+["vartheta"]="ϑ",
+["varsupsetneqq"]="⫌︀",
+["dashv"]="⊣",
["varsupsetneq"]="⊋︀",
-["varsubsetneq"]="⊊︀",
-["Tcy"]="Т",
-["cwint"]="∱",
-["varsigma"]="ς",
-["LessGreater"]="≶",
+["Ncaron"]="Ň",
+["varsubsetneqq"]="⫋︀",
["varrho"]="ϱ",
-["varpropto"]="∝",
-["pr"]="≺",
-["backprime"]="‵",
+["triangledown"]="▿",
+["varpi"]="ϖ",
+["sol"]="/",
+["ssetmn"]="∖",
+["varnothing"]="∅",
["varkappa"]="ϰ",
-["Poincareplane"]="ℌ",
-["roplus"]="⨮",
-["Edot"]="Ė",
-["copysr"]="℗",
+["vangrt"]="⦜",
+["Leftarrow"]="⇐",
+["Qscr"]="𝒬",
+["uwangle"]="⦧",
+["rarrap"]="⥵",
["uuml"]="ü",
-["dfr"]="𝔡",
["uuarr"]="⇈",
-["uogon"]="ų",
-["Uscr"]="𝒰",
-["gel"]="⋛",
-["olarr"]="↺",
-["lsaquo"]="‹",
-["omacr"]="ō",
-["utdot"]="⋰",
-["or"]="∨",
-["Ocirc"]="Ô",
-["ClockwiseContourIntegral"]="∲",
-["SmallCircle"]="∘",
-["gtcc"]="⪧",
["uscr"]="𝓊",
+["urtri"]="◹",
+["uring"]="ů",
+["sect"]="§",
+["quatint"]="⨖",
["urcrop"]="⌎",
-["ContourIntegral"]="∮",
-["szlig"]="ß",
-["egs"]="⪖",
-["Ucy"]="У",
-["ange"]="⦤",
-["upharpoonright"]="↾",
-["xcap"]="⋂",
+["wfr"]="𝔴",
+["duhar"]="⥯",
+["upuparrows"]="⇈",
+["macr"]="¯",
+["SmallCircle"]="∘",
+["upsih"]="ϒ",
+["uplus"]="⊎",
+["shy"]="­",
+["uparrow"]="↑",
["uml"]="¨",
-["nsubseteqq"]="⫅̸",
+["eDot"]="≑",
+["blk34"]="▓",
+["umacr"]="ū",
+["ultri"]="◸",
+["rbbrk"]="❳",
["ulcorn"]="⌜",
-["uhblk"]="▀",
-["scirc"]="ŝ",
-["shy"]="­",
-["uharl"]="↿",
+["uharr"]="↾",
["ugrave"]="ù",
-["lstrok"]="ł",
-["Gamma"]="Γ",
-["udhar"]="⥮",
-["udblac"]="ű",
-["ucirc"]="û",
-["loang"]="⟬",
-["uarr"]="↑",
+["Ograve"]="Ò",
+["nsupseteq"]="⊉",
+["ufisht"]="⥾",
+["Breve"]="˘",
+["ucy"]="у",
+["cylcty"]="⌭",
+["ubreve"]="ŭ",
+["SHcy"]="Ш",
+["boxdR"]="╒",
+["awint"]="⨑",
+["uHar"]="⥣",
["uArr"]="⇑",
-["twoheadrightarrow"]="↠",
+["REG"]="®",
+["twoheadleftarrow"]="↞",
["tstrok"]="ŧ",
+["iprod"]="⨼",
["tshcy"]="ћ",
-["tscy"]="ц",
-["angsph"]="∢",
-["kappa"]="κ",
["tscr"]="𝓉",
-["tritime"]="⨻",
-["trisb"]="⧍",
+["trpezium"]="⏢",
+["ycirc"]="ŷ",
+["larrhk"]="↩",
+["triplus"]="⨹",
["triminus"]="⨺",
-["trie"]="≜",
-["tridot"]="◬",
-["aacute"]="á",
+["Rsh"]="↱",
+["becaus"]="∵",
+["Acirc"]="Â",
["trianglerighteq"]="⊵",
-["RightTeeVector"]="⥛",
["triangleright"]="▹",
+["hkswarow"]="⤦",
+["triangleq"]="≜",
+["AElig"]="Æ",
["trianglelefteq"]="⊴",
+["varpropto"]="∝",
["triangle"]="▵",
-["NegativeVeryThinSpace"]="​",
-["triangledown"]="▿",
-["dash"]="‐",
-["trade"]="™",
+["tprime"]="‴",
["topfork"]="⫚",
-["Upsi"]="ϒ",
-["topcir"]="⫱",
-["loplus"]="⨭",
-["Zdot"]="Ż",
-["lbrke"]="⦋",
-["angmsd"]="∡",
-["dArr"]="⇓",
-["topbot"]="⌶",
["toea"]="⤨",
-["iexcl"]="¡",
-["acirc"]="â",
-["easter"]="⩮",
-["CloseCurlyDoubleQuote"]="”",
-["cupcup"]="⩊",
-["rlhar"]="⇌",
-["nsimeq"]="≄",
-["Uparrow"]="⇑",
-["tau"]="τ",
-["npr"]="⊀",
-["phone"]="☎",
-["emacr"]="ē",
-["SHcy"]="Ш",
-["gtdot"]="⋗",
-["ReverseUpEquilibrium"]="⥯",
+["ac"]="∾",
+["timesd"]="⨰",
+["UpArrowDownArrow"]="⇅",
+["timesbar"]="⨱",
+["llhard"]="⥫",
+["CHcy"]="Ч",
+["odblac"]="ő",
+["THORN"]="Þ",
+["notni"]="∌",
+["nbump"]="≎̸",
+["eqcolon"]="≕",
["tilde"]="˜",
-["angmsdac"]="⦪",
-["duhar"]="⥯",
-["approxeq"]="≊",
-["NotSupersetEqual"]="⊉",
-["thorn"]="þ",
-["thksim"]="∼",
-["subsim"]="⫇",
-["bnot"]="⌐",
+["simgE"]="⪠",
+["intercal"]="⊺",
+["thetasym"]="ϑ",
+["xcirc"]="◯",
["thinsp"]=" ",
["thicksim"]="∼",
-["gt"]=">",
-["UpperLeftArrow"]="↖",
-["thetasym"]="ϑ",
-["simlE"]="⪟",
-["bbrktbrk"]="⎶",
-["Jcirc"]="Ĵ",
-["cedil"]="¸",
-["NotLessSlantEqual"]="⩽̸",
-["rx"]="℞",
-["infin"]="∞",
-["curlyvee"]="⋎",
-["LeftArrow"]="←",
-["tfr"]="𝔱",
-["blacksquare"]="▪",
-["emptyv"]="∅",
-["Mellintrf"]="ℳ",
-["aogon"]="ą",
-["succnapprox"]="⪺",
-["tcy"]="т",
-["ecaron"]="ě",
+["LeftArrowBar"]="⇤",
+["Uuml"]="Ü",
+["DownTeeArrow"]="↧",
+["cent"]="¢",
+["hookleftarrow"]="↩",
+["odiv"]="⨸",
+["therefore"]="∴",
+["ClockwiseContourIntegral"]="∲",
+["Ofr"]="𝔒",
+["auml"]="ä",
+["frac12"]="½",
+["nRightarrow"]="⇏",
+["kcedil"]="ķ",
+["DownRightVectorBar"]="⥗",
+["boxDL"]="╗",
["tcedil"]="ţ",
-["boxhU"]="╨",
-["boxVl"]="╢",
-["gacute"]="ǵ",
-["tcaron"]="ť",
-["boxDr"]="╓",
-["bump"]="≎",
-["blk12"]="▒",
-["RightArrow"]="→",
-["els"]="⪕",
-["apacir"]="⩯",
-["acy"]="а",
-["omid"]="⦶",
-["boxbox"]="⧉",
-["iecy"]="е",
-["szlig"]="ß",
-["upsih"]="ϒ",
-["swnwar"]="⤪",
-["Icirc"]="Î",
-["swarr"]="↙",
-["times"]="×",
-["Ograve"]="Ò",
-["hoarr"]="⇿",
-["NotTildeEqual"]="≄",
-["IEcy"]="Е",
-["iexcl"]="¡",
-["bdquo"]="„",
-["TildeTilde"]="≈",
+["boxUr"]="╙",
+["icirc"]="î",
+["lmoustache"]="⎰",
+["prime"]="′",
+["ngeq"]="≱",
["nshortparallel"]="∦",
-["subedot"]="⫃",
-["supsetneq"]="⊋",
-["CenterDot"]="·",
-["lessapprox"]="⪅",
-["LeftVectorBar"]="⥒",
-["bigoplus"]="⨁",
-["supseteqq"]="⫆",
-["drcorn"]="⌟",
-["hstrok"]="ħ",
-["HorizontalLine"]="─",
-["curarrm"]="⤼",
-["lopar"]="⦅",
+["szlig"]="ß",
+["Egrave"]="È",
+["sqsubset"]="⊏",
+["NotRightTriangleEqual"]="⋭",
+["swarrow"]="↙",
+["Ucirc"]="Û",
+["DownArrowBar"]="⤓",
+["Lfr"]="𝔏",
["wcirc"]="ŵ",
+["LessLess"]="⪡",
+["Tilde"]="∼",
+["empty"]="∅",
+["swarhk"]="⤦",
+["DownLeftVector"]="↽",
+["Uscr"]="𝒰",
+["khcy"]="х",
+["gesl"]="⋛︀",
+["supsub"]="⫔",
+["malt"]="✠",
+["cirmid"]="⫯",
+["PrecedesTilde"]="≾",
+["lharul"]="⥪",
+["rightleftharpoons"]="⇌",
+["Ccedil"]="Ç",
+["plusb"]="⊞",
+["nsupe"]="⊉",
+["geq"]="≥",
+["dHar"]="⥥",
+["lcedil"]="ļ",
+["ange"]="⦤",
+["supseteq"]="⊇",
+["Upsi"]="ϒ",
+["mapstodown"]="↧",
+["profalar"]="⌮",
+["cupdot"]="⊍",
+["mapstoleft"]="↤",
+["xotime"]="⨂",
+["tbrk"]="⎴",
+["supmult"]="⫂",
+["disin"]="⋲",
["suphsub"]="⫗",
-["Otilde"]="Õ",
-["EmptySmallSquare"]="◻",
+["eg"]="⪚",
["supedot"]="⫄",
-["Kopf"]="𝕂",
-["boxminus"]="⊟",
-["csupe"]="⫒",
-["Ffr"]="𝔉",
-["origof"]="⊶",
-["sup3"]="³",
-["boxH"]="═",
-["vsubnE"]="⫋︀",
-["Hcirc"]="Ĥ",
-["block"]="█",
+["NonBreakingSpace"]=" ",
+["Euml"]="Ë",
["bsolhsub"]="⟈",
-["Supset"]="⋑",
-["GreaterFullEqual"]="≧",
+["supdsub"]="⫘",
+["sup3"]="³",
+["DoubleLeftTee"]="⫤",
+["angrtvb"]="⊾",
+["supsim"]="⫈",
+["sup2"]="²",
+["sup2"]="²",
+["circledast"]="⊛",
+["rfr"]="𝔯",
+["darr"]="↓",
+["rarrhk"]="↪",
+["macr"]="¯",
["sup1"]="¹",
-["llcorner"]="⌞",
-["sopf"]="𝕤",
-["larrbfs"]="⤟",
-["succneqq"]="⪶",
-["part"]="∂",
-["eacute"]="é",
-["COPY"]="©",
-["frac23"]="⅔",
-["dbkarow"]="⤏",
-["succeq"]="⪰",
-["notni"]="∌",
-["Euml"]="Ë",
-["harrcir"]="⥈",
-["leftrightsquigarrow"]="↭",
-["xcirc"]="◯",
-["caret"]="⁁",
-["les"]="⩽",
-["lharul"]="⥪",
-["bsime"]="⋍",
-["DoubleLeftArrow"]="⇐",
-["ecirc"]="ê",
-["subsetneqq"]="⫋",
-["crarr"]="↵",
-["cuwed"]="⋏",
-["Ugrave"]="Ù",
-["Gcirc"]="Ĝ",
-["LeftTriangleBar"]="⧏",
+["aacute"]="á",
+["oscr"]="ℴ",
+["lharu"]="↼",
+["telrec"]="⌕",
+["Dashv"]="⫤",
+["succnsim"]="⋩",
+["AElig"]="Æ",
+["Vee"]="⋁",
+["succnapprox"]="⪺",
+["CapitalDifferentialD"]="ⅅ",
["gsim"]="≳",
-["RightTriangleEqual"]="⊵",
-["lacute"]="ĺ",
-["Ccedil"]="Ç",
-["ee"]="ⅇ",
-["heartsuit"]="♥",
-["coloneq"]="≔",
-["subseteq"]="⊆",
-["NotSucceedsTilde"]="≿̸",
+["succapprox"]="⪸",
+["rmoustache"]="⎱",
+["DotEqual"]="≐",
+["subsup"]="⫓",
+["Gcedil"]="Ģ",
+["questeq"]="≟",
+["lthree"]="⋋",
+["cong"]="≅",
+["lcub"]="{",
+["radic"]="√",
+["subrarr"]="⥹",
+["nvlt"]="<⃒",
["subplus"]="⪿",
-["cupcap"]="⩆",
-["Amacr"]="Ā",
-["angst"]="Å",
-["supsetneqq"]="⫌",
-["sube"]="⊆",
-["imagpart"]="ℑ",
-["Lambda"]="Λ",
-["Afr"]="𝔄",
-["sub"]="⊂",
+["bigsqcup"]="⨆",
+["downarrow"]="↓",
+["auml"]="ä",
+["boxdL"]="╕",
+["boxvr"]="├",
+["lbrkslu"]="⦍",
+["bigwedge"]="⋀",
+["apacir"]="⩯",
+["Wscr"]="𝒲",
+["iecy"]="е",
+["VerticalSeparator"]="❘",
+["Yfr"]="𝔜",
["strns"]="¯",
["straightphi"]="ϕ",
-["boxvL"]="╡",
-["dagger"]="†",
-["eta"]="η",
-["KHcy"]="Х",
-["Yfr"]="𝔜",
-["lbrack"]="[",
-["VerticalBar"]="∣",
-["rightleftarrows"]="⇄",
-["fltns"]="▱",
-["verbar"]="|",
-["RightAngleBracket"]="⟩",
-["DownRightVector"]="⇁",
-["Lacute"]="Ĺ",
-["sol"]="/",
-["lrm"]="‎",
-["lesdot"]="⩿",
-["nleqslant"]="⩽̸",
-["capcap"]="⩋",
+["kcy"]="к",
+["aogon"]="ą",
+["star"]="☆",
+["caret"]="⁁",
+["cups"]="∪︀",
+["iquest"]="¿",
+["spar"]="∥",
+["NotExists"]="∄",
+["Gt"]="≫",
["squ"]="□",
-["xutri"]="△",
-["TSHcy"]="Ћ",
-["gap"]="⪆",
-["gtrdot"]="⋗",
-["scnap"]="⪺",
-["bkarow"]="⤍",
-["NotPrecedes"]="⊀",
-["suphsol"]="⟉",
+["sqsupe"]="⊒",
+["subnE"]="⫋",
["sqsup"]="⊐",
-["epsi"]="ε",
-["sqsubset"]="⊏",
-["check"]="✓",
-["UpArrowBar"]="⤒",
-["NotPrecedesEqual"]="⪯̸",
-["csube"]="⫑",
-["nsupset"]="⊃⃒",
-["lesdoto"]="⪁",
+["sqsubseteq"]="⊑",
+["ffr"]="𝔣",
+["UpTeeArrow"]="↥",
+["middot"]="·",
+["DoubleLongRightArrow"]="⟹",
+["sqsube"]="⊑",
+["sce"]="⪰",
+["Sup"]="⋑",
+["cacute"]="ć",
+["GreaterFullEqual"]="≧",
+["pfr"]="𝔭",
+["Lleftarrow"]="⇚",
+["heartsuit"]="♥",
+["precsim"]="≾",
+["nsucceq"]="⪰̸",
["sqcups"]="⊔︀",
-["suplarr"]="⥻",
-["nsim"]="≁",
-["NotEqualTilde"]="≂̸",
-["nearr"]="↗",
-["SquareIntersection"]="⊓",
-["intlarhk"]="⨗",
-["Ecirc"]="Ê",
-["vangrt"]="⦜",
-["fllig"]="fl",
-["Leftrightarrow"]="⇔",
-["primes"]="ℙ",
-["nvlArr"]="⤂",
+["Igrave"]="Ì",
+["iquest"]="¿",
+["Pcy"]="П",
+["thksim"]="∼",
+["djcy"]="ђ",
+["hfr"]="𝔥",
+["spadesuit"]="♠",
+["rbrkslu"]="⦐",
+["shcy"]="ш",
+["barwed"]="⌅",
+["rpar"]=")",
+["iiiint"]="⨌",
+["solb"]="⧄",
+["Integral"]="∫",
+["napE"]="⩰̸",
+["softcy"]="ь",
+["NotRightTriangleBar"]="⧐̸",
+["Mu"]="Μ",
+["frasl"]="⁄",
+["Icy"]="И",
+["dfisht"]="⥿",
["smte"]="⪬",
-["ltri"]="◃",
-["Tscr"]="𝒯",
+["smt"]="⪪",
+["bottom"]="⊥",
+["oacute"]="ó",
+["ofr"]="𝔬",
["smid"]="∣",
-["smeparsl"]="⧤",
-["rarrc"]="⤳",
-["divideontimes"]="⋇",
-["eth"]="ð",
-["boxvR"]="╞",
-["copy"]="©",
-["nges"]="⩾̸",
-["fcy"]="ф",
-["ShortUpArrow"]="↑",
-["simplus"]="⨤",
-["frac45"]="⅘",
-["nexists"]="∄",
-["LeftTeeArrow"]="↤",
-["leftleftarrows"]="⇇",
-["simg"]="⪞",
-["euro"]="€",
-["simdot"]="⩪",
-["sim"]="∼",
-["sigmav"]="ς",
-["iuml"]="ï",
-["updownarrow"]="↕",
-["shy"]="­",
-["solb"]="⧄",
+["ReverseUpEquilibrium"]="⥯",
+["smashp"]="⨳",
+["slarr"]="←",
+["simne"]="≆",
+["LeftRightArrow"]="↔",
+["thkap"]="≈",
+["nlArr"]="⇍",
+["chcy"]="ч",
+["not"]="¬",
+["kgreen"]="ĸ",
+["simeq"]="≃",
+["LongRightArrow"]="⟶",
+["sime"]="≃",
+["sigma"]="σ",
+["odot"]="⊙",
+["amp"]="&",
+["Longleftrightarrow"]="⟺",
+["Upsilon"]="Υ",
+["upharpoonleft"]="↿",
+["bigotimes"]="⨂",
+["parallel"]="∥",
+["ffllig"]="ffl",
+["shortparallel"]="∥",
+["boxdr"]="┌",
+["shortmid"]="∣",
+["Euml"]="Ë",
+["UpDownArrow"]="↕",
+["lcaron"]="ľ",
+["sfrown"]="⌢",
+["harr"]="↔",
+["dsol"]="⧶",
+["Beta"]="Β",
+["srarr"]="→",
+["boxHd"]="╤",
["nesear"]="⤨",
-["Umacr"]="Ū",
-["uharr"]="↾",
-["Therefore"]="∴",
-["Barv"]="⫧",
-["amacr"]="ā",
["setmn"]="∖",
+["DoubleDot"]="¨",
["setminus"]="∖",
-["Sscr"]="𝒮",
+["andd"]="⩜",
+["leftrightarrow"]="↔",
["seswar"]="⤩",
-["ccupssm"]="⩐",
-["searr"]="↘",
+["eogon"]="ę",
+["bne"]="=⃥",
+["DownBreve"]="̑",
+["nLtv"]="≪̸",
+["nprcue"]="⋠",
+["SucceedsSlantEqual"]="≽",
+["downdownarrows"]="⇊",
+["seArr"]="⇘",
+["Utilde"]="Ũ",
+["Gammad"]="Ϝ",
+["sdote"]="⩦",
+["iexcl"]="¡",
+["nvdash"]="⊬",
+["csupe"]="⫒",
["sdotb"]="⊡",
-["icirc"]="î",
-["amp"]="&",
-["gcy"]="г",
-["Aacute"]="Á",
-["boxvh"]="┼",
-["bfr"]="𝔟",
-["OverParenthesis"]="⏜",
-["sqsupe"]="⊒",
-["amp"]="&",
-["frac14"]="¼",
-["ZeroWidthSpace"]="​",
-["Colon"]="∷",
-["Proportional"]="∝",
-["thickapprox"]="≈",
-["subseteqq"]="⫅",
-["IJlig"]="IJ",
-["scedil"]="ş",
-["lrarr"]="⇆",
-["angmsdaf"]="⦭",
-["downharpoonleft"]="⇃",
+["scsim"]="≿",
+["bcy"]="б",
+["NotTilde"]="≁",
+["minus"]="−",
+["scnE"]="⪶",
+["scirc"]="ŝ",
+["oplus"]="⊕",
+["para"]="¶",
+["Ycirc"]="Ŷ",
+["notinva"]="∉",
+["nLl"]="⋘̸",
+["Aring"]="Å",
+["THORN"]="Þ",
+["numero"]="№",
+["scaron"]="š",
+["bsol"]="\\",
+["harrw"]="↭",
+["exponentiale"]="ⅇ",
+["eDDot"]="⩷",
+["AMP"]="&",
+["gamma"]="γ",
+["opar"]="⦷",
+["cwint"]="∱",
+["GreaterEqual"]="≥",
+["bigcap"]="⋂",
+["rtimes"]="⋊",
+["integers"]="ℤ",
+["easter"]="⩮",
["RightDoubleBracket"]="⟧",
-["half"]="½",
-["larr"]="←",
["sbquo"]="‚",
-["Vscr"]="𝒱",
-["nVdash"]="⊮",
-["DownRightVectorBar"]="⥗",
-["RightDownVector"]="⇂",
-["disin"]="⋲",
-["nsce"]="⪰̸",
-["rbrace"]="}",
-["MinusPlus"]="∓",
-["rtrif"]="▸",
-["parsim"]="⫳",
-["supseteq"]="⊇",
-["Superset"]="⊃",
-["Verbar"]="‖",
+["cfr"]="𝔠",
+["ruluhar"]="⥨",
+["image"]="ℑ",
+["nleqslant"]="⩽̸",
+["Yopf"]="𝕐",
+["apE"]="⩰",
+["NotPrecedesEqual"]="⪯̸",
+["rsqb"]="]",
+["rtrie"]="⊵",
+["rthree"]="⋌",
+["amp"]="&",
+["eng"]="ŋ",
+["ll"]="≪",
+["rrarr"]="⇉",
+["RightTee"]="⊢",
+["ETH"]="Ð",
+["ReverseEquilibrium"]="⇋",
+["langle"]="⟨",
["Zeta"]="Ζ",
-["nsccue"]="⋡",
-["bsemi"]="⁏",
-["ldquor"]="„",
-["curarr"]="↷",
-["rscr"]="𝓇",
-["rppolint"]="⨒",
-["rpargt"]="⦔",
-["rotimes"]="⨵",
-["Equal"]="⩵",
-["ropf"]="𝕣",
-["ropar"]="⦆",
-["roarr"]="⇾",
-["odot"]="⊙",
-["natural"]="♮",
-["slarr"]="←",
-["angmsdae"]="⦬",
-["acE"]="∾̳",
+["roplus"]="⨮",
+["there4"]="∴",
+["DownRightTeeVector"]="⥟",
+["npar"]="∦",
+["robrk"]="⟧",
+["exist"]="∃",
+["lfr"]="𝔩",
+["VDash"]="⊫",
+["rnmid"]="⫮",
+["rmoust"]="⎱",
["rlm"]="‏",
-["COPY"]="©",
-["iogon"]="į",
-["nleftrightarrow"]="↮",
-["reg"]="®",
-["risingdotseq"]="≓",
-["rightsquigarrow"]="↝",
-["dtri"]="▿",
-["Larr"]="↞",
-["icy"]="и",
-["gimel"]="ℷ",
+["Ccirc"]="Ĉ",
+["imagpart"]="ℑ",
+["Equilibrium"]="⇌",
+["dd"]="ⅆ",
+["cuepr"]="⋞",
+["Agrave"]="À",
+["cuesc"]="⋟",
+["square"]="□",
+["notnivc"]="⋽",
+["rbrksld"]="⦎",
["cup"]="∪",
-["DJcy"]="Ђ",
-["gtrapprox"]="⪆",
-["rightharpoonup"]="⇀",
-["prsim"]="≾",
-["rightharpoondown"]="⇁",
-["frac16"]="⅙",
-["nbsp"]=" ",
-["cedil"]="¸",
-["numsp"]=" ",
+["OpenCurlyDoubleQuote"]="“",
+["Lacute"]="Ĺ",
+["NewLine"]="\n",
+["Sigma"]="Σ",
+["Abreve"]="Ă",
+["rightleftarrows"]="⇄",
+["tint"]="∭",
+["angmsdae"]="⦬",
+["Leftrightarrow"]="⇔",
+["rdquor"]="”",
+["Verbar"]="‖",
+["Gfr"]="𝔊",
["rightarrow"]="→",
["rhov"]="ϱ",
-["rdquo"]="”",
-["rharul"]="⥬",
-["frac34"]="¾",
-["ldrdhar"]="⥧",
-["gnsim"]="⋧",
-["rtriltri"]="⧎",
-["emsp"]=" ",
-["rlarr"]="⇄",
-["Oslash"]="Ø",
-["LeftDownTeeVector"]="⥡",
+["Alpha"]="Α",
+["rho"]="ρ",
+["DownLeftTeeVector"]="⥞",
+["ntriangleright"]="⋫",
["reg"]="®",
-["LeftTeeVector"]="⥚",
-["gsiml"]="⪐",
-["QUOT"]="\"",
-["blk14"]="░",
-["rightrightarrows"]="⇉",
-["NotGreaterGreater"]="≫̸",
-["Xscr"]="𝒳",
-["Re"]="ℜ",
-["Ouml"]="Ö",
+["Int"]="∬",
+["agrave"]="à",
+["Ecirc"]="Ê",
+["NotReverseElement"]="∌",
+["backprime"]="‵",
+["Jfr"]="𝔍",
["rdsh"]="↳",
-["and"]="∧",
-["larrb"]="⇤",
-["TripleDot"]="⃛",
-["bcy"]="б",
-["diams"]="♦",
-["veebar"]="⊻",
-["rcub"]="}",
-["Scirc"]="Ŝ",
-["ac"]="∾",
-["rceil"]="⌉",
-["rcedil"]="ŗ",
-["cupbrcap"]="⩈",
-["rcaron"]="ř",
-["cuesc"]="⋟",
-["HilbertSpace"]="ℋ",
-["plus"]="+",
-["rbrkslu"]="⦐",
-["LessLess"]="⪡",
-["macr"]="¯",
-["notinE"]="⋹̸",
+["jsercy"]="ј",
+["Bscr"]="ℬ",
+["boxH"]="═",
+["leq"]="≤",
+["NotPrecedes"]="⊀",
+["coloneq"]="≔",
+["boxvh"]="┼",
+["larr"]="←",
+["ncup"]="⩂",
+["EmptySmallSquare"]="◻",
+["vartriangleleft"]="⊲",
+["iacute"]="í",
+["nVDash"]="⊯",
+["lap"]="⪅",
+["precapprox"]="⪷",
+["ecolon"]="≕",
+["lsqb"]="[",
["rbarr"]="⤍",
-["abreve"]="ă",
-["sqcup"]="⊔",
-["ratail"]="⤚",
-["VeryThinSpace"]=" ",
-["Uarrocir"]="⥉",
-["rarrfs"]="⤞",
-["Odblac"]="Ő",
-["Imacr"]="Ī",
-["ordm"]="º",
-["odsold"]="⦼",
-["NJcy"]="Њ",
-["Yacute"]="Ý",
-["rarrbfs"]="⤠",
-["prop"]="∝",
-["notin"]="∉",
-["vsupne"]="⊋︀",
-["bigcap"]="⋂",
-["Phi"]="Φ",
-["Ograve"]="Ò",
-["Yscr"]="𝒴",
-["approx"]="≈",
-["racute"]="ŕ",
-["ggg"]="⋙",
-["lmoust"]="⎰",
+["yacy"]="я",
+["efDot"]="≒",
+["ratio"]="∶",
+["wreath"]="≀",
+["nearhk"]="⤤",
+["rarrpl"]="⥅",
+["nvge"]="≥⃒",
+["searrow"]="↘",
+["thorn"]="þ",
+["rdquo"]="”",
+["LessFullEqual"]="≦",
+["nvrtrie"]="⊵⃒",
+["nsubseteqq"]="⫅̸",
+["nedot"]="≐̸",
+["VerticalLine"]="|",
+["lsh"]="↰",
+["DownRightVector"]="⇁",
+["ecirc"]="ê",
+["andv"]="⩚",
+["trie"]="≜",
+["race"]="∽̱",
["rBarr"]="⤏",
-["gneqq"]="≩",
-["isinv"]="∈",
-["harr"]="↔",
-["rArr"]="⇒",
-["rAarr"]="⇛",
-["quot"]="\"",
+["lbrksld"]="⦏",
+["emsp14"]=" ",
+["RuleDelayed"]="⧴",
+["vsubne"]="⊊︀",
+["ShortLeftArrow"]="←",
+["gtlPar"]="⦕",
["quest"]="?",
-["iuml"]="ï",
-["LeftRightArrow"]="↔",
-["LeftDoubleBracket"]="⟦",
-["gesdot"]="⪀",
-["Ntilde"]="Ñ",
-["boxUR"]="╚",
-["exist"]="∃",
-["subnE"]="⫋",
-["ograve"]="ò",
-["qopf"]="𝕢",
-["Zacute"]="Ź",
-["qfr"]="𝔮",
-["dcy"]="д",
-["NotReverseElement"]="∌",
-["DotEqual"]="≐",
-["VerticalLine"]="|",
-["pscr"]="𝓅",
-["prurel"]="⊰",
-["cdot"]="ċ",
-["bprime"]="‵",
-["ltdot"]="⋖",
-["prnsim"]="⋨",
-["curlywedge"]="⋏",
-["prnE"]="⪵",
-["REG"]="®",
-["sup3"]="³",
+["dot"]="˙",
+["RightVector"]="⇀",
+["rppolint"]="⨒",
+["Hat"]="^",
+["zcy"]="з",
+["suplarr"]="⥻",
+["boxhU"]="╨",
+["puncsp"]=" ",
+["GreaterLess"]="≷",
+["psi"]="ψ",
+["ncaron"]="ň",
+["SupersetEqual"]="⊇",
+["propto"]="∝",
["preceq"]="⪯",
-["LeftDownVectorBar"]="⥙",
-["ForAll"]="∀",
+["frac56"]="⅚",
+["NotLessGreater"]="≸",
+["jukcy"]="є",
+["swArr"]="⇙",
+["profline"]="⌒",
+["prnE"]="⪵",
+["larrpl"]="⤹",
+["af"]="⁡",
+["profsurf"]="⌓",
+["Larr"]="↞",
["forkv"]="⫙",
-["varpi"]="ϖ",
-["nrArr"]="⇏",
+["prcue"]="≼",
+["RightUpTeeVector"]="⥜",
["pound"]="£",
+["ugrave"]="ù",
+["popf"]="𝕡",
+["frac78"]="⅞",
+["suphsol"]="⟉",
+["loplus"]="⨭",
+["pointint"]="⨕",
+["cupcap"]="⩆",
+["LessTilde"]="≲",
+["pm"]="±",
+["blacksquare"]="▪",
["plustwo"]="⨧",
-["shchcy"]="щ",
-["cacute"]="ć",
-["Dashv"]="⫤",
-["lHar"]="⥢",
-["NotLeftTriangle"]="⋪",
-["gbreve"]="ğ",
-["boxDl"]="╖",
-["Beta"]="Β",
-["ReverseEquilibrium"]="⇋",
+["copy"]="©",
+["plussim"]="⨦",
+["Lcy"]="Л",
+["pluse"]="⩲",
+["ropar"]="⦆",
+["OpenCurlyQuote"]="‘",
["plusacir"]="⨣",
-["eqslantgtr"]="⪖",
-["ecy"]="э",
-["pitchfork"]="⋔",
-["ctdot"]="⋯",
-["odiv"]="⨸",
-["lesseqqgtr"]="⪋",
-["GreaterLess"]="≷",
-["Ocy"]="О",
-["weierp"]="℘",
-["Uring"]="Ů",
-["period"]=".",
-["nis"]="⋼",
-["cudarrr"]="⤵",
-["boxHU"]="╩",
-["Ouml"]="Ö",
-["Assign"]="≔",
-["Lscr"]="ℒ",
-["parallel"]="∥",
-["there4"]="∴",
-["cupor"]="⩅",
-["nwarr"]="↖",
-["para"]="¶",
-["ouml"]="ö",
-["otimes"]="⊗",
-["drbkarow"]="⤐",
-["puncsp"]=" ",
-["otilde"]="õ",
-["Vvdash"]="⊪",
-["osol"]="⊘",
+["Exists"]="∃",
+["piv"]="ϖ",
+["phmmat"]="ℳ",
+["angzarr"]="⍼",
+["vsupnE"]="⫌︀",
+["phi"]="φ",
+["perp"]="⊥",
+["rdldhar"]="⥩",
+["ccirc"]="ĉ",
+["Tfr"]="𝔗",
+["Tcy"]="Т",
+["circeq"]="≗",
+["InvisibleTimes"]="⁢",
+["OElig"]="Œ",
+["trisb"]="⧍",
+["Rcaron"]="Ř",
+["olt"]="⧀",
+["UpArrow"]="↑",
+["DDotrahd"]="⤑",
+["Uarrocir"]="⥉",
+["lacute"]="ĺ",
["oslash"]="ø",
-["dd"]="ⅆ",
-["NotPrecedesSlantEqual"]="⋠",
-["orv"]="⩛",
-["orslope"]="⩗",
-["KJcy"]="Ќ",
-["larrfs"]="⤝",
-["orderof"]="ℴ",
-["asympeq"]="≍",
-["ord"]="⩝",
-["NotLess"]="≮",
-["NotGreater"]="≯",
-["ThinSpace"]=" ",
-["ominus"]="⊖",
+["Uarr"]="↟",
+["bsolb"]="⧅",
+["gt"]=">",
+["ordm"]="º",
+["Itilde"]="Ĩ",
+["ordm"]="º",
+["Jscr"]="𝒥",
+["Rarr"]="↠",
+["measuredangle"]="∡",
["DoubleLongLeftRightArrow"]="⟺",
-["lesseqgtr"]="⋚",
+["lmidot"]="ŀ",
+["period"]=".",
["operp"]="⦹",
-["quaternions"]="ℍ",
-["boxdR"]="╒",
-["omega"]="ω",
-["Kscr"]="𝒦",
-["lessgtr"]="≶",
-["utilde"]="ũ",
-["olt"]="⧀",
-["Rho"]="Ρ",
-["olcir"]="⦾",
-["oint"]="∮",
+["bprime"]="‵",
+["numsp"]=" ",
+["ominus"]="⊖",
+["nldr"]="‥",
["ograve"]="ò",
-["Succeeds"]="≻",
-["Igrave"]="Ì",
-["eogon"]="ę",
-["Uacute"]="Ú",
-["bbrk"]="⎵",
-["ocy"]="о",
-["bcong"]="≌",
+["omicron"]="ο",
+["nearr"]="↗",
+["jcirc"]="ĵ",
+["nlE"]="≦̸",
+["deg"]="°",
+["frac13"]="⅓",
+["tcy"]="т",
+["lowbar"]="_",
+["vfr"]="𝔳",
+["ogon"]="˛",
+["sim"]="∼",
+["ocirc"]="ô",
+["Icirc"]="Î",
+["ocir"]="⊚",
+["ZeroWidthSpace"]="​",
["oast"]="⊛",
+["smile"]="⌣",
+["bigvee"]="⋁",
["oacute"]="ó",
-["cir"]="○",
-["angmsdab"]="⦩",
-["Iscr"]="ℐ",
-["ldquo"]="“",
-["RightVector"]="⇀",
-["euml"]="ë",
-["between"]="≬",
-["oS"]="Ⓢ",
-["downdownarrows"]="⇊",
-["nvlt"]="<⃒",
-["lurdshar"]="⥊",
-["starf"]="★",
-["xlarr"]="⟵",
-["Aring"]="Å",
-["Xi"]="Ξ",
-["gtcir"]="⩺",
-["Nscr"]="𝒩",
-["elinters"]="⏧",
-["ntrianglelefteq"]="⋬",
-["Vbar"]="⫫",
+["Egrave"]="È",
+["nwnear"]="⤧",
+["nwarhk"]="⤣",
+["rationals"]="ℚ",
+["DiacriticalGrave"]="`",
+["npreceq"]="⪯̸",
+["rarrc"]="⤳",
+["Uogon"]="Ų",
+["InvisibleComma"]="⁣",
+["nvltrie"]="⊴⃒",
+["digamma"]="ϝ",
+["cirE"]="⧃",
+["AMP"]="&",
+["Theta"]="Θ",
+["frac15"]="⅕",
+["fnof"]="ƒ",
+["icirc"]="î",
+["Cdot"]="Ċ",
+["ngsim"]="≵",
+["sube"]="⊆",
+["tcaron"]="ť",
["ntilde"]="ñ",
-["andv"]="⩚",
-["Rsh"]="↱",
-["angmsdad"]="⦫",
-["nsup"]="⊅",
-["nbsp"]=" ",
-["SquareSupersetEqual"]="⊒",
-["ETH"]="Ð",
-["nsube"]="⊈",
-["DoubleContourIntegral"]="∯",
-["nsubE"]="⫅̸",
-["angmsdah"]="⦯",
-["NotLessGreater"]="≸",
-["awint"]="⨑",
-["rtri"]="▹",
-["nsc"]="⊁",
-["boxvl"]="┤",
-["beta"]="β",
-["LessSlantEqual"]="⩽",
-["supsub"]="⫔",
-["agrave"]="à",
-["LeftUpTeeVector"]="⥠",
-["nrarrw"]="↝̸",
-["ltcc"]="⪦",
-["nrarrc"]="⤳̸",
-["frac78"]="⅞",
-["nvrArr"]="⤃",
-["igrave"]="ì",
-["barwed"]="⌅",
-["Mscr"]="ℳ",
-["nrarr"]="↛",
-["SubsetEqual"]="⊆",
-["notnivc"]="⋽",
-["notnivb"]="⋾",
-["succcurlyeq"]="≽",
-["eth"]="ð",
-["notinva"]="∉",
-["Otilde"]="Õ",
-["star"]="☆",
-["rangd"]="⦒",
-["Psi"]="Ψ",
-["nsupe"]="⊉",
-["mapstoup"]="↥",
-["LJcy"]="Љ",
-["looparrowleft"]="↫",
-["nlarr"]="↚",
-["Ll"]="⋘",
-["ordf"]="ª",
-["ni"]="∋",
+["ufr"]="𝔲",
+["Mcy"]="М",
["Delta"]="Δ",
-["NotVerticalBar"]="∤",
-["backcong"]="≌",
-["NoBreak"]="⁠",
+["vnsup"]="⊃⃒",
+["lAtail"]="⤛",
+["DoubleUpArrow"]="⇑",
+["aelig"]="æ",
+["lscr"]="𝓁",
+["Rscr"]="ℛ",
+["capcup"]="⩇",
+["npolint"]="⨔",
+["gesdotol"]="⪄",
+["uacute"]="ú",
+["bumpE"]="⪮",
+["drcorn"]="⌟",
+["notnivb"]="⋾",
+["notinvc"]="⋶",
+["ovbar"]="⌽",
+["Mopf"]="𝕄",
+["NotGreater"]="≯",
+["boxDr"]="╓",
+["lrcorner"]="⌟",
+["nleq"]="≰",
+["nleftarrow"]="↚",
+["nle"]="≰",
+["boxvl"]="┤",
+["Downarrow"]="⇓",
+["hcirc"]="ĥ",
["nharr"]="↮",
+["tfr"]="𝔱",
+["nlt"]="≮",
+["gacute"]="ǵ",
+["colone"]="≔",
+["Rang"]="⟫",
["ngt"]="≯",
-["Pscr"]="𝒫",
-["laemptyv"]="⦴",
-["utrif"]="▴",
-["ngeq"]="≱",
-["ncedil"]="ņ",
-["ncaron"]="ň",
-["boxhu"]="┴",
-["NotSquareSuperset"]="⊐̸",
-["bull"]="•",
+["ntilde"]="ñ",
+["vcy"]="в",
+["boxvL"]="╡",
+["NotLeftTriangleBar"]="⧏̸",
+["NestedGreaterGreater"]="≫",
+["xmap"]="⟼",
+["napid"]="≋̸",
+["LeftTriangleBar"]="⧏",
["SquareSubsetEqual"]="⊑",
-["VerticalSeparator"]="❘",
-["natur"]="♮",
-["ffr"]="𝔣",
-["rdquor"]="”",
-["lagran"]="ℒ",
-["nRightarrow"]="⇏",
-["nLtv"]="≪̸",
-["nLl"]="⋘̸",
-["Epsilon"]="Ε",
-["csup"]="⫐",
-["leftarrow"]="←",
-["nGt"]="≫⃒",
-["multimap"]="⊸",
-["mstpos"]="∾",
-["SuchThat"]="∋",
-["mldr"]="…",
-["midast"]="*",
-["Sum"]="∑",
-["vartheta"]="ϑ",
-["mapsto"]="↦",
-["nsupseteq"]="⊉",
-["Oscr"]="𝒪",
-["forall"]="∀",
-["aring"]="å",
-["ltimes"]="⋉",
-["ltcir"]="⩹",
-["lt"]="<",
-["ii"]="ⅈ",
-["equest"]="≟",
-["scsim"]="≿",
-["lsqb"]="[",
-["lsimg"]="⪏",
-["Egrave"]="È",
-["Downarrow"]="⇓",
-["lsim"]="≲",
-["eqslantless"]="⪕",
-["ucirc"]="û",
-["Auml"]="Ä",
-["lnsim"]="⋦",
-["uplus"]="⊎",
-["lhblk"]="▄",
-["Ugrave"]="Ù",
-["dlcrop"]="⌍",
-["OElig"]="Œ",
-["lesg"]="⋚︀",
-["lesdotor"]="⪃",
-["eg"]="⪚",
-["lvertneqq"]="≨︀",
-["leqslant"]="⩽",
-["ccups"]="⩌",
-["lceil"]="⌈",
-["auml"]="ä",
-["RightCeiling"]="⌉",
-["lbrksld"]="⦏",
-["lbarr"]="⤌",
+["eacute"]="é",
+["ne"]="≠",
+["ncongdot"]="⩭̸",
+["boxvR"]="╞",
+["PrecedesEqual"]="⪯",
+["Omacr"]="Ō",
+["egs"]="⪖",
+["ouml"]="ö",
+["nbsp"]=" ",
+["xuplus"]="⨄",
+["napprox"]="≉",
+["CloseCurlyQuote"]="’",
+["nacute"]="ń",
+["Chi"]="Χ",
+["subsub"]="⫕",
+["gescc"]="⪩",
+["gcirc"]="ĝ",
+["Lsh"]="↰",
+["sfr"]="𝔰",
+["circlearrowright"]="↻",
+["rcaron"]="ř",
+["ThinSpace"]=" ",
+["otilde"]="õ",
+["TRADE"]="™",
+["cudarrl"]="⤸",
["lat"]="⪫",
-["Rscr"]="ℛ",
-["Zcy"]="З",
-["bigwedge"]="⋀",
-["Prime"]="″",
+["nLeftrightarrow"]="⇎",
+["leqq"]="≦",
+["dagger"]="†",
+["dstrok"]="đ",
+["sacute"]="ś",
+["Amacr"]="Ā",
+["mumap"]="⊸",
+["models"]="⊧",
+["DiacriticalAcute"]="´",
+["minusd"]="∸",
+["hybull"]="⁃",
+["ijlig"]="ij",
+["fflig"]="ff",
+["NotGreaterEqual"]="≱",
+["Colon"]="∷",
+["boxV"]="║",
+["DotDot"]="⃜",
+["mdash"]="—",
+["hairsp"]=" ",
+["bcong"]="≌",
+["mcomma"]="⨩",
+["cirfnint"]="⨐",
+["TScy"]="Ц",
+["luruhar"]="⥦",
+["awconint"]="∳",
+["nsim"]="≁",
+["els"]="⪕",
+["imof"]="⊷",
+["lpar"]="(",
+["lozenge"]="◊",
+["oint"]="∮",
+["Umacr"]="Ū",
+["Sum"]="∑",
+["lopar"]="⦅",
+["racute"]="ŕ",
+["LessEqualGreater"]="⋚",
+["Wedge"]="⋀",
+["bbrktbrk"]="⎶",
+["RightDownTeeVector"]="⥝",
+["HumpDownHump"]="≎",
+["rarrb"]="⇥",
+["longleftrightarrow"]="⟷",
+["lnE"]="≨",
+["NotGreaterSlantEqual"]="⩾̸",
+["Nu"]="Ν",
+["NotNestedLessLess"]="⪡̸",
+["UpEquilibrium"]="⥮",
+["boxhD"]="╥",
+["el"]="⪙",
["boxDR"]="╔",
-["scnsim"]="⋩",
-["efDot"]="≒",
-["kopf"]="𝕜",
-["minusdu"]="⨪",
-["kappav"]="ϰ",
+["Gdot"]="Ġ",
+["itilde"]="ĩ",
+["isindot"]="⋵",
+["GreaterEqualLess"]="⋛",
+["Ll"]="⋘",
+["nrarrw"]="↝̸",
+["supnE"]="⫌",
+["epsiv"]="ϵ",
+["Element"]="∈",
+["gtreqless"]="⋛",
+["laemptyv"]="⦴",
+["nGt"]="≫⃒",
+["angsph"]="∢",
+["lE"]="≦",
+["kscr"]="𝓀",
+["Ocy"]="О",
+["LowerLeftArrow"]="↙",
+["dopf"]="𝕕",
+["iukcy"]="і",
+["atilde"]="ã",
+["DoubleRightArrow"]="⇒",
+["oslash"]="ø",
+["rarr"]="→",
+["intprod"]="⨼",
+["hookrightarrow"]="↪",
+["intcal"]="⊺",
+["infintie"]="⧝",
+["escr"]="ℯ",
+["iiota"]="℩",
+["curren"]="¤",
+["Bernoullis"]="ℬ",
+["angmsdah"]="⦯",
+["ShortRightArrow"]="→",
+["boxUR"]="╚",
+["ges"]="⩾",
+["DoubleDownArrow"]="⇓",
+["NotSquareSuperset"]="⊐̸",
+["lsim"]="≲",
+["bump"]="≎",
+["curlyeqsucc"]="⋟",
+["SHCHcy"]="Щ",
+["frac45"]="⅘",
+["qint"]="⨌",
+["Precedes"]="≺",
+["RightTeeArrow"]="↦",
+["frac16"]="⅙",
+["euro"]="€",
+["smtes"]="⪬︀",
+["eth"]="ð",
+["ldquo"]="“",
+["equivDD"]="⩸",
+["Oopf"]="𝕆",
["boxVh"]="╫",
-["Uuml"]="Ü",
-["centerdot"]="·",
-["isinsv"]="⋳",
-["isins"]="⋴",
-["bot"]="⊥",
-["integers"]="ℤ",
-["Racute"]="Ŕ",
-["ijlig"]="ij",
-["bernou"]="ℬ",
-["Cconint"]="∰",
-["doteq"]="≐",
-["hookleftarrow"]="↩",
-["epar"]="⋕",
-["harrw"]="↭",
-["dzigrarr"]="⟿",
-["Zscr"]="𝒵",
-["alpha"]="α",
-["times"]="×",
+["GreaterSlantEqual"]="⩾",
+["KJcy"]="Ќ",
["egrave"]="è",
-["UnionPlus"]="⊎",
-["Qscr"]="𝒬",
-["Omacr"]="Ō",
-["Zfr"]="ℨ",
-["gneq"]="⪈",
-["divonx"]="⋇",
-["gesdotol"]="⪄",
-["gvertneqq"]="≩︀",
-["geq"]="≥",
-["utri"]="▵",
-["ge"]="≥",
-["vArr"]="⇕",
-["Rrightarrow"]="⇛",
-["frac25"]="⅖",
-["LeftCeiling"]="⌈",
-["GreaterGreater"]="⪢",
-["LT"]="<",
-["Longrightarrow"]="⟹",
-["eqcolon"]="≕",
-["ofcir"]="⦿",
-["boxUl"]="╜",
-["Wscr"]="𝒲",
-["Sacute"]="Ś",
-["Union"]="⋃",
-["gg"]="≫",
-["DownArrowBar"]="⤓",
-["Escr"]="ℰ",
-["ecirc"]="ê",
-["Lmidot"]="Ŀ",
-["Wedge"]="⋀",
-["frown"]="⌢",
-["ring"]="˚",
-["dtdot"]="⋱",
-["Ccedil"]="Ç",
-["Conint"]="∯",
-["dscr"]="𝒹",
-["Map"]="⤅",
-["EmptyVerySmallSquare"]="▫",
-["backsim"]="∽",
-["angzarr"]="⍼",
-["dHar"]="⥥",
-["Mfr"]="𝔐",
-["cirE"]="⧃",
-["Popf"]="ℙ",
-["NestedGreaterGreater"]="≫",
-["ReverseElement"]="∋",
-["boxVr"]="╟",
+["NotGreaterLess"]="≹",
+["boxVl"]="╢",
+["MediumSpace"]=" ",
+["LongLeftArrow"]="⟵",
+["uarr"]="↑",
+["Ocirc"]="Ô",
+["Idot"]="İ",
+["bumpe"]="≏",
+["nwArr"]="⇖",
+["NegativeThinSpace"]="​",
+["coprod"]="∐",
+["VerticalBar"]="∣",
+["sccue"]="≽",
+["boxDl"]="╖",
+["NotSubset"]="⊂⃒",
+["Edot"]="Ė",
+["scy"]="с",
+["Cup"]="⋓",
+["centerdot"]="·",
+["nsimeq"]="≄",
+["DownLeftRightVector"]="⥐",
}
diff --git a/macros/luatex/generic/luaxml/luaxml-parse-query.lua b/macros/luatex/generic/luaxml/luaxml-parse-query.lua
index 7931fa193f..17ddeb82c5 100644
--- a/macros/luatex/generic/luaxml/luaxml-parse-query.lua
+++ b/macros/luatex/generic/luaxml/luaxml-parse-query.lua
@@ -12,11 +12,19 @@ do
end
local alphanum = R("az", "AZ", "09")
local num = R("09")
+local quotes = S("'\"") ^ 1
local white = S(" \t\n") ^ 0
--- this is a deviation from the upstream, we allow ":" in the tag name, because
+-- this is a deviation from the upstream, we allow "|" in the tag name, because
-- luaxml doesn't support XML namespaces and elements must be queried using
--- dom:query_selector("namespace:element")
+-- dom:query_selector("namespace|element")
local word = (alphanum + S("_-") + S("|")) ^ 1
+
+local combinators = S(">~+")
+
+local attr_name = (alphanum + S("_-")) ^ 1
+local attr_function = S("~|^$*") ^ 0
+
+local attr_content = C((P(1) - quotes) ^ 1)
local mark
mark = function(name)
return function(...)
@@ -34,8 +42,13 @@ parse_query = function(query)
local any = P("*") / mark("any")
local nth = P(":nth-child(") * C(num ^ 1) * ")" / mark("nth-child")
local first = P(":first-child") / mark("first-child")
+ local first_of_type = P(":first-of-type") / mark("first-of-type")
+ local last = P(":last-child") / mark("last-child")
+ local last_of_type = P(":last-of-type") / mark("last-of-type")
local attr = P("[") * C(word) * P("]") / mark("attr")
- local selector = Ct((any + nth + first + tag + cls + id + attr) ^ 1)
+ local attr_value = P("[") * C(attr_name ) * C(attr_function)* P("=") * quotes * attr_content * quotes * P("]") / mark("attr_value")
+ local combinator = C(combinators) / mark("combinator")
+ local selector = Ct((any + nth + first + first_of_type + last + last_of_type + tag + cls + id + attr + attr_value + combinator) ^ 1)
local pq = Ct(selector * (white * selector) ^ 0)
local pqs = Ct(pq * (white * P(",") * white * pq) ^ 0)
pqs = pqs * (white * -1)
diff --git a/macros/luatex/generic/luaxml/luaxml-transform.lua b/macros/luatex/generic/luaxml/luaxml-transform.lua
new file mode 100644
index 0000000000..1bf5077a38
--- /dev/null
+++ b/macros/luatex/generic/luaxml/luaxml-transform.lua
@@ -0,0 +1,161 @@
+-- adapted code from https://github.com/michal-h21/luaxml-mathml
+--
+local domobject = require "luaxml-domobject"
+local cssquery = require "luaxml-cssquery"
+-- initialize CSS selector object
+local css = cssquery()
+
+-- we need to define different actions for XML elements. The default action is
+-- to just process child elements and return the result
+local function default_action(element)
+ return process_children(element)
+end
+
+-- convert Unicode characters to TeX sequences
+local unicodes = {
+ [35] = "\\#",
+ [36] = "\\$",
+ [37] = "\\%",
+ [38] = "\\&",
+ [60] = "\\textless{}",
+ [62] = "\\textgreater{}",
+ [92] = "\\textbackslash{}",
+ [94] = "\\^",
+ [95] = "\\_",
+ [123] = "\\{",
+ [125] = "\\}"
+}
+
+local function process_text(text, parameters)
+ local parameters = parameters or {}
+ -- spaces are collapsed by default. set verbatim=true to disable it.
+ local verbatim = parameters.verbatim
+ local t = {}
+ -- process all Unicode characters and find if they should be replaced
+ for _, char in utf8.codes(text) do
+ -- construct new string with replacements or original char
+ t[#t+1] = unicodes[char] or utf8.char(char)
+ end
+ local text = table.concat(t)
+ if not verbatim then
+ text = text:gsub("(%s%s+)", function(a) return a:sub(1,1) end)
+ end
+ return text
+end
+
+-- use template string to place the processed children
+local function simple_content(s,parameters)
+ return function(element)
+ local content = process_children(element,parameters)
+ -- process attrubutes
+ -- attribute should be marked as @{name}
+ local expanded = s:gsub("@{(.-)}", function(name)
+ return process_text(element:get_attribute(name) or "")
+ end)
+ --
+ return expanded:gsub("%%s", function(a) return content end)
+ end
+end
+
+local function get_child_element(element, count)
+ -- return specified child element
+ local i = 0
+ for _, el in ipairs(element:get_children()) do
+ -- count elements
+ if el:is_element() then
+ -- return the desired numbered element
+ i = i + 1
+ if i == count then return el end
+ end
+ end
+end
+
+-- actions for particular elements
+local actions = {
+
+}
+
+-- add more complicated action
+local function add_custom_action(selector, fn)
+ css:add_selector(selector,fn)
+end
+
+-- normal actions
+local function add_action(selector, template, parameters)
+ css:add_selector(selector, simple_content(template, parameters))
+end
+
+
+function process_children(element, parameters)
+ -- accumulate text from children elements
+ local t = {}
+ -- sometimes we may get text node
+ if type(element) ~= "table" then return element end
+ for i, elem in ipairs(element:get_children()) do
+ if elem:is_text() then
+ -- concat text
+ t[#t+1] = process_text(elem:get_text(), parameters)
+ elseif elem:is_element() then
+ -- recursivelly process child elements
+ t[#t+1] = process_tree(elem)
+ end
+ end
+ return table.concat(t)
+end
+
+local function match_css(element)
+ local selectors = css:match_querylist(element)
+ if #selectors == 0 then return nil end
+ -- return function with the highest specificity
+ return selectors[1].func
+end
+
+function process_tree(element)
+ -- find specific action for the element, or use the default action
+ local element_name = element:get_element_name()
+ local action = match_css(element) or default_action
+ return action(element)
+end
+
+function parse_xml(content)
+ -- parse XML string and process it
+ local dom = domobject.parse(content)
+ -- start processing of DOM from the root element
+ -- return string with TeX content
+ return process_tree(dom:root_node())
+end
+
+
+local function load_file(filename)
+ local f = io.open(filename, "r")
+ local content = f:read("*all")
+ f:close()
+ return parse_xml(content)
+end
+
+function process_dom(dom)
+ return process_tree(dom:root_node())
+end
+
+
+function print_tex(content)
+ -- we need to replace "\n" characters with calls to tex.sprint
+ for s in content:gmatch("([^\n]*)") do
+ tex.sprint(s)
+ end
+end
+
+
+local M = {
+ parse_xml = parse_xml,
+ process_children = process_children,
+ print_tex = print_tex,
+ add_action = add_action,
+ add_custom_action = add_custom_action,
+ simple_content = simple_content,
+ load_file = load_file,
+ process_dom = process_dom
+}
+
+
+return M
diff --git a/macros/luatex/generic/luaxml/luaxml.pdf b/macros/luatex/generic/luaxml/luaxml.pdf
index 86aa928593..405a7b311b 100644
--- a/macros/luatex/generic/luaxml/luaxml.pdf
+++ b/macros/luatex/generic/luaxml/luaxml.pdf
Binary files differ
diff --git a/macros/luatex/generic/luaxml/luaxml.tex b/macros/luatex/generic/luaxml/luaxml.tex
index d641b91aad..8857458a0f 100644
--- a/macros/luatex/generic/luaxml/luaxml.tex
+++ b/macros/luatex/generic/luaxml/luaxml.tex
@@ -7,7 +7,7 @@
\usepackage{framed}
% Version is defined in the makefile, use default values when compiled directly
\ifdefined\version\else
-\def\version{v0.1m}
+\def\version{v0.1n}
\let\gitdate\date
\fi
\newcommand\modulename[1]{\subsection{#1}\label{sec:#1}}
@@ -170,6 +170,56 @@ end
It supports also |XML| namespaces, using \verb_namespace|element_ syntax.
+\subsubsection{Supported CSS selectors}
+
+The \verb|query_selector| method supports following CSS selectors:
+
+\begin{description}
+ \item[Universal selector -- \texttt{*}] -- select any element.
+ \item[Type selector -- \texttt{elementname}] -- Selects all elements that have the given node name.
+ \item[Class selector -- \texttt{.classname}] -- Selects all elements that have the given class attribute.
+ \item[ID selector -- \texttt{\#idname}] -- Selects an element based on the value of its id attribute.
+ \item[Attribute selector -- \texttt{[attrname='value']}] -- Selects all elements that have the given attribute.
+ It can have the following variants:
+ \texttt{[attrname]} -- elements that contain given attribute,
+ \texttt{[attr\string|=value]} -- attribute text is exactly the value, with optional hyphen at the end,
+ \verb|[attr~=value]| -- attribute name of attr whose value is a whitespace-separated list of words, one of which is exactly value,
+ \verb|[attr^=value]| -- attribute text starts with value,
+ \texttt{[attr\$=value]} -- attribute text ends with value.
+ \item[Grouping selector -- \texttt{,}] -- This is a grouping method, it selects all the matching nodes.
+\end{description}
+
+\bigskip
+\noindent It is also possible to combine selectors using \textit{combinators} to make more specific searches. Supported combinators:
+
+\begin{description}
+ \item[Descendant combinator -- \texttt{A B}] -- match all B elements that are inside A elements.
+ \item[Child combinator -- \verb|A > B|] -- match B elements that are nested directly inside a A element.
+ \item[General sibling combinator -- \texttt{A \char`\~ ~B}] -- the second element
+ follows the first (though not necessarily immediately), and both share the
+ same parent.
+ \item[Adjacent sibling combinator -- \texttt{A + B}] -- the second element directly follows the first, and both share the same parent.
+\end{description}
+
+\bigskip
+\noindent LuaXML also supports some CSS pseudo-classes. A pseudo-class is a
+keyword added to a selector that specifies a special state of the selected
+element. The following are supported:
+
+\begin{description}
+ \item[:first-child] -- matches an element that is the first of its siblings.
+ \item[:first-of-type] -- matches an element that is the first of its siblings,
+ and also matches a certain type selector.
+ \item[:last-child] -- matches an element that is the last of its siblings.
+ \item[:last-of-type] -- matches an element that is the last of its siblings,
+ and also matches a certain type selector.
+ \item[:nth-child] -- matches elements based on their position in a group of siblings.
+ It can be used like this: \verb|li:nth-child(2)|.
+\end{description}
+
+
+
+
\subsection{Element traversing}
\subsubsection{The \texttt{DOM\_Object:traverse\_elements} method}
@@ -332,10 +382,19 @@ More complete example may be found in the \texttt{examples} directory in the
\texttt{LuaXML} source code
repository\footnote{\url{https://github.com/michal-h21/LuaXML/blob/master/examples/xmltotex.lua}}.
+\section{The \texttt{luaxml-transform} library}
+
+This library is still a bit experimental. It enables XML transformation based
+on CSS selector templates. It is better to use XSLT in general, but it may
+succeed for simpler tasks\footnote{See this example: \url{https://tex.stackexchange.com/a/574004/2891}}.
+
+
+
\section{The API documentation}
\input{doc/api.tex}
+
\section{Low-level functions usage}
% The processing is done with several handlers, their usage will be shown in the
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index 99499acaea..a9b5cd6767 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -16,7 +16,6 @@ $mirrors = {
'China' => {
'https://mirror.bjtu.edu.cn/CTAN/' => 1,
'https://mirrors.aliyun.com/CTAN/' => 1,
- 'https://mirrors.bfsu.edu.cn/CTAN/' => 1,
'https://mirrors.cqu.edu.cn/CTAN/' => 1,
'https://mirrors.hit.edu.cn/CTAN/' => 1,
'https://mirrors.nju.edu.cn/CTAN/' => 1,
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 8a221038fa..0331e6e12e 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,7 +26,7 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2020
-depend revision/57166
+depend revision/57173
name 00texlive.image
category TLCore
@@ -4305,7 +4305,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 57156
+revision 57168
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
@@ -118771,7 +118771,7 @@ catalogue-topics font-doc
name fontools
category Package
-revision 55997
+revision 57171
shortdesc Tools to simplify using fonts (especially TT/OTF ones)
longdesc This package provides tools to simplify using OpenType fonts
longdesc with LaTeX. By far the most important program in this bundle is
@@ -118785,10 +118785,10 @@ longdesc - re-encode .afm files, ot2kpx - extract kerning pairs from
longdesc OpenType fonts, splitttc - split an OpenType Collection file
longdesc (ttc or otc) into individual fonts.
depend fontools.ARCH
-containersize 50204
-containerchecksum 6f6951661291e667983551fbb7ffbac6e25e22aadf94f53de6960855a97a5e2b4fdfab50ceb893d82ec0b459415a95c25310cf1038be31809dad965eb9f43cff
-doccontainersize 125148
-doccontainerchecksum de10b5508557a0a3dae7ddabbc3326c106d878492f6cd305600b20498bcfbd244a793604ec42ca44b6a51632512347ba60f70908bd669e7308b81504e96bb737
+containersize 50068
+containerchecksum e7ad742fdd462f7281d1af2964fd09de98cd7d4014442f63963f3fd6bad8c63e1f9e8a7209b8c372090da7a8494ef6dc6e23f745ce032bdb6d27d64e81ec1a6a
+doccontainersize 125544
+doccontainerchecksum b36148f545f10de55e52b695369b669465dfa98fabab8d75d0650a58984aea616da753c76747fb2ea31bff630764bc8182a48de51c0f038b84de01361354fd05
docfiles size=54
texmf-dist/doc/man/man1/afm2afm.1
texmf-dist/doc/man/man1/afm2afm.man1.pdf
@@ -118799,7 +118799,7 @@ docfiles size=54
texmf-dist/doc/support/fontools/GPLv2.txt
texmf-dist/doc/support/fontools/README details="Bundle readme"
texmf-dist/doc/support/fontools/splitttc
-runfiles size=63
+runfiles size=62
texmf-dist/fonts/enc/dvips/fontools/fontools_lgr.enc
texmf-dist/fonts/enc/dvips/fontools/fontools_ly1.enc
texmf-dist/fonts/enc/dvips/fontools/fontools_oml.enc
@@ -188637,21 +188637,21 @@ catalogue-version 0.1
name menukeys
category Package
-revision 56822
+revision 57172
shortdesc Format menu sequences, paths and keystrokes from lists
relocated 1
longdesc This package is designed to format menu sequences, paths and
longdesc keyboard shortcuts automatically. There are several predefined
longdesc styles and one can define one's own styles in a flexible way.
-containersize 5988
-containerchecksum 760939608e806d0660b1a5c27d0e012c2a54c7f6304d40248f1b56ab39134e0f6e7d3032ca361d21a958e57670772a94f365036a7705d6bbc6adcba45e7980c1
-doccontainersize 580224
-doccontainerchecksum 7ac7a52d62cfe2ccf90b591cb5bffb3b722e5cc126a41c363368a273042af4fa66146b2136761cf137783944166ed7b85df19084269e89f1cbe58a06e97d7856
-docfiles size=144
+containersize 6072
+containerchecksum 4e046853dcf7daa04a1375e19f35219b65177479807420d8bdb2e4449324b9fd38a17535e170b46a64de7a975fd0ca39c3150014ccfcc80f544f57475483727e
+doccontainersize 573880
+doccontainerchecksum 9ee80a77fabaabb1b29826e2d54dfcacdff7b758bcda83559d694a76cee579d4815e346c314d224001844c64cad40f04980d7dc09a45918a664f8cf76723b91d
+docfiles size=143
RELOC/doc/latex/menukeys/README details="Readme"
RELOC/doc/latex/menukeys/menukeys.pdf details="Package documentation"
-srccontainersize 18352
-srccontainerchecksum 9c0ff5611081762498f545635f6894de478112780bcf5e558b3f0ace04556225c85540a0b467510151e4c019dd4b8a37351fcacfe6f2b6e17e86b0eb903f229f
+srccontainersize 18496
+srccontainerchecksum e4c6817611e5dd8f33e0e9f5771ae6f7c04b76d49002e6fcc466090cf5423ad4335d2d5d144817c6a03518f338256ca383e0b0df88947087c98f60f07f3dbe6e
srcfiles size=21
RELOC/source/latex/menukeys/menukeys.dtx
RELOC/source/latex/menukeys/menukeys.ins
@@ -188662,7 +188662,7 @@ catalogue-contact-repository https://github.com/tweh/menukeys
catalogue-ctan /macros/latex/contrib/menukeys
catalogue-license lppl1.3c
catalogue-topics doc-supp
-catalogue-version 1.6
+catalogue-version 1.6.1
name mercatormap
category Package
@@ -206518,17 +206518,17 @@ catalogue-version 2.0
name newcomputermodern
category Package
-revision 57138
+revision 57170
shortdesc Computer Modern fonts including matching non-latin alphabets
relocated 1
longdesc This is a new assembly of Computer Modern fonts plus glyphs for
longdesc non Latin alphabets which are considered compatible in style to
longdesc CM fonts. In addition to the Regular weight of Computer Modern,
longdesc it provides a Book weight for heavier printing.
-containersize 4535036
-containerchecksum 9f6a3a0a6f32159f163b5844003fb46fa1032449f30fe43a2617bb9fb170bdd34fe7f93aa8b19810a99de6b088219bfa1ccb7805a6aed457682695329fe6428b
-doccontainersize 1662560
-doccontainerchecksum b0d735b73680cf94efdaab1fdd4040b51849c368e67f252a8e1e1745f5c2817037ef6b07705d7b0c2ced6294542d2ca59d323a377e28f2ec11b18afd9181cc6c
+containersize 4539132
+containerchecksum 7c8304136bf0bd2bf09f0879737aaa541db07b7cc5b83ea3c5ee60901617cd9ff03a94aa90cf2018b157b7cea241eeac70f8844f315cfd6c900a4ee86d4a322b
+doccontainersize 1662584
+doccontainerchecksum 3a7b4aca338c8140540573c0b6df986fbc933179f6faa8097204f989932d2f42fbcbc98e77306b7345f20c09398823f3ae1afb6a81f6c2cbcae1a3938ad0b1e2
docfiles size=426
RELOC/doc/fonts/newcomputermodern/README details="Readme"
RELOC/doc/fonts/newcomputermodern/newcm-unimath-symbols.pdf
@@ -206565,7 +206565,7 @@ runfiles size=3186
catalogue-ctan /fonts/newcomputermodern
catalogue-license gfl
catalogue-topics font font-cm font-body font-proportional font-mono font-serif font-sans font-multilingual font-greek font-cyrillic font-hebrew font-maths font-otf cherokee
-catalogue-version 2.32
+catalogue-version 2.33
name newenviron
category Package
@@ -256670,7 +256670,7 @@ catalogue-topics graphics
name rmathbr
category Package
-revision 57114
+revision 57173
shortdesc Repeating of math operator at the broken line and the new line in inline equations
relocated 1
longdesc Repeating of math operators at the broken line and the new line
@@ -256680,16 +256680,16 @@ longdesc such an option. This package solves the problem by extending
longdesc ideas described in M. I. Grinchuk "TeX and Russian Traditions
longdesc of Typesetting", TUGboat 17(4) (1996) 385 and supports most of
longdesc LaTeX mathematical packages. See the documentation for details.
-containersize 8364
-containerchecksum 87d19fd9fa46606bfa86119ebd2b3383f73c191891343309a2ccfccecd1aae84ddf04ed918bdb328ea77bdf2f02536d3d0270d3df3cf1b1b5107397de9303a92
-doccontainersize 248896
-doccontainerchecksum 91ff475a1890307df2d3988ea8c192b72ef2843ef0dea98853650eb61a32362396731edf9a40b1fa1b64a27063762bb75f9a23b6a429606a88eb8a18f6e71485
-docfiles size=71
+containersize 8656
+containerchecksum d1394e40203bc7a0adffd26587870ad4aca0faaff6226047cedd5ece5e55e6a99e56829a38ce40b6736c1f9a03b9bc4b337a0e4f9eadf0617ddc385a60372176
+doccontainersize 252508
+doccontainerchecksum e7c8d4f198399ac35e51a0d1c2c6ec420c746768de362a8179c0208325a45b11a8ba6445c2b7a433e7689e677505e3baa4b87d48a749bea5f3243d10f43deb83
+docfiles size=72
RELOC/doc/latex/rmathbr/README details="Readme"
RELOC/doc/latex/rmathbr/rmathbr.pdf details="Package documentation"
-srccontainersize 13896
-srccontainerchecksum faf22c4ccbf0296ad65405d4d5b74a2f2c3d5209dd7ceaed1b21138ee100fc53cddb42b87e87249ae13d8456d08ba7bb56d7b11f22b34f166d82adc3087f093c
-srcfiles size=22
+srccontainersize 14392
+srccontainerchecksum 44e4859933c2a5f664feb1bd40ce1e51da845fed56b8594d3fcbbc814654c80b18d20760db3c2690fbfa74233523e4e8492471415154942cd2666cc52837a98f
+srcfiles size=23
RELOC/source/latex/rmathbr/rmathbr.dtx
RELOC/source/latex/rmathbr/rmathbr.ins
runfiles size=15
@@ -256697,7 +256697,7 @@ runfiles size=15
catalogue-ctan /macros/latex/contrib/rmathbr
catalogue-license lppl1.3
catalogue-topics maths
-catalogue-version 1.1
+catalogue-version 1.1.1
name rmpage
category Package
@@ -262623,7 +262623,7 @@ containerchecksum 44bc102582ef5f6e0499efde6d3190b86988def41aa062a6239075b9371f6c
name scholax
category Package
-revision 57042
+revision 57169
shortdesc Extension of TeXGyreSchola (New Century Schoolbook) with math support
relocated 1
longdesc This package contains an extension of TeXGyreSchola with
@@ -262633,15 +262633,15 @@ longdesc slanted and bold slanted faces. Math support is provided by one
longdesc of two options to newtxmath, one of which uses an adaptation of
longdesc the fourier math Greek letters.
execute addMap ScholaX.map
-containersize 1883144
-containerchecksum 19746c877cbc0d374c2621fd246a65ef39467d9127cf06b284c3050230daca651d1801a511c5a8c5bb88d645dfad089cd58ca7721aea0acff7f4ef6982b61094
-doccontainersize 201472
-doccontainerchecksum e65d983131934ebfb25ff8516cba5e131f78216f7216f1956815243632ac4f4b7530f5db31f2b14c78ef9586c122fd28d3ee38990c76a668131184c1b4a34339
+containersize 1883320
+containerchecksum 80fc39018480405e77b1208dae7046063c3ce24c1d0ced737b782f1f67c2d2f011b8475e8a84ae391cc3f64fd7e5aad5c578d7f21cfa03c239e9586576ff7a88
+doccontainersize 201476
+doccontainerchecksum 754e84ab1fccd3d7e743aa494a13e1072456bf654095695404c03976e3decc8c51028e40235bb4b1ce81cef1d86a7b390d8ae4d79296d73194cf0037f9543fe0
docfiles size=99
RELOC/doc/fonts/scholax/README details="Readme"
RELOC/doc/fonts/scholax/scholax-doc.pdf details="Package documentation"
RELOC/doc/fonts/scholax/scholax-doc.tex
-runfiles size=1941
+runfiles size=1914
RELOC/fonts/afm/public/scholax/NCXFourierBMI.afm
RELOC/fonts/afm/public/scholax/NCXFourierBMR.afm
RELOC/fonts/afm/public/scholax/NCXFourierMI.afm
@@ -262662,39 +262662,39 @@ runfiles size=1941
RELOC/fonts/enc/dvips/scholax/zcs-ot1-th-tlf.enc
RELOC/fonts/enc/dvips/scholax/zcs-texnansi-th-osf.enc
RELOC/fonts/enc/dvips/scholax/zcs-texnansi-th-tlf.enc
+ RELOC/fonts/enc/dvips/scholax/zcs_2p3dps.enc
RELOC/fonts/enc/dvips/scholax/zcs_2ulndi.enc
- RELOC/fonts/enc/dvips/scholax/zcs_4dtzhu.enc
- RELOC/fonts/enc/dvips/scholax/zcs_6ff7e3.enc
- RELOC/fonts/enc/dvips/scholax/zcs_6ln7pl.enc
- RELOC/fonts/enc/dvips/scholax/zcs_6nir6i.enc
- RELOC/fonts/enc/dvips/scholax/zcs_7awbtq.enc
- RELOC/fonts/enc/dvips/scholax/zcs_7e5ds2.enc
+ RELOC/fonts/enc/dvips/scholax/zcs_2zpiql.enc
+ RELOC/fonts/enc/dvips/scholax/zcs_3uk2yo.enc
+ RELOC/fonts/enc/dvips/scholax/zcs_72zhkj.enc
RELOC/fonts/enc/dvips/scholax/zcs_7xuij4.enc
RELOC/fonts/enc/dvips/scholax/zcs_aisocu.enc
- RELOC/fonts/enc/dvips/scholax/zcs_b3lkzu.enc
RELOC/fonts/enc/dvips/scholax/zcs_c3rnvk.enc
RELOC/fonts/enc/dvips/scholax/zcs_c5ugpk.enc
- RELOC/fonts/enc/dvips/scholax/zcs_cpzha2.enc
+ RELOC/fonts/enc/dvips/scholax/zcs_czuex4.enc
+ RELOC/fonts/enc/dvips/scholax/zcs_dcwile.enc
RELOC/fonts/enc/dvips/scholax/zcs_dodlyj.enc
- RELOC/fonts/enc/dvips/scholax/zcs_dstn3c.enc
- RELOC/fonts/enc/dvips/scholax/zcs_elm6ky.enc
+ RELOC/fonts/enc/dvips/scholax/zcs_fn6vum.enc
RELOC/fonts/enc/dvips/scholax/zcs_heobe3.enc
- RELOC/fonts/enc/dvips/scholax/zcs_ibl2ck.enc
RELOC/fonts/enc/dvips/scholax/zcs_ioc2dx.enc
RELOC/fonts/enc/dvips/scholax/zcs_jkq3qs.enc
- RELOC/fonts/enc/dvips/scholax/zcs_kqv4hm.enc
+ RELOC/fonts/enc/dvips/scholax/zcs_k56gxg.enc
+ RELOC/fonts/enc/dvips/scholax/zcs_lewktp.enc
RELOC/fonts/enc/dvips/scholax/zcs_litts3.enc
RELOC/fonts/enc/dvips/scholax/zcs_mett7y.enc
RELOC/fonts/enc/dvips/scholax/zcs_mnnbkz.enc
- RELOC/fonts/enc/dvips/scholax/zcs_oun2tw.enc
RELOC/fonts/enc/dvips/scholax/zcs_qfh2v7.enc
RELOC/fonts/enc/dvips/scholax/zcs_ra2vxf.enc
+ RELOC/fonts/enc/dvips/scholax/zcs_t6txtr.enc
RELOC/fonts/enc/dvips/scholax/zcs_tpfstq.enc
+ RELOC/fonts/enc/dvips/scholax/zcs_ujimmk.enc
+ RELOC/fonts/enc/dvips/scholax/zcs_wg6py3.enc
RELOC/fonts/enc/dvips/scholax/zcs_wlo5nq.enc
RELOC/fonts/enc/dvips/scholax/zcs_wylu46.enc
RELOC/fonts/enc/dvips/scholax/zcs_x5uxyb.enc
+ RELOC/fonts/enc/dvips/scholax/zcs_xrqdd6.enc
+ RELOC/fonts/enc/dvips/scholax/zcs_xzuu25.enc
RELOC/fonts/enc/dvips/scholax/zcs_y6waxr.enc
- RELOC/fonts/enc/dvips/scholax/zcs_ygq5eo.enc
RELOC/fonts/enc/dvips/scholax/zcs_zgzte3.enc
RELOC/fonts/map/dvips/scholax/ScholaX.map
RELOC/fonts/opentype/public/scholax/TeXGyreScholaX-Bold.otf
@@ -263264,7 +263264,7 @@ runfiles size=1941
catalogue-ctan /fonts/scholax
catalogue-license lppl
catalogue-topics font font-body font-maths font-serif font-proportional font-otf font-type1 font-supp font-t1enc
-catalogue-version 1.027
+catalogue-version 1.028
name schooldocs
category Package
@@ -292127,7 +292127,7 @@ docfiles size=368
name texlive-scripts
category TLCore
-revision 57164
+revision 57168
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.
@@ -292135,10 +292135,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 132144
-containerchecksum fa9817b219180e218d0619a3cfd846362e8de403954fe0875b247c585332d2dd253ecb2ebb8f21a6333358f0ab2dd88f4bbf8c52b4494b29db6d2566d068d953
+containersize 132124
+containerchecksum 8978720065e83c81365d499a6423a06200c94108eddea7a7e92ae244a7ecd3d7d869a69d81d4f0bac1191e3f30c905c6890b995f818fbafca24c799bb88772fe
doccontainersize 218656
-doccontainerchecksum aeda52bbc37b6d380621cc158897d5f61397df0e52701f7017daf214cf5bf7e742ab56e96abef48f5df310790720ce0bd17c4862c2ae2c155fcab222c82d63b3
+doccontainerchecksum d295787fd77e6b1ed6bd30114760ad196d636b826a148711be39be0ce0c81f389066bcc10f05d7befe10e54c286eadbb4cca5b4b9d10f41e13f2b590cdbc5833
docfiles size=141
texmf-dist/doc/man/man1/fmtutil-sys.1
texmf-dist/doc/man/man1/fmtutil-sys.man1.pdf
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index bc3665c462..a7a12b0da6 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-f66fcd638d920d718751f4bca35d52c0 texlive.tlpdb
+33c0201cc987dad28fc41ff7b717893e texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 19a98dd9b4..88f6f878c4 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-0989a71a893abfc7e285903c5db11dd2127a26fa27ad16fd808bb65f6a9e943257ecaa6079edf9159269224d1a6e2c956ad6c3b5d3977c35cd95043d39a642c7 texlive.tlpdb
+238de3b64e1d5582755fe749476d61ccde25124ad59b0c242968736146f0ee16d7b2a386d152b2bad61a5dc66640bfed894cb49645bef19b2502d51f5aff59d8 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 0e0a900516..bcc5170751 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-----
-iQEcBAEBCgAGBQJf3U/xAAoJEEzhh34ZQ4xwIMwH/j/cmqS8qpoKQXPAfvfA4fDe
-LPHn5pat7MY5O7FunzQtV0IshBvM4c/IG6tTIvcM72C6zsAHHuHxumsZi5eMy+eN
-UGCTawV2Gv40dyUtkbsFOOuEo5RhLNVDU3/dtsR4leSfkYh+7nSOEnOZ/KtoNiZU
-G8xzlTo79Nn7ABTvseXukJx325EnqcfuWllKFq9ur+4Kx8h8HJzh7+6Khocqnbqo
-8We+py8sj/a5dLTgJnh+CahGTTEWLDw/DoK7jBoo8Z806w4jZ9JLkv00oVgqWu4B
-A6vwpO99xz8FX0QanNJwKeHorB8cMMZwZ7TMLjA/LoVYChExR6yX847B1koPeQQ=
-=dpRF
+iQEcBAEBCgAGBQJf3qGJAAoJEEzhh34ZQ4xwOSwH/2FqZzb/GZrmavcfl5UZPz0T
+bDQPus5iDlHG5CjlBhQpQ+QHgbl7tPuXRYMwGyXxNh0s6TiM1xStTmA/vbswUl9t
+bCKsBS9TjWJULSZijTxMhKaEaNKtUPNdnJYvB/7aU7b9vcTJvV+PF039rX8oP8d5
+nOeN0qu2Utq+ZZmu7F0++Sbc2bTvtOGr2SvnWjf8HKCC0q6got4+e2QCThLh393k
+oZpQmsJdhWhugJIjWCGcuF2383t2rKb4X6TYcR0q11I/VXDLM5ex7bXdRHWbwNai
+KsGuHoN/LF28zaElKfugzyH3il8MmxmEZURDzzPfRtOcE8vTNf9dgtdl5v7DAtE=
+=Omsz
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index c18c7a24ec..94cc580274 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/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index 2b399b6841..e1fe3de6c8 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=1608412469
+date=1608498856
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=49110e4d49edbedb7edf1c448fee424b
+lstdigest=2f1e27fb5536d286f51b1d029f914ae7
numpkg=4014
relstate=next
-version=7658
+version=7659
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: MoAcWqWKi1jjXjDrdxuMtMSIQJ9Xuvas2j97t933y91pQBHLQ1zx3d0oefeR+OM+7FRWvzEvQE2K9Hs5T4lPqFgCM337M8+C+jCNF67ue80Cy6TolgTbYikRRwe5ocAooyGOY234wLGICiKYBN33zMSy5+XJdlXscdn7mp13UC+7Nli2SlWFcnSpgJh17MCILFsGjCJFyR/b8totZUIpKh8HUAIdAq5xMnn0XStHHXmEyFID8GWlzW2aOlWDi5g9TJMr7tig/wMiGapHa/EF/5m7TQaaWhA6eCFuH/UXiauf1owuU+RG+eZfa2abggTaTiE8MFprhqK14UrSTHC+gQ==
+;;;; signature/miktex: jO2iVYHus3zOEmnQkyJ9nUHjVrv5E6ziJMBCZmsEPhed/7yJAjhb6LaUZWwDS6LRtaOHHdiStUCYaZFrEbs0z3E8ibihkvEzODKLRQSiUbZ6gtu0XTkmRMqJ+6TiCPB8WsEDEk+ZhU5JbKARPNtT0dHdsjPuMIFp29KcpKtKXkGecuxf8LSYZ2Yo5XN4mol+9ctp1X9dz8edtbZEDhiHXDpJ36fkhY/4wWB7owNtWRrI1ud3e6Y1WtGCKBeGhyeUc0YM5giqC2xrTqPWnstEv50NlZ1/3e5gFWPcRmAcQcYNRTp5DHtBQjYJFXYH+vGOUNQMg772z8KnK348RHY54Q==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index 9aa63b5a4b..a71658c06b 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1608412278
+date=1608498670
lastupd=babel-japanese enotez 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
-lstdigest=60f617de2e147c68e62ab720a654a7d9
+lstdigest=7893bba0953eb92fe1cad53e2067ffb8
numpkg=4014
relstate=stable
-version=7658
+version=7659
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: pPfJzsyMuOYytPmafnFpCRnsK9H0/gupIojA0bYG/NaKRpmgfHrskDDbXWPKDevhuNIfECGJiSl3rC0XUZw6y0YVwKvgWx042L21sq5c8VJ/3s6hzt53VMMuSNm/DORjBqSDUJjE+GVYSCKmWW6dDJuWKEK9yOwZFa16mhjbhTmkRTDu8+5p5nuI7nEOkt+pNDqENhP4m/YSLUQpncz8W0LLizCkAKy5gh6KSxi8vTwSvsgWM22ufkFjPl8rVejfiEwJpArFs+N4XqHjDihX/RNjrcizsfWOq0C8rb+tRL0i32JDulk+95b0NPHDSpy66gAik+OEL6b9nrztwQQ5Ig==
+;;;; signature/miktex: AWDhQ+YMffHZgLIFP6vcwxe/2rXOsDtqbR0/WkLrv3+WSLbbjR2RXkug/hPO8patDyhpnQfsRBYz9AaXirMvR8SXSS4Pqq1YfMlvrxTejppuVw1NcqIbaI/Z/hqNu/UAP7WLdXN9WCoQ0XCjKPUf5vP7LDxZ5bgx1pft51Ufctm9S1lpQJm1lFsNANfoFiWAqyK4+Atb6Z15W8HyihsSe7uCic4IufD51Yc7U9me2JKrYnAxcCqSYT4BnNHMIH5BTJAjNnT4ib6im/pRmcMvC3CCZU3+Y7FJOH8kAf/L3YugwLllGKE6htiek05p+jG6Iy4g3r4wSh2ghinsLJhMZw==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/w32tex/ChangeLog b/systems/win32/w32tex/ChangeLog
index c353182ecc..fc32cf2fdd 100644
--- a/systems/win32/w32tex/ChangeLog
+++ b/systems/win32/w32tex/ChangeLog
@@ -1,5 +1,9 @@
W32TeX (x86 & x64) ChangeLog
+[2020/12/19]
+(01) context.tar.xz
+ ConTeXt version: 2020.12.18 18:28.
+
[2020/12/18]
(01) ltxpkgdocs.tar.xz
Update documents for packages.
diff --git a/timestamp b/timestamp
index be1fe8faf3..7d8849b331 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2020-12-20-02-02
+2020-12-21-02-02