texlive[57872] U branches/branch2020/Master/tlpkg/tlpsrc: sync with

commits+karl at tug.org commits+karl at tug.org
Wed Feb 24 19:00:44 CET 2021


Revision: 57872
          http://tug.org/svn/texlive?view=revision&revision=57872
Author:   karl
Date:     2021-02-24 19:00:42 +0100 (Wed, 24 Feb 2021)
Log Message:
-----------
sync with trunk 57871; starting pretest

Modified Paths:
--------------
    branches/branch2020/Build/source/texk/web2c/cwebboot.cin
    branches/branch2020/Build/source/texk/web2c/cwebdir/ChangeLog
    branches/branch2020/Build/source/texk/web2c/cwebdir/comm-w2c.ch
    branches/branch2020/Build/source/texk/web2c/cwebdir/common.w
    branches/branch2020/Build/source/texk/web2c/cwebdir/ctangle.w
    branches/branch2020/Build/source/texk/web2c/cwebdir/ctwill-mini.ch
    branches/branch2020/Build/source/texk/web2c/cwebdir/cweave.w
    branches/branch2020/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch
    branches/branch2020/Build/source/texk/web2c/cwebdir/cwebman.tex
    branches/branch2020/Build/source/texk/web2c/etexdir/ChangeLog
    branches/branch2020/Build/source/texk/web2c/etexdir/etex.ch
    branches/branch2020/Build/source/texk/web2c/luatexdir/luatex_svnversion.h
    branches/branch2020/Build/source/texk/web2c/pdftexdir/ChangeLog
    branches/branch2020/Build/source/texk/web2c/pdftexdir/pdftex.web
    branches/branch2020/Build/source/texk/web2c/xetexdir/ChangeLog
    branches/branch2020/Build/source/texk/web2c/xetexdir/xetex.web
    branches/branch2020/Master/doc.html
    branches/branch2020/Master/texmf-dist/bibtex/bst/udesoftec/udesoftec.bst
    branches/branch2020/Master/texmf-dist/doc/latex/babel/README.md
    branches/branch2020/Master/texmf-dist/doc/latex/babel/babel.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/csquotes/csquotes.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/csquotes/csquotes.tex
    branches/branch2020/Master/texmf-dist/doc/latex/easybook/chapter1.tex
    branches/branch2020/Master/texmf-dist/doc/latex/easybook/chapter3.tex
    branches/branch2020/Master/texmf-dist/doc/latex/easybook/easybook-demo.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/easybook/easybook-demo.tex
    branches/branch2020/Master/texmf-dist/doc/latex/easybook/easybook.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/easybook/easybook.tex
    branches/branch2020/Master/texmf-dist/doc/latex/easybook/refs.bib
    branches/branch2020/Master/texmf-dist/doc/latex/microtype/README.md
    branches/branch2020/Master/texmf-dist/doc/latex/microtype/microtype.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/microtype/test-microtype.tex
    branches/branch2020/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
    branches/branch2020/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/overlays/ChangeLog
    branches/branch2020/Master/texmf-dist/doc/latex/overlays/README
    branches/branch2020/Master/texmf-dist/doc/latex/overlays/overlays.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/overlays/overlays.tex
    branches/branch2020/Master/texmf-dist/doc/latex/overlays/sample.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/overlays/sample.tex
    branches/branch2020/Master/texmf-dist/doc/latex/spath3/calligraphy.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/spath3/knots.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/spath3/spath3.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/spath3/spath3.tex
    branches/branch2020/Master/texmf-dist/doc/latex/spath3/spath3_code.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/README.md
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-alt-actualtext-luatex.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-alt-actualtext.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-attribute.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-attribute.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-formula-problem-luatex.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-formula-problem.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-mc-manual-para-split.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-mc-manual-para-split.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-patch-list-luatex.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-patch-list.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-patch-sectioning-koma-luatex.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-patch-sectioning-koma.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-patch-sectioning-koma.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-softhyphen.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-softhyphen.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-spaceglyph-listings.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-spaceglyph-listings.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-structure-luatex.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-structure.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-tagpdf-template.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-tagpdf-template.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/tagpdf.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/tagpdf.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tikzmark/tikzmark.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaAnnouncement.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaAnnouncement.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaBeamer.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaBeamer.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaBibliography.bib
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaExercise.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaExercise.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaFromaddress.lco
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaLeaflet.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaLeaflet.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaLetter.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaLetter.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPhD.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPhD.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPoster.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPoster.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPub.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPub.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaReport.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaReport.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaSciPoster.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaSciPoster.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaThesis.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaThesis.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/README.md
    branches/branch2020/Master/texmf-dist/doc/latex/udesoftec/udesoftec-doc.pdf
    branches/branch2020/Master/texmf-dist/doc/platex/pxjahyper/README-ja.md
    branches/branch2020/Master/texmf-dist/doc/platex/pxjahyper/README.md
    branches/branch2020/Master/texmf-dist/doc/platex/pxjahyper/pxjahyper.pdf
    branches/branch2020/Master/texmf-dist/doc/platex/pxjahyper/pxjahyper.tex
    branches/branch2020/Master/texmf-dist/ls-R
    branches/branch2020/Master/texmf-dist/source/latex/babel/babel.dtx
    branches/branch2020/Master/texmf-dist/source/latex/babel/babel.ins
    branches/branch2020/Master/texmf-dist/source/latex/babel/bbcompat.dtx
    branches/branch2020/Master/texmf-dist/source/latex/babel/locale.zip
    branches/branch2020/Master/texmf-dist/source/latex/microtype/microtype-utf.dtx
    branches/branch2020/Master/texmf-dist/source/latex/microtype/microtype.dtx
    branches/branch2020/Master/texmf-dist/source/latex/microtype/microtype.ins
    branches/branch2020/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx
    branches/branch2020/Master/texmf-dist/source/latex/spath3/spath3_code.dtx
    branches/branch2020/Master/texmf-dist/source/latex/tikzmark/tikzmark.dtx
    branches/branch2020/Master/texmf-dist/source/latex/udesoftec/CHANGELOG
    branches/branch2020/Master/texmf-dist/source/latex/udesoftec/README
    branches/branch2020/Master/texmf-dist/source/latex/udesoftec/UPDATE-INSTRUCTIONS
    branches/branch2020/Master/texmf-dist/source/latex/udesoftec/udesoftec-doc-examplebib.bib
    branches/branch2020/Master/texmf-dist/source/latex/udesoftec/udesoftec-doc.tex
    branches/branch2020/Master/texmf-dist/tex/generic/babel/babel.def
    branches/branch2020/Master/texmf-dist/tex/generic/babel/babel.sty
    branches/branch2020/Master/texmf-dist/tex/generic/babel/hyphen.cfg
    branches/branch2020/Master/texmf-dist/tex/generic/babel/luababel.def
    branches/branch2020/Master/texmf-dist/tex/generic/babel/nil.ldf
    branches/branch2020/Master/texmf-dist/tex/latex/csquotes/csq-compat.def
    branches/branch2020/Master/texmf-dist/tex/latex/csquotes/csquotes.def
    branches/branch2020/Master/texmf-dist/tex/latex/csquotes/csquotes.sty
    branches/branch2020/Master/texmf-dist/tex/latex/easybook/easybook.cls
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/letterspace.sty
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype-luatex.def
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype-pdftex.def
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype-xetex.def
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype.lua
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype.sty
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-CharisSIL.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-LatinModernRoman.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-bch.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-blg.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-cmr.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-euf.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-eur.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-eus.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-msa.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-msb.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-mvs.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-pmn.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-ppl.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-ptm.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-ugm.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-zpeu.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty
    branches/branch2020/Master/texmf-dist/tex/latex/overlays/overlays.sty
    branches/branch2020/Master/texmf-dist/tex/latex/spath3/spath3.sty
    branches/branch2020/Master/texmf-dist/tex/latex/spath3/tikzlibraryspath3.code.tex
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-attr-code.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-checks-code.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-luatex.def
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-generic.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-lua.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-shared.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-pdftex.def
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-roles-code.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-space-code.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-struct-code.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-tree-code.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-user.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf.lua
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdfdocu-patches.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tikzmark/tikzlibrarytikzmark.code.tex
    branches/branch2020/Master/texmf-dist/tex/latex/tikzmark/tikzmarklibrarylistings.code.tex
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamercolorthemeTUDa.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerfontthemeTUDa.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerinnerthemeTUDa.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerouterthemeTUDa.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerthemeTUDa-mecheng.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerthemeTUDa.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a0paper.clo
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a1paper.clo
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a2paper.clo
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a3paper.clo
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a4paper.clo
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a5paper.clo
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-pgfplots.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudabeamer.cls
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudacolors.def
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudacolors.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaexercise.cls
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudafonts.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaleaflet.cls
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaletter.cls
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudalettersize10pt.clo
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudamecheng.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaposter.cls
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudapub.cls
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudarules.sty
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudasciposter.cls
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudasize9pt.clo
    branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudathesis.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-bibcommon.sty
    branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-biblatex.sty
    branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-bst.sty
    branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-extra.sty
    branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec.cls
    branches/branch2020/Master/texmf-dist/tex/platex/pxjahyper/pxjahyper-ajm.def
    branches/branch2020/Master/texmf-dist/tex/platex/pxjahyper/pxjahyper-enc.sty
    branches/branch2020/Master/texmf-dist/tex/platex/pxjahyper/pxjahyper.sty
    branches/branch2020/Master/tlpkg/bin/tlpkg-ctan-check
    branches/branch2020/Master/tlpkg/installer/ctan-mirrors.pl
    branches/branch2020/Master/tlpkg/texlive.tlpdb
    branches/branch2020/Master/tlpkg/tlpsrc/collection-latexrecommended.tlpsrc

Added Paths:
-----------
    branches/branch2020/Master/texmf-dist/doc/latex/pdfmanagement-testphase/
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-AF-file.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-AF-file.tex
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-attribute-luatex.pdf
    branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/example-input-file.tex
    branches/branch2020/Master/texmf-dist/source/latex/pdfmanagement-testphase/
    branches/branch2020/Master/texmf-dist/source/latex/tagpdf/
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-EBGaramond.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-Palatino.cfg
    branches/branch2020/Master/texmf-dist/tex/latex/pdfmanagement-testphase/
    branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-deprecated.def
    branches/branch2020/Master/tlpkg/tlpsrc/pdfmanagement-testphase.tlpsrc

Removed Paths:
-------------
    branches/branch2020/Master/texmf-dist/source/latex/tikzmark/tikzmark.ins
    branches/branch2020/Master/texmf-dist/tex/latex/microtype/README.TEXLIVE

Property Changed:
----------------
    branches/branch2020/
    branches/branch2020/Master/tlpkg/tlpsrc/asymptote.tlpsrc
    branches/branch2020/Master/tlpkg/tlpsrc/biblatex-swiss-legal.tlpsrc
    branches/branch2020/Master/tlpkg/tlpsrc/cmextra.tlpsrc
    branches/branch2020/Master/tlpkg/tlpsrc/easybook.tlpsrc
    branches/branch2020/Master/tlpkg/tlpsrc/knuth-local.tlpsrc
    branches/branch2020/Master/tlpkg/tlpsrc/lineno.tlpsrc
    branches/branch2020/Master/tlpkg/tlpsrc/metafont.tlpsrc
    branches/branch2020/Master/tlpkg/tlpsrc/microtype.tlpsrc
    branches/branch2020/Master/tlpkg/tlpsrc/oup-authoring-template.tlpsrc
    branches/branch2020/Master/tlpkg/tlpsrc/overlays.tlpsrc
    branches/branch2020/Master/tlpkg/tlpsrc/pxjahyper.tlpsrc
    branches/branch2020/Master/tlpkg/tlpsrc/tagpdf.tlpsrc
    branches/branch2020/Master/tlpkg/tlpsrc/tex.tlpsrc
    branches/branch2020/Master/tlpkg/tlpsrc/udesoftec.tlpsrc
    branches/branch2020/Master/tlpkg/tlpsrc/ut-thesis.tlpsrc

Index: branches/branch2020
===================================================================
--- branches/branch2020	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020
___________________________________________________________________
Modified: svn:mergeinfo
## -1 +1 ##
-/trunk:54632-57841
\ No newline at end of property
+/trunk:54632-57871
\ No newline at end of property
Modified: branches/branch2020/Build/source/texk/web2c/cwebboot.cin
===================================================================
--- branches/branch2020/Build/source/texk/web2c/cwebboot.cin	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/cwebboot.cin	2021-02-24 18:00:42 UTC (rev 57872)
@@ -23,7 +23,7 @@
 #include <string.h>  
 
 /*:3*//*89:*/
-#line 710 "cwebdir/comm-w2c.ch"
+#line 709 "cwebdir/comm-w2c.ch"
 
 #if HAVE_GETTEXT
 #include <locale.h>  
@@ -34,7 +34,7 @@
 #endif
 
 /*:89*//*91:*/
-#line 757 "cwebdir/comm-w2c.ch"
+#line 756 "cwebdir/comm-w2c.ch"
 
 typedef bool boolean;
 #define HAVE_BOOLEAN
@@ -44,7 +44,7 @@
 #include <lib/lib.h>  
 
 /*:91*//*94:*/
-#line 796 "cwebdir/comm-w2c.ch"
+#line 795 "cwebdir/comm-w2c.ch"
 
 #define CWEB
 #include "help.h" 
@@ -482,7 +482,7 @@
 static void scan_args(void);
 
 /*:75*//*96:*/
-#line 809 "cwebdir/comm-w2c.ch"
+#line 808 "cwebdir/comm-w2c.ch"
 
 static void cb_usage(const_string str);
 static void cb_usagehelp(const_string*message,const_string bug_email);
@@ -515,7 +515,7 @@
 #line 78 "cwebdir/comm-w2c.ch"
 
 /*92:*/
-#line 771 "cwebdir/comm-w2c.ch"
+#line 770 "cwebdir/comm-w2c.ch"
 
 kpse_set_program_name(argv[0],"cweb");
 
@@ -524,7 +524,7 @@
 
 #line 85 "cwebdir/comm-w2c.ch"
 /*90:*/
-#line 719 "cwebdir/comm-w2c.ch"
+#line 718 "cwebdir/comm-w2c.ch"
 
 setlocale(LC_MESSAGES,setlocale(LC_CTYPE,""));
 texmf_locale= kpse_var_expand("${TEXMFLOCALEDIR}");
@@ -1427,7 +1427,7 @@
 if(strcmp("-help",*argv)==0||strcmp("--help",*argv)==0)
 
 /*95:*/
-#line 800 "cwebdir/comm-w2c.ch"
+#line 799 "cwebdir/comm-w2c.ch"
 
 cb_usagehelp(program==ctangle?CTANGLEHELP:
 program==cweave?CWEAVEHELP:CTWILLHELP,NULL);
@@ -1439,7 +1439,7 @@
 if(strcmp("-version",*argv)==0||strcmp("--version",*argv)==0)
 
 /*98:*/
-#line 847 "cwebdir/comm-w2c.ch"
+#line 846 "cwebdir/comm-w2c.ch"
 
 printversionandexit(cb_banner,
 program==ctwill?"Donald E. Knuth":"Silvio Levy and Donald E. Knuth",
@@ -1618,7 +1618,7 @@
 
 #line 496 "cwebdir/comm-w2c.ch"
 /*:76*//*97:*/
-#line 813 "cwebdir/comm-w2c.ch"
+#line 812 "cwebdir/comm-w2c.ch"
 
 static void cb_usage(const_string str)
 {
@@ -1651,7 +1651,7 @@
 }
 
 /*:97*//*99:*/
-#line 855 "cwebdir/comm-w2c.ch"
+#line 854 "cwebdir/comm-w2c.ch"
 
 void cb_show_banner(void)
 {

Modified: branches/branch2020/Build/source/texk/web2c/cwebdir/ChangeLog
===================================================================
--- branches/branch2020/Build/source/texk/web2c/cwebdir/ChangeLog	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/cwebdir/ChangeLog	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,3 +1,26 @@
+2021-02-24  Andreas Scherer  <https://ascherer.github.io>
+
+	* cweave.w: Fix spacing for |#include| in TeX comment.
+
+2021-02-24  Andreas Scherer  <https://ascherer.github.io>
+
+	* common.w,
+	* ctangle.w,
+	* cweave.w: Fine print for single '@' characters in TeX text.
+
+2021-02-24  Andreas Scherer  <https://ascherer.github.io>
+
+	* cweave.w: Fix output format when 'tracing @2'.
+
+2021-02-23  Andreas Scherer  <https://ascherer.github.io>
+
+	* cwebman.tex,
+	* cwebman-w2c.ch: Minor redactions.
+
+2021-02-23  Andreas Scherer  <https://ascherer.github.io>
+
+	* comm-w2c.ch: Simplify documentation.
+
 2021-02-22  Andreas Scherer  <https://ascherer.github.io>
 
 	* Makefile,

Modified: branches/branch2020/Build/source/texk/web2c/cwebdir/comm-w2c.ch
===================================================================
--- branches/branch2020/Build/source/texk/web2c/cwebdir/comm-w2c.ch	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/cwebdir/comm-w2c.ch	2021-02-24 18:00:42 UTC (rev 57872)
@@ -686,10 +686,9 @@
 does \\{not} set |HAVE_GETTEXT| at build-time, so \.{i18n} is ``off'' by
 default.  If you want to create \.{CWEB} executables with NLS support, you
 have to recompile the \TeX~Live sources with a positive value for
-|HAVE_GETTEXT| both in \.{comm-w2c.ch} and \.{comm-w2c.h}.  Also you
-have to ``compile'' the NLS catalogs provided for \.{CWEB} in the source
-tree with \.{msgfmt} and store the resulting \.{.mo} files at an appropriate
-place in the file system.
+|HAVE_GETTEXT| in \.{comm-w2c.h}.  Also you have to ``compile'' the NLS
+catalogs provided for \.{CWEB} in the source tree with \.{msgfmt} and store the
+resulting \.{.mo} files at an appropriate place in the file system.
 
 Plans for \TeX~Live are to store NLS catalogs inside the ``\TeX\ Directory
 Structure'' (TDS) and look them up with the help of the configuration variable

Modified: branches/branch2020/Build/source/texk/web2c/cwebdir/common.w
===================================================================
--- branches/branch2020/Build/source/texk/web2c/cwebdir/common.w	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/cwebdir/common.w	2021-02-24 18:00:42 UTC (rev 57872)
@@ -289,7 +289,7 @@
 
 When a match is found, the current section is marked as changed unless
 the first line after the \.{@@x} and after the \.{@@y} both start with
-either |'@@*'| or |'@@ '| (possibly preceded by whitespace).
+either `\.{@@*}' or `\.{@@\ }' (possibly preceded by whitespace).
 
 This procedure is called only when |buffer<limit|, i.e., when the
 current line is nonempty.

Modified: branches/branch2020/Build/source/texk/web2c/cwebdir/ctangle.w
===================================================================
--- branches/branch2020/Build/source/texk/web2c/cwebdir/ctangle.w	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/cwebdir/ctangle.w	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1236,7 +1236,7 @@
   app_repl(a % 0400); break;
 case section_name: if (t!=section_name) goto done;
   else {
-    @<Was an `@@' missed here?@>@;
+    @<Was an `\.{@@}' missed here?@>@;
     a=cur_section_name-name_dir;
     app_repl((a / 0400)+0250);
     app_repl(a % 0400);
@@ -1263,7 +1263,7 @@
   }
 case new_section: goto done;
 
-@ @<Was an `@@'...@>= {
+@ @<Was an `\.{@@}'...@>= {
   char *try_loc=loc;
   while (*try_loc==' ' && try_loc<limit) try_loc++;
   if (*try_loc=='+' && try_loc<limit) try_loc++;

Modified: branches/branch2020/Build/source/texk/web2c/cwebdir/ctwill-mini.ch
===================================================================
--- branches/branch2020/Build/source/texk/web2c/cwebdir/ctwill-mini.ch	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/cwebdir/ctwill-mini.ch	2021-02-24 18:00:42 UTC (rev 57872)
@@ -109,14 +109,6 @@
 @-c@>
 @z
 
-Section 12.
-
- at x
-@ Code related to section numbers:
- at y
-@ Code related to section numbers:
- at z
-
 Section 13.
 
 @x

Modified: branches/branch2020/Build/source/texk/web2c/cwebdir/cweave.w
===================================================================
--- branches/branch2020/Build/source/texk/web2c/cwebdir/cweave.w	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/cwebdir/cweave.w	2021-02-24 18:00:42 UTC (rev 57872)
@@ -99,6 +99,7 @@
   phase_one(); /* read all the user's text and store the cross-references */
   phase_two(); /* read all the text again and translate it to \TEX/ form */
   phase_three(); /* output the cross-reference index */
+  if (tracing==2 && !show_progress) new_line;
   return wrap_up(); /* and exit gracefully */
 }
 
@@ -597,7 +598,7 @@
   while(true) {
     if (loc>limit && get_line()==false) return;
     *(limit+1)='@@';
-    while (*loc!='@@') loc++; /* look for '@@', then skip two chars */
+    while (*loc!='@@') loc++; /* look for `\.{@@}', then skip two chars */
     if (loc++ <=limit) { int c=ccode[(eight_bits)*loc++];
       if (c==new_section) return;
       if (c==noop) skip_restricted();
@@ -735,7 +736,7 @@
 name as a string.
 
 @<Private...@>=
-static boolean sharp_include_line=false; /* are we scanning a |#include| line? */
+static boolean sharp_include_line=false; /* are we scanning a \&{\#include} line? */
 
 @ @<Check if next token is |include|@>=
 while (loc<=buffer_end-7 && xisspace(*loc)) loc++;
@@ -844,7 +845,7 @@
     if (delim=='u' && *loc=='8') { *++id_loc=*loc++; }
     delim=*loc++; *++id_loc=delim;
   }
-  if (delim=='<') delim='>'; /* for file names in |#include| lines */
+  if (delim=='<') delim='>'; /* for file names in \&{\#include} lines */
   while (true) {
     if (loc>=limit) {
       if(*(limit-1)!='\\') {

Modified: branches/branch2020/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch
===================================================================
--- branches/branch2020/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/cwebdir/cwebman-w2c.ch	2021-02-24 18:00:42 UTC (rev 57872)
@@ -96,7 +96,7 @@
 \def\runninghead{{\tentt CWEB} USER MANUAL (VERSION 4.1)}
 @y
 \def\Kpathsea/{{\mc KPATHSEA\spacefactor1000}}
-\def\runninghead{{\tentt CWEB} USER MANUAL (4.1 [\TeX~Live])}
+\def\runninghead{{\tentt CWEB} USER MANUAL (Version 4.1 [\TeX~Live])}
 @z
 
 @x
@@ -103,7 +103,7 @@
 \vskip 18pt\centerline{(Version 4.1 --- February 2021)}
 @y
 \vskip 18pt\centerline{(Version 4.1 --- February 2021)%
-\footnote*{This document describes the extended \.{CWEB} (4.1 [\TeX~Live]).}}
+\footnote*{This document describes the extended \.{CWEB} (Version 4.1 [\TeX~Live]).}}
 @z
 
 @x
@@ -151,6 +151,14 @@
 @z
 
 @x
+except for error messages.
+ at y
+except for error messages.%
+\cwebfootnote{\.{CWEB} in \TeX~Live runs `\.{--quiet}ly', i.\,e.,
+options `\.{b}', `\.{h}', and `\.{p}' are `off' by default.}
+ at z
+
+ at x
 output by \.{CWEAVE}. (On by default.) (Has no effect on \.{CTANGLE}.)
 @y
 output by \.{CWEAVE}. (On by default.) (Has no effect on \.{CTANGLE}.)%

Modified: branches/branch2020/Build/source/texk/web2c/cwebdir/cwebman.tex
===================================================================
--- branches/branch2020/Build/source/texk/web2c/cwebdir/cwebman.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/cwebdir/cwebman.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -398,15 +398,15 @@
 the assignment $\\{pa}\K{\AND}\|a[\T{0}]$ makes \\{pa}
 point to the zeroth element of \|a.}$$
 The \TEX/ text would look like this in your \.{CWEB} file:
-$$\lpile{\.{If |pa| is declared as `|int *pa|', the}\cr
-\.{assignment |pa=\&a[0]| makes |pa| point
-to the zeroth element of |a|.}\cr}$$
-And \.{CWEAVE} translates this into something you are glad you didn't have
-to type:
-$$\lpile{\.{If \\\\\{pa\} is declared as
-  `\\\&\{int\} \$\{\}\{*\}\\\\\{pa\}\$',}\cr
-\.{the assignment \$\\\\\{pa\}\\K\{\\AND\}\\|a[\\T\{0\}]\$}\cr
-\.{makes \\\\\{pa\} point to the zeroth element of \\|a.}\cr}$$
+$$\lpile{\.{If |pa| is declared as `|int *pa|', the assignment}\cr
+\.{|pa=\&a[0]| makes |pa| point to the zeroth element of |a|.}\cr}$$
+And \.{CWEAVE} translates this into something
+you are glad you didn't have to type:
+$$\lpile{\.{If \\PB\{\\\\\{pa\}\} is declared as `\\PB\{\\\&\{int\}
+  \$\{\}\{*\}\\\\\{pa\}\$\}', the}\cr
+\.{assignment \\PB\{\$\\\\\{pa\}\\K\{\\AND\}\\|a[\\T\{0\}]\$\}
+  makes \\PB\{\\\\\{pa\}\} point}\cr
+\.{to the zeroth element of \\PB\{\\|a\}.}\cr}$$
 Incidentally, the cross-reference index that \.{CWEAVE} would make, in
 the presence of a comment like this, would include
 the current section number as one of the index entries for \\{pa},
@@ -1011,7 +1011,7 @@
 
 \section Running the programs.
 The \UNIX/ command line for \.{CTANGLE} is
-$$\.{ctangle [options] web\_file[.w] [\{change\_file[.ch]|-\} [out\_file]]}$$
+$$\.{ctangle [options] webfile[.w] [\{changefile[.ch]|-\} [outfile[.c]]]}$$
 and the same conventions apply to \.{CWEAVE}. If `\.-' or no change file is
 specified, the change file is null. The extensions \.{.w} and \.{.ch}
 are appended only if the given file names contain no dot. If the
@@ -1042,7 +1042,7 @@
 
 \option e Enclose \CEE/ material formatted by \.{CWEAVE} in
 brackets \.{\\PB\{...\}}, so that special hooks can be used.
-(Off by default; has no effect on \.{CTANGLE}.)
+(On by default; has no effect on \.{CTANGLE}.)
 
 \option f Force line breaks after each \CEE/ statement formatted
 by \.{CWEAVE}. (On by default; \.{-f} saves paper but looks less \CEE/-like
@@ -1336,7 +1336,7 @@
 \def\runninghead{APPENDIX A --- TRANSLATION BY {\tentt CWEAVE}}
 
 Here is the corresponding excerpt from \.{common.tex}.
-(Code for section 31 omitted for space reasons.)
+(Code for section 31 is omitted for space reasons.)
 
 \vskip6pt
 \begingroup \def\tt{\eighttt} \baselineskip9pt

Modified: branches/branch2020/Build/source/texk/web2c/etexdir/ChangeLog
===================================================================
--- branches/branch2020/Build/source/texk/web2c/etexdir/ChangeLog	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/etexdir/ChangeLog	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,3 +1,7 @@
+2021-02-22  Phelype Oleinik  <phe.h.o1 at gmail.com>
+
+	* etex.ch: avoid "expansion depth" overflow with \numexpr.
+
 2021-02-13  Karl Berry  <karl at freefriends.org>
 
 	* am/etex.am (etex_ch_srcs): adjust for split enctex changes.

Modified: branches/branch2020/Build/source/texk/web2c/etexdir/etex.ch
===================================================================
--- branches/branch2020/Build/source/texk/web2c/etexdir/etex.ch	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/etexdir/etex.ch	2021-02-24 18:00:42 UTC (rev 57872)
@@ -5017,7 +5017,10 @@
 @!p:pointer; {top of expression stack}
 @!q:pointer; {for stack manipulations}
 begin l:=cur_val_level; a:=arith_error; b:=false; p:=null;
+incr(expand_depth_count);
+if expand_depth_count>=expand_depth then overflow("expansion depth",expand_depth);
 @<Scan and evaluate an expression |e| of type |l|@>;
+decr(expand_depth_count);
 if b then
   begin print_err("Arithmetic overflow");
 @.Arithmetic overflow@>

Modified: branches/branch2020/Build/source/texk/web2c/luatexdir/luatex_svnversion.h
===================================================================
--- branches/branch2020/Build/source/texk/web2c/luatexdir/luatex_svnversion.h	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/luatexdir/luatex_svnversion.h	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1 +1 @@
-#define luatex_svn_revision 7409
+#define luatex_svn_revision 7410

Modified: branches/branch2020/Build/source/texk/web2c/pdftexdir/ChangeLog
===================================================================
--- branches/branch2020/Build/source/texk/web2c/pdftexdir/ChangeLog	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/pdftexdir/ChangeLog	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,3 +1,7 @@
+2021-02-22  Phelype Oleinik  <phe.h.o1 at gmail.com>
+
+	* pdftex.web: avoid "expansion depth" overflow with \numexpr.
+
 2021-02-17  Karl Berry  <karl at tug.org>
 
         * NEWS,

Modified: branches/branch2020/Build/source/texk/web2c/pdftexdir/pdftex.web
===================================================================
--- branches/branch2020/Build/source/texk/web2c/pdftexdir/pdftex.web	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/pdftexdir/pdftex.web	2021-02-24 18:00:42 UTC (rev 57872)
@@ -38618,7 +38618,10 @@
 @!p:pointer; {top of expression stack}
 @!q:pointer; {for stack manipulations}
 begin l:=cur_val_level; a:=arith_error; b:=false; p:=null;
+incr(expand_depth_count);
+if expand_depth_count>=expand_depth then overflow("expansion depth",expand_depth);
 @<Scan and evaluate an expression |e| of type |l|@>;
+decr(expand_depth_count);
 if b then
   begin print_err("Arithmetic overflow");
 @.Arithmetic overflow@>

Modified: branches/branch2020/Build/source/texk/web2c/xetexdir/ChangeLog
===================================================================
--- branches/branch2020/Build/source/texk/web2c/xetexdir/ChangeLog	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/xetexdir/ChangeLog	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,3 +1,7 @@
+2021-02-22  Phelype Oleinik  <phe.h.o1 at gmail.com>
+
+	* xetex.web: avoid "expansion depth" overflow with \numexpr.
+
 2021-02-17  Karl Berry  <karl at tug.org>
 
         * NEWS,

Modified: branches/branch2020/Build/source/texk/web2c/xetexdir/xetex.web
===================================================================
--- branches/branch2020/Build/source/texk/web2c/xetexdir/xetex.web	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Build/source/texk/web2c/xetexdir/xetex.web	2021-02-24 18:00:42 UTC (rev 57872)
@@ -32966,7 +32966,10 @@
 @!p:pointer; {top of expression stack}
 @!q:pointer; {for stack manipulations}
 begin l:=cur_val_level; a:=arith_error; b:=false; p:=null;
+incr(expand_depth_count);
+if expand_depth_count>=expand_depth then overflow("expansion depth",expand_depth);
 @<Scan and evaluate an expression |e| of type |l|@>;
+decr(expand_depth_count);
 if b then
   begin print_err("Arithmetic overflow");
 @.Arithmetic overflow@>

Modified: branches/branch2020/Master/doc.html
===================================================================
--- branches/branch2020/Master/doc.html	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/doc.html	2021-02-24 18:00:42 UTC (rev 57872)
@@ -16857,6 +16857,23 @@
 <a href="texmf-dist/doc/latex/pdflscape/pdflscape.pdf">pdflscape.pdf</a>.
 </small></li>
 
+<li id="pdfmanagement-testphase"><b><a href="texmf-dist/doc/latex/pdfmanagement-testphase/">pdfmanagement-testphase</a></b><small>
+(<a href="https://ctan.org/pkg/pdfmanagement-testphase">CTAN</a>):
+LaTeX PDF management testphase bundle. 
+<a href="texmf-dist/doc/latex/pdfmanagement-testphase/hyperref-generic.pdf">hyperref-generic.pdf</a>
+<a href="texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.pdf">l3backend-testphase.pdf</a>
+<a href="texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfannot.pdf">l3pdfannot.pdf</a>
+<a href="texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfdict.pdf">l3pdfdict.pdf</a>
+<a href="texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffile.pdf">l3pdffile.pdf</a>
+<a href="texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfmanagement.pdf">l3pdfmanagement.pdf</a>
+<a href="texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfmeta.pdf">l3pdfmeta.pdf</a>
+<a href="texmf-dist/doc/latex/pdfmanagement-testphase/l3pdftools.pdf">l3pdftools.pdf</a>
+<a href="texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfxform.pdf">l3pdfxform.pdf</a>
+<a href="texmf-dist/doc/latex/pdfmanagement-testphase/ltdocinit.pdf">ltdocinit.pdf</a>
+<a href="texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-firstaid.pdf">pdfmanagement-firstaid.pdf</a>
+<a href="texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.pdf">pdfmanagement-testphase.pdf</a>.
+</small></li>
+
 <li id="pdfmarginpar"><b><a href="texmf-dist/doc/latex/pdfmarginpar/">pdfmarginpar</a></b><small>
 (<a href="https://ctan.org/pkg/pdfmarginpar">CTAN</a>):
 Generate marginpar-equivalent PDF annotations. 
@@ -18855,7 +18872,7 @@
 
 <h2 id="letter-Q">Q</h2>
 
-<ol start="2506">
+<ol start="2507">
 
 <li id="qcircuit"><b><a href="texmf-dist/doc/latex/qcircuit/">qcircuit</a></b><small>
 (<a href="https://ctan.org/pkg/qcircuit">CTAN</a>):
@@ -19002,7 +19019,7 @@
 
 <h2 id="letter-R">R</h2>
 
-<ol start="2527">
+<ol start="2528">
 
 <li id="ragged2e"><b><a href="texmf-dist/doc/latex/ragged2e/">ragged2e</a></b><small>
 (<a href="https://ctan.org/pkg/ragged2e">CTAN</a>):
@@ -19630,7 +19647,7 @@
 
 <h2 id="letter-S">S</h2>
 
-<ol start="2609">
+<ol start="2610">
 
 <li id="sa-tikz"><b><a href="texmf-dist/doc/latex/sa-tikz/">sa-tikz</a></b><small>
 (<a href="https://ctan.org/pkg/sa-tikz">CTAN</a>):
@@ -21394,7 +21411,7 @@
 
 <h2 id="letter-T">T</h2>
 
-<ol start="2853">
+<ol start="2854">
 
 <li id="t-angles"><b><a href="texmf-dist/doc/latex/t-angles/">t-angles</a></b><small>
 (<a href="https://ctan.org/pkg/t-angles">CTAN</a>):
@@ -21550,7 +21567,9 @@
 <li id="tagpdf"><b><a href="texmf-dist/doc/latex/tagpdf/">tagpdf</a></b><small>
 (<a href="https://ctan.org/pkg/tagpdf">CTAN</a>):
 Tools for experimenting with tagging using pdfLaTeX and LuaLaTeX. 
+<a href="texmf-dist/doc/latex/tagpdf/ex-AF-file.pdf">ex-AF-file.pdf</a>
 <a href="texmf-dist/doc/latex/tagpdf/ex-alt-actualtext-luatex.pdf">ex-alt-actualtext-luatex.pdf</a>
+<a href="texmf-dist/doc/latex/tagpdf/ex-attribute-luatex.pdf">ex-attribute-luatex.pdf</a>
 <a href="texmf-dist/doc/latex/tagpdf/ex-attribute.pdf">ex-attribute.pdf</a>
 <a href="texmf-dist/doc/latex/tagpdf/ex-formula-problem-luatex.pdf">ex-formula-problem-luatex.pdf</a>
 <a href="texmf-dist/doc/latex/tagpdf/ex-mc-manual-para-split.pdf">ex-mc-manual-para-split.pdf</a>
@@ -23645,7 +23664,7 @@
 
 <h2 id="letter-U">U</h2>
 
-<ol start="3127">
+<ol start="3128">
 
 <li id="uaclasses"><b><a href="texmf-dist/doc/latex/uaclasses/">uaclasses</a></b><small>
 (<a href="https://ctan.org/pkg/uaclasses">CTAN</a>):
@@ -24155,7 +24174,7 @@
 
 <h2 id="letter-V">V</h2>
 
-<ol start="3200">
+<ol start="3201">
 
 <li id="vancouver"><b><a href="texmf-dist/doc/bibtex/vancouver/">vancouver</a></b><small>
 (<a href="https://ctan.org/pkg/vancouver">CTAN</a>):
@@ -24421,7 +24440,7 @@
 
 <h2 id="letter-W">W</h2>
 
-<ol start="3238">
+<ol start="3239">
 
 <li id="wadalab"><b><a href="texmf-dist/doc/fonts/wadalab/">wadalab</a></b><small>
 (<a href="https://ctan.org/pkg/wadalab">CTAN</a>):
@@ -24628,7 +24647,7 @@
 
 <h2 id="letter-X">X</h2>
 
-<ol start="3262">
+<ol start="3263">
 
 <li id="xargs"><b><a href="texmf-dist/doc/latex/xargs/">xargs</a></b><small>
 (<a href="https://ctan.org/pkg/xargs">CTAN</a>):
@@ -25229,7 +25248,7 @@
 
 <h2 id="letter-Y">Y</h2>
 
-<ol start="3332">
+<ol start="3333">
 
 <li id="yafoot"><b><a href="texmf-dist/doc/latex/yafoot/">yafoot</a></b><small>
 (<a href="https://ctan.org/pkg/yafoot">CTAN</a>):
@@ -25331,7 +25350,7 @@
 
 <h2 id="letter-Z">Z</h2>
 
-<ol start="3346">
+<ol start="3347">
 
 <li id="zebra-goodies"><b><a href="texmf-dist/doc/latex/zebra-goodies/">zebra-goodies</a></b><small>
 (<a href="https://ctan.org/pkg/zebra-goodies">CTAN</a>):
@@ -25430,5 +25449,5 @@
 
 <p><a href="#letter-1">1</a> - <a href="#letter-2">2</a> - <a href="#letter-A">A</a> - <a href="#letter-B">B</a> - <a href="#letter-C">C</a> - <a href="#letter-D">D</a> - <a href="#letter-E">E</a> - <a href="#letter-F">F</a> - <a href="#letter-G">G</a> - <a href="#letter-H">H</a> - <a href="#letter-I">I</a> - <a href="#letter-J">J</a> - <a href="#letter-K">K</a> - <a href="#letter-L">L</a> - <a href="#letter-M">M</a> - <a href="#letter-N">N</a> - <a href="#letter-O">O</a> - <a href="#letter-P">P</a> - <a href="#letter-Q">Q</a> - <a href="#letter-R">R</a> - <a href="#letter-S">S</a> - <a href="#letter-T">T</a> - <a href="#letter-U">U</a> - <a href="#letter-V">V</a> - <a href="#letter-W">W</a> - <a href="#letter-X">X</a> - <a href="#letter-Y">Y</a> - <a href="#letter-Z">Z</a></p>
 <hr>
-<small>Generated Sun Feb 21 22:07:37 CET 2021 by tl-update-docindex.</small>
+<small>Generated Wed Feb 24 01:54:32 CET 2021 by tl-update-docindex.</small>
 </body></html>

Modified: branches/branch2020/Master/texmf-dist/bibtex/bst/udesoftec/udesoftec.bst
===================================================================
--- branches/branch2020/Master/texmf-dist/bibtex/bst/udesoftec/udesoftec.bst	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/bibtex/bst/udesoftec/udesoftec.bst	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,7 +1,7 @@
 % !Mode:: "TeX:UTF-8"
 %% udesoftec.bst
 %% Copyright 2014-2015 J. Peter M. Schuler
-%% 2020/03/09 v1.7.0 udesoftec
+%% 2021/02/22 v1.7.1 udesoftec
 %
 % This work may be distributed and/or modified under the
 % conditions of the LaTeX Project Public License, either version 1.3

Modified: branches/branch2020/Master/texmf-dist/doc/latex/babel/README.md
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/babel/README.md	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/babel/README.md	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-## Babel 3.53
+## Babel 3.54
 
 This package manages culturally-determined typographical (and other)
 rules, and hyphenation patterns for a wide range of languages.  Many
@@ -7,9 +7,9 @@
 
 The latest stable version is available on <https://ctan.org/pkg/babel>.
 
-Changes in version 3.53 are described in:
+Changes in version 3.54 are described in:
 
-https://github.com/latex3/babel/wiki/What's-new-in-babel-3.53
+https://github.com/latex3/babel/wiki/What's-new-in-babel-3.54
 
 Included is a set of ini files for about 250 languages. 
 
@@ -43,6 +43,14 @@
 
 ### Latest changes
 ```
+3.54   2021-02-22
+       * RTL text inside \put (with pict2e) correctly rendered in
+         typical cases (lua, #98).
+       * Same for \tikz (lua).
+       * The main change in internal (loader of ini files refactored).
+       * Fixes:
+         - The tentative \foreignlanguage* stopped working.
+       
 3.53   2021-01-26
        * Extended \setlocalecaption to allow .template (related to
          #111).
@@ -55,6 +63,7 @@
            bidi in lua.
          - Parenthesis sometimes mirrored at the end of math with
            bidi=basic.
+See https://github.com/latex3/babel/wiki/What's-new-in-babel-3.53
 
 3.52   2020-12-16
        * WARNING. If you need the style for Afrikaans you must update
@@ -69,7 +78,7 @@
          - Save size overflow with many \selectlanguage's (#109).
          - Albanian: fix a typo in contents name (#104)
          - Missing ‘Unused global option(s)’ warning (#110)
-https://github.com/latex3/babel/wiki/What's-new-in-babel-3.52
+See https://github.com/latex3/babel/wiki/What's-new-in-babel-3.52
 
 3.51   2020-10-27
        * Common interface to (re)define captions (with
@@ -84,13 +93,13 @@
          - An error was raised with CJK and a null font (#99).
          - language.tag.bcp47 and tag.ini in \localeinfo didn't work
            (#102).
-https://github.com/latex3/babel/wiki/What's-new-in-babel-3.52
+See https://github.com/latex3/babel/wiki/What's-new-in-babel-3.52
 
 3.50   2020-10-06
        * Fixes:
          - main=<language> stopped working in some cases (#96).
          - Footnotes were not \long with layout=footnotes.
-https://github.com/latex3/babel/wiki/What's-new-in-babel-3.50
+See https://github.com/latex3/babel/wiki/What's-new-in-babel-3.50
 
 3.49   2020-10-03
        * BUG. This version has a severe bug with main= (fixed in 3.50).
@@ -99,7 +108,7 @@
        * frenchspacing is set with ini files.
        * Fixes:
          - layout.lists=off didn't work (#94)
-https://github.com/latex3/babel/wiki/What's-new-in-babel-3.49
+See https://github.com/latex3/babel/wiki/What's-new-in-babel-3.49
 
 3.48   2020-09-01
        * New (tentative) tools to customize some labels (like chapters
@@ -110,7 +119,7 @@
          - \babelshorthand didn't work with some dialects (#91).
          - \selectlanguage and otherlanguage raised an error inside
            tabular.
-https://github.com/latex3/babel/wiki/What's-new-in-babel-3.48       
+See https://github.com/latex3/babel/wiki/What's-new-in-babel-3.48       
 
 3.47   2020-07-13
        * Fixes:
@@ -121,7 +130,7 @@
        * New - \getlocaleproperty*, which doesn't raise an error.
        * Basic ini+tex templates for about 500 languages in the GitHub
          repository.
-https://github.com/latex3/babel/wiki/What's-new-in-babel-3.47
+See https://github.com/latex3/babel/wiki/What's-new-in-babel-3.47
 
 3.46   2020-07-06
        * Languages can now be optionally selected with their BCP 47
@@ -137,29 +146,16 @@
          - Locale info was not loaded if the name had uppercase letters
            in some OSs (#80).
          - The [..|..] syntax in ini dates didn't recognize 'digits'.
-https://github.com/latex3/babel/wiki/What's-new-in-babel-3.46
+See https://github.com/latex3/babel/wiki/What's-new-in-babel-3.46
 
 3.45   2020-06-10
-       * Minor fixes in Hindi, Ancient Greek, Macedonian.
-       * Improvements in Kurdish, Marathi.
-       * Alternative date formats with \localedate[calendar=...,
-         variant=...]{y}{m}{d} (note: no calendar computations, just
-         strings).
-       * \today is (again) case-aware.
-       * \localenumeral{digits}{..} and \localecounter{digits}{cntr}
-         for native digits.
-       * Fixes
-         - Improved handling of math with \babelposthyphenation and
-           \babelprehyphenation (it was ignoring too much).
-         - An error related to \bbl at foreign@x could be raised in some
-           rare cases.
 See https://github.com/latex3/babel/wiki/What's-new-in-babel-3.45
 
 3.44   2020-05-13
-https://github.com/latex3/babel/wiki/What's-new-in-babel-3.44
+See https://github.com/latex3/babel/wiki/What's-new-in-babel-3.44
 
 3.43   2020-04-28
-https://github.com/latex3/babel/wiki/What's-new-in-babel-3.43
+See https://github.com/latex3/babel/wiki/What's-new-in-babel-3.43
 
 3.42   2020-03-22
 See https://github.com/latex3/babel/wiki/What's-new-in-babel-3.42

Modified: branches/branch2020/Master/texmf-dist/doc/latex/babel/babel.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/csquotes/csquotes.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/csquotes/csquotes.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/csquotes/csquotes.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/csquotes/csquotes.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -18,8 +18,8 @@
   url={http://www.ctan.org/pkg/csquotes/},
   author={Philipp Lehman, Joseph Wright},
   email={joseph.wright at morningstar2.co.uk},
-  revision={v5.2k},
-  date={2021-01-04}}
+  revision={v5.2l},
+  date={2021-02-22}}
 
 \hypersetup{%
   pdftitle={The csquotes Package},
@@ -1543,6 +1543,10 @@
 
 The scope of these hooks must always be confined to a group.
 
+\section{Bug reports}
+
+Bugs may be reported at \url{https://github.com/josephwright/csquotes/issues}.
+
 \section{Revision History}
 
 This revision history is a list of changes relevant to users of this package. Changes of a more technical nature which do not affect the user interface or the behavior of the package are not included in the list. If an entry in the revision history states that a feature has been \emph{extended}, this indicates a syntactically backwards compatible modification, such as the addition of an optional argument to an existing command. Entries stating that a feature has been \emph{modified}, \emph{renamed}, or \emph{removed} demand attention. They indicate a modification which may require changes to existing documents in some, hopefully rare, cases. The \opt{version} option from \secref{opt:opt} may be helpful in this case. The numbers on the right indicate the relevant section of this manual.
@@ -1549,6 +1553,10 @@
 
 \begin{changelog}
 
+\begin{release}{5.2j}{2021-02-13}
+\item Fix spacing with \cmd{mktextelp}
+\end{release}
+
 \begin{release}{5.2j}{2019-12-04}
 \item Fix issue with some combinations of language and document class
 \item Added support for Latin quotations

Modified: branches/branch2020/Master/texmf-dist/doc/latex/easybook/chapter1.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/easybook/chapter1.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/easybook/chapter1.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -58,7 +58,7 @@
 
 \section{表格}
 \index{b@表格}
-合并表格列使用 \lstinline{\multicolumn} 命令,合并行使用 \lstinline{\multirowcell} 命令。当插入的表格内容过长以至于一行放不下的情况可以使用 \lstinline{tabularx} 环境,设置了\textsf{L、C和R}三个列对齐选项,一个例子如\cref{tab:example} 所示。
+合并表格列使用 \lstinline{\multicolumn} 命令,合并行可以使用 \lstinline{makecell} 宏包的 \lstinline{\multirowcell} 命令。当插入的表格内容过长以至于一行放不下的情况可以使用 \lstinline{tabularx} 环境,文档类设置了\textsf{L、C和R}三个列对齐选项,一个例子如\cref{tab:example} 所示。
 \begin{table}[htbp]
   \centering
   \bicaption{使用tabularx创建内容过长表格}{Use tabularx to create a table with too long content}\label{tab:example}\small

Modified: branches/branch2020/Master/texmf-dist/doc/latex/easybook/chapter3.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/easybook/chapter3.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/easybook/chapter3.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -20,7 +20,7 @@
 
 \section{物理量}
 \index{w@物理量}
-阿司匹林还有三种作用方式 \num{-21x.3e5}。一是使线粒体的氧化磷酸化解偶联。阿司匹林会携带质子从线粒体膜间隙扩散进入线粒体基质,然后再次电离释放质子 \SI{.5}{mol}。
+阿司匹林还有三种作用方式 \num{-21x.3e5}。一是使线粒体的氧化磷酸化解偶联 \SIrange{12}{35}{\minute}。阿司匹林会携带质子从线粒体膜间隙扩散进入线粒体基质,然后再次电离释放质子 \SI{.5}{mol}。
 
 \section{化学式}
 \index{h@化学式}
@@ -40,14 +40,12 @@
 
 \subsection{脚注}
 \index{y@引用!j@脚注}
-六年之后的1859年,冯·基尔姆让水杨酸和乙酰氯反应,制得了分析纯的乙酰水杨酸,他称之为“乙酰化水杨酸”(acetylierte*Salicyls+"aure)\footnote{这是一个悬挂缩进的脚注。\par 这是分段将会缩进两字符。}。
+阿司匹林及其复方制剂都能有效治疗某几种头痛,但对另外几种则效果不明\footnote{\zhlipsum*[8][name = aspirin]}。因其他疾病或创伤导致的继发性头痛需要及时在医疗机构接受治疗\Footnote{*}{\zhlipsum*[8][name = aspirin]}。
 
-60和70年代,约翰·范恩等人发现了阿司匹林的作用机理,60至80年代的其他研究和临床试验证明该药有抗凝血的药效,可降低血栓疾病的发病率\Footnote{*}{这是可以自定义标记的脚注。}。
-
 \subsection{引用章节}
 \label{subsec:reference section}
 \index{y@引用!s@索引}
-兽医有时用阿司匹林来镇痛或抗血栓,主要给狗用\cref{chap:other formats},有时给马用\cref{subsec:reference section},不过现在一般会用副作用较少的新疗法。
+阿司匹林及其复方制剂都能有效治疗某几种头痛,但对另外几种则效果不明\cref{chap:other formats}。因其他疾病或创伤导致的继发性头痛需要及时在医疗机构接受治疗\cref{subsec:reference section}。
 
 \subsection{参考文献}
 \index{y@引用!c@参考文献}
@@ -55,4 +53,4 @@
 
 \section{行内盒子}
 \index{h@行内盒子}
-对乙酰氨基酚和布洛芬 \concise[Aqua][fontupper = \rmfamily]{concise} 于1956年和1959年相继问世以后,阿司匹林 \fuzzy[DarkSeaGreen][fontupper = \ttfamily,colupper = black]{fuzzy} 的使用率开始下降。
\ No newline at end of file
+阿司匹林及其复方制剂都能有效治疗某几种头痛,但对另外几 \concise[Aqua][fontupper = \rmfamily]{concise} 种则效果不明。因其他疾病或创伤导致的 \fuzzy[DarkSeaGreen][fontupper = \ttfamily,colupper = black]{fuzzy} 继发性头痛需要及时在医疗机构接受治疗。
\ No newline at end of file

Modified: branches/branch2020/Master/texmf-dist/doc/latex/easybook/easybook-demo.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/easybook/easybook-demo.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/easybook/easybook-demo.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/easybook/easybook-demo.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -2,7 +2,7 @@
   zihao = -4,
   font = noto,
   paper = a4paper,
-  openany,
+  openany
   ]{easybook}
 
 \ctexset
@@ -79,7 +79,7 @@
     bibset =
       {
         backend = bibtex,
-        bibstyle = number
+        bibstyle = numerical
       },
     % secnumdepth = 2,
     % tocdepth = 2
@@ -95,7 +95,7 @@
         \github~\url{https://github.com/texl3/easybook} \\
         \edge~\url{https://latexstudio.net}
       }
-    \date{2021/02/21\hskip\ccwd\relax v1.23f}
+    \date{2021/02/23\hskip\ccwd\relax v1.23g}
   }
 
 \begin{document}

Modified: branches/branch2020/Master/texmf-dist/doc/latex/easybook/easybook.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/easybook/easybook.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/easybook/easybook.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/easybook/easybook.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -3,7 +3,7 @@
 
 \title{\sffamily easybook书籍文档类}
 \author{瞿毅}
-\date{2021/02/21\hskip\ccwd\relax v1.23f\thanks{\url{https://gitee.com/texl3/easybook}}}
+\date{2021/02/23\hskip\ccwd\relax v1.23g\thanks{\url{https://gitee.com/texl3/easybook}}}
 
 \begin{document}
 \maketitle
@@ -81,7 +81,7 @@
 \begin{syntax}
   font = <adobe|founder|mac|windows|linux|(overleaf)|noto|none>
 \end{syntax}
-\changes{v1.21b}{2021/01/12}{默认字体与\CTeX 一致,不再是自定义字体。}
+\changes{v1.21}{2021/01/12}{默认字体与\CTeX 一致,不再是自定义字体。}
 传递给 \cls{ctexbook} 设置字体,最好不要使用原有的 \opt{fontset} 选项,默认情况下使用自定义字体而不开启这个选项,可根据安装的字体及电脑系统选取。\opt{noto} 与 \opt{none} 选项的相关描述见小节 \ref{font settings},\opt{overleaf} 是一个各系统通用选项,会检测系统环境选取对应字体。
 \end{function}
 
@@ -98,6 +98,7 @@
   \tn{frontmatter}\oarg{编号格式|(Roman)}
   \tn{printindex}\oarg{索引名}
 \end{syntax}
+\changes{v1.23g}{2021/02/20}{重新定义文档结构划分命令。}
 \tn{frontmatter} 为前言区命令,章标题不编号,页码可设置为例如 \opt{roman}、\opt{Alph} 等格式,带有星号的命令 \tn{frontmatter*} 不使用 \tn{cleardoublepage}。\tn{mainmatter} 为主文区命令,章标题正常编号且页码为从1开始计数的阿拉伯数字,\tn{mainmatter*} 命令不使用 \tn{cleardoublepage}。\tn{backmatter} 为后记区命令,页码格式与编号保持不变,章标题不编号。\tn{listoffigures} 命令输出图片目录,\tn{listoftables} 命令输出表格目录,\tn{listoflistings} 命令输出代码目录。
 \end{function}
 
@@ -130,8 +131,8 @@
   rulewidth = <(0.75pt)>
 \end{syntax}
 \changes{v1.10}{2021/01/08}{更改颜色实现方式与选项名。}
-\changes{v1.23}{2021/02/02}{noto风格的数学字体独立出来,可自定义设置。}
-\changes{v1.23b}{2021/02/09}{增加控制页面横线粗细的选项。}
+\changes{v1.23g}{2021/02/02}{noto风格的数学字体独立出来,可自定义设置。}
+\changes{v1.23g}{2021/02/09}{增加控制页面横线粗细的选项。}
 \opt{style} 选项控制文章的风格。
 \end{function}
 
@@ -186,8 +187,8 @@
   caption = <(1)>
   footnote = <(1)>
 \end{syntax}
-\changes{v1.21b}{2021/01/12}{增加脚注线间的距离选项。}
-\changes{v1.23b}{2021/02/09}{取消使用 \pkg{zhlineskip} 宏包设置数学间距。}
+\changes{v1.21}{2021/01/12}{增加脚注线间的距离选项。}
+\changes{v1.23g}{2021/02/09}{取消使用 \pkg{zhlineskip} 宏包设置数学间距。}
 行距因子用于设置各种行距倍数,只能是浮点数,不能带有长度单位。\tn{ctexset} 原有的行距选项\opt{linespread}失效。各行距既可在导言区全局设置也可正文中设置对后面生效,行距的意义为
 \end{function}
 
@@ -194,7 +195,7 @@
 \begin{optdesc}
   \item[line] 正文行距。
   \item[table] 表格行距。
-  \item[math] 数学环境行距。
+  \item[math] 数学环境行距,包括 \pkg{amsmath} 和 \pkg{mathtools} 宏包附带的环境,但并未加载 \pkg{mathtools} 宏包。
   \item[caption] 图表代码标题行距。
   \item[footnote] 脚注行距。
 \end{optdesc}
@@ -209,7 +210,7 @@
   marginpart = <\tn{rmfamily}\tn{footnotesize}>
 \end{syntax}
 \changes{v1.10}{2021/01/08}{加入自定义非正文字体选项。}
-\changes{v1.23a}{2021/02/08}{修复使用 \tn{zihao} 命令设置字体失效的问题。}
+\changes{v1.23g}{2021/02/08}{修复使用 \tn{zihao} 命令设置字体失效的问题。}
 \end{function}
 
 \begin{optdesc}
@@ -221,21 +222,22 @@
 \end{optdesc}
 
 \subsection{参考文献}
-\begin{function}[EXP,added = 2021-01-11]{bibset/backend,bibset/bibstyle,bibset/citestyle,bibset/bibfile,\printbibliography}
+\begin{function}[EXP,added = 2021-01-11,updated = 2021-02-23]{bibset/backend,bibset/bibstyle,bibset/citestyle,bibset/bibfile,\printbibliography}
 \begin{syntax}
   backend = <(bibtex)|biblatex>
-  bibstyle = <(number)|authoryear|其它格式>
+  bibstyle = <(numerical)|authoryear|其它格式>
   citestyle = <引用格式>
   bibfile = <ref/refs.bib>
   \tn{printbibliography}\oarg{选项列表}
 \end{syntax}
 \changes{v1.21}{2021/01/11}{增加 \opt{bibset} 选项,可以使用 \hologo{BibTeX} 或 \hologo{biber} 编译参考文献。}
+\changes{v1.23g}{2021/02/23}{使用 \opt{bibset} 选项时可设置标注风格。}
 \end{function}
 
 \begin{optdesc}
   \item[backend] 参考文献处理后端,默认用传统的 \hologo{BibTeX} 处理参考文献。
   \item[bibstyle] 参考文献格式为中国的参考文献推荐标准GB/T 7714-2015,有顺序编码制和著者-出版年制两种风格,理工科类一般使用顺序编码制,文科类一般使用著者-出版年制。若使用其它格式,使用 \hologo{BibTeX} 处理时需确保正确的 \opt{bst} 文件,使用 \hologo{biber} 处理可使用 \pkg{biblatex} 宏包支持的参考文献风格名称。
-  \item[citestyle] 引用参考文献的格式,对 \opt{backend = bibtex} 选项\textbf{无效},可使用 \pkg{biblatex} 宏包支持的引用文献风格名称。
+  \item[citestyle] 标注参考文献的风格,\opt{backend = bibtex} 选项下可使用 \opt{super}(上标标注,默认)或 \opt{numbers}(普通标注)等 \pkg{natbib} 宏包带有的标注风格,\opt{backend = biblatex} 选项下可使用 \pkg{biblatex} 宏包支持的标注风格名称。
   \item[bibfile] 参考文献的数据文件,使用 \hologo{biber} 处理时要带有 \opt{bib} 后缀,默认为一个在 \opt{ref} 文件夹中以 \opt{refs.bib} 命名的文件。
   \item[\tn{printbibliography}] 两种方式\textbf{均使用}此命令打印参考文献,其中可选项仅在 \hologo{biber} 处理时有效。
 \end{optdesc}
@@ -254,7 +256,7 @@
   spacebelow = <(0.75ex plus .1ex)>
   spacepost = <(\tn{ccwd})>
 \end{syntax}
-\changes{v1.21b}{2021/01/12}{增加配置定理环境样式的选项。}
+\changes{v1.21}{2021/01/12}{增加配置定理环境样式的选项。}
 \end{function}
 
 \begin{optdesc}
@@ -286,7 +288,7 @@
   textwidth = <长度>
   includehead = <true|(false)>
 \end{syntax}
-\changes{v1.21c}{2021/01/13}{增加配置页面边距的选项。}
+\changes{v1.21}{2021/01/13}{增加配置页面边距的选项。}
 \opt{geoset} 将选项交给 \pkg{geometry} 宏包接口命令 \tn{geometry} 处理,并且选项的键值列表与之相同,支持的参数可查阅宏包帮助文档。当在此设置页面大小时,会覆盖 \opt{paper} 选项的设置。
 \begin{ctexexam}
     \ctexset
@@ -310,7 +312,7 @@
   \tn{easyfoot}\oarg{位置}\marg{内容}
 \end{syntax}
 \changes{v1.21}{2021/01/11}{修复单面文档时页眉横线消失的问题。}
-\changes{v1.21c}{2021/01/13}{增加配置页眉页脚的选项。}
+\changes{v1.21}{2021/01/13}{增加配置页眉页脚的选项。}
 \opt{hdrset} 设置的命令由 \pkg{fancyhdr} 宏包提供支持,命令 \tn{easyhead} 和 \tn{easyfoot} 的含义与 \tn{fancyhead} 和 \tn{fancyfoot} 相同,设置的是一个名为 \opt{fancy} 的页面风格。\pkg{fancyhdr} 将页眉页脚分成了左中右和奇数页(odd)、偶数页(even)共12个部分,可选参数中E、O代表偶数、奇数,L、C、R代表左、中、右部分。单面打印时,含有偶数的选项无效。
 \begin{ctexexam}
     \ctexset
@@ -336,7 +338,7 @@
   belowoffset = <(-1pc)>
   \tn{tocrule} = \oarg{引导点间距|(0.7pc)}\oarg{引导点大小|(1.2)}\marg{引导点}\oarg{页码格式}
 \end{syntax}
-\changes{v1.21c}{2021/01/13}{增加配置目录样式的选项。}
+\changes{v1.21}{2021/01/13}{增加配置目录样式的选项。}
 \opt{tocset} 将目录样式交给 \pkg{titletoc} 处理,预置了 \opt{part}、\opt{chapter}、\opt{section}、\opt{subsection} 和 \opt{lists} 五种级别的目录标题,键值列表中的...代表它们。\opt{lists} 为图片、表格和代码目录格式的级别。
 
 \opt{lolskip} 是代码目录中章之间的代码标题的距离,使用刚性间距,与\CTeX 的 \opt{lotskip} 和 \opt{lofskip} 类似,它们的值均默认0.8pc。\opt{belowoffset} 选项为目录总标题 \tn{contentsname} 后的间距补偿,一般为负值,用于抵消 \opt{format} 中设置的间距。\opt{lists} 中的 \opt{belowoffset} 意义类似,但是一般为正值,在 \opt{lolskip = 0pc} 时使用。建议 \opt{lolskip+lists/format/addvspace = -belowoffset}。
@@ -428,12 +430,12 @@
   \tn{item} <习题内容>
   \tn{end}\marg{exercise}
 \end{syntax}
-\changes{v1.23a}{2021/02/08}{增加准确的习题盒子标题目录锚点。}
+\changes{v1.23g}{2021/02/08}{增加准确的习题盒子标题目录锚点。}
 习题环境 \opt{exercise} 的标题紧接上一节编号并加入目录与页眉,当使用星号环境时不进行编号。三个可选参数中颜色为自定义或 \pkg{xcolor} 包含的颜色名称,正文编号格式与小节 \ref{sort list} 排序列表相同,标题名默认为摘要,参数只能\textbf{从右往左}省略。
 \begin{ctexexam}
     \begin{exercise}[LightYellow][1.][习题]
-    \item 习题内容
-    \item 习题内容
+      \item 习题内容
+      \item 习题内容
     \end{exercise}
 \end{ctexexam}
 \end{function}
@@ -496,17 +498,19 @@
 \end{function}
 
 \subsection{物理量}
-\begin{function}[added = 2021-01-05]{\num,\si,\SI}
+\begin{function}[added = 2021-01-05,updated = 2021-02-23]{\num,\si,\SI,\SIrange}
 \begin{syntax}
   \tn{num}\oarg{选项}\marg{数字}
   \tn{si}\oarg{选项}\marg{单位}
   \tn{SI}\oarg{选项}\marg{数字}\oarg{前缀}\marg{单位}
+  \tn{SIrange}\oarg{选项}\marg{数字1}\marg{数字2}\marg{单位}
 \end{syntax}
-\pkg{siunitx} 宏包的 \tn{num} 命令可以输出科学计数法,而 \tn{SI} 命令可用来输出带有单位的量,\tn{si} 命令支持数学模式,可以代替数学行内公式输入。
+\pkg{siunitx} 宏包的 \tn{num} 命令可以输出科学计数法,\tn{si} 命令支持数学模式,可以代替数学行内公式输入,而 \tn{SI} 命令可用来输出带有单位的量,\tn{SIrange} 可以输出带有范围和单位的量。
 \begin{ctexexam}
     \num{-21x.3e5}
     \si{mL.min^{-1}}
     \SI{5}{\mole}
+    \SIrange[unit-color = green]{1.5}{4}{kg}
 \end{ctexexam}
 \end{function}
 

Modified: branches/branch2020/Master/texmf-dist/doc/latex/easybook/refs.bib
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/easybook/refs.bib	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/easybook/refs.bib	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,31 +1,31 @@
 % Encoding: UTF-8
 
 @article{1979Prospect,
-  title={Prospect Theory: An Analysis of Decision under Risk},
-  author={ Tversky, Kahneman Amos },
-  journal={Econometrica},
-  volume={47},
-  number={2},
-  pages={263-291},
-  year={1979},
+  title = {Prospect Theory: An Analysis of Decision under Risk},
+  author = {Tversky, Kahneman Amos},
+  journal = {Econometrica},
+  volume = {47},
+  number = {2},
+  pages = {263-291},
+  year = {1979},
 }
 
 @article{2010An,
-  title={An Introduction to Sociolinguistics},
-  author={ Grabe, William  and  Wardhaugh, Ronald },
-  journal={Language in Society},
-  volume={36},
-  number={2},
-  pages={605-605},
-  year={2010},
+  title = {An Introduction to Sociolinguistics},
+  author = {Grabe, William  and  Wardhaugh, Ronald},
+  journal = {Language in Society},
+  volume = {36},
+  number = {2},
+  pages = {605-605},
+  year = {2010},
 }
 
 @article{1989The,
-  title={The structural transformation of the public sphere: an inquiry into a cstergory of burgeois society},
-  author={ Scaff, Lawrence A.  and  Habermas, Jurgen  and  Burger, Thomas  and  Nicholson, Shierry Weber },
-  journal={American Political Science Review},
-  volume={84},
-  number={3},
-  pages={967},
-  year={1989},
+  title = {The structural transformation of the public sphere: an inquiry into a cstergory of burgeois society},
+  author = {Scaff, Lawrence A.  and  Habermas, Jurgen  and  Burger, Thomas  and  Nicholson, Shierry Weber},
+  journal = {American Political Science Review},
+  volume = {84},
+  number = {3},
+  pages = {967},
+  year = {1989},
 }
\ No newline at end of file

Modified: branches/branch2020/Master/texmf-dist/doc/latex/microtype/README.md
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/microtype/README.md	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/microtype/README.md	2021-02-24 18:00:42 UTC (rev 57872)
@@ -4,7 +4,7 @@
 
 **Subliminal refinements towards typographical perfection**
 
-  (v2.8 -- 2020/12/07)
+  (v2.8a -- 2021/02/22)
 
 
 Overview
@@ -76,4 +76,4 @@
 (2) the identification string is changed.
 
 ------------------------------------------------------
-Copyright (c) 2004--2020  R Schlicht `<w.m.l at gmx.net>`
+Copyright (c) 2004--2021  R Schlicht `<w.m.l at gmx.net>`

Modified: branches/branch2020/Master/texmf-dist/doc/latex/microtype/microtype.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/microtype/test-microtype.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/microtype/test-microtype.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/microtype/test-microtype.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Modified: branches/branch2020/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/nicematrix/nicematrix-french.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -117,11 +117,20 @@
 avec une distribution TeX comme MiKTeX ou TeXlive.
 
 \bigskip
-Cette extension peut être utilisée avec |xelatex|, |lualatex| et |pdflatex| mais aussi avec le cheminement
-classique |latex|-|dvips|-|ps2pdf| (ou Adobe Distiller). \textsl{Néanmoins, le fichier nicematrix-french.tex de la présente documentation
-ne peut être compilé qu'avec XeLaTeX.}
+\emph{Remarque} : Si vous utilisez un service LaTeX via Internet (ex. :
+Overleaf) vous pouvez télécharger le fichier |nicematrix.sty| dans le dossier de
+votre projet pour bénéficier de la dernière version de
+\pkg{nicematrix}.\footnote{La dernière version de \verb|nicematrix.sty| peut
+  être téléchargée sur le serveur \textsc{svn} de TeXLive : \newline \small
+  \url{https:www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty}}
 
 \bigskip
+Cette extension peut être utilisée avec |xelatex|, |lualatex| et |pdflatex| mais
+aussi avec le cheminement classique |latex|-|dvips|-|ps2pdf| (ou Adobe
+Distiller). \textsl{Néanmoins, le fichier nicematrix-french.tex de la présente
+  documentation ne peut être compilé qu'avec XeLaTeX.}
+
+\bigskip
 Cette extension nécessite et charge les extensions \pkg{l3keys2e}, \pkg{array},
 \pkg{amsmath} et \pkg{pgfcore} ainsi que le module \pkg{shapes} de \textsc{pgf}
 (l'extension \pkg{tikz}, qui est une surcouche de \textsc{pgf}, n'est \emph{pas}
@@ -145,21 +154,6 @@
 commande est le groupe TeX courant : elles sont semi-globales).
 
 
-\bigskip
-{\bfseries \color{red} Important
-
-Depuis la version 5.0 de \pkg{nicematrix}, on doit utiliser les lettres |l|, |c| et
-|r| dans les préambules des environnements et non plus les lettres |L|, |C| et
-|R|.
-
-Pour assurer la compatibilité avec les versions précédentes, \pkg{nicematrix}
-doit être chargée avec l'option |define-L-C-R|.
-\begin{Verbatim}
-\usepackage[define-L-C-R]{nicematrix}
-\end{Verbatim}
-}
-
-
 \newpage
 
 \section{Les environnements de cette extension} 
@@ -238,7 +232,7 @@
 |cell-space-bottom-limit| qui sont similaires aux deux paramètres
 |\cellspacetoplimit| et |\cellspacebottomlimit| proposés par \pkg{cellspace}. 
 
-\colorbox{yellow!50}{\textbf{Nouveau 5.9}}\enskip Il existe aussi une clé
+\colorbox{yellow!30}{Nouveau 5.9}\enskip Il existe aussi une clé
 |cell-space-limits| pour régler simultanément les deux paramètres.
 
 La valeur initiale de ces paramètres est $0$~pt pour que les environnements de
@@ -716,9 +710,7 @@
 Dans les environnements de \pkg{nicematrix}, les filets verticaux spécifiés par
 \verb+|+ dans le préambule des environnements ne sont jamais coupés, même en cas
 de ligne incomplète ou de double filet horizontal spécifié par |\hline\hline|
-(il n'y a pas besoin d'utiliser \pkg{hhline}).\footnote{Il s'agit là du comportement depuis la version 5.1 de
-  \pkg{nicematrix}. Dans les versions précédentes, le comportement était
-  le comportement par défaut de \pkg{array}.}
+(il n'y a pas besoin d'utiliser \pkg{hhline}).
 
 \bigskip
 \begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -845,7 +837,7 @@
 
 Les environnements de \pkg{nicematrix} proposent une clé |rules/width| pour
 fixer la largeur (en fait l'épaisseur) des filets dans l'environnement. En fait,
-cette clé ne fait que fixer la valeur de |\arrayrulewidth|.
+cette clé ne fait que fixer la valeur du paramètre dimensionnel |\arrayrulewidth|.
 
 \smallskip
 On sait que \pkg{colortbl} propose la commande |\arrayrulecolor| pour spécifier
@@ -1162,7 +1154,9 @@
 L'extension \pkg{nicematrix} fournit une clé |code-before| pour du code qui sera
 exécuté avant le tracé du tableau. De nouvelles commandes y sont disponibles :
 |\cellcolor|, |\rectanglecolor|, |\rowcolor|, |\columncolor|, |\rowcolors| et
-|\chessboardcolors|.
+|\chessboardcolors|.\footnote{On pourra remarquer que, dans le
+  \verb|code-before|, des nœuds PGF/Tikz correspondant à la position des filets
+  éventuels sont également accessibles : cf. p.~\pageref{noeuds-i}.}
 \label{code-before}
 
 \medskip
@@ -1274,13 +1268,12 @@
 \bigskip
 \item La commande |\rowcolors| (avec un \emph{s}) doit son nom à la commande
 |\rowcolors| de \pkg{xcolor}\footnote{La commande |\rowcolors| de \pkg{xcolor}
-  est disponible quand \pkg{xcolor} est chargé avec l'option |table|.}. Le
-\emph{s} rappelle qu'il y a deux couleurs. Elle colorie alternativement les
-rangées avec les deux couleurs à partir de la rangée dont le numéro est donné en
-premier argument (obligatoire), comme le fait la commande |\rowcolors| de
-\pkg{xcolor}.
+  est disponible quand \pkg{xcolor} est chargé avec l'option |table|. Cett
+  option charge également l'extension \pkg{colortbl}.}. Le \emph{s} rappelle
+qu'il y a deux couleurs. Elle colorie alternativement les rangées avec les deux
+couleurs à partir de la rangée dont le numéro est donné en premier argument
+(obligatoire), comme le fait la commande |\rowcolors| de \pkg{xcolor}.
 
-\colorbox{yellow!30}{Nouveau 5.8}\enskip
 En fait, le premier argument (obligatoire) peut, plus généralement, contenir 
 une liste d'intervalles correspondant à l'ensemble des rangées sur lesquelles
 portera l'effet de |\rowcolors| (un intervalle de la forme $i$ désigne en fait
@@ -1293,20 +1286,19 @@
 correspond à l'espace colorimétrique). Les clés disponibles sont |cols|,
 |restart| et |respect-blocks|.
 \begin{itemize}
-\item \colorbox{yellow!30}{Nouveau 5.8}\enskip
-La clé |cols| décrit un ensemble de colonnes sur lesquelles portera
+\item La clé |cols| décrit un ensemble de colonnes sur lesquelles portera
 l'effet de |\rowcolors|. Cet ensemble de colonnes est une liste d'intervalles de
 la forme $i$|-|$j$.
 
-\item \colorbox{yellow!30}{Nouveau 5.8}\enskip Avec la clé |restart|, chacun
-des intervalles de rangées spécifié par le premier argument de |\rowcolors|
-recommence avec la même couleur.\footnote{Autrement, la couleur d'une rangée ne
-  dépend que de la partié de son numéro.}
+\item Avec la clé |restart|, chacun des intervalles de rangées spécifié par le
+premier argument de |\rowcolors| recommence avec la même
+couleur.\footnote{Autrement, la couleur d'une rangée ne dépend que de la parité
+  de son numéro.}
 
 
 \item Avec la clé |respect-blocks|, qui est de type booléen, les ``rangées''
 colorées alternativement peuvent s'étendre sur plusieurs rangées réelles du
-tableau pour englober les blocs (créés par la commande |\Block|).
+tableau pour englober les blocs (créés par la commande |\Block| : cf.~p.~\pageref{Block}).
 \end{itemize}
 
 
@@ -1405,7 +1397,8 @@
 
 \bigskip
 On remarquera que ces commandes sont compatibles avec les commandes de
-\pkg{booktabs} (|\toprule|, |\midrule|, |\bottomrule|, etc).
+\pkg{booktabs} (|\toprule|, |\midrule|, |\bottomrule|, etc). Néanmoins,
+l'extension \pkg{booktabs} n'est pas chargée par \pkg{nicematrix}.
 
 \medskip
 \begin{scope}
@@ -1455,9 +1448,10 @@
 \label{colortbl-like}
 
 On peut accéder aux outils de coloriage précédents avec une syntaxe proche de
-celle proposée par \pkg{colortbl}. On doit pour cela utiliser la clé
-|colortbl-like| dans l'environnement concerné.\footnote{Pour le moment, cette
-  clé n'est pas disponible dans |\NiceMatrixOptions|.}
+celle proposée par \pkg{colortbl} (même si \pkg{colortbl} n'est pas chargé). On
+doit pour cela utiliser la clé |colortbl-like| dans l'environnement
+concerné.\footnote{Pour le moment, cette clé n'est \emph{pas} disponible dans
+  |\NiceMatrixOptions|.}
 
 On a alors accès aux trois commandes suivantes :
 \begin{itemize}
@@ -1464,10 +1458,11 @@
 \item |\cellcolor| qui colorie la case courante ;
 \item |\rowcolor| à utiliser dans une case et qui colorie le reste de la rangée
 ;
-\item |\columncolor| à utiliser dans le préambule de la même manière que la
-commande éponyme de \pkg{colortbl} (néanmoins, contrairement à la commande
-|\columncolor| de \pkg{colortbl}, celle-ci peut apparaître à l'intérieur d'une
-autre commande, elle-même utilisée dans le préambule).
+\item |\columncolor| à utiliser dans le préambule du tableau de la même manière
+que la commande éponyme de \pkg{colortbl} (néanmoins, contrairement à la
+commande |\columncolor| de \pkg{colortbl}, celle de \pkg{nicematrix} peut
+apparaître à l'intérieur d'une autre commande, elle-même utilisée dans le
+préambule).
 \end{itemize}
 
 \medskip
@@ -1673,7 +1668,7 @@
 \end{pNiceMatrix}\]
 
 \medskip
-Les lignes pointillées ont été tracées avec les outils présentés p.~\pageref{Cdots}.
+Les lignes pointillées ont été tracées avec les outils qui seront présentés p.~\pageref{Cdots}.
 
 
 \bigskip
@@ -1680,11 +1675,14 @@
 Il y a plusieurs remarques à formuler.
 %
 \begin{itemize}[beginpenalty=10000]
-\item Si on utilise un environnement avec préambule explicite (c'est-à-dire
+\item Si on utilise un environnement avec préambule explicite (|{NiceTabular}|,
 |{NiceArray}| ou l'une de ses variantes), on ne doit pas mettre dans ce
 préambule de spécification de colonne pour les éventuelles première et dernière
-colonne : ce sera automatiquement (et nécessairement) une colonne |R| pour la
-première colonne et une colonne |L| pour la dernière.
+colonne : ce sera automatiquement (et nécessairement) une colonne |r| pour la
+première colonne et une colonne |l| pour la dernière.\footnote{Si on souhaite
+  une colonne extérieure avec un autre type d'alignement, on aura intérêt à
+  considérer la commande \verb|\SubMatrix| disponible dans le \verb|\CodeAfter|
+  (cf. p.~\pageref{sub-matrix}).}
 
 \item On peut se demander comment \pkg{nicematrix} détermine le nombre de rangées et de colonnes nécessaires à la
 composition de la «dernière rangée» et de la «dernière colonne».
@@ -1725,7 +1723,7 @@
                    ~emphase#code-for-first-col@ = \color{blue},
                    ~emphase#code-for-last-row@ = \color{green},
                    ~emphase#code-for-last-col@ = \color{magenta}}
-$\begin{pNiceArray}{cc|cc}[first-row,last-row=6,first-col,last-col,nullify-dots]
+$\begin{pNiceArray}{cc|cc}[first-row,last-row=5,first-col,last-col,nullify-dots]
        & C_1    & \Cdots &        & C_4    &        \\
 L_1    & a_{11} & a_{12} & a_{13} & a_{14} & L_1    \\
 \Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
@@ -1771,8 +1769,10 @@
 p.~\pageref{width}) ne s'applique pas à la «première colonne» ni à la «dernière
 colonne».
 \item Pour des raisons techniques, il n'est pas possible d'utiliser l'option de
-la commande |\\| après la «première rangée» ou avant la «dernière rangée» (le
-placement des délimiteurs serait erroné).
+la commande |\\| après la «première rangée» ou avant la «dernière rangée». Le
+placement des délimiteurs serait erroné. Pour contourner cette restriction, on
+pourra envisager d'utiliser la commande |\SubMatrix| dans le |\CodeAfter| (cf.
+p.~\pageref{sub-matrix}). 
 \end{itemize}
 
 
@@ -1785,7 +1785,7 @@
 À l'intérieur des environnements de l'extension \pkg{nicematrix}, de nouvelles
 commandes sont définies : |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|, et |\Iddots|.
 Ces commandes sont conçues pour être utilisées à la place de |\dots|, |\cdots|,
-|\vdots|, |\ddots| et |\iddots|.\footnote{La commande |\iddots|, définie dans
+|\vdots|, |\ddots| et |\iddots|.\footnote{La commande |\iddots|, définie par
   \pkg{nicematrix}, est une variante de |\ddots| avec les points allant vers le
   haut. Si \pkg{mathdots} est chargée, la version de \pkg{mathdots} est
   utilisée. Elle correspond à la commande |\adots| de \pkg{unicode-math}.}
@@ -2040,10 +2040,12 @@
 \end{pNiceMatrix}$
 
 \medskip
-Remarque : Contrairement à la commande |\hdotsfor| de \pkg{amsmath}, la commande
-|\Hdotsfor| est utilisable lorsque l'extension \pkg{colortbl} est chargée (mais
-vous risquez d'avoir des problèmes si vous utilisez |\rowcolor| sur la même
-rangée que |\Hdotsfor|).
+\emph{Remarque} : Contrairement à la commande |\hdotsfor| de \pkg{amsmath}, la
+commande |\Hdotsfor| est utilisable même lorsque l'extension
+\pkg{colortbl}\footnote{On rappelle que lorsque l'extension \pkg{xcolor} est
+  chargée avec l'option \verb|table|, l'extension \pkg{colortbl} est chargée.}
+est chargée (mais vous risquez d'avoir des problèmes si vous utilisez
+|\rowcolor| sur la même rangée que |\Hdotsfor|).
 
 \bigskip
 L'extension \pkg{nicematrix} propose aussi une commande |\Vdotsfor| similaire à
@@ -2175,9 +2177,9 @@
 \item |line-style|.
 \end{itemize}
 
-Ces options peuvent aussi être fixées avec |\NiceMatrixOptions| ou bien au
-niveau d'un environnement mais elles doivent alors être préfixées par |xdots|,
-ce qui fait que leurs noms deviennent :
+Ces options peuvent aussi être fixées avec |\NiceMatrixOptions|, comme options
+de |\CodeAfter|, ou bien au niveau d'un environnement mais elles doivent alors
+être préfixées par |xdots|, ce qui fait que leurs noms deviennent :
 %
 \begin{itemize}
 \item |xdots/color| ;
@@ -2303,11 +2305,18 @@
 \medskip
 Pour améliorer la lisibilité du code, une syntaxe alternative est proposée : on
 peut spécifier les instructions du |code-after| à la fin de l'environnement,
-après le mot-clé |\CodeAfter|.
+après le mot-clé |\CodeAfter|. Bien que ce soit un mot-clé, |\CodeAfter| accepte
+quand même un argument optionnel (entre crochets). Les clés autorisées forment
+un sous-ensemble des clés acceptées par |\NiceMatrixOptions|.
+
+\medskip
+Les utilisateurs expérimentés peuvent, en particulier, utiliser les nœuds
+PGF/Tikz créés par \pkg{nicematrix} dans le |\CodeAfter|. Ces nœuds sont décrits
+à partir de la page \pageref{PGF-nodes}.
  
 \medskip
-Deux commandes spéciales sont disponibles dans le |\CodeAfter| : |\line| et
-|\SubMatrix|. 
+Par ailleurs, deux commandes spéciales sont disponibles dans le |\CodeAfter| :
+|\line| et |\SubMatrix|. 
 
 
 \subsection{La commande \textbackslash line dans le \textbackslash CodeAfter}
@@ -2341,6 +2350,11 @@
 \end{pNiceMatrix}$
 \end{scope}
 
+\medskip
+Les options disponibles pour personnaliser les lignes pointillées créées par
+|\Cdots|, |\Vdots|, etc. peuvent aussi être passées à cette commande (cf.
+p.~\pageref{customization}). 
+
 \subsection{La commande \textbackslash SubMatrix dans le \textbackslash CodeAfter}
 
 \label{sub-matrix}
@@ -2347,8 +2361,8 @@
 
 \colorbox{yellow!50}{\textbf{Nouveau 5.10}}\enskip 
 La commande |\SubMatrix| permet de positionner des délimiteurs sur une partie du
-tableau considérée comme une sous-matrice. La commande |\SubMatrix| prend cinq
-arguments :
+tableau, partie qui est considérée comme une sous-matrice. La commande
+|\SubMatrix| prend cinq arguments :
 \begin{itemize}
 \item le premier argument est le délimiteur gauche qui peut être n'importe
 quel délimiteur extensible de LaTeX : |(|, |[|, |\{|, |\langle|, |\lgroup|,
@@ -2370,10 +2384,10 @@
 
 \medskip
 \begin{scope}
+\hfuzz=15cm
 \fvset{commandchars=\~\#\+}%
 \begin{BVerbatim}[boxwidth=11cm,baseline=c]
-\[\begin{NiceArray}{ccc~emphase#@{\hspace{1.5em}}+c}%
-   [cell-space-limits=2pt,~emphase#margin+]
+\[\begin{NiceArray}{ccc~emphase#@{\hspace{1.5em}}+c}[cell-space-limits=2pt,~emphase#margin+]
  1           & 1            & 1            & x \\
 \dfrac{1}{4} & \dfrac{1}{2} & \dfrac{1}{4} & y \\
  1           & 2            & 3            & z 
@@ -2401,7 +2415,7 @@
 clés) ;
 \item |extra-height| ajoute une quantité à la hauteur totale des délimiteurs
 (hauteur~|\ht| + profondeur |\dp|) ;
-\item |delimiters-color| permet de fixer la couleur des délimiteurs (cette clé
+\item |delimiters/color| permet de fixer la couleur des délimiteurs (cette clé
 est également disponible dans |\NiceMatrixOptions| et au niveau des
 environnements à délimiteurs ou comme option de |\CodeAfter|) ;
 \item |slim| qui est une clé booléenne : lorsqu'elle est utilisée la position
@@ -2417,6 +2431,7 @@
 
 \bigskip
 \begin{scope}
+\hfuzz=12cm
 \fvset{commandchars=\~\#\!}%
 \begin{BVerbatim}[baseline=c,boxwidth=11cm]
 $\begin{NiceArray}{cc@{\hspace{5mm}}l}[cell-space-limits=2pt]
@@ -2431,8 +2446,7 @@
 \end{NiceArray}$
 \end{BVerbatim}
 \end{scope}
-$\begin{NiceArray}{cc@{\hspace{5mm}}l}%
-   [cell-space-limits=2pt]
+$\begin{NiceArray}{cc@{\hspace{5mm}}l}[cell-space-limits=2pt]
          &   & \frac12 \\
          &      & \frac14 \\[1mm]
 a & b & \frac12a+\frac14b \\
@@ -2448,10 +2462,10 @@
 
 \medskip
 \begin{scope}
+\hfuzz=12cm
 \fvset{commandchars=\~\#\!}%
 \begin{BVerbatim}[baseline=c,boxwidth=11cm]
-$\begin{NiceArray}{cc@{\hspace{5mm}}l}%
-   [cell-space-limits=2pt]
+$\begin{NiceArray}{cc@{\hspace{5mm}}l}[cell-space-limits=2pt]
   &   & \frac12 \\
   &   & \frac14 \\[1mm]
 a & b & \frac12a+\frac14b \\
@@ -2564,29 +2578,7 @@
 \end{center}
 
 
-\begin{table}
-\setlength{\belowcaptionskip}{1ex}
-\centering
-\caption{Utilisation de \texttt{\textbackslash tabularnote}\tabularnote{On peut
-    mettre une note dans le titre.}}
-\label{t:tabularnote}
-\begin{NiceTabular}{@{}llc@{}}%
-  [notes/bottomrule, tabularnote = Un peu de texte avant les notes.]
-\toprule
-Nom & Prénom & Durée de vie \\
-\midrule
-Barrère & Bertrand &  86\\
-Nightingale\tabularnote{Souvent considérée comme la première
-  infirmière.}\tabularnote{Surnommée «la Dame à la Lampe».}
-& Florence & 90 \\
-Schœlcher & Victor & 89\tabularnote{L'appel de note déborde à droite.}\\
-Touchet & Marie & 89 \\
-Wallis & John & 87 \\
-\bottomrule
-\end{NiceTabular}
-\end{table}
 
-
 \bigskip
 \begin{itemize}
 \item La commande |\tabularnote| est en fait utilisable avant
@@ -2622,7 +2614,7 @@
 
 \begin{center}
 \fvset{commandchars=\~\#\!}
-\begin{BVerbatim}[formatcom=\small\color{gray}]
+\begin{Verbatim}[formatcom=\small\color{gray}]
 \begin{table}
 \setlength{\belowcaptionskip}{1ex}
 \centering
@@ -2645,11 +2637,35 @@
 \bottomrule
 \end{NiceTabular}
 \end{table}
-\end{BVerbatim}
+\end{Verbatim}
 \end{center}
 
+\begin{table}[hb]
+\setlength{\belowcaptionskip}{1ex}
+\centering
+\caption{Utilisation de \texttt{\textbackslash tabularnote}\tabularnote{On peut
+    mettre une note dans le titre.}}
+\label{t:tabularnote}
+\begin{NiceTabular}{@{}llc@{}}%
+  [notes/bottomrule, tabularnote = Un peu de texte avant les notes.]
+\toprule
+Nom & Prénom & Durée de vie \\
+\midrule
+Barrère & Bertrand &  86\\
+Nightingale\tabularnote{Souvent considérée comme la première
+  infirmière.}\tabularnote{Surnommée «la Dame à la Lampe».}
+& Florence & 90 \\
+Schœlcher & Victor & 89\tabularnote{L'appel de note déborde à droite.}\\
+Touchet & Marie & 89 \\
+Wallis & John & 87 \\
+\bottomrule
+\end{NiceTabular}
+\end{table}
 
 
+
+
+
 \subsection{Personnalisation des notes de tableau}
 
 
@@ -2690,6 +2706,9 @@
 \end{center}
 
 
+
+
+
 \bigskip
 On détaille maintenant ces clés.
 
@@ -3090,16 +3109,16 @@
 
 Pour les environnements avec délimiteurs (|{pNiceArray}|, |{pNiceMatrix}|,
 etc.), il est possible de changer la couleur des délimiteurs avec la clé
-|delimiters-color|. 
+|delimiters/color|. 
 
 \medskip
 \begin{BVerbatim}[boxwidth=12cm,baseline=c]
-$\begin{bNiceMatrix}[delimiters-color=red]
+$\begin{bNiceMatrix}[delimiters/color=red]
 1 & 2 \\
 3 & 4 
 \end{bNiceMatrix}$
 \end{BVerbatim}
-$\begin{bNiceMatrix}[delimiters-color=red]
+$\begin{bNiceMatrix}[delimiters/color=red]
 1 & 2 \\
 3 & 4 
 \end{bNiceMatrix}$
@@ -3136,8 +3155,9 @@
 
 \section{Utilisation de Tikz avec nicematrix}
 
-\label{name}
+\label{name}\label{PGF-nodes}
 
+
 \subsection{Les nœuds correspondant aux contenus des cases}
 
 L'extension \pkg{nicematrix} crée un nœud PGF-Tikz pour chaque case non vide
@@ -3464,14 +3484,18 @@
 
 
 
-\subsection{Les nœuds «row» et «col»}
+\subsection{Les nœuds indiquant la position des filets}
 
-L'extension \pkg{nicematrix} crée un nœud PGF-Tikz indiquant la position
-potentielle de chaque filet horizontal (avec les noms |row-|$i$) et de chaque
-filet vertical (avec les noms |col-|$j$), comme décrit sur la figure ci-dessous.
-Ces nœuds sont accessibles dans le |code-before| et dans le |\CodeAfter|.
+\label{noeuds-i}
+
+\colorbox{yellow!50}{\textbf{Nouveau 5.11}}\enskip L'extension \pkg{nicematrix}
+crée un nœud PGF-Tikz nommé simplement $i$ (précédé du préfixe habituel) à
+l'intersection du filet horizontal de numéro $i$ et du filet vertical de
+numéro~$j$ (ou plutôt la position potentielle de ces filets car ils ne sont
+peut-être pas tracés). Ces nœuds sont accessibles dans le |\CodeAfter| mais
+aussi dans le |code-before|.
 \begin{center}
-\begin{NiceTabular}{ccc}[hvlines,rules/width=1pt,rules/color=gray]
+\begin{NiceTabular}{ccc}[hvlines,rules={width=1pt,color=gray}]
 rose & tulipe & lys \\
 arum & iris & violette \\
 muguet & dahlia & souci 
@@ -3480,14 +3504,9 @@
 \begin{tikzpicture}
 \foreach \i in {1,2,3,4}
   { 
-    \fill [red] (row-\i) circle (0.5mm) ; 
-    \node [red,anchor=east] at (row-\i) {row-\i} ; 
+    \fill [red] (\i) circle (0.5mm) ; 
+    \node [red,above right] at (\i) {\i} ; 
   } 
-\foreach \j in {1,2,3,4}
-  { 
-    \fill [blue] (col-\j) circle (0.5mm) ; 
-    \node [blue,anchor=north] at (col-\j) {col-\j} ; 
-  } 
 \end{tikzpicture}
 \end{NiceTabular}
 \end{center}
@@ -3494,10 +3513,10 @@
 
 
 \bigskip
-Si on utilise Tikz (on rappelle que \pkg{nicematrix} ne charge pas Tikz par
-défaut), on peut donc accéder (dans le |code-before| et le |\CodeAfter|) à
-l'intersection du filet horizontal~$i$ et du filet vertical~$j$ avec la syntaxe
-|(row-|$i$\verb+-|col-+$j$|)|.
+Si on utilise Tikz (on rappelle que \pkg{nicematrix} ne charge pas Tikz mais
+uniquement \textsc{pgf} qui est une sous-couche de Tikz), on peut donc accéder
+(dans le |\CodeAfter| mais aussi dans le |code-before|) à l'intersection du filet
+horizontal~$i$ et du filet vertical~$j$ avec la syntaxe |(|$i$\verb+-|+$j$|)|.
 
 
 \medskip
@@ -3506,8 +3525,7 @@
   code-before = 
     { 
 ~emphase#      \tikz \draw [fill = red!15] @
-~emphase#         (row-7-|col-4) -- (row-8-|col-4) -- (row-8-|col-5) -- @
-~emphase#         (row-9-|col-5) -- (row-9-|col-6) |- cycle ; @
+~emphase#         (7-|4) -- (8-|4) -- (8-|5) -- (9-|5) -- (9-|6) |- cycle ; @
     }
 ]
 1 \\
@@ -3526,8 +3544,7 @@
   code-before = 
     { 
       \tikz \draw [fill = red!15] 
-         (row-7-|col-4) -- (row-8-|col-4) -- (row-8-|col-5) -- 
-         (row-9-|col-5) -- (row-9-|col-6) |- cycle ; 
+         (7-|4) -- (8-|4) -- (8-|5) -- (9-|5) -- (9-|6) |- cycle ;  
     }
 ]
 1 \\
@@ -3546,6 +3563,7 @@
 
 \label{node-sub-matrix}
 
+\colorbox{yellow!50}{\textbf{Nouveau 5.10}}\enskip 
 La commande |\SubMatrix| disponible dans le |\CodeAfter| a été présentée
 p.~\pageref{sub-matrix}. 
 
@@ -3616,13 +3634,11 @@
 \fvset{commandchars=\§\¤\μ}
 \begin{Verbatim}
 \ExplSyntaxOn
-\cs_new_protected:Nn \__pantigny_hatchcell:nnn
+\cs_new_protected:Nn \__pantigny_hatch:nnn
   {
     \begin { tikzpicture }
     \fill [ pattern = north~west~lines , pattern~color = #3 ]
-          ( row - #1 -| col - #2) 
-          rectangle 
-          ( row - \int_eval:n { #1 + 1 } -| col - \int_eval:n { #2 + 1 } ) ;
+    ( #1 -| #2) rectangle ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ;
     \end { tikzpicture }
   }
 
@@ -3629,26 +3645,18 @@
 \NewDocumentCommand \hatchcell { ! O { black } }
   {
     \tl_gput_right:Nx §emphase¤\g_nicematrix_code_before_tlμ
-      { 
-        \__pantigny_hatchcell:nnn
-          { \int_use:c { c at iRow } } 
-          { \int_use:c { c at jCol } }
-          { #1 }
-      }
+      { \__pantigny_hatch:nnn { \arabic { iRow } } { \arabic { jCol } } { #1 } }
   }
 \ExplSyntaxOff
 \end{Verbatim}
 \end{scope}
 
-
 \ExplSyntaxOn
-\cs_new_protected:Nn \__pantigny_hatchcell:nnn
+\cs_new_protected:Nn \__pantigny_hatch:nnn
   {
     \begin { tikzpicture }
     \fill [ pattern = north~west~lines , pattern~color = #3 ]
-          ( row - #1 -| col - #2) 
-          rectangle 
-          ( row - \int_eval:n { #1 + 1 } -| col - \int_eval:n { #2 + 1 } ) ;
+    ( #1 -| #2 ) rectangle ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ;
     \end { tikzpicture }
   }
 
@@ -3655,16 +3663,12 @@
 \NewDocumentCommand \hatchcell { ! O { black } }
   {
     \tl_gput_right:Nx \g_nicematrix_code_before_tl
-      { 
-        \__pantigny_hatchcell:nnn
-          { \int_use:c { c at iRow } } 
-          { \int_use:c { c at jCol } }
-          { #1 }
-      }
+      { \__pantigny_hatch:nnn { \arabic { iRow } } { \arabic { jCol } } { #1 } }
   }
 \ExplSyntaxOff
 
 
+
 \bigskip
 Voici un exemple d'utilisation.
 
@@ -3671,15 +3675,15 @@
 \medskip
 \begin{BVerbatim}[baseline=c,boxwidth=9cm]
 \begin{NiceTabular}{ccc}[hvlines]
-Tokyo & Paris & London \\
-Roma & ~emphase#\hatchcell[blue!30]@Oslo & Miami \\
-Los Angeles & Madrid & Roma
+Tokyo & Paris & Londres \\
+Lima & ~emphase#\hatchcell[blue!30]@Oslo & Miami \\
+Los Angeles & Madrid & Rome
 \end{NiceTabular}
 \end{BVerbatim}
 \begin{NiceTabular}{ccc}[hvlines]
-Tokyo & Paris & London \\
+Tokyo & Paris & Londres \\
 Lima & \hatchcell[blue!30]Oslo & Miami \\
-Los Angeles & Madrid & Roma
+Los Angeles & Madrid & Rome
 \end{NiceTabular}
 
 
@@ -4001,101 +4005,6 @@
 
 \subsection{Lignes en pointillés}
 
-
-Une matrice de permutation.\par\nobreak
-
-À titre d'exemple, on a augmenté la valeur du paramètre
-|xdots/shorten|.\par\nobreak
-
-
-\bigskip
-\begin{BVerbatim}[baseline=c]
-$\begin{pNiceMatrix}[~emphase#xdots/shorten=6em@]
-0       & 1 & 0 &        & \Cdots &   0    \\
-\Vdots  &   &   & \Ddots &        & \Vdots \\
-        &   &   & \Ddots &        &        \\
-        &   &   & \Ddots &        &   0    \\
-0       & 0 &   &        &        &   1    \\
-1       & 0 &   & \Cdots &        &   0    
-\end{pNiceMatrix}$
-\end{BVerbatim}
-\hspace{2.5cm}
-$\begin{pNiceMatrix}[xdots/shorten=0.6em]
-0       & 1 & 0 &        & \Cdots &   0    \\
-\Vdots  &   &   & \Ddots &        & \Vdots \\
-        &   &   & \Ddots &        &        \\
-        &   &   & \Ddots &        &   0    \\
-0       & 0 &   &        &        &   1    \\
-1       & 0 &   & \Cdots &        &   0    
-\end{pNiceMatrix}$
-
-\vspace{2cm}
-
-Un exemple avec |\Iddots|. On a augmenté encore davantage la valeur de |xdots/shorten|.\par\nobreak
-\bigskip
-\begin{BVerbatim}[baseline=c]
-$\begin{pNiceMatrix}[~emphase#xdots/shorten = 0.9em@]
-1       & \Cdots  &         & 1      \\
-\Vdots  &         &         & 0      \\
-        & ~emphase#\Iddots@ & ~emphase#\Iddots@ & \Vdots \\
-1       & 0       & \Cdots  & 0 
-\end{pNiceMatrix}$
-\end{BVerbatim}
-\hspace{4cm}
-$\begin{pNiceMatrix}[xdots/shorten = 0.9em]
-1       & \Cdots  &         & 1      \\
-\Vdots  &         &         & 0      \\
-        & \Iddots & \Iddots & \Vdots \\
-1       & 0       & \Cdots  & 0 
-\end{pNiceMatrix}$
-
-
-\vspace{2cm}
-Un exemple avec |\multicolumn|:\par\nobreak
-\bigskip
-\begin{BVerbatim}
-\begin{BNiceMatrix}[nullify-dots]
-1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\\
-1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\\
-\Cdots &  & ~emphase#\multicolumn{6}{c}{10 \text{ autres lignes}}@ & \Cdots \\
-1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10
-\end{BNiceMatrix}
-\end{BVerbatim}
-
-\bigskip
-\[\begin{BNiceMatrix}[nullify-dots]
-1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\\
-1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\\
-\Cdots &  & \multicolumn{6}{c}{10 \text{ autres lignes}} & \Cdots \\
-1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10
-\end{BNiceMatrix}\]
-
-\vspace{2cm}
-Un exemple avec |\Hdotsfor|:\par\nobreak
-
-\bigskip
-\begin{BVerbatim}[baseline=c,boxwidth=11cm]
-\begin{pNiceMatrix}[nullify-dots]
-0 & 1 & 1 & 1 & 1 & 0 \\
-0 & 1 & 1 & 1 & 1 & 0 \\
-\Vdots  & ~emphase#\Hdotsfor{4}@ & \Vdots \\
- & ~emphase#\Hdotsfor{4}@ & \\
- & ~emphase#\Hdotsfor{4}@ & \\
- & ~emphase#\Hdotsfor{4}@ & \\
-0 & 1 & 1 & 1 & 1 & 0 
-\end{pNiceMatrix}
-\end{BVerbatim}
-$\begin{pNiceMatrix}[nullify-dots]
-0 & 1 & 1 & 1 & 1 & 0 \\
-0 & 1 & 1 & 1 & 1 & 0 \\
-\Vdots  & \Hdotsfor{4} & \Vdots \\
- & \Hdotsfor{4} & \\
- & \Hdotsfor{4} & \\
- & \Hdotsfor{4} & \\
-0 & 1 & 1 & 1 & 1 & 0 
-\end{pNiceMatrix}$
-
-\vspace{2cm}
 Un exemple pour le résultant de deux polynômes :
 \par\nobreak
 \bigskip
@@ -4160,6 +4069,57 @@
 |\Ldots|, |\Cdots|, etc. On peut de ce fait tracer des lignes qui ne sont plus
 pointillées.
 
+
+
+
+\begin{Verbatim}[formatcom=\small\color{gray}]
+\NiceMatrixOptions{code-for-first-row = \scriptstyle,code-for-first-col = \scriptstyle }
+\setcounter{MaxMatrixCols}{12}
+\newcommand{\blue}{\color{blue}}
+\[\begin{pNiceMatrix}[last-row,last-col,nullify-dots,xdots/line-style={dashed,blue}]
+1& & & \Vdots & & & & \Vdots \\
+& \Ddots[line-style=standard] \\
+& & 1 \\
+\Cdots[color=blue,line-style=dashed]&   &  & \blue 0 &
+\Cdots & & & \blue 1 & & & \Cdots & \blue \leftarrow i \\
+& & & & 1 \\
+& & &\Vdots & & \Ddots[line-style=standard] & & \Vdots \\
+& & & & & & 1 \\
+\Cdots & & & \blue 1 & \Cdots & & \Cdots & \blue 0 & & & \Cdots & \blue \leftarrow j \\
+& & & & & & & & 1 \\
+& & & & & & & & & \Ddots[line-style=standard] \\
+& & & \Vdots & & & & \Vdots & & & 1 \\
+& & & \blue \overset{\uparrow}{i} & & & & \blue \overset{\uparrow}{j} \\
+\end{pNiceMatrix}\]
+\end{Verbatim}
+
+
+\begin{scope}
+\NiceMatrixOptions{code-for-first-row = \scriptstyle,code-for-first-col = \scriptstyle }
+\setcounter{MaxMatrixCols}{12}
+\newcommand{\blue}{\color{blue}}
+\[\begin{pNiceMatrix}[last-row,last-col,nullify-dots,xdots/line-style={dashed,blue}]
+1& & & \Vdots & & & & \Vdots \\
+& \Ddots[line-style=standard] \\
+& & 1 \\
+\Cdots[color=blue,line-style=dashed]&   &  & \blue 0 &
+\Cdots & & & \blue 1 & & & \Cdots & \blue \leftarrow i \\
+& & & & 1 \\
+& & &\Vdots & & \Ddots[line-style=standard] & & \Vdots \\
+& & & & & & 1 \\
+\Cdots & & & \blue 1 & \Cdots & & \Cdots & \blue 0 & & & \Cdots & \blue \leftarrow j \\
+& & & & & & & & 1 \\
+& & & & & & & & & \Ddots[line-style=standard] \\
+& & & \Vdots & & & & \Vdots & & & 1 \\
+& & & \blue \overset{\uparrow}{i} & & & & \blue \overset{\uparrow}{j} \\
+\end{pNiceMatrix}\]
+\end{scope}
+
+
+
+\interitem
+On peut même tracer des lignes continues.
+
 \begin{Verbatim}
 \NiceMatrixOptions
   {nullify-dots,code-for-first-col = \color{blue},code-for-first-col=\color{blue}}
@@ -4321,14 +4281,38 @@
 \vspace{1cm} 
 Il est possible de colorier une rangée avec |\rowcolor| dans le |code-before|
 (ou avec |\rowcolor| dans la première case de la rangée si on utilise la clé
-|colortbl-like|). Les possibilités de réglages sont néanmoins limitées. C'est
+|colortbl-like| − même si \pkg{colortbl} n'est pas chargé). 
+
+
+\begin{Verbatim}
+\begin{pNiceArray}{>{\strut}cccc}[margin, extra-margin=2pt,colortbl-like]
+  ~emphase#\rowcolor{red!15}@A_{11} & A_{12} & A_{13} & A_{14} \\
+  A_{21} & ~emphase#\rowcolor{red!15}@A_{22} & A_{23} & A_{24} \\
+  A_{31} & A_{32} & ~emphase#\rowcolor{red!15}@A_{33} & A_{34} \\
+  A_{41} & A_{42} & A_{43} & ~emphase#\rowcolor{red!15}@A_{44}  
+\end{pNiceArray}
+\end{Verbatim}
+
+
+
+\[\begin{pNiceArray}{>{\strut}cccc}[margin, extra-margin=2pt,colortbl-like]
+  \rowcolor{red!15}A_{11} & A_{12} & A_{13} & A_{14} \\
+  A_{21} & \rowcolor{red!15}A_{22} & A_{23} & A_{24} \\
+  A_{31} & A_{32} & \rowcolor{red!15}A_{33} & A_{34} \\
+  A_{41} & A_{42} & A_{43} & \rowcolor{red!15}A_{44}  
+\end{pNiceArray}\]
+
+
+\medskip
+Les possibilités de réglages sont néanmoins limitées. C'est
 pourquoi nous présentons ici une autre méthode pour surligner une rangée d'une
 matrice. 
 
 \medskip
 Cet exemple et les suivants nécessitent d'avoir chargé Tikz (\pkg{nicematrix} ne
-charge que \textsc{pgf}) ainsi que la bibliothèque Tikz |fit|, ce qui peut se
-faire avec les deux instructions suivantes dans le préambule du document :
+charge que \textsc{pgf}, qui est une sous-couche de Tikz) ainsi que la
+bibliothèque Tikz |fit|, ce qui peut se faire avec les deux instructions
+suivantes dans le préambule du document :
 
 \begin{verbatim}
 \usepackage{tikz}
@@ -4336,13 +4320,15 @@
 \end{verbatim}
 
 \medskip
-Nous créons un nœud Tikz rectangulaire qui englobe les nœuds de la
-deuxième rangée en utilisant les outils de la bibliothèque Tikz \pkg{fit}. Ce
-nœud est rempli après la construction de la matrice. Pour que l'on puisse voir
-le texte \emph{sous} le nœud, nous devons utiliser la transparence avec le
-|blend mode| égal à |multiply|.
+Nous créons un nœud Tikz rectangulaire qui englobe les nœuds de la deuxième
+rangée en utilisant les outils de la bibliothèque Tikz \pkg{fit}. Ce nœud est
+rempli après la construction de la matrice. Pour que l'on puisse voir le texte
+\emph{sous} le nœud, nous devons utiliser la transparence avec le |blend mode|
+égal à |multiply|. \textbf{Attention} : Certains lecteurs de \textsc{pdf}
+n'affichent pas la transparence.\footnote{Dans Overleaf, the lecteur de
+  \textsc{PDF} «intégré» n'affiche pas la transparence. On peut sélectionner le
+  lecteur «natif» dans ce cas-là.}
 
-
 \tikzset{highlight/.style={rectangle,
                            fill=red!15,
                            blend mode = multiply, 
@@ -4504,44 +4490,7 @@
 \end{pNiceArray}\]
 
                           
-\vspace{1cm}
 
-Dans l'exemple suivant, on utilise les «nœuds larges» pour surligner une zone de
-la matrice.\par\nobreak
-\begin{Verbatim}
-\begin{pNiceArray}{>{\strut}cccc}[create-large-nodes,margin,extra-margin=2pt]
-  A_{11} & A_{12} & A_{13} & A_{14} \\
-  A_{21} & A_{22} & A_{23} & A_{24} \\
-  A_{31} & A_{32} & A_{33} & A_{34} \\
-  A_{41} & A_{42} & A_{43} & A_{44}  
-\CodeAfter
-  \tikz \path [~emphase#name suffix = -large@,fill = red!15, blend mode = multiply]
-      (1-1.north west)
-   |- (2-2.north west)
-   |- (3-3.north west)
-   |- (4-4.north west)
-   |- (4-4.south east)
-   |- (1-1.north west) ; 
-\end{pNiceArray}
-\end{Verbatim}
-                             
-
-\[\begin{pNiceArray}{>{\strut}cccc}[create-large-nodes,margin,extra-margin=2pt]
-  A_{11} & A_{12} & A_{13} & A_{14} \\
-  A_{21} & A_{22} & A_{23} & A_{24} \\
-  A_{31} & A_{32} & A_{33} & A_{34} \\
-  A_{41} & A_{42} & A_{43} & A_{44}  
-\CodeAfter
-  \tikz \path [name suffix = -large,fill = red!15, blend mode = multiply]
-      (1-1.north west)
-   |- (2-2.north west)
-   |- (3-3.north west)
-   |- (4-4.north west)
-   |- (4-4.south east)
-   |- (1-1.north west) ; 
-\end{pNiceArray}\]
-
-
 \subsection{Utilisation directe des nœuds Tikz}
 
 Dans l'exemple suivant, on souhaite illustrer le produit mathématique de deux matrices.
@@ -4671,7 +4620,6 @@
 % Local Variables:
 % TeX-fold-mode: t
 % TeX-fold-preserve-comments: nil
-% flyspell-mode: true
 % fill-column: 80
 % End:
 

Modified: branches/branch2020/Master/texmf-dist/doc/latex/nicematrix/nicematrix.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/overlays/ChangeLog
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/overlays/ChangeLog	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/overlays/ChangeLog	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,3 +1,14 @@
+2021-02-23:
+ * "\alertsoff" command for switching alerts off
+ * bump version to 2.12
+
+2021-02-22:
+ * "\overlaysoff" command for typesetting the last overlay only
+ * bump version to 2.11
+
+2018-01-15:
+ * bug fix for "tabular"-style environments
+
 2017-12-21:
  * support the "graphics" package in addition to the "graphicx" package
  * bump version to 2.10

Modified: branches/branch2020/Master/texmf-dist/doc/latex/overlays/README
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/overlays/README	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/overlays/README	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,7 +1,7 @@
-The "overlays" LaTeX package (version 2.10)
+The "overlays" LaTeX package (version 2.12)
 -------------------------------------------
 
-The "overlay" package allows to write presentations with dynamic slides. It does
+The "overlays" package allows to write presentations with dynamic slides. It does
 not presuppose any specific document class. Rather, it is a lightweight
 alternative to full-fledged presentation classes like "beamer".
 

Modified: branches/branch2020/Master/texmf-dist/doc/latex/overlays/overlays.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/overlays/overlays.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/overlays/overlays.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/overlays/overlays.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -9,7 +9,7 @@
 \begin{document}
 \title{\textsf{overlays} -- incremental slides}
 \author{Andreas Nolda}
-\date{2017/12/21 (v.\,2.10)}
+\date{2021/02/23 (v.\,2.12)}
 \maketitle
 
 \noindent The \textsf{overlay} package allows to write presentations with
@@ -91,6 +91,13 @@
 The |\savecountersbetweenoverlays| and |\saveseriesbetweenoverlays| commands
 are typically used in the preamble.
 
+\DescribeMacro{\overlaysoff}
+\DescribeMacro{\alertsoff}
+Use the |\overlaysoff| command in the preamble in order to switch overlay
+processing off, effectively typesetting only the last overlay of each
+incremental slide. In addition, highlights in |alert| color can be switched off
+by means of the |\alertsoff| command.
+
 \section{Known limitations}
 
 The |\alert|, |\visible|, and |\only| commands must not contain verbatim

Modified: branches/branch2020/Master/texmf-dist/doc/latex/overlays/sample.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/overlays/sample.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/overlays/sample.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/overlays/sample.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -32,9 +32,9 @@
 {\Large \textbf{The \textrm{overlays} package} \\
 \textit{A sample presentation}} \\[\baselineskip]
 Andreas Nolda \\
-\url{http://andreas.nolda.org}}\vfill
-{\small Version 2.10 \\
-21 December 2017}
+\url{https://andreas.nolda.org}}\vfill
+{\small Version 2.12 \\
+23 February 2021}
 \clearpage
 
 \begin{fragileoverlays}{6}
@@ -194,6 +194,22 @@
 \clearpage
 
 \begin{overlays}{3}
+\subsubsection*{Non-interactive versions}
+Overlay processing can be switched off by means of the command
+\alert{1}{\texttt{\textbackslash{}overlaysoff}}. If used in the preamble, this
+command typesets only the last overlay of each incremental slide in the
+presentation.
+
+\visible{2-}{Similarly, the command
+\alert{2}{\texttt{\textbackslash{}alertsoff}} removes highlights in
+\texttt{alert} color.}
+
+\visible{3}{Both commands may be useful for non-interactive versions of a
+presentation, such as a presentation provided as a download.}
+\end{overlays}
+\clearpage
+
+\begin{overlays}{3}
 \subsubsection*{Credits}
 The code of the \textrm{overlays} package is inspired by Matthias Meister's
 \href{http://www.ctan.org/pkg/present}{\textrm{present} package}.

Modified: branches/branch2020/Master/texmf-dist/doc/latex/spath3/calligraphy.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/spath3/knots.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/spath3/spath3.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/spath3/spath3.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/spath3/spath3.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/spath3/spath3.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -56,6 +56,8 @@
 
   \maketitle
 
+\tableofcontents
+
   \section{Introduction}
 
   The \texttt{spath3} package was originally designed as a low-level package for manipulating the \emph{soft paths} defined by PGF/TikZ.
@@ -124,61 +126,63 @@
 In the second, the clone is global (the original need not be).
 \end{function}
 
-\begin{function}{restore, restore reverse}
+\begin{function}{use}
 \begin{syntax}
-|restore=|\meta{name}
-|restore reverse=|\meta{name}
+|use=|\meta{name}
+|use=|\marg{name, options}
 \end{syntax}
 
-Restores a previously saved soft path to the current path.
-The \Verb+reverse+ version reverses the soft path first.
-This happens immediately so can be issued in the options to the main command and then the path can be extended with normal drawing commands.
-Any keys that affect the soft path directly should be applied \emph{before} this one.
+This uses a previously saved soft path at the current juncture in the path declaration.
+If before the path has begun, it is the initial part of the new path.
+If during the path construction then it is stuck in at the current place.
+Note that any keys that affect the soft path directly should be applied \emph{before} this one.
 
+The path can be modified first by using the second form -- note that as far as the \Verb+use+ key is concerned, the whole thing is a single argument.
+The options is a comma separated list and can include:
+%
+\begin{itemize}
+\item |reverse| reverses the inserted path first.
+\item |weld|, |no weld| determines whether to weld the inserted path to the current path.
+Welding means that the |move to| at the start of the inserted path is removed.
+Note that this doesn't \emph{move} the inserted path so this will usually modify the first segment of the inserted path, possibly in unexpected ways.
+\item |move|, |no move| determines whether the inserted path is translated so that it starts where the current path ends.
+\item |transform=|\marg{transformations} applies the specified transformations to the inserted path.
+See the |transform| key in Section~\ref{sec:transform}
+\item Any other key is taken as the name of the path (so it doesn't have to be specified first) with the last one winning.
+\end{itemize}
+
 One thing should be noted about transformations.
 By the time a soft path is built, all available transformations have been applied.
 This means that when re-inserting a soft path back into a high level command (such as |\draw|), the effect of existing transformations might produce some confusing effects.
 When restoring a path then the library tries to set up various internals of TikZ correctly, but there may be some things I've overlooked or not accounted for particularly with regard to existing transformations; if you spot anything working oddly then please report it to me.
 
-Restoring a path also sets things right for positioning nodes along the path.
+In particular, restoring a path should sets things right for positioning nodes along the path.
 Using the \Verb+pos=D+ key on a node positions that node at a particular point on the path.
 Exactly how the parameter is interpreted is the same as for the \Verb+spath+ coordinate system described in Section~\ref{sec:coordinates}.
 \end{function}
 
 \begin{function}{
+  restore,
+  restore reverse
+  insert,
+  insert reverse,
   append,
   append reverse,
   append no move,
   append reverse no move
 }
-\begin{syntax}
-|append=|\meta{name}
-|append reverse=|\meta{name}
-|append no move=|\meta{name}
-|append reverse no move=|\meta{name}
-\end{syntax}
 
-This inserts a soft path, or its reverse, into the path at the current point, it is therefore more suited to being used part way through a path construction.
-In a sense, it is a little like a \texttt{pic} in that it enables the user to construct a path segment early to be reused at various places.
+These are all aliases to various versions of \Verb+use+ (they originally existed as separate code before I united them all as variants of \Verb+use+).
+The equivalences are:
 
-The path is \emph{welded} on to the current path, meaning that the intervening \Verb+move+ is removed.
-This is particularly useful for creating filled regions.
-The first two versions translate the path so that it starts at the last point on the existing path, the second two versions don't do this translation (the intention being that in such a case the translation is omitted because it is \emph{unnecessary} rather than simply not wanted because the effect of removing the intervening move will adjust the initial segment of the appended path otherwise).
-
-As with restoring a path, the last point and node positioning machinery is established.
-The positioning is relative to the appended part of the path, not the full path.
+\begin{itemize}
+\item |restore| and |insert| are aliases for |use|.
+\item |append| sets the |move| and |weld| keys.
+\item |append no move| just sets the |weld| key.
+\item |reverse| sets the |reverse| key.
+\end{itemize}
 \end{function}
 
-\begin{function}{insert, insert reverse}
-\begin{syntax}
-|insert=|\meta{name}
-|insert reverse=|\meta{name}
-\end{syntax}
-
-Like \Verb+append+ except that it doesn't remove the intervening \Verb+move+ and doesn't translate the inserted path.
-The \Verb+reverse+ version reverses the path first.
-\end{function}
-
 \begin{function}{to}
 \begin{syntax}
 |to=|\marg{name}
@@ -191,6 +195,7 @@
 
 
 \subsection{Transformation Routines}
+\label{sec:transform}
 
 The following keys all apply some sort of transformation to the soft path.
 They do not render the path, but simply adjust it.
@@ -236,41 +241,7 @@
 As with the \Verb+to+ path construction and the \Verb+splice+ method, this won't work if the path ends very close to where it starts.
 \end{function}
 
-\begin{function}{splice, splice global}
-\begin{syntax}
-|splice=|\marg{initial path}\marg{splice path}\marg{final path}
-|splice globally=|\marg{initial path}\marg{splice path}\marg{final path}
-\end{syntax}
 
-This splices the middle path into the gap between the initial and final paths.
-The middle path is transformed to fit (don't try this with a path whose starting and ending points are close together) and the paths are joined so that the last component of the initial path and the first component of the splice path become a single component, and similarly at the other end.
-\end{function}
-
-\begin{function}{join components with, join components globally with}
-\begin{syntax}
-|join components with=|\marg{path}\marg{splice path}
-|join components globally with=|\marg{path}\marg{splice path}
-\end{syntax}
-
-This inserts the |splice path| in the gaps between components of |path|.
-A \emph{spot weld} is performed first to join any components where the end of one is the start of the next.
-The result is a single component path.
-This does \emph{not} close the resulting path, for that see the key |close with|.
-\end{function}
-
-\begin{function}{close, close globally, close with, close globally with}
-\begin{syntax}
-|close=|\marg{path}
-|close globally=|\marg{path}
-|close with=|\marg{path}\marg{splice path}
-|close globally with=|\marg{path}\marg{splice path}
-\end{syntax}
-
-These all close the last component of the given path.
-The first two will insert a line segment if the initial and final points of the component are not sufficiently close.
-The latter two allow you to specify another path to insert.
-\end{function}
-
 \subsection{Intersection Routines}
 
 To use these features you need to use the \texttt{intersections} library.
@@ -317,6 +288,20 @@
 This inserts breaks into a pair of paths at their mutual intersections.
 \end{function}
 
+\begin{function}{
+  replace lines,
+  replace lines globally
+}
+\begin{syntax}
+|replace lines=|\meta{path}
+|replace lines globally=|\meta{path}
+\end{syntax}
+
+The PGF intersection routines have difficulties with parallel, or near parallel, lines.
+One way to counter this is to replace all line segments by ``curves''.
+This is done so that the parametrisation of the curve matches that of the line segment that it is replacing.
+\end{function}
+
 \subsection{Working with Components}
 
 \begin{function}{
@@ -335,7 +320,7 @@
 
 The macro consists of a comma separated list of names of the components (the actual names used are of the form \Verb+anonymous_N+).
 To access an individual component, use the command \Verb+\getComponentOf+.
-This can be used directly in place of a path name in any other key, such as \Verb+restore+, (it is just the \LaTeX3 command \Verb+\clist_item:Nn+).
+This can be used directly in place of a path name in any other key, such as \Verb+use+, (it is just the \LaTeX3 command \Verb+\clist_item:Nn+).
 
 Note that these are \emph{copies} of the components of the original path.
 Changing a component doesn't update the original path.
@@ -365,11 +350,14 @@
 }
 \begin{syntax}
 |insert gaps after components=|\marg{path}\marg{gap}\marg{components}
+|insert gaps after components=|\marg{path}\marg{gap}
 |insert gaps globally after components=|\marg{path}\marg{gap}\marg{components}
+|insert gaps globally after components=|\marg{path}\marg{gap}
 \end{syntax}
 
 This inserts a gap between components of a path by shortening the end of the specified component and start of the next one.
 The list of components is passed through a |\foreach| loop so that syntax like |2,4,...,16| can be used.
+If the list of components is not given the gaps are inserted between all components.
 \end{function}
 
 \begin{function}{
@@ -386,6 +374,31 @@
 If the component is the first one then it is joined to the last component.
 \end{function}
 
+\begin{function}{join components with, join components globally with, join components upright with, join components globally upright with}
+\begin{syntax}
+|join components with=|\marg{path}\marg{splice path}
+|join components with=|\marg{path}\marg{splice path}\marg{list}
+|join components upright with=|\marg{path}\marg{splice path}
+|join components upright with=|\marg{path}\marg{splice path}\marg{list}
+|join components globally with=|\marg{path}\marg{splice path}
+|join components globally with=|\marg{path}\marg{splice path}\marg{list}
+|join components globally upright with=|\marg{path}\marg{splice path}
+|join components globally upright with=|\marg{path}\marg{splice path}\marg{list}
+\end{syntax}
+
+This inserts the |splice path| in the gaps between components of |path| specified by a comma separated list.
+The splice is inserted between each specified component and the next one.
+If the \marg{list} is not given (or is empty) then the splice is inserted between every component except that a \emph{spot weld} is performed first to join any components where the end of one is the start of the next.
+The spot weld is only performed if the list of components is empty.
+
+This does \emph{not} close the resulting path, even if the last component is specified in the list, for that see the key |close with|.
+
+Note that because there is an optional third argument to this key, the second argument must always be enclosed in braces unless it is a single token.
+
+The |upright| versions do a little test to see if the gap is oriented upside-down and if so then they insert the reflection of the splice path.
+\end{function}
+
+
 \begin{function}{
   spot weld,
   spot weld globally
@@ -423,6 +436,31 @@
 As with other list routines, the list is parsed via |foreach| first.
 \end{function}
 
+
+\begin{function}{close, close globally, close with, close globally with}
+\begin{syntax}
+|close=|\marg{path}
+|close globally=|\marg{path}
+|close with=|\marg{path}\marg{splice path}
+|close globally with=|\marg{path}\marg{splice path}
+\end{syntax}
+
+These all close the last component of the given path.
+The first two will insert a line segment if the initial and final points of the component are not sufficiently close.
+The latter two allow you to specify another path to insert.
+\end{function}
+
+\begin{function}{splice, splice global}
+\begin{syntax}
+|splice=|\marg{initial path}\marg{splice path}\marg{final path}
+|splice globally=|\marg{initial path}\marg{splice path}\marg{final path}
+\end{syntax}
+
+This splices the middle path into the gap between the initial and final paths.
+The middle path is transformed to fit (don't try this with a path whose starting and ending points are close together) and the paths are joined so that the last component of the initial path and the first component of the splice path become a single component, and similarly at the other end.
+\end{function}
+
+
 \subsection{Shortening Paths}
 
 \begin{function}{
@@ -473,8 +511,8 @@
 \subsection{Knots}
 
 \begin{function}{
+  knot,
   global knot,
-  knot,
   draft mode
 }
 \begin{syntax}
@@ -544,7 +582,7 @@
 \section{Examples}
 
 \begin{enumerate}
-\item Saving, restoring, inserting, and appending.
+\item Saving and re-using.
 
 \begin{example}
 \begin{tikzpicture}
@@ -554,10 +592,10 @@
   \node[above left] at (spath cs:rpath 0.\k) {\(0.\k\)};
 }
 \fill[green] (2,2) circle[radius=3pt];
-\draw[blue, spath/transform={rpath}{shift={(2,2)}}, spath/restore=rpath] node[right] {transform};
-\draw[orange] (3,0) [spath/insert=rpath] node[right] {insert};
+\draw[blue, spath/transform={rpath}{shift={(2,2)}}, spath/use=rpath] node[right] {transform};
+\draw[orange] (3,0) [spath/use={rpath, move}] node[right] {moving};
 \draw[red] (3,-1) -- +(0,2) [spath/append=rpath] node[above] {append};
-\draw[spath/restore=rpath] node[right] {restore};
+\draw[spath/use=rpath] node[right] {use};
 \end{tikzpicture}
 \end{example}
 
@@ -570,8 +608,8 @@
   green,
   draw=black,
   ultra thick,
-  spath/restore=apath
-] -- ++(0,-4) [spath/append reverse=apath] -- cycle;
+  spath/use=apath
+] -- ++(0,-4) [spath/use={apath, reverse, move, weld}] -- cycle;
 \end{tikzpicture}
 \end{example}
 
@@ -583,7 +621,7 @@
 \draw[rotate=45, xscale=2, yscale=3, ultra thick, red] (0,0) rectangle +(1,1);
 \draw[
   spath/transform={tpath}{rotate=45, xscale=2, yscale=3},
-  spath/restore={tpath}];
+  spath/use={tpath}];
 \end{tikzpicture}
 \end{example}
 
@@ -615,7 +653,7 @@
 (7,1) circle[radius=3pt]
 ;
 
-\draw[spath/restore=a];
+\draw[spath/use=a];
 \end{tikzpicture}
 \end{example}
 
@@ -653,9 +691,9 @@
   shorten at end={apath}{7pt},
   shorten at start={apath}{9pt},
   translate={apath}{0pt}{1pt},
-  restore=apath,
+  use=apath,
 ];
-\draw (0,0) circle[radius=9pt] [spath/insert=apath] circle[radius=7pt];
+\draw (0,0) circle[radius=9pt] [spath/use=apath] circle[radius=7pt];
 \end{tikzpicture}
 \end{example}
 
@@ -670,9 +708,9 @@
   shorten at end={apath}{7pt},
   shorten at start={apath}{9pt},
   translate={apath}{0pt}{1pt},
-  restore=apath,
+  use=apath,
 ];
-\draw (0,0) circle[radius=9pt] [spath/insert=apath] circle[radius=7pt];
+\draw (0,0) circle[radius=9pt] [spath/use=apath] circle[radius=7pt];
 \end{tikzpicture}
 \end{example}
 
@@ -699,7 +737,7 @@
     path \k/.try,
     spath/.cd,
     translate=\cpt{0pt}{\k pt},
-    restore=\cpt,
+    use=\cpt,
   ] +(0,3pt) -- +(0,-3pt);
   \node[text=red] at (spath cs:{\cpt} .5) {\(\k\)};
 }
@@ -734,12 +772,12 @@
 }
 
 \foreach[count=\k] \cpt in \pathAcomponents {
-  \draw[spath/restore=\cpt,-Circle];
+  \draw[spath/use=\cpt,-Circle];
   \node[fill=white, fill opacity=.5, circle, text opacity=1] at (spath cs:{\cpt} .5) {\(\k\)};
 }
 
 \foreach[count=\k] \cpt in \pathBcomponents {
-  \draw[spath/restore=\cpt,-Circle];
+  \draw[spath/use=\cpt,-Circle];
   \node[fill=white, fill opacity=.5, circle, text opacity=1] at (spath cs:{\cpt} .5) {\(\k\)};
 }
 \end{tikzpicture}
@@ -766,12 +804,12 @@
 \fill[pattern=bricks, pattern color=white] (-.5,-.5) rectangle (8.5,1.5);
 
 \foreach[count=\k] \cpt in \pathAcomponents {
-  \draw[blue, line width=2pt,spath/restore=\cpt];
+  \draw[blue, line width=2pt,spath/use=\cpt];
   \node[fill=cyan, fill opacity=.5, circle, text opacity=1] at (spath cs:{\cpt} .3) {\(\k\)};
 }
 
 \foreach[count=\k] \cpt in \pathBcomponents {
-  \draw[green, line width=2pt,spath/restore=\cpt];
+  \draw[green, line width=2pt,spath/use=\cpt];
   \node[fill=green!50, fill opacity=.5, circle, text opacity=1] at (spath cs:{\cpt} .3) {\(\k\)};
 }
 \end{tikzpicture}
@@ -807,7 +845,7 @@
 }
 
 \foreach[count=\k] \cpt in \pathcomponents {
-  \draw[spath/restore=\cpt,-|];
+  \draw[spath/use=\cpt,-|];
   \node[fill=white, fill opacity=.5, circle, text opacity=1] at (spath cs:{\cpt} .5) {\(\k\)};
 }
 \end{tikzpicture}
@@ -826,7 +864,7 @@
 }
 
 \foreach[count=\k] \cpt in \pathcomponents {
-  \draw[blue, line width=2pt,spath/restore=\cpt];
+  \draw[blue, line width=2pt,spath/use=\cpt];
 }
 \end{tikzpicture}
 \end{example}
@@ -843,5 +881,65 @@
 \tikzset{spath/knot={trefoil}{8pt}{1,3,5}}
 \end{tikzpicture}
 \end{example}
+
+\item Here's how to mark intersections of paths with ``bridges''.
+\begin{example}
+\begin{tikzpicture}
+\coordinate (a) at (-1,0.5);
+\coordinate (b) at (8,0.5);
+\coordinate (c) at (3,-0.5);
+\path[spath/save=sine]
+(-1.57,-1)
+cos ++(1.57,1)
+sin ++(1.57,1)
+cos ++(1.57,-1)
+sin ++(1.57,-1)
+cos ++(1.57,1)
+sin ++(1.57,1);
+\path[spath/save=over] (a) -- (c) |- (b);
+
+\path[spath/save=arc] (0,0) arc[radius=1cm, start angle=180, delta angle=-180];
+
+\tikzset{
+  spath/split at intersections with={over}{sine},
+  spath/insert gaps after components={over}{8pt},
+  spath/join components upright with={over}{arc},
+  spath/split at intersections with={sine}{over},
+  spath/insert gaps after components={sine}{4pt},
+}
+
+\draw[spath/use=sine];
+\draw[spath/use=over];
+\end{tikzpicture}
+\end{example}
+
+\item If there are lots of paths like the previous example, here's a convenient style to put them together.
+\begin{example}
+\tikzset{
+  bridging path/.initial=arc,
+  bridging span/.initial=8pt,
+  bridging gap/.initial=4pt,
+  bridge/.style 2 args={
+    spath/split at intersections with={#1}{#2},
+    spath/insert gaps after components={#1}{\pgfkeysvalueof{/tikz/bridging span}},
+    spath/join components upright with={#1}{\pgfkeysvalueof{/tikz/bridging path}},
+    spath/split at intersections with={#2}{#1},
+    spath/insert gaps after components={#2}{\pgfkeysvalueof{/tikz/bridging gap}},
+  }
+}
+
+% If used in the preamble, this needs surrounding in \AtBeginDocument
+%\AtBeginDocument{
+\tikz[overlay] \path[spath/save=arc] (0,0) arc[radius=1cm, start angle=180, delta angle=-180];
+%}
+\begin{tikzpicture}
+\path[spath/save=over] (0,0) -| ++(1,1) -| ++(-1,1) -| ++(1,1) -| ++(-1,1);
+\path[spath/save=under] (.5,-.5) -- ++(0,4);
+\tikzset{bridge={over}{under}}
+\draw[spath/use=over];
+\draw[spath/use=under];
+\end{tikzpicture}
+\end{example}
+
 \end{enumerate}
   \end{document}

Modified: branches/branch2020/Master/texmf-dist/doc/latex/spath3/spath3_code.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/README.md
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/README.md	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/README.md	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,6 +1,6 @@
 #tagpdf — A package to create tagged pdf
-Packageversion: 0.61 
-Packagedate: 2019/07/02
+Packageversion: 0.80 
+Packagedate: 2021/02/23
 Author: Ulrike Fischer
 
 ## License

Copied: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-AF-file.pdf (from rev 57871, trunk/Master/texmf-dist/doc/latex/tagpdf/ex-AF-file.pdf)
===================================================================
(Binary files differ)

Copied: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-AF-file.tex (from rev 57871, trunk/Master/texmf-dist/doc/latex/tagpdf/ex-AF-file.tex)
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-AF-file.tex	                        (rev 0)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-AF-file.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -0,0 +1,63 @@
+% !Mode:: "TeX:DE:UTF-8:Main"
+\RequirePackage{pdfmanagement-testphase}
+\DeclareDocumentMetadata{
+   pdfversion=1.7
+  ,lang=de-DE
+  ,uncompress}
+\documentclass{article}
+\usepackage{tagpdf}
+
+\tagpdfsetup{tabsorder=structure,
+             activate-all}
+\tagpdfifpdftexT
+ {
+  \usepackage[T1]{fontenc}
+ }
+
+\tagpdfifluatexT
+ {
+  \usepackage{fontspec}
+  \usepackage{unicode-math}
+  \usepackage{luacode}
+  \newfontface\zerowidthfont{freeserif}
+ }
+
+\usepackage{graphicx}
+\begin{filecontents}{example-input-file.tex}
+Additional info!
+\end{filecontents}
+
+\begin{document}
+\pagestyle{empty}
+
+\tagstructbegin{tag=Document}
+
+\ExplSyntaxOn
+
+\pdffile_embed_file:nnn{example-input-file.tex}{}{tag/AFtest}
+
+%change AFRelationship
+\pdfdict_put:nnn {l_pdffile/FileSpec} {AFRelationship}{/Supplement}
+
+\ExplSyntaxOff
+\def\testtext{Bär with teh shirt}
+\tagstructbegin{tag=P,AFinline-o=\testtext}
+  \tagmcbegin{tag=P}
+   Ein Satz ohne Umlaute.
+  \tagmcend
+\tagstructend
+
+\tagstructbegin{tag=P,AFinline=Duck}
+  \tagmcbegin{tag=P}
+   Ein Satz ohne Umlaute.
+  \tagmcend
+\tagstructend
+
+\tagstructbegin{tag=P,AF=tag/AFtest}
+  \tagmcbegin{tag=P}
+   Ein Satz ohne Umlaute.
+  \tagmcend
+\tagstructend
+
+\tagstructend
+\end{document} 
\ No newline at end of file

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-alt-actualtext-luatex.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-alt-actualtext.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-alt-actualtext.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-alt-actualtext.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,22 +1,20 @@
 % !Mode:: "TeX:DE:UTF-8:Main"
-%\input{regression-test}
+
+\RequirePackage{pdfmanagement-testphase}
+\DeclareDocumentMetadata{pdfversion=1.7,lang=de-DE}
+
 \documentclass{article}
+
 \usepackage{tagpdf}
 \tagpdfsetup{tabsorder=structure,
              uncompress,activate-all}
 \tagpdfifpdftexT
  {
-  %set language / can also be done with hyperref
-  \pdfcatalog{/Lang (de-DE)}
   \usepackage[T1]{fontenc}
-  \input glyphtounicode
-  \pdfgentounicode=1
  }
 
 \tagpdfifluatexT
  {
-  %set language / can also be done with hyperref
-  \pdfextension catalog{/Lang (de-DE)}
   \usepackage{fontspec}
   \usepackage{unicode-math}
   \usepackage{luacode}
@@ -34,7 +32,7 @@
 \tagstructbegin{tag=Document}
 
 %This isn't read by voice software
-Etwas unmarkierter Text. 
+Etwas unmarkierter Text.
 
 %This read ok by voice software
 \tagstructbegin{tag=P}
@@ -46,12 +44,12 @@
 %This read ok by  nvda, but adobe has difficulties with the umlauts
 \tagstructbegin{tag=P}
   \tagmcbegin{tag=P}
-   Grüße an die Welt und die öde Wüste. 
+   Grüße an die Welt und die öde Wüste.
   \tagmcend
 \tagstructend
 
-\newpage 
-% alttext is read, 
+\newpage
+% alttext is read,
 % actualtext copy & pasted
 \tagstructbegin{tag=P,alttext=Dies ist ein Text,actualtext=Copy}
   \tagmcbegin{tag=P}
@@ -59,7 +57,7 @@
   \tagmcend
 \tagstructend
 
-%alttext is read, 
+%alttext is read,
 %actualtext copy & pasted
 \tagstructbegin{tag=P}
  \tagmcbegin{tag=P,alttext=Dies ist ein zweiter Text,actualtext=Copy}
@@ -68,7 +66,7 @@
 \tagstructend
 
 
-%nvda: alttext of structure is read 
+%nvda: alttext of structure is read
 %adobe: alttext of inner mc is read
 % result of copy & paste of this page in adobe reader:
 % why twice??????
@@ -89,7 +87,7 @@
 % content is more or less ignored. This is not against the documentation:
 % Formula is explicitly describes as an "illustration", something with a content
 % which can not be read directly.
-% But it is a problem that nvda ignores it even with an alt text. 
+% But it is a problem that nvda ignores it even with an alt text.
 
 %test of Formula tag + alttext in the mc
 %pdflatex
@@ -96,7 +94,7 @@
 %nvda: content is ignored
 %adobe: reads the alt text but without {} and ()
 
-%luatex (unicode-math): 
+%luatex (unicode-math):
 % nvda: doesn't read
 %adobe: doesn't read  (warning "empty page")
 
@@ -142,8 +140,8 @@
  \tagmcend
 \tagstructend
 
-%pdftex 
-% sum is read as "pi" 
+%pdftex
+% sum is read as "pi"
 %luatex
 %adobe: almost nothing read (only 1 and =)
 %nvda: similar, obviously both have problems with the unicode math symbols

Copied: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-attribute-luatex.pdf (from rev 57871, trunk/Master/texmf-dist/doc/latex/tagpdf/ex-attribute-luatex.pdf)
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-attribute.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-attribute.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-attribute.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-attribute.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,14 +1,16 @@
 % !Mode:: "TeX:DE:UTF-8:Main"
+\RequirePackage{pdfmanagement-testphase}
+\DeclareDocumentMetadata{uncompress,lang=de_DE}
 \documentclass{scrartcl}
 \usepackage[english]{babel}
 \usepackage{tagpdf}
-\tagpdfsetup{activate-all,uncompress}
+\tagpdfsetup{activate-all}
 
-\ifluatex\else
-\pdfcatalog{/Lang (en-UK)}
-\pdfinfo {/Title (Title)}
-\fi
+\ExplSyntaxOn
+\pdfmanagement_add:nnn{Info}{Title}{(Title)}
+\ExplSyntaxOff
 
+
 \tagpdfsetup
 {
  newattribute = {TH-col} { <</Owner /Table /Scope /Column>> },

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-formula-problem-luatex.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-formula-problem.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-formula-problem.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-formula-problem.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,21 +1,21 @@
 % !Mode:: "TeX:DE:UTF-8:Main"
+\RequirePackage{pdfmanagement-testphase}
+\DeclareDocumentMetadata{
+   pdfversion=1.7
+  ,lang=de-DE
+  ,uncompress}
 \documentclass{article}
 \usepackage{tagpdf}
+
 \tagpdfsetup{tabsorder=structure,
-             uncompress,activate-all}
+             activate-all}
 \tagpdfifpdftexT
  {
-  %set language / can also be done with hyperref
-  \pdfcatalog{/Lang (de-DE)}
   \usepackage[T1]{fontenc}
-  \input glyphtounicode
-  \pdfgentounicode=1
  }
 
 \tagpdfifluatexT
  {
-  %set language / can also be done with hyperref
-  \pdfextension catalog{/Lang (de-DE)}
   \usepackage{fontspec}
   \usepackage{unicode-math}
   \usepackage{luacode}
@@ -56,4 +56,4 @@
 \tagstructend
 
 \tagstructend
-\end{document}
\ No newline at end of file
+\end{document} 
\ No newline at end of file

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-mc-manual-para-split.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-mc-manual-para-split.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-mc-manual-para-split.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-mc-manual-para-split.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -3,9 +3,11 @@
 % !!!!!!!!!!!!!!!!!
 % This test files shows how to add a manual page split.
 % It *only* handles the mc-step in the page stream.
-% Structure commands and all the related management are not 
+% Structure commands and all the related management are not
 % involved. So it also only uses activate-mc.
 
+\RequirePackage{pdfmanagement-testphase}
+\DeclareDocumentMetadata{pdfversion=1.7,uncompress}
 \documentclass{book}
 \usepackage[english,ngerman]{babel}
 \usepackage{tagpdf}
@@ -30,7 +32,7 @@
             }
 \newsavebox\mybox
 
-\usepackage{lipsum}\textheight3cm
+\textheight3cm
 \usepackage{fancyhdr}
 \pagestyle{fancy}
 \fancyhf{}

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-patch-list-luatex.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-patch-list.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-patch-list.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-patch-list.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -6,8 +6,10 @@
 %It uses a command to end \item (\meti). It is perhaps possible to hide this command
 % inside \item/end{list}, but with nested list it is not so easy.
 
-% Pay attention to casing. Li/LI, Lbody/Lbody are different. 
+% Pay attention to casing. Li/LI, Lbody/Lbody are different.
 %no page break involved. So the example works in lua and generic mode
+\RequirePackage{pdfmanagement-testphase}
+\DeclareDocumentMetadata{pdfversion=1.7,lang=en-UK,uncompress}
 
 \documentclass{scrbook}
 \usepackage[english]{babel}
@@ -27,7 +29,6 @@
 
 \tagpdfsetup{tabsorder=structure,
              activate-all,
-             uncompress
              }
 
 \usepackage{lipsum}%\textheight3cm
@@ -36,7 +37,7 @@
 
 \makeatletter
 
-\newcommand\uftag at enit@format at preset[1]{%
+\newcommand\tag at enit@format at preset[1]{%
   \tagstructbegin{tag=LI}%
   \tagstructbegin{tag=Lbl}%
   \tagmcbegin{tag=Lbl}%
@@ -48,9 +49,9 @@
 \newcommand\meti{% end of \item
  \tagstructend %end of LBody
  \tagstructend %end of LI
-}  
+}
 
-\xpatchcmd\enit at preset{\@firstofone}{\uftag at enit@format at preset}{}{\fail}
+\xpatchcmd\enit at preset{\@firstofone}{\tag at enit@format at preset}{}{\fail}
 
 \setlist{
     before*=\tagstructbegin{tag=L},
@@ -64,12 +65,12 @@
    \tagstructbegin{tag=Lbl}%
    \tagmcbegin{tag=Lbl}%
    #1\tagmcend}}
-\makeatother   
+\makeatother
 % marking of the text inside the list can not be handled automatically -- one doesn't know the type
 % we use simple P here
 \newcommand\TAGP{\tagstructbegin{tag=P}\tagmcbegin{tag=P}}
-\newcommand\PGAT{\tagmcend\tagstructend}   
-   
+\newcommand\PGAT{\tagmcend\tagstructend}
+
 \begin{document}
 %I don't want to handle pagestyles, so set everything to empty:
 \pagestyle{empty}\renewcommand\chapterpagestyle{empty}

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-patch-sectioning-koma-luatex.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-patch-sectioning-koma.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-patch-sectioning-koma.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-patch-sectioning-koma.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-patch-sectioning-koma.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -8,6 +8,9 @@
 
 %no page break involved. So the example works in lua and generic mode
 
+\RequirePackage{pdfmanagement-testphase}
+\DeclareDocumentMetadata{pdfversion=1.7,uncompress}
+
 \documentclass{scrbook}
 \usepackage[english]{babel}
 
@@ -15,15 +18,11 @@
 
 \tagpdfifpdftexT
  {
-  %set language / can also be done with hyperref
-  \pdfcatalog{/Lang (en-US)}
   \usepackage[T1]{fontenc}
  }
 
 \tagpdfifluatexT
  {
-  %set language / can also be done with hyperref
-  \pdfextension catalog{/Lang (en-US)}
   \usepackage{fontspec}
   \usepackage{luacode}
  }
@@ -31,10 +30,8 @@
 
 \tagpdfsetup{tabsorder=structure,
              activate-all,
-             uncompress
              }
 
-\usepackage{lipsum}%\textheight3cm
 
 %%%%%%%%%%%%%%%
 %Marking the toc entries
@@ -68,9 +65,9 @@
 
 
 \renewcommand{\addtocentrydefault}[3]{%
- \ifstr{#3}{}{}
+ \Ifstr{#3}{}{}
    {%\
-   \ifstr{#2}{}
+   \Ifstr{#2}{}
     {%
      \addcontentsline{toc}{#1}
       {%
@@ -151,7 +148,7 @@
     #4
     \tagmcend\tagstructend}%
  }
- 
+
 \ExplSyntaxOff
 \AfterTOCHead{\tagstructbegin{tag=TOC}}
 \AfterStartingTOC{\tagstructend} %end TOC

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-softhyphen.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-softhyphen.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-softhyphen.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-softhyphen.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -7,6 +7,8 @@
 % open problem: line ends are not copy&pasted as spaces.
 % see also pull request #1, branch fake-space
 
+\RequirePackage{pdfmanagement-testphase}
+\DeclareDocumentMetadata{pdfversion=1.7,uncompress}
 \documentclass{book}
 
 \usepackage[ngerman]{babel} %to get some hyphenation
@@ -13,9 +15,8 @@
 \usepackage{tagpdf}
 \tagpdfsetup{tabsorder=structure,
              activate-all, %deactivate to see the difference
-             uncompress
              }
-\usepackage{lipsum}%
+
 \usepackage{fontspec}
 
 \prehyphenchar`\^^ad
@@ -36,5 +37,5 @@
    \tagmcend
   \tagstructend
 \tagstructend
-\end{document} 
+\end{document}
 

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-spaceglyph-listings.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-spaceglyph-listings.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-spaceglyph-listings.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-spaceglyph-listings.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,6 @@
 % !Mode:: "TeX:DE:UTF-8:Main"
+\RequirePackage{pdfmanagement-testphase}
+\DeclareDocumentMetadata{uncompress,}
 \documentclass{article}
 \usepackage{amsmath}
 \usepackage[ngerman]{babel}
@@ -9,7 +11,7 @@
 \def\lst at visiblespace{\lst at ttfamily{\char32}{\char32}}
 % with pdftex this could work
 %\def\lst at visiblespace{\lst at ttfamily{\pdffakespace\ }{\pdffakespace\ }}
-\tagpdfsetup{activate-all,uncompress,interwordspace=on,show-spaces,log=v}
+\tagpdfsetup{activate-all,interwordspace=on,show-spaces,log=v}
 \begin{document}\pagestyle{empty}
 \tagstructbegin{tag=Document}
 \tagmcbegin{tag=P}
@@ -18,4 +20,4 @@
 \end{lstlisting}
 \tagmcend
 \tagstructend
-\end{document}
\ No newline at end of file
+\end{document} 
\ No newline at end of file

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-structure-luatex.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-structure.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-structure.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-structure.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,7 @@
 % !Mode:: "TeX:DE:UTF-8:Main"
+\RequirePackage{pdfmanagement-testphase}
+\DeclareDocumentMetadata{pdfversion=1.7,uncompress}
+
 \documentclass{book}
 \usepackage[english,ngerman]{babel}
 \usepackage{tagpdf}
@@ -22,7 +25,6 @@
              }
 \newsavebox\mybox
 
-\usepackage{lipsum}%\textheight3cm
 \usepackage{fancyhdr}
 \pagestyle{fancy}
 \fancyhf{}

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-tagpdf-template.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-tagpdf-template.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-tagpdf-template.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/ex-tagpdf-template.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -2,6 +2,8 @@
 
 %this is more or less minimal template that can be used as starting point
 %it doesn't set everything that would be needed!
+\RequirePackage{pdfmanagement-testphase}
+\DeclareDocumentMetadata{lang=en-UK, uncompress}
 \documentclass{scrartcl}
 \usepackage[english]{babel}
 \usepackage{tagpdf}
@@ -8,13 +10,11 @@
 
 \tagpdfifpdftexT
  {
-  \pdfcatalog{/Lang (en-UK)}
   \usepackage[T1]{fontenc}
  }
 
 \tagpdfifluatexT
  {
-  \pdfextension catalog{/Lang (en-UK)}
   \usepackage{fontspec}
  }
 
@@ -22,7 +22,6 @@
     {
       tabsorder=structure,
       activate-all,
-      uncompress
     }
 \begin{document}
 \pagestyle{empty} %

Copied: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/example-input-file.tex (from rev 57871, trunk/Master/texmf-dist/doc/latex/tagpdf/example-input-file.tex)
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/example-input-file.tex	                        (rev 0)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/example-input-file.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -0,0 +1,5 @@
+%% LaTeX2e file `example-input-file.tex'
+%% generated by the `filecontents' environment
+%% from source `ex-AF-file' on 2021/02/23.
+%%
+Additional info!

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/tagpdf.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/tagpdf.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/tagpdf.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tagpdf/tagpdf.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,10 +1,10 @@
 % !Mode:: "TeX:DE:UTF-8:Main"
 \makeatletter
-\def\UlrikeFischer at package@version{0.61}
-\def\UlrikeFischer at package@date{2019-07-02}
+\def\UlrikeFischer at package@version{0.80}
+\def\UlrikeFischer at package@date{2021-02-23}
 \makeatother
-\pdfvariable majorversion = 1
-\pdfvariable minorversion = 7
+\RequirePackage{pdfmanagement-testphase}
+\DeclareDocumentMetadata{pdfversion=1.7,lang=en-UK}
 \documentclass[DIV=12,parskip=half-,bibliography=totoc]{scrartcl}
 \usepackage{scrlayer-scrpage}
 \usepackage{fontspec}
@@ -56,16 +56,14 @@
  %log=v
  %show-spaces
  }
-%metadata
-\pdfextension catalog{/Lang (en-UK)}
-
-\IfFileExists{pdfresources.sty}
-{
- \usepackage{pdfresources}
- \usepackage[customdriver=hluatex-experimental,
-             pdfdisplaydoctitle=true,pdfusetitle,hyperfootnotes=false,
+\usepackage{hyperxmp}
+ \usepackage[pdfdisplaydoctitle=true,hyperfootnotes=false,
             ]{hyperref}
-}{}
+ \hypersetup{
+  pdftitle={The \pkg{tagpdf} package, v\csname UlrikeFischer at package@version\endcsname},
+  pdfauthor=Ulrike Fischer,
+  pdfaconformance=a,
+  pdfuapart=1}
 %\usepackage[ocgcolorlinks]{ocgx2}
 \usepackage{ydoc-desc} %hm hyperref ist ein Problem ...
 \usepackage{tagpdfdocu-patches}
@@ -72,6 +70,35 @@
 \hypersetup{colorlinks,}
 
 \cfoot*{\leavevmode\tagmcbegin{artifact=pagination}\pagemark\tagmcend}
+\newcommand\PDF{PDF}
+
+\ExplSyntaxOn
+\newcounter{paracnt}
+\bool_new:N \l__tag_paratagging_bool
+\AddToHook{para/begin}
+  {
+   \stepcounter{paracnt}
+   \bool_if:NT \l__tag_paratagging_bool
+    {
+      \tagstructbegin{tag=P}\tagmcbegin{tag=P}
+      \llap{\color{red}\tiny\arabic{paracnt}\ }
+    }
+  }
+\AddToHook{para/end}
+  {
+    \bool_if:NT \l__tag_paratagging_bool
+    {
+     \rlap{\color{red}\tiny\ \arabic{paracnt}}
+     \tagmcend\tagstructend}
+  }
+\newcommand\parataggingON {\bool_set_true:N \l__tag_paratagging_bool}
+\newcommand\parataggingOff{\bool_set_false:N \l__tag_paratagging_bool}
+
+\ExplSyntaxOff
+
+\makeatletter
+\patchcmd\@oddfoot{\begingroup}{\begingroup\parataggingOff}{}{}
+\patchcmd\@oddhead{\begingroup}{\begingroup\parataggingOff}{}{}
 \begin{document}
 \tagstructbegin{tag=Document}
 
@@ -82,15 +109,20 @@
 \tagstructend
 
 \begin{tcolorbox}[colframe=red]
-\tagstructbegin{tag=Div}
+\tagstructbegin{tag=Div} %\booltrue{paratagging}
 \TagP^ This package is not meant for normal document production.
 
-\TagP You need a current expl3 version to use it, you even need the (experimental) \texttt{l3str-convert}.
+\TagP You need a very current \LaTeX{} format.
+      You need a very current L3 programming layer.
+      You need the new \LaTeX{} PDF management bundle.
 
 \TagP This package is incomplete, experimental and quite probably contains bugs.
+      At some time it will disappear when the code has been integrated into the \LaTeX{} format.
 
-\TagP You need some knowledge about \TeX, pdf and perhaps even lua to use it.
+\TagP This package can change in an incompatible way.
 
+\TagP You need some knowledge about \TeX, \PDF{} and perhaps even lua to use it.
+
 \medskip
 
 \TagP Issues, comments, suggestions should be added as issues to the github tracker:\TagPend
@@ -107,18 +139,38 @@
 \tableofcontents
 \end{NoHyper}
 
+\section{Preface to version 0.8}
+
+\parataggingON
+
+%\TagP^
+With this version one major step towards integration of the code into the \LaTeX{} has been done:
+The code now relies on the new \LaTeX{} PDF management. This management, which is for a testphase provided
+as an external package, \texttt{pdfmanagement-testphase},
+prepares the ground for better support for tagged PDF in \LaTeX{}.
+It is part of a larger project to automatically generate tagged PDF \url{https://www.latex-project.org/news/2020/11/30/tagged-pdf-FS-study/}
+%\TagPend
+
+While this is a major improvement---it will for example allow to use tagpdf with more engines as the new PDF management supports all major engines and allowed to add support for associated files---it also means that this version requires a special setup of the document and is incompatible with a number of packages,
+see the documentation of \texttt{pdfmanagement-testphase} for details.
+
+Another important step are the new hook management in \LaTeX: the newest development version has hooks for paragraphs which should at the end allow to tag many paragraphs automatically. The small red numbers in this section show them in action. The main problem here is not to tag a paragraph, but to avoid to tag too many: paragraphs pop up in many places.
+
+
+\parataggingOff
+
 \section{Introduction}
 
 
-\TagP^ Since many year the creation of accessible pdf-files with \LaTeX\ which conform to the PDF/UA standard has been on the agenda of \TeX-meetings. Many people agree that this is important and Ross Moore has done quite some work on it. There is also a TUG-mailing list and a webpage \parencite{tugaccess} dedicated to this theme.
+\TagP^ Since many year the creation of accessible \PDF{}-files with \LaTeX\ which conform to the PDF/UA standard has been on the agenda of \TeX-meetings. Many people agree that this is important and Ross Moore has done quite some work on it. There is also a TUG-mailing list and a webpage \parencite{tugaccess} dedicated to this theme.
 
-\TagP But in my opinion missing are means to \emph{experiment} with tagging and accessibility. Means to try out, how difficult it is to tag some structures, means to try out, how much tagging is really needed (standards and validators don't need to be right \ldots), means to test what else is needed so that a pdf works e.g. with a screen reader. Without such experiments it is imho quite difficult to get a feeling about what has to be done, which kernel changes are needed, how packages should be adapted.
+\TagP But in my opinion missing are means to \emph{experiment} with tagging and accessibility. Means to try out, how difficult it is to tag some structures, means to try out, how much tagging is really needed (standards and validators don't need to be right \ldots), means to test what else is needed so that a \PDF{} works e.g. with a screen reader. Without such experiments it is imho quite difficult to get a feeling about what has to be done, which kernel changes are needed, how packages should be adapted.
 
-\TagP This package tries to close this gap by offering \emph{core} commands to tag a pdf.\footnote{In case you don't know what this means: there will be some explanations later on.}
+\TagP This package tries to close this gap by offering \emph{core} commands to tag a \PDF{}.\footnote{In case you don't know what this means: there will be some explanations later on.}
 
 \TagP My hope is that the knowledge gained by the use of this package will at the end allow to decide if and how code to do tagging should be part of the \LaTeX\ kernel.
 
-\TagP The package does not patch commands from other packages. It is also not an aim of the package to develop such patches. While at the end changes to various commands in many classes and packages will be needed to get tagged pdf files -- and the examples accompaigning the package try (or will try) to show various strategies -- these changes should in my opinion be done by the class, package and document writers themselves using a sensible API provided by the kernel and not by some external package that adds patches everywhere and would need constant maintenance -- one only need to look at packages like tex4ht or bidi or hyperref to see how difficult and sometimes fragile this is.
+\TagP The package does not patch commands from other packages. It is also not an aim of the package to develop such patches. While at the end changes to various commands in many classes and packages will be needed to get tagged \PDF{} files -- and the examples accompanying the package try (or will try) to show various strategies -- these changes should in my opinion be done by the class, package and document writers themselves using a sensible API provided by the kernel and not by some external package that adds patches everywhere and would need constant maintenance -- one only need to look at packages like tex4ht or bidi or hyperref to see how difficult and sometimes fragile this is.
 
 \TagP So this package deliberately concentrates on the basics -- and this already quite a lot, there are much more details involved as I expected when I started.
 
@@ -129,7 +181,7 @@
 
 \subsection{Tagging and accessibility}
 
-\TagP^ While the package is named \texttt{tagpdf} the goal is actually \emph{accessible} pdf-files. Tagging is \emph{one} requirement for accessibility but there are others. I will mention some later on in this documentation, and -- if sensible -- I will also try to add code, keys or tips for them.
+\TagP^ While the package is named \texttt{tagpdf} the goal is actually \emph{accessible} \PDF{}-files. Tagging is \emph{one} requirement for accessibility but there are others. I will mention some later on in this documentation, and -- if sensible -- I will also try to add code, keys or tips for them.
 
 \TagP So the name of the package is a bit wrong. As excuse I can only say that it is shorter and easier to pronounce.
 \TagPend
@@ -136,7 +188,7 @@
 
 \subsection{Engines and modes}
 
-\TagP^ The package works currently with pdflatex and lualatex.
+\TagP^ The package works currently with pdflatex and lualatex. First steps have been done to also enable support for xelatex and the latex-dvips-route; but this isn't yet much tested.
 
 \TagP The package has two modes: the \emph{generic mode} which should work in theory with every engine and the \emph{lua mode} which works only with lualatex.
 
@@ -143,7 +195,7 @@
 
 \TagP I implemented the generic mode first. Mostly because my tex skills are much better than my lua skills and I wanted to get the tex side right before starting to fight with attributes and node traversing.
 
-\TagP While the generic mode is not bad and I spent quite some time to get it working I nevertheless think that the lua mode is the future and the only one that will be usable for larger documents. pdf is a page orientated format and so the ability of luatex to manipulate pages and nodes after the \TeX-processing is really useful here. Also with luatex characters are normally already given as unicode. The main problem with luatex is how to insert \enquote{fake spaces} between words.%
+\TagP While the generic mode is not bad and I spent quite some time to get it working I nevertheless think that the lua mode is the future and the only one that will be usable for larger documents. \PDF{} is a page orientated format and so the ability of luatex to manipulate pages and nodes after the \TeX-processing is really useful here. Also with luatex characters are normally already given as unicode. The main problem with luatex is how to insert \enquote{fake spaces} between words.%
 \TagPend
 
 
@@ -150,19 +202,19 @@
 
 \subsection{References}
 
-\TagP^ My main reference was the free reference for pdf 1.7. \parencite{pdfreference}. This document is from 2006.
+\TagP^ My main reference was the free reference for \PDF{} 1.7. \parencite{pdfreference}. This document is from 2006.
 
-\TagP In the meantime pdf 2.0. has been released. I know that it contains also for accessibility relevant changes. As I got now the specification and luatex can set with \verb+\pdfmajorversion+ the version to 2.0 I will start to check to look into it too.%
+\TagP In the meantime \PDF{} 2.0. has been released. I know that it contains also for accessibility relevant changes. As I got now the specification and luatex can set with \verb+\pdfmajorversion+ the version to 2.0 I will start to check to look into it too.%
 \TagPend
 
 \subsection{Validation}
 
-\TagP^ pdf's created with the commands of this package must be validated:\TagPend
+\TagP^ \PDF{}'s created with the commands of this package must be validated:\TagPend
 
 
 \begin{itemize}
 \item
-\TagP^ One must check that the pdf is \emph{syntactically} correct. It is rather easy to create broken pdf: e.g. if a chunk is opened on one page but closed on the next page.
+\TagP^ One must check that the \PDF{} is \emph{syntactically} correct. It is rather easy to create broken \PDF{}: e.g. if a chunk is opened on one page but closed on the next page.
     \Pmeti
 \item
 \TagP^ One must check how good the requirements of the PDF/UA standard are followed \emph{formally}.
@@ -173,14 +225,14 @@
 
 \TagP^
 Syntax validation and formal standard validation can be done with preflight of the (non-free) adobe acrobat.
-It can also be done also with the free PDF Accessibility Checker (PAC~3) \parencite{pac3}.
+It can also be done also with the free \PDF{} Accessibility Checker (PAC~3) \parencite{pac3}.
 
 \TagP
 Syntax validation and formal standard validation can be done with preflight of the (non-free) adobe acrobat.
-It can also be done also with the free PDF Accessibility Checker (PAC~3) \parencite{pac3}.
+It can also be done also with the free \PDF{} Accessibility Checker (PAC~3) \parencite{pac3}.
 There is also the validator veraPDF \parencite{verapdf}. But I didn't try it yet and have no idea if it is useful here.
 
-\TagP Practical validation is naturally the more complicated part. It needs screen reader, users which actually knows how to handle them, can test documents and can report where a pdf has real accessibility problems.\TagPend
+\TagP Practical validation is naturally the more complicated part. It needs screen reader, users which actually knows how to handle them, can test documents and can report where a \PDF{} has real accessibility problems.\TagPend
 
 
 
@@ -197,7 +249,7 @@
 \TagP^ Feedback, contribuations and corrections are welcome!\TagPend
 \end{tcolorbox}
 
-\TagP^ All examples should use the tagpdfsetup key \PrintKeyName{uncompress} described in the next section so that uncompressed pdf are created and the internal objects and structures can be inspected and -- hopefully soon -- be compared by the l3build checks.%
+\TagP^ All examples should use the tagpdfsetup key \PrintKeyName{uncompress} described in the next section so that uncompressed \PDF{} are created and the internal objects and structures can be inspected and -- hopefully soon -- be compared by the l3build checks.%
 \TagPend
 
 
@@ -212,7 +264,7 @@
 \subsection{Changes in 0.5}
 \TagP^I added code to handle attributes and attribute classes, see section~\ref{sec:attributes} and corrected a small number of code errors.
 
-\TagP I added code to add \enquote{real} space glyphs to the pdf, see section \ref{sec:spacechars}.\TagPend
+\TagP I added code to add \enquote{real} space glyphs to the \PDF{}, see section \ref{sec:spacechars}.\TagPend
 
 
 \subsection{Changes in 0.6}
@@ -220,7 +272,7 @@
 \TagP^\textbf{Breaking change!} The attributes used in luamode to mark the MC-chunks are no longer set globally. I thought that global attribute would make it easier to tag, but it only leads to problem when e.g. header and footer are inserted. So from this version on the attributes are set locally and the effect of a \verb+\tagmcbegin+ ends with the current group. This means that in some cases more \verb+\tagmcbegin+ are needed and  this affected some of the examples, e.g. the patching commands for sections with KOMA. On the other side it means that quite often one can omit the \verb+\tagmcend+ command.\TagPend
 
 \subsection{Proof of concept: the tagging of the documentation itself}
-\TagP^With version 0.6 the documentation itself has been tagged. The tagging is in no way perfect. The validator from Adobe doesn't complain, but PAX3 wanted alternative text for all links (no idea why) and so I put everywhere simple text like \enquote{link} and \enquote{ref}. The links to footnote gave warnings, so I disabled them. I used types from the pdf version 1.7, mostly as I have no idea what should be used for code in 2.0. Margin notes are probably simply wrong \ldots\TagPend
+\TagP^With version 0.6 the documentation itself has been tagged. The tagging is in no way perfect. The validator from Adobe doesn't complain, but PAX3 wanted alternative text for all links (no idea why) and so I put everywhere simple text like \enquote{link} and \enquote{ref}. The links to footnote gave warnings, so I disabled them. I used types from the \PDF{} version 1.7, mostly as I have no idea what should be used for code in 2.0. Margin notes are probably simply wrong \ldots\TagPend
 
 \TagP^But even if the documentation passed the tests of the validators:  as mentioned above passing a formal test doesn't mean that the content is really good and usable. I have a lot doubts that the code parts are really readable. The bibliography and the references must be improved. The user commands used for the tagging and also some of the patches used are rather crude. So there is lot space for improvement.\TagPend
 
@@ -238,6 +290,23 @@
 \item \TagP^dropped the compresslevel key  -- probably not needed\Pmeti
 \end{itemize}
 
+\subsection{Changes in version 0.8}
+
+
+\TagP^As a first step to include the code proper in the \LaTeX\ kernel the module name has changed from \texttt{uftag} to \texttt{tag}. The commands starting with \verb|\uftag| will stay valid for some time but then be deprecated.\TagPend
+
+\TagP^\textbf{Breaking change!} The argument of \texttt{newattribute} option should no longer add the dictionary bracket \verb+<<..>>+, they are added by the code.\TagPend
+
+
+\TagP^\textbf{Breaking change!} The package now requires the new PDF management as provided for now by the package \texttt{pdfmanagement-testphase}\TagPend
+
+\TagP^Support to add associated files to structures has been added with new keys \texttt{AF}, \texttt{AFinline} and \texttt{AFinline-o}.\TagPend
+
+\TagP^\textbf{Breaking change!} The support for other 8-bit input encodings has been removed.
+utf8 is now the required encoding. \TagPend
+
+\TagP^The keys |lang|, |ref| and |E| have been added for structures.\TagPend
+
 \section{Setup}
 
 \minisec{Activation needed!}
@@ -282,9 +351,6 @@
  \TagP^Allows to define new tag names, see section \ref{sec:new-tag} for a description.\Pmeti
 \item[\PrintKeyName{check-tags}]
  \TagP^Boolean, initially true. Activates some safety checks (but doesn't do very much currently. It will perhaps be merged with the log-level key).\Pmeti
-\item[\PrintKeyName{inputencoding}]
- \TagP^Some keys convert their value and so need to know the encoding of the file. The default encoding is utf8.  When using pdflatex you can switch to another encoding with this key. The value should be one of names allowed by \texttt{l3str}. There is no checking that the name is valid (I don't think that it sensible to use something else than utf8).
- \Pmeti
 \item[\PrintKeyName{interwordspace}]
  \TagP^Choice key, possible values are \PrintKeyName{true}/""\PrintKeyName{on} and \PrintKeyName{false}/\PrintKeyName{off}. The key activates/deactivates the insertion of space glyphs, see section~\ref{sec:spacechars}. In the luamode it only works if at least \PrintKeyName{activate-mc} has been used.\Pmeti
 \item[\PrintKeyName{log}]
@@ -298,7 +364,7 @@
 \item[\PrintKeyName{tagunmarked}]
  \TagP^Boolean,\marginnote{luamode} initially true. When this boolean is true, the lua code will try to mark everything that has not been marked yet as an artifact. The benefit is that one doesn't have to mark up every deco rule oneself. The danger is that it perhaps marks things that shouldn't be marked -- it hasn't been tested yet with complicated documents containing annotations etc. See also section~\ref{sec:lazy} for a discussion about automatic tagging.\Pmeti
 \item[\PrintKeyName{uncompress}]
- \TagP^Sets both the pdf compresslevel and the pdf objcompresslevel to 0 and so allows to inspect the pdf.\Pmeti
+ \TagP^Sets both the \PDF{} compresslevel and the \PDF{} objcompresslevel to 0 and so allows to inspect the \PDF{}.\Pmeti
 
 
 \end{description}
@@ -306,7 +372,7 @@
 
 \section{Tagging}
 
-\TagP^pdf is a page orientated graphic format. It simply puts ink and glyphs at various coordinates on a page. A simple stream of a page can look like this\footnote{The appendix contains some remarks about the syntax of a pdf file}:
+\TagP^pdf is a page orientated graphic format. It simply puts ink and glyphs at various coordinates on a page. A simple stream of a page can look like this\footnote{The appendix contains some remarks about the syntax of a \PDF{} file}:
 \TagPend
 
 \tagstructbegin{tag=Code}\tagmcbegin{tag=Code}
@@ -328,13 +394,13 @@
 
 \TagP^From this stream one can extract the characters and their placement on the page but not their semantic meaning  (the first line is actually a section heading, the last the page number). And while in the example the order is correct there is actually no guaranty that the stream contains the text in the order it should be read.
 
-\TagP Tagging means to enrich the pdf with information about the \emph{semantic} meaning and the \emph{reading order}. (Tagging can do more, one can also store all sorts of layout information like font properties and indentation with tags. But as I already wrote this package concentrates on the part of tagging that is needed to improve accessibility.)\TagPend
+\TagP Tagging means to enrich the \PDF{} with information about the \emph{semantic} meaning and the \emph{reading order}. (Tagging can do more, one can also store all sorts of layout information like font properties and indentation with tags. But as I already wrote this package concentrates on the part of tagging that is needed to improve accessibility.)\TagPend
 
 
 
 
 \subsection{Three tasks}
-\TagP^To tag a pdf three tasks must be  carried out:\TagPend
+\TagP^To tag a \PDF{} three tasks must be  carried out:\TagPend
 
 \begin{enumerate}
 \item
@@ -341,11 +407,11 @@
   \TagP^\textbf{The mark-content-task}:\marginnote{mc-task} The document must add \enquote{labels} to the page stream which allows to identify and reference the various chunks of text and other content.  This is the most difficult part of tagging -- both for the document writer but also for the package code. At first there can be quite many chunks as every one is a leaf node of the structure and so often a rather small unit.  At second the chunks must be defined page-wise -- and this is not easy when you don't know where the page breaks are. Also in a standard document a lot text is created automatically, e.g. the toc, references, citations, list numbers etc and it is not always easy to mark them correctly.\Pmeti
 
 \item
-  \TagP^\textbf{The structure-task}:\marginnote{struct-task}  The document must declare the structure. This means marking the start and end of semantically connected portions of the document (correctly nested as a tree). This too means some work for the document writer, but less than for the mc-task: at first quite often the mc-task and the structure-task can be combined, e.g. when you mark up a list number or a tabular cell or a section header; at second one doesn't have to worry about page breaks so quite often one can patch standard environments to declare the structure. On the other side a number of structures end in \LaTeX\ only implicitly -- e.g. an item ends at the next item, so getting the pdf structure right still means that additional mark up must be added.
+  \TagP^\textbf{The structure-task}:\marginnote{struct-task}  The document must declare the structure. This means marking the start and end of semantically connected portions of the document (correctly nested as a tree). This too means some work for the document writer, but less than for the mc-task: at first quite often the mc-task and the structure-task can be combined, e.g. when you mark up a list number or a tabular cell or a section header; at second one doesn't have to worry about page breaks so quite often one can patch standard environments to declare the structure. On the other side a number of structures end in \LaTeX\ only implicitly -- e.g. an item ends at the next item, so getting the \PDF{} structure right still means that additional mark up must be added.
   \Pmeti
 
 \item
- \TagP^\textbf{The tree management}:\marginnote{tree-task} At last the structure must be written into the pdf. For every structure an object of type \texttt{StructElem} must be  created and flushed with keys for the parents and the kids. A parenttree must be created to get a reference from the mc-chunks to the parent structure. A rolemap must be written. And a number of dictionary entries. All this is hopefully done automatically and correctly by the package \ldots.
+ \TagP^\textbf{The tree management}:\marginnote{tree-task} At last the structure must be written into the \PDF{}. For every structure an object of type \texttt{StructElem} must be  created and flushed with keys for the parents and the kids. A parenttree must be created to get a reference from the mc-chunks to the parent structure. A rolemap must be written. And a number of dictionary entries. All this is hopefully done automatically and correctly by the package \ldots.
  \Pmeti
 \end{enumerate}
 
@@ -404,7 +470,7 @@
 
 \subsection{Task 1: Marking the chunks: the mark-content-step}
 
-\TagP^To be able to refer to parts of the text in the structure, the text in the page stream must get \enquote{labels}. In the pdf reference they are called \enquote{marked content}. The three main variants needed here are:\TagPend
+\TagP^To be able to refer to parts of the text in the structure, the text in the page stream must get \enquote{labels}. In the \PDF{} reference they are called \enquote{marked content}. The three main variants needed here are:\TagPend
 
 \begin{description}
 \item[Artifacts] \TagP^They are marked with of a pair of keywords, \texttt{BMC} and \texttt{EMC} which surrounds the text. \texttt{BMC} has a single prefix argument, the fix tag name \texttt{/Artifact}. Artifacts should be used for irrelevant text and page content that should be ignored in the structure. Sadly it is often not possible to leave such text simply unmarked -- the accessibility tests in Acrobat and other validators complain.\TagPend
@@ -445,7 +511,7 @@
 
 \TagP^This integer is used to identify the chunk when building the structure tree. The chunks are numbered by page starting with 0. As the numbers are also used as an index in an array they shouldn't be \enquote{holes} in the numbering system
 %\footnote{
-(It is perhaps possible to handle a numbering scheme not starting by 0 and having holes, but it will enlarge the pdf as one would need dummy objects.).
+(It is perhaps possible to handle a numbering scheme not starting by 0 and having holes, but it will enlarge the \PDF{} as one would need dummy objects.).
 
 \TagP It is possible to add more entries to the property dictionary, e.g. a title, alternative text or a local language setting.\Pmeti
 \end{description}
@@ -464,7 +530,7 @@
 \TagP^This sounds easy. But there are quite a number of traps.\TagPend
 
 \begin{enumerate}[beginpenalty=10000]
-  \item \TagP^Pdf is a page oriented format. And this means that the start \texttt{BDC}/\texttt{BMC}  and the corresponding end \texttt{EMC} must be on the same page.
+  \item \TagP^\PDF{} is a page oriented format. And this means that the start \texttt{BDC}/\texttt{BMC}  and the corresponding end \texttt{EMC} must be on the same page.
   So marking e.g. a section title like in the following example won't always work as the literal before the section could end on the previous page:\TagPend
 
 \tagstructbegin{tag=Code}\tagmcbegin{tag=Code}
@@ -498,7 +564,7 @@
 
 
   \item
-  \TagP^Pdf is a page oriented format. And this means that the start and the end marker must be on the same page \ldots\ \emph{so what to do with normal paragraphs that split over pages??}. This question will be discussed in subsection~\ref{sec:splitpara}.\Pmeti
+  \TagP^\PDF{} is a page oriented format. And this means that the start and the end marker must be on the same page \ldots\ \emph{so what to do with normal paragraphs that split over pages??}. This question will be discussed in subsection~\ref{sec:splitpara}.\Pmeti
 \end{enumerate}
 
 \subsubsection{Generic mode versus lua mode in the mc-task}
@@ -508,7 +574,7 @@
 \TagP This means that quite a number of problems mentioned above are not relevant for the lua mode:\TagPend
 
 \begin{enumerate}
-\item \TagP^Pagebreaks between start and end of the marker are \emph{not} a problem. So you can mark a complete paragraph. If a pagebreak occur directly after an start marker or before an end marker this can lead to empty chunks in the pdf and so bloat up pdf a bit, but this is imho not really a problem (compared to the size increase by the rest of the tagging).\Pmeti
+\item \TagP^Pagebreaks between start and end of the marker are \emph{not} a problem. So you can mark a complete paragraph. If a pagebreak occur directly after an start marker or before an end marker this can lead to empty chunks in the \PDF{} and so bloat up \PDF{} a bit, but this is imho not really a problem (compared to the size increase by the rest of the tagging).\Pmeti
 \item \TagP^The commands don't insert literals directly and so affect line and page breaking much less.\Pmeti
 \item \TagP^The numbering of the MCID are done at shipout, so no label/ref system is needed.\Pmeti
 \item \TagP^The code can do some marking automatically. Currently everything that has not been marked up by the document is marked as artifact.\Pmeti
@@ -521,10 +587,10 @@
 
 \ExplSyntaxOn
 \DescribeMacro\tagmcbegin{<key-val-list>}
-\DescribeMacro\uftag_mc_begin:n{<key-val-list>}
+\DescribeMacro\tag_mc_begin:n{<key-val-list>}
 \ExplSyntaxOff
 
-\TagP^These commands insert the begin of the marked content code in the pdf. They don't start a paragraph. \emph{They don't start a group}. The user command additionally issues an \verb+\ignorespaces+ to suppress spaces after itself.
+\TagP^These commands insert the begin of the marked content code in the \PDF{}. They don't start a paragraph. \emph{They don't start a group}. The user command additionally issues an \verb+\ignorespaces+ to suppress spaces after itself.
 Such markers should not be nested. The command will warn you if this happens.
 
 
@@ -531,7 +597,7 @@
 \TagP The key-val list understands the following keys:\TagPend
 \begin{description}
   \item[\PrintKeyName{tag}]
-  \TagP^This is required, unless you use the \PrintKeyName{artifact} key. The value of the key is normally one of the standard type listed in section \ref{sec:new-tag} (without a slash at the begin, this is added by the code). It is possible to setup new tags, see the same section. The value of the key is expanded, so it can be a command. The expansion is passed unchanged to the pdf, so it should with a starting slash give a valid pdf name  (some ascii with numbers like \texttt{H4} is fine).\Pmeti
+  \TagP^This is required, unless you use the \PrintKeyName{artifact} key. The value of the key is normally one of the standard type listed in section \ref{sec:new-tag} (without a slash at the begin, this is added by the code). It is possible to setup new tags, see the same section. The value of the key is expanded, so it can be a command. The expansion is passed unchanged to the \PDF{}, so it should with a starting slash give a valid \PDF{} name  (some ascii with numbers like \texttt{H4} is fine).\Pmeti
 
   \item[\PrintKeyName{artifact}]
   \TagP^This will setup the marked content as an artifact. The key should be used for content that should be ignored. The key can take one of the values \PrintKeyName{pagination}, \PrintKeyName{layout},  \PrintKeyName{page},  \PrintKeyName{background} and \PrintKeyName{notype} (this is the default). Text in the header and footer should be marked with \PrintKeyName{artifact=pagination}.
@@ -560,7 +626,7 @@
       \end{lstlisting}
   \tagmcend\tagstructend
 
-  \TagP^    and it will insert \verb+\frac{a}{b}+  (hex encoded) in the pdf.\Pmeti
+  \TagP^    and it will insert \verb+\frac{a}{b}+  (hex encoded) in the \PDF{}.\Pmeti
 
   \item[\PrintKeyName{actualtext}]
   \TagP^This key inserts an \texttt{/ActualText} value in the property dictionary of the BDC operator. See section~\ref{sec:alttext}. The value is handled as verbatim string, commands are not expanded.\Pmeti
@@ -577,16 +643,16 @@
  \tagmcend\tagstructend
 
 
- \TagP^and it will insert \verb+X+ (hex encoded)  in the pdf.\Pmeti
+ \TagP^and it will insert \verb+X+ (hex encoded)  in the \PDF{}.\Pmeti
 
   \item[\PrintKeyName{raw}]
-  \TagP^This key allows you to add more entries to the properties dictionary. The value must be correct, low-level pdf. E.g. \verb+raw=/Alt (Hello)+ will insert an alternative Text.\Pmeti
+  \TagP^This key allows you to add more entries to the properties dictionary. The value must be correct, low-level \PDF{}. E.g. \verb+raw=/Alt (Hello)+ will insert an alternative Text.\Pmeti
 \end{description}
 
 
 \ExplSyntaxOn
 \DescribeMacro\tagmcend
-\DescribeMacro\uftag_mc_end:
+\DescribeMacro\tag_mc_end:
 \ExplSyntaxOff
 
 \TagP^These commands insert the end code of the marked content. They don't end a group and in generic mode it doesn't matter if they are in another group as the starting commands. The user command also issues at first an \verb+\unskip+. In generic mode both commands check if there has been a begin marker and issue a warning if not. In luamode it is often possible to omit the command, as the effect of the begin command ends with the current group or with a new \verb+\tagmcbegin+ anyway.\TagPend
@@ -603,13 +669,13 @@
 \end{lstlisting}
 \tagmcend\tagstructend
 
-\TagP^Block 3 will here get the same id number as Block 1 and be stored in the structure \emph{before} Block 2. The pdf will record the chunks in the order \texttt{Block 1 -- Block 3 -- Block 2}.
+\TagP^Block 3 will here get the same id number as Block 1 and be stored in the structure \emph{before} Block 2. The \PDF{} will record the chunks in the order \texttt{Block 1 -- Block 3 -- Block 2}.
 \TagPend
 \end{tcolorbox}
 
 \ExplSyntaxOn
 \DescribeMacro\tagmcuse{<label name>}
-\DescribeMacro\uftag_mc_use:n {<label name>}
+\DescribeMacro\tag_mc_use:n {<label name>}
 \ExplSyntaxOff
 
 \TagP^These commands allow you to record a marked content that you stashed away into the current structure. Be aware that a marked content can be used only once -- the command will warn you if you try to use it a second time.\TagPend
@@ -616,7 +682,7 @@
 
 \ExplSyntaxOn
 \DescribeMacro\tagmcifinTF{<true code>}{<false>}
-\DescribeMacro\uftag_mc_if_in:TF{<true code>}{<false>}
+\DescribeMacro\tag_mc_if_in:TF{<true code>}{<false>}
 \ExplSyntaxOff
 
 \TagP^These commands check if a marked content is currently open and allows you to e.g. add the end marker if yes.
@@ -627,11 +693,13 @@
 
 \ExplSyntaxOn
 \DescribeMacro\tagpdfget{<key word>}
-\DescribeMacro\uftag_get:n{<key word>}
+\DescribeMacro\tag_get:n{<key word>}
 \ExplSyntaxOff
 
 \TagP^These commands give back some variables. Currently the only working key word is \verb+mc\_tag+.\TagPend.
 
+
+
 \subsubsection{Tips}
 
 \begin{itemize}
@@ -638,8 +706,8 @@
 \item \TagP^Mark commands inside floats should work fine (but need perhaps some compilation rounds in generic mode).\Pmeti
 \item \TagP^In case you want to use it inside a \verb+\savebox+ (or some command that saves the text internally in a box): If the box is used directly, there is probably no problem. If the use is later, stash the marked content and add the needed \verb+\tagmcuse+ directly  before oder after the box when you use it.\Pmeti
 \item \TagP^Don't use a saved box with markers twice.\Pmeti
-\item \TagP^If boxes are unboxed you will have to analyze the pdf to check if everything is ok.\Pmeti
-\item \TagP^If you use complicated structures and commands (breakable boxes like the one from tcolorbox, multicol, many footnotes) you will have to check the pdf.\Pmeti
+\item \TagP^If boxes are unboxed you will have to analyze the \PDF{} to check if everything is ok.\Pmeti
+\item \TagP^If you use complicated structures and commands (breakable boxes like the one from tcolorbox, multicol, many footnotes) you will have to check the \PDF{}.\Pmeti
  \end{itemize}
 
 
@@ -654,7 +722,7 @@
 
 \subsubsection{Links}
 
-\TagP^Link annotations (like all PDF annotations) are associated with a geometric region of the page rather than with a particular object in its content stream. Any connection between the link and the content is based solely on visual appearance rather than on an explicitly specified association.\TagPend
+\TagP^Link annotations (like all \PDF{} annotations) are associated with a geometric region of the page rather than with a particular object in its content stream. Any connection between the link and the content is based solely on visual appearance rather than on an explicitly specified association.\TagPend
 
 \TagP^To connect such a link with the underlying text a specific structure has to be added, see \ref{fig:linkannot}. When using the low-level commands to create a link, this structure can be created by adding an entry to the attr argument of the startlink command, and by by adding a command of the tagpdf package after the endlink command, as show in the following listing:\TagPend
 
@@ -663,7 +731,7 @@
 \pdfextension startlink
     attr
      {
-     /StructParent \int_use:N\c at g__uftag_parenttree_obj_int %<----
+     /StructParent \int_use:N\c at g__tag_parenttree_obj_int %<----
      }
     user {
           /Subtype/Link
@@ -676,7 +744,7 @@
          }
     This is a link.
 \pdfextension endlink
-\__uftag_struct_finish_link: %<----
+\__tag_struct_finish_link: %<----
 \end{lstlisting}
 \tagmcend\tagstructend
 
@@ -685,7 +753,7 @@
 \subsubsection{Math}
 
 \TagP^Math is a problem. I have seen an example where \emph{every single symbol} has been marked up with tags from MathML along with an \texttt{/ActualText} entry and an entry with alternate text which describes how to read the symbol.
-The pdf then looked like this\TagPend
+The \PDF{} then looked like this\TagPend
 
 \tagstructbegin{tag=Code}\tagmcbegin{tag=Code}
 \begin{lstlisting}
@@ -700,7 +768,7 @@
 
 \TagP^If this is really the way to go one would need some script to add the mark-up as doing it manually is too much work and would make the source unreadable -- at least with pdflatex and the generic mode. In lua mode is it probably possible to hook into the \texttt{mlist\_to\_hlist} callback and add marker automatically.\TagPend
 
-\TagP^But I'm not sure that this is the best way to do math. It looks rather odd that a document should have to tell a screen reader in such detail how to read an equation. It would be much more efficient, sensible and flexible if a complete representation of the equation in mathML could be stored in the pdf and the task how to read this aloud delegated to the screen reader. More investigations are needed here.\TagPend
+\TagP^But I'm not sure that this is the best way to do math. It looks rather odd that a document should have to tell a screen reader in such detail how to read an equation. It would be much more efficient, sensible and flexible if a complete representation of the equation in mathML could be stored in the \PDF{} and the task how to read this aloud delegated to the screen reader. More investigations are needed here.\TagPend
 
 \TagP^See also section~\ref{sec:alttext} for some more remarks and tests.\TagPend
 
@@ -728,7 +796,7 @@
 
 
 \subsection{Task 2: Marking the structure}
-\TagP^The structure is represented in the pdf with a number of objects of type \texttt{StructElem} which build a tree: each of this objects points back to its parent and normally has a number of kid elements, which are either again structure elements or -- as leafs of the tree -- the marked contents chunks marked up with the \verb+tagmc+-commands. The root of the tree is the \texttt{StructTreeRoot}.\TagPend
+\TagP^The structure is represented in the \PDF{} with a number of objects of type \texttt{StructElem} which build a tree: each of this objects points back to its parent and normally has a number of kid elements, which are either again structure elements or -- as leafs of the tree -- the marked contents chunks marked up with the \verb+tagmc+-commands. The root of the tree is the \texttt{StructTreeRoot}.\TagPend
 
 \subsubsection{Structure types}
 \TagP^The tree should reflect the \emph{semantic} meaning of the text. That means that the text should be marked as section, list, table head, table cell and so on. A number of standard structure types is predefined, see section \ref{sec:new-tag} but it is allowed to create more. If you want to use types of your own you must declare them. E.g. this declares two new types \texttt{TAB} and {FIG} and base them on \texttt{P}:\TagPend
@@ -780,7 +848,7 @@
 
 \ExplSyntaxOn
 \DescribeMacro\tagstructbegin{key-val-list}
-\DescribeMacro\uftag_struct_begin:n {key-val-list}
+\DescribeMacro\tag_struct_begin:n {key-val-list}
 \ExplSyntaxOff
 
 \TagP These commands start a new structure. They don't start a group. They set all their values globally.
@@ -812,7 +880,7 @@
    \tagmcend\tagstructend
 
 
-   \TagP^   and it will insert \verb+\frac{a}{b}+  (hex encoded) in the pdf.\Pmeti
+   \TagP^   and it will insert \verb+\frac{a}{b}+  (hex encoded) in the \PDF{}.\Pmeti
 
 
   \item[\PrintKeyName{actualtext}]
@@ -829,7 +897,7 @@
    \tagmcend\tagstructend
 
 
-   \TagP^and it will insert \verb+X+ (hex encoded)  in the pdf.\Pmeti
+   \TagP^and it will insert \verb+X+ (hex encoded)  in the \PDF{}.\Pmeti
 
    \item[\PrintKeyName{attribute}]
     \TagP^This key takes as argument a comma list of attribute names (use braces to protect the commas from the external key-val parser) and allows to add one or more attribute dictionary entries in the structure object. As an example\TagPend
@@ -856,12 +924,56 @@
   \item[\PrintKeyName{title-o}]
   \TagP^This key allows to set the dictionary entry \texttt{/Title} in the structure object.
   The value is expanded once and then handled as verbatim string like the \PrintKeyName{title} key.\Pmeti
+
+   \item[\PrintKeyName{AF}]
+   \TagP^This key allows to reference an associated file in the structure element.
+   The value should be the name of an object pointing to the \texttt{/Filespec} dictionary as expected by
+   \verb+\pdf_object_ref:n+ from a current \texttt{l3kernel}.
+   For example:\TagPend
+
+   \tagstructbegin{tag=Code}\tagmcbegin{tag=Code}
+   \begin{lstlisting}
+   \pdfdict_put:nnn {l_pdffile/FileSpec} {AFRelationship}{/Supplement}
+   \pdffile_embed_file:nnn{example-input-file.tex}{}{tag/AFtest}
+   \tagstructbegin{tag=P,AF=tag/AFtest}
+   \end{lstlisting}
+   \tagmcend\tagstructend
+
+   \TagP^As shown, the wanted AFRelationship can be set
+   by filling the dictionary with the value. The mime type
+   is here detected automatically, but for unknown types it can be set too.
+   See the \texttt{l3pdffile} documentation for details.  Associated files are
+   a concept new in PDF 2.0, but the code currently doesn't check the pdf version, it is your responsability
+   to set it (this can be done with the \texttt{pdfversion} key in \verb+\DeclareDocumentMetadata+). \Pmeti
+
+   \item[\PrintKeyName{AFinline}]
+    \TagP^This key allows to embed an associated file with inline content. The value is some text,
+    which is embedded in the PDF as a text file with mime type text/plain. \Pmeti
+
+   \begin{lstlisting}
+   \tagstructbegin{tag=P,AFinline=Some extra text}
+   \end{lstlisting}
+
+   \item[\PrintKeyName{AFinline-o}]
+    \TagP^This is like verb+AFinline+, but it expands the value once.\Pmeti
+
+   \item[\PrintKeyName{lang}]
+     \TagP^This key allows to set the language for a structure element. The value should be a bcp-identifier,
+     e.g. |de-De|.\Pmeti
+
+   \item[\PrintKeyName{ref}]
+     \TagP^This key allows to add references to other structure elements, it adds the |/Ref| array to the structure.
+       The value should be a comma seperated list of structure labels set with the |label| key.
+     e.g. |ref={label1,label2}|.\Pmeti
+
+   \item[\PrintKeyName{E}]
+     \TagP^This key sets the |/E| key, the expanded form of an abbreviation or an acronym (I couldn't think of a better name, so I sticked to E).\Pmeti
 \end{description}
 
 
 \ExplSyntaxOn
 \DescribeMacro\tagstructend
-\DescribeMacro\uftag_struct_end:
+\DescribeMacro\tag_struct_end:
 \ExplSyntaxOff
 
 \TagP^These commands end a structure. They don't end a group and it doesn't matter if they are in another group as the starting commands.\TagPend
@@ -868,7 +980,7 @@
 
 \ExplSyntaxOn
 \DescribeMacro\tagstructuse{<label>}
-\DescribeMacro\uftag_struct_use:n {<label>}
+\DescribeMacro\tag_struct_use:n {<label>}
 \ExplSyntaxOff
 
 \TagP^These commands insert a structure previously stashed away as kid into the currently active structure. A structure should be used only once, if the structure already has a parent you will get a warning.\TagPend
@@ -901,18 +1013,18 @@
 \tagpdfsetup
  {
   newattribute =
-   {TH-col}{<</Owner /Table /Scope /Column>>},
+   {TH-col}{/Owner /Table /Scope /Column},
   newattribute =
-   {TH-row}{<</Owner /Table /Scope /Row>>},
+   {TH-row}{/Owner /Table /Scope /Row},
   }
 \end{lstlisting}
 \tagmcend\tagstructend
 
 
-\TagP^Attributes are only written to the pdf when used, so it is not a problem to predeclare a number of standard attributes.
+\TagP^Attributes are only written to the \PDF{} when used, so it is not a problem to predeclare a number of standard attributes.
 \TagPend
 
-\TagP^It is your responsability that the content of the dictionary is valid pdf and that the values are sensible!
+\TagP^It is your responsability that the content of the dictionary is valid \PDF{} and that the values are sensible!
 \TagPend
 
 \TagP^Attributes can then be used with the key \PrintKeyName{attribute} or \PrintKeyName{attribute-class} which both take a comma list of attribute names as argument:
@@ -930,13 +1042,13 @@
 
 
 \subsection{Task 3: tree Management}
-\TagP^When all the document content has been correctly marked and the data for the trees has been collected they must be flushed to the pdf. This is done automatically (if the package has been activated) with the following command in \verb+\AfterEndDocument+:\TagPend
+\TagP^When all the document content has been correctly marked and the data for the trees has been collected they must be flushed to the \PDF{}. This is done automatically (if the package has been activated) with the following command in \verb+\AfterEndDocument+:\TagPend
 
 \ExplSyntaxOn
-\DescribeMacro\uftag_finish_structure:
+\DescribeMacro\tag_finish_structure:
 \ExplSyntaxOff
 
-\TagP^This will hopefully write all the needed objects and values to the pdf. (Beside the already mentioned  \texttt{StructTreeRoot} and \texttt{StructElem} objects, additionally a so-called \texttt{ParentTree} is needed which records the parents of all the marked contents bits, a \texttt{Rolemap}, perhaps a \texttt{ClassMap} and object for the attributes, and a few more values and dictionaries).\TagPend
+\TagP^This will hopefully write all the needed objects and values to the \PDF{}. (Beside the already mentioned  \texttt{StructTreeRoot} and \texttt{StructElem} objects, additionally a so-called \texttt{ParentTree} is needed which records the parents of all the marked contents bits, a \texttt{Rolemap}, perhaps a \texttt{ClassMap} and object for the attributes, and a few more values and dictionaries).\TagPend
 
 \TagP^I'm not quite sure if this shouldn't be a really internal command.\TagPend
 
@@ -999,7 +1111,7 @@
 
 \subsection{Lazy and automatic tagging}\label{sec:lazy}
 
-\TagP^A number of features of pdf readers need a fully tagged pdf. As an example screen readers tend to ignore alternative text (see section~\ref{sec:alttext}) if the pdf is not fully tagged. Also reflowing a pdf only works for me (even if real space chars are in the pdf) if the pdf is fully tagged.\TagPend
+\TagP^A number of features of \PDF{} readers need a fully tagged \PDF{}. As an example screen readers tend to ignore alternative text (see section~\ref{sec:alttext}) if the \PDF{} is not fully tagged. Also reflowing a \PDF{} only works for me (even if real space chars are in the \PDF{}) if the \PDF{} is fully tagged.\TagPend
 
 \TagP^This means that even if you don't care about a proper structure you should try to add at least some minimal tagging. With pdflatex this is not easy due to the page break problem. But with lualatex you can use an \texttt{Document} structure and inside it rather large mc-chunks. This minimizes the needed work.\TagPend
 
@@ -1007,14 +1119,34 @@
 \TagPend
 
 
+\subsection{Adding tagging to commands}
+
+\TagP^As mentioned above the mc-markers should not be nested. Basically you write:\TagPend
+
+\tagstructbegin{tag=Code}\tagmcbegin{tag=Code}
+\begin{lstlisting}
+\tagmcbegin{..}some text ...\tagmcend
+<optional structure commands>
+\tagmcbegin{..}some other text\tagmcend
+\end{lstlisting}
+\tagmcend\tagstructend
+
+\TagP^This is quite workable as long as you mark everything manually. But how to write commands, e.g for a tabular or a graphic, that do tagging automatically without breaking the flow and the structure?\TagPend
+
+
+
+
+
+
+
 \section{Alternative text, ActualText and text-to-speech software}\label{sec:alttext}
 
-\TagP^The pdf format allows to add alternative text through the  \PrintKeyName{/Alt} and the \PrintKeyName{/ActualText} key.
+\TagP^The \PDF{} format allows to add alternative text through the  \PrintKeyName{/Alt} and the \PrintKeyName{/ActualText} key.
 %\footnote{
 There is also the \PrintKeyName{/E} key for acronyms but I will ignore it for now.
 Both can be added either to the marked content in the page stream or to the object describing the structure.\TagPend
 
-\TagP^The value of \PrintKeyName{/ActualText} (inserted by \texttt{tagpdf} with \PrintKeyName{actualtext}) is meant to replace single characters or rather small pieces of text. It can be used also without any tagging (e.g. with the package accsupp). If the pdf reader support this (adobe reader does, sumatra not) one can change with it how a piece of text is copied and pasted e.g. to split up a ligature.\TagPend
+\TagP^The value of \PrintKeyName{/ActualText} (inserted by \texttt{tagpdf} with \PrintKeyName{actualtext}) is meant to replace single characters or rather small pieces of text. It can be used also without any tagging (e.g. with the package accsupp). If the \PDF{} reader support this (adobe reader does, sumatra not) one can change with it how a piece of text is copied and pasted e.g. to split up a ligature.\TagPend
 
 \TagP^\PrintKeyName{/Alt} (inserted by \texttt{tagpdf} with \PrintKeyName{alttext}) is a key to improve accessibility: with it one can add to a picture or something else an alternative text.\TagPend
 
@@ -1035,13 +1167,13 @@
 
 \section{Standard type and new tags}\label{sec:new-tag}
 
-\TagP^The pdf reference mentions a number of standard types:
+\TagP^The \PDF{} reference mentions a number of standard types:
 \ExplSyntaxOn
-\clist_use:Nn \c__uftag_role_sttags_clist {,\c_space_tl}
+\clist_use:Nn \c__tag_role_sttags_clist {,\c_space_tl}
 
 \ExplSyntaxOff\TagPend
 
-\TagP^Their meaning can be looked up in the pdf-reference \parencite{pdfreference}.\TagPend
+\TagP^Their meaning can be looked up in the \PDF{}-reference \parencite{pdfreference}.\TagPend
 
 \TagP^New tags can be defined in the setup command with the key \texttt{add-new-tag}. It takes a value consisting of two names separated by a slash. The first is the new name, the second a known (e.g. a standard) tag it should be mapped too. Example:\TagPend
 
@@ -1053,17 +1185,17 @@
 
 \section{\enquote{Real} space glyphs}\label{sec:spacechars}
 
-\TagP^TeX uses only spaces (horizontal movements) to separate words. That means that a pdf reader has to use some heuristic when copying text or reflowing the text to decide if a space is meant as a word boundary or e.g. as a kerning. Accessible document should use real space glyphs (U+0032) from a font in such places.\TagPend
+\TagP^TeX uses only spaces (horizontal movements) to separate words. That means that a \PDF{} reader has to use some heuristic when copying text or reflowing the text to decide if a space is meant as a word boundary or e.g. as a kerning. Accessible document should use real space glyphs (U+0032) from a font in such places.\TagPend
 
 \TagP^With the key \PrintKeyName{interwordspace} you can activate such space glyphs.\TagPend
 
-\TagP^With pdftex this will simply call the primitive \verb+\pdfinterwordspaceon+. pdftex will then insert at various places a char from a font called dummy-space. Attention! This means that at every space there are additional font switches in the pdf: from the current font to the dummy-space font and back again. This will make the pdf larger. As \verb+\pdfinterwordspaceon+ is a primitive function it can't be fine tuned or adapted. You can only turn it on and off and insert manually such a space glyph with \verb+\pdffakespace+.\TagPend
+\TagP^With pdftex this will simply call the primitive \verb+\pdfinterwordspaceon+. pdftex will then insert at various places a char from a font called dummy-space. Attention! This means that at every space there are additional font switches in the \PDF{}: from the current font to the dummy-space font and back again. This will make the \PDF{} larger. As \verb+\pdfinterwordspaceon+ is a primitive function it can't be fine tuned or adapted. You can only turn it on and off and insert manually such a space glyph with \verb+\pdffakespace+.\TagPend
 
 \TagP^With luatex (in luamode) interwordspace is implemented with a lua-function which is inserted in two callbacks and marks up the places where it seems sensible to inter a space glyph. Later in the process (when also the mc-markers are inserted) the space glyphs are injected -- the code will take the glyph from the current font if this has a space glyph or switch to the default latin modern font. The current code works reasonable well in normal text.\TagPend
 
 \TagP^The key \PrintKeyName{show-spaces} will show lines at the places where in lua mode spaces are inserted and so can help you to find problematic places. For listings -- which have a quite specific handling of spaces -- you can find a suggestion in the example \texttt{ex-space-glyph-listings}.\TagPend
 
-\TagP^\emph{Attention:} Even with real spaces copy\& pasting of code doesn't need to give the correct results: you get spaces but not necessarly the right number of spaces. The pdf viewers I tried all copied four real space glyphs as one space. I only got the four spaces with the export to text or xml in the AdobePro.\TagPend
+\TagP^\emph{Attention:} Even with real spaces copy\& pasting of code doesn't need to give the correct results: you get spaces but not necessarly the right number of spaces. The \PDF{} viewers I tried all copied four real space glyphs as one space. I only got the four spaces with the export to text or xml in the AdobePro.\TagPend
 
 \DescribeMacro\pdffakespace
 
@@ -1073,10 +1205,10 @@
 
 \section{Accessibility is not only tagging}
 
-\TagP^A tagged pdf is needed for accessibility but this is not enough. As already mentioned there are more requirements:\TagPend
+\TagP^A tagged \PDF{} is needed for accessibility but this is not enough. As already mentioned there are more requirements:\TagPend
 
  \begin{itemize}
- \item \TagP^The language must be declared by adding a \texttt{/Lang xx-XX} to the pdf catalog or -- if the language changes for a part of the text to the structure or the marked content. Setting the document language can be rather easily done with existing packages or even directly with \verb+\pdfcatalog{/Lang (en-US)}+. For settings in marked content and structure I will have to add keys.\Pmeti
+ \item \TagP^The language must be declared by adding a \texttt{/Lang xx-XX} to the \PDF{} catalog or -- if the language changes for a part of the text to the structure or the marked content. Setting the document language can be rather easily done with existing packages. With the new \PDF{} resource management it should be done with \verb+\pdfmanagement_add:nnn{Catalog}{Lang}{(en-US)}+. For settings in marked content and structure I will have to add keys.\Pmeti
  \item \TagP^All characters must have an unicode representation or a suitable alternative text.
       With lualatex and open type (unicode) fonts this is normally not a problem. With pdflatex it could need\TagPend
       \tagstructbegin{tag=Code}\tagmcbegin{tag=Code}
@@ -1108,7 +1240,7 @@
 \item \TagP^Write more Tests\Pmeti
 \item \TagP^Unicode\Pmeti
 \item \TagP^Hyphenation char\Pmeti
-\item \TagP^Think about included (tagged) pdf. Can one handle them?\Pmeti
+\item \TagP^Think about included (tagged) \PDF{}. Can one handle them?\Pmeti
 \item \TagP^Improve the documentation\Pmeti
 \item \TagP^Tag as proof of concept the documentation (nearly done)\Pmeti
 \item \TagP^Document the code better\Pmeti
@@ -1116,7 +1248,7 @@
 \item \TagP^Find someone to check and improve the lua code\Pmeti
 \item \TagP^Move more things to lua in the luamode\Pmeti
 \item \TagP^Find someone to check and improve the rest of the code\Pmeti
-\item \TagP^Check differences between pdf versions 1.7 and 2.0.\Pmeti
+\item \TagP^Check differences between \PDF{} versions 1.7 and 2.0.\Pmeti
 \item \TagP^bidi?\Pmeti
 \end{itemize}
 
@@ -1124,12 +1256,12 @@
 
 \appendix
 
-\section{Some remarks about the pdf syntax}
+\section{Some remarks about the \PDF{} syntax}
 
 \TagP^This is not meant as a full reference only as a background to make the examples and remarks easier to understand.\TagPend
 
 \begin{description}
-\item[postfix notation] \TagP^pdf uses in various places postfix notation. This means that the operator is behind its arguments:\TagPend
+\item[postfix notation] \TagP^\PDF{} uses in various places postfix notation. This means that the operator is behind its arguments:\TagPend
 
 \tagstructbegin{tag=Figure,alttext={Illustration of postfix notation}}\tagmcbegin{tag=Figure}
 \begin{tikzpicture}[baseline=(c.base)]
@@ -1175,9 +1307,9 @@
 \tagmcend\tagstructend
 \meti
 
-\item[Names] \TagP^pdf knows a sort of variable called a \enquote{name}. Names start with a slash and may include any regular characters, but not delimiter or white-space characters. Uppercase and lowercase letters are considered distinct: \texttt{/A} and \texttt{/a} are different names. \verb+/.notdef+ and \verb+/Adobe#20Green+  are valid names.\TagPend
+\item[Names] \TagP^\PDF{} knows a sort of variable called a \enquote{name}. Names start with a slash and may include any regular characters, but not delimiter or white-space characters. Uppercase and lowercase letters are considered distinct: \texttt{/A} and \texttt{/a} are different names. \verb+/.notdef+ and \verb+/Adobe#20Green+  are valid names.\TagPend
 
-    \TagP^Quite a number of the options of \texttt{tagpdf} actually define such a name which is  later added to the pdf. I recommend \emph{strongly} not to use spaces and exotic chars in such names. While it is possible to escape such names it is rather a pain when moving them through the various lists and commands and quite probably I forgot some place where it is needed.\Pmeti
+    \TagP^Quite a number of the options of \texttt{tagpdf} actually define such a name which is  later added to the \PDF{}. I recommend \emph{strongly} not to use spaces and exotic chars in such names. While it is possible to escape such names it is rather a pain when moving them through the various lists and commands and quite probably I forgot some place where it is needed.\Pmeti
 
 \item[Strings]\TagP^There are two types of strings: \emph{Literal strings} are enclosed in round parentheses. They normally contain a mix of ascii chars and octal numbers:\TagPend
 
@@ -1228,9 +1360,9 @@
 \tagmcend\tagstructend \meti
 
 
- \item[(indirect) objects] \TagP^These are enclosed by the keywords \texttt{obj} (which has two numbers as prefix arguments) and \texttt{endobj}. The first argument is the object number, the second a generation number -- if a pdf is edited objects with a larger generation number can be added. As with pdflatex/lualatex the pdf is always new we can safely assume that the number is always 0. Objects can be referenced in other places with the \texttt{R} operator. The content of an object can be all sort of things.\Pmeti
+ \item[(indirect) objects] \TagP^These are enclosed by the keywords \texttt{obj} (which has two numbers as prefix arguments) and \texttt{endobj}. The first argument is the object number, the second a generation number -- if a \PDF{} is edited objects with a larger generation number can be added. As with pdflatex/lualatex the \PDF{} is always new we can safely assume that the number is always 0. Objects can be referenced in other places with the \texttt{R} operator. The content of an object can be all sort of things.\Pmeti
 
- \item[streams] \TagP^A stream is a sequence of bytes. It can be long and is used for the real content of pdf: text, fonts, content of graphics.
+ \item[streams] \TagP^A stream is a sequence of bytes. It can be long and is used for the real content of \PDF{}: text, fonts, content of graphics.
  A stream starts with a dictionary which at least sets the \texttt{/Length} name to the length of the stream followed by the stream content enclosed by the keywords \texttt{stream} and \texttt{endstream}.
 
  \TagP Here an example of a stream, an object definition and reference. In the object 2 (a page object) the \texttt{/Contents} key references the object 3 and this then contains the text of the page in a stream. \texttt{Tf}, \texttt{Tm} and \texttt{TJ} are (postfix) operators, the first chooses the font with the name \texttt{/F15} at the size 10.9, the second displaces the reference point on the page and the third inserts the text.\TagPend
@@ -1281,5 +1413,5 @@
 \end{description}
 \tagstructend %document
 \end{document}
-%http://msf.mathmlcloud.org/file_formats/8 %sample pdf for math
+%http://msf.mathmlcloud.org/file_formats/8 %sample \PDF{} for math
 

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tikzmark/tikzmark.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaAnnouncement.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaAnnouncement.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaAnnouncement.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaAnnouncement.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaAnnouncement.tex' version 3.10 (2021/02/05),
+%% This is file `DEMO-TUDaAnnouncement.tex' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -25,7 +25,7 @@
 %% Please use the issue tracker for feedback!
 %%
 %% If you need a compiled version of this document, have a look at
-%% http://mirror.ctan.org/tex-archive/macros/latex/contrib/tuda-ci/doc
+%% http://mirror.ctan.org/macros/latex/contrib/tuda-ci/doc
 %% or at the documentation directory of this package (if installed)
 %% <path to your LaTeX distribution>/doc/latex/tuda-ci
 %% ============================================================================

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaBeamer.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaBeamer.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaBeamer.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaBeamer.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaBeamer.tex' version 3.10 (2021/02/05),
+%% This is file `DEMO-TUDaBeamer.tex' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -25,7 +25,7 @@
 %% Please use the issue tracker for feedback!
 %%
 %% If you need a compiled version of this document, have a look at
-%% http://mirror.ctan.org/tex-archive/macros/latex/contrib/tuda-ci/doc
+%% http://mirror.ctan.org/macros/latex/contrib/tuda-ci/doc
 %% or at the documentation directory of this package (if installed)
 %% <path to your LaTeX distribution>/doc/latex/tuda-ci
 %% ============================================================================

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaBibliography.bib
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaBibliography.bib	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaBibliography.bib	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaBibliography.bib' version 3.10 (2021/02/05),
+%% This is file `DEMO-TUDaBibliography.bib' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -25,7 +25,7 @@
 %% Please use the issue tracker for feedback!
 %%
 %% If you need a compiled version of this document, have a look at
-%% http://mirror.ctan.org/tex-archive/macros/latex/contrib/tuda-ci/doc
+%% http://mirror.ctan.org/macros/latex/contrib/tuda-ci/doc
 %% or at the documentation directory of this package (if installed)
 %% <path to your LaTeX distribution>/doc/latex/tuda-ci
 %% ============================================================================

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaExercise.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaExercise.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaExercise.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaExercise.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaExercise.tex' version 3.10 (2021/02/05),
+%% This is file `DEMO-TUDaExercise.tex' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -25,7 +25,7 @@
 %% Please use the issue tracker for feedback!
 %%
 %% If you need a compiled version of this document, have a look at
-%% http://mirror.ctan.org/tex-archive/macros/latex/contrib/tuda-ci/doc
+%% http://mirror.ctan.org/macros/latex/contrib/tuda-ci/doc
 %% or at the documentation directory of this package (if installed)
 %% <path to your LaTeX distribution>/doc/latex/tuda-ci
 %% ============================================================================

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaFromaddress.lco
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaFromaddress.lco	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaFromaddress.lco	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaFromaddress.lco' version 3.10 (2021/02/05),
+%% This is file `DEMO-TUDaFromaddress.lco' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -25,7 +25,7 @@
 %% Please use the issue tracker for feedback!
 %%
 %% If you need a compiled version of this document, have a look at
-%% http://mirror.ctan.org/tex-archive/macros/latex/contrib/tuda-ci/doc
+%% http://mirror.ctan.org/macros/latex/contrib/tuda-ci/doc
 %% or at the documentation directory of this package (if installed)
 %% <path to your LaTeX distribution>/doc/latex/tuda-ci
 %% ============================================================================

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaLeaflet.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaLeaflet.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaLeaflet.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaLeaflet.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaLeaflet.tex' version 3.10 (2021/02/05),
+%% This is file `DEMO-TUDaLeaflet.tex' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -25,7 +25,7 @@
 %% Please use the issue tracker for feedback!
 %%
 %% If you need a compiled version of this document, have a look at
-%% http://mirror.ctan.org/tex-archive/macros/latex/contrib/tuda-ci/doc
+%% http://mirror.ctan.org/macros/latex/contrib/tuda-ci/doc
 %% or at the documentation directory of this package (if installed)
 %% <path to your LaTeX distribution>/doc/latex/tuda-ci
 %% ============================================================================

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaLetter.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaLetter.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaLetter.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaLetter.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaLetter.tex' version 3.10 (2021/02/05),
+%% This is file `DEMO-TUDaLetter.tex' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -25,7 +25,7 @@
 %% Please use the issue tracker for feedback!
 %%
 %% If you need a compiled version of this document, have a look at
-%% http://mirror.ctan.org/tex-archive/macros/latex/contrib/tuda-ci/doc
+%% http://mirror.ctan.org/macros/latex/contrib/tuda-ci/doc
 %% or at the documentation directory of this package (if installed)
 %% <path to your LaTeX distribution>/doc/latex/tuda-ci
 %% ============================================================================
@@ -43,7 +43,7 @@
 %	textwidth=narrow,% Verhindert die Anpassung der Textbreite nach der ersten Seite
 ]{tudaletter}
 
-% Der folgende Block ist nur für die Kompatibilität mit pdfTeX Versionen vor April 2018 notwendig
+% Der folgende Block ist nur für die Kompatibilität mit pdfTeX Versionen vor April 2018 notwendig.
 \usepackage{iftex}
 \ifPDFTeX
 \usepackage[utf8]{inputenc}
@@ -84,14 +84,14 @@
 \end{description}
 }
 
-Für Wiederverwendung der Absenderadresse wurde die Datei \enquote{DEMO"=TUDaFromaddress.lco} angelegt. Sie wird wie bei \KOMAScript{} üblich über
-geladen. Sämtliche dort gesetzten Werte können innerhalb der Briefdatei überschrieben werden.
+Für Wiederverwendung der Absenderadresse wurde die Datei \enquote{DEMO"=TUDaFromaddress.lco} angelegt. Sie wird, wie bei \KOMAScript{} üblich, über 
+\verb+\LoadLetterOption+ geladen. Sämtliche dort gesetzten Werte können innerhalb der Briefdatei überschrieben werden.
 
-Die Adressdatei wird üblicherweise lokal im System installiert, um sie nicht immer mit allen anderen Dateien kopieren zu müssen. Falls Sie dies dürchführen möchten, findet sich eine entsprechende Erklärung am Ende der DEMO"=TUDaFromaddress.lco"=Datei
+Die Adressdatei wird üblicherweise lokal im System installiert, um sie nicht immer mit allen anderen Dateien kopieren zu müssen. Falls Sie dies durchführen möchten, findet sich eine entsprechende Erklärung am Ende der DEMO"=TUDaFromaddress.lco"=Datei.
 
-Eine Besonderheit der Klasse tudaletter, stellt der Unterschied in der Zeilenlänge zwischen der ersten und den folgenden Seiten dar. Da \LaTeX{} grundsätzlich keine Änderung der Zeilenlänge innerhalb eines Absatzes unterstützt, ist hier eine komplexe Implementierung nötig. In einigen speziellen Fällen, kann dieser Mechanismus fehlschlagen. Eine Sammlung an Soderfällen ist bereits implementiert, sollten Sie jedoch auf weiter stoßen, werden wir uns um eine Erweiterung der Implementierung bemühen.
+Eine Besonderheit der Klasse tudaletter stellt der Unterschied in der Zeilenlänge zwischen der ersten und den folgenden Seiten dar. Da \LaTeX{} grundsätzlich keine Änderung der Zeilenlänge innerhalb eines Absatzes unterstützt, ist hier eine komplexe Implementierung nötig. In einigen speziellen Fällen kann dieser Mechanismus fehlschlagen. Eine Sammlung an Soderfällen ist bereits implementiert. Sollten Sie jedoch auf weitere stoßen, werden wir uns um eine Erweiterung der Implementierung bemühen.
 
-Der einfachste Fall um solche Schwierigkeiten zu beheben ist in diesem Beispiel mithilfe der parbox um die Auflistung gezeigt.
+Der einfachste Fall, um solche Schwierigkeiten zu beheben, ist in diesem Beispiel mithilfe des Befehls parbox bei der Auflistung gezeigt.
 
 \closing{Herzliche Grüße}
 

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPhD.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPhD.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPhD.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPhD.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaPhD.tex' version 3.10 (2021/02/05),
+%% This is file `DEMO-TUDaPhD.tex' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -25,7 +25,7 @@
 %% Please use the issue tracker for feedback!
 %%
 %% If you need a compiled version of this document, have a look at
-%% http://mirror.ctan.org/tex-archive/macros/latex/contrib/tuda-ci/doc
+%% http://mirror.ctan.org/macros/latex/contrib/tuda-ci/doc
 %% or at the documentation directory of this package (if installed)
 %% <path to your LaTeX distribution>/doc/latex/tuda-ci
 %% ============================================================================

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPoster.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPoster.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPoster.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPoster.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaPoster.tex' version 3.10 (2021/02/05),
+%% This is file `DEMO-TUDaPoster.tex' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -25,7 +25,7 @@
 %% Please use the issue tracker for feedback!
 %%
 %% If you need a compiled version of this document, have a look at
-%% http://mirror.ctan.org/tex-archive/macros/latex/contrib/tuda-ci/doc
+%% http://mirror.ctan.org/macros/latex/contrib/tuda-ci/doc
 %% or at the documentation directory of this package (if installed)
 %% <path to your LaTeX distribution>/doc/latex/tuda-ci
 %% ============================================================================

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPub.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPub.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPub.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaPub.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaPub.tex' version 3.10 (2021/02/05),
+%% This is file `DEMO-TUDaPub.tex' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -25,7 +25,7 @@
 %% Please use the issue tracker for feedback!
 %%
 %% If you need a compiled version of this document, have a look at
-%% http://mirror.ctan.org/tex-archive/macros/latex/contrib/tuda-ci/doc
+%% http://mirror.ctan.org/macros/latex/contrib/tuda-ci/doc
 %% or at the documentation directory of this package (if installed)
 %% <path to your LaTeX distribution>/doc/latex/tuda-ci
 %% ============================================================================
@@ -256,7 +256,7 @@
 \end{verbatim}
 Wenn der Eintrag selbst Kommata enthalten könnte, dann ist eine Gruppierung um den Eintrag notwendig. Sonst wird der Text nach dem Komma als nächstes Keyword interpretiert.
 
-\minisec{Möglich Probleme mit älteren Systemen:}
+\minisec{Mögliche Probleme mit älteren Systemen:}
 
 Bei älteren \TeX-Distributionen kann es vorkommen, dass die Farbprofile nicht vorinstalliert sind. In diesem Fall wird eine Fehlermeldung im folgenden Sinn erzeugt:
 \begin{verbatim}
@@ -411,7 +411,10 @@
 Das Paket \pck{pdfx}, über welches die PDF/A Kompatibilität erzeugt wird, hat nur einen begrenzten Support für \hologo{XeLaTeX}.
 Es wird eine entsprechende Warnung erzeugt, allerdings kann es bei älteren \hologo{XeLaTeX}-Versionen passieren, dass \pck{pdfx} bereits Fehlermeldungen erzeugt. Abhilfe wird in diesem Fall durch eine Compiler-Wechsel auf \hologo{LuaLaTeX} (welcher ohnehin empfohlen wird) oder durch Abschalten des PDF/A-Modus (\code{pdfa=false})  geschaffen.
 
+\subsection{DVI-Ausgabe}
+Aufgrund der Voreinstellung zur Erzeugung einer PDF/A-Datei ist es nicht möglich TUDa-CI in Standardeinstellungen zur Erzeugung einer DVI-Datei zu nutzen. Ein Großteil der Funktionalität kann jedoch durch Deaktivierung der \code{pdfa}-Option genutzt werden.
 
+
 \subsection{Geschachtelte Akzente (Inkompatibilität zwischen pdfx und amsmath)}
 Es ist nach aktuellem Paketstatus (v3.04) nicht möglich beide Pakete in Kombination ohne weitere Anpassungen so zu verwenden, dass eine Schachtelung von Akzenten möglich ist. Das folgende Beispiel wirft Fehler, sobald \pck{amsmath} direkt oder indirekt geladen wird.
 \begin{verbatim}

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaReport.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaReport.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaReport.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaReport.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaReport.tex' version 3.10 (2021/02/05),
+%% This is file `DEMO-TUDaReport.tex' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -25,7 +25,7 @@
 %% Please use the issue tracker for feedback!
 %%
 %% If you need a compiled version of this document, have a look at
-%% http://mirror.ctan.org/tex-archive/macros/latex/contrib/tuda-ci/doc
+%% http://mirror.ctan.org/macros/latex/contrib/tuda-ci/doc
 %% or at the documentation directory of this package (if installed)
 %% <path to your LaTeX distribution>/doc/latex/tuda-ci
 %% ============================================================================

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaSciPoster.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaSciPoster.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaSciPoster.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaSciPoster.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaSciPoster.tex' version 3.10 (2021/02/05),
+%% This is file `DEMO-TUDaSciPoster.tex' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -25,7 +25,7 @@
 %% Please use the issue tracker for feedback!
 %%
 %% If you need a compiled version of this document, have a look at
-%% http://mirror.ctan.org/tex-archive/macros/latex/contrib/tuda-ci/doc
+%% http://mirror.ctan.org/macros/latex/contrib/tuda-ci/doc
 %% or at the documentation directory of this package (if installed)
 %% <path to your LaTeX distribution>/doc/latex/tuda-ci
 %% ============================================================================

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaThesis.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaThesis.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaThesis.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/DEMO-TUDaThesis.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `DEMO-TUDaThesis.tex' version 3.10 (2021/02/05),
+%% This is file `DEMO-TUDaThesis.tex' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -25,7 +25,7 @@
 %% Please use the issue tracker for feedback!
 %%
 %% If you need a compiled version of this document, have a look at
-%% http://mirror.ctan.org/tex-archive/macros/latex/contrib/tuda-ci/doc
+%% http://mirror.ctan.org/macros/latex/contrib/tuda-ci/doc
 %% or at the documentation directory of this package (if installed)
 %% <path to your LaTeX distribution>/doc/latex/tuda-ci
 %% ============================================================================

Modified: branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/README.md
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/README.md	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/latex/tuda-ci/README.md	2021-02-24 18:00:42 UTC (rev 57872)
@@ -2,7 +2,7 @@
 
  Copyright (C) Marei Peischl <marei at peitex.de>, 2018–2021
 
- tuda-ci 2021/02/05 v3.10
+ tuda-ci 2021/02/22 v3.11
 
 ***************************************************************************
 
@@ -25,9 +25,10 @@
 
 ## Verwendungshinweis
 Die Richtlinien des Corporate Designs (https://www.intern.tu-darmstadt.de/media/medien_stabsstelle_km/services/medien_cd/das_bild_der_tu_darmstadt.pdf), sowie die Anforderungen der Universitätsbibliothek erfordern einige spezielle Konfigurationen. Beispielsweise ist für wissenschaftliche Veröffentlichungen und Abschlussarbeiten die Erzeugung einer archivierbaren PDF-Datei (PDF/A) vorgesehen.
-Dies ist mit aktuellen LaTeX-Paketen und dem Compiler LuaLaTeX deutlich konsequenter umzusetzen.
-Aus diesem Grund wird empfohlen, die verwendete Distribution vorab zu aktualisieren und LuaLaTeX zu verwenden.
-Weitere Hinweise finden sich in den Beispieldateien dokumentiert. Diese sind auch als kompilierte PDFs unter http://mirror.ctan.org/tex-archive/macros/latex/contrib/tuda-ci/doc oder – falls das Paket installiert ist – im ensprechenden Doku-Verzeichnis (<Pfad zu Ihrer LaTeX-Installation>/doc/latex/tuda-ci) verfügbar.
+Dies ist mit aktuellen LaTeX-Paketen und dem Compiler LuaLaTeX deutlich besser umzusetzen, als mit älteren Formaten.
+Aus diesem Grund sollten Sie vor der Verwendung von TUDa-CI Ihre TeX-Distribution aktualisieren und nach Möglichkeit LuaLaTeX als Compiler verwenden.
+Die Nutzung anderer Kompilierungsprogramme ist grundsätzlich möglich, allerdings werden dann ggf. nicht alle Funktionen unterstützt. Es kann sogar notwendig sein, die Erzeugung von PDF/A zu unterbinden.
+Weitere Hinweise finden sich in den Beispieldateien dokumentiert. Diese sind auch als kompilierte PDFs unter http://mirror.ctan.org/macros/latex/contrib/tuda-ci/doc oder – falls das Paket installiert ist – im ensprechenden Doku-Verzeichnis (<Pfad zu Ihrer LaTeX-Installation>/doc/latex/tuda-ci) verfügbar.
 
 ## Abhängigkeiten
 Das Bundle verwendet Pakete der Standard-LaTeX-Distributionen. Bei der Verwendung von paketierten Versionen über die Linux-Paketverwaltung kann dies ggf. zu Schwierigkeiten führen.
@@ -225,4 +226,7 @@
  * v3.10 (2021-02-05)
    - fix \thanks for titlepage=false
    - extend support for all CreativeCommons 4.0 Licenses
-   - improve documentation
\ No newline at end of file
+   - improve documentation
+ * v3.11 (2021-02-22)
+   - Support CMYK in PDF/A
+   - Add Info for DVI-Outputs
\ No newline at end of file

Modified: branches/branch2020/Master/texmf-dist/doc/latex/udesoftec/udesoftec-doc.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/platex/pxjahyper/README-ja.md
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/platex/pxjahyper/README-ja.md	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/platex/pxjahyper/README-ja.md	2021-02-24 18:00:42 UTC (rev 57872)
@@ -70,6 +70,9 @@
 更新履歴
 --------
 
+  * Version 0.7a 〈2021/02/23〉
+      - バグ修正。
+
   * Version 0.7  〈2021/02/13〉
       - 「upLaTeX での hyperref の `unicode` 指定への対応」を正式サポート
         の扱いとする。一部の正常動作しなかった機能についても対応させる。

Modified: branches/branch2020/Master/texmf-dist/doc/platex/pxjahyper/README.md
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/platex/pxjahyper/README.md	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/platex/pxjahyper/README.md	2021-02-24 18:00:42 UTC (rev 57872)
@@ -52,6 +52,7 @@
 Revision History
 ----------------
 
+  * Version 0.7a 〈2021/02/23〉
   * Version 0.7  〈2021/02/13〉
   * Version 0.6a 〈2020/10/10〉
   * Version 0.6  〈2020/10/05〉

Modified: branches/branch2020/Master/texmf-dist/doc/platex/pxjahyper/pxjahyper.pdf
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/doc/platex/pxjahyper/pxjahyper.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/platex/pxjahyper/pxjahyper.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/doc/platex/pxjahyper/pxjahyper.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -6,8 +6,8 @@
 \MakeShortVerb{\|}
 \usepackage{bxtexlogo}
 \bxtexlogoimport{*}
-\newcommand{\PkgVersion}{0.7}
-\newcommand{\PkgDate}{2021/02/13}
+\newcommand{\PkgVersion}{0.7a}
+\newcommand{\PkgDate}{2021/02/23}
 \newcommand{\Pkg}[1]{\textsf{#1}}
 \newcommand{\Meta}[1]{$\langle$\mbox{}#1\mbox{}$\rangle$}
 \newcommand{\Note}{\par\noindent ※}

Modified: branches/branch2020/Master/texmf-dist/ls-R
===================================================================
--- branches/branch2020/Master/texmf-dist/ls-R	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/ls-R	2021-02-24 18:00:42 UTC (rev 57872)
@@ -14646,6 +14646,7 @@
 pdfcprot
 pdfescape
 pdflscape
+pdfmanagement-testphase
 pdfmarginpar
 pdfoverlay
 pdfpagediff
@@ -34771,6 +34772,23 @@
 README.md
 pdflscape.pdf
 
+./doc/latex/pdfmanagement-testphase:
+README.md
+hyperref-generic.pdf
+l3backend-testphase.lua
+l3backend-testphase.pdf
+l3pdfannot.pdf
+l3pdfdict.pdf
+l3pdffile.pdf
+l3pdfmanagement.pdf
+l3pdfmeta.pdf
+l3pdftools.pdf
+l3pdfxform.pdf
+ltdocinit.pdf
+pdfmanagement-firstaid.pdf
+pdfmanagement-testphase.ltx
+pdfmanagement-testphase.pdf
+
 ./doc/latex/pdfmarginpar:
 README
 pdfmarginpar.pdf
@@ -39478,8 +39496,11 @@
 
 ./doc/latex/tagpdf:
 README.md
+ex-AF-file.pdf
+ex-AF-file.tex
 ex-alt-actualtext-luatex.pdf
 ex-alt-actualtext.tex
+ex-attribute-luatex.pdf
 ex-attribute.pdf
 ex-attribute.tex
 ex-formula-problem-luatex.pdf
@@ -39501,6 +39522,7 @@
 ex-structure.tex
 ex-tagpdf-template.pdf
 ex-tagpdf-template.tex
+example-input-file.tex
 link-figure-input.tex
 pac3.PNG
 tagpdf.bib
@@ -189923,6 +189945,7 @@
 pdfcprot
 pdfescape
 pdflscape
+pdfmanagement-testphase
 pdfoverlay
 pdfpages
 pdfpc-movie
@@ -190168,6 +190191,7 @@
 tabularew
 tabulary
 tabvar
+tagpdf
 talk
 tcldoc
 tdsfrmath
@@ -195636,6 +195660,21 @@
 ./source/latex/pdflscape:
 pdflscape.dtx
 
+./source/latex/pdfmanagement-testphase:
+hyperref-generic.dtx
+l3backend-testphase.dtx
+l3pdfannot.dtx
+l3pdfdict.dtx
+l3pdffile.dtx
+l3pdfmanagement.dtx
+l3pdfmeta.dtx
+l3pdftools.dtx
+l3pdfxform.dtx
+ltdocinit.dtx
+pdfmanagement-firstaid.dtx
+pdfmanagement-testphase.dtx
+pdfmanagement-testphase.ins
+
 ./source/latex/pdfoverlay:
 pdfoverlay.dtx
 pdfoverlay.ins
@@ -196906,6 +196945,17 @@
 tabvar.dtx
 tabvar.ins
 
+./source/latex/tagpdf:
+tagpdf-backend.dtx
+tagpdf-checks.dtx
+tagpdf-mc.dtx
+tagpdf-roles.dtx
+tagpdf-space.dtx
+tagpdf-struct.dtx
+tagpdf-tree.dtx
+tagpdf.dtx
+tagpdf.ins
+
 ./source/latex/talk:
 Makefile
 
@@ -197109,7 +197159,6 @@
 
 ./source/latex/tikzmark:
 tikzmark.dtx
-tikzmark.ins
 
 ./source/latex/tikzpagenodes:
 tikzpagenodes.dtx
@@ -209316,6 +209365,7 @@
 pdfcomment
 pdfcprot
 pdflscape
+pdfmanagement-testphase
 pdfmarginpar
 pdfoverlay
 pdfpagediff
@@ -223234,7 +223284,6 @@
 x2fmm.fd
 
 ./tex/latex/microtype:
-README.TEXLIVE
 letterspace.sty
 microtype-luatex.def
 microtype-pdftex.def
@@ -223243,7 +223292,9 @@
 microtype.lua
 microtype.sty
 mt-CharisSIL.cfg
+mt-EBGaramond.cfg
 mt-LatinModernRoman.cfg
+mt-Palatino.cfg
 mt-bch.cfg
 mt-blg.cfg
 mt-cmr.cfg
@@ -225294,6 +225345,24 @@
 ./tex/latex/pdflscape:
 pdflscape.sty
 
+./tex/latex/pdfmanagement-testphase:
+color-ltx.sty
+hgeneric-testphase.def
+hyperref-colorschemes.def
+hyperxmp-patches-tmp-ltx.sty
+l3backend-testphase-dvipdfmx.def
+l3backend-testphase-dvips.def
+l3backend-testphase-dvisvgm.def
+l3backend-testphase-luatex.def
+l3backend-testphase-pdftex.def
+l3backend-testphase-xetex.def
+l3ref-tmp.sty
+pdflscape-ltx.sty
+pdfmanagement-firstaid.sty
+pdfmanagement-testphase.sty
+transparent-ltx.sty
+xcolor-patches-tmp-ltx.sty
+
 ./tex/latex/pdfmarginpar:
 pdfmarginpar.sty
 
@@ -228984,6 +229053,7 @@
 ./tex/latex/tagpdf:
 tagpdf-attr-code.sty
 tagpdf-checks-code.sty
+tagpdf-deprecated.def
 tagpdf-luatex.def
 tagpdf-mc-code-generic.sty
 tagpdf-mc-code-lua.sty

Modified: branches/branch2020/Master/texmf-dist/source/latex/babel/babel.dtx
===================================================================
--- branches/branch2020/Master/texmf-dist/source/latex/babel/babel.dtx	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/source/latex/babel/babel.dtx	2021-02-24 18:00:42 UTC (rev 57872)
@@ -31,7 +31,7 @@
 %
 % \iffalse
 %<*filedriver>
-\ProvidesFile{babel.dtx}[2021/01/26 v3.53 The Babel package]
+\ProvidesFile{babel.dtx}[2021/02/22 v3.54 The Babel package]
 \documentclass{ltxdoc}
 \GetFileInfo{babel.dtx}
 \usepackage{fontspec}
@@ -2408,12 +2408,11 @@
 warns you about what to do if there is a missing string. Very likely
 you will find alerts like that in the |log| file:
 \begin{verbatim}
-Package babel Warning: \mylangchaptername not set. Please, define it
-(babel)                after the language has been loaded (typically
-(babel)                in the preamble) with the help of
-(babel)                \setlocalecaption. An example is:
+Package babel Warning: \chaptername not set for 'mylang'. Please,
+(babel)                define it after the language has been loaded
+(babel)                (typically in the preamble) with:
 (babel)                \setlocalecaption{mylang}{chapter}{..}
-(babel)                Reported on input line 18.
+(babel)                Reported on input line 26.
 \end{verbatim}
 
 In most cases, you will only need to define a few macros. Note
@@ -3445,10 +3444,8 @@
 
 \item[graphics] modifies the |picture| environment so that the whole
 figure is L but the text is R. It \textit{does not} work with the
-standard |picture|, and \textit{pict2e} is required if you want sloped
-lines \textbf{(With recent versions of \LaTeX, this feature has
-stopped working)}. It attempts to do the same for \textsf{pgf/tikz}.
-Somewhat experimental. \New{3.32}.
+standard |picture|, and \textit{pict2e} is required. It attempts to do
+the same for \textsf{pgf/tikz}. Somewhat experimental. \New{3.32}.
 
 \item[extras] is used for miscellaneous readjustments which do not fit into
   the previous groups. Currently redefines in \luatex{} |\underline| and
@@ -4851,8 +4848,8 @@
 % \section{Tools}
 %
 %    \begin{macrocode}
-%<<version=3.53>>
-%<<date=2021/01/26>>
+%<<version=3.54>>
+%<<date=2021/02/22>>
 %    \end{macrocode}
 %
 % \textbf{Do not use the following macros in \texttt{ldf} files. They
@@ -5274,7 +5271,7 @@
        Babel.debug = false }%
    \fi}
 <@Basic macros@>
-  % Temporarily repeat here the code for errors
+  % Temporarily repeat here the code for errors. TODO.
   \def\bbl at error#1#2{%
     \begingroup
       \def\\{\MessageBreak}%
@@ -5297,16 +5294,18 @@
       \def\\{\MessageBreak}%
       \PackageInfo{babel}{#1}%
     \endgroup}
-    \def\bbl at nocaption{\protect\bbl at nocaption@i}
+\def\bbl at nocaption{\protect\bbl at nocaption@i}
+% TODO - Wrong for \today !!! Must be a separate macro.
 \def\bbl at nocaption@i#1#2{% 1: text to be printed 2: caption macro \langXname
   \global\@namedef{#2}{\textbf{?#1?}}%
   \@nameuse{#2}%
-  \bbl at warning{% TODO.
-    \@backslashchar#2 not set. Please, define it\\%
-    after the language has been loaded (typically\\%
-    in the preamble) with the help of\\%
-    \string\setlocalecaption. An example is:\\% 
-    \string\setlocalecaption{mylang}{chapter}{..}\\
+  \edef\bbl at tempa{#1}%
+  \bbl at sreplace\bbl at tempa{name}{}%
+  \bbl at warning{%
+    \@backslashchar#1 not set for '\languagename'. Please,\\%
+    define it after the language has been loaded\\%
+    (typically in the preamble) with\\% 
+    \string\setlocalecaption{\languagename}{\bbl at tempa}{..}\\%
     Reported}}
 \def\bbl at tentative{\protect\bbl at tentative@i}
 \def\bbl at tentative@i#1{%
@@ -7666,6 +7665,7 @@
 \def\bbl at foreign@s#1#2{% TODO - \shapemode, \@setpar, ?\@@par
   \begingroup
     {\par}%
+    \let\bbl at select@opts\@empty
     \let\BabelText\@firstofone
     \foreign at language{#1}%
     \bbl at usehooks{foreign*}{}%
@@ -7938,12 +7938,13 @@
 \def\bbl at nocaption@i#1#2{% 1: text to be printed 2: caption macro \langXname
   \global\@namedef{#2}{\textbf{?#1?}}%
   \@nameuse{#2}%
-  \bbl at warning{%
-    \@backslashchar#2 not set. Please, define it\\%
-    after the language has been loaded (typically\\%
-    in the preamble) with the help of\\%
-    \string\setlocalecaption. An example is\\%
-    \string\setlocalecaption{mylang}{chapter}{..}\\
+  \edef\bbl at tempa{#1}%
+  \bbl at sreplace\bbl at tempa{name}{}%
+  \bbl at warning{% TODO.
+    \@backslashchar#1 not set for '\languagename'. Please,\\%
+    define it after the language has been loaded\\%
+    (typically in the preamble) with:\\% 
+    \string\setlocalecaption{\languagename}{\bbl at tempa}{..}\\%
     Reported}}
 \def\bbl at tentative{\protect\bbl at tentative@i}
 \def\bbl at tentative@i#1{%
@@ -9317,12 +9318,6 @@
 %    attribute being checked, and the third and fourth arguments are
 %    the true and false clauses.
 %
-%    First we need to find out if any attributes were set; if not we're
-%    done. Then we need to check the list of known attributes. When
-%    we're this far |\ifin@| has a value indicating if the attribute in
-%    question was set or not. Just to be safe the code to be executed
-%    is `thrown over the |\fi|'.
-%
 %    \begin{macrocode}
 \def\bbl at ifattributeset#1#2#3#4{%
   \ifx\bbl at known@attribs\@undefined
@@ -9334,8 +9329,7 @@
     \bbl at afterelse#3%
   \else
     \bbl at afterfi#4%
-  \fi
-  }
+  \fi}
 %    \end{macrocode}
 %
 %  \end{macro}
@@ -9347,9 +9341,7 @@
 %    is known and the \TeX-code to be executed otherwise.
 %
 %    We first assume the attribute is unknown. Then we loop over the
-%    list of known attributes, trying to find a match. When a match is
-%    found the definition of |\bbl at tempa| is changed. Finally we
-%    execute |\bbl at tempa|.
+%    list of known attributes, trying to find a match. 
 %
 %    \begin{macrocode}
 \def\bbl at ifknown@ttrib#1#2{%
@@ -9360,8 +9352,7 @@
       \let\bbl at tempa\@firstoftwo
     \else
     \fi}%
-  \bbl at tempa
-}
+  \bbl at tempa}
 %    \end{macrocode}
 %
 %  \end{macro}
@@ -9451,7 +9442,10 @@
 % Some languages need to have |\frenchspacing| in effect. Others
 % don't want that. The command |\bbl at frenchspacing| switches it on
 % when it isn't already in effect and |\bbl at nonfrenchspacing|
-% switches it off if necessary.
+% switches it off if necessary. A more refined way to switch the
+% catcodes is done with |ini| files. Here an auxiliary macro is
+% defined, but the main part is in |\babelprovide|. This new method
+% should be ideally the default one.
 %
 %    \begin{macrocode}
 \def\bbl at frenchspacing{%
@@ -9462,7 +9456,6 @@
     \let\bbl at nonfrenchspacing\nonfrenchspacing
   \fi}
 \let\bbl at nonfrenchspacing\nonfrenchspacing
-%
 \let\bbl at elt\relax
 \edef\bbl at fs@chars{%
   \bbl at elt{\string.}\@m{3000}\bbl at elt{\string?}\@m{3000}%
@@ -9503,7 +9496,7 @@
 %
 % \subsection{Hyphens}
 %
-%  \begin{macro}{\babelhyphenation}
+% \begin{macro}{\babelhyphenation}
 %
 % This macro saves hyphenation exceptions. Two macros are used to
 % store them: |\bbl at hyphenation@| for the global ones and
@@ -9534,7 +9527,7 @@
         \bbl at iflanguage\bbl at tempa{%
           \bbl at csarg\protected at edef{hyphenation@\bbl at tempa}{%
             \bbl at ifunset{bbl at hyphenation@\bbl at tempa}%
-              \@empty
+              {}%
               {\csname bbl at hyphenation@\bbl at tempa\endcsname\space}%
             #2}}}%
     \fi}}
@@ -10667,6 +10660,7 @@
   \let\bbl at KVP@Alph\@nil
   \let\bbl at KVP@labels\@nil
   \bbl at csarg\let{KVP at labels*}\@nil
+  \global\let\bbl at inidata\@empty
   \bbl at forkv{#1}{%  TODO - error handling
     \in@{/}{##1}%
     \ifin@
@@ -10732,7 +10726,8 @@
   % ==
   % At this point all parameters are defined if 'import'. Now we
   % execute some code depending on them. But what about if nothing was
-  % imported? We just set the very basic parameters.
+  % imported? We just set the basic parameters, but still loading the
+  % whole ini file.
   \bbl at load@basic{#2}%
   % == script, language ==
   % Override the values from ini or defines them
@@ -10974,12 +10969,10 @@
       \expandafter\bbl at tempb\bbl at captionslist\@empty
     \else
       \ifx\bbl at initoload\relax
-        \bbl at read@ini{\bbl at KVP@captions}0%  Here letters cat = 11
+        \bbl at read@ini{\bbl at KVP@captions}2%  % Here letters cat = 11
       \else
-        \bbl at read@ini{\bbl at initoload}0%  Here all letters cat = 11
+        \bbl at read@ini{\bbl at initoload}2%     % Same
       \fi
-      \bbl at after@ini
-      \bbl at savestrings
     \fi
   \StartBabelCommands*{#1}{date}%
     \ifx\bbl at KVP@import\@nil
@@ -11031,9 +11024,7 @@
 \def\bbl at provide@renew#1{%
   \ifx\bbl at KVP@captions\@nil\else
     \StartBabelCommands*{#1}{captions}%
-      \bbl at read@ini{\bbl at KVP@captions}0%   Here all letters cat = 11
-      \bbl at after@ini
-      \bbl at savestrings
+      \bbl at read@ini{\bbl at KVP@captions}2%   % Here all letters cat = 11
     \EndBabelCommands
  \fi
  \ifx\bbl at KVP@import\@nil\else
@@ -11046,24 +11037,18 @@
   \ifx\bbl at lbkflag\@empty
     \bbl at provide@hyphens{#1}%
   \fi}
+%    \end{macrocode}
+%
 % Load the basic parameters (ids, typography, counters, and a few
 % more), while captions and dates are left out. But it may happen some
 % data has been loaded before automatically, so we first discard the
 % saved values.
-\def\bbl at linebreak@export{%
-  \bbl at exportkey{lnbrk}{typography.linebreaking}{h}%
-  \bbl at exportkey{hyphr}{typography.hyphenrules}{}%
-  \bbl at exportkey{lfthm}{typography.lefthyphenmin}{2}%
-  \bbl at exportkey{rgthm}{typography.righthyphenmin}{3}%         
-  \bbl at exportkey{prehc}{typography.prehyphenchar}{}%
-  \bbl at exportkey{hyotl}{typography.hyphenate.other.locale}{}%
-  \bbl at exportkey{hyots}{typography.hyphenate.other.script}{}%
-  \bbl at exportkey{intsp}{typography.intraspace}{}%
-  \bbl at exportkey{chrng}{characters.ranges}{}}
+%
+%    \begin{macrocode}
 \def\bbl at load@basic#1{%
   \bbl at ifunset{bbl at inidata@\languagename}{}%
     {\getlocaleproperty\bbl at tempa{\languagename}{identification/load.level}%
-     \ifcase\bbl at tempa\else
+     \ifcase\bbl at tempa
        \bbl at csarg\let{lname@\languagename}\relax
      \fi}%
   \bbl at ifunset{bbl at lname@#1}% 
@@ -11071,10 +11056,7 @@
        \begingroup
          \let\bbl at ini@captions at aux\@gobbletwo
          \def\bbl at inidate ####1.####2.####3.####4\relax ####5####6{}%
-         \bbl at read@ini{##1}0%
-         \bbl at linebreak@export
-         \bbl at exportkey{dgnat}{numbers.digits.native}{}%
-         \bbl at exportkey{frspc}{typography.frenchspacing}{u}% unset
+         \bbl at read@ini{##1}1%
          \ifx\bbl at initoload\relax\endinput\fi
        \endgroup}%
      \begingroup       % boxed, to avoid extra spaces:
@@ -11126,14 +11108,10 @@
     {\bbl at exp{\\\adddialect\<l@#1>\bbl at tempa}}}% found in opt list or ini
 %    \end{macrocode}
 %
-% The reader of |ini| files. There are 3 possible cases: a section name
-% (in the form |[...]|), a comment (starting with |;|) and a
-% key/value pair.
+% The reader of |babel-...tex| files. We reset temporarily some
+% catcodes.
 %
 %    \begin{macrocode}
-\ifx\bbl at readstream\@undefined
-  \csname newread\endcsname\bbl at readstream
-\fi
 \def\bbl at input@texini#1{%
   \bbl at bsphack
     \bbl at exp{%
@@ -11145,20 +11123,51 @@
       \catcode`\\\{=\the\catcode`\{\relax
       \catcode`\\\}=\the\catcode`\}\relax}%
   \bbl at esphack}
-\def\bbl at inipreread#1=#2\@@{%
-  \bbl at trim@def\bbl at tempa{#1}% Redundant below !!
+%    \end{macrocode}
+%
+% The following macros read and store |ini| files (but don't process
+% them). For each line, there are 3 possible actions: ignore if starts
+% with |;|, switch section if starts with |[|, and store otherwise.
+% There are used in the first step of |\bbl at read@ini|.
+%
+%    \begin{macrocode}
+\def\bbl at iniline#1\bbl at iniline{%
+  \@ifnextchar[\bbl at inisect{\@ifnextchar;\bbl at iniskip\bbl at inistore}#1\@@}% ]
+\def\bbl at inisect[#1]#2\@@{\def\bbl at section{#1}}% 
+\def\bbl at iniskip#1\@@{}%      if starts with ;
+\def\bbl at inistore#1=#2\@@{%      full (default)
+  \bbl at trim@def\bbl at tempa{#1}%
   \bbl at trim\toks@{#2}%
-  % Move trims here ??
   \bbl at ifunset{bbl at KVP@\bbl at section/\bbl at tempa}%
     {\bbl at exp{%
-       \\\g at addto@macro\\\bbl at inidata{%
-         \\\bbl at elt{\bbl at section}{\bbl at tempa}{\the\toks@}}}%
-     \expandafter\bbl at inireader\bbl at tempa=#2\@@}%
+      \\\g at addto@macro\\\bbl at inidata{%
+        \\\bbl at elt{\bbl at section}{\bbl at tempa}{\the\toks@}}}}%
     {}}%
-\def\bbl at fetch@ini#1#2{%
-  \bbl at exp{\def\\\bbl at inidata{%
-    \\\bbl at elt{identification}{tag.ini}{#1}%
-    \\\bbl at elt{identification}{load.level}{#2}}}%
+\def\bbl at inistore@min#1=#2\@@{%  minimal (maybe set in \bbl at read@ini)
+  \bbl at trim@def\bbl at tempa{#1}%
+  \bbl at trim\toks@{#2}%
+  \bbl at xin@{.identification.}{.\bbl at section.}%
+  \ifin@
+    \bbl at exp{\\\g at addto@macro\\\bbl at inidata{%
+      \\\bbl at elt{identification}{\bbl at tempa}{\the\toks@}}}%
+  \fi}%
+%    \end{macrocode}
+%
+% Now, the ‘main loop’, which \textbf{**must be executed inside a
+% group**}. At this point, |\bbl at inidata| may contain data declared in
+% |\babelprovide|, with ‘slashed’ keys. There are 3 steps: first read
+% the ini file and store it; then traverse the stored values, and
+% process some groups if required (date, captions, labels, counters);
+% finally, ‘export’ some values by defining global macros
+% (identification, typography, characters, numbers). The second
+% argument is 0 when called to read the minimal data for fonts; with
+% |\babelprovide| it's either 1 or 2.
+%
+%    \begin{macrocode}
+\ifx\bbl at readstream\@undefined
+  \csname newread\endcsname\bbl at readstream
+\fi
+\def\bbl at read@ini#1#2{%
   \openin\bbl at readstream=babel-#1.ini
   \ifeof\bbl at readstream
     \bbl at error
@@ -11167,12 +11176,20 @@
        is not complete.}%
       {Fix the name or reinstall babel.}%
   \else
+    % Store ini data in \bbl at inidata
     \catcode`\[=12 \catcode`\]=12 \catcode`\==12 \catcode`\&=12
     \catcode`\;=12 \catcode`\|=12 \catcode`\%=14 \catcode`\-=12
     \bbl at info{Importing
-                \ifcase#2 \or font and identification \or basic \fi
-                data for \languagename\\%
+                \ifcase#2font and identification \or basic \fi
+                 data for \languagename\\%
               from babel-#1.ini. Reported}%
+    \ifnum#2=\z@
+      \global\let\bbl at inidata\@empty
+      \let\bbl at inistore\bbl at inistore@min    % Remember it's local
+    \fi
+    \def\bbl at section{identification}%
+    \bbl at exp{\\\bbl at inistore tag.ini=#1\\\@@}%
+    \bbl at inistore load.level=#2\@@
     \loop
     \if T\ifeof\bbl at readstream F\fi T\relax % Trick, because inside \loop
       \endlinechar\m at ne
@@ -11182,95 +11199,70 @@
         \expandafter\bbl at iniline\bbl at line\bbl at iniline
       \fi
     \repeat
+    % Process stored data
+    \bbl at csarg\xdef{lini@\languagename}{#1}%
+    \let\bbl at savestrings\@empty
+    \let\bbl at savetoday\@empty
+    \let\bbl at savedate\@empty
+    \def\bbl at elt##1##2##3{%
+      \def\bbl at section{##1}%
+      \in@{=date.}{=##1}% Find a better place
+      \ifin@
+        \bbl at ini@calendar{##1}%
+      \fi
+      \global\bbl at csarg\let{bbl at KVP@##1/##2}\relax
+      \bbl at ifunset{bbl at inikv@##1}{}%
+        {\csname bbl at inikv@##1\endcsname{##2}{##3}}}%
+    \bbl at inidata
+    % 'Export' data
+    \bbl at ini@exports{#2}%
+    \global\bbl at csarg\let{inidata@\languagename}\bbl at inidata
+    \global\let\bbl at inidata\@empty
+    \bbl at exp{\\\bbl at add@list\\\bbl at ini@loaded{\languagename}}%
+    \bbl at toglobal\bbl at ini@loaded
   \fi}
-\def\bbl at read@ini#1#2{%
-  \bbl at csarg\xdef{lini@\languagename}{#1}%
-  \let\bbl at section\@empty
-  \let\bbl at savestrings\@empty
-  \let\bbl at savetoday\@empty
-  \let\bbl at savedate\@empty
-  \let\bbl at inireader\bbl at iniskip
-  \bbl at fetch@ini{#1}{#2}%
-  \bbl at foreach\bbl at renewlist{%
-    \bbl at ifunset{bbl at renew@##1}{}{\bbl at inisec[##1]\@@}}%
-  \global\let\bbl at renewlist\@empty
-  % Ends last section. See \bbl at inisec
-  \def\bbl at elt##1##2{\bbl at inireader##1=##2\@@}%
-  \bbl at cs{renew@\bbl at section}%
-  \global\bbl at csarg\let{renew@\bbl at section}\relax
-  \bbl at cs{secpost@\bbl at section}%  
-  \bbl at csarg{\global\expandafter\let}{inidata@\languagename}\bbl at inidata
-  \bbl at exp{\\\bbl at add@list\\\bbl at ini@loaded{\languagename}}%
-  \bbl at toglobal\bbl at ini@loaded}
-\def\bbl at iniline#1\bbl at iniline{%
-  \@ifnextchar[\bbl at inisec{\@ifnextchar;\bbl at iniskip\bbl at inipreread}#1\@@}% ]
 %    \end{macrocode}
 %
-% The special cases for comment lines and sections are handled by the
-% two following commands. In sections, we provide the posibility to
-% take extra actions at the end or at the start. By default, key=val
-% pairs are ignored. The |secpost| ``hook'' is used only by
-% `identification', while |secpre| only by |date.gregorian.licr|.
+% A somewhat hackish tool to handle calendar sections. To be improved.
 %
 %    \begin{macrocode}
-\def\bbl at iniskip#1\@@{}%      if starts with ;
-\def\bbl at inisec[#1]#2\@@{%    if starts with opening bracket
-  \def\bbl at elt##1##2{%
-    \expandafter\toks@\expandafter{%
-      \expandafter{\bbl at section}{##1}{##2}}%
-    \bbl at exp{%
-      \\\g at addto@macro\\\bbl at inidata{\\\bbl at elt\the\toks@}}%
-    \bbl at inireader##1=##2\@@}%
-  \bbl at cs{renew@\bbl at section}%
-  \global\bbl at csarg\let{renew@\bbl at section}\relax
-  \bbl at cs{secpost@\bbl at section}%
-  % The previous code belongs to the previous section.
-  % --------------------------
-  % Now start the current one.
-  \in@{=date.}{=#1}%
-  \ifin@
-    \lowercase{\def\bbl at tempa{=#1=}}%
-    \bbl at replace\bbl at tempa{=date.gregorian}{}%
-    \bbl at replace\bbl at tempa{=date.}{}%
-    \in@{.licr=}{#1=}%
-    \ifin@
-      \ifcase\bbl at engine
-        \bbl at replace\bbl at tempa{.licr=}{}%
-      \else
-        \let\bbl at tempa\relax
-      \fi
-    \fi
-    \ifx\bbl at tempa\relax\else
-      \bbl at replace\bbl at tempa{=}{}%
-      \bbl at exp{%
-        \def\<bbl at inikv@#1>####1=####2\\\@@{% 
-          \\\bbl at inidate####1...\relax{####2}{\bbl at tempa}}}%
-    \fi
-  \fi
-  \def\bbl at section{#1}% 
-  \def\bbl at elt##1##2{%
-    \@namedef{bbl at KVP@#1/##1}{}}%
-  \bbl at cs{renew@#1}%
-  \bbl at cs{secpre@#1}%  pre-section `hook'
-  \bbl at ifunset{bbl at inikv@#1}%
-    {\let\bbl at inireader\bbl at iniskip}%
-    {\bbl at exp{\let\\\bbl at inireader\<bbl at inikv@#1>}}}
-\let\bbl at renewlist\@empty
-\def\bbl at renewinikey#1/#2\@@#3{%
-  \bbl at ifunset{bbl at renew@#1}%
-    {\bbl at add@list\bbl at renewlist{#1}}%
-    {}%
-  \bbl at csarg\bbl at add{renew@#1}{\bbl at elt{#2}{#3}}}
+\def\bbl at ini@calendar#1{%
+ \lowercase{\def\bbl at tempa{=#1=}}%
+ \bbl at replace\bbl at tempa{=date.gregorian}{}%
+ \bbl at replace\bbl at tempa{=date.}{}%
+ \in@{.licr=}{#1=}%
+ \ifin@
+   \ifcase\bbl at engine
+     \bbl at replace\bbl at tempa{.licr=}{}%
+   \else
+     \let\bbl at tempa\relax
+   \fi
+ \fi
+ \ifx\bbl at tempa\relax\else
+   \bbl at replace\bbl at tempa{=}{}%
+   \bbl at exp{%
+     \def\<bbl at inikv@#1>####1####2{% 
+       \\\bbl at inidate####1...\relax{####2}{\bbl at tempa}}}%
+ \fi}
 %    \end{macrocode}
 %
-% Reads a key=val line and stores the trimmed val in
-% |\bbl@@kv@<section>.<key>|.
+% A key with a slash in |\babelprovide| replaces the value in the |ini|
+% file (which is ignored altogether). The mechanism is simple (but
+% suboptimal): add the data to the |ini| one (at this point the |ini|
+% file has not yet been read), and define a dummy macro. When the |ini|
+% file is read, just skip the corresponding key and reset the macro (in
+% |\bbl at inistore| above).
+% 
 %
 %    \begin{macrocode}
-\def\bbl at inikv#1=#2\@@{%     key=value
-  \bbl at trim@def\bbl at tempa{#1}%
-  \bbl at trim\toks@{#2}%
-  \bbl at csarg\edef{@kv@\bbl at section.\bbl at tempa}{\the\toks@}}
+\def\bbl at renewinikey#1/#2\@@#3{%
+  \edef\bbl at tempa{\zap at space #1 \@empty}%   section
+  \edef\bbl at tempb{\zap at space #2 \@empty}%   key
+  \bbl at trim\toks@{#3}%                      value
+  \bbl at exp{%
+    \global\let\<bbl at KVP@\bbl at tempa/\bbl at tempb>\\\@empty % just a flag
+    \\\g at addto@macro\\\bbl at inidata{%
+       \\\bbl at elt{\bbl at tempa}{\bbl at tempb}{\the\toks@}}}}%
 %    \end{macrocode}
 %
 % The previous assignments are local, so we need to export them. If
@@ -11289,7 +11281,7 @@
 %
 % Key-value pairs are treated differently depending on the section in
 % the |ini| file. The following macros are the readers for
-% |identification| and |typography|. Note |\bbl at secpost@identification|
+% |identification| and |typography|. Note |\bbl at ini@exports|
 % is called always (via |\bbl at inisec|), while |\bbl at after@ini| must be
 % called explicitly after |\bbl at read@ini| if necessary.
 %
@@ -11301,8 +11293,8 @@
        \bbl at cs{@kv at identification.warning#1}\\%
        Reported }}}
 %
-\let\bbl at inikv@identification\bbl at inikv
-\def\bbl at secpost@identification{%
+\def\bbl at ini@exports#1{%
+  % Identification always exported
   \bbl at iniwarning{}%
   \ifcase\bbl at engine
     \bbl at iniwarning{.pdflatex}%
@@ -11322,15 +11314,46 @@
     {\csname bbl at esname@\languagename\endcsname}}%
   \bbl at exportkey{sbcp}{identification.script.tag.bcp47}{}%
   \bbl at exportkey{sotf}{identification.script.tag.opentype}{DFLT}%
+  % Also maps bcp47 -> languagename
   \ifbbl at bcptoname
     \bbl at csarg\xdef{bcp at map@\bbl at cl{tbcp}}{\languagename}%
+  \fi
+  % Conditional
+  \ifnum#1>\z@         % 0 = only info, 1, 2 = basic, (re)new
+    \bbl at exportkey{lnbrk}{typography.linebreaking}{h}%
+    \bbl at exportkey{hyphr}{typography.hyphenrules}{}%
+    \bbl at exportkey{lfthm}{typography.lefthyphenmin}{2}%
+    \bbl at exportkey{rgthm}{typography.righthyphenmin}{3}%         
+    \bbl at exportkey{prehc}{typography.prehyphenchar}{}%
+    \bbl at exportkey{hyotl}{typography.hyphenate.other.locale}{}%
+    \bbl at exportkey{hyots}{typography.hyphenate.other.script}{}%
+    \bbl at exportkey{intsp}{typography.intraspace}{}%
+    \bbl at exportkey{chrng}{characters.ranges}{}%
+    \bbl at exportkey{dgnat}{numbers.digits.native}{}%
+    \bbl at exportkey{frspc}{typography.frenchspacing}{u}%
+    \ifnum#1=\tw@           % only (re)new
+      \bbl at exportkey{rqtex}{identification.require.babel}{}%
+      \bbl at toglobal\bbl at savetoday
+      \bbl at toglobal\bbl at savedate
+      \bbl at savestrings
+    \fi
   \fi}
 %    \end{macrocode}
 %
+% A shared handler for key=val lines to be stored in
+% |\bbl@@kv@<section>.<key>|.
+%
+%    \begin{macrocode}
+\def\bbl at inikv#1#2{%     key=value
+  \toks@{#2}%            This hides #'s from ini values
+  \bbl at csarg\edef{@kv@\bbl at section.#1}{\the\toks@}}
+%    \end{macrocode}
+%
 % By default, the following sections are just read. Actions are taken
 % later.
 %
 %    \begin{macrocode}
+\let\bbl at inikv@identification\bbl at inikv
 \let\bbl at inikv@typography\bbl at inikv
 \let\bbl at inikv@characters\bbl at inikv
 \let\bbl at inikv@numbers\bbl at inikv
@@ -11342,7 +11365,7 @@
 % the ‘units’. 
 %
 %    \begin{macrocode}
-\def\bbl at inikv@counters#1=#2\@@{%
+\def\bbl at inikv@counters#1#2{%
   \bbl at ifsamestring{#1}{digits}%
     {\bbl at error{The counter name 'digits' is reserved for mapping\\%
                 decimal digits}%
@@ -11365,13 +11388,6 @@
     \expandafter\bbl at buildifcase\bbl at tempb* \\ % Space after \\
     \bbl at csarg{\global\expandafter\let}{cntr@#1@\languagename}\bbl at tempa
   \fi}
-\def\bbl at after@ini{%
-  \bbl at linebreak@export
-  \bbl at exportkey{dgnat}{numbers.digits.native}{}%
-  \bbl at exportkey{rqtex}{identification.require.babel}{}%
-  \bbl at exportkey{frspc}{typography.frenchspacing}{u}% unset
-  \bbl at toglobal\bbl at savetoday
-  \bbl at toglobal\bbl at savedate}
 %    \end{macrocode}
 %
 % Now |captions| and |captions.licr|, depending on the engine. And
@@ -11381,10 +11397,10 @@
 %
 %    \begin{macrocode}
 \ifcase\bbl at engine
-  \bbl at csarg\def{inikv at captions.licr}#1=#2\@@{%
+  \bbl at csarg\def{inikv at captions.licr}#1#2{%
     \bbl at ini@captions at aux{#1}{#2}}
 \else
-  \def\bbl at inikv@captions#1=#2\@@{%
+  \def\bbl at inikv@captions#1#2{%
     \bbl at ini@captions at aux{#1}{#2}}
 \fi
 %    \end{macrocode}
@@ -11445,7 +11461,7 @@
   \bbl at ifunset{bbl at map@#1@\languagename}%
     {\@nameuse{#1}}%
     {\@nameuse{bbl at map@#1@\languagename}}}
-\def\bbl at inikv@labels#1=#2\@@{%
+\def\bbl at inikv@labels#1#2{%
   \in@{.map}{#1}%
   \ifin@
     \ifx\bbl at KVP@labels\@nil\else
@@ -11665,7 +11681,7 @@
 %    \begin{macrocode}
 \def\bbl at provide@lsys#1{%
   \bbl at ifunset{bbl at lname@#1}%
-    {\bbl at ini@basic{#1}}%
+    {\bbl at load@info{#1}}%
     {}%
   \bbl at csarg\let{lsys@#1}\@empty
   \bbl at ifunset{bbl at sname@#1}{\bbl at csarg\gdef{sname@#1}{Default}}{}%
@@ -11717,14 +11733,13 @@
 % must be enabled. This means we must make sure a few characters are
 % not active. The |ini| is not read directly, but with a proxy |tex|
 % file named as the language (which means any code in it must be
-% skipped, too.
+% skipped, too).
 %
 %    \begin{macrocode}
-\def\bbl at ini@basic#1{%
+\def\bbl at load@info#1{%
   \def\BabelBeforeIni##1##2{%
     \begingroup
-      \bbl at add\bbl at secpost@identification{\closein\bbl at readstream }%
-      \bbl at read@ini{##1}1%    
+      \bbl at read@ini{##1}0%
       \endinput          % babel- .tex may contain onlypreamble's
     \endgroup}%            boxed, to avoid extra spaces:
   {\bbl at input@texini{#1}}}
@@ -11850,7 +11865,7 @@
 \newcommand\BabelEnsureInfo{%
   \ifx\InputIfFileExists\@undefined\else
     \def\bbl at ensureinfo##1{%
-      \bbl at ifunset{bbl at lname@##1}{\bbl at ini@basic{##1}}{}}%
+      \bbl at ifunset{bbl at lname@##1}{\bbl at load@info{##1}}{}}%
   \fi
   \bbl at foreach\bbl at loaded{{%
     \def\languagename{##1}%
@@ -13373,7 +13388,7 @@
   \let\bbl at cjkintraspace\relax
   \directlua{
     Babel = Babel or {}
-    require'babel-data-cjk.lua'
+    require('babel-data-cjk.lua')
     Babel.cjk_enabled = true
     function Babel.cjk_linebreak(head)
       local GLYPH = node.id'glyph'
@@ -14276,21 +14291,86 @@
      \ifcase\bbl at thetextdir
        \let\bbl at pictresetdir\relax
      \else
-       \bodydir TLT
+       \ifcase#1\bodydir TLT  % Remember this sets the inner boxes
+         \or\textdir TLT
+         \else\bodydir TLT \textdir TLT
+       \fi
        % \(text|par)dir required in pgf:
        \def\bbl at pictresetdir{\bodydir TRT\pardir TRT\textdir TRT\relax}%
      \fi}%
    \ifx\AddToHook\@undefined\else
-     \AddToHook{env/picture/begin}{\bbl at pictsetdir\z@}%
+     \AddToHook{env/picture/begin}{\bbl at pictsetdir\tw@}%
+     \directlua{
+       Babel.get_picture_dir = true
+       Babel.picture_has_bidi = 0
+       function Babel.picture_dir (head)
+         if not Babel.get_picture_dir then return head end
+         for item in node.traverse(head) do
+           if item.id == node.id'glyph' then
+             local itemchar = item.char
+             % TODO. Copypaste pattern from Babel.bidi (-r)
+             local chardata = Babel.characters[itemchar]
+             local dir = chardata and chardata.d or nil
+             if not dir then
+               for nn, et in ipairs(Babel.ranges) do
+                 if itemchar < et[1] then
+                   break
+                 elseif itemchar <= et[2] then
+                   dir = et[3]
+                   break
+                 end
+               end
+             end
+             if dir and (dir == 'al' or dir == 'r') then
+               Babel.picture_has_bidi = 1
+             end
+           end
+         end
+         return head
+       end
+       luatexbase.add_to_callback("hpack_filter", Babel.picture_dir,
+         "Babel.picture_dir")
+     }%
+   \AtBeginDocument{%
+     \long\def\put(#1,#2)#3{%
+       \@killglue 
+       % Try:
+       \ifx\bbl at pictresetdir\relax
+         \def\bbl at tempc{0}%
+       \else
+         \directlua{
+           Babel.get_picture_dir = true
+           Babel.picture_has_bidi = 0
+         }%
+         \setbox\z@\hb at xt@\z@{%
+           \@defaultunitsset\@tempdimc{#1}\unitlength
+           \kern\@tempdimc
+           #3\hss}%
+         \edef\bbl at tempc{\directlua{tex.print(Babel.picture_has_bidi)}}%
+       \fi
+       % Do:
+       \@defaultunitsset\@tempdimc{#2}\unitlength
+       \raise\@tempdimc\hb at xt@\z@{%
+         \@defaultunitsset\@tempdimc{#1}\unitlength
+         \kern\@tempdimc
+         {\ifnum\bbl at tempc>\z@\bbl at pictresetdir\fi#3}\hss}% 
+       \ignorespaces}%
+       \MakeRobust\put}%
    \fi
    \AtBeginDocument
      {\ifx\tikz at atbegin@node\@undefined\else
         \let\bbl at OL@pgfpicture\pgfpicture
         \bbl at sreplace\pgfpicture{\pgfpicturetrue}%
-          {\bbl at pictsetdir\@ne\pgfpicturetrue}%
-        \bbl at add\pgfsys at beginpicture{\bbl at pictsetdir\@ne}%
+          {\bbl at pictsetdir\z@\pgfpicturetrue}%
+        \bbl at add\pgfsys at beginpicture{\bbl at pictsetdir\z@}%
         \bbl at add\tikz at atbegin@node{\bbl at pictresetdir}%
-      \fi}}
+        \bbl at sreplace\tikz{\begingroup}%
+          {\begingroup\bbl at pictsetdir\tw@}%
+      \fi
+      \ifx\AddToHook\@undefined\else
+        \AddToHook{env/tcolorbox/begin}{\bbl at pictsetdir\@ne}%
+      \fi
+      }}
   {}
 %    \end{macrocode}
 %

Modified: branches/branch2020/Master/texmf-dist/source/latex/babel/babel.ins
===================================================================
--- branches/branch2020/Master/texmf-dist/source/latex/babel/babel.ins	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/source/latex/babel/babel.ins	2021-02-24 18:00:42 UTC (rev 57872)
@@ -26,7 +26,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 %%
-\def\filedate{2021/01/26}
+\def\filedate{2021/02/22}
 \def\batchfile{babel.ins}
 \input docstrip.tex
 

Modified: branches/branch2020/Master/texmf-dist/source/latex/babel/bbcompat.dtx
===================================================================
--- branches/branch2020/Master/texmf-dist/source/latex/babel/bbcompat.dtx	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/source/latex/babel/bbcompat.dtx	2021-02-24 18:00:42 UTC (rev 57872)
@@ -30,7 +30,7 @@
 %
 % \iffalse
 %<*dtx>
-\ProvidesFile{bbcompat.dtx}[2021/01/26 v3.53]
+\ProvidesFile{bbcompat.dtx}[2021/02/22 v3.54]
 %</dtx>
 %
 %% File 'bbcompat.dtx'

Modified: branches/branch2020/Master/texmf-dist/source/latex/babel/locale.zip
===================================================================
(Binary files differ)

Modified: branches/branch2020/Master/texmf-dist/source/latex/microtype/microtype-utf.dtx
===================================================================
--- branches/branch2020/Master/texmf-dist/source/latex/microtype/microtype-utf.dtx	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/source/latex/microtype/microtype-utf.dtx	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,11 +1,11 @@
 %\iffalse meta-comment
 % !Mode:: "TeX:DTX:UK"
 % !smartQuote:: "English"
-% !DTXversion:: "2.8"
+% !DTXversion:: "2.8a"
 % ------------------------------------------------------------------------
 %                       The `microtype' package
 %         Subliminal refinements towards typographical perfection
-%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %
 % This work may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License, either version 1.3c of this license or (at
@@ -26,11 +26,13 @@
 %
 \ProvidesFile
 %<*driver>
-    {\jobname.dtx}[2020/12/07 v2.8]
+    {\jobname.dtx}[2021/02/22 v2.8a]
 %</driver>
 %<CharisSIL>  {mt-CharisSIL.cfg}[2017/07/07 v1.1 microtype config. file: Charis SIL (RS)]
-%<LatinModernRoman>  {mt-LatinModernRoman.cfg}[2013/03/13 v1.0 microtype config. file: Latin Modern Roman (RS)]
-%<PalatinoLinotype>  {mt-PalatinoLinotype.cfg}[2012/03/10 v1.0 microtype config. file: Palatino Linotype and similar fonts (LBD)]
+%<LatinModernRoman>  {mt-LatinModernRoman.cfg}[2021/02/21 v1.1 microtype config. file: Latin Modern Roman (RS)]
+%<Palatino>  {mt-Palatino.cfg}[2012/03/10 v1.0 microtype config. file: Palatino and similar fonts (LBD)]
+%<Lato>  {mt-Lato.cfg}[2021/02/22 v1.0 microtype config. file: Lato (RS)]
+%<FontAwesome>  {mt-FontAwesome.cfg}[2021/02/22 v1.0 microtype config. file: Font Awesome (RS)]
 %<*driver>
 \documentclass[10pt,a4paper]{ltxdoc}
 \usepackage{fontspec}
@@ -44,7 +46,10 @@
  \def\setmacrofont#1{\par\def\macro at font{#1}\footnotesize}
  \newfontface\LMR{Latin Modern Roman}
  \newfontface\CharisSIL{Charis SIL}
- \newfontface\PalatinoLinotype{TeX Gyre Pagella}
+ \newfontface\Palatino{TeX Gyre Pagella}
+% \newfontface\Palatino[RawFeature={fallback=charisfallback}]{TeX Gyre Pagella}
+% \directlua{luaotfload.add_fallback("charisfallback",{"CharisSIL:color=F70A12;mode=harf;"})}
+ \newfontface\Lato{Lato}
 \usepackage{luacode}
 \tracinglostchars2
 % we replace any missing characters (in Palatino) with CharisSIL
@@ -114,6 +119,11 @@
 %\StopEventually{}
 %
 % ^^A -------------------------------------------------------------------------
+%\GeneralChanges*
+%\changes{v2.8a}{2021/02/22}{rename \file{mt-PalatinoLinotype.cfg} to \file{mt-Palatino.cfg}
+%                            (requested by \contributor Karl Berry <karl\at freefriends.org>)}
+%                            ^^A private mail, 2021/02/22
+%
 %\GeneralChanges{Documentation}
 %\changes{v2.5a}{2013/05/15}{include OpenType configuration files}
 %\changes{v2.6}{2015/12/07}{missing characters printed with Charis <SIL>}
@@ -134,9 +144,9 @@
 %           Latin Modern Roman}
 %   \item {\CharisSIL
 %           Charis <SIL>}\footnote{Available at \url{http://software.sil.org/charis}.}
-%   \item {\PalatinoLinotype
-%           Palatino Linotype}\footnote{These settings have been contributed by
-%                                       \contributor Loren B. Davis <davislo\at eecs.oregonstate.edu>.}
+%   \item {\Palatino
+%           Palatino}\footnote{These settings have been contributed by
+%                              \contributor Loren B. Davis <davislo\at eecs.oregonstate.edu>.}
 %\end{itemize}
 %
 %\noindent
@@ -162,6 +172,7 @@
    { encoding = {EU1,EU2,TU},
      family   = Latin Modern Roman }
 %    \end{macrocode}
+%\changes{v2.8a}{2021/02/21}{specify `ff' ligature as Unicode instead of glyph name}
 %{\setmacrofont\LMR
 %    \begin{macrocode}
    { A = {À,Á,Â,Ã,Ä,Å,Ā,Ă,Ą,Ǻ,Ȁ,Ạ,Ả,Ấ,Ầ,Ẩ,Ẫ,Ậ,Ắ,Ằ,Ẳ,Ặ,
@@ -203,7 +214,7 @@
      c = {ç,ć,ĉ,ċ,č},
      d = {đ,ḍ,ḏ},
      e = {è,é,ê,ë,ē,ĕ,ė,ę,ě,ȅ,ẹ,ẻ,ẽ,ế,ề,ể,ễ,ệ},
-     f = {/f_f},
+     f = {ff}, % Unicode 64256, glyph name in Latin Modern: /f_f ; in New Computer Modern: /ff
      g = {ĝ,ğ,ġ,ģ,ǧ,ǵ},
      h = {ĥ,ħ,ḥ,ḧ,ḫ},
      i = {ì,í,î,ï,ĩ,ī,ĭ,į,ı,ȉ,ỉ,ị},
@@ -355,17 +366,17 @@
 %}
 %    \begin{macrocode}
 %</CharisSIL>
-%<*PalatinoLinotype>
+%<*Palatino>
 \DeclareCharacterInheritance
    { encoding = {EU1,EU2,TU},
-     family = {PalatinoLinotype} }
+     family = {Palatino} }
 %    \end{macrocode}
 % Unfortunately, I don't have a Palatino variant containing all of the following
 % glyphs. The settings are typeset in \TeX\ Gyre Pagella;
 % missing glyphs, printed in red, are taken from Charis <SIL>;
 % glyphs missing even in Charis <SIL> appear as `\char"FFFD@'.
-% To see the real settings, consult \file{mt-PalatinoLinotype.cfg}.
-%{\setmacrofont\PalatinoLinotype
+% To see the real settings, consult \file{mt-Palatino.cfg}.
+%{\setmacrofont\Palatino
 %    \begin{macrocode}
    { A = {À,Á,Â,Ã,Ä,Ā,Ă,Ą,Ǎ,Ǟ,Ǡ,Ȧ,Ǻ,Ȁ,Ȃ,Ḁ,Ạ,Ả,Ấ,Ầ,Ẩ,Ẫ,Ậ,Ắ,Ằ,Ẳ,Ẵ,Ặ,Ꜳ},
      B = {Ḃ,Ḅ,Ḇ},
@@ -421,8 +432,59 @@
 %    \end{macrocode}
 %}
 %    \begin{macrocode}
-%</PalatinoLinotype>
+%</Palatino>
 %    \end{macrocode}
+% Less characters in the Lato font \dots
+%\changes{v2.8a}{2021/02/21}{settings for the Lato font
+%                            (reported by \contributor dsedivec <@\at @>)}
+%                            ^^A https://tex.stackexchange.com/questions/380812/microtype-warning-unknown-slot-number-of-character-with-lato-font
+%    \begin{macrocode}
+%<*Lato>
+\DeclareCharacterInheritance
+   { encoding = {TU,EU1,EU2},
+     family   = {Lato} }
+%    \end{macrocode}
+%{\setmacrofont\Lato
+%    \begin{macrocode}
+   { A = {À,Á,Â,Ã,Ä,Å,Ą},
+     a = {à,á,â,ã,ä,å,ą},
+     C = {Ć,Ç},
+     c = {ć,ç},
+     D = {Ð},
+     E = {È,É,Ê,Ë,Ę},
+     e = {è,é,ê,ë,ę},
+     I = {Ì,Í,Î,Ï},
+     i = {ì,í,î,ï,ı},
+     L = {Ł},
+     l = {ł},
+     N = {Ń,Ñ},
+     n = {ń,ñ},
+     O = {Ø,Ò,Ó,Ô,Õ,Ö},
+     o = {ø,ò,ó,ô,õ,ö},
+     S = {Ś,Š}, % \SS
+     s = {ś,š},
+     U = {Ù,Ú,Û,Ü},
+     u = {ù,ú,û,ü},
+     Y = {Ý,Ÿ},
+     y = {ý,ÿ},
+     Z = {Ź,Ż,Ž},
+     z = {ź,ż,ž}
+   }
+%    \end{macrocode}
+%}
+%    \begin{macrocode}
+%</Lato>
+%    \end{macrocode}
+% \dots\ and even less in the self-professed awesone Font Awesome font.
+%\changes{v2.8a}{2021/02/21}{dummy settings for the Font Awesome font}
+%    \begin{macrocode}
+%<*FontAwesome>
+\DeclareCharacterInheritance
+  { encoding = {TU,EU1,EU2},
+    family   = {FontAwesome} }
+  { }
+%</FontAwesome>
+%    \end{macrocode}
 %
 %\subsection{Character protrusion}
 %\GeneralChanges{Protrusion}
@@ -1056,14 +1118,14 @@
 %    \begin{macrocode}
    }
 %</CharisSIL>
-%<*PalatinoLinotype>
+%<*Palatino>
 \SetProtrusion
    [ name     = palatino-default ]
    { encoding = {EU1,EU2,TU},
-     family   = {PalatinoLinotype} }
+     family   = {Palatino} }
    {
 %    \end{macrocode}
-%{\setmacrofont\PalatinoLinotype
+%{\setmacrofont\Palatino
 %    \begin{macrocode}
      A = {50,50},
      D = {  ,50},
@@ -1162,11 +1224,11 @@
 \SetProtrusion
    [ name     = palatino-it   ]
    { encoding = {EU1,EU2,TU},
-     family   = {PalatinoLinotype},
+     family   = {Palatino},
      shape    = {it,sl}  }
    {
 %    \end{macrocode}
-%{\setmacrofont\PalatinoLinotype
+%{\setmacrofont\Palatino
 %    \begin{macrocode}
      A = {50,50},
      Æ = {50,  },
@@ -1261,11 +1323,11 @@
    [ name     = palatino-sc,
      load     = palatino-default ]
    { encoding = {EU1,EU2,TU},
-     family   = {PalatinoLinotype},
+     family   = {Palatino},
      shape    = sc }
    {
 %    \end{macrocode}
-%{\setmacrofont\PalatinoLinotype
+%{\setmacrofont\Palatino
 %    \begin{macrocode}
      a = {50,50},
      æ = {50,  },
@@ -1289,7 +1351,15 @@
 %}
 %    \begin{macrocode}
    }
-%</PalatinoLinotype>
+%</Palatino>
+%<Lato> %% No settings yet.
+%<*FontAwesome>
+\SetProtrusion
+   [ name = empty ]
+   { encoding = {TU,EU1,EU2},
+     family   = {FontAwesome} }
+   { }
+%</FontAwesome>
 
 %    \end{macrocode}
 %\immediate\write   \utftmp{\string\setcounter{CodelineNo}{\the\c at CodelineNo}}

Modified: branches/branch2020/Master/texmf-dist/source/latex/microtype/microtype.dtx
===================================================================
--- branches/branch2020/Master/texmf-dist/source/latex/microtype/microtype.dtx	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/source/latex/microtype/microtype.dtx	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,11 +1,11 @@
 %\iffalse meta-comment
 % !Mode:: "TeX:DTX:UK"
 % !smartQuote:: "English"
-% !DTXversion:: "2.8"
+% !DTXversion:: "2.8a"
 % ------------------------------------------------------------------------
 %                       The `microtype' package
 %         Subliminal refinements towards typographical perfection
-%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %
 % This work may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License, either version 1.3c of this license or (at
@@ -37,7 +37,7 @@
 %<luatex-def>  {microtype-luatex.def}
 %<xetex-def>  {microtype-xetex.def}
 %<*package|letterspace|m-t|pdftex-def|luatex-def|xetex-def>
-  [2020/12/07 v2.8
+  [2021/02/22 v2.8a
 %<package>   Micro-typographical refinements
 %<letterspace>   Robust letterspacing
 %<m-t>   microtype main configuration file
@@ -51,8 +51,8 @@
 %<luafile>local microtype  = microtype
 %<luafile>microtype.module = {
 %<luafile>    name         = "microtype",
-%<luafile>    version      = "2.8",
-%<luafile>    date         = "2020/12/07",
+%<luafile>    version      = "2.8a",
+%<luafile>    date         = "2021/02/22",
 %<luafile>    description  = "microtype module.",
 %<luafile>    author       = "E. Roux, R. Schlicht and P. Gesang",
 %<luafile>    copyright    = "E. Roux, R. Schlicht and P. Gesang",
@@ -62,7 +62,7 @@
 %<bch>  {mt-bch.cfg}[2007/03/03 v1.5 microtype config. file: Bitstream Charter (RS)]
 %<blg>  {mt-blg.cfg}[2007/07/14 v1.0 microtype config. file: Bitstream Letter Gothic (RS)]
 %<cmr>  {mt-cmr.cfg}[2013/05/19 v2.2 microtype config. file: Computer Modern Roman (RS)]
-%<pad>  {mt-pad.cfg}[2005/11/07 v1.5 microtype config. file: Adobe Garamond (RS)]
+%<ebg>  {mt-EBGaramond.cfg}[2021/02/22 v1.6 microtype config. file: EB Garamond / Adobe Garamond (RS)]
 %<pmn>  {mt-pmn.cfg}[2009/11/14 v1.3 microtype config. file: Adobe Minion (HH/KK)]
 %<ppl>  {mt-ppl.cfg}[2005/11/16 v1.6 microtype config. file: Palatino (RS)]
 %<ptm>  {mt-ptm.cfg}[2006/04/20 v1.7 microtype config. file: Times (RS)]
@@ -73,7 +73,6 @@
 %<eur>  {mt-eur.cfg}[2006/07/31 v1.1 microtype config. file: AMS Euler Roman (RS)]
 %<eus>  {mt-eus.cfg}[2006/07/28 v1.2 microtype config. file: AMS Euler Script (RS)]
 %<zpeu>  {mt-zpeu.cfg}[2006/05/04 v1.0 microtype config. file: Adobe Euro (RS)]
-%<euroitc>  {mt-euroitc.cfg}[2006/05/04 v1.0 microtype config. file: ITC Euro (RS)]
 %<mvs>  {mt-mvs.cfg}[2006/07/05 v1.1 microtype config. file: Marvosym Euro (RS)]
 %</config>
 %
@@ -196,7 +195,7 @@
   \DeclareRobustCommand\TeX{\textoractual{\OrigTeX}{TeX}}
   \setlength\textheight{49\baselineskip}
 \else
-  \let\bfdefault\bfdefault at previous % undo mathdesign's \def\bdefault{b}
+  \let\bfdefault\bfdefault at previous % undo mathdesign's \def\bfdefault{b}
   \def\Module#1{{\color{theblue}\textoractual{$\langle$}{<}\textit{#1}\textoractual{$\rangle$}{>}}}
   \DeclareRobustCommand\TeX{\textoractual{T\kern-.1em\lower.4ex\hbox{E}\kern-.075emX\@}{TeX}}
   \DeclareRobustCommand\LaTeX{\textoractual{L\kern-.26em{\sbox\z@ T\vbox to\ht\z@{%
@@ -505,44 +504,39 @@
       \textrm{Text lost! Please install the \pkg{listings} package.}}}%
     \@beginparpenalty\predisplaypenalty\@verbatim\MacroFont
     \frenchspacing\@vobeyspaces\expandafter\@xverbatim\@gobble}}
-\IfFileExists{listings.sty}{
- \usepackage{listings}
- \lstset{
-   gobble=1,columns=flexible,keepspaces,upquote,escapechar=",
-   basicstyle=\MacroFont,
-   keywords=[0]{\microtypesetup,\DeclareMicrotypeSet,\UseMicrotypeSet,
-     \DeclareMicrotypeSetDefault,\SetProtrusion,\SetExpansion,\SetTracking,
-     \SetExtraKerning,\SetExtraSpacing,\DisableLigatures,\DeclareCharacterInheritance,
-     \DeclareMicrotypeVariants,\DeclareMicrotypeAlias,\DeclareMicrotypeBabelHook,
-     \LoadMicrotypeFile,\microtypecontext,\textmicrotypecontext,
-     \textls,\lsstyle,\lslig,\Microtype at Hook},
-   keywordstyle=[0]\color{thegreen},
-   keywords=[1]{protrusion,expansion,activate,DVIoutput,draft,final,verbose,
-     config,factor,auto,stretch,shrink,step,selected,unit,tracking,kerning,
-     spacing,letterspace,babel,context,
-    %defersetup,copyfonts,enable,disable,% undocumented
-     no\xA0ligatures,outer\xA0spacing,outer\xA0kerning}, % there are three \nobreakspace in this line
-   keywordstyle=[1]\color{thered},
-   comment=[l]\%,
-   commentstyle=\color{thegrey}\itshape,
-   alsoother={0123456789_},
-   frame=single,backgroundcolor=\color{theshade},rulecolor=\color{theframe},
-   framerule=\fboxrule,xleftmargin=3.4pt,xrightmargin=3.4pt,belowskip=\smallskipamount
- }
- \let\verbatim\relax
- \lstnewenvironment{verbatim}[1][]{\lstset{##1}}{}
- \ifpdf \IfFileExists{dummy-space.pfb}{%
-   \pdfmapline{=dummy-space <dummy-space.pfb}
-   \font\dummyspace=dummy-space
-   \pdfglyphtounicode{space}{0020}
-   \def\lst at outputspace{% copy spaces (from a font that really has a space at x20)
-     \setbox0\hbox{ }\@tempdima\wd0
-     \setbox0\hbox{\dummyspace\char"20}\advance\@tempdima-\wd0
-     \unhbox0 \kern\@tempdima}
-  }\relax \fi
-}{
- \let\lstset\@gobble
+\usepackage{listings}
+\lstset{
+  gobble=1,columns=flexible,keepspaces,upquote,escapechar=",
+  basicstyle=\MacroFont,
+  keywords=[0]{\microtypesetup,\DeclareMicrotypeSet,\UseMicrotypeSet,
+    \DeclareMicrotypeSetDefault,\SetProtrusion,\SetExpansion,\SetTracking,
+    \SetExtraKerning,\SetExtraSpacing,\DisableLigatures,\DeclareCharacterInheritance,
+    \DeclareMicrotypeVariants,\DeclareMicrotypeAlias,\DeclareMicrotypeBabelHook,
+    \LoadMicrotypeFile,\microtypecontext,\textmicrotypecontext,
+    \textls,\lsstyle,\lslig,\Microtype at Hook},
+  keywordstyle=[0]\color{thegreen},
+  keywords=[1]{protrusion,expansion,activate,DVIoutput,draft,final,verbose,
+    config,factor,auto,stretch,shrink,step,selected,unit,tracking,kerning,
+    spacing,letterspace,babel,context,
+   %defersetup,copyfonts,enable,disable,% undocumented
+    no\xA0ligatures,outer\xA0spacing,outer\xA0kerning}, % there are three \nobreakspace in this line
+  keywordstyle=[1]\color{thered},
+  comment=[l]\%,
+  commentstyle=\color{thegrey}\itshape,
+  alsoother={0123456789_},
+  frame=single,backgroundcolor=\color{theshade},rulecolor=\color{theframe},
+  framerule=\fboxrule,xleftmargin=3.4pt,xrightmargin=3.4pt,belowskip=\smallskipamount
 }
+\let\verbatim\relax
+\lstnewenvironment{verbatim}[1][]{\lstset{#1}}{}
+\ifpdf
+  \font\dummyspace=dummy-space
+  \pdfglyphtounicode{space}{0020}
+  \def\lst at outputspace{% copy spaces (from a font that really has a space at x20)
+    \setbox0\hbox{ }\@tempdima\wd0
+    \setbox0\hbox{\dummyspace\char"20}\advance\@tempdima-\wd0
+    \unhbox0 \kern\@tempdima}
+\fi
 \def\todo#1{\changes{zTo Do}{0000/00/00}{#1}%
   \marginpar{\rightskip2\marginparsep plus1em\hangindent1.5em\hangafter-2
     \smash{\rlap{\raisebox{-3.3ex}{\colorbox{thered}{\Large\color{white}!}}}}%
@@ -565,6 +559,7 @@
   \usepackage{attachfile}
   \usepackage{pdfpages}
   \hypersetup{
+    keeppdfinfo,
     pdftitle={The microtype package},
     pdfauthor={R Schlicht <w.m.l at gmx.net>},
     pdfsubject={Subliminal refinements towards typographical perfection},
@@ -571,7 +566,7 @@
     pdfkeywords={TeX, LaTeX, pdfTeX, LuaTeX, XeTeX, typography, micro-typography,
       character protrusion, margin kerning, optical alignment, font expansion,
       font scaling, hz, kerning, spacing, glue, letterspacing, tracking, ligatures},
-    pdfcopyright={\textcopyright\ 2004--2020 R Schlicht\012%
+    pdfcopyright={\textcopyright\ 2004--2021 R Schlicht\012%
       This work may be distributed and/or modified under the conditions
       of the LaTeX Project Public License, either version 1.3c of this
       license or (at your option) any later version.\012%
@@ -580,7 +575,7 @@
   }
   \pdfcatalog{/Lang(en-GB)}
   \ifnum\pdftexversion < 130 \else
-    \IfFileExists{hypdestopt.sty}{\usepackage{hypdestopt}}\relax\fi
+    \usepackage{hypdestopt}\fi
   \def\usage#1{\textbf{\hyperpage{#1}}}% for indexing of \DescribeMacro ...
   \def\changes@#1#2#3{% ... the changes ...
     \protected at edef\@tempa{\noexpand\glossary{#1\levelchar
@@ -814,7 +809,7 @@
 % other extensions (see section~\ref{sec:lettersp}).
 %
 %\bigskip\noindent
-% This package is copyright \textcopyright\ 2004\kern.09em--2020 R Schlicht.
+% This package is copyright \textcopyright\ 2004\kern.09em--2021 R Schlicht.
 % It may be distributed and/or modified under the conditions of the
 % \IfFileExists{lppl.tex}{\hyperref[LPPL:LPPL]}{\href{http://www.latex-project.org/lppl/}}
 %   {\LaTeX\ Project Public License},
@@ -1042,6 +1037,9 @@
 %
 %\begin{table}\small
 %\changes{v2.3a}{2008/02/25}{add table of available and enabled features}
+%\changes{v2.8a}{2020/12/23}{reorganise table~\ref{tab:available-features} for clarification
+%                            (suggested by \contributor Daniel Benjamin Miller <dbmiller\at dbmiller.org>)}
+%                            ^^A private mail, 2020/12/10
 %\caption{Availability of micro-typographic features}\label{tab:available-features}
 %\catcode`\!=13 \def!{\textcolor{thegreen}{\hskip.9em $\bigstar$}}
 %\catcode`\?=13 \def?{\textcolor{theblue} {\hskip 1em $\boxtimes$}}
@@ -1051,7 +1049,7 @@
 %\fcolorbox{theframe}{white}{^^A
 %\begin{minipage}{\textwidth}
 %\def\arraystretch{1.2}
-%\begin{tabular}{*3{@{}L{40pt}}*2{@{}L{43pt}}*4{@{}L{37pt}}@{}}
+%\begin{tabular}{*3{@{}L{40pt}}*6{@{}L{39pt}}@{}}
 %      \multicolumn{3}{@{}l}{\footnotesize \TeX\ engine}
 %    & \multicolumn{6}{@{}l}{\footnotesize Micro-typographic features}\\
 %\cmidrule(r){1-3}\cmidrule{4-9}
@@ -1059,30 +1057,34 @@
 %    & \footnotesize Version
 %    & \footnotesize Output
 %    & \footnotesize Protrusion
-%    & \footnotesize Expansion
-%    & \footnotesize (= auto)
+%    & \multicolumn{2}{l}{\footnotesize\hspace{2em}Expansion}
+%    & \footnotesize Tracking
 %    & \footnotesize Kerning
-%    & \footnotesize Spacing
-%    & \footnotesize Tracking\\
-%\cmidrule(r){1-1}\cmidrule(r){2-2}\cmidrule(r){3-3}\cmidrule(r){4-4}
-%\cmidrule(r){5-5}\cmidrule(r){6-6}\cmidrule(r){7-7}\cmidrule(r){8-8}\cmidrule{9-9}
+%    & \footnotesize Spacing\\
+%\cmidrule(r){5-6}\addlinespace[-2pt]
+% &&&& \footnotesize \textls[-20]{manual}
+%    & \footnotesize \textls[-20]{automatic}\\
+%\cmidrule(r){1-1}\cmidrule(r){2-2}\cmidrule(r){3-3}
+%\cmidrule(r){4-4}\cmidrule(r){5-5}\cmidrule(r){6-6}
+%\cmidrule(r){7-7}\cmidrule(r){8-8}\cmidrule   {9-9}
 % \pdftex
 %    & $\less$ 0.14f & <DVI>/<PDF> & _ & _ & _ & _ & _ & _\\
 %    & $\geq$  0.14f & <DVI>/<PDF> & ! & ? & _ & _ & _ & _\\
 %    & $\geq$  1.20  & <DVI>       & ! & ? & _ & _ & _ & _\\
 %    &               & <PDF>       & ! & ? & ! & _ & _ & _\\
-%    & $\geq$  1.40  & <DVI>       & ! & ? & _ & ? & ? & _\\
+%    & $\geq$  1.40  & <DVI>       & ! & ? & _ & _ & ? & ?\\
 %    &               & <PDF>       & ! & ? & ! & ? & ? & ?\\
 %\cmidrule(r){1-3}
 % \luatex ^^A we will have to re-model kerning and spacing with \luatex
 %    & $\geq$  0.30  & <DVI>       & ! & ? & _ & _ & _ & _\\
 %    &               & <PDF>       & ! & ? & ! & _ & _ & _\\
-%    & $\geq$  0.62  & <DVI>       & ! & _ & \hskip1em\llap{(}\textcolor{theblue}{$\boxtimes$})\textsuperscript{\itshape a} & _ & _ & ?\\
-%    &               & <PDF>       & ! & _ & ! & _ & _ & ?\\
+%    & $\geq$  0.62  & <DVI>       & ! & _ & \hskip1em\llap{(}\textcolor{theblue}{$\boxtimes$})\textsuperscript{\itshape a} & ? & _ & _\\
+%    &               & <PDF>       & ! & _ & ! & ? & _ & _\\
 %\cmidrule(r){1-3}
 % \let\textoractual\@firstoftwo ^^A why?
 % \xetex
 %    & $\geq$ 0.9997 & <PDF>       & ! & _ & _ & _ & _ & _\\
+%\addlinespace[2pt]
 %\bottomrule
 %\end{tabular}^^A
 %\vskip4pt\footnotesize
@@ -1091,7 +1093,7 @@
 % ? = not enabled\quad
 % _ = not available
 %\hfill
-% \textit{a}\quad by means of variable tracking\hskip1em
+% \textit{a}\quad by means of variable tracking
 %\vskip4pt
 %\end{minipage}^^A
 %}\kern-\dimexpr\fboxsep+\fboxrule\relax ^^A end \fcolorbox
@@ -1153,7 +1155,7 @@
 % If expanded instances of the fonts are available, they will be used
 % regardless whether \opt{auto} is true or not.
 %\fi
-% With \luatex, expansion is always automatic.
+% With recent versions of \luatex, expansion is always automatic.
 %
 % When generating <DVI> files, font expansion has to be enabled explicitly.
 % With \pdftex, \emph{automatic} font expansion will not work because
@@ -1204,7 +1206,7 @@
 %
 %\subsection[Tracking]
 %           {Tracking \requires{\pdftex~1.40,\luatex~0.62}}
-%           \label{sub:option-tracking}
+%           \label{sub:options-tracking}
 %
 %\Describe{Option}{letterspace}{:integer}[100]
 % This option changes the default amount for tracking (see section~\ref{sub:tracking})
@@ -1584,7 +1586,7 @@
 % With \luatex\ or \xetex, you may additionally specify a (font-specific)
 % glyph name, prefixed with `|/|' (\eg, the `fl' ligature as |/f_l|).
 % Note that you also have the possibility to declare lists
-% of characters that should inherit settings (see section~\ref{sub:inherit}).
+% of characters that should inherit settings (see section~\ref{sub:inheritance}).
 %
 %\subsection[Character protrusion]
 %           {Character protrusion \requires{\pdftex~0.14f,\luatex~0.30,\xetex~0.9997}}
@@ -1744,7 +1746,7 @@
 %       This method of employing contexts to temporarily apply different
 %       expansion parameters only works with \pdftex\ version 1.40.4 or later,^^A
 %         \footnote{For older versions, a dirty trick is laid out in
-%                   section~\ref{ssec:font-setup} on page~\pageref{exp-hack}.}
+%                   section~\ref{sub:font-setup} on page~\pageref{exp-hack}.}
 %       or with \luatex.
 %       Also note that both \pdftex\ and \luatex\ prohibit the use of fonts with different expansion
 %       limits or steps (even of different fonts) within one paragraph, hence
@@ -2079,7 +2081,7 @@
 %\end{options}
 %
 %
-%\subsection{Character inheritance}\label{sub:inherit}
+%\subsection{Character inheritance}\label{sub:inheritance}
 %
 % \Describe{Macro}{\DeclareCharacterInheritance}
 %                 {?features,set of fonts,inheritance lists}
@@ -2123,7 +2125,6 @@
 % This package ships with configuration files for a number of font families.
 % Table~\ref{tab:fonts} lists them all.
 %
-%\enlargethispage{\baselineskip} ^^A layout
 %\begin{table}[t]\small
 %\changes{v1.6a}{2005/02/02}{add table of fonts with tailored protrusion settings}
 %\caption{Fonts with tailored protrusion settings}\label{tab:fonts}
@@ -2133,10 +2134,10 @@
 %\begin{minipage}{\textwidth}
 %\def\arraystretch{1.2}
 %\long\def\@makefntext#1{%
-%  \leftskip 1em
-%  \parindent -1em
-%  \everypar{\parindent -1em}%
-%  \leavevmode\hbox to 1em{\@thefnmark\hss}#1}
+%  \leftskip 1.2em
+%  \parindent -1.2em
+%  \everypar{\parindent -1.2em}%
+%  \leavevmode\hbox to 1.2em{\@thefnmark\hss}#1}
 %\let\footnoterule\relax
 %\def\fnref#1{\textsuperscript{\itshape\ifpdf\ref*{#1}\else\ref{#1}\fi}}
 %\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}*3l@{}}
@@ -2151,7 +2152,7 @@
 %      & n, (it, sl, sc)\fnref{fn:incmpl} \\
 % Computer Modern Roman (|cmr|)\footnote{Aliases: Latin Modern Roman (|lmr|),
 %                                        \pkg{ae} (|aer|), \pkg{zefonts} (|zer|),
-%                                        \pkg{eco} (|cmor|), \pkg{hfoldsty} (|hfor|)}
+%                                        \pkg{eco} (|cmor|), \pkg{hfoldsty} (|hfor|), \pkg{mlmodern}~(|mlmr|)}
 %      & <OT1>, <OT4>, <T1>, <T2A>, <T5>, <LY1>, <TS1>
 %      & n, it, sl, sc \\
 % Bitstream Charter (|bch|)\footnote{Aliases: \pkg{mathdesign}/Charter (|mdbch|),
@@ -2158,7 +2159,7 @@
 %                                    MicroPress's \pkg{chmath} (|chr|), \pkg{XCharter}}
 %      & <OT1>, <T1>, <T5>, <LY1>, <TS1>
 %      & n, it, (sl)\footnote{Settings inherited from italic shape\label{fn:it-sl}}, sc \\
-% Adobe Garamond (|pad|, |padx|, |padj|)
+% <EB> Garamond\footnote{Aliases: Adobe Garamond (|pad|, |padx|, |padj|)}
 %      & <OT1>, <T1>, <LY1>, <TS1>
 %      & n, it, (sl)\fnref{fn:it-sl}, sc \\
 % <URW> Garamond (|ugm|)\footnote{Aliases: \pkg{mathdesign}/<URW> Garamond (|mdugm|), \pkg{garamondx} (|zgmx|, |zgmj|)}
@@ -2191,7 +2192,7 @@
 %      & <EU1>/<2>, <TU> [Latin, Cyrillic, Greek]
 %      & n, it, sc, si\\
 %\fi
-% Palatino Linotype\footnote{Aliases: \TeX\ Gyre Pagella, Palatino <LT> Std, Palatino, Domitian}
+% Palatino\footnote{Aliases: Palatino Linotype, \TeX\ Gyre Pagella, Palatino <LT> Std, Palatino, Domitian}
 %      & <EU1>/<2>, <TU> [Latin]
 %      & n, it, sc\\
 % Computer Modern math (|cmsy|, |cmm|)\footnote{Aliases: Latin Modern (|lmsy|, |lmm|)}
@@ -2218,13 +2219,13 @@
 % On its search for a configuration file, the package will also try to remove
 % from the font name a suffix of one or more letters that denotes a `variant'
 % of the base font (cf. Karl Berry's \cite{fontname}). It is thus possible to
-% put settings for, \eg, the fonts |padx|~(expert set), |padj| (oldstyle
-% numerals) and |pad| (plain) into one and the same file \file{mt-pad.cfg}.
+% put settings for, \eg, the fonts |pplx|~(expert set), |pplj| (oldstyle
+% numerals) and |ppl| (plain) into one and the same file \file{mt-ppl.cfg}.
 % This command expects a comma-separated list of variant suffixes. The starred
 % version appends the suffix(es) to the existing list. The default declaration
 % in \file{microtype.cfg} is:
 %\begin{verbatim}
-%\DeclareMicrotypeVariants{x,j,w,a,d,0,1}
+%\DeclareMicrotypeVariants{x,j,w,a,d,0,1,-LF,-TLF,-OsF,-TOsF}
 %\end{verbatim}
 %
 %\medskip
@@ -2237,6 +2238,7 @@
 %\begin{verbatim}
 %\DeclareMicrotypeAlias{lmr}{cmr}
 %\end{verbatim}
+%\ifcmr\else\pagebreak\fi ^^A layout
 % which would make the package, whenever it encounters the font |lmr| and does
 % not find settings for it, also try the font |cmr|. In fact, you will find
 % this very line, along with some others, in the default configuration file.
@@ -2382,7 +2384,6 @@
 % the \opt{letterspace} package option, with decreasing significance in this
 % order.
 %
-%\pagebreak ^^A layout
 %\medskip
 %\Describe{Macro}{\lslig}{ligature}
 % Since the commands \cs{textls} and \cs{lsstyle} will also evaluate the
@@ -2418,7 +2419,7 @@
 %\bigskip\noindent
 %\DescribePackage{letterspace}
 % These three commands (plus the \opt{letterspace} option, described in
-% section~\ref{sub:option-tracking}) are also available with the alternative
+% section~\ref{sub:options-tracking}) are also available with the alternative
 % \letterspace\ package, which is in fact a much stripped-down version of
 % \microtype, omitting support for all the other extensions (and also omitting
 % the possibilities of the \cs{SetTracking} command -- all `|f|' ligatures will
@@ -2660,7 +2661,6 @@
 % distributions, this can be changed in the file \file{updmap.cfg} by setting
 % |pdftexDownloadBase14| to |true|.
 %
-%\ifcmr\else\pagebreak\fi ^^A layout
 %\changes{v1.9a}{2005/11/15}{add explanation for error message with non-Type\,1 fonts}
 %  \item
 %\begin{verbatim}
@@ -2882,11 +2882,14 @@
 %  \contributor Paolo Polesana    <@\at @>,  ^^A https://tex.stackexchange.com/users/95083/paolo-polesana
 %  \contributor Oliver Kopp       <koppdev\at gmail.com>,
 %  \contributor Hironori Kitagawa <h_kitagawa2001\at yahoo.co.jp>,
-% `\contributor d909              <@\at @>', ^^A https://tex.stackexchange.com/users/176404/d909
-%  \contributor Daniel Benjamin Miller <dbmiller\at dbmiller.org>,
-%  \contributor Md Ayquassar      <mdayq0\at lenta.ru>
+%  \contributor Daniel Benjamin Miller <dbmiller\at dbmiller.org>, ^^A also https://tex.stackexchange.com/users/176404/d909
+%  \contributor Md Ayquassar      <mdayq0\at lenta.ru>,
+%  \contributor Marcel Kr\"uger   <tex\at 2krueger.de>,
+%  \contributor Ekkehart Schlicht <ekkehart.schlicht\at gmail.com>,
+% `\contributor Canageek          <@\at @>', ^^A https://tex.stackexchange.com/users/7880/canageek
+% `\contributor dsedivec          <@\at @>'  ^^A https://tex.stackexchange.com/users/1680/dsedivec
 % and
-%  \contributor Marcel Kr\"uger   <tex\at 2krueger.de>.
+% `\contributor DORpapst          <@\at @>'. ^^A https://tex.stackexchange.com/users/104965/dorpapst
 %
 %
 %\iffalse
@@ -2972,7 +2975,7 @@
 %
 % \bibitem[\LaTeXe\ font selection]{fntguide}
 %   \LaTeX3 Project Team, \emph{\LaTeXe\ font selection},
-%   \newblock July 2020.
+%   \newblock November 2020.
 %   \newblock (\ctanurl{macros/latex/base/fntguide.pdf})
 %
 % \bibitem[\pkg{fontspec}]{fontspec}
@@ -2984,7 +2987,7 @@
 % \bibitem[\pkg{luaotfload}]{luaotfload}
 %   \'Elie Roux, Khaled Hosny, Philipp Gesang, Ulrike Fischer, Marcel Kr\"uger,
 %    \emph{The \pkg{luaotfload} package},
-%    \newblock 2~September 2020.
+%    \newblock 8~January 2021.
 %    \newblock (\ctanpkgurl{luaotfload})
 %
 % \bibitem[\pkg{pdfcprot}]{pdfcprot}
@@ -3035,7 +3038,9 @@
 %
 %\begin{History}
 %
-%\Version{\expandafter\@gobble\fileversion}{\filedate}
+%\VersionDate{\expandafter\@gobble\fileversion}{\filedate}
+%
+%\Version{2.8}{2020/12/07}
 %  \item New default font sets for expansion and spacing: `|alltext-nott|'
 %        \refsection{\ref{sec:font-sets}, table~\ref{tab:predefined-font-sets}}
 %
@@ -3136,7 +3141,7 @@
 %        \refsection{\ref{sub:tracking}, \ref{sub:kerning}, \ref{sub:spacing}}
 %  \item New commands \cs{textls} and \cs{lsstyle} for letterspacing,
 %        new option `\opt{letterspace}'
-%        \refsection{\ref{sub:option-tracking}, \ref{sec:lettersp}}
+%        \refsection{\ref{sub:options-tracking}, \ref{sec:lettersp}}
 %  \item New option `\opt{babel}' for automatic micro-typographic adjustment to
 %        the selected language
 %        \refsection{\ref{sub:options-misc}, \ref{sec:context}}
@@ -3275,7 +3280,7 @@
 %\Version{1.1}{2004/09/21}
 %  \item Protrusion settings for Adobe Minion
 %  \item New command: \cs{DeclareCharacterInheritance}
-%        \refsection{\ref{sub:inherit}}
+%        \refsection{\ref{sub:inheritance}}
 %  \item Characters may also be specified as octal or hexadecimal numbers
 %        \refsection{\ref{sec:fine-tuning}}
 %^^A  \item Configuration file names in lowercase [\ref{sub:config-file}]
@@ -3453,7 +3458,7 @@
 %      \item[|bch|]   Settings for Bitstream Charter (\file{mt-bch.cfg}).
 %      \item[|blg|]   Settings for Bitstream Letter Gothic (\file{mt-blg.cfg}).
 %      \item[|cmr|]   Settings for Computer Modern Roman (\file{mt-cmr.cfg}).
-%      \item[|pad|]   Settings for Adobe Garamond (\file{mt-pad.cfg}).
+%      \item[|ebg|]   Settings for <EB> Garamond (\file{mt-EBGaramond.cfg}).
 %      \item[|ppl|]   Settings for Palatino (\file{mt-ppl.cfg}).
 %      \item[|ptm|]   Settings for Times (\file{mt-ptm.cfg}).
 %      \item[|pmn|]   Settings for Adobe Minion (\file{mt-pmn.cfg}).
@@ -3471,7 +3476,6 @@
 %    \item[|cfg-e|]  Surrounds Euro symbol configurations.
 %     \begin{description}
 %      \item[|zpeu|]  Settings for Adobe Euro symbol fonts (\file{mt-zpeu.cfg}).
-%      \item[|euroitc|] Settings for <ITC> Euro symbol fonts (\file{mt-euroitc.cfg}).
 %      \item[|mvs|]   Settings for \pkg{marvosym} Euro symbol (\file{mt-mvs.cfg}).
 %     \end{description}
 %   \end{description}
@@ -3999,10 +4003,11 @@
 % \item + default \cmd\efcode\,=\,1000;
 %         \cmd\protrusionboundary\ [not yet supported] ($\geq$~0.90)
 %\todo{interface for \cmd\protrusionboundary}
+% \item + \cmd\glet ($\geq$~1.10)
 %\end{enum}
 %\changes{v2.6}{2016/04/22}{update for \luatex\ 0.85 (renamed primitives)}
 % Also, sometime between 1.0.4 and 1.0.7, the function |font.setexpansion|
-% has been introduced, but we'll test this directly later.
+% has been introduced (but we're not using it for now).
 %    \begin{macrocode}
 %<*luatex-def>
 %<debug>\MT at dinfo@nl0{this is luatex (\the\luatexversion)}
@@ -4015,16 +4020,19 @@
 %\changes{v2.3d}{2009/03/25}{update for \luatex\ 0.36}
 %    \begin{macrocode}
 \let\MT at lua\directlua
-\def\MT at luatex@no{5}
-\ifnum\luatexversion<90
-  \def\MT at luatex@no{4}
-  \ifnum\luatexversion<85
-    \def\MT at luatex@no{3}
-    \ifnum\luatexversion<62
-      \def\MT at luatex@no{2}
-      \ifnum\luatexversion<36
-        \def\MT at lua{\directlua0}
-        \def\MT at luatex@no{1}
+\def\MT at luatex@no{6}
+\ifnum\luatexversion<110
+  \def\MT at luatex@no{5}
+  \ifnum\luatexversion<90
+    \def\MT at luatex@no{4}
+    \ifnum\luatexversion<85
+      \def\MT at luatex@no{3}
+      \ifnum\luatexversion<62
+        \def\MT at luatex@no{2}
+        \ifnum\luatexversion<36
+          \def\MT at lua{\directlua0}
+          \def\MT at luatex@no{1}
+        \fi
       \fi
     \fi
   \fi
@@ -4317,8 +4325,11 @@
 % To be continued, but first back to primitives.
 %\begin{macro}{\MT at glet}
 %\changes{v1.9f}{2006/08/09}{new macro}
-% Here's the forgotten one.
+% Here's the forgotten one
+%\changes{v2.8a}{2020/02/01}{use \luatex's \cmd\glet, if available}
+% (finally implemented in \luatex).
 %    \begin{macrocode}
+%<luatex-def>\MT at requires@luatex6{\let\MT at glet\glet}\relax
 %<*package|letterspace>
 \def\MT at glet{\global\let}
 %    \end{macrocode}
@@ -5090,7 +5101,7 @@
 %    \end{macrocode}
 %\end{macro}
 %
-%\subsubsection{Compatibility}\label{sub:compatibility}
+%\subsubsection{Compatibility}\label{ssub:compatibility}
 %
 % For the record, the following \LaTeX\ kernel commands will be modified by
 % \microtype:
@@ -5097,8 +5108,8 @@
 %\begin{itemize}
 %  \item \cmd\pickup at font
 %  \item \cmd\do at subst@correction
-%  \item \cmd\add at accent\ (all in section~\ref{sssec:impl.hook})
-%  \item \cmd\showhyphens\ (in section~\ref{sssec:impl.options})
+%  \item \cmd\add at accent\ (all in section~\ref{ssub:impl.hook})
+%  \item \cmd\showhyphens\ (in section~\ref{ssub:impl.options})
 %\end{itemize}
 %
 % The \pkg{wordcount} package redefines the font-switching commands, which will
@@ -5542,7 +5553,7 @@
 %<package>\expandafter\ifx\the\font\nullfont\normalfont\fi
 %    \end{macrocode}
 %
-%\subsection{Font setup}\label{ssec:font-setup}
+%\subsection{Font setup}\label{sub:font-setup}
 %
 %\begin{macro}{\MT at setupfont}
 % Setting up a font entails checking for each feature whether it should be
@@ -8290,7 +8301,7 @@
 %\changes{v1.8}{2005/03/29}{reset catcodes of the remaining <ASCII> characters}
 % OK, now all printable characters up to 127 are `other'. We hope that letters
 % are always letters and numbers other. (\pkg{listings} makes them active, see
-% section~\ref{sub:compatibility}.)
+% section~\ref{ssub:compatibility}.)
 %
 % We leave |^| at catcode 7, so that stuff like `|^^ff|' remains possible.
 %    \begin{macrocode}
@@ -8359,7 +8370,7 @@
 %\begin{macro}{\MT at get@basefamily@}
 % This will only remove one suffix (the longest match), so that
 % \emph{combinations} of suffixes would have be to added manually (\eg,
-% |\DeclareMicrotypeVariants*{aw}|). But otherwise, something like `|padx|'
+% |\DeclareMicrotypeVariants*{aw}|). But otherwise, something like `|pplx|'
 % would be truncated to `|p|'.
 %    \begin{macrocode}
 \def\MT at get@basefamily@#1#2\@nil{%
@@ -9286,7 +9297,7 @@
     \MT at glet\MT at warn@unknown\relax}%
 }
 %
-%\subsubsection{Hook into \LaTeX's font selection}\label{sssec:impl.hook}
+%\subsubsection{Hook into \LaTeX's font selection}\label{ssub:impl.hook}
 %
 % We append \cs{MT at setupfont} to \cmd\pickup at font, which is called by \LaTeX\
 % every time a font is selected. We then check whether we've already seen this
@@ -10091,19 +10102,8 @@
   \else
     \MT at let@cn\@tempa{\MT at val}%
   \fi
-  \ifx\@tempa\relax \else
-%    \end{macrocode}
-% The \pkg{relsize} solution of parsing \cmd\@setfontsize\ does not work with the
-% <AMS> classes, among others. I hope my hijacking doesn't do any harm.
-%\changes{v1.2}{2004/09/26}{hijack \cmd\set at fontsize\ instead of \cmd\@setfontsize}
-% We redefine \cmd\set at fontsize\ instead of \cmd\@setfontsize\ because some classes
-% might define the size selection commands by simply using \cmd\fontsize\
-% (\eg, the \pkg{a0poster} class).
-%\changes{v2.3b}{2008/03/07}{grouping}
-%    \begin{macrocode}
-    \begingroup
-      \def\set at fontsize##1##2##3##4\@nil{\endgroup\def\MT at val{##2}}%
-      \@tempa\@nil
+  \ifx\@tempa\relax\else
+    \MT at get@size@
   \fi
 %    \end{macrocode}
 % Test whether we finally got a number or dimension so that we can strip the
@@ -10121,6 +10121,44 @@
 }
 %    \end{macrocode}
 %\end{macro}
+%\begin{macro}{\MT at get@size@}
+%\begin{macro}{\MT at get@size@@}
+% The \pkg{relsize} solution of parsing \cmd\@setfontsize\ does not work with the
+% <AMS> classes, among others. I hope my hijacking doesn't do any harm.
+%\changes{v1.2}{2004/09/26}{hijack \cmd\set at fontsize\ instead of \cmd\@setfontsize}
+% We redefine \cmd\set at fontsize\ instead of \cmd\@setfontsize\ because some classes
+% might define the size selection commands by simply using \cmd\fontsize\
+% (\eg, the \pkg{a0poster} class).
+%\changes{v2.3b}{2008/03/07}{grouping}
+%    \begin{macrocode}
+\def\MT at get@size@@{%
+  \begingroup
+    \def\set at fontsize##1##2##3##4\@nil{\endgroup\def\MT at val{##2}}%
+    \@tempa\@nil
+}
+%    \end{macrocode}
+% The \pkg{svjour3} class defines the size commands using conditionals;
+% using \etex\ primitives, we close any leftovers here.
+%\changes{v2.8a}{2020/12/10}{compatibility with \pkg{svjour3}
+%                            (reported by \contributor Ekkehart Schlicht <ekkehart.schlicht\at gmail.com> (no relation!!))}
+%                            ^^A https://groups.google.com/g/de.comp.text.tex/c/46sJ1jFRq-I
+%                            ^^A MID: <9aa52497-19b5-4ca7-a668-c076cec4ceadn at googlegroups.com>, 2020/11/09
+%    \begin{macrocode}
+^^X\@ifclassloaded{svjour3}{%
+^^X  \def\MT at get@size@{%
+^^X    \@tempcnta=\currentiflevel
+^^X    \MT at get@size@@
+^^X    \loop
+^^X      \ifnum\numexpr\currentiflevel-1>\@tempcnta
+^^X      \csname fi\endcsname
+^^X    \repeat
+^^X  }%
+^^X}{%
+  \let\MT at get@size@\MT at get@size@@
+^^X}
+%    \end{macrocode}
+%\end{macro}
+%\end{macro}
 %\changes{v1.9}{2005/07/13}{\cs{DeclareMicrotypeSet}: new key: \texttt{font}}
 %\begin{macro}{\MT at define@set at key@font}
 %\changes{v2.3}{2007/11/20}{\texttt{font}: single asterisk means normal font}
@@ -11089,6 +11127,7 @@
 %\changes{v1.9d}{2006/02/09}{fix: empty context}
 %\changes{v1.9e}{2006/07/26}{new key `\texttt{inputenc}' to set the input encoding}
 %\changes{v2.5}{2010/05/18}{allow more than one encoding}
+%\changes{v2.8a}{2021/01/15}{skip settings for tracking}
 % This macro may be used in the configuration files to declare characters that
 % should inherit protrusion resp. expansion values from other characters. Thus,
 % there is no need to define all accented characters (\eg, |\`a|, |\'a|,
@@ -11115,18 +11154,20 @@
 %\end{macro}
 %\end{macro}
 %\begin{macro}{\MT at set@inh at list}
-% Safe category codes.
+% No need to create an inheritance list for tracking.
 %    \begin{macrocode}
 \def\MT at set@inh at list#1#2{%
   \MT at ifempty\MT at inh@feat{%
-    \MT at map@clist at c\MT at features{{\MT at declare@char at inh{##1}{#1}{#2}}}%
+    \MT at map@clist at c\MT at features{{%
+      \MT at ifstreq{##1}{tr}\relax{\MT at declare@char at inh{##1}{#1}{#2}}%
+    }}%
   }{%
     \MT at map@clist at c\MT at inh@feat{{%
       \KV@@sp at def\@tempa{##1}%
       \MT at ifempty\@tempa\relax{%
-        \MT at exp@one at n\MT at declare@char at inh
-          {\csname MT at rbba@\@tempa\endcsname}{#1}{#2}%
-      }%
+        \edef\@tempa{\csname MT at rbba@\@tempa\endcsname}%
+        \MT at ifstreq\@tempa{tr}\relax{%
+          \MT at exp@one at n\MT at declare@char at inh{\@tempa}{#1}{#2}}}%
     }}%
   }%
   \MT at end@catcodes
@@ -11217,7 +11258,7 @@
 %    \end{macrocode}
 %\end{macro}
 %
-%\subsubsection{Permutation}
+%\subsubsection{Permutation}\label{ssub:permutation}
 %
 %\begin{macro}{\MT at permute}
 %\changes{v1.1}{2004/09/15}{don't use sets for empty encoding}
@@ -11237,8 +11278,27 @@
 % currently defined list. Size ranges are held in a separate macro called
 % |\MT@|\meta{list type}|@/|\allowbreak\meta{font axes}|@sizes|, which in turn
 % contains the respective \meta{list name}s attached to the ranges.
+% So that,
+%\begin{verbatim}
+%\SetProtrusion
+%   { encoding = U,
+%     family   = {euroitc,euroitcs} }
+%   { E = {100,50} }
+%\SetProtrusion
+%   { encoding = U,
+%     family   = {euroitc,euroitcs},
+%     shape    = it* }
+%   { E = {100,} }
+%\end{verbatim}
+% would yield the following assignments:
 %    \begin{macrocode}
 %<*package>
+\MT at gdef@n{MT at pr@c at U/euroitc///}{euroitc}
+\MT at gdef@n{MT at pr@c at U/euroitcs///}{euroitc}
+\MT at gdef@n{MT at pr@c at U/euroitc//it/}{euroitci}
+\MT at gdef@n{MT at pr@c at U/euroitcs//it/}{euroitci}
+\MT at gdef@n{MT at pr@c at euroitc}{E={100,50}}
+\MT at gdef@n{MT at pr@c at euroitci}{E={100,}}
 \def\MT at permute{%
   \let\MT at cnt@encoding\@ne
   \MT at permute@
@@ -12164,7 +12224,7 @@
 %</package>
 %    \end{macrocode}
 %
-%\subsubsection{Processing the options}\label{sssec:impl.options}
+%\subsubsection{Processing the options}\label{ssub:impl.options}
 %
 %\begin{macro}{\MT at ProcessOptionsWithKV}
 % Parse options.
@@ -12308,7 +12368,7 @@
 % Since this could still be considered a viable option, we don't disable
 % the feature completely, but issue a warning.
 %\changes{v2.8}{2020/02/09}{warning when expanding in <DVI> mode with \luatex\
-%                           (reported by \contributor d909 <@\at @>)}
+%                           (reported by \contributor Daniel Benjamin Miller <dbmiller\at dbmiller.org>)} ^^A aka `d909'
 %                           ^^A https://tex.stackexchange.com/questions/531413/dvipdfmx-and-dvips-do-not-expand-fonts-properly-with-lualatex-in-dvi-mode
 %    \begin{macrocode}
 %<*pdftex-def|luatex-def>
@@ -12904,6 +12964,9 @@
 %
 %\section{Configuration files}
 %\changes{v1.6}{2005/01/24}{restructure \file{dtx} file}
+%\changes{v2.8a}{2021/02/22}{rename \file{mt-pad.cfg} to \file{mt-EBGaramond.cfg}
+%                            (requested by \contributor Karl Berry <karl\at freefriends.org>)}
+%                            ^^A private mail, 2021/02/22
 %
 % Let's now write the font configuration files.
 %    \begin{macrocode}
@@ -12943,7 +13006,7 @@
 
 %    \end{macrocode}
 %\changes{v2.6}{2014/04/07}{new: \texttt{allmath-nott} and \texttt{alltext-nott}
-%                           (reqested by \contributor Karl Berry <karl\at freefriends.org>)}
+%                           (suggested by \contributor Karl Berry <karl\at freefriends.org>)}
 %                           ^^A private mail, 2014/03/21
 %    \begin{macrocode}
 \DeclareMicrotypeSet{allmath-nott}
@@ -13023,11 +13086,14 @@
 %
 % These are the variants I happen to be using (expert encoding, oldstyle
 % numerals, swashes, alternative, display, inferior and superior numerals):
+% Additionally, we add the now common variants for Lining, Tabular, Oldstyle,
+% and Tabular Oldstyle numbers.
+%\changes{v2.8a}{2021/02/22}{add \texttt{-LF}, \texttt{-TLF}, \texttt{-OsF} and \texttt{-TOsF} as variants}
 %    \begin{macrocode}
 %%% -----------------------------------------------------------------------
 %%% FONT VARIANTS AND ALIASES
 
-\DeclareMicrotypeVariants{x,j,w,a,d,0,1}
+\DeclareMicrotypeVariants{x,j,w,a,d,0,1,-LF,-TLF,-OsF,-TOsF}
 %    \end{macrocode}
 % Other candidates: |2|~(proportional digits), |e|~(engraved), |f|~(Fraktur),
 % |g|~(small text), |h|~(shadow), |l|~(outline), |n|~(informal),
@@ -13062,17 +13128,20 @@
 \fi
 %    \end{macrocode}
 % The Latin Modern fonts, the virtual fonts from the
-% \pkg{ae} and \pkg{zefonts}, and the \pkg{eco} and \pkg{hfoldsty} packages
-% (oldstyle numerals) all inherit the (basic) settings from Computer Modern
-% Roman. Some of them are in part overwritten later.
+% \pkg{ae} and \pkg{zefonts} and the \pkg{eco} and \pkg{hfoldsty} packages
+% (oldstyle numerals), as well as \pkg{mlmodern}, all inherit the (basic) settings
+% from Computer Modern Roman. Some of them are in part overwritten later.
 %\changes{v1.2}{2004/10/03}{declare \texttt{cmor} as an alias of \texttt{cmr}}
 %\changes{v1.3}{2004/10/22}{declare \texttt{aer}, \texttt{zer} and \texttt{hfor}
-%                           as aliases of \texttt{cmr}}
+%                           as aliases of \texttt{cmr}}^^A
 % We mustn't forget the Latin Modern math fonts.
 %\changes{v2.5}{2012/07/17}{declare \texttt{lmsy} and \texttt{lmm} as aliases
 %                           of \texttt{cmsy} resp. \texttt{cmm}
 %                           (reported by \contributor Jonas Hogstrom <hjb981\at gmail.com>)}
 %                           ^^A https://tex.stackexchange.com/questions/63558/how-to-get-microtype-to-work-with-mathematical-minus-sign-and-package-lmodern
+%\changes{v2.8a}{2021/01/13}{declare \pkg{mlmodern} fonts as aliases of Latin Modern
+%                            (reported by \contributor Daniel Benjamin Miller <dbmiller\at dbmiller.org>)}
+%                            ^^A private mail, 2021/01/12
 %    \begin{macrocode}
 \DeclareMicrotypeAlias{lmsy}{cmsy}         %   "
 \DeclareMicrotypeAlias{lmm} {cmm}          %   "
@@ -13080,11 +13149,20 @@
 \DeclareMicrotypeAlias{zer} {cmr}          % zefonts
 \DeclareMicrotypeAlias{cmor}{cmr}          % eco
 \DeclareMicrotypeAlias{hfor}{cmr}          % hfoldsty
+\DeclareMicrotypeAlias{mlmr}{cmr}          % mlmodern
+\DeclareMicrotypeAlias{mlmsy}{cmsy}        %   "
+\DeclareMicrotypeAlias{mlmm} {cmm}         %   "
 %    \end{macrocode}
 % Another, new Computer Modern extension.
 %\changes{v2.8}{2019/11/22}{declare New Computer Modern as an alias of Latin Modern Roman}
+% The \pkg{newcomputermodern} package loads it by file name.
+%\changes{v2.8a}{2021/01/09}{reference New Computer Modern also by file name
+%                            (reported by \contributor Canageek <@\at @>)}
+%                            ^^A https://tex.stackexchange.com/questions/578121/how-do-i-properly-tell-microtype-that-newcomputermodern-is-the-same-as-comput
 %    \begin{macrocode}
 \DeclareMicrotypeAlias{New Computer Modern}{Latin Modern Roman}
+\DeclareMicrotypeAlias{NewCM10-Book.otf}   {Latin Modern Roman}
+\DeclareMicrotypeAlias{NewCM10-Regular.otf}{Latin Modern Roman}
 %    \end{macrocode}
 % The packages \pkg{pxfonts} and \pkg{txfonts} fonts inherit Palatino and Times
 % settings respectively,
@@ -13125,11 +13203,11 @@
 %\changes{v2.5}{2012/03/29}{declare TeX Gyre Pagella, Asana Math, Palatino <LT> Std, and Palatino
 %                           as aliases of Palatino Linotype (OpenType version)}
 %    \begin{macrocode}
-\DeclareMicrotypeAlias{Domitian}        {Palatino Linotype}
-\DeclareMicrotypeAlias{TeX Gyre Pagella}{Palatino Linotype}
-\DeclareMicrotypeAlias{Palatino LT Std} {Palatino Linotype}
-\DeclareMicrotypeAlias{Palatino}        {Palatino Linotype}
-\DeclareMicrotypeAlias{Asana Math}      {Palatino Linotype}
+\DeclareMicrotypeAlias{Palatino Linotype}{Palatino}
+\DeclareMicrotypeAlias{Palatino LT Std}  {Palatino}
+\DeclareMicrotypeAlias{TeX Gyre Pagella} {Palatino}
+\DeclareMicrotypeAlias{Domitian}         {Palatino}
+\DeclareMicrotypeAlias{Asana Math}       {Palatino}
 %% -- Times New Roman
 \DeclareMicrotypeAlias{txr}{ptm}           % txfonts
 %    \end{macrocode}
@@ -13144,13 +13222,13 @@
 % The \pkg{tempora} package.
 %\changes{v2.7}{2017/02/25}{declare aliases for \pkg{tempora}}
 %    \begin{macrocode}
-\DeclareMicrotypeAlias{Tempora-TLF}{ptmx}  % tempora
+\DeclareMicrotypeAlias{Tempora-TLF} {ptmx} % tempora
 \DeclareMicrotypeAlias{Tempora-TOsF}{ptmj} %    "
 \DeclareMicrotypeAlias{qtm}{ptm}           % TeX Gyre Termes (formerly: qfonts/QuasiTimes)
 %    \end{macrocode}
 % The \pkg{step} package.
 %    \begin{macrocode}
-\DeclareMicrotypeAlias{STEP-TLF}{ptmx}     % step
+\DeclareMicrotypeAlias{STEP-TLF} {ptmx}    % step
 \DeclareMicrotypeAlias{STEP-TOsF}{ptmj}    %   "
 %    \end{macrocode}
 % The \pkg{stix} and \pkg{stix2} packages (the latter has departed a bit from being
@@ -13197,6 +13275,13 @@
 \DeclareMicrotypeAlias{zgmj}{ugm}          %    "
 \DeclareMicrotypeAlias{zgmI}{ugm}          %    "
 \DeclareMicrotypeAlias{zgmq}{ugm}          %    "
+%    \end{macrocode}
+% Because a configuration file for Adobe Garamond wouldn't be permitted
+% for \texlive\ distribution, we use <EB> Garamond as the base font.
+%    \begin{macrocode}
+\DeclareMicrotypeAlias{pad} {EBGaramond-LF}% Adobe Garamond
+\DeclareMicrotypeAlias{padx}{EBGaramond-TLF}%   "
+\DeclareMicrotypeAlias{padj}{EBGaramond-TOsF}%  "
 %% --
 %    \end{macrocode}
 % <URW> Letter Gothic is similar enough to Bitstream Letter Gothic to share the
@@ -13215,7 +13300,6 @@
 %    \begin{macrocode}
 \DeclareMicrotypeAlias{zpeus}   {zpeu}     % Adobe Euro sans -> serif
 \DeclareMicrotypeAlias{eurosans}{zpeu}     % Adobe Euro sans -> serif
-\DeclareMicrotypeAlias{euroitcs}{euroitc}  % ITC Euro sans -> serif
 
 %    \end{macrocode}
 %
@@ -13538,7 +13622,7 @@
 % should be overridden by font-specific ones.
 %    \begin{macrocode}
 \DeclareCharacterInheritance
-   { encoding = {EU1,EU2,TU} }
+   { encoding = {TU,EU1,EU2} }
    { A = {\`A,\'A,\^A,\~A,\"A,\r A,\k A,\u A},
      a = {\`a,\'a,\^a,\~a,\"a,\r a,\k a,\u a},
      C = {\'C,\c C,\v C},
@@ -13844,9 +13928,9 @@
 %    \begin{macrocode}
 %<cmr>   [ name     = cmr-default ]
 %    \end{macrocode}
-%  \item Adobe Garamond (|pad|, |padx|, |padj|)
+%  \item <EB> Garamond
 %    \begin{macrocode}
-%<pad>   [ name     = pad-default ]
+%<ebg>   [ name     = EBGaramond-default ]
 %    \end{macrocode}
 %  \item Minion\footnote{Contributed by \contributor Harald Harders <h.harders\at tu-bs.de>
 %                        and \contributor Karl Karlsson <karl-karlsson\at yandex.ru>.}
@@ -13871,82 +13955,82 @@
 %    \begin{macrocode}
 %<ugm>   [ name     = ugm-default ]
 %<m-t|cmr|pmn>   { }
-%<bch|blg|pad|ugm>   { encoding = OT1,
+%<bch|blg|ebg|ugm>   { encoding = OT1,
 %<ppl|ptm>   { encoding = {OT1,OT4},
 %<bch>     family   = bch }
 %<blg>     family   = blg }
-%<pad>     family   = {pad,padx,padj} }
+%<ebg>     family   = {EBGaramond-LF,EBGaramond-OsF,EBGaramond-TLF,EBGaramond-TOsF} }
 %<ppl>     family   = {ppl,pplx,pplj} }
 %<ptm>     family   = {ptm,ptmx,ptmj} }
 %<ugm>     family   = ugm }
    {
-%<m-t|bch|blg|cmr|pad|pmn|ppl|ptm>     A = {50,50},
+%<m-t|bch|blg|cmr|ebg|pmn|ppl|ptm>     A = {50,50},
 %<ugm>     A = {50,100},
-%<pad|ptm>   \AE = {50,  },
+%<ebg|ptm>   \AE = {50,  },
 %<ugm>   \AE = {150,50},
 %<ugm>     B = {  ,50},
-%<bch|pad|pmn|ugm>     C = {50,  },
-%<bch|pad|pmn>     D = {  ,50},
+%<bch|ebg|pmn|ugm>     C = {50,  },
+%<bch|ebg|pmn>     D = {  ,50},
 %<ugm>     D = {  ,70},
 %<ugm>     E = {  ,50},
-%<m-t|bch|cmr|pad|pmn|ptm>     F = {  ,50},
+%<m-t|bch|cmr|ebg|pmn|ptm>     F = {  ,50},
 %<ugm>     F = {  ,70},
-%<bch|pad|pmn>     G = {50,  },
+%<bch|ebg|pmn>     G = {50,  },
 %<ugm>     G = {50,50},
 %<blg>     I = {150,150},
-%<m-t|cmr|pad|pmn|ppl|ptm|ugm>     J = {50,  },
+%<m-t|cmr|ebg|pmn|ppl|ptm|ugm>     J = {50,  },
 %<bch|blg>     J = {100,  },
 %<!blg>     K = {  ,50},
 %<blg>     K = {50,  },
-%<m-t|bch|cmr|pad|pmn|ppl>     L = {  ,50},
+%<m-t|bch|cmr|ebg|pmn|ppl>     L = {  ,50},
 %<blg>     L = {  ,150},
 %<ptm>     L = {  ,80},
 %<ugm>     L = {  ,120},
-%<bch|pad|pmn|ugm>     O = {50,50},
-%<pad>   \OE = {50,  },
+%<bch|ebg|pmn|ugm>     O = {50,50},
+%<ebg>   \OE = {50,  },
 %<ugm>   \OE = {50,50},
 %<blg>     P = {  ,100},
 %<ugm>     P = {  ,50},
-%<bch|pad|pmn>     Q = {50,70},
+%<bch|ebg|pmn>     Q = {50,70},
 %<ugm>     Q = {50,50},
 %<bch>     R = {  ,50},
 %<ugm>     R = {  ,70},
-%<m-t|bch|cmr|pad|pmn|ppl|ptm>     T = {50,50},
+%<m-t|bch|cmr|ebg|pmn|ppl|ptm>     T = {50,50},
 %<blg>     T = {100,100},
 %<ugm>     T = {70,70},
-%<m-t|bch|cmr|pad|pmn|ppl|ptm>     V = {50,50},
+%<m-t|bch|cmr|ebg|pmn|ppl|ptm>     V = {50,50},
 %<blg|ugm>     V = {70,70},
-%<m-t|bch|cmr|pad|pmn|ppl|ptm>     W = {50,50},
+%<m-t|bch|cmr|ebg|pmn|ppl|ptm>     W = {50,50},
 %<ugm>     W = {70,70},
-%<m-t|bch|cmr|pad|pmn|ppl|ptm>     X = {50,50},
+%<m-t|bch|cmr|ebg|pmn|ppl|ptm>     X = {50,50},
 %<ugm>     X = {50,70},
-%<m-t|bch|cmr|pad|pmn|ppl>     Y = {50,50},
+%<m-t|bch|cmr|ebg|pmn|ppl>     Y = {50,50},
 %<blg|ptm|ugm>     Y = {80,80},
 %<ugm>     Z = {50,50},
 %<blg>     f = {150,100},
 %<blg>     i = {150,150},
 %<blg>     j = {100,100},
-%<m-t|bch|cmr|pad|pmn|ppl|ptm>     k = {  ,50},
+%<m-t|bch|cmr|ebg|pmn|ppl|ptm>     k = {  ,50},
 %<ugm>     k = {  ,70},
 %<blg>     l = {150,150},
 %<pmn>     l = {  ,-50},
-%<pad|ppl>     p = {50,50},
+%<ebg|ppl>     p = {50,50},
 %<ugm>     p = {  ,50},
-%<pad|ppl>     q = {50,  },
+%<ebg|ppl>     q = {50,  },
 %<!blg>     r = {  ,50},
 %<blg>     r = {100, 80},
-%<cmr|pad|pmn>     t = {  ,70},
+%<cmr|ebg|pmn>     t = {  ,70},
 %<bch>     t = {  ,50},
 %<blg>     t = {150, 80},
 %<ugm>     t = {  ,100},
-%<m-t|bch|cmr|pad|pmn|ppl|ptm>     v = {50,50},
+%<m-t|bch|cmr|ebg|pmn|ppl|ptm>     v = {50,50},
 %<blg>     v = {100,100},
 %<ugm>     v = {50,70},
-%<m-t|bch|cmr|pad|pmn|ppl|ptm>     w = {50,50},
+%<m-t|bch|cmr|ebg|pmn|ppl|ptm>     w = {50,50},
 %<ugm>     w = {50,70},
 %<!blg>     x = {50,50},
 %<blg>     x = {100,100},
-%<m-t|bch|pad|pmn>     y = {  ,50},
+%<m-t|bch|ebg|pmn>     y = {  ,50},
 %<blg>     y = { 50,100},
 %<cmr|ppl|ptm>     y = {50,70},
 %<ugm>     y = {  ,70},
@@ -13957,16 +14041,16 @@
 %    \begin{macrocode}
 %<cmr>     0 = {  ,50},
 %<m-t>     1 = {50,50},
-%<bch|blg|pad|ptm|ugm>     1 = {150,150},
+%<bch|blg|ebg|ptm|ugm>     1 = {150,150},
 %<cmr>     1 = {100,200},
 %<pmn>     1 = {  ,50},
 %<ppl>     1 = {100,100},
-%<bch|cmr|pad|ugm>     2 = {50,50},
+%<bch|cmr|ebg|ugm>     2 = {50,50},
 %<blg>     2 = {  ,100},
 %<bch|pmn>     3 = {50,  },
-%<cmr|pad|ugm>     3 = {50,50},
+%<cmr|ebg|ugm>     3 = {50,50},
 %<blg>     3 = {100,  },
-%<m-t|pad>     4 = {50,50},
+%<m-t|ebg>     4 = {50,50},
 %<bch>     4 = {100,50},
 %<blg>     4 = {100,  },
 %<cmr|ugm>     4 = {70,70},
@@ -13973,43 +14057,43 @@
 %<pmn>     4 = {50,  },
 %<ptm>     4 = {70,  },
 %<cmr>     5 = {  ,50},
-%<pad>     5 = {50,50},
+%<ebg>     5 = {50,50},
 %<bch>     6 = {50,  },
 %<cmr>     6 = {  ,50},
-%<pad>     6 = {50,50},
+%<ebg>     6 = {50,50},
 %<m-t>     7 = {50,50},
-%<bch|pad|pmn|ugm>     7 = {50,80},
+%<bch|ebg|pmn|ugm>     7 = {50,80},
 %<blg>     7 = {100,100},
 %<cmr|ptm>     7 = {50,100},
 %<ppl>     7 = {  ,50},
 %<cmr>     8 = {  ,50},
-%<bch|pad>     9 = {50,50},
+%<bch|ebg>     9 = {50,50},
 %<cmr>     9 = {  ,50},
-%<m-t|cmr|pad|pmn|ppl|ptm|ugm>     . = { ,700},
+%<m-t|cmr|ebg|pmn|ppl|ptm|ugm>     . = { ,700},
 %<bch>     . = { ,600},
 %<blg>     . = {400,500},
 %<!blg>    {,}= { ,500},
 %<blg>    {,}= {300,400},
-%<m-t|cmr|pad|pmn|ppl|ptm|ugm>     : = { ,500},
+%<m-t|cmr|ebg|pmn|ppl|ptm|ugm>     : = { ,500},
 %<bch>     : = { ,400},
 %<blg>     : = {300,400},
-%<m-t|bch|pad|pmn|ptm>     ; = { ,300},
+%<m-t|bch|ebg|pmn|ptm>     ; = { ,300},
 %<blg>     ; = {200,300},
 %<cmr|ppl>     ; = { ,500},
 %<ugm>     ; = { ,400},
 %<!blg>     ! = { ,100},
 %<blg>     ! = {200,200},
-%<m-t|pad|pmn|ptm>     ? = { ,100},
+%<m-t|ebg|pmn|ptm>     ? = { ,100},
 %<bch|cmr|ppl|ugm>     ? = { ,200},
 %<blg>     ? = {150,150},
 %<pmn>     " = {300,300},
-%<m-t|bch|cmr|pad|pmn|ppl>     @ = {50,50},
+%<m-t|bch|cmr|ebg|pmn|ppl>     @ = {50,50},
 %<ptm>     @ = {100,100},
-%<m-t|bch|blg|cmr|pad|pmn|ppl|ptm>     ~ = {200,250},
+%<m-t|bch|blg|cmr|ebg|pmn|ppl|ptm>     ~ = {200,250},
 %<ugm>     ~ = {300,350},
-%<pad|ppl|ptm>     & = {50,100},
+%<ebg|ppl|ptm>     & = {50,100},
 %<ugm>     & = {  ,100},
-%<m-t|cmr|pad|pmn>    \% = {50,50},
+%<m-t|cmr|ebg|pmn>    \% = {50,50},
 %<bch>    \% = {  ,50},
 %<ppl|ptm>    \% = {100,100},
 %<ugm>    \% = {50,100},
@@ -14017,14 +14101,14 @@
 %<m-t|ppl|ptm|ugm>     * = {200,200},
 %<bch|pmn>     * = {200,300},
 %<blg>     * = {150,200},
-%<cmr|pad>     * = {300,300},
+%<cmr|ebg>     * = {300,300},
 %<m-t|cmr|ppl|ptm>     + = {250,250},
 %<bch>     + = {150,250},
-%<pad>     + = {300,300},
+%<ebg>     + = {300,300},
 %<blg|pmn>     + = {150,200},
 %<ugm>     + = {250,300},
 %<blg|ugm>    {=}= {200,200},
-%<m-t|pad|pmn|ptm>     ( = {100,   },    ) = {   ,200},
+%<m-t|ebg|pmn|ptm>     ( = {100,   },    ) = {   ,200},
 %<bch|ugm>     ( = {200,   },    ) = {   ,200},
 %<cmr|blg>     ( = {300,   },    ) = {   ,300},
 %<ppl>     ( = {100,   },    ) = {   ,300},
@@ -14034,7 +14118,7 @@
 %\changes{v1.7}{2005/03/15}{fix: remove \textbackslash\ from <OT1>,
 %                           add \cmd\textbackslash\ to <T1> encoding}
 %    \begin{macrocode}
-%<m-t|pad|pmn|ptm>     / = {100,200},
+%<m-t|ebg|pmn|ptm>     / = {100,200},
 %<bch>     / = { ,200},
 %<blg>     / = {300,300},
 %<cmr|ppl>     / = {200,300},
@@ -14042,7 +14126,7 @@
 %<m-t|ptm>     - = {500,500},
 %<bch|cmr|ppl>     - = {400,500},
 %<blg>     - = {300,400},
-%<pad>     - = {300,500},
+%<ebg>     - = {300,500},
 %<pmn>     - = {200,400},
 %<ugm>     - = {500,600},
 %<blg>     < = {200,100},    > = {100,200},
@@ -14051,7 +14135,7 @@
 %<m-t|pmn>     \textendash       = {200,200},   \textemdash        = {150,150},
 %<bch>     \textendash       = {200,300},   \textemdash        = {150,250},
 %<cmr>     \textendash       = {400,300},   \textemdash        = {300,200},
-%<pad|ppl|ptm>     \textendash       = {300,300},   \textemdash        = {200,200},
+%<ebg|ppl|ptm>     \textendash       = {300,300},   \textemdash        = {200,200},
 %<ugm>     \textendash       = {250,300},   \textemdash        = {250,250},
 %    \end{macrocode}
 % Why settings for left \emph{and} right quotes? Because in some languages they
@@ -14060,13 +14144,13 @@
 %<m-t|bch|pmn>     \textquoteleft    = {300,400},   \textquoteright    = {300,400},
 %<blg>     \textquoteleft     = {400,600},   \textquoteright    = {400,600},
 %<cmr>     \textquoteleft    = {500,700},   \textquoteright    = {500,600},
-%<pad|ppl>     \textquoteleft    = {500,700},   \textquoteright    = {500,700},
+%<ebg|ppl>     \textquoteleft    = {500,700},   \textquoteright    = {500,700},
 %<ptm>     \textquoteleft    = {500,500},   \textquoteright    = {300,500},
 %<ugm>     \textquoteleft    = {300,600},   \textquoteright    = {300,600},
 %<m-t|bch|pmn>     \textquotedblleft = {300,300},   \textquotedblright = {300,300}
 %<blg>     \textquotedblright = {300,400}
 %<cmr>     \textquotedblleft = {500,300},   \textquotedblright = {200,600}
-%<pad|ppl|ptm>     \textquotedblleft = {300,400},   \textquotedblright = {300,400}
+%<ebg|ppl|ptm>     \textquotedblleft = {300,400},   \textquotedblright = {300,400}
 %<ugm>     \textquotedblleft = {400,400},   \textquotedblright = {400,400}
    }
 
@@ -14125,7 +14209,7 @@
 %<bch>   [ name     = bch-T1,
 %<blg>   [ name     = blg-T1,
 %<cmr>   [ name     = cmr-T1,
-%<pad>   [ name     = pad-T1,
+%<ebg>   [ name     = EBGaramond-T1,
 %<pmn>   [ name     = pmnj-T1,
 %<ppl>   [ name     = ppl-T1,
 %<ptm>   [ name     = ptm-T1,
@@ -14134,18 +14218,18 @@
 %<bch>     load     = bch-default ]
 %<blg>     load     = blg-default ]
 %<cmr>     load     = cmr-default ]
-%<pad>     load     = pad-default ]
+%<ebg>     load     = EBGaramond-default ]
 %<pmn>     load     = pmnj-default ]
 %<ppl>     load     = ppl-default ]
 %<ptm>     load     = ptm-default ]
 %<ugm>     load     = ugm-default ]
 %<m-t>   { encoding = {T1,LY1,EU1,EU2,TU} }
-%<bch|cmr|pad|pmn|ppl>   { encoding = {T1,LY1},
+%<bch|cmr|ebg|pmn|ppl>   { encoding = {T1,LY1},
 %<blg|ptm|ugm>   { encoding = {T1},
 %<bch>     family   = bch }
 %<blg>     family   = blg }
 %<cmr>     family   = cmr }
-%<pad>     family   = {pad,padx,padj} }
+%<ebg>     family   = {EBGaramond-LF,EBGaramond-TLF,EBGaramond-OsF,EBGaramond-TOsF} }
 %<pmn>     family   = pmnj }
 %<ppl>     family   = {ppl,pplx,pplj} }
 %<ptm>     family   = {ptm,ptmx,ptmj} }
@@ -14161,10 +14245,10 @@
 %<blg>     127 =  {300,400},
 %<blg>     156 =  {100,   }, % IJ
 %<blg>     188 =  { 80, 80}, % ij
-%<m-t|bch|pad|pmn|ppl|ptm>       _ = {100,100},
+%<m-t|bch|ebg|pmn|ppl|ptm>       _ = {100,100},
 %<cmr>       _ = {200,200},
 %<ugm>       _ = {100,200},
-%<m-t|pad|pmn|ptm>     \textbackslash    = {100,200},
+%<m-t|ebg|pmn|ptm>     \textbackslash    = {100,200},
 %<bch>     \textbackslash    = {150,200},
 %<blg>     \textbackslash    = {250,300},
 %<cmr|ppl>     \textbackslash    = {200,300},
@@ -14179,24 +14263,24 @@
 % The <EC> fonts do something weird: they insert an implicit kern between quote
 % and boundary character. Therefore, we must override the settings from <OT1>.
 %    \begin{macrocode}
-%<m-t|cmr|pad|ppl|ptm|ugm>     \quotesinglbase   = {400,400},   \quotedblbase      = {400,400},
+%<m-t|cmr|ebg|ppl|ptm|ugm>     \quotesinglbase   = {400,400},   \quotedblbase      = {400,400},
 %<blg>     \quotesinglbase   = {400,400},   \quotedblbase      = {300,400},
 %<bch|pmn>     \quotesinglbase   = {400,400},   \quotedblbase      = {300,300},
 %<m-t|bch|pmn>     \guilsinglleft    = {400,300},   \guilsinglright    = {300,400},
 %<blg>     \guilsinglleft    = {300,500},   \guilsinglright    = {300,500},
-%<cmr|pad|ppl|ptm>     \guilsinglleft    = {400,400},   \guilsinglright    = {300,500},
+%<cmr|ebg|ppl|ptm>     \guilsinglleft    = {400,400},   \guilsinglright    = {300,500},
 %<ugm>     \guilsinglleft    = {400,400},   \guilsinglright    = {300,600},
 %<m-t>     \guillemotleft    = {200,200},   \guillemotright    = {200,200},
 %<cmr>     \guillemotleft    = {300,200},   \guillemotright    = {100,400},
 %<bch|pmn>     \guillemotleft    = {200,200},   \guillemotright    = {150,300},
-%<blg|pad|ppl|ptm>     \guillemotleft    = {300,300},   \guillemotright    = {200,400},
+%<blg|ebg|ppl|ptm>     \guillemotleft    = {300,300},   \guillemotright    = {200,400},
 %<ugm>     \guillemotleft    = {300,400},   \guillemotright    = {300,400},
-%<m-t|bch|cmr|pad|pmn|ppl|ugm>     \textexclamdown   = {100,   },   \textquestiondown  = {100,   },
+%<m-t|bch|cmr|ebg|pmn|ppl|ugm>     \textexclamdown   = {100,   },   \textquestiondown  = {100,   },
 %<blg>     \textexclamdown   = {200,   },   \textquestiondown  = {100,   },
 %<ptm>     \textexclamdown   = {200,   },   \textquestiondown  = {200,   },
-%<m-t|cmr|pad|ppl|ptm|ugm>     \textbraceleft    = {400,200},   \textbraceright    = {200,400},
+%<m-t|cmr|ebg|ppl|ptm|ugm>     \textbraceleft    = {400,200},   \textbraceright    = {200,400},
 %<bch|blg|pmn>     \textbraceleft    = {200,   },   \textbraceright    = {   ,300},
-%<m-t|bch|cmr|pad|ppl|ptm|ugm>     \textless         = {200,100},   \textgreater       = {100,200}
+%<m-t|bch|cmr|ebg|ppl|ptm|ugm>     \textless         = {200,100},   \textgreater       = {100,200}
 %<pmn>     \textless         = {100,   },   \textgreater       = {   ,100},
 %<pmn>     \textvisiblespace = {100,100} % not in LY1
 %    \end{macrocode}
@@ -14470,65 +14554,65 @@
 %<blg>   [ name     = blg-it,
 %<blg>     load     = blg-default ]
 %<cmr>   [ name     = cmr-it   ]
-%<pad>   [ name     = pad-it   ]
+%<ebg>   [ name     = EBGaramond-it   ]
 %<pmn>   [ name     = pmnj-it  ]
 %<ppl>   [ name     = ppl-it   ]
 %<ptm>   [ name     = ptm-it   ]
 %<ugm>   [ name     = ugm-it   ]
-%<m-t|bch|blg|pad|ugm>   { encoding = OT1,
+%<m-t|bch|blg|ebg|ugm>   { encoding = OT1,
 %<ppl|ptm>   { encoding = {OT1,OT4},
 %<bch>     family   = bch,
 %<blg>     family   = blg,
-%<pad>     family   = {pad,padx,padj},
+%<ebg>     family   = {EBGaramond-LF,EBGaramond-TLF,EBGaramond-OsF,EBGaramond-TOsF},
 %<ppl>     family   = {ppl,pplx,pplj},
 %<ptm>     family   = {ptm,ptmx,ptmj},
 %<ugm>     family   = ugm,
-%<m-t|bch|pad|ppl|ptm>     shape    = {it,sl}  }
+%<m-t|bch|ebg|ppl|ptm>     shape    = {it,sl}  }
 %<blg|ugm>     shape    = it  }
 %<cmr|pmn>   { }
    {
 %<cmr>     A = {100,100},
 %<ptm>     A = {100,50},
-%<pad|pmn>     A = {50,  },
+%<ebg|pmn>     A = {50,  },
 %<ugm>     A = {  ,150},
 %<ppl>     A = {50,50},
 %<ptm>   \AE = {100,  },
-%<pad|ppl>   \AE = {50,  },
+%<ebg|ppl>   \AE = {50,  },
 %<cmr>     B = {83,-40},
-%<pad|ppl|ptm>     B = {50,  },
+%<ebg|ppl|ptm>     B = {50,  },
 %<pmn>     B = {20,-50},
 %<bch|ppl|ptm|ugm>     C = {50,  },
 %<cmr>     C = {165,-75},
-%<pad>     C = {100, },
+%<ebg>     C = {100, },
 %<pmn>     C = {50,-50},
 %<cmr>     D = {75, -28},
-%<pad|ppl|ptm>     D = {50,50},
+%<ebg|ppl|ptm>     D = {50,50},
 %<pmn>     D = {20,  },
 %<cmr>     E = {80,-55},
-%<pad|ppl|ptm>     E = {50,  },
+%<ebg|ppl|ptm>     E = {50,  },
 %<pmn>     E = {20,-50},
 %<cmr>     F = {85,-80},
-%<pad|ptm>     F = {100, },
+%<ebg|ptm>     F = {100, },
 %<pmn>     F = {10,  },
 %<ppl>     F = {50,  },
 %<bch|ppl|ptm|ugm>     G = {50,  },
 %<cmr>     G = {153,-15},
-%<pad>     G = {100, },
+%<ebg>     G = {100, },
 %<pmn>     G = {50,-50},
 %<cmr>     H = {73,-60},
-%<pad|ppl|ptm>     H = {50,  },
+%<ebg|ppl|ptm>     H = {50,  },
 %<cmr>     I = {140,-120},
-%<pad|ptm>     I = {50,  },
+%<ebg|ptm>     I = {50,  },
 %<pmn>     I = {20,-50},
 %<cmr>     J = {135,-80},
-%<pad>     J = {50,  },
+%<ebg>     J = {50,  },
 %<pmn>     J = {20,  },
 %<ptm>     J = {100, },
 %<cmr>     K = {70,-30},
-%<pad|ppl|ptm>     K = {50,  },
+%<ebg|ppl|ptm>     K = {50,  },
 %<pmn>     K = {20,  },
 %<cmr>     L = {87, 40},
-%<pad|ppl|ptm>     L = {50,  },
+%<ebg|ppl|ptm>     L = {50,  },
 %<pmn>     L = {20,50},
 %<ugm>     L = {  ,100},
 %<cmr>     M = {67,-45},
@@ -14539,37 +14623,37 @@
 %<ptm>     N = {50,  },
 %<bch|pmn|ppl|ptm>     O = {50,  },
 %<cmr>     O = {150,-30},
-%<pad>     O = {100, },
+%<ebg>     O = {100, },
 %<ugm>     O = {70,50},
 %<ppl|ptm>   \OE = {50,  },
-%<pad>   \OE = {100, },
+%<ebg>   \OE = {100, },
 %<cmr>     P = {82,-50},
-%<pad|ppl|ptm>     P = {50,  },
+%<ebg|ppl|ptm>     P = {50,  },
 %<pmn>     P = {20,-50},
 %<bch|pmn|ppl|ptm>     Q = {50,  },
 %<cmr>     Q = {150,-30},
-%<pad>     Q = {100, },
+%<ebg>     Q = {100, },
 %<ugm>     Q = {70,50},
 %<cmr>     R = {75, 15},
-%<pad|ppl|ptm>     R = {50,  },
+%<ebg|ppl|ptm>     R = {50,  },
 %<pmn>     R = {20,  },
-%<bch|pad|ppl|ptm>     S = {50,  },
+%<bch|ebg|ppl|ptm>     S = {50,  },
 %<cmr>     S = {90,-65},
 %<pmn>     S = {20,-30},
-%<bch|pad|ppl|ptm>     $ = {50,  },
+%<bch|ebg|ppl|ptm>     $ = {50,  },
 %<cmr>     $ = {100,-20},
 %<pmn>     $ = {20,-30},
 %<bch|pmn|ugm>     T = {70,  },
 %<cmr>     T = {220,-85},
-%<pad|ppl|ptm>     T = {100, },
+%<ebg|ppl|ptm>     T = {100, },
 %<cmr>     U = {230,-55},
-%<pad|ppl|ptm>     U = {50,  },
+%<ebg|ppl|ptm>     U = {50,  },
 %<pmn>     U = {50,-50},
 %<cmr>     V = {260,-60},
-%<pad|pmn|ugm>     V = {100, },
+%<ebg|pmn|ugm>     V = {100, },
 %<ppl|ptm>     V = {100,50},
 %<cmr>     W = {185,-55},
-%<pad|pmn|ugm>     W = {100, },
+%<ebg|pmn|ugm>     W = {100, },
 %<ppl>     W = {50,  },
 %<ptm>     W = {100,50},
 %<cmr>     X = {70,-30},
@@ -14587,7 +14671,7 @@
 %<pmn>     d = {  ,-50},
 %<cmr>     e = {180, },
 %<cmr>     f = {  ,-250},
-%<pad|pmn>     f = { ,-100},
+%<ebg|pmn>     f = { ,-100},
 %<cmr>     g = {150,-10},
 %<cmr>     h = {100, },
 %<cmr>     i = {210, },
@@ -14623,12 +14707,12 @@
 %<cmr>     0 = {170,-85},
 %<bch|ptm>     1 = {150,100},
 %<cmr>     1 = {230,110},
-%<pad>     1 = {150, },
+%<ebg>     1 = {150, },
 %<pmn>     1 = {50,  },
 %<ppl>     1 = {100, },
 %<ugm>     1 = {150,150},
 %<cmr>     2 = {130,-70},
-%<pad|ppl|ptm>     2 = {50,  },
+%<ebg|ppl|ptm>     2 = {50,  },
 %<pmn>     2 = {-50,  },
 %<bch>     3 = {50,  },
 %<cmr>     3 = {140,-70},
@@ -14636,31 +14720,31 @@
 %<ptm>     3 = {100,50},
 %<bch>     4 = {100, },
 %<cmr>     4 = {130,80},
-%<pad>     4 = {150, },
+%<ebg>     4 = {150, },
 %<ppl|ptm>     4 = {50,  },
 %<cmr>     5 = {160, },
 %<ptm>     5 = {50,  },
 %<bch>     6 = {50,  },
 %<cmr>     6 = {175,-30},
-%<bch|pad|ptm>     7 = {100, },
+%<bch|ebg|ptm>     7 = {100, },
 %<cmr>     7 = {250,-150},
 %<pmn>     7 = {20,  },
 %<ppl>     7 = {50,  },
 %<cmr>     8 = {130,-40},
 %<cmr>     9 = {155,-80},
-%<m-t|cmr|pad|pmn|ppl>     . = { ,500},
+%<m-t|cmr|ebg|pmn|ppl>     . = { ,500},
 %<blg>     . = {400,600},
 %<bch|ptm|ugm>     . = { ,700},
 %<blg>    {,}= {300,500},
-%<m-t|pad|pmn|ppl>    {,}= { ,500},
+%<m-t|ebg|pmn|ppl>    {,}= { ,500},
 %<cmr>    {,}= { ,450},
 %<bch|ugm>    {,}= { ,600},
 %<ptm>    {,}= { ,700},
-%<m-t|cmr|pad|ppl>     : = { ,300},
+%<m-t|cmr|ebg|ppl>     : = { ,300},
 %<bch|ugm>     : = { ,400},
 %<pmn>     : = { ,200},
 %<ptm>     : = { ,500},
-%<m-t|cmr|pad|ppl>     ; = { ,300},
+%<m-t|cmr|ebg|ppl>     ; = { ,300},
 %<bch|ugm>     ; = { ,400},
 %<pmn>     ; = { ,200},
 %<ptm>     ; = { ,500},
@@ -14669,11 +14753,11 @@
 %<ptm>     ? = { ,100},
 %<ppl>     ? = { ,300},
 %<pmn>     " = {400,200},
-%<m-t|pad|pmn|ppl|ptm>     & = {50,50},
+%<m-t|ebg|pmn|ppl|ptm>     & = {50,50},
 %<bch>     & = {  ,80},
 %<cmr>     & = {130,30},
 %<ugm>     & = {50,100},
-%<m-t|pad|pmn>    \% = {100, },
+%<m-t|ebg|pmn>    \% = {100, },
 %<cmr>    \% = {180,50},
 %<bch>    \% = {50,50},
 %<ppl|ptm>    \% = {100,100},
@@ -14681,27 +14765,27 @@
 %<m-t|pmn|ppl>     * = {200,200},
 %<bch>     * = {300,200},
 %<cmr>     * = {380,20},
-%<pad>     * = {500,100},
+%<ebg>     * = {500,100},
 %<ptm|ugm>     * = {400,200},
 %<m-t|pmn|ppl>     + = {150,200},
 %<cmr>     + = {180,200},
 %<bch|ugm>     + = {250,250},
-%<pad|ptm>     + = {250,200},
-%<m-t|pad|pmn|ppl>     @ = {50,50},
+%<ebg|ptm>     + = {250,200},
+%<m-t|ebg|pmn|ppl>     @ = {50,50},
 %<bch>     @ = {80,50},
 %<cmr>     @ = {180,10},
 %<ptm>     @ = {150,150},
 %<m-t|bch|ugm>     ~ = {150,150},
-%<cmr|pad|pmn|ppl|ptm>     ~ = {200,150},
+%<cmr|ebg|pmn|ppl|ptm>     ~ = {200,150},
 %<ugm>    {=}= {200,200},
-%<m-t|bch|pad|pmn|ppl|ptm|ugm>     ( = {200, },    ) = {  ,200},
+%<m-t|bch|ebg|pmn|ppl|ptm|ugm>     ( = {200, },    ) = {  ,200},
 %<cmr>     ( = {300, },    ) = {  ,70},
-%<m-t|pad|ppl|ptm|ugm>     / = {100,200},
+%<m-t|ebg|ppl|ptm|ugm>     / = {100,200},
 %<cmr>     / = {100,100},
 %<bch>     / = {  ,150},
 %<pmn>     / = {100,150},
 %<m-t>     - = {300,300},
-%<bch|pad>     - = {300,400},
+%<bch|ebg>     - = {300,400},
 %<pmn>     - = {200,300},
 %<cmr>     - = {500,300},
 %<ppl>     - = {300,500},
@@ -14711,17 +14795,17 @@
 %<m-t|pmn>     \textendash       = {200,200},   \textemdash        = {150,150},
 %<bch>     \textendash       = {200,300},   \textemdash        = {150,200},
 %<cmr>     \textendash       = {500,300},   \textemdash        = {400,170},
-%<pad|ppl|ptm|ugm>     \textendash       = {300,300},   \textemdash        = {200,200},
+%<ebg|ppl|ptm|ugm>     \textendash       = {300,300},   \textemdash        = {200,200},
 %<m-t|bch|pmn|ugm>     \textquoteleft    = {400,200},   \textquoteright    = {400,200},
 %<blg>     \textquoteleft     = {400,400},    \textquoteright    = {400,400},
 %<cmr>     \textquoteleft    = {800,200},   \textquoteright    = {800,-20},
-%<pad>     \textquoteleft    = {800,200},   \textquoteright    = {800,200},
+%<ebg>     \textquoteleft    = {800,200},   \textquoteright    = {800,200},
 %<ppl>     \textquoteleft    = {700,400},   \textquoteright    = {700,400},
 %<ptm>     \textquoteleft    = {800,500},   \textquoteright    = {800,500},
 %<m-t|bch|pmn>     \textquotedblleft = {400,200},   \textquotedblright = {400,200}
 %<blg>     \textquotedblright = {300,300}
 %<cmr>     \textquotedblleft = {540,100},   \textquotedblright = {500,100}
-%<pad>     \textquotedblleft = {700,200},   \textquotedblright = {700,200}
+%<ebg>     \textquotedblleft = {700,200},   \textquotedblright = {700,200}
 %<ppl>     \textquotedblleft = {500,300},   \textquotedblright = {500,300}
 %<ptm>     \textquotedblleft = {700,400},   \textquotedblright = {700,400}
 %<ugm>     \textquotedblleft = {600,200},   \textquotedblright = {600,200}
@@ -14765,7 +14849,7 @@
 %<bch>   [ name     = bch-it-T1,
 %<blg>   [ name     = blg-it-T1,
 %<cmr>   [ name     = cmr-it-T1,
-%<pad>   [ name     = pad-it-T1,
+%<ebg>   [ name     = EBGaramond-it-T1,
 %<pmn>   [ name     = pmnj-it-T1,
 %<ppl>   [ name     = ppl-it-T1,
 %<ptm>   [ name     = ptm-it-T1,
@@ -14775,27 +14859,27 @@
 %<blg>     load     = blg-T1   ]
 %<cmr>     load     = cmr-it   ]
 %<pmn>     load     = pmnj-it  ]
-%<pad>     load     = pad-it   ]
+%<ebg>     load     = EBGaramond-it   ]
 %<ppl>     load     = ppl-it   ]
 %<ptm>     load     = ptm-it   ]
 %<ugm>     load     = ugm-it   ]
-%<m-t|bch|cmr|pad|pmn|ppl>   { encoding = {T1,LY1},
+%<m-t|bch|cmr|ebg|pmn|ppl>   { encoding = {T1,LY1},
 %<blg|ptm|ugm>   { encoding = T1,
 %<bch>     family   = bch,
 %<blg>     family   = blg,
 %<cmr>     family   = cmr,
 %<pmn>     family   = pmnj,
-%<pad>     family   = {pad,padx,padj},
+%<ebg>     family   = {EBGaramond-LF,EBGaramond-TLF,EBGaramond-OsF,EBGaramond-TOsF},
 %<ppl>     family   = {ppl,pplx,pplj},
 %<ptm>     family   = {ptm,ptmx,ptmj},
 %<ugm>     family   = ugm,
-%<m-t|bch|pad|pmn|ppl|ptm>     shape    = {it,sl}  }
+%<m-t|bch|ebg|pmn|ppl|ptm>     shape    = {it,sl}  }
 %<blg|cmr|ugm>     shape    = it       }
    {
 %<m-t|bch|pmn>     _ = {  ,100},
 %<blg>     _ = {0,300},
 %<cmr|ugm>     _ = {100,200},
-%<pad|ppl|ptm>     _ = {100,100},
+%<ebg|ppl|ptm>     _ = {100,100},
 %<blg>     . = {400,600},
 %<blg>    {,}= {300,500},
 %<cmr>     \AE = {100,   },
@@ -14804,11 +14888,11 @@
 %<cmr>     \OE = {100,   },
 %<pmn>     031 = { ,-100}, % ffl
 %<cmr|ptm>     156 = {100, },  % IJ
-%<pad>     156 = {50,  },  % IJ
+%<ebg>     156 = {50,  },  % IJ
 %<pmn>     156 = {20,  },  % IJ
 %<pmn>     188 = {  ,-30}, % ij
 %<pmn>   \v t = { ,100},
-%<m-t|pad|ppl|ptm>     \textbackslash    = {100,200},
+%<m-t|ebg|ppl|ptm>     \textbackslash    = {100,200},
 %<cmr|ugm>     \textbackslash    = {300,300},
 %<bch>     \textbackslash    = {150,150},
 %<pmn>     \textbackslash    = {100,150},
@@ -14820,27 +14904,27 @@
 %<m-t|ptm>     \quotesinglbase   = {300,700},   \quotedblbase      = {400,500},
 %<cmr>     \quotesinglbase   = {300,700},   \quotedblbase      = {200,600},
 %<bch|pmn>     \quotesinglbase   = {200,500},   \quotedblbase      = {150,500},
-%<pad|ppl>     \quotesinglbase   = {500,500},   \quotedblbase      = {400,400},
+%<ebg|ppl>     \quotesinglbase   = {500,500},   \quotedblbase      = {400,400},
 %<ugm>     \quotesinglbase   = {300,700},   \quotedblbase      = {300,500},
 %<m-t|ppl|ptm>     \guilsinglleft    = {400,400},   \guilsinglright    = {300,500},
 %<bch|pmn>     \guilsinglleft    = {300,400},   \guilsinglright    = {200,500},
 %<cmr>     \guilsinglleft    = {500,300},   \guilsinglright    = {400,400},
-%<pad>     \guilsinglleft    = {500,400},   \guilsinglright    = {300,500},
+%<ebg>     \guilsinglleft    = {500,400},   \guilsinglright    = {300,500},
 %<ugm>     \guilsinglleft    = {400,400},   \guilsinglright    = {300,600},
 %<m-t|ppl>     \guillemotleft    = {300,300},   \guillemotright    = {300,300},
 %<bch|pmn>     \guillemotleft    = {200,300},   \guillemotright    = {150,400},
 %<cmr>     \guillemotleft    = {400,100},   \guillemotright    = {200,300},
-%<pad>     \guillemotleft    = {300,300},   \guillemotright    = {200,400},
+%<ebg>     \guillemotleft    = {300,300},   \guillemotright    = {200,400},
 %<ptm>     \guillemotleft    = {300,400},   \guillemotright    = {200,400},
 %<ugm>     \guillemotleft    = {300,400},   \guillemotright    = {300,400},
-%<m-t|pad|ppl|ugm>     \textexclamdown   = {100,   },   \textquestiondown  = {200,   },
+%<m-t|ebg|ppl|ugm>     \textexclamdown   = {100,   },   \textquestiondown  = {200,   },
 %<cmr|ptm>     \textexclamdown   = {200,   },   \textquestiondown  = {200,   },
 %<pmn>     \textexclamdown   = {-50,   },   \textquestiondown  = {-50,   },
 %<m-t|ppl|ugm>     \textbraceleft    = {200,100},   \textbraceright    = {200,200},
 %<bch|pmn>     \textbraceleft    = {200,   },   \textbraceright    = {   ,200},
-%<cmr|pad|ptm>     \textbraceleft    = {400,100},   \textbraceright    = {200,200},
+%<cmr|ebg|ptm>     \textbraceleft    = {400,100},   \textbraceright    = {200,200},
 %<bch|pmn>     \textless         = {100,   },   \textgreater       = {   ,100},
-%<cmr|pad|ppl|ptm>     \textless         = {300,100},   \textgreater       = {200,100}
+%<cmr|ebg|ppl|ptm>     \textless         = {300,100},   \textgreater       = {200,100}
 %<pmn>     \textvisiblespace = {100,100}
   }
 
@@ -15160,7 +15244,7 @@
 %<m-t>   [ name     = OT1-sc,
 %<bch>   [ name     = bch-sc,
 %<cmr>   [ name     = cmr-sc-OT1,
-%<pad>   [ name     = pad-sc,
+%<ebg>   [ name     = EBGaramond-sc,
 %<pmn>   [ name     = pmnj-sc,
 %<ppl>   [ name     = ppl-sc,
 %<ptm>   [ name     = ptm-sc,
@@ -15167,15 +15251,15 @@
 %<m-t>     load     = default ]
 %<bch>     load     = bch-default ]
 %<cmr>     load     = cmr-OT1 ]
-%<pad>     load     = pad-default ]
+%<ebg>     load     = EBGaramond-default ]
 %<pmn>     load     = pmnj-default ]
 %<ppl>     load     = ppl-default ]
 %<ptm>     load     = ptm-default ]
-%<m-t|bch|pad|pmn>   { encoding = OT1,
+%<m-t|bch|ebg|pmn>   { encoding = OT1,
 %<cmr|ppl|ptm>   { encoding = {OT1,OT4},
 %<bch>     family   = bch,
 %<cmr>     family   = cmr,
-%<pad>     family   = {pad,padx,padj},
+%<ebg>     family   = {EBGaramond-LF,EBGaramond-TLF,EBGaramond-OsF,EBGaramond-TOsF},
 %<pmn>     family   = pmnj,
 %<ppl>     family   = {ppl,pplx,pplj},
 %<ptm>     family   = {ptm,ptmx,ptmj},
@@ -15182,25 +15266,25 @@
      shape    = sc }
    {
      a = {50,50},
-%<cmr|pad|ppl|ptm>   \ae = {50,  },
+%<cmr|ebg|ppl|ptm>   \ae = {50,  },
 %<bch|pmn>     c = {50,  },
-%<bch|pad|pmn>     d = {  ,50},
-%<m-t|bch|cmr|pad|pmn|ptm>     f = {  ,50},
-%<bch|pad|pmn>     g = {50,  },
-%<m-t|cmr|pad|pmn|ppl|ptm>     j = {50,  },
+%<bch|ebg|pmn>     d = {  ,50},
+%<m-t|bch|cmr|ebg|pmn|ptm>     f = {  ,50},
+%<bch|ebg|pmn>     g = {50,  },
+%<m-t|cmr|ebg|pmn|ppl|ptm>     j = {50,  },
 %<bch>     j = {100,  },
-%<m-t|bch|cmr|pad|pmn|ppl>     l = {  ,50},
+%<m-t|bch|cmr|ebg|pmn|ppl>     l = {  ,50},
 %<ptm>     l = {  ,80},
-%<m-t|bch|cmr|pad|pmn|ppl>   013 = {  ,50}, % fl
+%<m-t|bch|cmr|ebg|pmn|ppl>   013 = {  ,50}, % fl
 %<ptm>   013 = {  ,80}, % fl
-%<bch|pad|pmn>     o = {50,50},
-%<pad|pmn>   \oe = {50,  },
+%<bch|ebg|pmn>     o = {50,50},
+%<ebg|pmn>   \oe = {50,  },
 %<ppl>     p = { 0, 0},
-%<bch|pad|pmn>     q = {50,70},
+%<bch|ebg|pmn>     q = {50,70},
 %<ppl>     q = { 0,  },
-%<m-t|cmr|pad|pmn|ppl|ptm>     r = {  , 0},
+%<m-t|cmr|ebg|pmn|ppl|ptm>     r = {  , 0},
      t = {50,50},
-%<m-t|bch|cmr|pad|pmn|ppl>     y = {50,50}
+%<m-t|bch|cmr|ebg|pmn|ppl>     y = {50,50}
 %<ptm>     y = {80,80}
    }
 
@@ -15208,7 +15292,7 @@
 %<m-t>   [ name     = T1-sc,
 %<bch>   [ name     = bch-sc-T1,
 %<cmr>   [ name     = cmr-sc-T1,
-%<pad>   [ name     = pad-sc-T1,
+%<ebg>   [ name     = EBGaramond-sc-T1,
 %<pmn>   [ name     = pmnj-sc-T1,
 %<ppl>   [ name     = ppl-sc-T1,
 %<ptm>   [ name     = ptm-sc-T1,
@@ -15215,7 +15299,7 @@
 %<m-t>     load     = T1-default ]
 %<bch>     load     = bch-T1     ]
 %<cmr>     load     = cmr-T1     ]
-%<pad>     load     = pad-T1     ]
+%<ebg>     load     = EBGaramond-T1     ]
 %<pmn>     load     = pmnj-T1    ]
 %<ppl>     load     = ppl-T1     ]
 %<ptm>     load     = ptm-T1     ]
@@ -15222,7 +15306,7 @@
    { encoding = {T1,LY1},
 %<bch>     family   = bch,
 %<cmr>     family   = cmr,
-%<pad>     family   = {pad,padx,padj},
+%<ebg>     family   = {EBGaramond-LF,EBGaramond-TLF,EBGaramond-OsF,EBGaramond-TOsF},
 %<pmn>     family   = pmnj,
 %<ppl>     family   = {ppl,pplx,pplj},
 %<ptm>     family   = {ptm,ptmx,ptmj},
@@ -15229,25 +15313,25 @@
      shape    = sc }
    {
      a = {50,50},
-%<cmr|pad|ppl|ptm>   \ae = {50,  },
+%<cmr|ebg|ppl|ptm>   \ae = {50,  },
 %<bch|pmn>     c = {50,  },
-%<bch|pad|pmn>     d = {  ,50},
-%<m-t|bch|cmr|pad|pmn|ptm>     f = {  ,50},
-%<bch|pad|pmn>     g = {50,  },
-%<m-t|cmr|pad|pmn|ppl|ptm>     j = {50,  },
+%<bch|ebg|pmn>     d = {  ,50},
+%<m-t|bch|cmr|ebg|pmn|ptm>     f = {  ,50},
+%<bch|ebg|pmn>     g = {50,  },
+%<m-t|cmr|ebg|pmn|ppl|ptm>     j = {50,  },
 %<bch>     j = {100,  },
-%<m-t|bch|cmr|pad|pmn|ppl>     l = {  ,50},
+%<m-t|bch|cmr|ebg|pmn|ppl>     l = {  ,50},
 %<ptm>     l = {  ,80},
-%<m-t|bch|cmr|pad|pmn|ppl>   029 = {  ,50}, % fl
+%<m-t|bch|cmr|ebg|pmn|ppl>   029 = {  ,50}, % fl
 %<ptm>   029 = {  ,80}, % fl
-%<bch|pad|pmn>     o = {50,50},
-%<bch|pad|pmn>   \oe = {50,  },
+%<bch|ebg|pmn>     o = {50,50},
+%<bch|ebg|pmn>   \oe = {50,  },
 %<ppl>     p = { 0, 0},
-%<bch|pad|pmn>     q = {50,70},
+%<bch|ebg|pmn>     q = {50,70},
 %<ppl>     q = { 0,  },
-%<m-t|cmr|pad|pmn|ppl|ptm>     r = {  , 0},
+%<m-t|cmr|ebg|pmn|ppl|ptm>     r = {  , 0},
      t = {50,50},
-%<m-t|bch|cmr|pad|pmn|ppl>     y = {50,50}
+%<m-t|bch|cmr|ebg|pmn|ppl>     y = {50,50}
 %<ptm>     y = {80,80}
    }
 
@@ -15456,7 +15540,7 @@
 %<bch>   [ name     = bch-textcomp ]
 %<blg>   [ name     = blg-textcomp ]
 %<cmr>   [ name     = cmr-textcomp ]
-%<pad>   [ name     = pad-textcomp ]
+%<ebg>   [ name     = EBGaramond-textcomp ]
 %<pmn>   [ name     = pmn-textcomp ]
 %<ppl>   [ name     = ppl-textcomp ]
 %<ptm>   [ name     = ptm-textcomp ]
@@ -15466,7 +15550,7 @@
 %<bch>     family   = bch }
 %<blg>     family   = blg }
 %<cmr>     family   = cmr }
-%<pad>     family   = {pad,padx,padj} }
+%<ebg>     family   = {EBGaramond-LF,EBGaramond-TLF,EBGaramond-OsF,EBGaramond-TOsF} }
 %<pmn>     family   = {pmnx,pmnj} }
 %<ppl>     family   = {ppl,pplx,pplj} }
 %<ptm>     family   = {ptm,ptmx,ptmj} }
@@ -15474,41 +15558,41 @@
    {
 %<blg>     \textquotestraightbase    = {400,500},
 %<cmr>     \textquotestraightbase    = {300,300},
-%<pad|pmn>     \textquotestraightbase    = {400,400},
+%<ebg|pmn>     \textquotestraightbase    = {400,400},
 %<blg>     \textquotestraightdblbase = {300,400},
 %<cmr|pmn>     \textquotestraightdblbase = {300,300},
-%<pad>     \textquotestraightdblbase = {400,400},
-%<bch|cmr|pad|pmn|ugm>     \texttwelveudash          = {200,200},
-%<bch|cmr|pad|pmn>     \textthreequartersemdash  = {150,150},
+%<ebg>     \textquotestraightdblbase = {400,400},
+%<bch|cmr|ebg|pmn|ugm>     \texttwelveudash          = {200,200},
+%<bch|cmr|ebg|pmn>     \textthreequartersemdash  = {150,150},
 %<ugm>     \textthreequartersemdash  = {200,200},
 %<blg>     \textquotesingle          = {500,600},
 %<cmr|pmn>     \textquotesingle          = {300,400},
-%<pad>     \textquotesingle          = {400,500},
+%<ebg>     \textquotesingle          = {400,500},
 %<ptm>     \textquotesingle          = {500,500},
 %<ugm>     \textquotesingle          = {300,500},
 %<bch|cmr|pmn>     \textasteriskcentered     = {200,300},
 %<blg>     \textasteriskcentered     = {150,200},
-%<pad>     \textasteriskcentered     = {300,300},
+%<ebg>     \textasteriskcentered     = {300,300},
 %<ugm>     \textasteriskcentered     = {100,200},
 %<pmn>     \textfractionsolidus      = {-200,-200},
 %<cmr>     \textoneoldstyle          = {100,100},
 %<pmn>     \textoneoldstyle          = {   , 50},
 %<cmr>     \textthreeoldstyle        = {   , 50},
-%<pad|pmn>     \textthreeoldstyle        = { 50,   },
+%<ebg|pmn>     \textthreeoldstyle        = { 50,   },
 %<cmr>     \textfouroldstyle         = { 50, 50},
-%<pad|pmn>     \textfouroldstyle         = { 50,   },
-%<cmr|pad|pmn>     \textsevenoldstyle        = { 50, 80},
+%<ebg|pmn>     \textfouroldstyle         = { 50,   },
+%<cmr|ebg|pmn>     \textsevenoldstyle        = { 50, 80},
 %<cmr>     \textlangle               = {400,   },
 %<cmr>     \textrangle               = {   ,400},
 %<m-t|bch|pmn|ptm>     \textminus                = {200,200},
-%<cmr|pad|ppl>     \textminus                = {300,300},
+%<cmr|ebg|ppl>     \textminus                = {300,300},
 %<blg|ugm>     \textminus                = {250,300},
-%<bch|pad|pmn>     \textlbrackdbl            = {100,   },
+%<bch|ebg|pmn>     \textlbrackdbl            = {100,   },
 %<blg>     \textlbrackdbl            = {200,   },
-%<bch|pad|pmn>     \textrbrackdbl            = {   ,100},
+%<bch|ebg|pmn>     \textrbrackdbl            = {   ,100},
 %<blg>     \textrbrackdbl            = {   ,200},
 %<pmn>     \textasciigrave           = {200,500},
-%<bch|blg|cmr|pad|pmn>     \texttildelow             = {200,250},
+%<bch|blg|cmr|ebg|pmn>     \texttildelow             = {200,250},
 %<pmn>     \textasciibreve           = {300,400},
 %<pmn>     \textasciicaron           = {300,400},
 %<pmn>     \textacutedbl             = {200,300},
@@ -15515,30 +15599,30 @@
 %<pmn>     \textgravedbl             = {150,300},
 %<bch|pmn|ugm>     \textdagger               = { 80, 80},
 %<blg>     \textdagger               = {200,200},
-%<cmr|pad>     \textdagger               = {100,100},
+%<cmr|ebg>     \textdagger               = {100,100},
 %<ptm>     \textdagger               = {150,150},
 %<blg>     \textdaggerdbl            = {150,150},
-%<cmr|pad|pmn>     \textdaggerdbl            = { 80, 80},
+%<cmr|ebg|pmn>     \textdaggerdbl            = { 80, 80},
 %<ptm>     \textdaggerdbl            = {100,100},
 %<bch>     \textbardbl               = {100,100},
 %<blg|ugm>     \textbardbl               = {150,150},
 %<bch>     \textbullet               = {200,200},
 %<blg>     \textbullet               = {400,500},
-%<cmr|pad|pmn>     \textbullet               = {   ,100},
+%<cmr|ebg|pmn>     \textbullet               = {   ,100},
 %<ptm>     \textbullet               = {150,150},
 %<ugm>     \textbullet               = { 50,100},
 %<bch|cmr|pmn>     \textcelsius              = { 50,   },
-%<pad>     \textcelsius              = { 80,   },
+%<ebg>     \textcelsius              = { 80,   },
 %<bch>     \textflorin               = { 50, 50},
 %<blg>     \textflorin               = {100,100},
-%<pad|ugm>     \textflorin               = {   ,100},
+%<ebg|ugm>     \textflorin               = {   ,100},
 %<pmn>     \textflorin               = { 50,100},
 %<ptm>     \textflorin               = { 50, 70},
 %<cmr>     \textcolonmonetary        = {   , 50},
-%<pad|pmn>     \textcolonmonetary        = { 50,   },
+%<ebg|pmn>     \textcolonmonetary        = { 50,   },
 %<pmn>     \textinterrobang          = {   ,100},
 %<pmn>     \textinterrobangdown      = {100,   },
-%<m-t|pad|ptm>     \texttrademark            = {100,100},
+%<m-t|ebg|ptm>     \texttrademark            = {100,100},
 %<bch>     \texttrademark            = {150,150},
 %<blg|cmr|ppl>     \texttrademark            = {200,200},
 %<pmn>     \texttrademark            = { 50, 50},
@@ -15551,14 +15635,14 @@
 %<blg>     \textbrokenbar            = {250,250},
 %<ugm>     \textbrokenbar            = {200,300},
 %<pmn>     \textasciidieresis        = {300,400},
-%<m-t|bch|cmr|pad|ptm|ugm>     \textcopyright            = {100,100},
+%<m-t|bch|cmr|ebg|ptm|ugm>     \textcopyright            = {100,100},
 %<pmn>     \textcopyright            = {100,150},
 %<ppl>     \textcopyright            = {200,200},
 %<bch|cmr|ugm>     \textordfeminine          = {100,200},
-%<pad|pmn>     \textordfeminine          = {200,200},
-%<bch|cmr|pad|pmn|ugm>     \textlnot                 = {200,   },
+%<ebg|pmn>     \textordfeminine          = {200,200},
+%<bch|cmr|ebg|pmn|ugm>     \textlnot                 = {200,   },
 %<blg>     \textlnot                 = {200,100},
-%<m-t|bch|cmr|pad|ptm|ugm>     \textregistered           = {100,100},
+%<m-t|bch|cmr|ebg|ptm|ugm>     \textregistered           = {100,100},
 %<pmn>     \textregistered           = { 50,150},
 %<ppl>     \textregistered           = {200,200},
 %<pmn>     \textasciimacron          = {150,200},
@@ -15565,40 +15649,40 @@
 %<m-t|ppl|ptm>     \textdegree               = {300,300},
 %<bch>     \textdegree               = {150,200},
 %<blg|ugm>     \textdegree               = {200,200},
-%<cmr|pad>     \textdegree               = {400,400},
+%<cmr|ebg>     \textdegree               = {400,400},
 %<pmn>     \textdegree               = {150,400},
-%<bch|cmr|pad|pmn|ugm>     \textpm                   = {150,200},
+%<bch|cmr|ebg|pmn|ugm>     \textpm                   = {150,200},
 %<blg>     \textpm                   = {100,100},
 %<ptm>     \textpm                   = { 50, 80},
 %<bch|blg|ugm>     \texttwosuperior          = {100,200},
 %<cmr>     \texttwosuperior          = { 50,100},
-%<pad|pmn>     \texttwosuperior          = {200,200},
+%<ebg|pmn>     \texttwosuperior          = {200,200},
 %<ptm>     \texttwosuperior          = { 50, 50},
 %<bch|blg|ugm>     \textthreesuperior        = {100,200},
 %<cmr>     \textthreesuperior        = { 50,100},
-%<pad|pmn>     \textthreesuperior        = {200,200},
+%<ebg|pmn>     \textthreesuperior        = {200,200},
 %<ptm>     \textthreesuperior        = { 50, 50},
 %<pmn>     \textasciiacute           = {300,400},
 %<bch|ugm>     \textmu                   = {   ,100},
-%<bch|pad|pmn>     \textparagraph            = {   ,100},
-%<bch|cmr|pad|pmn>     \textperiodcentered       = {300,400},
+%<bch|ebg|pmn>     \textparagraph            = {   ,100},
+%<bch|cmr|ebg|pmn>     \textperiodcentered       = {300,400},
 %<blg>     \textperiodcentered       = {400,500},
 %<ptm>     \textperiodcentered       = {300,300},
 %<ugm>     \textperiodcentered       = {200,500},
 %<bch|blg|ugm>     \textonesuperior          = {200,300},
-%<cmr|pad|pmn>     \textonesuperior          = {200,200},
+%<cmr|ebg|pmn>     \textonesuperior          = {200,200},
 %<ptm>     \textonesuperior          = {100,100},
-%<bch|pad|pmn|ugm>     \textordmasculine         = {200,200},
+%<bch|ebg|pmn|ugm>     \textordmasculine         = {200,200},
 %<blg|cmr>     \textordmasculine         = {100,200},
 %<bch|cmr|pmn>     \texteuro                 = {100,   },
-%<pad>     \texteuro                 = { 50,100},
+%<ebg>     \texteuro                 = { 50,100},
 %<bch>     \texttimes                = {200,200},
 %<blg|ptm>     \texttimes                = {100,100},
 %<cmr>     \texttimes                = {150,250},
-%<pad>     \texttimes                = {100,150},
+%<ebg>     \texttimes                = {100,150},
 %<pmn>     \texttimes                = { 70,100},
 %<ugm>     \texttimes                = {200,300},
-%<bch|pad|pmn>     \textdiv                  = {150,200}
+%<bch|ebg|pmn>     \textdiv                  = {150,200}
 %<blg>     \textdiv                  = {100,100}
 %<cmr>     \textdiv                  = {150,250}
 %<ptm>     \textdiv                  = { 50,100},
@@ -15661,15 +15745,15 @@
 %    \begin{macrocode}
    }
 
-%<*cmr|pad|pmn|ugm>
+%<*cmr|ebg|pmn|ugm>
 \SetProtrusion
 %<cmr>   [ name     = cmr-textcomp-it ]
-%<pad>   [ name     = pad-textcomp-it ]
+%<ebg>   [ name     = EBGaramond-textcomp-it ]
 %<pmn>   [ name     = pmn-textcomp-it ]
 %<ugm>   [ name     = ugm-textcomp-it ]
    { encoding = TS1,
 %<cmr>     family   = cmr,
-%<pad>     family   = {pad,padx,padj},
+%<ebg>     family   = {EBGaramond-LF,EBGaramond-TLF,EBGaramond-OsF,EBGaramond-TOsF},
 %<pmn>     family   = {pmnx,pmnj},
 %<ugm>     family   = ugm,
 %<!ugm>     shape    = {it,sl} }
@@ -15676,68 +15760,68 @@
 %<ugm>     shape    = it }
    {
 %<cmr>     \textquotestraightbase    = {300,600},
-%<pad|pmn>     \textquotestraightbase    = {400,400},
+%<ebg|pmn>     \textquotestraightbase    = {400,400},
 %<cmr>     \textquotestraightdblbase = {300,600},
-%<pad>     \textquotestraightdblbase = {300,400},
+%<ebg>     \textquotestraightdblbase = {300,400},
 %<pmn>     \textquotestraightdblbase = {300,300},
      \texttwelveudash          = {200,200},
-%<cmr|pad|pmn>     \textthreequartersemdash  = {150,150},
+%<cmr|ebg|pmn>     \textthreequartersemdash  = {150,150},
 %<ugm>     \textthreequartersemdash  = {200,200},
 %<cmr>     \textquotesingle          = {600,300},
-%<pad>     \textquotesingle          = {800,100},
+%<ebg>     \textquotesingle          = {800,100},
 %<pmn>     \textquotesingle          = {300,200},
 %<ugm>     \textquotesingle          = {500,500},
 %<cmr>     \textasteriskcentered     = {300,200},
-%<pad>     \textasteriskcentered     = {500,100},
+%<ebg>     \textasteriskcentered     = {500,100},
 %<pmn>     \textasteriskcentered     = {200,300},
 %<ugm>     \textasteriskcentered     = {300,150},
 %<pmn>     \textfractionsolidus      = {-200,-200},
 %<cmr>     \textoneoldstyle          = {100, 50},
-%<pad>     \textoneoldstyle          = {100,   },
+%<ebg>     \textoneoldstyle          = {100,   },
 %<pmn>     \textoneoldstyle          = { 50,   },
-%<pad>     \texttwooldstyle          = { 50,   },
+%<ebg>     \texttwooldstyle          = { 50,   },
 %<pmn>     \texttwooldstyle          = {-50,   },
 %<cmr>     \textthreeoldstyle        = {100, 50},
 %<pmn>     \textthreeoldstyle        = {-100,  },
 %<cmr>     \textfouroldstyle         = { 50, 50},
-%<pad>     \textfouroldstyle         = { 50,100},
+%<ebg>     \textfouroldstyle         = { 50,100},
 %<cmr>     \textsevenoldstyle        = { 50, 80},
-%<pad>     \textsevenoldstyle        = { 50,   },
+%<ebg>     \textsevenoldstyle        = { 50,   },
 %<pmn>     \textsevenoldstyle        = { 20,   },
 %<cmr>     \textlangle               = {400,   },
 %<cmr>     \textrangle               = {   ,400},
-%<cmr|pad>     \textminus                = {300,300},
+%<cmr|ebg>     \textminus                = {300,300},
 %<pmn>     \textminus                = {200,200},
 %<ugm>     \textminus                = {250,300},
-%<pad|pmn>     \textlbrackdbl            = {100,   },
-%<pad|pmn>     \textrbrackdbl            = {   ,100},
+%<ebg|pmn>     \textlbrackdbl            = {100,   },
+%<ebg|pmn>     \textrbrackdbl            = {   ,100},
 %<pmn>     \textasciigrave           = {300,300},
-%<cmr|pad|pmn>     \texttildelow             = {200,250},
+%<cmr|ebg|pmn>     \texttildelow             = {200,250},
 %<pmn>     \textasciibreve           = {300,300},
 %<pmn>     \textasciicaron           = {300,300},
 %<pmn>     \textacutedbl             = {200,300},
 %<pmn>     \textgravedbl             = {150,300},
 %<cmr>     \textdagger               = {100,100},
-%<pad>     \textdagger               = {200,100},
+%<ebg>     \textdagger               = {200,100},
 %<pmn>     \textdagger               = { 80, 50},
 %<ugm>     \textdagger               = { 80, 80},
-%<cmr|pad>     \textdaggerdbl            = { 80, 80},
+%<cmr|ebg>     \textdaggerdbl            = { 80, 80},
 %<pmn>     \textdaggerdbl            = { 80, 50},
 %<ugm>     \textbardbl               = {150,150},
 %<cmr>     \textbullet               = {200,100},
-%<pad>     \textbullet               = {300,   },
+%<ebg>     \textbullet               = {300,   },
 %<pmn>     \textbullet               = { 30, 70},
 %<ugm>     \textbullet               = { 50,100},
 %<cmr>     \textcelsius              = {100,   },
-%<pad>     \textcelsius              = {200,   },
+%<ebg>     \textcelsius              = {200,   },
 %<pmn>     \textcelsius              = { 50,-50},
-%<pad>     \textflorin               = {100,   },
+%<ebg>     \textflorin               = {100,   },
 %<pmn>     \textflorin               = { 50,100},
 %<ugm>     \textflorin               = {   ,100},
 %<cmr>     \textcolonmonetary        = {150,   },
-%<pad>     \textcolonmonetary        = {100,   },
+%<ebg>     \textcolonmonetary        = {100,   },
 %<pmn>     \textcolonmonetary        = { 50,-50},
-%<cmr|pad>     \texttrademark            = {200,   },
+%<cmr|ebg>     \texttrademark            = {200,   },
 %<pmn>     \texttrademark            = { 50,100},
 %<ugm>     \texttrademark            = {150, 50},
 %<ugm>     \textcent                 = { 50,   },
@@ -15745,35 +15829,35 @@
 %<ugm>     \textbrokenbar            = {200,300},
 %<pmn>     \textasciidieresis        = {300,200},
 %<cmr>     \textcopyright            = {100,   },
-%<pad>     \textcopyright            = {200,100},
+%<ebg>     \textcopyright            = {200,100},
 %<pmn>     \textcopyright            = {100,150},
 %<ugm>     \textcopyright            = {300,   },
 %<cmr>     \textordfeminine          = {100,100},
 %<pmn>     \textordfeminine          = {200,200},
 %<ugm>     \textordfeminine          = {100,200},
-%<cmr|pad>     \textlnot                 = {300,   },
+%<cmr|ebg>     \textlnot                 = {300,   },
 %<pmn|ugm>     \textlnot                 = {200,   },
 %<cmr>     \textregistered           = {100,   },
-%<pad>     \textregistered           = {200,100},
+%<ebg>     \textregistered           = {200,100},
 %<pmn>     \textregistered           = { 50,150},
 %<ugm>     \textregistered           = {300,   },
 %<pmn>     \textasciimacron          = {150,200},
-%<cmr|pad>     \textdegree               = {500,100},
+%<cmr|ebg>     \textdegree               = {500,100},
 %<pmn>     \textdegree               = {150,150},
 %<ugm>     \textdegree               = {300,200},
 %<cmr>     \textpm                   = {150,100},
-%<pad>     \textpm                   = {200,150},
+%<ebg>     \textpm                   = {200,150},
 %<pmn|ugm>     \textpm                   = {150,200},
 %<cmr>     \textonesuperior          = {400,   },
-%<pad>     \textonesuperior          = {300,100},
+%<ebg>     \textonesuperior          = {300,100},
 %<pmn>     \textonesuperior          = {200,100},
 %<ugm>     \textonesuperior          = {300,300},
 %<cmr>     \texttwosuperior          = {400,   },
-%<pad>     \texttwosuperior          = {300,   },
+%<ebg>     \texttwosuperior          = {300,   },
 %<pmn>     \texttwosuperior          = {200,100},
 %<ugm>     \texttwosuperior          = {300,200},
 %<cmr>     \textthreesuperior        = {400,   },
-%<pad>     \textthreesuperior        = {300,   },
+%<ebg>     \textthreesuperior        = {300,   },
 %<pmn>     \textthreesuperior        = {200,100},
 %<ugm>     \textthreesuperior        = {300,200},
 %<ugm>     \textmu                   = {   ,100},
@@ -15781,18 +15865,18 @@
 %<cmr>     \textparagraph            = {200,   },
 %<pmn>     \textparagraph            = {   ,100},
 %<cmr>     \textperiodcentered       = {500,500},
-%<pad|pmn|ugm>     \textperiodcentered       = {300,400},
+%<ebg|pmn|ugm>     \textperiodcentered       = {300,400},
 %<cmr>     \textordmasculine         = {100,100},
 %<pmn>     \textordmasculine         = {200,200},
 %<ugm>     \textordmasculine         = {300,200},
 %<cmr>     \texteuro                 = {200,   },
-%<pad>     \texteuro                 = {100,   },
+%<ebg>     \texteuro                 = {100,   },
 %<pmn>     \texteuro                 = {100,-50},
 %<cmr>     \texttimes                = {200,200},
-%<pad>     \texttimes                = {200,100},
+%<ebg>     \texttimes                = {200,100},
 %<pmn>     \texttimes                = { 70,100},
 %<ugm>     \texttimes                = {200,300},
-%<cmr|pad>     \textdiv                  = {200,200}
+%<cmr|ebg>     \textdiv                  = {200,200}
 %<pmn>     \textdiv                  = {150,200}
 %<ugm>     \textdiv                  = {200,300},
 %<ugm>     \textsection              = {   ,200},
@@ -15802,7 +15886,7 @@
 %<ugm>     \textsurd                 = {   ,100}
    }
 
-%</cmr|pad|pmn|ugm>
+%</cmr|ebg|pmn|ugm>
 %    \end{macrocode}
 %
 %\subsubsection{Computer Modern math}
@@ -16698,34 +16782,34 @@
 % \pkg{europs}), <ITC> Euro fonts (package \pkg{euroitc}) and \pkg{marvosym}\footnote{
 %   Of course, there are many more symbols in this font. Feel free to contribute
 %   protrusion settings!}).
+% The \pkg{euroitc} settings are hidden in the package itself (\ref{ssub:permutation})
+% for `free software' compliance reasons.
+% (Not quite sure whether this is what Karl really had in mind~\dots)
+%\changes{v2.8a}{2021/02/22}{hide \pkg{euroitc} settings
+%                (requested by \contributor Karl Berry <karl\at freefriends.org>)}
+%                ^^A private mail, 2021/02/22
 %    \begin{macrocode}
 %<*cfg-e>
 \SetProtrusion
-%<zpeu|euroitc>   { encoding = U,
+%<zpeu>   { encoding = U,
 %<mvs>   { encoding = {OT1,U},
 %<zpeu>     family   = zpeu }
-%<euroitc>     family   = {euroitc,euroitcs} }
 %<mvs>     family   = mvs }
    {
 %<zpeu>     E = {50, }
-%<euroitc>     E = {100,50}
 %<mvs>     164 = {50,50},   % \EUR
 %<mvs>     068 = {50,-100}  % \EURdig
    }
 
-%<*zpeu|euroitc>
+%<*zpeu>
 \SetProtrusion
    { encoding = U,
-%<zpeu>     family   = zpeu,
-%<euroitc>     family   = {euroitc,euroitcs},
+     family   = zpeu,
      shape    = it* }
    {
-%<zpeu>     E = {100,-50}
-%<euroitc>     E = {100,}
+     E = {100,-50}
    }
 
-%</zpeu|euroitc>
-%<*zpeu>
 \SetProtrusion
    { encoding = U,
      family   = {zpeus,eurosans} }
@@ -16986,6 +17070,17 @@
    }
 
 %    \end{macrocode}
+% Empty settings to prevent spurious warnings.
+%\changes{v2.8a}{2021/02/22}{add dummy settings
+%                            (reported by \contributor DORpapst <@\at @>)}
+%                            ^^A https://tex.stackexchange.com/questions/584373/package-microtype-warning-i-cannot-find-a-spacing-list-for-font-microtype
+%    \begin{macrocode}
+\SetExtraSpacing
+   [ name = empty ]
+   { encoding = {TS1} }
+   { }
+
+%    \end{macrocode}
 %
 % \subsection{Additional kerning}
 %\GeneralChanges{Kerning}
@@ -17254,7 +17349,7 @@
 %   Grave accent  \`     Left brace    \{     Vertical bar  \|
 %   Right brace   \}     Tilde         \~}
 %
-% \CheckSum{10748}
+% \CheckSum{10800}
 %
 % \Finale
 %

Modified: branches/branch2020/Master/texmf-dist/source/latex/microtype/microtype.ins
===================================================================
--- branches/branch2020/Master/texmf-dist/source/latex/microtype/microtype.ins	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/source/latex/microtype/microtype.ins	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 
                       The `microtype' package
         Subliminal refinements towards typographical perfection
-          Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+          Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 
 This work may be distributed and/or modified under the conditions of the
 LaTeX Project Public License, either version 1.3c of this license or (at
@@ -125,7 +125,7 @@
     \makecfg{t}{bch}
     \makecfg{t}{blg}
     \makecfg{t}{cmr}
-    \makecfg{t}{pad}
+    \makefile{mt-EBGaramond.cfg}{config,cfg-t,ebg}
     \makecfg{t}{ppl}
     \makecfg{t}{ptm}
     \makecfg{t}{ugm}
@@ -135,14 +135,15 @@
     \makecfg{u}{eur}
     \makecfg{u}{eus}
     \makecfg{e}{zpeu}
-    \makecfg{e}{euroitc}
     \makecfg{e}{mvs}
     \makeutfcfg{LatinModernRoman}
     \makeutfcfg{CharisSIL}
+    \makeutfcfg{Lato}
+    \makeutfcfg{FontAwesome}
   \usepreamble\haraldandkarlpreamble
     \makecfg{t}{pmn}
   \usepreamble\lorenpreamble
-    \makeutfcfg{PalatinoLinotype}
+    \makeutfcfg{Palatino}
   \usepreamble\testpreamble
     \makefile{test-microtype.tex}{test}
 }

Modified: branches/branch2020/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx
===================================================================
--- branches/branch2020/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/source/latex/nicematrix/nicematrix.dtx	2021-02-24 18:00:42 UTC (rev 57872)
@@ -15,8 +15,8 @@
 %
 % \fi
 % \iffalse
-\def\myfileversion{5.10}
-\def\myfiledate{2021/02/05}
+\def\myfileversion{5.11}
+\def\myfiledate{2021/02/22}
 %
 %
 %<*batchfile>
@@ -95,7 +95,8 @@
 \cs_set_protected:Npn}
 \DoNotIndex{\bool_if:NTF,\bool_new:N,\bool_set_false:N,\bool_set_true:N,\l_tmpa_bool}
 \DoNotIndex{\group_begin:,\group_end:,\c_math_toggle_token}
-\DoNotIndex{\tl_set:Nn,\l_tmpa_tl}
+\DoNotIndex{\tl_set:Nn,\l_tmpa_tl,\l_tmpb_tl}
+\DoNotIndex{\tl_gput_left:Nn,\tl_gput_right:Nn}
 \ExplSyntaxOff
 \makeatother
 
@@ -160,6 +161,16 @@
 % distribution as MiKTeX or TeXlive.
 %
 % \bigskip
+% \emph{Remark}: If you use LaTeX via Internet with, for example, Overleaf, you
+% can upload the file |nicematrix.sty| in the repertory of your 
+% project in order to take full advantage of the latest version de
+% \pkg{nicematrix}.\footnote{The latest version of the file
+% \verb|nicematrix.sty| may be downloaded from the \textsc{svn} server of
+% TeXLive:\newline
+% \small
+% \url{https:www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty}}
+% 
+% \bigskip
 % This package can be used with |xelatex|, |lualatex|, |pdflatex| but also by
 % the classical workflow |latex|-|dvips|-|ps2pdf| (or Adobe Distiller).
 % \textsl{However, the file nicematrix.dtx of the present documentation should
@@ -191,20 +202,7 @@
 % semi-global). 
 %
 %
-% \bigskip
-% {\bfseries \color{red} Important
 %
-% Since the version 5.0 of \pkg{nicematrix}, one must use the letters |l|, |c| and
-% |r| in the preambles of the environments and no longer the letters |L|, |C| and
-% |R|.
-%
-% For sake of compatibility with the previous versions, there exists an option
-% |define-L-C-R| which must be used when loading \pkg{nicematrix}.
-% \begin{Verbatim}
-% \usepackage[define-L-C-R]{nicematrix}
-% \end{Verbatim}
-% }
-%
 % \newpage
 %
 % \section{The environments of this package} 
@@ -281,8 +279,8 @@
 % |cell-space-bottom-limit| similar to the parameters |\cellspacetoplimit| and
 % |\cellspacebottomlimit| of \pkg{cellspace}. 
 %
-% \colorbox{yellow!50}{\bfseries{New 5.9}}\enskip 
-% There is also a key |cell-space-limits| to set both parameters at once.
+% \colorbox{yellow!30}{New 5.9}\enskip There is also a key |cell-space-limits|
+% to set both parameters at once.
 % 
 % The initial value of these parameters is $0$~pt in order to have for the
 % environments of \pkg{nicematrix} the same behaviour as those of \pkg{array}
@@ -747,9 +745,7 @@
 % In the environments of \pkg{nicematrix}, the vertical rules specified by
 % \verb+|+ in the preambles of the environments are never broken, even by an
 % incomplete row or by a double horizontal rule specified by |\hline\hline|
-% (there is no need to use \pkg{hhline}). \footnote{This is the behaviour since
-% the version 5.1 of \pkg{nicematrix}. Prior to that version, the behaviour was
-% the standard behaviour of \pkg{array}.}
+% (there is no need to use \pkg{hhline}).
 %
 % \bigskip
 % \begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1170,7 +1166,9 @@
 % The extension \pkg{nicematrix} provides a key |code-before| for some code that
 % will be executed before the drawing of the tabular. In this |code-before|, new
 % commands are available: |\cellcolor|, |\rectanglecolor|, |\rowcolor|,
-% |\columncolor|, |\rowcolors| and |\chessboardcolors|.
+% |\columncolor|, |\rowcolors| and |\chessboardcolors|.\footnote{Remark that, in
+% the \verb|code-before|, some PGF/Tikz nodes corresponding to the position to
+% the potential rules are available: cf.~p.~\pageref{nodes-i}.}
 % \label{code-before}
 %
 % \medskip
@@ -1183,8 +1181,8 @@
 % \pkg{colortbl}.
 %
 % This command takes in as mandatory arguments a color and a list of cells, each
-% of which with the format $i$-$j$ where $i$ is the number of row and $j$ the
-% number of colummn of the cell.
+% of which with the format $i$-$j$ where $i$ is the number of the row and $j$ the
+% number of the colummn of the cell.
 %
 %
 % \medskip
@@ -1282,17 +1280,17 @@
 % \bigskip
 % \item The command |\rowcolors| (with a \emph{s}) takes its name from the
 % command |\rowcolors| of \pkg{xcolor}\footnote{The command |\rowcolors| of
-% \pkg{xcolor} is available when \pkg{xcolor} is loaded with the
-% option~|table|.}. The \emph{s} emphasizes the fact that there is \emph{two}
-% colors. This command colors alternately the rows of the tabular with the
-% tow colors (provided in second and third argument), beginning
-% with the row whose number is given in first (mandatory) argument. 
+% \pkg{xcolor} is available when \pkg{xcolor} is loaded with the option~|table|.
+% That option also loads the package \pkg{colortbl}.}. The \emph{s} emphasizes
+% the fact that there is \emph{two} colors. This command colors alternately the
+% rows of the tabular with the tow colors (provided in second and third
+% argument), beginning with the row whose number is given in first (mandatory)
+% argument.
 %
-% \colorbox{yellow!30}{New 5.8}\enskip In fact, the first (mandatory)
-% argument is, more generally, a comma separated list of intervals describing
-% the rows involved in the action of |\rowcolors| (an interval of the form
-% $i$|-| describes in fact the interval of all the rows of the tabular,
-% beginning with the row~$i$).
+% In fact, the first (mandatory) argument is, more generally, a comma separated
+% list of intervals describing the rows involved in the action of |\rowcolors|
+% (an interval of the form $i$|-| describes in fact the interval of all the rows
+% of the tabular, beginning with the row~$i$).
 % 
 % 
 %
@@ -1301,15 +1299,15 @@
 % optional argument in the first position corresponds to the colorimetric
 % space). The available keys are |cols|, |restart| and |respect-blocks|.
 % \begin{itemize}
-% \item \colorbox{yellow!30}{New 5.8}\enskip The key |cols| describes a
-% set of columns. The command |\rowcolors| will color only the cells of these
-% columns. The value is a comma-separated list of intervals of the form $i$-$j$.
-% \item \colorbox{yellow!30}{New 5.8}\enskip With the key |restart|,
-% each interval of rows (specified by the first mandatory argument) begins with
-% the same color.\footnote{Otherwise, the color of a given row relies only upon the
-% parity of its number.}
+% \item The key |cols| describes a set of columns. The command |\rowcolors| will
+% color only the cells of these columns. The value is a comma-separated list of
+% intervals of the form $i$-$j$.
+% \item With the key |restart|, each interval of rows (specified by the first
+% mandatory argument) begins with the same color.\footnote{Otherwise, the color
+% of a given row relies only upon the parity of its number.}
 % \item With the key |respect-blocks| the ``rows'' alternately colored may extend over
-% several rows if they have to incorporate blocks (created with the command |\Block|).
+% several rows if they have to incorporate blocks (created with the command
+% |\Block|: cf.~p.~\pageref{Block}).
 % \end{itemize}
 % 
 % \medskip
@@ -1402,7 +1400,8 @@
 %
 % \bigskip
 % One should remark that these commands are compatible with the commands of
-% \pkg{booktabs} (|\toprule|, |\midrule|, |\bottomrule|, etc).
+% \pkg{booktabs} (|\toprule|, |\midrule|, |\bottomrule|, etc). However,
+% \pkg{booktabs} is not loaded by \pkg{nicematrix}.
 %
 % \medskip
 % \begin{scope}
@@ -1451,7 +1450,7 @@
 %
 % It's possible to access the preceding tools with a syntax close to the syntax
 % of \pkg{colortbl}. For that, one must use the key |colortbl-like| in the
-% current environment.\footnote{As of now, this key is not available in |\NiceMatrixOptions|.}
+% current environment.\footnote{As for now, this key is \emph{not} available in |\NiceMatrixOptions|.}
 %
 % There are three commands available (they are inspired by \pkg{colortbl} but
 % are \emph{independent} of \pkg{colortbl}):
@@ -1463,7 +1462,7 @@
 % with the same syntax as the corresponding command of
 % \pkg{colortbl} (however, unlike the command |\columncolor| of \pkg{colortbl},
 % this command |\columncolor| can appear within another command, itself used in the
-% preamble). 
+% preamble of the array). 
 % \end{itemize}
 %
 % \medskip
@@ -1673,10 +1672,13 @@
 % \bigskip
 % We have several remarks to do.
 % \begin{itemize}[beginpenalty=10000]
-% \item For the environments with an explicit preamble (i.e. |{NiceArray}| and
-% its variants), no letter must be given in that preamble for the potential
-% first column and the potential last column: they will automatically (and
-% necessarily) be of type |r| for the first column and |l| for the last one.
+% \item For the environments with an explicit preamble (i.e. |{NiceTabular}|,
+% |{NiceArray}| and its variants), no letter must be given in that preamble for
+% the potential first column and the potential last column: they will
+% automatically (and necessarily) be of type |r| for the first column and |l|
+% for the last one.\footnote{The users wishing exteriors columns with another
+% type of alignment should consider the command |\SubMatrix| available in the
+% |\CodeAfter| (cf.~p.~\pageref{sub-matrix}).}
 % \item One may wonder how \pkg{nicematrix} determines the number of rows and
 % columns which are needed for the composition of the ``last row'' and ``last
 % column''.
@@ -1705,9 +1707,8 @@
 % \bigskip
 % It's possible to control the appearance of these rows and columns with options
 % |code-for-first-row|, |code-for-last-row|, |code-for-first-col| and
-% |code-for-last-col|. These options
-% specify tokens that will be inserted before each cell of the corresponding row
-% or column. 
+% |code-for-last-col|. These options specify tokens that will be inserted before
+% each cell of the corresponding row or column. 
 % 
 %
 % \begin{Verbatim}
@@ -1761,9 +1762,12 @@
 %
 % \item Logically, the potential option |columns-width| (described
 % p.~\pageref{width}) doesn't apply to the ``first column'' and ``last column''.
+% 
 % \item For technical reasons, it's not possible to use the option of the
-% command |\\| after the ``first row'' or before the ``last row'' (the placement
-% of the delimiters would be wrong). 
+% command |\\| after the ``first row'' or before the ``last row''. The placement
+% of the delimiters would be wrong. If you are looking for a workaround,
+% consider the command |\SubMatrix| in the |\CodeAfter| described
+% p.~\pageref{sub-matrix}. 
 % \end{itemize}
 % 
 % 
@@ -1793,7 +1797,7 @@
 % with the option |color|.\footnote{It's also possible to change the color of
 % all theses dotted lines with the option |xdots/color| (\textsl{xdots} to
 % remind that it works for |\Cdots|, |\Ldots|, |\Vdots|, etc.): cf. p.
-% \pageref{customization}.}\par\nobreak  
+% \pageref{customisation}.}\par\nobreak  
 %
 % \bigskip
 % \begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -2028,10 +2032,12 @@
 % 1 & 2 & 3 & 4 & 5 
 % \end{pNiceMatrix}$
 %
-%
+% \medskip
 % Remark: Unlike the command |\hdotsfor| of \pkg{amsmath}, the command
-% |\Hdotsfor| may be used when the package \pkg{colortbl} is loaded (but you
-% might have problem if you use |\rowcolor| on the same row as |\Hdotsfor|).
+% |\Hdotsfor| may be used even when the package \pkg{colortbl}\footnote{We
+% recall that when \pkg{xcolor} is loaded with the option \verb|table|, the
+% package \pkg{colortbl} is loaded.} is loaded (but you might have problem if
+% you use |\rowcolor| on the same row as |\Hdotsfor|). 
 % 
 % \bigskip
 % The package \pkg{nicematrix} also provides a command |\Vdotsfor| similar to
@@ -2145,9 +2151,9 @@
 % 0 &                          & 1 
 % \end{bNiceMatrix}$
 %
-% \subsection{Customization of the dotted lines}
+% \subsection{Customisation of the dotted lines}
 % 
-% \label{customization} 
+% \label{customisation} 
 % The dotted lines drawn by |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|, |\Iddots|
 % and |\Hdotsfor| (and by the command |\line| in the |\CodeAfter| which is described
 % p.~\pageref{line-in-code-after}) may be customized by three options (specified
@@ -2158,9 +2164,9 @@
 % \item |line-style|.
 % \end{itemize}
 %
-% These options may also be fixed with |\NiceMatrixOptions| or at the level of a
-% given environment but, in those cases, they must be prefixed by |xdots|, and,
-% thus have for names:
+% These options may also be fixed with |\NiceMatrixOptions|, as options of
+% |\CodeAfter| or at the level of a given environment but, in those cases, they
+% must be prefixed by |xdots|, and, thus have for names:
 % \begin{itemize}
 % \item |xdots/color|;
 % \item |xdots/shorten|;
@@ -2280,18 +2286,27 @@
 % \medskip
 % For the legibility of the code, an alternative syntax is provided: it's
 % possible to give the instructions of the |\code-after| at the end of the
-% environment, after the keyword |\CodeAfter|.
+% environment, after the keyword |\CodeAfter|. Although |\CodeAfter| is a
+% keyword, it takes in an optional argument (between square brackets). The keys
+% accepted form a subset of the keys of the command |\WithArrowsOptions|.
 %
+%
 % \medskip
-% Two special commands are available in the |\CodeAfter|: |line| and
+% The experienced users may use, for instance, the PGF/Tikz nodes created by
+% \pkg{nicematrix} in the |\CodeAfter|. These nodes are described further
+% beginning on p.~\pageref{PGF-nodes}.
+% 
+% \medskip
+% Moreover, two special commands are available in the |\CodeAfter|: |line| and 
 % |\SubMatrix|. 
 %
 % \subsection{The command \textbackslash line in the \textbackslash CodeAfter}
 % 
-% The command |\line|draws directly dotted lines between nodes. It takes two
-% arguments for the two cells to rely, both of the form $i$-$j$ where is the
-% number of row and $j$ is the number of column. It may be used, for example, to
-% draw a dotted line between two adjacent cells. \label{line-in-code-after}
+% The command |\line| draws directly dotted lines between nodes. It takes in two
+% arguments for the two cells to link, both of the form $i$-$j$ where is the
+% number of the row and $j$ is the number of the column. It may be used, for
+% example, to draw a dotted line between two adjacent
+% cells. \label{line-in-code-after}
 %
 % \medskip
 % \begin{BVerbatim}[baseline=c,boxwidth=11cm]
@@ -2315,13 +2330,18 @@
 % \end{pNiceMatrix}$
 % \end{scope}
 %
+% \medskip
+% The options available for the customisation of the dotted lines created by
+% |\Cdots|, |\Vdots|, etc. are also available for this command (cf.
+% p.~\pageref{customisation}). 
 %
+%
 % \subsection{The command \textbackslash SubMatrix in the \textbackslash CodeAfter}
 % 
 % \label{sub-matrix}
 %
 % \colorbox{yellow!50}{\textbf{New 5.10}}\enskip 
-% The command |\SubMatrix| provides a way to put delimiters on an portion
+% The command |\SubMatrix| provides a way to put delimiters on a portion
 % of the array considered as a submatrix. The command |\SubMatrix| takes in five
 % arguments:
 % \begin{itemize}
@@ -2343,10 +2363,10 @@
 %
 % \medskip
 % \begin{scope}
+% \hfuzz=15cm
 % \fvset{commandchars=\~\#\+}%
 % \begin{BVerbatim}[boxwidth=11cm,baseline=c]
-% \[\begin{NiceArray}{ccc~emphase#@{\hspace{1.5em}}+c}%
-%    [cell-space-limits=2pt,~emphase#margin+]
+% \[\begin{NiceArray}{ccc~emphase#@{\hspace{1.5em}}+c}[cell-space-limits=2pt,~emphase#margin+]
 %  1           & 1            & 1            & x \\
 % \dfrac{1}{4} & \dfrac{1}{2} & \dfrac{1}{4} & y \\
 %  1           & 2            & 3            & z 
@@ -2372,7 +2392,7 @@
 % exists also the key |xshift| which fixes both parameters);
 % \item |extra-height| adds a quantity to the total height of the delimiters
 % (height |\ht| + depth |\dp|);
-% \item |delimiters-color| fixes the color of the delimiters (also
+% \item |delimiters/color| fixes the color of the delimiters (also
 % available in |\NiceMatrixOptions|, in the environments with delimiters and as
 % option of the command |\CodeAfter|);
 % \item |slim| is a boolean key: when that key is in force, the horizontal
@@ -2390,10 +2410,10 @@
 % 
 % \bigskip
 % \begin{scope}
+% \hfuzz=12cm
 % \fvset{commandchars=\~\#\!}%
 % \begin{BVerbatim}[baseline=c,boxwidth=11cm]
-% $\begin{NiceArray}{cc@{\hspace{5mm}}l}%
-%    [cell-space-limits=2pt]
+% $\begin{NiceArray}{cc@{\hspace{5mm}}l}[cell-space-limits=2pt]
 %   &   & \frac12 \\
 %   &   & \frac14 \\[1mm]
 % a & b & \frac12a+\frac14b \\
@@ -2421,10 +2441,10 @@
 %
 % \medskip
 % \begin{scope}
+% \hfuzz=12cm
 % \fvset{commandchars=\~\#\!}%
 % \begin{BVerbatim}[baseline=c,boxwidth=11cm]
-% $\begin{NiceArray}{cc@{\hspace{5mm}}l}% 
-%    [cell-space-limits=2pt]
+% $\begin{NiceArray}{cc@{\hspace{5mm}}l}[cell-space-limits=2pt]
 %   &   & \frac12 \\
 %   &   & \frac14 \\[1mm]
 % a & b & \frac12a+\frac14b \\
@@ -2450,7 +2470,7 @@
 %
 % \bigskip
 % There is also a key |name| which gives a name to the submatrix created by
-% |\SubMatrix|. That name is used to created PGF/Tiks nodes: cf
+% |\SubMatrix|. That name is used to created PGF/Tikz nodes: cf
 % p.~\pageref{node-sub-matrix}. 
 %
 % \section{The notes in the tabulars}
@@ -2570,7 +2590,7 @@
 %
 % \begin{center}
 % \fvset{commandchars=\~\#\!}
-% \begin{BVerbatim}[formatcom=\small\color{gray}]
+% \begin{Verbatim}[formatcom=\small\color{gray}]
 % \begin{table}
 % \setlength{\belowcaptionskip}{1ex}
 % \centering
@@ -2592,11 +2612,11 @@
 % \bottomrule
 % \end{NiceTabular}
 % \end{table}
-% \end{BVerbatim}
+% \end{Verbatim}
 % \end{center}
 % 
 %
-% \begin{table}
+% \begin{table}[hb]
 % \setlength{\belowcaptionskip}{1ex}
 % \centering
 % \caption{Use of \texttt{\textbackslash tabularnote}\tabularnote{It's possible
@@ -2745,7 +2765,7 @@
 % Initial value:\quad |afterlabel = \nobreak, itemjoin = \quad|
 %
 %
-% \item The key |notes/code-before| est une token list inserted by \pkg{nicematrix}
+% \item The key |notes/code-before| is a token list inserted by \pkg{nicematrix}
 % just before the composition of the notes at the end of the tabular.
 %
 % Initial value: \textsl{empty}
@@ -2762,7 +2782,7 @@
 %
 %
 % \bigskip
-% For an example of customization of the tabular notes, see p.~\pageref{ex:notes}.
+% For an example of customisation of the tabular notes, see p.~\pageref{ex:notes}.
 %
 %
 % \subsection{Use of \{NiceTabular\} with threeparttable}
@@ -3055,16 +3075,17 @@
 %
 % For the environements with delimiters (|{pNiceArray}|, |{pNiceMatrix}|, etc.),
 % it's possible to change the color of the delimiters with the key
-% |delimiters-color|.
+% |delimiters/color|.\footnote{\verb|delimiters-color| is a synonymous
+% (deprecated) for |delimiters/color|.}
 %
 % \medskip
 % \begin{BVerbatim}[boxwidth=12cm,baseline=c]
-% $\begin{bNiceMatrix}[delimiters-color=red]
+% $\begin{bNiceMatrix}[delimiters/color=red]
 % 1 & 2 \\
 % 3 & 4 
 % \end{bNiceMatrix}$
 % \end{BVerbatim}
-% $\begin{bNiceMatrix}[delimiters-color=red]
+% $\begin{bNiceMatrix}[delimiters/color=red]
 % 1 & 2 \\
 % 3 & 4 
 % \end{bNiceMatrix}$
@@ -3098,7 +3119,8 @@
 % 
 % \section{Use of Tikz with nicematrix}
 % 
-% \label{name}
+% \label{name}\label{PGF-nodes}
+%
 % \subsection{The nodes corresponding to the contents of the cells}
 %
 % The package \pkg{nicematrix} creates a PGF/Tikz node for each (non-empty) cell
@@ -3419,12 +3441,15 @@
 %
 %
 % 
-% \subsection{The ``row-nodes'' and the ``col-nodes''}
+% \subsection{The nodes which indicate the position of the rules}
 %
-% The package \pkg{nicematrix} creates a PGF/Tikz node indicating the potential
-% position of each horizontal rule (with the names |row-|$i$) and each vertical
-% rule (with the names |col-|$j$), as described in the following figure. These
-% nodes are available in the |code-before| and the |\CodeAfter|.
+% \label{nodes-i}
+% \colorbox{yellow!50}{\textbf{New 5.11}}\enskip The package \pkg{nicematrix}
+% creates a PGF/Tikz node merely called $i$ (with the classical prefix) at the
+% intersection of the horizontal rule of number~$i$ and the vertical rule of
+% number~$j$ (more specifically the potential position of those rules because
+% maybe there are not actually drawn). These nodes are available in the
+% |code-before| and the |\CodeAfter|.
 % \begin{center}
 % \begin{NiceTabular}{ccc}[hvlines,rules/width=1pt,rules/color=gray]
 % rose & tulipe & lys \\
@@ -3435,23 +3460,18 @@
 % \begin{tikzpicture}
 % \foreach \i in {1,2,3,4}
 %   { 
-%     \fill [red] (row-\i) circle (0.5mm) ; 
-%     \node [red,anchor=east] at (row-\i) {row-\i} ; 
+%     \fill [red] (\i) circle (0.5mm) ; 
+%     \node [red,above right] at (\i) {\i} ; 
 %   } 
-% \foreach \j in {1,2,3,4}
-%   { 
-%     \fill [blue] (col-\j) circle (0.5mm) ; 
-%     \node [blue,anchor=north] at (col-\j) {col-\j} ; 
-%   } 
 % \end{tikzpicture}
 % \end{NiceTabular}
 % \end{center}
 % 
 % \bigskip
-% If we use Tikz (we remind that \pkg{nicematrix} does not load Tikz by
-% default), we can access (in the |code-before| and the |\CodeAfter|) to the
-% intersection of the horizontal rule~$i$ and the vertical rule~$j$ with the
-% syntax |(row-|$i$\verb+-|col-+$j$|)|.
+% If we use Tikz (we remind that \pkg{nicematrix} does not load Tikz by default,
+% by only \textsc{pgf}, which is a sub-layer of Tikz), we can access, in the
+% |\CodeAfter| but also in the |code-before|) to the intersection of the horizontal
+% rule~$i$ and the vertical rule~$j$ with the syntax |(|$i$\verb+-|+$j$|)|.
 %
 % \medskip
 % \begin{Verbatim}
@@ -3459,8 +3479,7 @@
 %   code-before = 
 %     { 
 % ~emphase#      \tikz \draw [fill = red!15] @
-% ~emphase#         (row-7-|col-4) -- (row-8-|col-4) -- (row-8-|col-5) -- @
-% ~emphase#         (row-9-|col-5) -- (row-9-|col-6) |- cycle ; @
+% ~emphase#         (7-|4) -- (8-|4) -- (8-|5) -- (9-|5) -- (9-|6) |- cycle ; @
 %     }
 % ]
 % 1 \\
@@ -3478,8 +3497,7 @@
 %   code-before = 
 %     { 
 %       \tikz \draw [fill = red!15] 
-%          (row-7-|col-4) -- (row-8-|col-4) -- (row-8-|col-5) -- 
-%          (row-9-|col-5) -- (row-9-|col-6) |- cycle ; 
+%          (7-|4) -- (8-|4) -- (8-|5) -- (9-|5) -- (9-|6) |- cycle ; 
 %     }
 % ]
 % 1 \\
@@ -3497,8 +3515,9 @@
 %
 % \label{node-sub-matrix}
 %
+% \colorbox{yellow!50}{\textbf{New 5.10}}\enskip 
 % The command |\SubMatrix| available in the |\CodeAfter| has been described
-% p.~\pageref{sub-matrix}. 
+% p.~\pageref{sub-matrix}.  
 %
 % \smallskip
 % If a command |\SubMatrix| has been used with the key |name| with an expression
@@ -3567,13 +3586,11 @@
 % \fvset{commandchars=\§\¤\μ}
 % \begin{Verbatim}
 %\ExplSyntaxOn
-% \cs_new_protected:Nn \__pantigny_hatchcell:nnn
+% \cs_new_protected:Nn \__pantigny_hatch:nnn
 %   {
 %     \begin { tikzpicture }
 %     \fill [ pattern = north~west~lines , pattern~color = #3 ]
-%           ( row - #1 -| col - #2) 
-%           rectangle 
-%           ( row - \int_eval:n { #1 + 1 } -| col - \int_eval:n { #2 + 1 } ) ;
+%     ( #1 -| #2) rectangle ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ;
 %     \end { tikzpicture }
 %   }
 %
@@ -3580,12 +3597,7 @@
 % \NewDocumentCommand \hatchcell { ! O { black } }
 %   {
 %     \tl_gput_right:Nx §emphase¤\g_nicematrix_code_before_tlμ
-%       { 
-%         \__pantigny_hatchcell:nnn
-%           { \int_use:c { c at iRow } } 
-%           { \int_use:c { c at jCol } }
-%           { #1 }
-%       }
+%       { \__pantigny_hatch:nnn { \arabic { iRow } } { \arabic { jCol } } { #1 } }
 %   }
 % \ExplSyntaxOff
 % \end{Verbatim}
@@ -3592,14 +3604,12 @@
 % \end{scope}
 %
 %
-%\ExplSyntaxOn
-% \cs_new_protected:Nn \__pantigny_hatchcell:nnn
+% \ExplSyntaxOn
+% \cs_new_protected:Nn \__pantigny_hatch:nnn
 %   {
 %     \begin { tikzpicture }
 %     \fill [ pattern = north~west~lines , pattern~color = #3 ]
-%           ( row - #1 -| col - #2) 
-%           rectangle 
-%           ( row - \int_eval:n { #1 + 1 } -| col - \int_eval:n { #2 + 1 } ) ;
+%     ( #1 -| #2 ) rectangle ( \int_eval:n { #1 + 1 } -| \int_eval:n { #2 + 1 } ) ;
 %     \end { tikzpicture }
 %   }
 %
@@ -3606,12 +3616,7 @@
 % \NewDocumentCommand \hatchcell { ! O { black } }
 %   {
 %     \tl_gput_right:Nx \g_nicematrix_code_before_tl
-%       { 
-%         \__pantigny_hatchcell:nnn
-%           { \int_use:c { c at iRow } } 
-%           { \int_use:c { c at jCol } }
-%           { #1 }
-%       }
+%       { \__pantigny_hatch:nnn { \arabic { iRow } } { \arabic { jCol } } { #1 } }
 %   }
 % \ExplSyntaxOff
 %
@@ -3623,7 +3628,7 @@
 % \begin{BVerbatim}[baseline=c,boxwidth=9cm]
 % \begin{NiceTabular}{ccc}[hvlines]
 % Tokyo & Paris & London \\
-% Roma & ~emphase#\hatchcell[blue!30]@Oslo & Miami \\
+% Lima & ~emphase#\hatchcell[blue!30]@Oslo & Miami \\
 % Los Angeles & Madrid & Roma
 % \end{NiceTabular}
 % \end{BVerbatim}
@@ -3643,7 +3648,7 @@
 % The package \pkg{nicematrix} provides the command |\OnlyMainNiceMatrix|
 % which is meant to be used in definitions of new column types. Its argument is
 % evaluated if and only if we are in the main part of the array, that is to say
-% not in an potential exterior row.
+% not in a potential exterior row.
 %
 % For example, one may wish to define a new column type |?| in order to draw a
 % (black) heavy rule of width 1~pt. The following definition will do the
@@ -3832,7 +3837,7 @@
 % \end{Verbatim}
 %
 % \bigskip
-% As of now, the package \pkg{nicematrix} is not compatible with
+% As for now, the package \pkg{nicematrix} is not compatible with
 % \cls{aastex63}. If you want to use \pkg{nicematrix} with \cls{aastex63}, send
 % me an email and I will try to solve the incompatibilies.
 % 
@@ -3942,106 +3947,10 @@
 %
 % \subsection{Dotted lines}
 %
+% An example with the resultant of two polynoms:\par\nobreak
 %
-% A permutation matrix (as an example, we have raised the value of
-% |xdots/shorten|). 
-%
-% \label{permutation}
 % \bigskip
-% \begin{BVerbatim}[baseline=c]
-% $\begin{pNiceMatrix}[~emphase#xdots/shorten=0.6em@]
-% 0       & 1 & 0 &        & \Cdots &   0    \\
-% \Vdots  &   &   & \Ddots &        & \Vdots \\
-%         &   &   & \Ddots &        &        \\
-%         &   &   & \Ddots &        &   0    \\
-% 0       & 0 &   &        &        &   1    \\
-% 1       & 0 &   & \Cdots &        &   0    
-% \end{pNiceMatrix}$
-% \end{BVerbatim}
-% \hspace{2.5cm}
-% $\begin{pNiceMatrix}[xdots/shorten=0.6em]
-% 0       & 1 & 0 &        & \Cdots &   0    \\
-% \Vdots  &   &   & \Ddots &        & \Vdots \\
-%         &   &   & \Ddots &        &        \\
-%         &   &   & \Ddots &        &   0    \\
-% 0       & 0 &   &        &        &   1    \\
-% 1       & 0 &   & \Cdots &        &   0    
-% \end{pNiceMatrix}$
-%
-% \vspace{2cm}
-%
-% An example with |\Iddots| (we have raised again the value of
-% |xdots/shorten|).\par\nobreak  
-%
-% \bigskip
-% \begin{BVerbatim}[baseline=c]
-% $\begin{pNiceMatrix}[xdots/shorten=0.9em]
-% 1       & \Cdots  &         & 1      \\
-% \Vdots  &         &         & 0      \\
-%         & ~emphase#\Iddots@ & ~emphase#\Iddots@ & \Vdots \\
-% 1       & 0       & \Cdots  & 0 
-% \end{pNiceMatrix}$
-% \end{BVerbatim}
-% \hspace{4cm}
-% $\begin{pNiceMatrix}[xdots/shorten=0.9em]
-% 1       & \Cdots  &         & 1      \\
-% \Vdots  &         &         & 0      \\
-%         & \Iddots & \Iddots & \Vdots \\
-% 1       & 0       & \Cdots  & 0 
-% \end{pNiceMatrix}$
-%
-%
-% \vspace{2cm}
-% An example with |\multicolumn|:\par\nobreak
-%
-% \bigskip
 % \begin{BVerbatim}
-% \begin{BNiceMatrix}[nullify-dots]
-% 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\\
-% 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\\
-% \Cdots &  & ~emphase#\multicolumn{6}{C}{10 \text{ other rows}}@ & \Cdots \\
-% 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10
-% \end{BNiceMatrix}
-% \end{BVerbatim}
-% 
-% \bigskip
-% \[\begin{BNiceMatrix}[nullify-dots]
-% 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\\
-% 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\\
-% \Cdots &  & \multicolumn{6}{c}{10 \text{ other rows}} & \Cdots \\
-% 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10
-% \end{BNiceMatrix}\]
-% 
-% \vspace{2cm}
-% An example with |\Hdotsfor|:\par\nobreak
-%
-% \bigskip
-% \begin{BVerbatim}[baseline=c,boxwidth=11cm]
-% \begin{pNiceMatrix}[nullify-dots]
-% 0 & 1 & 1 & 1 & 1 & 0 \\
-% 0 & 1 & 1 & 1 & 1 & 0 \\
-% \Vdots  & ~emphase#\Hdotsfor{4}@ & \Vdots \\
-%  & ~emphase#\Hdotsfor{4}@ & \\
-%  & ~emphase#\Hdotsfor{4}@ & \\
-%  & ~emphase#\Hdotsfor{4}@ & \\
-% 0 & 1 & 1 & 1 & 1 & 0 
-% \end{pNiceMatrix}
-% \end{BVerbatim}
-% $\begin{pNiceMatrix}[nullify-dots]
-% 0 & 1 & 1 & 1 & 1 & 0 \\
-% 0 & 1 & 1 & 1 & 1 & 0 \\
-% \Vdots  & \Hdotsfor{4} & \Vdots \\
-%  & \Hdotsfor{4} & \\
-%  & \Hdotsfor{4} & \\
-%  & \Hdotsfor{4} & \\
-% 0 & 1 & 1 & 1 & 1 & 0 
-% \end{pNiceMatrix}$
-%
-% \vspace{2cm}
-% An example for the resultant of two polynoms:\par\nobreak
-%
-% \bigskip
-% \begin{BVerbatim}
 % \setlength{\extrarowheight}{1mm}
 % \[\begin{vNiceArray}{cccc:ccc}[columns-width=6mm]
 % a_0   &      &&       &b_0    &      &     \\
@@ -4100,6 +4009,54 @@
 % The option |line-style| controls the style of the lines drawn by |\Ldots|,
 % |\Cdots|, etc. Thus, it's possible with these commands to draw lines which are
 % not longer dotted.
+%
+%
+% \begin{Verbatim}[formatcom=\small\color{gray}]
+% \NiceMatrixOptions{code-for-first-row = \scriptstyle,code-for-first-col = \scriptstyle }
+% \setcounter{MaxMatrixCols}{12}
+% \newcommand{\blue}{\color{blue}}
+% \[\begin{pNiceMatrix}[last-row,last-col,nullify-dots,xdots/line-style={dashed,blue}]
+% 1& & & \Vdots & & & & \Vdots \\
+% & \Ddots[line-style=standard] \\
+% & & 1 \\
+% \Cdots[color=blue,line-style=dashed]&   &  & \blue 0 &
+% \Cdots & & & \blue 1 & & & \Cdots & \blue \leftarrow i \\
+% & & & & 1 \\
+% & & &\Vdots & & \Ddots[line-style=standard] & & \Vdots \\
+% & & & & & & 1 \\
+% \Cdots & & & \blue 1 & \Cdots & & \Cdots & \blue 0 & & & \Cdots & \blue \leftarrow j \\
+% & & & & & & & & 1 \\
+% & & & & & & & & & \Ddots[line-style=standard] \\
+% & & & \Vdots & & & & \Vdots & & & 1 \\
+% & & & \blue \overset{\uparrow}{i} & & & & \blue \overset{\uparrow}{j} \\
+% \end{pNiceMatrix}\]
+% \end{Verbatim}
+%
+%
+% \begin{scope}
+% \NiceMatrixOptions{code-for-first-row = \scriptstyle,code-for-first-col = \scriptstyle }
+% \setcounter{MaxMatrixCols}{12}
+% \newcommand{\blue}{\color{blue}}
+% \[\begin{pNiceMatrix}[last-row,last-col,nullify-dots,xdots/line-style={dashed,blue}]
+% 1& & & \Vdots & & & & \Vdots \\
+% & \Ddots[line-style=standard] \\
+% & & 1 \\
+% \Cdots[color=blue,line-style=dashed]&   &  & \blue 0 &
+% \Cdots & & & \blue 1 & & & \Cdots & \blue \leftarrow i \\
+% & & & & 1 \\
+% & & &\Vdots & & \Ddots[line-style=standard] & & \Vdots \\
+% & & & & & & 1 \\
+% \Cdots & & & \blue 1 & \Cdots & & \Cdots & \blue 0 & & & \Cdots & \blue \leftarrow j \\
+% & & & & & & & & 1 \\
+% & & & & & & & & & \Ddots[line-style=standard] \\
+% & & & \Vdots & & & & \Vdots & & & 1 \\
+% & & & \blue \overset{\uparrow}{i} & & & & \blue \overset{\uparrow}{j} \\
+% \end{pNiceMatrix}\]
+% \end{scope}
+%
+% \interitem
+% In fact, it's even possible to draw solid lines with the commands |\Cdots|,
+% |\Vdots|, etc.
 % 
 % \begin{Verbatim}
 % \NiceMatrixOptions
@@ -4260,7 +4217,29 @@
 %
 % \vspace{1cm}
 % It's possible to color a row with |\rowcolor| in the |code-before| (or with
-% |\rowcolor| in the first cell of the row if the key |colortbl-like| is used).
+% |\rowcolor| in the first cell of the row if the key |colortbl-like| is
+% used−even when \pkg{colortbl} is not loaded).
+%
+% \medskip
+% \begin{Verbatim}
+% \begin{pNiceArray}{>{\strut}cccc}[margin, extra-margin=2pt,colortbl-like]
+%   ~emphase#\rowcolor{red!15}@A_{11} & A_{12} & A_{13} & A_{14} \\
+%   A_{21} & ~emphase#\rowcolor{red!15}@A_{22} & A_{23} & A_{24} \\
+%   A_{31} & A_{32} & ~emphase#\rowcolor{red!15}@A_{33} & A_{34} \\
+%   A_{41} & A_{42} & A_{43} & ~emphase#\rowcolor{red!15}@A_{44}  
+% \end{pNiceArray}
+% \end{Verbatim}
+%
+%
+%
+% \[\begin{pNiceArray}{>{\strut}cccc}[margin, extra-margin=2pt,colortbl-like]
+%   \rowcolor{red!15}A_{11} & A_{12} & A_{13} & A_{14} \\
+%   A_{21} & \rowcolor{red!15}A_{22} & A_{23} & A_{24} \\
+%   A_{31} & A_{32} & \rowcolor{red!15}A_{33} & A_{34} \\
+%   A_{41} & A_{42} & A_{43} & \rowcolor{red!15}A_{44}  
+% \end{pNiceArray}\]
+%
+% \bigskip
 % However, it's not possible to do a fine tuning. That's why we describe now a
 % method to highlight a row of the matrix. We create a rectangular Tikz node
 % which encompasses the nodes of the second row with the Tikz library \pkg{fit}.
@@ -4268,11 +4247,16 @@
 % the text \emph{under} this node, we have to use transparency with the 
 % |blend mode| equal to |multiply|.
 %
+% \medskip
+% \textbf{Caution} : Some \textsc{pdf} readers are not able to show
+% transparency.\footnote{In Overleaf, the ``built-in'' \textsc{pdf} viewer does
+% not show transparency. You can switch to the ``native'' viewer in that case.}
 %
+%
 % \medskip
 % That example and the following ones require Tikz (by default, \pkg{nicematrix}
-% only loads \textsc{pgf}) and the Tikz library |fit|. The following lines in
-% the preamble of your document do the job:
+% only loads \textsc{pgf}, which is a sub-layer of Tikz) and the Tikz library
+% |fit|. The following lines in the preamble of your document do the job:
 % \begin{verbatim}
 % \usepackage{tikz}
 % \usetikzlibrary{fit}
@@ -4439,45 +4423,7 @@
 % a & a     & a         & L_3
 % \end{pNiceArray}\]
 %
-%
-%                           
-% \vspace{1cm}
 % 
-% In the following example, we use the ``large nodes'' to highlight a zone of
-% the matrix.\par\nobreak 
-% \begin{Verbatim}
-% \begin{pNiceArray}{>{\strut}cccc}[create-large-nodes,margin,extra-margin=2pt]
-%   A_{11} & A_{12} & A_{13} & A_{14} \\
-%   A_{21} & A_{22} & A_{23} & A_{24} \\
-%   A_{31} & A_{32} & A_{33} & A_{34} \\
-%   A_{41} & A_{42} & A_{43} & A_{44}  
-% \CodeAfter
-%   \tikz \path [~emphase#name suffix = -large@,fill = red!15, blend mode = multiply]
-%       (1-1.north west)
-%    |- (2-2.north west)
-%    |- (3-3.north west)
-%    |- (4-4.north west)
-%    |- (4-4.south east)
-%    |- (1-1.north west) ; 
-% \end{pNiceArray}
-% \end{Verbatim}
-%                              
-%
-% \[\begin{pNiceArray}{>{\strut}cccc}[create-large-nodes,margin,extra-margin=2pt]
-%   A_{11} & A_{12} & A_{13} & A_{14} \\
-%   A_{21} & A_{22} & A_{23} & A_{24} \\
-%   A_{31} & A_{32} & A_{33} & A_{34} \\
-%   A_{41} & A_{42} & A_{43} & A_{44}  
-% \CodeAfter
-%   \tikz \path [name suffix = -large,fill = red!15, blend mode = multiply]
-%       (1-1.north west)
-%    |- (2-2.north west)
-%    |- (3-3.north west)
-%    |- (4-4.north west)
-%    |- (4-4.south east)
-%    |- (1-1.north west) ; 
-% \end{pNiceArray}\]
-% 
 % \subsection{Direct use of the Tikz nodes}
 %
 % In the following example, we illustrate the mathematical product of two
@@ -4607,9 +4553,9 @@
 % \smallskip
 % Of course, the package \pkg{nicematrix} uses the features of the package
 % \pkg{array}. It tries to be independent of its implementation. Unfortunately,
-% it was not possible to be strictly independent: the package \pkg{nicematrix}
-% relies upon the fact that the package |{array}| uses |\ialign| to begin the
-% |\halign|. 
+% it was not possible to be strictly independent. For example, the package
+% \pkg{nicematrix} relies upon the fact that the package |{array}| uses
+% |\ialign| to begin the |\halign|. 
 % 
 %
 % \bigskip
@@ -4647,8 +4593,9 @@
 % this package for technical reasons. 
 % 
 % \bigskip
-% We load some packages.
+% We load some packages. The package \pkg{xparse} is still loaded for use on Overleaf.
 %    \begin{macrocode}
+\RequirePackage { xparse }
 \RequirePackage { array }
 \RequirePackage { amsmath }
 %    \end{macrocode}
@@ -4725,7 +4672,7 @@
 % 
 % We test whether the current class is \cls{revtex4-1} (deprecated) or
 % \cls{revtex4-2} because these classes redefines |\array| (of \pkg{array}) in a
-% way incompatible with our programmation. As of january 2021, the current
+% way incompatible with our programmation. At the date January 2021, the current
 % version \cls{revtex4-2} is 4.2e (compatible with \pkg{booktabs}).
 %
 %    \begin{macrocode}
@@ -4792,7 +4739,7 @@
     \cs_set_eq:NN \@@_old_pgfutil at check@rerun \pgfutil at check@rerun
 %    \end{macrocode}
 % The new version of |\pgfutil at check@rerun| will not check the PGF nodes whose
-% names start with |nm-| (which is the prefix for the nodes creates by
+% names start with |nm-| (which is the prefix for the nodes created by
 % \pkg{nicematrix}). 
 %    \begin{macrocode}
     \cs_set_protected:Npn \pgfutil at check@rerun ##1 ##2
@@ -4816,7 +4763,7 @@
 %    \end{macrocode}
 % The command |\CT at arc@| is a command of \pkg{colortbl} which sets the color of
 % the rules in the array. We will use it to store the instruction of color for
-% the rules even if \pkg{colortbl} is not loaded. Idem for 
+% the rules even if \pkg{colortbl} is not loaded. 
 %    \begin{macrocode}
         \cs_set_protected:Npn \CT at arc@ { }
         \cs_set:Npn \arrayrulecolor #1 # { \CT at arc { #1 } }
@@ -5092,7 +5039,7 @@
 % |\pgfsyspdfmark| in the |aux| file. If he changes its mind and no longer loads
 % \pkg{nicematrix}, an error may occur at the next compilation because of
 % remanent instructions |\pgfsyspdfmark| in the |aux| file. With the following
-% code, we avoid that situation.
+% code, we try to avoid that situation.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_provide_pgfsyspdfmark:
   {
@@ -5109,10 +5056,10 @@
 %
 % \subsection*{Parameters}
 %
-% \bigskip
+% \bigskip 
 % For compatibility with versions prior to 5.0, we provide a load-time option
-% |define_L_C_R|. With this option, it's possible the letters |L|, |C| and |R|
-% instead of |l|, |c| and |r| in the preamble of the environments of
+% |define_L_C_R|. With this option, it's possible to use the letters |L|, |C|
+% and |R| instead of |l|, |c| and |r| in the preamble of the environments of
 % \pkg{nicematrix} as it was mandatory before version~5.0.
 %    \begin{macrocode}
 \bool_new:N \c_@@_define_L_C_R_bool
@@ -5198,7 +5145,7 @@
 %    \end{macrocode}
 %
 % \bigskip
-% Idem pour the blocks mono-row.
+% Idem pour the mono-row blocks.
 %    \begin{macrocode}
 \dim_new:N \g_@@_blocks_ht_dim
 \dim_new:N \g_@@_blocks_dp_dim
@@ -5214,7 +5161,7 @@
 %    \end{macrocode}
 %
 % \bigskip
-% We want to know if we are in an environment of \pkg{nicematrix} because we
+% We want to know whether we are in an environment of \pkg{nicematrix} because we
 % will raise an error if the user tries to use nested environments.
 %    \begin{macrocode}
 \bool_new:N \l_@@_in_env_bool
@@ -5265,9 +5212,22 @@
   }
 %    \end{macrocode}
 %
+% \bigskip
+% The letter used for the vlines which will be drawn only in the sub-matrices.
+% |vlism| stands for \emph{vertical lines in sub-matrices}.
+%    \begin{macrocode}
+\tl_new:N \l_@@_letter_vlism_tl
+%    \end{macrocode}
 % 
+% The list of the columns where vertical lines in sub-matrices (vlism) must be
+% drawn. Of course, the actual value of this sequence will be known after the
+% analyse of the preamble of the array. 
+%    \begin{macrocode}
+\seq_new:N \g_@@_cols_vlism_seq
+%    \end{macrocode}
+% 
 % \bigskip
-% The following colors will be used to memorize le color of the potential ``first
+% The following colors will be used to memorize the color of the potential ``first
 % col'' and the potential ``first row''.
 %    \begin{macrocode}
 \colorlet { nicematrix-last-col } { . }
@@ -5315,7 +5275,7 @@
 % |\g_nicematrix_code_after_tl| but it is used internally by \pkg{nicematrix}.
 % In fact, we have to distinguish between |\g_nicematrix_code_after_tl| and
 % |\g_@@_internal_code_after_tl| because we must take care of the order in which
-% instructions stored in that paremeters are executed.
+% instructions stored in that parameters are executed.
 %    \begin{macrocode}
 \tl_new:N \g_@@_internal_code_after_tl
 %    \end{macrocode}
@@ -5394,7 +5354,7 @@
 % 
 % \bigskip
 % \pkg{expl3} provides scratch dimensions |\l_tmpa_dim| and |\l_tmpb_dim|. We
-% creates two other in the same spirit (if they don't exist yet: that's why we
+% creates two more in the same spirit (if they don't exist yet: that's why we
 % use |\dim_zero_new:N|).
 %    \begin{macrocode}
 \dim_zero_new:N \l_tmpc_dim 
@@ -5408,12 +5368,6 @@
 \bool_new:N \g_@@_empty_cell_bool
 %    \end{macrocode}
 % 
-% \bigskip
-% The following dimension will be used to save the current value of
-% |\arraycolsep|.
-%    \begin{macrocode}
-\dim_new:N \@@_old_arraycolsep_dim 
-%    \end{macrocode}
 %
 % \bigskip
 % The following dimensions will be used internally to compute the width of the
@@ -5426,7 +5380,7 @@
 % \bigskip
 % The following sequence will contain the characteristics of the blocks of the
 % array, specified by the command |\Block|. Each block is represented by 6
-% components surrounded by braces:
+% components surrounded by curly braces:
 %
 % |{|\textsl{imin}|}{|\textsl{jmin}|}{|\textsl{imax}|}{|\textsl{jmax}|}{|\textsl{options}|}{|\textsl{contents}|}|.
 %
@@ -5461,7 +5415,7 @@
 %
 % \medskip
 % The final user may decide to ``stroke'' a block (using, for example, the key
-% |color=red!15| when using the command |\Block|). In that case, the rules
+% |draw=red!15| when using the command |\Block|). In that case, the rules
 % specified, for instance, by |hvlines| must not be drawn around the block.
 % That's why we keep the information of all that stroken blocks in the following
 % sequence.
@@ -5471,13 +5425,14 @@
 % 
 %
 % \medskip
-% The list of the names of the potential |\SubMatrix| in the |code-after| of an
+% The list of the names of the potential |\SubMatrix| in the |\CodeAfter| of an
 % environment. Unfortunately, that list has to be global (we have to use it
 % inside the group for the options of a given |\SubMatrix|).
 %    \begin{macrocode}
 \seq_new:N \g_@@_submatrix_names_seq
 %    \end{macrocode}
-% 
+%
+%
 % \medskip
 % We are able to determine the number of columns specified in the preamble (for
 % the environments with explicit preamble, of course and without the potential
@@ -5531,6 +5486,17 @@
 %    \begin{macrocode}
 \int_new:N \g_@@_block_box_int
 %    \end{macrocode}
+%
+% \medskip
+%    \begin{macrocode}
+\dim_new:N \l_@@_submatrix_extra_height_dim
+\dim_new:N \l_@@_submatrix_left_xshift_dim
+\dim_new:N \l_@@_submatrix_right_xshift_dim
+\clist_new:N \l_@@_submatrix_hlines_clist 
+\clist_new:N \l_@@_submatrix_vlines_clist 
+%    \end{macrocode}
+%
+%
 % 
 % \bigskip
 % \textbf{Variables for the exterior rows and columns}\par\nobreak
@@ -5853,7 +5819,7 @@
 %    \end{macrocode}
 %
 % \medskip
-% The command |\@@_pgf_rect_node:nnn| is a variant of |\@@_pgr_rect_node:nnnn|:
+% The command |\@@_pgf_rect_node:nnn| is a variant of |\@@_pgf_rect_node:nnnn|:
 % it takes two \textsc{pgf} points as arguments instead of the four dimensions
 % which are the coordinates.
 %    \begin{macrocode}
@@ -6097,7 +6063,7 @@
 %    \end{macrocode}
 % 
 % \bigskip
-% The following token list corresponds to the key |delimiters-color|.
+% The following token list corresponds to the key |delimiters/color|.
 %    \begin{macrocode}
 \tl_new:N \l_@@_delimiters_color_tl
 %    \end{macrocode}
@@ -6150,7 +6116,7 @@
 % construction of the array and not when we draw the dotted lines).
 %    \begin{macrocode}
     draw-first .code:n = \prg_do_nothing: ,
-    unknown .code:n = \@@_error:n { Unknown~option~for~xdots } 
+    unknown .code:n = \@@_error:n { Unknown~key~for~xdots } 
   }
 %    \end{macrocode}
 %
@@ -6174,6 +6140,8 @@
 %    \begin{macrocode}
 \keys_define:nn { NiceMatrix / Global }
   {
+    rules .code:n = \keys_set:nn { NiceMatrix / rules } { #1 } ,
+    rules .value_required:n = true ,
     standard-cline .bool_set:N = \l_@@_standard_cline_bool ,
     standard-cline .default:n = true ,
     cell-space-top-limit .dim_set:N = \l_@@_cell_space_top_limit_dim ,
@@ -6206,6 +6174,13 @@
     code-for-last-row .value_required:n = true ,
     hlines .bool_set:N = \l_@@_hlines_bool ,
     vlines .bool_set:N = \l_@@_vlines_bool ,
+    vlines-in-sub-matrix .code:n = 
+      {
+        \tl_if_single_token:nTF { #1 }
+          { \tl_set:Nn \l_@@_letter_vlism_tl { #1 } }
+          { \@@_error:n { One~letter~allowed } } 
+      } ,
+    vlines-in-sub-matrix .value_required:n = true ,
     hvlines .code:n = 
       { 
         \bool_set_true:N \l_@@_vlines_bool 
@@ -6369,6 +6344,7 @@
     NiceMatrixOptions / rules .inherit:n = NiceMatrix / rules ,
     NiceMatrixOptions / notes .inherit:n = NiceMatrix / notes ,
     NiceMatrixOptions / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,  
+    SubMatrix / rules .inherit:n = NiceMatrix / rules ,  
     CodeAfter / xdots .inherit:n = NiceMatrix / xdots ,
     NiceMatrix .inherit:n = 
       { 
@@ -6409,6 +6385,8 @@
 %    \begin{macrocode}
 \keys_define:nn { NiceMatrix / NiceMatrixOptions }
   { 
+    delimiters / color .tl_set:N = \l_@@_delimiters_color_tl ,
+    delimiters / color .value_required:n = true ,
     delimiters-color .tl_set:N = \l_@@_delimiters_color_tl ,
     delimiters-color .value_required:n = true ,
     last-col .code:n = \tl_if_empty:nF { #1 }
@@ -6478,7 +6456,7 @@
       {
         \tl_if_single_token:nTF { #1 }
           { \str_set:Nx \l_@@_letter_for_dotted_lines_str { #1 } }
-          { \@@_error:n { Bad~value~for~letter~for~dotted~lines } } 
+          { \@@_error:n { One~letter~allowed } } 
       } ,
     letter-for-dotted-lines .value_required:n = true ,
     notes .code:n = \keys_set:nn { NiceMatrix / notes } { #1 } ,
@@ -6523,6 +6501,8 @@
     r .code:n = \tl_set:Nn \l_@@_type_of_col_tl r ,
     small .bool_set:N = \l_@@_small_bool ,
     small .value_forbidden:n = true ,
+    delimiters / color .tl_set:N = \l_@@_delimiters_color_tl ,
+    delimiters / color .value_required:n = true ,
     delimiters-color .tl_set:N = \l_@@_delimiters_color_tl ,
     delimiters-color .value_required:n = true ,
     unknown .code:n = \@@_error:n { Unknown~option~for~NiceMatrix } 
@@ -6557,6 +6537,8 @@
     tabularnote .value_required:n = true ,
     delimiters-color .tl_set:N = \l_@@_delimiters_color_tl ,
     delimiters-color .value_required:n = true ,
+    delimiters / color .tl_set:N = \l_@@_delimiters_color_tl ,
+    delimiters / color .value_required:n = true ,
     unknown .code:n = \@@_error:n { Unknown~option~for~NiceArray } 
   }
 %    \end{macrocode}
@@ -6795,7 +6777,7 @@
 % \item we test the existence of these nodes in order to determine whether a
 % cell is empty when we search the extremities of a dotted line.
 % \end{itemize}
-% However, it's very difficult to determine whether a cell is empty. As of now,
+% However, it's very difficult to determine whether a cell is empty. As for now,
 % we use the following technic:
 % \begin{itemize}
 % \item if the width of the box |\l_@@_cell_box| (created with the content of
@@ -6805,7 +6787,7 @@
 % \item the cells with a command |\Ldots| or |\Cdots|, |\Vdots|, etc.,
 % should also be considered as empty; if |nullify-dots| is in force, there would
 % be nothing to do (in this case the previous commands only write an instruction
-% in a kind of |code-after|); however, if |nullify-dots| is not in force, a
+% in a kind of |\CodeAfter|); however, if |nullify-dots| is not in force, a
 % phantom of |\ldots|, |\cdots|, |\vdots| is inserted and its width is not equal
 % to zero; that's why these commands raise a boolean |\g_@@_empty_cell_bool| and
 % we begin by testing this boolean.
@@ -6897,11 +6879,6 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_instruction_of_type:nnn #1 #2 #3
   { 
-%    \end{macrocode}
-% It's important to use a |\tl_gput_right:cx| and not a |\tl_gput_left:cx|
-% because we want the |\Ddots| lines to be drawn in the order of appearance
-% in the array (for parallelisation).
-%    \begin{macrocode}
     \bool_if:nTF { #1 } \tl_gput_left:cx \tl_gput_right:cx 
       { g_@@_ #2 _ lines _ tl }
       { 
@@ -7414,7 +7391,7 @@
           { 
 %    \end{macrocode}
 % First, we give values to the LaTeX counters |iRow| and |jCol|. We remind that,
-% in the |code-before| (and in the |code-after|) they represent the numbers of
+% in the |code-before| (and in the |\CodeAfter|) they represent the numbers of
 % rows and columns of the array (without the potential last row and last column).
 %    \begin{macrocode}
             \int_zero_new:N \c at iRow
@@ -7464,6 +7441,15 @@
                   { \pgfpointdiff \@@_picture_position: \@@_node_position: }
               }
             \endpgfpicture
+%    \end{macrocode}
+% Now, you create the diagonal nodes by using the |row| nodes and the |col| nodes.
+%    \begin{macrocode}
+            \@@_create_diag_nodes:
+%    \end{macrocode}
+%
+% \medskip
+% Now, yet another settings before the executation of the |code-before|.
+%    \begin{macrocode}
             \group_begin:
               \bool_if:NT \c_@@_tikz_loaded_bool
                 {  
@@ -7898,6 +7884,12 @@
           }
           { \tl_gclear:N \g_@@_preamble_tl }
 %    \end{macrocode}
+% The sequence |\g_@@_cols_vlsim_seq| will contain the numbers of the columns
+% where you will to have to draw vertical lines in the potential sub-matrices
+% (hence the name |vlism|). 
+%    \begin{macrocode}
+        \seq_clear:N \g_@@_cols_vlism_seq 
+%    \end{macrocode}
 % The counter |\l_tmpa_int| will count the number of consecutive occurrences
 % of the symbol \verb+|+.
 %    \begin{macrocode}
@@ -7957,8 +7949,7 @@
 %    \begin{macrocode}
     \dim_compare:nNnT \l_@@_tabular_width_dim = \c_zero_dim 
       { 
-        \tl_gput_right:Nn 
-          \g_@@_preamble_tl 
+        \tl_gput_right:Nn \g_@@_preamble_tl 
           { > { \@@_error_too_much_cols: } l }
       } 
 %    \end{macrocode}
@@ -8004,15 +7995,25 @@
       { 
         \str_if_eq:VnTF \l_@@_letter_for_dotted_lines_str { #1 }
           { \@@_patch_preamble_xi:n #1 }
-          { 
-            \bool_lazy_and:nnTF
-              { \str_if_eq_p:nn { : } { #1 } }
-              \c_@@_arydshln_loaded_bool
-              {
-                \tl_gput_right:Nn \g_@@_preamble_tl { : }
+          {
+            \str_if_eq:VnTF \l_@@_letter_vlism_tl { #1 }
+              { 
+                \seq_gput_right:Nx \g_@@_cols_vlism_seq 
+                  { \int_eval:n { \c at jCol + 1 } }
+                \tl_gput_right:Nx \g_@@_preamble_tl
+                  { \exp_not:N ! { \skip_horizontal:N \arrayrulewidth } }
                 \@@_patch_preamble:n
               }
-              { \@@_fatal:nn { unknown~column~type } { #1 } }
+              { 
+                \bool_lazy_and:nnTF
+                  { \str_if_eq_p:nn { : } { #1 } }
+                  \c_@@_arydshln_loaded_bool
+                  {
+                    \tl_gput_right:Nn \g_@@_preamble_tl { : }
+                    \@@_patch_preamble:n
+                  }
+                  { \@@_fatal:nn { unknown~column~type } { #1 } }
+              }   
           }
       }
   }
@@ -8102,11 +8103,15 @@
             \@@_Cell: 
             \begin { minipage } [ #1 ] { #3 } 
             \mode_leave_vertical: 
-            \arraybackslash % added in the version 5.8
-            \box_use:N \@arstrutbox 
+            \arraybackslash
+            \vrule height \box_ht:N \@arstrutbox depth 0 pt width 0 pt % v. 5.11
           } 
         c 
-        < { \box_use:N \@arstrutbox \end { minipage } \@@_end_Cell: } 
+        < { 
+            \vrule height 0 pt depth \box_dp:N \@arstrutbox width 0 pt % v. 5.11
+            \end { minipage } 
+            \@@_end_Cell: 
+          } 
       }
 %    \end{macrocode}
 % We increment the counter of columns, and then we test for the presence of a |<|.
@@ -8603,7 +8608,7 @@
           { \@@_fatal:n { double-backslash~in~light-syntax } }
       }
 %    \end{macrocode}
-% Now, you extract the |code-after| of the body of the environment. Maybe, there
+% Now, you extract the |\CodeAfter| of the body of the environment. Maybe, there
 % is no command |\CodeAfter| in the body. That's why you put a marker
 % |\CodeAfter| after |#1|. If there is yet a |\CodeAfter| in |#1|, this second
 % (or third...) |\CodeAfter| will be catched in the value of
@@ -8884,6 +8889,12 @@
   {
     > 
       { 
+%    \end{macrocode}
+% At the beginning of the cell, we link |\CodeAfter| to a command which do
+% \emph{not} begin with |\omit| (whereas the standard version of |\CodeAfter|
+% begins with |\omit|).
+%    \begin{macrocode}
+        \cs_set_eq:NN \CodeAfter \@@_CodeAfter_i:n
         \bool_gset_true:N \g_@@_after_col_zero_bool
         \@@_begin_of_row:
 %    \end{macrocode}
@@ -8955,6 +8966,12 @@
     > 
       { 
 %    \end{macrocode}
+% At the beginning of the cell, we link |\CodeAfter| to a command which do
+% \emph{not} begin with |\omit| (whereas the standard version of |\CodeAfter|
+% begins with |\omit|).
+%    \begin{macrocode}
+    \cs_set_eq:NN \CodeAfter \@@_CodeAfter_i:n
+%    \end{macrocode}
 % With the flag |\g_@@_last_col_found_bool|, we will know that the ``last
 % column'' is really used.
 %    \begin{macrocode}           
@@ -9259,7 +9276,17 @@
       } 
 %    \end{macrocode}
 %
-%
+% \medskip
+%    \begin{macrocode}
+      \@@_create_diag_nodes:
+      \str_if_empty:NF \l_@@_name_str
+        {
+          \pgfpicture
+          \pgfrememberpicturepositiononpagetrue
+          \pgfnodealias { \l_@@_name_str - ##1 } { \@@_env: - ##1 }
+          \endpgfpicture
+        }
+%    \end{macrocode}
 % 
 % By default, the diagonal lines will be parallelized\footnote{It's possible to
 % use the option |parallelize-diags| to disable this parallelization.}. There
@@ -9363,7 +9390,7 @@
 %    \end{macrocode}
 % 
 % \bigskip
-% Now, the |code-after|.
+% Now, the |\CodeAfter|.
 %    \begin{macrocode}
     \bool_if:NT \c_@@_tikz_loaded_bool
       {  
@@ -9389,11 +9416,11 @@
 %    \end{macrocode}
 %
 % We clear the list of the names of the potential |\SubMatrix| that will appear
-% in the |code-after| (unfortunately, that list has to be global).
+% in the |\CodeAfter| (unfortunately, that list has to be global).
 %    \begin{macrocode}
     \seq_gclear:N \g_@@_submatrix_names_seq
 %    \end{macrocode}
-% And here's the |code-after|. Since the |code-after| may begin with an
+% And here's the |\CodeAfter|. Since the |\CodeAfter| may begin with an
 % ``argument'' between square brackets of the options, we extract and treat that
 % potential ``argument'' with the command |\@@_CodeAfter_keys:|.
 %    \begin{macrocode}
@@ -9450,7 +9477,7 @@
 %
 % \bigskip
 % The following command will extract the potential options (between square
-% brackets) at the beginning of the |code-after| (that is to say, when
+% brackets) at the beginning of the |\CodeAfter| (that is to say, when
 % |\CodeAfter| is used, the options of that ``command'' |\CodeAfter|).
 %    \begin{macrocode}
 \NewDocumentCommand \@@_CodeAfter_keys: { O { } }
@@ -9541,6 +9568,26 @@
 %
 % 
 % \bigskip
+% The following command creates the diagonal nodes (in fact, if the matrix is
+% not a square matrix, not all the nodes are on the diagonal).
+%
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_create_diag_nodes:
+  {
+    \int_step_inline:nn { \int_max:nn \c at iRow \c at jCol + 1 }
+      {
+        \pgfpicture
+        \pgfrememberpicturepositiononpagetrue
+        \@@_qpoint:n { row - \int_min:nn { ##1 } { \c at iRow + 1 } } 
+        \dim_set_eq:NN \l_tmpa_dim \pgf at y 
+        \@@_qpoint:n { col - \int_min:nn { ##1 } { \c at jCol + 1 } } 
+        \pgfcoordinate { \@@_env: - ##1 } { \pgfpoint \pgf at x \l_tmpa_dim } 
+        \endpgfpicture
+      }
+  }
+%    \end{macrocode}
+% 
+% \bigskip
 % \subsection*{We draw the dotted lines}
 %
 % A dotted line will be said \emph{open} in one of its extremities when it stops
@@ -11025,7 +11072,7 @@
 % \bigskip
 % \subsection*{The command \textbackslash line accessible in code-after}
 %
-% In the |code-after|, the command |\@@_line:nn| will be linked to |\line|. This
+% In the |\CodeAfter|, the command |\@@_line:nn| will be linked to |\line|. This
 % command takes two arguments which are the specifications of two cells in the
 % array (in the format $i$-$j$) and draws a dotted line between these cells. 
 % 
@@ -11033,7 +11080,7 @@
 % First, we write a command with an argument of the format $i$-$j$ and applies
 % the command |\int_eval:n| to $i$ and~$j$ ; this must \emph{not} be protected
 % (and is, of course fully expandable).\footnote{Indeed, we want that the user
-% may use the command |\line| in |code-after| with LaTeX counters in the
+% may use the command |\line| in |\CodeAfter| with LaTeX counters in the
 % arguments --- with the command |\value|.}
 %    \begin{macrocode}
 \cs_new:Npn \@@_double_int_eval:n #1-#2 \q_stop
@@ -11079,7 +11126,7 @@
         \cs_if_free_p:c { pgf @ sh @ ns @ \@@_env: - #2 } 
       }
       { 
-        \@@_error:nnn { unknown~cell~for~line~in~code-after } { #1 } { #2 }
+        \@@_error:nnn { unknown~cell~for~line~in~CodeAfter } { #1 } { #2 }
       } 
       { \@@_draw_line_ii:nn { #1 } { #2 } }
   }
@@ -11341,7 +11388,7 @@
     cols .tl_set:N = \l_@@_cols_tl ,
     restart .bool_set:N = \l_@@_rowcolors_restart_bool ,
     restart .default:n = true ,
-    unknown .code:n = \@@_error:n { Unknown~option~for~rowcolors } 
+    unknown .code:n = \@@_error:n { Unknown~key~for~rowcolors } 
   }
 %    \end{macrocode}
 %
@@ -11655,7 +11702,7 @@
   } 
 %    \end{macrocode}
 % This definition may seem complicated by we must remind that the number of row
-% |\c at iRow| is incremented in the first cell of the row, \emph{after} an
+% |\c at iRow| is incremented in the first cell of the row, \emph{after} a
 % potential vertical rule on the left side of the first cell.
 %
 % \smallskip
@@ -11675,8 +11722,8 @@
 %
 % \bigskip
 % The following command will be executed in the |internal-code-after|. The rule
-% will be drawn \emph{before} the column |#1|. |#2| is the number of consecutive
-% occurrences of \verb+|+.
+% will be drawn \emph{before} the column |#1| (that is to say on the left side).
+% |#2| is the number of consecutive occurrences of \verb+|+.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_vline:nn #1 #2
   {
@@ -11715,11 +11762,11 @@
 %    \begin{macrocode}
          \bool_gset_true:N \g_tmpa_bool
          \seq_map_inline:Nn \g_@@_pos_of_blocks_seq
-           { \@@_test_if_vline_in_block:nnnn ##1 }
+           { \@@_test_vline_in_block:nnnn ##1 }
          \seq_map_inline:Nn \g_@@_pos_of_xdots_seq
-           { \@@_test_if_vline_in_block:nnnn ##1 }
+           { \@@_test_vline_in_block:nnnn ##1 }
          \seq_map_inline:Nn \g_@@_pos_of_stroken_blocks_seq
-           { \@@_test_if_vline_in_stroken_block:nnnn ##1 }
+           { \@@_test_vline_in_stroken_block:nnnn ##1 }
          \clist_if_empty:NF \l_@@_except_corners_clist
            \@@_test_in_corner_v:
          \bool_if:NTF \g_tmpa_bool
@@ -11785,7 +11832,7 @@
 % 
 % \bigskip
 % |#1| is the number of the column; |#2| is the number of vertical rules to
-% draw (with potentially a color between); |#3| and |#4| are the number of the
+% draw (with potentially a color between); |#3| and |#4| are the numbers of the
 % rows between which the rule has to be drawn.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_vline_ii:nnnn #1 #2 #3 #4
@@ -11831,8 +11878,8 @@
 %    \end{macrocode}
 %
 % \bigskip
-% The following draws a complete vertical rule in the column |#1| (|#2| is the
-% number of consecutive rules specified by the number of \verb+|+ in the
+% The following command draws a complete vertical rule in the column |#1| (|#2|
+% is the number of consecutive rules specified by the number of \verb+|+ in the
 % preamble). This command will be used if there is no block in the array (and
 % the key |except-corners| is not used).
 %    \begin{macrocode}
@@ -11875,7 +11922,7 @@
 \cs_new_protected:Npn \@@_hline_i:nn #1 #2
   {
 %    \end{macrocode}
-% |\l_tmpa_tl| is the number of row and |\l_tmpb_tl| the number of column. Whe,
+% |\l_tmpa_tl| is the number of row and |\l_tmpb_tl| the number of column. When
 % we have found a column corresponding to a rule to draw, we note its number in
 % |\l_tmpc_tl|. 
 %    \begin{macrocode}
@@ -11892,11 +11939,11 @@
 %    \begin{macrocode}
          \bool_gset_true:N \g_tmpa_bool
          \seq_map_inline:Nn \g_@@_pos_of_blocks_seq
-           { \@@_test_if_hline_in_block:nnnn ##1 }
+           { \@@_test_hline_in_block:nnnn ##1 }
          \seq_map_inline:Nn \g_@@_pos_of_xdots_seq
-           { \@@_test_if_hline_in_block:nnnn ##1 }
+           { \@@_test_hline_in_block:nnnn ##1 }
          \seq_map_inline:Nn \g_@@_pos_of_stroken_blocks_seq
-           { \@@_test_if_hline_in_stroken_block:nnnn ##1 }
+           { \@@_test_hline_in_stroken_block:nnnn ##1 }
          \clist_if_empty:NF \l_@@_except_corners_clist \@@_test_in_corner_h: 
          \bool_if:NTF \g_tmpa_bool
            { 
@@ -12064,13 +12111,13 @@
 % \subsection*{The key hvlines}
 %
 %
-% The following command tests wether the current position in the array (given by
-% |\l_tmpa_tl| for the row and |\l_tmpb_tl| for the col) would provide an
+% The following command tests whether the current position in the array (given by
+% |\l_tmpa_tl| for the row and |\l_tmpb_tl| for the column) would provide an
 % horizontal rule towards the right in the block delimited by the four arguments
 % |#1|, |#2|, |#3| and |#4|. If this rule would be in the block (it must not be
 % drawn), the boolean |\l_tmpa_bool| is set to |false|.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_test_if_hline_in_block:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_test_hline_in_block:nnnn #1 #2 #3 #4
   {
     \bool_lazy_all:nT
       {
@@ -12085,7 +12132,7 @@
 %
 % The same for vertical rules.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_test_if_vline_in_block:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_test_vline_in_block:nnnn #1 #2 #3 #4
   {
     \bool_lazy_all:nT
       {
@@ -12099,7 +12146,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_test_if_hline_in_stroken_block:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_test_hline_in_stroken_block:nnnn #1 #2 #3 #4
   {
     \bool_lazy_all:nT
       {
@@ -12113,7 +12160,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_test_if_vline_in_stroken_block:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_test_vline_in_stroken_block:nnnn #1 #2 #3 #4
   {
     \bool_lazy_all:nT
       {
@@ -12332,7 +12379,7 @@
 %
 %
 % \medskip
-% The command |\@@_hdottedline:n| is the command written in the |code-after|
+% The command |\@@_hdottedline:n| is the command written in the |\CodeAfter|
 % that will actually draw the dotted line. Its argument is the number of the row
 % \emph{before} which we will draw the row.
 %    \begin{macrocode}
@@ -12446,16 +12493,14 @@
 % bracket. The correction by |0.5 \l_@@_inter_dots_dim| is \emph{ad hoc} for a
 % better result.
 %    \begin{macrocode}
-    \tl_set:Nn \l_tmpa_tl { ( }
-    \tl_if_eq:NNF \l_@@_left_delim_tl \l_tmpa_tl
+    \tl_if_eq:NnF \l_@@_left_delim_tl ( 
       { \dim_gadd:Nn \l_@@_x_initial_dim  { 0.5 \l_@@_inter_dots_dim } }
-    \tl_set:Nn \l_tmpa_tl { ) }
-    \tl_if_eq:NNF \l_@@_right_delim_tl \l_tmpa_tl
+    \tl_if_eq:NnF \l_@@_right_delim_tl ) 
       { \dim_gsub:Nn \l_@@_x_final_dim { 0.5 \l_@@_inter_dots_dim } }
 %    \end{macrocode}
 %
 % \medskip
-% As of now, we have no option to control the style of the lines drawn by
+% As for now, we have no option to control the style of the lines drawn by
 % |\hdottedline| and the specifier ``|:|'' in the preamble. That's why we impose
 % the style |standard|.
 %    \begin{macrocode}
@@ -12523,7 +12568,7 @@
     \@@_qpoint:n { row - \@@_succ:n \c at iRow } 
     \dim_set:Nn \l_@@_y_final_dim { \pgf at y + 0.5 \l_@@_inter_dots_dim } 
 %    \end{macrocode}
-% As of now, we have no option to control the style of the lines drawn by
+% As for now, we have no option to control the style of the lines drawn by
 % |\hdottedline| and the specifier ``|:|'' in the preamble. That's why we impose
 % the style |standard|.
 %    \begin{macrocode}
@@ -12544,7 +12589,7 @@
 %    \end{macrocode}
 %
 % \bigskip
-% As of now, there is only one option available for the environment
+% As for now, there is only one option available for the environment
 % |{NiceMatrixBlock}|. 
 %    \begin{macrocode}
 \keys_define:nn { NiceMatrix / NiceMatrixBlock } 
@@ -13293,7 +13338,7 @@
 % replaced by the line which is commented.
 %    \begin{macrocode}
     color .code:n = 
-      \@@_error:n { Key~color~for~Block }
+      \@@_fatal:n { Key~color~for~Block }
       \tl_set:Nn \l_@@_fill_tl { #1 } ,
     % color .code:n = \color { #1 } \tl_set:Nn \l_@@_draw_tl { #1 } ,
     color .value_required:n = true ,
@@ -13347,10 +13392,8 @@
     \int_compare:nNnTF { #4 } > { 99 }
       { \int_set_eq:NN \l_@@_last_col_int \c at jCol }
       { \int_set:Nn \l_@@_last_col_int { #4 } }
-    \bool_lazy_or:nnTF
-      { \int_compare_p:nNn \l_@@_last_row_int > \g_@@_row_total_int } 
-      { \int_compare_p:nNn \l_@@_last_col_int > \g_@@_col_total_int }
-      { 
+    \int_compare:nNnTF \l_@@_last_col_int > \g_@@_col_total_int 
+      {
         \int_compare:nTF 
           { \l_@@_last_col_int <= \g_@@_static_num_of_col_int }
           { 
@@ -13361,9 +13404,13 @@
             \@@_msg_redirect_name:nn { columns~not~used } { none }
             \group_end:
           }
+          { \msg_error:nnnn { nicematrix } { Block~too~large~1 } { #1 } { #2 } }
+      } 
+      {  
+        \int_compare:nNnTF \l_@@_last_row_int > \g_@@_row_total_int
           { \msg_error:nnnn { nicematrix } { Block~too~large~1 } { #1 } { #2 } } 
+          { \@@_Block_v:nnnnnn { #1 } { #2 } { #3 } { #4 } { #5 } { #6 } }
       }
-      { \@@_Block_v:nnnnnn { #1 } { #2 } { #3 } { #4 } { #5 } { #6 } }
   }
 %    \end{macrocode}
 % 
@@ -13979,17 +14026,20 @@
 % \subsection*{The keyword \textbackslash CodeAfter}
 %
 % 
-% The |code-after| (inserted with the key |code-after| or after the keyword
-% |\CodeAfter| can always begin with a list of pairs \emph{key-value} between
-% square brackets). Here the corresponding set of keys.
+% The |\CodeAfter| (inserted with the key |code-after| or after the keyword
+% |\CodeAfter|) may always begin with a list of pairs \emph{key-value} between
+% square brackets. Here is the corresponding set of keys.
 %    \begin{macrocode}
+\keys_define:nn { NiceMatrix }
+  { CodeAfter / rules .inherit:n = NiceMatrix / rules }
 \keys_define:nn { NiceMatrix / CodeAfter }
   {
-    sub-matrix .code:n = 
-     \keys_set:nn { NiceMatrix / sub-matrix } { #1 } ,
+    sub-matrix .code:n = \keys_set:nn { NiceMatrix / sub-matrix } { #1 } , 
     sub-matrix .value_required:n = true ,
-    delimiters-color .tl_set:N = \l_@@_delimiters_color_tl ,
-    delimiters-color .value_required:n = true ,
+    delimiters / color .tl_set:N = \l_@@_delimiters_color_tl ,
+    delimiters / color .value_required:n = true ,
+    rules .code:n = \keys_set:nn { NiceMatrix / rules } { #1 } ,
+    rules .value_required:n = true ,
     unknown .code:n = \@@_error:n { Unknown~key~for~CodeAfter }
   }
 %    \end{macrocode}
@@ -14034,8 +14084,7 @@
 % If this is really the end of the current environment (of \pkg{nicematrix}), we
 % put back the command |\end| and its argument in the TeX flow.
 %    \begin{macrocode}
-    \str_if_eq:eeTF \@currenvir { #1 } 
-      { \end { #1 } }
+    \str_if_eq:eeTF \@currenvir { #1 } { \end { #1 } }
 %    \end{macrocode}
 % If this is not the |\end| we are looking for, we put those tokens in
 % |\g_nicematrix_code_after_tl| and we go on searching for the next command
@@ -14147,7 +14196,7 @@
   } 
 %    \end{macrocode}
 %
-% \subsection*{The command SubMatrix}
+% \subsection*{The command \textbackslash SubMatrix}
 %
 % 
 %    \begin{macrocode}
@@ -14161,15 +14210,15 @@
     right-xshift .value_required:n = true ,
     xshift .meta:n = { left-xshift = #1, right-xshift = #1 } ,
     xshift .value_required:n = true ,
-    delimiters-color .tl_set:N = \l_@@_delimiters_color_tl ,
-    delimiters-color .value_required:n = true ,
+    delimiters / color .tl_set:N = \l_@@_delimiters_color_tl ,
+    delimiters / color .value_required:n = true ,
     slim .bool_set:N = \l_@@_submatrix_slim_bool ,
     slim .default:n = true ,
   }
 \keys_define:nn { NiceMatrix }
   { 
-    SubMatrix .inherit:n = NiceMatrix /sub-matrix ,
-    CodeAfter / sub-matrix .inherit:n = NiceMatrix / sub-matrix 
+    SubMatrix .inherit:n = NiceMatrix / sub-matrix ,
+    CodeAfter / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
   }
 %    \end{macrocode}
 %
@@ -14179,6 +14228,10 @@
 %    \begin{macrocode}
 \keys_define:nn { NiceMatrix / SubMatrix }
   {
+    hlines .clist_set:N = \l_@@_submatrix_hlines_clist ,
+    hlines .default:n = all ,
+    vlines .clist_set:N = \l_@@_submatrix_vlines_clist ,
+    vlines .default:n = all ,
     name .code:n = 
       \tl_if_empty:nTF { #1 } 
         { \@@_error:n { Invalid~name~format } }
@@ -14194,6 +14247,8 @@
             }
             { \@@_error:n { Invalid~name~format } }
         } ,
+    rules .code:n = \keys_set:nn { NiceMatrix / rules } { #1 } ,
+    rules .value_required:n = true ,
     name .value_required:n = true ,
     unknown .code:n = \@@_error:n { Unknown~key~for~SubMatrix }
   }
@@ -14205,7 +14260,7 @@
 % \begin{itemize}
 % \item |#1| is the left delimiter;
 % \item |#2| is the upper-left cell of the matrix with the format $i$-$j$;
-% \item |#2| is the lower-right cell of the matrix with the format $i$-$j$;
+% \item |#3| is the lower-right cell of the matrix with the format $i$-$j$;
 % \item |#4| is the right delimiter;
 % \item |#5| is the list of options of the command.
 % \end{itemize}
@@ -14229,9 +14284,6 @@
       { \int_compare_p:nNn \l_tmpd_tl > \g_@@_col_total_int }
       { \@@_error:n { SubMatrix~too~large } }
       {
-        \dim_zero_new:N \l_@@_submatrix_extra_height_dim
-        \dim_zero_new:N \l_@@_submatrix_left_xshift_dim
-        \dim_zero_new:N \l_@@_submatrix_right_xshift_dim
         \str_clear_new:N \l_@@_submatrix_name_str
         \keys_set:nn { NiceMatrix / SubMatrix } { #5 }
         \pgfpicture 
@@ -14293,6 +14345,109 @@
         \dim_set_eq:NN \nulldelimiterspace \c_zero_dim
 %    \end{macrocode}
 %
+% \bigskip
+% We will draw the rules in the |\SubMatrix|.
+%    \begin{macrocode}
+        \group_begin:
+        \pgfsetlinewidth { 1.1 \arrayrulewidth }
+        \tl_if_empty:NF \l_@@_rules_color_tl
+          { \exp_after:wN \@@_set_CT at arc@: \l_@@_rules_color_tl \q_stop }
+        \CT at arc@ 
+%    \end{macrocode}
+% Now, we draw the potential vertical rules specified in the preamble of the
+% environments with the letter fixed with the key |vlines-in-sub-matrix|. The
+% list of the columns where there is such rule to draw is in |\g_@@_cols_vlism_seq|.
+%    \begin{macrocode}
+        \seq_map_inline:Nn \g_@@_cols_vlism_seq 
+          {
+            \int_compare:nNnT \l_tmpb_tl < { ##1 } 
+              { 
+                \int_compare:nNnT { ##1 } < { \int_eval:n { \l_tmpd_tl + 1 } }
+                  {
+%    \end{macrocode}
+% First, we extract the value of the abscissa of the rule we have to draw.
+%    \begin{macrocode}
+                    \@@_qpoint:n { col - ##1 }
+                    \pgfpathmoveto { \pgfpoint \pgf at x \l_@@_y_initial_dim }
+                    \pgfpathlineto { \pgfpoint \pgf at x \l_@@_y_final_dim }
+                    \pgfusepathqstroke
+                  }
+              }
+          }
+%    \end{macrocode} 
+%
+% \medskip
+% Now, we draw the vertical rules specified in the key |vlines| of |\SubMatrix|.
+% The last argument of |\int_step_inline:nn| or |\clist_map_inline:Nn| is given
+% by curryfication.
+%    \begin{macrocode}
+        \tl_if_eq:NnTF \l_@@_submatrix_vlines_clist { all }
+          { \int_step_inline:nn { \l_tmpd_tl - \l_tmpb_tl } }
+          { \clist_map_inline:Nn \l_@@_submatrix_vlines_clist }
+          {
+            \bool_lazy_and:nnTF
+              { \int_compare_p:nNn { ##1 } > 0 }
+              { \int_compare_p:nNn { ##1 } < { \l_tmpd_tl - \l_tmpb_tl + 1 } }
+              {
+                \@@_qpoint:n { col - \int_eval:n { ##1 + \l_tmpb_tl } }
+                \pgfpathmoveto { \pgfpoint \pgf at x \l_@@_y_initial_dim }
+                \pgfpathlineto { \pgfpoint \pgf at x \l_@@_y_final_dim }
+                \pgfusepathqstroke
+              }
+              { \@@_error:nnn { Wrong~line~in~SubMatrix } { vertical } { ##1 } }
+          }
+%    \end{macrocode}
+%
+% \medskip
+% Now, we draw the horizontal rules specified in the key |hlines| of
+% |\SubMatrix|.
+% The last argument of |\int_step_inline:nn| or |\clist_map_inline:Nn| is given
+% by curryfication.
+%    \begin{macrocode}
+        \tl_if_eq:NnTF \l_@@_submatrix_hlines_clist { all }
+          { \int_step_inline:nn { \l_tmpc_tl - \l_tmpa_tl } }
+          { \clist_map_inline:Nn \l_@@_submatrix_hlines_clist }
+          {
+            \bool_lazy_and:nnTF
+              { \int_compare_p:nNn { ##1 } > 0 }
+              { \int_compare_p:nNn { ##1 } < { \l_tmpc_tl - \l_tmpa_tl + 1 } }
+              {
+                \@@_qpoint:n { row - \int_eval:n { ##1 + \l_tmpa_tl } }
+%    \end{macrocode}
+% We use a group to protect |\l_tmpa_dim| and |\l_tmpb_dim|.
+%    \begin{macrocode}
+                \group_begin:
+%    \end{macrocode}
+% We compute in |\l_tmpa_dim| the $x$-value of the left end of the rule.
+%    \begin{macrocode}
+                \dim_set:Nn \l_tmpa_dim 
+                  { \l_@@_x_initial_dim - \l_@@_submatrix_left_xshift_dim }
+                \str_case:nn { #1 }
+                  {    
+                    (  { \dim_sub:Nn \l_tmpa_dim { 0.9 mm } }
+                    [  { \dim_sub:Nn \l_tmpa_dim { 0.2 mm } }
+                    \{ { \dim_sub:Nn \l_tmpa_dim { 0.9 mm } }
+                  }
+                \pgfpathmoveto { \pgfpoint \l_tmpa_dim \pgf at y }
+%    \end{macrocode}
+% We compute in |\l_tmpb_dim| the $x$-value of the right end of the rule.
+%    \begin{macrocode}
+                \dim_set:Nn \l_tmpb_dim 
+                  { \l_@@_x_final_dim + \l_@@_submatrix_right_xshift_dim }
+                \str_case:nn { #4 }
+                  {    
+                    )  { \dim_add:Nn \l_tmpb_dim { 0.9 mm } }
+                    ]  { \dim_add:Nn \l_tmpb_dim { 0.2 mm } }
+                    \} { \dim_add:Nn \l_tmpb_dim { 0.9 mm } }
+                  }
+                \pgfpathlineto { \pgfpoint \l_tmpb_dim \pgf at y }
+                \pgfusepathqstroke
+                \group_end:
+              }
+              { \@@_error:nnn { Wrong~line~in~SubMatrix } { horizontal } { ##1 } }
+          }
+%    \end{macrocode}
+% 
 % \medskip 
 % If the key |name| has been used for the command |\SubMatrix|, we create a PGF
 % node with that name for the submatrix (this node does not take into account
@@ -14304,7 +14459,9 @@
               \l_@@_x_initial_dim \l_@@_y_initial_dim
               \l_@@_x_final_dim \l_@@_y_final_dim
           }
+        \group_end:
 %    \end{macrocode}
+% The group was for |\CT at arc@| (the color of the rules).
 %
 % \medskip
 % Now, we deal with the left delimiter. Of course, the environment
@@ -14405,6 +14562,9 @@
   }
 %    \end{macrocode}
 % 
+%
+% 
+% 
 % \bigskip
 % \subsection*{We process the options at package loading}
 %
@@ -14420,7 +14580,6 @@
 % instruction is executed. 
 %
 % \medskip
-%% \medskip
 % The boolean |\g_@@_footnotehyper_bool| will indicate if the option
 % |footnotehyper| is used.
 %    \begin{macrocode}
@@ -14692,9 +14851,9 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\@@_msg_new:nn { Unknown~option~for~xdots } 
+\@@_msg_new:nn { Unknown~key~for~xdots } 
   {
-    As~for~now~there~is~only~three~key~available~here:~'color',~'line-style'~
+    As~for~now,~there~is~only~three~key~available~here:~'color',~'line-style'~
     and~'shorten'~(and~you~try~to~use~'\l_keys_key_str').~If~you~go~on,~
     this~key~will~be~ignored.
   }
@@ -14701,9 +14860,9 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\@@_msg_new:nn { Unknown~option~for~rowcolors } 
+\@@_msg_new:nn { Unknown~key~for~rowcolors } 
   {
-    As~for~now~there~is~only~two~keys~available~here:~'cols'~and~'respect-blocks'~ 
+    As~for~now,~there~is~only~two~keys~available~here:~'cols'~and~'respect-blocks'~ 
     (and~you~try~to~use~'\l_keys_key_str').~If~you~go~on,~
     this~key~will~be~ignored. 
   }
@@ -14714,8 +14873,8 @@
   {
     The~key~'color'~for~the~command~\token_to_str:N \Block\ 
     is~deprecated:~you~should~use~'fill'~instead.\\
-    You~can~go~on~for~this~time~but~remember~that~that~key~
-    will~be~deleted~in~a~future~version.
+    This~error~is~fatal.
+
   }
 %    \end{macrocode}
 %
@@ -14782,6 +14941,15 @@
     If~you~go~on,~this~key~will~be~ignored.
   }
 %    \end{macrocode}
+%
+%    \begin{macrocode}
+\@@_msg_new:nn { Wrong~line~in~SubMatrix } 
+  { 
+    You~try~to~draw~a~#1~line~of~number~'#2'~in~a~
+    \token_to_str:N \SubMatrix\ of~your~\@@_full_name_env:\ but~that~  
+    number~is~not~valid.~If~you~go~on,~it~will~be~ignored.
+  }
+%    \end{macrocode}
 % 
 %    \begin{macrocode}
 \@@_msg_new:nn { empty~environment }
@@ -14798,7 +14966,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\@@_msg_new:nn { unknown~cell~for~line~in~code-after }
+\@@_msg_new:nn { unknown~cell~for~line~in~CodeAfter }
   {
     Your~command~\token_to_str:N\line\{#1\}\{#2\}~in~the~'code-after'~
     can't~be~executed~because~a~cell~doesn't~exist.\\
@@ -14947,7 +15115,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\@@_msg_new:nn { Bad~value~for~letter~for~dotted~lines }
+\@@_msg_new:nn { One~letter~allowed }
   { 
     The~value~of~key~'\l_keys_key_str'~must~be~of~length~1.\\
     If~you~go~on,~it~will~be~ignored. 
@@ -14978,7 +15146,8 @@
   }
   {
     The~available~keys~are~(in~alphabetic~order):~
-    delimiters-color,~
+    delimiters/color,~
+    rules~(with~the~subkeys~'color'~and~'width'),~
     sub-matrix~(several~subkeys)~
     and~xdots~(several~subkeys).~
     The~latter~is~for~the~command~\token_to_str:N \line.
@@ -14986,13 +15155,26 @@
 %    \end{macrocode}
 % 
 %    \begin{macrocode}
-\@@_msg_new:nn { Unknown~key~for~SubMatrix }
+\@@_msg_new:nnn { Unknown~key~for~SubMatrix }
   {
     The~key~'\l_keys_key_str'~is~unknown.\\
-    The~only~keys~available~here~are~'delimiters-color',~'extra-height',~ 
-    'left-xshift',~'name',~'right-xshift',~'slim'~and~'xshift'.\\
     If~you~go~on,~this~key~will~be~ignored. \\
+    For~a~list~of~the~available~keys~in~\token_to_str:N
+    \SubMatrix,~type~H~<return>. 
   }
+  {
+    The~available~keys~are~(in~alphabetic~order):~
+    'delimiters/color',~
+    'extra-height',~
+    'hlines',~
+    'left-xshift',~
+    'name',~
+    'right-xshift',~
+    'rules'~(with~the~subkeys~'color'~and~'width'),~
+    'slim',~
+    'vlines'~and~'xshift'~(which~set~both~'left-xshift'~
+    and~'right-xshift').\\
+  }
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -15037,7 +15219,7 @@
     create-extra-nodes,~
     create-medium-nodes,~
     create-large-nodes,~
-    delimiters-color,~
+    delimiters/color,~
     end-of-row,~
     first-col,~
     first-row,~
@@ -15054,6 +15236,7 @@
     renew-dots,~
     renew-matrix,~
     right-margin,~
+    rules~(with~the~subkeys~'color'~and~'width'),~
     small,~
     sub-matrix~(several~subkeys),
     vlines,~
@@ -15087,7 +15270,7 @@
     create-extra-nodes,~
     create-medium-nodes,~
     create-large-nodes,~
-    delimiters-color,~
+    delimiters/color,~
     extra-left-margin,~
     extra-right-margin,~
     first-col,~
@@ -15105,8 +15288,7 @@
     nullify-dots,~
     renew-dots,~
     right-margin,~
-    rules/color,~
-    rules/width,~
+    rules~(with~the~subkeys~'color'~and~'width'),~
     small,~
     t,~
     vlines,~
@@ -15146,7 +15328,7 @@
     create-extra-nodes,~
     create-medium-nodes,~
     create-large-nodes,~
-    delimiters-color,~
+    delimiters/color,~
     extra-left-margin,~
     extra-right-margin,~
     first-col,~
@@ -15164,8 +15346,7 @@
     r,~
     renew-dots,~
     right-margin,~
-    rules/color,~
-    rules/width,~
+    rules~(with~the~subkeys~'color'~and~'width'),~
     small,~
     t,~
     vlines,~
@@ -15218,8 +15399,7 @@
     nullify-dots,~
     renew-dots,~
     right-margin,~
-    rules/color,~
-    rules/width,~
+    rules~(with~the~subkeys~'color'~and~'width'),~
     t,~
     vlines,~
     xdots/color,~
@@ -15523,7 +15703,7 @@
 %
 % The option |dotted-lines-margin| has been renamed in |xdots/shorten| and the
 % options |xdots/color| and |xdots/line-style| have been added for a complete
-% customization of the dotted lines.
+% customisation of the dotted lines.
 %
 % In the environments without preamble (|{NiceMatrix}|, |{pNiceMatrix}|, etc.),
 % it's possible to use the options |l| (=|L|) or |r| (=|R|) to specify the type
@@ -15615,8 +15795,8 @@
 %
 % The variable |\g_nicematrix_code_before_tl| is now public.
 %
-% The key |baseline| can take in as value of the form \textsl{line-i} to align
-% the |\hline| in the row \textsl{i}.
+% The key |baseline| may take in as value an expression of the form
+% \textsl{line-i} to align the |\hline| in the row \textsl{i}.
 %
 % The key |hvlines-except-corners| may take in as value a list of corners (eg: NW,SE).
 %
@@ -15679,6 +15859,12 @@
 % A (non fatal) error is raised when the key |transparent|, which is
 % deprecated, is used.
 %
+% \subsection*{Changes between versions 5.10 and 5.11}
+%
+% It's now possible, in the |code-before| and in the |\CodeAfter|, to use the
+% syntax \verb+|(i-|j)+ for the Tikz node at the intersection of the (potential)
+% horizontal rule number~$i$ and the (potential) vertical rule number~$j$.
+% 
 % \PrintIndex
 % 
 % \tableofcontents

Modified: branches/branch2020/Master/texmf-dist/source/latex/spath3/spath3_code.dtx
===================================================================
--- branches/branch2020/Master/texmf-dist/source/latex/spath3/spath3_code.dtx	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/source/latex/spath3/spath3_code.dtx	2021-02-24 18:00:42 UTC (rev 57872)
@@ -143,7 +143,7 @@
 %</driver>
 % \fi
 %
-% \CheckSum{8404}
+% \CheckSum{8929}
 %
 % \CharacterTable
 %  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -168,6 +168,7 @@
 % \changes{1.4}{2020/12/18}{A fair amount of code reimplementation and reorganisation, together with defining TikZ keys to make functions available for use.}
 % \changes{2.0}{2021/01/19}{Refactored the code to remove the OO approach and make it functional, introduced the spath3 TikZ library to provide a user interface.}
 % \changes{2.2}{2021/02/05}{Bugfixes and improvements, mainly with regard to the intersection and splitting routines.}
+% \changes{2.4}{2021/02/21}{Rejigged how the routines for using paths were implemented, added some more routines for joining paths.}
 %
 % \DoNotIndex{\newcommand,\newenvironment}
 %
@@ -256,7 +257,7 @@
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}
 \RequirePackage{pgf}
-\ProvidesExplPackage {spath3} {2021/02/05} {2.2} {Functions for
+\ProvidesExplPackage {spath3} {2021/02/21} {2.4} {Functions for
 manipulating PGF soft paths}
 \RequirePackage{xparse}
 %    \end{macrocode}
@@ -1756,7 +1757,7 @@
 {
   \spath_splice_between:NVnn #1#1{#2}{#3}
 }
-\cs_generate_variant:Nn \spath_splice_between:Nnn {NVV, cnn, cvv, Nvn}
+\cs_generate_variant:Nn \spath_splice_between:Nnn {NVV, cnn, cvv, Nvn, NVn}
 \cs_new_protected_nopar:Npn \spath_gsplice_between:Nnnn #1#2#3#4
 {
   \@@_splice_between:nnn {#2}{#3}{#4}
@@ -1768,7 +1769,7 @@
 {
   \spath_gsplice_between:NVnn #1#1{#2}{#3}
 }
-\cs_generate_variant:Nn \spath_gsplice_between:Nnn {NVV, cnn, cvv}
+\cs_generate_variant:Nn \spath_gsplice_between:Nnn {NVV, cnn, cvv, Nvn, NVn}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1919,7 +1920,7 @@
 {
   \spath_append_no_move:NVn #1#1{#2}
 }
-\cs_generate_variant:Nn \spath_append_no_move:Nn {NV, cv, Nv}
+\cs_generate_variant:Nn \spath_append_no_move:Nn {NV, cv, Nv, cV}
 \cs_new_protected_nopar:Npn \spath_gappend_no_move:Nnn #1#2#3
 {
   \@@_append_no_move:nn {#2}{#3}
@@ -1931,7 +1932,7 @@
 {
   \spath_gappend_no_move:NVn #1#1{#2}
 }
-\cs_generate_variant:Nn \spath_gappend_no_move:Nn {NV, cv, Nv}
+\cs_generate_variant:Nn \spath_gappend_no_move:Nn {NV, cv, Nv, cV}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1953,7 +1954,7 @@
 {
   \spath_append:NVn #1#1{#2}
 }
-\cs_generate_variant:Nn \spath_append:Nn {NV, Nv, cv}
+\cs_generate_variant:Nn \spath_append:Nn {NV, Nv, cv, cV}
 \cs_new_protected_nopar:Npn \spath_gappend:Nnn #1#2#3
 {
   \tl_gset:Nn #1 {#2}
@@ -1964,7 +1965,7 @@
 {
   \spath_gappend:NVn #1#1{#2}
 }
-\cs_generate_variant:Nn \spath_gappend:Nn {NV, Nv, cv}
+\cs_generate_variant:Nn \spath_gappend:Nn {NV, Nv, cv, cV}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2235,6 +2236,128 @@
 % \end{macro}
 %
 % \begin{macro}[internal]{
+% \spath_replace_lines:Nn,
+% \spath_replace_lines:Nn,
+% \spath_replace_lines:Nn,
+% \spath_replace_lines:Nn,
+% }
+% Replace any line segments by B\'ezier curves.
+%    \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_replace_lines:n #1
+{
+  \group_begin:
+  \tl_set:Nn \l_@@_tmpa_tl {#1}
+  \tl_clear:N \l_@@_tmpb_tl
+  \dim_set:Nn \l_@@_tmpa_dim {0pt}
+  \dim_set:Nn \l_@@_tmpb_dim {0pt}
+
+  \bool_do_until:nn
+  {
+    \tl_if_empty_p:N \l_@@_tmpa_tl
+  }
+  {
+    \tl_set:Nx \l_@@_tmpc_tl {\tl_item:Nn \l_@@_tmpa_tl {1}}
+    \tl_set:Nx \l_@@_tmpd_tl {\tl_item:Nn \l_@@_tmpa_tl {2}}
+    \tl_set:Nx \l_@@_tmpe_tl {\tl_item:Nn \l_@@_tmpa_tl {3}}
+
+    \tl_if_eq:NNTF \l_@@_tmpc_tl \c_spath_lineto_tl
+    {
+      \tl_put_right:NV \l_@@_tmpb_tl \c_spath_curvetoa_tl
+      \tl_put_right:Nx \l_@@_tmpb_tl
+      {
+        {
+          \fp_to_dim:n
+          {
+            2/3 * (\l_@@_tmpa_dim)
+            +
+            1/3 * (\l_@@_tmpd_tl)
+          }
+        }
+      }
+      \tl_put_right:Nx \l_@@_tmpb_tl
+      {
+        {
+          \fp_to_dim:n
+          {
+            2/3 * (\l_@@_tmpb_dim)
+            +
+            1/3 * (\l_@@_tmpe_tl)
+          }
+        }
+      }
+      \tl_put_right:NV \l_@@_tmpb_tl \c_spath_curvetob_tl
+      \tl_put_right:Nx \l_@@_tmpb_tl
+      {
+        {
+          \fp_to_dim:n
+          {
+            1/3 * (\l_@@_tmpa_dim)
+            +
+            2/3 * (\l_@@_tmpd_tl)
+          }
+        }
+      }
+      \tl_put_right:Nx \l_@@_tmpb_tl
+      {
+        {
+          \fp_to_dim:n
+          {
+            1/3 * (\l_@@_tmpb_dim)
+            +
+            2/3 * (\l_@@_tmpe_tl)
+          }
+        }
+      }
+      \tl_put_right:NV \l_@@_tmpb_tl \c_spath_curveto_tl
+      \@@_tl_put_right_braced:NV \l_@@_tmpb_tl \l_@@_tmpd_tl
+      \@@_tl_put_right_braced:NV \l_@@_tmpb_tl \l_@@_tmpe_tl
+    }
+    {
+      \tl_put_right:NV \l_@@_tmpb_tl \l_@@_tmpc_tl
+      \@@_tl_put_right_braced:NV \l_@@_tmpb_tl \l_@@_tmpd_tl
+      \@@_tl_put_right_braced:NV \l_@@_tmpb_tl \l_@@_tmpe_tl
+    }
+
+    \dim_set:Nn \l_@@_tmpa_dim {\l_@@_tmpd_tl}
+    \dim_set:Nn \l_@@_tmpb_dim {\l_@@_tmpe_tl}
+    
+    \prg_replicate:nn {3}
+    {
+      \tl_set:Nx \l_@@_tmpa_tl {\tl_tail:N \l_@@_tmpa_tl}
+    }
+  }
+  \tl_gset_eq:NN \g_@@_output_tl \l_@@_tmpb_tl
+  \group_end:
+}
+\cs_generate_variant:Nn \@@_replace_lines:n {V}
+\cs_new_protected_nopar:Npn \spath_replace_lines:Nn #1#2
+{
+  \@@_replace_lines:n {#2}
+  \tl_set_eq:NN #1 \g_@@_output_tl
+  \tl_gclear:N \g_@@_output_tl
+}
+\cs_generate_variant:Nn \spath_replace_lines:Nn {NV, cV, cv, Nv}
+\cs_new_protected_nopar:Npn \spath_replace_lines:N #1
+{
+  \spath_replace_lines:NV #1#1
+}
+\cs_generate_variant:Nn \spath_replace_lines:N {c}
+\cs_new_protected_nopar:Npn \spath_greplace_lines:Nn #1#2
+{
+  \@@_replace_lines:n {#2}
+  \tl_gset_eq:NN #1 \g_@@_output_tl
+  \tl_gclear:N \g_@@_output_tl
+}
+\cs_generate_variant:Nn \spath_greplace_lines:Nn {NV, cV, cv, Nv}
+\cs_new_protected_nopar:Npn \spath_greplace_lines:N #1
+{
+  \spath_greplace_lines:NV #1#1
+}
+\cs_generate_variant:Nn \spath_greplace_lines:N {c}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{
 % \spath_remove_empty_components:Nn,
 % \spath_remove_empty_components:N,
 % \spath_gremove_empty_components:Nn,
@@ -4709,9 +4832,9 @@
 \cs_generate_variant:Nn \spath_show:n {V, v}
 %    \end{macrocode}
 % \end{macro}
-
-% \subsubsection{PGF and TikZ Interface Functions}
 %
+% \subsection{PGF and TikZ Interface Functions}
+%
 % Spaths come from PGF so we need some functions that get and set spaths from the pgf system.
 %
 % \begin{macro}[internal]{
@@ -4845,6 +4968,7 @@
   \tl_clear_new:c {tikz at timer}
   \tl_set:cn {tikz at timer}
   {
+    \pgftransformreset
     \spath_reallength:Nn \l_@@_tmpa_int {#1}
     \tl_set_eq:Nc \l_@@_tmpb_tl {tikz at time}
     \tl_set:Nx \l_@@_tmpb_tl
@@ -4927,7 +5051,10 @@
 %
 %    \begin{macrocode}
 \msg_new:nnn { spath3 } { missing soft path } { Soft~ path~ #1~ doesn't~ exist }
-\msg_new:nnn { spath3 } { empty soft path } { Soft~ path~ #1~ is~ empty }
+\msg_new:nnnn { spath3 } { empty soft path } { Soft~ path~ #1~ is~ empty}
+{If~ it~ was~ defined~ inside~ a~ group,~ try~ using~ "save~ global". }
+\msg_new:nnn { spath3 } { load intersections }
+{ You~ need~ to~ load~ the~ "intersections"~ library~ to~ work~ with~ intersections }
 %    \end{macrocode}
 %
 % When saving a soft path, by default we use a naming convention that is compatible with the intersections library so that paths saved here and paths saved by the \texttt{name path} facility of the intersections library are mutually exchangeable.
@@ -4990,6 +5117,73 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}[internal]{
+% \@@_tikzset:n
+% }
+% Wrapper around \Verb+\tikzset+ for expansion.
+% \begin{macrocode}
+\cs_set_eq:NN \@@_tikzset:n \tikzset
+\cs_generate_variant:Nn \@@_tikzset:n {V, v}
+%    \end{macrocode}
+% \end{macro}
+%
+% When joining two paths we provide a set of options for how to process the second path.
+%
+%    \begin{macrocode}
+\bool_new:N \l_@@_reverse_bool
+\bool_new:N \l_@@_weld_bool
+\bool_new:N \l_@@_move_bool
+\bool_new:N \l_@@_global_bool
+\tl_new:N \l_@@_joinpath_tl
+\tl_new:N \l_@@_transformation_tl
+
+\cs_new_protected_nopar:Npn \@@_set_bool:Nn #1#2
+{
+  \tl_if_eq:nnTF {#2}{false}
+  {
+    \bool_set_false:N #1
+  }
+  {
+    \bool_set_true:N #1
+  }
+}
+\tikzset {
+  spath/join/.is~ family,
+  spath/join/.cd,
+  reverse/.code = {
+    \@@_set_bool:Nn \l_@@_reverse_bool {#1}
+  },
+  reverse/.default = true,
+  weld/.code = {
+    \@@_set_bool:Nn \l_@@_weld_bool {#1}
+  },
+  weld/.default = true,
+  no~ weld/.code = {
+    \@@_set_bool:Nn \l_@@_weld_bool {#1}
+    \bool_set:Nn \l_@@_weld_bool {! \l_@@_weld_bool}
+  },
+  no~ weld/.default = true,
+  move/.code = {
+    \@@_set_bool:Nn \l_@@_move_bool {#1}
+  },
+  move/.default = true,
+  no~ move/.code = {
+    \@@_set_bool:Nn \l_@@_move_bool {#1}
+    \bool_set:Nn \l_@@_move_bool {! \l_@@_move_bool}
+  },
+  no~ move/.default = true,
+  global/.code = {
+    \@@_set_bool:Nn \l_@@_global_bool {#1}
+  },
+  global/.default = true,
+  transform/.store~in=\l_@@_transformation_tl,
+  .unknown/.code = {
+    \tl_set_eq:NN \l_@@_joinpath_tl \pgfkeyscurrentname
+  }
+}
+%    \end{macrocode}
+%
+%
 % When we split a soft path into components, we make it a comma separated list so that it can be fed into a \Verb+\foreach+ loop.
 % This can also make it possible to extract a single component, but to do this we need a wrapper around \Verb+\clist_item:Nn+ (there doesn't appear to be a PGF way of getting an item of a CS list).
 %
@@ -5042,6 +5236,15 @@
       \l_@@_tmpa_tl
     }
   },
+  save~ global/.code={
+    \tikz at addmode{
+      \spath_get_current_path:N \l_@@_tmpa_tl
+      \spath_bake_round:NV \l_@@_tmpa_tl \l_@@_tmpa_tl
+      \spath_gsave_path:cV
+      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+      \l_@@_tmpa_tl
+    }
+  },
   clone/.code~ 2~ args={
     \tl_if_exist:cTF
     {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
@@ -5070,15 +5273,6 @@
       \msg_warning:nnn { spath3 } { missing soft path } { #2 }
     }
   },
-  save~ global/.code={
-    \tikz at addmode{
-      \spath_get_current_path:N \l_@@_tmpa_tl
-      \spath_bake_round:NV \l_@@_tmpa_tl \l_@@_tmpa_tl
-      \spath_gsave_path:cV
-      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-      \l_@@_tmpa_tl
-    }
-  },
 %    \end{macrocode}
 %
 % Saves a soft path to the aux file.
@@ -5097,77 +5291,152 @@
   },
 %    \end{macrocode}
 %
-% Restores a soft path to the current path.
+% Exports the path as an SVG file.
 %
 %    \begin{macrocode}
-  restore/.code={
+  export~ to~ svg/.code={
     \tl_if_exist:cTF
     {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
     {
-      \tl_if_empty:cTF
+      \spath_export_to_svg:nv {#1}
       {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-      {
-        \tl_clear:N \l_@@_tmpa_tl
-        \tl_put_right:NV \l_@@_tmpa_tl \c_spath_moveto_tl
-        \tl_put_right:Nn \l_@@_tmpa_tl {{0pt}{0pt}}
-        \spath_set_current_path:V \l_@@_tmpa_tl
-        \spath_set_tikz_data:V \l_@@_tmpa_tl
-        \msg_warning:nnn { spath3 } { empty soft path } { #1 }
-      }
-      {
-        \spath_set_current_path:c
-        {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-        \spath_set_tikz_data:v
-        {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-      }
     }
     {
-      \tl_clear:N \l_@@_tmpa_tl
-      \tl_put_right:NV \l_@@_tmpa_tl \c_spath_moveto_tl
-      \tl_put_right:Nn \l_@@_tmpa_tl {{0pt}{0pt}}
-      \spath_set_current_path:V \l_@@_tmpa_tl
-      \spath_set_tikz_data:V \l_@@_tmpa_tl
       \msg_warning:nnn { spath3 } { missing soft path } { #1 }
     }
   },
 %    \end{macrocode}
 %
-% Restores the reverse of a soft path to the current path.
+% Inserts the named path at the current point in the path, with options for how this is accomplished.
+% The inserted path can be transformed, reversed, moved to the current point, and welded to the current path.
+% If this is used before the path has been started then it becomes the start of the path (and the ``current point'' is taken as the origin).
 %
+%
 %    \begin{macrocode}
-  restore~ reverse/.code={
+  use/.code={
+    \bool_set_false:N \l_@@_reverse_bool
+    \bool_set_false:N \l_@@_weld_bool
+    \bool_set_false:N \l_@@_move_bool
+    \tl_clear:N \l_@@_joinpath_tl
+    \tl_clear:N \l_@@_transformation_tl
+    \tikzset{
+      spath/join/.cd,
+      #1
+    }
+
     \tl_if_exist:cTF
-    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
     {
-      \tl_if_empty:cTF
-      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+      \tl_use:N \l_@@_prefix_tl
+      \tl_use:N \l_@@_joinpath_tl
+      \tl_use:N \l_@@_suffix_tl
+    }
+    {
+      \tl_if_empty:cT
       {
-        \tl_clear:N \l_@@_tmpa_tl
-        \tl_put_right:NV \l_@@_tmpa_tl \c_spath_moveto_tl
-        \tl_put_right:Nn \l_@@_tmpa_tl {{0pt}{0pt}}
-        \spath_set_current_path:V \l_@@_tmpa_tl
-        \spath_set_tikz_data:V \l_@@_tmpa_tl
+        \tl_use:N \l_@@_prefix_tl
+        \tl_use:N \l_@@_joinpath_tl
+        \tl_use:N \l_@@_suffix_tl
+      }
+      {
         \msg_warning:nnn { spath3 } { empty soft path } { #1 }
       }
+      \tl_set_eq:Nc \l_@@_joinpath_tl
       {
-        \spath_reverse:Nv
-        \l_@@_reverse_tl
-        {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-        \spath_set_current_path:N \l_@@_reverse_tl
-        \spath_set_tikz_data:V \l_@@_reverse_tl
+        \tl_use:N \l_@@_prefix_tl
+        \tl_use:N \l_@@_joinpath_tl
+        \tl_use:N \l_@@_suffix_tl
       }
+      \spath_get_current_path:N \l_@@_current_tl
+      
+      \bool_if:NT \l_@@_reverse_bool
+      {
+        \spath_reverse:N \l_@@_joinpath_tl
+      }
+      
+      \tl_if_empty:NF \l_@@_transformation_tl
+      {
+        \group_begin:
+        \pgftransformreset
+        \@@_tikzset:V \l_@@_transformation_tl
+        \pgfgettransform \l_@@_tmpa_tl
+        \tl_gset:Nn \g_@@_smuggle_tl
+        {
+          \spath_transform:Nnnnnnn
+          \l_@@_joinpath_tl
+        }
+        \tl_gput_right:NV \g_@@_smuggle_tl \l_@@_tmpa_tl
+        \group_end:
+        \tl_use:N \g_@@_smuggle_tl
+      }
+
+      \bool_if:NT \l_@@_move_bool
+      {
+        \tl_if_empty:NTF \l_@@_current_tl
+        {
+          \tl_set:Nn \l_@@_tmpc_tl { {0pt} {0pt} }
+        }
+        {
+          \spath_finalpoint:NV
+          \l_@@_tmpc_tl
+          \l_@@_current_tl
+        }
+        \spath_translate_to:NV \l_@@_joinpath_tl \l_@@_tmpc_tl
+      }
+
+      \tl_if_empty:NTF \l_@@_current_tl
+      {
+        \tl_if_empty:NTF \l_@@_joinpath_tl
+        {
+          \tl_set_eq:NN \l_@@_current_tl \c_spath_moveto_tl
+          \tl_put_right:Nn \l_@@_current_tl {{0pt}{0pt}}
+        }
+        {
+          \tl_set_eq:NN \l_@@_current_tl \l_@@_joinpath_tl
+        }
+      }
+      {
+      
+        \tl_clear:N \l_@@_tmpa_tl
+        \tl_set:Nn \l_@@_tmpa_tl {spath_}
+
+        \tl_put_right:Nn \l_@@_tmpa_tl {append}
+
+        \bool_if:NT \l_@@_weld_bool
+        {
+          \tl_put_right:Nn \l_@@_tmpa_tl {_no_move}
+        }
+        \tl_put_right:Nn \l_@@_tmpa_tl {:NV}
+        
+        \use:c {\tl_use:N \l_@@_tmpa_tl }
+        \l_@@_current_tl
+        \l_@@_joinpath_tl
+      }
+
+      \spath_set_current_path:N \l_@@_current_tl
+      \spath_set_tikz_data:V \l_@@_joinpath_tl
     }
     {
-      \tl_clear:N \l_@@_tmpa_tl
-      \tl_put_right:NV \l_@@_tmpa_tl \c_spath_moveto_tl
-      \tl_put_right:Nn \l_@@_tmpa_tl {{0pt}{0pt}}
-      \spath_set_current_path:V \l_@@_tmpa_tl
-      \spath_set_tikz_data:V \l_@@_tmpa_tl
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      \msg_warning:nnx
+      { spath3 }
+      { missing soft path }
+      {\tl_use:N \l_@@_joinpath_tl }
     }
   },
 %    \end{macrocode}
 %
+% Some aliases for the above.
+%
+%    \begin{macrocode}
+  restore/.style={/tikz/spath/use={#1}},
+  restore~ reverse/.style={/tikz/spath/use={reverse, #1}},
+  append/.style={/tikz/spath/use={move, weld, #1}},
+  append~ no~ move/.style={/tikz/spath/use={weld, #1}},
+  append~ reverse/.style={/tikz/spath/use={move, weld, reverse, #1}},
+  append~ reverse~ no~ move/.style={/tikz/spath/use={weld, reverse, #1}},
+  insert/.style={/tikz/spath/use={#1}},
+  insert~ reverse/.style={/tikz/spath/use={reverse, #1}},
+%    \end{macrocode}
+%
 % Diagnostic, show the current path in the terminal and log.
 %
 %    \begin{macrocode}
@@ -5204,45 +5473,99 @@
   },
 %    \end{macrocode}
 %
-% Appends the named path to the current path with a weld.
+% This joins a path on to an existing path, possibly modifying it first.
+% The possible options are the same as those for \Verb+use+.
+% It is possible to specify the same path both for the initial and the joining path as a copy is made internally first.
 %
 %    \begin{macrocode}
-  append/.code={
-    \tl_if_exist:cTF
-    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-    {
-      \spath_get_current_path:N \l_@@_current_tl
-      \spath_finalpoint:NV \l_@@_tmpa_tl \l_@@_current_tl
-      \tl_set_eq:Nc
-      \l_@@_tmpb_tl
-      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-      \spath_translate_to:NV \l_@@_tmpb_tl \l_@@_tmpa_tl
-      \spath_append_no_move:NV \l_@@_current_tl \l_@@_tmpb_tl
-      \spath_set_current_path:N \l_@@_current_tl
-      \spath_set_tikz_data:V \l_@@_tmpb_tl
-    }
-    {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
-    }
-  },
-%    \end{macrocode}
-%
-% Joins the second named path to the first.
-%
-%    \begin{macrocode}
   join~ with/.code~ 2~ args={
     \tl_if_exist:cTF
     {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
     {
+      \bool_set_false:N \l_@@_reverse_bool
+      \bool_set_false:N \l_@@_weld_bool
+      \bool_set_false:N \l_@@_move_bool
+      \bool_set_false:N \l_@@_global_bool
+      \tl_clear:N \l_@@_joinpath_tl
+      \tl_clear:N \l_@@_transformation_tl
+      \tikzset{
+        spath/join/.cd,
+        #2
+      }
+
       \tl_if_exist:cTF
-      {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
       {
-        \spath_append:cv
+        \tl_use:N \l_@@_prefix_tl
+        \tl_use:N \l_@@_joinpath_tl
+        \tl_use:N \l_@@_suffix_tl
+      }
+      {
+        \tl_set_eq:Nc \l_@@_joinpath_tl
+        {
+          \tl_use:N \l_@@_prefix_tl
+          \tl_use:N \l_@@_joinpath_tl
+          \tl_use:N \l_@@_suffix_tl
+        }
+        
+        \bool_if:NT \l_@@_reverse_bool
+        {
+          \spath_reverse:N \l_@@_joinpath_tl
+        }
+
+        \tl_if_empty:NF \l_@@_transformation_tl
+        {
+          \group_begin:
+          \pgftransformreset
+          \@@_tikzset:V \l_@@_transformation_tl
+          \pgfgettransform \l_@@_tmpa_tl
+          \tl_gset:Nn \g_@@_smuggle_tl
+          {
+            \spath_transform:Nnnnnnn
+            \l_@@_joinpath_tl
+          }
+          \tl_gput_right:NV \g_@@_smuggle_tl \l_@@_tmpa_tl
+          \group_end:
+          \tl_use:N \g_@@_smuggle_tl
+        }
+
+        \bool_if:NT \l_@@_move_bool
+        {
+          \spath_finalpoint:Nv
+          \l_@@_tmpc_tl
+          {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+          \spath_translate_to:NV \l_@@_joinpath_tl \l_@@_tmpc_tl
+        }
+
+        \tl_clear:N \l_@@_tmpa_tl
+        \tl_set:Nn \l_@@_tmpa_tl {spath_}
+
+        \bool_if:NT \l_@@_global_bool
+        {
+          \tl_put_right:Nn \l_@@_tmpa_tl {g}
+        }
+
+        \tl_put_right:Nn \l_@@_tmpa_tl {append}
+
+        \bool_if:NT \l_@@_weld_bool
+        {
+          \tl_put_right:Nn \l_@@_tmpa_tl {_no_move}
+        }
+        \tl_put_right:Nn \l_@@_tmpa_tl {:cV}
+
+        \cs_if_exist:cF {\tl_use:N \l_@@_tmpa_tl}
+        {
+          \tl_show:N \l_@@_tmpa_tl
+        }
+        
+        \use:c {\tl_use:N \l_@@_tmpa_tl }
         {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-        {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
+        \l_@@_joinpath_tl
       }
       {
-        \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        \msg_warning:nnx
+        { spath3 }
+        { missing soft path }
+        {\tl_use:N \l_@@_joinpath_tl }
       }
     }
     {
@@ -5305,113 +5628,6 @@
   },
 %    \end{macrocode}
 %
-% Appends the reversal of the path to the current path.
-%
-%    \begin{macrocode}
-  append~ reverse/.code={
-    \tl_if_exist:cTF
-    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-    {
-      \spath_reverse:Nv
-      \l_@@_reverse_tl
-      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-      \spath_get_current_path:N \l_@@_current_tl
-      \spath_finalpoint:NV \l_@@_tmpa_tl \l_@@_current_tl
-      \spath_translate_to:NV \l_@@_reverse_tl \l_@@_tmpa_tl
-      \spath_append_no_move:NV \l_@@_current_tl \l_@@_reverse_tl
-      \spath_set_current_path:N \l_@@_current_tl
-      \spath_set_tikz_data:V \l_@@_reverse_tl
-    }
-    {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
-    }
-  },    
-%    \end{macrocode}
-%
-% Inserts the named path into the current path as-is, meaning without transforming or welding it.
-%
-%    \begin{macrocode}
-  insert/.code={
-    \tl_if_exist:cTF
-    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-    {
-      \spath_get_current_path:N \l_@@_current_tl
-      \spath_append:Nv
-      \l_@@_current_tl
-      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-      \spath_set_current_path:N \l_@@_current_tl
-      \spath_set_tikz_data:v
-      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-    }
-    {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
-    }
-  },
-%    \end{macrocode}
-%
-% Inserts the reverse of the named path.
-% 
-%    \begin{macrocode}
-  insert~ reverse/.code={
-    \tl_if_exist:cTF
-    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-    {
-      \spath_reverse:Nv
-      \l_@@_reverse_tl
-      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-      \spath_get_current_path:N \l_@@_current_tl
-      \spath_append:NV \l_@@_current_tl \l_@@_reverse_tl
-      \spath_set_current_path:N \l_@@_current_tl
-      \spath_set_tikz_data:V \l_@@_reverse_tl
-    }
-    {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
-    }
-  },
-%    \end{macrocode}
-%
-% Appends the named path to the current path without translating it.
-%
-%    \begin{macrocode}
-  append~ no~ move/.code={
-    \tl_if_exist:cTF
-    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-    {
-      \spath_get_current_path:N \l_@@_current_tl
-      \spath_append_no_move:Nv
-      \l_@@_current_tl
-      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-      \spath_set_current_path:N \l_@@_current_tl
-      \spath_set_tikz_data:v
-      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-    }
-    {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
-    }
-  },
-%    \end{macrocode}
-%
-% Appends the reverse of the named path without translating it.
-% 
-%    \begin{macrocode}
-  append~ reverse~ no~ move/.code={
-    \tl_if_exist:cTF
-    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-    {
-      \spath_reverse:Nv
-      \l_@@_reverse_tl
-      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-      \spath_get_current_path:N \l_@@_current_tl
-      \spath_append_no_move:NV \l_@@_current_tl \l_@@_reverse_tl
-      \spath_set_current_path:N \l_@@_current_tl
-      \spath_set_tikz_data:V \l_@@_reverse_tl
-    }
-    {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
-    }
-  },
-%    \end{macrocode}
-%
 % Adjust a path to span between two points.
 %  
 %    \begin{macrocode}
@@ -5519,29 +5735,89 @@
 %    \end{macrocode}
 %
 % Join the components of a path by splicing in the second path whenever the components are sufficiently far apart.
+% The third argument is a list of components to splice after, if it is empty then all components are used and a spot weld is done first so that the splicing only happens if there is an actual gap.
 %
+% The \Verb+upright+ versions will join with the reflection of the splice path if it detects that the gap is ``upside-down''.
+%
+%
 %    \begin{macrocode}
   join~ components~ with/.code~2~args={
     \tl_if_exist:cTF
     {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
     {
+      \tl_if_head_is_group:nTF {#2}
+      {
+        \tl_set:Nx \l_@@_tmpc_tl { \tl_item:nn {#2} {1} }
+        \tl_set:Nx \l_@@_tmpd_tl { \tl_item:nn {#2} {2} }
+      }
+      {
+        \tl_set:Nn \l_@@_tmpc_tl {#2}
+        \tl_clear:N \l_@@_tmpd_tl
+      }
       \tl_if_exist:cTF
-      {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
       {
-        \spath_spot_weld_components:c
-        {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+        \tl_use:N \l_@@_prefix_tl
+        \tl_use:N \l_@@_tmpc_tl
+        \tl_use:N \l_@@_suffix_tl
+      }
+      {
+        \tl_if_empty:NT \l_@@_tmpd_tl
+        {
+          \spath_spot_weld_components:c
+          {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+        }
 
         \spath_components_to_seq:Nv
         \l_@@_tmpa_seq
         {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
 
+        \seq_gclear:N \g_@@_tmpa_seq
+        
+        \tl_if_empty:NTF \l_@@_tmpd_tl
+        {
+          \int_step_inline:nnnn {1}{1} {\seq_count:N \l_@@_tmpa_seq}
+          {
+            \seq_gput_right:Nn \g_@@_tmpa_seq {##1}
+          }
+        }
+        {
+          \foreach \l_@@_tmpa_tl in \l_@@_tmpd_tl
+          {
+            \seq_gput_right:NV \g_@@_tmpa_seq \l_@@_tmpa_tl
+          }
+          \seq_gsort:Nn \g_@@_tmpa_seq
+          {
+            \int_compare:nNnTF {##1} < {##2}
+            { \sort_return_same: }
+            { \sort_return_swapped: }
+          }
+        }
+
         \seq_pop_left:NN \l_@@_tmpa_seq \l_@@_tmpa_tl
-      
-        \seq_map_inline:Nn \l_@@_tmpa_seq
+        \seq_gpop_left:NN \g_@@_tmpa_seq \l_@@_tmpb_tl
+
+        \seq_map_indexed_inline:Nn \l_@@_tmpa_seq
         {
-          \spath_splice_between:Nvn \l_@@_tmpa_tl
-          {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
-          {##1}
+          \int_compare:nTF
+          {
+            ##1 == \l_@@_tmpb_tl
+          }
+          {
+            \seq_gpop_left:NNF \g_@@_tmpa_seq \l_@@_tmpb_tl
+            {
+              \tl_set:Nn \l_@@_tmpb_tl {-1}
+            }
+            \spath_splice_between:Nvn \l_@@_tmpa_tl
+            {
+              \tl_use:N \l_@@_prefix_tl
+              \tl_use:N \l_@@_tmpc_tl
+              \tl_use:N \l_@@_suffix_tl
+            }
+            {##2}
+          }
+          {
+            \tl_put_right:Nn \l_@@_tmpa_tl {##2}
+          }
         }
         \tl_set_eq:cN
         {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
@@ -5548,7 +5824,10 @@
         \l_@@_tmpa_tl
       }
       {
-        \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        \msg_warning:nnx
+        { spath3 }
+        { missing soft path }
+        { \tl_use:N \l_@@_tmpc_tl }
       }
     }
     {
@@ -5559,30 +5838,204 @@
     \tl_if_exist:cTF
     {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
     {
+      \tl_if_head_is_group:nTF {#2}
+      {
+        \tl_set:Nx \l_@@_tmpc_tl { \tl_item:nn {#2} {1} }
+        \tl_set:Nx \l_@@_tmpd_tl { \tl_item:nn {#2} {2} }
+      }
+      {
+        \tl_set:Nn \l_@@_tmpc_tl {#2}
+        \tl_clear:N \l_@@_tmpd_tl
+      }
       \tl_if_exist:cTF
-      {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
       {
-        \spath_spot_gweld_components:c
+        \tl_use:N \l_@@_prefix_tl
+        \tl_use:N \l_@@_tmpc_tl
+        \tl_use:N \l_@@_suffix_tl
+      }
+      {
+        \tl_if_empty:NT \l_@@_tmpd_tl
+        {
+          \spath_spot_weld_components:c
+          {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+        }
+
+        \spath_components_to_seq:Nv
+        \l_@@_tmpa_seq
         {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+
+        \seq_gclear:N \g_@@_tmpa_seq
         
+        \tl_if_empty:NTF \l_@@_tmpd_tl
+        {
+          \int_step_inline:nnnn {1}{1} {\seq_count:N \l_@@_tmpa_seq}
+          {
+            \seq_gput_right:Nn \g_@@_tmpa_seq {##1}
+          }
+        }
+        {
+          \foreach \l_@@_tmpa_tl in \l_@@_tmpd_tl
+          {
+            \seq_gput_right:NV \g_@@_tmpa_seq \l_@@_tmpa_tl
+          }
+          \seq_gsort:Nn \g_@@_tmpa_seq
+          {
+            \int_compare:nNnTF {##1} < {##2}
+            { \sort_return_same: }
+            { \sort_return_swapped: }
+          }
+        }
+
+        \seq_pop_left:NN \l_@@_tmpa_seq \l_@@_tmpa_tl
+        \seq_gpop_left:NN \g_@@_tmpa_seq \l_@@_tmpb_tl
+
+        \seq_map_indexed_inline:Nn \l_@@_tmpa_seq
+        {
+          \int_compare:nTF
+          {
+            ##1 == \l_@@_tmpb_tl
+          }
+          {
+            \seq_gpop_left:NNF \g_@@_tmpa_seq \l_@@_tmpb_tl
+            {
+              \tl_set:Nn \l_@@_tmpb_tl {-1}
+            }
+            \spath_splice_between:Nvn \l_@@_tmpa_tl
+            {
+              \tl_use:N \l_@@_prefix_tl
+              \tl_use:N \l_@@_tmpc_tl
+              \tl_use:N \l_@@_suffix_tl
+            }
+            {##2}
+          }
+          {
+            \tl_put_right:Nn \l_@@_tmpa_tl {##2}
+          }
+        }
+        \tl_gset_eq:cN
+        {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+        \l_@@_tmpa_tl
+      }
+      {
+        \msg_warning:nnx
+        { spath3 }
+        { missing soft path }
+        { \tl_use:N \l_@@_tmpc_tl }
+      }
+    }
+    {
+      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+    }
+  },
+  join~ components~ upright~ with/.code~2~args={
+    \tl_if_exist:cTF
+    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+    {
+      \tl_if_head_is_group:nTF {#2}
+      {
+        \tl_set:Nx \l_@@_tmpc_tl { \tl_item:nn {#2} {1} }
+        \tl_set:Nx \l_@@_tmpd_tl { \tl_item:nn {#2} {2} }
+      }
+      {
+        \tl_set:Nn \l_@@_tmpc_tl {#2}
+        \tl_clear:N \l_@@_tmpd_tl
+      }
+      \tl_if_exist:cTF
+      {
+        \tl_use:N \l_@@_prefix_tl
+        \tl_use:N \l_@@_tmpc_tl
+        \tl_use:N \l_@@_suffix_tl
+      }
+      {
+        \tl_if_empty:NT \l_@@_tmpd_tl
+        {
+          \spath_spot_weld_components:c
+          {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+        }
+
         \spath_components_to_seq:Nv
         \l_@@_tmpa_seq
         {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
 
+        \seq_gclear:N \g_@@_tmpa_seq
+        
+        \tl_if_empty:NTF \l_@@_tmpd_tl
+        {
+          \int_step_inline:nnnn {1}{1} {\seq_count:N \l_@@_tmpa_seq}
+          {
+            \seq_gput_right:Nn \g_@@_tmpa_seq {##1}
+          }
+        }
+        {
+          \foreach \l_@@_tmpa_tl in \l_@@_tmpd_tl
+          {
+            \seq_gput_right:NV \g_@@_tmpa_seq \l_@@_tmpa_tl
+          }
+          \seq_gsort:Nn \g_@@_tmpa_seq
+          {
+            \int_compare:nNnTF {##1} < {##2}
+            { \sort_return_same: }
+            { \sort_return_swapped: }
+          }
+        }
+
         \seq_pop_left:NN \l_@@_tmpa_seq \l_@@_tmpa_tl
-      
-        \seq_map_inline:Nn \l_@@_tmpa_seq
+        \seq_gpop_left:NN \g_@@_tmpa_seq \l_@@_tmpb_tl
+
+        \tl_set_eq:Nc \l_@@_tmpc_tl
         {
-          \spath_gsplice_between:Nvn \l_@@_tmpa_tl
-          {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
-          {##1}
+          \tl_use:N \l_@@_prefix_tl
+          \tl_use:N \l_@@_tmpc_tl
+          \tl_use:N \l_@@_suffix_tl
         }
+        \spath_transform:NVnnnnnn \l_@@_tmpd_tl \l_@@_tmpc_tl {1}{0}{0}{-1}{0pt}{0pt}
+        
+        \seq_map_indexed_inline:Nn \l_@@_tmpa_seq
+        {
+          \int_compare:nTF
+          {
+            ##1 == \l_@@_tmpb_tl
+          }
+          {
+            \seq_gpop_left:NNF \g_@@_tmpa_seq \l_@@_tmpb_tl
+            {
+              \tl_set:Nn \l_@@_tmpb_tl {-1}
+            }
+            \spath_finalpoint:NV \l_@@_tmpe_tl \l_@@_tmpa_tl
+            \spath_initialpoint:Nn \l_@@_tmpf_tl {##2}
+
+            \dim_compare:nTF
+            {
+              \tl_item:Nn \l_@@_tmpe_tl {1}
+              >
+              \tl_item:Nn \l_@@_tmpf_tl {1}
+            }
+            {
+              \spath_splice_between:NVn
+              \l_@@_tmpa_tl
+              \l_@@_tmpd_tl
+              {##2}
+            }
+            {
+              \spath_splice_between:NVn
+              \l_@@_tmpa_tl
+              \l_@@_tmpc_tl
+              {##2}
+            }
+          }
+          {
+            \tl_put_right:Nn \l_@@_tmpa_tl {##2}
+          }
+        }
         \tl_set_eq:cN
         {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
         \l_@@_tmpa_tl
       }
       {
-        \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        \msg_warning:nnx
+        { spath3 }
+        { missing soft path }
+        { \tl_use:N \l_@@_tmpc_tl }
       }
     }
     {
@@ -5589,6 +6042,121 @@
       \msg_warning:nnn { spath3 } { missing soft path } { #1 }
     }
   },
+  join~ components~ globally~ upright~ with/.code~2~args={
+    \tl_if_exist:cTF
+    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+    {
+      \tl_if_head_is_group:nTF {#2}
+      {
+        \tl_set:Nx \l_@@_tmpc_tl { \tl_item:nn {#2} {1} }
+        \tl_set:Nx \l_@@_tmpd_tl { \tl_item:nn {#2} {2} }
+      }
+      {
+        \tl_set:Nn \l_@@_tmpc_tl {#2}
+        \tl_clear:N \l_@@_tmpd_tl
+      }
+      \tl_if_exist:cTF
+      {
+        \tl_use:N \l_@@_prefix_tl
+        \tl_use:N \l_@@_tmpc_tl
+        \tl_use:N \l_@@_suffix_tl
+      }
+      {
+        \tl_if_empty:NT \l_@@_tmpd_tl
+        {
+          \spath_spot_weld_components:c
+          {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+        }
+
+        \spath_components_to_seq:Nv
+        \l_@@_tmpa_seq
+        {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+
+        \seq_gclear:N \g_@@_tmpa_seq
+        
+        \tl_if_empty:NTF \l_@@_tmpd_tl
+        {
+          \int_step_inline:nnnn {1}{1} {\seq_count:N \l_@@_tmpa_seq}
+          {
+            \seq_gput_right:Nn \g_@@_tmpa_seq {##1}
+          }
+        }
+        {
+          \foreach \l_@@_tmpa_tl in \l_@@_tmpd_tl
+          {
+            \seq_gput_right:NV \g_@@_tmpa_seq \l_@@_tmpa_tl
+          }
+          \seq_gsort:Nn \g_@@_tmpa_seq
+          {
+            \int_compare:nNnTF {##1} < {##2}
+            { \sort_return_same: }
+            { \sort_return_swapped: }
+          }
+        }
+
+        \seq_pop_left:NN \l_@@_tmpa_seq \l_@@_tmpa_tl
+        \seq_gpop_left:NN \g_@@_tmpa_seq \l_@@_tmpb_tl
+
+        \tl_set_eq:Nc \l_@@_tmpc_tl
+        {
+          \tl_use:N \l_@@_prefix_tl
+          \tl_use:N \l_@@_tmpc_tl
+          \tl_use:N \l_@@_suffix_tl
+        }
+        \spath_transform:NVnnnnnn \l_@@_tmpd_tl \l_@@_tmpc_tl {1}{0}{0}{-1}{0pt}{0pt}
+        
+        \seq_map_indexed_inline:Nn \l_@@_tmpa_seq
+        {
+          \int_compare:nTF
+          {
+            ##1 == \l_@@_tmpb_tl
+          }
+          {
+            \seq_gpop_left:NNF \g_@@_tmpa_seq \l_@@_tmpb_tl
+            {
+              \tl_set:Nn \l_@@_tmpb_tl {-1}
+            }
+            \spath_finalpoint:NV \l_@@_tmpe_tl \l_@@_tmpa_tl
+            \spath_initialpoint:Nn \l_@@_tmpf_tl {##2}
+
+            \dim_compare:nTF
+            {
+              \tl_item:Nn \l_@@_tmpe_tl {1}
+              >
+              \tl_item:Nn \l_@@_tmpf_tl {1}
+            }
+            {
+              \spath_splice_between:NVn
+              \l_@@_tmpa_tl
+              \l_@@_tmpd_tl
+              {##2}
+            }
+            {
+              \spath_splice_between:NVn
+              \l_@@_tmpa_tl
+              \l_@@_tmpc_tl
+              {##2}
+            }
+          }
+          {
+            \tl_put_right:Nn \l_@@_tmpa_tl {##2}
+          }
+        }
+        \tl_gset_eq:cN
+        {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+        \l_@@_tmpa_tl
+      }
+      {
+        \msg_warning:nnx
+        { spath3 }
+        { missing soft path }
+        { \tl_use:N \l_@@_tmpc_tl }
+      }
+    }
+    {
+      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+    }
+  },
 %    \end{macrocode}
 %
 % Close a path.
@@ -5790,22 +6358,6 @@
   },
 %    \end{macrocode}
 %
-% Exports the path as an SVG file.
-%
-%    \begin{macrocode}
-  export~ to~ svg/.code={
-    \tl_if_exist:cTF
-    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-    {
-      \spath_export_to_svg:nv {#1}
-      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-    }
-    {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
-    }
-  },
-%    \end{macrocode}
-%
 % Transforms the named path using TikZ transformation specifications.
 %
 %    \begin{macrocode}
@@ -5858,40 +6410,58 @@
 %    \begin{macrocode}
   split~ at~ intersections~ with/.code~ n~ args={2}{
     \tl_if_exist:cTF
-    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
     {
+      tikz at library@intersections at loaded
+    }
+    {
       \tl_if_exist:cTF
-      {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
+      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
       {
-        \spath_split_path_at_intersections:cv
-        {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+        \tl_if_exist:cTF
         {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
+        {
+          \spath_split_path_at_intersections:cv
+          {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+          {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
+        }
+        {
+          \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        }
       }
       {
-        \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        \msg_warning:nnn { spath3 } { missing soft path } { #1 }
       }
     }
     {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      \msg_warning:nn { spath3 } { load intersections }
     }
   },
   split~ globally~ at~ intersections~ with/.code~ n~ args={2}{
     \tl_if_exist:cTF
-    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
     {
-      \tl_if_exist:cTF
-      {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
+      tikz at library@intersections at loaded
+    }
+    {
+    \tl_if_exist:cTF
+      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
       {
-        \spath_gsplit_path_at_intersections:cv
-        {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+        \tl_if_exist:cTF
         {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
+        {
+          \spath_gsplit_path_at_intersections:cv
+          {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+          {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
+        }
+        {
+          \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        }
       }
       {
-        \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        \msg_warning:nnn { spath3 } { missing soft path } { #1 }
       }
     }
     {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      \msg_warning:nn { spath3 } { load intersections }
     }
   },
 %    \end{macrocode}
@@ -5901,40 +6471,58 @@
 %    \begin{macrocode}
   split~ at~ intersections/.code~ n~ args={2}{
     \tl_if_exist:cTF
-    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
     {
+      tikz at library@intersections at loaded
+    }
+    {
       \tl_if_exist:cTF
-      {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
+      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
       {
-        \spath_split_at_intersections:cc
-        {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+        \tl_if_exist:cTF
         {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
+        {
+          \spath_split_at_intersections:cc
+          {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+          {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
+        }
+        {
+          \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        }
       }
       {
-        \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        \msg_warning:nnn { spath3 } { missing soft path } { #1 }
       }
     }
     {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      \msg_warning:nn { spath3 } { load intersections }
     }
   },
   split~ globally~ at~ intersections/.code~ n~ args={2}{
     \tl_if_exist:cTF
-    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
     {
+      tikz at library@intersections at loaded
+    }
+    {
       \tl_if_exist:cTF
-      {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
+      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
       {
-        \spath_gsplit_at_intersections:cc
-        {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+        \tl_if_exist:cTF
         {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
+        {
+          \spath_gsplit_at_intersections:cc
+          {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+          {\tl_use:N \l_@@_prefix_tl #2 \tl_use:N \l_@@_suffix_tl}
+        }
+        {
+          \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        }
       }
       {
-        \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        \msg_warning:nnn { spath3 } { missing soft path } { #1 }
       }
     }
     {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      \msg_warning:nn { spath3 } { load intersections }
     }
   },
 %    \end{macrocode}
@@ -5944,24 +6532,42 @@
 %    \begin{macrocode}
   split~ at~ self~ intersections/.code={
     \tl_if_exist:cTF
-    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
     {
-      \spath_split_at_self_intersections:c
+      tikz at library@intersections at loaded
+    }
+    {
+      \tl_if_exist:cTF
       {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+      {
+        \spath_split_at_self_intersections:c
+        {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+      }
+      {
+        \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      }
     }
     {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      \msg_warning:nn { spath3 } { load intersections }
     }
   },
   split~ globally~ at~ self~ intersections/.code={
     \tl_if_exist:cTF
-    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
     {
-      \spath_gsplit_at_self_intersections:c
+      tikz at library@intersections at loaded
+    }
+    {
+      \tl_if_exist:cTF
       {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+      {
+        \spath_gsplit_at_self_intersections:c
+        {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+      }
+      {
+        \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      }
     }
     {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      \msg_warning:nn { spath3 } { load intersections }
     }
   },
 %    \end{macrocode}
@@ -6069,29 +6675,53 @@
 % The list of components is passed through a \Verb+\foreach+ loop so can use the shortcut syntax from those loops.
 %
 %    \begin{macrocode}
-  insert~ gaps~ after~ components/.code~ n~ args={3}{
+  insert~ gaps~ after~ components/.code~ 2~ args={
     \tl_if_exist:cTF
     {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
     {
       \group_begin:
+      \tl_if_head_is_group:nTF {#2}
+      {
+        \tl_set:Nx \l_@@_tmpc_tl { \tl_item:nn {#2} {1} }
+        \tl_set:Nx \l_@@_tmpd_tl { \tl_item:nn {#2} {2} }
+      }
+      {
+        \tl_set:Nn \l_@@_tmpc_tl {#2}
+        \tl_clear:N \l_@@_tmpd_tl
+      }
       \seq_gclear:N \g_@@_tmpa_seq
       \seq_gclear:N \g_@@_tmpb_seq
       \spath_numberofcomponents:Nv \l_@@_tmpa_int
       {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-      \foreach \l_@@_tmpa_tl in {#3}
+
+      \spath_components_to_seq:Nv
+      \l_@@_tmpa_seq
+      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+      
+      \tl_if_empty:NTF \l_@@_tmpd_tl
       {
-        \seq_gput_right:NV \g_@@_tmpa_seq \l_@@_tmpa_tl
-        \seq_gput_right:Nx
-        \g_@@_tmpb_seq
-        {\int_eval:n
-          {
-            \int_mod:nn { \l_@@_tmpa_tl }{ \l_@@_tmpa_int } + 1
+        \int_step_inline:nnnn {1}{1} { \l_@@_tmpa_int - 1 }
+        {
+          \seq_gput_right:Nn \g_@@_tmpa_seq {##1}
+          \seq_gput_right:Nx
+          \g_@@_tmpb_seq
+          {\int_eval:n {##1 + 1}}
+        }
+      }
+      {
+        \foreach \l_@@_tmpa_tl in \l_@@_tmpd_tl
+        {
+          \seq_gput_right:NV \g_@@_tmpa_seq \l_@@_tmpa_tl
+          \seq_gput_right:Nx
+          \g_@@_tmpb_seq
+          {\int_eval:n
+            {
+              \int_mod:nn { \l_@@_tmpa_tl }{ \l_@@_tmpa_int } + 1
+            }
           }
         }
       }
-      \spath_components_to_seq:Nv
-      \l_@@_tmpa_seq
-      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+
       \seq_clear:N \l_@@_tmpb_seq
       \seq_map_indexed_inline:Nn \l_@@_tmpa_seq
       {
@@ -6098,11 +6728,11 @@
         \tl_set:Nn \l_@@_tmpa_tl {##2}
         \seq_if_in:NnT \g_@@_tmpa_seq {##1}
         {
-          \spath_shorten_at_end:Nn \l_@@_tmpa_tl {#2/2}
+          \spath_shorten_at_end:Nn \l_@@_tmpa_tl {\l_@@_tmpc_tl/2}
         }
         \seq_if_in:NnT \g_@@_tmpb_seq {##1}
         {
-          \spath_shorten_at_start:Nn \l_@@_tmpa_tl {#2/2}
+          \spath_shorten_at_start:Nn \l_@@_tmpa_tl {\l_@@_tmpc_tl/2}
         }
         \seq_put_right:NV \l_@@_tmpb_seq \l_@@_tmpa_tl
       }
@@ -6117,30 +6747,53 @@
       \msg_warning:nnn { spath3 } { missing soft path } { #1 }
     }
   },
-  insert~ gaps~ globally~ after~ components/.code~ n~ args={3}{
+  insert~ gaps~ globally~ after~ components/.code~ 2~ args={
     \tl_if_exist:cTF
     {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
     {
       \group_begin:
+      \tl_if_head_is_group:nTF {#2}
+      {
+        \tl_set:Nx \l_@@_tmpc_tl { \tl_item:nn {#2} {1} }
+        \tl_set:Nx \l_@@_tmpd_tl { \tl_item:nn {#2} {2} }
+      }
+      {
+        \tl_set:Nn \l_@@_tmpc_tl {#2}
+        \tl_clear:N \l_@@_tmpd_tl
+      }
       \seq_gclear:N \g_@@_tmpa_seq
       \seq_gclear:N \g_@@_tmpb_seq
       \spath_numberofcomponents:Nv \l_@@_tmpa_int
       {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
-      \foreach \l_@@_tmpa_tl in {#3}
+
+      \spath_components_to_seq:Nv
+      \l_@@_tmpa_seq
+      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+      
+      \tl_if_empty:NTF \l_@@_tmpd_tl
       {
-        \seq_gput_right:NV \g_@@_tmpa_seq \l_@@_tmpa_tl
-        \seq_gput_right:Nx
-        \g_@@_tmpb_seq
+        \int_step_inline:nnnn {1}{1} { \l_@@_tmpa_int - 1 }
         {
-          \int_eval:n
-          {
-            \int_mod:nn { \l_@@_tmpa_tl }{ \l_@@_tmpa_int } + 1
+          \seq_gput_right:Nn \g_@@_tmpa_seq {##1}
+          \seq_gput_right:Nx
+          \g_@@_tmpb_seq
+          {\int_eval:n {##1 + 1}}
+        }
+      }
+      {
+        \foreach \l_@@_tmpa_tl in \l_@@_tmpd_tl
+        {
+          \seq_gput_right:NV \g_@@_tmpa_seq \l_@@_tmpa_tl
+          \seq_gput_right:Nx
+          \g_@@_tmpb_seq
+          {\int_eval:n
+            {
+              \int_mod:nn { \l_@@_tmpa_tl }{ \l_@@_tmpa_int } + 1
+            }
           }
         }
       }
-      \spath_components_to_seq:Nv
-      \l_@@_tmpa_seq
-      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+
       \seq_clear:N \l_@@_tmpb_seq
       \seq_map_indexed_inline:Nn \l_@@_tmpa_seq
       {
@@ -6147,11 +6800,11 @@
         \tl_set:Nn \l_@@_tmpa_tl {##2}
         \seq_if_in:NnT \g_@@_tmpa_seq {##1}
         {
-          \spath_shorten_at_end:Nn \l_@@_tmpa_tl {#2/2}
+          \spath_shorten_at_end:Nn \l_@@_tmpa_tl {\l_@@_tmpc_tl/2}
         }
         \seq_if_in:NnT \g_@@_tmpb_seq {##1}
         {
-          \spath_shorten_at_start:Nn \l_@@_tmpa_tl {#2/2}
+          \spath_shorten_at_start:Nn \l_@@_tmpa_tl {\l_@@_tmpc_tl/2}
         }
         \seq_put_right:NV \l_@@_tmpb_seq \l_@@_tmpa_tl
       }
@@ -6250,7 +6903,34 @@
   },
 %    \end{macrocode}
 %
+% Replace all line segments by B\'ezier curves.
 %
+%    \begin{macrocode}
+  replace~ lines/.code={
+    \tl_if_exist:cTF
+    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+    {
+      \spath_replace_lines:c
+      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+    }
+    {
+      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+    }
+  },
+  replace~ lines~ globally/.code={
+    \tl_if_exist:cTF
+    {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+    {
+      \spath_greplace_lines:c
+      {\tl_use:N \l_@@_prefix_tl #1 \tl_use:N \l_@@_suffix_tl}
+    }
+    {
+      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+    }
+  },
+%    \end{macrocode}
+%
+%
 % Join the specified components together, joining each to its previous one.
 %
 %    \begin{macrocode}
@@ -6547,7 +7227,10 @@
     }
   }
   {
-    \msg_warning:nnx { spath3 } { missing soft path } { \tl_use:N \l_@@_tmpa_tl }
+    \msg_warning:nnx
+    { spath3 }
+    { missing soft path }
+    { \tl_use:N \l_@@_tmpa_tl }
     \tl_gset_eq:NN \g_@@_smuggle_tl \pgfpointorigin
   }
   \group_end:

Modified: branches/branch2020/Master/texmf-dist/source/latex/tikzmark/tikzmark.dtx
===================================================================
--- branches/branch2020/Master/texmf-dist/source/latex/tikzmark/tikzmark.dtx	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/source/latex/tikzmark/tikzmark.dtx	2021-02-24 18:00:42 UTC (rev 57872)
@@ -36,7 +36,7 @@
 \endpreamble
 \postamble
 
-Copyright (C) 2011-2018 by Andrew Stacey <loopspace at mathforge.org>
+Copyright (C) 2011-2021 by Andrew Stacey <loopspace at mathforge.org>
 
 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License (LPPL), either
@@ -206,7 +206,7 @@
 %</driver>
 % \fi
 %
-% \CheckSum{1138}
+% \CheckSum{1178}
 %
 % \CharacterTable
 %  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -234,18 +234,19 @@
 % \changes{1.6}{2018/10/18}{Added the ability to save node information between runs and between TeX documents}
 % \changes{1.7}{2019/05/07}{Added conditions to test if a tikzmark is on a particular page}
 % \changes{1.8}{2019/10/04}{Fixed some bugs with subnode and tikzmarknode inside maths}
+% \changes{1.10}{2021/02/16}{Tikzmarknode is now prefix and suffix aware, and added a test to see if a picture id has been saved to the aux file for times when pictures are thrown away, eg in AMS's text command}
 %
 % \DoNotIndex{\newcommand,\newenvironment}
 %
+% \GetFileInfo{tikzlibrarytikzmark.code.tex}
 % \providecommand*{\url}{\texttt}
 % \title{The \textsf{tikzmark} package}
 % \author{Andrew Stacey \\ \url{loopspace at mathforge.org}}
-% \date{v1.8~from 2019/10/04}
+% \date{\fileversion~from \filedate}
 %
 %
 % \maketitle
 %
-% 
 % \section{Introduction}
 %
 % The \Verb+\tikzmark+ macro burst onto the scene in a blaze of glory on \href{http://tex.stackexchange.com}{TeX-SX}.
@@ -452,6 +453,23 @@
 % This is the TikZ key that is used by \Verb+\tikzmark+ to actually save the connection between the name and the picture coordinate.
 % It can be used on an arbitrary picture to save its origin as a tikzmark.
 %
+% \item \Verb+/tikz/check picture id+
+%
+% There are circumstances where, behind the scenes, a tikzpicture is actually placed in a box and processed several times (often this involves \Verb+\mathchoice+).
+% In such a situation, when defining nodes then the last one ``wins'' in that each node remembers the id of the last processed picture.
+% However, only the one that is actually used has its location remembered on the page (since the others don't have a position).
+% This can lead to the situation whereby a node becomes disassociated from its picture and so using it for later reference fails.
+% This key tries to get around that situation by checking the \Verb+aux+ file to see if the current picture was actually typeset last time (by checking for the presence of the remembered location) and if it find that it wasn't, it quietly appends the string \Verb+discard-+ to each node name.
+% The idea being that the version of the picture that is actually typeset will not have this happen and so its nodes ``survive''.
+%
+% \item \Verb+/tikz/maybe define node=#1+
+%
+% The previous key can lead to undefined nodes on the first time that the picture is processed.
+% Using this key will ensure that the specified node is aliased to its \Verb+discard-+ version providing it doesn't already exist.
+% This is purely to get rid of pointless error messages, and also should only be used in conjunction with \Verb+check picture id+.
+%
+% Note that due to the order in which code gets executed, \Verb+check picture id+ should be before any \Verb+maybe define node+ keys.
+%
 % \item \Verb+/tikz/if picture id=#1#2#3+
 %
 % This is a key equivalent of the \Verb+\iftikzmark+ command.
@@ -791,6 +809,10 @@
 %
 % The \Verb+save nodes+ code uses \LaTeX3.
 %    \begin{macrocode}
+\ProvidesFile{tikzlibrarytikzmark.code.tex}[%
+  2021/02/16
+  v1.10
+  TikZ library for marking positions in a document]
 \RequirePackage{expl3, l3keys2e, xparse}
 %    \end{macrocode}
 %
@@ -819,6 +841,44 @@
     },
   },
 %    \end{macrocode}
+% There are times when some code is executed and then discarded, such as in \Verb+\mathchoice+.
+% This can seriously mess with how TikZ pictures are remembered as the last \Verb+pgfpictureid+ to be \emph{processed} is the one that is used, but it is the one that is \emph{used} that is recorded in the \Verb+aux+ file.
+% This isn't particularly a tikzmark issue, but does come up from time to time with tikzmark as it's all about remembering locations.
+%
+% In actual fact, it only occurs with \Verb+\tikzmarknode+ since the issue is about how nodes are associated with pictures.
+%
+% The solution is to check to see if the \Verb+pgfpictureid+ has been recorded in the \Verb+aux+ file and if it hasn't, quietly prefix the node names with a discard term.
+% This needs to be used \emph{after} \Verb+remember picture+ has been invoked.
+% It probably messes with some other stuff so should only be used under controlled conditions, such as \Verb+\tikzmarknode+.
+%    \begin{macrocode}
+  check picture id/.code={
+    \ifpgfrememberpicturepositiononpage
+    \@ifundefined{pgf at sys@pdf at mark@pos@\pgfpictureid}{%
+      \tikzset{%
+        name prefix/.get=\tzmk at name@prefix,
+        name prefix/.prefix=discard-,
+        execute at end picture={%
+          \tikzset{name prefix/.expand once=\tzmk at name@prefix}%
+        },
+      }%
+    }{}%
+    \fi
+  },
+%    \end{macrocode}
+% We also want a failsafe that quietly handles the case where the document hasn't been compiled enough times (once) to get the information into the \Verb+aux+ file.
+% There will already be messages about needing reruns so we don't need to add to that.
+% We simply ensure that the node exists.
+%    \begin{macrocode}
+  maybe define node/.style={%
+    execute at end picture={%
+      \ifpgfrememberpicturepositiononpage
+      \@ifundefined{pgf at sh@pi@\tikz at pp@name{#1}}{%
+        \pgfnodealias{\tikz at pp@name{#1}}{discard-\tikz at pp@name{#1}}%
+      }{}%
+      \fi
+    }%
+  },
+%    \end{macrocode}
 % The positions are already recorded in the \Verb+aux+ file, all we really need to do is provide them with better names.
 %    \begin{macrocode}
   save picture id/.code={%
@@ -860,10 +920,14 @@
     \@ifundefined{save at pt@\tikzmark at pp@name{#1}}{%
       \pgfkeysalso{#3}%
     }{%
-      \@ifundefined{save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname}{%
+      \@ifundefined{%
+        save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname
+      }{%
         \pgfkeysalso{#3}%
       }{%
-        \ifnum\csname save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname\endcsname=\the\value{page}\relax%
+        \ifnum\csname save at pg@%
+        \csname save at pt@\tikzmark at pp@name{#1}\endcsname%
+        \endcsname=\the\value{page}\relax%
         \pgfkeysalso{#2}%
         \else
         \pgfkeysalso{#3}%
@@ -875,10 +939,14 @@
     \@ifundefined{save at pt@\tikzmark at pp@name{#1}}{%
       \pgfkeysalso{#4}%
     }{%
-      \@ifundefined{save at pg@\csname save at pt@\tikzmark at pp@name{#1}@label\endcsname}{%
+      \@ifundefined{%
+        save at pg@\csname save at pt@\tikzmark at pp@name{#1}@label\endcsname%
+      }{%
         \pgfkeysalso{#4}%
       }{%
-        \ifnum\csname save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname\endcsname=#2\relax%
+        \ifnum\csname save at pg@%
+        \csname save at pt@\tikzmark at pp@name{#1}\endcsname%
+        \endcsname=#2\relax%
         \pgfkeysalso{#3}%
         \else
         \pgfkeysalso{#4}%
@@ -969,7 +1037,12 @@
       \@ifundefined{save at pg@\csname save at pt@\tmk at label\endcsname}{}{%
         \@ifundefined{save at pg@\pgfpictureid}{}{%
           \pgfkeysvalueof{/tikz/next page vector}%
-        \edef\tmk at pg{\the\numexpr \csname save at pg@\csname save at pt@\tmk at label\endcsname\endcsname - \csname save at pg@\pgfpictureid\endcsname\relax}%
+        \edef\tmk at pg{%
+          \the\numexpr \csname save at pg@%
+          \csname save at pt@\tmk at label\endcsname\endcsname%
+          -
+          \csname save at pg@\pgfpictureid\endcsname\relax%
+        }%
         \ifnum \tmk at pg > 0 \relax
         \advance \pgf at xa by \pgf at x\relax
         \advance \pgf at ya by \pgf at y\relax
@@ -995,6 +1068,7 @@
 % This version is for when we're outside a tikzpicture environment
 %    \begin{macrocode}
 \newcommand\tikzmark at outside[2][]{%
+\tikzset{external/export next/.try=false}%
 \tikz[remember picture with id=#2]{#1}%
 }
 %    \end{macrocode}
@@ -1004,7 +1078,8 @@
   \tikzset{remember picture}%
   \tikz at scan@one at point\pgfutil at firstofone#2\relax
   \protected at write\pgfutil at auxout{}{%
-    \string\savepointas{\tikzmark at pp@name{#1}}{\pgfpictureid}{\the\pgf at x}{\the\pgf at y}}%
+    \string\savepointas%
+    {\tikzmark at pp@name{#1}}{\pgfpictureid}{\the\pgf at x}{\the\pgf at y}}%
 }
 %    \end{macrocode}
 % And finally, the ultimate invoker:
@@ -1111,7 +1186,9 @@
     \@ifundefined{save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname}{%
       \tikzmark at false
     }{%
-      \ifnum\csname save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname\endcsname=#2\relax%
+      \ifnum\csname save at pg@%
+      \csname save at pt@\tikzmark at pp@name{#1}\endcsname%
+      \endcsname=#2\relax%
       \tikzmark at true
       \else
       \tikzmark at false
@@ -1132,7 +1209,9 @@
     \@ifundefined{save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname}{%
       \tikzmark at false
     }{%
-      \ifnum\csname save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname\endcsname=\the\value{page}\relax%
+      \ifnum\csname save at pg@%
+      \csname save at pt@\tikzmark at pp@name{#1}\endcsname%
+      \endcsname=\the\value{page}\relax%
       \tikzmark at true
       \else
       \tikzmark at false
@@ -1252,10 +1331,13 @@
 % It does its best to work inside a math environment by a sneaky trick involving \Verb+\mathchoice+: the \Verb+remember picture+ key means that only the picture id of the typeset box is saved to the aux file.  So comparing the possible picture ids of the four options with the one read from the aux file, we can figure out which box was actually used.
 %    \begin{macrocode}
 \def\tikzmarknode@#1#2#3{%
+\tikzset{external/export next/.try=false}%
   \tikz[%
     remember picture,
+    save picture id={#2},
+    check picture id,
+    maybe define node={#2},
     baseline=(#2.base),
-    save picture id={#2},
     every tikzmarknode picture/.try
   ] {
     \node[
@@ -1290,25 +1372,25 @@
   \expandafter\ifx\csname\tzmk at pic\endcsname\relax
 \edef\tzmk at pic{\tzmk at prfx\the\numexpr\the\pgf at picture@serial at count-3\relax}%
   \expandafter\ifx\csname\tzmk at pic\endcsname\relax
-  \pgfutil at ifundefined{pgf at sh@ns@#2}{%
-    \pgfnodealias{#2}{#2-t}%
-    \tikzmarkalias{#2}{#2-t}%
+  \pgfutil at ifundefined{pgf at sh@ns@\tikz at pp@name{#2}}{%
+    \pgfnodealias{\tikz at pp@name{#2}}{\tikz at pp@name{#2-t}}%
+    \tikzmarkalias{\tikzmark at pp@name{#2}}{\tikzmark at pp@name{#2-t}}%
   }{}%
   \else
-    \pgfnodealias{#2}{#2-d}%
-    \tikzmarkalias{#2}{#2-d}%
+    \pgfnodealias{\tikz at pp@name{#2}}{\tikz at pp@name{#2-d}}%
+    \tikzmarkalias{\tikzmark at pp@name{#2}}{\tikzmark at pp@name{#2-d}}%
   \fi
   \else
-    \pgfnodealias{#2}{#2-t}%
-    \tikzmarkalias{#2}{#2-t}%
+    \pgfnodealias{\tikz at pp@name{#2}}{\tikz at pp@name{#2-t}}%
+    \tikzmarkalias{\tikzmark at pp@name{#2}}{\tikzmark at pp@name{#2-t}}%
   \fi
   \else
-    \pgfnodealias{#2}{#2-s}%
-    \tikzmarkalias{#2}{#2-s}%
+    \pgfnodealias{\tikz at pp@name{#2}}{\tikz at pp@name{#2-s}}%
+    \tikzmarkalias{\tikzmark at pp@name{#2}}{\tikzmark at pp@name{#2-s}}%
   \fi
   \else
-    \pgfnodealias{#2}{#2-ss}%
-    \tikzmarkalias{#2}{#2-ss}%
+    \pgfnodealias{\tikz at pp@name{#2}}{\tikz at pp@name{#2-ss}}%
+    \tikzmarkalias{\tikzmark at pp@name{#2}}{\tikzmark at pp@name{#2-ss}}%
   \fi
   \else
     \tikzmarknode@{#1}{#2}{#3}%
@@ -1886,8 +1968,10 @@
 %
 % \begin{macro}{\iflst at linemark}
 % A conditional to help with placing the mark at the first non-whitespace character.
+% Should be set to true so that we notice the first line of the code.
 %    \begin{macrocode}
-    \newif\iflst at linemark
+  \newif\iflst at linemark
+  \lst at linemarktrue
 %    \end{macrocode}
 % \end{macro}
 %

Deleted: branches/branch2020/Master/texmf-dist/source/latex/tikzmark/tikzmark.ins
===================================================================
--- branches/branch2020/Master/texmf-dist/source/latex/tikzmark/tikzmark.ins	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/source/latex/tikzmark/tikzmark.ins	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,76 +0,0 @@
-%%
-%% This is file `tikzmark.ins',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% tikzmark.dtx  (with options: `install')
-%% ----------------------------------------------------------------
-%% tikzmark --- remembering absolute positioning with TikZ.
-%% E-mail: loopspace at mathforge.org
-%% Released under the LaTeX Project Public License v1.3c or later
-%% See http://www.latex-project.org/lppl.txt
-%% ----------------------------------------------------------------
-%% 
-\input docstrip.tex
-\keepsilent
-\askforoverwritefalse
-\preamble
-----------------------------------------------------------------
-tikzmark --- remembering absolute positioning with TikZ.
-E-mail: loopspace at mathforge.org
-Released under the LaTeX Project Public License v1.3c or later
-See http://www.latex-project.org/lppl.txt
-----------------------------------------------------------------
-
-\endpreamble
-\postamble
-
-Copyright (C) 2011-2018 by Andrew Stacey <loopspace at mathforge.org>
-
-This work may be distributed and/or modified under the
-conditions of the LaTeX Project Public License (LPPL), either
-version 1.3c of this license or (at your option) any later
-version.  The latest version of this license is in the file:
-
-http://www.latex-project.org/lppl.txt
-
-This work is "maintained" (as per LPPL maintenance status) by
-Andrew Stacey.
-
-This work consists of the file  tikzmark.dtx
-and the derived files           tikzmark.ins,
-                                tikzmark.pdf,
-                                tikzlibrarytikzmark.code.tex, and
-                                tikzmarklibrarylistings.code.tex
-
-\endpostamble
-\usedir{tex/latex/tikzmark}
-\generate{
-  \file{tikzlibrarytikzmark.code.tex}{\from{\jobname.dtx}{tikzlibrary}}
-}
-\generate{
-  \file{tikzmarklibrarylistings.code.tex}{\from{\jobname.dtx}{listings}}
-}
-\endbatchfile
-%% 
-%% Copyright (C) 2011-2018 by Andrew Stacey <loopspace at mathforge.org>
-%% 
-%% This work may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License (LPPL), either
-%% version 1.3c of this license or (at your option) any later
-%% version.  The latest version of this license is in the file:
-%% 
-%% http://www.latex-project.org/lppl.txt
-%% 
-%% This work is "maintained" (as per LPPL maintenance status) by
-%% Andrew Stacey.
-%% 
-%% This work consists of the file  tikzmark.dtx
-%% and the derived files           tikzmark.ins,
-%%                                 tikzmark.pdf,
-%%                                 tikzlibrarytikzmark.code.tex, and
-%%                                 tikzmarklibrarylistings.code.tex
-%% 
-%%
-%% End of file `tikzmark.ins'.

Modified: branches/branch2020/Master/texmf-dist/source/latex/udesoftec/CHANGELOG
===================================================================
--- branches/branch2020/Master/texmf-dist/source/latex/udesoftec/CHANGELOG	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/source/latex/udesoftec/CHANGELOG	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,14 +1,21 @@
 The version number of all files is changed for every release. Please refer to the details below in order to see which files were changed.
- 
+
+2021/02/22 v1.7.1
+* [udesoftec-bibcommon.sty] fixing \bbldoi by switching to pkg:uri
+* [udesoftec.cls] re-enabled auto-output of glossary if existing
+* [udesoftec.cls] add pkg:bookmark to replace bookmarks from pkg:hyperref
+* [udesoftec-biblatex.sty] fix deprecated extrayear
+* [udesoftec-bibcommon.sty] fix deprecated \ifnumber
+* [udesoftec.cls] remove supervisor from example front page
+* [udesoftec.cls] remove deprecationwarnings for \clearscr*
+
 2020/03/09 v1.6.6
-* Bumping version number
+* [udesoftec.cls] fix confidentially clause
+* improve build steps for package, linting of files
+
+2018/06/20 v1.6.5 (unreleased)
+* internal changes
  
-2020/03/09 v1.7.0
-* Bumping version number
- 
-2018/06/20 v1.6.5
-* Bumping version number
- 
 2018/04/24 v1.6.4 (unreleased)
 * [udesoftec.cls] fix statutory declaration
 * [udesoftec.cls] list of abbreviations should have more indent due to longer abbreviations

Modified: branches/branch2020/Master/texmf-dist/source/latex/udesoftec/README
===================================================================
--- branches/branch2020/Master/texmf-dist/source/latex/udesoftec/README	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/source/latex/udesoftec/README	2021-02-24 18:00:42 UTC (rev 57872)
@@ -3,7 +3,7 @@
 Maintainer: J. Peter M. Schuler
 E-Mail:     j.peter.m.schuler at uni dash due dot de
 Copyright:  2013-2015 J. Peter M. Schuler
-Version:    1.6.6 2020/03/09
+Version:    1.7.1 2021/02/22
 License:    lppl
 Topic:      dissertation
 
@@ -18,7 +18,7 @@
  
   It is based on pdflatex and bibtex using UTF-8 encoded files. It is 
   thorougly tested on Windows/MikTeX and OSX/BasicTeX, works as well under 
-  sharelatex.com  and thus should be plattform independent.
+  overleaf.com and thus should be plattform independent.
 
   For more information see the instructions in udesoftec-doc.pdf - complete 
   instructions are available in German, a short abstract in English gives 

Modified: branches/branch2020/Master/texmf-dist/source/latex/udesoftec/UPDATE-INSTRUCTIONS
===================================================================
--- branches/branch2020/Master/texmf-dist/source/latex/udesoftec/UPDATE-INSTRUCTIONS	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/source/latex/udesoftec/UPDATE-INSTRUCTIONS	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,5 +1 @@
 Please look in udesoftec-doc.pdf appendix chapter A.2. 
-
-In order to know when an update is available a 
-filtered CTAN announce RSS feed is available at 
-http://pipes.yahoo.com/jpmschuler/udesoftec?_render=rss
\ No newline at end of file

Modified: branches/branch2020/Master/texmf-dist/source/latex/udesoftec/udesoftec-doc-examplebib.bib
===================================================================
--- branches/branch2020/Master/texmf-dist/source/latex/udesoftec/udesoftec-doc-examplebib.bib	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/source/latex/udesoftec/udesoftec-doc-examplebib.bib	2021-02-24 18:00:42 UTC (rev 57872)
@@ -22,7 +22,7 @@
  booktitle = {Web Engineering},
  year = {2006},
  address = {Berlin/Heidelberg},
- doi = {10.1007/3-540-28218-1_5}
+ doi = {10.1007/3-540-28218-1\textunderscore 5}
 }
 
 @incollection{Mendes.et.al.2006b,
@@ -117,7 +117,6 @@
  publisher = {Gabler},
  isbn = {978-3-8349-2114-7}
 }
-
 @techstandard{IEEEStd-1016:1998,
  year = {1998-09-23},
  title = {IEEE Recommended Practice for Software Design Descriptions},
@@ -126,4 +125,4 @@
  author = {IEEE},
  type = {IEEE Std},
  standard = {IEEE Std 1016-1998}
-}
+}
\ No newline at end of file

Modified: branches/branch2020/Master/texmf-dist/source/latex/udesoftec/udesoftec-doc.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/source/latex/udesoftec/udesoftec-doc.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/source/latex/udesoftec/udesoftec-doc.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,7 +1,7 @@
 % !Mode:: "TeX:UTF-8"
 %% udesoftec-doc.tex
 %% Copyright 2015 J. Peter M. Schuler
-%% 2020/03/09 v1.7.0 udesoftec
+%% 2021/02/22 v1.7.1 udesoftec
 \documentclass[de,omit-sd,omit-lol]{udesoftec} 
 \usepackage{udesoftec-extra}
 

Modified: branches/branch2020/Master/texmf-dist/tex/generic/babel/babel.def
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/generic/babel/babel.def	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/generic/babel/babel.def	2021-02-24 18:00:42 UTC (rev 57872)
@@ -39,7 +39,7 @@
     \wlog{File: #1 #4 #3 <#2>}%
     \let\ProvidesFile\@undefined}
 \fi
-\ProvidesFile{babel.def}[2021/01/26 3.53 Babel common definitions]
+\ProvidesFile{babel.def}[2021/02/22 3.54 Babel common definitions]
 \ifx\AtBeginDocument\@undefined  % TODO. change test.
     % == Code for plain ==
 \def\@empty{}
@@ -397,8 +397,8 @@
 \fi
 \countdef\last at language=19  % TODO. why? remove?
 \def\addlanguage{\csname newlanguage\endcsname}
-\def\bbl at version{3.53}
-\def\bbl at date{2021/01/26}
+\def\bbl at version{3.54}
+\def\bbl at date{2021/02/22}
 \def\adddialect#1#2{%
   \global\chardef#1#2\relax
   \bbl at usehooks{adddialect}{{#1}{#2}}%
@@ -735,6 +735,7 @@
 \def\bbl at foreign@s#1#2{% TODO - \shapemode, \@setpar, ?\@@par
   \begingroup
     {\par}%
+    \let\bbl at select@opts\@empty
     \let\BabelText\@firstofone
     \foreign at language{#1}%
     \bbl at usehooks{foreign*}{}%
@@ -871,12 +872,13 @@
 \def\bbl at nocaption@i#1#2{% 1: text to be printed 2: caption macro \langXname
   \global\@namedef{#2}{\textbf{?#1?}}%
   \@nameuse{#2}%
-  \bbl at warning{%
-    \@backslashchar#2 not set. Please, define it\\%
-    after the language has been loaded (typically\\%
-    in the preamble) with the help of\\%
-    \string\setlocalecaption. An example is\\%
-    \string\setlocalecaption{mylang}{chapter}{..}\\
+  \edef\bbl at tempa{#1}%
+  \bbl at sreplace\bbl at tempa{name}{}%
+  \bbl at warning{% TODO.
+    \@backslashchar#1 not set for '\languagename'. Please,\\%
+    define it after the language has been loaded\\%
+    (typically in the preamble) with:\\%
+    \string\setlocalecaption{\languagename}{\bbl at tempa}{..}\\%
     Reported}}
 \def\bbl at tentative{\protect\bbl at tentative@i}
 \def\bbl at tentative@i#1{%
@@ -1687,8 +1689,7 @@
     \bbl at afterelse#3%
   \else
     \bbl at afterfi#4%
-  \fi
-  }
+  \fi}
 \def\bbl at ifknown@ttrib#1#2{%
   \let\bbl at tempa\@secondoftwo
   \bbl at loopx\bbl at tempb{#2}{%
@@ -1697,8 +1698,7 @@
       \let\bbl at tempa\@firstoftwo
     \else
     \fi}%
-  \bbl at tempa
-}
+  \bbl at tempa}
 \def\bbl at clear@ttribs{%
   \ifx\bbl at attributes\@undefined\else
     \bbl at loopx\bbl at tempa{\bbl at attributes}{%
@@ -1772,7 +1772,7 @@
         \bbl at iflanguage\bbl at tempa{%
           \bbl at csarg\protected at edef{hyphenation@\bbl at tempa}{%
             \bbl at ifunset{bbl at hyphenation@\bbl at tempa}%
-              \@empty
+              {}%
               {\csname bbl at hyphenation@\bbl at tempa\endcsname\space}%
             #2}}}%
     \fi}}
@@ -2339,6 +2339,7 @@
   \let\bbl at KVP@Alph\@nil
   \let\bbl at KVP@labels\@nil
   \bbl at csarg\let{KVP at labels*}\@nil
+  \global\let\bbl at inidata\@empty
   \bbl at forkv{#1}{%  TODO - error handling
     \in@{/}{##1}%
     \ifin@
@@ -2404,7 +2405,8 @@
   % ==
   % At this point all parameters are defined if 'import'. Now we
   % execute some code depending on them. But what about if nothing was
-  % imported? We just set the very basic parameters.
+  % imported? We just set the basic parameters, but still loading the
+  % whole ini file.
   \bbl at load@basic{#2}%
   % == script, language ==
   % Override the values from ini or defines them
@@ -2641,12 +2643,10 @@
       \expandafter\bbl at tempb\bbl at captionslist\@empty
     \else
       \ifx\bbl at initoload\relax
-        \bbl at read@ini{\bbl at KVP@captions}0%  Here letters cat = 11
+        \bbl at read@ini{\bbl at KVP@captions}2%  % Here letters cat = 11
       \else
-        \bbl at read@ini{\bbl at initoload}0%  Here all letters cat = 11
+        \bbl at read@ini{\bbl at initoload}2%     % Same
       \fi
-      \bbl at after@ini
-      \bbl at savestrings
     \fi
   \StartBabelCommands*{#1}{date}%
     \ifx\bbl at KVP@import\@nil
@@ -2696,9 +2696,7 @@
 \def\bbl at provide@renew#1{%
   \ifx\bbl at KVP@captions\@nil\else
     \StartBabelCommands*{#1}{captions}%
-      \bbl at read@ini{\bbl at KVP@captions}0%   Here all letters cat = 11
-      \bbl at after@ini
-      \bbl at savestrings
+      \bbl at read@ini{\bbl at KVP@captions}2%   % Here all letters cat = 11
     \EndBabelCommands
  \fi
  \ifx\bbl at KVP@import\@nil\else
@@ -2711,20 +2709,10 @@
   \ifx\bbl at lbkflag\@empty
     \bbl at provide@hyphens{#1}%
   \fi}
-\def\bbl at linebreak@export{%
-  \bbl at exportkey{lnbrk}{typography.linebreaking}{h}%
-  \bbl at exportkey{hyphr}{typography.hyphenrules}{}%
-  \bbl at exportkey{lfthm}{typography.lefthyphenmin}{2}%
-  \bbl at exportkey{rgthm}{typography.righthyphenmin}{3}%
-  \bbl at exportkey{prehc}{typography.prehyphenchar}{}%
-  \bbl at exportkey{hyotl}{typography.hyphenate.other.locale}{}%
-  \bbl at exportkey{hyots}{typography.hyphenate.other.script}{}%
-  \bbl at exportkey{intsp}{typography.intraspace}{}%
-  \bbl at exportkey{chrng}{characters.ranges}{}}
 \def\bbl at load@basic#1{%
   \bbl at ifunset{bbl at inidata@\languagename}{}%
     {\getlocaleproperty\bbl at tempa{\languagename}{identification/load.level}%
-     \ifcase\bbl at tempa\else
+     \ifcase\bbl at tempa
        \bbl at csarg\let{lname@\languagename}\relax
      \fi}%
   \bbl at ifunset{bbl at lname@#1}%
@@ -2732,10 +2720,7 @@
        \begingroup
          \let\bbl at ini@captions at aux\@gobbletwo
          \def\bbl at inidate ####1.####2.####3.####4\relax ####5####6{}%
-         \bbl at read@ini{##1}0%
-         \bbl at linebreak@export
-         \bbl at exportkey{dgnat}{numbers.digits.native}{}%
-         \bbl at exportkey{frspc}{typography.frenchspacing}{u}% unset
+         \bbl at read@ini{##1}1%
          \ifx\bbl at initoload\relax\endinput\fi
        \endgroup}%
      \begingroup       % boxed, to avoid extra spaces:
@@ -2780,9 +2765,6 @@
        {\bbl at exp{\\\adddialect\<l@#1>\language}}%
        {}}%                      so, l@<lang> is ok - nothing to do
     {\bbl at exp{\\\adddialect\<l@#1>\bbl at tempa}}}% found in opt list or ini
-\ifx\bbl at readstream\@undefined
-  \csname newread\endcsname\bbl at readstream
-\fi
 \def\bbl at input@texini#1{%
   \bbl at bsphack
     \bbl at exp{%
@@ -2794,20 +2776,30 @@
       \catcode`\\\{=\the\catcode`\{\relax
       \catcode`\\\}=\the\catcode`\}\relax}%
   \bbl at esphack}
-\def\bbl at inipreread#1=#2\@@{%
-  \bbl at trim@def\bbl at tempa{#1}% Redundant below !!
+\def\bbl at iniline#1\bbl at iniline{%
+  \@ifnextchar[\bbl at inisect{\@ifnextchar;\bbl at iniskip\bbl at inistore}#1\@@}% ]
+\def\bbl at inisect[#1]#2\@@{\def\bbl at section{#1}}%
+\def\bbl at iniskip#1\@@{}%      if starts with ;
+\def\bbl at inistore#1=#2\@@{%      full (default)
+  \bbl at trim@def\bbl at tempa{#1}%
   \bbl at trim\toks@{#2}%
-  % Move trims here ??
   \bbl at ifunset{bbl at KVP@\bbl at section/\bbl at tempa}%
     {\bbl at exp{%
-       \\\g at addto@macro\\\bbl at inidata{%
-         \\\bbl at elt{\bbl at section}{\bbl at tempa}{\the\toks@}}}%
-     \expandafter\bbl at inireader\bbl at tempa=#2\@@}%
+      \\\g at addto@macro\\\bbl at inidata{%
+        \\\bbl at elt{\bbl at section}{\bbl at tempa}{\the\toks@}}}}%
     {}}%
-\def\bbl at fetch@ini#1#2{%
-  \bbl at exp{\def\\\bbl at inidata{%
-    \\\bbl at elt{identification}{tag.ini}{#1}%
-    \\\bbl at elt{identification}{load.level}{#2}}}%
+\def\bbl at inistore@min#1=#2\@@{%  minimal (maybe set in \bbl at read@ini)
+  \bbl at trim@def\bbl at tempa{#1}%
+  \bbl at trim\toks@{#2}%
+  \bbl at xin@{.identification.}{.\bbl at section.}%
+  \ifin@
+    \bbl at exp{\\\g at addto@macro\\\bbl at inidata{%
+      \\\bbl at elt{identification}{\bbl at tempa}{\the\toks@}}}%
+  \fi}%
+\ifx\bbl at readstream\@undefined
+  \csname newread\endcsname\bbl at readstream
+\fi
+\def\bbl at read@ini#1#2{%
   \openin\bbl at readstream=babel-#1.ini
   \ifeof\bbl at readstream
     \bbl at error
@@ -2816,12 +2808,20 @@
        is not complete.}%
       {Fix the name or reinstall babel.}%
   \else
+    % Store ini data in \bbl at inidata
     \catcode`\[=12 \catcode`\]=12 \catcode`\==12 \catcode`\&=12
     \catcode`\;=12 \catcode`\|=12 \catcode`\%=14 \catcode`\-=12
     \bbl at info{Importing
-                \ifcase#2 \or font and identification \or basic \fi
-                data for \languagename\\%
+                \ifcase#2font and identification \or basic \fi
+                 data for \languagename\\%
               from babel-#1.ini. Reported}%
+    \ifnum#2=\z@
+      \global\let\bbl at inidata\@empty
+      \let\bbl at inistore\bbl at inistore@min    % Remember it's local
+    \fi
+    \def\bbl at section{identification}%
+    \bbl at exp{\\\bbl at inistore tag.ini=#1\\\@@}%
+    \bbl at inistore load.level=#2\@@
     \loop
     \if T\ifeof\bbl at readstream F\fi T\relax % Trick, because inside \loop
       \endlinechar\m at ne
@@ -2831,80 +2831,54 @@
         \expandafter\bbl at iniline\bbl at line\bbl at iniline
       \fi
     \repeat
+    % Process stored data
+    \bbl at csarg\xdef{lini@\languagename}{#1}%
+    \let\bbl at savestrings\@empty
+    \let\bbl at savetoday\@empty
+    \let\bbl at savedate\@empty
+    \def\bbl at elt##1##2##3{%
+      \def\bbl at section{##1}%
+      \in@{=date.}{=##1}% Find a better place
+      \ifin@
+        \bbl at ini@calendar{##1}%
+      \fi
+      \global\bbl at csarg\let{bbl at KVP@##1/##2}\relax
+      \bbl at ifunset{bbl at inikv@##1}{}%
+        {\csname bbl at inikv@##1\endcsname{##2}{##3}}}%
+    \bbl at inidata
+    % 'Export' data
+    \bbl at ini@exports{#2}%
+    \global\bbl at csarg\let{inidata@\languagename}\bbl at inidata
+    \global\let\bbl at inidata\@empty
+    \bbl at exp{\\\bbl at add@list\\\bbl at ini@loaded{\languagename}}%
+    \bbl at toglobal\bbl at ini@loaded
   \fi}
-\def\bbl at read@ini#1#2{%
-  \bbl at csarg\xdef{lini@\languagename}{#1}%
-  \let\bbl at section\@empty
-  \let\bbl at savestrings\@empty
-  \let\bbl at savetoday\@empty
-  \let\bbl at savedate\@empty
-  \let\bbl at inireader\bbl at iniskip
-  \bbl at fetch@ini{#1}{#2}%
-  \bbl at foreach\bbl at renewlist{%
-    \bbl at ifunset{bbl at renew@##1}{}{\bbl at inisec[##1]\@@}}%
-  \global\let\bbl at renewlist\@empty
-  % Ends last section. See \bbl at inisec
-  \def\bbl at elt##1##2{\bbl at inireader##1=##2\@@}%
-  \bbl at cs{renew@\bbl at section}%
-  \global\bbl at csarg\let{renew@\bbl at section}\relax
-  \bbl at cs{secpost@\bbl at section}%
-  \bbl at csarg{\global\expandafter\let}{inidata@\languagename}\bbl at inidata
-  \bbl at exp{\\\bbl at add@list\\\bbl at ini@loaded{\languagename}}%
-  \bbl at toglobal\bbl at ini@loaded}
-\def\bbl at iniline#1\bbl at iniline{%
-  \@ifnextchar[\bbl at inisec{\@ifnextchar;\bbl at iniskip\bbl at inipreread}#1\@@}% ]
-\def\bbl at iniskip#1\@@{}%      if starts with ;
-\def\bbl at inisec[#1]#2\@@{%    if starts with opening bracket
-  \def\bbl at elt##1##2{%
-    \expandafter\toks@\expandafter{%
-      \expandafter{\bbl at section}{##1}{##2}}%
-    \bbl at exp{%
-      \\\g at addto@macro\\\bbl at inidata{\\\bbl at elt\the\toks@}}%
-    \bbl at inireader##1=##2\@@}%
-  \bbl at cs{renew@\bbl at section}%
-  \global\bbl at csarg\let{renew@\bbl at section}\relax
-  \bbl at cs{secpost@\bbl at section}%
-  % The previous code belongs to the previous section.
-  % --------------------------
-  % Now start the current one.
-  \in@{=date.}{=#1}%
-  \ifin@
-    \lowercase{\def\bbl at tempa{=#1=}}%
-    \bbl at replace\bbl at tempa{=date.gregorian}{}%
-    \bbl at replace\bbl at tempa{=date.}{}%
-    \in@{.licr=}{#1=}%
-    \ifin@
-      \ifcase\bbl at engine
-        \bbl at replace\bbl at tempa{.licr=}{}%
-      \else
-        \let\bbl at tempa\relax
-      \fi
-    \fi
-    \ifx\bbl at tempa\relax\else
-      \bbl at replace\bbl at tempa{=}{}%
-      \bbl at exp{%
-        \def\<bbl at inikv@#1>####1=####2\\\@@{%
-          \\\bbl at inidate####1...\relax{####2}{\bbl at tempa}}}%
-    \fi
-  \fi
-  \def\bbl at section{#1}%
-  \def\bbl at elt##1##2{%
-    \@namedef{bbl at KVP@#1/##1}{}}%
-  \bbl at cs{renew@#1}%
-  \bbl at cs{secpre@#1}%  pre-section `hook'
-  \bbl at ifunset{bbl at inikv@#1}%
-    {\let\bbl at inireader\bbl at iniskip}%
-    {\bbl at exp{\let\\\bbl at inireader\<bbl at inikv@#1>}}}
-\let\bbl at renewlist\@empty
+\def\bbl at ini@calendar#1{%
+ \lowercase{\def\bbl at tempa{=#1=}}%
+ \bbl at replace\bbl at tempa{=date.gregorian}{}%
+ \bbl at replace\bbl at tempa{=date.}{}%
+ \in@{.licr=}{#1=}%
+ \ifin@
+   \ifcase\bbl at engine
+     \bbl at replace\bbl at tempa{.licr=}{}%
+   \else
+     \let\bbl at tempa\relax
+   \fi
+ \fi
+ \ifx\bbl at tempa\relax\else
+   \bbl at replace\bbl at tempa{=}{}%
+   \bbl at exp{%
+     \def\<bbl at inikv@#1>####1####2{%
+       \\\bbl at inidate####1...\relax{####2}{\bbl at tempa}}}%
+ \fi}
 \def\bbl at renewinikey#1/#2\@@#3{%
-  \bbl at ifunset{bbl at renew@#1}%
-    {\bbl at add@list\bbl at renewlist{#1}}%
-    {}%
-  \bbl at csarg\bbl at add{renew@#1}{\bbl at elt{#2}{#3}}}
-\def\bbl at inikv#1=#2\@@{%     key=value
-  \bbl at trim@def\bbl at tempa{#1}%
-  \bbl at trim\toks@{#2}%
-  \bbl at csarg\edef{@kv@\bbl at section.\bbl at tempa}{\the\toks@}}
+  \edef\bbl at tempa{\zap at space #1 \@empty}%   section
+  \edef\bbl at tempb{\zap at space #2 \@empty}%   key
+  \bbl at trim\toks@{#3}%                      value
+  \bbl at exp{%
+    \global\let\<bbl at KVP@\bbl at tempa/\bbl at tempb>\\\@empty % just a flag
+    \\\g at addto@macro\\\bbl at inidata{%
+       \\\bbl at elt{\bbl at tempa}{\bbl at tempb}{\the\toks@}}}}%
 \def\bbl at exportkey#1#2#3{%
   \bbl at ifunset{bbl@@kv@#2}%
     {\bbl at csarg\gdef{#1@\languagename}{#3}}%
@@ -2919,8 +2893,8 @@
        From babel-\bbl at cs{lini@\languagename}.ini:\\%
        \bbl at cs{@kv at identification.warning#1}\\%
        Reported }}}
-\let\bbl at inikv@identification\bbl at inikv
-\def\bbl at secpost@identification{%
+\def\bbl at ini@exports#1{%
+  % Identification always exported
   \bbl at iniwarning{}%
   \ifcase\bbl at engine
     \bbl at iniwarning{.pdflatex}%
@@ -2940,13 +2914,38 @@
     {\csname bbl at esname@\languagename\endcsname}}%
   \bbl at exportkey{sbcp}{identification.script.tag.bcp47}{}%
   \bbl at exportkey{sotf}{identification.script.tag.opentype}{DFLT}%
+  % Also maps bcp47 -> languagename
   \ifbbl at bcptoname
     \bbl at csarg\xdef{bcp at map@\bbl at cl{tbcp}}{\languagename}%
+  \fi
+  % Conditional
+  \ifnum#1>\z@         % 0 = only info, 1, 2 = basic, (re)new
+    \bbl at exportkey{lnbrk}{typography.linebreaking}{h}%
+    \bbl at exportkey{hyphr}{typography.hyphenrules}{}%
+    \bbl at exportkey{lfthm}{typography.lefthyphenmin}{2}%
+    \bbl at exportkey{rgthm}{typography.righthyphenmin}{3}%
+    \bbl at exportkey{prehc}{typography.prehyphenchar}{}%
+    \bbl at exportkey{hyotl}{typography.hyphenate.other.locale}{}%
+    \bbl at exportkey{hyots}{typography.hyphenate.other.script}{}%
+    \bbl at exportkey{intsp}{typography.intraspace}{}%
+    \bbl at exportkey{chrng}{characters.ranges}{}%
+    \bbl at exportkey{dgnat}{numbers.digits.native}{}%
+    \bbl at exportkey{frspc}{typography.frenchspacing}{u}%
+    \ifnum#1=\tw@           % only (re)new
+      \bbl at exportkey{rqtex}{identification.require.babel}{}%
+      \bbl at toglobal\bbl at savetoday
+      \bbl at toglobal\bbl at savedate
+      \bbl at savestrings
+    \fi
   \fi}
+\def\bbl at inikv#1#2{%     key=value
+  \toks@{#2}%            This hides #'s from ini values
+  \bbl at csarg\edef{@kv@\bbl at section.#1}{\the\toks@}}
+\let\bbl at inikv@identification\bbl at inikv
 \let\bbl at inikv@typography\bbl at inikv
 \let\bbl at inikv@characters\bbl at inikv
 \let\bbl at inikv@numbers\bbl at inikv
-\def\bbl at inikv@counters#1=#2\@@{%
+\def\bbl at inikv@counters#1#2{%
   \bbl at ifsamestring{#1}{digits}%
     {\bbl at error{The counter name 'digits' is reserved for mapping\\%
                 decimal digits}%
@@ -2969,18 +2968,11 @@
     \expandafter\bbl at buildifcase\bbl at tempb* \\ % Space after \\
     \bbl at csarg{\global\expandafter\let}{cntr@#1@\languagename}\bbl at tempa
   \fi}
-\def\bbl at after@ini{%
-  \bbl at linebreak@export
-  \bbl at exportkey{dgnat}{numbers.digits.native}{}%
-  \bbl at exportkey{rqtex}{identification.require.babel}{}%
-  \bbl at exportkey{frspc}{typography.frenchspacing}{u}% unset
-  \bbl at toglobal\bbl at savetoday
-  \bbl at toglobal\bbl at savedate}
 \ifcase\bbl at engine
-  \bbl at csarg\def{inikv at captions.licr}#1=#2\@@{%
+  \bbl at csarg\def{inikv at captions.licr}#1#2{%
     \bbl at ini@captions at aux{#1}{#2}}
 \else
-  \def\bbl at inikv@captions#1=#2\@@{%
+  \def\bbl at inikv@captions#1#2{%
     \bbl at ini@captions at aux{#1}{#2}}
 \fi
 \def\bbl at ini@captions at template#1#2{% string language tempa=capt-name
@@ -3030,7 +3022,7 @@
   \bbl at ifunset{bbl at map@#1@\languagename}%
     {\@nameuse{#1}}%
     {\@nameuse{bbl at map@#1@\languagename}}}
-\def\bbl at inikv@labels#1=#2\@@{%
+\def\bbl at inikv@labels#1#2{%
   \in@{.map}{#1}%
   \ifin@
     \ifx\bbl at KVP@labels\@nil\else
@@ -3218,7 +3210,7 @@
 \def\bbl at xdatecntr[#1|#2]{\localenumeral{#2}{#1}}
 \def\bbl at provide@lsys#1{%
   \bbl at ifunset{bbl at lname@#1}%
-    {\bbl at ini@basic{#1}}%
+    {\bbl at load@info{#1}}%
     {}%
   \bbl at csarg\let{lsys@#1}\@empty
   \bbl at ifunset{bbl at sname@#1}{\bbl at csarg\gdef{sname@#1}{Default}}{}%
@@ -3262,11 +3254,10 @@
      \fi}%
     {\hyphenchar\font\defaulthyphenchar}}
   % \fi}
-\def\bbl at ini@basic#1{%
+\def\bbl at load@info#1{%
   \def\BabelBeforeIni##1##2{%
     \begingroup
-      \bbl at add\bbl at secpost@identification{\closein\bbl at readstream }%
-      \bbl at read@ini{##1}1%
+      \bbl at read@ini{##1}0%
       \endinput          % babel- .tex may contain onlypreamble's
     \endgroup}%            boxed, to avoid extra spaces:
   {\bbl at input@texini{#1}}}
@@ -3360,7 +3351,7 @@
 \newcommand\BabelEnsureInfo{%
   \ifx\InputIfFileExists\@undefined\else
     \def\bbl at ensureinfo##1{%
-      \bbl at ifunset{bbl at lname@##1}{\bbl at ini@basic{##1}}{}}%
+      \bbl at ifunset{bbl at lname@##1}{\bbl at load@info{##1}}{}}%
   \fi
   \bbl at foreach\bbl at loaded{{%
     \def\languagename{##1}%

Modified: branches/branch2020/Master/texmf-dist/tex/generic/babel/babel.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/generic/babel/babel.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/generic/babel/babel.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -33,7 +33,7 @@
 %%
 
 \NeedsTeXFormat{LaTeX2e}[2005/12/01]
-\ProvidesPackage{babel}[2021/01/26 3.53 The Babel package]
+\ProvidesPackage{babel}[2021/02/22 3.54 The Babel package]
 \@ifpackagewith{babel}{debug}
   {\providecommand\bbl at trace[1]{\message{^^J[ #1 ]}}%
    \let\bbl at debug\@firstofone
@@ -216,7 +216,7 @@
   \else
     \expandafter\@firstofone
   \fi}
-  % Temporarily repeat here the code for errors
+  % Temporarily repeat here the code for errors. TODO.
   \def\bbl at error#1#2{%
     \begingroup
       \def\\{\MessageBreak}%
@@ -239,16 +239,17 @@
       \def\\{\MessageBreak}%
       \PackageInfo{babel}{#1}%
     \endgroup}
-    \def\bbl at nocaption{\protect\bbl at nocaption@i}
+\def\bbl at nocaption{\protect\bbl at nocaption@i}
 \def\bbl at nocaption@i#1#2{% 1: text to be printed 2: caption macro \langXname
   \global\@namedef{#2}{\textbf{?#1?}}%
   \@nameuse{#2}%
-  \bbl at warning{% TODO.
-    \@backslashchar#2 not set. Please, define it\\%
-    after the language has been loaded (typically\\%
-    in the preamble) with the help of\\%
-    \string\setlocalecaption. An example is:\\%
-    \string\setlocalecaption{mylang}{chapter}{..}\\
+  \edef\bbl at tempa{#1}%
+  \bbl at sreplace\bbl at tempa{name}{}%
+  \bbl at warning{%
+    \@backslashchar#1 not set for '\languagename'. Please,\\%
+    define it after the language has been loaded\\%
+    (typically in the preamble) with\\%
+    \string\setlocalecaption{\languagename}{\bbl at tempa}{..}\\%
     Reported}}
 \def\bbl at tentative{\protect\bbl at tentative@i}
 \def\bbl at tentative@i#1{%

Modified: branches/branch2020/Master/texmf-dist/tex/generic/babel/hyphen.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/generic/babel/hyphen.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/generic/babel/hyphen.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -37,10 +37,10 @@
     \wlog{File: #1 #4 #3 <#2>}%
     \let\ProvidesFile\@undefined}
 \fi
-\ProvidesFile{hyphen.cfg}[2021/01/26 3.53 Babel hyphens]
+\ProvidesFile{hyphen.cfg}[2021/02/22 3.54 Babel hyphens]
 \xdef\bbl at format{\jobname}
-\def\bbl at version{3.53}
-\def\bbl at date{2021/01/26}
+\def\bbl at version{3.54}
+\def\bbl at date{2021/02/22}
 \ifx\AtBeginDocument\@undefined
   \def\@empty{}
   \let\orig at dump\dump

Modified: branches/branch2020/Master/texmf-dist/tex/generic/babel/luababel.def
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/generic/babel/luababel.def	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/generic/babel/luababel.def	2021-02-24 18:00:42 UTC (rev 57872)
@@ -417,7 +417,7 @@
   \let\bbl at cjkintraspace\relax
   \directlua{
     Babel = Babel or {}
-    require'babel-data-cjk.lua'
+    require('babel-data-cjk.lua')
     Babel.cjk_enabled = true
     function Babel.cjk_linebreak(head)
       local GLYPH = node.id'glyph'
@@ -1413,21 +1413,86 @@
      \ifcase\bbl at thetextdir
        \let\bbl at pictresetdir\relax
      \else
-       \bodydir TLT
+       \ifcase#1\bodydir TLT  % Remember this sets the inner boxes
+         \or\textdir TLT
+         \else\bodydir TLT \textdir TLT
+       \fi
        % \(text|par)dir required in pgf:
        \def\bbl at pictresetdir{\bodydir TRT\pardir TRT\textdir TRT\relax}%
      \fi}%
    \ifx\AddToHook\@undefined\else
-     \AddToHook{env/picture/begin}{\bbl at pictsetdir\z@}%
+     \AddToHook{env/picture/begin}{\bbl at pictsetdir\tw@}%
+     \directlua{
+       Babel.get_picture_dir = true
+       Babel.picture_has_bidi = 0
+       function Babel.picture_dir (head)
+         if not Babel.get_picture_dir then return head end
+         for item in node.traverse(head) do
+           if item.id == node.id'glyph' then
+             local itemchar = item.char
+             % TODO. Copypaste pattern from Babel.bidi (-r)
+             local chardata = Babel.characters[itemchar]
+             local dir = chardata and chardata.d or nil
+             if not dir then
+               for nn, et in ipairs(Babel.ranges) do
+                 if itemchar < et[1] then
+                   break
+                 elseif itemchar <= et[2] then
+                   dir = et[3]
+                   break
+                 end
+               end
+             end
+             if dir and (dir == 'al' or dir == 'r') then
+               Babel.picture_has_bidi = 1
+             end
+           end
+         end
+         return head
+       end
+       luatexbase.add_to_callback("hpack_filter", Babel.picture_dir,
+         "Babel.picture_dir")
+     }%
+   \AtBeginDocument{%
+     \long\def\put(#1,#2)#3{%
+       \@killglue
+       % Try:
+       \ifx\bbl at pictresetdir\relax
+         \def\bbl at tempc{0}%
+       \else
+         \directlua{
+           Babel.get_picture_dir = true
+           Babel.picture_has_bidi = 0
+         }%
+         \setbox\z@\hb at xt@\z@{%
+           \@defaultunitsset\@tempdimc{#1}\unitlength
+           \kern\@tempdimc
+           #3\hss}%
+         \edef\bbl at tempc{\directlua{tex.print(Babel.picture_has_bidi)}}%
+       \fi
+       % Do:
+       \@defaultunitsset\@tempdimc{#2}\unitlength
+       \raise\@tempdimc\hb at xt@\z@{%
+         \@defaultunitsset\@tempdimc{#1}\unitlength
+         \kern\@tempdimc
+         {\ifnum\bbl at tempc>\z@\bbl at pictresetdir\fi#3}\hss}%
+       \ignorespaces}%
+       \MakeRobust\put}%
    \fi
    \AtBeginDocument
      {\ifx\tikz at atbegin@node\@undefined\else
         \let\bbl at OL@pgfpicture\pgfpicture
         \bbl at sreplace\pgfpicture{\pgfpicturetrue}%
-          {\bbl at pictsetdir\@ne\pgfpicturetrue}%
-        \bbl at add\pgfsys at beginpicture{\bbl at pictsetdir\@ne}%
+          {\bbl at pictsetdir\z@\pgfpicturetrue}%
+        \bbl at add\pgfsys at beginpicture{\bbl at pictsetdir\z@}%
         \bbl at add\tikz at atbegin@node{\bbl at pictresetdir}%
-      \fi}}
+        \bbl at sreplace\tikz{\begingroup}%
+          {\begingroup\bbl at pictsetdir\tw@}%
+      \fi
+      \ifx\AddToHook\@undefined\else
+        \AddToHook{env/tcolorbox/begin}{\bbl at pictsetdir\@ne}%
+      \fi
+      }}
   {}
 \IfBabelLayout{counters}%
   {\let\bbl at OL@@textsuperscript\@textsuperscript

Modified: branches/branch2020/Master/texmf-dist/tex/generic/babel/nil.ldf
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/generic/babel/nil.ldf	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/generic/babel/nil.ldf	2021-02-24 18:00:42 UTC (rev 57872)
@@ -32,7 +32,7 @@
 %% extension |.ins|) which are part of the distribution.
 %%
 
-\ProvidesLanguage{nil}[2021/01/26 3.53 Nil language]
+\ProvidesLanguage{nil}[2021/02/22 3.54 Nil language]
 \LdfInit{nil}{datenil}
 \ifx\l at nil\@undefined
   \newlanguage\l at nil

Modified: branches/branch2020/Master/texmf-dist/tex/latex/csquotes/csq-compat.def
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/csquotes/csq-compat.def	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/csquotes/csq-compat.def	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,5 +1,5 @@
 \ProvidesFile{csq-compat.def}
-  [2021-01-04 v5.2k csquotes backwards compatibility (JAW)]
+  [2021-02-22 v5.2l csquotes backwards compatibility (JAW)]
 
 \def\csq at getversion#1{%
   \expandafter\csq at getversion@i

Modified: branches/branch2020/Master/texmf-dist/tex/latex/csquotes/csquotes.def
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/csquotes/csquotes.def	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/csquotes/csquotes.def	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,5 +1,5 @@
 \ProvidesFile{csquotes.def}
-  [2021-01-04 v5.2k csquotes generic definitions (JAW)]
+  [2021-02-22 v5.2l csquotes generic definitions (JAW)]
 
 % Set defaults
 

Modified: branches/branch2020/Master/texmf-dist/tex/latex/csquotes/csquotes.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/csquotes/csquotes.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/csquotes/csquotes.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -12,7 +12,7 @@
 
 \NeedsTeXFormat{LaTeX2e}[2005/12/01]
 \ProvidesPackage{csquotes}
-  [2021-01-04 v5.2k context-sensitive quotations (JAW)]
+  [2021-02-22 v5.2l context-sensitive quotations (JAW)]
 
 %% Compatibility and requirements
 
@@ -2237,9 +2237,9 @@
 \newrobustcmd*{\textdel}{%
   \mktextdel}
 
-\newcommand{\mktextelp}{[\textellipsis\unkern]}
-\newcommand{\mktextelpins}[1]{[\textellipsis\unkern] [#1]}
-\newcommand{\mktextinselp}[1]{[#1] [\textellipsis\unkern]}
+\newcommand{\mktextelp}{[\textellipsis\unkern]\@}
+\newcommand{\mktextelpins}[1]{[\textellipsis\unkern]\@ [#1]}
+\newcommand{\mktextinselp}[1]{[#1] [\textellipsis\unkern]\@}
 \newcommand{\mktextins}[1]{[#1]}
 \newcommand{\mktextmod}[1]{[#1]}
 \newcommand{\mktextdel}[1]{[]}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/easybook/easybook.cls
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/easybook/easybook.cls	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/easybook/easybook.cls	2021-02-24 18:00:42 UTC (rev 57872)
@@ -9,7 +9,7 @@
 %%   https://creativecommons.org/licenses/by/4.0/legalcode
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2021/02/21}{1.23f}{}
+\ProvidesExplClass{easybook}{2021/02/23}{1.23g}{}
 
 \cs_generate_variant:Nn \keys_define:nn {nx}
 \cs_generate_variant:Nn \int_to_arabic:n {v}
@@ -1046,7 +1046,7 @@
 
     bibstyle            .choice:,
     bibstyle            .value_required:n = true,
-    bibstyle/number     .code:n =
+    bibstyle/numerical  .code:n =
       {
         \tl_set:Nn  \l__bib_style_tl{#1}
         \tl_clear:N \l__bib_mysty_tl
@@ -1058,7 +1058,7 @@
       },
     bibstyle/unknown    .code:n =
       {\tl_set_eq:NN \l__bib_mysty_tl\l_keys_value_tl},
-    bibstyle            .initial:n = number,
+    bibstyle            .initial:n = numerical,
 
     citestyle           .code:n =
       {\tl_set:Nn \l__bib_citesty_tl{#1}},
@@ -1070,10 +1070,10 @@
   {
     \tl_if_empty:NTF \l__bib_mysty_tl
       {
-        \tl_if_eq:VnT \l__bib_style_tl{number}
+        \tl_if_eq:VnT \l__bib_style_tl{numerical}
           {
             \bibliographystyle{gbt7714-numerical}
-            \setcitestyle{square,comma,super}
+            \setcitestyle{comma,square,super}
           }
         \tl_if_eq:VnT \l__bib_style_tl{authoryear}
           {\bibliographystyle{gbt7714-author-year}}
@@ -1081,6 +1081,8 @@
       }{
         \exp_args:NV \bibliographystyle\l__bib_mysty_tl
       }
+    \tl_if_empty:NF \l__bib_citesty_tl
+      {\exp_args:NV \setcitestyle\l__bib_citesty_tl}
     \cs_set:Npn \bibsection{\__title_mark_intoc:n \bibname}
     \skip_set:Nn \bibsep{0ex}
     \NewDocumentCommand\printbibliography{o}
@@ -1100,7 +1102,7 @@
         \__put_biblatex:n {style = \l__bib_mysty_tl}
       }
     \tl_if_empty:NF \l__bib_citesty_tl
-      {\__put_biblatex:n {citestyle = \l__bib_mysty_tl}}
+      {\__put_biblatex:n {citestyle = \l__bib_citesty_tl}}
     \__put_biblatex:n {backend = biber}
   }
 \cs_new_protected:Npn \__biblatex_after_set:
@@ -1178,7 +1180,7 @@
     rulecolor = \color{ctex at frame},
     commentstyle = \color{gray},
     emphstyle = \color{ctex at emph},
-    emph = {caption,subcaption,tabularx},
+    emph = {caption,makecell,subcaption,tabularx},
     keywordstyle =
       \lst at ifdisplaystyle\bfseries\color{ctex at emph}\else\color{ctex at verb}\fi,
     morekeywords =

Deleted: branches/branch2020/Master/texmf-dist/tex/latex/microtype/README.TEXLIVE
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/README.TEXLIVE	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/README.TEXLIVE	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,11 +0,0 @@
-The files below have been removed in the TeX Live installation of
-the current package, possibly because of missing source (e.g., a
-PDF with no source), possibly because their only purpose is to support
-nonfree fonts or other software, possibly for other reasons.
-More info: https://tug.org/texlive/pkgcontrib.html#requirements
-
-If this is a concern, please contact the package maintainer.
-
-	mt-euroitc.cfg
-	mt-PalatinoLinotype.cfg
-	mt-pad.cfg

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/letterspace.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/letterspace.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/letterspace.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at
@@ -33,7 +33,7 @@
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage
   {letterspace}
-  [2020/12/07 v2.8
+  [2021/02/22 v2.8a
    Robust letterspacing
    (RS)]
 \def\MT at MT

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype-luatex.def
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype-luatex.def	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype-luatex.def	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at
@@ -30,21 +30,24 @@
 %%
 \ProvidesFile
   {microtype-luatex.def}
-  [2020/12/07 v2.8
+  [2021/02/22 v2.8a
    Definitions specific to
    luatex
    (RS)]
 \let\MT at lua\directlua
-\def\MT at luatex@no{5}
-\ifnum\luatexversion<90
-  \def\MT at luatex@no{4}
-  \ifnum\luatexversion<85
-    \def\MT at luatex@no{3}
-    \ifnum\luatexversion<62
-      \def\MT at luatex@no{2}
-      \ifnum\luatexversion<36
-        \def\MT at lua{\directlua0}
-        \def\MT at luatex@no{1}
+\def\MT at luatex@no{6}
+\ifnum\luatexversion<110
+  \def\MT at luatex@no{5}
+  \ifnum\luatexversion<90
+    \def\MT at luatex@no{4}
+    \ifnum\luatexversion<85
+      \def\MT at luatex@no{3}
+      \ifnum\luatexversion<62
+        \def\MT at luatex@no{2}
+        \ifnum\luatexversion<36
+          \def\MT at lua{\directlua0}
+          \def\MT at luatex@no{1}
+        \fi
       \fi
     \fi
   \fi
@@ -57,6 +60,7 @@
 \@ifl at t@r\fmtversion{2016/01/01}\relax{\RequirePackage{luatexbase}}
 \@ifl at t@r\fmtversion{2017/01/01}\relax{\RequirePackage{luaotfload}}
 \MT at lua{require("microtype")}
+\MT at requires@luatex6{\let\MT at glet\glet}\relax
 \def\MT at ifint#1{\csname\MT at lua{microtype.if_int([[#1]])}\endcsname}
 \def\MT at ifdimen#1{\csname\MT at lua{microtype.if_dimen([[#1]])}\endcsname}
 \def\MT at ifstreq#1#2{\csname\MT at lua{microtype.if_str_eq([[#1]],[[#2]])}\endcsname}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype-pdftex.def
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype-pdftex.def	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype-pdftex.def	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at
@@ -30,7 +30,7 @@
 %%
 \ProvidesFile
   {microtype-pdftex.def}
-  [2020/12/07 v2.8
+  [2021/02/22 v2.8a
    Definitions specific to
    pdftex
    (RS)]

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype-xetex.def
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype-xetex.def	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype-xetex.def	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at
@@ -30,7 +30,7 @@
 %%
 \ProvidesFile
   {microtype-xetex.def}
-  [2020/12/07 v2.8
+  [2021/02/22 v2.8a
    Definitions specific to
    xetex
    (RS)]

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at
@@ -40,7 +40,7 @@
 %%
 \ProvidesFile
   {microtype.cfg}
-  [2020/12/07 v2.8
+  [2021/02/22 v2.8a
    microtype main configuration file
    (RS)]
 
@@ -110,7 +110,7 @@
 %%% -----------------------------------------------------------------------
 %%% FONT VARIANTS AND ALIASES
 
-\DeclareMicrotypeVariants{x,j,w,a,d,0,1}
+\DeclareMicrotypeVariants{x,j,w,a,d,0,1,-LF,-TLF,-OsF,-TOsF}
 
 \MT at if@false
 \ifx\UnicodeEncodingName\@undefined\else
@@ -129,7 +129,12 @@
 \DeclareMicrotypeAlias{zer} {cmr}          % zefonts
 \DeclareMicrotypeAlias{cmor}{cmr}          % eco
 \DeclareMicrotypeAlias{hfor}{cmr}          % hfoldsty
+\DeclareMicrotypeAlias{mlmr}{cmr}          % mlmodern
+\DeclareMicrotypeAlias{mlmsy}{cmsy}        %   "
+\DeclareMicrotypeAlias{mlmm} {cmm}         %   "
 \DeclareMicrotypeAlias{New Computer Modern}{Latin Modern Roman}
+\DeclareMicrotypeAlias{NewCM10-Book.otf}   {Latin Modern Roman}
+\DeclareMicrotypeAlias{NewCM10-Regular.otf}{Latin Modern Roman}
 %% -- Palatino
 \DeclareMicrotypeAlias{pxr} {ppl}          % pxfonts
 \DeclareMicrotypeAlias{qpl} {ppl}          % TeX Gyre Pagella (formerly: qfonts/QuasiPalatino)
@@ -141,11 +146,11 @@
 \DeclareMicrotypeAlias{zpltosf}{pplj}      %    "
 \DeclareMicrotypeAlias{Domitian-TLF} {pplx}% domitian
 \DeclareMicrotypeAlias{Domitian-TOsF}{pplj}%    "
-\DeclareMicrotypeAlias{Domitian}        {Palatino Linotype}
-\DeclareMicrotypeAlias{TeX Gyre Pagella}{Palatino Linotype}
-\DeclareMicrotypeAlias{Palatino LT Std} {Palatino Linotype}
-\DeclareMicrotypeAlias{Palatino}        {Palatino Linotype}
-\DeclareMicrotypeAlias{Asana Math}      {Palatino Linotype}
+\DeclareMicrotypeAlias{Palatino Linotype}{Palatino}
+\DeclareMicrotypeAlias{Palatino LT Std}  {Palatino}
+\DeclareMicrotypeAlias{TeX Gyre Pagella} {Palatino}
+\DeclareMicrotypeAlias{Domitian}         {Palatino}
+\DeclareMicrotypeAlias{Asana Math}       {Palatino}
 %% -- Times New Roman
 \DeclareMicrotypeAlias{txr}{ptm}           % txfonts
 \DeclareMicrotypeAlias{ntxlf}{ptmx}        % newtxtext
@@ -152,10 +157,10 @@
 \DeclareMicrotypeAlias{ntxosf}{ptmj}       %    "
 \DeclareMicrotypeAlias{ntxtlf}{ptmx}       %    "
 \DeclareMicrotypeAlias{ntxtosf}{ptmj}      %    "
-\DeclareMicrotypeAlias{Tempora-TLF}{ptmx}  % tempora
+\DeclareMicrotypeAlias{Tempora-TLF} {ptmx} % tempora
 \DeclareMicrotypeAlias{Tempora-TOsF}{ptmj} %    "
 \DeclareMicrotypeAlias{qtm}{ptm}           % TeX Gyre Termes (formerly: qfonts/QuasiTimes)
-\DeclareMicrotypeAlias{STEP-TLF}{ptmx}     % step
+\DeclareMicrotypeAlias{STEP-TLF} {ptmx}    % step
 \DeclareMicrotypeAlias{STEP-TOsF}{ptmj}    %   "
 \DeclareMicrotypeAlias{stix} {ptm}         % stix
 \DeclareMicrotypeAlias{stix2}{ptm}         % stix2
@@ -170,6 +175,9 @@
 \DeclareMicrotypeAlias{zgmj}{ugm}          %    "
 \DeclareMicrotypeAlias{zgmI}{ugm}          %    "
 \DeclareMicrotypeAlias{zgmq}{ugm}          %    "
+\DeclareMicrotypeAlias{pad} {EBGaramond-LF}% Adobe Garamond
+\DeclareMicrotypeAlias{padx}{EBGaramond-TLF}%   "
+\DeclareMicrotypeAlias{padj}{EBGaramond-TOsF}%  "
 %% --
 \DeclareMicrotypeAlias{ulg}{blg}           % URW LetterGothic -> Bitstream LetterGothic12Pitch
 \DeclareMicrotypeAlias{zeur}{eur}          % Euler VM
@@ -176,7 +184,6 @@
 \DeclareMicrotypeAlias{zeus}{eus}          %    "
 \DeclareMicrotypeAlias{zpeus}   {zpeu}     % Adobe Euro sans -> serif
 \DeclareMicrotypeAlias{eurosans}{zpeu}     % Adobe Euro sans -> serif
-\DeclareMicrotypeAlias{euroitcs}{euroitc}  % ITC Euro sans -> serif
 
 %%% -----------------------------------------------------------------------
 %%% INTERACTION WITH THE `babel' PACKAGE
@@ -356,7 +363,7 @@
    }
 
 \DeclareCharacterInheritance
-   { encoding = {EU1,EU2,TU} }
+   { encoding = {TU,EU1,EU2} }
    { A = {\`A,\'A,\^A,\~A,\"A,\r A,\k A,\u A},
      a = {\`a,\'a,\^a,\~a,\"a,\r a,\k a,\u a},
      C = {\'C,\c C,\v C},
@@ -822,6 +829,11 @@
     {,}= {   , 250,-200}
    }
 
+\SetExtraSpacing
+   [ name = empty ]
+   { encoding = {TS1} }
+   { }
+
 %%% -----------------------------------------------------------------------
 %%% ADDITIONAL KERNING
 

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype.lua
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype.lua	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype.lua	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 -- 
 --                       The `microtype' package
 --         Subliminal refinements towards typographical perfection
---           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+--           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 -- 
 -- This work may be distributed and/or modified under the conditions of the
 -- LaTeX Project Public License, either version 1.3c of this license or (at
@@ -34,8 +34,8 @@
 local microtype  = microtype
 microtype.module = {
     name         = "microtype",
-    version      = "2.8",
-    date         = "2020/12/07",
+    version      = "2.8a",
+    date         = "2021/02/22",
     description  = "microtype module.",
     author       = "E. Roux, R. Schlicht and P. Gesang",
     copyright    = "E. Roux, R. Schlicht and P. Gesang",

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/microtype.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at
@@ -29,7 +29,7 @@
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage
   {microtype}
-  [2020/12/07 v2.8
+  [2021/02/22 v2.8a
    Micro-typographical refinements
    (RS)]
 \def\MT at MT
@@ -1536,10 +1536,8 @@
   \else
     \MT at let@cn\@tempa{\MT at val}%
   \fi
-  \ifx\@tempa\relax \else
-    \begingroup
-      \def\set at fontsize##1##2##3##4\@nil{\endgroup\def\MT at val{##2}}%
-      \@tempa\@nil
+  \ifx\@tempa\relax\else
+    \MT at get@size@
   \fi
   \MT at ifdimen\MT at val{%
     \@defaultunits\@tempdima\MT at val pt\relax\@nnil
@@ -1550,6 +1548,23 @@
     \let\MT at val\relax
   }%
 }
+\def\MT at get@size@@{%
+  \begingroup
+    \def\set at fontsize##1##2##3##4\@nil{\endgroup\def\MT at val{##2}}%
+    \@tempa\@nil
+}
+^^X\@ifclassloaded{svjour3}{%
+^^X  \def\MT at get@size@{%
+^^X    \@tempcnta=\currentiflevel
+^^X    \MT at get@size@@
+^^X    \loop
+^^X      \ifnum\numexpr\currentiflevel-1>\@tempcnta
+^^X      \csname fi\endcsname
+^^X    \repeat
+^^X  }%
+^^X}{%
+  \let\MT at get@size@\MT at get@size@@
+^^X}
 \def\MT at define@set at key@font#1{%
   \define at key{MT@#1 at set}{font}[]{%
     \MT at glet@nc{MT@#1list at font@\MT at curr@set at name}\@empty
@@ -1840,14 +1855,16 @@
 }
 \def\MT at set@inh at list#1#2{%
   \MT at ifempty\MT at inh@feat{%
-    \MT at map@clist at c\MT at features{{\MT at declare@char at inh{##1}{#1}{#2}}}%
+    \MT at map@clist at c\MT at features{{%
+      \MT at ifstreq{##1}{tr}\relax{\MT at declare@char at inh{##1}{#1}{#2}}%
+    }}%
   }{%
     \MT at map@clist at c\MT at inh@feat{{%
       \KV@@sp at def\@tempa{##1}%
       \MT at ifempty\@tempa\relax{%
-        \MT at exp@one at n\MT at declare@char at inh
-          {\csname MT at rbba@\@tempa\endcsname}{#1}{#2}%
-      }%
+        \edef\@tempa{\csname MT at rbba@\@tempa\endcsname}%
+        \MT at ifstreq\@tempa{tr}\relax{%
+          \MT at exp@one at n\MT at declare@char at inh{\@tempa}{#1}{#2}}}%
     }}%
   }%
   \MT at end@catcodes
@@ -1878,6 +1895,12 @@
     \expandafter\MT at inh@do
   \fi
 }
+\MT at gdef@n{MT at pr@c at U/euroitc///}{euroitc}
+\MT at gdef@n{MT at pr@c at U/euroitcs///}{euroitc}
+\MT at gdef@n{MT at pr@c at U/euroitc//it/}{euroitci}
+\MT at gdef@n{MT at pr@c at U/euroitcs//it/}{euroitci}
+\MT at gdef@n{MT at pr@c at euroitc}{E={100,50}}
+\MT at gdef@n{MT at pr@c at euroitci}{E={100,}}
 \def\MT at permute{%
   \let\MT at cnt@encoding\@ne
   \MT at permute@

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-CharisSIL.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-CharisSIL.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-CharisSIL.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Copied: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-EBGaramond.cfg (from rev 57871, trunk/Master/texmf-dist/tex/latex/microtype/mt-EBGaramond.cfg)
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-EBGaramond.cfg	                        (rev 0)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-EBGaramond.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -0,0 +1,323 @@
+%%
+%% This is file `mt-EBGaramond.cfg',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% microtype.dtx  (with options: `config,cfg-t,ebg')
+%% 
+%% ------------------------------------------------------------------------
+%% 
+%%                       The `microtype' package
+%%         Subliminal refinements towards typographical perfection
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
+%% 
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License, either version 1.3c of this license or (at
+%% your option) any later version. The latest version of this license is in:
+%% http://www.latex-project.org/lppl.txt, and version 1.3c or later is part
+%% of all distributions of LaTeX version 2005/12/01 or later.
+%% 
+%% This work has the LPPL maintenance status `author-maintained'.
+%% 
+%% This work consists of the files microtype.dtx and microtype.ins and the
+%% derived files microtype.sty, microtype-pdftex.def, microtype-luatex.def,
+%% microtype-xetex.def, microtype.lua and letterspace.sty.
+%% 
+%% ------------------------------------------------------------------------
+%%   This is a font-specific configuration file for the `microtype' package.
+%%   It may contain settings for font expansion and character protrusion,
+%%   tracking, interword spacing and additional kerning, as well as
+%%   character inheritance declarations.
+%%   Please consult the documentation for details.
+%% 
+%%   If you think you have found improvements to these settings, please
+%%   let me know.
+%% 
+%%   When modifying this file, also change the identification line below.
+%% ------------------------------------------------------------------------ 
+%%
+\ProvidesFile
+  {mt-EBGaramond.cfg}[2021/02/22 v1.6 microtype config. file: EB Garamond / Adobe Garamond (RS)]
+
+%%% -----------------------------------------------------------------------
+%%% PROTRUSION
+
+\SetProtrusion
+   [ name     = EBGaramond-default ]
+   { encoding = OT1,
+     family   = {EBGaramond-LF,EBGaramond-OsF,EBGaramond-TLF,EBGaramond-TOsF} }
+   {
+     A = {50,50},
+   \AE = {50,  },
+     C = {50,  },
+     D = {  ,50},
+     F = {  ,50},
+     G = {50,  },
+     J = {50,  },
+     K = {  ,50},
+     L = {  ,50},
+     O = {50,50},
+   \OE = {50,  },
+     Q = {50,70},
+     T = {50,50},
+     V = {50,50},
+     W = {50,50},
+     X = {50,50},
+     Y = {50,50},
+     k = {  ,50},
+     p = {50,50},
+     q = {50,  },
+     r = {  ,50},
+     t = {  ,70},
+     v = {50,50},
+     w = {50,50},
+     x = {50,50},
+     y = {  ,50},
+     1 = {150,150},
+     2 = {50,50},
+     3 = {50,50},
+     4 = {50,50},
+     5 = {50,50},
+     6 = {50,50},
+     7 = {50,80},
+     9 = {50,50},
+     . = { ,700},
+    {,}= { ,500},
+     : = { ,500},
+     ; = { ,300},
+     ! = { ,100},
+     ? = { ,100},
+     @ = {50,50},
+     ~ = {200,250},
+     & = {50,100},
+    \% = {50,50},
+     * = {300,300},
+     + = {300,300},
+     ( = {100,   },    ) = {   ,200},
+     / = {100,200},
+     - = {300,500},
+     \textendash       = {300,300},   \textemdash        = {200,200},
+     \textquoteleft    = {500,700},   \textquoteright    = {500,700},
+     \textquotedblleft = {300,400},   \textquotedblright = {300,400}
+   }
+
+\SetProtrusion
+   [ name     = EBGaramond-T1,
+     load     = EBGaramond-default ]
+   { encoding = {T1,LY1},
+     family   = {EBGaramond-LF,EBGaramond-TLF,EBGaramond-OsF,EBGaramond-TOsF} }
+   {
+       _ = {100,100},
+     \textbackslash    = {100,200},
+     \quotesinglbase   = {400,400},   \quotedblbase      = {400,400},
+     \guilsinglleft    = {400,400},   \guilsinglright    = {300,500},
+     \guillemotleft    = {300,300},   \guillemotright    = {200,400},
+     \textexclamdown   = {100,   },   \textquestiondown  = {100,   },
+     \textbraceleft    = {400,200},   \textbraceright    = {200,400},
+     \textless         = {200,100},   \textgreater       = {100,200}
+   }
+
+\SetProtrusion
+   [ name     = EBGaramond-it   ]
+   { encoding = OT1,
+     family   = {EBGaramond-LF,EBGaramond-TLF,EBGaramond-OsF,EBGaramond-TOsF},
+     shape    = {it,sl}  }
+   {
+     A = {50,  },
+   \AE = {50,  },
+     B = {50,  },
+     C = {100, },
+     D = {50,50},
+     E = {50,  },
+     F = {100, },
+     G = {100, },
+     H = {50,  },
+     I = {50,  },
+     J = {50,  },
+     K = {50,  },
+     L = {50,  },
+     O = {100, },
+   \OE = {100, },
+     P = {50,  },
+     Q = {100, },
+     R = {50,  },
+     S = {50,  },
+     $ = {50,  },
+     T = {100, },
+     U = {50,  },
+     V = {100, },
+     W = {100, },
+     f = { ,-100},
+     1 = {150, },
+     2 = {50,  },
+     4 = {150, },
+     7 = {100, },
+     . = { ,500},
+    {,}= { ,500},
+     : = { ,300},
+     ; = { ,300},
+     & = {50,50},
+    \% = {100, },
+     * = {500,100},
+     + = {250,200},
+     @ = {50,50},
+     ~ = {200,150},
+     ( = {200, },    ) = {  ,200},
+     / = {100,200},
+     - = {300,400},
+     \textendash       = {300,300},   \textemdash        = {200,200},
+     \textquoteleft    = {800,200},   \textquoteright    = {800,200},
+     \textquotedblleft = {700,200},   \textquotedblright = {700,200}
+   }
+
+\SetProtrusion
+   [ name     = EBGaramond-it-T1,
+     load     = EBGaramond-it   ]
+   { encoding = {T1,LY1},
+     family   = {EBGaramond-LF,EBGaramond-TLF,EBGaramond-OsF,EBGaramond-TOsF},
+     shape    = {it,sl}  }
+   {
+     _ = {100,100},
+     156 = {50,  },  % IJ
+     \textbackslash    = {100,200},
+     \quotesinglbase   = {500,500},   \quotedblbase      = {400,400},
+     \guilsinglleft    = {500,400},   \guilsinglright    = {300,500},
+     \guillemotleft    = {300,300},   \guillemotright    = {200,400},
+     \textexclamdown   = {100,   },   \textquestiondown  = {200,   },
+     \textbraceleft    = {400,100},   \textbraceright    = {200,200},
+     \textless         = {300,100},   \textgreater       = {200,100}
+  }
+
+\SetProtrusion
+   [ name     = EBGaramond-sc,
+     load     = EBGaramond-default ]
+   { encoding = OT1,
+     family   = {EBGaramond-LF,EBGaramond-TLF,EBGaramond-OsF,EBGaramond-TOsF},
+     shape    = sc }
+   {
+     a = {50,50},
+   \ae = {50,  },
+     d = {  ,50},
+     f = {  ,50},
+     g = {50,  },
+     j = {50,  },
+     l = {  ,50},
+   013 = {  ,50}, % fl
+     o = {50,50},
+   \oe = {50,  },
+     q = {50,70},
+     r = {  , 0},
+     t = {50,50},
+     y = {50,50}
+   }
+
+\SetProtrusion
+   [ name     = EBGaramond-sc-T1,
+     load     = EBGaramond-T1     ]
+   { encoding = {T1,LY1},
+     family   = {EBGaramond-LF,EBGaramond-TLF,EBGaramond-OsF,EBGaramond-TOsF},
+     shape    = sc }
+   {
+     a = {50,50},
+   \ae = {50,  },
+     d = {  ,50},
+     f = {  ,50},
+     g = {50,  },
+     j = {50,  },
+     l = {  ,50},
+   029 = {  ,50}, % fl
+     o = {50,50},
+   \oe = {50,  },
+     q = {50,70},
+     r = {  , 0},
+     t = {50,50},
+     y = {50,50}
+   }
+
+\SetProtrusion
+   [ name     = EBGaramond-textcomp ]
+   { encoding = TS1,
+     family   = {EBGaramond-LF,EBGaramond-TLF,EBGaramond-OsF,EBGaramond-TOsF} }
+   {
+     \textquotestraightbase    = {400,400},
+     \textquotestraightdblbase = {400,400},
+     \texttwelveudash          = {200,200},
+     \textthreequartersemdash  = {150,150},
+     \textquotesingle          = {400,500},
+     \textasteriskcentered     = {300,300},
+     \textthreeoldstyle        = { 50,   },
+     \textfouroldstyle         = { 50,   },
+     \textsevenoldstyle        = { 50, 80},
+     \textminus                = {300,300},
+     \textlbrackdbl            = {100,   },
+     \textrbrackdbl            = {   ,100},
+     \texttildelow             = {200,250},
+     \textdagger               = {100,100},
+     \textdaggerdbl            = { 80, 80},
+     \textbullet               = {   ,100},
+     \textcelsius              = { 80,   },
+     \textflorin               = {   ,100},
+     \textcolonmonetary        = { 50,   },
+     \texttrademark            = {100,100},
+     \textcopyright            = {100,100},
+     \textordfeminine          = {200,200},
+     \textlnot                 = {200,   },
+     \textregistered           = {100,100},
+     \textdegree               = {400,400},
+     \textpm                   = {150,200},
+     \texttwosuperior          = {200,200},
+     \textthreesuperior        = {200,200},
+     \textparagraph            = {   ,100},
+     \textperiodcentered       = {300,400},
+     \textonesuperior          = {200,200},
+     \textordmasculine         = {200,200},
+     \texteuro                 = { 50,100},
+     \texttimes                = {100,150},
+     \textdiv                  = {150,200}
+   }
+
+\SetProtrusion
+   [ name     = EBGaramond-textcomp-it ]
+   { encoding = TS1,
+     family   = {EBGaramond-LF,EBGaramond-TLF,EBGaramond-OsF,EBGaramond-TOsF},
+     shape    = {it,sl} }
+   {
+     \textquotestraightbase    = {400,400},
+     \textquotestraightdblbase = {300,400},
+     \texttwelveudash          = {200,200},
+     \textthreequartersemdash  = {150,150},
+     \textquotesingle          = {800,100},
+     \textasteriskcentered     = {500,100},
+     \textoneoldstyle          = {100,   },
+     \texttwooldstyle          = { 50,   },
+     \textfouroldstyle         = { 50,100},
+     \textsevenoldstyle        = { 50,   },
+     \textminus                = {300,300},
+     \textlbrackdbl            = {100,   },
+     \textrbrackdbl            = {   ,100},
+     \texttildelow             = {200,250},
+     \textdagger               = {200,100},
+     \textdaggerdbl            = { 80, 80},
+     \textbullet               = {300,   },
+     \textcelsius              = {200,   },
+     \textflorin               = {100,   },
+     \textcolonmonetary        = {100,   },
+     \texttrademark            = {200,   },
+     \textcopyright            = {200,100},
+     \textlnot                 = {300,   },
+     \textregistered           = {200,100},
+     \textdegree               = {500,100},
+     \textpm                   = {200,150},
+     \textonesuperior          = {300,100},
+     \texttwosuperior          = {300,   },
+     \textthreesuperior        = {300,   },
+     \textperiodcentered       = {300,400},
+     \texteuro                 = {100,   },
+     \texttimes                = {200,100},
+     \textdiv                  = {200,200}
+   }
+
+\endinput
+%%
+%% End of file `mt-EBGaramond.cfg'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-LatinModernRoman.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-LatinModernRoman.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-LatinModernRoman.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at
@@ -38,7 +38,7 @@
 %% ------------------------------------------------------------------------ 
 %%
 \ProvidesFile
-  {mt-LatinModernRoman.cfg}[2013/03/13 v1.0 microtype config. file: Latin Modern Roman (RS)]
+  {mt-LatinModernRoman.cfg}[2021/02/21 v1.1 microtype config. file: Latin Modern Roman (RS)]
 
 %%% -----------------------------------------------------------------------
 %%% INHERITANCE
@@ -86,7 +86,7 @@
      c = {ç,ć,ĉ,ċ,č},
      d = {đ,ḍ,ḏ},
      e = {è,é,ê,ë,ē,ĕ,ė,ę,ě,ȅ,ẹ,ẻ,ẽ,ế,ề,ể,ễ,ệ},
-     f = {/f_f},
+     f = {ff}, % Unicode 64256, glyph name in Latin Modern: /f_f ; in New Computer Modern: /ff
      g = {ĝ,ğ,ġ,ģ,ǧ,ǵ},
      h = {ĥ,ħ,ḥ,ḧ,ḫ},
      i = {ì,í,î,ï,ĩ,ī,ĭ,į,ı,ȉ,ỉ,ị},

Copied: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-Palatino.cfg (from rev 57871, trunk/Master/texmf-dist/tex/latex/microtype/mt-Palatino.cfg)
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-Palatino.cfg	                        (rev 0)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-Palatino.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -0,0 +1,330 @@
+%%
+%% This is file `mt-Palatino.cfg',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% microtype-utf.dtx  (with options: `Palatino')
+%% 
+%% ------------------------------------------------------------------------
+%% 
+%%                       The `microtype' package
+%%         Subliminal refinements towards typographical perfection
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
+%% 
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License, either version 1.3c of this license or (at
+%% your option) any later version. The latest version of this license is in:
+%% http://www.latex-project.org/lppl.txt, and version 1.3c or later is part
+%% of all distributions of LaTeX version 2005/12/01 or later.
+%% 
+%% This work has the LPPL maintenance status `author-maintained'.
+%% 
+%% This work consists of the files microtype.dtx and microtype.ins and the
+%% derived files microtype.sty, microtype-pdftex.def, microtype-luatex.def,
+%% microtype-xetex.def, microtype.lua and letterspace.sty.
+%% 
+%% ------------------------------------------------------------------------
+%%   This is a font-specific configuration file for the `microtype' package.
+%%   It may contain settings for font expansion and character protrusion,
+%%   tracking, interword spacing and additional kerning, as well as
+%%   character inheritance declarations.
+%%   Please consult the documentation for details.
+%% 
+%%   If you think you have found improvements to these settings, please
+%%   let me know.
+%% 
+%%   When modifying this file, also change the identification line below.
+%% ------------------------------------------------------------------------ 
+%%
+%%     These settings have been prepared by, and are copied with the
+%%     generous permission of:
+%%       Loren B. Davis.  (c) 2012
+%% 
+%%  ------------------------------------------------------------------------
+%%   Palatino is a registered trademark of Linotype GmbH.
+%%   Used without permission.
+%% ------------------------------------------------------------------------ 
+%%
+\ProvidesFile
+  {mt-Palatino.cfg}[2012/03/10 v1.0 microtype config. file: Palatino and similar fonts (LBD)]
+
+%%% -----------------------------------------------------------------------
+%%% INHERITANCE
+
+%% for xetex (EU1) and luatex (EU2), resp. both (TU)
+\DeclareCharacterInheritance
+   { encoding = {EU1,EU2,TU},
+     family = {Palatino} }
+   { A = {À,Á,Â,Ã,Ä,Ā,Ă,Ą,Ǎ,Ǟ,Ǡ,Ȧ,Ǻ,Ȁ,Ȃ,Ḁ,Ạ,Ả,Ấ,Ầ,Ẩ,Ẫ,Ậ,Ắ,Ằ,Ẳ,Ẵ,Ặ,Ꜳ},
+     B = {Ḃ,Ḅ,Ḇ},
+     C = {Ç,Ć,Ĉ,Ḉ,Ċ,Č},
+     D = {Ď,Ḋ,Ḍ,Ḏ,Ḑ,Ḓ},
+     E = {È,É,Ê,Ë,Ē,Ĕ,Ė,Ę,Ě,Ȅ,Ȩ,Ȇ,Ḕ,Ḗ,Ḙ,Ḛ,Ḝ,Ẹ,Ẻ,Ẽ,Ế,Ề,Ể,Ễ,Ệ},
+     F = {Ḟ},
+     G = {Ĝ,Ğ,Ġ,Ģ,Ǧ,Ǵ,Ḡ},
+     H = {Ĥ,Ȟ,Ḣ,Ḥ,Ḧ,Ḩ,Ḫ},
+     I = {Ì,Í,Î,Ȉ,Ï,Į,Ĩ,Ị,Ī,İ,Ǐ,Ỉ,Ȋ,Ĭ,Ḭ,Ï},
+     J = {Ĵ},
+     K = {Ķ,Ǩ,Ḱ,Ḳ,Ḵ},
+     L = {Ĺ,Ļ,Ľ,Ḷ,Ḹ,Ḻ,Ḽ,Ỻ,Ŀ,Ł}, % L·
+     M = {Ḿ,Ṁ,Ṃ},
+     N = {Ñ,Ń,Ņ,Ň,Ǹ,Ṅ,Ṇ,Ṉ,Ṋ},
+     O = {Ò,Ó,Ô,Õ,Ö,Ō,Ŏ,Ő,Ǒ,Ǫ,Ǭ,Ȍ,Ȏ,Ȫ,Ȭ,Ȯ,Ȱ,Ṍ,Ṏ,Ṑ,Ṓ,Ọ,Ỏ,Ố,Ồ,Ổ,Ỗ,Ộ,Ớ,Ờ,Ở,Ỡ,Ơ},
+     P = {Ṕ,Ṗ},
+     R = {Ŕ,Ŗ,Ř,Ȑ,Ȓ,Ṙ,Ṛ,Ṝ,Ṟ},
+     S = {Ś,Ŝ,Ş,Š,Ș,Ṡ,Ṣ,Ṥ,Ṧ,Ṩ},
+     T = {Ţ,Ť,Ț,Ṫ,Ṭ,Ṯ,Ṱ},
+     U = {Ù,Ú,Û,Ü,Ũ,Ū,Ŭ,Ů,Ű,Ų,Ǔ,Ǖ,Ǘ,Ǚ,Ǜ,Ȕ,Ȗ,Ṳ,Ṵ,Ṷ,Ṹ,Ṻ,Ụ,Ủ,Ứ,Ừ,Ử,Ữ,Ự},
+     V = {Ṽ,Ṿ},
+     W = {Ŵ,Ẁ,Ẃ,Ẅ,Ẇ,Ẉ},
+     X = {Ẋ,Ẍ},
+     Y = {Ý,Ŷ,Ÿ,Ȳ,Ẏ,Ỳ,Ỵ,Ỷ,Ỹ},
+     Z = {Ź,Ż,Ž,Ẑ,Ẓ,Ẕ},
+     a = {à,á,â,ã,ä,å,ā,ă,ą,ǎ,ǟ,ǡ,ȧ,ǻ,ȁ,ȃ,ḁ,ạ,ả,ầ,ấ,ẩ,ẫ,ậ,ắ,ằ,ẳ,ẵ,ặ}, % aʾ
+     b = {ḃ,ḅ,ḇ},
+     c = {ç,ć,ĉ,ċ,č,ḉ},
+     d = {ď,ḋ,ḍ,ḏ,ḑ,ḓ},
+     e = {è,é,ê,ë,ē,ĕ,ė,ę,ě,ȅ,ȩ,ȇ,ḕ,ḗ,ḙ,ḛ,ḝ,ẹ,ẻ,ẽ,ề,ế,ể,ễ,ệ},
+     f = {ḟ,ff},
+     g = {ĝ,ğ,ġ,ģ,ǧ,ǵ,ḡ},
+     h = {ĥ,ȟ,ḣ,ḥ,ḧ,ḩ,ḫ,ẖ},
+     i = {ı,ì,í,î,ȉ,ǐ,ï,į,ī,ị,ĩ,ḭ,ḯ,ỉ,ȋ,ĭ},
+     j = {ĵ,ǰ},
+     k = {ķ,ǩ,ḱ,ḳ,ḵ},
+     l = {ĺ,ļ,ḻ,ḷ,ḹ,ḽ}, % ľ,l·
+     m = {ḿ,ṁ,ṃ},
+     n = {ñ,ń,ņ,ň,ǹ,ṅ,ṇ,ṉ,ṋ}, % ʼn
+     o = {ò,ó,ô,õ,ö,ō,ŏ,ő,ǒ,ǫ,ǭ,ȍ,ȏ,ȫ,ȭ,ȯ,ȱ,ṍ,ṏ,ṑ,ṓ,ọ,ỏ,ồ,ố,ổ,ỗ,ộ,ớ,ờ,ở,ỡ,ợ},
+     p = {ṕ,ṗ},
+     r = {ŕ,ŗ,ř,ȑ,ȓ,ṙ,ṛ,ṝ,ṟ},
+     s = {ś,ŝ,ş,š,ș,ṡ,ṣ,ṥ,ṧ,ṩ},
+     t = {ţ,ț,ṫ,ṭ,ṯ,ṱ,ẗ}, % ť
+     u = {ù,ú,û,ü,ũ,ū,ŭ,ů,ű,ų,ǔ,ǖ,ǘ,ǚ,ǜ,ȕ,ȗ,ṳ,ṵ,ṷ,ṹ,ṻ,ụ,ủ,ứ,ừ,ử,ữ,ự},
+     v = {ṽ,ṿ},
+     w = {ŵ,ẁ,ẃ,ẅ,ẇ,ẉ,ẘ},
+     x = {ẋ,ẍ},
+     y = {ý,ÿ,ŷ,ȳ,ẏ,ẙ,ỳ,ỵ,ỷ,ỹ},
+     z = {ź,ż,ž,ẑ,ẓ,ẕ},
+   }
+
+%%% -----------------------------------------------------------------------
+%%% PROTRUSION
+
+\SetProtrusion
+   [ name     = palatino-default ]
+   { encoding = {EU1,EU2,TU},
+     family   = {Palatino} }
+   {
+     A = {50,50},
+     D = {  ,50},
+     J = {50,  },
+     K = {  ,50},
+     L = {  ,50},
+     O = {25,  },
+     T = {50,50},
+     V = {50,50},
+     W = {50,50},
+     X = {50,50},
+     Y = {50,50},
+     b = {  ,25},
+     d = {25,30},
+     f = {  ,50},
+     g = {  ,100},
+     k = {  ,50},
+     p = {  ,50},
+     q = {50,  },
+     r = {  ,50},
+     t = {  ,50}, st = { ,50}, ſt = {  ,50},
+     v = {75,50},
+     w = {50,50},
+     x = {50,50},
+     y = {50,70},
+     1 = {100,50},
+     2 = {25,50},
+     4 = {50,  },
+     6 = {50,  },
+     9 = {25,  },
+     Æ = {100, },
+     Π= {25,  },
+     . = { ,700},      ‥ = { ,350},    … = {,150},
+    {,}= { ,500},
+     : = { ,500},
+     ; = { ,500},
+     ! = { ,100},      ‼ = { ,100},
+     ? = { ,200},      ‽ = { ,200},
+     @ = {50,50},
+     ~ = {200,250},
+     & = {50,100},
+    \% = {100,100},
+     * = {200,200},
+     + = {250,250},
+     ( = {100,   },    ) = {   ,300},
+     / = {200,300},
+     - = {400,500},
+     \textendash       = {300,300},   \textemdash        = {200,200},
+     \textquoteleft    = {500,700},   \textquoteright    = {500,700},
+     \textquotedblleft = {300,400},   \textquotedblright = {300,400},
+     \textbackslash    = {200,300},
+     \quotesinglbase   = {400,400},   \quotedblbase      = {400,400},
+     \guilsinglleft    = {400,400},   \guilsinglright    = {300,500},
+     \guillemotleft    = {300,300},   \guillemotright    = {200,400},
+     \textexclamdown   = {100,   },   \textquestiondown  = {100,   },
+     \textbraceleft    = {400,200},   \textbraceright    = {200,400},
+     \textless         = {200,100},   \textgreater       = {100,200},
+     ≤                 = {200,100},   ≥                  = {100,200},
+     \textminus                = {300,300},
+     \texttrademark            = {200,200},
+     \textcopyright            = {200,200},
+     \textregistered           = {200,200},
+     \textdegree               = {300,300},
+     ¦                = {450,500},    ¬                  = {250,150},
+     ⌐                = {150,250},
+     ·                         = {850, 700},
+     ¶                         = {100,0},
+     ×                         = {150, 300},
+     ª                 = {300,300},   º                  = {300,300},
+     ⁰ = {200,400},
+     ¹ = {400,350},          ² = {200,300},            ³ = {250,400},
+     ⁴ = {250,350},          ⁵ = {200,300},            ⁶ = {250,400},
+     ⁷ = {200,450},          ⁸ = {250,400},            ⁹ = {200,350},
+     ₀ = {200,400},
+     ₁ = {400,250},          ₂ = {200,300},            ₃ = {250,400},
+     ₄ = {250,350},          ₅ = {200,300},            ₆ = {250,400},
+     ₇ = {200,450},          ₈ = {250,400},            ₉ = {200,350},
+     ± = {150,100},                                    ÷ = {300,300},
+     þ = {  ,25},
+     ₊ = {300,450},          ₋ = {300,450},
+     ⁺ = {300,450},          ⁻ = {300,450},
+     †                = {200,250},    ‡                  = {200,250},
+     π = {50,  },
+     ſ = {  ,50},
+     № = {100,150},
+     \textservicemark          = {100,200},
+     ‐ = {400,500},          ‑ = {400,500},            ‒ = {200,300},
+     – = {205,305},          — = {200,300},            ― = {50,150},
+     • = {125,200},
+   }
+
+\SetProtrusion
+   [ name     = palatino-it   ]
+   { encoding = {EU1,EU2,TU},
+     family   = {Palatino},
+     shape    = {it,sl}  }
+   {
+     A = {50,50},
+     Æ = {50,  },
+     B = {50,  },
+     C = {50,  },
+     D = {50,50},
+     E = {50,  },
+     F = {50,  },
+     G = {50,  },
+     H = {50,  },
+     K = {50,  },
+     L = {50,  },
+     O = {50,  },
+     Π= {50,  },
+     P = {50,  },
+     Q = {50,  },
+     R = {50,  },
+     S = {50,  },
+     $ = {50,  },
+     T = {100, },
+     U = {50,  },
+     V = {100,50},
+     W = {50,  },
+     X = {50,  },
+     Y = {100,50},
+     b = {  ,50},
+     c = {25,  },
+     g = {75,  },
+     i = {25,  },
+     m = {  ,50},
+     n = {  ,50},
+     p = {  ,25},
+     q = {25,  },
+     x = {  ,50},
+     1 = {100, },
+     2 = {50,  },
+     4 = {50,  },
+     7 = {50,  },
+     . = { ,500},      ‥ = { ,350},    … = { ,200},
+    {,}= { ,500},
+     : = { ,300},
+     ; = { ,300},
+     ? = { ,300},      ‽ = { ,300},
+     & = {50,50},
+    \% = {100,100},
+     * = {200,200},
+     + = {150,200},
+     @ = {50,50},
+     ~ = {200,150},
+     ( = {200, },    ) = {  ,200},
+     / = {100,200},
+     - = {300,500},
+     \textendash       = {300,300},   \textemdash        = {200,200},
+     \textquoteleft    = {700,400},   \textquoteright    = {700,400},
+     \textquotedblleft = {500,300},   \textquotedblright = {500,300},
+     _ = {100,100},
+     \textbackslash    = {100,200},
+     \quotesinglbase   = {500,500},   \quotedblbase      = {400,400},
+     \guilsinglleft    = {400,400},   \guilsinglright    = {300,500},
+     \guillemotleft    = {300,300},   \guillemotright    = {300,300},
+     \textexclamdown   = {100,   },   \textquestiondown  = {200,   },
+     \textbraceleft    = {200,100},   \textbraceright    = {200,200},
+     \textless         = {300,100},   \textgreater       = {200,100},
+     ≤                 = {200,100},   ≥                  = {100,200},
+     ¦                 = {450,500},   ¬                  = {250,150},
+     ·                         = {850, 700},
+     ¶                         = {100,0},
+     ×                         = {150, 300},
+     ª = {300,250},          ° = {300,300},            º = {300,250},
+     ⁰ = {300,200},
+     ¹ = {300,150},          ² = {350,200},            ³ = {250,150},
+     ⁴ = {350,100},          ⁵ = {300, 50},            ⁶ = {400,100},
+     ⁷ = {400, 50},          ⁸ = {250, 50},            ⁹ = {300, 50},
+     ₀ = {300,300},
+     ₁ = {300,350},          ₂ = {300,150},            ₃ = {250,250},
+     ₄ = {400,200},          ₅ = {300,100},            ₆ = {450,200},
+     ₇ = {450,150},          ₈ = {400,250},            ₉ = {400,200},
+     ± = {150,100},                                    ÷ = {300,300},
+     þ = { 50,   },
+     †                = {250,200},    ‡                  = {250,200},
+     ₊ = {300,450},          ₋ = {300,450},
+     ⁺ = {300,450},          ⁻ = {300,450},
+     ‐ = {300,500},          ‑ = {300,500},            ‒ = {100,300},
+     – = {125,305},          — = {200,300},            ― = {125,150},
+     • = {125,200}
+   }
+
+\SetProtrusion
+   [ name     = palatino-sc,
+     load     = palatino-default ]
+   { encoding = {EU1,EU2,TU},
+     family   = {Palatino},
+     shape    = sc }
+   {
+     a = {50,50},
+     æ = {50,  },
+     b = { 0, 0},
+     d = { 0, 0},
+     f = { 0, 0},
+     g = { 0, 0},
+     j = {50,  },
+     l = {  ,50},
+     o = { 0, 0},
+     p = { 0, 0},
+     q = { 0,  },
+     r = {  , 0},
+     t = {50,50},
+     y = {50,50},
+     fl = { 0,50},
+     ffl = { 0,50},
+     ſt = { 0,50},
+     st = { 0,50}
+   }
+
+\endinput
+%%
+%% End of file `mt-Palatino.cfg'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-bch.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-bch.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-bch.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-blg.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-blg.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-blg.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-cmr.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-cmr.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-cmr.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-euf.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-euf.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-euf.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-eur.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-eur.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-eur.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-eus.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-eus.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-eus.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-msa.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-msa.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-msa.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-msb.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-msb.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-msb.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-mvs.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-mvs.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-mvs.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-pmn.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-pmn.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-pmn.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-ppl.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-ppl.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-ppl.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-ptm.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-ptm.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-ptm.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-ugm.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-ugm.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-ugm.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Modified: branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-zpeu.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-zpeu.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/microtype/mt-zpeu.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 %% 
 %%                       The `microtype' package
 %%         Subliminal refinements towards typographical perfection
-%%           Copyright (c) 2004--2020 R Schlicht <w.m.l at gmx.net>
+%%           Copyright (c) 2004--2021 R Schlicht <w.m.l at gmx.net>
 %% 
 %% This work may be distributed and/or modified under the conditions of the
 %% LaTeX Project Public License, either version 1.3c of this license or (at

Modified: branches/branch2020/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/nicematrix/nicematrix.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -18,8 +18,8 @@
 %% and version 1.3 or later is part of all distributions of
 %% LaTeX version 2005/12/01 or later.
 %% 
-\def\myfileversion{5.10}
-\def\myfiledate{2021/02/05}
+\def\myfileversion{5.11}
+\def\myfiledate{2021/02/22}
 \RequirePackage{pgfcore}
 \usepgfmodule{shapes}
 \RequirePackage{l3keys2e}
@@ -28,6 +28,7 @@
   {\myfiledate}
   {\myfileversion}
   {Enhanced arrays with the help of PGF/TikZ}
+\RequirePackage { xparse }
 \RequirePackage { array }
 \RequirePackage { amsmath }
 \cs_new_protected:Npn \__nicematrix_error:n { \msg_error:nn { nicematrix } }
@@ -272,6 +273,8 @@
       \__nicematrix_fatal:n { Outside~math~mode }
     \fi:
   }
+\tl_new:N \l__nicematrix_letter_vlism_tl
+\seq_new:N \g__nicematrix_cols_vlism_seq
 \colorlet { nicematrix-last-col } { . }
 \colorlet { nicematrix-last-row } { . }
 \str_new:N \g__nicematrix_name_env_str
@@ -299,7 +302,6 @@
 \dim_zero_new:N \l_tmpc_dim
 \dim_zero_new:N \l_tmpd_dim
 \bool_new:N \g__nicematrix_empty_cell_bool
-\dim_new:N \__nicematrix_old_arraycolsep_dim
 \dim_new:N \g__nicematrix_width_last_col_dim
 \dim_new:N \g__nicematrix_width_first_col_dim
 \seq_new:N \g__nicematrix_blocks_seq
@@ -316,6 +318,11 @@
 \tl_set:Nn \l__nicematrix_pos_of_block_tl { c }
 \bool_new:N \l__nicematrix_draw_first_bool
 \int_new:N \g__nicematrix_block_box_int
+\dim_new:N \l__nicematrix_submatrix_extra_height_dim
+\dim_new:N \l__nicematrix_submatrix_left_xshift_dim
+\dim_new:N \l__nicematrix_submatrix_right_xshift_dim
+\clist_new:N \l__nicematrix_submatrix_hlines_clist
+\clist_new:N \l__nicematrix_submatrix_vlines_clist
 \int_new:N \l__nicematrix_first_row_int
 \int_set:Nn \l__nicematrix_first_row_int 1
 \int_new:N \l__nicematrix_first_col_int
@@ -500,7 +507,7 @@
     down .tl_set:N = \l__nicematrix_xdots_down_tl ,
     up .tl_set:N = \l__nicematrix_xdots_up_tl ,
     draw-first .code:n = \prg_do_nothing: ,
-    unknown .code:n = \__nicematrix_error:n { Unknown~option~for~xdots }
+    unknown .code:n = \__nicematrix_error:n { Unknown~key~for~xdots }
   }
 \keys_define:nn { NiceMatrix / rules }
   {
@@ -511,6 +518,8 @@
   }
 \keys_define:nn { NiceMatrix / Global }
   {
+    rules .code:n = \keys_set:nn { NiceMatrix / rules } { #1 } ,
+    rules .value_required:n = true ,
     standard-cline .bool_set:N = \l__nicematrix_standard_cline_bool ,
     standard-cline .default:n = true ,
     cell-space-top-limit .dim_set:N = \l__nicematrix_cell_space_top_limit_dim ,
@@ -543,6 +552,13 @@
     code-for-last-row .value_required:n = true ,
     hlines .bool_set:N = \l__nicematrix_hlines_bool ,
     vlines .bool_set:N = \l__nicematrix_vlines_bool ,
+    vlines-in-sub-matrix .code:n =
+      {
+        \tl_if_single_token:nTF { #1 }
+          { \tl_set:Nn \l__nicematrix_letter_vlism_tl { #1 } }
+          { \__nicematrix_error:n { One~letter~allowed } }
+      } ,
+    vlines-in-sub-matrix .value_required:n = true ,
     hvlines .code:n =
       {
         \bool_set_true:N \l__nicematrix_vlines_bool
@@ -674,6 +690,7 @@
     NiceMatrixOptions / rules .inherit:n = NiceMatrix / rules ,
     NiceMatrixOptions / notes .inherit:n = NiceMatrix / notes ,
     NiceMatrixOptions / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
+    SubMatrix / rules .inherit:n = NiceMatrix / rules ,
     CodeAfter / xdots .inherit:n = NiceMatrix / xdots ,
     NiceMatrix .inherit:n =
       {
@@ -706,6 +723,8 @@
   }
 \keys_define:nn { NiceMatrix / NiceMatrixOptions }
   {
+    delimiters / color .tl_set:N = \l__nicematrix_delimiters_color_tl ,
+    delimiters / color .value_required:n = true ,
     delimiters-color .tl_set:N = \l__nicematrix_delimiters_color_tl ,
     delimiters-color .value_required:n = true ,
     last-col .code:n = \tl_if_empty:nF { #1 }
@@ -734,7 +753,7 @@
       {
         \tl_if_single_token:nTF { #1 }
           { \str_set:Nx \l__nicematrix_letter_for_dotted_lines_str { #1 } }
-          { \__nicematrix_error:n { Bad~value~for~letter~for~dotted~lines } }
+          { \__nicematrix_error:n { One~letter~allowed } }
       } ,
     letter-for-dotted-lines .value_required:n = true ,
     notes .code:n = \keys_set:nn { NiceMatrix / notes } { #1 } ,
@@ -760,6 +779,8 @@
     r .code:n = \tl_set:Nn \l__nicematrix_type_of_col_tl r ,
     small .bool_set:N = \l__nicematrix_small_bool ,
     small .value_forbidden:n = true ,
+    delimiters / color .tl_set:N = \l__nicematrix_delimiters_color_tl ,
+    delimiters / color .value_required:n = true ,
     delimiters-color .tl_set:N = \l__nicematrix_delimiters_color_tl ,
     delimiters-color .value_required:n = true ,
     unknown .code:n = \__nicematrix_error:n { Unknown~option~for~NiceMatrix }
@@ -779,6 +800,8 @@
     tabularnote .value_required:n = true ,
     delimiters-color .tl_set:N = \l__nicematrix_delimiters_color_tl ,
     delimiters-color .value_required:n = true ,
+    delimiters / color .tl_set:N = \l__nicematrix_delimiters_color_tl ,
+    delimiters / color .value_required:n = true ,
     unknown .code:n = \__nicematrix_error:n { Unknown~option~for~NiceArray }
   }
 \keys_define:nn { NiceMatrix / pNiceArray }
@@ -1223,6 +1246,7 @@
                   { \pgfpointdiff \__nicematrix_picture_position: \__nicematrix_node_position: }
               }
             \endpgfpicture
+            \__nicematrix_create_diag_nodes:
             \group_begin:
               \bool_if:NT \c__nicematrix_tikz_loaded_bool
                 {
@@ -1436,6 +1460,7 @@
               { ! { \skip_horizontal:N \arrayrulewidth } }
           }
           { \tl_gclear:N \g__nicematrix_preamble_tl }
+        \seq_clear:N \g__nicematrix_cols_vlism_seq
         \int_zero:N \l_tmpa_int
         \exp_after:wN \__nicematrix_patch_preamble:n \the \@temptokena \q_stop
         \int_gset_eq:NN \g__nicematrix_static_num_of_col_int \c at jCol
@@ -1473,8 +1498,7 @@
       }
     \dim_compare:nNnT \l__nicematrix_tabular_width_dim = \c_zero_dim
       {
-        \tl_gput_right:Nn
-          \g__nicematrix_preamble_tl
+        \tl_gput_right:Nn \g__nicematrix_preamble_tl
           { > { \__nicematrix_error_too_much_cols: } l }
       }
     \group_end:
@@ -1511,14 +1535,24 @@
         \str_if_eq:VnTF \l__nicematrix_letter_for_dotted_lines_str { #1 }
           { \__nicematrix_patch_preamble_xi:n #1 }
           {
-            \bool_lazy_and:nnTF
-              { \str_if_eq_p:nn { : } { #1 } }
-              \c__nicematrix_arydshln_loaded_bool
+            \str_if_eq:VnTF \l__nicematrix_letter_vlism_tl { #1 }
               {
-                \tl_gput_right:Nn \g__nicematrix_preamble_tl { : }
+                \seq_gput_right:Nx \g__nicematrix_cols_vlism_seq
+                  { \int_eval:n { \c at jCol + 1 } }
+                \tl_gput_right:Nx \g__nicematrix_preamble_tl
+                  { \exp_not:N ! { \skip_horizontal:N \arrayrulewidth } }
                 \__nicematrix_patch_preamble:n
               }
-              { \__nicematrix_fatal:nn { unknown~column~type } { #1 } }
+              {
+                \bool_lazy_and:nnTF
+                  { \str_if_eq_p:nn { : } { #1 } }
+                  \c__nicematrix_arydshln_loaded_bool
+                  {
+                    \tl_gput_right:Nn \g__nicematrix_preamble_tl { : }
+                    \__nicematrix_patch_preamble:n
+                  }
+                  { \__nicematrix_fatal:nn { unknown~column~type } { #1 } }
+              }
           }
       }
   }
@@ -1576,11 +1610,15 @@
             \__nicematrix_Cell:
             \begin { minipage } [ #1 ] { #3 }
             \mode_leave_vertical:
-            \arraybackslash % added in the version 5.8
-            \box_use:N \@arstrutbox
+            \arraybackslash
+            \vrule height \box_ht:N \@arstrutbox depth 0 pt width 0 pt % v. 5.11
           }
         c
-        < { \box_use:N \@arstrutbox \end { minipage } \__nicematrix_end_Cell: }
+        < {
+            \vrule height 0 pt depth \box_dp:N \@arstrutbox width 0 pt % v. 5.11
+            \end { minipage }
+            \__nicematrix_end_Cell:
+          }
       }
     \int_gincr:N \c at jCol
     \__nicematrix_patch_preamble_x:n
@@ -2062,6 +2100,7 @@
   {
     >
       {
+        \cs_set_eq:NN \CodeAfter \__nicematrix_CodeAfter_i:n
         \bool_gset_true:N \g__nicematrix_after_col_zero_bool
         \__nicematrix_begin_of_row:
         \hbox_set:Nw \l__nicematrix_cell_box
@@ -2106,6 +2145,7 @@
   {
     >
       {
+    \cs_set_eq:NN \CodeAfter \__nicematrix_CodeAfter_i:n
         \bool_gset_true:N \g__nicematrix_last_col_found_bool
         \int_gincr:N \c at jCol
         \int_gset_eq:NN \g__nicematrix_col_total_int \c at jCol
@@ -2286,6 +2326,14 @@
           }
         \iow_now:Nn \@mainaux \ExplSyntaxOff
       }
+      \__nicematrix_create_diag_nodes:
+      \str_if_empty:NF \l__nicematrix_name_str
+        {
+          \pgfpicture
+          \pgfrememberpicturepositiononpagetrue
+          \pgfnodealias { \l__nicematrix_name_str - ##1 } { \__nicematrix_env: - ##1 }
+          \endpgfpicture
+        }
     \bool_if:NT \l__nicematrix_parallelize_diags_bool
       {
         \int_gzero_new:N \g__nicematrix_ddots_int
@@ -2409,6 +2457,19 @@
     \cs_if_exist:NT \theiRow { \int_gset_eq:NN \c at iRow \l__nicematrix_old_iRow_int }
     \cs_if_exist:NT \thejCol { \int_gset_eq:NN \c at jCol \l__nicematrix_old_jCol_int }
   }
+\cs_new_protected:Npn \__nicematrix_create_diag_nodes:
+  {
+    \int_step_inline:nn { \int_max:nn \c at iRow \c at jCol + 1 }
+      {
+        \pgfpicture
+        \pgfrememberpicturepositiononpagetrue
+        \__nicematrix_qpoint:n { row - \int_min:nn { ##1 } { \c at iRow + 1 } }
+        \dim_set_eq:NN \l_tmpa_dim \pgf at y
+        \__nicematrix_qpoint:n { col - \int_min:nn { ##1 } { \c at jCol + 1 } }
+        \pgfcoordinate { \__nicematrix_env: - ##1 } { \pgfpoint \pgf at x \l_tmpa_dim }
+        \endpgfpicture
+      }
+  }
 \cs_new_protected:Npn \__nicematrix_find_extremities_of_line:nnnn #1 #2 #3 #4
   {
     \cs_set:cpn { __nicematrix _ dotted _ #1 - #2 } { }
@@ -3407,7 +3468,7 @@
         \cs_if_free_p:c { pgf @ sh @ ns @ \__nicematrix_env: - #2 }
       }
       {
-        \__nicematrix_error:nnn { unknown~cell~for~line~in~code-after } { #1 } { #2 }
+        \__nicematrix_error:nnn { unknown~cell~for~line~in~CodeAfter } { #1 } { #2 }
       }
       { \__nicematrix_draw_line_ii:nn { #1 } { #2 } }
   }
@@ -3537,7 +3598,7 @@
     cols .tl_set:N = \l__nicematrix_cols_tl ,
     restart .bool_set:N = \l__nicematrix_rowcolors_restart_bool ,
     restart .default:n = true ,
-    unknown .code:n = \__nicematrix_error:n { Unknown~option~for~rowcolors }
+    unknown .code:n = \__nicematrix_error:n { Unknown~key~for~rowcolors }
   }
 \NewDocumentCommand \__nicematrix_rowcolors { O { } m m m O { } }
   {
@@ -3740,11 +3801,11 @@
       {
          \bool_gset_true:N \g_tmpa_bool
          \seq_map_inline:Nn \g__nicematrix_pos_of_blocks_seq
-           { \__nicematrix_test_if_vline_in_block:nnnn ##1 }
+           { \__nicematrix_test_vline_in_block:nnnn ##1 }
          \seq_map_inline:Nn \g__nicematrix_pos_of_xdots_seq
-           { \__nicematrix_test_if_vline_in_block:nnnn ##1 }
+           { \__nicematrix_test_vline_in_block:nnnn ##1 }
          \seq_map_inline:Nn \g__nicematrix_pos_of_stroken_blocks_seq
-           { \__nicematrix_test_if_vline_in_stroken_block:nnnn ##1 }
+           { \__nicematrix_test_vline_in_stroken_block:nnnn ##1 }
          \clist_if_empty:NF \l__nicematrix_except_corners_clist
            \__nicematrix_test_in_corner_v:
          \bool_if:NTF \g_tmpa_bool
@@ -3862,11 +3923,11 @@
       {
          \bool_gset_true:N \g_tmpa_bool
          \seq_map_inline:Nn \g__nicematrix_pos_of_blocks_seq
-           { \__nicematrix_test_if_hline_in_block:nnnn ##1 }
+           { \__nicematrix_test_hline_in_block:nnnn ##1 }
          \seq_map_inline:Nn \g__nicematrix_pos_of_xdots_seq
-           { \__nicematrix_test_if_hline_in_block:nnnn ##1 }
+           { \__nicematrix_test_hline_in_block:nnnn ##1 }
          \seq_map_inline:Nn \g__nicematrix_pos_of_stroken_blocks_seq
-           { \__nicematrix_test_if_hline_in_stroken_block:nnnn ##1 }
+           { \__nicematrix_test_hline_in_stroken_block:nnnn ##1 }
          \clist_if_empty:NF \l__nicematrix_except_corners_clist \__nicematrix_test_in_corner_h:
          \bool_if:NTF \g_tmpa_bool
            {
@@ -3986,7 +4047,7 @@
       { \__nicematrix_hline:nn { \__nicematrix_succ:n { \c at iRow } } { #1 } }
     \ifnum 0 = `{ \fi }
   }
-\cs_new_protected:Npn \__nicematrix_test_if_hline_in_block:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \__nicematrix_test_hline_in_block:nnnn #1 #2 #3 #4
   {
     \bool_lazy_all:nT
       {
@@ -3997,7 +4058,7 @@
       }
       { \bool_gset_false:N \g_tmpa_bool }
   }
-\cs_new_protected:Npn \__nicematrix_test_if_vline_in_block:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \__nicematrix_test_vline_in_block:nnnn #1 #2 #3 #4
   {
     \bool_lazy_all:nT
       {
@@ -4008,7 +4069,7 @@
       }
       { \bool_gset_false:N \g_tmpa_bool }
   }
-\cs_new_protected:Npn \__nicematrix_test_if_hline_in_stroken_block:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \__nicematrix_test_hline_in_stroken_block:nnnn #1 #2 #3 #4
   {
     \bool_lazy_all:nT
       {
@@ -4019,7 +4080,7 @@
       }
       { \bool_gset_false:N \g_tmpa_bool }
   }
-\cs_new_protected:Npn \__nicematrix_test_if_vline_in_stroken_block:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \__nicematrix_test_vline_in_stroken_block:nnnn #1 #2 #3 #4
   {
     \bool_lazy_all:nT
       {
@@ -4176,11 +4237,9 @@
         \bool_if:NTF \l__nicematrix_NiceArray_bool \c_zero_dim \arraycolsep
         + \l__nicematrix_right_margin_dim
       }
-    \tl_set:Nn \l_tmpa_tl { ( }
-    \tl_if_eq:NNF \l__nicematrix_left_delim_tl \l_tmpa_tl
+    \tl_if_eq:NnF \l__nicematrix_left_delim_tl (
       { \dim_gadd:Nn \l__nicematrix_x_initial_dim  { 0.5 \l__nicematrix_inter_dots_dim } }
-    \tl_set:Nn \l_tmpa_tl { ) }
-    \tl_if_eq:NNF \l__nicematrix_right_delim_tl \l_tmpa_tl
+    \tl_if_eq:NnF \l__nicematrix_right_delim_tl )
       { \dim_gsub:Nn \l__nicematrix_x_final_dim { 0.5 \l__nicematrix_inter_dots_dim } }
     \tl_set_eq:NN \l__nicematrix_xdots_line_style_tl \c__nicematrix_standard_tl
     \__nicematrix_draw_line:
@@ -4639,7 +4698,7 @@
     draw .tl_set:N = \l__nicematrix_draw_tl ,
     draw .default:n = default ,
     color .code:n =
-      \__nicematrix_error:n { Key~color~for~Block }
+      \__nicematrix_fatal:n { Key~color~for~Block }
       \tl_set:Nn \l__nicematrix_fill_tl { #1 } ,
     % color .code:n = \color { #1 } \tl_set:Nn \l__nicematrix_draw_tl { #1 } ,
     color .value_required:n = true ,
@@ -4668,9 +4727,7 @@
     \int_compare:nNnTF { #4 } > { 99 }
       { \int_set_eq:NN \l__nicematrix_last_col_int \c at jCol }
       { \int_set:Nn \l__nicematrix_last_col_int { #4 } }
-    \bool_lazy_or:nnTF
-      { \int_compare_p:nNn \l__nicematrix_last_row_int > \g__nicematrix_row_total_int }
-      { \int_compare_p:nNn \l__nicematrix_last_col_int > \g__nicematrix_col_total_int }
+    \int_compare:nNnTF \l__nicematrix_last_col_int > \g__nicematrix_col_total_int
       {
         \int_compare:nTF
           { \l__nicematrix_last_col_int <= \g__nicematrix_static_num_of_col_int }
@@ -4684,7 +4741,11 @@
           }
           { \msg_error:nnnn { nicematrix } { Block~too~large~1 } { #1 } { #2 } }
       }
-      { \__nicematrix_Block_v:nnnnnn { #1 } { #2 } { #3 } { #4 } { #5 } { #6 } }
+      {
+        \int_compare:nNnTF \l__nicematrix_last_row_int > \g__nicematrix_row_total_int
+          { \msg_error:nnnn { nicematrix } { Block~too~large~1 } { #1 } { #2 } }
+          { \__nicematrix_Block_v:nnnnnn { #1 } { #2 } { #3 } { #4 } { #5 } { #6 } }
+      }
   }
 \cs_new_protected:Npn \__nicematrix_Block_v:nnnnnn #1 #2 #3 #4 #5 #6
   {
@@ -5052,13 +5113,16 @@
       { \__nicematrix_math_toggle_token: #6 \__nicematrix_math_toggle_token: } { } { }
     \endpgfpicture
   }
+\keys_define:nn { NiceMatrix }
+  { CodeAfter / rules .inherit:n = NiceMatrix / rules }
 \keys_define:nn { NiceMatrix / CodeAfter }
   {
-    sub-matrix .code:n =
-     \keys_set:nn { NiceMatrix / sub-matrix } { #1 } ,
+    sub-matrix .code:n = \keys_set:nn { NiceMatrix / sub-matrix } { #1 } ,
     sub-matrix .value_required:n = true ,
-    delimiters-color .tl_set:N = \l__nicematrix_delimiters_color_tl ,
-    delimiters-color .value_required:n = true ,
+    delimiters / color .tl_set:N = \l__nicematrix_delimiters_color_tl ,
+    delimiters / color .value_required:n = true ,
+    rules .code:n = \keys_set:nn { NiceMatrix / rules } { #1 } ,
+    rules .value_required:n = true ,
     unknown .code:n = \__nicematrix_error:n { Unknown~key~for~CodeAfter }
   }
 \cs_new:Npn \__nicematrix_CodeAfter: { \omit \__nicematrix_CodeAfter_i:n }
@@ -5069,8 +5133,7 @@
   }
 \cs_new_protected:Npn \__nicematrix_CodeAfter_ii:n #1
   {
-    \str_if_eq:eeTF \@currenvir { #1 }
-      { \end { #1 } }
+    \str_if_eq:eeTF \@currenvir { #1 } { \end { #1 } }
       {
         \tl_gput_right:Nn \g_nicematrix_code_after_tl { \end { #1 } }
         \__nicematrix_CodeAfter_i:n
@@ -5142,18 +5205,22 @@
     right-xshift .value_required:n = true ,
     xshift .meta:n = { left-xshift = #1, right-xshift = #1 } ,
     xshift .value_required:n = true ,
-    delimiters-color .tl_set:N = \l__nicematrix_delimiters_color_tl ,
-    delimiters-color .value_required:n = true ,
+    delimiters / color .tl_set:N = \l__nicematrix_delimiters_color_tl ,
+    delimiters / color .value_required:n = true ,
     slim .bool_set:N = \l__nicematrix_submatrix_slim_bool ,
     slim .default:n = true ,
   }
 \keys_define:nn { NiceMatrix }
   {
-    SubMatrix .inherit:n = NiceMatrix /sub-matrix ,
-    CodeAfter / sub-matrix .inherit:n = NiceMatrix / sub-matrix
+    SubMatrix .inherit:n = NiceMatrix / sub-matrix ,
+    CodeAfter / sub-matrix .inherit:n = NiceMatrix / sub-matrix ,
   }
 \keys_define:nn { NiceMatrix / SubMatrix }
   {
+    hlines .clist_set:N = \l__nicematrix_submatrix_hlines_clist ,
+    hlines .default:n = all ,
+    vlines .clist_set:N = \l__nicematrix_submatrix_vlines_clist ,
+    vlines .default:n = all ,
     name .code:n =
       \tl_if_empty:nTF { #1 }
         { \__nicematrix_error:n { Invalid~name~format } }
@@ -5169,6 +5236,8 @@
             }
             { \__nicematrix_error:n { Invalid~name~format } }
         } ,
+    rules .code:n = \keys_set:nn { NiceMatrix / rules } { #1 } ,
+    rules .value_required:n = true ,
     name .value_required:n = true ,
     unknown .code:n = \__nicematrix_error:n { Unknown~key~for~SubMatrix }
   }
@@ -5186,9 +5255,6 @@
       { \int_compare_p:nNn \l_tmpd_tl > \g__nicematrix_col_total_int }
       { \__nicematrix_error:n { SubMatrix~too~large } }
       {
-        \dim_zero_new:N \l__nicematrix_submatrix_extra_height_dim
-        \dim_zero_new:N \l__nicematrix_submatrix_left_xshift_dim
-        \dim_zero_new:N \l__nicematrix_submatrix_right_xshift_dim
         \str_clear_new:N \l__nicematrix_submatrix_name_str
         \keys_set:nn { NiceMatrix / SubMatrix } { #5 }
         \pgfpicture
@@ -5245,6 +5311,72 @@
             \l__nicematrix_submatrix_extra_height_dim - \arrayrulewidth
           }
         \dim_set_eq:NN \nulldelimiterspace \c_zero_dim
+        \group_begin:
+        \pgfsetlinewidth { 1.1 \arrayrulewidth }
+        \tl_if_empty:NF \l__nicematrix_rules_color_tl
+          { \exp_after:wN \__nicematrix_set_CT at arc@: \l__nicematrix_rules_color_tl \q_stop }
+        \CT at arc@
+        \seq_map_inline:Nn \g__nicematrix_cols_vlism_seq
+          {
+            \int_compare:nNnT \l_tmpb_tl < { ##1 }
+              {
+                \int_compare:nNnT { ##1 } < { \int_eval:n { \l_tmpd_tl + 1 } }
+                  {
+                    \__nicematrix_qpoint:n { col - ##1 }
+                    \pgfpathmoveto { \pgfpoint \pgf at x \l__nicematrix_y_initial_dim }
+                    \pgfpathlineto { \pgfpoint \pgf at x \l__nicematrix_y_final_dim }
+                    \pgfusepathqstroke
+                  }
+              }
+          }
+        \tl_if_eq:NnTF \l__nicematrix_submatrix_vlines_clist { all }
+          { \int_step_inline:nn { \l_tmpd_tl - \l_tmpb_tl } }
+          { \clist_map_inline:Nn \l__nicematrix_submatrix_vlines_clist }
+          {
+            \bool_lazy_and:nnTF
+              { \int_compare_p:nNn { ##1 } > 0 }
+              { \int_compare_p:nNn { ##1 } < { \l_tmpd_tl - \l_tmpb_tl + 1 } }
+              {
+                \__nicematrix_qpoint:n { col - \int_eval:n { ##1 + \l_tmpb_tl } }
+                \pgfpathmoveto { \pgfpoint \pgf at x \l__nicematrix_y_initial_dim }
+                \pgfpathlineto { \pgfpoint \pgf at x \l__nicematrix_y_final_dim }
+                \pgfusepathqstroke
+              }
+              { \__nicematrix_error:nnn { Wrong~line~in~SubMatrix } { vertical } { ##1 } }
+          }
+        \tl_if_eq:NnTF \l__nicematrix_submatrix_hlines_clist { all }
+          { \int_step_inline:nn { \l_tmpc_tl - \l_tmpa_tl } }
+          { \clist_map_inline:Nn \l__nicematrix_submatrix_hlines_clist }
+          {
+            \bool_lazy_and:nnTF
+              { \int_compare_p:nNn { ##1 } > 0 }
+              { \int_compare_p:nNn { ##1 } < { \l_tmpc_tl - \l_tmpa_tl + 1 } }
+              {
+                \__nicematrix_qpoint:n { row - \int_eval:n { ##1 + \l_tmpa_tl } }
+                \group_begin:
+                \dim_set:Nn \l_tmpa_dim
+                  { \l__nicematrix_x_initial_dim - \l__nicematrix_submatrix_left_xshift_dim }
+                \str_case:nn { #1 }
+                  {
+                    (  { \dim_sub:Nn \l_tmpa_dim { 0.9 mm } }
+                    [  { \dim_sub:Nn \l_tmpa_dim { 0.2 mm } }
+                    \{ { \dim_sub:Nn \l_tmpa_dim { 0.9 mm } }
+                  }
+                \pgfpathmoveto { \pgfpoint \l_tmpa_dim \pgf at y }
+                \dim_set:Nn \l_tmpb_dim
+                  { \l__nicematrix_x_final_dim + \l__nicematrix_submatrix_right_xshift_dim }
+                \str_case:nn { #4 }
+                  {
+                    )  { \dim_add:Nn \l_tmpb_dim { 0.9 mm } }
+                    ]  { \dim_add:Nn \l_tmpb_dim { 0.2 mm } }
+                    \} { \dim_add:Nn \l_tmpb_dim { 0.9 mm } }
+                  }
+                \pgfpathlineto { \pgfpoint \l_tmpb_dim \pgf at y }
+                \pgfusepathqstroke
+                \group_end:
+              }
+              { \__nicematrix_error:nnn { Wrong~line~in~SubMatrix } { horizontal } { ##1 } }
+          }
         \str_if_empty:NF \l__nicematrix_submatrix_name_str
           {
             \__nicematrix_pgf_rect_node:nnnnn \l__nicematrix_submatrix_name_str
@@ -5251,6 +5383,7 @@
               \l__nicematrix_x_initial_dim \l__nicematrix_y_initial_dim
               \l__nicematrix_x_final_dim \l__nicematrix_y_final_dim
           }
+        \group_end:
         \begin { pgfscope }
         \pgftransformshift
           {
@@ -5325,7 +5458,6 @@
       { #2 }
       { }
   }
-%% \medskip
 \bool_new:N \c__nicematrix_footnotehyper_bool
 \bool_new:N \c__nicematrix_footnote_bool
 \__nicematrix_msg_new:nnn { Unknown~option~for~package }
@@ -5492,15 +5624,15 @@
     Since~you~haven't~loaded~Tikz,~the~only~value~you~can~give~to~'line-style'~
     is~'standard'.~If~you~go~on,~this~key~will~be~ignored.
   }
-\__nicematrix_msg_new:nn { Unknown~option~for~xdots }
+\__nicematrix_msg_new:nn { Unknown~key~for~xdots }
   {
-    As~for~now~there~is~only~three~key~available~here:~'color',~'line-style'~
+    As~for~now,~there~is~only~three~key~available~here:~'color',~'line-style'~
     and~'shorten'~(and~you~try~to~use~'\l_keys_key_str').~If~you~go~on,~
     this~key~will~be~ignored.
   }
-\__nicematrix_msg_new:nn { Unknown~option~for~rowcolors }
+\__nicematrix_msg_new:nn { Unknown~key~for~rowcolors }
   {
-    As~for~now~there~is~only~two~keys~available~here:~'cols'~and~'respect-blocks'~
+    As~for~now,~there~is~only~two~keys~available~here:~'cols'~and~'respect-blocks'~
     (and~you~try~to~use~'\l_keys_key_str').~If~you~go~on,~
     this~key~will~be~ignored.
   }
@@ -5508,8 +5640,8 @@
   {
     The~key~'color'~for~the~command~\token_to_str:N \Block\
     is~deprecated:~you~should~use~'fill'~instead.\\
-    You~can~go~on~for~this~time~but~remember~that~that~key~
-    will~be~deleted~in~a~future~version.
+    This~error~is~fatal.
+
   }
 \__nicematrix_msg_new:nn { ampersand~in~light-syntax }
   {
@@ -5554,6 +5686,12 @@
     A~name~must~be~accepted~by~the~regular~expression~[A-Za-z][A-Za-z0-9]*.\\
     If~you~go~on,~this~key~will~be~ignored.
   }
+\__nicematrix_msg_new:nn { Wrong~line~in~SubMatrix }
+  {
+    You~try~to~draw~a~#1~line~of~number~'#2'~in~a~
+    \token_to_str:N \SubMatrix\ of~your~\__nicematrix_full_name_env:\ but~that~
+    number~is~not~valid.~If~you~go~on,~it~will~be~ignored.
+  }
 \__nicematrix_msg_new:nn { empty~environment }
   { Your~\__nicematrix_full_name_env:\ is~empty.~This~error~is~fatal. }
 \__nicematrix_msg_new:nn { Delimiter~with~small }
@@ -5562,7 +5700,7 @@
     because~the~key~'small'~is~in~force.\\
     This~error~is~fatal.
   }
-\__nicematrix_msg_new:nn { unknown~cell~for~line~in~code-after }
+\__nicematrix_msg_new:nn { unknown~cell~for~line~in~CodeAfter }
   {
     Your~command~\token_to_str:N\line\{#1\}\{#2\}~in~the~'code-after'~
     can't~be~executed~because~a~cell~doesn't~exist.\\
@@ -5661,7 +5799,7 @@
     (and~not~in~\token_to_str:N \vcenter).\\
     This~error~is~fatal.
   }
-\__nicematrix_msg_new:nn { Bad~value~for~letter~for~dotted~lines }
+\__nicematrix_msg_new:nn { One~letter~allowed }
   {
     The~value~of~key~'\l_keys_key_str'~must~be~of~length~1.\\
     If~you~go~on,~it~will~be~ignored.
@@ -5685,18 +5823,32 @@
   }
   {
     The~available~keys~are~(in~alphabetic~order):~
-    delimiters-color,~
+    delimiters/color,~
+    rules~(with~the~subkeys~'color'~and~'width'),~
     sub-matrix~(several~subkeys)~
     and~xdots~(several~subkeys).~
     The~latter~is~for~the~command~\token_to_str:N \line.
   }
-\__nicematrix_msg_new:nn { Unknown~key~for~SubMatrix }
+\__nicematrix_msg_new:nnn { Unknown~key~for~SubMatrix }
   {
     The~key~'\l_keys_key_str'~is~unknown.\\
-    The~only~keys~available~here~are~'delimiters-color',~'extra-height',~
-    'left-xshift',~'name',~'right-xshift',~'slim'~and~'xshift'.\\
     If~you~go~on,~this~key~will~be~ignored. \\
+    For~a~list~of~the~available~keys~in~\token_to_str:N
+    \SubMatrix,~type~H~<return>.
   }
+  {
+    The~available~keys~are~(in~alphabetic~order):~
+    'delimiters/color',~
+    'extra-height',~
+    'hlines',~
+    'left-xshift',~
+    'name',~
+    'right-xshift',~
+    'rules'~(with~the~subkeys~'color'~and~'width'),~
+    'slim',~
+    'vlines'~and~'xshift'~(which~set~both~'left-xshift'~
+    and~'right-xshift').\\
+  }
 \__nicematrix_msg_new:nnn { Unknown~key~for~notes }
   {
     The~key~'\l_keys_key_str'~is~unknown.\\
@@ -5735,7 +5887,7 @@
     create-extra-nodes,~
     create-medium-nodes,~
     create-large-nodes,~
-    delimiters-color,~
+    delimiters/color,~
     end-of-row,~
     first-col,~
     first-row,~
@@ -5752,6 +5904,7 @@
     renew-dots,~
     renew-matrix,~
     right-margin,~
+    rules~(with~the~subkeys~'color'~and~'width'),~
     small,~
     sub-matrix~(several~subkeys),
     vlines,~
@@ -5782,7 +5935,7 @@
     create-extra-nodes,~
     create-medium-nodes,~
     create-large-nodes,~
-    delimiters-color,~
+    delimiters/color,~
     extra-left-margin,~
     extra-right-margin,~
     first-col,~
@@ -5800,8 +5953,7 @@
     nullify-dots,~
     renew-dots,~
     right-margin,~
-    rules/color,~
-    rules/width,~
+    rules~(with~the~subkeys~'color'~and~'width'),~
     small,~
     t,~
     vlines,~
@@ -5834,7 +5986,7 @@
     create-extra-nodes,~
     create-medium-nodes,~
     create-large-nodes,~
-    delimiters-color,~
+    delimiters/color,~
     extra-left-margin,~
     extra-right-margin,~
     first-col,~
@@ -5852,8 +6004,7 @@
     r,~
     renew-dots,~
     right-margin,~
-    rules/color,~
-    rules/width,~
+    rules~(with~the~subkeys~'color'~and~'width'),~
     small,~
     t,~
     vlines,~
@@ -5903,8 +6054,7 @@
     nullify-dots,~
     renew-dots,~
     right-margin,~
-    rules/color,~
-    rules/width,~
+    rules~(with~the~subkeys~'color'~and~'width'),~
     t,~
     vlines,~
     xdots/color,~

Modified: branches/branch2020/Master/texmf-dist/tex/latex/overlays/overlays.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/overlays/overlays.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/overlays/overlays.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,14 +1,14 @@
-\ProvidesPackage{overlays}[2017/12/21 v2.10 Incremental slides]
+\ProvidesPackage{overlays}[2021/02/23 v2.12 Incremental slides]
 
-% Copyright (C) 2017 Andreas Nolda
+% Copyright (C) 2021 Andreas Nolda
 
 % Author: Andreas Nolda <andreas at nolda.org>
-% Version: 2.10
+% Version: 2.12
 
 % 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
+% Project Public License, either version 1.3c of this license or (at your
+% option) any later version. The latest version of this license is in
+% http://www.latex-project.org/lppl.txt and version 1.3c or later is part of all
 % distributions of LaTeX version 2005/12/01 or later.
 
 % The following code is inspired by Matthias Meister's "present" package. It
@@ -139,7 +139,7 @@
    \foreach \i in {#2}
      {\afterassignment\getoverl at yspecb
       \overl at yspeca=0\i\relax
-      \pgfmathtruncatemacro\result{(#1>=\overl at yspeca) && (#1<=\overl at yspecb)}%
+      \pgfmathtruncatemacro\result{and((#1>=\overl at yspeca),(#1<=\overl at yspecb))}%
       \ifnum\result=1\relax
         \breakforeach
         \global\let\inoverl at yspec\@firstoftwo
@@ -186,3 +186,11 @@
 
 \newcommand{\psalert}[2]{\overl at y{#1}{{\psset at lertcolor
                                        {#2}}}{#2}}
+
+\newcommand{\alertsoff}{\renewcommand{\alert}[2]{##2}%
+                        \renewcommand{\psalert}[2]{##2}}
+
+\newcommand{\overlaysoff}{\RenewEnviron{overlays}[1]%
+                            {\maxoverl at y=##1%
+                             \curoverl at y=##1%
+                             \BODY}}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/spath3/spath3.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/spath3/spath3.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/spath3/spath3.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -15,7 +15,7 @@
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}
 \RequirePackage{pgf}
-\ProvidesExplPackage {spath3} {2021/02/05} {2.2} {Functions for
+\ProvidesExplPackage {spath3} {2021/02/21} {2.4} {Functions for
 manipulating PGF soft paths}
 \RequirePackage{xparse}
 \cs_new_protected:Nn \__spath_tl_put_right_braced:Nn
@@ -1226,7 +1226,7 @@
 {
   \spath_splice_between:NVnn #1#1{#2}{#3}
 }
-\cs_generate_variant:Nn \spath_splice_between:Nnn {NVV, cnn, cvv, Nvn}
+\cs_generate_variant:Nn \spath_splice_between:Nnn {NVV, cnn, cvv, Nvn, NVn}
 \cs_new_protected_nopar:Npn \spath_gsplice_between:Nnnn #1#2#3#4
 {
   \__spath_splice_between:nnn {#2}{#3}{#4}
@@ -1238,7 +1238,7 @@
 {
   \spath_gsplice_between:NVnn #1#1{#2}{#3}
 }
-\cs_generate_variant:Nn \spath_gsplice_between:Nnn {NVV, cnn, cvv}
+\cs_generate_variant:Nn \spath_gsplice_between:Nnn {NVV, cnn, cvv, Nvn, NVn}
 \cs_new_protected_nopar:Npn \__spath_close_with:nn #1#2
 {
   \group_begin:
@@ -1355,7 +1355,7 @@
 {
   \spath_append_no_move:NVn #1#1{#2}
 }
-\cs_generate_variant:Nn \spath_append_no_move:Nn {NV, cv, Nv}
+\cs_generate_variant:Nn \spath_append_no_move:Nn {NV, cv, Nv, cV}
 \cs_new_protected_nopar:Npn \spath_gappend_no_move:Nnn #1#2#3
 {
   \__spath_append_no_move:nn {#2}{#3}
@@ -1367,7 +1367,7 @@
 {
   \spath_gappend_no_move:NVn #1#1{#2}
 }
-\cs_generate_variant:Nn \spath_gappend_no_move:Nn {NV, cv, Nv}
+\cs_generate_variant:Nn \spath_gappend_no_move:Nn {NV, cv, Nv, cV}
 \cs_new_protected_nopar:Npn \spath_append:Nnn #1#2#3
 {
   \tl_set:Nn #1 {#2}
@@ -1378,7 +1378,7 @@
 {
   \spath_append:NVn #1#1{#2}
 }
-\cs_generate_variant:Nn \spath_append:Nn {NV, Nv, cv}
+\cs_generate_variant:Nn \spath_append:Nn {NV, Nv, cv, cV}
 \cs_new_protected_nopar:Npn \spath_gappend:Nnn #1#2#3
 {
   \tl_gset:Nn #1 {#2}
@@ -1389,7 +1389,7 @@
 {
   \spath_gappend:NVn #1#1{#2}
 }
-\cs_generate_variant:Nn \spath_gappend:Nn {NV, Nv, cv}
+\cs_generate_variant:Nn \spath_gappend:Nn {NV, Nv, cv, cV}
 \cs_new_protected_nopar:Npn \spath_prepend_no_move:Nnn #1#2#3
 {
   \spath_append_no_move:Nnn #1{#3}{#2}
@@ -1596,6 +1596,117 @@
 {
   \spath_gopen:NV #1#1
 }
+\cs_new_protected_nopar:Npn \__spath_replace_lines:n #1
+{
+  \group_begin:
+  \tl_set:Nn \l__spath_tmpa_tl {#1}
+  \tl_clear:N \l__spath_tmpb_tl
+  \dim_set:Nn \l__spath_tmpa_dim {0pt}
+  \dim_set:Nn \l__spath_tmpb_dim {0pt}
+
+  \bool_do_until:nn
+  {
+    \tl_if_empty_p:N \l__spath_tmpa_tl
+  }
+  {
+    \tl_set:Nx \l__spath_tmpc_tl {\tl_item:Nn \l__spath_tmpa_tl {1}}
+    \tl_set:Nx \l__spath_tmpd_tl {\tl_item:Nn \l__spath_tmpa_tl {2}}
+    \tl_set:Nx \l__spath_tmpe_tl {\tl_item:Nn \l__spath_tmpa_tl {3}}
+
+    \tl_if_eq:NNTF \l__spath_tmpc_tl \c_spath_lineto_tl
+    {
+      \tl_put_right:NV \l__spath_tmpb_tl \c_spath_curvetoa_tl
+      \tl_put_right:Nx \l__spath_tmpb_tl
+      {
+        {
+          \fp_to_dim:n
+          {
+            2/3 * (\l__spath_tmpa_dim)
+            +
+            1/3 * (\l__spath_tmpd_tl)
+          }
+        }
+      }
+      \tl_put_right:Nx \l__spath_tmpb_tl
+      {
+        {
+          \fp_to_dim:n
+          {
+            2/3 * (\l__spath_tmpb_dim)
+            +
+            1/3 * (\l__spath_tmpe_tl)
+          }
+        }
+      }
+      \tl_put_right:NV \l__spath_tmpb_tl \c_spath_curvetob_tl
+      \tl_put_right:Nx \l__spath_tmpb_tl
+      {
+        {
+          \fp_to_dim:n
+          {
+            1/3 * (\l__spath_tmpa_dim)
+            +
+            2/3 * (\l__spath_tmpd_tl)
+          }
+        }
+      }
+      \tl_put_right:Nx \l__spath_tmpb_tl
+      {
+        {
+          \fp_to_dim:n
+          {
+            1/3 * (\l__spath_tmpb_dim)
+            +
+            2/3 * (\l__spath_tmpe_tl)
+          }
+        }
+      }
+      \tl_put_right:NV \l__spath_tmpb_tl \c_spath_curveto_tl
+      \__spath_tl_put_right_braced:NV \l__spath_tmpb_tl \l__spath_tmpd_tl
+      \__spath_tl_put_right_braced:NV \l__spath_tmpb_tl \l__spath_tmpe_tl
+    }
+    {
+      \tl_put_right:NV \l__spath_tmpb_tl \l__spath_tmpc_tl
+      \__spath_tl_put_right_braced:NV \l__spath_tmpb_tl \l__spath_tmpd_tl
+      \__spath_tl_put_right_braced:NV \l__spath_tmpb_tl \l__spath_tmpe_tl
+    }
+
+    \dim_set:Nn \l__spath_tmpa_dim {\l__spath_tmpd_tl}
+    \dim_set:Nn \l__spath_tmpb_dim {\l__spath_tmpe_tl}
+
+    \prg_replicate:nn {3}
+    {
+      \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+    }
+  }
+  \tl_gset_eq:NN \g__spath_output_tl \l__spath_tmpb_tl
+  \group_end:
+}
+\cs_generate_variant:Nn \__spath_replace_lines:n {V}
+\cs_new_protected_nopar:Npn \spath_replace_lines:Nn #1#2
+{
+  \__spath_replace_lines:n {#2}
+  \tl_set_eq:NN #1 \g__spath_output_tl
+  \tl_gclear:N \g__spath_output_tl
+}
+\cs_generate_variant:Nn \spath_replace_lines:Nn {NV, cV, cv, Nv}
+\cs_new_protected_nopar:Npn \spath_replace_lines:N #1
+{
+  \spath_replace_lines:NV #1#1
+}
+\cs_generate_variant:Nn \spath_replace_lines:N {c}
+\cs_new_protected_nopar:Npn \spath_greplace_lines:Nn #1#2
+{
+  \__spath_replace_lines:n {#2}
+  \tl_gset_eq:NN #1 \g__spath_output_tl
+  \tl_gclear:N \g__spath_output_tl
+}
+\cs_generate_variant:Nn \spath_greplace_lines:Nn {NV, cV, cv, Nv}
+\cs_new_protected_nopar:Npn \spath_greplace_lines:N #1
+{
+  \spath_greplace_lines:NV #1#1
+}
+\cs_generate_variant:Nn \spath_greplace_lines:N {c}
 \cs_new_protected_nopar:Npn \__spath_remove_empty_components:n #1
 {
   \group_begin:
@@ -3810,7 +3921,6 @@
   }
 }
 \cs_generate_variant:Nn \spath_show:n {V, v}
-
 \cs_new_protected_nopar:Npn \spath_get_current_path:N #1
 {
   \pgfsyssoftpath at getcurrentpath #1
@@ -3898,6 +4008,7 @@
   \tl_clear_new:c {tikz at timer}
   \tl_set:cn {tikz at timer}
   {
+    \pgftransformreset
     \spath_reallength:Nn \l__spath_tmpa_int {#1}
     \tl_set_eq:Nc \l__spath_tmpb_tl {tikz at time}
     \tl_set:Nx \l__spath_tmpb_tl

Modified: branches/branch2020/Master/texmf-dist/tex/latex/spath3/tikzlibraryspath3.code.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/spath3/tikzlibraryspath3.code.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/spath3/tikzlibraryspath3.code.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -25,7 +25,10 @@
 \seq_new:N \g__spath_tmpb_seq
 \bool_new:N \l__spath_draft_bool
 \msg_new:nnn { spath3 } { missing soft path } { Soft~ path~ #1~ doesn't~ exist }
-\msg_new:nnn { spath3 } { empty soft path } { Soft~ path~ #1~ is~ empty }
+\msg_new:nnnn { spath3 } { empty soft path } { Soft~ path~ #1~ is~ empty}
+{If~ it~ was~ defined~ inside~ a~ group,~ try~ using~ "save~ global". }
+\msg_new:nnn { spath3 } { load intersections }
+{ You~ need~ to~ load~ the~ "intersections"~ library~ to~ work~ with~ intersections }
 \tl_set:Nn \l__spath_prefix_tl {tikz at intersect@path at name@}
 \tl_set:Nn \l__spath_suffix_tl {}
 \tl_new:N \g__spath_tikzfinish_tl
@@ -68,6 +71,59 @@
   \tl_set_eq:NN #1 \g__spath_output_tl
   \tl_gclear:N \g__spath_output_tl
 }
+\cs_set_eq:NN \__spath_tikzset:n \tikzset
+\cs_generate_variant:Nn \__spath_tikzset:n {V, v}
+\bool_new:N \l__spath_reverse_bool
+\bool_new:N \l__spath_weld_bool
+\bool_new:N \l__spath_move_bool
+\bool_new:N \l__spath_global_bool
+\tl_new:N \l__spath_joinpath_tl
+\tl_new:N \l__spath_transformation_tl
+
+\cs_new_protected_nopar:Npn \__spath_set_bool:Nn #1#2
+{
+  \tl_if_eq:nnTF {#2}{false}
+  {
+    \bool_set_false:N #1
+  }
+  {
+    \bool_set_true:N #1
+  }
+}
+\tikzset {
+  spath/join/.is~ family,
+  spath/join/.cd,
+  reverse/.code = {
+    \__spath_set_bool:Nn \l__spath_reverse_bool {#1}
+  },
+  reverse/.default = true,
+  weld/.code = {
+    \__spath_set_bool:Nn \l__spath_weld_bool {#1}
+  },
+  weld/.default = true,
+  no~ weld/.code = {
+    \__spath_set_bool:Nn \l__spath_weld_bool {#1}
+    \bool_set:Nn \l__spath_weld_bool {! \l__spath_weld_bool}
+  },
+  no~ weld/.default = true,
+  move/.code = {
+    \__spath_set_bool:Nn \l__spath_move_bool {#1}
+  },
+  move/.default = true,
+  no~ move/.code = {
+    \__spath_set_bool:Nn \l__spath_move_bool {#1}
+    \bool_set:Nn \l__spath_move_bool {! \l__spath_move_bool}
+  },
+  no~ move/.default = true,
+  global/.code = {
+    \__spath_set_bool:Nn \l__spath_global_bool {#1}
+  },
+  global/.default = true,
+  transform/.store~in=\l__spath_transformation_tl,
+  .unknown/.code = {
+    \tl_set_eq:NN \l__spath_joinpath_tl \pgfkeyscurrentname
+  }
+}
 \cs_set_eq:NN \getComponentOf \clist_item:Nn
 \tikzset{
   spath/.is~family,
@@ -95,6 +151,15 @@
       \l__spath_tmpa_tl
     }
   },
+  save~ global/.code={
+    \tikz at addmode{
+      \spath_get_current_path:N \l__spath_tmpa_tl
+      \spath_bake_round:NV \l__spath_tmpa_tl \l__spath_tmpa_tl
+      \spath_gsave_path:cV
+      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+      \l__spath_tmpa_tl
+    }
+  },
   clone/.code~ 2~ args={
     \tl_if_exist:cTF
     {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
@@ -123,15 +188,6 @@
       \msg_warning:nnn { spath3 } { missing soft path } { #2 }
     }
   },
-  save~ global/.code={
-    \tikz at addmode{
-      \spath_get_current_path:N \l__spath_tmpa_tl
-      \spath_bake_round:NV \l__spath_tmpa_tl \l__spath_tmpa_tl
-      \spath_gsave_path:cV
-      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-      \l__spath_tmpa_tl
-    }
-  },
   save~ to~ aux/.code={
     \tl_if_exist:cTF
     {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
@@ -143,67 +199,134 @@
       \msg_warning:nnn { spath3 } { missing soft path } { #1 }
     }
   },
-  restore/.code={
+  export~ to~ svg/.code={
     \tl_if_exist:cTF
     {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
     {
-      \tl_if_empty:cTF
+      \spath_export_to_svg:nv {#1}
       {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-      {
-        \tl_clear:N \l__spath_tmpa_tl
-        \tl_put_right:NV \l__spath_tmpa_tl \c_spath_moveto_tl
-        \tl_put_right:Nn \l__spath_tmpa_tl {{0pt}{0pt}}
-        \spath_set_current_path:V \l__spath_tmpa_tl
-        \spath_set_tikz_data:V \l__spath_tmpa_tl
-        \msg_warning:nnn { spath3 } { empty soft path } { #1 }
-      }
-      {
-        \spath_set_current_path:c
-        {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-        \spath_set_tikz_data:v
-        {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-      }
     }
     {
-      \tl_clear:N \l__spath_tmpa_tl
-      \tl_put_right:NV \l__spath_tmpa_tl \c_spath_moveto_tl
-      \tl_put_right:Nn \l__spath_tmpa_tl {{0pt}{0pt}}
-      \spath_set_current_path:V \l__spath_tmpa_tl
-      \spath_set_tikz_data:V \l__spath_tmpa_tl
       \msg_warning:nnn { spath3 } { missing soft path } { #1 }
     }
   },
-  restore~ reverse/.code={
+  use/.code={
+    \bool_set_false:N \l__spath_reverse_bool
+    \bool_set_false:N \l__spath_weld_bool
+    \bool_set_false:N \l__spath_move_bool
+    \tl_clear:N \l__spath_joinpath_tl
+    \tl_clear:N \l__spath_transformation_tl
+    \tikzset{
+      spath/join/.cd,
+      #1
+    }
+
     \tl_if_exist:cTF
-    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
     {
-      \tl_if_empty:cTF
-      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+      \tl_use:N \l__spath_prefix_tl
+      \tl_use:N \l__spath_joinpath_tl
+      \tl_use:N \l__spath_suffix_tl
+    }
+    {
+      \tl_if_empty:cT
       {
-        \tl_clear:N \l__spath_tmpa_tl
-        \tl_put_right:NV \l__spath_tmpa_tl \c_spath_moveto_tl
-        \tl_put_right:Nn \l__spath_tmpa_tl {{0pt}{0pt}}
-        \spath_set_current_path:V \l__spath_tmpa_tl
-        \spath_set_tikz_data:V \l__spath_tmpa_tl
+        \tl_use:N \l__spath_prefix_tl
+        \tl_use:N \l__spath_joinpath_tl
+        \tl_use:N \l__spath_suffix_tl
+      }
+      {
         \msg_warning:nnn { spath3 } { empty soft path } { #1 }
       }
+      \tl_set_eq:Nc \l__spath_joinpath_tl
       {
-        \spath_reverse:Nv
-        \l__spath_reverse_tl
-        {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-        \spath_set_current_path:N \l__spath_reverse_tl
-        \spath_set_tikz_data:V \l__spath_reverse_tl
+        \tl_use:N \l__spath_prefix_tl
+        \tl_use:N \l__spath_joinpath_tl
+        \tl_use:N \l__spath_suffix_tl
       }
+      \spath_get_current_path:N \l__spath_current_tl
+
+      \bool_if:NT \l__spath_reverse_bool
+      {
+        \spath_reverse:N \l__spath_joinpath_tl
+      }
+
+      \tl_if_empty:NF \l__spath_transformation_tl
+      {
+        \group_begin:
+        \pgftransformreset
+        \__spath_tikzset:V \l__spath_transformation_tl
+        \pgfgettransform \l__spath_tmpa_tl
+        \tl_gset:Nn \g__spath_smuggle_tl
+        {
+          \spath_transform:Nnnnnnn
+          \l__spath_joinpath_tl
+        }
+        \tl_gput_right:NV \g__spath_smuggle_tl \l__spath_tmpa_tl
+        \group_end:
+        \tl_use:N \g__spath_smuggle_tl
+      }
+
+      \bool_if:NT \l__spath_move_bool
+      {
+        \tl_if_empty:NTF \l__spath_current_tl
+        {
+          \tl_set:Nn \l__spath_tmpc_tl { {0pt} {0pt} }
+        }
+        {
+          \spath_finalpoint:NV
+          \l__spath_tmpc_tl
+          \l__spath_current_tl
+        }
+        \spath_translate_to:NV \l__spath_joinpath_tl \l__spath_tmpc_tl
+      }
+
+      \tl_if_empty:NTF \l__spath_current_tl
+      {
+        \tl_if_empty:NTF \l__spath_joinpath_tl
+        {
+          \tl_set_eq:NN \l__spath_current_tl \c_spath_moveto_tl
+          \tl_put_right:Nn \l__spath_current_tl {{0pt}{0pt}}
+        }
+        {
+          \tl_set_eq:NN \l__spath_current_tl \l__spath_joinpath_tl
+        }
+      }
+      {
+
+        \tl_clear:N \l__spath_tmpa_tl
+        \tl_set:Nn \l__spath_tmpa_tl {spath_}
+
+        \tl_put_right:Nn \l__spath_tmpa_tl {append}
+
+        \bool_if:NT \l__spath_weld_bool
+        {
+          \tl_put_right:Nn \l__spath_tmpa_tl {_no_move}
+        }
+        \tl_put_right:Nn \l__spath_tmpa_tl {:NV}
+
+        \use:c {\tl_use:N \l__spath_tmpa_tl }
+        \l__spath_current_tl
+        \l__spath_joinpath_tl
+      }
+
+      \spath_set_current_path:N \l__spath_current_tl
+      \spath_set_tikz_data:V \l__spath_joinpath_tl
     }
     {
-      \tl_clear:N \l__spath_tmpa_tl
-      \tl_put_right:NV \l__spath_tmpa_tl \c_spath_moveto_tl
-      \tl_put_right:Nn \l__spath_tmpa_tl {{0pt}{0pt}}
-      \spath_set_current_path:V \l__spath_tmpa_tl
-      \spath_set_tikz_data:V \l__spath_tmpa_tl
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      \msg_warning:nnx
+      { spath3 }
+      { missing soft path }
+      {\tl_use:N \l__spath_joinpath_tl }
     }
   },
+  restore/.style={/tikz/spath/use={#1}},
+  restore~ reverse/.style={/tikz/spath/use={reverse, #1}},
+  append/.style={/tikz/spath/use={move, weld, #1}},
+  append~ no~ move/.style={/tikz/spath/use={weld, #1}},
+  append~ reverse/.style={/tikz/spath/use={move, weld, reverse, #1}},
+  append~ reverse~ no~ move/.style={/tikz/spath/use={weld, reverse, #1}},
+  insert/.style={/tikz/spath/use={#1}},
+  insert~ reverse/.style={/tikz/spath/use={reverse, #1}},
   show~current~path/.code={
     \tikz at addmode{
       \pgfsyssoftpath at getcurrentpath\l__spath_tmpa_tl
@@ -230,37 +353,94 @@
       \msg_warning:nnn { spath3 } { missing soft path } { #1 }
     }
   },
-  append/.code={
-    \tl_if_exist:cTF
-    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-    {
-      \spath_get_current_path:N \l__spath_current_tl
-      \spath_finalpoint:NV \l__spath_tmpa_tl \l__spath_current_tl
-      \tl_set_eq:Nc
-      \l__spath_tmpb_tl
-      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-      \spath_translate_to:NV \l__spath_tmpb_tl \l__spath_tmpa_tl
-      \spath_append_no_move:NV \l__spath_current_tl \l__spath_tmpb_tl
-      \spath_set_current_path:N \l__spath_current_tl
-      \spath_set_tikz_data:V \l__spath_tmpb_tl
-    }
-    {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
-    }
-  },
   join~ with/.code~ 2~ args={
     \tl_if_exist:cTF
     {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
     {
+      \bool_set_false:N \l__spath_reverse_bool
+      \bool_set_false:N \l__spath_weld_bool
+      \bool_set_false:N \l__spath_move_bool
+      \bool_set_false:N \l__spath_global_bool
+      \tl_clear:N \l__spath_joinpath_tl
+      \tl_clear:N \l__spath_transformation_tl
+      \tikzset{
+        spath/join/.cd,
+        #2
+      }
+
       \tl_if_exist:cTF
-      {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
       {
-        \spath_append:cv
+        \tl_use:N \l__spath_prefix_tl
+        \tl_use:N \l__spath_joinpath_tl
+        \tl_use:N \l__spath_suffix_tl
+      }
+      {
+        \tl_set_eq:Nc \l__spath_joinpath_tl
+        {
+          \tl_use:N \l__spath_prefix_tl
+          \tl_use:N \l__spath_joinpath_tl
+          \tl_use:N \l__spath_suffix_tl
+        }
+
+        \bool_if:NT \l__spath_reverse_bool
+        {
+          \spath_reverse:N \l__spath_joinpath_tl
+        }
+
+        \tl_if_empty:NF \l__spath_transformation_tl
+        {
+          \group_begin:
+          \pgftransformreset
+          \__spath_tikzset:V \l__spath_transformation_tl
+          \pgfgettransform \l__spath_tmpa_tl
+          \tl_gset:Nn \g__spath_smuggle_tl
+          {
+            \spath_transform:Nnnnnnn
+            \l__spath_joinpath_tl
+          }
+          \tl_gput_right:NV \g__spath_smuggle_tl \l__spath_tmpa_tl
+          \group_end:
+          \tl_use:N \g__spath_smuggle_tl
+        }
+
+        \bool_if:NT \l__spath_move_bool
+        {
+          \spath_finalpoint:Nv
+          \l__spath_tmpc_tl
+          {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+          \spath_translate_to:NV \l__spath_joinpath_tl \l__spath_tmpc_tl
+        }
+
+        \tl_clear:N \l__spath_tmpa_tl
+        \tl_set:Nn \l__spath_tmpa_tl {spath_}
+
+        \bool_if:NT \l__spath_global_bool
+        {
+          \tl_put_right:Nn \l__spath_tmpa_tl {g}
+        }
+
+        \tl_put_right:Nn \l__spath_tmpa_tl {append}
+
+        \bool_if:NT \l__spath_weld_bool
+        {
+          \tl_put_right:Nn \l__spath_tmpa_tl {_no_move}
+        }
+        \tl_put_right:Nn \l__spath_tmpa_tl {:cV}
+
+        \cs_if_exist:cF {\tl_use:N \l__spath_tmpa_tl}
+        {
+          \tl_show:N \l__spath_tmpa_tl
+        }
+
+        \use:c {\tl_use:N \l__spath_tmpa_tl }
         {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-        {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
+        \l__spath_joinpath_tl
       }
       {
-        \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        \msg_warning:nnx
+        { spath3 }
+        { missing soft path }
+        {\tl_use:N \l__spath_joinpath_tl }
       }
     }
     {
@@ -311,88 +491,6 @@
       \msg_warning:nnn { spath3 } { missing soft path } { #1 }
     }
   },
-  append~ reverse/.code={
-    \tl_if_exist:cTF
-    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-    {
-      \spath_reverse:Nv
-      \l__spath_reverse_tl
-      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-      \spath_get_current_path:N \l__spath_current_tl
-      \spath_finalpoint:NV \l__spath_tmpa_tl \l__spath_current_tl
-      \spath_translate_to:NV \l__spath_reverse_tl \l__spath_tmpa_tl
-      \spath_append_no_move:NV \l__spath_current_tl \l__spath_reverse_tl
-      \spath_set_current_path:N \l__spath_current_tl
-      \spath_set_tikz_data:V \l__spath_reverse_tl
-    }
-    {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
-    }
-  },
-  insert/.code={
-    \tl_if_exist:cTF
-    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-    {
-      \spath_get_current_path:N \l__spath_current_tl
-      \spath_append:Nv
-      \l__spath_current_tl
-      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-      \spath_set_current_path:N \l__spath_current_tl
-      \spath_set_tikz_data:v
-      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-    }
-    {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
-    }
-  },
-  insert~ reverse/.code={
-    \tl_if_exist:cTF
-    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-    {
-      \spath_reverse:Nv
-      \l__spath_reverse_tl
-      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-      \spath_get_current_path:N \l__spath_current_tl
-      \spath_append:NV \l__spath_current_tl \l__spath_reverse_tl
-      \spath_set_current_path:N \l__spath_current_tl
-      \spath_set_tikz_data:V \l__spath_reverse_tl
-    }
-    {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
-    }
-  },
-  append~ no~ move/.code={
-    \tl_if_exist:cTF
-    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-    {
-      \spath_get_current_path:N \l__spath_current_tl
-      \spath_append_no_move:Nv
-      \l__spath_current_tl
-      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-      \spath_set_current_path:N \l__spath_current_tl
-      \spath_set_tikz_data:v
-      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-    }
-    {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
-    }
-  },
-  append~ reverse~ no~ move/.code={
-    \tl_if_exist:cTF
-    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-    {
-      \spath_reverse:Nv
-      \l__spath_reverse_tl
-      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-      \spath_get_current_path:N \l__spath_current_tl
-      \spath_append_no_move:NV \l__spath_current_tl \l__spath_reverse_tl
-      \spath_set_current_path:N \l__spath_current_tl
-      \spath_set_tikz_data:V \l__spath_reverse_tl
-    }
-    {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
-    }
-  },
   span/.code ~n~ args={3}{
     \tl_if_exist:cTF
     {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
@@ -488,23 +586,79 @@
     \tl_if_exist:cTF
     {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
     {
+      \tl_if_head_is_group:nTF {#2}
+      {
+        \tl_set:Nx \l__spath_tmpc_tl { \tl_item:nn {#2} {1} }
+        \tl_set:Nx \l__spath_tmpd_tl { \tl_item:nn {#2} {2} }
+      }
+      {
+        \tl_set:Nn \l__spath_tmpc_tl {#2}
+        \tl_clear:N \l__spath_tmpd_tl
+      }
       \tl_if_exist:cTF
-      {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
       {
-        \spath_spot_weld_components:c
-        {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+        \tl_use:N \l__spath_prefix_tl
+        \tl_use:N \l__spath_tmpc_tl
+        \tl_use:N \l__spath_suffix_tl
+      }
+      {
+        \tl_if_empty:NT \l__spath_tmpd_tl
+        {
+          \spath_spot_weld_components:c
+          {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+        }
 
         \spath_components_to_seq:Nv
         \l__spath_tmpa_seq
         {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
 
+        \seq_gclear:N \g__spath_tmpa_seq
+
+        \tl_if_empty:NTF \l__spath_tmpd_tl
+        {
+          \int_step_inline:nnnn {1}{1} {\seq_count:N \l__spath_tmpa_seq}
+          {
+            \seq_gput_right:Nn \g__spath_tmpa_seq {##1}
+          }
+        }
+        {
+          \foreach \l__spath_tmpa_tl in \l__spath_tmpd_tl
+          {
+            \seq_gput_right:NV \g__spath_tmpa_seq \l__spath_tmpa_tl
+          }
+          \seq_gsort:Nn \g__spath_tmpa_seq
+          {
+            \int_compare:nNnTF {##1} < {##2}
+            { \sort_return_same: }
+            { \sort_return_swapped: }
+          }
+        }
+
         \seq_pop_left:NN \l__spath_tmpa_seq \l__spath_tmpa_tl
+        \seq_gpop_left:NN \g__spath_tmpa_seq \l__spath_tmpb_tl
 
-        \seq_map_inline:Nn \l__spath_tmpa_seq
+        \seq_map_indexed_inline:Nn \l__spath_tmpa_seq
         {
-          \spath_splice_between:Nvn \l__spath_tmpa_tl
-          {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
-          {##1}
+          \int_compare:nTF
+          {
+            ##1 == \l__spath_tmpb_tl
+          }
+          {
+            \seq_gpop_left:NNF \g__spath_tmpa_seq \l__spath_tmpb_tl
+            {
+              \tl_set:Nn \l__spath_tmpb_tl {-1}
+            }
+            \spath_splice_between:Nvn \l__spath_tmpa_tl
+            {
+              \tl_use:N \l__spath_prefix_tl
+              \tl_use:N \l__spath_tmpc_tl
+              \tl_use:N \l__spath_suffix_tl
+            }
+            {##2}
+          }
+          {
+            \tl_put_right:Nn \l__spath_tmpa_tl {##2}
+          }
         }
         \tl_set_eq:cN
         {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
@@ -511,7 +665,10 @@
         \l__spath_tmpa_tl
       }
       {
-        \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        \msg_warning:nnx
+        { spath3 }
+        { missing soft path }
+        { \tl_use:N \l__spath_tmpc_tl }
       }
     }
     {
@@ -522,30 +679,204 @@
     \tl_if_exist:cTF
     {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
     {
+      \tl_if_head_is_group:nTF {#2}
+      {
+        \tl_set:Nx \l__spath_tmpc_tl { \tl_item:nn {#2} {1} }
+        \tl_set:Nx \l__spath_tmpd_tl { \tl_item:nn {#2} {2} }
+      }
+      {
+        \tl_set:Nn \l__spath_tmpc_tl {#2}
+        \tl_clear:N \l__spath_tmpd_tl
+      }
       \tl_if_exist:cTF
-      {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
       {
-        \spath_spot_gweld_components:c
+        \tl_use:N \l__spath_prefix_tl
+        \tl_use:N \l__spath_tmpc_tl
+        \tl_use:N \l__spath_suffix_tl
+      }
+      {
+        \tl_if_empty:NT \l__spath_tmpd_tl
+        {
+          \spath_spot_weld_components:c
+          {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+        }
+
+        \spath_components_to_seq:Nv
+        \l__spath_tmpa_seq
         {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
 
+        \seq_gclear:N \g__spath_tmpa_seq
+
+        \tl_if_empty:NTF \l__spath_tmpd_tl
+        {
+          \int_step_inline:nnnn {1}{1} {\seq_count:N \l__spath_tmpa_seq}
+          {
+            \seq_gput_right:Nn \g__spath_tmpa_seq {##1}
+          }
+        }
+        {
+          \foreach \l__spath_tmpa_tl in \l__spath_tmpd_tl
+          {
+            \seq_gput_right:NV \g__spath_tmpa_seq \l__spath_tmpa_tl
+          }
+          \seq_gsort:Nn \g__spath_tmpa_seq
+          {
+            \int_compare:nNnTF {##1} < {##2}
+            { \sort_return_same: }
+            { \sort_return_swapped: }
+          }
+        }
+
+        \seq_pop_left:NN \l__spath_tmpa_seq \l__spath_tmpa_tl
+        \seq_gpop_left:NN \g__spath_tmpa_seq \l__spath_tmpb_tl
+
+        \seq_map_indexed_inline:Nn \l__spath_tmpa_seq
+        {
+          \int_compare:nTF
+          {
+            ##1 == \l__spath_tmpb_tl
+          }
+          {
+            \seq_gpop_left:NNF \g__spath_tmpa_seq \l__spath_tmpb_tl
+            {
+              \tl_set:Nn \l__spath_tmpb_tl {-1}
+            }
+            \spath_splice_between:Nvn \l__spath_tmpa_tl
+            {
+              \tl_use:N \l__spath_prefix_tl
+              \tl_use:N \l__spath_tmpc_tl
+              \tl_use:N \l__spath_suffix_tl
+            }
+            {##2}
+          }
+          {
+            \tl_put_right:Nn \l__spath_tmpa_tl {##2}
+          }
+        }
+        \tl_gset_eq:cN
+        {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+        \l__spath_tmpa_tl
+      }
+      {
+        \msg_warning:nnx
+        { spath3 }
+        { missing soft path }
+        { \tl_use:N \l__spath_tmpc_tl }
+      }
+    }
+    {
+      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+    }
+  },
+  join~ components~ upright~ with/.code~2~args={
+    \tl_if_exist:cTF
+    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+    {
+      \tl_if_head_is_group:nTF {#2}
+      {
+        \tl_set:Nx \l__spath_tmpc_tl { \tl_item:nn {#2} {1} }
+        \tl_set:Nx \l__spath_tmpd_tl { \tl_item:nn {#2} {2} }
+      }
+      {
+        \tl_set:Nn \l__spath_tmpc_tl {#2}
+        \tl_clear:N \l__spath_tmpd_tl
+      }
+      \tl_if_exist:cTF
+      {
+        \tl_use:N \l__spath_prefix_tl
+        \tl_use:N \l__spath_tmpc_tl
+        \tl_use:N \l__spath_suffix_tl
+      }
+      {
+        \tl_if_empty:NT \l__spath_tmpd_tl
+        {
+          \spath_spot_weld_components:c
+          {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+        }
+
         \spath_components_to_seq:Nv
         \l__spath_tmpa_seq
         {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
 
+        \seq_gclear:N \g__spath_tmpa_seq
+
+        \tl_if_empty:NTF \l__spath_tmpd_tl
+        {
+          \int_step_inline:nnnn {1}{1} {\seq_count:N \l__spath_tmpa_seq}
+          {
+            \seq_gput_right:Nn \g__spath_tmpa_seq {##1}
+          }
+        }
+        {
+          \foreach \l__spath_tmpa_tl in \l__spath_tmpd_tl
+          {
+            \seq_gput_right:NV \g__spath_tmpa_seq \l__spath_tmpa_tl
+          }
+          \seq_gsort:Nn \g__spath_tmpa_seq
+          {
+            \int_compare:nNnTF {##1} < {##2}
+            { \sort_return_same: }
+            { \sort_return_swapped: }
+          }
+        }
+
         \seq_pop_left:NN \l__spath_tmpa_seq \l__spath_tmpa_tl
+        \seq_gpop_left:NN \g__spath_tmpa_seq \l__spath_tmpb_tl
 
-        \seq_map_inline:Nn \l__spath_tmpa_seq
+        \tl_set_eq:Nc \l__spath_tmpc_tl
         {
-          \spath_gsplice_between:Nvn \l__spath_tmpa_tl
-          {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
-          {##1}
+          \tl_use:N \l__spath_prefix_tl
+          \tl_use:N \l__spath_tmpc_tl
+          \tl_use:N \l__spath_suffix_tl
         }
+        \spath_transform:NVnnnnnn \l__spath_tmpd_tl \l__spath_tmpc_tl {1}{0}{0}{-1}{0pt}{0pt}
+
+        \seq_map_indexed_inline:Nn \l__spath_tmpa_seq
+        {
+          \int_compare:nTF
+          {
+            ##1 == \l__spath_tmpb_tl
+          }
+          {
+            \seq_gpop_left:NNF \g__spath_tmpa_seq \l__spath_tmpb_tl
+            {
+              \tl_set:Nn \l__spath_tmpb_tl {-1}
+            }
+            \spath_finalpoint:NV \l__spath_tmpe_tl \l__spath_tmpa_tl
+            \spath_initialpoint:Nn \l__spath_tmpf_tl {##2}
+
+            \dim_compare:nTF
+            {
+              \tl_item:Nn \l__spath_tmpe_tl {1}
+              >
+              \tl_item:Nn \l__spath_tmpf_tl {1}
+            }
+            {
+              \spath_splice_between:NVn
+              \l__spath_tmpa_tl
+              \l__spath_tmpd_tl
+              {##2}
+            }
+            {
+              \spath_splice_between:NVn
+              \l__spath_tmpa_tl
+              \l__spath_tmpc_tl
+              {##2}
+            }
+          }
+          {
+            \tl_put_right:Nn \l__spath_tmpa_tl {##2}
+          }
+        }
         \tl_set_eq:cN
         {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
         \l__spath_tmpa_tl
       }
       {
-        \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        \msg_warning:nnx
+        { spath3 }
+        { missing soft path }
+        { \tl_use:N \l__spath_tmpc_tl }
       }
     }
     {
@@ -552,6 +883,121 @@
       \msg_warning:nnn { spath3 } { missing soft path } { #1 }
     }
   },
+  join~ components~ globally~ upright~ with/.code~2~args={
+    \tl_if_exist:cTF
+    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+    {
+      \tl_if_head_is_group:nTF {#2}
+      {
+        \tl_set:Nx \l__spath_tmpc_tl { \tl_item:nn {#2} {1} }
+        \tl_set:Nx \l__spath_tmpd_tl { \tl_item:nn {#2} {2} }
+      }
+      {
+        \tl_set:Nn \l__spath_tmpc_tl {#2}
+        \tl_clear:N \l__spath_tmpd_tl
+      }
+      \tl_if_exist:cTF
+      {
+        \tl_use:N \l__spath_prefix_tl
+        \tl_use:N \l__spath_tmpc_tl
+        \tl_use:N \l__spath_suffix_tl
+      }
+      {
+        \tl_if_empty:NT \l__spath_tmpd_tl
+        {
+          \spath_spot_weld_components:c
+          {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+        }
+
+        \spath_components_to_seq:Nv
+        \l__spath_tmpa_seq
+        {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+
+        \seq_gclear:N \g__spath_tmpa_seq
+
+        \tl_if_empty:NTF \l__spath_tmpd_tl
+        {
+          \int_step_inline:nnnn {1}{1} {\seq_count:N \l__spath_tmpa_seq}
+          {
+            \seq_gput_right:Nn \g__spath_tmpa_seq {##1}
+          }
+        }
+        {
+          \foreach \l__spath_tmpa_tl in \l__spath_tmpd_tl
+          {
+            \seq_gput_right:NV \g__spath_tmpa_seq \l__spath_tmpa_tl
+          }
+          \seq_gsort:Nn \g__spath_tmpa_seq
+          {
+            \int_compare:nNnTF {##1} < {##2}
+            { \sort_return_same: }
+            { \sort_return_swapped: }
+          }
+        }
+
+        \seq_pop_left:NN \l__spath_tmpa_seq \l__spath_tmpa_tl
+        \seq_gpop_left:NN \g__spath_tmpa_seq \l__spath_tmpb_tl
+
+        \tl_set_eq:Nc \l__spath_tmpc_tl
+        {
+          \tl_use:N \l__spath_prefix_tl
+          \tl_use:N \l__spath_tmpc_tl
+          \tl_use:N \l__spath_suffix_tl
+        }
+        \spath_transform:NVnnnnnn \l__spath_tmpd_tl \l__spath_tmpc_tl {1}{0}{0}{-1}{0pt}{0pt}
+
+        \seq_map_indexed_inline:Nn \l__spath_tmpa_seq
+        {
+          \int_compare:nTF
+          {
+            ##1 == \l__spath_tmpb_tl
+          }
+          {
+            \seq_gpop_left:NNF \g__spath_tmpa_seq \l__spath_tmpb_tl
+            {
+              \tl_set:Nn \l__spath_tmpb_tl {-1}
+            }
+            \spath_finalpoint:NV \l__spath_tmpe_tl \l__spath_tmpa_tl
+            \spath_initialpoint:Nn \l__spath_tmpf_tl {##2}
+
+            \dim_compare:nTF
+            {
+              \tl_item:Nn \l__spath_tmpe_tl {1}
+              >
+              \tl_item:Nn \l__spath_tmpf_tl {1}
+            }
+            {
+              \spath_splice_between:NVn
+              \l__spath_tmpa_tl
+              \l__spath_tmpd_tl
+              {##2}
+            }
+            {
+              \spath_splice_between:NVn
+              \l__spath_tmpa_tl
+              \l__spath_tmpc_tl
+              {##2}
+            }
+          }
+          {
+            \tl_put_right:Nn \l__spath_tmpa_tl {##2}
+          }
+        }
+        \tl_gset_eq:cN
+        {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+        \l__spath_tmpa_tl
+      }
+      {
+        \msg_warning:nnx
+        { spath3 }
+        { missing soft path }
+        { \tl_use:N \l__spath_tmpc_tl }
+      }
+    }
+    {
+      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+    }
+  },
   close/.code={
     \tl_if_exist:cTF
     {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
@@ -726,17 +1172,6 @@
       \msg_warning:nnn { spath3 } { missing soft path } { #1 }
     }
   },
-  export~ to~ svg/.code={
-    \tl_if_exist:cTF
-    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-    {
-      \spath_export_to_svg:nv {#1}
-      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-    }
-    {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
-    }
-  },
   transform/.code~ 2~ args={
     \tl_if_exist:cTF
     {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
@@ -781,100 +1216,154 @@
   },
   split~ at~ intersections~ with/.code~ n~ args={2}{
     \tl_if_exist:cTF
-    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
     {
+      tikz at library@intersections at loaded
+    }
+    {
       \tl_if_exist:cTF
-      {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
+      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
       {
-        \spath_split_path_at_intersections:cv
-        {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+        \tl_if_exist:cTF
         {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
+        {
+          \spath_split_path_at_intersections:cv
+          {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+          {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
+        }
+        {
+          \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        }
       }
       {
-        \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        \msg_warning:nnn { spath3 } { missing soft path } { #1 }
       }
     }
     {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      \msg_warning:nn { spath3 } { load intersections }
     }
   },
   split~ globally~ at~ intersections~ with/.code~ n~ args={2}{
     \tl_if_exist:cTF
-    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
     {
-      \tl_if_exist:cTF
-      {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
+      tikz at library@intersections at loaded
+    }
+    {
+    \tl_if_exist:cTF
+      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
       {
-        \spath_gsplit_path_at_intersections:cv
-        {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+        \tl_if_exist:cTF
         {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
+        {
+          \spath_gsplit_path_at_intersections:cv
+          {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+          {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
+        }
+        {
+          \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        }
       }
       {
-        \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        \msg_warning:nnn { spath3 } { missing soft path } { #1 }
       }
     }
     {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      \msg_warning:nn { spath3 } { load intersections }
     }
   },
   split~ at~ intersections/.code~ n~ args={2}{
     \tl_if_exist:cTF
-    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
     {
+      tikz at library@intersections at loaded
+    }
+    {
       \tl_if_exist:cTF
-      {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
+      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
       {
-        \spath_split_at_intersections:cc
-        {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+        \tl_if_exist:cTF
         {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
+        {
+          \spath_split_at_intersections:cc
+          {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+          {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
+        }
+        {
+          \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        }
       }
       {
-        \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        \msg_warning:nnn { spath3 } { missing soft path } { #1 }
       }
     }
     {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      \msg_warning:nn { spath3 } { load intersections }
     }
   },
   split~ globally~ at~ intersections/.code~ n~ args={2}{
     \tl_if_exist:cTF
-    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
     {
+      tikz at library@intersections at loaded
+    }
+    {
       \tl_if_exist:cTF
-      {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
+      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
       {
-        \spath_gsplit_at_intersections:cc
-        {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+        \tl_if_exist:cTF
         {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
+        {
+          \spath_gsplit_at_intersections:cc
+          {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+          {\tl_use:N \l__spath_prefix_tl #2 \tl_use:N \l__spath_suffix_tl}
+        }
+        {
+          \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        }
       }
       {
-        \msg_warning:nnn { spath3 } { missing soft path } { #2 }
+        \msg_warning:nnn { spath3 } { missing soft path } { #1 }
       }
     }
     {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      \msg_warning:nn { spath3 } { load intersections }
     }
   },
   split~ at~ self~ intersections/.code={
     \tl_if_exist:cTF
-    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
     {
-      \spath_split_at_self_intersections:c
+      tikz at library@intersections at loaded
+    }
+    {
+      \tl_if_exist:cTF
       {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+      {
+        \spath_split_at_self_intersections:c
+        {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+      }
+      {
+        \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      }
     }
     {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      \msg_warning:nn { spath3 } { load intersections }
     }
   },
   split~ globally~ at~ self~ intersections/.code={
     \tl_if_exist:cTF
-    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
     {
-      \spath_gsplit_at_self_intersections:c
+      tikz at library@intersections at loaded
+    }
+    {
+      \tl_if_exist:cTF
       {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+      {
+        \spath_gsplit_at_self_intersections:c
+        {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+      }
+      {
+        \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      }
     }
     {
-      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+      \msg_warning:nn { spath3 } { load intersections }
     }
   },
   get~ components~ of/.code~ 2~ args={
@@ -966,29 +1455,53 @@
       \msg_warning:nnn { spath3 } { missing soft path } { #1 }
     }
   },
-  insert~ gaps~ after~ components/.code~ n~ args={3}{
+  insert~ gaps~ after~ components/.code~ 2~ args={
     \tl_if_exist:cTF
     {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
     {
       \group_begin:
+      \tl_if_head_is_group:nTF {#2}
+      {
+        \tl_set:Nx \l__spath_tmpc_tl { \tl_item:nn {#2} {1} }
+        \tl_set:Nx \l__spath_tmpd_tl { \tl_item:nn {#2} {2} }
+      }
+      {
+        \tl_set:Nn \l__spath_tmpc_tl {#2}
+        \tl_clear:N \l__spath_tmpd_tl
+      }
       \seq_gclear:N \g__spath_tmpa_seq
       \seq_gclear:N \g__spath_tmpb_seq
       \spath_numberofcomponents:Nv \l__spath_tmpa_int
       {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-      \foreach \l__spath_tmpa_tl in {#3}
+
+      \spath_components_to_seq:Nv
+      \l__spath_tmpa_seq
+      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+
+      \tl_if_empty:NTF \l__spath_tmpd_tl
       {
-        \seq_gput_right:NV \g__spath_tmpa_seq \l__spath_tmpa_tl
-        \seq_gput_right:Nx
-        \g__spath_tmpb_seq
-        {\int_eval:n
-          {
-            \int_mod:nn { \l__spath_tmpa_tl }{ \l__spath_tmpa_int } + 1
+        \int_step_inline:nnnn {1}{1} { \l__spath_tmpa_int - 1 }
+        {
+          \seq_gput_right:Nn \g__spath_tmpa_seq {##1}
+          \seq_gput_right:Nx
+          \g__spath_tmpb_seq
+          {\int_eval:n {##1 + 1}}
+        }
+      }
+      {
+        \foreach \l__spath_tmpa_tl in \l__spath_tmpd_tl
+        {
+          \seq_gput_right:NV \g__spath_tmpa_seq \l__spath_tmpa_tl
+          \seq_gput_right:Nx
+          \g__spath_tmpb_seq
+          {\int_eval:n
+            {
+              \int_mod:nn { \l__spath_tmpa_tl }{ \l__spath_tmpa_int } + 1
+            }
           }
         }
       }
-      \spath_components_to_seq:Nv
-      \l__spath_tmpa_seq
-      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+
       \seq_clear:N \l__spath_tmpb_seq
       \seq_map_indexed_inline:Nn \l__spath_tmpa_seq
       {
@@ -995,11 +1508,11 @@
         \tl_set:Nn \l__spath_tmpa_tl {##2}
         \seq_if_in:NnT \g__spath_tmpa_seq {##1}
         {
-          \spath_shorten_at_end:Nn \l__spath_tmpa_tl {#2/2}
+          \spath_shorten_at_end:Nn \l__spath_tmpa_tl {\l__spath_tmpc_tl/2}
         }
         \seq_if_in:NnT \g__spath_tmpb_seq {##1}
         {
-          \spath_shorten_at_start:Nn \l__spath_tmpa_tl {#2/2}
+          \spath_shorten_at_start:Nn \l__spath_tmpa_tl {\l__spath_tmpc_tl/2}
         }
         \seq_put_right:NV \l__spath_tmpb_seq \l__spath_tmpa_tl
       }
@@ -1014,30 +1527,53 @@
       \msg_warning:nnn { spath3 } { missing soft path } { #1 }
     }
   },
-  insert~ gaps~ globally~ after~ components/.code~ n~ args={3}{
+  insert~ gaps~ globally~ after~ components/.code~ 2~ args={
     \tl_if_exist:cTF
     {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
     {
       \group_begin:
+      \tl_if_head_is_group:nTF {#2}
+      {
+        \tl_set:Nx \l__spath_tmpc_tl { \tl_item:nn {#2} {1} }
+        \tl_set:Nx \l__spath_tmpd_tl { \tl_item:nn {#2} {2} }
+      }
+      {
+        \tl_set:Nn \l__spath_tmpc_tl {#2}
+        \tl_clear:N \l__spath_tmpd_tl
+      }
       \seq_gclear:N \g__spath_tmpa_seq
       \seq_gclear:N \g__spath_tmpb_seq
       \spath_numberofcomponents:Nv \l__spath_tmpa_int
       {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
-      \foreach \l__spath_tmpa_tl in {#3}
+
+      \spath_components_to_seq:Nv
+      \l__spath_tmpa_seq
+      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+
+      \tl_if_empty:NTF \l__spath_tmpd_tl
       {
-        \seq_gput_right:NV \g__spath_tmpa_seq \l__spath_tmpa_tl
-        \seq_gput_right:Nx
-        \g__spath_tmpb_seq
+        \int_step_inline:nnnn {1}{1} { \l__spath_tmpa_int - 1 }
         {
-          \int_eval:n
-          {
-            \int_mod:nn { \l__spath_tmpa_tl }{ \l__spath_tmpa_int } + 1
+          \seq_gput_right:Nn \g__spath_tmpa_seq {##1}
+          \seq_gput_right:Nx
+          \g__spath_tmpb_seq
+          {\int_eval:n {##1 + 1}}
+        }
+      }
+      {
+        \foreach \l__spath_tmpa_tl in \l__spath_tmpd_tl
+        {
+          \seq_gput_right:NV \g__spath_tmpa_seq \l__spath_tmpa_tl
+          \seq_gput_right:Nx
+          \g__spath_tmpb_seq
+          {\int_eval:n
+            {
+              \int_mod:nn { \l__spath_tmpa_tl }{ \l__spath_tmpa_int } + 1
+            }
           }
         }
       }
-      \spath_components_to_seq:Nv
-      \l__spath_tmpa_seq
-      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+
       \seq_clear:N \l__spath_tmpb_seq
       \seq_map_indexed_inline:Nn \l__spath_tmpa_seq
       {
@@ -1044,11 +1580,11 @@
         \tl_set:Nn \l__spath_tmpa_tl {##2}
         \seq_if_in:NnT \g__spath_tmpa_seq {##1}
         {
-          \spath_shorten_at_end:Nn \l__spath_tmpa_tl {#2/2}
+          \spath_shorten_at_end:Nn \l__spath_tmpa_tl {\l__spath_tmpc_tl/2}
         }
         \seq_if_in:NnT \g__spath_tmpb_seq {##1}
         {
-          \spath_shorten_at_start:Nn \l__spath_tmpa_tl {#2/2}
+          \spath_shorten_at_start:Nn \l__spath_tmpa_tl {\l__spath_tmpc_tl/2}
         }
         \seq_put_right:NV \l__spath_tmpb_seq \l__spath_tmpa_tl
       }
@@ -1135,6 +1671,28 @@
       \msg_warning:nnn { spath3 } { missing soft path } { #1 }
     }
   },
+  replace~ lines/.code={
+    \tl_if_exist:cTF
+    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+    {
+      \spath_replace_lines:c
+      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+    }
+    {
+      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+    }
+  },
+  replace~ lines~ globally/.code={
+    \tl_if_exist:cTF
+    {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+    {
+      \spath_greplace_lines:c
+      {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
+    }
+    {
+      \msg_warning:nnn { spath3 } { missing soft path } { #1 }
+    }
+  },
   remove~ components/.code~ 2~ args={
     \tl_if_exist:cTF
     {\tl_use:N \l__spath_prefix_tl #1 \tl_use:N \l__spath_suffix_tl}
@@ -1403,7 +1961,10 @@
     }
   }
   {
-    \msg_warning:nnx { spath3 } { missing soft path } { \tl_use:N \l__spath_tmpa_tl }
+    \msg_warning:nnx
+    { spath3 }
+    { missing soft path }
+    { \tl_use:N \l__spath_tmpa_tl }
     \tl_gset_eq:NN \g__spath_smuggle_tl \pgfpointorigin
   }
   \group_end:

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-attr-code.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-attr-code.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-attr-code.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,110 +1,129 @@
-\ProvidesExplPackage {tagpdf-attr-code} {2019/07/02} {0.61}
- {part of tagpdf - code related to attributes and attribute classes}
+%%
+%% This is file `tagpdf-attr-code.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf-struct.dtx  (with options: `attr')
+%% 
+%% Copyright (C) 2019 Ulrike Fischer
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    https://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: tagpdf-struct.dtx
 
-% the obj is written in tagpdf-tree-code.
+\ProvidesExplPackage {tagpdf-attr-code} {2021/02/23} {0.80}
+  {part of tagpdf - code related to attributes and attribute classes}
 
-\seq_new:N  \g__uftag_attr_class_used_seq
-\prop_new:N \g__uftag_attr_objnum_prop %will contain obj num of used attributes
 
-\prop_new:N \g__uftag_attr_entries_prop
-\tl_new:N   \g__uftag_attr_class_content_tl
-\tl_new:N   \l__uftag_attr_objtmp_tl
-\tl_new:N   \l__uftag_attr_value_tl
+\seq_new:N  \g__tag_attr_class_used_seq
+\prop_new:N \g__tag_attr_objref_prop %will contain obj num of used attributes
 
+\prop_new:N \g__tag_attr_entries_prop
+\tl_new:N   \g__tag_attr_class_content_tl
+\tl_new:N   \l__tag_attr_objtmp_tl
+\tl_new:N   \l__tag_attr_value_tl
 
-\cs_new_protected:Nn \__uftag_attr_new_entry:nn %#1:name, #2: content
- {
-  \prop_gput:Nnn \g__uftag_attr_entries_prop
-   {#1}{#2}
- }
+\cs_new_protected:Nn \__tag_attr_new_entry:nn %#1:name, #2: content
+  {
+    \prop_gput:Nnn \g__tag_attr_entries_prop
+      {#1}{#2}
+  }
 
-\keys_define:nn { uftag / setup }
- {
-  newattribute .code:n =
-   {
-    \__uftag_attr_new_entry:nn #1
-   }
- }
-
-
-% the key for the structure:
-\keys_define:nn { uftag / struct }
-{
- attribute-class .code:n =
- {
-   \clist_set:No \l_tmpa_clist { #1 }
-   \seq_set_from_clist:NN \l_tmpa_seq \l_tmpa_clist
-   \seq_map_inline:Nn \l_tmpa_seq
-    {
-     \prop_if_in:NnF \g__uftag_attr_entries_prop {##1}
+\keys_define:nn { __tag / setup }
+  {
+    newattribute .code:n =
       {
-       \msg_error:nnn { uftag } { attr-unknown } { ##1 }
+        \__tag_attr_new_entry:nn #1
       }
-     \seq_gput_left:Nn\g__uftag_attr_class_used_seq { ##1}
+  }
+
+\keys_define:nn { __tag / struct }
+  {
+    attribute-class .code:n =
+     {
+       \clist_set:No \l_tmpa_clist { #1 }
+       \seq_set_from_clist:NN \l_tmpa_seq \l_tmpa_clist
+       \seq_map_inline:Nn \l_tmpa_seq
+         {
+           \prop_if_in:NnF \g__tag_attr_entries_prop {##1}
+             {
+               \msg_error:nnn { tag } { attr-unknown } { ##1 }
+             }
+           \seq_gput_left:Nn\g__tag_attr_class_used_seq { ##1}
+         }
+       \seq_set_map:NNn \l_tmpb_seq \l_tmpa_seq
+         {
+           /##1
+         }
+       \tl_set:Nx \l_tmpa_tl
+         {
+           \int_compare:nT { \seq_count:N \l_tmpa_seq > 1 }{[}
+           \seq_use:Nn \l_tmpb_seq  { \c_space_tl  }
+           \int_compare:nT { \seq_count:N \l_tmpa_seq > 1 }{]}
+         }
+       \int_compare:nT { \seq_count:N \l_tmpa_seq > 0 }
+         {
+           \__tag_prop_gput:cnx
+             { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+             { C }
+             { \l_tmpa_tl }
+          %\prop_show:c  { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+         }
     }
-   \seq_set_map:NNn \l_tmpb_seq \l_tmpa_seq
-   {
-     /##1
-   }
-  \tl_set:Nx \l_tmpa_tl
-   {
-    \int_compare:nT { \seq_count:N \l_tmpa_seq > 1 }{[}
-    \seq_use:Nn \l_tmpb_seq  { \c_space_tl  }
-    \int_compare:nT { \seq_count:N \l_tmpa_seq > 1 }{]}
-   }
-   \int_compare:nT { \seq_count:N \l_tmpa_seq > 0 }
-    {
-      \__uftag_prop_gput:cnx
-       { g__uftag_struct_\int_eval:n {\c at g__uftag_struct_abs_int}_prop }
-       { C }
-       { \l_tmpa_tl }
-      %\prop_show:c  { g__uftag_struct_\int_eval:n {\c at g__uftag_struct_abs_int}_prop }
-    }
-   }
-}
+  }
 
-\keys_define:nn { uftag / struct }
- {
-  attribute .code:n  = % A property (attribute, value currently a dictionary)
-   {
-    \clist_set:No          \l_tmpa_clist { #1 }
-    \seq_set_from_clist:NN \l_tmpa_seq \l_tmpa_clist
-    \tl_set:Nx \l__uftag_attr_value_tl
-    {
-     \int_compare:nT { \seq_count:N \l_tmpa_seq > 1 }{[}
-    }
-    \seq_map_inline:Nn \l_tmpa_seq
-    {
-     \prop_if_in:NnF \g__uftag_attr_entries_prop {##1}
+\keys_define:nn { __tag / struct }
+  {
+    attribute .code:n  = % A property (attribute, value currently a dictionary)
       {
-       \msg_error:nnn { uftag } { attr-unknown } { ##1 }
-      }
-     \prop_if_in:NnF \g__uftag_attr_objnum_prop {##1}
-      {
-       \__uftag_pdfreserveobjnum:N \l_tmpa_tl
-       \__uftag_pdfuseobjnum:Nx    \l_tmpa_tl
-        {
-          \prop_item:Nn\g__uftag_attr_entries_prop {##1}
-        }
-        \prop_gput:NnV \g__uftag_attr_objnum_prop {##1} {\l_tmpa_tl}
-      }
-     \tl_put_right:Nx \l__uftag_attr_value_tl
-      {
-       \c_space_tl
-       \prop_item:Nn \g__uftag_attr_objnum_prop {##1}
-       \c_space_tl 0 \c_space_tl R
-      }
- %    \tl_show:N \l__uftag_attr_value_tl
-    }
-    \tl_put_right:Nx \l__uftag_attr_value_tl
-     {
-      \int_compare:nT { \seq_count:N \l_tmpa_seq > 1 }{]}
-     }
- %   \tl_show:N \l__uftag_attr_value_tl
-    \__uftag_prop_gput:cnx
-     { g__uftag_struct_\int_eval:n {\c at g__uftag_struct_abs_int}_prop }
-     { A }
-     { \l__uftag_attr_value_tl }
-   },
- }
-\endinput
+        \clist_set:No          \l_tmpa_clist { #1 }
+        \seq_set_from_clist:NN \l_tmpa_seq \l_tmpa_clist
+        \tl_set:Nx \l__tag_attr_value_tl
+          {
+            \int_compare:nT { \seq_count:N \l_tmpa_seq > 1 }{[}%]
+          }
+        \seq_map_inline:Nn \l_tmpa_seq
+          {
+            \prop_if_in:NnF \g__tag_attr_entries_prop {##1}
+              {
+                \msg_error:nnn { tag } { attr-unknown } { ##1 }
+              }
+            \prop_if_in:NnF \g__tag_attr_objref_prop {##1}
+              {%\prop_show:N \g__tag_attr_entries_prop
+                \pdf_object_unnamed_write:nx
+                  { dict }
+                  {
+                    \prop_item:Nn\g__tag_attr_entries_prop {##1}
+                  }
+                \prop_gput:Nnx \g__tag_attr_objref_prop {##1} {\pdf_object_ref_last:}
+              }
+            \tl_put_right:Nx \l__tag_attr_value_tl
+              {
+                \c_space_tl
+                \prop_item:Nn \g__tag_attr_objref_prop {##1}
+              }
+ %     \tl_show:N \l__tag_attr_value_tl
+          }
+        \tl_put_right:Nx \l__tag_attr_value_tl
+          { %[
+            \int_compare:nT { \seq_count:N \l_tmpa_seq > 1 }{]}%
+          }
+ %     \tl_show:N \l__tag_attr_value_tl
+        \__tag_prop_gput:cnx
+          { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+          { A }
+          { \l__tag_attr_value_tl }
+    },
+  }
+%% 
+%%
+%% End of file `tagpdf-attr-code.sty'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-checks-code.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-checks-code.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-checks-code.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,188 +1,208 @@
-\ProvidesExplPackage {tagpdf-checks-code} {2019/07/02} {0.61}
+%%
+%% This is file `tagpdf-checks-code.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf-checks.dtx  (with options: `checks')
+%% 
+%% Copyright (C) 2019 Ulrike Fischer
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    https://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: tagpdf-checks.dtx
+\ProvidesExplPackage {tagpdf-checks-code} {2021/02/23} {0.80}
  {part of tagpdf - code related to checks and messages}
 
 
-%messages
+\msg_new:nnn { tag } {mc-nested}        { nested~marked~content~found~-~mcid~#1 }
+\msg_new:nnn { tag } {mc-tag-missing}   { required~tag~missing~-~mcid~#1 }
+\msg_new:nnn { tag } {mc-label-unknown} { label~#1~unknown~-~rerun }
+\msg_new:nnn { tag } {mc-used-twice}    { mc~#1~has~been~already~used }
+\msg_new:nnn { tag } {mc-not-open}      { there~is~no~mc~to~end~at~#1 }
 
-% mc
-\msg_new:nnn {uftag} {mc-nested}        { nested~marked~content~found~-~mcid~#1 }
-\msg_new:nnn {uftag} {mc-tag-missing}   { required~tag~missing~-~mcid~#1 }
-\msg_new:nnn {uftag} {mc-label-unknown} { label~#1~unknown~-~rerun }
-\msg_new:nnn {uftag} {mc-used-twice}    { mc~#1~has~been~already~used }
-\msg_new:nnn {uftag} {mc-not-open}      { there~is~no~mc~to~end~at~#1 }
+\msg_new:nnn { tag } {struct-no-objnum}      { objnum~missing~for~structure~#1 }
+\msg_new:nnn { tag } {struct-faulty-nesting} { there~is~no~open~structure~on~the~stack }
+\msg_new:nnn { tag } {struct-missing-tag}    { a~structure~must~have~a~tag! }
+\msg_new:nnn { tag } {struct-show-closing}   { closing~structure~#1~tagged~\prop_item:cn{g__tag_struct_#1_prop}{S} }
+\msg_new:nnn { tag } {struct-used-twice}     { structure~with~label~#1~has~already~been~used}
+\msg_new:nnn { tag } {struct-label-unknown}  { structure~with~label~#1~is~unknown~rerun}
 
-% structures
-\msg_new:nnn {uftag} {struct-no-objnum}      { objnum~missing~for~structure~#1 }
-\msg_new:nnn {uftag} {struct-faulty-nesting} { there~is~no~open~structure~on~the~stack }
-\msg_new:nnn {uftag} {struct-missing-tag}    { a~structure~must~have~a~tag! }
-\msg_new:nnn {uftag} {struct-show-closing}   { closing~structure~#1~tagged~\prop_item:cn{g__uftag_struct_#1_prop}{S} }
-\msg_new:nnn {uftag} {struct-used-twice}     { structure~with~label~#1~has~already~been~used}
-\msg_new:nnn {uftag} {struct-label-unknown}  { structure~with~label~#1~is~unknown~rerun}
+\msg_new:nnn { tag } {attr-unknown}  { attribute~#1~is~unknown}
 
-% attributes
-\msg_new:nnn {uftag} {attr-unknown}  { attribute~#1~is~unknown}
+\msg_new:nnn { tag } {role-missing}     { tag~#1~has~no~role~assigned  }
+\msg_new:nnn { tag } {role-unknown}     { role~#1~is~not~known  }
+\msg_new:nnn { tag } {role-unknown-tag} { tag~#1~is~not~known  }
+\msg_new:nnn { tag } {role-new-tag}     { adding~new~tag~#1~mapped~to~role~#2  }
 
+\msg_new:nnn { tag } {tree-mcid-index-wrong} {something~is~wrong~with~the~mcid}
 
-%Roles
-\msg_new:nnn {uftag} {role-missing}     { tag~#1~has~no~role~assigned  }
-\msg_new:nnn {uftag} {role-unknown}     { role~#1~is~not~known  }
-\msg_new:nnn {uftag} {role-unknown-tag} { tag~#1~is~not~known  }
-\msg_new:nnn {uftag} {role-new-tag}     { adding~new~tag~#1~mapped~to~role~#2  }
+\msg_new:nnn { tag } {obj-write-num} {write~obj~#1~to~pdf}
 
+\msg_new:nnn { tag } {sys-no-interwordspace} {engine~#1~doesn't~support~the~interword~spaces}
 
-% trees
-\msg_new:nnn {uftag} {tree-mcid-index-wrong} {something~is~wrong~with~the~mcid}
 
-% obj
-\msg_new:nnn {uftag} {obj-write-num} {write~obj~#1~to~pdf}
+\cs_new:Nn \__tag_check_structure_has_tag:n %#1 struct num %_protected?
+  {
+    \prop_if_in:cnF { g__tag_struct_#1_prop }
+      {S}
+      {
+        \msg_error:nn { tag } {struct-missing-tag}
+      }
+  }
 
+\cs_new:Nn \__tag_check_structure_tag:N            %_protected?
+  {
+    \prop_if_in:NoF \g__tag_role_tags_prop {#1}
+      {
+        \msg_warning:nnx { tag } {role-unknown-tag} {#1}
+      }
+  }
 
-%checks
-%structures
+\cs_new_protected:Nn \__tag_check_info_closing_struct:n %#1 struct num
+  {
+    \msg_info:nnn { tag } {struct-show-closing} {#1}
+  }
 
-\cs_new:Nn \__uftag_check_structure_has_tag:n %#1 struct num
- {
-  \prop_if_in:cnF { g__uftag_struct_#1_prop }
-   {S}
-   {
-    \msg_error:nn {uftag} {struct-missing-tag}
-   }
- }
+\cs_generate_variant:Nn \__tag_check_info_closing_struct:n {o,x}
 
-\cs_new:Nn \__uftag_check_structure_tag:N
- {
-  \prop_if_in:NoF \g__uftag_role_tags_prop {#1}
-   {
-    \msg_warning:nnx {uftag} {role-unknown-tag} {#1}
-   }
- }
+\cs_new_protected:Nn \__tag_check_no_open_struck:
+  {
+    \msg_error:nn { tag } {struct-faulty-nesting}
+  }
 
-\cs_new:Nn \__uftag_check_info_closing_struct:n %#1 struct num
- {
-  \msg_info:nnn {uftag} {struct-show-closing} {#1}
- }
+\cs_new_protected:Nn \__tag_check_struct_used:n %#1 label
+  {
+    \prop_get:cnNT
+      {g__tag_struct_\__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{unknown}_prop}
+      {P}
+      \l_tmpa_tl
+      {
+        \msg_warning:nnn { tag } {struct-used-twice} {#1}
+      }
+  }
 
-\cs_generate_variant:Nn \__uftag_check_info_closing_struct:n {o,x}
 
-\cs_new:Nn \__uftag_check_no_open_struck:
- {
-  \msg_error:nn {uftag} {struct-faulty-nesting}
- }
+\cs_new_protected:Nn \__tag_check_add_tag_role:nn %#1 tag, #2 role
+  {
+    \tl_if_empty:nTF {#2}
+      {
+        \msg_warning:nnn { tag } {role-missing} {#1}
+      }
+      {
+        \prop_get:NnNTF \g__tag_role_tags_prop {#2} \l_tmpa_tl
+          {
+            \msg_info:nnnn { tag } {role-new-tag} {#1} {#2}
+          }
+          {
+            \msg_warning:nnn { tag } {role-unknown} {#2}
+          }
+      }
+  }
 
-\cs_new:Nn \__uftag_check_struct_used:n %#1 label
- {
-  \prop_get:cnNT
-   {g__uftag_struct_\zref at extractdefault{tagpdfstruct-#1}{tagstruct}{unknown}_prop}
-   {P}
-   \l_tmpa_tl
-   { \msg_warning:nnn {uftag} {struct-used-twice} {#1} }
- }
+\cs_new_protected:Nn \__tag_check_mc_if_nested:
+  {
+    \__tag_mc_if_in:T
+      {
+        \msg_warning:nnx { tag } {mc-nested} { \__tag_get_mc_abs_cnt: }
+      }
+  }
 
-%roles
-
-\cs_new:Nn \__uftag_check_add_tag_role:nn %#1 tag, #2 role
- {
-  \tl_if_empty:nTF {#2}
+\cs_new_protected:Nn \__tag_check_mc_if_open:
   {
-   \msg_warning:nnn {uftag} {role-missing} {#1}
+    \__tag_mc_if_in:F
+      {
+        \msg_warning:nnx { tag } {mc-not-open} { \__tag_get_mc_abs_cnt: }
+      }
   }
+
+\cs_new:Nn \__tag_check_mc_tag:N %protected??
   {
-   \prop_get:NnNF \g__uftag_role_tags_prop {#2} \l_tmpa_tl
-    {
-     \msg_warning:nnn {uftag} {role-unknown} {#2}
-    }
-    {
-     \msg_info:nnnn {uftag} {role-new-tag} {#1} {#2}
-    }
+    \tl_if_empty:NT #1
+      {
+        \msg_error:nnx { tag } {mc-tag-missing} { \__tag_get_mc_abs_cnt: }
+      }
+   \prop_if_in:NoF \g__tag_role_tags_prop {#1}
+     {
+       \msg_warning:nnx { tag } {role-unknown-tag} {#1}
+     }
   }
- }
 
-%mc
-\cs_new:Nn \__uftag_check_mc_if_nested:
- {
-  \__uftag_mc_if_in:T
-   {
-    \msg_warning:nnx {uftag} {mc-nested} { \__uftag_get_mc_abs_cnt: }
-   }
- }
-
-\cs_new:Nn \__uftag_check_mc_if_open:
- {
-  \__uftag_mc_if_in:F
-   {
-    \msg_warning:nnx {uftag} {mc-not-open} { \__uftag_get_mc_abs_cnt: }
-   }
- }
-
-\cs_new:Nn \__uftag_check_mc_tag:N
- {
-  \tl_if_empty:NT #1
-   {
-    \msg_error:nnx {uftag} {mc-tag-missing} { \__uftag_get_mc_abs_cnt: }
-   }
-   \prop_if_in:NoF \g__uftag_role_tags_prop {#1}
-   {
-    \msg_warning:nnx {uftag} {role-unknown-tag} {#1}
-   }
- }
-
-\seq_new:N \g__uftag_check_mc_used_seq
-\cs_new:Nn \__uftag_check_mc_used:n
- {
-  \seq_if_in:NnTF \g__uftag_check_mc_used_seq {#1}
-   {
-    \msg_warning:nnn {uftag} {mc-used-twice} {#1}
-   }
-   {
-    \seq_gput_right:Nx \g__uftag_check_mc_used_seq {#1}
-   }
- }
-
-
-
-\cs_new:Nn \__uftag_check_show_MCID_by_page:
- {
-  \tl_set:Nx \l__uftag_tmpa_tl
+\seq_new:N \g__tag_check_mc_used_seq
+\cs_new_protected:Nn \__tag_check_mc_used:n
   {
-   \zref at extractdefault
-    {LastPage} {abspage} {-1}
+    \seq_if_in:NnTF \g__tag_check_mc_used_seq {#1}
+      {
+        \msg_warning:nnn { tag } {mc-used-twice} {#1}
+      }
+      {
+        \seq_gput_right:Nx \g__tag_check_mc_used_seq {#1}
+      }
   }
-  \int_step_inline:nnnn {1}{1}
+
+\cs_new_protected:Nn \__tag_check_show_MCID_by_page:
   {
-   \l__uftag_tmpa_tl
+    \tl_set:Nx \l__tag_tmpa_tl
+      {
+        \__tag_ref_value_lastpage:nn
+          {abspage}
+          {-1}
+      }
+    \int_step_inline:nnnn {1}{1}
+      {
+        \l__tag_tmpa_tl
+      }
+      {
+        \seq_clear:N \l_tmpa_seq
+        \int_step_inline:nnnn
+          {1}
+          {1}
+          {
+            \__tag_ref_value_lastpage:nn
+              {tagmcabs}
+              {-1}
+          }
+          {
+            \int_compare:nT
+              {
+                \__tag_ref_value:enn
+                  {mcid-####1}
+                  {tagabspage}
+                  {-1}
+                =
+                ##1
+             }
+             {
+               \seq_gput_right:Nx \l_tmpa_seq
+                 {
+                   Page##1-####1-
+                   \__tag_ref_value:enn
+                     {mcid-####1}
+                     {tagmcid}
+                     {-1}
+                 }
+             }
+          }
+          \seq_show:N \l_tmpa_seq
+      }
   }
+
+\cs_new:Nn \__tag_check_record_pdfobj_num:n %protected?
   {
-   \seq_clear:N \l_tmpa_seq
-   \int_step_inline:nnnn {1}{1}
-    {
-     \zref at extractdefault
-     {LastPage} {tagmcabs} {-1}
-    }
-    {
-     \int_compare:nT
-     {
-      \zref at extractdefault
-      {mcid-####1} {tagabspage} {-1}
-      = ##1
-     }
-     {
-      \seq_gput_right:Nx \l_tmpa_seq
+    \int_compare:nT { \l__tag_loglevel_int >= 3 }
       {
-       Page##1-####1-\zref at extractdefault
-       {mcid-####1} {tagmcid} {-1}
+        \msg_info:nnx { tag } {obj-write-num} {#1}
       }
-     }
-    }
-    \seq_show:N \l_tmpa_seq
   }
- }
 
-\cs_new:Nn \__uftag_check_record_pdfobj_num:n
- {
-  \int_compare:nT { \l__uftag_loglevel_int >= 3 }
-   {
-    \msg_info:nnx {uftag} {obj-write-num} {#1}
-   }
- }
-
-\endinput
+%% 
+%%
+%% End of file `tagpdf-checks-code.sty'.

Copied: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-deprecated.def (from rev 57871, trunk/Master/texmf-dist/tex/latex/tagpdf/tagpdf-deprecated.def)
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-deprecated.def	                        (rev 0)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-deprecated.def	2021-02-24 18:00:42 UTC (rev 57872)
@@ -0,0 +1,24 @@
+%%
+%% This is file `tagpdf-deprecated.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf.dtx  (with options: `deprecated')
+%% 
+%% Copyright (C) 2019 Ulrike Fischer
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    https://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: tagpdf.dtx
+%% 
+%%
+%% End of file `tagpdf-deprecated.def'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-luatex.def
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-luatex.def	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-luatex.def	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,19 +1,35 @@
-\ProvidesExplFile {tagpdf-luatex.def} {2019/07/02} {0.61}
+%%
+%% This is file `tagpdf-luatex.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf-backend.dtx  (with options: `luatex')
+%% 
+%% Copyright (C) 2019 Ulrike Fischer
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    https://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: tagpdf-backend.dtx
+\ProvidesExplFile {tagpdf-luatex.def} {2021/02/23} {0.80}
   {tagpdf~driver~for~luatex}
 
-%\newattribute \g__uftag_mc_type_attr     %the value represent the type
-%\newattribute \g__uftag_mc_cnt_attr      %will hold the \c at g__uftag_MCID_abs_int value
+\newattribute \l__tag_mc_type_attr     %the value represent the type
+\newattribute \l__tag_mc_cnt_attr      %will hold the \c at g__tag_MCID_abs_int value
 
-\newattribute \l__uftag_mc_type_attr     %the value represent the type
-\newattribute \l__uftag_mc_cnt_attr      %will hold the \c at g__uftag_MCID_abs_int value
+\newattribute \g__tag_interwordspace_attr
+\newattribute \g__tag_interwordfont_attr
 
-\newattribute \g__uftag_interwordspace_attr
-\newattribute \g__uftag_interwordfont_attr
-
-% The lua code
-% ensure that 10pt font has been loaded:
 {
- \fontencoding{TU}\fontfamily{lmr}\fontseries{m}\fontshape{n}\fontsize{10pt}{10pt}\selectfont
+  \fontencoding{TU}\fontfamily{lmr}\fontseries{m}\fontshape{n}\fontsize{10pt}{10pt}\selectfont
 }
 \directlua { tagpdf=require('tagpdf.lua') }
 
@@ -20,177 +36,66 @@
 %%%% driver (lualatex) commands
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-% these should be in expl3!!!
-\cs_new:Nn \__uftag_pdf_startlink:{ \pdfextension startlink }
-\cs_new:Nn \__uftag_pdf_endlink:  { \pdfextension endlink }
-\cs_new_protected:Nn \__uftag_pdf_lastlink: { \numexpr\pdffeedback lastlink\relax }
-\cs_new:Nn \__uftag_pdf_catalog:  { \pdfextension catalog }
 
-% needed for \str_set_convert:Nnon
-\tl_new:N   \g__uftag_inputencoding_tl
-\tl_gset:Nn \g__uftag_inputencoding_tl {}
+\cs_new:Nn \__tag_luatex_get_table_name:Nn
+  {
+    \tl_set_rescan:Nnn #1  { \char_set_catcode_ignore:N \\ } { #2 }
+  }
 
+\cs_new:Nn \__tag_prop_new:N
+  {
+    \prop_new:N #1
+    \__tag_luatex_get_table_name:Nn \l_tmpa_tl { #1 }
+    \directlua { ltx.__tag.tables.\l_tmpa_tl = {} }
+  }
 
-% literals
-\cs_new:Nn \__uftag_pdfliteral_page:n {\__uftag_tex_pdfextension:D literal~page {#1}}
-\cs_new:Nn \__uftag_pdfcatalog:n      {\__uftag_tex_pdfextension:D catalog {#1}}
+\cs_new:Nn \__tag_seq_new:N
+  {
+    \seq_new:N #1
+    \__tag_luatex_get_table_name:Nn \l_tmpa_tl { #1 }
+    \directlua { ltx.__tag.tables.\l_tmpa_tl = {} }
+  }
 
-%reserve an object num
-\cs_new:Nn \__uftag_pdfreserveobjnum:N
- {
-  % #1 = macro name to be populated with object number
-  \__uftag_tex_pdfextension:D~obj~reserveobjnum
-  \tl_set:Nx #1 { \__uftag_tex_pdffeedback:D lastobj }%
- }
+\cs_new:Nn \__tag_prop_gput:Nnn
+  {
+    \prop_gput:Nnn #1 { #2 } { #3 }
+    \__tag_luatex_get_table_name:Nn \l_tmpa_tl { #1 }
+    \directlua { ltx.__tag.tables.\l_tmpa_tl["#2"] = "#3" }
+  }
 
-% use an object num
-\cs_new:Nn \__uftag_pdfuseobjnum:Nn
- {
- % #1 = macro with object number to be populated
- % #2 = object contents, as valid PDF
- % should #2 be filtered through  \pdfstringdef  ???
-  \__uftag_tex_immediate:D \__uftag_tex_pdfextension:D~obj~useobjnum~#1~{ #2 }%
- }
+\cs_new:Nn \__tag_seq_gput_right:Nn
+  {
+    \seq_gput_right:Nn #1 { #2 }
+    \__tag_luatex_get_table_name:Nn \l_tmpa_tl { #1 }
+    \directlua { table.insert(ltx.__tag.tables.\l_tmpa_tl, "#2") }
+  }
 
-\cs_new:Nn \__uftag_pdfuseobjnum:nn
- {
- % #1 = a number
- % #2 = object contents, as valid PDF
- % should #2 be filtered through  \pdfstringdef  ???
-  \__uftag_tex_immediate:D \__uftag_tex_pdfextension:D~obj~useobjnum~#1~{ #2 }%
- }
 
-% obj num of the dictionary for a page:
-% the page count starts by 1
-% pages can referenced before they are actually created
-% no error if the page later doesn't exist
+\cs_new:Npn \__tag_seq_item:cn #1 #2
+  {
+    \directlua { tex.print(ltx.__tag.tables.#1[#2]) }
+  }
 
-\cs_new:Nn \__uftag_store_pdfpageref:Nn
- {
- % #1 = macro name to be populated with current page object number
- % #2 = number or counter identifying the required page
-  \tl_set:Nx #1 { \__uftag_tex_pdffeedback:D pageref~#2 }%
- }
+\cs_new:Npn \__tag_prop_item:cn #1 #2
+  {
+    \directlua { tex.print(ltx.__tag.tables.#1["#2"]) }
+  }
 
-% a global version of the command
-\cs_new:Nn \__uftag_gstore_pdfpageref:Nn
- {
-  \tl_gset:Nx #1 { \__uftag_tex_pdffeedback:D pageref~#2 }%
- }
+\cs_new:Nn \__tag_seq_show:N
+  {
+    \seq_show:N #1
+    \__tag_luatex_get_table_name:Nn \l_tmpa_tl { #1 }
+    \directlua { ltx.__tag.trace.log ("lua~sequence~array~\l_tmpa_tl",1) }
+    \directlua { ltx.__tag.trace.show_seq (ltx.__tag.tables.\l_tmpa_tl) }
+  }
 
-\cs_new:Nn \__uftag_pdfobj:Nn
- {
- % #1 = macro name to refer to this object
- % #2 = object contents, as valid PDF
- % should #2 be filtered through  \pdfstringdef  ???
-  \__uftag_tex_immediate:D \__uftag_tex_pdfextension:D~obj~{ #2 }
-  \tl_set:Nx #1 { \__uftag_tex_pdffeedback:D~lastobj }%
+\cs_new:Nn \__tag_prop_show:N
+  {
+    \prop_show:N #1
+    \__tag_luatex_get_table_name:Nn \l_tmpa_tl { #1 }
+    \directlua {ltx.__tag.trace.log  ("lua~property~table~\l_tmpa_tl",1) }
+    \directlua {ltx.__tag.trace.show_prop (ltx.__tag.tables.\l_tmpa_tl) }
  }
-
-%  pdfpage**s**attr: for all pages
-%% is global needed? Yes. Without it the setting is lost if issued in a group
-%
-\cs_new:Nn \__uftag_gset_pdfpagesattr:n
- {
-  \__uftag_tex_global:D \__uftag_tex_pdfvariable:D~pagesattr { #1 }
- }
-
-\cs_new:Nn \__uftag_gadd_pdfpagesattr:n
- {
-  \exp_args:No \__uftag_gset_pdfpagesattr:n { \__uftag_tex_the:D \__uftag_tex_pdfvariable:D~pagesattr #1}
- }
-
-% pdfpageattr for one page
-% do we need an immediate version??
-\cs_new:Nn \__uftag_gset_pdfpageattr:n
- {
-  \__uftag_tex_global:D \__uftag_tex_pdfvariable:D~pageattr  { #1 }
- }
-
-\cs_new:Nn \__uftag_gadd_pdfpageattr:n
- {
-  \exp_args:No \__uftag_gset_pdfpageattr:n { \__uftag_tex_the:D \__uftag_tex_pdfvariable:D~pageattr #1}
- }
-
-\cs_new:Nn \__uftag_get_pdfpageattr:N
- {
-  \tl_set:No #1 { \__uftag_tex_the:D \__uftag_tex_pdfvariable:D~pageattr }
- }
-
-
-% I probably want also lua tables
-% I put them in the uftag.tables namespaces
-% The tables will be named like the variables but without backslash
-% To access such a table with a dynamical name create a string and then use
-% uftag.tables[string]
-% Old code, I'm not quite sure if this was a good idea. Now I have mix of table in
-% utftag.tables and uftag.mc/struct. And a lot is probably not needed.
-
-\cs_new:Nn \__uftag_luatex_get_table_name:Nn
- {
-  \tl_set_rescan:Nnn #1  { \char_set_catcode_ignore:N \\ } { #2 }
- }
-
-
-\cs_new:Nn \__uftag_prop_new:N
- {
-  \prop_new:N #1
-  \__uftag_luatex_get_table_name:Nn \l_tmpa_tl { #1 }
-  \directlua { uftag.tables.\l_tmpa_tl = {} }
- }
-
-
-\cs_new:Nn \__uftag_seq_new:N
- {
-  \seq_new:N #1
-  \__uftag_luatex_get_table_name:Nn \l_tmpa_tl { #1 }
-  \directlua { uftag.tables.\l_tmpa_tl = {} }
- }
-
-
-\cs_new:Nn \__uftag_prop_gput:Nnn
- {
-  \prop_gput:Nnn #1 { #2 } { #3 }
-  \__uftag_luatex_get_table_name:Nn \l_tmpa_tl { #1 }
-  \directlua { uftag.tables.\l_tmpa_tl["#2"] = "#3" }
- }
-
-
-\cs_new:Nn \__uftag_seq_gput_right:Nn
- {
-  \seq_gput_right:Nn #1 { #2 }
-  \__uftag_luatex_get_table_name:Nn \l_tmpa_tl { #1 }
-  \directlua { table.insert(uftag.tables.\l_tmpa_tl, "#2") }
- }
-
-%Hm not quite sure about the naming
-
-\cs_new:Npn \__uftag_seq_item:cn #1 #2
- {
-  \directlua { tex.print(uftag.tables.#1[#2]) }
- }
-
-\cs_new:Npn \__uftag_prop_item:cn #1 #2
- {
-  \directlua { tex.print(uftag.tables.#1["#2"]) }
- }
-
-%for debugging commands that show both the seq/prop and the lua tables
-\cs_new:Nn \__uftag_seq_show:N
- {
-   \seq_show:N #1
-   \__uftag_luatex_get_table_name:Nn \l_tmpa_tl { #1 }
-   \directlua { uftag.trace.log ("lua~sequence~array~\l_tmpa_tl",1) }
-   \directlua { uftag.trace.show_seq (uftag.tables.\l_tmpa_tl) }
- }
-
-\cs_new:Nn \__uftag_prop_show:N
- {
-   \prop_show:N #1
-   \__uftag_luatex_get_table_name:Nn \l_tmpa_tl { #1 }
-   \directlua {uftag.trace.log  ("lua~property~table~\l_tmpa_tl",1) }
-   \directlua {uftag.trace.show_prop (uftag.tables.\l_tmpa_tl) }
- }
-
-
-\endinput
+%% 
+%%
+%% End of file `tagpdf-luatex.def'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-generic.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-generic.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-generic.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,285 +1,287 @@
-\ProvidesExplPackage {tagpdf-mc-code-generic} {2019/07/02} {0.61}
+%%
+%% This is file `tagpdf-mc-code-generic.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf-mc.dtx  (with options: `generic')
+%% 
+%% Copyright (C) 2019 Ulrike Fischer
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    https://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: tagpdf-mc.dtx
+\ProvidesExplPackage {tagpdf-mc-code-generic} {2021/02/23} {0.80}
  {part of tagpdf - code related to marking chunks - generic mode}
 
-% for the label system
-% tagmcid is the id which should be also in the pdf
-% it will be (hopefully) reset by page
 
-\int_new:N \g__uftag_MCID_tmp_bypage_int
-\zref at newprop {tagmcid}   [0] { \int_use:N \g__uftag_MCID_tmp_bypage_int }
-\zref at addprop {uftagzrl}  {tagmcid}
+\__tag_prop_new:N \g__tag_MCID_byabspage_prop
 
-% will hold the current maximum on a page
-% it will contain key-value of type "abspagenum=max mcid on this page"
-\__uftag_prop_new:N \g__uftag_MCID_byabspage_prop
+\bool_new:N \g__tag_in_mc_bool
 
-%to test nesting mc:
-\bool_new:N \g__uftag_in_mc_bool
+\prg_new_conditional:Nnn \__tag_mc_if_in: {p,T,F,TF}
+  {
+    \bool_if:NTF \g__tag_in_mc_bool
+      { \prg_return_true:  }
+      { \prg_return_false: }
+  }
 
-\prg_new_conditional:Nnn \__uftag_mc_if_in: {p,T,F,TF}
- {
-  \bool_if:NTF \g__uftag_in_mc_bool
-   { \prg_return_true:  }
-   { \prg_return_false: }
- }
+\prg_new_eq_conditional:NNn \tag_mc_if_in: \__tag_mc_if_in: {p,T,F,TF}
 
-\prg_new_eq_conditional:NNn \uftag_mc_if_in: \__uftag_mc_if_in: {p,T,F,TF}
+\prg_new_eq_conditional:NNn \uftag_mc_if_in: \__tag_mc_if_in: {p,T,F,TF}
 
+\cs_new_protected:Nn \__tag_mc_bmc:n
+  {
+    \pdf_bmc:n {#1}
+  }
 
-% this are the low level mc command.
-% they insert literals and so a are specific to generic mode
-% checking if the type is defined will done somewhere else
-% #1 is the type/tag
-% change 04.08.2018: I don't try to escape the name, but assume that it is valid.
-% Checks/conversions should perhaps be done on a higher level
-\cs_new:Nn \__uftag_mc_bmc:n
- {
-  \__uftag_pdfliteral_page:n
-   {
-    /#1\c_space_tl BMC
-   }
- }
+\cs_new_protected:Nn \__tag_mc_emc:
+  {
+    \pdf_emc:
+    %\__tag_pdfliteral_page:n
+  }
 
-\cs_new:Nn \__uftag_mc_emc:
- {
-  \__uftag_pdfliteral_page:n
-   {
-    EMC
-   }
- }
+\cs_new_protected:Nn \__tag_mc_bdc:nn
+  {
+    \pdf_bdc:nn { #1 } { #2 }
+  }
 
-% #1 tag, #2 properties
-% change 04.08.2018: I don't escape the name. Also the dictionary content
-% must imho be done at a higher level
-\cs_new:Nn \__uftag_mc_bdc:nn
- {
-  \__uftag_pdfliteral_page:n
-   {
-    /#1\c_space_tl<<#2>>~BDC
-   }
+\cs_generate_variant:Nn \__tag_mc_bdc:nn {nx}
+
+\tl_new:N \l__tag_mc_ref_abspage_tl %will store the abspage value of label
+\tl_new:N \l__tag_mc_tmp_tl
+
+\cs_new:Nn \__tag_mc_bdc_mcid:nn
+  {
+    \int_gincr:N \c at g__tag_MCID_abs_int
+    \tl_set:Nx \l__tag_mc_ref_abspage_tl
+      {
+        \__tag_ref_value:enn %3 args
+          {
+            mcid-\int_use:N \c at g__tag_MCID_abs_int
+          }
+          { tagabspage }
+          {-1}
+      }
+    \prop_get:NoNTF
+      \g__tag_MCID_byabspage_prop
+      {
+        \l__tag_mc_ref_abspage_tl
+      }
+      \l__tag_mc_tmp_tl
+      {
+        %key already present, use value for MCID and add 1 for the next
+        \int_gset:Nn \g__tag_MCID_tmp_bypage_int { \l__tag_mc_tmp_tl }
+        \__tag_prop_gput:Nxx
+          \g__tag_MCID_byabspage_prop
+          { \l__tag_mc_ref_abspage_tl }
+          { \int_eval:n {\l__tag_mc_tmp_tl +1} }
+      }
+      {
+        %key not present, set MCID to 0 and insert 1
+        \int_gzero:N \g__tag_MCID_tmp_bypage_int
+        \__tag_prop_gput:Nxx
+          \g__tag_MCID_byabspage_prop
+          { \l__tag_mc_ref_abspage_tl }
+          {1}
+      }
+    \__tag_ref_label:en
+      {
+        mcid-\int_use:N \c at g__tag_MCID_abs_int
+      }
+      { mc }
+   %\exp_args:Nnx
+     \__tag_mc_bdc:nx
+       {#1}
+       { /MCID~\int_eval:n { \g__tag_MCID_tmp_bypage_int }~ \exp_not:n { #2 } }
  }
 
+\cs_new:Nn \__tag_mc_bdc_mcid:n
+  {
+    \__tag_mc_bdc_mcid:nn {#1} {}
+  }
 
-% bdc with /MCID + more properties
-% we need a ref-label system to ensure that the cnt restarts at 0 on a new page
+\cs_new:Nn  \__tag_mc_bmc_artifact:
+  {
+    \__tag_mc_bmc:n {Artifact}
+  }
 
-\tl_new:N \l__uftag_mc_ref_abspage_tl %will store the abspage value of label
-\tl_new:N \l__uftag_mc_tmp_tl
+\cs_new:Nn \__tag_mc_bmc_artifact:n
+  {
+    \__tag_mc_bdc:nn {Artifact}{/Type/#1}
+  }
 
-\cs_new:Nn \__uftag_mc_bdc_mcid:nn
- {
-  \int_gincr:N \c at g__uftag_MCID_abs_int
-  \tl_set:Nx \l__uftag_mc_ref_abspage_tl
-   {
-    \zref at extractdefault %3 args
-    {
-     mcid-\int_use:N \c at g__uftag_MCID_abs_int
-    }
-    {tagabspage}
-    {-1}
-   }
-  \prop_get:NoNTF
-   \g__uftag_MCID_byabspage_prop
-   {
-    \l__uftag_mc_ref_abspage_tl
-   }
-   \l__uftag_mc_tmp_tl
-   {
-    %key already present, use value for MCID and add 1 for the next
-    \int_gset:Nn \g__uftag_MCID_tmp_bypage_int { \l__uftag_mc_tmp_tl }
-    \__uftag_prop_gput:Nxx
-     \g__uftag_MCID_byabspage_prop
-     { \l__uftag_mc_ref_abspage_tl }
-     { \int_eval:n {\l__uftag_mc_tmp_tl +1} }
-   }
-   {
-    %key not present, set MCID to 0 and insert 1
-    \int_gzero:N \g__uftag_MCID_tmp_bypage_int
-    \__uftag_prop_gput:Nxx
-     \g__uftag_MCID_byabspage_prop
-     { \l__uftag_mc_ref_abspage_tl }
-     {1}
-   }
-  \zref at labelbylist
-   {
-    mcid-\int_use:N \c at g__uftag_MCID_abs_int
-   }
-   {uftagzrl}
-  \__uftag_mc_bdc:nn
-   {#1}
-   { /MCID~\int_eval:n { \g__uftag_MCID_tmp_bypage_int }~#2 }
- }
 
-% only /MCID
-\cs_new:Nn \__uftag_mc_bdc_mcid:n
- {
-  \__uftag_mc_bdc_mcid:nn {#1} {}
- }
 
-%artifact without type
-\cs_new:Nn  \__uftag_mc_bmc_artifact:
- {
-  \__uftag_mc_bmc:n {Artifact}
- }
+\tl_new:N \l__tag_mc_key_tag_tl
+\tl_new:N \g__tag_mc_key_tag_tl %for "outside" queries
+\tl_new:N \l__tag_mc_key_properties_tl
 
-%artifact with a type:
-\cs_new:Nn \__uftag_mc_bmc_artifact:n
- {
-  \__uftag_mc_bdc:nn {Artifact}{/Type\c_space_tl/#1}
- }
+\keys_define:nn { __tag / mc }
+  {
+    tag .code:n = % the name (H,P,Spa) etc
+      {
+         %%????????? \pdfescapename??
+        \tl_set:Nx   \l__tag_mc_key_tag_tl { #1 }
+        \tl_gset:Nx  \g__tag_mc_key_tag_tl { #1 }
+      },
+    raw  .code:n =
+      {
+        \tl_put_right:Nx \l__tag_mc_key_properties_tl { #1 }
+      },
+    alttext .code:n = % Alt property
+      {
+        \str_set_convert:Nnon
+          \l__tag_tmpa_str
+          { #1 }
+          { default }
+          { utf16/hex }
+        \tl_put_right:Nn \l__tag_mc_key_properties_tl { /Alt~< }
+        \tl_put_right:No \l__tag_mc_key_properties_tl { \l__tag_tmpa_str>~ }
+      },
+    alttext-o .code:n      = % Alt property
+      {
+        \str_set_convert:Noon
+          \l__tag_tmpa_str
+          { #1 }
+          { default }
+          { utf16/hex }
+        \tl_put_right:Nn \l__tag_mc_key_properties_tl { /Alt~< }
+        \tl_put_right:No \l__tag_mc_key_properties_tl { \l__tag_tmpa_str>~ }
+      },
+    actualtext .code:n      = % ActualText property
+      {
+        \str_set_convert:Nnon
+          \l__tag_tmpa_str
+          { #1 }
+          { default }
+          { utf16/hex }
+        \tl_put_right:Nn \l__tag_mc_key_properties_tl { /ActualText~< }
+        \tl_put_right:No \l__tag_mc_key_properties_tl { \l__tag_tmpa_str>~ }
+      },
+    actualtext-o .code:n      = % ActualText property
+      {
+        \str_set_convert:Noon
+          \l__tag_tmpa_str
+          { #1 }
+          { default }
+          { utf16/hex }
+        \tl_put_right:Nn \l__tag_mc_key_properties_tl { /ActualText~< }
+        \tl_put_right:No \l__tag_mc_key_properties_tl { \l__tag_tmpa_str>~ }
+      },
+    label .tl_set:N        = \l__tag_mc_key_label_tl,
+    artifact .code:n       =
+      {
+        \exp_args:Nnx
+          \keys_set:nn
+            { __tag / mc }
+            { artifact-bool, artifact-type=#1 }
+      },
+    artifact .default:n    = {notype}
+  }
 
-% perhaps later: more properties for artifacts
+\cs_new:Nn \__tag_mc_handle_artifact:N %#1 contains the artifact type
+  {
+    \tl_if_empty:NTF #1
+      { \__tag_mc_bmc_artifact: }
+      { \exp_args:No\__tag_mc_bmc_artifact:n {#1} }
+  }
 
+\cs_new:Nn \__tag_mc_handle_mcid:nn %#1 tag, #2 properties
+  {
+    \__tag_mc_bdc_mcid:nn {#1} {#2}
+  }
 
-% keyval definitions for the user commands:
+\cs_generate_variant:Nn \__tag_mc_handle_mcid:nn {VV}
 
-\tl_new:N \l__uftag_mc_key_tag_tl
-\tl_new:N \g__uftag_mc_key_tag_tl %for "outside" queries
-\tl_new:N \l__uftag_mc_key_properties_tl
-%Attention! definitions are different in luamode.
-% tag and raw are expanded as \directlua in lua does it too.
-\keys_define:nn { uftag / mc }
- {
-  tag .code:n = % the name (H,P,Span etc
-   {
-    %%????????? \pdfescapename??
-    \tl_set:Nx  \l__uftag_mc_key_tag_tl { #1 }
-    \tl_gset:Nx  \g__uftag_mc_key_tag_tl { #1 }
-   },
-  raw  .code:n =
-   {
-    \tl_put_right:Nx \l__uftag_mc_key_properties_tl { #1 }
-   }
-    ,
-  alttext .code:n      = % Alt property
-   {
-    \str_set_convert:Nnon
-     \l__uftag_tmpa_str
-     { #1 }
-     { \g__uftag_inputencoding_tl }
-     { utf16/hex }
-    \tl_put_right:Nn \l__uftag_mc_key_properties_tl { /Alt~< }
-    \tl_put_right:No \l__uftag_mc_key_properties_tl { \l__uftag_tmpa_str>~ }
-   },
-   alttext-o .code:n      = % Alt property
-   {
-    \str_set_convert:Noon
-     \l__uftag_tmpa_str
-     { #1 }
-     { \g__uftag_inputencoding_tl }
-     { utf16/hex }
-    \tl_put_right:Nn \l__uftag_mc_key_properties_tl { /Alt~< }
-    \tl_put_right:No \l__uftag_mc_key_properties_tl { \l__uftag_tmpa_str>~ }
-   },
-   actualtext .code:n      = % ActualText property
-   {
-    \str_set_convert:Nnon
-     \l__uftag_tmpa_str
-     { #1 }
-     { \g__uftag_inputencoding_tl }
-     { utf16/hex }
-    \tl_put_right:Nn \l__uftag_mc_key_properties_tl { /ActualText~< }
-    \tl_put_right:No \l__uftag_mc_key_properties_tl { \l__uftag_tmpa_str>~ }
-   },
-   actualtext-o .code:n      = % ActualText property
-   {
-    \str_set_convert:Noon
-     \l__uftag_tmpa_str
-     { #1 }
-     { \g__uftag_inputencoding_tl }
-     { utf16/hex }
-    \tl_put_right:Nn \l__uftag_mc_key_properties_tl { /ActualText~< }
-    \tl_put_right:No \l__uftag_mc_key_properties_tl { \l__uftag_tmpa_str>~ }
-   },
-  label .tl_set:N        = \l__uftag_mc_key_label_tl,
-  artifact .code:n       = { \exp_args:Nnx \keys_set:nn { uftag / mc } { artifact-bool, artifact-type=#1 } },
-  artifact .default:n    = {notype}
- }
+\cs_new:Nn \__tag_mc_handle_stash:n %1 mcidnum
+  {
+    \__tag_check_mc_used:n {#1}
+    \__tag_struct_kid_mc_gput_right:nn
+      { \g__tag_struct_stack_current_tl }
+      {#1}
+   \prop_gput:Nxx \g__tag_mc_parenttree_prop
+     {#1}
+     { \g__tag_struct_stack_current_tl }
+  }
 
-\cs_new:Nn \__uftag_mc_handle_artifact:N %#1 contains the artifact type
- {
-  \tl_if_empty:NTF #1
-   { \__uftag_mc_bmc_artifact: }
-   { \exp_args:No\__uftag_mc_bmc_artifact:n {#1} }
- }
+\cs_new_protected:Nn \tag_mc_begin:n
+  {
+    \group_begin: %hm
+    \__tag_check_mc_if_nested:
+    \bool_gset_true:N \g__tag_in_mc_bool
+    \keys_set:nn { __tag / mc } {#1}
+    \bool_if:NTF \l__tag_mc_artifact_bool
+      { %handle artifact
+        \__tag_mc_handle_artifact:N \l__tag_mc_artifact_type_tl
+      }
+      { %handle mcid type
+        \__tag_check_mc_tag:N  \l__tag_mc_key_tag_tl
+        \__tag_mc_handle_mcid:VV
+           \l__tag_mc_key_tag_tl
+           \l__tag_mc_key_properties_tl
+        \tl_if_empty:NF {\l__tag_mc_key_label_tl}
+          {
+            \__tag_mc_handle_mc_label:n { \l__tag_mc_key_label_tl }
+          }
+        \bool_if:NF \l__tag_mc_key_stash_bool
+          {
+            \__tag_mc_handle_stash:n { \int_use:N \c at g__tag_MCID_abs_int }
+          }
+      }
+    \group_end:
+  }
 
-\cs_new:Nn \__uftag_mc_handle_mcid:nn %#1 tag, #2 properties
- {
-  \__uftag_mc_bdc_mcid:nn {#1} {#2}
- }
+\cs_set_eq:NN \uftag_mc_begin:n \tag_mc_begin:n
 
+\cs_new_protected:Nn \tag_mc_end:
+  {
+    \__tag_check_mc_if_open:
+    \bool_gset_false:N \g__tag_in_mc_bool
+    \tl_gset:Nn  \g__tag_mc_key_tag_tl { }
+    \__tag_mc_emc:
+  }
 
-% puts the absolute number of an mcid in the current structure
-\cs_new:Nn \__uftag_mc_handle_stash:n %1 mcidnum
- {
-  \__uftag_check_mc_used:n {#1}
-  \__uftag_struct_kid_mc_gput_right:nn
-   { \g__uftag_struct_stack_current_tl }
-   {#1}
-  \prop_gput:Nxx \g__uftag_mc_parenttree_prop
-   {#1}
-   { \g__uftag_struct_stack_current_tl }
- }
+\cs_set_eq:NN \uftag_mc_end: \tag_mc_end:
 
-\cs_new_protected:Nn \uftag_mc_begin:n
- {
-  \group_begin:
-   \__uftag_check_mc_if_nested:
-   \bool_gset_true:N \g__uftag_in_mc_bool
-   \keys_set:nn { uftag / mc } {#1}
-   \bool_if:NTF \l__uftag_mc_artifact_bool
-    { %handle artifact
-     \__uftag_mc_handle_artifact:N \l__uftag_mc_artifact_type_tl
-    }
-    { %handle mcid type
-     \__uftag_check_mc_tag:N  \l__uftag_mc_key_tag_tl
-     \__uftag_mc_handle_mcid:nn { \l__uftag_mc_key_tag_tl }{\l__uftag_mc_key_properties_tl}
-     \tl_if_empty:NF {\l__uftag_mc_key_label_tl}
+\cs_new_protected:Nn \tag_mc_use:n %#1: label name
+  {
+    \tl_set:Nx  \l_tmpa_tl { \__tag_ref_value:enn{tagpdf-#1}{tagmcabs}{} }
+    \tl_if_empty:NTF\l_tmpa_tl
       {
-       \__uftag_mc_handle_mc_label:n { \l__uftag_mc_key_label_tl }
+        \msg_warning:nnn {tag} {mc-label-unknown} {#1}
       }
-     \bool_if:NF \l__uftag_mc_key_stash_bool
-     {
-      \__uftag_mc_handle_stash:n { \int_use:N \c at g__uftag_MCID_abs_int }
-     }
-    }
-  \group_end:
- }
+      {
+        \prop_gput:Nxx
+          \g__tag_mc_parenttree_prop
+          {
+            \__tag_ref_value:enn {tagpdf-#1} {tagmcabs} {}
+          }
+          {
+            \g__tag_struct_stack_current_tl
+          }
+        \__tag_struct_kid_mc_gput_right:nn
+          {
+            \g__tag_struct_stack_current_tl
+          }
+          {
+            \__tag_ref_value:enn {tagpdf-#1} {tagmcabs} {}
+          }
+       }
+  }
 
-\cs_new_protected:Nn \uftag_mc_end:
- {
-  \__uftag_check_mc_if_open:
-  \bool_gset_false:N \g__uftag_in_mc_bool
-  \tl_gset:Nn  \g__uftag_mc_key_tag_tl { }
-  \__uftag_mc_emc:
- }
+\cs_set_eq:NN \uftag_mc_use:n \tag_mc_use:n
 
-\cs_new_protected:Nn \uftag_mc_use:n %#1: label name
- {
-  \tl_set:Nx  \l_tmpa_tl { \zref at extractdefault{tagpdf-#1}{tagmcabs}{} }
-  \tl_if_empty:NTF\l_tmpa_tl
-   {
-    \msg_warning:nnn {uftag} {mc-label-unknown} {#1}
-   }
-   {
-    \prop_gput:Nxx
-     \g__uftag_mc_parenttree_prop
-     {
-      \zref at extractdefault {tagpdf-#1} {tagmcabs} {}
-     }
-     {
-      \g__uftag_struct_stack_current_tl
-     }
-    \__uftag_struct_kid_mc_gput_right:nn
-     {
-      \g__uftag_struct_stack_current_tl
-     }
-     {
-      \zref at extractdefault {tagpdf-#1} {tagmcabs} {}
-     }
-   }
- }
+\cs_new:Nn \__tag_get_data_mc_tag: { \g__tag_mc_key_tag_tl }
 
-\cs_new:Nn \__uftag_get_data_mc_tag: { \g__uftag_mc_key_tag_tl }
-
-\endinput
+%% 
+%%
+%% End of file `tagpdf-mc-code-generic.sty'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-lua.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-lua.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-lua.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,280 +1,327 @@
-\ProvidesExplPackage {tagpdf-mc-code-lua} {2019/07/02} {0.61}
+%%
+%% This is file `tagpdf-mc-code-lua.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf-mc.dtx  (with options: `luamode')
+%% 
+%% Copyright (C) 2019 Ulrike Fischer
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    https://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: tagpdf-mc.dtx
+\ProvidesExplPackage {tagpdf-mc-code-lua} {2021/02/23} {0.80}
   {tagpdf - mc code only for the luamode }
 
-% the two attibutes are defined in the driver file.
-% it also load the lua (as it can also contain functions needed by generic mode.
-% (new) attributes for mc are local:
-% \newattribute \l__uftag_mc_type_attr     %the value represent the type
-% \newattribute \l__uftag_mc_cnt_attr      %will hold the \c at g__uftag_MCID_abs_int value
 
 
-% An attribute for the current structure probably doesn't make sense as mc chunks can be used later.
-% \newattribute \g__uftag_struct_type_attr %represent the current structure type. Not sure if needed
-% \newattribute \g__uftag_struct_cnt_attr  %will hold \c at g__uftag_struct_abs_int a cnt
 
-% handling attribute needs a different system to number the page wise mcid's:
-% a tagmcbegin ... tagmcend pair no longer surrounds exactly one mc chunk: it can be split
-% at page breaks. We know the included mcid(s) only after the ship out. So for the struct-> mcid mapping we
-% need to record struct -> mc-cnt (in \g__uftag_mc_parenttree_prop and/or a lua table
-% and at shipout mc-cnt-> {mcid, mcid, ...} (in a table?)
-% and when building the trees connect both
 
-% key definitions are overwritten for luatex to store that data in tables
-% the data for the mc are in uftag.mc[absnum]
-% the fields of the table are
-% tag : the type (a string)
-% raw : more properties (string)
-% label: a string. Do we need a way to retrieve the num from the label from lua??
-% artifact: the presence indicates an artifact, the value (string) is the type.
-% kids: a array of tables {1={kid=num2,page=pagenum1}, 2={kid=num2,page=pagenum2},...},
-% this describes the chunks the mc has been split to by the traversing code
-% parent: the number of the structure it is in. Needed to build the parent tree.
+\hook_gput_code:nnn{begindocument}{tagpdf/mc}
+  {
+    \bool_if:NT\g__tag_active_mc_bool
+      {
+        \directlua
+          {
+            if~luatexbase.callbacktypes.pre_shipout_filter~then~
+              luatexbase.add_to_callback("pre_shipout_filter", function(TAGBOX)~
+              ltx.__tag.func.mark_shipout(TAGBOX)~return~true~
+              end, "tagpdf")~
+            end
+          }
+       \directlua
+         {
+           if~luatexbase.callbacktypes.pre_shipout_filter~then~
+           token.get_next()~
+           end
+         }\@secondoftwo\@gobble
+           {
+             \hook_gput_code:nnn{shipout/before}{tagpdf/lua}
+               {
+                 \directlua
+                   { ltx.__tag.func.mark_shipout (tex.box["ShipoutBox"]) }
+               }
+           }
+      }
+  }
 
-% The main function which wanders through the shipout box to inject the literals.
-\AtBeginDocument
- {
-  \bool_if:NT\g_uftag_active_mc_bool
-   {
-    \AtBeginShipout
-     {
-      \directlua{uftag.func.mark_shipout ()}
-     }
-   }
- }
+\prg_new_conditional:Nnn \__tag_mc_if_in: {p,T,F,TF}
+  {
+    \int_compare:nNnTF { -2147483647 }={ \l__tag_mc_type_attr }
+      { \prg_return_false:  }
+      { \prg_return_true: }
+  }
 
-\prg_new_conditional:Nnn \__uftag_mc_if_in: {p,T,F,TF}
- {
-  \int_compare:nNnTF {-2147483647}={\l__uftag_mc_type_attr}
-   { \prg_return_true:  }
-   { \prg_return_false: }
- }
+\prg_new_eq_conditional:NNn \tag_mc_if_in: \__tag_mc_if_in: {p,T,F,TF}
 
-\prg_new_eq_conditional:NNn \uftag_mc_if_in: \__uftag_mc_if_in: {p,T,F,TF}
+\prg_new_eq_conditional:NNn \uftag_mc_if_in: \__tag_mc_if_in: {p,T,F,TF}
 
-% the keys
-\tl_new:N \l__uftag_mc_key_tag_tl
-\tl_new:N \l__uftag_mc_key_label_tl
-\tl_new:N \l__uftag_mc_key_properties_tl
+\tl_new:N \l__tag_mc_key_tag_tl
+\tl_new:N \l__tag_mc_key_label_tl
+\tl_new:N \l__tag_mc_key_properties_tl
 
-\keys_define:nn { uftag / mc }
- {
-  tag .code:n = %
-   {%%????????? \pdfescapename??
-    \tl_set:Nx  \l__uftag_mc_key_tag_tl { #1 }
-    \directlua
-     {
-      uftag.func.store_mc_data(\__uftag_get_mc_abs_cnt:,"tag","#1")
-     }
-   },
-  raw .code:n =
-   {
-    \tl_put_right:Nx \l__uftag_mc_key_properties_tl { #1 }
-    \directlua
-     {
-      uftag.func.store_mc_data(\__uftag_get_mc_abs_cnt:,"raw","#1")
-     }
-   },
-  alttext .code:n      = % Alt property
-   {
-    \str_set_convert:Nnon
-     \l__uftag_tmpa_str
-     { #1 }
-     { \g__uftag_inputencoding_tl }
-     { utf16/hex }
-    \tl_put_right:Nn \l__uftag_mc_key_properties_tl { /Alt~< }
-    \tl_put_right:No \l__uftag_mc_key_properties_tl { \l__uftag_tmpa_str>~ }
-    \directlua
-     {
-      uftag.func.store_mc_data(\__uftag_get_mc_abs_cnt:,"alt","/Alt~<\str_use:N \l__uftag_tmpa_str>")
-     }
-   },
-  alttext-o .code:n      = % Alt property
-   {
-    \str_set_convert:Noon
-     \l__uftag_tmpa_str
-     { #1 }
-     { \g__uftag_inputencoding_tl }
-     { utf16/hex }
-    \tl_put_right:Nn \l__uftag_mc_key_properties_tl { /Alt~< }
-    \tl_put_right:No \l__uftag_mc_key_properties_tl { \l__uftag_tmpa_str>~ }
-    \directlua
-     {
-      uftag.func.store_mc_data(\__uftag_get_mc_abs_cnt:,"alt","/Alt~<\str_use:N \l__uftag_tmpa_str>")
-     }
-   },
-  actualtext .code:n      = % Alt property
-   {
-    \str_set_convert:Nnon
-     \l__uftag_tmpa_str
-     { #1 }
-     { \g__uftag_inputencoding_tl }
-     { utf16/hex }
-    \tl_put_right:Nn \l__uftag_mc_key_properties_tl { /Alt~< }
-    \tl_put_right:No \l__uftag_mc_key_properties_tl { \l__uftag_tmpa_str>~ }
-    \directlua
-     {
-      uftag.func.store_mc_data(\__uftag_get_mc_abs_cnt:,"actualtext","/ActualText~<\str_use:N \l__uftag_tmpa_str>")
-     }
-   },
-  actualtext-o .code:n      = % Alt property
-   {
-    \str_set_convert:Noon
-     \l__uftag_tmpa_str
-     { #1 }
-     { \g__uftag_inputencoding_tl }
-     { utf16/hex }
-    \tl_put_right:Nn \l__uftag_mc_key_properties_tl { /Alt~< }
-    \tl_put_right:No \l__uftag_mc_key_properties_tl { \l__uftag_tmpa_str>~ }
-    \directlua
-     {
-      uftag.func.store_mc_data(\__uftag_get_mc_abs_cnt:,"actualtext","/ActualText~<\str_use:N \l__uftag_tmpa_str>")
-     }
-   },
-  label .code:n =
-   {
-    \tl_set:Nn\l__uftag_mc_key_label_tl { #1 }
-    \directlua {uftag.func.store_mc_data(\__uftag_get_mc_abs_cnt:,"label","#1")}
-   },
-  __artifact-store .code:n =
-   {
-    \directlua {uftag.func.store_mc_data(\__uftag_get_mc_abs_cnt:,"artifact","#1")}
-   },
-  artifact .code:n       =
-    {
-     \exp_args:Nnx \keys_set:nn {uftag / mc} { artifact-bool, artifact-type=#1, tag=Artifact }
-     \exp_args:Nnx \keys_set:nn {uftag / mc }{ __artifact-store=\l__uftag_mc_artifact_type_tl }
-    },
-  artifact .default:n    = { notype }
- }
+\keys_define:nn { __tag / mc }
+  {
+    tag .code:n = %
+      {%%????????? \pdfescapename??
+        \tl_set:Nx  \l__tag_mc_key_tag_tl { #1 }
+        \directlua
+          {
+            ltx.__tag.func.store_mc_data(\__tag_get_mc_abs_cnt:,"tag","#1")
+          }
+      },
+    raw .code:n =
+      {
+        \tl_put_right:Nx \l__tag_mc_key_properties_tl { #1 }
+        \directlua
+          {
+            ltx.__tag.func.store_mc_data(\__tag_get_mc_abs_cnt:,"raw","#1")
+          }
+      },
+    alttext .code:n      = % Alt property
+      {
+        \str_set_convert:Nnon
+          \l__tag_tmpa_str
+          { #1 }
+          { default }
+          { utf16/hex }
+        \tl_put_right:Nn \l__tag_mc_key_properties_tl { /Alt~< }
+        \tl_put_right:No \l__tag_mc_key_properties_tl { \l__tag_tmpa_str>~ }
+        \directlua
+          {
+            ltx.__tag.func.store_mc_data
+              (
+                 \__tag_get_mc_abs_cnt:,"alt","/Alt~<\str_use:N \l__tag_tmpa_str>"
+              )
+          }
+      },
+    alttext-o .code:n      = % Alt property
+      {
+        \str_set_convert:Noon
+          \l__tag_tmpa_str
+          { #1 }
+          { default }
+          { utf16/hex }
+        \tl_put_right:Nn \l__tag_mc_key_properties_tl { /Alt~< }
+        \tl_put_right:No \l__tag_mc_key_properties_tl { \l__tag_tmpa_str>~ }
+        \directlua
+          {
+            ltx.__tag.func.store_mc_data
+              (
+                \__tag_get_mc_abs_cnt:,"alt","/Alt~<\str_use:N \l__tag_tmpa_str>"
+              )
+          }
+      },
+    actualtext .code:n      = % Alt property
+      {
+        \str_set_convert:Nnon
+          \l__tag_tmpa_str
+          { #1 }
+          { default }
+          { utf16/hex }
+        \tl_put_right:Nn \l__tag_mc_key_properties_tl { /Alt~< }
+        \tl_put_right:No \l__tag_mc_key_properties_tl { \l__tag_tmpa_str>~ }
+        \directlua
+          {
+            ltx.__tag.func.store_mc_data
+              (
+                \__tag_get_mc_abs_cnt:,"actualtext","/ActualText~<\str_use:N \l__tag_tmpa_str>"
+              )
+         }
+      },
+    actualtext-o .code:n      = % Alt property
+      {
+        \str_set_convert:Noon
+          \l__tag_tmpa_str
+          { #1 }
+          { default }
+          { utf16/hex }
+        \tl_put_right:Nn \l__tag_mc_key_properties_tl { /Alt~< }
+        \tl_put_right:No \l__tag_mc_key_properties_tl { \l__tag_tmpa_str>~ }
+        \directlua
+          {
+            ltx.__tag.func.store_mc_data
+              (
+                \__tag_get_mc_abs_cnt:,
+                "actualtext",
+                "/ActualText~<\str_use:N \l__tag_tmpa_str>"
+              )
+          }
+      },
+    label .code:n =
+      {
+        \tl_set:Nn\l__tag_mc_key_label_tl { #1 }
+        \directlua
+          {
+            ltx.__tag.func.store_mc_data
+              (
+                \__tag_get_mc_abs_cnt:,"label","#1"
+              )
+          }
+      },
+    __artifact-store .code:n =
+      {
+        \directlua
+          {
+            ltx.__tag.func.store_mc_data
+              (
+                \__tag_get_mc_abs_cnt:,"artifact","#1"
+              )
+          }
+      },
+    artifact .code:n       =
+      {
+        \exp_args:Nnx
+          \keys_set:nn
+            { __tag / mc}
+            { artifact-bool, artifact-type=#1, tag=Artifact }
+        \exp_args:Nnx
+          \keys_set:nn
+            { __tag / mc }
+            { __artifact-store=\l__tag_mc_artifact_type_tl }
+      },
+    artifact .default:n    = { notype }
+  }
 
 
-% attributes
-% set the mc from a tag name
+\cs_set_protected:Npn \__tag_attribute_gset:Nn #1 #2
+  {
+    \tex_global:D \setattribute #1 #2
+  }
 
-\cs_set_protected:Npn \__uftag_attribute_gset:Nn #1 #2
- {
-  \tex_global:D \setattribute #1 #2
- }
+\cs_set_protected:Npn \__tag_attribute_set:Nn #1 #2
+  {
+    \setattribute #1 #2
+  }
 
-\cs_set_protected:Npn \__uftag_attribute_set:Nn #1 #2
- {
-  \setattribute #1 #2
- }
+\cs_set_protected:Npn \__tag_attribute_gunset:N #1
+  {
+    \tex_global:D \unsetattribute #1
+  }
 
-\cs_set_protected:Npn \__uftag_attribute_gunset:N #1
- {
-  \tex_global:D \unsetattribute #1
- }
+\cs_set_protected:Npn \__tag_attribute_unset:N #1
+  {
+    \unsetattribute #1
+  }
 
-\cs_set_protected:Npn \__uftag_attribute_unset:N #1
- {
-   \unsetattribute #1
- }
+\cs_new:Nn \__tag_mc_lua_set_mc_type_attr:n % #1 is a tag name
+  {
+    \__tag_attribute_set:Nn \l__tag_mc_type_attr
+      {
+        \directlua { ltx.__tag.func.output_num_from ("#1") }
+      }
+    \__tag_attribute_set:Nn \l__tag_mc_cnt_attr  { \__tag_get_mc_abs_cnt: }
+  }
 
+\cs_generate_variant:Nn\__tag_mc_lua_set_mc_type_attr:n { o }
 
-\cs_new:Nn \__uftag_mc_lua_set_mc_type_attr:n % #1 is a tag name
- {
-  \__uftag_attribute_set:Nn \l__uftag_mc_type_attr { \directlua {uftag.func.output_num_from ("#1") } }
-  \__uftag_attribute_set:Nn \l__uftag_mc_cnt_attr  { \__uftag_get_mc_abs_cnt: }
- }
+\cs_new:Nn \__tag_mc_lua_unset_mc_type_attr:
+  {
+    \__tag_attribute_unset:N \l__tag_mc_type_attr
+    \__tag_attribute_unset:N \l__tag_mc_cnt_attr
+  }
 
-\cs_generate_variant:Nn\__uftag_mc_lua_set_mc_type_attr:n { o }
+\cs_new:Nn \__tag_mc_insert_mcid_kids:n
+  {
+    \directlua { ltx.__tag.func.mc_insert_kids (#1,0) }
+  }
 
-\cs_new:Nn \__uftag_mc_lua_unset_mc_type_attr:
- {
-  \__uftag_attribute_unset:N \l__uftag_mc_type_attr
-  \__uftag_attribute_unset:N \l__uftag_mc_cnt_attr
- }
+\cs_new:Nn \__tag_mc_insert_mcid_single_kids:n
+  {
+    \directlua {ltx.__tag.func.mc_insert_kids (#1,1) }
+  }
 
 
+\cs_new:Nn \__tag_mc_handle_stash:n %1 mcidnum
+  {
+    \__tag_check_mc_used:n { #1 }
+    \seq_gput_right:cn % Don't fill a lua table due to the command in the item,
+                       % so use the kernel command
+      { g__tag_struct_kids_\g__tag_struct_stack_current_tl _seq }
+      {
+        \__tag_mc_insert_mcid_kids:n {#1}%
+      }
+    \directlua
+      {
+        ltx.__tag.func.store_struct_mcabs
+          (
+            \g__tag_struct_stack_current_tl,#1
+          )
+      }
+    \prop_gput:Nxx
+      \g__tag_mc_parenttree_prop
+      { #1 }
+      { \g__tag_struct_stack_current_tl }
+  }
 
-%This command will in the finish code replace the dummy for a mc by the real mcid kids
-%we need a variant for the case that it is the only kid, to get the array right
-\cs_new:Nn \__uftag_mc_insert_mcid_kids:n
- {
-  \directlua {uftag.func.mc_insert_kids (#1,0) }
- }
+\cs_generate_variant:Nn \__tag_mc_handle_stash:n { o }
 
-\cs_new:Nn \__uftag_mc_insert_mcid_single_kids:n
- {
-  \directlua {uftag.func.mc_insert_kids (#1,1) }
- }
+\cs_new_protected:Nn \tag_mc_begin:n
+  {
+    %\group_begin:
+    %\__tag_check_mc_if_nested:
+    %\bool_gset_true:N \g__tag_in_mc_bool
+    \bool_set_false:N\l__tag_mc_artifact_bool
+    \int_gincr:N \c at g__tag_MCID_abs_int
+    \tl_clear:N \l__tag_mc_key_properties_tl
+    \keys_set:nn { __tag / mc }{ label={}, #1 }
+    %check that a tag or artifact has been used
+    \__tag_check_mc_tag:N \l__tag_mc_key_tag_tl
+    %set the attributes:
+    \__tag_mc_lua_set_mc_type_attr:o  { \l__tag_mc_key_tag_tl }
+    \bool_if:NF \l__tag_mc_artifact_bool
+      { % store the absolute num name in a label:
+        \tl_if_empty:NF {\l__tag_mc_key_label_tl}
+          {
+            \__tag_mc_handle_mc_label:n { \l__tag_mc_key_label_tl }
+          }
+       % if not stashed record the absolute number
+        \bool_if:NF \l__tag_mc_key_stash_bool
+          {
+            \exp_args:Nx \__tag_mc_handle_stash:n { \__tag_get_mc_abs_cnt: }
+          }
+      }
+    %\bool_set_false:N\l__tag_mc_artifact_bool
+    %\group_end:
+  }
 
+\cs_set_eq:NN \uftag_mc_begin:n \tag_mc_begin:n
 
-% we need to pass the info if the kids are alone or already in an array
-% so we add a second argument, which should == 1 if the kids are single
+\cs_new_protected:Nn \tag_mc_end:
+  {
+    %\__tag_check_mc_if_open:
+    %\bool_gset_false:N \g__tag_in_mc_bool
+    \bool_set_false:N\l__tag_mc_artifact_bool
+    \__tag_mc_lua_unset_mc_type_attr:
+    \tl_set:Nn  \l__tag_mc_key_tag_tl { }
+  }
 
+\cs_set_eq:NN \uftag_mc_end: \tag_mc_end:
 
-% puts an mcid absolute number in the current structure
-\cs_new:Nn \__uftag_mc_handle_stash:n %1 mcidnum
- {
-  \__uftag_check_mc_used:n { #1 }
-  \seq_gput_right:cn % Don't fill a lua table due to the command in the item, so the kernel command
-   { g__uftag_struct_kids_\g__uftag_struct_stack_current_tl _seq }
-   {
-    \__uftag_mc_insert_mcid_kids:n {#1}%
-   }
-  \directlua
-   {
-    uftag.func.store_struct_mcabs(\g__uftag_struct_stack_current_tl,#1)
-   }
-  \prop_gput:Nxx
-   \g__uftag_mc_parenttree_prop
-   { #1 }
-   { \g__uftag_struct_stack_current_tl }
- }
-
-\cs_generate_variant:Nn \__uftag_mc_handle_stash:n { o }
-
-\cs_new_protected:Nn \uftag_mc_begin:n
- {
-   %\group_begin:
-   %\__uftag_check_mc_if_nested:
-   %\bool_gset_true:N \g__uftag_in_mc_bool
-   \int_gincr:N \c at g__uftag_MCID_abs_int
-   \tl_clear:N\l__uftag_mc_key_properties_tl
-   \keys_set:nn { uftag / mc }{ label={}, #1 }
-   %check that a tag or artifact has been used
-   \__uftag_check_mc_tag:N \l__uftag_mc_key_tag_tl
-   %set the attributes:
-   \__uftag_mc_lua_set_mc_type_attr:o  { \l__uftag_mc_key_tag_tl }
-   \bool_if:NF \l__uftag_mc_artifact_bool
-    { % store the absolute num name in a label:
-      \tl_if_empty:NF {\l__uftag_mc_key_label_tl}
-       {
-        \__uftag_mc_handle_mc_label:n { \l__uftag_mc_key_label_tl }
-       }
-      % if not stashed record the absolute number
-      \bool_if:NF \l__uftag_mc_key_stash_bool
+\cs_new_protected:Nn \tag_mc_use:n %#1: label name
+  {
+    \tl_set:Nx  \l_tmpa_tl { \__tag_ref_value:enn{tagpdf-#1}{tagmcabs}{} }
+    \tl_if_empty:NTF\l_tmpa_tl
       {
-        \exp_args:Nx \__uftag_mc_handle_stash:n { \__uftag_get_mc_abs_cnt: }
+        \msg_warning:nnn {tag} {mc-label-unknown} { #1 }
       }
-    }
-   \bool_set_false:N\l__uftag_mc_artifact_bool
-  %\group_end:
- }
+      {
+        \__tag_mc_handle_stash:o { \l_tmpa_tl }
+      }
+  }
 
-\cs_new_protected:Nn \uftag_mc_end:
- {
-  %\__uftag_check_mc_if_open:
-  %\bool_gset_false:N \g__uftag_in_mc_bool
-  \__uftag_mc_lua_unset_mc_type_attr:
-  \tl_set:Nn  \l__uftag_mc_key_tag_tl { }
- }
+\cs_set_eq:NN \uftag_mc_use:n \tag_mc_use:n
 
-\cs_new_protected:Nn \uftag_mc_use:n %#1: label name
- {
-  \tl_set:Nx  \l_tmpa_tl { \zref at extractdefault{tagpdf-#1}{tagmcabs}{} }
-  \tl_if_empty:NTF\l_tmpa_tl
-   {
-    \msg_warning:nnn {uftag} {mc-label-unknown} { #1 }
-   }
-   {
-    \__uftag_mc_handle_stash:o { \l_tmpa_tl }
-   }
- }
-
-\cs_new:Nn \__uftag_get_data_mc_tag: { \l__uftag_mc_key_tag_tl }
-
-
-\endinput
+\cs_new:Nn \__tag_get_data_mc_tag: { \l__tag_mc_key_tag_tl }
+%% 
+%%
+%% End of file `tagpdf-mc-code-lua.sty'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-shared.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-shared.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-shared.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,47 +1,86 @@
-\ProvidesExplPackage {tagpdf-mc-code-shared} {2019/07/02} {0.61}
- {part of tagpdf - code related to marking chunks - code shared by generic and luamode }
+%%
+%% This is file `tagpdf-mc-code-shared.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf-mc.dtx  (with options: `shared')
+%% 
+%% Copyright (C) 2019 Ulrike Fischer
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    https://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: tagpdf-mc.dtx
+\ProvidesExplPackage {tagpdf-mc-code-shared} {2021/02/23} {0.80}
+  {part of tagpdf - code related to marking chunks -
+   code shared by generic and luamode }
 
-% I use a latex counter for the absolute count, so that it is added to
-% \cl@@ckpt and restored e.g. in tabulars and align
-% \int_new:N  \c at g__uftag_MCID_int and
-% \tl_put_right:Nn\cl@@ckpt{\@elt{g_uf_test_int}}
-% would work too, but as the name is not expl3 then too, why bother?
-% the absolute counter can be used to label and to check if the page
-% counter needs a reset.
+\newcounter { g__tag_MCID_abs_int }
+\cs_new:Nn \__tag_get_mc_abs_cnt: { \int_use:N \c at g__tag_MCID_abs_int }
 
-\newcounter { g__uftag_MCID_abs_int }
-\cs_new:Nn \__uftag_get_mc_abs_cnt: { \int_use:N \c at g__uftag_MCID_abs_int }
 
-% tagmcabs is the label name of the absolute count which is used to identify the chunk
-\zref at newprop {tagmcabs}  [0] { \int_use:N \c at g__uftag_MCID_abs_int }
-\zref at addprop {uftagzrl}   {tagmcabs}
-\zref at addprop {LastPage} {tagmcabs}
+\cs_new:Nn \__tag_mc_handle_mc_label:n
+  {
+    \__tag_ref_label:en{tagpdf-#1}{mc}
+  }
 
-%stores labels of mcid.
-\cs_new:Nn \__uftag_mc_handle_mc_label:n
- {
-  \zref at labelbylist{tagpdf-#1}{uftagzrl}
- }
+\__tag_prop_new:N \g__tag_mc_parenttree_prop
 
-% will hold the structure numbers for the parenttree
-% key:   absolute number of the mc (tagmcabs)
-% value: the structure number the mc is in
-\__uftag_prop_new:N \g__uftag_mc_parenttree_prop
+\tl_new:N \l__tag_mc_artifact_type_tl
 
-%shared keys
-%the rest are in the splitted code
-\tl_new:N \l__uftag_mc_artifact_type_tl
+\keys_define:nn { __tag / mc }
+  {
+    stash                  .bool_set:N    = \l__tag_mc_key_stash_bool,
+    artifact-bool          .bool_set:N    = \l__tag_mc_artifact_bool,
+    artifact-type          .choice:,
+    artifact-type / pagination .code:n    =
+      {
+        \tl_set:Nn \l__tag_mc_artifact_type_tl { Pagination }
+      },
+    artifact-type / layout     .code:n    =
+      {
+        \tl_set:Nn \l__tag_mc_artifact_type_tl { Layout }
+      },
+    artifact-type / page       .code:n    =
+      {
+        \tl_set:Nn \l__tag_mc_artifact_type_tl { Page }
+      },
+    artifact-type / background .code:n    =
+      {
+        \tl_set:Nn \l__tag_mc_artifact_type_tl { Background }
+      },
+    artifact-type / notype     .code:n    =
+      {
+        \tl_set:Nn \l__tag_mc_artifact_type_tl {}
+      },
+     artifact-type /      .code:n    =
+      {
+        \tl_set:Nn \l__tag_mc_artifact_type_tl {}
+      },
+  }
 
-\keys_define:nn { uftag / mc }
+\cs_new_protected:Npn \tag_mc_artifact_group_begin:n #1
  {
-  stash                  .bool_set:N    = \l__uftag_mc_key_stash_bool,
-  artifact-bool          .bool_set:N    = \l__uftag_mc_artifact_bool,
-  artifact-type              .choice:,
-  artifact-type / pagination .code:n    = {\tl_set:Nn \l__uftag_mc_artifact_type_tl { Pagination }},
-  artifact-type / layout     .code:n    = {\tl_set:Nn \l__uftag_mc_artifact_type_tl { Layout     }},
-  artifact-type / page       .code:n    = {\tl_set:Nn \l__uftag_mc_artifact_type_tl { Page }},
-  artifact-type / background .code:n    = {\tl_set:Nn \l__uftag_mc_artifact_type_tl { Background }},
-  artifact-type / notype     .code:n    = {\tl_set:Nn \l__uftag_mc_artifact_type_tl {}},
+  \tag_mc_begin:n {artifact=#1}
+  \tag_stop_group_begin:
  }
 
-\endinput
+\cs_new_protected:Npn \tag_mc_artifact_group_end:
+ {
+  \tag_stop_group_end:
+  \tag_mc_end:
+ }
+
+\int_new:N \g__tag_MCID_tmp_bypage_int
+
+%% 
+%%
+%% End of file `tagpdf-mc-code-shared.sty'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-pdftex.def
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-pdftex.def	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-pdftex.def	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,25 @@
-\ProvidesExplFile {tagpdf-pdftex.def} {2019/07/02} {0.61}
+%%
+%% This is file `tagpdf-pdftex.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf-backend.dtx  (with options: `pdftex')
+%% 
+%% Copyright (C) 2019 Ulrike Fischer
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    https://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: tagpdf-backend.dtx
+\ProvidesExplFile {tagpdf-pdftex.def} {2021/02/23} {0.80}
   {tagpdf~driver~for~pdftex}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -5,124 +26,22 @@
 %%%% driver (pdflatex) commands
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-% these should be in expl3!!!
-\cs_new:Nn \__uftag_pdf_startlink:{ \pdfstartlink }
-\cs_new:Nn \__uftag_pdf_endlink:  { \pdfendlink }
-\cs_new:Nn \__uftag_pdf_lastlink:  { \pdflastlink }
-\cs_new:Nn \__uftag_pdf_catalog:  { \pdfcatalog }
+\cs_set_eq:NN \__tag_prop_new:N     \prop_new:N
 
+\cs_set_eq:NN \__tag_seq_new:N      \seq_new:N
 
-% needed for \str_set_convert:Nnon
-\tl_new:N \g__uftag_inputencoding_tl
-\tl_gset:Nn \g__uftag_inputencoding_tl {utf8}
+\cs_set_eq:NN \__tag_prop_gput:Nnn  \prop_gput:Nnn
 
+\cs_set_eq:NN \__tag_seq_gput_right:Nn \seq_gput_right:Nn
 
-%literal
-\cs_new:Nn  \__uftag_pdfliteral_page:n { \__uftag_tex_pdfliteral:D page { #1} }
-\cs_new:Nn  \__uftag_pdfcatalog:n      { \__uftag_tex_pdfcatalog:D { #1 } }
+\cs_set_eq:NN \__tag_seq_item:cn    \seq_item:cn
 
-% reserve an object num and store the number
-\cs_new:Nn \__uftag_pdfreserveobjnum:N % #1 = macro name to be populated with object number
- {
-  \__uftag_tex_pdfobj:D reserveobjnum
-  \tl_set:Nx #1 { \int_use:N \__uftag_tex_pdflastobj:D }%
- }
+\cs_set_eq:NN \__tag_prop_item:cn   \prop_item:cn
 
-% add content to an object num stored in a macro
-\cs_new:Nn \__uftag_pdfuseobjnum:Nn
- {
- % #1 = macro containing the object number
- % #2 = object contents, as valid PDF
- % should #2 be filtered through  \pdfstringdef  ???
-  \__uftag_tex_immediate:D \__uftag_tex_pdfobj:D useobjnum~#1~{#2}%
- }
+\cs_set_eq:NN \__tag_seq_show:N     \seq_show:N
 
-\cs_new:Nn \__uftag_pdfuseobjnum:nn
- {
- % #1 = a number the object number
- % #2 = object contents, as valid PDF
- % should #2 be filtered through  \pdfstringdef  ???
-  \__uftag_check_record_pdfobj_num:n {#1}
-  \__uftag_tex_immediate:D \__uftag_tex_pdfobj:D useobjnum~#1~{#2}%
- }
+\cs_set_eq:NN \__tag_prop_show:N    \prop_show:N
 
-% obj num of the dictionary for a page:
-% the page count starts by 1
-% pages can referenced before they are actually created
-% no error if the page later doesn't exist
-\cs_new:Nn \__uftag_store_pdfpageref:Nn
- {
- % #1 = macro name to be populated with current page object number
- % #2 = number or counter identifying the required page
-  \tl_set:Nx #1 { \__uftag_tex_pdfpageref:D #2}%
- }
-
-% a global version of the command
-\cs_new:Nn \__uftag_gstore_pdfpageref:Nn
- {
-  \tl_gset:Nx #1 { \__uftag_tex_pdfpageref:D #2}%
- }
-
-\cs_new:Nn \__uftag_pdfobj:Nn
- {
- % #1 = macro name to refer to this object
- % #2 = object contents, as valid PDF
- % should #2 be filtered through  \pdfstringdef  ???
-  \__uftag_tex_immediate:D \__uftag_tex_pdfobj:D { #2 }
-  \tl_set:Nx #1 {\int_use:N \__uftag_tex_pdflastobj:D }%
- }
-
-%  pdfpage**s**attr: for all pages
-%% is global needed? Yes. Without it the setting is lost if issued in a group
-%
-\cs_new:Nn \__uftag_gset_pdfpagesattr:n
- {
-  \__uftag_tex_global:D \__uftag_tex_pdfpagesattr:D { #1 }
- }
-
-\cs_new:Nn \__uftag_gadd_pdfpagesattr:n
- {
-  \exp_args:No \__uftag_gset_pdfpagesattr:n { \__uftag_tex_the:D \__uftag_tex_pdfpagesattr:D #1 }
- }
-
-% pdfpageattr for one page
-% I must avoid to overwrite other entries,
-% And I must avoid to add more and more /StructParens
-% do we need an immediate version??
-\cs_new:Nn \__uftag_gset_pdfpageattr:n
- {
-  \__uftag_tex_global:D \__uftag_tex_pdfpageattr:D  { #1 }
- }
-
-\cs_new:Nn \__uftag_gadd_pdfpageattr:n
- {
-   \exp_args:No \__uftag_gset_pdfpageattr:n { \__uftag_tex_the:D \__uftag_tex_pdfpageattr:D #1}
- }
-
-\cs_new:Nn \__uftag_get_pdfpageattr:N
- {
-  \tl_set:No #1 { \__uftag_tex_the:D \__uftag_tex_pdfpageattr:D }
- }
-
-
-% These commands are only aliases for pdflatex but are defined differently with luatex
-% to get also lua tables.
-\cs_set_eq:NN \__uftag_prop_new:N     \prop_new:N
-
-\cs_set_eq:NN \__uftag_seq_new:N      \seq_new:N
-
-\cs_set_eq:NN \__uftag_prop_gput:Nnn  \prop_gput:Nnn
-
-\cs_set_eq:NN \__uftag_seq_gput_right:Nn \seq_gput_right:Nn
-
-\cs_set_eq:NN \__uftag_seq_item:cn    \seq_item:cn
-
-\cs_set_eq:NN \__uftag_prop_item:cn   \prop_item:cn
-
-\cs_set_eq:NN \__uftag_seq_show:N     \seq_show:N
-
-\cs_set_eq:NN \__uftag_prop_show:N    \prop_show:N
-
-
-
-\endinput
+%% 
+%%
+%% End of file `tagpdf-pdftex.def'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-roles-code.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-roles-code.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-roles-code.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,126 +1,142 @@
-\ProvidesExplPackage {tagpdf-roles-code} {2019/07/02} {0.61}
+%%
+%% This is file `tagpdf-roles-code.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf-roles.dtx  (with options: `roles')
+%% 
+%% Copyright (C) 2019 Ulrike Fischer
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    https://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: tagpdf-roles.dtx
+\ProvidesExplPackage {tagpdf-roles-code} {2021/02/23} {0.80}
  {part of tagpdf - code related to roles and structure names}
 
-\__uftag_seq_new:N     \g__uftag_role_tags_seq  %to get names from numbers
-\__uftag_prop_new:N    \g__uftag_role_tags_prop %to get numbers from names
+\__tag_seq_new:N     \g__tag_role_tags_seq  %to get names from numbers
+\__tag_prop_new:N    \g__tag_role_tags_prop %to get numbers from names
 
-%The list of standard adobe tags.
-\clist_const:Nn \c__uftag_role_sttags_clist
- {%possible root elements
-  Document,   %A complete document. This is the root element of any structure tree containing
-              %multiple parts or multiple articles.
-  Part,       %A large-scale division of a document.
-  Art,        %A relatively self-contained body of text constituting a single narrative or exposition
-  %subelements
-  Sect,       %A container for grouping related content elements.
-  Div,        %A generic block-level element or group of elements
-  BlockQuote, %A portion of text consisting of one or more paragraphs attributed to someone other
-              %than the author of the  surrounding text.
-  Caption,    %A brief portion of text describing a table or figure.
-  TOC,        %A list made up of table of contents item entries (structure tag TOCI; see below)
-              %and/or other nested table of contents entries
-  TOCI,       %An individual member of a table of contents. This entry's children can be any of
-              %the following structure  tags:
-              %Lbl,Reference,NonStruct,P,TOC
-  Index,
-  NonStruct,  %probably not needed
-  H,
-  H1,
-  H2,
-  H3,
-  H4,
-  H5,
-  H6,
-  P,
-  L,           %list
-  LI,          %list item (around label and list item body)
-  Lbl,         %list label
-  LBody,       %list item body
-  Table,
-  TR,          %table row
-  TH,          %table header cell
-  TD,          %table data cell
-  THead,       %table header (n rows)
-  TBody,       %table rows
-  TFoot,       %table footer
-  Span,        %generic inline marker
-  Quote,       %inline quote
-  Note,        % footnote, endnote. Lbl can be child
-  Reference,   % A citation to content elsewhere in the document.
-  BibEntry,    %bibentry
-  Code,        %
-  Link,        %
-  Annot,
-  Figure,
-  Formula,
-  Form,
-  Artifact
- }
+\clist_const:Nn \c__tag_role_sttags_clist
+  {%possible root elements
+    Document,   %A complete document. This is the root element of any structure tree containing
+                %multiple parts or multiple articles.
+    Part,       %A large-scale division of a document.
+    Art,        %A relatively self-contained body of text constituting a single narrative or exposition
+    %subelements
+    Sect,       %A container for grouping related content elements.
+    Div,        %A generic block-level element or group of elements
+    BlockQuote, %A portion of text consisting of one or more paragraphs attributed to someone other
+                %than the author of the  surrounding text.
+    Caption,    %A brief portion of text describing a table or figure.
+    TOC,        %A list made up of table of contents item entries (structure tag TOCI; see below)
+                %and/or other nested table of contents entries
+    TOCI,       %An individual member of a table of contents. This entry's children can be any of
+                %the following structure  tags:
+                %Lbl,Reference,NonStruct,P,TOC
+    Index,
+    NonStruct,  %probably not needed
+    H,
+    H1,
+    H2,
+    H3,
+    H4,
+    H5,
+    H6,
+    P,
+    L,           %list
+    LI,          %list item (around label and list item body)
+    Lbl,         %list label
+    LBody,       %list item body
+    Table,
+    TR,          %table row
+    TH,          %table header cell
+    TD,          %table data cell
+    THead,       %table header (n rows)
+    TBody,       %table rows
+    TFoot,       %table footer
+    Span,        %generic inline marker
+    Quote,       %inline quote
+    Note,        % footnote, endnote. Lbl can be child
+    Reference,   % A citation to content elsewhere in the document.
+    BibEntry,    %bibentry
+    Code,        %
+    Link,        %
+    Annot,
+    Figure,
+    Formula,
+    Form,
+    Artifact
+  }
 
-% get tag name from number: \seq_item:Nn \g__uftag_role_tags_seq { n }
-%\seq_gset_from_clist:NN \g__uftag_role_tags_seq \c__uftag_role_tags_clist
 
-\clist_map_inline:Nn \c__uftag_role_sttags_clist
- {
-  \__uftag_seq_gput_right:Nn \g__uftag_role_tags_seq { #1 }
- }
+\clist_map_inline:Nn \c__tag_role_sttags_clist
+  {
+    \__tag_seq_gput_right:Nn \g__tag_role_tags_seq { #1 }
+  }
 
+\int_step_inline:nnnn { 1 }{ 1 }{ \seq_count:N \g__tag_role_tags_seq }
+  {
+    \__tag_prop_gput:Nxn \g__tag_role_tags_prop
+      {
+        \seq_item:Nn \g__tag_role_tags_seq  { #1 }
+      }
+      { #1 }
+  }
 
-% get tag number from name: \prop_item:Nn \g__uftag_role_tags_prop { name }
-\int_step_inline:nnnn { 1 }{ 1 }{ \seq_count:N \g__uftag_role_tags_seq }
- {
-  \__uftag_prop_gput:Nxn \g__uftag_role_tags_prop
-   {
-    \seq_item:Nn \g__uftag_role_tags_seq  { #1 }
-   }
-   { #1 }
- }
+\cs_new:Nn \__tag_role_get_tag_from_index:nn
+  {
+    \__tag_seq_item:cn { #1_seq } { #2 }
+  }
 
-\cs_new:Nn \__uftag_role_get_tag_from_index:nn
- {
-  \__uftag_seq_item:cn { #1_seq } { #2 }
- }
+\cs_new:Nn \__tag_role_get_index_from_tag:nn
+  {
+    \__tag_prop_item:cn { #1_prop } { #2 }
+  }
 
-\cs_new:Nn \__uftag_role_get_index_from_tag:nn
- {
-  \__uftag_prop_item:cn { #1_prop } { #2 }
- }
 
-% new tags and the rolemap
+\__tag_prop_new:N \g__tag_role_rolemap_prop
 
-\__uftag_prop_new:N \g__uftag_role_rolemap_prop
+\cs_new_protected:Nn \__tag_role_add_tag:nn %new name, reference to old
+  {
+    \__tag_seq_gput_right:Nn \g__tag_role_tags_seq { #1 }
+    \__tag_prop_gput:Nnx \g__tag_role_tags_prop    { #1 }
+      {
+        \seq_count:N \g__tag_role_tags_seq
+      }
+    \__tag_check_add_tag_role:nn {#1}{#2}
+    \tl_if_empty:nF { #2 }
+      {
+        \__tag_prop_gput:Nnn \g__tag_role_rolemap_prop
+          { #1 } { #2 }
+      }
+  }
 
-\cs_new:Nn \__uftag_role_add_tag:nn %new name, reference to old
- {
-  \__uftag_seq_gput_right:Nn \g__uftag_role_tags_seq { #1 }
-  \__uftag_prop_gput:Nnx \g__uftag_role_tags_prop    { #1 }
-   {
-    \seq_count:N \g__uftag_role_tags_seq
-   }
-  \__uftag_check_add_tag_role:nn {#1}{#2}
-  \tl_if_empty:nF { #2 }
-   {
-    \__uftag_prop_gput:Nnn \g__uftag_role_rolemap_prop
-     { #1 } { #2 }
-   }
- }
+\cs_generate_variant:Nn \__tag_role_add_tag:nn {xx}
 
-\cs_generate_variant:Nn \__uftag_role_add_tag:nn {xx}
-
-\keys_define:nn { uftag / setup }
- {
-  add-new-tag .code:n =
-   {
-    \seq_set_split:Nnn \l_tmpa_seq { / } {#1/}
-    \__uftag_role_add_tag:xx
+\keys_define:nn { __tag / setup }
+  {
+    add-new-tag .code:n =
      {
-      \seq_item:Nn \l_tmpa_seq {1}
+       \seq_set_split:Nnn \l_tmpa_seq { / } {#1/}
+       \__tag_role_add_tag:xx
+         {
+           \seq_item:Nn \l_tmpa_seq {1}
+         }
+         {
+           \seq_item:Nn \l_tmpa_seq {2}
+         }
      }
-     {
-      \seq_item:Nn \l_tmpa_seq {2}
-     }
-   }
- }
+  }
 
-
-\endinput
+%% 
+%%
+%% End of file `tagpdf-roles-code.sty'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-space-code.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-space-code.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-space-code.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,45 +1,79 @@
-\ProvidesExplPackage {tagpdf-space-code} {2019/07/02} {0.61}
+%%
+%% This is file `tagpdf-space-code.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf-space.dtx  (with options: `space')
+%% 
+%% Copyright (C) 2019 Ulrike Fischer
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    https://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: tagpdf-space.dtx
+\ProvidesExplPackage {tagpdf-space-code} {2021/02/23} {0.80}
  {part of tagpdf - code related to real space chars}
-% luatex uses an attribute (declared in the driver file) and some luacode in tagpdf.lua
-% perhaps I will split the code by engine in the future
 
 \sys_if_engine_pdftex:T
-{
- \pdfglyphtounicode{space}{0020}
- \keys_define:nn { uftag / setup }
   {
-    interwordspace .choices:nn = { true, on }  { \pdfinterwordspaceon },
-    interwordspace .choices:nn = { false, off }{ \pdfinterwordspaceon },
-    show-spaces .bool_set:N = \l__uftag_showspaces_bool
+    \pdfglyphtounicode{space}{0020}
+    \keys_define:nn { __tag / setup }
+      {
+        interwordspace .choices:nn = { true, on }  { \pdfinterwordspaceon },
+        interwordspace .choices:nn = { false, off }{ \pdfinterwordspaceon },
+        show-spaces .bool_set:N = \l__tag_showspaces_bool
+      }
   }
 
-}
-
-
 \sys_if_engine_luatex:T
-{
- \keys_define:nn { uftag / setup }
   {
-    interwordspace .choices:nn = { true, on }
-                                 { \directlua{uftag.func.markspaceon()} },
+    \keys_define:nn { __tag / setup }
+      {
+        interwordspace .choices:nn =
+                                 { true, on }
+                                 { \directlua{ltx.__tag.func.markspaceon()} },
+        interwordspace .choices:nn =
+                                 { false, off }
+                                 {\directlua{ltx.__tag.func.markspaceoff()} },
+        show-spaces      .choice:,
+        show-spaces  / true  .code:n =
+                                 {\directlua{ltx.__tag.trace.showspaces=true}},
+        show-spaces  / false .code:n =
+                                 {\directlua{ltx.__tag.trace.showspaces=nil}},
+        show-spaces .default:n = true
+      }
 
-    interwordspace .choices:nn = { false, off }
-                                 {\directlua{uftag.func.markspaceoff()} },
-    show-spaces      .choice:,
-    show-spaces  / true  .code:n = {\directlua{uftag.trace.showspaces=true}},
-    show-spaces  / false .code:n = {\directlua{uftag.trace.showspaces=nil}},
-    show-spaces .default:n = true
+    \cs_new_protected:Nn \__tag_fakespace:
+      {
+        \group_begin:
+        \setattribute\g__tag_interwordspace_attr{1}
+        \setattribute\g__tag_interwordfont_attr
+          {
+            \directlua{tex.print(\the\catcodetable at latex, font.current())}
+          }
+        \skip_horizontal:n{\c_zero_skip}
+        \group_end:
+      }
   }
- \cs_new_protected:Nn \__uftag_fakespace:
+
+\sys_if_engine_xetex:T
   {
-   \group_begin:
-    \setattribute\g__uftag_interwordspace_attr{1}
-    \setattribute\g__uftag_interwordfont_attr{\directlua{tex.print(\the\catcodetable at latex, font.current())}}
-    \skip_horizontal:n{\c_zero_skip}
-   \group_end:
+    \keys_define:nn { __tag / setup }
+      {
+        interwordspace .choices:nn = { true, on }  { \msg_warning:nnn {tag}{sys-no-interwordspace}{xetex}  },
+        interwordspace .choices:nn = { false, off }{ \msg_warning:nnn {tag}{sys-no-interwordspace}{xetex}  },
+        show-spaces .bool_set:N = \l__tag_showspaces_bool
+      }
   }
-}
 
-
-
-\endinput
+%% 
+%%
+%% End of file `tagpdf-space-code.sty'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-struct-code.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-struct-code.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-struct-code.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,523 +1,623 @@
-\ProvidesExplPackage {tagpdf-struct-code} {2019/07/02} {0.61}
+%%
+%% This is file `tagpdf-struct-code.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf-struct.dtx  (with options: `struct')
+%% 
+%% Copyright (C) 2019 Ulrike Fischer
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    https://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: tagpdf-struct.dtx
+\ProvidesExplPackage {tagpdf-struct-code} {2021/02/23} {0.80}
  {part of tagpdf - code related to storing structure}
 
-% I will use a latex counter for the structure count
-% to have a chance to avoid double structures in align etc
 
-\newcounter  { g__uftag_struct_abs_int }
-\int_gzero:N \c at g__uftag_struct_abs_int
+\newcounter  { g__tag_struct_abs_int }
+\int_gzero:N \c at g__tag_struct_abs_int
 
 
-\zref at newprop {tagstruct} [0] { \int_use:N \c at g__uftag_struct_abs_int }
-\zref at newlist {uftagzrlstruct}
-\zref at addprop {uftagzrlstruct}{tagstruct}
 
-% a sequence stores structnum -> the obj numbers
-% to allow easy mapping over the structures
+\__tag_seq_new:N  \g__tag_struct_objR_seq
 
-\__uftag_seq_new:N  \g__uftag_struct_objR_seq
+\seq_new:N    \g__tag_struct_stack_seq
+\seq_gpush:Nn \g__tag_struct_stack_seq {0}
 
-% a sequence for the structure stack. When a sequence is opened it's number is put on the stack.
-\seq_new:N    \g__uftag_struct_stack_seq
-\seq_gpush:Nn \g__uftag_struct_stack_seq {0}
+\tl_new:N     \l__tag_struct_stack_parent_tmp_tl
+\tl_new:N     \g__tag_struct_stack_current_tl
 
-%this variables will hold the top entry and the parent on the stack
-\tl_new:N     \l__uftag_struct_stack_parent_tmp_tl
-\tl_new:N     \g__uftag_struct_stack_current_tl
 
-% I need at least one structure: the StructTreeRoot
-% normally it should have only one kid, e.g. the document element.
 
-% The data of the StructTreeRoot and the StructElem are in properties:
-% \g__uftag_struct_0_prop for the root
-% \g__uftag_struct_N_prop, N >=1
-% they have all the keys
-% objnum    - number,
-% Type      - StructTreeRoot or StructElem
-% num - number (identical to the num in the name, or 0 for the root)
-% and the keys from the two following lists
-% (the root has a special set of properties).
-% the values of the prop should be already escaped properly
-% when the entries are created (title,lange,alt,E,actualtext)
+\seq_const_from_clist:Nn \c__tag_struct_StructTreeRoot_entries_seq
+  {%p. 857/858
+    Type,              % always /StructTreeRoot
+    K,                 % kid, dictionary or array of dictionaries
+    IDTree,            % currently unused
+    ParentTree,        % required,obj ref to the parent tree
+    ParentTreeNextKey, %optional
+    RoleMap,
+    ClassMap
+  }
 
+\seq_const_from_clist:Nn \c__tag_struct_StructElem_entries_seq
+  {%p 858 f
+    Type,              %always /StructElem
+    S,                 %tag/type
+    P,                 %parent
+    ID,                %optional
+    Ref,               %optional, pdf 2.0 Use?
+    Pg,                %obj num of starting page, optional
+    K,                 %kids
+    A,                 %attributes, probably unused
+    C,                 %class ""
+    %R,
+    T,                 %title, value in () or <>
+    Lang,              %language
+    Alt,               % value in () or <>
+    E,                 %abreviation
+    ActualText,
+    AF,                 %pdf 2.0, array of dict, associated files
+    NS,                 %pdf 2.0, dict, namespace
+    PhoneticAlphabet,   %pdf 2.0
+    Phoneme             %pdf 2.0
+  }
 
-\seq_const_from_clist:Nn \c__uftag_struct_StructTreeRoot_entries_seq
- {%p. 857/858
-  Type,              % always /StructTreeRoot
-  K,                 % kid, dictionary or array of dictionaries
-  IDTree,            % currently unused
-  ParentTree,        % required,obj ref to the parent tree
-  ParentTreeNextKey, %optional
-  RoleMap,
-  ClassMap
- }
 
-\seq_const_from_clist:Nn \c__uftag_struct_StructElem_entries_seq
- {%p 858 f
-  Type,              %always /StructElem
-  S,                 %tag/type
-  P,                 %parent
-  ID,                %optional
-  Pg,                %obj num of starting page, optional
-  K,                 %kids
-  A,                 %attributes, probably unused
-  C,                 %class ""
-  %R,
-  T,                 %title, value in () or <>
-  Lang,              %language
-  Alt,               % value in () or <>
-  E,                 %abreviation
-  ActualText
+\cs_new:Nn \__tag_struct_output_prop_aux:nn %#1 num, #2 key
+  {
+    \prop_if_in:cnT
+      { g__tag_struct_#1_prop }
+      { #2 }
+      {
+        \c_space_tl/#2~ \prop_item:cn{ g__tag_struct_#1_prop } { #2 }
+      }
   }
 
-% I need an output handler for each prop, to get expandable output
-% see https://tex.stackexchange.com/questions/424208/expandable-version-of-a-expl3-command/424213#424213
+\cs_new:Nn \__tag_new_output_prop_handler:n
+  {
+    \cs_new:cn { __tag_struct_output_prop_#1:n }
+      {
+        \__tag_struct_output_prop_aux:nn {#1}{##1}
+      }
+  }
 
-\cs_new:Nn \__uftag_struct_output_prop_aux:nn %#1 num, #2 key
- {
-  \prop_if_in:cnT
-   { g__uftag_struct_#1_prop }
-   { #2 }
-   {
-     \c_space_tl/#2~ \prop_item:cn{ g__uftag_struct_#1_prop } { #2 }
-   }
- }
+\__tag_prop_new:c { g__tag_struct_0_prop }
+\__tag_new_output_prop_handler:n {0}
+\tl_gset:Nn \g__tag_struct_stack_current_tl {0}
 
-\cs_new:Nn \__uftag_new_output_prop_handler:n
- {
-  \cs_new:cn { __uftag_struct_output_prop_#1:n }
-   {
-    \__uftag_struct_output_prop_aux:nn {#1}{##1}
-   }
- }
+\__tag_seq_new:c  { g__tag_struct_kids_0_seq }
 
 
-% the first one, the StructTreeRoot is special, so
-% created manually:
-\__uftag_prop_new:c { g__uftag_struct_0_prop }
-\__uftag_new_output_prop_handler:n {0}
-\tl_gset:Nn \g__uftag_struct_stack_current_tl {0}
+\__tag_prop_gput:cno
+  { g__tag_struct_0_prop }
+  { objref}
+  { \pdf_object_ref:n { c__tag_struct_0_obj } }
 
-\__uftag_seq_new:c  { g__uftag_struct_kids_0_seq}
+\__tag_prop_gput:cno
+  { g__tag_struct_0_prop }
+  { Type }
+  { /StructTreeRoot }
 
-\__uftag_prop_gput:cno
- { g__uftag_struct_0_prop }
- { objnum}
- { \c_uftag_tree_obj_structtreeroot_tl }
+\__tag_prop_gput:cnx
+  { g__tag_struct_0_prop }
+  { ParentTree }
+  { \pdf_object_ref:n { c__tag_tree_parenttree_obj } }
 
-\__uftag_prop_gput:cno
- { g__uftag_struct_0_prop }
- { Type }
- { /StructTreeRoot }
+\__tag_prop_gput:cnx
+  { g__tag_struct_0_prop }
+  { RoleMap }
+  { \pdf_object_ref:n { c__tag_tree_rolemap_obj } }
 
-% the constants are defined in the tree code.
-\__uftag_prop_gput:cnx
- { g__uftag_struct_0_prop }
- { ParentTree }
- { \c__uftag_tree_obj_parenttree_tl\c_space_tl 0\c_space_tl R }
+\__tag_prop_gput:cno
+  { g__tag_struct_0_prop }
+  { entries }
+  { StructTreeRoot }
 
-\__uftag_prop_gput:cnx
- { g__uftag_struct_0_prop }
- { RoleMap }
- { \c__uftag_tree_obj_rolemap_tl\c_space_tl 0\c_space_tl R }
+\__tag_prop_gput:cno
+  { g__tag_struct_0_prop }
+  { num }
+  { 0 }
 
-\__uftag_prop_gput:cno
- { g__uftag_struct_0_prop }
- { entries }
- { StructTreeRoot }
 
-\__uftag_prop_gput:cno
- { g__uftag_struct_0_prop }
- { num }
- { 0 }
+\cs_new:Nn \__tag_struct_kid_mc_gput_right:nn %#1 structure num, #2 MCID absnum%
+  {
+    %\__tag_store_pdfpageref:Nn \l_tmpa_tl { \__tag_ref_value:enn{mcid-#2}{tagabspage}{1} }
+    \__tag_seq_gput_right:cx
+      { g__tag_struct_kids_#1_seq }
+      {
+        <<
+        /Type \c_space_tl /MCR \c_space_tl
+        /Pg %\c_space_tl \l_tmpa_tl \c_space_tl 0 \c_space_tl R \c_space_tl
+          \c_space_tl
+          \pdf_pageobject_ref:n { \__tag_ref_value:enn{mcid-#2}{tagabspage}{1} }
+        /MCID \c_space_tl \__tag_ref_value:enn{mcid-#2}{tagmcid}{1}
+        >>
+      }
+  }
 
-% commands to store the kids
-% I don't compare the page objects number yet, but always add the /Pg key, perhaps later
-
-\cs_new:Nn \__uftag_struct_kid_mc_gput_right:nn %#1 structure num, #2 MCID absnum%
- {
-  \__uftag_store_pdfpageref:Nn \l_tmpa_tl { \zref at extractdefault{mcid-#2}{tagabspage}{1} }
-  \__uftag_seq_gput_right:cx
-   { g__uftag_struct_kids_#1_seq }
-   { <<
-     /Type\c_space_tl/MCR\c_space_tl
-     /Pg\c_space_tl\l_tmpa_tl\c_space_tl0\c_space_tl R\c_space_tl
-     /MCID\c_space_tl\zref at extractdefault{mcid-#2}{tagmcid}{1}
-    >>
-   }
+\cs_new:Nn\__tag_struct_kid_struct_gput_right:nn %#1 num of parent struct, #2 kid struct
+  {
+    \__tag_seq_gput_right:cx
+      { g__tag_struct_kids_#1_seq }
+      {
+        \prop_item:cn
+          { g__tag_struct_#2_prop }
+          { objref }
+      }
  }
 
-\cs_new:Nn\__uftag_struct_kid_struct_gput_right:nn %#1 num of parent struct, #2 kid struct
- {
-  \__uftag_seq_gput_right:cx
-  { g__uftag_struct_kids_#1_seq }
+\cs_new:Nn\__tag_struct_kid_link_gput_right:nn %#1 num of parent struct, #2 obj reference
   {
-   \prop_item:cn
-    { g__uftag_struct_#2_prop }
-    { objnum }
-   \c_space_tl 0 \c_space_tl R
+    \pdf_object_unnamed_write:nx
+      { dict }
+      {
+        /Type \c_space_tl /OBJR \c_space_tl
+        /Obj~#2
+      }
+    \__tag_seq_gput_right:cx
+      { g__tag_struct_kids_#1_seq }
+      {
+        \pdf_object_ref_last:
+      }
   }
- }
 
-\cs_new:Nn\__uftag_struct_kid_link_gput_right:nn %#1 num of parent struct, #2 obj number of link
- {
-  \__uftag_pdfobj:Nn \l__uftag_tmpa_tl
+\cs_generate_variant:Nn\__tag_struct_kid_link_gput_right:nn { nx }
+
+\cs_new:Nn\__tag_struct_exchange_kid_command:N %N= seq
   {
-    <<
-     /Type \c_space_tl /OBJR \c_space_tl
-     /Obj  \c_space_tl #2 \c_space_tl 0 \c_space_tl R
-   >>
+    \seq_gpop_left:NN #1 \l_tmpa_tl
+    \regex_replace_once:nnN
+      { \c{\__tag_mc_insert_mcid_kids:n} }
+      { \c{\__tag_mc_insert_mcid_single_kids:n} }
+      \l_tmpa_tl
+   \seq_gput_left:NV #1 \l_tmpa_tl
   }
-  \__uftag_seq_gput_right:cx
-   { g__uftag_struct_kids_#1_seq }
-   {
-    \l__uftag_tmpa_tl \c_space_tl 0 \c_space_tl R
-   }
- }
 
-\cs_generate_variant:Nn\__uftag_struct_kid_link_gput_right:nn { nx}
+\cs_generate_variant:Nn\__tag_struct_exchange_kid_command:N { c }
 
-\cs_new:Nn\__uftag_struct_exchange_kid_command:N %N= seq
- {
-  \seq_gpop_left:NN #1 \l_tmpa_tl
-  \regex_replace_once:nnN
-   {\c{\__uftag_mc_insert_mcid_kids:n}}
-   {\c{\__uftag_mc_insert_mcid_single_kids:n}}
-   \l_tmpa_tl
-  \seq_gput_left:NV #1 \l_tmpa_tl
- }
-\cs_generate_variant:Nn\__uftag_struct_exchange_kid_command:N { c }
+\cs_new:Nn \__tag_struct_fill_kid_key:n %#1 is the struct num
+  {
+    \int_case:nnF
+      {
+        \seq_count:c
+          {
+            g__tag_struct_kids_\prop_item:cn{ g__tag_struct_#1_prop }{num}_seq
+          }
+      }
+      {
+        { 0 }
+         { } %no kids, do nothing
+        { 1 } % 1 kid, insert
+         {
+           % in this case we need a special command in
+           %luamode to get the array right. See issue #13
+           \bool_if:NT\g__tag_mode_lua_bool
+             {
+               \__tag_struct_exchange_kid_command:c
+                 {g__tag_struct_kids_\prop_item:cn{ g__tag_struct_#1_prop }{num}_seq}
+             }
+           \__tag_prop_gput:cnx { g__tag_struct_#1_prop } {K}
+             {
+               \seq_item:cn
+                 {
+                   g__tag_struct_kids_\prop_item:cn{ g__tag_struct_#1_prop }{num}_seq
+                 }
+                 {1}
+             }
+         } %
+      }
+      { %many kids, use an array
+        \__tag_prop_gput:cnx { g__tag_struct_#1_prop } {K}
+          {
+            [
+              \seq_use:cn
+                {
+                  g__tag_struct_kids_\prop_item:cn{ g__tag_struct_#1_prop }{num}_seq
+                }
+                {
+                  \c_space_tl
+                }
+            ]
+          }
+      }
+  }
 
-\cs_new:Nn \__uftag_struct_fill_kid_key:n %#1 is the struct num
- {
-  \int_case:nnF
+
+\tl_new:N \l__tag_struct_dict_content_tl
+
+\cs_new:Nn \__tag_struct_get_dict_content:n
   {
-   \seq_count:c
-    {
-     g__uftag_struct_kids_\prop_item:cn{ g__uftag_struct_#1_prop }{num}_seq
-    }
+    %\tl_set:Nn \l__tag_struct_dict_content_tl {<<}
+    \tl_clear:N \l__tag_struct_dict_content_tl
+    \seq_map_inline:cn
+      {
+        c__tag_struct_\prop_item:cn{ g__tag_struct_#1_prop }{entries}_entries_seq
+      }
+      {
+        \tl_put_right:Nx
+          \l__tag_struct_dict_content_tl
+          {
+             \prop_if_in:cnT
+               { g__tag_struct_#1_prop }
+               { ##1 }
+               {
+                 \c_space_tl/##1~\prop_item:cn{ g__tag_struct_#1_prop } { ##1 }
+               }
+          }
+      }
+    %\tl_put_right:Nn \l__tag_struct_dict_content_tl { >> }
   }
+
+\cs_new:Nn \__tag_struct_write_obj:n
   {
-   { 0 }
-    { } %no kids, do nothing
-   { 1 } % 1 kid, insert
-    {
-     % in this case we in luamode need a special command in luamode to get the array right. See issue #13
-     \bool_if:NT\g__uftag_mode_lua_bool
+    \prop_if_in:cnTF
+      { g__tag_struct_#1_prop }
+      { objref }
       {
-       \__uftag_struct_exchange_kid_command:c
-        {g__uftag_struct_kids_\prop_item:cn{ g__uftag_struct_#1_prop }{num}_seq}
+        \__tag_struct_fill_kid_key:n { #1 }
+        %\prop_show:c { g__tag_struct_#1_prop }
+        \__tag_struct_get_dict_content:n { #1 }
+        \exp_args:Nx
+          \pdf_object_write:nx
+            { c__tag_struct_#1_obj }
+            {
+              \l__tag_struct_dict_content_tl
+            }
       }
-     \__uftag_prop_gput:cnx { g__uftag_struct_#1_prop } {K}
       {
-       \seq_item:cn
-        {
-         g__uftag_struct_kids_\prop_item:cn{ g__uftag_struct_#1_prop }{num}_seq
-        }{1}
+        \msg_error:nnn { tag } { struct-no-objnum } { #1}
       }
-    } %
   }
-  { %many kids, use an array
-   \__uftag_prop_gput:cnx { g__uftag_struct_#1_prop } {K}
-    {
-     [
-      \seq_use:cn
-       {
-        g__uftag_struct_kids_\prop_item:cn{ g__uftag_struct_#1_prop }{num}_seq
-       }
-       {
-        \c_space_tl
-       }
-     ]
-    }
+
+\keys_define:nn { __tag / struct }
+  {
+    label .tl_set:N      = \l__tag_struct_key_label_tl,
+    stash .bool_set:N    = \l__tag_struct_elem_stash_bool,
+    tag   .code:n        = % S property
+      {%%????????? \pdfescapename??
+        \tl_set:Nx \l__tag_tmpa_tl { #1 }
+        \bool_if:NT \g__tag_check_tags_bool
+          {
+            \__tag_check_structure_tag:N \l__tag_tmpa_tl
+          }
+       \__tag_prop_gput:cnx
+         { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+         { S }
+         { /\exp_not:V\l__tag_tmpa_tl }
+      },
+    title .code:n        = % T property
+      {
+        \str_set_convert:Nnon
+          \l__tag_tmpa_str
+          { #1 }
+          { default }
+          { utf16/hex }
+        \__tag_prop_gput:cnx
+          { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+          { T }
+          { <\l__tag_tmpa_str> }
+      },
+    title-o .code:n        = % T property
+      {
+        \str_set_convert:Nnon
+          \l__tag_tmpa_str
+          { #1 }
+          { default }
+          { utf16/hex }
+        \__tag_prop_gput:cnx
+          { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+          { T }
+          { <\l__tag_tmpa_str> }
+      },
+    alttext .code:n      = % Alt property
+      {
+        \str_set_convert:Nnon
+          \l__tag_tmpa_str
+          { #1 }
+          { default }
+          { utf16/hex }
+        \__tag_prop_gput:cnx
+          { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+          { Alt }
+          { <\l__tag_tmpa_str> }
+      },
+    alttext-o .code:n      = % Alt property
+      {
+        \str_set_convert:Noon
+          \l__tag_tmpa_str
+          { #1 }
+          { default }
+          { utf16/hex }
+        \__tag_prop_gput:cnx
+          { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+          { Alt }
+          { <\l__tag_tmpa_str> }
+      },
+    actualtext .code:n  = % ActualText property
+      {
+        \str_set_convert:Nnon
+          \l__tag_tmpa_str
+          { #1 }
+          { default }
+          { utf16/hex }
+        \__tag_prop_gput:cnx
+          { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+          { ActualText }
+          { <\l__tag_tmpa_str>}
+      },
+    actualtext-o .code:n  = % ActualText property
+      {
+        \str_set_convert:Noon
+          \l__tag_tmpa_str
+          { #1 }
+          { default }
+          { utf16/hex }
+        \__tag_prop_gput:cnx
+          { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+          { ActualText }
+          { <\l__tag_tmpa_str>}
+      },
+    lang .code:n        = % Lang property
+      {
+        \__tag_prop_gput:cnx
+          { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+          { Lang }
+          { (#1) }
+      },
+    ref .code:n        = % Lang property
+      {
+        \tl_clear:N\l__tag_tmpa_tl
+        \clist_map_inline:nn {#1}
+          {
+            \tl_put_right:Nx \l__tag_tmpa_tl
+              {~\ref_value:nn{tagpdfstruct-##1}{tagstructobj} }
+          }
+        \__tag_prop_gput:cnx
+          { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+          { Ref }
+          { [\l__tag_tmpa_tl] }
+      },
+    E .code:n        = % E property
+      {
+        \str_set_convert:Nnon
+          \l__tag_tmpa_str
+          { #1 }
+          { default }
+          { utf16/hex }
+        \__tag_prop_gput:cnx
+          { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+          { E }
+          { <\l__tag_tmpa_str> }
+      },
   }
- }
 
-% this command can be used for roots and structure elements
-% #1 is a num
+\keys_define:nn { __tag / struct }
+ {
+    AF .code:n        = % T property
+      {
+        \pdf_object_if_exist:nTF {#1}
+          {
+            \__tag_prop_gput:cnx
+             { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+             { AF }
+             { \pdf_object_ref:n {#1} }
+          }
+          {
 
-\tl_new:N \l_uftag_struct_dict_content_tl
-
-\cs_new:Nn \__uftag_struct_get_dict_content:n
- {
-  \tl_set:Nn \l_uftag_struct_dict_content_tl {<<}
-  \seq_map_inline:cn
-   {
-    c__uftag_struct_\prop_item:cn{ g__uftag_struct_#1_prop }{entries}_entries_seq
-   }
-   {
-    \tl_put_right:Nx
-    \l_uftag_struct_dict_content_tl
-    {
-     \prop_if_in:cnT
-     { g__uftag_struct_#1_prop }
-     { ##1 }
+          }
+      },
+   ,AFinline .code:n =
      {
-      \c_space_tl/##1~\prop_item:cn{ g__uftag_struct_#1_prop } { ##1 }
+       \group_begin:
+       \exp_args:Ne
+       \pdf_object_if_exist:nF {__tag/fileobj\int_use:N\c at g__tag_struct_abs_int}
+        {
+          \pdffile_embed_stream:nxx
+            {#1}
+            {tag-AFfile\int_use:N\c at g__tag_struct_abs_int.txt}
+            {__tag/fileobj\int_use:N\c at g__tag_struct_abs_int}
+        }
+       \__tag_prop_gput:cnx
+         { g__tag_struct_\int_use:N\c at g__tag_struct_abs_int _prop }
+         { AF }
+         { \pdf_object_ref:e {__tag/fileobj\int_use:N\c at g__tag_struct_abs_int } }
+       \group_end:
      }
-    }
-   }
-  \tl_put_right:Nn \l_uftag_struct_dict_content_tl { >> }
- }
-
-
-% #1 is the struct num
-\cs_new:Nn \__uftag_struct_write_obj:n
- {
-  \prop_if_in:cnTF
-   { g__uftag_struct_#1_prop }
-   { objnum }
-   {
-    \__uftag_struct_fill_kid_key:n { #1 }
-    %\prop_show:c { g__uftag_struct_#1_prop }
-    \__uftag_struct_get_dict_content:n { #1 }
-    \__uftag_pdfuseobjnum:xx
-     { \prop_item:cn { g__uftag_struct_#1_prop } {objnum} }
+   ,AFinline-o .code:n =
      {
-      \l_uftag_struct_dict_content_tl
+       \group_begin:
+       \exp_args:Ne
+       \pdf_object_if_exist:nF {__tag/fileobj\int_use:N\c at g__tag_struct_abs_int}
+        {
+          \pdffile_embed_stream:oxx
+            {#1}
+            {tag-AFfile\int_use:N\c at g__tag_struct_abs_int.txt}
+            {__tag/fileobj\int_use:N\c at g__tag_struct_abs_int}
+        }
+       \__tag_prop_gput:cnx
+         { g__tag_struct_\int_use:N\c at g__tag_struct_abs_int _prop }
+         { AF }
+         { \pdf_object_ref:e {__tag/fileobj\int_use:N\c at g__tag_struct_abs_int } }
+       \group_end:
      }
-   }
-   {
-   \msg_error:nnn {uftag} { struct-no-objnum } { #1}
-   }
  }
 
-% keys for the user commands
-% should I pass the values (e.g. the tag) through an escape command?
-\keys_define:nn { uftag / struct }
- {
-  label .tl_set:N      = \l__uftag_struct_key_label_tl,
-  stash .bool_set:N    = \l__uftag_struct_elem_stash_bool,
-  tag   .code:n        = % S property
-   {%%????????? \pdfescapename??
-    \tl_set:Nx \l__uftag_tmpa_tl { #1 }
-    \bool_if:NT \g__uftag_check_tags_bool
-     {
-      \__uftag_check_structure_tag:N \l__uftag_tmpa_tl
-     }
-    \__uftag_prop_gput:cnx
-     { g__uftag_struct_\int_eval:n {\c at g__uftag_struct_abs_int}_prop }
-     { S }
-     { /\exp_not:V\l__uftag_tmpa_tl }
-   },
-  title .code:n        = % T property
-   {
-    \str_set_convert:Nnon
-     \l__uftag_tmpa_str
-     { #1 }
-     { \g__uftag_inputencoding_tl }
-     { utf16/hex }
-    \__uftag_prop_gput:cnx
-     { g__uftag_struct_\int_eval:n {\c at g__uftag_struct_abs_int}_prop }
-     { T }
-     { <\l__uftag_tmpa_str> }
-   },
-  title-o .code:n        = % T property
-   {
-    \str_set_convert:Nnon
-     \l__uftag_tmpa_str
-     { #1 }
-     { \g__uftag_inputencoding_tl }
-     { utf16/hex }
-    \__uftag_prop_gput:cnx
-     { g__uftag_struct_\int_eval:n {\c at g__uftag_struct_abs_int}_prop }
-     { T }
-     { <\l__uftag_tmpa_str> }
-   },
-  alttext .code:n      = % Alt property
-   {
-    \str_set_convert:Nnon
-     \l__uftag_tmpa_str
-     { #1 }
-     { \g__uftag_inputencoding_tl }
-     { utf16/hex }
-    \__uftag_prop_gput:cnx
-     { g__uftag_struct_\int_eval:n {\c at g__uftag_struct_abs_int}_prop }
-     { Alt }
-     { <\l__uftag_tmpa_str> }
-   },
-   alttext-o .code:n      = % Alt property
-   {
-    \str_set_convert:Noon
-     \l__uftag_tmpa_str
-     { #1 }
-     { \g__uftag_inputencoding_tl }
-     { utf16/hex }
-    \__uftag_prop_gput:cnx
-     { g__uftag_struct_\int_eval:n {\c at g__uftag_struct_abs_int}_prop }
-     { Alt }
-     { <\l__uftag_tmpa_str> }
-   },
-   actualtext .code:n  = % ActualText property
-   {
-    \str_set_convert:Nnon
-    \l__uftag_tmpa_str
-    { #1 }
-    { \g__uftag_inputencoding_tl }
-    { utf16/hex }
-    \__uftag_prop_gput:cnx
-     { g__uftag_struct_\int_eval:n {\c at g__uftag_struct_abs_int}_prop }
-     { ActualText }
-     { <\l__uftag_tmpa_str>}
-   },
-   actualtext-o .code:n  = % ActualText property
-   {
-    \str_set_convert:Noon
-    \l__uftag_tmpa_str
-    { #1 }
-    { \g__uftag_inputencoding_tl }
-    { utf16/hex }
-    \__uftag_prop_gput:cnx
-     { g__uftag_struct_\int_eval:n {\c at g__uftag_struct_abs_int}_prop }
-     { ActualText }
-     { <\l__uftag_tmpa_str>}
-   },
-}
+\cs_new_protected:Nn \tag_struct_begin:n
+  {
+    \group_begin:
+    \int_gincr:N \c at g__tag_struct_abs_int
+    \__tag_prop_new:c  { g__tag_struct_\int_eval:n { \c at g__tag_struct_abs_int }_prop }
+    \__tag_new_output_prop_handler:n {\int_eval:n { \c at g__tag_struct_abs_int }}
+    \__tag_seq_new:c  { g__tag_struct_kids_\int_eval:n { \c at g__tag_struct_abs_int }_seq}
+    %\__tag_pdfreserveobjnum:N \l_tmpa_tl
+    \exp_args:Ne
+      \pdf_object_new:nn
+        { c__tag_struct_\int_eval:n { \c at g__tag_struct_abs_int }_obj }
+        { dict }
+    \__tag_prop_gput:cnx
+      { g__tag_struct_\int_eval:n { \c at g__tag_struct_abs_int }_prop }
+      { objref}
+      {
+        \exp_args:Ne
+          \pdf_object_ref:n
+            {c__tag_struct_\int_eval:n { \c at g__tag_struct_abs_int }_obj}
+      }
+    \__tag_prop_gput:cnx
+      { g__tag_struct_\int_eval:n { \c at g__tag_struct_abs_int }_prop }
+      { num}
+      { \int_eval:n { \c at g__tag_struct_abs_int } }
+    \__tag_prop_gput:cno
+      { g__tag_struct_\int_eval:n { \c at g__tag_struct_abs_int }_prop }
+      { Type }
+      { /StructElem }
+    \__tag_prop_gput:cno
+      { g__tag_struct_\int_eval:n { \c at g__tag_struct_abs_int }_prop }
+      { entries }
+      { StructElem }
+    \keys_set:nn { __tag / struct} { #1 }
+    \__tag_check_structure_has_tag:n { \int_eval:n {\c at g__tag_struct_abs_int} }
+    \tl_if_empty:NF
+      \l__tag_struct_key_label_tl
+      {
+        \__tag_ref_label:en{tagpdfstruct-\l__tag_struct_key_label_tl}{struct}
+      }
+    %get the potential parent from the stack:
+    \seq_get:NNF
+      \g__tag_struct_stack_seq
+      \l__tag_struct_stack_parent_tmp_tl
+      {
+        \msg_error:nn { tag } { struct-faulty-nesting }
+      }
+    \seq_gpush:NV \g__tag_struct_stack_seq        \c at g__tag_struct_abs_int
+    \tl_gset:NV   \g__tag_struct_stack_current_tl \c at g__tag_struct_abs_int
+    %\seq_show:N   \g__tag_struct_stack_seq
+    \bool_if:NF
+      \l__tag_struct_elem_stash_bool
+      {%set the  parent
+        \__tag_prop_gput:cnx
+          { g__tag_struct_\int_eval:n {\c at g__tag_struct_abs_int}_prop }
+          { P }
+          {
+            \prop_item:cn
+              { g__tag_struct_\l__tag_struct_stack_parent_tmp_tl _prop}
+              { objref }
+          }
+        %record this structure as kid:
+        %\tl_show:N \g__tag_struct_stack_current_tl
+        %\tl_show:N \l__tag_struct_stack_parent_tmp_tl
+        \__tag_struct_kid_struct_gput_right:nn
+          { \l__tag_struct_stack_parent_tmp_tl }
+          { \g__tag_struct_stack_current_tl }
+        %\prop_show:c { g__tag_struct_\g__tag_struct_stack_current_tl _prop }
+        %\seq_show:c {g__tag_struct_kids_\l__tag_struct_stack_parent_tmp_tl _seq}
+      }
+    %\prop_show:c { g__tag_struct_\g__tag_struct_stack_current_tl _prop }
+    %\seq_show:c {g__tag_struct_kids_\l__tag_struct_stack_parent_tmp_tl _seq}
+    \group_end:
+  }
 
+\cs_set_eq:NN  \uftag_struct_begin:n \tag_struct_begin:n
 
-\cs_new_protected:Nn \uftag_struct_begin:n
- {
-  \group_begin:
-  \int_gincr:N \c at g__uftag_struct_abs_int
-  \__uftag_prop_new:c  { g__uftag_struct_\int_eval:n { \c at g__uftag_struct_abs_int }_prop }
-  \__uftag_new_output_prop_handler:n {\int_eval:n { \c at g__uftag_struct_abs_int }}
-  \__uftag_seq_new:c  { g__uftag_struct_kids_\int_eval:n { \c at g__uftag_struct_abs_int }_seq}
-  \__uftag_pdfreserveobjnum:N \l_tmpa_tl
-  \__uftag_prop_gput:cno
-   { g__uftag_struct_\int_eval:n { \c at g__uftag_struct_abs_int }_prop }
-   { objnum}
-   { \l_tmpa_tl }
-  \__uftag_prop_gput:cnx
-   { g__uftag_struct_\int_eval:n { \c at g__uftag_struct_abs_int }_prop }
-   { num}
-   { \int_eval:n { \c at g__uftag_struct_abs_int } }
-  \__uftag_prop_gput:cno
-   { g__uftag_struct_\int_eval:n { \c at g__uftag_struct_abs_int }_prop }
-   { Type }
-   { /StructElem }
-  \__uftag_prop_gput:cno
-   { g__uftag_struct_\int_eval:n { \c at g__uftag_struct_abs_int }_prop }
-   { entries }
-   { StructElem }
-  \keys_set:nn {uftag / struct} { #1 }
-  \__uftag_check_structure_has_tag:n { \int_eval:n {\c at g__uftag_struct_abs_int} }
-  \tl_if_empty:NF
-   {\l__uftag_struct_key_label_tl}
-   {
-     \zref at labelbylist{tagpdfstruct-\l__uftag_struct_key_label_tl}{uftagzrlstruct}
-   }
-   %get the potential parent from the stack:
-   \seq_get:NNF
-    \g__uftag_struct_stack_seq
-    \l__uftag_struct_stack_parent_tmp_tl
-    {
-     \msg_error:nn { uftag } { struct-faulty-nesting }
-    }
-   \seq_gpush:NV \g__uftag_struct_stack_seq        \c at g__uftag_struct_abs_int
-   \tl_gset:NV   \g__uftag_struct_stack_current_tl \c at g__uftag_struct_abs_int
-   %\seq_show:N   \g__uftag_struct_stack_seq
-   \bool_if:NF
-    \l__uftag_struct_elem_stash_bool
-    {%set the  parent
-     \__uftag_prop_gput:cnx
-      { g__uftag_struct_\int_eval:n {\c at g__uftag_struct_abs_int}_prop }
-      { P }
+\cs_new_protected:Nn \tag_struct_end:
+  { %take the current structure num from the stack:
+    %the objects are written later, lua mode hasn't all needed info yet
+    %\seq_show:N \g__tag_struct_stack_seq
+    \seq_gpop:NNTF \g__tag_struct_stack_seq \l_tmpa_tl
       {
-       \prop_item:cn { g__uftag_struct_\l__uftag_struct_stack_parent_tmp_tl _prop} { objnum }~0~R
+        \int_compare:nNnT {\l__tag_loglevel_int} > { 0 }
+          {
+            \__tag_check_info_closing_struct:o { \g__tag_struct_stack_current_tl }
+          }
       }
-     %record this structure as kid:
-     %\tl_show:N \g__uftag_struct_stack_current_tl
-     %\tl_show:N \l__uftag_struct_stack_parent_tmp_tl
-    \__uftag_struct_kid_struct_gput_right:nn
-     { \l__uftag_struct_stack_parent_tmp_tl }
-     { \g__uftag_struct_stack_current_tl }
-     %\prop_show:c { g__uftag_struct_\g__uftag_struct_stack_current_tl _prop }
-     %\seq_show:c {g__uftag_struct_kids_\l__uftag_struct_stack_parent_tmp_tl _seq}
-    }
-    %\prop_show:c { g__uftag_struct_\g__uftag_struct_stack_current_tl _prop }
-    %\seq_show:c {g__uftag_struct_kids_\l__uftag_struct_stack_parent_tmp_tl _seq}
-  \group_end:
- }
+      { \__tag_check_no_open_struck: }
+    % get the previous one, shouldn't be empty as the root should be there
+    \seq_get:NNTF \g__tag_struct_stack_seq \l_tmpa_tl
+      {
+        \tl_gset:NV   \g__tag_struct_stack_current_tl \l_tmpa_tl
+      }
+      {
+        \__tag_check_no_open_struck:
+      }
+  }
 
-\cs_new_protected:Nn \uftag_struct_end:
- {%take the current structure num from the stack:
-  %the objects are written later, lua mode hasn't all needed info yet
-  %\seq_show:N \g__uftag_struct_stack_seq
-  \seq_gpop:NNTF \g__uftag_struct_stack_seq \l_tmpa_tl
-   {
-    \int_compare:nNnT {\l__uftag_loglevel_int} > { 0 }
-     {
-      \__uftag_check_info_closing_struct:o { \g__uftag_struct_stack_current_tl }
-     }
-   }
-   { \__uftag_check_no_open_struck: }
-  % get the previous one, shouldn't be empty as the root should be there
-  \seq_get:NNTF \g__uftag_struct_stack_seq \l_tmpa_tl
-   {
-    \tl_gset:NV   \g__uftag_struct_stack_current_tl \l_tmpa_tl
-   }
-   {
-    \__uftag_check_no_open_struck:
-   }
- }
+\cs_set_eq:NN  \uftag_struct_end: \tag_struct_end:
 
-\cs_new_protected:Nn \uftag_struct_use:n %#1 is the label
- {
-  \prop_if_exist:cTF
-   { g__uftag_struct_\zref at extractdefault{tagpdfstruct-#1}{tagstruct}{unknown}_prop } %??????????
-   {
-    \__uftag_check_struct_used:n {#1}
-    %add the label structure as kid to the current structure (can be the root)
-    \__uftag_struct_kid_struct_gput_right:nn
-     { \g__uftag_struct_stack_current_tl }
-     { \zref at extractdefault{tagpdfstruct-#1}{tagstruct}{0} }
-     %add the current structure to the labeled one as parents
-    \__uftag_prop_gput:cnx
-     { g__uftag_struct_\zref at extractdefault{tagpdfstruct-#1}{tagstruct}{0}_prop }
-     { P }
-     {
-      \prop_item:cn { g__uftag_struct_\g__uftag_struct_stack_current_tl _prop} { objnum }~0~R
-     }
-   }
-   {\msg_warning:nnn{uftag}{struct-label-unknown}{#1}}
- }
+\cs_new_protected:Nn \tag_struct_use:n %#1 is the label
+  {
+    \prop_if_exist:cTF
+      { g__tag_struct_\__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{unknown}_prop } %??????????
+      {
+        \__tag_check_struct_used:n {#1}
+        %add the label structure as kid to the current structure (can be the root)
+        \__tag_struct_kid_struct_gput_right:nn
+          { \g__tag_struct_stack_current_tl }
+          { \__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0} }
+        %add the current structure to the labeled one as parents
+        \__tag_prop_gput:cnx
+          { g__tag_struct_\__tag_ref_value:enn{tagpdfstruct-#1}{tagstruct}{0}_prop }
+          { P }
+          {
+            \prop_item:cn
+              { g__tag_struct_\g__tag_struct_stack_current_tl _prop}
+              { objref }
+          }
+      }
+      {
+        \msg_warning:nnn{ tag }{struct-label-unknown}{#1}
+      }
+  }
 
+\cs_set_eq:NN  \uftag_struct_use:n \tag_struct_use:n
 
 %%%% Code to tag links
 %%%% this works for url, see exp-link.pdf.
 %%%% it must be checked for other links
 
-\cs_new_protected:Nn \__uftag_struct_finish_link:
-{
- \bool_if:NT \g_uftag_active_struct_bool
- {
- %get the number of the parent link structure:
- \seq_get:NNF
-    \g__uftag_struct_stack_seq
-    \l__uftag_struct_stack_parent_tmp_tl
-    {
-     \msg_error:nn { uftag } { struct-faulty-nesting }
-    }
-  %put the obj number of link annot in the kid entry:
-  \__uftag_struct_kid_link_gput_right:nx
+\cs_new_protected:Nn \__tag_struct_finish_link:
   {
-   \l__uftag_struct_stack_parent_tmp_tl
+    \bool_if:NT \g__tag_active_struct_bool
+      {
+        %get the number of the parent link structure:
+        \seq_get:NNF
+          \g__tag_struct_stack_seq
+          \l__tag_struct_stack_parent_tmp_tl
+          {
+            \msg_error:nn { tag } { struct-faulty-nesting }
+          }
+        %put the obj number of link annot in the kid entry:
+        \__tag_struct_kid_link_gput_right:nx
+          {
+            \l__tag_struct_stack_parent_tmp_tl
+          }
+          {
+            \pdfannot_link_ref_last:
+          }
+        % add the parent obj number to the parent tree:
+        \__tag_parenttree_add_objr:nn
+          {
+            \int_use:N\c at g__tag_parenttree_obj_int
+          }
+          {
+            \prop_item:cn
+              { g__tag_struct_\l__tag_struct_stack_parent_tmp_tl _prop }
+              { objref }
+          }
+        % increase the int:
+        \stepcounter{ g__tag_parenttree_obj_int }
+      }
   }
-  {
-   \int_use:N\__uftag_pdf_lastlink:
-  }
- % add the parent obj number to the parent tree:
-  \__uftag_parenttree_add_objr:nn
-  {
-   \int_use:N\c at g__uftag_parenttree_obj_int
-  }
-  {
-   \prop_item:cn{ g__uftag_struct_\l__uftag_struct_stack_parent_tmp_tl _prop }
-   { objnum }
-  }
- % increase the int:
- \stepcounter{ g__uftag_parenttree_obj_int }
- }
-}
 
-\endinput
+
+%% 
+%%
+%% End of file `tagpdf-struct-code.sty'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-tree-code.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-tree-code.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-tree-code.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,210 +1,252 @@
-\ProvidesExplPackage {tagpdf-tree-code} {2019/07/02} {0.61}
+%%
+%% This is file `tagpdf-tree-code.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf-tree.dtx  (with options: `tree')
+%% 
+%% Copyright (C) 2019 Ulrike Fischer
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    https://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: tagpdf-tree.dtx
+\ProvidesExplPackage {tagpdf-tree-code} {2021/02/23} {0.80}
  {part of tagpdf - code related to writing trees and dictionaries to the pdf}
 
-%this does the actual finishing:
-\AtBeginDocument
- {
-  \bool_if:NT \g_uftag_active_tree_bool
-   {
-    \AfterEndDocument { \uftag_finish_structure: }
-   }
- }
+\hook_gput_code:nnn{begindocument}{tagpdf}
+  {
+    \bool_if:NT \g__tag_active_tree_bool
+      {
+        \AfterEndDocument { \tag_finish_structure: }
+      }
+  }
 
 
-% the StructTreeRoot
-% we better get the object number in any case:
-\__uftag_pdfreserveobjnum:N \l_tmpa_tl
-\tl_const:Nx \c_uftag_tree_obj_structtreeroot_tl { \l_tmpa_tl }
+\pdf_object_new:nn { c__tag_struct_0_obj }{ dict }
 
+ %need to think about the best place ...
+\hook_gput_code:nnn{begindocument}{tagpdf}
+  {
+    \bool_if:NT \g__tag_active_struct_bool
+      {
+        \pdfmanagement_add:nnx
+          { Catalog }
+          { StructTreeRoot }
+          { \pdf_object_ref:n { c__tag_struct_0_obj } }
+      }
+  }
+\cs_new_protected:Nn \__tag_tree_write_structtreeroot:
+  {
+    \__tag_struct_write_obj:n { 0 }
+  }
 
-\cs_new:Nn \__uftag_tree_write_structtreeroot:
- {
-  \__uftag_pdfcatalog:n { /StructTreeRoot~\c_uftag_tree_obj_structtreeroot_tl\c_space_tl0~R }
-  \__uftag_struct_write_obj:n { 0 }
- }
+\cs_new_protected:Nn \__tag_tree_write_structelements:
+  {
+    \int_step_inline:nnnn {1}{1}{\c at g__tag_struct_abs_int}
+      {
+        %\prop_show:c {g__tag_struct_##1_prop}
+        \__tag_struct_write_obj:n { ##1 } %write the object
+      }
+  }
 
-\cs_new:Nn \__uftag_tree_write_structelements:
- {
-  \int_step_inline:nnnn {1}{1}{\c at g__uftag_struct_abs_int}
-   {
-     %\prop_show:c {g__uftag_struct_##1_prop}
-     \__uftag_struct_write_obj:n { ##1 } %write the object
-   }
- }
 
+\pdf_object_new:nn { c__tag_tree_parenttree_obj }{ dict }
 
-%the ParentTree
-\__uftag_pdfreserveobjnum:N \l_tmpa_tl
-\tl_const:Nx \c__uftag_tree_obj_parenttree_tl    { \l_tmpa_tl }
+\newcounter  { g__tag_parenttree_obj_int }
+\hook_gput_code:nnn{begindocument}{tagpdf}
+  {
+    \int_gset:Nn
+      \c at g__tag_parenttree_obj_int
+      { \__tag_ref_value_lastpage:nn{abspage}{100}  }
+  }
 
-% we have two sets of entries in the parent tree:
-% page streams and real objects.
-% The numbers must be distinct and ordered
-% So we rely on abspage and put the real objects at the end
-% I use a counter to have a chance to get the correct number
-% if code is process twice.
-\newcounter  { g__uftag_parenttree_obj_int }
-\AtBeginDocument
- { \int_gset:Nn \c at g__uftag_parenttree_obj_int
-   { \zref at extractdefault{LastPage}{abspage}{100}  }
- }
 
-% we need to record the obj references:
+\tl_new:N \g__tag_parenttree_objr_tl
 
-\tl_new:N \g__uftag_parenttree_objr_tl
-
-\cs_new:Nn \__uftag_parenttree_add_objr:nn %#1 Structparent number, #2 obj number
-{
- \tl_gput_right:Nx \g__uftag_parenttree_objr_tl
+\cs_new_protected:Nn \__tag_parenttree_add_objr:nn %#1 Structparent number, #2 objref
   {
-   #1 \c_space_tl #2\c_space_tl 0 \c_space_tl R\c_space_tl ^^J
+    \tl_gput_right:Nx \g__tag_parenttree_objr_tl
+      {
+        #1 \c_space_tl #2 ^^J
+      }
   }
-}
 
-\tl_new:N \l__uftag_parenttree_content_tl
+\tl_new:N \l__tag_parenttree_content_tl
 
-\cs_new:Nn \__uftag_tree_fill_parenttree:
- {
-  \int_step_inline:nnnn{1}{1}{\zref at extractdefault{LastPage}{abspage}{-1}} %not quite clear if labels are needed. See lua code
-  { %page ##1\par
-   \prop_clear:N \l_tmpa_prop
-   \int_step_inline:nnnn{1}{1}{\zref at extractdefault{LastPage}{tagmcabs}{-1}}
-   {
-    %mcid####1
-    \int_compare:nT%F
-     {\zref at extractdefault{mcid-####1}{tagabspage}{-1}=##1} %mcid is on current page
-     {% yes\par
-      \prop_put:Nxx \l_tmpa_prop
-      {\zref at extractdefault{mcid-####1}{tagmcid}{-1}}
-      {\prop_item:Nn \g__uftag_mc_parenttree_prop {####1}}
-     }
-   }
-   %\prop_show:N \l_tmpa_prop
-   \tl_put_right:Nx\l__uftag_parenttree_content_tl
-      {\int_eval:n {##1-1}\c_space_tl[\c_space_tl} %%brackt
-   \int_step_inline:nnnn {0}{1}{ \prop_map_function:NN \l_tmpa_prop\__uftag_prop_count:nn -1 }
-    {
-     \prop_get:NnNTF \l_tmpa_prop {####1} \l_tmpb_tl
-     {% page#1:mcid##1:\l_tmpb_tl :content
-       \tl_put_right:Nx \l__uftag_parenttree_content_tl
-        {
-         \prop_item:cn { g__uftag_struct_\l_tmpb_tl _prop } {objnum}~0~R~
-        }
-     }
-     {\msg_warning:nn {uftag} {tree-mcid-index-wrong} }
-    }
-   \tl_put_right:Nn \l__uftag_parenttree_content_tl {]^^J} %
+\cs_new_protected:Nn \__tag_tree_fill_parenttree:
+  {
+    \int_step_inline:nnnn{1}{1}{\__tag_ref_value_lastpage:nn{abspage}{-1}} %not quite clear if labels are needed. See lua code
+      { %page ##1\par
+        \prop_clear:N \l_tmpa_prop
+        \int_step_inline:nnnn{1}{1}{\__tag_ref_value_lastpage:nn{tagmcabs}{-1}}
+          {
+            %mcid####1
+            \int_compare:nT%F
+              {\__tag_ref_value:enn{mcid-####1}{tagabspage}{-1}=##1} %mcid is on current page
+              {% yes\par
+                \prop_put:Nxx
+                  \l_tmpa_prop
+                  {\__tag_ref_value:enn{mcid-####1}{tagmcid}{-1}}
+                  {\prop_item:Nn \g__tag_mc_parenttree_prop {####1}}
+              }
+          }
+          %\prop_show:N \l_tmpa_prop
+        \tl_put_right:Nx\l__tag_parenttree_content_tl
+          {
+            \int_eval:n {##1-1}\c_space_tl
+            [\c_space_tl %]
+          }
+        \int_step_inline:nnnn
+          {0}
+          {1}
+          { \prop_map_function:NN \l_tmpa_prop\__tag_prop_count:nn -1 }
+          {
+            \prop_get:NnNTF \l_tmpa_prop {####1} \l_tmpb_tl
+              {% page#1:mcid##1:\l_tmpb_tl :content
+                \tl_put_right:Nx \l__tag_parenttree_content_tl
+                  {
+                    \prop_item:cn { g__tag_struct_\l_tmpb_tl _prop } {objref}
+                    \c_space_tl
+                  }
+                %\tl_show:N \l__tag_parenttree_content_tl
+              }
+              {
+                \msg_warning:nn { tag } {tree-mcid-index-wrong}
+              }
+          }
+        \tl_put_right:Nn
+          \l__tag_parenttree_content_tl
+          {%[
+            ]^^J
+          }
+      }
   }
- }
 
-%lua mode must/can do it differently
-\cs_new:Nn \__uftag_tree_lua_fill_parenttree:
- {
-  \tl_set:Nn \l__uftag_parenttree_content_tl
-   {
-    \directlua{uftag.func.output_parenttree(\int_use:N\g__uftag_abspage_int)}
-   }
- }
+\cs_new_protected:Nn \__tag_tree_lua_fill_parenttree:
+  {
+    \tl_set:Nn \l__tag_parenttree_content_tl
+      {
+        \directlua
+          {
+            ltx.__tag.func.output_parenttree
+              (
+                \int_use:N\g_shipout_readonly_int
+              )
+          }
+      }
+  }
 
+\cs_new_protected:Nn \__tag_tree_write_parenttree:
+  {
+    \bool_if:NTF \g__tag_mode_lua_bool
+      {
+        \__tag_tree_lua_fill_parenttree:
+      }
+      {
+        \__tag_tree_fill_parenttree:
+      }
+    \tl_put_right:NV \l__tag_parenttree_content_tl\g__tag_parenttree_objr_tl
+    \pdf_object_write:nx  { c__tag_tree_parenttree_obj }
+      {
+        /Nums\c_space_tl [\l__tag_parenttree_content_tl]
+      }
+  }
 
 
-\cs_new:Nn \__uftag_tree_write_parenttree:
- {
-  \bool_if:NTF \g__uftag_mode_lua_bool
-   {
-    \__uftag_tree_lua_fill_parenttree:
-   }
-   {
-    \__uftag_tree_fill_parenttree:
-   }
-  \tl_put_right:NV \l__uftag_parenttree_content_tl\g__uftag_parenttree_objr_tl
-  \__uftag_pdfuseobjnum:xx  { \c__uftag_tree_obj_parenttree_tl }
-   {
-    <<\c_space_tl/Nums\c_space_tl [\l__uftag_parenttree_content_tl] \c_space_tl >>
-   }
- }
+\pdf_object_new:nn { c__tag_tree_rolemap_obj }{ dict }
 
-%the Rolemap tree
-\__uftag_pdfreserveobjnum:N \l_tmpa_tl
-\tl_const:Nx \c__uftag_tree_obj_rolemap_tl { \l_tmpa_tl }
-\tl_new:N \l__uftag_rolemap_content_tl
+\tl_new:N \l__tag_rolemap_content_tl
 
-\cs_new:Nn \__uftag_tree_fill_rolemap:
- {
-  \prop_map_inline:Nn \g__uftag_role_rolemap_prop
-   {
-    \tl_put_right:Nx \l__uftag_rolemap_content_tl
-     {
-      /##1\c_space_tl/##2^^J
-     }
-   }
- }
+\cs_new_protected:Nn \__tag_tree_fill_rolemap:
+  {
+    \prop_map_inline:Nn \g__tag_role_rolemap_prop
+      {
+        \tl_put_right:Nx \l__tag_rolemap_content_tl
+          {
+            /##1\c_space_tl/##2^^J
+          }
+      }
+  }
 
-\cs_new:Nn \__uftag_tree_write_rolemap:
- {
-  \__uftag_tree_fill_rolemap:
-  \__uftag_pdfuseobjnum:xx  { \c__uftag_tree_obj_rolemap_tl }
-   {
-    <<\l__uftag_rolemap_content_tl >>
-   }
- }
+\cs_new_protected:Nn \__tag_tree_write_rolemap:
+  {
+    \__tag_tree_fill_rolemap:
+    \pdf_object_write:nx  { c__tag_tree_rolemap_obj }
+      {
+        \l__tag_rolemap_content_tl
+      }
+  }
 
-%classmap, should only be written, if values has been used
 
-\cs_new_protected:Nn \__uftag_tree_class_write_map:
- {
-  \tl_gclear:N \g__uftag_attr_class_content_tl
-  \seq_gremove_duplicates:N \g__uftag_attr_class_used_seq
-  \seq_set_map:NNn \l_tmpa_seq \g__uftag_attr_class_used_seq
-   {
-     /##1\c_space_tl
-     \prop_item:Nn \g__uftag_attr_entries_prop
-       {##1}
-   }
-  \tl_gset:Nx \g__uftag_attr_class_content_tl
-   {
-    \seq_use:Nn \l_tmpa_seq
-     { \iow_newline: }
-   }
-  \tl_if_empty:NF \g__uftag_attr_class_content_tl
+\cs_new_protected:Nn \__tag_tree_write_classmap:
   {
-   \__uftag_pdfreserveobjnum:N \l_tmpa_tl
-   \tl_const:Nx \c__uftag_tree_obj_classmap_tl { \l_tmpa_tl }
-   \__uftag_pdfuseobjnum:Nx \c__uftag_tree_obj_classmap_tl
-   { <<\g__uftag_attr_class_content_tl>> }
+    \tl_gclear:N \g__tag_attr_class_content_tl
+    \seq_gremove_duplicates:N \g__tag_attr_class_used_seq
+    \seq_set_map:NNn \l_tmpa_seq \g__tag_attr_class_used_seq
+      {
+        /##1\c_space_tl
+        <<
+          \prop_item:Nn
+            \g__tag_attr_entries_prop
+            {##1}
+        >>
+      }
+    \tl_gset:Nx \g__tag_attr_class_content_tl
+      {
+        \seq_use:Nn
+          \l_tmpa_seq
+          { \iow_newline: }
+      }
+    \tl_if_empty:NF
+      \g__tag_attr_class_content_tl
+      {
+        \pdf_object_new:nn { c__tag_tree_classmap_obj }{ dict }
+     %   \__tag_pdfreserveobjnum:N \l_tmpa_tl
+     %   \tl_const:Nx \c__tag_tree_obj_classmap_tl { \l_tmpa_tl }
+        \pdf_object_write:nx
+          { c__tag_tree_classmap_obj }
+          { \g__tag_attr_class_content_tl }
+        \__tag_prop_gput:cnx
+          { g__tag_struct_0_prop }
+          { ClassMap }
+          { \pdf_object_ref:n { c__tag_tree_classmap_obj }  }
+      }
+  }
 
-   \__uftag_prop_gput:cnx
-    { g__uftag_struct_0_prop }
-    { ClassMap }
-    { \c__uftag_tree_obj_classmap_tl\c_space_tl0\c_space_tl R  }
+\cs_new_protected:Nn \tag_finish_structure:
+  {
+    \__tag_tree_write_parenttree:
+    \__tag_tree_write_rolemap:
+    \__tag_tree_write_classmap:
+    \__tag_tree_write_structelements: %this is rather slow!!
+    \__tag_tree_write_structtreeroot:
   }
- }
 
+\cs_set_eq:NN \uftag_finish_structure: \tag_finish_structure:
 
-\cs_new:Nn \uftag_finish_structure:
- {
-  \__uftag_pdfcatalog:n {^^J/MarkInfo\c_space_tl<</Marked\c_space_tl true>> }
-  \__uftag_tree_write_parenttree:
-  \__uftag_tree_write_rolemap:
-  \__uftag_tree_class_write_map:
-  \__uftag_tree_write_structelements:
-  \__uftag_tree_write_structtreeroot:
- }
+\hook_gput_code:nnn{begindocument}{tagpdf}
+  {
+    \bool_if:NT\g__tag_active_tree_bool
+      {
+       \hook_gput_code:nnn{shipout/before} { tagpdf/structparents }
+         {
+             \pdfmanagement_add:nnx
+               { Page }
+               {StructParents}
+               {\int_eval:n { \g_shipout_readonly_int}}
+         }
+      }
+  }
 
-
-%StructParents + tabs order. Tabs order should be probably be changeable by page.
-
-\cs_new:Nn \__uftag_tree_write_pageattr:
- {
-  \__uftag_get_pdfpageattr:N \l_tmpa_tl
-  \regex_replace_once:nnN {/StructParents\s*\d+} {}\l_tmpa_tl
-  \regex_replace_once:nnN {/Tabs\s*/[SCR]} {}\l_tmpa_tl
-  \__uftag_gset_pdfpageattr:x
-   {
-    \l_tmpa_tl / StructParents \c_space_tl
-    \int_eval:n { \g__uftag_abspage_int }
-    \l__uftag_tree_tabs_order_tl
-   }
- }
-
-\endinput
+%% 
+%%
+%% End of file `tagpdf-tree-code.sty'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-user.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-user.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf-user.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,102 +1,171 @@
-\ProvidesExplPackage {tagpdf-user} {2019/07/02} {0.61}
+%%
+%% This is file `tagpdf-user.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf.dtx  (with options: `user')
+%% 
+%% Copyright (C) 2019 Ulrike Fischer
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    https://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: tagpdf.dtx
+\ProvidesExplPackage {tagpdf-user} {2021/02/23} {0.80}
   {tagpdf - user commands}
 
 \NewDocumentCommand \tagpdfsetup { m }
- {
-  \keys_set:nn { uftag / setup } { #1 }
- }
+  {
+    \keys_set:nn { __tag / setup } { #1 }
+  }
 
 \cs_set_eq:NN\tagpdfifluatexTF \sys_if_engine_luatex:TF
 \cs_set_eq:NN\tagpdfifluatexT  \sys_if_engine_luatex:T
 \cs_set_eq:NN\tagpdfifpdftexT  \sys_if_engine_pdftex:T
 
+%%% stop tagging
+\bool_new:N \l__tag_stop_bool
+
+\prg_new_conditional:Nnn \__tag_if_stop: {p,T,F,TF}
+  {
+    \bool_if:NTF \l__tag_stop_bool
+      { \prg_return_true:  }
+      { \prg_return_false: }
+  }
+
+\prg_new_eq_conditional:NNn \tag_if_stop: \__tag_if_stop: {p,T,F,TF}
+
+\cs_new_protected:Npn \__tag_stop:
+  {
+    \bool_set_true:N \l__tag_stop_bool
+    \cs_set_eq:NN \tag_mc_begin:n     \use_none:n
+    \cs_set_eq:NN \tag_mc_end:        \prg_do_nothing:
+    \cs_set_eq:NN \tag_mc_use:n       \use_none:n
+    \cs_set_eq:NN \tag_struct_begin:n \use_none:n
+    \cs_set_eq:NN \tag_struct_end:    \prg_do_nothing:
+    \cs_set_eq:NN \tag_struct_use:n   \use_none:n
+    %deprecated
+    \cs_set_eq:NN \uftag_mc_begin:n \tag_mc_begin:n
+    \cs_set_eq:NN \uftag_mc_end:    \tag_mc_end:
+    \cs_set_eq:NN \uftag_mc_use:n \tag_mc_use:n
+    \cs_set_eq:NN \uftag_struct_begin:n \tag_struct_begin:n
+    \cs_set_eq:NN \uftag_struct_end: \tag_struct_end:
+    \cs_set_eq:NN  \uftag_struct_use:n \tag_struct_use:n
+  }
+
+\cs_new_protected:Npn \tag_stop_group_begin:
+  {
+    \group_begin:
+    \__tag_stop:
+  }
+
+\cs_set_eq:NN \tag_stop_group_end: \group_end:
+
 %%% a generic command to retrieve data
 
-\cs_new:Npn \tagpdfget #1 { \uftag_get:n { #1} }
-\cs_new:Npn \uftag_get:n #1 { \use:c {__uftag_get_data_#1: } }
+\cs_new:Npn \tagpdfget #1   { \use:c {__tag_get_data_#1: } }
+\cs_new:Npn \tag_get:n #1   { \use:c {__tag_get_data_#1: } }
+\cs_new:Npn \uftag_get:n #1 { \use:c {__tag_get_data_#1: } }
 
-
 %%%% mc related user commands
 \NewDocumentCommand \tagmcifinTF { m m }
+  {
+    \__tag_mc_if_in:TF { #1 } { #2 }
+  }
+
+\NewDocumentEnvironment{tagmcartifact}{m}
  {
-  \__uftag_mc_if_in:TF { #1 } { #2 }
+  \tag_mc_artifact_group_begin:n { #1}\ignorespaces
  }
-
-\NewDocumentCommand \tagmcbegin { m }
  {
-  \uftag_mc_begin:n {#1}\ignorespaces
+  \tag_mc_artifact_group_end:
  }
 
+\NewDocumentCommand \tagmcbegin { m }
+  {
+    \tag_mc_begin:n {#1}\ignorespaces
+  }
 
 \NewDocumentCommand \tagmcend {  }
- {
-  \unskip % this unskip appears to mess up some spacing; can we do this in another way?
-  \uftag_mc_end:
- }
+  {
+    \unskip % this unskip appears to mess up some spacing; can we do this in another way?
+    \tag_mc_end:
+  }
 
 \NewDocumentCommand \tagmcuse { m }
- {
-  \uftag_mc_use:n {#1}
- }
+  {
+    \tag_mc_use:n {#1}
+  }
 
-
 %%%% structure related commands
 
 \NewDocumentCommand \tagstructbegin { m }
- {
-  \uftag_struct_begin:n {#1}
- }
+  {
+    \tag_struct_begin:n {#1}
+  }
 
 \NewDocumentCommand \tagstructend {  }
- {
-  \uftag_struct_end:
- }
+  {
+   \tag_struct_end:
+  }
 
 \NewDocumentCommand \tagstructuse { m }
- {
-  \uftag_struct_use:n {#1}
- }
+  {
+    \tag_struct_use:n {#1}
+  }
 
-
-
 %%%% debug/show commands
-\NewDocumentCommand\showtagpdfmcdata { O {\__uftag_get_mc_abs_cnt:} }
- {
-  \bool_if:NT \g__uftag_mode_lua_bool
-   {
-    \sys_if_engine_luatex:T
-     {
-      \directlua{uftag.trace.show_all_mc_data(#1)}
-     }
-   }
- }
+\NewDocumentCommand\showtagpdfmcdata { O {\__tag_tag_get_mc_abs_cnt:} }
+  {
+    \bool_if:NT \g__tag_mode_lua_bool
+      {
+        \sys_if_engine_luatex:T
+          {
+            \directlua{ltx.__tag.trace.show_all_mc_data(#1)}
+          }
+      }
+  }
 
 \NewDocumentCommand\showtagpdfattributes { }
- {
-  \bool_if:NT \g__uftag_mode_lua_bool
-   {
-    \sys_if_engine_luatex:T
-     {
-      \directlua
-       {
-        uftag.trace.log(
-        "showtagpdfattributes: MC=>abscnt=\__uftag_get_mc_abs_cnt:=>attr=\the\l__uftag_mc_cnt_attr=>tag=" ..
-        tostring(uftag.func.get_tag_from (\the\l__uftag_mc_type_attr)) ..
-        "=\the\l__uftag_mc_type_attr",0
-        )
-       }
-      \ignorespaces
-     }
+  {
+    \bool_if:NT \g__tag_mode_lua_bool
+      {
+        \sys_if_engine_luatex:T
+          {
+            \directlua
+              {
+                ltx.__tag.trace.log
+                 (
+                   "showtagpdfattributes:
+                    MC=>abscnt=\__tag_get_mc_abs_cnt:
+                    =>attr=\the\l__tag_mc_cnt_attr=>tag="
+                    ..
+                    tostring(ltx.__tag.func.get_tag_from (\the\l__tag_mc_type_attr))
+                    ..
+                    "=\the\l__tag_mc_type_attr",0
+                 )
+             }
+            \ignorespaces
+          }
+      }
    }
- }
 
 \sys_if_engine_luatex:T
-{
-  \NewDocumentCommand\pdffakespace { }
   {
-   \__uftag_fakespace:
+    \NewDocumentCommand\pdffakespace { }
+      {
+        \__tag_fakespace:
+      }
   }
-}
 
-
-\endinput
+%% 
+%%
+%% End of file `tagpdf-user.sty'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf.lua
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf.lua	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf.lua	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,10 +1,31 @@
+-- 
+--  This is file `tagpdf.lua',
+--  generated with the docstrip utility.
+-- 
+--  The original source files were:
+-- 
+--  tagpdf-backend.dtx  (with options: `lua')
+--  
+--  Copyright (C) 2019 Ulrike Fischer
+--  
+--  It may be distributed and/or modified under the conditions of
+--  the LaTeX Project Public License (LPPL), either version 1.3c of
+--  this license or (at your option) any later version.  The latest
+--  version of this license is in the file:
+--  
+--     https://www.latex-project.org/lppl.txt
+--  
+--  This file is part of the "tagpdf bundle" (The Work in LPPL)
+--  and all files in that bundle must be distributed together.
+--  
+--  File: tagpdf-backend.dtx
 -- tagpdf.lua
 -- Ulrike Fischer
 
-local ProvidesLuaModule = { 
+local ProvidesLuaModule = {
     name          = "tagpdf",
-    version       = "0.61",       --TAGVERSION
-    date          = "2019-07-02", --TAGDATE
+    version       = "0.80",       --TAGVERSION
+    date          = "2021-02-23", --TAGDATE
     description   = "tagpdf lua code",
     license       = "The LATEX Project Public License 1.3c"
 }
@@ -11,7 +32,7 @@
 
 if luatexbase and luatexbase.provides_module then
   luatexbase.provides_module (ProvidesLuaModule)
-end  
+end
 
 --[[
 The code has quite probably a number of problems
@@ -19,60 +40,58 @@
  - the naming is not always consistent due to the development of the code
  - the traversing of the shipout box must be tested with more complicated setups
  - it should probably handle more node types
- - 
+ -
 --]]
 
-
-
 --[[
-the main table is named uftag. It contains the functions and also the data
+the main table is named ltx.__tag. It contains the functions and also the data
 collected during the compilation.
 
-uftag.mc     will contain mc connected data.
-uftag.struct will contain structure related data.
-uftag.page   will contain page data
-uftag.tables contains also data from mc and struct (from older code). This needs cleaning up. 
+ltx.__tag.mc     will contain mc connected data.
+ltx.__tag.struct will contain structure related data.
+ltx.__tag.page   will contain page data
+ltx.__tag.tables contains also data from mc and struct (from older code). This needs cleaning up.
              There are certainly dublettes, but I don't dare yet ...
-uftag.func   will contain (public) functions. 
-uftag.trace  will contain tracing/loging functions.
+ltx.__tag.func   will contain (public) functions.
+ltx.__tag.trace  will contain tracing/loging functions.
 local funktions starts with __
+functions meant for users will be in ltx.tag
 
 functions
- uftag.func.get_num_from (tag):    takes a tag (string) and returns the id number
- uftag.func.output_num_from (tag): takes a tag (string) and prints (to tex) the id number
- uftag.func.get_tag_from (num):    takes a num and returns the tag
- uftag.func.output_tag_from (num): takes a num and prints (to tex) the tag
- uftag.func.store_mc_data (num,key,data): stores key=data in uftag.mc[num] 
- uftag.func.store_mc_label (label,num): stores label=num in uftag.mc.labels
- uftag.func.store_mc_kid (mcnum,kid,page): stores the mc-kids of mcnum on page page
- uftag.func.store_mc_in_page(mcnum,mcpagecnt,page): stores in the page table the number of mcnum on this page
- uftag.func.store_struct_mcabs (structnum,mcnum): stores relations structnum<->mcnum (abs)
- uftag.func.mc_insert_kids (mcnum): inserts the /K entries for mcnum by wandering throught the [kids] table
- uftag.func.mark_page_elements(box,mcpagecnt,mccntprev,mcopen,name,mctypeprev) : the main function 
- uftag.func.mark_shipout (): a wrapper around the core function which inserts the last EMC
- uftag.func.fill_parent_tree_line (page): outputs the entries of the parenttree for this page
- uftag.func.output_parenttree(): outputs the content of the parenttree
- uftag.func.markspaceon(), uftag.func.markspaceoff(): (de)activates the marking of positions for space chars
- uftag.trace.show_mc_data (num): shows uftag.mc[num] 
- uftag.trace.show_all_mc_data (max): shows a maximum about mc's
- uftag.trace.show_seq: shows a sequence (array)
- uftag.trace.show_struct_data (num): shows data of structure num
- uftag.trace.show_prop: shows a prop 
- uftag.trace.log
- uftag.trace.showspaces : boolean
+ ltx.__tag.func.get_num_from (tag):    takes a tag (string) and returns the id number
+ ltx.__tag.func.output_num_from (tag): takes a tag (string) and prints (to tex) the id number
+ ltx.__tag.func.get_tag_from (num):    takes a num and returns the tag
+ ltx.__tag.func.output_tag_from (num): takes a num and prints (to tex) the tag
+ ltx.__tag.func.store_mc_data (num,key,data): stores key=data in ltx.__tag.mc[num]
+ ltx.__tag.func.store_mc_label (label,num): stores label=num in ltx.__tag.mc.labels
+ ltx.__tag.func.store_mc_kid (mcnum,kid,page): stores the mc-kids of mcnum on page page
+ ltx.__tag.func.store_mc_in_page(mcnum,mcpagecnt,page): stores in the page table the number of mcnum on this page
+ ltx.__tag.func.store_struct_mcabs (structnum,mcnum): stores relations structnum<->mcnum (abs)
+ ltx.__tag.func.mc_insert_kids (mcnum): inserts the /K entries for mcnum by wandering throught the [kids] table
+ ltx.__tag.func.mark_page_elements(box,mcpagecnt,mccntprev,mcopen,name,mctypeprev) : the main function
+ ltx.__tag.func.mark_shipout (): a wrapper around the core function which inserts the last EMC
+ ltx.__tag.func.fill_parent_tree_line (page): outputs the entries of the parenttree for this page
+ ltx.__tag.func.output_parenttree(): outputs the content of the parenttree
+ ltx.__tag.func.markspaceon(), ltx.__tag.func.markspaceoff(): (de)activates the marking of positions for space chars
+ ltx.__tag.trace.show_mc_data (num): shows ltx.__tag.mc[num]
+ ltx.__tag.trace.show_all_mc_data (max): shows a maximum about mc's
+ ltx.__tag.trace.show_seq: shows a sequence (array)
+ ltx.__tag.trace.show_struct_data (num): shows data of structure num
+ ltx.__tag.trace.show_prop: shows a prop
+ ltx.__tag.trace.log
+ ltx.__tag.trace.showspaces : boolean
 --]]
 
-local mctypeattributeid       = luatexbase.registernumber ("l__uftag_mc_type_attr")
-local mccntattributeid        = luatexbase.registernumber ("l__uftag_mc_cnt_attr")
-local iwspaceattributeid = luatexbase.registernumber ("g__uftag_interwordspace_attr")
-local iwfontattributeid = luatexbase.registernumber ("g__uftag_interwordfont_attr")
+local mctypeattributeid       = luatexbase.registernumber ("l__tag_mc_type_attr")
+local mccntattributeid        = luatexbase.registernumber ("l__tag_mc_cnt_attr")
+local iwspaceattributeid = luatexbase.registernumber ("g__tag_interwordspace_attr")
+local iwfontattributeid = luatexbase.registernumber ("g__tag_interwordfont_attr")
 
-
 local catlatex       = luatexbase.registernumber("catcodetable at latex")
-local tagunmarkedbool= token.create("g__uftag_tagunmarked_bool")
-local truebool       = token.create("c_true_bool") 
+local tagunmarkedbool= token.create("g__tag_tagunmarked_bool")
+local truebool       = token.create("c_true_bool")
 
-local tableinsert    = table.insert 
+local tableinsert    = table.insert
 
 -- not all needed, copied from lua-visual-debug.
 local nodeid           = node.id
@@ -87,7 +106,7 @@
 local nodetraverse     = node.traverse
 local nodeinsertafter  = node.insert_after
 local nodeinsertbefore = node.insert_before
-local pdfpageref       = pdf.pageref 
+local pdfpageref       = pdf.pageref
 
 local HLIST          = node.id("hlist")
 local VLIST          = node.id("vlist")
@@ -100,46 +119,43 @@
 local LOCAL_PAR      = node.id("local_par")
 local MATH           = node.id("math")
 
-local function __uftag_get_mathsubtype  (mathnode)
+local function __tag_get_mathsubtype  (mathnode)
  if mathnode.subtype == 0 then
   subtype = "beginmath"
- else 
+ else
   subtype = "endmath"
- end  
+ end
  return subtype
-end 
+end
 
-
-
-uftag                = uftag        or { }
-uftag.mc             = uftag.mc     or  { } -- mc data
-uftag.struct         = uftag.struct or  { } -- struct data
-uftag.tables         = uftag.tables or  { } -- tables created with new prop and new seq. 
+ltx             = ltx        or { }
+ltx.__tag          = ltx.__tag        or { }
+ltx.__tag.mc             = ltx.__tag.mc     or  { } -- mc data
+ltx.__tag.struct         = ltx.__tag.struct or  { } -- struct data
+ltx.__tag.tables         = ltx.__tag.tables or  { } -- tables created with new prop and new seq.
                                             -- wasn't a so great idea ...
-uftag.page           = uftag.page   or  { } -- page data, currently only i->{0->mcnum,1->mcnum,...}  
-uftag.trace          = uftag.trace  or  { } -- show commands
-uftag.func           = uftag.func   or  { } -- functions 
-uftag.conf           = uftag.conf   or  { } -- configuration variables
+ltx.__tag.page           = ltx.__tag.page   or  { } -- page data, currently only i->{0->mcnum,1->mcnum,...}
+ltx.__tag.trace          = ltx.__tag.trace  or  { } -- show commands
+ltx.__tag.func           = ltx.__tag.func   or  { } -- functions
+ltx.__tag.conf           = ltx.__tag.conf   or  { } -- configuration variables
 
-local __uftag_log = 
+local __tag_log =
  function (message,loglevel)
-  if (loglevel or 3) <= tex.count["l__uftag_loglevel_int"] then
+  if (loglevel or 3) <= tex.count["l__tag_loglevel_int"] then
    texio.write_nl("tagpdf: ".. message)
   end
- end 
+ end
 
-uftag.trace.log = __uftag_log
+ltx.__tag.trace.log = __tag_log
 
-
-local __uftag_get_mc_cnt_type_tag = function (n)
+local __tag_get_mc_cnt_type_tag = function (n)
   local mccnt      =  nodegetattribute(n,mccntattributeid)  or -1
   local mctype     =  nodegetattribute(n,mctypeattributeid)  or -1
-  local tag        =  uftag.func.get_tag_from(mctype)
+  local tag        =  ltx.__tag.func.get_tag_from(mctype)
   return mccnt,mctype,tag
 end
 
-
-local function __uftag_insert_emc_node (head,current)
+local function __tag_insert_emc_node (head,current)
  local emcnode = nodenew("whatsit","pdf_literal")
        emcnode.data = "EMC"
        emcnode.mode=1
@@ -147,8 +163,7 @@
  return head
 end
 
-
-local function __uftag_insert_bmc_node (head,current,tag)
+local function __tag_insert_bmc_node (head,current,tag)
  local bmcnode = nodenew("whatsit","pdf_literal")
        bmcnode.data = "/"..tag.." BMC"
        bmcnode.mode=1
@@ -156,7 +171,7 @@
  return head
 end
 
-local function __uftag_insert_bdc_node (head,current,tag,dict)
+local function __tag_insert_bdc_node (head,current,tag,dict)
  local bdcnode = nodenew("whatsit","pdf_literal")
        bdcnode.data = "/"..tag.."<<"..dict..">> BDC"
        bdcnode.mode=1
@@ -165,9 +180,9 @@
 end
 
 -- this is for debugging the space chars
-local function __uftag_show_spacemark (head,current,color,height)
+local function __tag_show_spacemark (head,current,color,height)
  local markcolor = color or "1 0 0"
- local markheight = height or 10 
+ local markheight = height or 10
  local pdfstring = node.new("whatsit","pdf_literal")
        pdfstring.data =
        string.format("q "..markcolor.." RG "..markcolor.." rg 0.4 w 0 %g m 0 %g l S Q",-3,markheight)
@@ -177,9 +192,9 @@
 
 --[[ a function to mark up places where real space chars should be inserted
      it only sets an attribute.
---]]    
+--]]
 
-local function __uftag_mark_spaces (head)
+local function __tag_mark_spaces (head)
   local inside_math = false
   for n in nodetraverse(head) do
     local id = n.id
@@ -190,31 +205,31 @@
       then
         nodesetattribute(glyph.next,iwspaceattributeid,1)
         nodesetattribute(glyph.next,iwfontattributeid,glyph.font)
-      -- for debugging  
-       if uftag.trace.showspaces then 
-        __uftag_show_spacemark (head,glyph)
-       end 
+      -- for debugging
+       if ltx.__tag.trace.showspaces then
+        __tag_show_spacemark (head,glyph)
+       end
       elseif glyph.next and (glyph.next.id==KERN) and not inside_math then
        local kern = glyph.next
-       if kern.next and (kern.next.id== GLUE)  and (kern.next.width >0) 
+       if kern.next and (kern.next.id== GLUE)  and (kern.next.width >0)
        then
         nodesetattribute(kern.next,iwspaceattributeid,1)
         nodesetattribute(kern.next,iwfontattributeid,glyph.font)
-       end 
+       end
       end
     elseif id == PENALTY then
       local glyph = n
-      -- uftag.trace.log ("PENALTY ".. n.subtype.."VALUE"..n.penalty,3) 
+      -- ltx.__tag.trace.log ("PENALTY ".. n.subtype.."VALUE"..n.penalty,3)
       if glyph.next and (glyph.next.id == GLUE)
         and not inside_math  and (glyph.next.width >0) and n.subtype==0
       then
         nodesetattribute(glyph.next,iwspaceattributeid,1)
       --  nodesetattribute(glyph.next,iwfontattributeid,glyph.font)
-      -- for debugging  
-       if uftag.trace.showspaces then 
-        __uftag_show_spacemark (head,glyph)
-       end 
-      end 
+      -- for debugging
+       if ltx.__tag.trace.showspaces then
+        __tag_show_spacemark (head,glyph)
+       end
+      end
     elseif id == MATH then
       inside_math = (n.subtype == 0)
     end
@@ -222,16 +237,16 @@
   return head
 end
 
-local function __uftag_activate_mark_space ()
+local function __tag_activate_mark_space ()
  if not luatexbase.in_callback ("pre_linebreak_filter","markspaces") then
-  luatexbase.add_to_callback("pre_linebreak_filter",__uftag_mark_spaces,"markspaces")
-  luatexbase.add_to_callback("hpack_filter",__uftag_mark_spaces,"markspaces")
- end 
+  luatexbase.add_to_callback("pre_linebreak_filter",__tag_mark_spaces,"markspaces")
+  luatexbase.add_to_callback("hpack_filter",__tag_mark_spaces,"markspaces")
+ end
 end
 
-uftag.func.markspaceon=__uftag_activate_mark_space
+ltx.__tag.func.markspaceon=__tag_activate_mark_space
 
-local function __uftag_deactivate_mark_space ()
+local function __tag_deactivate_mark_space ()
  if luatexbase.in_callback ("pre_linebreak_filter","markspaces") then
  luatexbase.remove_from_callback("pre_linebreak_filter","markspaces")
  luatexbase.remove_from_callback("hpack_filter","markspaces")
@@ -238,7 +253,7 @@
  end
 end
 --
-uftag.func.markspaceoff=__uftag_deactivate_mark_space
+ltx.__tag.func.markspaceoff=__tag_deactivate_mark_space
 
 local default_space_char = node.new(GLYPH)
 local default_fontid     = font.id("TU/lmr/m/n/10")
@@ -245,7 +260,7 @@
 default_space_char.char  = 32
 default_space_char.font  = default_fontid
 
-local function __uftag_insert_space_char (head,n,fontid)
+local function __tag_insert_space_char (head,n,fontid)
  if luaotfload.aux.slot_of_name(fontid,"space") then
   local space
   -- head, space = node.insert_before(head, n, ) -- Set the right font
@@ -258,167 +273,168 @@
     Now follows the core function
     It wades through the shipout box and checks the attributes
     ARGUMENTS
-    box: is a box, 
+    box: is a box,
     mcpagecnt: num, the current page cnt of mc (should start at -1 in shipout box), needed for recursion
     mccntprev: num, the attribute cnt of the previous node/whatever - if different we have a chunk border
-    mcopen: num, records if some bdc/emc is open 
+    mcopen: num, records if some bdc/emc is open
     These arguments are only needed for log messages, if not present are replaces by fix strings:
     name: string to describe the box
     mctypeprev: num, the type attribute of the previous node/whatever
-    
+
     there are lots of logging messages currently. Should be cleaned up in due course.
     One should also find ways to make the function shorter.
 --]]
 
-function uftag.func.mark_page_elements (box,mcpagecnt,mccntprev,mcopen,name,mctypeprev)
+function ltx.__tag.func.mark_page_elements (box,mcpagecnt,mccntprev,mcopen,name,mctypeprev)
   local name = name or ("SOMEBOX")
   local mctypeprev = mctypeprev or -1
-  local abspage = tex.count["g__uftag_abspage_int"]  --["c at abspage"]
-  uftag.trace.log ("PAGE " .. abspage,3)
-  uftag.trace.log ("FUNC ARGS: pagecnt".. mcpagecnt.." prev "..mccntprev .. " type prev "..mctypeprev,4)
-  uftag.trace.log ("TRAVERSING BOX ".. tostring(name).." TYPE ".. node.type(node.getid(box)),3) 
-  local head = box.head -- AtBeginShipoutBox is a vlist?
+  local abspage = status.total_pages + 1  -- the real counter is increased inside the box so one off
+                                                                       -- if the callback is not used.
+  ltx.__tag.trace.log ("PAGE " .. abspage,3)
+  ltx.__tag.trace.log ("FUNC ARGS: pagecnt".. mcpagecnt.." prev "..mccntprev .. " type prev "..mctypeprev,4)
+  ltx.__tag.trace.log ("TRAVERSING BOX ".. tostring(name).." TYPE ".. node.type(node.getid(box)),3)
+  local head = box.head -- ShipoutBox is a vlist?
   if head then
-    mccnthead, mctypehead,taghead = __uftag_get_mc_cnt_type_tag (head)
-    uftag.trace.log ("HEAD " .. node.type(node.getid(head)).. " MC"..tostring(mccnthead).." => TAG "..tostring(mctypehead).." => "..tostring(taghead),3) 
+    mccnthead, mctypehead,taghead = __tag_get_mc_cnt_type_tag (head)
+    ltx.__tag.trace.log ("HEAD " .. node.type(node.getid(head)).. " MC"..tostring(mccnthead).." => TAG "..tostring(mctypehead).." => "..tostring(taghead),3)
   else
-    uftag.trace.log ("HEAD is ".. tostring(head),3)
-  end  
+    ltx.__tag.trace.log ("HEAD is ".. tostring(head),3)
+  end
   for n in node.traverse(head) do
-    local mccnt, mctype, tag = __uftag_get_mc_cnt_type_tag (n)
+    local mccnt, mctype, tag = __tag_get_mc_cnt_type_tag (n)
     local spaceattr = nodegetattribute(n,iwspaceattributeid)  or -1
-    uftag.trace.log ("NODE ".. node.type(node.getid(n)).." MC"..tostring(mccnt).." => TAG "..tostring(mctype).." => " .. tostring(tag),3)
+    ltx.__tag.trace.log ("NODE ".. node.type(node.getid(n)).." MC"..tostring(mccnt).." => TAG "..tostring(mctype).." => " .. tostring(tag),3)
     if n.id == HLIST
     then -- enter the hlist
-     mcopen,mcpagecnt,mccntprev,mctypeprev= 
-      uftag.func.mark_page_elements (n,mcpagecnt,mccntprev,mcopen,"INTERNAL HLIST",mctypeprev)
-    elseif n.id == VLIST then -- enter the vlist     
-     mcopen,mcpagecnt,mccntprev,mctypeprev= 
-      uftag.func.mark_page_elements (n,mcpagecnt,mccntprev,mcopen,"INTERNAL VLIST",mctypeprev)
-    elseif n.id == GLUE then       -- at glue real space chars are inserted, for the rest it is ignored 
-     -- for debugging       
-     if uftag.trace.showspaces and spaceattr==1  then 
-        __uftag_show_spacemark (head,n,"0 1 0")
+     mcopen,mcpagecnt,mccntprev,mctypeprev=
+      ltx.__tag.func.mark_page_elements (n,mcpagecnt,mccntprev,mcopen,"INTERNAL HLIST",mctypeprev)
+    elseif n.id == VLIST then -- enter the vlist
+     mcopen,mcpagecnt,mccntprev,mctypeprev=
+      ltx.__tag.func.mark_page_elements (n,mcpagecnt,mccntprev,mcopen,"INTERNAL VLIST",mctypeprev)
+    elseif n.id == GLUE then       -- at glue real space chars are inserted, for the rest it is ignored
+     -- for debugging
+     if ltx.__tag.trace.showspaces and spaceattr==1  then
+        __tag_show_spacemark (head,n,"0 1 0")
      end
-     if spaceattr==1  then 
+     if spaceattr==1  then
         local space
         local space_char = node.copy(default_space_char)
-        local curfont    = nodegetattribute(n,iwfontattributeid)  
-        uftag.trace.log ("FONT ".. tostring(curfont),3)
+        local curfont    = nodegetattribute(n,iwfontattributeid)
+        ltx.__tag.trace.log ("FONT ".. tostring(curfont),3)
         if curfont and luaotfload.aux.slot_of_name(curfont,"space") then
           space_char.font=curfont
         end
-        head, space = node.insert_before(head, n, space_char) -- 
+        head, space = node.insert_before(head, n, space_char) --
         n.width     = n.width - space.width
         space.attr  = n.attr
      end
-    elseif n.id == LOCAL_PAR then  -- local_par is ignored 
+    elseif n.id == LOCAL_PAR then  -- local_par is ignored
     elseif n.id == PENALTY then    -- penalty is ignored
-    elseif n.id == KERN then       -- kern is ignored   
-     uftag.trace.log ("SUBTYPE KERN ".. n.subtype,3)  
+    elseif n.id == KERN then       -- kern is ignored
+     ltx.__tag.trace.log ("SUBTYPE KERN ".. n.subtype,3)
     else
-     -- math is currently only logged. 
+     -- math is currently only logged.
      -- we could mark the whole as math
      -- for inner processing the mlist_to_hlist callback is probably needed.
-     if n.id == MATH then       
-      uftag.trace.log("NODE "..node.type(node.getid(n)).." "..__uftag_get_mathsubtype(n),3)
+     if n.id == MATH then
+      ltx.__tag.trace.log("NODE "..node.type(node.getid(n)).." "..__tag_get_mathsubtype(n),3)
      end
      -- endmath
-     uftag.trace.log("CURRENT "..mccnt.." PREV "..mccntprev,3)
+     ltx.__tag.trace.log("CURRENT "..mccnt.." PREV "..mccntprev,3)
      if mccnt~=mccntprev then -- a new mc chunk
-      uftag.trace.log ("NODE ".. node.type(node.getid(n)).." MC"..tostring(mccnt).." <=> PREVIOUS "..tostring(mccntprev),3)
+      ltx.__tag.trace.log ("NODE ".. node.type(node.getid(n)).." MC"..tostring(mccnt).." <=> PREVIOUS "..tostring(mccntprev),3)
       if mcopen~=0 then -- there is a chunk open, close it (hope there is only one ...
-       box.list=__uftag_insert_emc_node (box.list,n)
+       box.list=__tag_insert_emc_node (box.list,n)
        mcopen = mcopen - 1
-       uftag.trace.log ("INSERT EMC " .. mcpagecnt .. " MCOPEN = " .. mcopen,2)
+       ltx.__tag.trace.log ("INSERT EMC " .. mcpagecnt .. " MCOPEN = " .. mcopen,2)
        if mcopen ~=0 then
-        uftag.trace.log ("!WARNING! open mc" .. " MCOPEN = " .. mcopen,1)
-       end 
-      end 
-      if uftag.mc[mccnt] then
-       if uftag.mc[mccnt]["artifact"] then
-        uftag.trace.log("THIS IS AN ARTIFACT of type "..tostring(uftag.mc[mccnt]["artifact"]),3)
-        if uftag.mc[mccnt]["artifact"] == "" then
-         box.list = __uftag_insert_bmc_node (box.list,n,"Artifact")
+        ltx.__tag.trace.log ("!WARNING! open mc" .. " MCOPEN = " .. mcopen,1)
+       end
+      end
+      if ltx.__tag.mc[mccnt] then
+       if ltx.__tag.mc[mccnt]["artifact"] then
+        ltx.__tag.trace.log("THIS IS AN ARTIFACT of type "..tostring(ltx.__tag.mc[mccnt]["artifact"]),3)
+        if ltx.__tag.mc[mccnt]["artifact"] == "" then
+         box.list = __tag_insert_bmc_node (box.list,n,"Artifact")
         else
-         box.list = __uftag_insert_bdc_node (box.list,n,"Artifact", "/Type /"..uftag.mc[mccnt]["artifact"])
+         box.list = __tag_insert_bdc_node (box.list,n,"Artifact", "/Type /"..ltx.__tag.mc[mccnt]["artifact"])
         end
        else
-        uftag.trace.log("THIS IS A TAG "..tostring(tag),3)  
+        ltx.__tag.trace.log("THIS IS A TAG "..tostring(tag),3)
         mcpagecnt = mcpagecnt +1
-        uftag.trace.log ("INSERT BDC "..mcpagecnt,2)
+        ltx.__tag.trace.log ("INSERT BDC "..mcpagecnt,2)
         local dict= "/MCID "..mcpagecnt
-        if uftag.mc[mccnt]["raw"] then
-         uftag.trace.log("RAW CONTENT"..tostring(uftag.mc[mccnt]["raw"]),3)
-         dict= dict .. " " .. uftag.mc[mccnt]["raw"]
-        end 
-        if uftag.mc[mccnt]["alt"] then
-         uftag.trace.log("RAW CONTENT"..tostring(uftag.mc[mccnt]["alt"]),3)
-         dict= dict .. " " .. uftag.mc[mccnt]["alt"]
-        end 
-        if uftag.mc[mccnt]["actualtext"] then
-         uftag.trace.log("RAW CONTENT"..tostring(uftag.mc[mccnt]["actualtext"]),3)
-         dict= dict .. " " .. uftag.mc[mccnt]["actualtext"]
-        end    
-        box.list = __uftag_insert_bdc_node (box.list,n,tag, dict)
-        uftag.func.store_mc_kid (mccnt,mcpagecnt,abspage)
-        uftag.func.store_mc_in_page(mccnt,mcpagecnt,abspage)
-        uftag.trace.show_mc_data (mccnt)
-       end 
+        if ltx.__tag.mc[mccnt]["raw"] then
+         ltx.__tag.trace.log("RAW CONTENT"..tostring(ltx.__tag.mc[mccnt]["raw"]),3)
+         dict= dict .. " " .. ltx.__tag.mc[mccnt]["raw"]
+        end
+        if ltx.__tag.mc[mccnt]["alt"] then
+         ltx.__tag.trace.log("RAW CONTENT"..tostring(ltx.__tag.mc[mccnt]["alt"]),3)
+         dict= dict .. " " .. ltx.__tag.mc[mccnt]["alt"]
+        end
+        if ltx.__tag.mc[mccnt]["actualtext"] then
+         ltx.__tag.trace.log("RAW CONTENT"..tostring(ltx.__tag.mc[mccnt]["actualtext"]),3)
+         dict= dict .. " " .. ltx.__tag.mc[mccnt]["actualtext"]
+        end
+        box.list = __tag_insert_bdc_node (box.list,n,tag, dict)
+        ltx.__tag.func.store_mc_kid (mccnt,mcpagecnt,abspage)
+        ltx.__tag.func.store_mc_in_page(mccnt,mcpagecnt,abspage)
+        ltx.__tag.trace.show_mc_data (mccnt)
+       end
        mcopen = mcopen + 1
       else
-       uftag.trace.log("THIS HAS NOT BEEN TAGGED",1)
-     -- perhaps code that tag a artifact can be added ...  
+       ltx.__tag.trace.log("THIS HAS NOT BEEN TAGGED",1)
+     -- perhaps code that tag a artifact can be added ...
        if tagunmarkedbool.mode == truebool.mode then
-        box.list = __uftag_insert_bmc_node (box.list,n,"Artifact")
-       end 
-       mcopen = mcopen + 1
+        box.list = __tag_insert_bmc_node (box.list,n,"Artifact")
+        mcopen = mcopen + 1
+       end
       end
       mccntprev = mccnt
-     end  
+     end
     end -- end if
   end -- end for
   if head then
-    mccnthead, mctypehead,taghead = __uftag_get_mc_cnt_type_tag (head)
-    uftag.trace.log ("ENDHEAD " .. node.type(node.getid(head)).. " MC"..tostring(mccnthead).." => TAG "..tostring(mctypehead).." => "..tostring(taghead),3) 
+    mccnthead, mctypehead,taghead = __tag_get_mc_cnt_type_tag (head)
+    ltx.__tag.trace.log ("ENDHEAD " .. node.type(node.getid(head)).. " MC"..tostring(mccnthead).." => TAG "..tostring(mctypehead).." => "..tostring(taghead),3)
   else
-    uftag.trace.log ("ENDHEAD is ".. tostring(head),3)
-  end  
-  uftag.trace.log ("QUITTING TRAVERSING BOX ".. tostring(name).." TYPE ".. node.type(node.getid(box)),3)
+    ltx.__tag.trace.log ("ENDHEAD is ".. tostring(head),3)
+  end
+  ltx.__tag.trace.log ("QUITTING TRAVERSING BOX ".. tostring(name).." TYPE ".. node.type(node.getid(box)),3)
  return mcopen,mcpagecnt,mccntprev,mctypeprev
-end 
+end
 
-function uftag.func.mark_shipout ()
- mcopen = uftag.func.mark_page_elements (tex.box["AtBeginShipoutBox"],-1,-100,0,"Shipout",-1)
+function ltx.__tag.func.mark_shipout (box)
+ mcopen = ltx.__tag.func.mark_page_elements (box,-1,-100,0,"Shipout",-1)
  if mcopen~=0 then -- there is a chunk open, close it (hope there is only one ...
   local emcnode = nodenew("whatsit","pdf_literal")
-  local box = tex.box["AtBeginShipoutBox"].list 
+  local list = box.list
   emcnode.data = "EMC"
   emcnode.mode=1
-  if box then
-     box = node.insert_after (box,node.tail(box),emcnode)
+  if list then
+     list = node.insert_after (list,node.tail(list),emcnode)
      mcopen = mcopen - 1
-     uftag.trace.log ("INSERT LAST EMC, MCOPEN = " .. mcopen,2)
+     ltx.__tag.trace.log ("INSERT LAST EMC, MCOPEN = " .. mcopen,2)
   else
-     uftag.trace.log ("UPS ",1)
+     ltx.__tag.trace.log ("UPS ",1)
   end
   if mcopen ~=0 then
-     uftag.trace.log ("!WARNING! open mc" .. " MCOPEN = " .. mcopen,1)
-  end 
+     ltx.__tag.trace.log ("!WARNING! open mc" .. " MCOPEN = " .. mcopen,1)
+  end
  end
 end
 
-function uftag.trace.show_seq (seq)
+function ltx.__tag.trace.show_seq (seq)
  if (type(seq) == "table") then
-  for i,v in ipairs(seq) do 
-   __uftag_log ("[" .. i .. "] => " .. tostring(v),1)
-  end 
-  else 
-   __uftag_log ("sequence " .. tostring(seq) .. " not found",1)   
-  end  
-end 
+  for i,v in ipairs(seq) do
+   __tag_log ("[" .. i .. "] => " .. tostring(v),1)
+  end
+  else
+   __tag_log ("sequence " .. tostring(seq) .. " not found",1)
+  end
+end
 
-local __uftag_pairs_prop =
+local __tag_pairs_prop =
  function  (prop)
       local a = {}
       for n in pairs(prop) do tableinsert(a, n) end
@@ -433,42 +449,40 @@
       return iter
   end
 
-
-function uftag.trace.show_prop (prop)
+function ltx.__tag.trace.show_prop (prop)
  if (type(prop) == "table") then
-  for i,v in __uftag_pairs_prop (prop) do
-    __uftag_log ("[" .. i .. "] => " .. tostring(v),1)
-  end 
- else 
-   __uftag_log ("prop " .. tostring(prop) .. " not found or not a table",1)
- end 
- end 
+  for i,v in __tag_pairs_prop (prop) do
+    __tag_log ("[" .. i .. "] => " .. tostring(v),1)
+  end
+ else
+   __tag_log ("prop " .. tostring(prop) .. " not found or not a table",1)
+ end
+ end
 
-
-local __uftag_get_num_from =  
+local __tag_get_num_from =
  function (tag)
-  if uftag.tables["g__uftag_role_tags_prop"][tag] then
-    a= uftag.tables["g__uftag_role_tags_prop"][tag]
+  if ltx.__tag.tables["g__tag_role_tags_prop"][tag] then
+    a= ltx.__tag.tables["g__tag_role_tags_prop"][tag]
   else
-    a= -1 
+    a= -1
   end
-  return a 
- end     
- 
-uftag.func.get_num_from = __uftag_get_num_from
+  return a
+ end
 
-function uftag.func.output_num_from (tag)
-  local num = __uftag_get_num_from (tag)
+ltx.__tag.func.get_num_from = __tag_get_num_from
+
+function ltx.__tag.func.output_num_from (tag)
+  local num = __tag_get_num_from (tag)
   tex.sprint(catlatex,num)
   if num == -1 then
-   __uftag_log ("Unknown tag "..tag.." used")
+   __tag_log ("Unknown tag "..tag.." used")
   end
-end     
- 
-local __uftag_get_tag_from =
+end
+
+local __tag_get_tag_from =
  function  (num)
-  if uftag.tables["g__uftag_role_tags_seq"][num] then
-   a = uftag.tables["g__uftag_role_tags_seq"][num]
+  if ltx.__tag.tables["g__tag_role_tags_seq"][num] then
+   a = ltx.__tag.tables["g__tag_role_tags_seq"][num]
   else
    a= "UNKNOWN"
   end
@@ -475,159 +489,162 @@
  return a
 end
 
-uftag.func.get_tag_from = __uftag_get_tag_from
+ltx.__tag.func.get_tag_from = __tag_get_tag_from
 
-function uftag.func.output_tag_from (num)
-  tex.sprint(catlatex,__uftag_get_tag_from (num))
-end   
+function ltx.__tag.func.output_tag_from (num)
+  tex.sprint(catlatex,__tag_get_tag_from (num))
+end
 
-function uftag.func.store_mc_data (num,key,data)
- uftag.mc[num] = uftag.mc[num] or { }
- uftag.mc[num][key] = data
- __uftag_log  ("storing mc"..num..": "..tostring(key).."=>"..tostring(data))
+function ltx.__tag.func.store_mc_data (num,key,data)
+ ltx.__tag.mc[num] = ltx.__tag.mc[num] or { }
+ ltx.__tag.mc[num][key] = data
+ __tag_log  ("storing mc"..num..": "..tostring(key).."=>"..tostring(data))
 end
 
-function uftag.trace.show_mc_data (num)
- if uftag and uftag.mc and uftag.mc[num] then
-  for k,v in pairs(uftag.mc[num]) do
-   __uftag_log  ("mc"..num..": "..tostring(k).."=>"..tostring(v),3)
+function ltx.__tag.trace.show_mc_data (num)
+ if ltx.__tag and ltx.__tag.mc and ltx.__tag.mc[num] then
+  for k,v in pairs(ltx.__tag.mc[num]) do
+   __tag_log  ("mc"..num..": "..tostring(k).."=>"..tostring(v),3)
   end
-  if uftag.mc[num]["kids"] then
-  __uftag_log ("mc" .. num .. " has " .. #uftag.mc[num]["kids"] .. " kids",3)
-   for k,v in ipairs(uftag.mc[num]["kids"]) do
-    __uftag_log ("mc ".. num .. " kid "..k.." =>" .. v.kid.." on page " ..v.page,3)
+  if ltx.__tag.mc[num]["kids"] then
+  __tag_log ("mc" .. num .. " has " .. #ltx.__tag.mc[num]["kids"] .. " kids",3)
+   for k,v in ipairs(ltx.__tag.mc[num]["kids"]) do
+    __tag_log ("mc ".. num .. " kid "..k.." =>" .. v.kid.." on page " ..v.page,3)
    end
   end
  else
-  __uftag_log  ("mc"..num.." not found",3)   
+  __tag_log  ("mc"..num.." not found",3)
  end
 end
 
-function uftag.trace.show_all_mc_data (max)
- for i = 1, max do 
-  uftag.trace.show_mc_data (i)
+function ltx.__tag.trace.show_all_mc_data (max)
+ for i = 1, max do
+  ltx.__tag.trace.show_mc_data (i)
  end
-end 
+end
 
-
-function uftag.func.store_mc_label (label,num)
- uftag.mc["labels"] = uftag.mc["labels"] or { }
- uftag.mc.labels[label] = num
+function ltx.__tag.func.store_mc_label (label,num)
+ ltx.__tag.mc["labels"] = ltx.__tag.mc["labels"] or { }
+ ltx.__tag.mc.labels[label] = num
 end
 
-function uftag.func.store_mc_kid (mcnum,kid,page)
- uftag.trace.log("MC"..mcnum.." STORING KID" .. kid.." on page " .. page,3)
- uftag.mc[mcnum]["kids"] = uftag.mc[mcnum]["kids"] or { }
+function ltx.__tag.func.store_mc_kid (mcnum,kid,page)
+ ltx.__tag.trace.log("MC"..mcnum.." STORING KID" .. kid.." on page " .. page,3)
+ ltx.__tag.mc[mcnum]["kids"] = ltx.__tag.mc[mcnum]["kids"] or { }
  local kidtable = {kid=kid,page=page}
- tableinsert(uftag.mc[mcnum]["kids"], kidtable )
+ tableinsert(ltx.__tag.mc[mcnum]["kids"], kidtable )
 end
 
-
-function uftag.func.mc_num_of_kids (mcnum)
+function ltx.__tag.func.mc_num_of_kids (mcnum)
  local num = 0
- if uftag.mc[mcnum] and uftag.mc[mcnum]["kids"] then
-   num = #uftag.mc[mcnum]["kids"]
+ if ltx.__tag.mc[mcnum] and ltx.__tag.mc[mcnum]["kids"] then
+   num = #ltx.__tag.mc[mcnum]["kids"]
  end
- uftag.trace.log ("MC" .. mcnum .. "has " .. num .. "KIDS",4)
+ ltx.__tag.trace.log ("MC" .. mcnum .. "has " .. num .. "KIDS",4)
  return num
 end
-  
-function uftag.func.mc_insert_kids (mcnum,single)
-  if uftag.mc[mcnum] then
-  uftag.trace.log("MC-KIDS test " .. mcnum,4)
-   if uftag.mc[mcnum]["kids"] then
-    if #uftag.mc[mcnum]["kids"] > 1 and single==1 then
+
+function ltx.__tag.func.mc_insert_kids (mcnum,single)
+  if ltx.__tag.mc[mcnum] then
+  ltx.__tag.trace.log("MC-KIDS test " .. mcnum,4)
+   if ltx.__tag.mc[mcnum]["kids"] then
+    if #ltx.__tag.mc[mcnum]["kids"] > 1 and single==1 then
      tex.sprint("[")
-    end 
-    for i,kidstable in ipairs( uftag.mc[mcnum]["kids"] ) do
+    end
+    for i,kidstable in ipairs( ltx.__tag.mc[mcnum]["kids"] ) do
      local kidnum  = kidstable["kid"]
      local kidpage = kidstable["page"]
      local kidpageobjnum = pdfpageref(kidpage)
-     uftag.trace.log("MC" .. mcnum .. " insert KID " ..i.. " with num " .. kidnum .. " on page " .. kidpage.."/"..kidpageobjnum,3)
+     ltx.__tag.trace.log("MC" .. mcnum .. " insert KID " ..i.. " with num " .. kidnum .. " on page " .. kidpage.."/"..kidpageobjnum,3)
      tex.sprint(catlatex,"<</Type /MCR /Pg "..kidpageobjnum .. " 0 R /MCID "..kidnum.. ">> " )
-    end 
-    if #uftag.mc[mcnum]["kids"] > 1 and single==1 then
+    end
+    if #ltx.__tag.mc[mcnum]["kids"] > 1 and single==1 then
      tex.sprint("]")
-    end  
+    end
    else
-    uftag.trace.log("WARN! MC"..mcnum.." has no kids",0)
+    ltx.__tag.trace.log("WARN! MC"..mcnum.." has no kids",0)
+    if single==1 then
+      tex.sprint("null")
+    end
    end
   else
-   uftag.trace.log("WARN! MC"..mcnum.." doesn't exist",0)
+   ltx.__tag.trace.log("WARN! MC"..mcnum.." doesn't exist",0)
   end
 end
 
-
-function uftag.func.store_struct_mcabs (structnum,mcnum)
- uftag.struct[structnum]=uftag.struct[structnum] or { }
- uftag.struct[structnum]["mc"]=uftag.struct[structnum]["mc"] or { }
+function ltx.__tag.func.store_struct_mcabs (structnum,mcnum)
+ ltx.__tag.struct[structnum]=ltx.__tag.struct[structnum] or { }
+ ltx.__tag.struct[structnum]["mc"]=ltx.__tag.struct[structnum]["mc"] or { }
  -- a structure can contain more than on mc chunk, the content should be ordered
- tableinsert(uftag.struct[structnum]["mc"],mcnum)
- uftag.trace.log("MCNUM "..mcnum.." insert in struct "..structnum,3)
+ tableinsert(ltx.__tag.struct[structnum]["mc"],mcnum)
+ ltx.__tag.trace.log("MCNUM "..mcnum.." insert in struct "..structnum,3)
  -- but every mc can only be in one structure
- uftag.mc[mcnum]= uftag.mc[mcnum] or { }
- uftag.mc[mcnum]["parent"] = structnum 
-end  
+ ltx.__tag.mc[mcnum]= ltx.__tag.mc[mcnum] or { }
+ ltx.__tag.mc[mcnum]["parent"] = structnum
+end
 
-function uftag.trace.show_struct_data (num)
- if uftag and uftag.struct and uftag.struct[num] then
-  for k,v in ipairs(uftag.struct[num]) do
-   __uftag_log  ("struct "..num..": "..tostring(k).."=>"..tostring(v))
+function ltx.__tag.trace.show_struct_data (num)
+ if ltx.__tag and ltx.__tag.struct and ltx.__tag.struct[num] then
+  for k,v in ipairs(ltx.__tag.struct[num]) do
+   __tag_log  ("struct "..num..": "..tostring(k).."=>"..tostring(v))
   end
- else 
-  __uftag_log   ("struct "..num.." not found ") 
- end 
+ else
+  __tag_log   ("struct "..num.." not found ")
+ end
 end
 
 -- pay attention: lua counts arrays from 1, tex pages from one
--- mcid and arrays in pdf count from 0. 
-function uftag.func.store_mc_in_page (mcnum,mcpagecnt,page)
- uftag.page[page] = uftag.page[page] or {}
- uftag.page[page][mcpagecnt] = mcnum 
- uftag.trace.log("PAGE " .. page .. ": inserting MCID " .. mcpagecnt .. " => " .. mcnum,3)
+-- mcid and arrays in pdf count from 0.
+function ltx.__tag.func.store_mc_in_page (mcnum,mcpagecnt,page)
+ ltx.__tag.page[page] = ltx.__tag.page[page] or {}
+ ltx.__tag.page[page][mcpagecnt] = mcnum
+ ltx.__tag.trace.log("PAGE " .. page .. ": inserting MCID " .. mcpagecnt .. " => " .. mcnum,3)
 end
 
-function uftag.func.fill_parent_tree_line (page)
-     -- we need to get page-> i=kid -> mcnum -> structnum 
+function ltx.__tag.func.fill_parent_tree_line (page)
+     -- we need to get page-> i=kid -> mcnum -> structnum
      -- pay attention: the kid numbers and the page number in the parent tree start with 0!
     local numsentry =""
     local pdfpage = page-1
-    if uftag.page[page] and uftag.page[page][0] then
-     mcchunks=#uftag.page[page] 
-     uftag.trace.log("PAGETREE PAGE "..page.." has "..mcchunks.."+1 Elements ",3)  
+    if ltx.__tag.page[page] and ltx.__tag.page[page][0] then
+     mcchunks=#ltx.__tag.page[page]
+     ltx.__tag.trace.log("PAGETREE PAGE "..page.." has "..mcchunks.."+1 Elements ",3)
      for i=0,mcchunks do
-      uftag.trace.log("PAGETREE CHUNKS "..uftag.page[page][i],3)        
+      ltx.__tag.trace.log("PAGETREE CHUNKS "..ltx.__tag.page[page][i],3)
      end
-     if mcchunks == 0 then 
+     if mcchunks == 0 then
       -- only one chunk so no need for an array
-      local mcnum  = uftag.page[page][0] 
-      local structnum = uftag.mc[mcnum]["parent"]
-      local propname  = "g__uftag_struct_"..structnum.."_prop"
-      local objnum   =  uftag.tables[propname]["objnum"] or "XXXX"
-       texio.write_nl("=====>"..tostring(objnum))
-      numsentry = pdfpage .. " ".. objnum .. " 0 R"
-      uftag.trace.log("PAGETREE PAGE" .. page.. " NUM ENTRY = ".. numsentry,3)
+      local mcnum  = ltx.__tag.page[page][0]
+      local structnum = ltx.__tag.mc[mcnum]["parent"]
+      local propname  = "g__tag_struct_"..structnum.."_prop"
+      local objref   =  ltx.__tag.tables[propname]["objref"] or "XXXX"
+       texio.write_nl("=====>"..tostring(objref))
+      numsentry = pdfpage .. " [".. objref .. "]"
+      ltx.__tag.trace.log("PAGETREE PAGE" .. page.. " NUM ENTRY = ".. numsentry,3)
      else
       numsentry = pdfpage .. " ["
        for i=0,mcchunks do
-        local mcnum  = uftag.page[page][i]
-        local structnum = uftag.mc[mcnum]["parent"] or 0
-        local propname  = "g__uftag_struct_"..structnum.."_prop"
-        local objnum   =  uftag.tables[propname]["objnum"] or "XXXX"
-        numsentry = numsentry .. " ".. objnum .. " 0 R"
+        local mcnum  = ltx.__tag.page[page][i]
+        local structnum = ltx.__tag.mc[mcnum]["parent"] or 0
+        local propname  = "g__tag_struct_"..structnum.."_prop"
+        local objref   =  ltx.__tag.tables[propname]["objref"] or "XXXX"
+        numsentry = numsentry .. " ".. objref
        end
       numsentry = numsentry .. "] "
-      uftag.trace.log("PAGETREE PAGE" .. page.. " NUM ENTRY = ".. numsentry,3)
-     end  
+      ltx.__tag.trace.log("PAGETREE PAGE" .. page.. " NUM ENTRY = ".. numsentry,3)
+     end
     else
-      uftag.trace.log ("PAGETREE: NO DATA FOR PAGE "..page,3)
+      ltx.__tag.trace.log ("PAGETREE: NO DATA FOR PAGE "..page,3)
     end
-    return numsentry 
+    return numsentry
 end
 
-function uftag.func.output_parenttree (abspage)
+function ltx.__tag.func.output_parenttree (abspage)
  for i=1,abspage do
-  line = uftag.func.fill_parent_tree_line (i) .. "^^J"
+  line = ltx.__tag.func.fill_parent_tree_line (i) .. "^^J"
   tex.sprint(catlatex,line)
  end
 end
+
+-- 
+--  End of File `tagpdf.lua'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdf.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,180 +1,248 @@
-\RequirePackage{expl3}[2019/07/01]
-%\RequirePackage[enable-debug]{expl3}[2018/06/14]
+%%
+%% This is file `tagpdf.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tagpdf.dtx  (with options: `package')
+%% 
+%% Copyright (C) 2019 Ulrike Fischer
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    https://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "tagpdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: tagpdf.dtx
+\ProvidesExplPackage {tagpdf} {2021/02/23} {0.80}
+  { A package to experiment with pdf tagging }
 
-\ProvidesExplPackage {tagpdf} {2019/07/02} {0.61}
- {A package to experiment with pdf tagging}
-%\debug_on:n{check-declarations,check-expressions,deprecation}
+\bool_if:nF
+  {
+    \bool_lazy_and_p:nn
+      {\cs_if_exist_p:N \pdfmanagement_if_active_p:}
+      { \pdfmanagement_if_active_p: }
+  }
+  {  %error for now, perhaps warning later.
+    \PackageError{tagpdf}
+     {
+       PDF~resource~management~is~no~active!\MessageBreak
+       tagpdf~will~no~work.
+     }
+     {
+       Activate~it~with \MessageBreak
+       \string\RequirePackage{pdfmanagement-testphase}\MessageBreak
+       \string\DeclareDocumentMetadata{<options>}\MessageBreak
+       before~\string\documentclass
+     }
+  }
 
-%map internal tag to package name
+
 \prop_if_exist:NT \g_msg_module_name_prop
- {
-  \prop_gput:Nnn \g_msg_module_name_prop { uftag }{ tagpdf }
- }
+  {
+    \prop_gput:Nnn \g_msg_module_name_prop { tag }{ tagpdf }
+  }
 
-% storing internal names to my name space:
-\cs_set_eq:NN \__uftag_tex_pdffeedback:D         \tex_pdffeedback:D
-\cs_set_eq:NN \__uftag_tex_pdfextension:D        \tex_pdfextension:D
-\cs_set_eq:NN \__uftag_tex_immediate:D           \tex_immediate:D
-\cs_set_eq:NN \__uftag_tex_pdfvariable:D         \tex_pdfvariable:D
-\cs_set_eq:NN \__uftag_tex_global:D              \tex_global:D
-\cs_set_eq:NN \__uftag_tex_the:D                 \tex_the:D
-\cs_set_eq:NN \__uftag_tex_pdfliteral:D          \tex_pdfliteral:D
-\cs_set_eq:NN \__uftag_tex_pdfcatalog:D          \tex_pdfcatalog:D
-\cs_set_eq:NN \__uftag_tex_pdflastobj:D          \tex_pdflastobj:D
-\cs_set_eq:NN \__uftag_tex_pdfobj:D              \tex_pdfobj:D
-\cs_set_eq:NN \__uftag_tex_pdfpageattr:D         \tex_pdfpageattr:D
-\cs_set_eq:NN \__uftag_tex_pdfpagesattr:D        \tex_pdfpagesattr:D
-\cs_set_eq:NN \__uftag_tex_pdfpageref:D          \tex_pdfpageref:D
-\cs_set_eq:NN \__uftag_tex_pdfcompresslevel:D    \tex_pdfcompresslevel:D
-\cs_set_eq:NN \__uftag_tex_pdfobjcompresslevel:D \tex_pdfobjcompresslevel:D
+\cs_set_eq:NN \__tag_tex_global:D              \tex_global:D
 
 %%% package options
-\bool_new:N\g__uftag_mode_lua_bool
+\bool_new:N\g__tag_mode_lua_bool
 
-\DeclareOption{luamode}    { \sys_if_engine_luatex:T { \bool_gset_true:N \g__uftag_mode_lua_bool } }
-\DeclareOption{genericmode}{ \bool_gset_false:N\g__uftag_mode_lua_bool }
+\DeclareOption {luamode}    { \sys_if_engine_luatex:T { \bool_gset_true:N \g__tag_mode_lua_bool } }
+\DeclareOption {genericmode}{ \bool_gset_false:N\g__tag_mode_lua_bool }
 \ExecuteOptions{luamode}
 \ProcessOptions
 
 %%% some packages
-\RequirePackage{xparse}
-\RequirePackage{atbegshi}
-\RequirePackage{zref-base,zref-lastpage}
-\RequirePackage{etoolbox}
-\RequirePackage{l3pdf}
-%\RequirePackage{pdfescape} %check if needed
-%\RequirePackage{pdftexcmds}%check if needed (expandable commands!)
+\RequirePackage{l3ref-tmp}
+ %================
+ % temporary code
+ % ===============
+ % faking the LastPage label:
+ \cs_new_protected:Npn \__tag_lastpagelabel:
+   {
+     \legacy_if:nT { @filesw }
+       {
+         \exp_args:NNnx \exp_args:NNx\iow_now:Nn \@auxout
+            {
+              \token_to_str:N \newlabeldata
+                {__tag_LastPage}
+                {
+                  {abspage} { \int_use:N \g_shipout_readonly_int}
+                  {tagmcabs}{ \int_use:N \c at g__tag_MCID_abs_int }
+                }
+            }
+       }
+   }
 
-%\RequirePackage{l3str-convert}
-\cs_generate_variant:Nn \str_set_convert:Nnnn {Nonn, Noon, Nnon }
+ \AddToHook{enddocument/afterlastpage}
+  {\__tag_lastpagelabel:}
 
+ % a command to override the general default. See issue in ref
+ \cs_if_exist:NF \ref_value:nnn
+   {
+     \cs_new:Npn \ref_value:nnn #1#2#3
+       {
+         \exp_args:Nee
+           \__ref_value:nnn
+            { \tl_to_str:n {#1} } { \tl_to_str:n {#2} } {#3}
+       }
+     \cs_new:Npn \__ref_value:nnn #1#2#3
+       {
+         \tl_if_exist:cTF { g__ref_label_ #1 _ #2 _tl }
+           { \tl_use:c { g__ref_label_ #1 _ #2 _tl } }
+           {
+             % test if attribute exist at all?
+             #3
+           }
+       }
+   }
 
-%%% absolute page numbers
-\int_new:N   \g__uftag_abspage_int
-\int_gset:Nn \g__uftag_abspage_int { 0 }
-\zref at newlist {uftagzrl} %zrl=zreflist
-\zref at newprop*{tagabspage}     [0] { \int_use:N \g__uftag_abspage_int }
-\zref at addprop {uftagzrl} {tagabspage}
+ %=============
+ % attributes
+ %=============
+\ref_attribute_gset:nnnn {tagstruct}    {0}{now}    { \int_use:N \c at g__tag_struct_abs_int }
+\ref_attribute_gset:nnnn {tagstructobj} {}{now}
+ {
+  \exp_args:Ne
+   \pdf_object_if_exist:nT {c__tag_struct_ \int_use:N \c at g__tag_struct_abs_int _obj}
+    {
+      \pdf_object_ref:e{c__tag_struct_ \int_use:N \c at g__tag_struct_abs_int _obj}
+    }
+ }
+ % replace by abspage??
+\ref_attribute_gset:nnnn {tagabspage}{0}{shipout}{ \int_use:N \g_shipout_readonly_int }
+\ref_attribute_gset:nnnn {tagmcabs } {0}{now}    { \int_use:N \c at g__tag_MCID_abs_int }
+\ref_attribute_gset:nnnn {tagmcid }  {0}{now}    { \int_use:N \g__tag_MCID_tmp_bypage_int }
+\clist_const:Nn \c__tag_refmc_clist     {tagabspage,tagmcabs,tagmcid} %mc is new!!
+\clist_const:Nn \c__tag_refstruct_clist {tagstruct,tagstructobj}
+\cs_generate_variant:Nn \ref_label:nn { nv }
+\cs_new_protected:Npn \__tag_ref_label:nn #1 #2 %#1 label, #2 name of list mc or struct
+  {
+    \@bsphack
+    \ref_label:nv {#1}{c__tag_ref#2_clist}
+    \@esphack
+  }
+\cs_new:Npn \__tag_ref_value:nnn #1 #2 #3 %#1 label, #2 attribute, #3 default
+  {
+    \ref_value:nnn {#1}{#2}{#3}
+  }
+\cs_new:Npn \__tag_ref_value_lastpage:nn #1 #2
+  {
+    \ref_value:nnn {__tag_LastPage}{#1}{#2}
+  }
 
+\cs_generate_variant:Nn \__tag_ref_label:nn {en}
+\cs_generate_variant:Nn \__tag_ref_value:nnn {enn}
 
+\RequirePackage{etoolbox}
+
+\cs_generate_variant:Nn \str_set_convert:Nnnn {Nonn, Noon, Nnon }
+
 %%% tagpdfsetup,
 %%% TODO: checks need to be improved
-\int_new:N  \l__uftag_loglevel_int
-\tl_new:N   \l__uftag_tree_tabs_order_tl
+\int_new:N  \l__tag_loglevel_int
+\tl_new:N   \l__tag_tree_tabs_order_tl
 
-\keys_define:nn { uftag / setup }
-{
- activate-mc     .bool_gset:N = \g_uftag_active_mc_bool,
- activate-tree   .bool_gset:N = \g_uftag_active_tree_bool,
- activate-struct .bool_gset:N = \g_uftag_active_struct_bool,
- activate-all    .meta:n ={activate-mc,activate-tree,activate-struct},
- check-tags      .bool_gset:N = \g__uftag_check_tags_bool,
- check-tags      .initial:n  = true,
- log             .choice:,
- log / none      .code:n = {\int_set:Nn \l__uftag_loglevel_int { 0 }},
- log / v         .code:n = {\int_set:Nn \l__uftag_loglevel_int { 1 }},
- log / vv        .code:n = {\int_set:Nn \l__uftag_loglevel_int { 2 }},
- log / vvv       .code:n = {\int_set:Nn \l__uftag_loglevel_int { 3 }},
- log / all       .code:n = {\int_set:Nn \l__uftag_loglevel_int { 10 }},
- tagunmarked     .bool_gset:N = \g__uftag_tagunmarked_bool,
- tagunmarked     .initial:n  = true,
- tabsorder       .choice:,
- tabsorder / row       .code:n = {\tl_set:Nn \l__uftag_tree_tabs_order_tl {/Tabs/R}},
- tabsorder / column    .code:n = {\tl_set:Nn \l__uftag_tree_tabs_order_tl {/Tabs/C}},
- tabsorder / structure .code:n = {\tl_set:Nn \l__uftag_tree_tabs_order_tl {/Tabs/S}},
- tabsorder / none      .code:n = {\tl_set:Nn \l__uftag_tree_tabs_order_tl {}},
- tabsorder       .initial:n = structure,
- uncompress     .code:n = {\pdf_uncompress:  },
- inputencoding  .code:n =
+\keys_define:nn { __tag / setup }
   {
-   \sys_if_engine_pdftex:T
-    { \tl_gset:Nn \g__uftag_inputencoding_tl { #1 } }
-  },
-}
+    activate-mc     .bool_gset:N = \g__tag_active_mc_bool,
+    activate-tree   .bool_gset:N = \g__tag_active_tree_bool,
+    activate-struct .bool_gset:N = \g__tag_active_struct_bool,
+    activate-all    .meta:n ={activate-mc,activate-tree,activate-struct},
+    check-tags      .bool_gset:N = \g__tag_check_tags_bool,
+    check-tags      .initial:n  = true,
+    log             .choice:,
+    log / none      .code:n = {\int_set:Nn \l__tag_loglevel_int { 0 }},
+    log / v         .code:n = {\int_set:Nn \l__tag_loglevel_int { 1 }},
+    log / vv        .code:n = {\int_set:Nn \l__tag_loglevel_int { 2 }},
+    log / vvv       .code:n = {\int_set:Nn \l__tag_loglevel_int { 3 }},
+    log / all       .code:n = {\int_set:Nn \l__tag_loglevel_int { 10 }},
+    tagunmarked     .bool_gset:N = \g__tag_tagunmarked_bool,
+    tagunmarked     .initial:n  = true,
+    tabsorder       .choice:,
+    tabsorder / row       .code:n = %{\tl_set:Nn \l__tag_tree_tabs_order_tl {/Tabs/R}},
+      \pdfmanagement_add:nnn { Page } {Tabs}{/R},
+    tabsorder / column    .code:n = %{\tl_set:Nn \l__tag_tree_tabs_order_tl {/Tabs/C}},
+      \pdfmanagement_add:nnn { Page } {Tabs}{/C},
+    tabsorder / structure .code:n = %{\tl_set:Nn \l__tag_tree_tabs_order_tl {/Tabs/S}},
+      \pdfmanagement_add:nnn { Page } {Tabs}{/S},
+    tabsorder / none      .code:n = %{\tl_set:Nn \l__tag_tree_tabs_order_tl {}},
+      \pdfmanagement_remove:nn {Page} {Tabs},
+    tabsorder       .initial:n = structure,
+    uncompress      .code:n = {\pdf_uncompress:  },
+  }
+\hook_gput_code:nnn{begindocument}{tagpdf}
+  {
+    \bool_if:NT \g__tag_active_struct_bool
+      {
+         \pdfmanagement_add:nnn { Catalog / MarkInfo } { Marked } { true }
+      }
+  }
 
-% escape commands are a bit engine specific so have been moved to the backend files.
-% commands to escape strings so that they can be safely used in pdf
-% currently not much used. But will be needed later, when alt and actualtext are added.
-% we probably need the equivalent \pdfescapestring, \pdfescapename \pdfescapehex
-% the commands of pdfescape adds an additional layout to allow for babel shorthands
-%\cs_set_eq:NN \__uftag_pdf_escape_string:Nn \EdefEscapeString
-%\cs_set_eq:NN \__uftag_pdf_escape_name:Nn   \EdefEscapeName
-%\cs_set_eq:NN \__uftag_pdf_escape_hex:Nn    \EdefEscapeHex
 
-%\cs_set_eq:NN \__uftag_pdf_escape_string:n \EdefEscapeString
-%\cs_set_eq:NN \__uftag_pdf_escape_name:Nn   \EdefEscapeName
 
-%escape command. They are backend specific as \pdf at escapehex would ignore most chars
-%outside the "pdflatex" range
+\cs_new:Nn   \__tag_finish_page_hook: { }
 
 
+\hook_gput_code:nnn
+  { shipout/before }
+  { tagpdf/cnt }
+  {
+    \__tag_finish_page_hook:
+    %\int_gincr:N \g__tag_abspage_int
+  }
 
-
-
-% a hook for later code and an absolute page counter
-% should be executed before counters are resetted.
-% is it used?
-\cs_new:Nn   \__uftag_finish_page_hook: { }
-
-\AtBeginShipout
- {
-  \__uftag_finish_page_hook:
-  \bool_if:NT\g_uftag_active_tree_bool
-   {
-     \__uftag_tree_write_pageattr:
-   }
-  \int_gincr:N \g__uftag_abspage_int
- }
-
-
-%testing the engines and loading the backend files
 \sys_if_engine_xetex:T
- {
-  \PackageError { tagpdf } { xelatex~is~not~supported~-~aborting } {}
-  \tex_endinput:D
- }
+  { %lets try with xelatex ...
+    %\PackageError { tagpdf } { xelatex~is~not~supported~-~aborting } {}
+    %\tex_endinput:D
+    \file_input:n {tagpdf-pdftex.def}
+  }
 
 \sys_if_engine_luatex:T
- {
-  \file_input:n {tagpdf-luatex.def}
- }
+  {
+    \file_input:n {tagpdf-luatex.def}
+  }
 
 \sys_if_engine_pdftex:T
- {
-  \file_input:n {tagpdf-pdftex.def}
- }
+  {
+    \file_input:n {tagpdf-pdftex.def}
+  }
 
 \sys_if_output_dvi:T
- {
-  \PackageError { tagpdf } { dvi~output~is~not~supported~-~aborting }{}
-  \tex_endinput:D
- }
+  {
+    %\PackageError { tagpdf } { dvi~output~is~not~supported~-~aborting }{}
+    %\tex_endinput:D
+  }
 
-\cs_generate_variant:Nn \__uftag_prop_gput:Nnn      { Nxn , Nxx, Nnx , cnn, cxn, cnx, cno}
-\cs_generate_variant:Nn \__uftag_seq_gput_right:Nn  { Nx  , No, cn, cx }
-\cs_generate_variant:Nn \__uftag_prop_new:N   { c }
-\cs_generate_variant:Nn \__uftag_seq_new:N    { c }
-\cs_generate_variant:Nn \__uftag_seq_show:N   { c }
-\cs_generate_variant:Nn \__uftag_prop_show:N  { c }
+\cs_generate_variant:Nn \__tag_prop_gput:Nnn      { Nxn , Nxx, Nnx , cnn, cxn, cnx, cno}
+\cs_generate_variant:Nn \__tag_seq_gput_right:Nn  { Nx  , No, cn, cx }
+\cs_generate_variant:Nn \__tag_prop_new:N   { c }
+\cs_generate_variant:Nn \__tag_seq_new:N    { c }
+\cs_generate_variant:Nn \__tag_seq_show:N   { c }
+\cs_generate_variant:Nn \__tag_prop_show:N  { c }
 \cs_generate_variant:Nn \prop_gput:Nnn {Nxx}
 \cs_generate_variant:Nn \prop_put:Nnn  {Nxx}
-\cs_generate_variant:Nn \__uftag_pdfuseobjnum:Nn {Nx,No}
-\cs_generate_variant:Nn \__uftag_pdfuseobjnum:nn {nx,xx}
-\cs_generate_variant:Nn \__uftag_gset_pdfpageattr:n {x}
 
-% few temp tl
-\tl_new:N \g__uftag_tmpa_tl
-\tl_new:N \l__uftag_tmpa_tl
-\tl_new:N \l__uftag_tmpb_tl
-\tl_new:N \l__uftag_tmpc_tl
-\tl_new:N \l__uftag_tmpd_tl
-\tl_new:N \l__uftag_tmpe_tl
-\str_new:N \l__uftag_tmpa_str
+\cs_generate_variant:Nn \pdffile_embed_stream:nnn {nxx,oxx}
+\cs_generate_variant:Nn \pdf_object_ref:n {e}
 
-% helper function to get the propcount.
-% use as \prop_map_function:NN PROP { \__uftag_prop_count:nn -1 }
-\cs_new:Nn\__uftag_prop_count:nn { + 1 }
+\tl_new:N \g__tag_tmpa_tl
+\tl_new:N \l__tag_tmpa_tl
+\tl_new:N \l__tag_tmpb_tl
+\tl_new:N \l__tag_tmpc_tl
+\tl_new:N \l__tag_tmpd_tl
+\tl_new:N \l__tag_tmpe_tl
+\str_new:N \l__tag_tmpa_str
 
+\cs_new:Nn\__tag_prop_count:nn { + 1 }
+
 %% Loading the tagpdf sub packages
 \RequirePackage { tagpdf-checks-code }
 \RequirePackage { tagpdf-user }
@@ -181,16 +249,17 @@
 \RequirePackage { tagpdf-tree-code }
 \RequirePackage { tagpdf-roles-code }
 \RequirePackage { tagpdf-attr-code }
-% mc-code is split:
 \RequirePackage { tagpdf-mc-code-shared }
-\bool_if:NTF \g__uftag_mode_lua_bool
- {
-  \RequirePackage {tagpdf-mc-code-lua}
- }
- {
-  \RequirePackage { tagpdf-mc-code-generic } %
- }
+\bool_if:NTF \g__tag_mode_lua_bool
+  {
+   \RequirePackage {tagpdf-mc-code-lua}
+  }
+  {
+   \RequirePackage { tagpdf-mc-code-generic } %
+  }
 
 \RequirePackage { tagpdf-struct-code }
 \RequirePackage { tagpdf-space-code }
-\endinput
+%% 
+%%
+%% End of file `tagpdf.sty'.

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdfdocu-patches.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdfdocu-patches.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tagpdf/tagpdfdocu-patches.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,7 +1,7 @@
 \RequirePackage{expl3}[2018/06/14]
 %\RequirePackage[enable-debug]{expl3}[2018/06/14]
 \RequirePackage{xpatch}
-\ProvidesExplPackage {tagpdfdocu-patches} {2019/07/02} {0.61}
+\ProvidesExplPackage {tagpdfdocu-patches} {2019/10/15} {0.70}
  {patches/commands for the tagpdf documentation}
 
 % to do : marginnote, perhaps the description macros ...
@@ -30,20 +30,20 @@
 
 \NewDocumentCommand\TagP{t{^}}
  {
-  \uftag_mc_if_in:T { \uftag_mc_end: }
+  \tag_mc_if_in:T { \tag_mc_end: }
   \IfBooleanF{#1}
   {
-    \uftag_struct_end:
+    \tag_struct_end:
   }
-  \uftag_struct_begin:n{tag=P}
-  \uftag_mc_begin:n{tag=P}
+  \tag_struct_begin:n{tag=P}
+  \tag_mc_begin:n{tag=P}
  }
 % close a mc and one structure
 
 \NewDocumentCommand\TagPend{}
  {
-  \uftag_mc_if_in:T { \uftag_mc_end: }
-  \uftag_struct_end:
+  \tag_mc_if_in:T { \tag_mc_end: }
+  \tag_struct_end:
  }
 
 
@@ -58,15 +58,15 @@
 
 %Marking the toc entries
 %around the whole entry so only structure:
-\newcommand\tagscrtocentry[1]{\uftag_struct_begin:n{tag=TOCI}#1\uftag_struct_end:}
+\newcommand\tagscrtocentry[1]{\tag_struct_begin:n{tag=TOCI}#1\tag_struct_end:}
 
 %leaf so structure and mc:
 \newcommand\tagscrtocpagenumber[1]{%
- \uftag_struct_begin:n{tag=Reference}%
- \uftag_mc_begin:n{tag=Reference}%
+ \tag_struct_begin:n{tag=Reference}%
+ \tag_mc_begin:n{tag=Reference}%
  #1%
- \uftag_mc_end:
- \uftag_struct_end:}
+ \tag_mc_end:
+ \tag_struct_end:}
 
 
 \DeclareTOCStyleEntry[
@@ -85,9 +85,9 @@
 
 
 \renewcommand{\addtocentrydefault}[3]{%
- \ifstr{#3}{}{}
+ \Ifstr{#3}{}{}
    {%\
-   \ifstr{#2}{}
+   \Ifstr{#2}{}
     {%
      \addcontentsline{toc}{#1}
       {%
@@ -118,7 +118,7 @@
 
 \renewcommand*{\TOCLineLeaderFill}[1][.]{
   \leaders\hbox{$\m at th
-    \mkern \@dotsep mu\hbox{\uftag_mc_begin:n{artifact}#1\uftag_mc_end:}\mkern \@dotsep
+    \mkern \@dotsep mu\hbox{\tag_mc_begin:n{artifact}#1\tag_mc_end:}\mkern \@dotsep
     mu$}\hfill
 }
 
@@ -142,34 +142,34 @@
     \tagstructbegin{tag=\prop_item:Nn\g_tag_section_level_prop{#1}}
     \tl_if_empty:nF{#3}
     {
-     \uftag_mc_begin:n    {tag=\prop_item:Nn\g_tag_section_level_prop{#1}}
+     \tag_mc_begin:n    {tag=\prop_item:Nn\g_tag_section_level_prop{#1}}
      #3
-     \uftag_mc_end:
+     \tag_mc_end:
     }
    }
-   {\uftag_mc_begin:n    {tag=\prop_item:Nn\g_tag_section_level_prop{#1}}
+   {\tag_mc_begin:n    {tag=\prop_item:Nn\g_tag_section_level_prop{#1}}
     #4
-    \uftag_mc_end:\tagstructend}%
+    \tag_mc_end:\tagstructend}%
  }
 
 %minisec is simply P, H6 doesn't work ....
-\cs_new:Nn \__uftag_docu_tag_minisec:n
+\cs_new:Nn \__tag_docu_tag_minisec:n
 {
-  \uftag_struct_begin:n {tag=P}
-  \uftag_mc_begin:n{tag=P}
+  \tag_struct_begin:n {tag=P}
+  \tag_mc_begin:n{tag=P}
   #1
-  \uftag_mc_end:
-  \uftag_struct_end:
+  \tag_mc_end:
+  \tag_struct_end:
 }
 
-\addtokomafont{minisec}{\__uftag_docu_tag_minisec:n}
+\addtokomafont{minisec}{\__tag_docu_tag_minisec:n}
 
-\AfterTOCHead{\uftag_struct_begin:n{tag=TOC}}
-\AfterStartingTOC{\uftag_struct_end:} %end TOC
+\AfterTOCHead{\tag_struct_begin:n{tag=TOC}}
+\AfterStartingTOC{\tag_struct_end:} %end TOC
 
 %% list
 
-\newcommand\uftag at enit@format at preset[1]{%
+\newcommand\tag at enit@format at preset[1]{%
   \tagstructbegin{tag=LI}%
   \tagstructbegin{tag=Lbl}%
   \tagmcbegin{tag=Lbl}%
@@ -190,7 +190,7 @@
 }
 
 \ExplSyntaxOff
-\xpatchcmd\enit at preset{\@firstofone}{\uftag at enit@format at preset}{}{\fail}
+\xpatchcmd\enit at preset{\@firstofone}{\tag at enit@format at preset}{}{\fail}
 \ExplSyntaxOn
 \setlist{
     before*=\tagstructbegin{tag=L},
@@ -209,62 +209,95 @@
  %%% attention, to get the order right, it is necessary currently to start a new
  %%% mc after a link! I'm not sure if this can/group be included in the hooks
  %%% grouping is a bit tricky ...
-\cs_if_exist:NT\hook_put_left:nnn
-{
- \hook_put_left:nnn
- { pdf }
- { link_begin_url }
- {
-   \uftag_struct_begin:n{tag=Link}
-   \uftag_mc_begin:n{tag=Link}
- }
-\hook_put:nnnn
- { pdf }
- { link_begin_url_attr }
- { /StructParent }
- { \int_use:N\c at g__uftag_parenttree_obj_int }
+%\cs_if_exist:NT\hook_put_left:nnn
+%{
+% \hook_put_left:nnn
+% { pdf }
+% { annot/Link/URI_begin }
+% {
+%   \tag_struct_begin:n{tag=Link}
+%   \tag_mc_begin:n{tag=Link}
+% }
 
-\hook_put_right:nnn
- { pdf }
- { link_end_url }
- {
-  \__uftag_struct_finish_link:
-   \uftag_mc_end:
-   \uftag_struct_end:
- }
+\cs_generate_variant:Nn \pdfannot_dict_put:nnn {nnx}
+\hook_gput_code:nnn
+  {pdfannot/link/URI/before}
+  {tagpdf}
+  {
+    \tag_struct_begin:n{tag=Link}
+    \tag_mc_begin:n{tag=Link}
+    \pdfannot_dict_put:nnx
+    {link/URI}
+    { StructParent }
+    { \int_use:N\c at g__tag_parenttree_obj_int }
+  }
 
-\hook_put_left:nnn
- { pdf }
- { link_begin_link }
- {
-   \uftag_struct_begin:n{tag=Link}
-   \uftag_mc_begin:n{tag=Link}
- }
-\hook_put:nnnn
- { pdf }
- { link_begin_link_attr }
- { /StructParent }
- { \int_use:N\c at g__uftag_parenttree_obj_int }
-\hook_put_right:nnn
- { pdf }
- { link_end_link }
- {
-  \__uftag_struct_finish_link:
-  \uftag_mc_end:
-  \uftag_struct_end:
- }
+%\hook_put_right:nnn
+% { pdf }
+% { annot/Link/URI_end }
+% {
+%  \__tag_struct_finish_link:
+%   \tag_mc_end:
+%   \tag_struct_end:
+% }
+\hook_gput_code:nnn
+  {pdfannot/link/URI/after}
+  {tagpdf}
+  {
+    \__tag_struct_finish_link:
+    \tag_mc_end:
+    \tag_struct_end:
+  }
 
+%\hook_put_left:nnn
+% { pdf }
+% { annot/Link/GoTo_begin }
+% {
+%   \tag_struct_begin:n{tag=Link}
+%   \tag_mc_begin:n{tag=Link}
+% }
+
+\hook_gput_code:nnn
+  {pdfannot/link/GoTo/before}
+  {tagpdf}
+  {
+    \tag_struct_begin:n{tag=Link}
+    \tag_mc_begin:n{tag=Link}
+    \pdfannot_dict_put:nnx
+    {link/GoTo}
+    { StructParent }
+    { \int_use:N\c at g__tag_parenttree_obj_int }
+  }
+
+
+
+
+%\hook_put_right:nnn
+% { pdf }
+% { annot/link/GoTo_end }
+% {
+%  \__tag_struct_finish_link:
+%  \tag_mc_end:
+%  \tag_struct_end:
+% }
+
+\hook_gput_code:nnn
+  {pdfannot/link/GoTo/after}
+  {tagpdf}
+  {
+    \__tag_struct_finish_link:
+    \tag_mc_end:
+    \tag_struct_end:
+  }
 % "alternative descriptions " for PAX3. How to get better text here??
-\hook_put:nnnn
- { pdf }
- { link_begin_url_attr }
- { /Contents }
+\pdfannot_dict_put:nnx
+ {link/URI}
+ { Contents }
  { (url) }
 
-\hook_put:nnnn
- { pdf }
- { link_begin_link_attr }
- { /Contents }
+\pdfannot_dict_put:nnx
+ {link/GoTo}
+ { Contents }
  { (ref) }
- }
+
 \endinput

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tikzmark/tikzlibrarytikzmark.code.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tikzmark/tikzlibrarytikzmark.code.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tikzmark/tikzlibrarytikzmark.code.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -12,6 +12,10 @@
 %% See http://www.latex-project.org/lppl.txt
 %% ----------------------------------------------------------------
 %% 
+\ProvidesFile{tikzlibrarytikzmark.code.tex}[%
+  2021/02/16
+  v1.10
+  TikZ library for marking positions in a document]
 \RequirePackage{expl3, l3keys2e, xparse}
 \tikzset{%
   remember picture with id/.style={%
@@ -32,6 +36,28 @@
       \fi%
     },
   },
+  check picture id/.code={
+    \ifpgfrememberpicturepositiononpage
+    \@ifundefined{pgf at sys@pdf at mark@pos@\pgfpictureid}{%
+      \tikzset{%
+        name prefix/.get=\tzmk at name@prefix,
+        name prefix/.prefix=discard-,
+        execute at end picture={%
+          \tikzset{name prefix/.expand once=\tzmk at name@prefix}%
+        },
+      }%
+    }{}%
+    \fi
+  },
+  maybe define node/.style={%
+    execute at end picture={%
+      \ifpgfrememberpicturepositiononpage
+      \@ifundefined{pgf at sh@pi@\tikz at pp@name{#1}}{%
+        \pgfnodealias{\tikz at pp@name{#1}}{discard-\tikz at pp@name{#1}}%
+      }{}%
+      \fi
+    }%
+  },
   save picture id/.code={%
       \protected at write\pgfutil at auxout{}{%
       \string\savepointas%
@@ -65,10 +91,14 @@
     \@ifundefined{save at pt@\tikzmark at pp@name{#1}}{%
       \pgfkeysalso{#3}%
     }{%
-      \@ifundefined{save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname}{%
+      \@ifundefined{%
+        save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname
+      }{%
         \pgfkeysalso{#3}%
       }{%
-        \ifnum\csname save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname\endcsname=\the\value{page}\relax%
+        \ifnum\csname save at pg@%
+        \csname save at pt@\tikzmark at pp@name{#1}\endcsname%
+        \endcsname=\the\value{page}\relax%
         \pgfkeysalso{#2}%
         \else
         \pgfkeysalso{#3}%
@@ -80,10 +110,14 @@
     \@ifundefined{save at pt@\tikzmark at pp@name{#1}}{%
       \pgfkeysalso{#4}%
     }{%
-      \@ifundefined{save at pg@\csname save at pt@\tikzmark at pp@name{#1}@label\endcsname}{%
+      \@ifundefined{%
+        save at pg@\csname save at pt@\tikzmark at pp@name{#1}@label\endcsname%
+      }{%
         \pgfkeysalso{#4}%
       }{%
-        \ifnum\csname save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname\endcsname=#2\relax%
+        \ifnum\csname save at pg@%
+        \csname save at pt@\tikzmark at pp@name{#1}\endcsname%
+        \endcsname=#2\relax%
         \pgfkeysalso{#3}%
         \else
         \pgfkeysalso{#4}%
@@ -143,7 +177,12 @@
       \@ifundefined{save at pg@\csname save at pt@\tmk at label\endcsname}{}{%
         \@ifundefined{save at pg@\pgfpictureid}{}{%
           \pgfkeysvalueof{/tikz/next page vector}%
-        \edef\tmk at pg{\the\numexpr \csname save at pg@\csname save at pt@\tmk at label\endcsname\endcsname - \csname save at pg@\pgfpictureid\endcsname\relax}%
+        \edef\tmk at pg{%
+          \the\numexpr \csname save at pg@%
+          \csname save at pt@\tmk at label\endcsname\endcsname%
+          -
+          \csname save at pg@\pgfpictureid\endcsname\relax%
+        }%
         \ifnum \tmk at pg > 0 \relax
         \advance \pgf at xa by \pgf at x\relax
         \advance \pgf at ya by \pgf at y\relax
@@ -161,6 +200,7 @@
   }%
 }
 \newcommand\tikzmark at outside[2][]{%
+\tikzset{external/export next/.try=false}%
 \tikz[remember picture with id=#2]{#1}%
 }
 \def\tikzmark at inside#1#2{%
@@ -167,7 +207,8 @@
   \tikzset{remember picture}%
   \tikz at scan@one at point\pgfutil at firstofone#2\relax
   \protected at write\pgfutil at auxout{}{%
-    \string\savepointas{\tikzmark at pp@name{#1}}{\pgfpictureid}{\the\pgf at x}{\the\pgf at y}}%
+    \string\savepointas%
+    {\tikzmark at pp@name{#1}}{\pgfpictureid}{\the\pgf at x}{\the\pgf at y}}%
 }
 \def\tikzmark{%
   \ifx\pgfpictureid\@undefined
@@ -234,7 +275,9 @@
     \@ifundefined{save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname}{%
       \tikzmark at false
     }{%
-      \ifnum\csname save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname\endcsname=#2\relax%
+      \ifnum\csname save at pg@%
+      \csname save at pt@\tikzmark at pp@name{#1}\endcsname%
+      \endcsname=#2\relax%
       \tikzmark at true
       \else
       \tikzmark at false
@@ -250,7 +293,9 @@
     \@ifundefined{save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname}{%
       \tikzmark at false
     }{%
-      \ifnum\csname save at pg@\csname save at pt@\tikzmark at pp@name{#1}\endcsname\endcsname=\the\value{page}\relax%
+      \ifnum\csname save at pg@%
+      \csname save at pt@\tikzmark at pp@name{#1}\endcsname%
+      \endcsname=\the\value{page}\relax%
       \tikzmark at true
       \else
       \tikzmark at false
@@ -356,10 +401,13 @@
 }
 
 \def\tikzmarknode@#1#2#3{%
+\tikzset{external/export next/.try=false}%
   \tikz[%
     remember picture,
+    save picture id={#2},
+    check picture id,
+    maybe define node={#2},
     baseline=(#2.base),
-    save picture id={#2},
     every tikzmarknode picture/.try
   ] {
     \node[
@@ -394,25 +442,25 @@
   \expandafter\ifx\csname\tzmk at pic\endcsname\relax
 \edef\tzmk at pic{\tzmk at prfx\the\numexpr\the\pgf at picture@serial at count-3\relax}%
   \expandafter\ifx\csname\tzmk at pic\endcsname\relax
-  \pgfutil at ifundefined{pgf at sh@ns@#2}{%
-    \pgfnodealias{#2}{#2-t}%
-    \tikzmarkalias{#2}{#2-t}%
+  \pgfutil at ifundefined{pgf at sh@ns@\tikz at pp@name{#2}}{%
+    \pgfnodealias{\tikz at pp@name{#2}}{\tikz at pp@name{#2-t}}%
+    \tikzmarkalias{\tikzmark at pp@name{#2}}{\tikzmark at pp@name{#2-t}}%
   }{}%
   \else
-    \pgfnodealias{#2}{#2-d}%
-    \tikzmarkalias{#2}{#2-d}%
+    \pgfnodealias{\tikz at pp@name{#2}}{\tikz at pp@name{#2-d}}%
+    \tikzmarkalias{\tikzmark at pp@name{#2}}{\tikzmark at pp@name{#2-d}}%
   \fi
   \else
-    \pgfnodealias{#2}{#2-t}%
-    \tikzmarkalias{#2}{#2-t}%
+    \pgfnodealias{\tikz at pp@name{#2}}{\tikz at pp@name{#2-t}}%
+    \tikzmarkalias{\tikzmark at pp@name{#2}}{\tikzmark at pp@name{#2-t}}%
   \fi
   \else
-    \pgfnodealias{#2}{#2-s}%
-    \tikzmarkalias{#2}{#2-s}%
+    \pgfnodealias{\tikz at pp@name{#2}}{\tikz at pp@name{#2-s}}%
+    \tikzmarkalias{\tikzmark at pp@name{#2}}{\tikzmark at pp@name{#2-s}}%
   \fi
   \else
-    \pgfnodealias{#2}{#2-ss}%
-    \tikzmarkalias{#2}{#2-ss}%
+    \pgfnodealias{\tikz at pp@name{#2}}{\tikz at pp@name{#2-ss}}%
+    \tikzmarkalias{\tikzmark at pp@name{#2}}{\tikzmark at pp@name{#2-ss}}%
   \fi
   \else
     \tikzmarknode@{#1}{#2}{#3}%
@@ -772,7 +820,7 @@
 }
 \ExplSyntaxOff
 %% 
-%% Copyright (C) 2011-2018 by Andrew Stacey <loopspace at mathforge.org>
+%% Copyright (C) 2011-2021 by Andrew Stacey <loopspace at mathforge.org>
 %% 
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License (LPPL), either

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tikzmark/tikzmarklibrarylistings.code.tex
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tikzmark/tikzmarklibrarylistings.code.tex	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tikzmark/tikzmarklibrarylistings.code.tex	2021-02-24 18:00:42 UTC (rev 57872)
@@ -13,7 +13,8 @@
 %% ----------------------------------------------------------------
 %% 
 \@ifpackageloaded{listings}{%
-    \newif\iflst at linemark
+  \newif\iflst at linemark
+  \lst at linemarktrue
 \lst at AddToHook{EveryLine}{%
   \begingroup
   \advance\c at lstnumber by 1\relax
@@ -47,7 +48,7 @@
     \PackageError{tikzmark listings}{The listings package has not been loaded.}{}
 }
 %% 
-%% Copyright (C) 2011-2018 by Andrew Stacey <loopspace at mathforge.org>
+%% Copyright (C) 2011-2021 by Andrew Stacey <loopspace at mathforge.org>
 %% 
 %% This work may be distributed and/or modified under the
 %% conditions of the LaTeX Project Public License (LPPL), either

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamercolorthemeTUDa.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamercolorthemeTUDa.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamercolorthemeTUDa.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `beamercolorthemeTUDa.sty' version 3.10 (2021/02/05),
+%% This is file `beamercolorthemeTUDa.sty' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{beamercolorthemeTUDa}
 [\filedate\space\fileversion]

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerfontthemeTUDa.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerfontthemeTUDa.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerfontthemeTUDa.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `beamerfontthemeTUDa.sty' version 3.10 (2021/02/05),
+%% This is file `beamerfontthemeTUDa.sty' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{beamerfontthemeTUDa}
  [\filedate\space\fileversion]

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerinnerthemeTUDa.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerinnerthemeTUDa.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerinnerthemeTUDa.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `beamerinnerthemeTUDa.sty' version 3.10 (2021/02/05),
+%% This is file `beamerinnerthemeTUDa.sty' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesExplPackage{beamerinnerthemeTUDa}{\filedate}{\fileversion}{Inner~beamer~theme~of~tuda-ci}
 

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerouterthemeTUDa.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerouterthemeTUDa.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerouterthemeTUDa.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `beamerouterthemeTUDa.sty' version 3.10 (2021/02/05),
+%% This is file `beamerouterthemeTUDa.sty' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesExplPackage{beamerouterthemeTUDa}{\filedate}{\fileversion}{Outer~beamer~theme~of~tuda-ci}
 

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerthemeTUDa-mecheng.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerthemeTUDa-mecheng.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerthemeTUDa-mecheng.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `beamerthemeTUDa-mecheng.sty' version 3.10 (2021/02/05),
+%% This is file `beamerthemeTUDa-mecheng.sty' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \RequirePackage{expl3}
 \ProvidesExplPackage{beamerthemeTUDa-mecheng}{\filedate}{\fileversion}{specific tudabeamer configuration for the department of mechanical engineering}
 

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerthemeTUDa.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerthemeTUDa.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/beamerthemeTUDa.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `beamerthemeTUDa.sty' version 3.10 (2021/02/05),
+%% This is file `beamerthemeTUDa.sty' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{beamerthemeTUDa}
  [\filedate\space\fileversion\space beamer theme using the Corporate Design of TU Darmstadt]

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a0paper.clo
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a0paper.clo	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a0paper.clo	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tuda-a0paper.clo' version 3.10 (2021/02/05),
+%% This is file `tuda-a0paper.clo' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \ProvidesExplFile{tuda-a0paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a0paper}
 \cs_set:Nn \ptxcd_setup_title_sizes: {
 	\cs_set:Nn \ptxcd_title_fontsize: {{125pt}{165pt}}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a1paper.clo
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a1paper.clo	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a1paper.clo	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tuda-a1paper.clo' version 3.10 (2021/02/05),
+%% This is file `tuda-a1paper.clo' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \ProvidesExplFile{tuda-a1paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a0paper}
 \cs_set:Nn \ptxcd_setup_title_sizes: {
 		\cs_set:Nn \ptxcd_title_fontsize: {{86pt}{120pt}}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a2paper.clo
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a2paper.clo	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a2paper.clo	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tuda-a2paper.clo' version 3.10 (2021/02/05),
+%% This is file `tuda-a2paper.clo' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \ProvidesExplFile{tuda-a2paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a0paper}
 \cs_set:Nn \ptxcd_setup_title_sizes: {
 		\cs_set:Nn \ptxcd_title_fontsize: {{65pt}{82pt}}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a3paper.clo
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a3paper.clo	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a3paper.clo	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tuda-a3paper.clo' version 3.10 (2021/02/05),
+%% This is file `tuda-a3paper.clo' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \ProvidesExplFile{tuda-a3paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a3paper}
 \cs_set:Nn \ptxcd_setup_title_sizes: {
   \cs_set:Nn \ptxcd_title_fontsize: {{47pt}{61pt}}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a4paper.clo
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a4paper.clo	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a4paper.clo	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tuda-a4paper.clo' version 3.10 (2021/02/05),
+%% This is file `tuda-a4paper.clo' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \ProvidesExplFile{tuda-a4paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a4paper}
 \cs_set:Nn \ptxcd_setup_title_sizes: {
   \cs_set:Nn \ptxcd_title_fontsize: {{36pt}{47pt}}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a5paper.clo
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a5paper.clo	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-a5paper.clo	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tuda-a5paper.clo' version 3.10 (2021/02/05),
+%% This is file `tuda-a5paper.clo' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \ProvidesExplFile{tuda-a5paper.clo}{\filedate}{\fileversion}{tuda-ci~size~adjustments~for~a5paper}
 \cs_set:Nn \ptxcd_setup_title_sizes: {
   \cs_set:Nn \ptxcd_title_fontsize: {{22pt}{28pt}}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-pgfplots.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-pgfplots.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tuda-pgfplots.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tuda-pgfplots.sty' version 3.10 (2021/02/05),
+%% This is file `tuda-pgfplots.sty' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 % Special thanks to: Sebastian Schöps Institut Theorie Elektromagnetischer Felder (TEMF), TU Darmstadt
 % The original version of this file has been inspired by the colorscheme in the Metropolis beamer theme by Matthias Vogelgesang https://github.com/matze/mtheme
 \ProvidesPackage{tuda-pgfplots}[\filedate\space\fileversion\space tuda-ci pgfplots color schemes]

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudabeamer.cls
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudabeamer.cls	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudabeamer.cls	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tudabeamer.cls' version 3.10 (2021/02/05),
+%% This is file `tudabeamer.cls' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesClass{tudabeamer}
  [\filedate\space\fileversion\space]

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudacolors.def
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudacolors.def	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudacolors.def	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tudacolors.def' version 3.10 (2021/02/05),
+%% This is file `tudacolors.def' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \ProvidesFile{tudacolors.def}
 [\filedate\space\fileversion\space Color definitions for tuda-ci]
 

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudacolors.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudacolors.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudacolors.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tudacolors.sty' version 3.10 (2021/02/05),
+%% This is file `tudacolors.sty' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}
 \ProvidesExplPackage{tudacolors}{\filedate}{\fileversion}{Color definition for TU Darmstadt's tuda-ci bundle}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaexercise.cls
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaexercise.cls	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaexercise.cls	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tudaexercise.cls' version 3.10 (2021/02/05),
+%% This is file `tudaexercise.cls' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}
 \ProvidesExplClass{tudaexercise}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudafonts.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudafonts.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudafonts.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tudafonts.sty' version 3.10 (2021/02/05),
+%% This is file `tudafonts.sty' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{tudafonts}
  [\filedate\space\fileversion\space

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaleaflet.cls
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaleaflet.cls	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaleaflet.cls	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tudaleaflet.cls' version 3.10 (2021/02/05),
+%% This is file `tudaleaflet.cls' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}
 \ProvidesExplPackage{tudaleaflet}{\filedate}{\fileversion}{Leaflets using the Corporate Design of TU Darmstadt}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaletter.cls
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaletter.cls	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaletter.cls	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tudaletter.cls' version 3.10 (2021/02/05),
+%% This is file `tudaletter.cls' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}
 \ProvidesExplClass{tudaletter}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudalettersize10pt.clo
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudalettersize10pt.clo	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudalettersize10pt.clo	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tudalettersize10pt.clo' version 3.10 (2021/02/05),
+%% This is file `tudalettersize10pt.clo' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudamecheng.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudamecheng.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudamecheng.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tudamecheng.cfg' version 3.10 (2021/02/05),
+%% This is file `tudamecheng.cfg' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \RequirePackage{expl3}
 \ProvidesExplFile{tudamecheng.cfg}
 {\filedate}{\fileversion}{Special Features the department of mechanical engineering of Darmstadt's Corporate Design (tuda-ci)}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaposter.cls
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaposter.cls	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudaposter.cls	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tudaposter.cls' version 3.10 (2021/02/05),
+%% This is file `tudaposter.cls' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}
 \ProvidesExplPackage{tudaposter}{\filedate}{\fileversion}{Poster Layouts for the Corporate Design of TU Darmstadt}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudapub.cls
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudapub.cls	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudapub.cls	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tudapub.cls' version 3.10 (2021/02/05),
+%% This is file `tudapub.cls' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}
 \ProvidesExplClass{tudapub}
@@ -195,12 +195,6 @@
 
 \ProcessKeysOptions{ptxcd/pub}
 
-
-%Option adjustments required for valid PDF/A
-\bool_if:NT  \g_ptxcd_pdfa_bool {
-  \PassOptionsToPackage{RGB}{xcolor}
-}
-
 \exp_args:Nx \tl_if_eq:nnT {\prop_item:Nn \g_ptxcd_clsopts_prop {fontsize}} {9pt}
 	{
 	\prop_if_in:NnF \g_ptxcd_unknown_clsopts_prop {DIV}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudarules.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudarules.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudarules.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tudarules.sty' version 3.10 (2021/02/05),
+%% This is file `tudarules.sty' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}
 \ProvidesExplPackage{tudarules}{\filedate}{\fileversion}{Creation of colored bars for tuda-ci bundle}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudasciposter.cls
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudasciposter.cls	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudasciposter.cls	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tudasciposter.cls' version 3.10 (2021/02/05),
+%% This is file `tudasciposter.cls' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}
 \ProvidesExplPackage{tudasciposter}{\filedate}{\fileversion}{Scientific Poster Layout for TU Darmstadt}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudasize9pt.clo
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudasize9pt.clo	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudasize9pt.clo	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tudasize9pt.clo' version 3.10 (2021/02/05),
+%% This is file `tudasize9pt.clo' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------

Modified: branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudathesis.cfg
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudathesis.cfg	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/tuda-ci/tudathesis.cfg	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,4 +1,4 @@
-%% This is file `tudathesis.cfg' version 3.10 (2021/02/05),
+%% This is file `tudathesis.cfg' version 3.11 (2021/02/22),
 %% it is part of
 %% TUDa-CI -- Corporate Design for TU Darmstadt
 %% ----------------------------------------------------------------------------
@@ -26,8 +26,8 @@
 %%
 %% ============================================================================
 %%
-\def\fileversion{3.10}
-\def\filedate{2021/02/05}
+\def\fileversion{3.11}
+\def\filedate{2021/02/22}
 \RequirePackage{expl3}
 \ProvidesExplFile{tudathesis.cfg}
 {\filedate}{\fileversion}{Special Features for publication type 'thesis' using TU Darmstadt's Corporate Design (tuda-ci)}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-bibcommon.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-bibcommon.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-bibcommon.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,7 +1,7 @@
 % !Mode:: "TeX:UTF-8"
 %% udesoftec-biblatex.sty
 %% Copyright 2015 J. Peter M. Schuler
-%% 2020/03/09 v1.7.0 udesoftec
+%% 2021/02/22 v1.7.1 udesoftec
 
 %
 % This work may be distributed and/or modified under the
@@ -40,7 +40,7 @@
 % http://mirrors.ctan.org/macros/latex/contrib/udesoftec/udesoftec-doc.pdf
 
 \NeedsTeXFormat{LaTeX2e}%
-\ProvidesPackage{udesoftec-bibcommon}[2020/03/09 v1.6.6 udesoftec-bibcommon.sty udesoftec bibstyle configuration commons]%
+\ProvidesPackage{udesoftec-bibcommon}[2021/02/22 v1.7.1 udesoftec-bibcommon.sty udesoftec bibstyle configuration commons]%
 
 
 \newif\ifprimaryDocumentLanguageGerman
@@ -62,6 +62,8 @@
 \RequirePackage{hyperref} % support doi-links
 \RequirePackage{hyphenat} % prevent author names and quotations from hyphenating
 %%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage[doipre={doi:}]{uri}
+
 \providecaptionname{ngerman}{\bbland}{und }%
 \providecaptionname{english}{\bbland}{and }%
 \providecaptionname{british}{\bbland}{and }%
@@ -165,8 +167,8 @@
         \textbf{\emph{BibError: #2 -- #1}}%
     }
 \fi
-\providecommand{\bblyear}[1]{\ifnumber{#1}{#1}{\bblnoyear}}
-\providecommand{\bbledGenerateEdition}[1]{\ifnumber{#1}{\bbledOrdinal{#1}\bbledn}{#1}}
+\providecommand{\bblyear}[1]{\Ifnumber{#1}{#1}{\bblnoyear}}
+\providecommand{\bbledGenerateEdition}[1]{\Ifnumber{#1}{\bbledOrdinal{#1}\bbledn}{#1}}
 
 \providecommand{\englishordinal}[1]{\ifcase #1\or 1\textsuperscript{st}\or 2\textsuperscript{nd}\or 3\textsuperscript{rd}\else #1\textsuperscript{th}\fi}
 \providecommand{\germanordinal}[1]{#1.}
@@ -179,12 +181,9 @@
 }
 
 
-% http://tex.stackexchange.com/questions/262103/interpret-tex-commands-and-remove-curly-braces-from-href-content/262133#262133
+% taken from pkg:uri
 \providecommand{\bbldoi}[1]{%
-  \def\tmpdoi{#1}%
-  \xpatchcmd*\tmpdoi{{_}}{_}{}{}%
-  \def\tmpdoitext{\detokenize\expandafter{\tmpdoi}}%
-  \href{http://dx.doi.org/\tmpdoi}{doi:\tmpdoitext}%
+  \doi{#1}%
 }%
 
 \RequirePackage{xstring}

Modified: branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-biblatex.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-biblatex.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-biblatex.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,7 +1,7 @@
 % !Mode:: "TeX:UTF-8"
 %% udesoftec-biblatex.sty
 %% Copyright 2015 J. Peter M. Schuler
-%% 2020/03/09 v1.7.0 udesoftec
+%% 2021/02/22 v1.7.1 udesoftec
 
 %
 % This work may be distributed and/or modified under the
@@ -40,7 +40,7 @@
 % http://mirrors.ctan.org/macros/latex/contrib/udesoftec/udesoftec-doc.pdf
 
 \NeedsTeXFormat{LaTeX2e}%
-\ProvidesPackage{udesoftec-biblatex}[2020/03/09 v1.6.6 udesoftec-biblatex.sty udesoftec bibstyle configuration for biblatex]%
+\ProvidesPackage{udesoftec-biblatex}[2021/02/22 v1.7.1 udesoftec-biblatex.sty udesoftec bibstyle configuration for biblatex]%
 
 % 
 % \newif\ifprimaryDocumentLanguageGerman
@@ -228,13 +228,13 @@
 }
 
 
-\providebibmacro*{date+extrayear}{}
+\providebibmacro*{date+extradate}{}
 
 \def\bbx at opt@mergedate at true{\bbx at opt@mergedate at compact}
 
 % merge date/issue with date label
 \def\bbx at opt@mergedate at maximum{%
-  \renewbibmacro*{date+extrayear}{%
+  \renewbibmacro*{date+extradate}{%
     \iffieldundef{\thefield{datelabelsource}year}
       {}
       {\printtext[parens]{%
@@ -243,13 +243,13 @@
          \iffieldsequal{year}{\thefield{datelabelsource}year}
            {\printdateextralabel}%
            {\printfield{labelyear}%
-            \printfield{extrayear}}}}}%
+            \printfield{extradate}}}}}%
   \renewbibmacro*{date}{}%
   \renewbibmacro*{issue+date}{}}
 
 % merge date with date label
 \def\bbx at opt@mergedate at compact{%
-  \renewbibmacro*{date+extrayear}{%
+  \renewbibmacro*{date+extradate}{%
     \iffieldundef{\thefield{datelabelsource}year}
       {}
       {\printtext[parens]{%
@@ -256,7 +256,7 @@
          \iffieldsequal{year}{\thefield{datelabelsource}year}
            {\printdateextralabel}%
            {\printfield{labelyear}%
-            \printfield{extrayear}}}}}%
+            \printfield{extradate}}}}}%
   \renewbibmacro*{date}{}%
   \renewbibmacro*{issue+date}{%
     \iffieldundef{issue}
@@ -266,12 +266,12 @@
 
 % merge year-only date with date label
 \def\bbx at opt@mergedate at basic{%
-  \renewbibmacro*{date+extrayear}{%
+  \renewbibmacro*{date+extradate}{%
     \iffieldundef{\thefield{datelabelsource}year}
       {}
       {\printtext[parens]{%
          \printfield{\thefield{datelabelsource}year}%
-         \printfield{extrayear}}}}%
+         \printfield{extradate}}}}%
   \renewbibmacro*{date}{%
     \iffieldundef{month}
       {}
@@ -291,17 +291,17 @@
 
 % merge year-only date with year-only date label
 \def\bbx at opt@mergedate at minimum{%
-  \renewbibmacro*{date+extrayear}{%
+  \renewbibmacro*{date+extradate}{%
     \iffieldundef{\thefield{datelabelsource}year}
       {}
       {\printtext[parens]{%
          \printfield{\thefield{datelabelsource}year}%
-         \printfield{extrayear}}}}%
+         \printfield{extradate}}}}%
   \renewbibmacro*{date}{%
     \ifboolexpr{
       test {\iffieldundef{month}}
       and
-      test {\iffieldundef{extrayear}}
+      test {\iffieldundef{extradate}}
     }
       {}
       {\printdate}}%
@@ -311,7 +311,7 @@
       and
       test {\iffieldundef{month}}
       and
-      test {\iffieldundef{extrayear}}
+      test {\iffieldundef{extradate}}
     }
       {}
       {\printtext[parens]{%
@@ -322,12 +322,12 @@
 
 % don't merge date/issue with date label
 \def\bbx at opt@mergedate at false{%
-  \renewbibmacro*{date+extrayear}{%
+  \renewbibmacro*{date+extradate}{%
     \iffieldundef{\thefield{datelabelsource}year}
       {}
       {\printtext[parens]{%
          \printfield{\thefield{datelabelsource}year}%
-         \printfield{extrayear}}}}%
+         \printfield{extradate}}}}%
   \renewbibmacro*{date}{\printdate}%
   \renewbibmacro*{issue+date}{%
     \printtext[parens]{%
@@ -359,7 +359,7 @@
     {\global\undef\bbx at lasthash
      \usebibmacro{labeltitle}%
      \setunit*{\addspace}}%
-\bblFontYearInList{\usebibmacro{date+extrayear}}}
+\bblFontYearInList{\usebibmacro{date+extradate}}}
 \renewbibmacro*{in:}{\printtext{\bblin}}
 \renewbibmacro*{editor}{%
   \usebibmacro{bbx:editor}{editorstrg}}
@@ -385,7 +385,7 @@
     {\global\undef\bbx at lasthash
      \usebibmacro{labeltitle}%
      \setunit*{\addspace}}%
-\bblFontYearInList{\usebibmacro{date+extrayear}}}
+\bblFontYearInList{\usebibmacro{date+extradate}}}
  % erst publisher, dann location
  \renewbibmacro*{publisher+location+date}{%
   \printlist{publisher}%

Modified: branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-bst.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-bst.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-bst.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,7 +1,7 @@
 % !Mode:: "TeX:UTF-8"
 %% udesoftec-bst.sty
 %% Copyright 2015 J. Peter M. Schuler
-%% 2020/03/09 v1.7.0 udesoftec
+%% 2021/02/22 v1.7.1 udesoftec
 
 %
 % This work may be distributed and/or modified under the
@@ -40,7 +40,7 @@
 % http://mirrors.ctan.org/macros/latex/contrib/udesoftec/udesoftec-doc.pdf
 
 \NeedsTeXFormat{LaTeX2e}%
-\ProvidesPackage{udesoftec-bst}[2020/03/09 v1.6.6 udesoftec-bst.sty udesoftec bibstyle configuration for bibtex]%
+\ProvidesPackage{udesoftec-bst}[2021/02/22 v1.7.1 udesoftec-bst.sty udesoftec bibstyle configuration for bibtex]%
 
 
 \newif\ifprimaryDocumentLanguageGerman

Modified: branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-extra.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-extra.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec-extra.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,7 +1,7 @@
 % !Mode:: "TeX:UTF-8"
 %% udesoftec-extra.sty
 %% Copyright 2013-2015 J. Peter M. Schuler
-%% 2020/03/09 v1.6.6 udesoftec
+%% 2021/02/22 v1.7.1 udesoftec
 %
 % This work may be distributed and/or modified under the
 % conditions of the LaTeX Project Public License, either version 1.3
@@ -38,6 +38,6 @@
 % and
 % http://mirrors.ctan.org/macros/latex/contrib/udesoftec/udesoftec-doc.pdf
 \NeedsTeXFormat{LaTeX2e}%
-\ProvidesPackage{udesoftec-extra}[2020/03/09 v1.6.6 udesoftec-extra.sty additions which are currently optional and may break former behaviour]%
+\ProvidesPackage{udesoftec-extra}[2021/02/22 v1.7.1-alpha udesoftec-extra.sty additions which are currently optional and may break former behaviour]%
 %%%%%%%%%%%%%%%%%%%%%%%%%
 % empty - everything from 1.4.x is merged into main files
\ No newline at end of file

Modified: branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec.cls
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec.cls	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/latex/udesoftec/udesoftec.cls	2021-02-24 18:00:42 UTC (rev 57872)
@@ -1,7 +1,7 @@
 % !Mode:: "TeX:UTF-8"
 %% udesoftec.cls
 %% Copyright 2013-2015 J. Peter M. Schuler
-%% 2020/03/09 v1.7.0 udesoftec
+%% 2021/02/22 v1.7.1 udesoftec
 %
 % This work may be distributed and/or modified under the
 % conditions of the LaTeX Project Public License, either version 1.3
@@ -39,7 +39,7 @@
 % http://mirrors.ctan.org/macros/latex/contrib/udesoftec/udesoftec-doc.pdf
 
 \NeedsTeXFormat{LaTeX2e}%
-\ProvidesClass{udesoftec}[2020/03/09 v1.6.6 udesoftec.cls Thesis class and bibstyle for UDE SOFTEC]%
+\ProvidesClass{udesoftec}[2021/02/22 v1.7.1 udesoftec.cls Thesis class and bibstyle for UDE SOFTEC]%
 
 % class is based on KOMA-script http://www.ctan.org/pkg/koma-script
 \LoadClass{scrbook}
@@ -270,7 +270,7 @@
 \labelRespectConfidentiality{(Sperrvermerk beachten)}
 \academicfield{Wirtschaftsinformatik}
 \institution{Vorgelegt der Fakult\"at f\"ur Wirtschaftswissenschaften der\par Universit\"at Duisburg-Essen}
-\semester{\udesoftec at academicfield -- Sommersemester 2016}
+\semester{\udesoftec at academicfield -- Sommersemester 2022}
 \entitle{Englischer Titel der Arbeit}
 \confidentialitySource{Name der Firma, die auf die Vertraulichkeitserkl\"arung besteht}
 \date{Dokumentversion: \today \linebreak Templateversion:
@@ -285,8 +285,6 @@
   Gutacher:&Prof. Dr. Stefan Eicker\\
              &Prof. Dr. John Doe\\
     \\
-    Betreuer:&Dipl.-Wirt.-Inf Some Body\\
-    \\
 \end{tabularx}
 }
 
@@ -300,7 +298,7 @@
     \labelRespectConfidentiality{(Adhere confidentially clause --- Sperrvermerk beachten)}
     \academicfield{Business Information Systems}
     \institution{Presented to the Faculty of Economics and Business Administration of\par University of Duisburg-Essen}
-    \semester{\udesoftec at academicfield{} -- Summer semester 2016}
+    \semester{\udesoftec at academicfield{} -- Summer semester 2022}
     \confidentialitySource{Name of Company which wants the statutory declaration}
     \date{Document version: \today \linebreak Template version:
 \udesoftecversion{} (with \udesoftec at bblengine)}
@@ -313,8 +311,6 @@
       Examiner:&Prof. Dr. Stefan Eicker\\
                  &Prof. Dr. John Doe\\
         \\
-        Supervisor:&Dipl.-Wirt.-Inf Some Body\\
-        \\
     \end{tabularx}
     }
 \fi
@@ -782,9 +778,9 @@
 
 % default page behaviour: header has line, chap.section left; page right
 \pagestyle{scrheadings}
-\clearscrheadings
-\clearscrplain
-\clearscrheadfoot
+\clearmainofpairofpagestyles
+\clearplainofpairofpagestyles
+\clearpairofpagestyles
 % change color of headsepline
 \addtokomafont{headsepline}{\color{Headsepline}}
 % deprecating following line
@@ -1067,6 +1063,11 @@
                         hyperindex,linktoc=section,pdfstartview=FitV,
                         pdfpagelabels,
 bookmarks=true,bookmarksopen=true,bookmarksopenlevel=1,bookmarksnumbered=true]{hyperref}%
+\usepackage[
+open,
+openlevel=1,
+numbered=true
+]{bookmark}
 \AfterEndPreamble{\def\subsectionautorefname{\sectionautorefname}}
 \AfterEndPreamble{\def\subsubsectionautorefname{\sectionautorefname}}
 % change url font type to "inherit"
@@ -1082,10 +1083,13 @@
 % for glossary and acronyms; instead of package acronym
 % special: glossary after hyperref
 % special:\AtEndDocument{\printglossary} before usepackage to suppress warning of missing printglossary
-%\usepackage[footnote,printonlyused]{acronym}
+\AtEndDocument{%
+    \printglossary%
+}
 \usepackage[acronym,nonumberlist,section=chapter,toc,nowarn]{glossaries}
 \deftranslation[to=ngerman]{Acronyms}{Abkürzungsverzeichnis}
 \deftranslation[to=ngerman]{Glossary}{Glossar}
+\GlsSetQuote{+}
 \makeglossaries
 \newglossarystyle{myAcronymStyle}{%
 % put the glossary in the itemize environment:
@@ -1105,9 +1109,6 @@
 }
 
 
-%\AtEndDocument{%
-%    \printglossary%
-%}
 \newcommand{\figref}[1]{\autoref{fig:#1}}
 \newcommand{\eng}[1]{engl.: \emph{\english{#1}}}
 \newcommand{\entode}[1]{engl. für \emph{\english{#1}}}

Modified: branches/branch2020/Master/texmf-dist/tex/platex/pxjahyper/pxjahyper-ajm.def
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/platex/pxjahyper/pxjahyper-ajm.def	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/platex/pxjahyper/pxjahyper-ajm.def	2021-02-24 18:00:42 UTC (rev 57872)
@@ -11,7 +11,7 @@
 
 %% package declaration
 \NeedsTeXFormat{pLaTeX2e}
-\ProvidesFile{pxjahyper-ajm.def}[2021/02/13 v0.7]
+\ProvidesFile{pxjahyper-ajm.def}[2021/02/23 v0.7a]
 
 %% avoid multiple loading
 \csname pxjahyperajmLoaded\endcsname

Modified: branches/branch2020/Master/texmf-dist/tex/platex/pxjahyper/pxjahyper-enc.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/platex/pxjahyper/pxjahyper-enc.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/platex/pxjahyper/pxjahyper-enc.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 
 %% package declaration
 \NeedsTeXFormat{pLaTeX2e}
-\ProvidesPackage{pxjahyper-enc}[2021/02/13 v0.7]
+\ProvidesPackage{pxjahyper-enc}[2021/02/23 v0.7a]
 \def\pxhe at pkgname{pxjahyper-enc}
 \providecommand{\bxDebug}[1]{}
 

Modified: branches/branch2020/Master/texmf-dist/tex/platex/pxjahyper/pxjahyper.sty
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/platex/pxjahyper/pxjahyper.sty	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/texmf-dist/tex/platex/pxjahyper/pxjahyper.sty	2021-02-24 18:00:42 UTC (rev 57872)
@@ -10,7 +10,7 @@
 
 %% package declaration
 \NeedsTeXFormat{pLaTeX2e}
-\ProvidesPackage{pxjahyper}[2021/02/13 v0.7]
+\ProvidesPackage{pxjahyper}[2021/02/23 v0.7a]
 \def\pxhy at pkgname{pxjahyper}
 \providecommand{\bxDebug}[1]{}
 
@@ -540,7 +540,7 @@
   }%
   \ifpxhy at otfmacros
     \ifx\ajSnowman\@undefined\else % ajmacros is loaded
-      \makeatletter
+      \chardef\pxhy at tmp@orgcc=\catcode`\@
       \InputIfFileExists{pxjahyper-ajm.def}{%
         \PackageInfo\pxhy at pkgname
          {Loaded 'pxjahyper-ajm.def'\@gobble}%
@@ -548,7 +548,7 @@
         \PackageWarning\pxhy at pkgname
          {File 'pxjahyper-ajm.def' not found\@gobble}%
       }%
-      \makeatother
+      \catcode`\@=\pxhy at tmp@orgcc
     \fi
   \fi
 }

Modified: branches/branch2020/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- branches/branch2020/Master/tlpkg/bin/tlpkg-ctan-check	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/bin/tlpkg-ctan-check	2021-02-24 18:00:42 UTC (rev 57872)
@@ -572,7 +572,7 @@
     pdf14
     pdf-trans pdfarticle pdfbook2 pdfcolmk pdfcomment pdfcprot pdfcrop
     pdfescape pdfjam
-    pdflatexpicscale pdflscape pdfmarginpar pdfoverlay
+    pdflatexpicscale pdflscape pdfmanagement-testphase pdfmarginpar pdfoverlay
     pdfpagediff pdfpages pdfpc pdfpc-movie pdfprivacy pdfreview
     pdfscreen pdfslide pdfsync
     pdftex-quiet pdftexcmds pdftricks pdftricks2 pdfx pdfxup

Modified: branches/branch2020/Master/tlpkg/installer/ctan-mirrors.pl
===================================================================
--- branches/branch2020/Master/tlpkg/installer/ctan-mirrors.pl	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/installer/ctan-mirrors.pl	2021-02-24 18:00:42 UTC (rev 57872)
@@ -16,8 +16,8 @@
     '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.dgut.edu.cn/CTAN/' => 1,
       'https://mirrors.hit.edu.cn/CTAN/' => 1,
       'https://mirrors.nju.edu.cn/CTAN/' => 1,
       'https://mirrors.sjtug.sjtu.edu.cn/ctan/' => 1,
@@ -124,7 +124,6 @@
       'http://ctan.cs.uu.nl/' => 1,
       'https://ftp.snt.utwente.nl/pub/software/tex/' => 1,
       'https://mirror.koddos.net/CTAN/' => 1,
-      'https://mirror.lyrahosting.com/CTAN/' => 1,
     },
     'Norway' => {
       'https://ctan.uib.no/' => 1,

Modified: branches/branch2020/Master/tlpkg/texlive.tlpdb
===================================================================
--- branches/branch2020/Master/tlpkg/texlive.tlpdb	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/texlive.tlpdb	2021-02-24 18:00:42 UTC (rev 57872)
@@ -26,11 +26,11 @@
 depend frozen/0
 depend minrelease/2016
 depend release/2020
-depend revision/57839
+depend revision/57865
 
 name 00texlive.image
 category TLCore
-revision 57838
+revision 57866
 shortdesc TeX Live files only in the source repository
 longdesc The files here are not copied by the installer and containers
 longdesc are not built for them; they exist only in the source
@@ -3004,6 +3004,7 @@
  tlpkg/tlpsrc/pdfjam.tlpsrc
  tlpkg/tlpsrc/pdflatexpicscale.tlpsrc
  tlpkg/tlpsrc/pdflscape.tlpsrc
+ tlpkg/tlpsrc/pdfmanagement-testphase.tlpsrc
  tlpkg/tlpsrc/pdfmarginpar.tlpsrc
  tlpkg/tlpsrc/pdfoverlay.tlpsrc
  tlpkg/tlpsrc/pdfpagediff.tlpsrc
@@ -4343,7 +4344,7 @@
 
 name 00texlive.installer
 category TLCore
-revision 57828
+revision 57852
 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
@@ -23168,7 +23169,7 @@
 
 name asymptote
 category TLCore
-revision 56991
+revision 57866
 shortdesc 2D and 3D TeX-Aware Vector Graphics Language
 longdesc Asymptote is a powerful descriptive vector graphics language
 longdesc for technical drawing, inspired by MetaPost but with an
@@ -25791,7 +25792,7 @@
 
 name babel
 category Package
-revision 57530
+revision 57847
 shortdesc Multilingual support for Plain TeX or LaTeX
 longdesc This package manages culturally-determined typographical (and
 longdesc other) rules for a wide range of languages. A document may
@@ -25800,7 +25801,7 @@
 longdesc language to another in a variety of ways. Babel uses
 longdesc contributed configuration files that provide the detail of what
 longdesc has to be done for each language. Included is also a set of ini
-longdesc files for about 200 languages. Many language styles work with
+longdesc files for about 250 languages. Many language styles work with
 longdesc pdfLaTeX, as well as with XeLaTeX and LuaLaTeX, out of the box.
 longdesc A few even work with plain formats.
 docfiles size=202
@@ -25812,7 +25813,7 @@
  texmf-dist/source/latex/babel/bbcompat.dtx
  texmf-dist/source/latex/babel/bbidxglo.dtx
  texmf-dist/source/latex/babel/locale.zip
-runfiles size=932
+runfiles size=933
  texmf-dist/makeindex/babel/bbglo.ist
  texmf-dist/makeindex/babel/bbind.ist
  texmf-dist/tex/generic/babel/UKenglish.sty
@@ -26514,7 +26515,7 @@
 catalogue-ctan /macros/latex/required/babel/base
 catalogue-license lppl1.3
 catalogue-topics multilingual
-catalogue-version 3.53
+catalogue-version 3.54
 
 name babel-albanian
 category Package
@@ -35369,7 +35370,7 @@
 
 name biblatex-swiss-legal
 category Package
-revision 57672
+revision 57866
 shortdesc Bibliography and citation styles following Swiss legal practice
 longdesc The package provides BibLaTeX bibliography and citation styles
 longdesc for documents written in accordance with Swiss legal citation
@@ -56854,7 +56855,7 @@
 
 name cmextra
 category Package
-revision 42428
+revision 57866
 catalogue knuth-local
 shortdesc Knuth's local information
 longdesc A collection of experimental programs and developments based
@@ -62730,7 +62731,7 @@
 
 name collection-latexrecommended
 category Collection
-revision 57472
+revision 57862
 shortdesc LaTeX recommended packages
 longdesc A collection of recommended add-on packages for LaTeX which
 longdesc have widespread use, and the release candidate formats
@@ -62783,6 +62784,7 @@
 depend ntgclass
 depend parskip
 depend pdflscape
+depend pdfmanagement-testphase
 depend pdfpages
 depend pdftexcmds
 depend polyglossia
@@ -75467,7 +75469,7 @@
 
 name csquotes
 category Package
-revision 57332
+revision 57844
 shortdesc Context sensitive quotation facilities
 longdesc This package provides advanced facilities for inline and
 longdesc display quotations. It is designed for a wide range of tasks
@@ -75496,7 +75498,7 @@
 catalogue-ctan /macros/latex/contrib/csquotes
 catalogue-license lppl1.3c
 catalogue-topics quote-marks etex
-catalogue-version 5.2k
+catalogue-version 5.2l
 
 name csquotes-de
 category Package
@@ -89268,11 +89270,11 @@
 
 name easybook
 category Package
-revision 57834
+revision 57866
 shortdesc Typeset Chinese books or notes
 longdesc Easybook is a minimalist style template based on the ctexbook
 longdesc book document class.
-docfiles size=146
+docfiles size=143
  texmf-dist/doc/latex/easybook/README.md details="Readme"
  texmf-dist/doc/latex/easybook/appendix.tex
  texmf-dist/doc/latex/easybook/chapter1.tex
@@ -89290,7 +89292,7 @@
 catalogue-ctan /macros/latex/contrib/easybook
 catalogue-license cc-by-4
 catalogue-topics book-pub class chinese expl3
-catalogue-version 1.23f
+catalogue-version 1.23g
 
 name easyfig
 category Package
@@ -141918,7 +141920,7 @@
 
 name knuth-local
 category Package
-revision 38627
+revision 57866
 shortdesc Knuth's local information
 longdesc A collection of experimental programs and developments based
 longdesc on, or complementary to, the matter in his distribution
@@ -161973,7 +161975,7 @@
 
 name lineno
 category Package
-revision 21442
+revision 57866
 shortdesc Line numbers on paragraphs
 longdesc Adds line numbers to selected paragraphs with reference
 longdesc possible through the LaTeX \ref and \pageref cross reference
@@ -175609,7 +175611,7 @@
 
 name metafont
 category Package
-revision 56291
+revision 57866
 shortdesc A system for specifying fonts
 longdesc The program takes a semi-algorithmic specification of a font,
 longdesc and produces a bitmap font (whose properties are defined by a
@@ -177768,7 +177770,7 @@
 
 name microtype
 category Package
-revision 57838
+revision 57866
 shortdesc Subliminal refinements towards typographical perfection
 longdesc The package provides a LaTeX interface to the micro-typographic
 longdesc extensions that were introduced by pdfTeX and have since also
@@ -177790,16 +177792,15 @@
 longdesc 'letterspace', which also works with plain TeX, provides the
 longdesc user commands for letterspacing only, omitting support for all
 longdesc other extensions.
-docfiles size=440
+docfiles size=446
  texmf-dist/doc/latex/microtype/README.md details="Package README"
  texmf-dist/doc/latex/microtype/microtype.pdf details="Package documentation (English)" language="en"
  texmf-dist/doc/latex/microtype/test-microtype.tex
-srcfiles size=174
+srcfiles size=175
  texmf-dist/source/latex/microtype/microtype-utf.dtx
  texmf-dist/source/latex/microtype/microtype.dtx
  texmf-dist/source/latex/microtype/microtype.ins
-runfiles size=100
- texmf-dist/tex/latex/microtype/README.TEXLIVE
+runfiles size=105
  texmf-dist/tex/latex/microtype/letterspace.sty
  texmf-dist/tex/latex/microtype/microtype-luatex.def
  texmf-dist/tex/latex/microtype/microtype-pdftex.def
@@ -177808,7 +177809,9 @@
  texmf-dist/tex/latex/microtype/microtype.lua
  texmf-dist/tex/latex/microtype/microtype.sty
  texmf-dist/tex/latex/microtype/mt-CharisSIL.cfg
+ texmf-dist/tex/latex/microtype/mt-EBGaramond.cfg
  texmf-dist/tex/latex/microtype/mt-LatinModernRoman.cfg
+ texmf-dist/tex/latex/microtype/mt-Palatino.cfg
  texmf-dist/tex/latex/microtype/mt-bch.cfg
  texmf-dist/tex/latex/microtype/mt-blg.cfg
  texmf-dist/tex/latex/microtype/mt-cmr.cfg
@@ -177827,7 +177830,7 @@
 catalogue-ctan /macros/latex/contrib/microtype
 catalogue-license lppl1.3c
 catalogue-topics micro-layout letterspace
-catalogue-version 2.8
+catalogue-version 2.8a
 
 name microtype-de
 category Package
@@ -193350,7 +193353,7 @@
 
 name nicematrix
 category Package
-revision 57649
+revision 57845
 shortdesc Improve the typesetting of mathematical matrices with PGF
 longdesc This package is based on the package array. It creates PGF/TikZ
 longdesc nodes under the cells of the array and uses these nodes to
@@ -193361,20 +193364,20 @@
 longdesc color rows and columns with a good PDF result; blocks of cells;
 longdesc etc. The package requires and loads l3keys2e, xparse, array,
 longdesc amsmath, pgfcore, and the module shapes of PGF.
-docfiles size=424
+docfiles size=419
  texmf-dist/doc/latex/nicematrix/README.md details="Readme"
  texmf-dist/doc/latex/nicematrix/nicematrix-french.pdf details="Package documentation in French" language="fr"
  texmf-dist/doc/latex/nicematrix/nicematrix-french.tex
  texmf-dist/doc/latex/nicematrix/nicematrix.pdf details="Package documentation"
-srcfiles size=134
+srcfiles size=136
  texmf-dist/source/latex/nicematrix/nicematrix.dtx
  texmf-dist/source/latex/nicematrix/nicematrix.ins
-runfiles size=56
+runfiles size=57
  texmf-dist/tex/latex/nicematrix/nicematrix.sty
 catalogue-ctan /macros/latex/contrib/nicematrix
 catalogue-license lppl1.3
 catalogue-topics maths matrix pgf-tikz expl3
-catalogue-version 5.10
+catalogue-version 5.11
 
 name nicetext
 category Package
@@ -212425,7 +212428,7 @@
 
 name oup-authoring-template
 category Package
-revision 57672
+revision 57866
 shortdesc A general template for journals published by Oxford University Press (OUP)
 longdesc This package provides a general LaTeX template for journals
 longdesc published by Oxford University Press (OUP). The template
@@ -212546,14 +212549,14 @@
 
 name overlays
 category Package
-revision 46122
+revision 57866
 shortdesc Incremental slides
-longdesc The overlay package allows to write presentations with
-longdesc incremental slides. It does not presuppose any specific
-longdesc document class. Rather, it is a lightweight alternative to
-longdesc full-fledged presentation classes like beamer. The package
-longdesc requires xcolor, environ, and pgffor (from the pgf bundle).
-docfiles size=36
+longdesc This package allows to write presentations with incremental
+longdesc slides. It does not presuppose any specific document class.
+longdesc Rather, it is a lightweight alternative to full-fledged
+longdesc presentation classes like beamer. The package requires xcolor,
+longdesc environ, and pgffor (from the pgf bundle).
+docfiles size=39
  texmf-dist/doc/latex/overlays/COPYING
  texmf-dist/doc/latex/overlays/ChangeLog
  texmf-dist/doc/latex/overlays/README details="Readme"
@@ -212565,9 +212568,9 @@
  texmf-dist/tex/latex/overlays/overlays.sty
 catalogue-also beamer
 catalogue-ctan /macros/latex/contrib/overlays
-catalogue-license lppl1.3
+catalogue-license lppl1.3c
 catalogue-topics presentation
-catalogue-version 2.10
+catalogue-version 2.12
 
 name overlock
 category Package
@@ -215923,6 +215926,74 @@
 catalogue-topics landscape layout
 catalogue-version 0.12
 
+name pdfmanagement-testphase
+category Package
+revision 57862
+shortdesc LaTeX PDF management testphase bundle
+longdesc This is a temporary package, which is used during a test phase
+longdesc to load the new PDF management code of LaTeX. The new PDF
+longdesc management code offers backend independant interfaces to
+longdesc central PDF dictionaries, tools to create annotations, form
+longdesc Xobjects, to embed files, and to handle PDF standards. The code
+longdesc is provided during a testphase as independant package to allow
+longdesc users and package authors to safely test the code. At a later
+longdesc stage it will be integrated into the LaTeX kernel (or in parts
+longdesc into permanent support packages), and the current testphase
+longdesc bundle will be removed.
+docfiles size=1590
+ texmf-dist/doc/latex/pdfmanagement-testphase/README.md details="Readme"
+ texmf-dist/doc/latex/pdfmanagement-testphase/hyperref-generic.pdf
+ texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.lua
+ texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.pdf
+ texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfannot.pdf
+ texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfdict.pdf
+ texmf-dist/doc/latex/pdfmanagement-testphase/l3pdffile.pdf
+ texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfmanagement.pdf
+ texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfmeta.pdf
+ texmf-dist/doc/latex/pdfmanagement-testphase/l3pdftools.pdf
+ texmf-dist/doc/latex/pdfmanagement-testphase/l3pdfxform.pdf
+ texmf-dist/doc/latex/pdfmanagement-testphase/ltdocinit.pdf
+ texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-firstaid.pdf
+ texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx
+ texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.pdf details="Package documentation"
+srcfiles size=112
+ texmf-dist/source/latex/pdfmanagement-testphase/hyperref-generic.dtx
+ texmf-dist/source/latex/pdfmanagement-testphase/l3backend-testphase.dtx
+ texmf-dist/source/latex/pdfmanagement-testphase/l3pdfannot.dtx
+ texmf-dist/source/latex/pdfmanagement-testphase/l3pdfdict.dtx
+ texmf-dist/source/latex/pdfmanagement-testphase/l3pdffile.dtx
+ texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmanagement.dtx
+ texmf-dist/source/latex/pdfmanagement-testphase/l3pdfmeta.dtx
+ texmf-dist/source/latex/pdfmanagement-testphase/l3pdftools.dtx
+ texmf-dist/source/latex/pdfmanagement-testphase/l3pdfxform.dtx
+ texmf-dist/source/latex/pdfmanagement-testphase/ltdocinit.dtx
+ texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-firstaid.dtx
+ texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-testphase.dtx
+ texmf-dist/source/latex/pdfmanagement-testphase/pdfmanagement-testphase.ins
+runfiles size=56
+ texmf-dist/tex/latex/pdfmanagement-testphase/color-ltx.sty
+ texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def
+ texmf-dist/tex/latex/pdfmanagement-testphase/hyperref-colorschemes.def
+ texmf-dist/tex/latex/pdfmanagement-testphase/hyperxmp-patches-tmp-ltx.sty
+ texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvipdfmx.def
+ texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvips.def
+ texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvisvgm.def
+ texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-luatex.def
+ texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def
+ texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-xetex.def
+ texmf-dist/tex/latex/pdfmanagement-testphase/l3ref-tmp.sty
+ texmf-dist/tex/latex/pdfmanagement-testphase/pdflscape-ltx.sty
+ texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-firstaid.sty
+ texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.sty
+ texmf-dist/tex/latex/pdfmanagement-testphase/transparent-ltx.sty
+ texmf-dist/tex/latex/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty
+catalogue-contact-bugs https://github.com/latex3/pdfresources/issues
+catalogue-contact-repository https://github.com/latex3/pdfresources
+catalogue-ctan /macros/latex/contrib/pdfmanagement-testphase
+catalogue-license lppl1.3c
+catalogue-topics latex-devel pdf-feat
+catalogue-version 0.95a
+
 name pdfmarginpar
 category Package
 revision 23492
@@ -233867,7 +233938,7 @@
 
 name pxjahyper
 category Package
-revision 57732
+revision 57866
 shortdesc Hyperref support for pLaTeX
 longdesc This package adjusts the behavior of hyperref on (u)pLaTeX so
 longdesc that authors can properly create PDF documents that contain
@@ -233886,7 +233957,7 @@
 catalogue-ctan /language/japanese/pxjahyper
 catalogue-license mit
 catalogue-topics japanese hyper
-catalogue-version 0.7
+catalogue-version 0.7a
 
 name pxjodel
 category Package
@@ -252325,13 +252396,13 @@
 
 name spath3
 category Package
-revision 57639
+revision 57842
 shortdesc Manipulate "soft paths" in PGF
 longdesc The spath3 library provides methods for manipulating the "soft
 longdesc paths" of TikZ/PGF. Packaged with it are two TikZ libraries
 longdesc that make use of the methods provided. These are libraries for
 longdesc drawing calligraphic paths and for drawing knot diagrams.
-docfiles size=398
+docfiles size=406
  texmf-dist/doc/latex/spath3/README details="Readme"
  texmf-dist/doc/latex/spath3/README.txt
  texmf-dist/doc/latex/spath3/calligraphy.pdf details="Use for calligraphy"
@@ -252341,18 +252412,21 @@
  texmf-dist/doc/latex/spath3/spath3.pdf
  texmf-dist/doc/latex/spath3/spath3.tex
  texmf-dist/doc/latex/spath3/spath3_code.pdf details="Package documentation"
-srcfiles size=62
+srcfiles size=66
  texmf-dist/source/latex/spath3/spath3_code.dtx
  texmf-dist/source/latex/spath3/spath3_code.ins
-runfiles size=55
+runfiles size=60
  texmf-dist/tex/latex/spath3/spath3.sty
  texmf-dist/tex/latex/spath3/tikzlibrarycalligraphy.code.tex
  texmf-dist/tex/latex/spath3/tikzlibraryknots.code.tex
  texmf-dist/tex/latex/spath3/tikzlibraryspath3.code.tex
+catalogue-contact-bugs https://github.com/loopspace/spath3/issues
+catalogue-contact-home https://github.com/loopspace/spath3
+catalogue-contact-repository https://github.com/loopspace/spath3
 catalogue-ctan /graphics/pgf/contrib/spath3
 catalogue-license lppl1.3c
 catalogue-topics pgf-tikz graphics-curve expl3
-catalogue-version 2.2
+catalogue-version 2.4
 
 name spectral
 category Package
@@ -259556,20 +259630,19 @@
 
 name tagpdf
 category Package
-revision 51535
+revision 57866
 shortdesc Tools for experimenting with tagging using pdfLaTeX and LuaLaTeX
 longdesc The package offers tools to experiment with tagging and
-longdesc accessibility using pdfLaTeX and LuaTeX. It isn't meant for
-longdesc production but allows the user to try out how difficult it is
-longdesc to tag some structures; to try out how much tagging is really
-longdesc needed; to test what else is needed so that a pdf works e.g.
-longdesc with a screen reader. Its goal is to get a feeling for what has
-longdesc to be done, which kernel changes are needed, how packages
-longdesc should be adapted.
-docfiles size=817
+longdesc accessibility using pdfLaTeX and LuaTaX. It is not intended for
+longdesc production use, but allows the user to try out how difficult it
+longdesc is to tag some structures.
+docfiles size=859
  texmf-dist/doc/latex/tagpdf/README.md details="Readme"
+ texmf-dist/doc/latex/tagpdf/ex-AF-file.pdf
+ texmf-dist/doc/latex/tagpdf/ex-AF-file.tex
  texmf-dist/doc/latex/tagpdf/ex-alt-actualtext-luatex.pdf
  texmf-dist/doc/latex/tagpdf/ex-alt-actualtext.tex
+ texmf-dist/doc/latex/tagpdf/ex-attribute-luatex.pdf
  texmf-dist/doc/latex/tagpdf/ex-attribute.pdf
  texmf-dist/doc/latex/tagpdf/ex-attribute.tex
  texmf-dist/doc/latex/tagpdf/ex-formula-problem-luatex.pdf
@@ -259591,14 +259664,26 @@
  texmf-dist/doc/latex/tagpdf/ex-structure.tex
  texmf-dist/doc/latex/tagpdf/ex-tagpdf-template.pdf
  texmf-dist/doc/latex/tagpdf/ex-tagpdf-template.tex
+ texmf-dist/doc/latex/tagpdf/example-input-file.tex
  texmf-dist/doc/latex/tagpdf/link-figure-input.tex
  texmf-dist/doc/latex/tagpdf/pac3.PNG
  texmf-dist/doc/latex/tagpdf/tagpdf.bib
  texmf-dist/doc/latex/tagpdf/tagpdf.pdf details="Package documentation"
  texmf-dist/doc/latex/tagpdf/tagpdf.tex
-runfiles size=31
+srcfiles size=31
+ texmf-dist/source/latex/tagpdf/tagpdf-backend.dtx
+ texmf-dist/source/latex/tagpdf/tagpdf-checks.dtx
+ texmf-dist/source/latex/tagpdf/tagpdf-mc.dtx
+ texmf-dist/source/latex/tagpdf/tagpdf-roles.dtx
+ texmf-dist/source/latex/tagpdf/tagpdf-space.dtx
+ texmf-dist/source/latex/tagpdf/tagpdf-struct.dtx
+ texmf-dist/source/latex/tagpdf/tagpdf-tree.dtx
+ texmf-dist/source/latex/tagpdf/tagpdf.dtx
+ texmf-dist/source/latex/tagpdf/tagpdf.ins
+runfiles size=35
  texmf-dist/tex/latex/tagpdf/tagpdf-attr-code.sty
  texmf-dist/tex/latex/tagpdf/tagpdf-checks-code.sty
+ texmf-dist/tex/latex/tagpdf/tagpdf-deprecated.def
  texmf-dist/tex/latex/tagpdf/tagpdf-luatex.def
  texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-generic.sty
  texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-lua.sty
@@ -259618,7 +259703,7 @@
 catalogue-ctan /macros/latex/contrib/tagpdf
 catalogue-license lppl1.3c
 catalogue-topics tagged-pdf accessible
-catalogue-version 0.61
+catalogue-version 0.80
 
 name talk
 category Package
@@ -260741,7 +260826,7 @@
 
 name tex
 category TLCore
-revision 56291
+revision 57866
 shortdesc A sophisticated typesetting engine
 longdesc TeX is a typesetting system that incorporates a macro
 longdesc processor. A TeX source document specifies or incorporates a
@@ -271499,7 +271584,7 @@
 
 name texlive-scripts
 category TLCore
-revision 57828
+revision 57852
 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.
@@ -276984,18 +277069,17 @@
 
 name tikzmark
 category Package
-revision 52293
+revision 57843
 shortdesc Use TikZ's method of remembering a position on a page
 longdesc The tikzmark package defines a command to "remember" a position
 longdesc on a page for later (or earlier) use, primarily (but not
 longdesc exclusively) with TikZ.
-docfiles size=105
+docfiles size=106
  texmf-dist/doc/latex/tikzmark/README details="Readme"
  texmf-dist/doc/latex/tikzmark/README.txt
  texmf-dist/doc/latex/tikzmark/tikzmark.pdf details="Package documentation"
 srcfiles size=18
  texmf-dist/source/latex/tikzmark/tikzmark.dtx
- texmf-dist/source/latex/tikzmark/tikzmark.ins
 runfiles size=7
  texmf-dist/tex/latex/tikzmark/tikzlibrarytikzmark.code.tex
  texmf-dist/tex/latex/tikzmark/tikzmarklibrarylistings.code.tex
@@ -277005,7 +277089,7 @@
 catalogue-ctan /graphics/pgf/contrib/tikzmark
 catalogue-license lppl1.3c
 catalogue-topics pgf-tikz graphics-supp
-catalogue-version 1.8
+catalogue-version 1.10
 
 name tikzmarmots
 category Package
@@ -285112,7 +285196,7 @@
 
 name tuda-ci
 category Package
-revision 57627
+revision 57846
 shortdesc LaTeX templates of Technische Universitat Darmstadt
 longdesc The TUDa-CI-Bundle provides a possibility to use the Corporate
 longdesc Design of TU Darmstadt in LaTeX. It contains documentclasses as
@@ -285181,7 +285265,7 @@
 catalogue-ctan /macros/latex/contrib/tuda-ci
 catalogue-license lppl1.3c
 catalogue-topics class letter dissertation presentation poster std-conform
-catalogue-version 3.10
+catalogue-version 3.11
 
 name tudscr
 category Package
@@ -287107,7 +287191,7 @@
 
 name udesoftec
 category Package
-revision 54215
+revision 57866
 shortdesc Thesis class for the University of Duisburg-Essen
 longdesc The class is designed for typesetting theses in the Research
 longdesc Group for Business Informatics and Software Engineering. (The
@@ -287137,7 +287221,7 @@
 catalogue-ctan /macros/latex/contrib/udesoftec
 catalogue-license lppl1.3
 catalogue-topics dissertation bus-study class
-catalogue-version 1.6.6
+catalogue-version 1.7.1
 
 name uebungsblatt
 category Package
@@ -293446,7 +293530,7 @@
 
 name ut-thesis
 category Package
-revision 57672
+revision 57866
 shortdesc University of Toronto thesis style
 longdesc This LaTeX document class implements the formatting
 longdesc requirements of the University of Toronto School of Graduate

Index: branches/branch2020/Master/tlpkg/tlpsrc/asymptote.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/asymptote.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/asymptote.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020/Master/tlpkg/tlpsrc/asymptote.tlpsrc
___________________________________________________________________
Modified: texlive:force_incr_after_delete
## -1 +1 ##
-1606178855
\ No newline at end of property
+1614127673
\ No newline at end of property
Index: branches/branch2020/Master/tlpkg/tlpsrc/biblatex-swiss-legal.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/biblatex-swiss-legal.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/biblatex-swiss-legal.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020/Master/tlpkg/tlpsrc/biblatex-swiss-legal.tlpsrc
___________________________________________________________________
Modified: texlive:force_incr_after_delete
## -1 +1 ##
-1612745257
\ No newline at end of property
+1614127673
\ No newline at end of property
Index: branches/branch2020/Master/tlpkg/tlpsrc/cmextra.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/cmextra.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/cmextra.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020/Master/tlpkg/tlpsrc/cmextra.tlpsrc
___________________________________________________________________
Added: texlive:force_incr_after_delete
## -0,0 +1 ##
+1614127673
\ No newline at end of property
Modified: branches/branch2020/Master/tlpkg/tlpsrc/collection-latexrecommended.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/collection-latexrecommended.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/collection-latexrecommended.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)
@@ -54,6 +54,7 @@
 depend ntgclass
 depend parskip
 depend pdflscape
+depend pdfmanagement-testphase
 depend pdfpages
 depend pdftexcmds
 depend polyglossia

Index: branches/branch2020/Master/tlpkg/tlpsrc/easybook.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/easybook.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/easybook.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020/Master/tlpkg/tlpsrc/easybook.tlpsrc
___________________________________________________________________
Modified: texlive:force_incr_after_delete
## -1 +1 ##
-1612745257
\ No newline at end of property
+1614127673
\ No newline at end of property
Index: branches/branch2020/Master/tlpkg/tlpsrc/knuth-local.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/knuth-local.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/knuth-local.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020/Master/tlpkg/tlpsrc/knuth-local.tlpsrc
___________________________________________________________________
Added: texlive:force_incr_after_delete
## -0,0 +1 ##
+1614127673
\ No newline at end of property
Index: branches/branch2020/Master/tlpkg/tlpsrc/lineno.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/lineno.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/lineno.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020/Master/tlpkg/tlpsrc/lineno.tlpsrc
___________________________________________________________________
Modified: texlive:force_incr_after_delete
## -1 +1 ##
-1256320880
\ No newline at end of property
+1614127673
\ No newline at end of property
Index: branches/branch2020/Master/tlpkg/tlpsrc/metafont.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/metafont.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/metafont.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020/Master/tlpkg/tlpsrc/metafont.tlpsrc
___________________________________________________________________
Modified: texlive:force_incr_after_delete
## -1 +1 ##
-1599522451
\ No newline at end of property
+1614127673
\ No newline at end of property
Index: branches/branch2020/Master/tlpkg/tlpsrc/microtype.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/microtype.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/microtype.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020/Master/tlpkg/tlpsrc/microtype.tlpsrc
___________________________________________________________________
Modified: texlive:force_incr_after_delete
## -1 +1 ##
-1256320872
\ No newline at end of property
+1614127673
\ No newline at end of property
Index: branches/branch2020/Master/tlpkg/tlpsrc/oup-authoring-template.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/oup-authoring-template.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/oup-authoring-template.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020/Master/tlpkg/tlpsrc/oup-authoring-template.tlpsrc
___________________________________________________________________
Modified: texlive:force_incr_after_delete
## -1 +1 ##
-1612745257
\ No newline at end of property
+1614127673
\ No newline at end of property
Index: branches/branch2020/Master/tlpkg/tlpsrc/overlays.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/overlays.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/overlays.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020/Master/tlpkg/tlpsrc/overlays.tlpsrc
___________________________________________________________________
Added: texlive:force_incr_after_delete
## -0,0 +1 ##
+1614127673
\ No newline at end of property
Copied: branches/branch2020/Master/tlpkg/tlpsrc/pdfmanagement-testphase.tlpsrc (from rev 57871, trunk/Master/tlpkg/tlpsrc/pdfmanagement-testphase.tlpsrc)
===================================================================
Index: branches/branch2020/Master/tlpkg/tlpsrc/pxjahyper.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/pxjahyper.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/pxjahyper.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020/Master/tlpkg/tlpsrc/pxjahyper.tlpsrc
___________________________________________________________________
Added: texlive:force_incr_after_delete
## -0,0 +1 ##
+1614127673
\ No newline at end of property
Index: branches/branch2020/Master/tlpkg/tlpsrc/tagpdf.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/tagpdf.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/tagpdf.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020/Master/tlpkg/tlpsrc/tagpdf.tlpsrc
___________________________________________________________________
Added: texlive:force_incr_after_delete
## -0,0 +1 ##
+1614127673
\ No newline at end of property
Index: branches/branch2020/Master/tlpkg/tlpsrc/tex.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/tex.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/tex.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020/Master/tlpkg/tlpsrc/tex.tlpsrc
___________________________________________________________________
Modified: texlive:force_incr_after_delete
## -1 +1 ##
-1599522451
\ No newline at end of property
+1614127673
\ No newline at end of property
Index: branches/branch2020/Master/tlpkg/tlpsrc/udesoftec.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/udesoftec.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/udesoftec.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020/Master/tlpkg/tlpsrc/udesoftec.tlpsrc
___________________________________________________________________
Modified: texlive:force_incr_after_delete
## -1 +1 ##
-1583800798
\ No newline at end of property
+1614127673
\ No newline at end of property
Index: branches/branch2020/Master/tlpkg/tlpsrc/ut-thesis.tlpsrc
===================================================================
--- branches/branch2020/Master/tlpkg/tlpsrc/ut-thesis.tlpsrc	2021-02-24 15:20:06 UTC (rev 57871)
+++ branches/branch2020/Master/tlpkg/tlpsrc/ut-thesis.tlpsrc	2021-02-24 18:00:42 UTC (rev 57872)

Property changes on: branches/branch2020/Master/tlpkg/tlpsrc/ut-thesis.tlpsrc
___________________________________________________________________
Modified: texlive:force_incr_after_delete
## -1 +1 ##
-1612745257
\ No newline at end of property
+1614127674
\ No newline at end of property


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