texlive[61213] Master/texmf-dist: microtype (3dec21)

commits+karl at tug.org commits+karl at tug.org
Fri Dec 3 23:11:19 CET 2021


Revision: 61213
          http://tug.org/svn/texlive?view=revision&revision=61213
Author:   karl
Date:     2021-12-03 23:11:19 +0100 (Fri, 03 Dec 2021)
Log Message:
-----------
microtype (3dec21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/microtype/README.md
    trunk/Master/texmf-dist/doc/latex/microtype/microtype-code.pdf
    trunk/Master/texmf-dist/doc/latex/microtype/microtype.pdf
    trunk/Master/texmf-dist/source/latex/microtype/microtype-utf.dtx
    trunk/Master/texmf-dist/source/latex/microtype/microtype.dtx
    trunk/Master/texmf-dist/tex/latex/microtype/letterspace.sty
    trunk/Master/texmf-dist/tex/latex/microtype/microtype-luatex.def
    trunk/Master/texmf-dist/tex/latex/microtype/microtype-pdftex.def
    trunk/Master/texmf-dist/tex/latex/microtype/microtype-show.sty
    trunk/Master/texmf-dist/tex/latex/microtype/microtype-xetex.def
    trunk/Master/texmf-dist/tex/latex/microtype/microtype.cfg
    trunk/Master/texmf-dist/tex/latex/microtype/microtype.lua
    trunk/Master/texmf-dist/tex/latex/microtype/microtype.sty
    trunk/Master/texmf-dist/tex/latex/microtype/mt-CharisSIL.cfg
    trunk/Master/texmf-dist/tex/latex/microtype/mt-LatinModernRoman.cfg
    trunk/Master/texmf-dist/tex/latex/microtype/mt-NewComputerModern.cfg
    trunk/Master/texmf-dist/tex/latex/microtype/mt-Palatino.cfg

Modified: trunk/Master/texmf-dist/doc/latex/microtype/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/microtype/README.md	2021-12-03 22:10:42 UTC (rev 61212)
+++ trunk/Master/texmf-dist/doc/latex/microtype/README.md	2021-12-03 22:11:19 UTC (rev 61213)
@@ -4,7 +4,7 @@
 
 **Subliminal refinements towards typographical perfection**
 
-  (v3.0 -- 2021/10/31)
+  (v3.0a -- 2021/12/02)
 
 
 Overview
@@ -17,7 +17,7 @@
 well as hyphenatable letterspacing (tracking) and the possibility to disable
 all or selected ligatures.
 
-These features may be applied to customisable sets of fonts, and all 
+These features may be applied to customisable sets of fonts, and all
 micro-typographic aspects of the fonts can be configured in a straight-forward
 and flexible way. Settings for various fonts are provided.
 
@@ -43,12 +43,12 @@
 To install the package, use one of the following methods
 (in decreasing order of simplicity):
 
-- Use the package manager of your TeX system 
+- Use the package manager of your TeX system
   (TeXLive: `tlmgr install microtype`;
    MiKTeX: MiKTeX Package Manager).
- 
-- Download `microtype.tds.zip` from CTAN, 
-  extract it in the root of one of your TDS trees, 
+
+- Download `microtype.tds.zip` from CTAN,
+  extract it in the root of one of your TDS trees,
   and update the filename database.
 
 - Get the source (`microtype.zip`) from CTAN and extract it,
@@ -57,7 +57,8 @@
   e.g., `TEXMF/tex/latex/microtype/`.
 
 - To use the latest development version, clone the github repository at
-  `https://github.com/schlcht/microtype` and run `make`.
+  `https://github.com/schlcht/microtype` and run `make`
+  (or just `pdflatex microtype.ins` to generate the run files).
 
 
 License

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

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

Modified: trunk/Master/texmf-dist/source/latex/microtype/microtype-utf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/microtype/microtype-utf.dtx	2021-12-03 22:10:42 UTC (rev 61212)
+++ trunk/Master/texmf-dist/source/latex/microtype/microtype-utf.dtx	2021-12-03 22:11:19 UTC (rev 61213)
@@ -27,11 +27,11 @@
 \ProvidesFile
 %</!EBGaramond>
 %<*driver>
-    {\jobname.dtx}[2021/10/31 v3.0]
+    {\jobname.dtx}[2021/12/02 v3.0a]
 %</driver>
 %<CharisSIL>  {mt-CharisSIL.cfg}[2017/07/07 v1.1 microtype config. file: Charis SIL (RS)]
 %<LatinModernRoman>  {mt-LatinModernRoman.cfg}[2021/02/21 v1.1 microtype config. file: Latin Modern Roman (RS)]
-%<NewComputerModern>  {mt-NewComputerModern.cfg}[2021/08/08 v1.0 microtype config. file: New Computer Modern (AT)]
+%<NewComputerModern>  {mt-NewComputerModern.cfg}[2021/11/09 v1.1 microtype config. file: New Computer Modern (AT)]
 %<Palatino>  {mt-Palatino.cfg}[2012/03/10 v1.0 microtype config. file: Palatino and similar fonts (LBD)]
 %<TU-basic>  {mt-TU-basic.cfg}[2021/06/22 v1.1 microtype config. file: fonts with basic glyph set (RS)]
 %<TU-empty>  {mt-TU-empty.cfg}[2021/06/22 v1.1 microtype config. file: fonts with nonstandard glyph set (RS)]
@@ -202,7 +202,7 @@
 %    \begin{macrocode}
 %<*LatinModernRoman|NewComputerModern>
 \DeclareCharacterInheritance
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
 %<LatinModernRoman>     family   = Latin Modern Roman }
 %<NewComputerModern>     family   = {New Computer Modern} }
 %    \end{macrocode}
@@ -303,7 +303,7 @@
 %    \begin{macrocode}
 %<*CharisSIL>
 \DeclareCharacterInheritance
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = Charis SIL }
 %    \end{macrocode}
 %{\setmacrofont\CharisSIL
@@ -654,7 +654,7 @@
 %    \begin{macrocode}
 %<*Palatino>
 \DeclareCharacterInheritance
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family = {Palatino} }
 %    \end{macrocode}
 % Unfortunately, I don't have a Palatino variant containing all of the following
@@ -800,9 +800,9 @@
 \SetProtrusion
 %<LatinModernRoman>   [ name     = LMR-default ]
 %<NewComputerModern>   [ name     = NCM-default ]
-   { encoding = {EU1,EU2,TU},
+%<LatinModernRoman>   { encoding = {TU,EU1,EU2},
 %<LatinModernRoman>     family   = Latin Modern Roman }
-%<NewComputerModern>     family   = {New Computer Modern} }
+%<NewComputerModern>   { }
    {
 %    \end{macrocode}
 %{\setmacrofont\NCM
@@ -818,14 +818,8 @@
      W = {50,50},
      X = {50,50},
      Y = {50,50},
-%<NewComputerModern>     /a.end = {,330},
-%<NewComputerModern>     /e.end = {,350},
      k = {  ,50},
-%<NewComputerModern>     /k.alt = { ,50},
      r = {  ,50},
-%<NewComputerModern>     /r.end = {,300},
-%<NewComputerModern>     /m.end = {,200},
-%<NewComputerModern>     /n.end = {,300},
      t = {  ,70},
      v = {50,50},
      w = {50,50},
@@ -890,11 +884,13 @@
      × = {150,250},
      ÷ = {150,250},
      € = {100,   },
+%<*LatinModernRoman>
     /one.oldstyle   = {100,100},
     /two.oldstyle   = { 50, 50},
     /three.oldstyle = { 30, 80},
     /four.oldstyle  = { 50, 50},
     /seven.oldstyle = { 50, 80},
+%</LatinModernRoman>
 %<*NewComputerModern>
      Ά = {50,50},   % /Alphatonos
      Ὰ = {120,50},  %
@@ -994,19 +990,52 @@
      χ = {50,50},
      ψ = {50,50},
 %     /uni1F98.alt = {,},
-%</NewComputerModern>
 %    \end{macrocode}
 %}
+% <CMU> Serif doesn't include |*.end| glyphs, and the OldStyle numbers' names differ.
 %    \begin{macrocode}
    }
 
 \SetProtrusion
+   [ name     = NCM-TU,
+     load     = NCM-default ]
+   { encoding = {TU,EU1,EU2},
+     family   = {New Computer Modern} }
+   {
+     /a.end = {,330},
+     /e.end = {,350},
+     /k.alt = { ,50},
+     /r.end = {,300},
+     /m.end = {,200},
+     /n.end = {,300},
+     /one.oldstyle   = {100,100},
+     /two.oldstyle   = { 50, 50},
+     /three.oldstyle = { 30, 80},
+     /four.oldstyle  = { 50, 50},
+     /seven.oldstyle = { 50, 80},
+   }
+
+\SetProtrusion
+   [ name     = CMU-TU,
+     load     = NCM-default ]
+   { encoding = {TU,EU1,EU2},
+     family   = {CMU Serif} }
+   {
+     /oneoldstyle   = {100,100},
+     /twooldstyle   = { 50, 50},
+     /threeoldstyle = { 30, 80},
+     /fouroldstyle  = { 50, 50},
+     /sevenoldstyle = { 50, 80},
+%</NewComputerModern>
+   }
+
+\SetProtrusion
 %<LatinModernRoman>   [ name     = LMR-it ]
 %<NewComputerModern>   [ name     = NCM-it ]
-   { encoding = {EU1,EU2,TU},
+%<LatinModernRoman>   { encoding = {TU,EU1,EU2},
 %<LatinModernRoman>     family   = Latin Modern Roman,
-%<NewComputerModern>     family   = {New Computer Modern},
-     shape    = {it,sl}       }
+%<LatinModernRoman>     shape    = {it,sl}       }
+%<NewComputerModern>   { }
    {
 %    \end{macrocode}
 %{\setmacrofont\NCM
@@ -1067,14 +1096,6 @@
      x = {65,-40},
      y = {130,-20},
      z = {110,-80},
-%<*NewComputerModern>
-     /a.end = {,330}, %Fix
-     /e.end = {,350}, %Fix
-     /k.alt = {  ,50}, %Fix
-     /r.end = {,300}, %Fix
-     /m.end = {,200}, %Fix
-     /n.end = {,300}, %Fix
-%</NewComputerModern>
      0 = {170,-85},
      1 = {230,110},
      2 = {130,-70},
@@ -1134,6 +1155,7 @@
      × = {200,200},
      ÷ = {200,200},
      € = {150,   },
+%<*LatinModernRoman>
     /one.oldstyle   = {100,100},
     /two.oldstyle   = {100, 80},
     /three.oldstyle = { 80, 50},
@@ -1142,6 +1164,7 @@
     /six.oldstyle   = { 50,   },
     /seven.oldstyle = { 80, 80},
     /eight.oldstyle = { 50,   },
+%</LatinModernRoman>
      Γ = {100,120}, % /Gamma
      Δ = {120,100}, % /Delta
      Θ = {120, 50}, % /Theta
@@ -1244,11 +1267,51 @@
      χ = {20,},
      ψ = {80,},
 %    /uni1F98.alt = {,},
-%</NewComputerModern>
 %    \end{macrocode}
 %}
 %    \begin{macrocode}
    }
+
+\SetProtrusion
+   [ name     = NCM-it-TU,
+     load     = NCM-it ]
+   { encoding = {TU,EU1,EU2},
+     family   = {New Computer Modern},
+     shape    = {it,sl} }
+   {
+     /a.end = {,330}, %Fix
+     /e.end = {,350}, %Fix
+     /k.alt = {  ,50}, %Fix
+     /r.end = {,300}, %Fix
+     /m.end = {,200}, %Fix
+     /n.end = {,300}, %Fix
+     /one.oldstyle   = {100,100},
+     /two.oldstyle   = {100, 80},
+     /three.oldstyle = { 80, 50},
+     /four.oldstyle  = { 80, 80},
+     /five.oldstyle  = { 50,   },
+     /six.oldstyle   = { 50,   },
+     /seven.oldstyle = { 80, 80},
+     /eight.oldstyle = { 50,   },
+   }
+
+\SetProtrusion
+   [ name     = CMU-it-TU,
+     load     = NCM-it ]
+   { encoding = {TU,EU1,EU2},
+     family   = {CMU Serif},
+     shape    = {it,sl} }
+   {
+     /oneoldstyle   = {100,100},
+     /twooldstyle   = {100, 80},
+     /threeoldstyle = { 80, 50},
+     /fouroldstyle  = { 80, 80},
+     /fiveoldstyle  = { 50,   },
+     /sixoldstyle   = { 50,   },
+     /sevenoldstyle = { 80, 80},
+     /eightoldstyle = { 50,   },
+%</NewComputerModern>
+   }
 %</LatinModernRoman|NewComputerModern>
 %    \end{macrocode}
 %\subsubsection{Charis SIL}
@@ -1257,7 +1320,7 @@
 %<*CharisSIL>
 \SetProtrusion
    [ name     = Charis-default ]
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = Charis SIL }
    {
 %    \end{macrocode}
@@ -1436,7 +1499,7 @@
 
 \SetProtrusion
    [ name     = Charis-it   ]
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = Charis SIL,
      shape    = {it,sl}  }
    {
@@ -1590,7 +1653,7 @@
    [ name     = Charis-sc,
      load     = Charis-default,
      command  = {MT at get@CHARIS at SC} ]
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = Charis SIL,
      shape    = {sc}  }
    {
@@ -1913,7 +1976,7 @@
 %<*Palatino>
 \SetProtrusion
    [ name     = palatino-default ]
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = {Palatino} }
    {
 %    \end{macrocode}
@@ -2015,7 +2078,7 @@
 
 \SetProtrusion
    [ name     = palatino-it   ]
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = {Palatino},
      shape    = {it,sl}  }
    {
@@ -2114,7 +2177,7 @@
 \SetProtrusion
    [ name     = palatino-sc,
      load     = palatino-default ]
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = {Palatino},
      shape    = sc }
    {

Modified: trunk/Master/texmf-dist/source/latex/microtype/microtype.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/microtype/microtype.dtx	2021-12-03 22:10:42 UTC (rev 61212)
+++ trunk/Master/texmf-dist/source/latex/microtype/microtype.dtx	2021-12-03 22:11:19 UTC (rev 61213)
@@ -37,7 +37,7 @@
 %<lua->  {microtype-luatex.def}
 %<xe->  {microtype-xetex.def}
 %<*package|letterspace|m-t|pdf-|lua-|xe-|show>
-  [2021/10/31 v3.0
+  [2021/12/02 v3.0a
 %<package>   Micro-typographical refinements
 %<letterspace>   Robust letterspacing
 %<show>  Visual debugging for the microtype package
@@ -52,13 +52,14 @@
 %<luafile>local microtype  = microtype
 %<luafile>microtype.module = {
 %<luafile>    name         = "microtype",
-%<luafile>    version      = "3.0",
-%<luafile>    date         = "2021/10/31",
+%<luafile>    version      = "3.0a",
+%<luafile>    date         = "2021/12/02",
 %<luafile>    description  = "microtype module.",
 %<luafile>    author       = "E. Roux, R. Schlicht and P. Gesang",
 %<luafile>    copyright    = "E. Roux, R. Schlicht and P. Gesang",
 %<luafile>    license      = "LPPL",
 %<luafile>}
+%<luafile>luatexbase.provides_module(microtype.module)
 %<*config>
 %<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)]
@@ -152,7 +153,7 @@
 \fi
 \ifpdf
   \microtypesetup{expansion=alltext} % with activated expansion ...
-  \tolerance=300 %     ... we can make TeX almost as intolerant as it normally is
+  \tolerance=250 % ... we can make TeX almost as intolerant as it normally is (200)
   \g at addto@macro\macrocode{\microtypesetup{expansion=false}}
   % bonus material
   \InputIfFileExists{microtype-logo.dtx}\relax\relax
@@ -250,6 +251,7 @@
   \parindent 0pt
   {\let\numberline\@gobble{\small #1~[#2]}}}
 \def\l at table{\@dottedtocline{1}{0pt}{1.5em}}
+\let\l at figure\l at table
 \def\@pnumwidth{1.7em}
 \def\defspecial at toc#1#2#3{\long\def#1{%
   \ifpdf\phantomsection\bookmarksetupnext{italic}\pdfbookmark[1]{#2}{#3}\fi
@@ -257,6 +259,7 @@
   \@starttoc{#3}}}
 \defspecial at toc\tableofcontents\contentsname{toc}
 \defspecial at toc\listoftables\listtablename{lot}
+\defspecial at toc\listoffigures\listfigurename{lof}
 % bibliography
 \def\@cite#1#2{#1\if at tempswa, #2\fi}
 \def\thebibliography#1{%
@@ -295,7 +298,7 @@
     \expandafter\list
       \csname\@itemitem\endcsname
       {\ifnum\@itemdepth=\@ne\leftmargin 0pt\fi
-	      \def\makelabel##1{\hss\llap{\color{sectioning}##1}}}%
+       \def\makelabel##1{\hss\llap{\color{sectioning}##1}}}%
    \fi}
   {\endlist}
 \newenvironment{enum}[1][0]
@@ -331,7 +334,7 @@
           \hsize\dimexpr\marginparwidth-\marginparsep-4pt-\fboxrule\relax
           \rightskip\dimexpr\marginparsep+4pt+\fboxrule\relax plus 2.5em
           \footnotesize \sffamily #1:\\[-\dimexpr\aboverulesep+\cmidrulewidth+3.5\fboxrule]
-	  \textcolor{theframe}{\rlap{\vrule width \hsize height\fboxrule}}\\[.3\baselineskip] #2}}}
+  \textcolor{theframe}{\rlap{\vrule width \hsize height\fboxrule}}\\[.3\baselineskip] #2}}}
   \mt at unvdimen\dimexpr\ht\mt at box+\dp\mt at box\relax
   \unvbox\mt at box
   \vskip-\mt at unvdimen}
@@ -456,7 +459,7 @@
 \def\PrintMacroName#1{\strut\MacroFont\string #1\hskip15pt}
 \def\ImplementationSettings{%
   \linespread{1}%
-  \hfuzz=10pt
+  \hfuzz=50pt
   \def\MacroFont{\ttfamily\footnotesize}%
   \let\macro at font\MacroFont}
 % additional bells ...
@@ -797,11 +800,12 @@
 \DeclareRobustCommand\etex{\mbox{e-\kern-.075em\TeX}\CatIndeX{e-\TeX}{etex}{engine}}
 \DeclareRobustCommand\nonetex{\rlap{\kern.05em/}\etex} % aka. \TeX
 \def\@reflect#1{\ifdim\fontdimen1\font=0pt \reflectbox{#1}\else\rotatebox[origin=c]{180}{#1}\fi}
-\DeclareRobustCommand\xe{\textoractual{\@reflect{X}\lower.4ex\hbox{\kern-.066em\@reflect{E}}}{Xe}}% also reflect the initial `X'? 
+\DeclareRobustCommand\xe{\textoractual{\@reflect{X}\lower.4ex\hbox{\kern-.066em\@reflect{E}}}{Xe}}% also reflect the initial `X'?
 \DeclareRobustCommand\xetex{\xe\kern-.1em\TeX\CatIndeX{\xe\TeX}{xetex}{engine}}
 \DeclareRobustCommand\texlive{\TeX~Live\CatIndeX{\TeX~Live}{TeXLive}{distribution}}
 \DeclareRobustCommand\miktex{MiK\TeX\CatIndeX{MiK\TeX}{MiKTeX}{distribution}}
 \def\githuburl{https://github.com/schlcht/microtype}
+\def\githubissue#1{ [issue~\href{\githuburl/issues/#1}{\##1}]}
 \def\microtype{{\PackageFont microtype}}
 \def\letterspace{\pkg{letterspace}}
 \def\fontdim{\cmd\fontdimen\,}
@@ -915,6 +919,7 @@
 %{\sffamily\def\familydefault{\sfdefault}\ifcmr\else\DeclareFontSeriesDefault[sf]{bf}{sb}\fi
 % \tableofcontents
 % \listoftables
+% \ifcodedoc\listoffigures\fi
 % \vskip2\baselineskip
 % \Large\MTsectionfont
 % \noindent
@@ -1334,10 +1339,10 @@
 %
 %\subsection{Miscellaneous options}\label{sub:options-misc}
 %
-%\changes{v2.0}{2006/11/28}{add remark about `\opt{disable}' (previously |draft|) option disabling \microtype\
+%\changes{v2.0}{2006/11/28}{add remark about `\opt{disable}' (previously \texttt{draft}) option disabling \microtype\
 %               (noted by \contributor Michalis Miatidis <miatidis\at informatik.rwth-aachen.de>)}
 %                                                                    ^^A private mail, 2006/11/26
-%\changes{v3.0}{2021/09/28}{rename option |draft| option to \opt{disable}
+%\changes{v3.0}{2021/09/28}{rename option \texttt{draft} option to \opt{disable}
 %               (insistently requested by \contributor Frank Mittelbach <frank.mittelbach\at latex-project.org>)}
 %                ^^A private mail, 2018/07/04
 %\Describe{Option}{disable}{true,!false,ifdraft}
@@ -1831,8 +1836,8 @@
 %
 %\paragraph{Options:}
 %\begin{options}
-%  \item[\key{name}, \key{load}, \key{preset}, \key{inputenc}, \key{context}]
-%       Analogous to \cs{SetProtrusion}, the optional argument may be used to
+%  \item[{\spaceskip=.75\fontdimen2\font\key{name}, \key{load}, \key{preset}, \key{inputenc}, \key{context}}]
+%       \hspace{-1.5pt}Analogous to \cs{SetProtrusion}, the optional argument may be used to
 %       assign a name to the list, to load another list, to preset all
 %       expansion factors, to set the input encoding, or to determine the
 %       context of the list (expansion contexts are only possible with \pdftex\
@@ -1846,7 +1851,7 @@
 %       either one of |stretch|, |shrink| and |step|, their respective global
 %       value will be used (that is, no calculation will take place).
 %
-%       As a practical example, suppose you have a paragraph containing a widow
+%       As a practical example, suppose you have a paragraph with a lone widow
 %       that could be avoided by shrinking the font a bit more.
 %       In conjunction with the |context| option (see section~\ref{sec:context}
 %       for further details), you could thus allow for more expansion in this
@@ -2176,8 +2181,8 @@
 %
 %\paragraph{Options:}
 %\begin{options}
-%  \item[\key{name}, \key{load}, \key{factor}, \key{preset}, \key{inputenc}, \key{context}]
-%       These options serve the same function as in the previous configuration
+%  \item[{\spaceskip=.85\fontdimen2\font\key{name}, \key{load}, \key{factor}, \key{preset}, \key{inputenc}, \key{context}}]
+%       \hspace{-0.5pt}These options serve the same function as in the previous configuration
 %       commands.
 %  \item[\key{unit}] You can specify the unit by which the specified numbers are
 %       measured. Possible values are: |character|, a \meta{dimension} and,
@@ -2266,12 +2271,12 @@
 % with the `\opt{config}' option, see section~\ref{sub:options-misc}).
 %
 % If you embark on creating new settings for a font family, you should
-% put them into a separate file, whose name must be: `|mt-|\meta{font
+% put them into a dedicated file, whose name must be: `|mt-|\meta{font
 % family}|.cfg|' (\eg, `\file{mt-cmr.cfg}'; any spaces in the font name should
 % be removed, \eg, `\file{mt-MinionPro.cfg}'), and may contain all commands
 % described in the current section~\ref{sec:fine-tuning}. These files will be
 % loaded automatically if you are actually using the respective fonts.
-% This package ships with configuration files for a number of font families.
+% The \microtype\ package ships with configuration files for a number of font families.
 % They are listed in tables~\ref{tab:type1-fonts} (Type\,1 fonts) and
 % \ref{tab:ot-fonts} (OpenType fonts).
 %
@@ -2383,7 +2388,7 @@
 % Latin Modern Roman
 %      & Latin
 %      & n, it, (sl)\fnref{fn:ot-itsl}\\
-% New Computer Modern
+% New Computer Modern\footnote{Alias: <CMU> Serif}
 %      & Latin, Greek
 %      & n, it, (sl)\fnref{fn:ot-itsl}\\
 % Charis <SIL>
@@ -2697,8 +2702,7 @@
 %\list{}{\labelwidth=3em \itemindent\z@ \leftmargin=\labelwidth
 %     \def\makelabel#1{\hskip\labelsep\texttt{#1}\hss}}
 %\def\MTsupp#1{\unskip\nobreak\hfil\penalty50 \hskip2em\hbox{}\nobreak\hfil
-%   {\smaller(#1)}\parfillskip=0pt \finalhyphendemerits=0
-%}
+%   {\smaller(#1)}\parfillskip=0pt \finalhyphendemerits=0 }
 %^^A \microtypesetup{nopatch=item}
 % \item[item]  Affects the first line of \cmd\item\kern.6pts in various environments, so that,
 %              \eg, the two\break A's here -- the one in the current line and the one in the
@@ -2712,12 +2716,13 @@
 %              \MTsupp{standard classes, \pkg{memoir}}
 % \item[footnote] Protrusion for the first line of footnote text (only visible when
 %              the footnote text is set in block paragraphs, like in this document).
-%              \MTsupp{standard classes, \pkg{memoir}, <KOMA> classes}
+%              \MTsupp{standard classes, \pkg{memoir}, <\pkg{KOMA}> classes, \pkg{hyperref}}
 % \item[eqnum] Protrusion for equation numbers on either side.
-%              \MTsupp{standard classes, \pkg{amsmath}}
+%              \MTsupp{standard classes, \pkg{amsmath}, \pkg{IEEEtran}}
 %\endlist\endgroup
 %
-%\medskip\noindent
+%\enlargethispage{\baselineskip} ^^A layout
+%\noindent
 % By default, all of the above patches will be applied. Should this not be desired,
 % or in case you are running into problems, you may prevent or undo the patches through
 % the \textcolor{thered}{\opt{patch}} and \textcolor{thered}{\opt{nopatch}} options,
@@ -3245,11 +3250,15 @@
 % `\contributor DORpapst          <@\at @>', ^^A https://tex.stackexchange.com/users/104965/dorpapst
 % `\contributor chsk              <@\at @>', ^^A https://tex.stackexchange.com/users/158639/chsk
 % `\contributor tnull             <@\at @>', ^^A https://tex.stackexchange.com/users/91987/tnull
-% `\contributor azur              <@\at @>'  ^^A https://tex.stackexchange.com/users/216369/azur
+% `\contributor azur              <@\at @>', ^^A https://tex.stackexchange.com/users/216369/azur
+% `\contributor Safron            <@\at @>', ^^A https://tex.stackexchange.com/users/149123/safron
+%  \contributor Gustavo Barros    <@\at @>,  ^^A https://tex.stackexchange.com/users/105447/gusbrs
+%  \contributor Torsten Schuetze  <torsten.schuetze\at gmx.net>,
+% `\contributor florian           <@\at @>', ^^A https://tex.stackexchange.com/users/172863/florian
+%  \contributor Liang-Bo Wang     <@\at @>   ^^A https://github.com/ccwang002
 % and
-% `\contributor Safron            <@\at @>'. ^^A https://tex.stackexchange.com/users/149123/safron
+%  \contributor MisterFiLou       <@\at @>.  ^^A https://github.com/MisterFiLou
 %
-%
 %\iffalse
 %\section{History of micro-typography} ^^A some time ...
 % Both these features have been lacking a simple \LaTeX\ user interface for
@@ -3397,7 +3406,9 @@
 %
 %\begin{History}
 %
-%\Version{\expandafter\@gobble\fileversion}{\filedate}
+%\VersionDate{\expandafter\@gobble\fileversion}{\filedate}
+%
+%\Version{3.0}{2021/10/31}
 %  \item Possibility of automatical protrusion based on difference of character widths
 %        \refsection{\ref{sub:inheritance}}
 %  \item New commands \cs{leftprotrusion} and \cs{rightprotrusion};
@@ -3740,19 +3751,20 @@
 %\DoNotIndex{\!,\",\',\(,\),\*,\+,\,,\-,\.,\/,\:,\;,\<,\=,\>,\?,\[,\\,\],\`,
 %  \#,\$,\&,\^,\_,\|,\~,\ ,
 %  \advance,\afterassignment,\aftergroup,\begingroup,\bgroup,\catcode,\char,
-%  \chardef,\csname,\def,\divide,\edef,\egroup,\else,\endcsname,\endgroup,
+%  \chardef,\clubpenalty,\csname,\def,\divide,\edef,\egroup,\else,\endcsname,\endgroup,
 %  \endinput,\escapechar,\everypar,\expandafter,\fi,\futurelet,\gdef,\global,
 %  \hbadness,\hbox,\hfill,\hrule,\hsize,\hskip,\if,\ifcase,\ifcat,\ifdim,\iffalse,\ifhbox,
-%  \ifhmode,\ifmmode,\ifnum,\iftrue,\ifx,\ignorespaces,\immediate,\input,
-%  \inputlineno,\jobname,\kern,\lastbox,\lastkern,\lastskip,\leaders,\let,\lowercase,
-%  \maxdimen,\meaning,\multiply,\newlinechar,\noexpand,\noindent,\number,
-%  \or,\parfillskip,\pretolerance,\relax,\setbox,\showboxdepth,\splittopskip,
-%  \string,\the,\tolerance,\unkern,\unskip,\unvbox,\uppercase,\vbadness,\vbox,
-%  \vrule,\vsplit,\wd,\write,\xdef}
+%  \ifhmode,\ifmmode,\ifnum,\iftrue,\ifvbox,\ifx,\ignorespaces,\immediate,\input,
+%  \inputlineno,\interlinepenalty,\jobname,\kern,\lastbox,\lastkern,\lastskip,\leaders,
+%  \let,\long,\lowercase,\maxdimen,\meaning,\multiply,\newlinechar,\noexpand,\noindent,
+%  \number,\or,\parfillskip,\pretolerance,\relax,\setbox,\showboxdepth,\splittopskip,
+%  \string,\the,\tolerance,\unhbox,\unkern,\unskip,\unvbox,\uppercase,\vbadness,\vbox,
+%  \vfuzz,\vrule,\vsplit,\wd,\widowpenalty,\write,\xdef}
 %^^A\DoNotIndex{\font,\fontdimen,\fontname,\nullfont,\sfcode,\spacefactor,
 %^^A  \spaceskip,\xspaceskip}                                                ^^A tex
 %\DoNotIndex{\currentgrouplevel,\currentgrouptype,\currentiflevel,\detokenize,
-%  \dimexpr,\eTeXversion,\ifcsname,\ifdefined,\lastnodetype,\numexpr}
+%  \dimexpr,\eTeXversion,\ifcsname,\ifdefined,\lastnodetype,\numexpr,
+%  \scantokens,\unexpanded}
 %^^A\DoNotIndex{\fontcharwd,\iffontchar}                                     ^^A e-tex
 %\DoNotIndex{\pdfannot,\pdfmatch,\pdfoutput,\pdfstrcmp,
 %  \pdftexrevision,\pdftexversion}
@@ -3768,22 +3780,22 @@
 %^^A  \ignoreligaturesinfont,\outputmode,\protrudechars,\tracingfonts}       ^^A luatex
 %\DoNotIndex{\eplain,\usepkg at pkg}                                            ^^A eplain
 %\DoNotIndex{\@backslashchar,\@car,\@cclvi,\@classoptionslist,\@currext,
-%  \@currname,\@defaultunits,\@empty,\@eqnnum,\@expandtwoargs,\@firstofone,
-%  \@firstoftwo,\@footnotetext,\@gobble,\@gobbletwo,\@ifclassloaded,\@ifl at t@r,
-%  \@ifl at aded,\@ifpackagelater,\@ifpackageloaded,\@ifstar,\@ifundefined,\@item,
+%  \@currname,\@defaultunits,\@elt,\@empty,\@eqnnum,\@expandtwoargs,\@fileswfalse,
+%  \@firstofone,\@firstoftwo,\@footnotetext,\@gobble,\@gobbletwo,\@ifclassloaded,
+%  \@ifl at t@r,\@ifl at aded,\@ifpackagelater,\@ifpackageloaded,\@ifstar,\@ifundefined,\@item,
 %  \@let at token,\@m,\@M,\@makeother,\@minus,\@nameuse,\@ne,\@newlistfalse,\@nil,\@nnil,
 %  \@onelevel at sanitize,\@onlypreamble,\@pkgextension,\@plus,\@ptionlist,\@removeelement,
 %  \@secondoftwo,\@spaces,\@sptoken,\@tempa,\@tempb,\@tempc,\@tempcnta,\@tempcntb,\@tempdima,
 %  \@typeset at protect,\@undefined,\@unprocessedoptions,\@unusedoptionlist,\@xobeysp,
-%  \check at icr,\color at begingroup,\color at endgroup,\g at addto@macro,\hmode at bgroup,\m at ne,
+%  \check at icr,\cl@@ckpt,\color at begingroup,\color at endgroup,\g at addto@macro,\hmode at bgroup,\m at ne,
 %  \maybe at ic,\maybe at ic@,\nfss at text,\not at math@alphabet,\on at line,\p@,\set at display@protect,
 %  \strip at prefix,\strip at pt,\@text at composite,\tw@,\z@,\z at skip,\zap at space,
 %  \active,\documentclass,\dotfill,\fbox,\fboxrule,\fboxsep,\fmtversion,\footnotesize,
 %  \leavevmode,\llap,\makeatletter,\makebox,\mathrm,\mbox,\medskip,\newbox,\newcommand,
 %  \newcount,\newdimen,\newif,\newline,\newskip,\newtoks,\nobreak,\nonfrenchspacing,
-%  \normalbaselineskip,\normalsize,\numberline,\par,\parbox,\quad,\raggedright,
-%  \renewcommand,\scalebox,\space,\strut,\textwidth,\texttt,\tiny,\usefont,
-%  \AddToHook,\AtBeginDocument,\AtEndOfPackage,\CheckCommand,\CurrentOption,
+%  \normalbaselineskip,\normalsize,\numberline,\obeylines,\par,\parbox,\quad,\raggedright,
+%  \renewcommand,\scalebox,\space,\strut,\textwidth,\texttt,\tiny,\tracingnone,\usefont,
+%  \value,\AddToHook,\AtBeginDocument,\AtEndOfPackage,\CheckCommand,\CurrentOption,
 %  \DeclareOption,\DeclareRobustCommand,\IfFileExists,\IfFormatAtLeastTF,\InputIfFileExists,
 %  \MessageBreak,\PackageError,\PackageInfo,\PackageWarning,\PassOptionsToPackage,
 %  \ProcessOptions,\RequirePackage,\@@enc at update,\UnicodeEncodingName}
@@ -3793,11 +3805,11 @@
 %^^A  \remove at tlig,\selectfont,\seriesdefault,\shapedefault,\set at fontsize,\showhyphens}  ^^A latex
 %\DoNotIndex{\normalpdfoutput,\normalpdftexversion,\normalpdftexrevision}    ^^A tex live 2004
 %\DoNotIndex{\foreign at language,\languagename,\select at language,\shorthandoff} ^^A babel
-%\DoNotIndex{\percentsign}                                                   ^^A babel/spanish,galician,mexican
+%\DoNotIndex{\activatequoting,\deactivatequoting,\percentsign}               ^^A babel/spanish,galician,mexican
 %\DoNotIndex{\CJK at ifundefined,\CJK at plane,\CJK at temp,\CJK at addcmap}             ^^A CJK,CJKutf8
 %\DoNotIndex{\color}                                                         ^^A color
 %\DoNotIndex{\@disablequotes}                                                ^^A csquotes
-%\DoNotIndex{\pdfstringdefDisableCommands,\pdfstringdefWarn}                 ^^A hyperref
+%\DoNotIndex{\ifHy at hyperfootnotes,\pdfstringdefDisableCommands,\pdfstringdefWarn} ^^A hyperref
 %\DoNotIndex{\ifpdf,\ifetex,\ifluatex,\ifxetex}                              ^^A ifpdf/iftex
 %\DoNotIndex{\@inpenc at undefined@,\IeC,\inputencoding,\inputencodingname}     ^^A inputenc
 %^^A\DoNotIndex{\UTFviii at defined,\UTF at four@octets at noexpand,                  ^^A inputenc/utf8
@@ -3823,6 +3835,7 @@
 %  \cftpartafterpnum,\cftsectionafterpnum,\cftsubparagraphafterpnum,\cftsubsectionafterpnum,
 %  \cftsubsubsectionafterpnum,\cfttableafterpnum}                            ^^A memoir
 %\DoNotIndex{\setuptoc,\unsettoc,\scr at saved@footnotetext}                    ^^A koma (tocbasic)
+%\DoNotIndex{\theequationdis,\theIEEEsubequationdis}                         ^^A IEEEtran
 %\DoNotIndex{\x,\MT at dinfo,\MT at dinfo@nl,\tracingmicrotype,\tracingmicrotypeinpdf,
 %  \ifMT at inannot,\MT at inannottrue,\MT at inannotfalse,\MT at addto@annot,\MT at pdf@annot,
 %  \MT at show@pdfannot,\iftracingmicrotypeinpdfall,\tracingmicrotypeinpdfalltrue,
@@ -3963,6 +3976,8 @@
 \newcommand*\microtypesetup[1]{}
 \newcommand*\microtypecontext[1]{}
 \newcommand*\textmicrotypecontext[2]{#2}
+\newcommand\leftprotrusion[1]{#1}
+\newcommand\rightprotrusion[1]{#1}
 \@ifpackageloaded{letterspace}{\let\MT at textls\relax}{%
 %</package>
 \newcommand*\lsstyle{}
@@ -4604,15 +4619,14 @@
 %\changes{v2.5}{2010/05/05}{new files: \file{microtype-pdftex.def}, \file{microtype-xetex.def}, \file{microtype-luatex.def},
 %                           containing engine-specific definitions}
 % We check whether we are running \pdftex, \xetex, or \luatex, and
-% load the appropriate definition file.
+% load the appropriate definition file (later in section~\ref{ssub:def-files}).
 %\begin{macro}{\MT at clear@options}
-% If we are using neither of these engines, we disable everything and exit.
+% If we are using neither of these engines, or a too old version, we disable everything and exit.
 %    \begin{macrocode}
 \def\MT at clear@options{%
 %<plain>  \MT at requires@latex1{%
   \AtEndOfPackage{\let\@unprocessedoptions\relax\MT at restore@catcodes}%
   \let\CurrentOption\@empty
-%<package>  \let\MT at endinput\endinput
 %<plain>  }\relax
 }
 %    \end{macrocode}
@@ -4632,30 +4646,42 @@
 %    \end{macrocode}
 %\begin{macro}{\MT at engine}
 %\changes{v2.6}{2016/03/25}{fix test with \luatex\ 0.85}
-%\begin{macro}{\MT at engine@tooold}
+%\begin{macro}{\ifMT at engine@unfit}
+%\begin{macro}{\MT at engine@minversion}
 % Old packages might have let \cmd\pdftexversion\ to \cmd\relax.
 %    \begin{macrocode}
 \let\MT at engine\relax
-%<letterspace>\def\MT at engine@tooold{0}
+\newif\ifMT at engine@unfit
+\MT at engine@unfittrue
 \ifx\pdftexversion\@undefined \else
   \ifx\pdftexversion\relax \else
     \def\MT at engine{pdf}
+%<package>    \def\MT at engine@minversion{0.14f}
 %<letterspace>    \let\MT at pdf@or at lua\@firstoftwo
-%<letterspace>    \ifnum\pdftexversion > 139 \def\MT at engine@tooold{1}\fi
+    \ifnum\pdftexversion
+%<package>        > 13
+%<letterspace>        > 139
+      \MT at engine@unfitfalse
+%<package>      \ifnum \pdftexversion=14
+%<package>        \ifnum \expandafter`\pdftexrevision < `f
+%<package>          \MT at engine@unfittrue
+%<package>        \fi
+%<package>      \fi
+    \fi
   \fi
 \fi
 \ifx\directlua\@undefined \else
   \ifx\directlua\relax \else
     \def\MT at engine{lua}
+    \MT at engine@unfitfalse
 %    \end{macrocode}
 % Since approx. \luatex\ 0.80, \cmd\pdftexversion\ is let to \cmd\luatexversion,
-% so that we would be fooled to think that \pdftex\ is too old.
+% so that we would be fooled into thinking that \pdftex\ is too old.
 %    \begin{macrocode}
 %<*letterspace>
     \let\MT at pdf@or at lua\@secondoftwo
-    \ifnum\luatexversion < 62 \def\MT at engine@tooold{0}
+    \ifnum\luatexversion < 62 \MT at engine@unfittrue
     \else
-      \def\MT at engine@tooold{1}
       \let\MT at lua\directlua
       \ifnum\luatexversion > 84
         \let\pdfoutput\outputmode
@@ -4671,6 +4697,10 @@
   \ifx\XeTeXversion\@undefined \else
     \ifx\XeTeXversion\relax \else
       \def\MT at engine{xe}
+      \def\MT at engine@minversion{0.9997}
+      \ifdim 0\XeTeXrevision pt > 0.9996pt
+        \MT at engine@unfitfalse
+      \fi
     \fi
   \fi
 \fi
@@ -4679,6 +4709,7 @@
 %    \end{macrocode}
 %\end{macro}
 %\end{macro}
+%\end{macro}
 %\begin{macro}{\MT at pdftex@no}
 %\changes{v1.6a}{2005/02/02}{new macro}
 % \pdftex's features for which we provide an interface here haven't always been
@@ -4688,7 +4719,7 @@
 % Currently, we have to distinguish the following cases for \pdftex:
 %\begin{enum}
 %  \item not running \pdftex
-%  \item \pdftex\ ($\less$~0.14f)
+%  \item \pdftex\ ($\less$~0.14f) (already checked above)
 %  \item + micro-typographic extensions (0.14f,g)
 %  \item + protrusion relative to \EM{1} ($\geq$~0.14h)
 %  \item + automatic font expansion;
@@ -4742,14 +4773,7 @@
         \ifnum\pdftexversion = 14
           \ifnum \expandafter`\pdftexrevision < `h
             \def\MT at pdftex@no{2}
-            \ifnum \expandafter`\pdftexrevision < `f
-              \def\MT at pdftex@no{1}
-            \fi
           \fi
-        \else
-          \ifnum\pdftexversion < 14
-            \def\MT at pdftex@no{1}
-          \fi
         \fi
       \fi
     \fi
@@ -4762,15 +4786,18 @@
 %\changes{v2.5}{2010/05/05}{protrusion with \xetex}
 %\begin{macro}{\MT at xetex@no}
 % \xetex\ supports character protrusion since version 0.9997.
+% This test is not necessary here, we just keep it for the
+% (unlikely) case that features get added to \xetex\ in the
+% future.
 %    \begin{macrocode}
 %<*xe->
 %<debug>\MT at dinfo@nl{0}{this is xetex (\the\XeTeXversion\XeTeXrevision)}
-\ifdim 0\XeTeXrevision pt < 0.9997pt
-  \def\MT at xetex@no{1}
-\else
-  \def\MT at xetex@no{2}
-\fi
-%<debug>\MT at dinfo@nl{0}{xetex no.: \MT at xetex@no}
+%\ifdim 0\XeTeXrevision pt < 0.9997pt
+%  \def\MT at xetex@no{1}
+%\else
+%  \def\MT at xetex@no{2}
+%\fi
+%<debug>%\MT at dinfo@nl{0}{xetex no.: \MT at xetex@no}
 %</xe->
 %    \end{macrocode}
 %\end{macro}
@@ -4832,31 +4859,28 @@
 %</lua->
 %    \end{macrocode}
 %\end{macro}
+% Abort if no capable engine found.
+%\changes{v3.0a}{2021/11/10}{abort earlier if no capable engine found}
 %    \begin{macrocode}
-%<*pdf-|xe-|letterspace>
-\ifnum
-%<pdf-|xe->  \csname MT@\MT at engine tex at no\endcsname < 2
-%<letterspace>  \MT at engine@tooold=\z@
+%<*package|letterspace>
+\ifMT at engine@unfit
   \MT at warning@nl{You
-%<*letterspace>
     \ifx\MT at engine\relax
-      don't seem to be using pdftex or luatex.\MessageBreak
-      Try running `pdftex' or `luatex' instead of\MessageBreak
-        `\ifx\XeTeXversion\@undefined\else xe\fi tex'%
+      don't seem to be using pdftex%
+%<package>      , luatex or xetex%
+%<letterspace>      \space or luatex%
+     .\MessageBreak `\MT at MT' only works with these engines.%
     \else
-%</letterspace>
       are using a \MT at engine tex version older than
-%<pdf->      0.14f%
-%<xe->      0.9997%
-%<letterspace>        \MT at pdf@or at lua{1.40}{0.62}%
-      .\MessageBreak
-      `\MT at MT' does not work with this version.\MessageBreak
-      Please install a newer version of \MT at engine tex%
-%<letterspace>    \fi
-      .\MessageBreak I will quit now}
+%<package>       \MT at engine@minversion
+%<letterspace>      \MT at pdf@or at lua{1.40}{0.62}%
+     .\MessageBreak `\MT at MT' does not work with this version.%
+      \MessageBreak Please install a newer version of \MT at engine tex.%
+    \fi
+    \MessageBreak I will quit now}
   \MT at clear@options
 \endinput\fi
-%</pdf-|xe-|letterspace>
+%</package|letterspace>
 %    \end{macrocode}
 % Still there? Then we can begin:
 % We need the \pkg{keyval} package, including the `new' \cmd\KV@@sp at def\
@@ -5116,6 +5140,24 @@
   tex.sprint(catpackage, ...)
 end
 
+%    \end{macrocode}
+% We need the function |math.tointeger|, which is missing in older
+% \luatex\ versions, and Con\TeX t (inherited via \pkg{luaotfload})
+% faultily overwrites its own definition.
+%\changes{v3.0a}{2021/11/17}{define function \texttt{math.tointeger} for older \luatex\ versions}
+%                           ^^A cf. https://mailman.ntg.nl/pipermail/dev-luatex/2021-November/006556.html
+% The following is the (correct) definition from \file{l-math.lua}.
+%    \begin{macrocode}
+if not math.tointeger or not pcall(math.tointeger,0) then
+  math.mininteger=-0x4FFFFFFFFFFF
+  math.maxinteger=0x4FFFFFFFFFFF
+  local floor=math.floor
+  function math.tointeger(n)
+    local f=floor(n)
+    return f==n and f or nil
+  end
+end
+
 %</luafile>
 %    \end{macrocode}
 % To be continued, but first back to primitives.
@@ -5975,6 +6017,7 @@
 %\end{macro}
 %\begin{macro}{\MT at with@babel at and@T}
 %\changes{v2.2}{2007/05/25}{also inspect class options}
+%\changes{v3.0a}{2021/11/23}{fix grouping}
 % \LaTeX's \cmd\@ifpackagewith\ ignores the class options.
 %    \begin{macrocode}
 \def\MT at with@babel at and@T#1{%
@@ -5981,7 +6024,7 @@
   \MT at ifdefined@n at T{opt at babel.\@pkgextension}{%
     \@expandtwoargs\MT at in@clist{#1}
       {\csname opt at babel.\@pkgextension\endcsname,\@classoptionslist}%
-    \ifMT at inlist@\expandafter\@gobble\fi
+    \ifMT at inlist@\expandafter\@secondoftwo\else\expandafter\@firstofone\fi
   }\@gobble
 }
 %    \end{macrocode}
@@ -6240,6 +6283,7 @@
   \MT at with@package at T{csquotes}{%
     \@ifpackagelater{csquotes}{2005/05/11}{%
       \g at addto@macro\MT at setupfont@hook\@disablequotes
+      \g at addto@macro\MT at prot@hook\@disablequotes
     }{%
       \MT at warning@nl{%
         Should you receive warnings about unknown slot\MessageBreak
@@ -6388,6 +6432,7 @@
 %\begin{macro}{\MT at patch@info}
 %\begin{macro}{\MT at patch@warn}
 %\begin{macro}{\MT at patch@undef}
+%\begin{macro}{\MT at patch@info at undo}
 % We have to patch some macros to get protrusion right.
 %    \begin{macrocode}
 \newif\ifMT at patch@ok
@@ -6394,14 +6439,16 @@
 \def\MT at patch@info#1{\MT at info{Applying patch `#1'}}
 \def\MT at patch@warn#1{\MT at warning{Unable to apply patch `#1'}}
 \def\MT at patch@undef#1{\MT at warning{Patch `#1' undefined. Cannot apply it}}
+\def\MT at patch@info at undo#1{\MT at info{Reverting patch `#1'}}
 %    \end{macrocode}
 %\end{macro}
 %\end{macro}
 %\end{macro}
 %\end{macro}
+%\end{macro}
 %\begin{macro}{\MT at patches@def}
 %\begin{macro}{\MT at define@patch}
-% Define a patch and it add to the list of patches.
+% Define a patch and add it to the list of patches.
 % The third argument may contain more revert commands, but will
 % mostly be empty.
 %    \begin{macrocode}
@@ -6414,6 +6461,28 @@
 %    \end{macrocode}
 %\end{macro}
 %\end{macro}
+%\begin{macro}{\MT at redefined@patches}
+%\begin{macro}{\MT at redefine@patch}
+% We also provide an easier way of redefining patches, which
+% would otherwise be a bit tricky because of the timing (patches
+% are defined \emph{and} executed <ABD>).
+%\changes{v3.0a}{2021/12/01}{facilitate redefinition of patches}
+%    \begin{macrocode}
+\let\MT at redefined@patches\@empty
+\def\MT at redefine@patch#1#2#3{%
+  \g at addto@macro\MT at redefined@patches{%
+    \MT at def@n{MT at patch@@#1}{#2}%
+    \MT at def@n{MT at patch@undo@@#1}{#3}%
+  }%
+}
+%    \end{macrocode}
+%\end{macro}
+%\end{macro}
+% Both macros are only allowed in the preamble.
+%    \begin{macrocode}
+\@onlypreamble\MT at define@patch
+\@onlypreamble\MT at redefine@patch
+%    \end{macrocode}
 %\begin{macro}{\MT at append@patch}
 %\begin{macro}{\MT at patch@patch}
 % Wrappers around \pkg{etoolbox} commands.
@@ -6444,6 +6513,10 @@
 %\begin{macro}{\MT at patches@applied}
 %\begin{macro}{\MT at apply@patch}
 % Apply a previously defined patch.
+%\changes{v3.0a}{2021/11/23}{compatibility with \pkg{babel}\slash\texttt{spanish}:
+%                           fix catcodes}
+% With some packages, we have to reset catcodes (\eg, for the `|item|'
+% patch with Spanish \pkg{babel}, which makes `|>|' active).
 %    \begin{macrocode}
 \let\MT at patches@applied\@gobble
 \def\MT at apply@patch#1{%
@@ -6454,10 +6527,14 @@
        \MT at warning{Patch `#1' has already been applied,\MessageBreak
                    cannot reapply it}%
      \else
+       \let\MT at restore@catcodes\@empty
+       \MT at with@babel at and@T{spanish} {\MT at fix@catcode{62}{12}}% >
+       \MT at with@babel at and@T{galician}{\MT at fix@catcode{62}{12}}% >
        \def\MT at patch@name{#1}%
        \g at addto@macro\MT at patches@applied{,#1}%
        \@nameuse{MT at patch@@#1}%
        \@nameuse{MT at patch@\ifMT at patch@ok info\else warn\fi}{#1}%
+       \MT at restore@catcodes
      \fi}
     {\MT at patch@undef{#1}}%
 }
@@ -6472,6 +6549,7 @@
   \ifMT at inlist@
     \MT at rem@from at clist{#1}\MT at patches@applied
     \@nameuse{MT at patch@undo@@#1}%
+    \MT at patch@info at undo{#1}%
   \else
     \MT at warning{Patch `#1' hasn't been applied,\MessageBreak cannot revert it}%
   \fi
@@ -6492,43 +6570,38 @@
 %    |quote|, |flushleft| etc.). For |verse| (and probably other environments), ^^A found by \contributor Antonis Tsolomitis <antonis.tsolomitis\at gmail.com>, private mail, 2021/08/01
 %    we also have to patch \cmd\everypar~\dots
 % \begin{itemize}
-% \item \pkg{beamer} patches it too
 %\changes{v3.0}{2021/05/20}{protrusion patch for \cmd\item}
+%   \item for the base classes
 %    \begin{macrocode}
-  \@ifclassloaded{beamer}
-    {\MT at define@patch{item}
-      {\MT at append@patch\@item\leftprotrusion
-       \MT at patch@patch\@item{\everypar{}}{\everypar{\leftprotrusion}}%
-       \MT at append@patch\beamer@@callorigitem\leftprotrusion
+  \MT at define@patch{item}{%
+    \MT at append@patch\@item\leftprotrusion
+    \MT at patch@patch\@item{\everypar{}}{\everypar{\leftprotrusion}}%
+%    \end{macrocode}
+% \item \pkg{beamer} patches it too
+%    \begin{macrocode}
+    \@ifclassloaded{beamer}
+      {\MT at append@patch\beamer@@callorigitem\leftprotrusion
        \MT at patch@patch\beamer at callorigitem{\ignorespaces}{\ignorespaces\leftprotrusion}}
-      {}}
 %    \end{macrocode}
 % \item the \pkg{simplecv} class
 %    \begin{macrocode}
-    {\@ifclassloaded{simplecv}
-      {\MT at define@patch{item}
-        {\MT at append@patch\@item\leftprotrusion
-         \MT at append@patch\@topic at item\leftprotrusion
-         \MT at patch@patch\@item{\everypar{}}{\everypar{\leftprotrusion}}}
+      {\@ifclassloaded{simplecv}
+        {\MT at append@patch\@topic at item\leftprotrusion}
         {}}%
+  }{}%
 %    \end{macrocode}
-% \item standard \LaTeX\ classes
+% \end{itemize}
+% \item [|toc|] <TOC> and friends
+%\changes{v3.0}{2021/05/20}{protrusion patch for <TOC>}
 %    \begin{macrocode}
-      {\MT at define@patch{item}
-        {\MT at append@patch\@item\leftprotrusion
-         \MT at patch@patch\@item{\everypar{}}{\everypar{\leftprotrusion}}}
-        {}}}%
+  \MT at define@patch{toc}{%
+    \MT at append@patch\numberline\leftprotrusion
 %    \end{macrocode}
-% \end{itemize}
-% \item [|toc|] <TOC> and friends
 % \begin{itemize}
 %   \item for the \pkg{memoir} class we also fix the extra leader problem~\dots
-%\changes{v3.0}{2021/05/20}{protrusion patch for <TOC>}
 %    \begin{macrocode}
-  \@ifclassloaded{memoir}
-    {\MT at define@patch{toc}
-      {\MT at append@patch\numberline\leftprotrusion
-       \MT at append@patch\booknumberline\leftprotrusion
+    \@ifclassloaded{memoir}
+      {\MT at append@patch\booknumberline\leftprotrusion
        \MT at append@patch\partnumberline\leftprotrusion
        \MT at append@patch\chapternumberline\leftprotrusion
        \MT at append@patch\cftbookafterpnum\noprotrusion
@@ -6541,18 +6614,19 @@
        \MT at append@patch\cftsubparagraphafterpnum\noprotrusion
        \MT at append@patch\cftfigureafterpnum\noprotrusion
        \MT at append@patch\cfttableafterpnum\noprotrusion}
-      {}}
+      {}%
+  }{}%
 %    \end{macrocode}
-% \item for the <KOMA> classes (which load the \pkg{tocbasic} package)
+% \item for the <\pkg{KOMA}> classes (which load the \pkg{tocbasic} package)
 %       we additionally have to switch protrusion back on; this will
 %       re-introduce the risk of getting an extra leader dot, but I
 %       currently don't see how to easily add \cmd\noprotrusion.
 %       Therefore, I'll skip this patch for now, saving the joy of wading
 %       through |scr| files for later, all the while waiting for somebody
-%       who would understand <KOMA> better than me.
+%       who would understand <\pkg{KOMA}> better than me.
 %\todo{fix KOMA patch (add \cmd\noprotrusion)}
 %    \begin{macrocode}
-%    {\@ifpackageloaded{tocbasic}
+%    \@ifpackageloaded{tocbasic}
 %      {\MT at define@patch{toc}
 %        {\MT at append@patch\numberline\leftprotrusion
 %         \setuptoc{toc}{noprotrusion}%
@@ -6560,14 +6634,8 @@
 %         \setuptoc{lot}{noprotrusion}}
 %        {\unsettoc{toc}{noprotrusion}%
 %         \unsettoc{lof}{noprotrusion}%
-%         \unsettoc{lot}{noprotrusion}}}
+%         \unsettoc{lot}{noprotrusion}}}{}%
 %    \end{macrocode}
-% \item \dots, and for the rest:
-%    \begin{macrocode}
-      {\MT at define@patch{toc}
-        {\MT at append@patch\numberline\leftprotrusion}
-        {}}%
-%    \end{macrocode}
 % \item (a patch for \pkg{titletoc} would also be worthwhile~\dots)
 %\todo{patch for \pkg{titletoc}}
 % \end{itemize}
@@ -6575,33 +6643,59 @@
 %       on \cmd\tagform@, so we have to make it use the original definition.
 %\changes{v3.0}{2021/05/21}{protrusion patch for equation numbers
 %                           (provided by \contributor Holger Gerhardt <holger.gerhardt\at uni-bonn.de>)}
+%\changes{v3.0a}{2021/11/22}{protrusion patch \texttt{eqnum} for \pkg{IEEEtran}}
 %    \begin{macrocode}
-  \@ifpackageloaded{amsmath}
-    {\MT at define@patch{eqnum}
+  \MT at define@patch{eqnum}{%
+    \@ifclassloaded{IEEEtran}
+      {\MT at patch@patch\theequationdis{(}{\leftprotrusion{(}}%
+       \MT at patch@patch\theequationdis{)}{\rightprotrusion{)}}%
+       \MT at patch@patch\theIEEEsubequationdis{(}{\leftprotrusion{(}}%
+       \MT at patch@patch\theIEEEsubequationdis{)}{\rightprotrusion{)}}}%
+      {}%
+    \@ifpackageloaded{amsmath}
       {\MT at patch@patch\tagform@{(}{\leftprotrusion{(}}%
        \MT at patch@patch\tagform@{)}{\rightprotrusion{)}}%
-       \MT at patch@patch\eqref{\tagform@}{\@nameuse{MT at patch@saved@\string\tagform@}}}%
-      {}}
-    {\MT at define@patch{eqnum}
+       \MT at patch@patch\eqref{\tagform@}{\@nameuse{MT at patch@saved@\string\tagform@}}}
       {\MT at patch@patch\@eqnnum{(}{\leftprotrusion{(}}%
        \MT at patch@patch\@eqnnum{)}{\rightprotrusion{)}}}%
-      {}}%
+  }{}%
 %    \end{macrocode}
-% \item [|footnote|] footnote text (only visible with block paragraphs).
+% \item [|footnote|] footnote text (only visible with block paragraphs)
 %\changes{v3.0}{2021/05/25}{protrusion patch for footnote text}
+%\begin{itemize}
+%   \item \pkg{hyperref} also patches this command (but only if |hyperfootnotes=true|)
+%\changes{v3.0a}{2021/11/30}{fix protrusion patch \texttt{footnote} with \pkg{hyperref}
+%                           (reported by \contributor Liang-Bo Wang <@\at @>) \githubissue{2}}
 %    \begin{macrocode}
-  \@ifclassloaded{memoir}
-    {\MT at define@patch{footnote}
+  \MT at define@patch{footnote}{%
+    \@ifpackageloaded{hyperref}
+        {\ifHy at hyperfootnotes\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+        \@secondoftwo
       {\MT at patch@patch\@footnotetext{\ignorespaces}{\ignorespaces\leftprotrusion}%
-       \MT at patch@patch\@footnotetext{\foottextfont #1}{\foottextfont\leftprotrusion #1}}
-      {}}
-    {\@ifpackageloaded{scrbase}
-      {\MT at define@patch{footnote}
+       \MT at patch@patch\@footnotetext{\@empty\ignorespaces}{\@empty\ignorespaces\leftprotrusion}}
+%    \end{macrocode}
+%   \item so do the <\pkg{KOMA}> classes (which load \pkg{scrkbase})
+%\changes{v3.0a}{2021/12/02}{fix protrusion patch \texttt{footnote} with <\pkg{KOMA}> classes
+%                           (reported by \contributor MisterFiLou <@\at @>) \githubissue{2}}
+%    \begin{macrocode}
+      {\@ifpackageloaded{scrkbase}
         {\MT at patch@patch\scr at saved@footnotetext{\ignorespaces}{\ignorespaces\leftprotrusion}}
-        {}}
-      {\MT at define@patch{footnote}
-        {\MT at patch@patch\@footnotetext{\ignorespaces}{\ignorespaces\leftprotrusion}}
-        {}}}%
+%    \end{macrocode}
+%   \item  base classes
+%    \begin{macrocode}
+        {\MT at patch@patch\@footnotetext{\ignorespaces}{\ignorespaces\leftprotrusion}%
+%    \end{macrocode}
+%   \item \pkg{memoir} additionally allows footnotes in the margins
+%    \begin{macrocode}
+         \@ifclassloaded{memoir}
+           {\MT at patch@patch\@footnotetext{\foottextfont #1}{\foottextfont\leftprotrusion #1}}
+           {}}}%
+  }{}%
+%    \end{macrocode}
+%\end{itemize}
+% Finally, execute any redefinitions.
+%    \begin{macrocode}
+  \MT at redefined@patches
 }}
 %    \end{macrocode}
 %\end{description}
@@ -6609,6 +6703,9 @@
 %</package>
 %</package|letterspace>
 %    \end{macrocode}
+%
+%\subsection{Font setup}\label{sub:font-setup}
+%
 %\changes{v1.6}{2005/01/19}{load a font if none is selected}
 % We need a font (the \pkg{minimal} class doesn't load one).
 %    \begin{macrocode}
@@ -6615,8 +6712,6 @@
 %<package>\expandafter\ifx\the\font\nullfont\normalfont\fi
 %    \end{macrocode}
 %
-%\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
 % applied to the current font (\cs{MT at font}).
@@ -7834,16 +7929,10 @@
 %    \end{macrocode}
 %\end{macro}
 %\begin{macro}{\MT at tempbox}
-%\begin{macro}{\MT at leftmarginkern}
-%\begin{macro}{\MT at rightmarginkern}
 %    \begin{macrocode}
 \newbox\MT at tempbox
-\newdimen\MT at leftmarginkern
-\newdimen\MT at rightmarginkern
 %    \end{macrocode}
 %\end{macro}
-%\end{macro}
-%\end{macro}
 %\begin{macro}{\leftprotrusion}
 %\changes{v3.0}{2021/05/15}{new command}
 % This command may be used to add protrusion on the left hand side.
@@ -7860,23 +7949,19 @@
 %    \end{macrocode}
 %\end{macro}
 %\begin{macro}{\MT at prot@l}
-% These macros need to be \cmd\long.
+% This macro no longer needs to be \cmd\long\ as we're providing
+% the argument wrapped in a rescanned toks.
 %    \begin{macrocode}
-\long\def\MT at prot@l#1{%
-  \MT at get@prot{#1}%
-  \ifdim\MT at leftmarginkern=\z@ \else
-    \leavevmode
-    \MT at vinfo{|<< adding left margin kern for `\@tempa':\MessageBreak
-                  \the\MT at leftmarginkern \on at line}%
-    \kern\MT at leftmarginkern
-  \fi
+\def\MT at prot@l#1{%
+  \MT at get@prot{#1}{left}%
   #1%
 }
 %    \end{macrocode}
 %\end{macro}
 %\begin{macro}{\rightprotrusion}
+% But \cs{rightprotrusion} must be \cmd\long.
 % Unfortunately, there's no way to retrieve anything that's already been typeset,
-% so the counterpart cannot be symmetric.
+% so the counterpart cannot be defined symmetrically.
 %\changes{v3.0}{2021/05/15}{new command}
 %    \begin{macrocode}
 \DeclareRobustCommand\rightprotrusion{\MT at prot@r}
@@ -7885,13 +7970,8 @@
 %\begin{macro}{\MT at prot@r}
 %    \begin{macrocode}
 \long\def\MT at prot@r#1{%
-  #1%
-  \MT at get@prot{#1}%
-  \ifdim\MT at rightmarginkern=\z@ \else
-    \MT at vinfo{>>| adding right margin kern for `\@tempa':\MessageBreak
-                  \the\MT at rightmarginkern \on at line}%
-    \kern\MT at rightmarginkern
-  \fi
+  {#1}%
+  \MT at get@prot{#1}{right}%
 }
 %    \end{macrocode}
 %\end{macro}
@@ -7899,33 +7979,66 @@
 % Typeset the text inside a box and get the left and right margin kerns.
 % We add an extra \cmd\vbox\ in case we're inside a |tabular|.
 % \cmd\@newlistfalse\ is meant to make \cmd\\ work in |centering| etc.
+%\changes{v3.0a}{2021/11/22}{reset counters}
+%\changes{v3.0a}{2021/11/05}{compatibility fix for \pkg{csquotes}
+%                           (reported by \contributor Gustavo Barros <@\at @>)\githubissue{1}}
+%                            ^^A https://tex.stackexchange.com/questions/621440/microtype-csquotes-autoquote-and-itemize-interaction
+%\changes{v3.0a}{2021/11/27}{set penalties to zero and vfuzz to max
+%                           (reported by \contributor florian <@\at @>)}
+%                            ^^A https://tex.stackexchange.com/questions/624171/overfull-vbox-in-list-of-figures-since-miktex-update
+% We set various penalties to zero to allow linebreaking, and don't
+% bother if the split box is overfull (but shouldn't we? -- after all,
+% that's how the penalties bug was discovered~\dots).
+%\begin{macro}{\MT at ckpt}
+% We also reset the counters and disable writing to auxiliary files.
+%\begin{macro}{\MT at prot@hook}
+% Furthermore, we have a hook for compatibility fixes.
 %    \begin{macrocode}
-\long\def\MT at get@prot#1{%
-  \MT at leftmarginkern=\z@
-  \MT at rightmarginkern=\z@
+\let\MT at prot@hook\@empty
+\long\def\MT at get@prot#1#2{%
   \begingroup
+    \def\@elt##1{\global\value{##1}\the\value{##1}\relax}%
+    \edef\MT at ckpt{\cl@@ckpt}%
+    \let\@elt\relax
+    \@fileswfalse
     \setbox\MT at tempbox\vbox{%
       \everypar{}%
       \parfillskip=\z at skip
       \hbadness\@M
+      \clubpenalty\z@
+      \widowpenalty\z@
+      \interlinepenalty\z@
       \@newlistfalse
+      \MT at prot@hook
       \noindent #1}%
     \vbadness=\@M
     \splittopskip=\z@
+    \vfuzz=\maxdimen
     \setbox\MT at tempbox\vbox{%
-      \global\setbox\MT at tempbox=\vsplit\MT at tempbox to \normalbaselineskip
-      \unvbox\MT at tempbox
-      \global\setbox\MT at tempbox=\lastbox
+      \ifvbox\MT at tempbox
+        \global\setbox\MT at tempbox=\vsplit\MT at tempbox to \normalbaselineskip
+        \unvbox\MT at tempbox
+        \global\setbox\MT at tempbox=\lastbox
+      \fi
     }%
+    \MT at ckpt
   \endgroup
   \ifhbox\MT at tempbox
-    \def\@tempa{#1}%
-    \MT at leftmarginkern=\leftmarginkern\MT at tempbox\relax
-    \MT at rightmarginkern=\rightmarginkern\MT at tempbox\relax
+%    \def\@tempa{#1}%
+    \@tempdima=\@nameuse{#2marginkern}\MT at tempbox\relax
+    \expandafter\ifdim\@tempdima=\z@ \else
+      \leavevmode
+      \MT at vinfo{|<< adding #2 margin kern% for `\@tempa' % FIXME
+        :\MessageBreak
+        \the\@tempdima \on at line}%
+      \kern\@tempdima
+    \fi
   \fi
 }
 %    \end{macrocode}
 %\end{macro}
+%\end{macro}
+%\end{macro}
 %\begin{macro}{\MT at prot@ifx}
 % Test next token.
 %    \begin{macrocode}
@@ -8004,6 +8117,36 @@
 }
 %    \end{macrocode}
 %\end{macro}
+%\begin{macro}{\MT at prot@group}
+%\changes{v3.0a}{2021/11/20}{rescan grouped material to allow \texttt{verbatim} etc.
+%               (reported by \contributor Torsten Schuetze <torsten.schuetze\at gmx.net>)}
+%               ^^A private mail, 2021/11/18
+%               ^^A also on the non-public dante-ev mailing list: https://lists.dante.de/mailman/listinfo/dante-ev
+%\begin{macro}{\MT at prot@group@}
+%\begin{macro}{\MT at prot@group@@}
+% If we have a group, we need to rescan in order to allow, \eg,
+% |\verb|, |verbatim| or |lstlistings| material: before reading
+% the argument, make the backslash a letter to prevent spaces
+% from being inserted after commands, and have line breaks preserved.
+% The \nonetex\ version will fail in lots of cases.
+%    \begin{macrocode}
+\def\MT at prot@group{%
+  \begingroup
+    \catcode`\\=11
+    \obeylines
+    \MT at prot@group@}
+\def\MT at prot@group@{\afterassignment\MT at prot@group@@ \MT at toks}
+\def\MT at prot@group@@{%
+    \catcode`\\=0
+    \catcode`\^^M=10
+    {\expandafter\MT at prot@l\expandafter
+      {\expandafter\scantokens\expandafter{\the\MT at toks\noexpand}}}%
+  \endgroup}
+^^Q\def\MT at prot@group#1{\MT at prot@l{#1}}
+%    \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
 %\begin{macro}{\MT at prot@get at firstchar}
 %\begin{macro}{\MT at prot@get at nextchar}
 % Scan token by token.
@@ -8018,12 +8161,15 @@
 % we find a beginning char.
 %    \begin{macrocode}
 \def\MT at prot@get at first@char{%
-  \def\MT at temp*##1{\MT at prot@get at firstchar}%
   \MT at prot@ifcat\bgroup{%
-    \long\def\MT at temp*##1{{\MT at prot@l{##1}}}%
+    \def\MT at temp*{\MT at prot@group}%
   }{%
-    \MT at prot@ifx\ignorespaces\relax{%
-      \MT at prot@ifx\relax\relax{%
+    \MT at prot@ifx\ignorespaces{%
+      \def\MT at temp*##1{\MT at prot@get at firstchar}%
+    }{%
+      \MT at prot@ifx\relax{%
+        \def\MT at temp*##1{\MT at prot@get at firstchar}%
+      }{%
         \MT at prot@ifx\@sptoken{%
           \def\MT at temp* {\MT at prot@get at firstchar}%
         }{%
@@ -8030,9 +8176,12 @@
 %    \end{macrocode}
 % But only add it if it's a letter or a character, \dots
 %    \begin{macrocode}
-          \def\MT at temp*{\MT at prot@addtoken at first}%
-          \MT at prot@ifcat{a}\relax{%
-            \MT at prot@ifcat{!}\relax{%
+          \MT at prot@ifcat{a}{%
+            \def\MT at temp*{\MT at prot@addtoken at first}%
+          }{%
+            \MT at prot@ifcat{!}{%
+              \def\MT at temp*{\MT at prot@addtoken at first}%
+            }{%
 %    \end{macrocode}
 % \dots~or a command/active char whose first command is one of the below.
 %    \begin{macrocode}
@@ -10287,9 +10436,10 @@
 if luaotfload and luaotfload.aux and luaotfload.aux.slot_of_name then
   local slot_of_name = luaotfload.aux.slot_of_name
   microtype.name_to_slot = function(name, unsafe)
-    local n = math.tointeger(slot_of_name(font.current(), name, unsafe))
-    if n and n > 1114111 then n = -1 end
-    return n
+    local n = slot_of_name(font.current(), name, unsafe)
+    if not n then return -1 end
+    if n > 1114111 then return -1 end
+    return math.tointeger(n)
   end
 else
   -- we dig into internal structure (should be avoided)
@@ -12068,7 +12218,6 @@
     \MT at gdef@n{MT at babel@\@tempa}{#2}%
   }%
 }
-%</package>
 %    \end{macrocode}
 %\end{macro}
 %
@@ -12090,7 +12239,6 @@
 % A new macro called |\MT at pr@c@|\meta{name} will be defined to be \meta{\#3}
 % (\ie, the list of characters, not expanded).
 %    \begin{macrocode}
-%<*pdf-|lua-|xe->
 \def\SetProtrusion{%
   \MT at begin@catcodes
   \MT at SetProtrusion
@@ -12126,7 +12274,7 @@
   \MT at gdef@n{MT at pr@c@\MT at pr@c at name}{#3}%
   \MT at end@catcodes
 }
-%</pdf-|lua-|xe->
+%</package>
 %    \end{macrocode}
 %\end{macro}
 %\end{macro}
@@ -12534,7 +12682,6 @@
   \MT at warning{`\@tempa' is not a dimension.\MessageBreak
               Ignoring it and setting values relative to\MessageBreak #1}%
 }
-%</package>
 %    \end{macrocode}
 %\end{macro}
 %\changes{v1.8}{2005/04/14}{\cs{SetProtrusion}: new key: \texttt{unit}}
@@ -12545,7 +12692,6 @@
 %\todo{new key for unit: \texttt{dimen} (for \texttt{kerning}, especially)}
 % Protrusion codes may be relative to character width, or to any dimension.
 %    \begin{macrocode}
-%<*pdf-|lua-|xe->
 \define at key{MT at pr@c}{unit}[character]{%
   \MT at glet@nc{MT at pr@c@\MT at curr@set at name @unit}\@empty
   \def\@tempa{#1}%
@@ -12559,7 +12705,7 @@
       {\MT at warn@nodim{character widths}}%
   }%
 }
-%</pdf-|lua-|xe->
+%</package>
 %    \end{macrocode}
 % Tracking may only be relative to a dimension.
 %    \begin{macrocode}
@@ -12799,6 +12945,7 @@
     \fi
   \fi
 }
+%</pdf-|lua-|xe->
 %    \end{macrocode}
 %\end{macro}
 %\begin{macro}{\MT at inh@prefix}
@@ -12810,6 +12957,7 @@
 %                           (suggested by \contributor Daniel Benjamin Miller <dbmiller\at dbmiller.org>)}
 %                            ^^A private mail, 2020/12/24
 %    \begin{macrocode}
+%<*package>
 \def\MT at has@inh at prefix#1(#2)#3#4\@nil{%
   \let\MT at temp\relax
   \ifx\relax#3%
@@ -12834,7 +12982,6 @@
   \fi
   \MT at temp
 }
-%</pdf-|lua-|xe->
 %    \end{macrocode}
 %\end{macro}
 %\end{macro}
@@ -12873,7 +13020,6 @@
 %\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}
@@ -13518,28 +13664,12 @@
 }
 %    \end{macrocode}
 %
-%\subsubsection{Loading the definition file}
+%\subsubsection{Loading the definition file}\label{ssub:def-files}
 %
-%\begin{macro}{\MT at endinput}
-% Abort if no capable engine found.
+% Load the engine-specific code (as strewn across this file).
 %    \begin{macrocode}
-\let\MT at endinput\relax
+\input{microtype-\MT at engine tex.def}
 %    \end{macrocode}
-%\end{macro}
-%    \begin{macrocode}
-\ifx\MT at engine\relax
-  \MT at warning@nl{You don't seem to be using pdftex, luatex or xetex.\MessageBreak
-    `\MT at MT' only works with these engines.\MessageBreak
-    I will quit now}
-  \MT at clear@options
-\else
-%    \end{macrocode}
-% Otherwise load the engine-specific code (as strewn across this file).
-%    \begin{macrocode}
-  \input{microtype-\MT at engine tex.def}
-\fi
-\MT at endinput
-%    \end{macrocode}
 %
 % \subsubsection{Reading the configuration file}
 %
@@ -13867,11 +13997,12 @@
 }
 %    \end{macrocode}
 % Apply or revert patches.
+%\changes{v3.0a}{2021/11/29}{allow \cmd\microtypesetup\texttt{\{(no)patch\quotechar=all\}}}
 %    \begin{macrocode}
 \define at key{MTX}{patch}[all]{%
   \def\@tempa{#1}%
   \MT at ifstreq\@tempa{all}
-    \relax
+    {\let\@tempa\MT at patches@def}
     {\MT at ifstreq\@tempa{none}
       {\let\@tempa\@empty}
       \relax}%
@@ -13883,7 +14014,7 @@
 \define at key{MTX}{nopatch}[all]{%
   \def\@tempa{#1}%
   \MT at ifstreq\@tempa{all}
-    \relax
+    {\let\@tempa\MT at patches@def}
     {\MT at ifstreq\@tempa{none}
       {\let\@tempa\@empty}
       \relax}%
@@ -14836,6 +14967,11 @@
 \DeclareMicrotypeAlias{NewCM10-Book.otf}   {New Computer Modern}
 \DeclareMicrotypeAlias{NewCM10-Regular.otf}{New Computer Modern}
 %    \end{macrocode}
+%\changes{v3.0a}{2021/11/09}{declare <CMU> Serif as an alias of New Computer Modern}
+% <CMU> Serif can use the settings from New Computer Modern too.
+%    \begin{macrocode}
+\DeclareMicrotypeAlias{CMU Serif}          {New Computer Modern}
+%    \end{macrocode}
 % The packages \pkg{pxfonts} and \pkg{txfonts} fonts inherit Palatino and Times
 % settings respectively,
 %\changes{v1.8}{2005/04/19}{declare \texttt{pxr} and \texttt{txr}
@@ -19009,12 +19145,13 @@
 % , who also provided the sample in figure~\ref{fig:example-spacing}^^A
 %\changes{v2.2}{2007/04/05}{add sample}^^A
 %   \begin{figure}
-%     \caption{^^A
-%       Example of interword spacing (from: M.~Siemoneit, \emph{Typographisches Gestalten}, Frankfurt/M. 1989).
+%     \caption[Example of interword spacing]
+%             {Example of interword spacing
+%              (from: M.~Siemoneit, \emph{Typographisches Gestalten}, Frankfurt/M. 1989).
 %         ^^A Manfred Siemoneit, Typographisches Gestalten.
 %         ^^A   Regeln und Tips f\"ur die richtige Gestaltung von Drucksachen,
 %         ^^A   Frankfurt/M.: Polygraph Verlag, 1989
-%       The numbers indicate the preference for shrinking the interword space.}
+%       \\The numbers indicate the preference for shrinking the interword space.}
 %     \label{fig:example-spacing}
 %     \includegraphics[width=.66\textwidth]{justification.png}
 %   \end{figure}^^A
@@ -19456,7 +19593,7 @@
 %   Grave accent  \`     Left brace    \{     Vertical bar  \|
 %   Right brace   \}     Tilde         \~}
 %
-% \CheckSum{12274}
+% \CheckSum{12335}
 %
 % \Finale
 %
@@ -19521,5 +19658,4 @@
 % -----------------------------------------------------------------------------
 %
 % vim: ts=2:sw=2:et:
-
 %

Modified: trunk/Master/texmf-dist/tex/latex/microtype/letterspace.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/microtype/letterspace.sty	2021-12-03 22:10:42 UTC (rev 61212)
+++ trunk/Master/texmf-dist/tex/latex/microtype/letterspace.sty	2021-12-03 22:11:19 UTC (rev 61213)
@@ -34,7 +34,7 @@
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage
   {letterspace}
-  [2021/10/31 v3.0
+  [2021/12/02 v3.0a
    Robust letterspacing
    (RS)]
 \def\MT at MT
@@ -112,21 +112,25 @@
   \let\pdfoutput     \normalpdfoutput
 \fi
 \let\MT at engine\relax
-\def\MT at engine@tooold{0}
+\newif\ifMT at engine@unfit
+\MT at engine@unfittrue
 \ifx\pdftexversion\@undefined \else
   \ifx\pdftexversion\relax \else
     \def\MT at engine{pdf}
     \let\MT at pdf@or at lua\@firstoftwo
-    \ifnum\pdftexversion > 139 \def\MT at engine@tooold{1}\fi
+    \ifnum\pdftexversion
+        > 139
+      \MT at engine@unfitfalse
+    \fi
   \fi
 \fi
 \ifx\directlua\@undefined \else
   \ifx\directlua\relax \else
     \def\MT at engine{lua}
+    \MT at engine@unfitfalse
     \let\MT at pdf@or at lua\@secondoftwo
-    \ifnum\luatexversion < 62 \def\MT at engine@tooold{0}
+    \ifnum\luatexversion < 62 \MT at engine@unfittrue
     \else
-      \def\MT at engine@tooold{1}
       \let\MT at lua\directlua
       \ifnum\luatexversion > 84
         \let\pdfoutput\outputmode
@@ -136,21 +140,19 @@
     \fi
   \fi
 \fi
-\ifnum
-  \MT at engine@tooold=\z@
+\ifMT at engine@unfit
   \MT at warning@nl{You
     \ifx\MT at engine\relax
-      don't seem to be using pdftex or luatex.\MessageBreak
-      Try running `pdftex' or `luatex' instead of\MessageBreak
-        `\ifx\XeTeXversion\@undefined\else xe\fi tex'%
+      don't seem to be using pdftex%
+      \space or luatex%
+     .\MessageBreak `\MT at MT' only works with these engines.%
     \else
       are using a \MT at engine tex version older than
-        \MT at pdf@or at lua{1.40}{0.62}%
-      .\MessageBreak
-      `\MT at MT' does not work with this version.\MessageBreak
-      Please install a newer version of \MT at engine tex%
+      \MT at pdf@or at lua{1.40}{0.62}%
+     .\MessageBreak `\MT at MT' does not work with this version.%
+      \MessageBreak Please install a newer version of \MT at engine tex.%
     \fi
-      .\MessageBreak I will quit now}
+    \MessageBreak I will quit now}
   \MT at clear@options
 \endinput\fi
 \RequirePackage{keyval}[1997/11/10]

Modified: trunk/Master/texmf-dist/tex/latex/microtype/microtype-luatex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/microtype/microtype-luatex.def	2021-12-03 22:10:42 UTC (rev 61212)
+++ trunk/Master/texmf-dist/tex/latex/microtype/microtype-luatex.def	2021-12-03 22:11:19 UTC (rev 61213)
@@ -31,7 +31,7 @@
 %%
 \ProvidesFile
   {microtype-luatex.def}
-  [2021/10/31 v3.0
+  [2021/12/02 v3.0a
    Definitions specific to
    luatex
    (RS)]
@@ -802,19 +802,6 @@
   \gdef\MT at nl@setname{no ligatures}%
   \MT at end@catcodes
 }
-\def\SetProtrusion{%
-  \MT at begin@catcodes
-  \MT at SetProtrusion
-}
-\newcommand*\MT at SetProtrusion[3][]{%
-  \let\MT at extra@context\@empty
-  \MT at set@named at keys{MT at pr@c}{#1}%
-  \def\MT at permutelist{pr at c}%
-  \setkeys{MT at cfg}{#2}%
-  \MT at permute
-  \MT at gdef@n{MT at pr@c@\MT at pr@c at name}{#3}%
-  \MT at end@catcodes
-}
 \def\SetExpansion{%
   \MT at begin@catcodes
   \MT at SetExpansion
@@ -887,15 +874,6 @@
       \fi
     }%
   }
-\define at key{MT at pr@c}{unit}[character]{%
-  \MT at glet@nc{MT at pr@c@\MT at curr@set at name @unit}\@empty
-  \def\@tempa{#1}%
-  \MT at ifstreq\@tempa{character}\relax{%
-    \MT at ifdimen\@tempa
-      {\MT at glet@nc{MT at pr@c@\MT at curr@set at name @unit}\@tempa}%
-      {\MT at warn@nodim{character widths}}%
-  }%
-}
 \define at key{MT at tr@c}{unit}[1em]{%
   \MT at glet@nc{MT at tr@c@\MT at curr@set at name @unit}\@empty
   \def\@tempa{#1}%
@@ -961,30 +939,6 @@
     \fi
   \fi
 }
-\def\MT at has@inh at prefix#1(#2)#3#4\@nil{%
-  \let\MT at temp\relax
-  \ifx\relax#3%
-    \def\@tempa{#1#2}%
-    \let\MT at inh@prefix\@empty
-  \else
-    \MT at ifstreq{\MT at feat}{pr}{%
-      \MT at ifstreq{#2}{l}{\def\MT at inh@prefix@{{1000}{0}}\@firstoftwo}{%
-        \MT at ifstreq{#2}{r}{\def\MT at inh@prefix@{{0}{1000}}\@firstoftwo}{%
-          \MT at ifstreq{#2}{lr}{\def\MT at inh@prefix@{{500}{500}}\@firstoftwo}{%
-            \MT at warning@nl{`#2' is not a valid prefix in inheritance list%
-              \MessageBreak\MT at listname. Ignoring it}%
-            \@secondoftwo}}}%
-      {\def\@tempa{#3}%
-       \def\MT at inh@prefix{#2}%
-       \@gobble}%
-      {\@firstofone}%
-    }{\@firstofone}%
-   {\let\MT at char\m at ne
-    \let\MT at temp\@gobble
-   }%
-  \fi
-  \MT at temp
-}
 \MT at requires@luatex4{\let\pdfoutput\outputmode}\relax
 \MT at def@bool at opt{DVIoutput}{%
   \csname if\@tempa\endcsname

Modified: trunk/Master/texmf-dist/tex/latex/microtype/microtype-pdftex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/microtype/microtype-pdftex.def	2021-12-03 22:10:42 UTC (rev 61212)
+++ trunk/Master/texmf-dist/tex/latex/microtype/microtype-pdftex.def	2021-12-03 22:11:19 UTC (rev 61213)
@@ -31,7 +31,7 @@
 %%
 \ProvidesFile
   {microtype-pdftex.def}
-  [2021/10/31 v3.0
+  [2021/12/02 v3.0a
    Definitions specific to
    pdftex
    (RS)]
@@ -53,30 +53,12 @@
         \ifnum\pdftexversion = 14
           \ifnum \expandafter`\pdftexrevision < `h
             \def\MT at pdftex@no{2}
-            \ifnum \expandafter`\pdftexrevision < `f
-              \def\MT at pdftex@no{1}
-            \fi
           \fi
-        \else
-          \ifnum\pdftexversion < 14
-            \def\MT at pdftex@no{1}
-          \fi
         \fi
       \fi
     \fi
   \fi
 \fi
-\ifnum
-  \csname MT@\MT at engine tex at no\endcsname < 2
-  \MT at warning@nl{You
-      are using a \MT at engine tex version older than
-      0.14f%
-      .\MessageBreak
-      `\MT at MT' does not work with this version.\MessageBreak
-      Please install a newer version of \MT at engine tex%
-      .\MessageBreak I will quit now}
-  \MT at clear@options
-\endinput\fi
 \def
   \MT at requires@pdftex%
   #1{\ifnum
@@ -1022,19 +1004,6 @@
     pdftex.}%
 }
 }
-\def\SetProtrusion{%
-  \MT at begin@catcodes
-  \MT at SetProtrusion
-}
-\newcommand*\MT at SetProtrusion[3][]{%
-  \let\MT at extra@context\@empty
-  \MT at set@named at keys{MT at pr@c}{#1}%
-  \def\MT at permutelist{pr at c}%
-  \setkeys{MT at cfg}{#2}%
-  \MT at permute
-  \MT at gdef@n{MT at pr@c@\MT at pr@c at name}{#3}%
-  \MT at end@catcodes
-}
 \def\SetExpansion{%
   \MT at begin@catcodes
   \MT at SetExpansion
@@ -1147,15 +1116,6 @@
       {Upgrade pdftex.}%
   }
 }
-\define at key{MT at pr@c}{unit}[character]{%
-  \MT at glet@nc{MT at pr@c@\MT at curr@set at name @unit}\@empty
-  \def\@tempa{#1}%
-  \MT at ifstreq\@tempa{character}\relax{%
-    \MT at ifdimen\@tempa
-      {\MT at glet@nc{MT at pr@c@\MT at curr@set at name @unit}\@tempa}%
-      {\MT at warn@nodim{character widths}}%
-  }%
-}
 \define at key{MT at tr@c}{unit}[1em]{%
   \MT at glet@nc{MT at tr@c@\MT at curr@set at name @unit}\@empty
   \def\@tempa{#1}%
@@ -1235,30 +1195,6 @@
     \fi
   \fi
 }
-\def\MT at has@inh at prefix#1(#2)#3#4\@nil{%
-  \let\MT at temp\relax
-  \ifx\relax#3%
-    \def\@tempa{#1#2}%
-    \let\MT at inh@prefix\@empty
-  \else
-    \MT at ifstreq{\MT at feat}{pr}{%
-      \MT at ifstreq{#2}{l}{\def\MT at inh@prefix@{{1000}{0}}\@firstoftwo}{%
-        \MT at ifstreq{#2}{r}{\def\MT at inh@prefix@{{0}{1000}}\@firstoftwo}{%
-          \MT at ifstreq{#2}{lr}{\def\MT at inh@prefix@{{500}{500}}\@firstoftwo}{%
-            \MT at warning@nl{`#2' is not a valid prefix in inheritance list%
-              \MessageBreak\MT at listname. Ignoring it}%
-            \@secondoftwo}}}%
-      {\def\@tempa{#3}%
-       \def\MT at inh@prefix{#2}%
-       \@gobble}%
-      {\@firstofone}%
-    }{\@firstofone}%
-   {\let\MT at char\m at ne
-    \let\MT at temp\@gobble
-   }%
-  \fi
-  \MT at temp
-}
 \MT at def@bool at opt{DVIoutput}{%
   \csname if\@tempa\endcsname
     \ifnum\pdfoutput>\z@ \MT at opt@DVItrue \fi

Modified: trunk/Master/texmf-dist/tex/latex/microtype/microtype-show.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/microtype/microtype-show.sty	2021-12-03 22:10:42 UTC (rev 61212)
+++ trunk/Master/texmf-dist/tex/latex/microtype/microtype-show.sty	2021-12-03 22:11:19 UTC (rev 61213)
@@ -34,7 +34,7 @@
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage
   {microtype-show}
-  [2021/10/31 v3.0
+  [2021/12/02 v3.0a
   Visual debugging for the microtype package
    (RS)]
 \RequirePackage{iftex}

Modified: trunk/Master/texmf-dist/tex/latex/microtype/microtype-xetex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/microtype/microtype-xetex.def	2021-12-03 22:10:42 UTC (rev 61212)
+++ trunk/Master/texmf-dist/tex/latex/microtype/microtype-xetex.def	2021-12-03 22:11:19 UTC (rev 61213)
@@ -31,26 +31,10 @@
 %%
 \ProvidesFile
   {microtype-xetex.def}
-  [2021/10/31 v3.0
+  [2021/12/02 v3.0a
    Definitions specific to
    xetex
    (RS)]
-\ifdim 0\XeTeXrevision pt < 0.9997pt
-  \def\MT at xetex@no{1}
-\else
-  \def\MT at xetex@no{2}
-\fi
-\ifnum
-  \csname MT@\MT at engine tex at no\endcsname < 2
-  \MT at warning@nl{You
-      are using a \MT at engine tex version older than
-      0.9997%
-      .\MessageBreak
-      `\MT at MT' does not work with this version.\MessageBreak
-      Please install a newer version of \MT at engine tex%
-      .\MessageBreak I will quit now}
-  \MT at clear@options
-\endinput\fi
 \def\MT at ifint#1{%
   \if!\ifnum9<1#1!\else?\fi
     \expandafter\@firstoftwo
@@ -308,19 +292,6 @@
     Use
     pdftex.}%
 }
-\def\SetProtrusion{%
-  \MT at begin@catcodes
-  \MT at SetProtrusion
-}
-\newcommand*\MT at SetProtrusion[3][]{%
-  \let\MT at extra@context\@empty
-  \MT at set@named at keys{MT at pr@c}{#1}%
-  \def\MT at permutelist{pr at c}%
-  \setkeys{MT at cfg}{#2}%
-  \MT at permute
-  \MT at gdef@n{MT at pr@c@\MT at pr@c at name}{#3}%
-  \MT at end@catcodes
-}
   \define at key{MT at pr@c}{context}[]{%
     \MT at error{Protrusion contexts only work with pdftex
         \MessageBreak or luatex.
@@ -327,15 +298,6 @@
         Ignoring `context' key\on at line}%
       {Use pdftex or luatex.}%
   }
-\define at key{MT at pr@c}{unit}[character]{%
-  \MT at glet@nc{MT at pr@c@\MT at curr@set at name @unit}\@empty
-  \def\@tempa{#1}%
-  \MT at ifstreq\@tempa{character}\relax{%
-    \MT at ifdimen\@tempa
-      {\MT at glet@nc{MT at pr@c@\MT at curr@set at name @unit}\@tempa}%
-      {\MT at warn@nodim{character widths}}%
-  }%
-}
 \def\MT at inh@split#1=#2=#3\relax{%
   \def\@tempa{#1}%
   \ifx\@tempa\@empty \else
@@ -360,30 +322,6 @@
     \fi
   \fi
 }
-\def\MT at has@inh at prefix#1(#2)#3#4\@nil{%
-  \let\MT at temp\relax
-  \ifx\relax#3%
-    \def\@tempa{#1#2}%
-    \let\MT at inh@prefix\@empty
-  \else
-    \MT at ifstreq{\MT at feat}{pr}{%
-      \MT at ifstreq{#2}{l}{\def\MT at inh@prefix@{{1000}{0}}\@firstoftwo}{%
-        \MT at ifstreq{#2}{r}{\def\MT at inh@prefix@{{0}{1000}}\@firstoftwo}{%
-          \MT at ifstreq{#2}{lr}{\def\MT at inh@prefix@{{500}{500}}\@firstoftwo}{%
-            \MT at warning@nl{`#2' is not a valid prefix in inheritance list%
-              \MessageBreak\MT at listname. Ignoring it}%
-            \@secondoftwo}}}%
-      {\def\@tempa{#3}%
-       \def\MT at inh@prefix{#2}%
-       \@gobble}%
-      {\@firstofone}%
-    }{\@firstofone}%
-   {\let\MT at char\m at ne
-    \let\MT at temp\@gobble
-   }%
-  \fi
-  \MT at temp
-}
 \MT at def@bool at opt{DVIoutput}{%
   \csname if\@tempa\endcsname
     \MT at warning@nl{Ignoring `DVIoutput' option}%

Modified: trunk/Master/texmf-dist/tex/latex/microtype/microtype.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/latex/microtype/microtype.cfg	2021-12-03 22:10:42 UTC (rev 61212)
+++ trunk/Master/texmf-dist/tex/latex/microtype/microtype.cfg	2021-12-03 22:11:19 UTC (rev 61213)
@@ -41,7 +41,7 @@
 %%
 \ProvidesFile
   {microtype.cfg}
-  [2021/10/31 v3.0
+  [2021/12/02 v3.0a
    microtype main configuration file
    (RS)]
 
@@ -135,6 +135,7 @@
 \DeclareMicrotypeAlias{mlmm} {cmm}         %   "
 \DeclareMicrotypeAlias{NewCM10-Book.otf}   {New Computer Modern}
 \DeclareMicrotypeAlias{NewCM10-Regular.otf}{New Computer Modern}
+\DeclareMicrotypeAlias{CMU Serif}          {New Computer Modern}
 %% -- Palatino
 \DeclareMicrotypeAlias{pxr} {ppl}          % pxfonts
 \DeclareMicrotypeAlias{qpl} {ppl}          % TeX Gyre Pagella (formerly: qfonts/QuasiPalatino)

Modified: trunk/Master/texmf-dist/tex/latex/microtype/microtype.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/microtype/microtype.lua	2021-12-03 22:10:42 UTC (rev 61212)
+++ trunk/Master/texmf-dist/tex/latex/microtype/microtype.lua	2021-12-03 22:11:19 UTC (rev 61213)
@@ -35,13 +35,14 @@
 local microtype  = microtype
 microtype.module = {
     name         = "microtype",
-    version      = "3.0",
-    date         = "2021/10/31",
+    version      = "3.0a",
+    date         = "2021/12/02",
     description  = "microtype module.",
     author       = "E. Roux, R. Schlicht and P. Gesang",
     copyright    = "E. Roux, R. Schlicht and P. Gesang",
     license      = "LPPL",
 }
+luatexbase.provides_module(microtype.module)
 
 function microtype.info(...)
   luatexbase.module_info("microtype",...)
@@ -61,6 +62,16 @@
   tex.sprint(catpackage, ...)
 end
 
+if not math.tointeger or not pcall(math.tointeger,0) then
+  math.mininteger=-0x4FFFFFFFFFFF
+  math.maxinteger=0x4FFFFFFFFFFF
+  local floor=math.floor
+  function math.tointeger(n)
+    local f=floor(n)
+    return f==n and f or nil
+  end
+end
+
 local function if_int(s)
   if find(s,"^-*[0-9]+ *$") then
     tex_write("@firstoftwo")
@@ -172,9 +183,10 @@
 if luaotfload and luaotfload.aux and luaotfload.aux.slot_of_name then
   local slot_of_name = luaotfload.aux.slot_of_name
   microtype.name_to_slot = function(name, unsafe)
-    local n = math.tointeger(slot_of_name(font.current(), name, unsafe))
-    if n and n > 1114111 then n = -1 end
-    return n
+    local n = slot_of_name(font.current(), name, unsafe)
+    if not n then return -1 end
+    if n > 1114111 then return -1 end
+    return math.tointeger(n)
   end
 else
   -- we dig into internal structure (should be avoided)

Modified: trunk/Master/texmf-dist/tex/latex/microtype/microtype.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/microtype/microtype.sty	2021-12-03 22:10:42 UTC (rev 61212)
+++ trunk/Master/texmf-dist/tex/latex/microtype/microtype.sty	2021-12-03 22:11:19 UTC (rev 61213)
@@ -30,7 +30,7 @@
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage
   {microtype}
-  [2021/10/31 v3.0
+  [2021/12/02 v3.0a
    Micro-typographical refinements
    (RS)]
 \def\MT at MT
@@ -78,6 +78,8 @@
 \newcommand*\microtypesetup[1]{}
 \newcommand*\microtypecontext[1]{}
 \newcommand*\textmicrotypecontext[2]{#2}
+\newcommand\leftprotrusion[1]{#1}
+\newcommand\rightprotrusion[1]{#1}
 \@ifpackageloaded{letterspace}{\let\MT at textls\relax}{%
 \newcommand*\lsstyle{}
 \newcommand\textls[2][]{}
@@ -124,7 +126,6 @@
 \def\MT at clear@options{%
   \AtEndOfPackage{\let\@unprocessedoptions\relax\MT at restore@catcodes}%
   \let\CurrentOption\@empty
-  \let\MT at endinput\endinput
 }
 \ifx\normalpdftexversion\@undefined \else
   \let\pdftexversion \normalpdftexversion
@@ -132,14 +133,27 @@
   \let\pdfoutput     \normalpdfoutput
 \fi
 \let\MT at engine\relax
+\newif\ifMT at engine@unfit
+\MT at engine@unfittrue
 \ifx\pdftexversion\@undefined \else
   \ifx\pdftexversion\relax \else
     \def\MT at engine{pdf}
+    \def\MT at engine@minversion{0.14f}
+    \ifnum\pdftexversion
+        > 13
+      \MT at engine@unfitfalse
+      \ifnum \pdftexversion=14
+        \ifnum \expandafter`\pdftexrevision < `f
+          \MT at engine@unfittrue
+        \fi
+      \fi
+    \fi
   \fi
 \fi
 \ifx\directlua\@undefined \else
   \ifx\directlua\relax \else
     \def\MT at engine{lua}
+    \MT at engine@unfitfalse
   \fi
 \fi
 \ifx\MT at engine\relax
@@ -146,9 +160,28 @@
   \ifx\XeTeXversion\@undefined \else
     \ifx\XeTeXversion\relax \else
       \def\MT at engine{xe}
+      \def\MT at engine@minversion{0.9997}
+      \ifdim 0\XeTeXrevision pt > 0.9996pt
+        \MT at engine@unfitfalse
+      \fi
     \fi
   \fi
 \fi
+\ifMT at engine@unfit
+  \MT at warning@nl{You
+    \ifx\MT at engine\relax
+      don't seem to be using pdftex%
+      , luatex or xetex%
+     .\MessageBreak `\MT at MT' only works with these engines.%
+    \else
+      are using a \MT at engine tex version older than
+       \MT at engine@minversion
+     .\MessageBreak `\MT at MT' does not work with this version.%
+      \MessageBreak Please install a newer version of \MT at engine tex.%
+    \fi
+    \MessageBreak I will quit now}
+  \MT at clear@options
+\endinput\fi
 \RequirePackage{keyval}[1997/11/10]
 ^^X\RequirePackage{etoolbox}
 \newtoks\MT at toks
@@ -425,7 +458,7 @@
   \MT at ifdefined@n at T{opt at babel.\@pkgextension}{%
     \@expandtwoargs\MT at in@clist{#1}
       {\csname opt at babel.\@pkgextension\endcsname,\@classoptionslist}%
-    \ifMT at inlist@\expandafter\@gobble\fi
+    \ifMT at inlist@\expandafter\@secondoftwo\else\expandafter\@firstofone\fi
   }\@gobble
 }
 \def\MT at restore@p at h{\chardef\%`\% \chardef\#`\# }
@@ -487,6 +520,7 @@
   \MT at with@package at T{csquotes}{%
     \@ifpackagelater{csquotes}{2005/05/11}{%
       \g at addto@macro\MT at setupfont@hook\@disablequotes
+      \g at addto@macro\MT at prot@hook\@disablequotes
     }{%
       \MT at warning@nl{%
         Should you receive warnings about unknown slot\MessageBreak
@@ -550,6 +584,7 @@
 \def\MT at patch@info#1{\MT at info{Applying patch `#1'}}
 \def\MT at patch@warn#1{\MT at warning{Unable to apply patch `#1'}}
 \def\MT at patch@undef#1{\MT at warning{Patch `#1' undefined. Cannot apply it}}
+\def\MT at patch@info at undo#1{\MT at info{Reverting patch `#1'}}
 \let\MT at patches@def\@gobble
 \def\MT at define@patch#1#2#3{%
   \g at addto@macro\MT at patches@def{,#1}%
@@ -556,6 +591,15 @@
   \MT at def@n{MT at patch@@#1}{#2}%
   \MT at def@n{MT at patch@undo@@#1}{#3}%
 }
+\let\MT at redefined@patches\@empty
+\def\MT at redefine@patch#1#2#3{%
+  \g at addto@macro\MT at redefined@patches{%
+    \MT at def@n{MT at patch@@#1}{#2}%
+    \MT at def@n{MT at patch@undo@@#1}{#3}%
+  }%
+}
+\@onlypreamble\MT at define@patch
+\@onlypreamble\MT at redefine@patch
 \def\MT at append@patch#1#2{%
   \MT at remember@patch{#1}%
   \apptocmd#1{#2}\relax\MT at patch@okfalse
@@ -579,10 +623,14 @@
        \MT at warning{Patch `#1' has already been applied,\MessageBreak
                    cannot reapply it}%
      \else
+       \let\MT at restore@catcodes\@empty
+       \MT at with@babel at and@T{spanish} {\MT at fix@catcode{62}{12}}% >
+       \MT at with@babel at and@T{galician}{\MT at fix@catcode{62}{12}}% >
        \def\MT at patch@name{#1}%
        \g at addto@macro\MT at patches@applied{,#1}%
        \@nameuse{MT at patch@@#1}%
        \@nameuse{MT at patch@\ifMT at patch@ok info\else warn\fi}{#1}%
+       \MT at restore@catcodes
      \fi}
     {\MT at patch@undef{#1}}%
 }
@@ -591,6 +639,7 @@
   \ifMT at inlist@
     \MT at rem@from at clist{#1}\MT at patches@applied
     \@nameuse{MT at patch@undo@@#1}%
+    \MT at patch@info at undo{#1}%
   \else
     \MT at warning{Patch `#1' hasn't been applied,\MessageBreak cannot revert it}%
   \fi
@@ -597,27 +646,20 @@
 }
 {\catcode`\#=12
 \MT at addto@setup{%
-  \@ifclassloaded{beamer}
-    {\MT at define@patch{item}
-      {\MT at append@patch\@item\leftprotrusion
-       \MT at patch@patch\@item{\everypar{}}{\everypar{\leftprotrusion}}%
-       \MT at append@patch\beamer@@callorigitem\leftprotrusion
+  \MT at define@patch{item}{%
+    \MT at append@patch\@item\leftprotrusion
+    \MT at patch@patch\@item{\everypar{}}{\everypar{\leftprotrusion}}%
+    \@ifclassloaded{beamer}
+      {\MT at append@patch\beamer@@callorigitem\leftprotrusion
        \MT at patch@patch\beamer at callorigitem{\ignorespaces}{\ignorespaces\leftprotrusion}}
-      {}}
-    {\@ifclassloaded{simplecv}
-      {\MT at define@patch{item}
-        {\MT at append@patch\@item\leftprotrusion
-         \MT at append@patch\@topic at item\leftprotrusion
-         \MT at patch@patch\@item{\everypar{}}{\everypar{\leftprotrusion}}}
+      {\@ifclassloaded{simplecv}
+        {\MT at append@patch\@topic at item\leftprotrusion}
         {}}%
-      {\MT at define@patch{item}
-        {\MT at append@patch\@item\leftprotrusion
-         \MT at patch@patch\@item{\everypar{}}{\everypar{\leftprotrusion}}}
-        {}}}%
-  \@ifclassloaded{memoir}
-    {\MT at define@patch{toc}
-      {\MT at append@patch\numberline\leftprotrusion
-       \MT at append@patch\booknumberline\leftprotrusion
+  }{}%
+  \MT at define@patch{toc}{%
+    \MT at append@patch\numberline\leftprotrusion
+    \@ifclassloaded{memoir}
+      {\MT at append@patch\booknumberline\leftprotrusion
        \MT at append@patch\partnumberline\leftprotrusion
        \MT at append@patch\chapternumberline\leftprotrusion
        \MT at append@patch\cftbookafterpnum\noprotrusion
@@ -630,32 +672,36 @@
        \MT at append@patch\cftsubparagraphafterpnum\noprotrusion
        \MT at append@patch\cftfigureafterpnum\noprotrusion
        \MT at append@patch\cfttableafterpnum\noprotrusion}
-      {}}
-      {\MT at define@patch{toc}
-        {\MT at append@patch\numberline\leftprotrusion}
-        {}}%
-  \@ifpackageloaded{amsmath}
-    {\MT at define@patch{eqnum}
+      {}%
+  }{}%
+  \MT at define@patch{eqnum}{%
+    \@ifclassloaded{IEEEtran}
+      {\MT at patch@patch\theequationdis{(}{\leftprotrusion{(}}%
+       \MT at patch@patch\theequationdis{)}{\rightprotrusion{)}}%
+       \MT at patch@patch\theIEEEsubequationdis{(}{\leftprotrusion{(}}%
+       \MT at patch@patch\theIEEEsubequationdis{)}{\rightprotrusion{)}}}%
+      {}%
+    \@ifpackageloaded{amsmath}
       {\MT at patch@patch\tagform@{(}{\leftprotrusion{(}}%
        \MT at patch@patch\tagform@{)}{\rightprotrusion{)}}%
-       \MT at patch@patch\eqref{\tagform@}{\@nameuse{MT at patch@saved@\string\tagform@}}}%
-      {}}
-    {\MT at define@patch{eqnum}
+       \MT at patch@patch\eqref{\tagform@}{\@nameuse{MT at patch@saved@\string\tagform@}}}
       {\MT at patch@patch\@eqnnum{(}{\leftprotrusion{(}}%
        \MT at patch@patch\@eqnnum{)}{\rightprotrusion{)}}}%
-      {}}%
-  \@ifclassloaded{memoir}
-    {\MT at define@patch{footnote}
+  }{}%
+  \MT at define@patch{footnote}{%
+    \@ifpackageloaded{hyperref}
+        {\ifHy at hyperfootnotes\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+        \@secondoftwo
       {\MT at patch@patch\@footnotetext{\ignorespaces}{\ignorespaces\leftprotrusion}%
-       \MT at patch@patch\@footnotetext{\foottextfont #1}{\foottextfont\leftprotrusion #1}}
-      {}}
-    {\@ifpackageloaded{scrbase}
-      {\MT at define@patch{footnote}
+       \MT at patch@patch\@footnotetext{\@empty\ignorespaces}{\@empty\ignorespaces\leftprotrusion}}
+      {\@ifpackageloaded{scrkbase}
         {\MT at patch@patch\scr at saved@footnotetext{\ignorespaces}{\ignorespaces\leftprotrusion}}
-        {}}
-      {\MT at define@patch{footnote}
-        {\MT at patch@patch\@footnotetext{\ignorespaces}{\ignorespaces\leftprotrusion}}
-        {}}}%
+        {\MT at patch@patch\@footnotetext{\ignorespaces}{\ignorespaces\leftprotrusion}%
+         \@ifclassloaded{memoir}
+           {\MT at patch@patch\@footnotetext{\foottextfont #1}{\foottextfont\leftprotrusion #1}}
+           {}}}%
+  }{}%
+  \MT at redefined@patches
 }}
 \expandafter\ifx\the\font\nullfont\normalfont\fi
 \def\MT at split@name#1/#2/#3/#4/#5/#6\@nil{%
@@ -957,54 +1003,57 @@
   \DeclareRobustCommand\noprotrusion{\leavevmode\kern-\p@\kern\p@}
 }
 \newbox\MT at tempbox
-\newdimen\MT at leftmarginkern
-\newdimen\MT at rightmarginkern
 \DeclareRobustCommand\leftprotrusion{%
   \MT at toks{}%
   \MT at prot@get at firstchar
 }
-\long\def\MT at prot@l#1{%
-  \MT at get@prot{#1}%
-  \ifdim\MT at leftmarginkern=\z@ \else
-    \leavevmode
-    \MT at vinfo{|<< adding left margin kern for `\@tempa':\MessageBreak
-                  \the\MT at leftmarginkern \on at line}%
-    \kern\MT at leftmarginkern
-  \fi
+\def\MT at prot@l#1{%
+  \MT at get@prot{#1}{left}%
   #1%
 }
 \DeclareRobustCommand\rightprotrusion{\MT at prot@r}
 \long\def\MT at prot@r#1{%
-  #1%
-  \MT at get@prot{#1}%
-  \ifdim\MT at rightmarginkern=\z@ \else
-    \MT at vinfo{>>| adding right margin kern for `\@tempa':\MessageBreak
-                  \the\MT at rightmarginkern \on at line}%
-    \kern\MT at rightmarginkern
-  \fi
+  {#1}%
+  \MT at get@prot{#1}{right}%
 }
-\long\def\MT at get@prot#1{%
-  \MT at leftmarginkern=\z@
-  \MT at rightmarginkern=\z@
+\let\MT at prot@hook\@empty
+\long\def\MT at get@prot#1#2{%
   \begingroup
+    \def\@elt##1{\global\value{##1}\the\value{##1}\relax}%
+    \edef\MT at ckpt{\cl@@ckpt}%
+    \let\@elt\relax
+    \@fileswfalse
     \setbox\MT at tempbox\vbox{%
       \everypar{}%
       \parfillskip=\z at skip
       \hbadness\@M
+      \clubpenalty\z@
+      \widowpenalty\z@
+      \interlinepenalty\z@
       \@newlistfalse
+      \MT at prot@hook
       \noindent #1}%
     \vbadness=\@M
     \splittopskip=\z@
+    \vfuzz=\maxdimen
     \setbox\MT at tempbox\vbox{%
-      \global\setbox\MT at tempbox=\vsplit\MT at tempbox to \normalbaselineskip
-      \unvbox\MT at tempbox
-      \global\setbox\MT at tempbox=\lastbox
+      \ifvbox\MT at tempbox
+        \global\setbox\MT at tempbox=\vsplit\MT at tempbox to \normalbaselineskip
+        \unvbox\MT at tempbox
+        \global\setbox\MT at tempbox=\lastbox
+      \fi
     }%
+    \MT at ckpt
   \endgroup
   \ifhbox\MT at tempbox
-    \def\@tempa{#1}%
-    \MT at leftmarginkern=\leftmarginkern\MT at tempbox\relax
-    \MT at rightmarginkern=\rightmarginkern\MT at tempbox\relax
+    \@tempdima=\@nameuse{#2marginkern}\MT at tempbox\relax
+    \expandafter\ifdim\@tempdima=\z@ \else
+      \leavevmode
+      \MT at vinfo{|<< adding #2 margin kern% for `\@tempa' % FIXME
+        :\MessageBreak
+        \the\@tempdima \on at line}%
+      \kern\@tempdima
+    \fi
   \fi
 }
 \def\MT at prot@ifx#1{%
@@ -1050,21 +1099,40 @@
     \@gobble
   }\@firstofone
 }
+\def\MT at prot@group{%
+  \begingroup
+    \catcode`\\=11
+    \obeylines
+    \MT at prot@group@}
+\def\MT at prot@group@{\afterassignment\MT at prot@group@@ \MT at toks}
+\def\MT at prot@group@@{%
+    \catcode`\\=0
+    \catcode`\^^M=10
+    {\expandafter\MT at prot@l\expandafter
+      {\expandafter\scantokens\expandafter{\the\MT at toks\noexpand}}}%
+  \endgroup}
+^^Q\def\MT at prot@group#1{\MT at prot@l{#1}}
 \def\MT at prot@get at firstchar{\futurelet\MT at prot@next\MT at prot@get at first@char}
 \def\MT at prot@get at nextchar{\futurelet\MT at prot@next\MT at prot@get at next@char}
 \def\MT at prot@get at first@char{%
-  \def\MT at temp*##1{\MT at prot@get at firstchar}%
   \MT at prot@ifcat\bgroup{%
-    \long\def\MT at temp*##1{{\MT at prot@l{##1}}}%
+    \def\MT at temp*{\MT at prot@group}%
   }{%
-    \MT at prot@ifx\ignorespaces\relax{%
-      \MT at prot@ifx\relax\relax{%
+    \MT at prot@ifx\ignorespaces{%
+      \def\MT at temp*##1{\MT at prot@get at firstchar}%
+    }{%
+      \MT at prot@ifx\relax{%
+        \def\MT at temp*##1{\MT at prot@get at firstchar}%
+      }{%
         \MT at prot@ifx\@sptoken{%
           \def\MT at temp* {\MT at prot@get at firstchar}%
         }{%
-          \def\MT at temp*{\MT at prot@addtoken at first}%
-          \MT at prot@ifcat{a}\relax{%
-            \MT at prot@ifcat{!}\relax{%
+          \MT at prot@ifcat{a}{%
+            \def\MT at temp*{\MT at prot@addtoken at first}%
+          }{%
+            \MT at prot@ifcat{!}{%
+              \def\MT at temp*{\MT at prot@addtoken at first}%
+            }{%
               \def\MT at temp*{}%
               \MT at prot@ifmacro{%
                 \MT at prot@iffirstcmd\UTFviii at two@octets{%
@@ -2082,6 +2150,19 @@
     \MT at gdef@n{MT at babel@\@tempa}{#2}%
   }%
 }
+\def\SetProtrusion{%
+  \MT at begin@catcodes
+  \MT at SetProtrusion
+}
+\newcommand*\MT at SetProtrusion[3][]{%
+  \let\MT at extra@context\@empty
+  \MT at set@named at keys{MT at pr@c}{#1}%
+  \def\MT at permutelist{pr at c}%
+  \setkeys{MT at cfg}{#2}%
+  \MT at permute
+  \MT at gdef@n{MT at pr@c@\MT at pr@c at name}{#3}%
+  \MT at end@catcodes
+}
 \def\MT at set@named at keys#1#2{%
   \def\x##1name=##2,##3\@nil{%
     \setkeys{#1}{name=##2}%
@@ -2187,6 +2268,15 @@
   \MT at warning{`\@tempa' is not a dimension.\MessageBreak
               Ignoring it and setting values relative to\MessageBreak #1}%
 }
+\define at key{MT at pr@c}{unit}[character]{%
+  \MT at glet@nc{MT at pr@c@\MT at curr@set at name @unit}\@empty
+  \def\@tempa{#1}%
+  \MT at ifstreq\@tempa{character}\relax{%
+    \MT at ifdimen\@tempa
+      {\MT at glet@nc{MT at pr@c@\MT at curr@set at name @unit}\@tempa}%
+      {\MT at warn@nodim{character widths}}%
+  }%
+}
 \renewcommand*\DeclareCharacterInheritance[1][]{%
   \let\MT at extra@context\@empty
   \let\MT at extra@inputenc\@undefined
@@ -2237,6 +2327,30 @@
     \expandafter\MT at inh@do
   \fi
 }
+\def\MT at has@inh at prefix#1(#2)#3#4\@nil{%
+  \let\MT at temp\relax
+  \ifx\relax#3%
+    \def\@tempa{#1#2}%
+    \let\MT at inh@prefix\@empty
+  \else
+    \MT at ifstreq{\MT at feat}{pr}{%
+      \MT at ifstreq{#2}{l}{\def\MT at inh@prefix@{{1000}{0}}\@firstoftwo}{%
+        \MT at ifstreq{#2}{r}{\def\MT at inh@prefix@{{0}{1000}}\@firstoftwo}{%
+          \MT at ifstreq{#2}{lr}{\def\MT at inh@prefix@{{500}{500}}\@firstoftwo}{%
+            \MT at warning@nl{`#2' is not a valid prefix in inheritance list%
+              \MessageBreak\MT at listname. Ignoring it}%
+            \@secondoftwo}}}%
+      {\def\@tempa{#3}%
+       \def\MT at inh@prefix{#2}%
+       \@gobble}%
+      {\@firstofone}%
+    }{\@firstofone}%
+   {\let\MT at char\m at ne
+    \let\MT at temp\@gobble
+   }%
+  \fi
+  \MT at temp
+}
 \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}
@@ -2574,16 +2688,7 @@
 ^^Q    \MT at warning@nl{Patches require the etex extensions. Ignoring them}%
   \fi
 }
-\let\MT at endinput\relax
-\ifx\MT at engine\relax
-  \MT at warning@nl{You don't seem to be using pdftex, luatex or xetex.\MessageBreak
-    `\MT at MT' only works with these engines.\MessageBreak
-    I will quit now}
-  \MT at clear@options
-\else
-  \input{microtype-\MT at engine tex.def}
-\fi
-\MT at endinput
+\input{microtype-\MT at engine tex.def}
 \MT at protrusiontrue
 \define at key{MT}{config}[]{\relax}
 \def\MT at get@config#1config=#2,#3\@nil{%
@@ -2639,7 +2744,7 @@
 \define at key{MTX}{patch}[all]{%
   \def\@tempa{#1}%
   \MT at ifstreq\@tempa{all}
-    \relax
+    {\let\@tempa\MT at patches@def}
     {\MT at ifstreq\@tempa{none}
       {\let\@tempa\@empty}
       \relax}%
@@ -2651,7 +2756,7 @@
 \define at key{MTX}{nopatch}[all]{%
   \def\@tempa{#1}%
   \MT at ifstreq\@tempa{all}
-    \relax
+    {\let\@tempa\MT at patches@def}
     {\MT at ifstreq\@tempa{none}
       {\let\@tempa\@empty}
       \relax}%

Modified: trunk/Master/texmf-dist/tex/latex/microtype/mt-CharisSIL.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/latex/microtype/mt-CharisSIL.cfg	2021-12-03 22:10:42 UTC (rev 61212)
+++ trunk/Master/texmf-dist/tex/latex/microtype/mt-CharisSIL.cfg	2021-12-03 22:11:19 UTC (rev 61213)
@@ -46,7 +46,7 @@
 
 %% for xetex (EU1) and luatex (EU2), resp. both (TU)
 \DeclareCharacterInheritance
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = Charis SIL }
    { A = {À,Á,Â,Ã,Ä,Å,Ā,Ă,Ą,Ǎ,Ǟ,Ǡ,Ȧ,Ǻ,Ȁ,Ȃ,Ḁ,Ạ,Ả,Ấ,Ầ,Ẩ,Ẫ,Ậ,Ắ,Ằ,Ẳ,Ẵ,Ặ,Ꜳ,
           А,Ӑ,Ӓ}, % Cyrillic
@@ -173,7 +173,7 @@
 
 \SetProtrusion
    [ name     = Charis-default ]
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = Charis SIL }
    {
      A = {50,50},
@@ -346,7 +346,7 @@
 
 \SetProtrusion
    [ name     = Charis-it   ]
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = Charis SIL,
      shape    = {it,sl}  }
    {
@@ -481,7 +481,7 @@
    [ name     = Charis-sc,
      load     = Charis-default,
      command  = {MT at get@CHARIS at SC} ]
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = Charis SIL,
      shape    = {sc}  }
    {

Modified: trunk/Master/texmf-dist/tex/latex/microtype/mt-LatinModernRoman.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/latex/microtype/mt-LatinModernRoman.cfg	2021-12-03 22:10:42 UTC (rev 61212)
+++ trunk/Master/texmf-dist/tex/latex/microtype/mt-LatinModernRoman.cfg	2021-12-03 22:11:19 UTC (rev 61213)
@@ -46,7 +46,7 @@
 
 %% for xetex (EU1) and luatex (EU2), resp. both (TU)
 \DeclareCharacterInheritance
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = Latin Modern Roman }
    {
      A = {À,Á,Â,Ã,Ä,Å,Ā,Ă,Ą,Ǻ,Ȁ,Ạ,Ả,Ấ,Ầ,Ẩ,Ẫ,Ậ,Ắ,Ằ,Ẳ,Ặ,
@@ -115,7 +115,7 @@
 
 \SetProtrusion
    [ name     = LMR-default ]
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = Latin Modern Roman }
    {
      A = {50,50},
@@ -212,7 +212,7 @@
 
 \SetProtrusion
    [ name     = LMR-it ]
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = Latin Modern Roman,
      shape    = {it,sl}       }
    {

Modified: trunk/Master/texmf-dist/tex/latex/microtype/mt-NewComputerModern.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/latex/microtype/mt-NewComputerModern.cfg	2021-12-03 22:10:42 UTC (rev 61212)
+++ trunk/Master/texmf-dist/tex/latex/microtype/mt-NewComputerModern.cfg	2021-12-03 22:11:19 UTC (rev 61213)
@@ -45,7 +45,7 @@
 %% ------------------------------------------------------------------------ 
 %%
 \ProvidesFile
-  {mt-NewComputerModern.cfg}[2021/08/08 v1.0 microtype config. file: New Computer Modern (AT)]
+  {mt-NewComputerModern.cfg}[2021/11/09 v1.1 microtype config. file: New Computer Modern (AT)]
 
 %%% -----------------------------------------------------------------------
 %%% INHERITANCE
@@ -52,7 +52,7 @@
 
 %% for xetex (EU1) and luatex (EU2), resp. both (TU)
 \DeclareCharacterInheritance
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = {New Computer Modern} }
    {
      A = {À,Á,Â,Ã,Ä,Å,Ā,Ă,Ą,Ǻ,Ȁ,Ạ,Ả,Ấ,Ầ,Ẩ,Ẫ,Ậ,Ắ,Ằ,Ẳ,Ặ,
@@ -137,8 +137,7 @@
 
 \SetProtrusion
    [ name     = NCM-default ]
-   { encoding = {EU1,EU2,TU},
-     family   = {New Computer Modern} }
+   { }
    {
      A = {50,50},
      Æ = {50,  },
@@ -151,14 +150,8 @@
      W = {50,50},
      X = {50,50},
      Y = {50,50},
-     /a.end = {,330},
-     /e.end = {,350},
      k = {  ,50},
-     /k.alt = { ,50},
      r = {  ,50},
-     /r.end = {,300},
-     /m.end = {,200},
-     /n.end = {,300},
      t = {  ,70},
      v = {50,50},
      w = {50,50},
@@ -223,11 +216,6 @@
      × = {150,250},
      ÷ = {150,250},
      € = {100,   },
-    /one.oldstyle   = {100,100},
-    /two.oldstyle   = { 50, 50},
-    /three.oldstyle = { 30, 80},
-    /four.oldstyle  = { 50, 50},
-    /seven.oldstyle = { 50, 80},
      Ά = {50,50},   % /Alphatonos
      Ὰ = {120,50},  %
      Ἀ = {120,50},  %
@@ -321,10 +309,40 @@
    }
 
 \SetProtrusion
+   [ name     = NCM-TU,
+     load     = NCM-default ]
+   { encoding = {TU,EU1,EU2},
+     family   = {New Computer Modern} }
+   {
+     /a.end = {,330},
+     /e.end = {,350},
+     /k.alt = { ,50},
+     /r.end = {,300},
+     /m.end = {,200},
+     /n.end = {,300},
+     /one.oldstyle   = {100,100},
+     /two.oldstyle   = { 50, 50},
+     /three.oldstyle = { 30, 80},
+     /four.oldstyle  = { 50, 50},
+     /seven.oldstyle = { 50, 80},
+   }
+
+\SetProtrusion
+   [ name     = CMU-TU,
+     load     = NCM-default ]
+   { encoding = {TU,EU1,EU2},
+     family   = {CMU Serif} }
+   {
+     /oneoldstyle   = {100,100},
+     /twooldstyle   = { 50, 50},
+     /threeoldstyle = { 30, 80},
+     /fouroldstyle  = { 50, 50},
+     /sevenoldstyle = { 50, 80},
+   }
+
+\SetProtrusion
    [ name     = NCM-it ]
-   { encoding = {EU1,EU2,TU},
-     family   = {New Computer Modern},
-     shape    = {it,sl}       }
+   { }
    {
      A = {125,100},
      Æ = {125,-55},
@@ -382,12 +400,6 @@
      x = {65,-40},
      y = {130,-20},
      z = {110,-80},
-     /a.end = {,330}, %Fix
-     /e.end = {,350}, %Fix
-     /k.alt = {  ,50}, %Fix
-     /r.end = {,300}, %Fix
-     /m.end = {,200}, %Fix
-     /n.end = {,300}, %Fix
      0 = {170,-85},
      1 = {230,110},
      2 = {130,-70},
@@ -447,14 +459,6 @@
      × = {200,200},
      ÷ = {200,200},
      € = {150,   },
-    /one.oldstyle   = {100,100},
-    /two.oldstyle   = {100, 80},
-    /three.oldstyle = { 80, 50},
-    /four.oldstyle  = { 80, 80},
-    /five.oldstyle  = { 50,   },
-    /six.oldstyle   = { 50,   },
-    /seven.oldstyle = { 80, 80},
-    /eight.oldstyle = { 50,   },
      Γ = {100,120}, % /Gamma
      Δ = {120,100}, % /Delta
      Θ = {120, 50}, % /Theta
@@ -555,6 +559,46 @@
      ψ = {80,},
    }
 
+\SetProtrusion
+   [ name     = NCM-it-TU,
+     load     = NCM-it ]
+   { encoding = {TU,EU1,EU2},
+     family   = {New Computer Modern},
+     shape    = {it,sl} }
+   {
+     /a.end = {,330}, %Fix
+     /e.end = {,350}, %Fix
+     /k.alt = {  ,50}, %Fix
+     /r.end = {,300}, %Fix
+     /m.end = {,200}, %Fix
+     /n.end = {,300}, %Fix
+     /one.oldstyle   = {100,100},
+     /two.oldstyle   = {100, 80},
+     /three.oldstyle = { 80, 50},
+     /four.oldstyle  = { 80, 80},
+     /five.oldstyle  = { 50,   },
+     /six.oldstyle   = { 50,   },
+     /seven.oldstyle = { 80, 80},
+     /eight.oldstyle = { 50,   },
+   }
+
+\SetProtrusion
+   [ name     = CMU-it-TU,
+     load     = NCM-it ]
+   { encoding = {TU,EU1,EU2},
+     family   = {CMU Serif},
+     shape    = {it,sl} }
+   {
+     /oneoldstyle   = {100,100},
+     /twooldstyle   = {100, 80},
+     /threeoldstyle = { 80, 50},
+     /fouroldstyle  = { 80, 80},
+     /fiveoldstyle  = { 50,   },
+     /sixoldstyle   = { 50,   },
+     /sevenoldstyle = { 80, 80},
+     /eightoldstyle = { 50,   },
+   }
+
 \endinput
 %%
 %% End of file `mt-NewComputerModern.cfg'.

Modified: trunk/Master/texmf-dist/tex/latex/microtype/mt-Palatino.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/latex/microtype/mt-Palatino.cfg	2021-12-03 22:10:42 UTC (rev 61212)
+++ trunk/Master/texmf-dist/tex/latex/microtype/mt-Palatino.cfg	2021-12-03 22:11:19 UTC (rev 61213)
@@ -55,7 +55,7 @@
 
 %% for xetex (EU1) and luatex (EU2), resp. both (TU)
 \DeclareCharacterInheritance
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family = {Palatino} }
    { A = {À,Á,Â,Ã,Ä,Ā,Ă,Ą,Ǎ,Ǟ,Ǡ,Ȧ,Ǻ,Ȁ,Ȃ,Ḁ,Ạ,Ả,Ấ,Ầ,Ẩ,Ẫ,Ậ,Ắ,Ằ,Ẳ,Ẵ,Ặ,Ꜳ},
      B = {Ḃ,Ḅ,Ḇ},
@@ -114,7 +114,7 @@
 
 \SetProtrusion
    [ name     = palatino-default ]
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = {Palatino} }
    {
      A = {50,50},
@@ -209,7 +209,7 @@
 
 \SetProtrusion
    [ name     = palatino-it   ]
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = {Palatino},
      shape    = {it,sl}  }
    {
@@ -302,7 +302,7 @@
 \SetProtrusion
    [ name     = palatino-sc,
      load     = palatino-default ]
-   { encoding = {EU1,EU2,TU},
+   { encoding = {TU,EU1,EU2},
      family   = {Palatino},
      shape    = sc }
    {



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