texlive[61842] trunk: lwarp (1feb22)

commits+karl at tug.org commits+karl at tug.org
Tue Feb 1 23:09:57 CET 2022


Revision: 61842
          http://tug.org/svn/texlive?view=revision&revision=61842
Author:   karl
Date:     2022-02-01 23:09:57 +0100 (Tue, 01 Feb 2022)
Log Message:
-----------
lwarp (1feb22)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/lwarp/lwarpmk.lua
    trunk/Master/texmf-dist/doc/latex/lwarp/README.txt
    trunk/Master/texmf-dist/doc/latex/lwarp/lwarp.pdf
    trunk/Master/texmf-dist/scripts/lwarp/lwarpmk.lua
    trunk/Master/texmf-dist/source/latex/lwarp/lwarp.dtx
    trunk/Master/texmf-dist/source/latex/lwarp/lwarp.ins
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-CJK.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-CJKutf8.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-SIunits.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-abstract.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-acro.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-acronym.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-algorithm2e.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-amsthm.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-array.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-authblk.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-backnaur.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-biblatex.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-booktabs.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cancel.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-caption.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-caption3.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cases.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-chemfig.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-chemformula.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-chemmacros.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cleveref.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cmbright.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-color.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-common-mathjax-newpxtxmath.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-common-mathjax-nonunicode.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cuted.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-endnotes.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fancybox.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-floatrow.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-flushend.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-footnote.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fourier.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-framed.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-graphics.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-hanging.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-keyfloat.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-kpfonts-otf.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-lipsum.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mathalpha.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mathptmx.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mhchem.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-microtype.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-minted.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-multirow.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-nccfoots.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-ntheorem.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-parnotes.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-pdftricks.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-physics.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-siunitx-v2.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-thm-listof.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-tikz.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-titling.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-todo.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-vwcol.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-wrapfig.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-xcolor.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-showlabels.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-wrapfig2.sty

Modified: trunk/Build/source/texk/texlive/linked_scripts/lwarp/lwarpmk.lua
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/lwarp/lwarpmk.lua	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Build/source/texk/texlive/linked_scripts/lwarp/lwarpmk.lua	2022-02-01 22:09:57 UTC (rev 61842)
@@ -1,8 +1,8 @@
 #!/usr/bin/env texlua
 
--- Copyright 2016-2021 Brian Dunn
+-- Copyright 2016-2022 Brian Dunn
 
-printversion = "v0.902"
+printversion = "v0.903"
 requiredconfversion = "2" -- also at *lwarpmk.conf
 
 function printhelp ()
@@ -383,8 +383,15 @@
 -- Convert to text:
 print ("lwarpmk: Converting " .. sourcename
     .."_html.pdf to " .. sourcename .. "_html.html")
-os.execute("pdftotext  -enc " .. pdftotextenc .. "  -nopgbrk  -layout "
+err = os.execute("pdftotext  -enc " .. pdftotextenc .. "  -nopgbrk  -layout "
     .. sourcename .. "_html.pdf " .. sourcename .. "_html.html")
+if ( err ~= 0 ) then
+    print ("lwarpmk: ===")
+    print ("lwarpmk: Ensure that the Poppler utilities are installed." )
+    print ("lwarpmk: See the Lwarp manual: `Installing additional utilities'." )
+    print ("lwarpmk: ===")
+    os.exit(1)
+end
 -- Split the result into individual HTML files:
 splitfile (homehtmlfilename .. ".html" , sourcename .. "_html.html")
 end

Modified: trunk/Master/texmf-dist/doc/latex/lwarp/README.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/lwarp/README.txt	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/doc/latex/lwarp/README.txt	2022-02-01 22:09:57 UTC (rev 61842)
@@ -1,5 +1,5 @@
 
-LaTeX lwarp package v0.902   README.txt
+LaTeX lwarp package v0.903   README.txt
 
 Files included are:
 
@@ -41,7 +41,7 @@
 version 2005/12/01 or later.
 
 
-Copyright 2016-2021 Brian Dunn
+Copyright 2016-2022 Brian Dunn
 
 Homepage: http://BDTechConcepts.com
 Email: bd at BDTechConcepts.com

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

Modified: trunk/Master/texmf-dist/scripts/lwarp/lwarpmk.lua
===================================================================
--- trunk/Master/texmf-dist/scripts/lwarp/lwarpmk.lua	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/scripts/lwarp/lwarpmk.lua	2022-02-01 22:09:57 UTC (rev 61842)
@@ -1,8 +1,8 @@
 #!/usr/bin/env texlua
 
--- Copyright 2016-2021 Brian Dunn
+-- Copyright 2016-2022 Brian Dunn
 
-printversion = "v0.902"
+printversion = "v0.903"
 requiredconfversion = "2" -- also at *lwarpmk.conf
 
 function printhelp ()
@@ -383,8 +383,15 @@
 -- Convert to text:
 print ("lwarpmk: Converting " .. sourcename
     .."_html.pdf to " .. sourcename .. "_html.html")
-os.execute("pdftotext  -enc " .. pdftotextenc .. "  -nopgbrk  -layout "
+err = os.execute("pdftotext  -enc " .. pdftotextenc .. "  -nopgbrk  -layout "
     .. sourcename .. "_html.pdf " .. sourcename .. "_html.html")
+if ( err ~= 0 ) then
+    print ("lwarpmk: ===")
+    print ("lwarpmk: Ensure that the Poppler utilities are installed." )
+    print ("lwarpmk: See the Lwarp manual: `Installing additional utilities'." )
+    print ("lwarpmk: ===")
+    os.exit(1)
+end
 -- Split the result into individual HTML files:
 splitfile (homehtmlfilename .. ".html" , sourcename .. "_html.html")
 end

Modified: trunk/Master/texmf-dist/source/latex/lwarp/lwarp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/lwarp/lwarp.dtx	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/source/latex/lwarp/lwarp.dtx	2022-02-01 22:09:57 UTC (rev 61842)
@@ -1,7 +1,7 @@
 %
 % \iffalse meta-comment
 %
-% Copyright 2016-2021 Brian Dunn
+% Copyright 2016-2022 Brian Dunn
 %
 % This work may be distributed and/or modified under the
 % conditions of the LaTeX Project Public License, either version 1.3
@@ -16,7 +16,7 @@
 % \iffalse
 %<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
 %<package>\ProvidesPackage{lwarp}
-%<package>    [2021/10/01 v0.902  Allows LaTeX to directly produce HTML5 output.]
+%<package>    [2022/02/01 v0.903  Allows LaTeX to directly produce HTML5 output.]
 %
 %<*driver>
 \documentclass{ltxdoc}
@@ -197,7 +197,7 @@
 
 
 % Indexing, logos, \Describexxxx, etc:
-\usepackage{dtxdescribe}[2021/09/02]
+\usepackage{dtxdescribe}[2021/12/18]
 
 
 \usepackage{splitidx}
@@ -267,7 +267,7 @@
 \newcommand*{\AV}{\acro{A}\Slash\acro{V}}
 
 \makeatletter
-\@ifpackageloaded{erewhon}{\renewcommand*{\HTMLfive}{\acro{HTML}\textosf{5}}}{}
+\IfPackageLoadedTF{erewhon}{\renewcommand*{\HTMLfive}{\acro{HTML}\textosf{5}}}{}
 \makeatother
 
 \newcommand{\credits}[1]{{\footnotesize(\textit{Emulates or patches code by} \textsc{#1}.)}}
@@ -1837,6 +1837,7 @@
 \margintag{options}
 \optn{origin}, \optn{rotate} and \optn{scale},
 plus new \optn{class} and \optn{alt} keys.
+(\optn{alt} has recently been incorportated into \pkg{graphicx} itself.)
 
 With \HTML\ output, \cs{includegraphics} accepts an optional
 \margintag{\HTML\ class}
@@ -2929,6 +2930,10 @@
 
 Document modifications required for \MathJax:
 \begin{itemize}
+\item Place \cs{sisetup} in the preamble before \texttt{\cs{begin}\{document\}}.
+    \watchout[\cs{sisetup}]
+    Changes made later may be ignored, especially with \MathJax.
+    The \MathJax\ emulation also ignores most macro options.
 \item Custom units may be added with \cs{CustomizeMathJax}.
     \margintag{custom units}
     See the \pkg{lwarp-siunitx} code for examples.
@@ -2942,6 +2947,8 @@
     \cs{cubic}\textred{\{}\cs{centi}\cs{meter}\textred{\}}
     \end{sourcedisplay}
     Single units do not require braces.
+\item For \cs{numlist}, the argument is printed as text as-is,
+    so use space between semicolons for improved readability.
 \end{itemize}
 
 Also see \nameref{sec:limitsmathjax}, \cref{sec:limitsmathjax}.
@@ -3083,7 +3090,15 @@
 \prog{lwarpmk} may then be used with the new configuration files.
 }
 
+\newcommand*{\newimagechecksums}{
+Due to changes in how automatically-generated
+\watchout[New images]
+\SVG\ image file names are computed,
+after \cmds{lwarpmk html} use \cmds{lwarpmk cleanlimages} a single time,
+and then \cmds{lwarpmk limages} to generate the new images.
+}
 
+
 \newcommand*{\describehashing}{%
 If starred, a hashed filename is used.\margintag{image filename hashing}
 \gindex{hash>SVG image filename}
@@ -3097,7 +3112,7 @@
 
 An example is when the expression is a complicated \TeX\ expression, which would not
 copy/paste well.  A simplified tag may be used, while the complicated expression is
-duplicated in the additional hashing argument.
+used in the additional hashing argument to ensure a unique image.
 
 Another example is when the expression is simple, but the image depends
 on options.  These options may be decoded into text form and
@@ -3137,6 +3152,11 @@
 
 \setcounter{IndexColumns}{2}
 
+
+% To color the text of the listing, but this makes it harder to read:
+% \apptocmd{\MacroFont}{\color{blue!40!black}}{}{}
+
+
 \DisableCrossrefs
 \CodelineIndex
 \RecordChanges
@@ -3152,7 +3172,7 @@
 %<*package>
 % \fi
 %
-% \CheckSum{54254}
+% \CheckSum{54471}
 %
 % \CharacterTable
 % {Upper-case     \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -3296,6 +3316,8 @@
 % \changes{v0.900}{2021/07/17}{\ 2021/07/17}
 % \changes{v0.901}{2021/08/27}{\ 2021/08/27}
 % \changes{v0.902}{2021/10/01}{\ 2021/10/01}
+% \changes{v0.903}{2021/12/23}{Now uses \cs{IfPackageLoadedTF}, etc.}
+% \changes{v0.903}{2022/02/01}{\ 2022/02/01}
 
 
 
@@ -3328,7 +3350,7 @@
 %
 % \fileversion{} \Dash \filedate
 %
-% {\small\textcopyright{} 2016--2021} Brian Dunn\\ \small \texttt{bd at BDTechConcepts.com}
+% {\small\textcopyright{} 2016--2022} Brian Dunn\\ \small \texttt{bd at BDTechConcepts.com}
 %
 % \end{center}
 %
@@ -3530,6 +3552,28 @@
 %
 % \begin{description}
 % \needspace{2\baselineskip}
+% \item[v0.903:] Various updates and improvements.
+%   \begin{itemize}
+%       \item Error if \prog{pdftotext} not available.
+%           \margintag{\prog{lwarpmk}}
+%           Ensures that \brand{poppler} programs are installed.
+%       \item \prog{ps2pdf}: Allow transparency due to recent changes in \prog{ps2pdf}.
+%           \margintag{core}
+%       \item \newimagechecksums
+%       \item Improved back refs.
+%       \item Fixed \env{verbatim*}.
+%       \item Various internal updates for recent \LaTeX\ release.
+%       \item \pkg{cuted}: Updated to v2.0.
+%           \margintag{packages}
+%       \item \pkg{flushend}: Updated to v4.0.
+%       \item \pkg{mathalpha}: Updated for v1.14+.
+%       \item \pkg{minted}: Updated to v2.6.
+%       \item \pkg{cases}: Updated to v3.2.
+%       \item \pkg{siunitx} with \MathJax: Improved \cs{per}, \cs{numlist}, \cs{SIlist},
+%           comma decimal points.
+%       \item Added \pkg{showlabels}, \pkg{wrapfig2}.
+%   \end{itemize}
+% \needspace{2\baselineskip}
 % \item[v0.902:] \pkg{beamerarticle}, footnotes, paragraph tags.
 %   \begin{itemize}
 %       \item Fixed footnotes inside descriptions, minipages, \pkg{amsthm}, \cs{nameref}.
@@ -5931,7 +5975,7 @@
 %   \epkg{nonfloat}, \mpkg{picinpar}, \ipkg{placeins}, \epkg{rotfloat}, \ipkg{stfloats},
 %   \mpkg{subcaption}, \mpkg{subfig}, \epkg{subfigure}, \spkg{subfloat},
 %   \epkg{swfigure},
-%   \epkg{topcapt}, \epkg{trivfloat}, \epkg{wrapfig}. \\
+%   \epkg{topcapt}, \epkg{trivfloat}, \epkg{wrapfig}, \epkg{wrapfig2}. \\
 %
 % \midrule
 %
@@ -6137,6 +6181,7 @@
 %
 % Debug: & \ipkg{chkfloat}, \ipkg{cmdtrack}, \ipkg{dprogress}, \mpkg{lipsum},
 %   \ipkg{lua-visual-debug}, \mpkg{mwe}, \ipkg{refcheck},
+%   \ipkg{showlabels}, \ipkg{showkeys},
 %   \ipkg{srcltx}, \ipkg{srctex}, \ipkg{vpe}, \ipkg{xbmks}. \\
 %
 % \midrule
@@ -6655,6 +6700,13 @@
 %
 % \changes{v0.27}{2017/04/02}{Docs: Installing utilities for \brand{MacOS}.}
 %
+% \trouble{poppler=\prog{poppler}>install}
+% \trouble{perl=\prog{perl}}
+% \trouble{pdfcrop=\prog{pdfcrop}}
+% \trouble{pdftotext=\prog{pdftotex}}
+% \trouble{pdfseparate=\prog{pdfseparate}}
+% \trouble{pdftocairo=\prog{pdftocairo}}
+%
 % \begin{description}
 % \item [To test for the existence of the additional utilities:] \
 %
@@ -7016,13 +7068,13 @@
 %
 %	\qquad Open the file |tutorial.html| in a web browser.
 %
-%	Note that math is still displayed as its \attribute{alt} tag, which is
-%   \margintag{math}
-%   the plain-text \LaTeX\ source,
-%	until the
-%	images of the math expressions have been generated.  Math may be
-%	displayed as \SVG\ images or by a \MathJax\ script, as seen in
-%	\cref{sec:tutorialsvgmath,sec:tutorialmathjax}.
+%	Note that math images have not yet been generated,
+%   \margintag{math images}
+% \changes{v0.903}{2022/01/24}{Docs: Math images.}
+%   so math is still displayed as its \attribute{alt} tag, which is
+%   set to the plain-text \LaTeX\ source for that expression.
+%   Math may be displayed as \SVG\ images (\cref{sec:tutorialsvgmath})
+%   or by a \MathJax\ script (\cref{sec:tutorialmathjax}).
 %
 % \item Force a recompile:
 %	\userentry{lwarpmk again}
@@ -8939,6 +8991,9 @@
 % Do not nest \env{warpsvg} inside itself. \watchout[nesting]
 % \env{warpsvg} may be used inside \env{warpHTML}.
 %
+% To define macros or environments which behave differently depending
+% \margintag{\cs{LWR at formatted}}
+% on print or \HTML\ output, see \cref{sec:definingprinthtml}.
 %
 %
 % \subsection{Commands to be placed into the \env{warpprint} environment}
@@ -11104,7 +11159,7 @@
 %       {
 %           latex tm \LWRopseq
 %           dvips -o tm-pics.ps tm.dvi \LWRopseq
-%           ps2pdf tm-pics.ps \LWRopseq
+%           ps2pdf -dALLOWPSTRANSPARENCY tm-pics.ps \LWRopseq
 %           pdflatex tm.tex
 %       } ,
 %   HTMLLatexCmd=
@@ -11111,7 +11166,7 @@
 %       {
 %           latex tm_html \LWRopseq
 %           dvips -o tm_html-pics.ps tm_html.dvi \LWRopseq
-%           ps2pdf tm_html-pics.ps \LWRopseq
+%           ps2pdf -dALLOWPSTRANSPARENCY tm_html-pics.ps \LWRopseq
 %           pdflatex tm_html.tex
 %       }
 % }
@@ -12841,13 +12896,25 @@
 %
 % \section{Early package requirements}
 %
-% \DescribePackage{etoolbox}
-% Provides \cs{ifbool} and other functions.
 %
-% \DescribePackage{xpatch}
-% Patches macros with optional arguments.
+% \DescribePackage{etoolbox} Provides \cs{ifbool} and other functions.
+%
 %    \begin{macrocode}
 \RequirePackage{etoolbox}[2011/01/03]% v2.6 for \BeforeBeginEnvironment, etc.
+%    \end{macrocode}
+%
+% Patch to fix copy of environment with a \cs{par}:
+%
+% \href{https://github.com/josephwright/etoolbox/issues/35}{https://github.com/josephwright/etoolbox/issues/35}
+% \changes{v0.903}{2021/12/21}{\pkg{etoolbox}: Patch for \cs{NewCommandCopy}.}
+%    \begin{macrocode}
+\long\def\etb at carsquare#1#2#3\@nil{#1#2}
+%    \end{macrocode}
+%
+%
+% \DescribePackage{xpatch} Patches macros with optional arguments.
+%
+%    \begin{macrocode}
 \RequirePackage{xpatch}
 %    \end{macrocode}
 
@@ -12902,7 +12969,7 @@
 %
 %    \begin{macrocode}
 \newcommand*{\LWR at loadafter}[1]{%
-\@ifpackageloaded{#1}
+\IfPackageLoadedTF{#1}
 {
     \PackageError{lwarp}
         {%
@@ -12931,7 +12998,7 @@
 %
 % \changes{v0.45}{2017/12/03}{Added.}
 %    \begin{macrocode}
-\@ifclassloaded{memoir}
+\IfClassLoadedTF{memoir}
 {\newcommand*{\LWR at notmemoirloadafter}[1]{}}
 {\LetLtxMacro\LWR at notmemoirloadafter\LWR at loadafter}
 %    \end{macrocode}
@@ -12946,17 +13013,17 @@
 %    \begin{macrocode}
 \LetLtxMacro\LWR at notltjloadafter\LWR at loadafter
 
-\@ifclassloaded{ltjarticle}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjbook}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjreport}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjsarticle}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjsbook}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjsreport}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjspf}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjskiyou}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjtarticle}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjtbook}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjtreport}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjarticle}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjbook}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjreport}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjsarticle}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjsbook}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjsreport}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjspf}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjskiyou}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjtarticle}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjtbook}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjtreport}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
 %    \end{macrocode}
 % \end{macro}
 
@@ -12968,7 +13035,7 @@
 %
 %    \begin{macrocode}
 \newcommand*{\LWR at loadbefore}[1]{%
-\@ifpackageloaded{#1}
+\IfPackageLoadedTF{#1}
 {\relax}
 {
     \PackageError{lwarp}
@@ -13065,7 +13132,7 @@
 %
 %    \begin{macrocode}
 \newcommand*{\LWR at earlyloadnever}[2]{%
-    \@ifpackageloaded{#1}{%
+    \IfPackageLoadedTF{#1}{%
         \LWR at loadnever{#1}{#2}%
     }{}%
 }
@@ -13083,7 +13150,7 @@
 %
 %    \begin{macrocode}
 \newcommand*{\LWR at earlyclassloadnever}[2]{%
-\@ifclassloaded{#1}{%
+\IfClassLoadedTF{#1}{%
 \PackageError{lwarp}
 {%
     Class #1 is not supported\MessageBreak
@@ -13164,7 +13231,7 @@
 \LWR at checkloadnever{libgreek}{libertinust1math, newtx}
 \LWR at checkloadnever{newthm}{ntheorem}
 \LWR at checkloadnever{pdfcprot}{microtype}
-\LWR at checkloadnever{picins}{floatflt, wrapfig}
+\LWR at checkloadnever{picins}{floatflt, wrapfig, wrapfig2}
 \LWR at checkloadnever{rplain}{fancyhdr}
 \LWR at checkloadnever{si}{siunitx}
 \LWR at checkloadnever{sistyle}{siunitx}
@@ -13187,7 +13254,12 @@
 \LWR at checkloadnever{arraycols}{}
 \LWR at checkloadnever{bidi}{}
 \LWR at checkloadnever{cals}{}
-\LWR at checkloadnever{cellspace}{}
+%    \end{macrocode}
+% \changes{v0.903}{2022/01/06}{Alternative for \pkg{cellspace}.}
+%    \begin{macrocode}
+\LWR at checkloadnever{cellspace}{tabls}
+%    \end{macrocode}
+%    \begin{macrocode}
 \LWR at checkloadnever{cgloss4e}{}
 \LWR at checkloadnever{collcell}{}
 \LWR at checkloadnever{colophon}{}
@@ -13285,7 +13357,7 @@
 %
 % The older \pkg{CJK} and \pkg{CJKutf8} only work with \pkg{xeCJK}:
 %    \begin{macrocode}
-\@ifpackageloaded{xeCJK}{}{
+\IfPackageLoadedTF{xeCJK}{}{
     \LWR at checkloadnever{CJK}{ctex, xeCJK}
     \LWR at checkloadnever{CJKutf8}{ctex, xeCJK}
 }
@@ -13764,6 +13836,7 @@
 \LWR at loadafter{shadow}
 \LWR at loadafter{shapepar}
 \LWR at notmemoirloadafter{showidx}
+\LWR at loadafter{showlabels}
 \LWR at loadafter{showkeys}
 \LWR at loadafter{showtags}
 \LWR at loadafter{shuffle}
@@ -13881,6 +13954,7 @@
 \LWR at loadafter{widows-and-orphans}
 \LWR at loadafter{witharrows}
 \LWR at loadafter{wrapfig}
+\LWR at loadafter{wrapfig2}
 \LWR at loadafter{xbmks}
 \LWR at loadafter{xcolor}
 \LWR at loadafter{xechangebar}
@@ -13966,8 +14040,8 @@
 \newcommand*{\LWR at pdfencoding}{%
     \RequirePackage[T1]{fontenc}
 
-    \@ifpackageloaded{inputenc}{}{
-        \@ifpackageloaded{inputenx}{}{
+    \IfPackageLoadedTF{inputenc}{}{
+        \IfPackageLoadedTF{inputenx}{}{
             \RequirePackage[utf8]{inputenc}
         }
     }
@@ -14093,7 +14167,7 @@
 %    \begin{macrocode}
 \ifxetexorluatex
     \AtBeginDocument{
-        \@ifpackageloaded{kpfonts}{
+        \IfPackageLoadedTF{kpfonts}{
             \PackageError{lwarp}
                 {%
                     When using XeLaTeX or LuaLaTeX,\MessageBreak
@@ -14173,7 +14247,7 @@
 % \end{macro}
 
 
-% \subsection{Patching}
+% \subsection{Patching macros}
 
 % \begin{macro}{\LWR at patcherror} \marg{packagename} \marg{macroname}
 %
@@ -14193,6 +14267,35 @@
 % \end{macro}
 %
 %
+% \subsection{Copying macros}
+%
+% \begin{macro}{\csNewCommandCopycs} \marg{dest csname} \marg{source csname}
+%
+% Given a cs-name for each, copies a macro to a new definition.
+%
+% \changes{v0.903}{2021/12/21}{Added.}
+%    \begin{macrocode}
+\providecommand*{\csNewCommandCopycs}[2]{%
+    \expandafter\NewCommandCopy\csname#1\expandafter\endcsname%
+        \csname#2\endcsname%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NewEnvironmentCopy} \marg{dest} \marg{source}
+%
+% Copies an environment to a new definition.
+%
+% \changes{v0.903}{2021/12/21}{Added.}
+%    \begin{macrocode}
+\providecommand*{\NewEnvironmentCopy}[2]{%
+    \csNewCommandCopycs{#1}{#2}%
+    \csNewCommandCopycs{end#1}{end#2}%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+%
 % \subsection{Chinese text isolation}
 %
 % \begin{macro}{\LWR at isolate} \marg{text}
@@ -14206,11 +14309,11 @@
 %    \begin{macrocode}
 \newcommand{\LWR at isolate}[1]{#1}%
 
-\@ifpackageloaded{ctexpatch}{
+\IfPackageLoadedTF{ctexpatch}{
     \renewcommand{\LWR at isolate}[1]{\null#1\null}%
 }{}
 
-\@ifpackageloaded{xeCJK}{
+\IfPackageLoadedTF{xeCJK}{
     \renewcommand{\LWR at isolate}[1]{\null#1\null}%
 }{}
 %    \end{macrocode}
@@ -15384,7 +15487,7 @@
 % \changes{v0.50}{2018/02/24}{Fix: Load \pkg{fontspec} if necessary.}
 %    \begin{macrocode}
 \ifxetexorluatex
-\@ifpackageloaded{fontspec}{}{
+\IfPackageLoadedTF{fontspec}{}{
     \usepackage[no-math]{fontspec}
 }
 %    \end{macrocode}
@@ -15459,7 +15562,7 @@
 % \LaTeX{} dash and quote ligatures, which may fail on older browers
 % but at least won't corrupt written words.
 %    \begin{macrocode}
-\RequirePackage {microtype}
+\RequirePackage{microtype}
 
 \microtypesetup{
     protrusion=false,
@@ -15560,7 +15663,7 @@
 % These will be replaced by \pkg{lwarp} \cs{AtBeginDocument}
 % with a very large page size to reduce \HTML\ tag overflow off the page.
 %    \begin{macrocode}
-\@ifpackageloaded{geometry}
+\IfPackageLoadedTF{geometry}
 {}{
     \RequirePackage[
         reset,
@@ -15763,18 +15866,8 @@
 % Used to emulate \cs{nameref}.
 %    \begin{macrocode}
 \RequirePackage{gettitlestring}
-%    \end{macrocode}
 
 
-% \DescribePackage{everyhook}
-%
-% \pkg{everyhook} is used to patch paragraph handling.
-%
-% \changes{v0.63}{2018/11/29}{\pkg{everyhook}: Fix for \pkg{bxjs*} classes.}
-%    \begin{macrocode}
-\@ifundefined{bxjs at everypar}{}{\let\everypar\bxjs at everypar}
-
-\RequirePackage{everyhook}
 \end{warpHTML}
 %    \end{macrocode}
 
@@ -15804,7 +15897,7 @@
 
     \LetLtxMacro\LWR at orig@filec at ntents\filec at ntents
 
-    \@ifpackagelater{filecontents}{2011/10/08}
+    \IfPackageAtLeastTF{filecontents}{2011/10/08}
     {
 %    \end{macrocode}
 % For a newer version of the \pkg{filecontents} package, simply
@@ -16288,7 +16381,7 @@
 % if a package has already been loaded, it is loaded again with its original options.
 % \changes{v0.79}{2019/12/31}{Fix: \pkg{catoptions}.}
 %    \begin{macrocode}
-    \@ifpackageloaded{#1}{%
+    \IfPackageLoadedTF{#1}{%
         \edef\LWR at tempone{\csuse{opt@#1.sty}}%
         \IfValueTF{#2}%
             {%
@@ -16624,12 +16717,18 @@
 
 % \section{Defining print and \HTML\ versions of macros and environments}
 % \label{sec:definingprinthtml}
-% \gindex{print>selecting print/HTML definitions}
-% \gindex{HTML>selecting print/HTML definitions}
+% \gindex{print>defining print \Slash HTML macros \Slash envs}
+% \gindex{HTML>defining print \Slash HTML macros \Slash envs}
+% \gindex{LWR at formatted=\cs{LWR at formatted} print \Slash HTML}
+% \gindex{defining print \Slash HTML macros \Slash envs}
 %
-% The following refers to defining objects inside \pkg{lwarp}, and is not
-% for the user's document.
+% \changes{v0.903}{2021/12/19}{Docs: Now using \cs{NewCommandCopy}, \pkg{xparse} OK.}
 %
+% The following refers to defining objects inside \pkg{lwarp},
+% and may also be of some use for package authors to adapt their
+% packages for \pkg{lwarp}.
+% The following is not for the user's document.
+%
 % Many macros and environments must be provided as both print and \HTML\ versions.
 %
 % While generating the print version of a document, the original macros
@@ -16648,97 +16747,51 @@
 %
 % \begin{description}
 %
-% \item[For a preexisting macro, not defined with \pkg{xparse}:] An \HTML\ version
+% \item[For a preexisting macro:] An \HTML\ version
 % is provided with a special name, inside a \env{warpHTML} environment,
 % then \cs{LWR at formatted} is used to redefine and patch various macros:
 % \needspace{5\baselineskip}
 % \begin{sourceverb}
 % \begin{warpHTML}
-% \newcommand{\LWR at HTML@name}{...}% may also use xparse
+% \newcommand{\LWR at HTML@name}{...}
 %
 % \LWR at formatted{name}
 % \end{warpHTML}
 % \end{sourceverb}
-% |\LWR at formatted{name}| copies the original print version,
+% |\LWR at formatted{name}| copies the original print version to a new
+% name \cs{LWR at print@<name>},
 % then redefines \cs{name} to use either the print or \HTML\ version depending
-% on which mode \pkg{lwarp} is using.  \pkg{xparse} may be used to
-% define the new \HTML\ version, even if the original did not use \pkg{xparse}.
-% \pkg{expl3} syntax may be used as well.
+% on which mode \pkg{lwarp} is using.
 
-% \item[For a preexisiting environment, not defined with \pkg{xparse}:] The process
+% \item[For a preexisiting environment:] The process
 % is similar.  Note the use of \cs{LWR at formattedenv} instead of \cs{LWR at formatted}.
 % \needspace{5\baselineskip}
 % \begin{sourceverb}
 % \begin{warpHTML}
-% \newenvironment{LWR at HTML@name}{...}% may also use xparse
+% \newenvironment{LWR at HTML@name}{...}{..}
 %
 % \LWR at formattedenv{name}
 % \end{warpHTML}
 % \end{sourceverb}
 
-% \item[If the original used \pkg{xparse}:] A copy must be made using a new name:
-% \needspace{7\baselineskip}
-% \begin{sourceverb}
-% \begin{warpHTML}
-% \NewDocumentCommand{\LWR at print@name}{..}{..}% copy the original
-%
-% \NewDocumentCommand{\LWR at HTML@name}{..}{..}% or use \newcommand
-%
-% \LWR at formatted{name}
-% \end{warpHTML}
-% \end{sourceverb}
-% Similar for an environment, using \cs{LWR at formattedenv}.
-% (\cs{LWR at formatted} and \cs{LWR at formattedenv} use \cs{LetLtxMacro} to
-% copy the original print definiton,
-% which may not work with macros and environments created by \pkg{xparse},
-% so the print version must be manually recreated in the \pkg{lwarp} source.)
-
-% \item[For a new macro or environment, not using \pkg{xparse} for the print version:] \
+% \item[For a new macro or environment:] The print version is defined inside
+% \env{warpall}, so that it can also be seen and modified by during \HTML\ outut.
 % \needspace{9\baselineskip}
 % \begin{sourceverb}
 % \begin{warpall}
-% \newcommand{\name}{...}% NOT xparse!
+% \newcommand{\name}{...}% The print version.
 % \end{warpall}
 %
 % \begin{warpHTML}
-% \newcommand{\LWR at HTML@name}{...}% may use xparse for HTML
+% \newcommand{\LWR at HTML@name}{...}
 %
 % \LWR at formatted{name}
 % \end{warpHTML}
 % \end{sourceverb}
-% Similar for an environment.
-% The plain \cs{name} or environment \env{name} is used for the printed
-% version, and is placed inside \env{warpall}.
-% \pkg{xparse} may be used for the \cs{LWR at HTML@<name>} version.
-% \pkg{expl3} syntax may be used for the print and \HTML\ versions.
+% Similar for an environment, using \cs{formattedenv}.
 %
-% \item [For a new macro or environment, using \pkg{xparse}:]
-%   It is possible to use \pkg{xparse} for an entirely new macro or environment
-%   by defining the \cs{LWR at print@<name>} version with \pkg{xparse}, along with
-%   \cs{name} defined without \pkg{xparse} to refer directly to the \cs{LWR at print}
-%   version:
-% \needspace{16\baselineskip}
-% \begin{sourceverb}
-% \begin{warpall}
-% \NewDocumentCommand{\LWR at print@name}{...} {...}%      -or-
-% \NewDocumentEnvironment{\LWR at print@name}{...} {...} {...}
-%
-% % Simply a call to \LWR at print@name:
-% \newcommand{\name}{\LWR at print@name}%        -or-
-% \newenvironment{name}{\LWR at print@name}{\endLWR at print@name}
-% \end{warpall}
-%
-% \begin{warpHTML}
-% \NewDocumentCommand{\LWR at HTML@name}{...} {...}%      -or-
-% \NewDocumentEnvironment{\LWR at HTML@name}{...} {...} {...}
-%
-% \LWR at formatted{name}%    -or-
-% \LWR at formattedenv{name}
-% \end{warpHTML}
-% \end{sourceverb}
-%
 % \end{description}
-%
+
 % In general, \cs{LWR at formatted} or \cs{LWR at formattedenv} are placed inside
 % a \env{warpHTML} environment, and while producing an \HTML\ document
 % they do the following:
@@ -16755,16 +16808,16 @@
 %       used, as well as any new definitions defined in \env{warpall} above.
 %   \item When \pkg{lwarp} is generating \HTML\ output, \cs{LWR at formatting} is
 %       set to ``|HTML|'', and \cs{name} is directed to \cs{LWR at HTML@<name>}.
+%       For an environment, \cs{endname} is directed to \cs{endLWR at HTML@<name>}.
 %   \item When \pkg{lwarp} is generating \HTML\ output
 %       but enters a \env{lateximage} environment,
 %       or for some other reason needs to draw images using the original print
 %       defintions, \cs{LWR at formatting} is changed to ``|print|'' and \cs{name} is
 %       then redirected to \cs{LWR at print@<name>}, which was the original \cs{name}.
+%   \item Since the new \cs{name} does not process any arguments,
+%       they are processed by \cs{LWR at print@name} or \cs{LWR at HTML@name}.
 % \end{itemize}
 %
-% Since arguments are not handled by the new \cs{name}, any star and other arguments
-% are processed by the print or \HTML\ version.
-%
 % Expandable versions are also provided as well.
 % These usually are necessary for anything which could appear inside a \env{tabular},
 % without which a ``|Misplaced \omit|'' error may occur.
@@ -16861,12 +16914,12 @@
 % where <format> is set by \cs{LWR at formatting}, and is |print| or |HTML|.
 %
 % \changes{v0.893}{2020/11/15}{Improved error handling.}
+% \changes{v0.903}{2021/12/19}{Now using \cs{NewCommandCopy}.}
 %    \begin{macrocode}
 \newcommand*{\LWR at formatted}[1]{%
     \LWR at formatted@checkname{#1}%
     \ifcsundef{LWR at print@#1}{%
-        \expandafter\LetLtxMacro\csname LWR at print@#1\expandafter\endcsname%
-            \csname#1\endcsname%
+        \csNewCommandCopycs{LWR at print@#1}{#1}%
     }{}%
     \ifcsundef{#1}{%
         \expandafter\newrobustcmd\csname #1\endcsname{%
@@ -16888,12 +16941,12 @@
 % An expandable version of \cs{LWR at formatted}.
 %
 % \changes{v0.893}{2020/11/15}{Improved error handling.}
+% \changes{v0.903}{2021/12/19}{Now using \cs{NewCommandCopy}.}
 %    \begin{macrocode}
 \newcommand*{\LWR at expandableformatted}[1]{%
     \LWR at formatted@checkname{#1}%
     \ifcsundef{LWR at print@#1}{%
-        \expandafter\LetLtxMacro\csname LWR at print@#1\expandafter\endcsname%
-            \csname#1\endcsname%
+        \csNewCommandCopycs{LWR at print@#1}{#1}%
     }{}%
     \ifcsundef{#1}{%
         \expandafter\newcommand\csname #1\endcsname{%
@@ -16917,14 +16970,13 @@
 % where <format> is set by \cs{LWR at formatting}, and is |print| or |HTML|.
 %
 % \changes{v0.893}{2020/11/15}{Improved error handling.}
+% \changes{v0.903}{2021/12/19}{Now using \cs{NewCommandCopy}.}
 %    \begin{macrocode}
 \newcommand*{\LWR at formattedenv}[1]{%
     \LWR at formatted@checkname{#1}%
     \LWR at formatted@checkendname{#1}%
     \ifcsundef{LWR at print@#1}{%
-        \expandafter\LetLtxMacro\csname LWR at print@#1\expandafter\endcsname%
-            \csname#1\endcsname%
-        \csletcs{endLWR at print@#1}{end#1}%
+        \NewEnvironmentCopy{LWR at print@#1}{#1}%
     }{}%
     \DeclareDocumentEnvironment{#1}{}%
     {%
@@ -16943,14 +16995,13 @@
 % An expandable version of \env{LWR at formattedenv}.
 %
 % \changes{v0.893}{2020/11/15}{Improved error handling.}
+% \changes{v0.903}{2021/12/19}{Now using \cs{NewCommandCopy}.}
 %    \begin{macrocode}
 \newcommand*{\LWR at expandableformattedenv}[1]{%
     \LWR at formatted@checkname{#1}%
     \LWR at formatted@checkendname{#1}%
     \ifcsundef{LWR at print@#1}{%
-        \expandafter\LetLtxMacro\csname LWR at print@#1\expandafter\endcsname%
-            \csname#1\endcsname%
-        \csletcs{endLWR at print@#1}{end#1}%
+        \NewEnvironmentCopy{LWR at print@#1}{#1}%
     }{}%
     \DeclareExpandableDocumentEnvironment{#1}{}%
     {%
@@ -17236,7 +17287,7 @@
 \LetLtxMacro\LWR at orig@textquotedbl\LWR at orig@@textquotedbl
 
 \AtEndPreamble{
-\@ifpackageloaded{libertinus-otf}{
+\IfPackageLoadedTF{libertinus-otf}{
     \renewcommand{\LWR at orig@textquotedbl}{\LWR at orig@@textquotedbl\kern-.15em}
     \LetLtxMacro\textquotedbl\LWR at orig@textquotedbl
 }{}
@@ -17764,16 +17815,17 @@
                 }{% dvips
 %    \end{macrocode}
 % For \DVI\ \prog{latex} with \prog{dvips} and \prog{ps2pdf}:
+% \changes{v0.903}{2021/10/04}{Allow transparency.}
 %    \begin{macrocode}
                     \def\LWR at tempprintlatexcmd{%
                         \LWR at compilecmd{latex}{}
                         \LWR at addcompilecmd{dvips}{}
-                        \LWR at addcompilecmd{ps2pdf}{}.ps
+                        \LWR at addcompilecmd{ps2pdf -dALLOWPSTRANSPARENCY}{}.ps
                     }
                     \def\LWR at tempHTMLlatexcmd{%
                         \LWR at compilecmd{latex}{_html}
                         \LWR at addcompilecmd{dvips}{_html}
-                        \LWR at addcompilecmd{ps2pdf}{_html}.ps
+                        \LWR at addcompilecmd{ps2pdf -dALLOWPSTRANSPARENCY}{_html}.ps
                     }
                 }
             }
@@ -17785,12 +17837,12 @@
 % \changes{v0.63}{2018/11/25}{\pkg{ujarticle} and related: Compile options.}
 % \changes{v0.64}{2018/12/07}{\pkg{utarticle} and related: Added.}
 %    \begin{macrocode}
-\@ifclassloaded{ujarticle}{\LWR at compileuplatex}{}
-\@ifclassloaded{ujbook}{\LWR at compileuplatex}{}
-\@ifclassloaded{ujreport}{\LWR at compileuplatex}{}
-\@ifclassloaded{utarticle}{\LWR at compileuplatex}{}
-\@ifclassloaded{utbook}{\LWR at compileuplatex}{}
-\@ifclassloaded{utreport}{\LWR at compileuplatex}{}
+\IfClassLoadedTF{ujarticle}{\LWR at compileuplatex}{}
+\IfClassLoadedTF{ujbook}{\LWR at compileuplatex}{}
+\IfClassLoadedTF{ujreport}{\LWR at compileuplatex}{}
+\IfClassLoadedTF{utarticle}{\LWR at compileuplatex}{}
+\IfClassLoadedTF{utbook}{\LWR at compileuplatex}{}
+\IfClassLoadedTF{utreport}{\LWR at compileuplatex}{}
 %    \end{macrocode}
 % Only make the setting permanent if the original was empty:
 % \changes{v0.61}{2018/09/20}{Added \optn{PrintLatexCmd} option.}
@@ -17969,6 +18021,7 @@
 % \changes{v0.902}{2021/09/15}{\filenm{lwarp.css}: Centered \element{div} \attribute{author}.}
 % \changes{v0.902}{2021/09/15}{\filenm{lwarp.css}: Added \pkg{beamerarticle}.}
 % \changes{v0.902}{2021/09/28}{\filenm{lwarp.css}: Added \attribute{textnormal}.}
+% \changes{v0.903}{2022/01/02}{\filenm{lwarp.css}: Improved pars in lists.}
 %
 % ^^A *lwarp.css
 %
@@ -17978,7 +18031,7 @@
 \begin{filecontents*}[overwrite]{lwarp.css}
 /*
   CSS stylesheet for the LaTeX Lwarp package
-  Copyright 2016-2021 Brian Dunn — BD Tech Concepts LLC
+  Copyright 2016-2022 Brian Dunn — BD Tech Concepts LLC
 */
 
 
@@ -18490,7 +18543,7 @@
 }
 
 section.textbody div.footnotes{
-    margin: 3ex 2em .5ex 2em ;
+    margin: 1ex 2em 2ex 2em ;
     border-bottom: 2px solid silver ;
 }
 
@@ -18527,6 +18580,8 @@
 
 li { margin: 0ex 0em 1ex 0em; }
 
+li.p { display: inline ; }
+
 html {
   margin: 0; 
   padding: 0;
@@ -20807,6 +20862,7 @@
 % \changes{v0.84}{2020/03/30}{\prog{lwarpmk}: \optn{clean} also removes \filenm{comment_*.cut}}
 % \changes{v0.89}{2020/08/29}{\prog{lwarpmk}: \optn{clean} also removes \filenm{*.bbl}}
 % \changes{v0.899}{2021/05/30}{\prog{lwarpmk}: Warn if \pkg{lwarp} package not detected.}
+% \changes{v0.903}{2021/11/30}{\prog{lwarpmk}: Error if \prog{pdftotext} not available.}
 %
 % The following is only generated if the \optn{lwarpmk} option
 %   was given to \pkg{lwarp}.
@@ -20819,10 +20875,10 @@
 \begin{filecontents*}[overwrite]{lwarpmk.lua}
 #!/usr/bin/env texlua
 
--- Copyright 2016-2021 Brian Dunn
+-- Copyright 2016-2022 Brian Dunn
 
 
-printversion = "v0.902"
+printversion = "v0.903"
 requiredconfversion = "2" -- also at *lwarpmk.conf
 
 function printhelp ()
@@ -21219,8 +21275,15 @@
 -- Convert to text:
 print ("lwarpmk: Converting " .. sourcename
     .."_html.pdf to " .. sourcename .. "_html.html")
-os.execute("pdftotext  -enc " .. pdftotextenc .. "  -nopgbrk  -layout "
+err = os.execute("pdftotext  -enc " .. pdftotextenc .. "  -nopgbrk  -layout "
     .. sourcename .. "_html.pdf " .. sourcename .. "_html.html")
+if ( err ~= 0 ) then
+    print ("lwarpmk: ===")
+    print ("lwarpmk: Ensure that the Poppler utilities are installed." )
+    print ("lwarpmk: See the Lwarp manual: `Installing additional utilities'." )
+    print ("lwarpmk: ===")
+    os.exit(1)
+end
 -- Split the result into individual HTML files:
 splitfile (homehtmlfilename .. ".html" , sourcename .. "_html.html")
 end
@@ -22079,15 +22142,40 @@
 % \begin{macro}{\LWR at setexparray} \marg{name} \marg{index} \marg{contents}
 % \changes{v0.66}{2018/12/31}{Fix with \cs{par}.}
 % \changes{v0.79}{2020/01/18}{Fix: Nested \env{tabular}s.}
+% \changes{v0.903}{2021/12/17}{Par handling.}
 %    \begin{macrocode}
+\newbool{LWR at setexparray@doingparhooks}
+
 \NewDocumentCommand{\LWR at setexparray}{m m m}{%
-    \let\LWR at temp@par\par%
+%    \end{macrocode}
+%
+% Temporarily disable paragraph handling during the assignment.
+% This is not done in a group with global assignments because
+% a table may be nested.
+%    \begin{macrocode}
+    \let\ifLWR at setexparray@doingparhooks\ifLWR at doingparhooks%
+    \setbool{LWR at doingparhooks}{false}%
+    \let\LWR at setexparray@par\par%
     \let\par\relax%
-    \edef\LWR at thisexparrayname{#1#2}%
+%    \end{macrocode}
+%
+% The name of the control sequence is the given name with the
+% index appended.
+%    \begin{macrocode}
+    \xdef\LWR at thisexparrayname{#1#2}%
+%    \end{macrocode}
+%
+% Locally assign the value to the control sequence:
+%    \begin{macrocode}
     \ifstrempty{#3}%
         {\csdef{\LWR at thisexparrayname}{}}%
         {\csedef{\LWR at thisexparrayname}{#3}}%
-    \let\par\LWR at temp@par%
+%    \end{macrocode}
+%
+% Restore the paragraph handling:
+%    \begin{macrocode}
+    \let\ifLWR at doingparhooks\ifLWR at setexparray@doingparhooks%
+    \let\par\LWR at setexparray@par%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -23012,6 +23100,7 @@
 
 % \subsection{Hook while processing tags}
 %
+% \DescribeHook[lwarp]{\cs{LWR at hook@processingtags}}
 % This is used to disable special text processing while processing \HTML\ tags.
 % Special processing includes that done by
 % \pkg{babel-french}, \pkg{luavina}, \pkg{xevlna}.
@@ -23197,60 +23286,60 @@
 % \changes{v0.84}{2020/04/22}{Nullified \env{minipage}, \cs{parbox} inside a span.}
 % \changes{v0.84}{2020/04/22}{Issue warnings inside a span.}
 % \changes{v0.896}{2021/03/05}{Issue \env{BlockClassWP} warning inside a span.}
+% \changes{v0.903}{2021/12/17}{Par handling.}
 %
 %    \begin{macrocode}
 \newcommand*{\LWR at nestspanitem}{%
-    \if at newlist\else{\LWR at htmltagc{br /}}\fi%
+    \if at newlist\else{
+        \LWR at htmltagc{br /}%
+        \LWR at orignewline%
+    }\fi%
     \LWR at origitem%
 }
 
 \newenvironment*{LWR at nestspan}
 {%
-\LWR at traceinfo{LWR at nestspan starting}%
-\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
-{%
-    \LWR at traceinfo{LWR at nestspan: inside a lateximage}%
-}%
-{% not in a lateximage
-    \LWR at traceinfo{LWR at nestspan: NOT inside a lateximage}%
-    \addtocounter{LWR at spandepth}{1}%
+    \LWR at traceinfo{LWR at nestspan starting}%
+    \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
+    {%
+        \LWR at traceinfo{LWR at nestspan: inside a lateximage}%
+    }%
+    {% not in a lateximage
+        \LWR at traceinfo{LWR at nestspan: NOT inside a lateximage}%
+        \addtocounter{LWR at spandepth}{1}%
 %    \end{macrocode}
 % Nullify several objects inside the span:
 % ^^A        {\LWR at subhtmlelementclass{span}{inlineminipage}}%
 % ^^A         {\LWR at htmltagc{/span}}%
 %    \begin{macrocode}
-    \RenewDocumentEnvironment{minipage}{O{t} o O{t} m}%
-        {\LWR at spanwarnformat{minipage or \protect\parbox}}%
-        {}%
-    \RenewDocumentEnvironment{BlockClass}{o m}%
-        {\LWR at spanwarnformat{multi-paragraph object}}%
-        {}%
-    \RenewDocumentEnvironment{LWR at BlockClassWP}{m m D(){} m}%
-        {\LWR at spanwarnformat{multi-paragraph object}}%
-        {}%
-    \renewcommand{\BlockClassSingle}[2]{%
-        {\LWR at spanwarnformat{multi-paragraph object}}%
-        ##2%
-    }%
-    \renewcommand{\LWR at forcenewpage}{}%
-    \renewcommand{\LWR at liststart}{%
-        \LetLtxMacro\item\LWR at nestspanitem%
-    }%
-    \renewcommand{\LWR at listend}{\LWR at htmltagc{br /}\LWR at htmltagc{br /}}%
-    \renewenvironment{quote}{\LWR at htmltagc{br /}}{\LWR at htmltagc{br /}}%
-    \renewenvironment{quotation}{\LWR at htmltagc{br /}}{\LWR at htmltagc{br /}}%
-}% not in a lateximage
-\LWR at traceinfo{LWR at nestspan starting: done}%
+        \RenewDocumentEnvironment{minipage}{O{t} o O{t} m}%
+            {\LWR at spanwarnformat{minipage or \protect\parbox}}%
+            {}%
+        \RenewDocumentEnvironment{BlockClass}{o m}%
+            {\LWR at spanwarnformat{multi-paragraph object}}%
+            {}%
+        \RenewDocumentEnvironment{LWR at BlockClassWP}{m m D(){} m}%
+            {\LWR at spanwarnformat{multi-paragraph object}}%
+            {}%
+        \renewcommand{\BlockClassSingle}[2]{%
+            {\LWR at spanwarnformat{multi-paragraph object}}%
+            ##2%
+        }%
+        \renewcommand{\LWR at forcenewpage}{}%
+        \renewcommand{\LWR at liststart}{\LetLtxMacro\item\LWR at nestspanitem}%
+        \renewcommand{\LWR at listend}{\leavevmode}%
+        \renewenvironment{quote}{\LWR at htmltagc{br /}}{\LWR at htmltagc{br /}}%
+        \renewenvironment{quotation}{\LWR at htmltagc{br /}}{\LWR at htmltagc{br /}}%
+    }% not in a lateximage
+    \LWR at traceinfo{LWR at nestspan starting: done}%
 }% starting env
 {% ending env
-\LWR at traceinfo{LWR at nestspan ending}%
-\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
-{}%
-{\addtocounter{LWR at spandepth}{-1}}%
-\LWR at traceinfo{LWR at nestspan ending: done}%
+    \LWR at traceinfo{LWR at nestspan ending}%
+    \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
+    {}%
+    {\addtocounter{LWR at spandepth}{-1}}%
+    \LWR at traceinfo{LWR at nestspan ending: done}%
 }
-
-\AfterEndEnvironment{LWR at nestspan}{\global\let\par\LWR at closeparagraph}
 %    \end{macrocode}
 % \end{environment}
 
@@ -23265,12 +23354,12 @@
 %
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at htmlspan}{m +m}{%
-\LWR at ensuredoingapar%
-\LWR at htmltagc{#1}%
-\begin{LWR at nestspan}%
-#2%
-\LWR at htmltagc{/#1}%
-\end{LWR at nestspan}%
+    \LWR at ensuredoingapar%
+    \LWR at htmltagc{#1}%
+    \begin{LWR at nestspan}%
+    #2%
+    \LWR at htmltagc{/#1}%
+    \end{LWR at nestspan}%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -23303,9 +23392,7 @@
 % Print an \HTML\ tag: \textless{}tag\textgreater{}
 %    \begin{macrocode}
 \newcommand*{\LWR at htmltag}[1]{%
-% \LWR at traceinfo{LWR at htmltagb !\detokenize{#1}!}%
-\LWR at htmltagc{#1}%
-% \LWR at traceinfo{LWR at htmltagb: done}%
+    \LWR at htmltagc{#1}%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -23321,25 +23408,21 @@
 % \changes{v0.85}{2020/04/29}{Fix: Added print macros for \pkg{fontspec}.}
 %    \begin{macrocode}
 \newcommand*{\LWR at htmlopencomment}{%
-{%
 % \LWR at traceinfo{LWR at htmlopencomment}%
-\begingroup%
-\LWR at hook@processingtags%
-\ifmmode\else\protect\LWR at print@normalfont\protect\LWR at origttfamily\fi%
-\LWR at print@mbox{\LWR at origtextless{}!-\/-}%
-\endgroup%
-}%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \ifmmode\else\protect\LWR at print@normalfont\protect\LWR at origttfamily\fi%
+    \LWR at print@mbox{\LWR at origtextless{}!-\/-}%
+    \endgroup%
 }
 
 \newcommand*{\LWR at htmlclosecomment}{%
-{%
 % \LWR at traceinfo{LWR at htmlclosecomment}%
-\begingroup%
-\LWR at hook@processingtags%
-\ifmmode\else\protect\LWR at print@normalfont\protect\LWR at origttfamily\fi%
-\LWR at print@mbox{-\/-\LWR at origtextgreater}%
-\endgroup%
-}%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \ifmmode\else\protect\LWR at print@normalfont\protect\LWR at origttfamily\fi%
+    \LWR at print@mbox{-\/-\LWR at origtextgreater}%
+    \endgroup%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -23352,16 +23435,16 @@
 % \changes{v0.893}{2020/10/16}{Disabled in math mode.}
 %    \begin{macrocode}
 \newcommand{\LWR at htmlcomment}[1]{%
-\ifmmode%
-\else%
-    \LWR at htmlopencomment{}%
-    {%
-        \LWR at print@normalfont%
-        \LWR at origttfamily% break ligatures
-        #1%
-    }%
-    \LWR at htmlclosecomment{}%
-\fi%
+    \ifmmode%
+    \else%
+        \LWR at htmlopencomment{}%
+        {%
+            \LWR at print@normalfont%
+            \LWR at origttfamily% break ligatures
+            #1%
+        }%
+        \LWR at htmlclosecomment{}%
+    \fi%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -23370,7 +23453,7 @@
 % \begin{macro}{\LWR at htmlblockcomment} \marg{comment}
 %    \begin{macrocode}
 \newcommand{\LWR at htmlblockcomment}[1]
-{\LWR at stoppars\LWR at htmlcomment{#1}\LWR at startpars}
+    {\LWR at stoppars\LWR at htmlcomment{#1}\LWR at startpars}
 %    \end{macrocode}
 % \end{macro}
 
@@ -23377,9 +23460,9 @@
 % \begin{macro}{\LWR at htmlblocktag} \marg{tag}  print a stand-alone \HTML\ tag
 %    \begin{macrocode}
 \newcommand*{\LWR at htmlblocktag}[1]{%
-\LWR at stoppars%
-\LWR at htmltag{#1}%
-\LWR at startpars%
+    \LWR at stoppars%
+    \LWR at htmltag{#1}%
+    \LWR at startpars%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -23408,24 +23491,24 @@
 %
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at subhtmlelementclass}{m O{} D(){} m}{%
-\LWR at traceinfo{LWR at subhtmlelementclass !#1!#2!#3!#4!}%
-\ifblank{#2}%
-{% empty style
-    \LWR at htmltag{%
-        #1%
-        \ifblank{#3}{}{ role=\textquotedbl#3\textquotedbl}% spaces
-        \ifblank{#4}{}{ class=\textquotedbl#4\textquotedbl}% spaces
+    \LWR at traceinfo{LWR at subhtmlelementclass !#1!#2!#3!#4!}%
+    \ifblank{#2}%
+    {% empty style
+        \LWR at htmltag{%
+            #1%
+            \ifblank{#3}{}{ role=\textquotedbl#3\textquotedbl}% spaces
+            \ifblank{#4}{}{ class=\textquotedbl#4\textquotedbl}% spaces
+        }%
     }%
-}%
-{% non-empty style
-    \LWR at htmltag{%
-        #1\LWR at indentHTML%
-        \ifblank{#3}{}{role=\textquotedbl#3\textquotedbl\LWR at indentHTML}%
-        \ifblank{#4}{}{class=\textquotedbl#4\textquotedbl\LWR at indentHTML}%
-        style=\textquotedbl#2\textquotedbl\LWR at orignewline%
+    {% non-empty style
+        \LWR at htmltag{%
+            #1\LWR at indentHTML%
+            \ifblank{#3}{}{role=\textquotedbl#3\textquotedbl\LWR at indentHTML}%
+            \ifblank{#4}{}{class=\textquotedbl#4\textquotedbl\LWR at indentHTML}%
+            style=\textquotedbl#2\textquotedbl\LWR at orignewline%
+        }%
     }%
-}%
-\LWR at traceinfo{LWR at subhtmlelementclass done}%
+    \LWR at traceinfo{LWR at subhtmlelementclass done}%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -23497,12 +23580,12 @@
 % \changes{v0.73}{2019/06/26}{Vertical space.}
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at htmlelementclassline}{m o m +m}{%
-\LWR at stoppars
-\LWR at forceemptyline%
-\LWR at subhtmlelementclass{#1}[#2]{#3}%
-#4%
-\LWR at htmltag{/#1}
-\LWR at startpars
+    \LWR at stoppars
+    \LWR at forceemptyline%
+    \LWR at subhtmlelementclass{#1}[#2]{#3}%
+    #4%
+    \LWR at htmltag{/#1}
+    \LWR at startpars
 }
 %    \end{macrocode}
 % \end{macro}
@@ -23516,7 +23599,7 @@
 % \begin{macro}{\LWR at htmlelement} \marg{element}
 %    \begin{macrocode}
 \newcommand*{\LWR at htmlelement}[1]{%
-\LWR at htmlblocktag{#1}
+    \LWR at htmlblocktag{#1}
 }
 %    \end{macrocode}
 % \end{macro}
@@ -23524,9 +23607,9 @@
 % \begin{macro}{\LWR at htmlelementend} \marg{element}
 %    \begin{macrocode}
 \newcommand*{\LWR at htmlelementend}[1]{%
-\LWR at stoppars
-\LWR at htmltag{/#1}
-\LWR at startpars
+    \LWR at stoppars
+    \LWR at htmltag{/#1}
+    \LWR at startpars
 }
 
 \end{warpHTML}
@@ -23558,12 +23641,13 @@
 % \changes{v0.34}{2017/08/02}{Moved optional argument in front of mandatory.}
 % \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
 % \changes{v0.896}{2021/03/05}{Added \ARIA\ role.}
+% \changes{v0.903}{2021/12/19}{Now using \cs{NewCommandCopy}.}
 %
-% \codeprint
+% \codeall
 %    \begin{macrocode}
-\begin{warpprint}
+\begin{warpall}
 \NewDocumentEnvironment{BlockClass}{o D(){} m}{}{}
-\end{warpprint}
+\end{warpall}
 %    \end{macrocode}
 % \end{environment}
 %
@@ -23571,8 +23655,6 @@
 %    \begin{macrocode}
 \begin{warpHTML}
 
-\NewDocumentEnvironment{LWR at print@BlockClass}{o D(){} m}{}{}%
-
 \NewDocumentEnvironment{LWR at HTML@BlockClass}{o D(){} m}%
     {\LWR at htmldivclass[#1](#2){#3}}%
     {\LWR at htmldivclassend{#3}}
@@ -23623,12 +23705,13 @@
 % \changes{v0.34}{2017/08/02}{Moved optional argument in front of mandatory.}
 % \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
 % \changes{v0.62}{2018/10/24}{Added optional word-processing style.  Replaces \cs{LWR at HTMLtextstyle}.}
+% \changes{v0.903}{2021/12/19}{Now using \cs{NewCommandCopy}.}
 %
-% \codeprint
+% \codeall
 %    \begin{macrocode}
-\begin{warpprint}
+\begin{warpall}
 \NewDocumentCommand{\InlineClass}{D{(}{)}{} o m +m}{#4}%
-\end{warpprint}
+\end{warpall}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -23635,18 +23718,16 @@
 % \codehtml
 %    \begin{macrocode}
 \begin{warpHTML}
-\NewDocumentCommand{\LWR at print@InlineClass}{D{(}{)}{} o m +m}{#4}%
-
 \NewDocumentCommand{\LWR at HTML@InlineClass}{D{(}{)}{} o m +m}{%
-\LWR at traceinfo{LWR at HTML@InlineClass #3}%
-\ifbool{FormatWP}{%
-    \LWR at traceinfo{LWR at HTML@InlineClass: FormatWP}%
-    \LWR at htmlspanclass[#1]{#3}{#4}%
-}{%
-    \LWR at traceinfo{LWR at HTML@InlineClass: not FormatWP}%
-    \LWR at htmlspanclass[#2]{#3}{#4}%
-}%
-\LWR at traceinfo{LWR at HTML@InlineClass: done}%
+    \LWR at traceinfo{LWR at HTML@InlineClass #3}%
+    \ifbool{FormatWP}{%
+        \LWR at traceinfo{LWR at HTML@InlineClass: FormatWP}%
+        \LWR at htmlspanclass[#1]{#3}{#4}%
+    }{%
+        \LWR at traceinfo{LWR at HTML@InlineClass: not FormatWP}%
+        \LWR at htmlspanclass[#2]{#3}{#4}%
+    }%
+    \LWR at traceinfo{LWR at HTML@InlineClass: done}%
 }
 
 \LWR at formatted{InlineClass}
@@ -23667,12 +23748,13 @@
 % \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
 % \changes{v0.63}{2018/11/24}{Fix for \pkg{xeCJK}.}
 % \changes{v0.896}{2021/03/05}{Added \ARIA\ role.}
+% \changes{v0.903}{2021/12/19}{Now using \cs{NewCommandCopy}.}
 %
-% \codeprint
+% \codeall
 %    \begin{macrocode}
-\begin{warpprint}
+\begin{warpall}
 \NewDocumentEnvironment{LWR at BlockClassWP}{m m D(){} m}{}{}
-\end{warpprint}
+\end{warpall}
 %    \end{macrocode}
 % \end{environment}
 %
@@ -23679,36 +23761,34 @@
 % \codehtml
 %    \begin{macrocode}
 \begin{warpHTML}
-\NewDocumentEnvironment{LWR at print@LWR at BlockClassWP}{m m D(){} m}{}{}%
-
 \NewDocumentEnvironment{LWR at HTML@LWR at BlockClassWP}{m m D(){} m}%
-{%
-\LWR at stoppars%
-\ifbool{FormatWP}%
-{%
-    \addtocounter{LWR at thisautoidWP}{1}%
+    {%
+        \LWR at stoppars%
+        \ifbool{FormatWP}%
+        {%
+            \addtocounter{LWR at thisautoidWP}{1}%
 %    \end{macrocode}
 % \changes{v0.65}{2018/12/21}{Fix space between class and id.}
 %    \begin{macrocode}
-    \LWR at htmltag{%
-        div class=\textquotedbl#4\textquotedbl\ % space
-        id=\textquotedbl%
-            \LWR at print@mbox{autoidWP-\arabic{LWR at thisautoidWP}}%
-        \textquotedbl%
-        \ifblank{#3}{}{ role=\textquotedbl#3\textquotedbl}%
-        \ifblank{#1}{}{ style=\textquotedbl#1\textquotedbl}%
-    }%
-}% FormatWP
-{% not FormatWP
-    \LWR at htmltag{%
-        div class=\textquotedbl#4\textquotedbl%
-        \ifblank{#3}{}{ role=\textquotedbl#3\textquotedbl}%
-        \ifblank{#2}{}{ style=\textquotedbl#2\textquotedbl}%
-    }%
-}% not FormatWP
-\LWR at startpars%
-}
-{\LWR at htmldivclassend{#4}}
+            \LWR at htmltag{%
+                div class=\textquotedbl#4\textquotedbl\ % space
+                id=\textquotedbl%
+                    \LWR at print@mbox{autoidWP-\arabic{LWR at thisautoidWP}}%
+                \textquotedbl%
+                \ifblank{#3}{}{ role=\textquotedbl#3\textquotedbl}%
+                \ifblank{#1}{}{ style=\textquotedbl#1\textquotedbl}%
+            }%
+        }% FormatWP
+        {% not FormatWP
+            \LWR at htmltag{%
+                div class=\textquotedbl#4\textquotedbl%
+                \ifblank{#3}{}{ role=\textquotedbl#3\textquotedbl}%
+                \ifblank{#2}{}{ style=\textquotedbl#2\textquotedbl}%
+            }%
+        }% not FormatWP
+        \LWR at startpars%
+    }
+    {\LWR at htmldivclassend{#4}}
 
 \LWR at formattedenv{LWR at BlockClassWP}
 \end{warpHTML}
@@ -23775,14 +23855,16 @@
 % Paragraph tags are or are not allowed depending on many conditions.
 % \Cref{sec:parstartstop} has high-level commands which allow
 % paragraph-tag generation to start/stop.
-% Even when allowed (\cs{LWR at doingstartpars}),
+% Even when allowed (\bool{LWR at doingstartpars}),
 % tags are not generated until a \LaTeX{} paragraph
-% is being used (\cs{LWR at doingapar}).
-% |LWR at lateximagedepth| is used to prevent nesting tags inside
-% a |lateximage|.
-% |LWR at spandepth| is used to prevent nesting paragraph tags inside
+% is being used (\bool{LWR at doingapar}).
+% \ctr{LWR at lateximagedepth} is used to prevent nesting tags inside
+% a \env{lateximage}.
+% \ctr{LWR at spandepth} is used to prevent nesting paragraph tags inside
 % a paragraph, which became important inside \cs{fbox} commands and other spans.
-
+%
+% The \LaTeX\ paragraph hooks are used to manage tag creation.
+%
 % \codehtml
 %    \begin{macrocode}
 \begin{warpHTML}
@@ -23797,6 +23879,31 @@
 %    \end{macrocode}
 
 
+% \DescribeBoolean{LWR at doingparhooks}
+% Tells whether the \pkg{lwarp} paragraph hooks are to be active.
+%    \begin{macrocode}
+\newbool{LWR at doingparhooks}
+\boolfalse{LWR at doingparhooks}
+%    \end{macrocode}
+
+% \DescribeBoolean{LWR at in@multirow at par}
+% Tells whether to generate break instead of paragraph tags inside a \cs{multirow}.
+% \changes{v0.903}{2021/12/17}{Par handling.}
+%    \begin{macrocode}
+\newbool{LWR at in@multirow at par}
+\boolfalse{LWR at in@multirow at par}
+%    \end{macrocode}
+
+
+% \DescribeBoolean{LWR at starting@fancybox}
+% Suppresses \element{br} if beginning a \pkg{fancybox} environment.
+% \changes{v0.903}{2022/01/29}{Par handling.}
+%    \begin{macrocode}
+\newbool{LWR at starting@fancybox}
+\boolfalse{LWR at starting@fancybox}
+%    \end{macrocode}
+
+
 % \DescribeBoolean{LWR at doingstartpars}
 % Tells whether paragraphs may be generated.
 %    \begin{macrocode}
@@ -23843,17 +23950,20 @@
 %
 % See if paragraph handling is enabled:
 %    \begin{macrocode}
-\ifbool{LWR at doingstartpars}%
-{% handling pars
+    \ifboolexpr{
+        bool{LWR at doingparhooks} and
+        bool{LWR at doingstartpars}
+    }%
+    {% handling pars
 %    \end{macrocode}
 %
 % See if have already started a \env{lateximage} or a \element{span}.
 % If so, do not generate nested paragraph tags.
 %    \begin{macrocode}
-    \ifboolexpr{
-        test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
-        test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}}
-    }% nested par tags?
+        \ifboolexpr{
+            test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
+            test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}}
+        }% nested par tags?
 %    \end{macrocode}
 %
 % If so: Do nothing if already started a \env{lateximage} page.
@@ -23861,14 +23971,14 @@
 % Also do nothing if already inside a \element{span}.  Do not nest paragraph tags
 % inside a \element{span}.
 %    \begin{macrocode}
-    {}% no nested par tags
+        {}% no nested par tags
 %    \end{macrocode}
 %
 % Else: No \env{lateximage} or \element{span} has been started yet,
 % so it's OK to generate paragraph tags.
 %    \begin{macrocode}
-    {% yes nest par tags
-        \ifbool{LWR at doingapar}{}{%
+        {% yes nest par tags
+            \ifbool{LWR at doingapar}{}{%
 %    \end{macrocode}
 %
 % If \pkg{parnotes} is used, paragraph notes are inserted
@@ -23876,7 +23986,7 @@
 % \changes{v0.56}{2018/05/09}{Added support for \pkg{parnotes}.}
 % \changes{v0.902}{2021/09/20}{Improved \pkg{parnotes}.}
 %    \begin{macrocode}
-            \PN at parnotes@auto%
+                \PN at parnotes@auto%
 %    \end{macrocode}
 %
 % Set flag before creating the tag, so that the tag itself does not trigger
@@ -23883,28 +23993,23 @@
 % a new paragraph:
 % \changes{v0.902}{2021/09/20}{Improved par tags.}
 %    \begin{macrocode}
-            \global\booltrue{LWR at doingapar}%
+                \global\booltrue{LWR at doingapar}%
 %    \end{macrocode}
 %
 % The opening paragraph tag.
 % Do not create tag if doing \pkg{algorithm2e} handling instead:
 % \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \changes{v0.903}{2021/12/17}{Par handling.}
 %    \begin{macrocode}
-            \ifbool{LWR at algocf@dopars}{}{%
-                \LWR at htmltagc{\LWR at tagregularparagraph}\LWR at orignewline%
+                \ifbool{LWR at algocf@dopars}{}{%
+                    \ifbool{LWR at in@multirow at par}%
+                        {}%
+                        {\LWR at htmltagc{\LWR at tagregularparagraph}\LWR at orignewline}%
+                }%
             }%
-        }%
-%    \end{macrocode}
-%
-% At the endof each paragraph,
-% generate closing tag and do regular |/par| stuff.
-% (Attempting to use the \pkg{everyhook} |cr| hook
-% for \cs{LWR at closeparagraph} does not work well.)
-%    \begin{macrocode}
-        \let\par\LWR at closeparagraph%
-    }% end of yes nest par tags
-}% end of handling pars
-{}% not handling pars
+        }% end of yes nest par tags
+    }% end of handling pars
+    {}% not handling pars
 }
 
 \let\LWR at ensuredoingapar\LWR at openparagraph
@@ -23919,6 +24024,7 @@
 % and not in tabular metadata.  Factored from \cs{LWR at closeparagraph}.
 %
 % \changes{v0.66}{2019/01/01}{Factored.}
+% \changes{v0.903}{2021/12/17}{Par handling.}
 %    \begin{macrocode}
 \newcommand*{\LWR at closeparagraph@br}
 {%
@@ -23925,11 +24031,11 @@
     \ifboolexpr{
         test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}} and
         test {\ifnumcomp{\value{LWR at lateximagedepth}}{=}{0}} and
-        not bool {LWR at intabularmetadata}
+        not bool {LWR at starting@fancybox} and
+        not bool {LWR at intabularmetadata} or
+        bool {LWR at in@multirow at par}
     }%
-        {%
-            \unskip\LWR at htmltagc{br /}%
-        }%
+        {\unskip\LWR at htmltagc{br /}}%
         {}%
 }
 %    \end{macrocode}
@@ -23948,36 +24054,39 @@
 %
 % See if paragraph handling is enabled:
 %    \begin{macrocode}
-\ifbool{LWR at doingapar}%
+    \ifbool{LWR at doingparhooks}{%
+        \ifbool{LWR at doingapar}%
 %    \end{macrocode}
 %
 % If currently in paragraph mode:
 %    \begin{macrocode}
-{% handling pars
+        {% handling pars
 %    \end{macrocode}
 %
 % See if already started a \env{lateximage} or a \element{span}:
+% \changes{v0.903}{2021/12/17}{Par handling.}
 %    \begin{macrocode}
-    \ifboolexpr{
-        test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
-        test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}}
-    }%
+            \ifboolexpr{
+                test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
+                test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}} or
+                bool{LWR at in@multirow at par}
+            }%
 %    \end{macrocode}
 %
 % Add a parbreak if in a span, not in a lateximage,
 % and not in table metadata.
 %    \begin{macrocode}
-    {% no nested par tags
-        \LWR at closeparagraph@br%
-    }% no nested par tags
+            {% no nested par tags
+                \LWR at closeparagraph@br%
+            }% no nested par tags
 %    \end{macrocode}
 %
 % If have not already started a \env{lateximage} or a \element{span}:
 %    \begin{macrocode}
-    {% yes nest par tags
+            {% yes nest par tags
 %    \end{macrocode}
 %
-% Print a closing tag and some extra vertical space.
+% Print a closing tag.
 %
 % (The fill seems to be required to force the \pkg{caption}
 % package to create flush left caption text in the \HTML.)
@@ -23985,20 +24094,20 @@
 % \changes{v0.70}{2019/03/25}{Reduced underfull \cs{hbox} warnings.}
 % \changes{v0.71}{2019/04/08}{Flush left captions.}
 %    \begin{macrocode}
-        \@hspacer{\fill}% \hspace*{\fill}
-        \leavevmode\LWR at orignewline%
-        \LWR at htmltagc{/\LWR at tagregularparagraph}%
+                \@hspacer{\fill}% \hspace*{\fill}
+                \leavevmode\LWR at orignewline%
+                \LWR at htmltagc{/\LWR at tagregularparagraph}%
 %    \end{macrocode}
 %
 % No longer doing a paragraph:
 %    \begin{macrocode}
-        \global\boolfalse{LWR at doingapar}% keep
+                \global\boolfalse{LWR at doingapar}%
 %    \end{macrocode}
 %
 % Disable the special \env{minipage} \& \cs{hspace} interaction
 % until a new minipage is found:
 %    \begin{macrocode}
-        \global\boolfalse{LWR at minipagethispar}%
+                \global\boolfalse{LWR at minipagethispar}%
 %    \end{macrocode}
 %
 % If \pkg{parnotes} is used, paragraph notes are inserted
@@ -24006,14 +24115,12 @@
 % \changes{v0.56}{2018/05/09}{Added support for \pkg{parnotes}.}
 % \changes{v0.902}{2021/09/20}{Improved \pkg{parnotes}.}
 %    \begin{macrocode}
-        \PN at parnotes@auto%
+                \PN at parnotes@auto%
 %    \end{macrocode}
 %
-% After creating par notes, not yet started a new paragraph:
 %    \begin{macrocode}
-        \global\boolfalse{LWR at doingapar}%
-    }% end of yes nest par tags
-}% end of handling pars
+            }% end of yes nest par tags
+        }% LWR at doingapar: end of handling pars
 %    \end{macrocode}
 %
 % Add a parbreak if in a span, not in a lateximage,
@@ -24020,39 +24127,59 @@
 % and not in table metadata.
 % \changes{v0.66}{2019/01/01}{Fix: Combined span, \env{tabular}, and \env{lateximage}.}
 %    \begin{macrocode}
-{% not handling pars
-    \LWR at closeparagraph@br%
-}% not handling pars
+        {% not LWR at doingapar: not handling pars
+            \LWR at closeparagraph@br%
+        }% not handling pars
 %    \end{macrocode}
 %
 % In most cases, finish with a \LaTeX\ \cs{par}, but in the case
-% of paragraphs between lines in a tabular fetch the next token instead:
+% of paragraphs between lines in a tabular fetch the next token instead.
+% Required for \cs{multicolumn}.
 % \changes{v0.46}{2018/01/19}{Fix: Tabular empty lines.}
 %    \begin{macrocode}
-\ifboolexpr{%
-    not bool {LWR at doingapar} and
-    test {\ifnumcomp{\value{LWR at tabulardepth}}{>}{0}} and
-    test {
-        \ifnumcomp{\value{LWR at tabulardepth}}{=}{\value{LWR at tabularpardepth}}
-    } and
-    bool {LWR at intabularmetadata} and
-    not bool {LWR at tableparcell} and
-    test {\ifnumcomp{\value{LWR at lateximagedepth}}{=}{0}}
-}%
-{%
-    \LWR at getmynexttoken%
-}{%
-    \LWR at origpar%
-}%
+        \ifboolexpr{%
+            not bool {LWR at doingapar} and
+            test {\ifnumcomp{\value{LWR at tabulardepth}}{>}{0}} and
+            test {
+                \ifnumcomp{\value{LWR at tabulardepth}}{=}{\value{LWR at tabularpardepth}}
+            } and
+            bool {LWR at intabularmetadata} and
+            not bool {LWR at tableparcell} and
+            test {\ifnumcomp{\value{LWR at lateximagedepth}}{=}{0}}
+        }%
+            {\LWR at getmynexttoken}%
+            {}%
+    }% LWR at doingparhooks
+    {}% not LWR at doingparhooks
+% Do not place anything here, due to the above \LWR at getmynexttoken.
 }
 %    \end{macrocode}
 % \end{macro}
 
+
+% \subsection{Paragraph Hooks}
+%
+% \changes{v0.903}{2021/12/17}{Par handling.}
+%
+% \DescribeHook[LaTeX]{para/begin}
 %    \begin{macrocode}
+\AddToHook{para/begin}[lwarp]{\LWR at openparagraph}
+%    \end{macrocode}
+%
+% \DescribeHook[LaTeX]{para/end}
+%    \begin{macrocode}
+\AddToHook{para/end}[lwarp]{\LWR at closeparagraph}
+%    \end{macrocode}
+
+
+%    \begin{macrocode}
 \end{warpHTML}
 %    \end{macrocode}
 
 
+
+
+
 % \section{Paragraph start/stop handling}
 % \label{sec:parstartstop}
 % These commands allow/disallow the generation of \HTML\
@@ -24061,8 +24188,8 @@
 % \Cref{sec:parhanding} has the commands which actually generate
 % the tags.
 %
-% The |everyhook| package is used to generate the opening
-% paragraph tags.  The closing tags are generated by \cs{par}.
+% The \LaTeX\ paragraph hooks are used to generate the opening and closing
+% paragraph tags.
 
 % \codehtml
 %    \begin{macrocode}
@@ -24074,62 +24201,49 @@
 % Begin handling \HTML\ paragraphs.
 % This allows an \HTML\ paragraph to start, but one has not yet begun.
 % \changes{v0.84}{2020/04/14}{Ignore if in \env{lateximage}.}
+% \changes{v0.903}{2021/12/17}{Par handling.}
 %    \begin{macrocode}
 \newcommand*{\LWR at startpars}%
 {%
-% \LWR at traceinfo{LWR at startpars}%
 %    \end{macrocode}
 %
 % Ignore if inside a \env{lateximage} or \element{span}:
 %    \begin{macrocode}
-\ifboolexpr{
-    test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
-    test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}}
-}%
-{}%
-{%
+    \ifboolexpr{
+        test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
+        test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}}
+    }%
+        {}% nesting
+        {% not nesting
 %    \end{macrocode}
 %
+% The \LaTeX\ paragraph hook controls tag generation for
+% the start and end of paragraphs.
+%
 % See if currently handling \HTML\ paragraphs:
 %    \begin{macrocode}
-    \ifbool{LWR at doingstartpars}%
+            \ifboolexpr {bool{LWR at doingparhooks} and bool{LWR at doingstartpars}}%
 %    \end{macrocode}
 %
 % If already in paragraph mode, do nothing.
 %    \begin{macrocode}
-    {}%
+                {}%
 %    \end{macrocode}
 %
 % If not currently in paragraph mode:
 %    \begin{macrocode}
-    {%
+                {\par}%
 %    \end{macrocode}
 %
-%	At the start of each paragraph, generate an opening tag:
-% \gindex{par=\cs{par}>hooks}
-% \changes{v0.902}{2021/09/24}{Cleared hook before adding.}
-%    \begin{macrocode}
-        \ClearPreHook{par}%
-        \PushPreHook{par}{\LWR at openparagraph}%
-%    \end{macrocode}
-%
-%	At the end of each paragraph, generate closing tag then do regular |/par| actions:
-%    \begin{macrocode}
-        \let\par\LWR at closeparagraph
-
-    }% an intentionally blank line
-%    \end{macrocode}
-%
 % Are now handling paragraphs, but have not yet actually started one:
 %    \begin{macrocode}
-    \global\setbool{LWR at doingstartpars}{true}%
+            \global\booltrue{LWR at doingstartpars}%
 %    \end{macrocode}
 %
 % No \element{par} tag yet to undo:
 %    \begin{macrocode}
-    \global\boolfalse{LWR at doingapar}%
-}% nestspan
-% \LWR at traceinfo{LWR at startpars: done}%
+            \global\boolfalse{LWR at doingapar}%
+        }% not nesting
 }
 %    \end{macrocode}
 % \end{macro}
@@ -24141,6 +24255,7 @@
 %
 % \changes{v0.36}{2017/08/15}{Extra \protect\HTML\ source space after paragraphs.}
 % \changes{v0.84}{2020/04/14}{Ignore if in \env{lateximage}.}
+% \changes{v0.903}{2021/12/17}{Par handling.}
 %    \begin{macrocode}
 \newcommand*{\LWR at stoppars}%
 {%
@@ -24148,35 +24263,35 @@
 %
 % Ignore if inside a \env{lateximage} or \element{span}:
 %    \begin{macrocode}
-\ifboolexpr{
-    test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
-    test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}}
-}%
-{}%
-{%
+    \ifboolexpr{
+        test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
+        test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}}
+    }%
+        {}% nesting
+        {% not nesting
 %    \end{macrocode}
 %
 % See if currently handling \HTML\ paragraphs:
 %    \begin{macrocode}
-    \ifbool{LWR at doingapar}%
+            \ifboolexpr{bool{LWR at doingparhooks} and bool{LWR at doingapar}}%
 %    \end{macrocode}
 %
 % if currently in an \HTML\ paragraph:
 %    \begin{macrocode}
-    {%
+            {%
 %    \end{macrocode}
 %
 % Print a closing tag:
 % \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
 %    \begin{macrocode}
-        \leavevmode\LWR at orignewline%
-        \LWR at htmltagc{/\LWR at tagregularparagraph}%
-        \LWR at orignewline%
+                \leavevmode\LWR at orignewline%
+                \LWR at htmltagc{/\LWR at tagregularparagraph}%
+                \LWR at orignewline%
 %    \end{macrocode}
 %
 % No longer have an open \HTML\ paragraph:
 %    \begin{macrocode}
-        \global\boolfalse{LWR at doingapar}%
+                \global\boolfalse{LWR at doingapar}%
 %    \end{macrocode}
 %
 % Disable the special \env{minipage} \& \cs{hspace} interaction
@@ -24183,39 +24298,24 @@
 % until a new minipage is found:
 % \changes{v0.71}{2019/04/08}{Reduced underfull \cs{hbox} warnings.}
 %    \begin{macrocode}
-        \global\boolfalse{LWR at minipagethispar}
-    }%
+                \global\boolfalse{LWR at minipagethispar}%
+            }%
 %    \end{macrocode}
 %
 % If was not in an \HTML\ paragraph:
 %    \begin{macrocode}
-    {}%
+            {}%
 %    \end{macrocode}
 %
-% See if currently allowing \HTML\ paragraphs:
-%    \begin{macrocode}
-    \ifbool{LWR at doingstartpars}%
-%    \end{macrocode}
-%
-% If so: clear the |par| hook to no longer catch paragraphs:
-%    \begin{macrocode}
-        {\ClearPreHook{par}}%
-%    \end{macrocode}
-%
-% Else: Do nothing:
-%    \begin{macrocode}
-        {}%
-%    \end{macrocode}
-%
 % No longer in paragraph mode:
 %    \begin{macrocode}
-    \global\setbool{LWR at doingstartpars}{false}%
+            \global\setbool{LWR at doingstartpars}{false}%
 %    \end{macrocode}
 %
 % No \element{p} tag to undo:
 %    \begin{macrocode}
-    \global\boolfalse{LWR at doingapar}%
-}% nestspan
+            \global\boolfalse{LWR at doingapar}%
+        }% not nesting
 }
 %    \end{macrocode}
 % \end{macro}
@@ -24352,8 +24452,8 @@
 %
 %    \begin{macrocode}
 \newcommand*{\CSSFilename}[1]{%
-\renewcommand*{\LWR at currentcss}{#1}%
-\@onelevel at sanitize\LWR at currentcss%
+    \renewcommand*{\LWR at currentcss}{#1}%
+    \@onelevel at sanitize\LWR at currentcss%
 }
 
 \end{warpHTML}
@@ -24930,7 +25030,19 @@
 % \end{macro}
 %
 
+% \begin{macro}{\LWR at nullifyfootnotes}
+%
+% Cancels footnotes, such as inside an \HTML\ comment or a \cs{nameref}.
+% \changes{v0.903}{2021/12/28}{Added.}
+%    \begin{macrocode}
+\newcommand*{\LWR at nullifyfootnotes}{%
+    \renewcommand{\footnote}[2][]{}%
+    \renewcommand{\footnotemark}[1][]{}%
+}
+%    \end{macrocode}
+% \end{macro}
 
+
 %    \begin{macrocode}
 \end{warpHTML}
 %    \end{macrocode}
@@ -24957,9 +25069,10 @@
 \renewcommand{\marginpar}[2][]{%
 \ifbool{FormatWP}%
 {%
-\begin{LWR at BlockClassWP}{width:2in; float:right; margin:10pt}{}(note){marginblock}%
-#2
-\end{LWR at BlockClassWP}%
+    \begin{LWR at BlockClassWP}%
+        {width:2in; float:right; margin:10pt}{}(note){marginblock}%
+    #2
+    \end{LWR at BlockClassWP}%
 }%
 {%
     \LWR at htmlspanclass(note){marginpar}{#2}%
@@ -24982,18 +25095,22 @@
 % \changes{v0.896}{2021/03/05}{Added \ARIA\ role.}
 %    \begin{macrocode}
 \newcommand{\marginparBlock}[2][]{%
-\LWR at stoppars%
-\ifbool{FormatWP}%
-{%
-    \begin{LWR at BlockClassWP}{width:2in; float:right; margin:10pt}{}(note){marginblock}%
-    #2
-    \end{LWR at BlockClassWP}
-}{%
-    \begin{BlockClass}[width:2in; float:right; margin:10pt](note){marginparblock}%
-    #2
-    \end{BlockClass}
-}%
-\LWR at startpars%
+    \LWR at stoppars%
+    \ifbool{FormatWP}%
+    {%
+        \begin{LWR at BlockClassWP}%
+            {width:2in; float:right; margin:10pt}{}%
+            (note){marginblock}%
+        #2
+        \end{LWR at BlockClassWP}
+    }%
+    {%
+        \begin{BlockClass}[width:2in; float:right; margin:10pt]%
+            (note){marginparblock}%
+        #2
+        \end{BlockClass}
+    }%
+    \LWR at startpars%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -25605,12 +25722,14 @@
 % \end{macro}
 
 
-% \begin{macro}{\LWR at HTMLsanitize} \marg{text}
+% \begin{macro}{\LWR at HTMLsanitizedetokenized} \marg{detokenized text}
 %
-% Prints the sanitized text.
+% Prints the sanitized text, already detokenized.
 %
+% \changes{v0.903}{2021/12/17}{Added.}
 %    \begin{macrocode}
-\newrobustcmd{\LWR at HTMLsanitize}[1]{%
+\newrobustcmd{\LWR at HTMLsanitizedetokenized}[1]{%
+    \LWR at traceinfo{LWR at HTMLsanitizedetokenized !#1!}%
 %    \end{macrocode}
 % Cancel French \pkg{babel} character handling,
 % and fully expand the strings:
@@ -25617,18 +25736,19 @@
 %    \begin{macrocode}
     \begingroup%
     \LWR at hook@processingtags%
-    \edef\LWR at strresult{\detokenize{#1}}%
+    \edef\LWR at strresult{#1}%
     \LWR at subHTMLsanitize%
     \LWR at strresult%
     \endgroup%
+    \LWR at traceinfo{LWR at HTMLsanitize done}%
 }
 %    \end{macrocode}
 % \end{macro}
 
 
-% \begin{macro}{\LWR at HTMLsanitizeexpand} \marg{text}
+% \begin{macro}{\LWR at HTMLsanitizeexpanded} \marg{text}%
 %
-% This version expands the argument before sanitizing it.
+% This version must be given the detokenized and expanded text.
 % This is only used for adding math to \MathJax\ expressions or
 % \env{lateximage} \attribute{alt} tags.
 %
@@ -25636,7 +25756,6 @@
 % \changes{v0.51}{2018/03/07}{Fix: Escapes double quotes.}
 % ^^A \changes{v0.79}{2020/01/27}{Fix: \cs{\&}.}
 % \changes{v0.89}{2020/08/08}{Fix: Nested \MathJax\ environments.}
-% ^^A *88*
 %    \begin{macrocode}
 \edef\LWR at beginspaceleftbrace{begin \LWRleftbrace}
 \edef\LWR at beginspaceleftbrace{\detokenize\expandafter{\LWR at beginspaceleftbrace}}
@@ -25648,7 +25767,7 @@
 \edef\LWR at endrightbrace{end\LWRrightbrace}
 \edef\LWR at endrightbrace{\detokenize\expandafter{\LWR at endrightbrace}}
 
-\newrobustcmd{\LWR at HTMLsanitizeexpand}[1]{%
+\newrobustcmd{\LWR at HTMLsanitizeexpanded}[1]{%
 %    \end{macrocode}
 % Cancel French \pkg{babel} character handling,
 % and fully expand the strings:
@@ -25656,11 +25775,10 @@
     \begingroup%
     \LWR at hook@processingtags%
 %    \end{macrocode}
-% The difference between this and \cs{LWR at HTMLsanitize} (without ``expand'')
-% is the following \cs{expandafter}:
 %    \begin{macrocode}
-    \edef\LWR at strresult{\detokenize\expandafter{#1}}%
+    \edef\LWR at strresult{#1}%
 %    \end{macrocode}
+%
 % The math expression may includes spaces between tokens,
 % but \MathJax\ does not want a space between \cs{begin} or \cs{end}
 % and the following brace.
@@ -25734,7 +25852,7 @@
         \StrLen{\detokenize{#1}}[\LWR at tempone]%
         \ifnumgreater{\LWR at tempone}{350}{%
             \AtEndDocument{%
-                \PackageWarningNoLine{lwarp}{%
+                \PackageNoteNoLine{lwarp}{%
                     To ensure faster MathJax compilation, place each\MessageBreak
                     custom macro in its own \protect\CustomizeMathJax.\MessageBreak
                     See the Lwarp documentation regarding customizing\MessageBreak
@@ -26714,19 +26832,31 @@
 % \changes{v0.52}{2018/03/28}{Fix: Footnote numbering: Limited \HTML\ comment if starred.}
 % \changes{v0.52}{2018/03/28}{Fix: Footnote numbering: Use short \TOC\ entry
 %                                       for HTMLDebug comments.}
+% \changes{v0.903}{2021/12/28}{Add: Sectioning \HTML\ comment divider.}
+% \changes{v0.903}{2021/12/28}{Fix: Nullfiy footnotes in \HTML\ comment.}
 %    \begin{macrocode}
-\ifbool{HTMLDebugComments}{%
-    \begingroup%
-    \LWR at nullfonts%
-    \IfBooleanTF{#1}% starred
-    {\LWR at htmlcomment{Opening #4*}}%
+\begingroup%
+\LWR at nullfonts%
+\LWR at nullifyfootnotes%
+\LWR at htmlcomment{................................}%
+\LWR at orignewline%
+\ifbool{HTMLDebugComments}%
     {%
-        \IfNoValueTF{#2}% short TOC
-            {\LWR at htmlcomment{Opening #4 ``#3''}}%
-            {\LWR at htmlcomment{Opening #4 ``#2''}}%
-    }\LWR at orignewline%
-    \endgroup%
-}{}
+        \IfBooleanTF{#1}% starred
+            {%
+                \IfNoValueTF{#2}% short TOC
+                    {\LWR at htmlcomment{Opening #4* ``#3''}}%
+                    {\LWR at htmlcomment{Opening #4* ``#2''}}%
+            }%
+            {%
+                \IfNoValueTF{#2}% short TOC
+                    {\LWR at htmlcomment{Opening #4 ``#3''}}%
+                    {\LWR at htmlcomment{Opening #4 ``#2''}}%
+            }%
+        \LWR at orignewline%
+    }%
+    {}%
+\endgroup%
 %    \end{macrocode}
 %
 % For inline sections paragraph and subparagraph, start a new paragraph now:
@@ -27286,10 +27416,14 @@
 % \changes{v0.84}{2020/04/12}{Improved \HTML\ title.}
 %    \begin{macrocode}
 \StrSubstitute{\theHTMLSection}{\protect}{\detokenize{-}}[\theHTMLSection]%
-\StrSubstitute{\theHTMLSection}{\detokenize{-----}}{\detokenize{-}}[\theHTMLSection]%
-\StrSubstitute{\theHTMLSection}{\detokenize{----}}{\detokenize{-}}[\theHTMLSection]%
-\StrSubstitute{\theHTMLSection}{\detokenize{---}}{\detokenize{-}}[\theHTMLSection]%
-\StrSubstitute{\theHTMLSection}{\detokenize{--}}{\detokenize{-}}[\theHTMLSection]%
+\StrSubstitute{\theHTMLSection}%
+    {\detokenize{-----}}{\detokenize{-}}[\theHTMLSection]%
+\StrSubstitute{\theHTMLSection}%
+    {\detokenize{----}}{\detokenize{-}}[\theHTMLSection]%
+\StrSubstitute{\theHTMLSection}%
+    {\detokenize{---}}{\detokenize{-}}[\theHTMLSection]%
+\StrSubstitute{\theHTMLSection}%
+    {\detokenize{--}}{\detokenize{-}}[\theHTMLSection]%
 %    \end{macrocode}
 %
 % If starts with a dash, remove the leading dash:
@@ -27574,9 +27708,18 @@
 %
 % Not yet started any paragraph handling:
 %    \begin{macrocode}
+\global\booltrue{LWR at doingparhooks}
 \global\boolfalse{LWR at doingapar}
 \global\boolfalse{LWR at doingstartpars}
 %    \end{macrocode}
+%
+% \cs{color at endgroup}'s \cs{endgraf} was conflicting with \pkg{lwarp}'s
+% paragraph handling.
+% \changes{v0.903}{2021/12/13}{Par handling.}
+%    \begin{macrocode}
+\let\color at endgroup\endgroup
+%    \end{macrocode}
+%
 % Document and page settings:
 % \changes{v0.45}{2017/12/08}{Fix: Lateximages on incorrect pages with \brand{Mathjax}.}
 %    \begin{macrocode}
@@ -27804,6 +27947,7 @@
 % \end{macro}
 
 
+% \DescribeHook[LaTeX]{enddocument/info} Used to close the \filenm{*-images.txt} file.
 
 % \begin{macro}{\enddocument}
 % If labels have not changed, mark successful completion
@@ -27810,7 +27954,8 @@
 % of the \filenm{lateximages.txt} file.
 % Executed as everything is being shut down.
 %
-% For the newer kernel hooks, see \cmds{texdoc lthooks-doc} and \cmds{texdoc ltshipout-doc}.
+% For the newer kernel hooks, see \cmds{texdoc lthooks-doc}
+% and \cmds{texdoc ltshipout-doc}.
 % \changes{v0.70}{2019/03/26}{If labels changed, require recompile before making limages.}
 % \changes{v0.89}{2020/07/28}{Adapt to \LaTeX\ core changes.}
 %    \begin{macrocode}
@@ -27876,6 +28021,10 @@
 %
 % See \cmds{texdoc lthooks-doc} and \cmds{textdoc ltshipout-doc}.
 %
+% \DescribeHook[LaTeX]{shipoout/background} Nullified.
+%
+% \DescribeHook[LaTeX]{shipoout/foreground} Nullified.
+%
 % \changes{v0.89}{2020/07/28}{Foreground/background hooks: Adapt to \LaTeX\ core changes.}
 %    \begin{macrocode}
 \ifdef{\RemoveFromHook}{
@@ -28078,7 +28227,7 @@
 }
 
 \AtBeginDocument{
-\@ifpackageloaded{titling}{
+\IfPackageLoadedTF{titling}{
 \AtBeginEnvironment{titlingpage}{
 \renewrobustcmd{\affiliation}[1]{\\ \textsc{\small#1}}
 }
@@ -28297,7 +28446,7 @@
 %
 %
 %    \begin{macrocode}
-\@ifclassloaded{memoir}
+\IfClassLoadedTF{memoir}
 {
 \newcommand{\LWR at setfootnoteseries}{%
     \renewcommand\thefootnote{\@arabic\c at footnote}%
@@ -28562,7 +28711,7 @@
 %
 %    \begin{macrocode}
 \newcommand*{\AddSubtitlePublished}{%
-\@ifpackageloaded{titling}{% yes titling package
+\IfPackageLoadedTF{titling}{% yes titling package
     \newcommand{\@published}{}%
     \newcommand{\published}[1]{\gdef\@published{##1}}%
     \renewcommand*{\maketitlehooka}{\printpublished}%
@@ -28999,6 +29148,7 @@
 %
 % \changes{v0.20}{2016/12/24}{Added.}
 % \changes{v0.84}{2020/04/16}{Added print mode.}
+% \changes{v0.903}{2022/01/02}{Added \env{verbatim*}.}
 %
 %    \begin{macrocode}
 \AfterEndPreamble{
@@ -29018,7 +29168,23 @@
             \LWR at afterendverbatim%
         }%
 }
+%
+\AtBeginEnvironment{verbatim*}{%
+    \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
+        {}%
+        {%
+            \LWR at forcenewpage%
+            \LWR at atbeginverbatim{verbatim}%
+        }%
 }
+\AfterEndEnvironment{verbatim*}{%
+    \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
+        {}%
+        {%
+            \LWR at afterendverbatim%
+        }%
+}
+}
 %    \end{macrocode}
 % \end{environment}
 
@@ -29031,8 +29197,10 @@
 % \changes{v0.52}{2018/03/27}{Fix to allow inside \env{lateximage}.}
 % \changes{v0.58}{2018/06/07}{Improved print/\HTML\ output selection.}
 % \changes{v0.84}{2020/04/17}{Restore spacing.}
+% \changes{v0.903}{2021/12/20}{Converted to env.}
 %    \begin{macrocode}
-\newcommand*{\LWR at HTML@tabbing}{%
+\newenvironment*{LWR at HTML@tabbing}
+{%
     \LWR at forcenewpage%
     \LWR at atbeginverbatim{tabbing}%
     \let\enskip\LWR at origenskip%
@@ -29044,14 +29212,12 @@
     \let\negthinspace\LWR at orignegthinspace%
     \LWR at print@tabbing%
 }
-
-\newcommand*{\LWR at HTML@endtabbing}{%
-    \LWR at print@endtabbing%
+{%
+    \endLWR at print@tabbing%
     \LWR at afterendverbatim%
 }
 
-\LWR at formatted{tabbing}
-\LWR at formatted{endtabbing}
+\LWR at formattedenv{tabbing}
 %    \end{macrocode}
 %
 % \end{environment}
@@ -29260,11 +29426,9 @@
   \else
 %     \if at inlabel
 %       \indent
-        \par
 %     \fi
     \ifhmode
 %       \unskip\unskip
-        \par
     \fi
     \if at newlist
       \if at nobreak
@@ -29361,12 +29525,15 @@
 % leave room for the label while inside a list during paragraph construction.
 %
 % \changes{v0.44}{2017/11/15}{Added \env{list} and \env{trivlist}.}
+% \changes{v0.903}{2021/12/17}{Par handling.}
 %    \begin{macrocode}
 \newcommand*{\LWR at listitem}{%
     \LWR at stoppars%
     \LWR at startnewdepth{listitem}%
     \LWR at htmltag{li}%
+    \LWR at orignewline%
     \LWR at startpars%
+    \LWR at ensuredoingapar%
     \LWR at origitem%
 }
 %    \end{macrocode}
@@ -29432,12 +29599,15 @@
 %
 % See \cs{LWR at openparagraph} where extra \cs{hspace} is used to
 % leave room for the label while inside a list during paragraph construction.
+% \changes{v0.903}{2021/12/17}{Par handling.}
 %    \begin{macrocode}
 \newcommand*{\LWR at itemizeitem}{%
     \LWR at stoppars%
     \LWR at startnewdepth{listitem}%
     \LWR at htmltag{li}%
+    \LWR at orignewline%
     \LWR at startpars%
+    \LWR at ensuredoingapar%
     \LWR at origitem%
 }
 %    \end{macrocode}
@@ -29654,13 +29824,17 @@
 %    \end{macrocode}
 % \end{macro}
 
+
+% \begin{macro}{\LWR at futurenonspacelet}
+%
 % \cs{futurelet} copies the next token then executes a function to analyze it.
-
-% \cs{LWR at futurenonspacelet} does the same, but ignores intervening white space
-
+%
+% \cs{LWR at futurenonspacelet} does the same, but ignores intervening spaces
+% and paragraphs.
+%
 % Based on the \pkg{booktabs} style:
-
-% \begin{macro}{\LWR at futurenonspacelet}
+%
+% \changes{v0.903}{2021/10/13}{Now ignores \cs{par}.}
 %    \begin{macrocode}
 \def\LWR at futurenonspacelet#1{\def\LWR at cs{#1}%
 \afterassignment\LWR at fnslone\let\nexttoken= }
@@ -29668,19 +29842,30 @@
 \def\LWR at fnslone{\expandafter\futurelet\LWR at cs\LWR at fnsltwo}
 
 \def\LWR at fnsltwo{%
-\expandafter\ifx\LWR at cs\@sptoken\let\next=\LWR at fnslthree%
-\else\let\next=\nexttoken\fi\next}
+    \expandafter\ifx\LWR at cs\@sptoken%
+        \let\next=\LWR at fnslthree%
+    \else%
+        \expandafter\ifx\LWR at cs\par%
+            \let\next=\LWR at fnslthree%
+        \else%
+            \let\next=\nexttoken%
+        \fi%
+    \fi\next}
 
 \def\LWR at fnslthree{\afterassignment\LWR at fnslone\let\next= }
 %    \end{macrocode}
 % \end{macro}
 
+
 % \begin{macro}{\LWR at getmynexttoken}
 % Looks ahead and copies the next token into \cs{LWR at mynexttoken}.
 %    \begin{macrocode}
 \newcommand*{\LWR at getmynexttoken}{%
     \LWR at traceinfo{LWR at getmynexttoken}%
-% nothing must follow this next line
+%    \end{macrocode}
+%
+% Nothing must follow this next line:\watchout
+%    \begin{macrocode}
     \LWR at futurenonspacelet\LWR at mynexttoken\LWR at tabledatacolumntag
 }
 %    \end{macrocode}
@@ -31776,11 +31961,10 @@
 % left to right columns.
 %
 %    \begin{macrocode}
-\NewDocumentCommand{\LWR at docdashline}
-    {>{\SplitArgument{1}{-}}m}%
-    {%
-        \LWR at subcdashline#1%
-    }
+\NewDocumentCommand{\LWR at docdashline}{>{\SplitArgument{1}{-}}m}%
+{%
+    \LWR at subcdashline#1%
+}
 %    \end{macrocode}
 % \end{macro}
 
@@ -31831,7 +32015,7 @@
 %    \begin{macrocode}
 \newcommand*{\LWR at subaddcmidruletrim}[2]{%
     \setlength{\LWR at templengthone}{%
-            \LWR at getexparray{LWR at midrules}{\arabic{LWR at tableLaTeXcolindex}}%
+        \LWR at getexparray{LWR at midrules}{\arabic{LWR at tableLaTeXcolindex}}%
     }%
     \ifdimcomp{\LWR at templengthone}{>}{0pt}%
         {%
@@ -32995,13 +33179,13 @@
 {% \@xmultirow defined, so some version of multirow was loaded
 %    \end{macrocode}
 %
-% |\@ifpackageloaded{multirow}| determines if v2.0 or later of
+% |\IfPackageLoadedTF{multirow}| determines if v2.0 or later of
 % \pkg{multirow} was used, which included the \cs{ProvidesPackage} macro.
 %
 % The print version:
 %    \begin{macrocode}
-\@ifpackageloaded{multirow}{% v2.0 or newer
-\@ifpackagelater{multirow}{2016/09/01}% 2016/09/27 for v2.0
+\IfPackageLoadedTF{multirow}{% v2.0 or newer
+\IfPackageAtLeastTF{multirow}{2016/09/01}% 2016/09/27 for v2.0
 {% v2.0+:
 \DeclareExpandableDocumentCommand{\LWR at print@multicolumnrow}%
     {+m +m +O{c} +m +O{0} +m +O{0pt} +m}%
@@ -33015,7 +33199,7 @@
 }% packageloaded{multirow}
 %    \end{macrocode}
 %
-% If not |\@ifpackageloaded{multirow}| but \cs{@xmultirow} is defined,
+% If not |\IfPackageLoadedTF{multirow}| but \cs{@xmultirow} is defined,
 % then this must be v1.6 or earlier, which did not |\ProvidesPackage{multirow}|,
 % and did not have the \optn{vposn} option.
 %
@@ -33166,23 +33350,28 @@
 {%
     \LWR at traceinfo{LWR at tabledatacolumntag}%
 %    \end{macrocode}
+%
 % \hspace*{.5in} |\show\LWR at mynexttoken| to see what tokens to look for
 %    \begin{macrocode}
 %    \end{macrocode}
+%
 % If not any of the below, start a new table cell:
 %    \begin{macrocode}
     \global\let\LWR at mynextaction\LWR at tabledatasinglecolumntag%
 %    \end{macrocode}
+%
 % If exiting the tabular:
 %    \begin{macrocode}
     \ifdefequal{\LWR at mynexttoken}{\end}%
         {\booltrue{LWR at exitingtabular}}{}%
 %    \end{macrocode}
+%
 % \env{longtable} can have a caption in a cell
 %    \begin{macrocode}
     \ifdefequal{\LWR at mynexttoken}{\caption}%
         {\global\let\LWR at mynextaction\LWR at donothing}{}%
 %    \end{macrocode}
+%
 % Look for other things which would not start a table cell:
 %    \begin{macrocode}
     \ifdefequal{\LWR at mynexttoken}{\multicolumn}%
@@ -33194,11 +33383,13 @@
     \ifdefequal{\LWR at mynexttoken}{\noalign}%
         {\global\let\LWR at mynextaction\LWR at donothing}{}%
 %    \end{macrocode}
+%
 % If an \cs{mrowcell}, this is a cell to be skipped over:
 %    \begin{macrocode}
     \ifdefequal{\LWR at mynexttoken}{\mrowcell}%
         {\global\let\LWR at mynextaction\LWR at donothing}{}%
 %    \end{macrocode}
+%
 % If an \cs{mcolrowcell}, this is a cell to be skipped over:
 %    \begin{macrocode}
     \ifdefequal{\LWR at mynexttoken}{\mcolrowcell}%
@@ -33298,11 +33489,14 @@
     \ifdefequal{\LWR at mynexttoken}{\lasthdashline}%
         {\global\let\LWR at mynextaction\LWR at donothing}{}%
 %    \end{macrocode}
+%
 % Ignore an empty line between rows:
 % \changes{v0.45}{2017/12/06}{Fix: Empty line between rows.}
 %    \begin{macrocode}
     \ifdefequal{\LWR at mynexttoken}{\par}%
-        {\global\let\LWR at mynextaction\LWR at donothing}{}%
+        {%
+            \global\let\LWR at mynextaction\LWR at donothing%
+        }{}%
 %    \end{macrocode}
 %
 % No action for an \cs{end} token.
@@ -33312,9 +33506,8 @@
 %
 % Start the new table cell if was not any of the above:
 %    \begin{macrocode}
-    \LWR at traceinfo{LWR at tabledatacolumntag: about to do mynext}%
+    \LWR at traceinfo{LWR at tabledatacolumntag: done, about to do LWR at mynextaction}%
     \LWR at mynextaction%
-    \LWR at traceinfo{LWR at tabledatacolumntag: done}%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -33423,7 +33616,7 @@
 %    \begin{macrocode}
 \AtBeginDocument{
 
-\@ifpackageloaded{lwarp-tabls}
+\IfPackageLoadedTF{lwarp-tabls}
 {
     \newcommand*{\LWR at HTMLhline}[1][]{%
         \ifbool{FormatWP}%
@@ -33563,16 +33756,28 @@
     \boolfalse{LWR at foundmrowcell}%
 %    \end{macrocode}
 %
-%
+% In case of nesting:
 %    \begin{macrocode}
     \renewcommand*{\LWR at multicoltext}{}%
+    \booltrue{LWR at intabularmetadata}%
 %    \end{macrocode}
 %
+% New \PDF\ page, unless in a \cs{multirow}:
+% \changes{v0.903}{2021/12/17}{Par handling.}
+%    \begin{macrocode}
+    \ifbool{LWR at in@multirow at par}%
+        {\leavevmode\LWR at orignewline}%
+        {\LWR at forcenewpage}%
+%    \end{macrocode}
+%
+% In case of nesting, locally no longer in a \cs{multirow}:
+% \changes{v0.903}{2021/12/17}{Par handling.}
+%    \begin{macrocode}
+    \boolfalse{LWR at in@multirow at par}%
+%    \end{macrocode}
+%
 % Create the |table| tag:
 %    \begin{macrocode}
-    \booltrue{LWR at intabularmetadata}%
-    \LWR at traceinfo{LWR@@tabular: About to LWR at forecenewpage.}%
-    \LWR at forcenewpage
     \LWR at htmlblocktag{table}%
 %    \end{macrocode}
 % Parse the table columns:
@@ -34018,12 +34223,11 @@
 % \begin{macro}{\LWR at nameref} \marg{label}
 % Returns the section name for this label:
 % \changes{v0.66}{2019/01/27}{No longer use \pkg{zref}.}
-% \changes{v0.902}{2021/09/24}{Disable footnotes in \cs{nameref}.}
+% \changes{v0.902}{2021/09/24}{Nullify footnotes in \cs{nameref}.}
 %    \begin{macrocode}
 \newcommand*{\LWR at nameref}[1]{%
     \begingroup%
-    \renewcommand{\footnote}[2][]{}%
-    \renewcommand{\footnotemark}[1][]{}%
+    \LWR at nullifyfootnotes%
     \expandafter\LWR at setref\csname r@#1 at lwarp\endcsname\LWR at firstoffive{#1}%
     \endgroup%
 }
@@ -34369,7 +34573,8 @@
 %    \end{macrocode}
 % \end{macro}
 
-% \begin{macro}{\ref} * \marg{label} \quad
+% \begin{macro}{\ref} * \marg{label}
+%
 %   \cs{ref} is redefined to \cs{LWR at HTML@ref},
 %   except inside the text part of a \cs{hyperref},
 %   where it is redefined to \cs{LWR at ref@ignorestar}.
@@ -34400,16 +34605,76 @@
 %    \end{macrocode}
 %
 %
-% \begin{macro}{\LWR at refwithsection}
+% \begin{macro}{\LWR at refwithsection} * \marg{label}
+%
+% Creates a reference, using the section number as the text.
+% Used for back references.
+%
 % \changes{v0.896}{2021/04/21}{Added.}
+% \changes{v0.903}{2021/12/13}{Fixed: Ref undefined or w/o label.}
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at refwithsection}{s m}{%
     \LWR at traceinfo{LWR at refwithsection !#2!}%
+%    \end{macrocode}
+%
+% If starred, just use the text without a hyperlink:
+%    \begin{macrocode}
     \IfBooleanTF{#1}%
         {\LWR at print@ref{\BaseJobname-autopage-\LWR at currentautosecpageref{#2}}}%
         {%
+%    \end{macrocode}
+%
+% Open the reference:
+%    \begin{macrocode}
             \LWR at startref{#2}%
-            \LWR at print@ref{\BaseJobname-autopage-\LWR at currentautosecpageref{#2}}%
+%    \end{macrocode}
+%
+% Add the text of the link.
+%
+% Check for and handle an undefined reference:
+%    \begin{macrocode}
+            \edef\@tempa{\LWR at currentautosecpageref{#2}}%
+            \ifdefstring{\@tempa}{??}%
+                {??}%
+%    \end{macrocode}
+%
+% For a defined reference:
+%    \begin{macrocode}
+                {%
+%    \end{macrocode}
+%
+% Set \cs{@tempa} to \cs{r@<label>}, which is |{section number}{page number}|.
+%    \begin{macrocode}
+                    \edef\@tempa{%
+                        \csname
+                            r@\BaseJobname-autopage-\LWR at currentautosecpageref{#2}%
+                        \endcsname%
+                    }%
+%    \end{macrocode}
+%
+% Check the section number alone:
+%    \begin{macrocode}
+                    \edef\@tempa{\expandafter\@firstoftwo\@tempa}%
+%    \end{macrocode}
+%
+% If the reference has no section number print an asterisk:
+%    \begin{macrocode}
+                    \expandafter\ifblank\expandafter{\@tempa}%
+                        {*}
+%    \end{macrocode}
+%
+% If there is a section number, print it:
+%    \begin{macrocode}
+                        {%
+                            \LWR at print@ref{%
+                                \BaseJobname-autopage-\LWR at currentautosecpageref{#2}%
+                            }%
+                        }%
+                }%
+%    \end{macrocode}
+%
+% Close the reference:
+%    \begin{macrocode}
             \LWR at htmltag{/a}%
         }%
 }
@@ -34712,8 +34977,8 @@
 %    \begin{macrocode}
 \newcommand*{\LWR at subinlineimage}[6]{%
     \ifblank{#6}%
-        {\renewcommand*{\LWR at tempone}{}}
-        {\renewcommand*{\LWR at tempone}{role="#6"\LWR at indentHTML}}
+        {\renewcommand*{\LWR at tempone}{}}%
+        {\renewcommand*{\LWR at tempone}{role="#6"\LWR at indentHTML}}%
     \ifblank{#1}%
     {%
         \LWR at htmltag{img \LWR at indentHTML
@@ -34871,7 +35136,7 @@
 %    \begin{macrocode}
 \AtBeginDocument{
 
-\@ifpackageloaded{tocbasic}{
+\IfPackageLoadedTF{tocbasic}{
 
 \appto\figure at atbegin{%
     \LWR at futurenonspacelet\LWR at mynexttoken\LWR at floatalignment%
@@ -35098,7 +35363,7 @@
 % \changes{v0.84}{2020/04/20}{\pkg{caption} now optional.}
 %    \begin{macrocode}
 \AtBeginDocument{
-    \@ifpackageloaded{caption}{}{
+    \IfPackageLoadedTF{caption}{}{
         \let\LWR at orig@caption\@caption%
         \long\def\@caption#1[#2]{%
 %    \end{macrocode}
@@ -35286,7 +35551,7 @@
 % \changes{v0.84}{2020/04/20}{\pkg{caption} now optional.}
 %    \begin{macrocode}
 \AtBeginDocument{%
-\@ifpackageloaded{caption}{
+\IfPackageLoadedTF{caption}{
     \let\LWR at origcaptionlistentry\captionlistentry
 
     \renewcommand*{\captionlistentry}{%
@@ -35805,7 +36070,7 @@
 
 % \DescribeCounter{lofdepth} \TOC\ depth for figures.
 %    \begin{macrocode}
-\@ifclassloaded{memoir}{}{
+\IfClassLoadedTF{memoir}{}{
     \newcounter{lofdepth}
     \setcounter{lofdepth}{1}
 }
@@ -35813,7 +36078,7 @@
 
 % \DescribeCounter{lotdepth} \TOC\ depth for tables.
 %    \begin{macrocode}
-\@ifclassloaded{memoir}{}{
+\IfClassLoadedTF{memoir}{}{
     \newcounter{lotdepth}
     \setcounter{lotdepth}{1}
 }
@@ -36681,8 +36946,9 @@
     \linespread{1}%
 %    \end{macrocode}
 %
+% \changes{v0.903}{2021/12/17}{Par handling.}
 %    \begin{macrocode}
-    \let\par\LWR at origpar%
+    \setbool{LWR at doingparhooks}{false}%
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -36689,6 +36955,11 @@
     \LWR at select@print at hspace%
 %    \end{macrocode}
 %
+% \changes{v0.903}{2021/12/13}{Par handling.}
+%    \begin{macrocode}
+    \def\color at endgroup{\endgraf\endgroup}%
+%    \end{macrocode}
+%
 % \changes{v0.48}{2018/02/04}{Fix: Spacing in \SVG\ math, \env{lateximage}, \tikz.}
 %    \begin{macrocode}
     \LetLtxMacro\hfil\LWR at orighfil%
@@ -37264,12 +37535,12 @@
 
 \IfFileExists{\LWR at baselinename}%
 {
-    \@ifpackageloaded{graphicx}{
+    \IfPackageLoadedTF{graphicx}{
         \newcommand*{\LWR at addbaselinemarker}{%
             \LWR at origincludegraphics{\LWR at baselinename}%
         }
     }{
-        \@ifpackageloaded{graphics}{
+        \IfPackageLoadedTF{graphics}{
             \newcommand*{\LWR at addbaselinemarker}{%
                 \LWR at origincludegraphics{\LWR at baselinename}%
             }
@@ -37279,7 +37550,7 @@
             }
             \AtEndDocument{
                 \ifbool{LWR at warnbaselinemarker}{
-                    \PackageWarningNoLine{lwarp}{%
+                    \PackageNoteNoLine{lwarp}{%
                         Load graphicx or graphics for improved\MessageBreak
                         SVG math sizing and baselines%
                     }
@@ -37462,6 +37733,7 @@
 % \changes{v0.79}{2019/12/14}{Factored.}
 %    \begin{macrocode}
 \newcommand*{\LWR at subsingledollarsvg}[4]{%
+    \LWR at traceinfo{LWR at subsingledollartsvg}%
 %    \end{macrocode}
 % Measure the depth, width, and height of the math image:
 % \changes{v0.51}{2018/03/04}{Fix: \SVG\ math with enclosed \env{lateximage}.}
@@ -37541,7 +37813,7 @@
 % \changes{v0.896}{2021/03/05}{Added \ARIA\ role.}
 %    \begin{macrocode}
     \ifbool{LWR at dynamicmath}{%
-        \LWR at traceinfo{subsingledollar: dynamic}%
+        \LWR at traceinfo{subsingledollarsvg: dynamic}%
         \begin{lateximage}% no hashing
             [\MathImageAltText]% alt tag
             []% no add'l hashing
@@ -37548,7 +37820,7 @@
             [\LWR at singledollarstyle \LWR at singledollardepthstyle]% CSS
             (math)% ARIA
     }{% not dynamic math
-        \LWR at traceinfo{subsingledollar: static}%
+        \LWR at traceinfo{subsingledollarsvg: static}%
         \IfValueTF{#1}{% #1 True
             \LWR at findcurrenttextcolor% sets \LWR at tempcolor
 %    \end{macrocode}
@@ -37560,6 +37832,7 @@
                 {\def\LWR at tempone{N}}%
 %    \end{macrocode}
 %    \begin{macrocode}
+            \LWR at traceinfo{subsingledollarsvg about to lateximage}%
             \begin{lateximage}*% use hashing
                 [#2]% alt
                 *% do not add open/closing braces
@@ -37574,6 +37847,7 @@
                 ]%
                 [\LWR at singledollarstyle \LWR at singledollardepthstyle]% CSS
                 (math)% ARIA
+                \LWR at traceinfo{subsingledollar did lateximage}%
         }{% #1 False
             \begin{lateximage}% no hashing
                 [#2]% alt
@@ -37649,7 +37923,7 @@
 \newsavebox{\LWR at singledollarbox}
 
 \NewDocumentCommand{\LWR at subsingledollar}{s m m m}{%
-    \LWR at traceinfo{LWR at subsingledollar}%
+    \LWR at traceinfo{LWR at subsingledollar !#2!}%
 %    \end{macrocode}
 %    \begin{macrocode}
     \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
@@ -37701,9 +37975,10 @@
 %    \end{macrocode}
 % \cs{ifmmode} to avoid error about \cs{ttfamily} inside math mode
 % in the case of nested math, ex. equation with tcolorbox with math.
+% \changes{v0.903}{2021/12/18}{Improved math sanitization.}
 %    \begin{macrocode}
                     \ifmmode\else\LWR at print@ttfamily\fi%
-                    \LWR at HTMLsanitize{#4}%
+                    \LWR at HTMLsanitizedetokenized{\detokenize{#4}}%
                 }%
                 \textbackslash)%
             }%
@@ -37764,24 +38039,30 @@
 %
 % \changes{v0.42}{2017/10/16}{Improved \cs{ensuremath}.}
 %
-% Redefine the double dollar sign to place math inside a \env{lateximage}, or use \MathJax:
+% Redefine the double dollar sign to place math inside a \env{lateximage},
+% or use \MathJax:
 %    \begin{macrocode}
 \protected\gdef\LWR at doubledollar$#1$${%
 %    \end{macrocode}
+%
 % If \MathJax\ or formatting for a word processor, print the \LaTeX\ expression:
 % \changes{v0.19}{2016/05/25}{\MathJax\ support.}
 % \changes{v0.42}{2017/10/26}{If \progcode{FormatWP} print LaTeX expression.}
 %    \begin{macrocode}
-\ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
+    \ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
 %    \end{macrocode}
-% For \MathJax, print the math between |\[| and |\]|:
+%
+% For \MathJax, print the math between |\[| and |\]|.
+% If there is a footnote, endnote, or other kind of note (`|note|' is present),
+% sync the note numbers.
+%
 % \changes{v0.42}{2017/10/16}{Improved line spacing with mathjax.}
 % \changes{v0.89}{2020/08/01}{TT font for \MathJax.}
 % \changes{v0.896}{2021/04/07}{Fix: Displaymath notes with \MathJax.}
 %    \begin{macrocode}
-{
+    {% intentional blank line:
 
-    \IfSubStr{\detokenize\expandafter{#1}}{\detokenize{note}}{%
+        \IfSubStr{\detokenize\expandafter{#1}}{\detokenize{note}}{%
 %    \end{macrocode}
 %
 % The equation is printed to the \PDF\ output inside \HTML\ comment tags.
@@ -37789,22 +38070,31 @@
 % The \env{math} environment is selected here, and \cs{LWR at hidelatexequation}
 % will use the original print-mode meaning of \env{math}.
 %    \begin{macrocode}
-        \LWR at hidelatexequation{math}{#1}%
+            \LWR at hidelatexequation{math}{#1}%
 %    \end{macrocode}
+%
+% \changes{v0.903}{2021/12/18}{Improved math sanitization.}
 %    \begin{macrocode}
-        \InlineClass{hidden}{\LWR at syncnotenumbers}%
-        \textbackslash[%
-        {\LWR at print@ttfamily\LWR at HTMLsanitize{#1}}%
-        \textbackslash]
-        \InlineClass{hidden}{\LWR at syncnotenames}%
-    }{%
-        \textbackslash[%
-        {\LWR at print@ttfamily\LWR at HTMLsanitize{#1}}%
-        \textbackslash]
-    }%
+            \InlineClass{hidden}{\LWR at syncnotenumbers}%
+            \textbackslash[%
+            {%
+                \LWR at print@ttfamily%
+                \LWR at HTMLsanitizedetokenized{\detokenize{#1}}%
+            }%
+            \textbackslash]
+            \InlineClass{hidden}{\LWR at syncnotenames}%
+        }{%
+            \textbackslash[%
+            {%
+                \LWR at print@ttfamily%
+                \LWR at HTMLsanitizedetokenized{\detokenize{#1}}%
+            }%
+            \textbackslash]
+        }%
 
-}% mathjax
+    }% mathjax
 %    \end{macrocode}
+%
 % For \SVG, print the math inside a \env{lateximage},
 %   with an \element{alt} tag of the \LaTeX\ code:
 % \changes{v0.50}{2018/02/24}{Improved \SVG\ math \attribute{alt} tags.}
@@ -37811,35 +38101,37 @@
 % \changes{v0.50}{2018/03/02}{Improved \SVG\ math display.}
 % \changes{v0.51}{2018/03/11}{Fix: \cs{addcontentsline} inside \SVG\ math.  Provides an autoid anchor.}
 % \changes{v0.896}{2021/03/05}{Added \ARIA\ role.}
+% \changes{v0.903}{2021/12/18}{Improved alt tag sanitization.}
 %    \begin{macrocode}
-{% not mathjax
-    \begin{BlockClass}{displaymath}%
-    \LWR at newautoidanchor%
-    \booltrue{LWR at indisplaymathimage}%
-    \begin{lateximage}%
-    [%
-        \textbackslash{[} % extra space
-        \LWR at HTMLsanitize{#1} % extra space
-        \textbackslash{]}%
-    ]%
-    *% do not add open/closing braces
-    (math)% ARIA
+    {% not mathjax
+        \begin{BlockClass}{displaymath}%
+        \LWR at newautoidanchor%
+        \booltrue{LWR at indisplaymathimage}%
+        \begin{lateximage}%
+        [%
+            \textbackslash{[} % extra space
+            \LWR at HTMLsanitizedetokenized{\detokenize{#1}} % extra space
+            \textbackslash{]}%
+        ]%
+        *% do not add open/closing braces
+        (math)% ARIA
 %    \end{macrocode}
+%
 % Support for \pkg{xfakebold}:
 % \changes{v0.67}{2019/02/17}{\pkg{xfakebold}: Added support.}
 %    \begin{macrocode}
-    \LWR at applyxfakebold%
+        \LWR at applyxfakebold%
 %    \end{macrocode}
 %    \begin{macrocode}
-    \LWR at origdollar\LWR at origdollar#1\LWR at origdollar\LWR at origdollar%
-    \end{lateximage}%
-    \end{BlockClass}%
-}% not mathjax
+        \LWR at origdollar\LWR at origdollar#1\LWR at origdollar\LWR at origdollar%
+        \end{lateximage}%
+        \end{BlockClass}%
+    }% not mathjax
 %    \end{macrocode}
 % Clear the single-use \attribute{alt} text:
 % \changes{v0.74}{2019/08/20}{Add \cs{ThisAltText}.}
 %    \begin{macrocode}
-\gdef\LWR at ThisAltText{}%
+    \gdef\LWR at ThisAltText{}%
 }%
 %    \end{macrocode}
 % \end{macro}
@@ -37846,34 +38138,37 @@
 %
 %
 %
-% \begin{macro}{\LWR at singledollar} \marg{alt text} \marg{math expression}
+% \begin{macro}{\LWR at singledollar} \marg{math expression}
 % \changes{v0.89}{2020/08/01}{TT font for \MathJax.}
+% \changes{v0.903}{2021/12/18}{Improved alt tag sanitization.}
 %    \begin{macrocode}
 \protected\gdef\LWR at singledollar#1${%
-\ifbool{mathjax}{%
-    \LWR at subsingledollar*%
-    {% alt tag
-        \textbackslash( %
-        \LWR at HTMLsanitize{#1} % extra space
-        \textbackslash)%
-    }%
-    {singledollar}% add'l hashing
-    {#1}% contents
-}{% not mathjax
-    \LWR at subsingledollar*%
-    {% alt tag
-        \textbackslash( %
-        \LWR at HTMLsanitize{#1} % extra space
-        \textbackslash)%
-    }%
-    {singledollar}% add'l hashing
-    {\LWR at origensuredmath{#1}}% contents
-}% not mathjax
+    \LWR at traceinfo{LWR at singledollar}%
+    \ifbool{mathjax}{%
+        \LWR at subsingledollar*%
+        {% alt tag
+            \textbackslash( %
+            \LWR at HTMLsanitizedetokenized{\detokenize{#1}} % extra space
+            \textbackslash)%
+        }%
+        {singledollar}% add'l hashing
+        {#1}% contents
+    }{% not mathjax
+        \LWR at subsingledollar*%
+        {% alt tag
+            \textbackslash( %
+            \LWR at HTMLsanitizedetokenized{\detokenize{#1}} % extra space
+            \textbackslash)%
+        }%
+        {singledollar}% add'l hashing
+        {\LWR at origensuredmath{#1}}% contents
+    }% not mathjax
 %    \end{macrocode}
+%
 % Clear the single-use \attribute{alt} text:
 % \changes{v0.74}{2019/08/20}{Add \cs{ThisAltText}.}
 %    \begin{macrocode}
-\gdef\LWR at ThisAltText{}%
+    \gdef\LWR at ThisAltText{}%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -37913,6 +38208,7 @@
 % \changes{v0.50}{2018/02/23}{Fix: Use \env{lateximage} even if \MathJax.}
 % \changes{v0.50}{2018/02/24}{Improved \SVG\ math \attribute{alt} tags.}
 % \changes{v0.52}{2018/03/25}{Improved hashing expansion.}
+% \changes{v0.903}{2021/12/18}{Improved math sanitization.}
 %    \begin{macrocode}
 \LetLtxMacro\LWR at origensuredmath\@ensuredmath
 
@@ -37920,7 +38216,7 @@
     \ifbool{mathjax}{%
         \LWR at subsingledollar*{\AltTextOpen\MathImageAltText\AltTextClose}%
         {%
-            \protect\LWR at HTMLsanitize{\detokenize\expandafter{#1}}%
+            \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#1}}%
         }%
         {%
             \relax%
@@ -37942,7 +38238,11 @@
                 {%
                     \LWR at subsingledollar*%
                         {\AltTextOpen\MathImageAltText\AltTextClose}%
-                        {\protect\LWR at HTMLsanitize{\detokenize\expandafter{#1}}}%
+                        {%
+                            \protect\LWR at HTMLsanitizedetokenized{%
+                                \detokenize\expandafter{#1}%
+                            }%
+                        }%
                         {\LWR at origensuredmath{#1}}%
                 }%
         \fi%
@@ -38239,7 +38539,7 @@
 % The environment contents and \cs{end}:
 %    \begin{macrocode}
         \LWR at orignewline%
-        \LWR at HTMLsanitizeexpand{\detokenize\expandafter{#2}}%
+        \LWR at HTMLsanitizeexpanded{\detokenize\expandafter{#2}}%
         \LWR at orignewline%
         \textbackslash{}end\{#1\}
     }%
@@ -38335,7 +38635,7 @@
                 (\LWR at equationtag) % automatic numbering
             }%
             \textbackslash{begin\{#2\}} % extra space
-            \LWR at HTMLsanitizeexpand{\detokenize\expandafter{#1}} % extra space
+            \LWR at HTMLsanitizeexpanded{\detokenize\expandafter{#1}} % extra space
             \textbackslash{end\{#2\}}%
         ]*(math)% alt tag, ARIA
 %    \end{macrocode}
@@ -39027,7 +39327,7 @@
 \newcommand*{\LWR at amsmathbody}[1]
 {%
     \textbackslash\{begin\}\{#1\} % extra space
-    \LWR at HTMLsanitizeexpand{\detokenize\expandafter{\the\@envbody}}%
+    \LWR at HTMLsanitizeexpanded{\detokenize\expandafter{\the\@envbody}}%
     \textbackslash\{end\}\{#1\}%
 }
 %    \end{macrocode}
@@ -39088,6 +39388,7 @@
 % \changes{v0.896}{2021/03/05}{Added \ARIA\ role.}
 %    \begin{macrocode}
 \newcommand{\LWR at lateximage@oneimage}[5]{%
+    \LWR at traceinfo{LWR at lateximage@oneimage !#1!#2!#3!#4!#5!}%
     \ifdefvoid{\LWR at ThisAltText}{%
         \IfBooleanTF{#4}{%
             \LWR at lateximage@oneimageb{#1}{#2}{#3}{#5}%
@@ -39157,6 +39458,7 @@
 
 \NewDocumentEnvironment{lateximage}{s O{\ImageAltText} s O{} O{} D(){}}%
 {%
+\LWR at traceinfo{lateximage !#1!#2!#3!#4!#5!#6!}%
 \LWR at traceinfo{lateximage: starting on \jobname.pdf page \arabic{page}}%
 \LWR at traceinfo{lateximage: entering depth is \arabic{LWR at lateximagedepth}}%
 %    \end{macrocode}
@@ -39436,6 +39738,7 @@
 % \changes{v0.74}{2019/08/20}{New syntax for \cs{LWR at subinlineimage}.}
 % \changes{v0.896}{2021/03/05}{Added \ARIA\ role.}
 %    \begin{macrocode}
+    \LWR at traceinfo{about to LWR at lateximage@oneimage !#2!}%
     \IfBooleanTF{#1}% starred
     {% hash
         \LWR at lateximage@oneimage{#2}{\LWR at hashedname}{#5}{#3}{#6}%
@@ -39656,7 +39959,7 @@
 % \changes{v0.65}{2018/12/21}{\cs{AtBeginDocument} to avoid option clashes.}
 %    \begin{macrocode}
 \newcommand*{\LWR at PreloadedPackage}[1]{%
-    \@ifpackageloaded{#1}%
+    \IfPackageLoadedTF{#1}%
         {%
             \AtBeginDocument{
                 \LWR at origRequirePackage{lwarp-#1}%
@@ -39834,10 +40137,10 @@
 %
 % For print output, accept and then discard the new |class| key:
 % \changes{v0.65}{2018/12/19}{\pkg{graphics}: Added \cs{includegraphics} \attribute{alt} key.}
+% \changes{v0.903}{2021/12/23}{\pkg{graphics}: \attribute{alt} now in \pkg{graphicx} core.}
 %    \begin{macrocode}
 \begin{warpprint}
 \define at key{Gin}{class}{}
-\define at key{Gin}{alt}{}
 %    \end{macrocode}
 %
 % Print-mode additions for the \pkg{overpic} package.
@@ -39844,7 +40147,7 @@
 % See \cref{sec:overpic} for the \HTML\ version.
 %    \begin{macrocode}
 \AtBeginDocument{
-\@ifpackageloaded{overpic}{
+\IfPackageLoadedTF{overpic}{
 \newcommand*{\overpicfontsize}{12}
 \newcommand*{\overpicfontskip}{14}
 }{}
@@ -39884,7 +40187,7 @@
 %    \end{macrocode}
 % \textred{\dots\ and \emph{only} if \pkg{xcolor} was loaded:}
 %    \begin{macrocode}
-\@ifpackageloaded{xcolor}{
+\IfPackageLoadedTF{xcolor}{
 \LWR at traceinfo{patching xcolor}
 %    \end{macrocode}
 %
@@ -39915,14 +40218,14 @@
 \newsavebox{\LWR at colorminipagebox}
 
 \NewDocumentCommand{\LWR at print@fcolorbox}{o m o m +m}{%
-\LWR at traceinfo{LWR at print@fcolorbox #2 #4}%
+    \LWR at traceinfo{LWR at print@fcolorbox #2 #4}%
 %    \end{macrocode}
 % Pre-load the contents into an LR box so that they can
 % be used inside a \cs{fcolorbox}:
 %    \begin{macrocode}
-\begin{lrbox}{\LWR at colorminipagebox}%
-#5%
-\end{lrbox}%
+    \begin{lrbox}{\LWR at colorminipagebox}%
+    #5%
+    \end{lrbox}%
 %    \end{macrocode}
 % Sort out the various optional arguments and the background color of |none|.
 % In each case, the LRbox is placed inside a \cs{fcolorbox}.
@@ -39931,33 +40234,33 @@
 % color is used for the contents.
 % \changes{v0.62}{2018/10/18}{Fix: No longer requires \pkg{xifthen}.}
 %    \begin{macrocode}
-\ifstrequal{#4}{none}%
-{% #4 none
-    \LWR at traceinfo{background is none}%
-    {% scope the \colorlet
-        \colorlet{LWR at currentcolor}{.}%
-        \color{#2}%
-        \fbox{%
-            \color{LWR at currentcolor}%
-            \usebox{\LWR at colorminipagebox}%
-        }% fbox
-    }% colorlet
-}% #4 none
-{% #4 not none
-\LWR at traceinfo{background not none}%
-\IfValueTF{#1}%
-{%
-    \IfValueTF{#3}%
-    {\LWR at orig@print at fcolorbox[#1]{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
-    {\LWR at orig@print at fcolorbox[#1]{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
-}%
-{% no value #1
-    \IfValueTF{#3}%
-    {\LWR at orig@print at fcolorbox{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
-    {\LWR at orig@print at fcolorbox{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
-}% no value #1
-}% #4 not none
-\LWR at traceinfo{LWR at print@fcolorbox done}%
+    \ifstrequal{#4}{none}%
+    {% #4 none
+        \LWR at traceinfo{background is none}%
+        {% scope the \colorlet
+            \colorlet{LWR at currentcolor}{.}%
+            \color{#2}%
+            \fbox{%
+                \color{LWR at currentcolor}%
+                \usebox{\LWR at colorminipagebox}%
+            }% fbox
+        }% colorlet
+    }% #4 none
+    {% #4 not none
+    \LWR at traceinfo{background not none}%
+    \IfValueTF{#1}%
+    {%
+        \IfValueTF{#3}%
+        {\LWR at orig@print at fcolorbox[#1]{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
+        {\LWR at orig@print at fcolorbox[#1]{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
+    }%
+    {% no value #1
+        \IfValueTF{#3}%
+        {\LWR at orig@print at fcolorbox{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
+        {\LWR at orig@print at fcolorbox{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
+    }% no value #1
+    }% #4 not none
+    \LWR at traceinfo{LWR at print@fcolorbox done}%
 }
 %    \end{macrocode}
 %
@@ -39988,26 +40291,27 @@
 %	\oarg{5:align} \oarg{6:height} \oarg{7:inner-align} \marg{8:width}
 %
 % In print mode, becomes a \cs{fcolorbox} containing a \env{minipage}:
+% \changes{v0.903}{2021/12/19}{Now using \cs{NewCommandCopy}.}
 %    \begin{macrocode}
-\NewDocumentEnvironment{LWR at print@fcolorminipage}{o m o m O{c} O{} o m}
+\NewDocumentEnvironment{fcolorminipage}{o m o m O{c} O{} o m}
 {%
-\LWR at traceinfo{*** fcolorminipage: #2 #4 #8}%
+    \LWR at traceinfo{*** fcolorminipage: #2 #4 #8}%
 %    \end{macrocode}
 % Pre-load the contents into an LR box so that they can
 % be used inside a \cs{fcolorbox}:
 %    \begin{macrocode}
-\begin{lrbox}{\LWR at colorminipagebox}%
+    \begin{lrbox}{\LWR at colorminipagebox}%
 %    \end{macrocode}
 % If inner alignment is not given, use the outer alignment instead:
 %    \begin{macrocode}
-\IfValueTF{#7}%
-{\begin{minipage}[#5][#6][#7]{#8}}%
-{\begin{minipage}[#5][#6][#5]{#8}}%
+    \IfValueTF{#7}%
+    {\begin{minipage}[#5][#6][#7]{#8}}%
+    {\begin{minipage}[#5][#6][#5]{#8}}%
 }%
 {%
-\end{minipage}%
-\end{lrbox}%
-\LWR at traceinfo{*** starting end fcolorminipage #1 #2 #3 #4 #8}%
+    \end{minipage}%
+    \end{lrbox}%
+    \LWR at traceinfo{*** starting end fcolorminipage #1 #2 #3 #4 #8}%
 %    \end{macrocode}
 % Sort out the various optional arguments and the background color of |none|.
 % In each case, the LRbox is placed inside a \cs{fcolorbox}.
@@ -40016,43 +40320,35 @@
 % color is used for the contents.
 % \changes{v0.62}{2018/10/18}{Fix: No longer requires \pkg{xifthen}.}
 %    \begin{macrocode}
-\ifstrequal{#4}{none}%
-{% #4 none
-    {% scope the \colorlet
-        \colorlet{LWR at currentcolor}{.}%
-        \color{#2}%
-        \fbox{%
-            \color{LWR at currentcolor}%
-            \usebox{\LWR at colorminipagebox}%
-        }% fbox
-    }% colorlet
-}% #4 none
-{% #4 not none
-    \IfValueTF{#1}%
-    {%
-    \IfValueTF{#3}%
-    {\LWR at orig@print at fcolorbox[#1]{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
-    {\LWR at orig@print at fcolorbox[#1]{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
-    }%
-    {% no value #1
-    \IfValueTF{#3}%
-    {\LWR at orig@print at fcolorbox{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
-    {\LWR at orig@print at fcolorbox{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
-    }% no value #1
-}% #4 not none
-\LWR at traceinfo{*** finished end fcolorminipage}%
+    \ifstrequal{#4}{none}%
+    {% #4 none
+        {% scope the \colorlet
+            \colorlet{LWR at currentcolor}{.}%
+            \color{#2}%
+            \fbox{%
+                \color{LWR at currentcolor}%
+                \usebox{\LWR at colorminipagebox}%
+            }% fbox
+        }% colorlet
+    }% #4 none
+    {% #4 not none
+        \IfValueTF{#1}%
+        {%
+        \IfValueTF{#3}%
+        {\LWR at orig@print at fcolorbox[#1]{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
+        {\LWR at orig@print at fcolorbox[#1]{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
+        }%
+        {% no value #1
+        \IfValueTF{#3}%
+        {\LWR at orig@print at fcolorbox{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
+        {\LWR at orig@print at fcolorbox{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
+        }% no value #1
+    }% #4 not none
+    \LWR at traceinfo{*** finished end fcolorminipage}%
 }
 %    \end{macrocode}
-
-% \changes{v0.80}{2020/02/03}{Made robust.}
-%    \begin{macrocode}
-\NewDocumentEnvironment{fcolorminipage}{}
-    {\LWR at print@fcolorminipage}
-    {\endLWR at print@fcolorminipage}
-%    \end{macrocode}
 % \end{environment}
 
-
 % \pkg{xcolor} is known to have been loaded, and provided
 % \HTML\ versions of the following, and the print versions are provide above,
 % so now they may be \cs{LW at formatted}.
@@ -40094,7 +40390,7 @@
 
 %    \begin{macrocode}
 \AtBeginDocument{
-\@ifpackageloaded{chemmacros}{
+\IfPackageLoadedTF{chemmacros}{
 %    \end{macrocode}
 %
 % \begin{noindenvironment}{polymerdelims}
@@ -40803,14 +41099,14 @@
 % may have loaded:
 %    \begin{macrocode}
 \newcommand{\LWR at HTML@fbox}[1]{%
-\LWR at traceinfo{HTML fbox}%
-\LWR at forceminwidth{\fboxrule}%
-\LWR at traceinfo{HTML fbox B}%
-\InlineClass[%
-    \LWR at print@mbox{display:inline-block} ; %
-    \LWR at fboxstyle%
-]{fbox}{#1}%
-\LWR at traceinfo{HTML fbox: done}%
+    \LWR at traceinfo{HTML fbox}%
+    \LWR at forceminwidth{\fboxrule}%
+    \LWR at traceinfo{HTML fbox B}%
+    \InlineClass[%
+        \LWR at print@mbox{display:inline-block} ; %
+        \LWR at fboxstyle%
+    ]{fbox}{#1}%
+    \LWR at traceinfo{HTML fbox: done}%
 }
 %    \end{macrocode}
 % \pkg{xcolor} \cs{let}s things to \cs{fbox} when it is loaded,
@@ -40831,6 +41127,7 @@
 % \codeall
 %    \begin{macrocode}
 \end{warpHTML}
+
 \begin{warpall}
 \let\fboxBlock\fbox
 \end{warpall}
@@ -40848,9 +41145,7 @@
 \newcommand{\LWR at HTML@fboxBlock}[1]{%
 \LWR at forceminwidth{\fboxrule}%
 \LWR at stoppars%
-\begin{BlockClass}[%
-\LWR at fboxstyle%
-]{fboxBlock}
+\begin{BlockClass}[\LWR at fboxstyle]{fboxBlock}
 #1
 \end{BlockClass}
 \LWR at startpars%
@@ -40868,6 +41163,7 @@
 % Creates a framed \HTML\ \element{div} around its contents.
 % \changes{v0.34}{2017/07/31}{Added.}
 % \changes{v0.57}{2018/05/28}{Improved print/\HTML\ output selection.}
+% \changes{v0.903}{2021/12/19}{Now using \cs{NewCommandCopy}.}
 %
 % Print version:
 % \codeall \\
@@ -40877,7 +41173,7 @@
 
 \newsavebox{\LWR at fminipagebox}
 
-\NewDocumentEnvironment{LWR at print@fminipage}{O{t} o O{t} m}
+\NewDocumentEnvironment{fminipage}{O{t} o O{t} m}
 {%
 %    \end{macrocode}
 % An outer minipage will be used for vertical alignment.
@@ -40921,11 +41217,6 @@
 %    \begin{macrocode}
 \endminipage%
 }
-
-\LetLtxMacro\fminipage\LWR at print@fminipage
-\LetLtxMacro\endfminipage\endLWR at print@fminipage
-% \newenvironment{fminipage}{\LWR at print@fminipage}{\endLWR at print@fminipage}
-
 \end{warpall}
 %    \end{macrocode}
 %
@@ -41098,7 +41389,7 @@
 % \begin{macro}{\texteb} \marg{text} \qquad From \pkg{nfssext-cfr}.
 % \changes{v0.72}{2019/05/26}{\pkg{nfssext-cfr}: Added.}
 %    \begin{macrocode}
-\@ifpackageloaded{nfssext-cfr}{
+\IfPackageLoadedTF{nfssext-cfr}{
 \DeclareRobustCommand{\LWR at HTML@texteb}[1]{%
     {%
         \LWR at HTML@ebweight%
@@ -41117,7 +41408,7 @@
 % \begin{macro}{\textlg} \marg{text} \qquad From \pkg{nfssext-cfr}.
 % \changes{v0.72}{2019/05/26}{\pkg{nfssext-cfr}: Added.}
 %    \begin{macrocode}
-\@ifpackageloaded{nfssext-cfr}{
+\IfPackageLoadedTF{nfssext-cfr}{
 \DeclareRobustCommand{\LWR at HTML@textlg}[1]{%
     {%
         \LWR at HTML@lgweight%
@@ -41415,7 +41706,7 @@
 % \begin{macro}{\ebweight} From \pkg{nfssext-cfr}.
 % \changes{v0.72}{2019/05/26}{\pkg{nfssext-cfr}: Added.}
 %    \begin{macrocode}
-\@ifpackageloaded{nfssext-cfr}{
+\IfPackageLoadedTF{nfssext-cfr}{
 \newrobustcmd*{\LWR at HTML@ebweight}{%
     \LWR at print@ebweight%
     \renewcommand*{\LWR at f@series}{eb}%
@@ -41428,7 +41719,7 @@
 % \begin{macro}{\lgweight} From \pkg{nfssext-cfr}.
 % \changes{v0.72}{2019/05/26}{\pkg{nfssext-cfr}: Added.}
 %    \begin{macrocode}
-\@ifpackageloaded{nfssext-cfr}{
+\IfPackageLoadedTF{nfssext-cfr}{
 \newrobustcmd*{\LWR at HTML@lgweight}{%
     \LWR at print@lgweight%
     \renewcommand*{\LWR at f@series}{lg}%
@@ -42460,8 +42751,8 @@
     }
 
 \AtBeginDocument{
-    \@ifpackageloaded{graphics}{
-        \@ifpackageloaded{metalogo}{}{
+    \IfPackageLoadedTF{graphics}{
+        \IfPackageLoadedTF{metalogo}{}{
             \renewrobustcmd*{\Xe}
                 {X\hspace{-.1667em}\raisebox{-.5ex}{\reflectbox{E}}}
         }
@@ -42470,7 +42761,7 @@
 
 \AtEndDocument{
     \ifbool{LWR at warnXe}{
-        \PackageWarningNoLine{lwarp}{Load graphicx or graphics
+        \PackageNoteNoLine{lwarp}{Load graphicx or graphics
             for improved XeTeX logo}
     }{}
 }
@@ -42741,7 +43032,7 @@
 %    \begin{macrocode}
 \begin{warpHTML}
 \AtBeginDocument{
-    \@ifpackageloaded{everyshi}{
+    \IfPackageLoadedTF{everyshi}{
         \RequirePackage{lwarp-everyshi}
     }{}
 }
@@ -42775,13 +43066,13 @@
 % \changes{v0.89}{2020/08/12}{Allow preload of \pkg{amsmath}, \pkg{amsthm}, \pkg{centernot}.}
 %    \begin{macrocode}
 \begin{warpHTML}
-\@ifpackageloaded{amsthm}{
+\IfPackageLoadedTF{amsthm}{
     \RequirePackage{lwarp-amsthm}
 }{}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\@ifpackageloaded{amsmath}{
+\IfPackageLoadedTF{amsmath}{
     \RequirePackage{lwarp-amsmath}
 }{}
 %    \end{macrocode}
@@ -42789,7 +43080,7 @@
 %
 % \pkg{amsthm} may load \pkg{centernot}, so \pkg{centernot} must be checked second.
 %    \begin{macrocode}
-\@ifpackageloaded{centernot}{
+\IfPackageLoadedTF{centernot}{
     \RequirePackage{lwarp-centernot}
 }{}
 \end{warpHTML}
@@ -42806,9 +43097,9 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\@ifclassloaded{scrbook}{\RequirePackage{lwarp-patch-komascript}}{}
-\@ifclassloaded{scrartcl}{\RequirePackage{lwarp-patch-komascript}}{}
-\@ifclassloaded{scrreprt}{\RequirePackage{lwarp-patch-komascript}}{}
+\IfClassLoadedTF{scrbook}{\RequirePackage{lwarp-patch-komascript}}{}
+\IfClassLoadedTF{scrartcl}{\RequirePackage{lwarp-patch-komascript}}{}
+\IfClassLoadedTF{scrreprt}{\RequirePackage{lwarp-patch-komascript}}{}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -42826,7 +43117,7 @@
 % \codeprint
 %    \begin{macrocode}
 \begin{warpprint}
-\@ifclassloaded{memoir}{\LWR at origRequirePackage{xcolor}}{}
+\IfClassLoadedTF{memoir}{\LWR at origRequirePackage{xcolor}}{}
 \end{warpprint}
 %    \end{macrocode}
 
@@ -42833,7 +43124,7 @@
 % \codehtml
 %    \begin{macrocode}
 \begin{warpHTML}
-\@ifclassloaded{memoir}{\RequirePackage{lwarp-patch-memoir}}{}
+\IfClassLoadedTF{memoir}{\RequirePackage{lwarp-patch-memoir}}{}
 \end{warpHTML}
 %    \end{macrocode}
 
@@ -42905,23 +43196,23 @@
     }
 }
 
-\@ifclassloaded{ujarticle}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ujbook}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ujreport}{\LWR at patchujtclasses}{}
-\@ifclassloaded{utarticle}{\LWR at patchujtclasses}{}
-\@ifclassloaded{utbook}{\LWR at patchujtclasses}{}
-\@ifclassloaded{utreport}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjarticle}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjbook}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjreport}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjsarticle}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjsbook}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjsreport}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjskiyou}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjspf}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjtarticle}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjtbook}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjtreport}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ujarticle}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ujbook}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ujreport}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{utarticle}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{utbook}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{utreport}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjarticle}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjbook}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjreport}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjsarticle}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjsbook}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjsreport}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjskiyou}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjspf}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjtarticle}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjtbook}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjtreport}{\LWR at patchujtclasses}{}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -42950,7 +43241,7 @@
 %
 %    \begin{macrocode}
 \AtBeginDocument{
-    \@ifpackageloaded{ctexpatch}{%
+    \IfPackageLoadedTF{ctexpatch}{%
         \def\@partcntformat#1{%
             \LWR at isolate{\CTEX at partname}~%
             \CTEX at part@aftername%
@@ -42993,7 +43284,7 @@
 % it is reverted to the original.
 %    \begin{macrocode}
 \AtBeginDocument{
-\@ifpackageloaded{kotexutf}{%
+\IfPackageLoadedTF{kotexutf}{%
     \def\LWR at kotexutf@setref#1#2#3{%
         \@setref at dhucs@orig{#1}{#2}{#3}%
       \ifx#1\relax\else
@@ -43034,24 +43325,22 @@
 \begin{warpHTML}
 \AtBeginDocument{
 
-\@ifpackageloaded{polyglossia}{
-    \PackageWarningNoLine{lwarp}
+\IfPackageLoadedTF{polyglossia}{
+    \PackageNoteNoLine{lwarp}
     {%
         Polyglossia has been loaded.  Lwarp also uses cleveref.\MessageBreak
         See the cleveref documentation regarding\MessageBreak
-        polyglossia support.  Some languages are not supported%
+        polyglossia support.  Some languages are not supported.\MessageBreak
+        --- \MessageBreak
+        If the error\MessageBreak
+        \space\space Undefined control sequence ...
+        \protect\__hook begindocument\MessageBreak
+        occurs here, use the polyglossia macro:\MessageBreak
+        \space\space\protect\setmainlanguage\protect{...\protect}
     }
-    \typeout{---}
-    \typeout{Package lwarp:}
-    \typeout{If the error}
-    \typeout{\space\space``! Undefined control sequence.
-        \space ... \space \protect\__hook begindocument''}
-    \typeout{occurs here, use the polyglossia macro:}
-    \typeout{\space\space\protect\setmainlanguage\protect{...\protect}}
-    \typeout{---}
 }{
-    \@ifpackageloaded{babel}{
-        \PackageWarningNoLine{lwarp}
+    \IfPackageLoadedTF{babel}{
+        \PackageNoteNoLine{lwarp}
         {%
             Babel has been loaded.  Lwarp also uses cleveref.\MessageBreak
             See the cleveref documentation regarding\MessageBreak
@@ -43071,12 +43360,13 @@
 %
 % \begin{macro}{\LWR at mathjaxwarn} \marg{packagename} \marg{More text.}
 %
+% Issue a warning that \MathJax\ is emulated.
 % To be done \cs{AtBeginDocument}.
 %
 % \changes{v0.79}{2020/01/18}{Warn if using packages partially supported by \MathJax.}
 %    \begin{macrocode}
 \newcommand*{\LWR at mathjaxwarn}[2]{%
-    \@ifpackageloaded{lwarp-#1}{%
+    \IfPackageLoadedTF{lwarp-#1}{%
         \ifblank{#2}{%
             \PackageWarningNoLine{lwarp}
                 {%
@@ -43096,6 +43386,7 @@
 
 % \begin{macro}{\LWR at nomathjaxwarn} \marg{packagename} \marg{More text.}
 %
+% Issue a warning that \MathJax\ is not supported.
 % To be done \cs{AtBeginDocument}.
 %
 % \changes{v0.894}{2020/12/22}{Warn if using packages not supported by \MathJax.}
@@ -43102,7 +43393,7 @@
 % \changes{v0.895}{2021/01/08}{Improved \MathJax\ warning.}
 %    \begin{macrocode}
 \newcommand*{\LWR at nomathjaxwarn}[2]{%
-    \@ifpackageloaded{lwarp-#1}{%
+    \IfPackageLoadedTF{lwarp-#1}{%
         \ifblank{#2}{%
             \PackageWarningNoLine{lwarp}
                 {%
@@ -43153,8 +43444,7 @@
 \AtBeginDocument{
     \ifbool{mathjax}{
         \LWR at nomathjaxwarn{aligned-overset}{}
-        \LWR at nomathjaxwarn{amscdx}
-            {\LWR at forceSVGmessage{amscdx}}
+        \LWR at nomathjaxwarn{amscdx}{\LWR at forceSVGmessage{amscdx}}
         \LWR at mathjaxwarn{arydshln}
             {In a math array, do not use the optional argument\MessageBreak
             for \protect\cdashline.\space\space
@@ -43177,10 +43467,8 @@
             {Colors are ignored in MathJax.\MessageBreak
             (Text mode tabular does support colortbl.)\MessageBreak
             \LWR at forceSVGmessage{colortbl}}
-        \LWR at mathjaxwarn{delarray}
-            {\LWR at forceSVGmessage{delarray}}
-        \LWR at nomathjaxwarn{gauss}
-            {\LWR at forceSVGmessage{gauss}}
+        \LWR at mathjaxwarn{delarray}{\LWR at forceSVGmessage{delarray}}
+        \LWR at nomathjaxwarn{gauss}{\LWR at forceSVGmessage{gauss}}
         \LWR at mathjaxwarn{hhline}
             {A simple \protect\hline\space is used}
         \LWR at mathjaxwarn{isomath}
@@ -43188,8 +43476,7 @@
                 do not use a sans font because MathJax does not yet\MessageBreak
                 have sans Greek.  Tensors may look like vectors%
             }
-        \LWR at nomathjaxwarn{jkmath}
-            {\LWR at forceSVGmessage{jkmath}}
+        \LWR at nomathjaxwarn{jkmath}{\LWR at forceSVGmessage{jkmath}}
         \LWR at mathjaxwarn{libertinust1math}
             {Some of the symbol font macros such as \protect\mathsfbfit\MessageBreak
                 do not use a sans font because MathJax does not yet\MessageBreak
@@ -43214,12 +43501,14 @@
             \protect\CodeBefore\space cannot be done with MathJax.\MessageBreak
             \LWR at forceSVGmessage{nicematrix}%
             }
-        \LWR at nomathjaxwarn{pb-diagram}
-            {\LWR at forceSVGmessage{pb-diagram}}
+        \LWR at nomathjaxwarn{pb-diagram}{\LWR at forceSVGmessage{pb-diagram}}
 %         \LWR at mathjaxwarn{physics}
 % %             {The third-party extension is not used.\MessageBreak
 %             {The MathJax v3 extension is used.\MessageBreak
 %             See the Lwarp manual for details}
+        \LWR at mathjaxwarn{siunitx}
+            {Place \protect\sisetup\space before \protect\begin{document}.\MessageBreak
+            Many optional arguments are ignored}
         \LWR at nomathjaxwarn{tensind}{}
         \LWR at mathjaxwarn{unicode-math}
             {Do not use embedded Unicode characters.\MessageBreak
@@ -43495,7 +43784,7 @@
 %
 % \changes{v0.84}{2020/03/28}{\pkg{abstract}: Updated for \pkg{memoir}.}
 %    \begin{macrocode}
-\@ifclassloaded{memoir}
+\IfClassLoadedTF{memoir}
 {
   \renewenvironment{abstract}{%
 % %     \titlepage
@@ -43871,10 +44160,10 @@
 % \changes{v0.76}{2019/10/07}{\pkg{acro}: Updated for v2.10.}
 %    \begin{macrocode}
 \ExplSyntaxOn
-\@ifpackagelater{acro}{2020/04/29}%
+\IfPackageAtLeastTF{acro}{2020/04/29}%
 {}% v3 or later
 {% before v3
-\@ifpackagelater{acro}{2019/09/23}%
+\IfPackageAtLeastTF{acro}{2019/09/23}%
 {% v2.10 or later
 \cs_gset_protected:Npn \__acro_typeset:nn #1#2
   {
@@ -44026,11 +44315,11 @@
 % Fix for acronym labels in the captions of floats.
 % \changes{v0.66}{2019/01/28}{\pkg{acronym}: Fix for acronym in caption.}
 %    \begin{macrocode}
-\renewcommand{\@starttoc}[1]{
-\LWR at htmlelementclass{nav}{#1}
-\LetLtxMacro\@verridelabel\@gobble
-\LWR at orig@starttoc{#1}
-\LWR at htmlelementclassend{nav}{#1}
+\renewcommand{\@starttoc}[1]{%
+    \LWR at htmlelementclass{nav}{#1}
+    \LetLtxMacro\@verridelabel\@gobble
+    \LWR at orig@starttoc{#1}
+    \LWR at htmlelementclassend{nav}{#1}
 }
 %    \end{macrocode}
 
@@ -44257,22 +44546,22 @@
 % Paragraph handling to allow line numbers under certain conditions:
 %    \begin{macrocode}
 \renewcommand{\algocf at everypar}{%
-\ifbool{LWR at algocf@dopars}{%
-    \ifbool{LWR at doingstartpars}{%
-        \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
-            {}%
-            {%
+    \ifbool{LWR at algocf@dopars}{%
+        \ifbool{LWR at doingstartpars}{%
+            \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
+                {}%
+                {%
 %    \end{macrocode}
 % \pkg{algorthm2e} uses \cs{everypar}, so the open paragraph tag
 % is generated here instead of \cs{LWR at openparagraph}:
 %    \begin{macrocode}
-                \LWR at htmltagc{\LWR at tagregularparagraph}\LWR at orignewline%
+                    \LWR at htmltagc{\LWR at tagregularparagraph}\LWR at orignewline%
 %    \end{macrocode}
 %    \begin{macrocode}
-                \algocf at everyparnl\algocf at everyparhanging%
-            }%
+                    \algocf at everyparnl\algocf at everyparhanging%
+                }%
+        }{}%
     }{}%
-}{}%
 }
 %    \end{macrocode}
 %
@@ -44280,9 +44569,9 @@
 % \pkg{lwarp} caption handling:
 %    \begin{macrocode}
 \renewcommand{\algocf at makecaption}[2]{%
-\LWR at HTML@caption at begin{algocf}%
-\LWR at isolate{\algocf at captiontext{#1}{#2}}%
-\LWR at HTML@caption at end%
+    \LWR at HTML@caption at begin{algocf}%
+    \LWR at isolate{\algocf at captiontext{#1}{#2}}%
+    \LWR at HTML@caption at end%
 }
 %    \end{macrocode}
 %
@@ -44312,7 +44601,7 @@
 % Turn off line numbering while making the caption:
 %    \begin{macrocode}
 \long\def\algocf at latexcaption#1[#2]#3{% original definition of caption
-\boolfalse{LWR at algocf@dopars}%  lwarp
+\boolfalse{LWR at algocf@dopars}%      lwarp
   \par%
   \addcontentsline{\csname ext@#1\endcsname}{#1}%
   {\protect\numberline{\csname the#1\endcsname}{\ignorespaces \LWR at isolate{#2}}}%
@@ -44324,7 +44613,7 @@
   \normalsize%
   \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par%
   \endgroup%
-\booltrue{LWR at algocf@dopars}%   lwarp
+\booltrue{LWR at algocf@dopars}%       lwarp
 }
 %    \end{macrocode}
 %
@@ -45003,7 +45292,7 @@
 % \pkg{amsthm} must be loaded before \pkg{mdframed}:
 % \changes{v0.63}{2018/12/01}{\pkg{amsthm}, \pkg{mdframed}: Fix for enforced load order.}
 %    \begin{macrocode}
-\@ifpackageloaded{mdframed}{
+\IfPackageLoadedTF{mdframed}{
     \PackageError{lwarp}
     {%
         Package mdframed must be loaded after package amsthm.\MessageBreak
@@ -45111,7 +45400,7 @@
 %    \end{macrocode}
 % \changes{v0.896}{2021/04/05}{\pkg{amsthm}: Improved back refs.}
 %    \begin{macrocode}
-    \LWR at newautopagelabel{page}%
+    \LWR at newautopagelabel{page}\LWR at orignewline%
 %    \end{macrocode}
 %    \begin{macrocode}
 %   \deferred at thm@head{
@@ -45582,7 +45871,7 @@
 % If \pkg{array} is not yet loaded, remove the default nullfied macros:
 % \changes{v0.901}{2021/08/20}{\pkg{array}: Fixed if \pkg{array} already loaed.}
 %    \begin{macrocode}
-\@ifpackageloaded{array}{}{%
+\IfPackageLoadedTF{array}{}{%
     \let\firsthline\relax
     \let\lasthline\relax
 }
@@ -46117,7 +46406,7 @@
 %
 % Require that \pkg{authblk} be loaded before \pkg{titling}:
 %    \begin{macrocode}
-\@ifpackageloaded{titling}{
+\IfPackageLoadedTF{titling}{
     \PackageError{lwarp-authblk}
         {Package authblk must be loaded before titling}
         {%
@@ -46526,8 +46815,8 @@
 % ^^A %     \LWR at stoppars%
 % ^^A % }
 % ^^A % 
-% ^^A % \@ifpackagewith{backnaur}{perp}{\renewcommand{\bnfes}{\HTMLunicode{27c2}}}{}% \perp
-% ^^A % \@ifpackagewith{backnaur}{epsilon}{\renewcommand{\bnfes}{\HTMLunicode{3f5}}}{}% \epsilon
+% ^^A % \IfPackageLoadedWithOptionsTF{backnaur}{perp}{\renewcommand{\bnfes}{\HTMLunicode{27c2}}}{}% \perp
+% ^^A % \IfPackageLoadedWithOptionsTF{backnaur}{epsilon}{\renewcommand{\bnfes}{\HTMLunicode{3f5}}}{}% \epsilon
 % ^^A %    \end{macrocode}
 %
 %
@@ -46537,16 +46826,16 @@
 \CustomizeMathJax{\newcommand{\bnfpn}[1]{\langle \text{\textrm{#1}} \rangle}}
 \CustomizeMathJax{\newcommand{\bnfor}{\; \mid \;}}
 \CustomizeMathJax{\newcommand{\bnfsp}{\;}}
-\@ifpackagewith{backnaur}{perp}{
+\IfPackageLoadedWithOptionsTF{backnaur}{perp}{
     \CustomizeMathJax{\newcommand{\bnfes}{\perp}}
 }{
-    \@ifpackagewith{backnaur}{epsilon}{
+    \IfPackageLoadedWithOptionsTF{backnaur}{epsilon}{
         \CustomizeMathJax{\newcommand{\bnfes}{\epsilon}}
     }{
         \CustomizeMathJax{\newcommand{\bnfes}{\lambda}}
     }
 }
-\@ifpackagewith{backnaur}{tsrm}{
+\IfPackageLoadedWithOptionsTF{backnaur}{tsrm}{
     \CustomizeMathJax{\newcommand{\bnfts}[1]{\text{#1}}}
 }{
     \CustomizeMathJax{\newcommand{\bnfts}[1]{\text{\texttt{#1}}}}
@@ -46553,7 +46842,7 @@
 }
 \CustomizeMathJax{\newcommand{\bnftd}[1]{\text{\textit{#1}}}}
 \CustomizeMathJax{\newcommand{\bnfsk}{\dots}}
-\@ifpackagewith{backnaur}{altpo}{
+\IfPackageLoadedWithOptionsTF{backnaur}{altpo}{
     \CustomizeMathJax{\newcommand{\bnfpo}{::=}}
 }{
     \CustomizeMathJax{\newcommand{\bnfpo}{\models}}
@@ -47202,7 +47491,7 @@
 
 \xpatchcmd{\blx at addbackref@i}
     {\c at page}
-    {\c at LWR@previousautopagelabel}% refto the most recent object
+    {\c at LWR@previousautopagelabel}% ref to the most recent object
     {}
     {\LWR at patcherror{biblatex}{blx at addbackref@i B}}
 %    \end{macrocode}
@@ -47785,7 +48074,7 @@
 % be removed before loading the actual \pkg{booktabs} definitions.
 % \changes{v0.79}{2019/12/09}{\pkg{booktabs}: Fix for \pkg{memoir} with \env{lateximage}.}
 %    \begin{macrocode}
-\@ifpackageloaded{booktabs}{}{
+\IfPackageLoadedTF{booktabs}{}{
     \LetLtxMacro\toprule\relax
     \LetLtxMacro\midrule\relax
     \LetLtxMacro\cmidrule\cline
@@ -48438,7 +48727,7 @@
 % For \MathJax:
 %    \begin{macrocode}
 \begin{warpMathJax}
-\PackageWarningNoLine{lwarp, cancel}{The MathJax v3 extension will be used}
+\PackageNoteNoLine{lwarp, cancel}{The MathJax v3 extension will be used}
 \CustomizeMathJax{\require{cancel}}
 \end{warpMathJax}
 %    \end{macrocode}
@@ -48613,7 +48902,7 @@
 % \changes{v0.88}{2020/07/15}{\pkg{caption}, \pkg{scrextend}: Fixed \cs{caption*}.}
 %    \begin{macrocode}
 \caption at AtBeginDocument{
-\@ifpackageloaded{lwarp-scrextend}{
+\IfPackageLoadedTF{lwarp-scrextend}{
     \LetLtxMacro\captionbelow\caption
     \LetLtxMacro\captionabove\caption
     \LetLtxMacro\captionofbelow\captionof
@@ -48656,7 +48945,7 @@
 % \begin{noindmacro}{\caption@@@make}
 %   \marg{caption label} \marg{caption text}
 %    \begin{macrocode}
-\@ifpackagelater{caption3}{2020/08/23}{
+\IfPackageAtLeastTF{caption3}{2020/08/23}{
 \renewcommand\caption@@@make[2]{%
 \LWR at traceinfo{caption@@@make}%
 %    \end{macrocode}
@@ -48865,7 +49154,7 @@
 % \codehtml
 %
 %    \begin{macrocode}
-\LWR at ProvidesPackagePass{cases}[2002/05/02]
+\LWR at ProvidesPackagePass{cases}[2020/03/29]
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -48891,6 +49180,36 @@
     \end{lateximage}\end{BlockClass}
 }
 %    \end{macrocode}
+
+% Patch to fix bug for \pkg{cases} when used with \pkg{microtype}:
+% \changes{v0.903}{2022/01/30}{\pkg{cases}: Updated to v3.2.}
+% ^^A *88* Remove the following if microtype is fixed:
+%    \begin{macrocode}
+\makeatletter
+\begin{warpHTML}
+\AtBeginDocument{
+    \@ifpackageloaded{amsmath}
+    {
+        \xpatchcmd{\tagform@}{\leftprotrusion{(}}{(}
+            {}
+            {\LWR at patcherror{cases}{tagform@ A}}%
+        \xpatchcmd{\tagform@}{\rightprotrusion{)}}{)}
+            {}
+            {\LWR at patcherror{cases}{tagform@ B}}%
+    }
+    {
+        \xpatchcmd{\@eqnnum}{\leftprotrusion{(}}{(}
+            {}
+            {\LWR at patcherror{cases}{@eqnnum A}}%
+        \xpatchcmd{\@eqnnum}{\rightprotrusion{)}}{)}
+            {}
+            {\LWR at patcherror{cases}{@eqnnum A}}%
+    }%
+}
+\end{warpHTML}
+\makeatother
+%    \end{macrocode}
+
 %
 % \iffalse
 %</cases>
@@ -49553,7 +49872,7 @@
 %    \begin{macrocode}
 \catcode`\_=11
 
-\@ifpackagelater{chemfig}{2020/03/05}
+\IfPackageAtLeastTF{chemfig}{2020/03/05}
 {
     \xpretocmd\charge{\begin{lateximage}[-chemfig-~\PackageDiagramAltText]}
         {}{\LWR at patcherror{chemfig}{charge}}
@@ -49563,7 +49882,7 @@
         {}{\LWR at patcherror{chemfig}{charge_c}}
 }{}
 
-\@ifpackagelater{chemfig}{2019/04/18}%
+\IfPackageAtLeastTF{chemfig}{2019/04/18}%
 {% 2019/04/18 or newer
 %    \end{macrocode}
 % \changes{v0.896}{2021/03/04}{\pkg{chemfig}: Updated to v1.6a.}
@@ -49702,11 +50021,18 @@
         \boolfalse{mathjax}%
 %    \end{macrocode}
 % An inline image is used, adjusted for the baseline:
+% \changes{v0.903}{2021/12/18}{\pkg{chemformula}: Improved alt tag sanitization.}
 %    \begin{macrocode}
         \LWR at subsingledollar*{% lwarp
-            \textbackslash{}ch\{\LWR at HTMLsanitize{#2}\}% alt text
+            \textbackslash{}%
+            ch%
+            \{%
+                \LWR at HTMLsanitizedetokenized{\detokenize{#2}}%
+            \}% alt text
         }{%
-           \protect\LWR at HTMLsanitize{\detokenize\expandafter{#1}}% add'l hashing
+           \protect\LWR at HTMLsanitizedetokenized{%
+                \detokenize\expandafter{#1}%
+            }% add'l hashing
         }%
         {%
             \chemformula_ch:nn {#1} {#2}%   original
@@ -49720,16 +50046,21 @@
 % \begin{noindmacro}{\chcpd}
 % Similar to \cs{ch}.
 % \changes{v0.77}{2019/10/15}{\pkg{chemformula}: Updated to v4.15.}
+% \changes{v0.903}{2021/12/18}{\pkg{chemformula}: Improved alt tag sanitization.}
 %    \begin{macrocode}
-\@ifpackagelater{chemformula}{2019/10/13}{
+\IfPackageAtLeastTF{chemformula}{2019/10/13}{
 \cs_gset_protected:Npn \chemformula_chcpd:nn #1#2
   {
     \begingroup%
     \boolfalse{mathjax}%
     \LWR at subsingledollar*{% lwarp
-        \textbackslash{}chcpd\{\LWR at HTMLsanitize{#2}\}%
+        \textbackslash{}%
+        chcpd%
+        \{%
+            \LWR at HTMLsanitizedetokenized{\detokenize{#2}}%
+        \}%
     }{%
-        \protect\LWR at HTMLsanitize{\detokenize\expandafter{#1}}%
+        \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#1}}%
     }{% original
     \group_begin:
       \tl_if_blank:nF {#2}
@@ -49753,14 +50084,19 @@
   }
 }% later than 2019/10/13
 {% earlier than 2019/10/13
+% \changes{v0.903}{2021/12/18}{\pkg{chemformula}: Improved alt tag sanitization.}
 \cs_gset_protected:Npn \chemformula_chcpd:nn #1#2
   {
     \begingroup%
     \boolfalse{mathjax}%
     \LWR at subsingledollar*{% lwarp
-        \textbackslash{}chcpd\{\LWR at HTMLsanitize{#2}\}%
+        \textbackslash{}%
+        chcpd%
+        \{%
+            \LWR at HTMLsanitizedetokenized{\detokenize{#2}}%
+        \}%
     }{%
-        \protect\LWR at HTMLsanitize{\detokenize\expandafter{#1}}%
+        \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#1}}%
     }{% original
     \group_begin:
       \tl_if_blank:nF {#2}
@@ -49800,11 +50136,15 @@
 %
 % \begin{noindmacro}{\chname}
 % If standalone, appears in a regular \env{lateximage}, hashed according to contents.
+% \changes{v0.903}{2021/12/18}{\pkg{chemformula}: Improved alt tag sanitization.}
 %    \begin{macrocode}
 \RenewDocumentCommand \chname { R(){}R(){} }
   {
     \begin{lateximage}*[%
-        \textbackslash{}chname(\LWR at HTMLsanitize{#1})(\LWR at HTMLsanitize{#2})
+        \textbackslash{}%
+        chname%
+        (\LWR at HTMLsanitizedetokenized{\detokenize{#1}})%
+        (\LWR at HTMLsanitizedetokenized{\detokenize{#2}})%
     ]*%
         \chemformula_chwritebelow:nn {#1} {#2}
     \end{lateximage}
@@ -49814,6 +50154,7 @@
 %
 % \begin{noindmacro}{\chlewis}
 % Placed inline, hashed according to contents and options.
+% \changes{v0.903}{2021/12/18}{\pkg{chemformula}: Improved alt tag sanitization.}
 %    \begin{macrocode}
 \RenewDocumentCommand \chlewis { O{}mm }
   {
@@ -49821,7 +50162,7 @@
     \boolfalse{mathjax}%
     \LWR at subsingledollar*{\textbackslash{}chlewis\{#2\}\{#3\}}%
     {
-        \protect\LWR at HTMLsanitize{\detokenize\expandafter{#1}}%
+        \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#1}}%
     }{
         \chemformula_lewis:nnn {#1} {#2} {#3}
     }
@@ -50150,6 +50491,7 @@
 %
 % \subsection{Acid-base}
 %
+% \changes{v0.903}{2021/12/18}{\pkg{chemmacros}: Improved alt tag sanitization.}
 %    \begin{macrocode}
 \AtBeginDocument{
 \@ifchemmacrosmoduleloaded{acid-base}{
@@ -50160,9 +50502,14 @@
     \begingroup
     \boolfalse{mathjax}
     \LWR at subsingledollar*{
-        \textbackslash{}p\{\LWR at HTMLsanitize{#1}\}
+        \textbackslash{}%
+        p%
+        \{%
+            \LWR at HTMLsanitizedetokenized{\detokenize{#1}}%
+        \}
     }{
-        chemmacrosp\protect\LWR at HTMLsanitize{\detokenize\expandafter{#1}}%
+        chemmacrosp%
+        \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#1}}%
     }{
     \group_begin:
       \mbox
@@ -50628,6 +50975,7 @@
 %
 % \subsection{Orbital}
 %
+% \changes{v0.903}{2021/12/18}{\pkg{chemmacros}: Improved alt tag sanitization.}
 %    \begin{macrocode}
 \AtBeginDocument{
 \@ifchemmacrosmoduleloaded{orbital}{
@@ -50638,7 +50986,10 @@
     \IfValueTF{#1}
     {
         \begin{lateximage}[%
-            \textbackslash{}orbital{[}\LWR at HTMLsanitize{#1}{]}\{#2\}%
+            \textbackslash{}%
+            orbital{[}%
+            \LWR at HTMLsanitizedetokenized{\detokenize{#1}}%
+            {]}\{#2\}%
         ]*[][margin-left: 1em ; margin-right: 1em]
     }
     {
@@ -50701,6 +51052,7 @@
 %
 % \subsection{Redox}
 %
+% \changes{v0.903}{2021/12/18}{\pkg{chemmacros}: Improved alt tag sanitization.}
 %    \begin{macrocode}
 \AtBeginDocument{
 \@ifchemmacrosmoduleloaded{redox}{
@@ -50720,9 +51072,13 @@
     \IfBooleanTF {#1}
       {
         \LWR at subsingledollar*{% yes hash
-            \textbackslash{}ox*\{\LWR at HTMLsanitize{#3}\}% alt
+            \textbackslash{}%
+            ox*%
+            \{%
+                \LWR at HTMLsanitizedetokenized{\detokenize{#3}}%
+            \}% alt
         }{%
-            star \protect\LWR at HTMLsanitize{\detokenize\expandafter{#2}}%
+            star \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#2}}%
         }{%
             \LWR at chemmacros@ox* {#2} {#3}% contents
         }%
@@ -50729,9 +51085,13 @@
       }
       {
         \LWR at subsingledollar*{% yes hash
-            \textbackslash{}ox*\{\LWR at HTMLsanitize{#3}\}% alt
+            \textbackslash{}%
+            ox*%
+            \{%
+                \LWR at HTMLsanitizedetokenized{\detokenize{#3}}%
+            \}% alt
         }{%
-            \protect\LWR at HTMLsanitize{\detokenize\expandafter{#2}}%
+            \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#2}}%
         }{%
             \LWR at chemmacros@ox {#2} {#3}% contents
         }%
@@ -50999,6 +51359,7 @@
 %
 % \subsection{Thermodynamics}
 %
+% \changes{v0.903}{2021/12/18}{\pkg{chemmacros}: Improved alt tag sanitization.}
 %    \begin{macrocode}
 \AtBeginDocument{
 \@ifchemmacrosmoduleloaded{thermodynamics}{
@@ -51010,7 +51371,8 @@
       \boolfalse{mathjax}
       \chemmacros_set_keys:nn {thermodynamics} {#1}
         \LWR at subsingledollar*{% yes hashing
-            \textbackslash{}state\{\LWR at HTMLsanitize{#2}\}% alt
+            \textbackslash{}state%
+            \{\LWR at HTMLsanitizedetokenized{\detokenize{#2}}\}% alt
         }{%
             chemmacros_state% add'l hashing
             #1% options
@@ -51343,7 +51705,7 @@
 %
 % \codehtml
 %    \begin{macrocode}
-\@ifpackageloaded{xeCJK}{}{
+\IfPackageLoadedTF{xeCJK}{}{
     \LWR at loadnever{CJK}{ctex, xeCJK}
 }
 
@@ -51372,7 +51734,7 @@
 %
 % \codehtml
 %    \begin{macrocode}
-\@ifpackageloaded{xeCJK}{}{
+\IfPackageLoadedTF{xeCJK}{}{
     \LWR at loadnever{CJKutf8}{ctex, xeCJK}
 }
 
@@ -51629,7 +51991,7 @@
 % If \pkg{hyperref} is loaded, \pkg{cleveref} also defines starred versions
 % of \pkg{varioref} macros, so they are defined here.
 %    \begin{macrocode}
-\@ifpackageloaded{varioref}{
+\IfPackageLoadedTF{varioref}{
     \LWR at absorbstar{vref}
     \LWR at absorbstar{Vref}
     \LWR at absorbstar{vrefrange}
@@ -51642,7 +52004,7 @@
 %
 % \changes{v0.896}{2021/04/07}{\pkg{cleveref}: Undo \pkg{memoir} changes.}
 %    \begin{macrocode}
-\@ifclassloaded{memoir}{
+\IfClassLoadedTF{memoir}{
 \AtBeginDocument{
 \def\sf at memsub@label(#1)#2{%
   \protected at edef\mem at currentlabelname{#1}%
@@ -51653,7 +52015,7 @@
 %
 % \changes{v0.896}{2021/04/07}{\pkg{cleveref}: Undo \pkg{subfig} changes.}
 %    \begin{macrocode}
-\@ifpackageloaded{subfig}{
+\IfPackageLoadedTF{subfig}{
 \def\sf at sub@label(#1)#2{%
   \ifhyperrefloaded
     \protected at edef\@currentlabelname{%
@@ -51773,7 +52135,7 @@
 
 \begin{warpMathJax}
 
-\@ifpackagewith{cmbright}{slantedGreek}
+\IfPackageLoadedWithOptionsTF{cmbright}{slantedGreek}
 {
     \LWR at mathjax@addgreek at u@it*{}{}
 }
@@ -51906,6 +52268,13 @@
 \RequirePackage{xcolor}
 %    \end{macrocode}
 %
+% \cs{color at endgroup}'s \cs{endgraf} was conflicting with \pkg{lwarp}'s
+% paragraph handling.
+% \changes{v0.903}{2021/12/13}{\pkg{color}: Par handling.}
+%    \begin{macrocode}
+\let\color at endgroup\endgroup
+%    \end{macrocode}
+%
 % \iffalse
 %</color>
 % \fi
@@ -52385,16 +52754,19 @@
 % \pkg{cuted} is ignored.
 %
 % \changes{v0.40}{2017/09/07}{\pkg{cuted}: Added.}
+% \changes{v0.903}{2021/10/12}{\pkg{cuted}: Updated to v2.0.}
 %
 % \codehtml
 %
 %    \begin{macrocode}
-\LWR at ProvidesPackageDrop{cuted}[2012/10/04]
+\LWR at ProvidesPackageDrop{cuted}[2021/10/04]
 %    \end{macrocode}
 %
 %    \begin{macrocode}
 \newenvironment{strip}{}{}
 \newskip\stripsep
+\newtoks\preCutedStrip \preCutedStrip{}
+\newtoks\postCutedStrip \postCutedStrip{}
 \def\oldcolsbreak#1{}
 %    \end{macrocode}
 %
@@ -53714,6 +54086,14 @@
 \def\makeenmark{\@makeenmark}
 %    \end{macrocode}
 %
+% To nullify the endnotes:
+% \changes{v0.903}{2021/12/28}{\pkg{endnotes}: Nullify endnotes.}
+%    \begin{macrocode}
+\apptocmd{\LWR at nullifyfootnotes}{%
+    \renewcommand{\endnote}[2][]{}%
+    \renewcommand{\endnotemark}[1]{}%
+}{}{}
+%    \end{macrocode}
 %
 % For \MathJax:
 % \changes{v0.82}{2020/03/14}{\pkg{endnotes}: Added \MathJax\ emulation.}
@@ -55335,9 +55715,9 @@
 %
 %    \begin{macrocode}
 \renewcommand{\GenericCaption}[1]{%
-\LWR at figcaption%
-\LWR at isolate{#1}%
-\endLWR at figcaption%
+    \LWR at figcaption%
+    \LWR at isolate{#1}%
+    \endLWR at figcaption%
 }
 %    \end{macrocode}
 %
@@ -55365,7 +55745,7 @@
 %
 %    \begin{macrocode}
 \AtBeginEnvironment{LWR at nestspan}{%
-\RenewDocumentEnvironment{Btrivlist}{m o}{}{}%
+    \RenewDocumentEnvironment{Btrivlist}{m o}{}{}%
 }
 %    \end{macrocode}
 %
@@ -55396,17 +55776,45 @@
 % \changes{v0.51}{2018/03/17}{\pkg{fancybox}: Fix: Optional tag for \cs{item} in a span.}
 %    \begin{macrocode}
 \RenewDocumentCommand{\LWR at nestspanitem}{d()}{%
-\if at newlist\else{\LWR at htmltagc{br /}}\fi%
-\LWR at origitem%
+    \if at newlist\else{
+        \LWR at htmltagc{br /}%
+        \LWR at orignewline%
+    }\fi%
+    \LWR at origitem%
 }
 %    \end{macrocode}
 %
 % The various boxed lists become regular lists:
 %
+% \changes{v0.903}{2022/01/29}{\pkg{fancybox}: Par handling.}
+% \changes{v0.903}{2022/01/29}{\pkg{fancybox}: Warn if span.}
 %    \begin{macrocode}
-\renewenvironment{Bitemize}[1][]{\begin{itemize}}{\end{itemize}}
-\renewenvironment{Benumerate}[1][]{\begin{enumerate}}{\end{enumerate}}
-\renewenvironment{Bdescription}[1][]{\begin{description}}{\end{description}}
+\renewenvironment{Bitemize}[1][]
+    {%
+        \LWR at spanwarnformat{Bitemize}%
+        \booltrue{LWR at starting@fancybox}%
+        \begin{itemize}%
+        \boolfalse{LWR at starting@fancybox}%
+    }
+    {\end{itemize}}
+
+\renewenvironment{Benumerate}[1][]
+    {%
+        \LWR at spanwarnformat{Benumerate}%
+        \booltrue{LWR at starting@fancybox}%
+        \begin{enumerate}%
+        \boolfalse{LWR at starting@fancybox}%
+    }
+    {\end{enumerate}}
+
+\renewenvironment{Bdescription}[1][]
+    {%
+        \LWR at spanwarnformat{Bdescription}%
+        \booltrue{LWR at starting@fancybox}%
+        \begin{description}%
+        \boolfalse{LWR at starting@fancybox}%
+    }
+    {\end{description}}
 %    \end{macrocode}
 %
 % \cs{boxput} simply prints one then the other argument,
@@ -55414,7 +55822,7 @@
 %
 %    \begin{macrocode}
 \RenewDocumentCommand{\boxput}{s d() m m}{%
-\IfBooleanTF{#1}{#3\quad#4}{#4\quad#3}%
+    \IfBooleanTF{#1}{#3\quad#4}{#4\quad#3}%
 }
 %    \end{macrocode}
 %
@@ -55438,24 +55846,24 @@
 %    \begin{macrocode}
 \let\LWRFB at UseVerbatim\UseVerbatim
 \renewcommand*{\UseVerbatim}[1]{%
-\LWR at atbeginverbatim{Verbatim}%
-\LWRFB at UseVerbatim{#1}%
-\LWR at afterendverbatim%
+    \LWR at atbeginverbatim{Verbatim}%
+    \LWRFB at UseVerbatim{#1}%
+    \LWR at afterendverbatim%
 }
 
 \let\LWRFB at LUseVerbatim\LUseVerbatim
 
 \renewcommand*{\LUseVerbatim}[1]{%
-\LWR at atbeginverbatim{LVerbatim}%
-\noindent%
-\LWRFB at LUseVerbatim{#1}%
-\LWR at afterendverbatim%
+    \LWR at atbeginverbatim{LVerbatim}%
+    \noindent%
+    \LWRFB at LUseVerbatim{#1}%
+    \LWR at afterendverbatim%
 }
 
 \def\@BUseVerbatim[#1]#2{%
-\LWR at atbeginverbatim{BVerbatim}%
-\LWRFB at UseVerbatim{#2}%
-\LWR at afterendverbatim%
+    \LWR at atbeginverbatim{BVerbatim}%
+    \LWRFB at UseVerbatim{#2}%
+    \LWR at afterendverbatim%
 }
 %    \end{macrocode}
 %
@@ -55653,6 +56061,7 @@
 \LWR at ProvidesPackagePass{fancyref}[1999/02/03]
 %    \end{macrocode}
 %
+% \DescribeHook[fancyref]{\cs{fancyrefhook}}
 % To remove the \optn{margin} option, if \cs{fancyrefhook} is anything
 % other than the \optn{paren} option, then force it to the default instead.
 % (Comparing to the \optn{margin} option was not possible since \pkg{lwarp} has
@@ -57053,7 +57462,7 @@
 \newbool{LWR at subcaptionloaded}
 
 \AtBeginDocument{
-\@ifpackageloaded{subcaption}
+\IfPackageLoadedTF{subcaption}
     {\booltrue{LWR at subcaptionloaded}}
     {\boolfalse{LWR at subcaptionloaded}}
 }
@@ -57411,12 +57820,13 @@
 % \DescribePackage{flushend} \pkg{flushend} is ignored.
 %
 % \changes{v0.34}{2017/07/27}{\pkg{flushend}: Added.}
+% \changes{v0.903}{2021/10/12}{\pkg{flushend}: Updated to v4.0.}
 %
 % \codehtml
 %
 % Discard all options for \pkg{lwarp-flushend}:
 %    \begin{macrocode}
-\LWR at ProvidesPackageDrop{flushend}[2017/03/27]
+\LWR at ProvidesPackageDrop{flushend}[2021/10/04]
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -57424,8 +57834,8 @@
 \newcommand*{\raggedend}{}
 \newcommand*{\flushcolsend}{}
 \newcommand*{\raggedcolsend}{}
-\newcommand*{\atColsBreak}[1]{}
-\newcommand*{\atColsEnd}[1]{}
+\newtoks\atColsBreak \atColsBreak={}
+\newtoks\atColsEnd   \atColsEnd={}
 \newcommand*{\showcolsendrule}{}
 %    \end{macrocode}
 %
@@ -58035,7 +58445,10 @@
   \begingroup%
     \let\@makefntext\@empty%
     \let\@finalstrut\@gobble%
-    \LetLtxMacro\rule\@gobbletwo% *8* also the optional argument?
+%    \end{macrocode}
+% ^^A  *8* In the following line, also the optional argument?
+%    \begin{macrocode}
+    \LetLtxMacro\rule\@gobbletwo%
     \booltrue{LWR at spewingnotes}%    lwarp
     \@footnotetext{\unvbox\z@}%
   \endgroup%
@@ -58339,13 +58752,13 @@
 
 \begin{warpMathJax}
 
-\@ifpackagewith{fourier}{sloped}
+\IfPackageLoadedWithOptionsTF{fourier}{sloped}
     {
         \LWR at mathjax@addgreek at l@up{other}{}
         \LWR at mathjax@addgreek at u@it*{other}{}
     }% sloped
     {% not sloped
-        \@ifpackagewith{fourier}{upright}
+        \IfPackageLoadedWithOptionsTF{fourier}{upright}
             {% upright option
                 \LWR at mathjax@addgreek at l@up{}{}
                 \LWR at mathjax@addgreek at u@up*{}{}
@@ -58431,60 +58844,66 @@
 % Accept all options for \pkg{lwarp-framed}:
 %    \begin{macrocode}
 \LWR at ProvidesPackagePass{framed}[2011/10/22]
+
 \AtBeginDocument{\RequirePackage{xcolor}}% for \convertcolorspec
 %    \end{macrocode}
 
 
 %    \begin{macrocode}
-
-\renewenvironment{framed}{%
-\LWR at forcenewpage
-\BlockClass{framed}%
+\renewenvironment{framed}
+{%
+    \LWR at forcenewpage
+    \BlockClass{framed}%
 }
 {\endBlockClass}
 
-\renewenvironment{oframed}{%
-\LWR at forcenewpage
-\BlockClass{framed}%
+\renewenvironment{oframed}
+{%
+    \LWR at forcenewpage
+    \BlockClass{framed}%
 }
 {\endBlockClass}
 
 
-\renewenvironment{shaded}{%
-\convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
-\LWR at forcenewpage
-\BlockClass[background: \LWR at origpound\LWR at tempcolor]{shaded}%
+\renewenvironment{shaded}
+{%
+    \convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
+    \LWR at forcenewpage
+    \BlockClass[background: \LWR at origpound\LWR at tempcolor]{shaded}%
 }
 {\endBlockClass}
 
-\renewenvironment{shaded*}{%
-\convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
-\LWR at forcenewpage
-\BlockClass[background: \LWR at origpound\LWR at tempcolor]{shaded}%
+\renewenvironment{shaded*}
+{%
+    \convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
+    \LWR at forcenewpage
+    \BlockClass[background: \LWR at origpound\LWR at tempcolor]{shaded}%
 }
 {\endBlockClass}
 
 
 \renewenvironment{leftbar}{%
-\LWR at forcenewpage
+    \LWR at forcenewpage
     \BlockClass{framedleftbar}
-  \def\FrameCommand{}%
-  \MakeFramed {}
+    \def\FrameCommand{}%
+    \MakeFramed {}
 }%
- {\endMakeFramed\endBlockClass}
+{\endMakeFramed\endBlockClass}
 
 
-\renewenvironment{snugshade}{%
-\convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
-\LWR at forcenewpage
-\BlockClass[background: \LWR at origpound\LWR at tempcolor]{snugframed}%
+\renewenvironment{snugshade}
+{%
+    \convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
+    \LWR at forcenewpage
+    \BlockClass[background: \LWR at origpound\LWR at tempcolor]{snugframed}%
 }
 {\endBlockClass}
 
-\renewenvironment{snugshade*}{%
-\convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
-\LWR at forcenewpage
-\BlockClass[background: \LWR at origpound\LWR at tempcolor]{snugframed}%
+\renewenvironment{snugshade*}
+{%
+    \convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
+    \LWR at forcenewpage
+    \BlockClass[background: \LWR at origpound\LWR at tempcolor]{snugframed}%
 }
 {\endBlockClass}
 
@@ -58493,47 +58912,49 @@
 
 
 \RenewEnviron{titled-frame}[1]{%
-\CustomFBox{#1}{}{0pt}{0pt}{0pt}{0pt}{\BODY}
+    \CustomFBox{#1}{}{0pt}{0pt}{0pt}{0pt}{\BODY}
 }
 %    \end{macrocode}
 
 
 
-% \cs{CustomFBox} \marg{toptitle} \marg{bottitle}
+% \begin{noindmacro}{\CustomFBox} \marg{toptitle} \marg{bottitle}
 %	\marg{thicknesstop} \marg{bottom} \marg{left} \marg{right}
 %	\marg{text contents}
 %    \begin{macrocode}
 \renewcommand{\CustomFBox}[7]{%
-\convertcolorspec{named}{TFFrameColor}{HTML}\LWR at tempcolor%
-\LWR at forcenewpage
-\begin{BlockClass}[border: 3px solid \LWR at origpound\LWR at tempcolor]{framed}%
-\ifthenelse{\isempty{#1}}{}{% not empty
-    \begin{BlockClass}[background: \LWR at origpound\LWR at tempcolor]{framedtitle}%
-    \textcolor{TFTitleColor}{\textbf{#1}}%
-    \end{BlockClass}
-}% not empty
+    \convertcolorspec{named}{TFFrameColor}{HTML}\LWR at tempcolor%
+    \LWR at forcenewpage
+    \begin{BlockClass}[border: 3px solid \LWR at origpound\LWR at tempcolor]{framed}%
+    \ifthenelse{\isempty{#1}}{}{% not empty
+        \begin{BlockClass}[background: \LWR at origpound\LWR at tempcolor]{framedtitle}%
+        \textcolor{TFTitleColor}{\textbf{#1}}%
+        \end{BlockClass}%
+    }% not empty
 
-#7
+    #7
 
-\ifthenelse{\isempty{#2}}{}{% not empty
-    \convertcolorspec{named}{TFFrameColor}{HTML}\LWR at tempcolor%
-    \begin{BlockClass}[background: \LWR at origpound\LWR at tempcolor]{framedtitle}%
-    \textcolor{TFTitleColor}{\textbf{#2}}%
-    \end{BlockClass}
-}% not empty
-\end{BlockClass}
+    \ifthenelse{\isempty{#2}}{}{% not empty
+        \convertcolorspec{named}{TFFrameColor}{HTML}\LWR at tempcolor%
+        \begin{BlockClass}[background: \LWR at origpound\LWR at tempcolor]{framedtitle}%
+        \textcolor{TFTitleColor}{\textbf{#2}}%
+        \end{BlockClass}%
+    }% not empty
+    \end{BlockClass}%
 }
 %    \end{macrocode}
+% \end{noindmacro}
 
-% \cs{TitleBarFrame} \oarg{marker} \marg{title} \marg{contents}
+% \begin{noindmacro}{\TitleBarFrame} \oarg{marker} \marg{title} \marg{contents}
 %    \begin{macrocode}
-\renewcommand\TitleBarFrame[3][]{
-\CustomFBox
-    {#2}{}%
-    \fboxrule\fboxrule\fboxrule\fboxrule
-    {#3}%
+\renewcommand\TitleBarFrame[3][]{%
+    \CustomFBox%
+        {#2}{}%
+        \fboxrule\fboxrule\fboxrule\fboxrule%
+        {#3}%
 }
 %    \end{macrocode}
+% \end{noindmacro}
 
 
 %    \begin{macrocode}
@@ -58541,24 +58962,26 @@
 %    \end{macrocode}
 
 
-% \env{MakeFramed} \marg{settings}
+% \begin{noindenvironment}{MakeFramed} \marg{settings}
 %    \begin{macrocode}
 \let\MakeFramed\relax
 \let\endMakeFramed\relax
 
 \NewEnviron{MakeFramed}[1]{%
-\FrameCommand{\begin{minipage}{\linewidth}\BODY\end{minipage}}%
+    \FrameCommand{\begin{minipage}{\linewidth}\BODY\end{minipage}}%
 }
 %    \end{macrocode}
+% \end{noindenvironment}
 
 
-% \cs{fb at put@frame} \marg{frame cmd no split} \marg{frame cmd split}
+% \begin{noindmacro}{\fb at put@frame} \marg{frame cmd no split} \marg{frame cmd split}
 %    \begin{macrocode}
 \renewcommand*{\fb at put@frame}[2]{%
-\relax%
-\@tempboxa%
+    \relax%
+    \@tempboxa%
 }
 %    \end{macrocode}
+% \end{noindmacro}
 
 % \iffalse
 %</framed>
@@ -59637,7 +60060,7 @@
 %    \begin{macrocode}
 \define at key{igraph}{scale}{%
     \ifthenelse{\equal{#1}{1}}{}{%  must expand #1
-        \PackageWarning{lwarp}{%
+        \PackageNote{lwarp}{%
             It is recommended to use ``[width=xx\protect\linewidth]''\MessageBreak
             instead of ``[scale=yy]'',%
         }%
@@ -59755,10 +60178,10 @@
 % which is enabled inside a \env{lateximage}.
 % \changes{v0.42}{2017/10/24}{\pkg{graphics}: Fix: Class key.}
 % \changes{v0.65}{2018/12/19}{\pkg{graphics}: Added \cs{includegraphics} \attribute{alt} key.}
+% \changes{v0.903}{2021/12/23}{\pkg{graphics}: \attribute{alt} now in \pkg{graphicx} core.}
 %    \begin{macrocode}
 \AtBeginDocument{
 \define at key{Gin}{class}{}
-\define at key{Gin}{alt}{}
 }
 %    \end{macrocode}
 
@@ -59770,7 +60193,7 @@
 % converts \EPS\ to \PDF, and the following must NOT be done.
 %    \begin{macrocode}
 \AtBeginDocument{
-\@ifpackageloaded{epstopdf}
+\IfPackageLoadedTF{epstopdf}
 {
     \newcommand*{\LWR at replaceEPSSVG}{}
 }{%
@@ -60650,7 +61073,7 @@
 %
 %
 %    \begin{macrocode}
-\@ifclassloaded{memoir}{
+\IfClassLoadedTF{memoir}{
 \let\hangpara\relax
 \let\hangparas\relax
 \let\endhangparas\relax
@@ -62908,7 +63331,7 @@
 %    \begin{macrocode}
 \LWR at ProvidesPackagePass{keyfloat}[2019/09/23]
 
-\@ifpackagelater{keyfloat}{2019/09/23}{\relax}{
+\IfPackageAtLeastTF{keyfloat}{2019/09/23}{\relax}{
     \PackageError{lwarp-keyfloat}
     {%
         The keyfloat package is out of date.\MessageBreak
@@ -62925,10 +63348,13 @@
 %    \begin{macrocode}
 \AtBeginDocument{
 %    \end{macrocode}
+
+% \DescribeHook[keyfloat]{\cs{KFLT at LWR@hook at boxouter}} Integration for \pkg{keyfloat}.
 %
 % \changes{v0.75}{2019/09/12}{\pkg{keyfloat}: Fix: \cs{normalcolor}.}
 %    \begin{macrocode}
 \providecommand*{\KFLT at LWR@hook at boxouter}{}
+
 \renewcommand*{\KFLT at LWR@hook at boxouter}{%
     \ifbool{KFLT at keywrap}{%
     }{%
@@ -62942,15 +63368,21 @@
 }
 %    \end{macrocode}
 %
+% \DescribeHook[keyfloat]{\cs{KFLT at LWR@hook at keysubfloats}} Integration for \pkg{keyfloat}.
+%
 % \changes{v0.75}{2019/09/12}{\pkg{keyfloat}: Fix: \cs{normalcolor}.}
 %    \begin{macrocode}
 \LetLtxMacro\KFLT at LWR@hook at keysubfloats\KFLT at LWR@hook at boxouter
-
+%    \end{macrocode}
+%
+% \DescribeHook[keyfloat]{\cs{KFLT at LWR@hook at keyfloatsminipage}} Integration for \pkg{keyfloat}.
+%    \begin{macrocode}
 \let\KFLT at LWR@hook at keyfloatsminipage\relax
 \let\endKFLT at LWR@hook at keyfloatsminipage\relax
 \newenvironment*{KFLT at LWR@hook at keyfloatsminipage}[1]{}{}
 %    \end{macrocode}
 %
+% \DescribeHook[keyfloat]{\cs{KFLT at LWR@hook at keyfloats}} Integration for \pkg{keyfloat}.
 % \changes{v0.75}{2019/09/12}{\pkg{keyfloat}: Fix: \cs{normalcolor}.}
 %    \begin{macrocode}
 \LetLtxMacro\KFLT at LWR@hook at keyfloats\KFLT at LWR@hook at boxouter
@@ -63131,7 +63563,7 @@
     }% text to add
 }
 
-\@ifpackageloaded{tocdata}
+\IfPackageLoadedTF{tocdata}
 {}
 {% tocdata not loaded
 
@@ -63518,18 +63950,50 @@
 \CustomizeMathJax{\let\variiiint\iiiint}
 \CustomizeMathJax{\let\varidotsint\idotsint}
 
-\CustomizeMathJax{\newcommand{\varointctrclockwise}{\mathop{\unicode{x2939}\!\!\unicode{x0222E}}}}
-\CustomizeMathJax{\newcommand{\oiintclockwise}{\mathop{\unicode{x0222F}\!\!\unicode{x2938}}}}
-\CustomizeMathJax{\newcommand{\oiintctrclockwise}{\mathop{\unicode{x2939}\!\!\unicode{x0222F}}}}
-\CustomizeMathJax{\newcommand{\varoiintclockwise}{\mathop{\unicode{x0222F}\!\!\unicode{x2938}}}}
-\CustomizeMathJax{\newcommand{\varoiintctrclockwise}{\mathop{\unicode{x2939}\!\!\unicode{x0222F}}}}
-\CustomizeMathJax{\newcommand{\oiiintclockwise}{\mathop{\unicode{x02230}\!\!\unicode{x2938}}}}
-\CustomizeMathJax{\newcommand{\oiiintctrclockwise}{\mathop{\unicode{x2939}\!\!\unicode{x02230}}}}
-\CustomizeMathJax{\newcommand{\varoiiintclockwise}{\mathop{\unicode{x02230}\!\!\unicode{x2938}}}}
-\CustomizeMathJax{\newcommand{\varoiiintctrclockwise}{\mathop{\unicode{x2939}\!\!\unicode{x02230}}}}
-\CustomizeMathJax{\newcommand{\sqiint}{\mathop{\unicode{x2A16}\!\!\unicode{x2A16}}}}
-\CustomizeMathJax{\newcommand{\sqiiint}{\mathop{\unicode{x2A16}\!\!\unicode{x2A16}\!\!\unicode{x2A16}}}}
+\CustomizeMathJax{\newcommand{\varointctrclockwise}{%
+    \mathop{\unicode{x2939}\!\!\unicode{x0222E}}%
+}}
 
+\CustomizeMathJax{\newcommand{\oiintclockwise}{%
+    \mathop{\unicode{x0222F}\!\!\unicode{x2938}}%
+}}
+
+\CustomizeMathJax{\newcommand{\oiintctrclockwise}{%
+    \mathop{\unicode{x2939}\!\!\unicode{x0222F}}%
+}}
+
+\CustomizeMathJax{\newcommand{\varoiintclockwise}{%
+    \mathop{\unicode{x0222F}\!\!\unicode{x2938}}%
+}}
+
+\CustomizeMathJax{\newcommand{\varoiintctrclockwise}{%
+    \mathop{\unicode{x2939}\!\!\unicode{x0222F}}%
+}}
+
+\CustomizeMathJax{\newcommand{\oiiintclockwise}{%
+    \mathop{\unicode{x02230}\!\!\unicode{x2938}}%
+}}
+
+\CustomizeMathJax{\newcommand{\oiiintctrclockwise}{%
+    \mathop{\unicode{x2939}\!\!\unicode{x02230}}%
+}}
+
+\CustomizeMathJax{\newcommand{\varoiiintclockwise}{%
+    \mathop{\unicode{x02230}\!\!\unicode{x2938}}%
+}}
+
+\CustomizeMathJax{\newcommand{\varoiiintctrclockwise}{%
+    \mathop{\unicode{x2939}\!\!\unicode{x02230}}%
+}}
+
+\CustomizeMathJax{\newcommand{\sqiint}{%
+    \mathop{\unicode{x2A16}\!\!\unicode{x2A16}}%
+}}
+
+\CustomizeMathJax{\newcommand{\sqiiint}{%
+    \mathop{\unicode{x2A16}\!\!\unicode{x2A16}\!\!\unicode{x2A16}}%
+}}
+
 \CustomizeMathJax{\let\widearc\overparen}
 \CustomizeMathJax{\let\widearcarrow\overrightarrow}
 \CustomizeMathJax{\let\overrightarc\overrightarrow}
@@ -64535,8 +64999,16 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\SetLipsumParListItemEnd{\LWR at closeparagraph}
+\SetLipsumParListItemEnd{%
+    \LWR at closeparagraph%
 %    \end{macrocode}
+% \changes{v0.903}{2021/12/13}{\pkg{lipsum}: Par handling.}
+%    \begin{macrocode}
+    \leavevmode\LWR at orignewline%
+%    \end{macrocode}
+%    \begin{macrocode}
+}
+%    \end{macrocode}
 %
 % \iffalse
 %</lipsum>
@@ -66572,17 +67044,26 @@
 % and some bold fonts may not be not supported by \MathJax.
 %
 % \changes{v0.89}{2020/08/31}{\pkg{mathalpha}: Added.}
+% \changes{v0.903}{2021/12/23}{\pkg{mathalpha}: Updated for v1.14+.}
 %
 % \codehtml
 %
 %    \begin{macrocode}
-\LWR at ProvidesPackagePass{mathalpha}[2019/10/05]
+\LWR at ProvidesPackagePass{mathalpha}[2021/11/18]
 
 \begin{warpMathJax}
+\CustomizeMathJax{\newcommand{\mathbfbb}[1]{\boldsymbol{\mathbb{#1}}}}% not bold
+\CustomizeMathJax{\newcommand{\mathbfcal}[1]{\boldsymbol{\mathcal{#1}}}}
+\CustomizeMathJax{\newcommand{\mathbffrak}[1]{\boldsymbol{\mathfrak{#1}}}}
+\CustomizeMathJax{\newcommand{\mathbfscr}[1]{\boldsymbol{\mathscr{#1}}}}% not bold
+
+\IfPackageLoadedWithOptionsTF{mathalpha}{oldbold}
+{
 \CustomizeMathJax{\newcommand{\mathbbb}[1]{\boldsymbol{\mathbb{#1}}}}% not bold
 \CustomizeMathJax{\newcommand{\mathbcal}[1]{\boldsymbol{\mathcal{#1}}}}
 \CustomizeMathJax{\newcommand{\mathbfrak}[1]{\boldsymbol{\mathfrak{#1}}}}
 \CustomizeMathJax{\newcommand{\mathbscr}[1]{\boldsymbol{\mathscr{#1}}}}% not bold
+}{}
 \end{warpMathJax}
 %    \end{macrocode}
 %
@@ -67009,7 +67490,7 @@
 \begin{warpMathJax}
 \LWR at infoprocessingmathjax{mathptmx}
 
-\@ifpackagewith{mathptmx}{slantedGreek}
+\IfPackageLoadedWithOptionsTF{mathptmx}{slantedGreek}
     {\LWR at mathjax@addgreek at u@it*{}{}}
     {}
 
@@ -68587,26 +69068,34 @@
 % The new definition, called from the new \cs{ce} after math shift is set.
 % The starred \env{lateximage} uses a hashed filename for the \SVG\ image.
 % The \attribute{alt} tag is set to the \pkg{mhchem} expression.
+% \changes{v0.903}{2021/12/18}{\pkg{mhchem}: Improved alt tag sanitization.}
 %    \begin{macrocode}
 \newcommand{\LWR at mhchem@HTML at ce}[1]{%
-\LWR at findcurrenttextcolor% sets \LWR at tempcolor
-\ifbool{LWR at xfakebold}%
-    {\def\LWR at tempone{Y}}%
-    {\def\LWR at tempone{N}}%
-\begin{lateximage}*[\textbackslash{}ce\{\LWR at HTMLsanitize{#1}\}]*%
-    [%
-        FM\LWR at f@family%
-        SR\LWR at f@series%
-        SH\LWR at f@shape%
-        SHC\LWR at f@shapecaps%
-        CL\LWR at tempcolor%
-        FB\LWR at tempone% xfakebold
-    ]%
-\LWR at setcurrentfont%
-\LWR at mhchem@origce{#1}%
-\end{lateximage}%
-\endgroup%
-\addtocounter{LWR at mhchem@cedepth}{-1}%
+    \LWR at findcurrenttextcolor% sets \LWR at tempcolor
+    \ifbool{LWR at xfakebold}%
+        {\def\LWR at tempone{Y}}%
+        {\def\LWR at tempone{N}}%
+    \begin{lateximage}%
+        *%
+        [%
+            \textbackslash{}%
+            ce%
+            \{\LWR at HTMLsanitizedetokenized{\detokenize{#1}}\}%
+        ]%
+        *%
+        [%
+            FM\LWR at f@family%
+            SR\LWR at f@series%
+            SH\LWR at f@shape%
+            SHC\LWR at f@shapecaps%
+            CL\LWR at tempcolor%
+            FB\LWR at tempone% xfakebold
+        ]%
+    \LWR at setcurrentfont%
+    \LWR at mhchem@origce{#1}%
+    \end{lateximage}%
+    \endgroup%
+    \addtocounter{LWR at mhchem@cedepth}{-1}%
 }
 %    \end{macrocode}
 
@@ -68619,12 +69108,12 @@
 % The new \cs{ce}.  Sets math shift then continues.
 %    \begin{macrocode}
 \renewcommand{\ce}{%
-\begingroup%
-\ifnumequal{\value{LWR at mhchem@cedepth}}{0}{%
-    \catcode`\$=3% math shift
-}{}%
-\addtocounter{LWR at mhchem@cedepth}{1}%
-\LWR at mhchem@HTML at ce%
+    \begingroup%
+    \ifnumequal{\value{LWR at mhchem@cedepth}}{0}{%
+        \catcode`\$=3% math shift
+    }{}%
+    \addtocounter{LWR at mhchem@cedepth}{1}%
+    \LWR at mhchem@HTML at ce%
 }
 %    \end{macrocode}
 
@@ -68636,26 +69125,34 @@
 % The new definition, called from the new \cs{cesplit} after math shift is set.
 % The starred \env{lateximage} uses a hashed filename for the \SVG\ image.
 % The \attribute{alt} tag is set to the \pkg{mhchem} expression.
+% \changes{v0.903}{2021/12/18}{\pkg{chemmacros}: Improved alt tag sanitization.}
 %    \begin{macrocode}
 \newcommand*{\LWR at mhchem@HTML at cesplit}[2]
 {%
-\LWR at findcurrenttextcolor% sets \LWR at tempcolor
-\ifbool{LWR at xfakebold}%
-    {\def\LWR at tempone{Y}}%
-    {\def\LWR at tempone{N}}%
-\begin{lateximage}*[\textbackslash{}cesplit\{\LWR at HTMLsanitize{#2}\}]*%
-    [%
-        FM\LWR at f@family%
-        SR\LWR at f@series%
-        SH\LWR at f@shape%
-        SHC\LWR at f@shapecaps%
-        CL\LWR at tempcolor%
-        FB\LWR at tempone% xfakebold
-    ]%
-\LWR at setcurrentfont%
-\LWR at mhchem@origcesplit{#1}{#2}%
-\end{lateximage}%
-\endgroup%
+    \LWR at findcurrenttextcolor% sets \LWR at tempcolor
+    \ifbool{LWR at xfakebold}%
+        {\def\LWR at tempone{Y}}%
+        {\def\LWR at tempone{N}}%
+    \begin{lateximage}%
+        *%
+        [%
+            \textbackslash{}%
+            cesplit%
+            \{\LWR at HTMLsanitizedetokenized{\detokenize{#2}}\}%
+        ]%
+        *%
+        [%
+            FM\LWR at f@family%
+            SR\LWR at f@series%
+            SH\LWR at f@shape%
+            SHC\LWR at f@shapecaps%
+            CL\LWR at tempcolor%
+            FB\LWR at tempone% xfakebold
+        ]%
+    \LWR at setcurrentfont%
+    \LWR at mhchem@origcesplit{#1}{#2}%
+    \end{lateximage}%
+    \endgroup%
 }
 %    \end{macrocode}
 
@@ -68668,12 +69165,12 @@
 % The new \cs{cesplit}.  Sets math shift then continues.
 %    \begin{macrocode}
 \renewcommand{\cesplit}{%
-\begingroup%
-\ifnumequal{\value{LWR at mhchem@cesplitdepth}}{0}{%
-    \catcode`\$=3% math shift
-}{}%
-\addtocounter{LWR at mhchem@cesplitdepth}{1}%
-\LWR at mhchem@HTML at cesplit%
+    \begingroup%
+    \ifnumequal{\value{LWR at mhchem@cesplitdepth}}{0}{%
+        \catcode`\$=3% math shift
+    }{}%
+    \addtocounter{LWR at mhchem@cesplitdepth}{1}%
+    \LWR at mhchem@HTML at cesplit%
 }
 %    \end{macrocode}
 
@@ -68740,7 +69237,7 @@
 \DeclareDocumentCommand{\microtypesetup}{m}{}
 \DeclareDocumentCommand{\microtypecontext}{m}{}
 \DeclareDocumentCommand{\textmicrotypecontext}{m m}{#2}
-\@ifpackageloaded{letterspace}{\let\MT at textls\relax}{%
+\IfPackageLoadedTF{letterspace}{\let\MT at textls\relax}{%
 \DeclareDocumentCommand{\lsstyle}{}{}
 \DeclareDocumentCommand{\textls}{o +m}{}
 \DeclareDocumentCommand{\lslig}{m}{#1}
@@ -68946,11 +69443,12 @@
 % if other formatting is included.
 %
 % \changes{v0.892}{2020/10/07}{\pkg{minted}: Added.}
+% \changes{v0.903}{2022/01/02}{\pkg{minted}: Updated to v2.6.}
 %
 % \codehtml
 %
 %    \begin{macrocode}
-\LWR at ProvidesPackagePass{minted}[2017/07/19]
+\LWR at ProvidesPackagePass{minted}[2021/12/24]
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -68995,6 +69493,15 @@
     }
     {}
     {\LWR at patcherror{minted}{inputminted}}
+
+\renewenvironment{minted at snugshade*}[1]%
+{%
+    \colorlet{shadecolor}{#1}%
+    \begin{snugshade*}%
+}
+{%
+    \end{snugshade*}%
+}
 %    \end{macrocode}
 %
 % \iffalse
@@ -69820,7 +70327,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\LWR at ProvidesPackagePass{multirow}[2021/01/29]
+\LWR at ProvidesPackagePass{multirow}[2021/03/15]
 %    \end{macrocode}
 %
 %
@@ -69837,12 +70344,15 @@
 %
 % \begin{noindmacro}{\LWR at multirow@par} \cs{par} inside a \cs{multirow}.
 %    \begin{macrocode}
-\newcommand*{\LWR at multirow@par}{\LWR at htmltag{br /}\LWR at origpar}%
+\newcommand*{\LWR at multirow@par}{%
+    \LWR at htmltag{br /}%
+}%
 %    \end{macrocode}
 % \end{noindmacro}
 %
 % \DescribeMacro{\multirow}
-%   \oarg{vpos} \marg{numrows} \oarg{bigstruts} \marg{width} \oarg{fixup} \marg{text}
+%   \oarg{1: vpos} \marg{2: numrows} \oarg{3:bigstruts}
+%   \marg{4: width} \oarg{5: vmove} \marg{6: text}
 % \changes{v0.19}{2015/05/28}{\pkg{multirow}: Added optional args.}
 % \changes{v0.39}{2017/08/30}{\pkg{multirow}: Add: New optional \optn{vpos} argument.}
 % \changes{v0.39}{2017/08/30}{\pkg{multirow}: Add: Supports left/right border for \pkg{bigdelim}.}
@@ -69854,73 +70364,80 @@
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at HTML@multirow}{O{c} m o m o +m}%
 {%
-\LWR at traceinfo{*** LWR at HTML@multirow #1 #2 #4}%
+    \LWR at traceinfo{LWR at HTML@multirow #1 #2 #4}%
 %    \end{macrocode}
 % \changes{v0.69}{2019/03/07}{\pkg{multirow}: Error if \cs{multirow} without \cs{mrowcell}.}
 %    \begin{macrocode}
-\booltrue{LWR at usedmultirow}%
+    \booltrue{LWR at usedmultirow}%
 %    \end{macrocode}
 %    \begin{macrocode}
-\LWR at maybenewtablerow%
-\LWR at tabularleftedge%
+    \LWR at maybenewtablerow%
+    \LWR at tabularleftedge%
 %    \end{macrocode}
+%
 % Print the start of a new table data cell:
-% \changes{v0.895}{2021/01/14}{Improved \HTML\ quotes.}
+% \changes{v0.895}{2021/01/14}{\pkg{multirow}: Improved \HTML\ quotes.}
 %    \begin{macrocode}
-\LWR at htmltag{td rowspan=\textquotedbl#2\textquotedbl\ %
+    \LWR at htmltag{%
+        td rowspan=\textquotedbl#2\textquotedbl\ %
 %    \end{macrocode}
+%
 % A class adds the column spec and the rule:
 %    \begin{macrocode}
-class=\textquotedbl{}td%
+        class=\textquotedbl{}td%
 %    \end{macrocode}
+%
 % Append this column's spec:
-% \changes{v0.60}{2018/09/17}{\env{tabular}: Improved memory management: Not using \pkg{xstring}.}
+% \changes{v0.60}{2018/09/17}{\pkg{multirow}: \env{tabular}: Improved memory management: Not using \pkg{xstring}.}
 %    \begin{macrocode}
-\LWR at getexparray{LWR at tablecolspec}{\arabic{LWR at tableLaTeXcolindex}}%
+        \LWR at getexparray{LWR at tablecolspec}{\arabic{LWR at tableLaTeXcolindex}}%
 %    \end{macrocode}
+%
 % If this column has a cmidrule, add ``rule'' to the end of the \HTML\ class tag.
 % Also add the vertical bar class.
-% \changes{v0.41}{2017/10/07}{Added vertical rules.}
+% \changes{v0.41}{2017/10/07}{\pkg{multirow}: Added vertical rules.}
 %    \begin{macrocode}
-\LWR at addcmidruletrim%
-\LWR at addleftmostbartag%
-\LWR at printbartag{\arabic{LWR at tableLaTeXcolindex}}%
-\textquotedbl%
+        \LWR at addcmidruletrim%
+        \LWR at addleftmostbartag%
+        \LWR at printbartag{\arabic{LWR at tableLaTeXcolindex}}%
+        \textquotedbl%
 %    \end{macrocode}
 % \changes{v0.42}{2017/10/26}{\pkg{multirow}: If \progcode{FormatWP} add cell alignment.}
 %    \begin{macrocode}
-\LWR at tdstartstyles%
+        \LWR at tdstartstyles%
 %    \end{macrocode}
+%
 % The vertical alignment, if given:
 % \changes{v0.79}{2020/01/17}{\pkg{multirow}: Fix: Centered vertical alignment.}
-% \changes{v0.84}{2020/04/16}{Fix: Multirow style.}
+% \changes{v0.84}{2020/04/16}{\pkg{multirow}: Fix: Multirow style.}
 %    \begin{macrocode}
-\ifstrequal{#1}{c}{\LWR at tdaddstyle\LWR at print@mbox{vertical-align:middle}}{}%
-\ifstrequal{#1}{b}{\LWR at tdaddstyle\LWR at print@mbox{vertical-align:bottom}}{}%
-\ifstrequal{#1}{t}{\LWR at tdaddstyle\LWR at print@mbox{vertical-align:top}}{}%
+        \ifstrequal{#1}{c}{\LWR at tdaddstyle\LWR at print@mbox{vertical-align:middle}}{}%
+        \ifstrequal{#1}{b}{\LWR at tdaddstyle\LWR at print@mbox{vertical-align:bottom}}{}%
+        \ifstrequal{#1}{t}{\LWR at tdaddstyle\LWR at print@mbox{vertical-align:top}}{}%
 %    \end{macrocode}
+%
 % The left/right border, if given:
-% \changes{v0.84}{2020/04/16}{Fix: Multirow style.}
+% \changes{v0.84}{2020/04/16}{\pkg{multirow}: Fix: Multirow style.}
 %    \begin{macrocode}
-\ifdefvoid{\LWR at multirowborder}{}{%
-    \LWR at tdaddstyle%
-    \LWR at print@mbox{border-\LWR at multirowborder:} 2px dotted black ; %
-    \LWR at print@mbox{padding-\LWR at multirowborder:} 2px%
-}%
+        \ifdefvoid{\LWR at multirowborder}{}{%
+            \LWR at tdaddstyle%
+            \LWR at print@mbox{border-\LWR at multirowborder:} 2px dotted black ; %
+            \LWR at print@mbox{padding-\LWR at multirowborder:} 2px%
+        }%
 %    \end{macrocode}
 %
 % Additional style elements:
 %    \begin{macrocode}
-\LWR at addcmidrulewidth%
-\LWR at addcdashline%
-\LWR at addtabularrulecolors%
-\LWR at tdendstyles%
-}%
+        \LWR at addcmidrulewidth%
+        \LWR at addcdashline%
+        \LWR at addtabularrulecolors%
+        \LWR at tdendstyles%
+    }%
 %    \end{macrocode}
-% \changes{v0.41}{2017/10/05}{Fix: \protect\textless\ spec.}
+% \changes{v0.41}{2017/10/05}{\pkg{multirow}: Fix: \protect\textless\ spec.}
 % The column's |<| spec:
 %    \begin{macrocode}
-\LWR at getexparray{LWR at colbeforespec}{\arabic{LWR at tableLaTeXcolindex}}%
+    \LWR at getexparray{LWR at colbeforespec}{\arabic{LWR at tableLaTeXcolindex}}%
 %    \end{macrocode}
 %
 % While printing the text, redefine |\\| to generate a new line.
@@ -69931,17 +70448,18 @@
 %
 % \cs{par} is redefined to insert an \HTML\ break, and if \env{tabular}
 % is nested, it is redefined at the start of \env{tabular}.
-% \changes{v0.895}{2021/01/31}{Allow \cs{par}.}
+% \changes{v0.895}{2021/01/31}{\pkg{multirow}: Allow \cs{par}.}
+% \changes{v0.903}{2021/12/17}{\pkg{multirow}: Par handling.}
 %    \begin{macrocode}
-\begingroup%
-    \LetLtxMacro{\\}{\LWR at endofline}%
-    \let\par\LWR at multirow@par%
-    #6%
-\endgroup%
-\LWR at stoppars%
-\boolfalse{LWR at intabularmetadata}%
-\renewcommand{\LWR at multirowborder}{}%
-\LWR at traceinfo{*** LWR at HTML@multirow done}%
+    \begingroup%
+        \LetLtxMacro{\\}{\LWR at endofline}%
+        \booltrue{LWR at in@multirow at par}%
+        #6%
+    \endgroup%
+    \LWR at stoppars%
+    \boolfalse{LWR at intabularmetadata}%
+    \renewcommand{\LWR at multirowborder}{}%
+    \LWR at traceinfo{LWR at HTML@multirow done}%
 }%
 
 \LWR at formatted{multirow}
@@ -69956,10 +70474,10 @@
 %   \oarg{3:vpos} \marg{4:numrows} \oarg{5:bigstruts}
 %       \marg{6:width} \oarg{7:fixup} \marg{8:text}
 %
-% \changes{v0.39}{2017/08/30}{Added.}
+% \changes{v0.39}{2017/08/30}{\pkg{multirow}: Added.}
 % \changes{v0.57}{2018/05/28}{\pkg{multirow}: Improved print/\HTML\ output selection.}
 %
-% |\@ifpackageloaded{multirow}| determines if v2.0 or later of
+% |\IfPackageLoadedTF{multirow}| determines if v2.0 or later of
 % \pkg{multirow} was used, which included the \cs{ProvidesPackage} macro.
 %
 %
@@ -70313,7 +70831,8 @@
 \LWR at ProvidesPackagePass{nameauth}[2017/03/22]
 %    \end{macrocode}
 %
-% \pkg{lwarp} formatting is inserted in the following.
+% \DescribeHook[nameauth]{\cs{@nameauth at Hook}}
+% \pkg{lwarp} formatting is inserted.
 %    \begin{macrocode}
 \renewcommand*\@nameauth at Hook[1]
 {%
@@ -70570,6 +71089,15 @@
 \LWR at ProvidesPackagePass{nccfoots}[2005/02/03]
 %    \end{macrocode}
 %
+% To nullify the footnotes where necessary:
+% \changes{v0.903}{2021/12/28}{\pkg{nccfoots}: Nullify footnotes.}
+%    \begin{macrocode}
+\apptocmd{\LWR at nullifyfootnotes}{%
+    \renewcommand*{\Footnote}[1]{}%
+    \renewcommand*{\Footnotemark}[1]{}%
+}{}{}
+%    \end{macrocode}
+%
 % For \MathJax.
 % There is no way to test for an empty argument, \watchout
 % so the mark is not automatically duplicated.
@@ -72092,7 +72620,7 @@
 %
 %    \begin{macrocode}
 \AtBeginDocument{
-\@ifpackageloaded{cleveref}{
+\IfPackageLoadedTF{cleveref}{
 \gdef\@thm#1#2#3{%
    \if at thmmarks
      \stepcounter{end\InTheoType ctr}%
@@ -72272,7 +72800,7 @@
 \LWR at htmltag{%
     a id=\textquotedbl\LWR at print@mbox{autoid-\arabic{LWR at thisautoid}}\textquotedbl%
 }%
-\LWR at htmltag{/a}%
+\LWR at htmltag{/a}\LWR at orignewline%
 \LWR at startpars%
 }
 %    \end{macrocode}
@@ -73345,17 +73873,45 @@
 }
 
 \def\PN at parnotes@real{%
+%    \end{macrocode}
+%
+% \changes{v0.903}{2022/01/01}{\pkg{parnotes}: Par handling.}
+%    \begin{macrocode}
+\ifPN at inparnotes
+\else
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+    \LWR at stoppars%
+%    \end{macrocode}
+%
+% Avoid nested paragraphs:
+%    \begin{macrocode}
+    \addtocounter{LWR at spandepth}{1}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
     % We call \par later, so this avoids recursion with \PN at parnotes@auto
     \PN at inparnotestrue
-    \unless\ifvmode\par\fi
+%     \unless\ifvmode\par\fi
     % Avoid page breaks between a paragraph and its parnotes
-    \nopagebreak\addvspace{\parnotevskip}%
-    \LWR at forcenewpage%                      lwarp
+%     \nopagebreak\addvspace{\parnotevskip}%
     \begin{BlockClass}(note){footnotes}%    lwarp
-    {\parnotefmt{\PN at text}\par}%
+    \leavevmode\LWR at orignewline%
+%    \end{macrocode}
+%
+% Typeset the parnote inside its own group to avoid global changes:
+%    \begin{macrocode}
+    {%
+        \parnotefmt{\PN at text}%
+    }%
+    \leavevmode\LWR at orignewline%
     \end{BlockClass}%                       lwarp
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+    \leavevmode\LWR at orignewline%
     \global\def\PN at text{}%
-    \addvspace{\parnotevskip}%
     %
     % These can be enabled or disabled by package options
     %
@@ -73362,15 +73918,65 @@
     \PN at disable@indent
     \PN at reset@optional
     \PN at inparnotesfalse
+%    \end{macrocode}
+%
+% Reenable normal paragraph handling:
+%    \begin{macrocode}
+    \addtocounter{LWR at spandepth}{-1}%
+\fi
 }
+%    \end{macrocode}
 
+% \changes{v0.903}{2022/01/01}{\pkg{parnotes}: Par handling.}
+%    \begin{macrocode}
+\newbool{LWR at parnotes@doingauto}
+\boolfalse{LWR at parnotes@doingauto}
+%    \end{macrocode}
+
+% \changes{v0.903}{2022/01/01}{\pkg{parnotes}: Par handling.}
+%    \begin{macrocode}
+\def\PN at parnotes@auto{%
+    \ifbool{LWR at parnotes@doingauto}{
+        \ifx\@currenvir\@PN at autopn
+            \unless\ifPN at inparnotes
+                \unless\ifx\PN at text\@empty
+                    \expandafter\PN at parnotes@real
+                \fi
+            \fi
+        \fi
+    }{}%
+}
+%    \end{macrocode}
+%
+% Replace original logic due to the use of new \LaTeX paragraph hook handling:
+% \changes{v0.903}{2022/01/01}{\pkg{parnotes}: Par handling.}
+%    \begin{macrocode}
+\renewenvironment{autopn}%
+    {\booltrue{LWR at parnotes@doingauto}}
+    {\PN at parnotes@auto}%
+%    \end{macrocode}
+%
+% If \pkg{cleveref} is in use, name the new notes:
+% \changes{v0.903}{2022/01/01}{\pkg{parnotes}: Fixed if no \pkg{cleveref}.}
+%    \begin{macrocode}
 \AtBeginDocument{
-    \crefname{parnotemark}{paragraph note}{paragraph notes}
-    \Crefname{parnotemark}{Paragraph note}{Paragraph notes}
+    \ifdef{\crefname}{
+        \crefname{parnotemark}{paragraph note}{paragraph notes}
+        \Crefname{parnotemark}{Paragraph note}{Paragraph notes}
+    }{}
 }
 %    \end{macrocode}
 %
+% To nullify the footnotes where necessary:
+% \changes{v0.903}{2022/01/01}{\pkg{parnotes}: Nullify footnotes.}
+%    \begin{macrocode}
+\apptocmd{\LWR at nullifyfootnotes}{%
+    \renewcommand{\parnote}[2][]{}%
+    \renewcommand\parnotemark[1]{}%
+}{}{}
+%    \end{macrocode}
 %
+%
 % For \MathJax:
 % \changes{v0.82}{2020/03/15}{\pkg{parnotes}: Added \MathJax\ emulation.}
 %    \begin{macrocode}
@@ -74140,7 +74746,7 @@
 % an error about a missing file will occur.
 % Warn the user to convert the images.
 %    \begin{macrocode}
-\PackageWarning{lwarp-pdftricks}{
+\PackageWarning{lwarp-pdftricks}{%
 When the pdftricks images change,
 remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
 }
@@ -74365,7 +74971,7 @@
 %
 %    \begin{macrocode}
 \begin{warpMathJax}
-\PackageWarningNoLine{lwarp, physics}{The MathJax v3 extension will be used}
+\PackageNoteNoLine{lwarp, physics}{The MathJax v3 extension will be used}
 \CustomizeMathJax{\require{physics}}
 \end{warpMathJax}
 %    \end{macrocode}
@@ -77831,10 +78437,40 @@
 %
 %
 %
+% \iffalse
+%<*showlabels>
+% \fi
 %
+% \part{lwarp-showlabels.sty}
 %
+% \section{showlabels}
 %
+% \DescribePackage{showlabels}
+% \pkg{showlabels} is ignored.
+%
+% \changes{v0.903}{2021/12/18}{\pkg{showlabels}: Added.}
+%
+% \codehtml
+%
+%    \begin{macrocode}
+\LWR at ProvidesPackageDrop{showlabels}[2021/10/27]
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\providecommand{\showlabelfont}{}
+\providecommand{\showlabelsetlabel}[1]{}
+\newcommand*{\showlabels}[2][]{}
+\newcommand*{\showlabelrefline}{}
+\newcommand*{\showlabelsinline}{}
+%    \end{macrocode}
+%
 % \iffalse
+%</showlabels>
+% \fi
+%
+%
+%
+% \iffalse
 %<*showtags>
 % \fi
 %
@@ -78247,13 +78883,15 @@
 %    \end{macrocode}
 %
 % Patched for copy/paste with the \HTML\ \attribute{alt} tag:
+% \changes{v0.903}{2021/12/18}{\pkg{SIunits}: Improved alt tag sanitization.}
 %    \begin{macrocode}
 \ifbool{mathjax}{
     \DeclareRobustCommand{\LWR at HTML@unit}[2]{%
         \LWR at subsingledollar*%  lwarp
         {% alt tag
-            \textbackslash{}unit\{\LWR at HTMLsanitize{#1}\}%
-                \{ \LWR at HTMLsanitize{#2}\}% extra space
+            \textbackslash{}unit%
+            \{\LWR at HTMLsanitizedetokenized{\detokenize{#1}}\}%
+                \{ \LWR at HTMLsanitizedetokenized{\detokenize{#2}}\}% extra space
         }%
         {SIunits}% add'l hashing
         {%
@@ -78265,8 +78903,8 @@
         \@inunitcommandtrue%    original
         \LWR at subsingledollar*%  lwarp
         {% alt tag
-            \textbackslash{}unit\{\LWR at HTMLsanitize{#1}\}%
-                \{ \LWR at HTMLsanitize{#2}\}% extra space
+            \textbackslash{}unit\{\LWR at HTMLsanitizedetokenized{\detokenize{#1}}\}%
+                \{ \LWR at HTMLsanitizedetokenized{\detokenize{#2}}\}% extra space
         }%
         {SIunits}% add'l hashing
         {%
@@ -78716,6 +79354,7 @@
 % \DescribePackage{siunitx}
 % \pkg{siunitx-v2} is patched for use by \pkg{lwarp},
 % and is emulated for \MathJax.
+%
 % Use as:
 % \begin{sourceverb}
 % \usepackage{siunitx}[=v2]
@@ -78722,6 +79361,7 @@
 % \end{sourceverb}
 %
 % \pkg{siunitx} v3 is not yet supported.
+% \watchout
 %
 % ^^A \limitssiunitx
 %
@@ -78833,12 +79473,7 @@
       {
         \__siunitx_ensure_ltr:n
           {
-%    \end{macrocode}
-% \cs{color at endgroup} was adding a paragraph break, so use a regular group instead.
-% \changes{v0.897}{2021/05/23}{\pkg{siunitx-v2}: Regular group instead of color group.}
-%    \begin{macrocode}
-%             \color at begingroup
-            \begingroup% lwarp
+            \color at begingroup
 %
             \__siunitx_print_color:
             \__siunitx_font_shape:
@@ -78865,8 +79500,7 @@
                             }% lwarp
                         }% lwarp
                }
-%             \color at endgroup
-            \endgroup% lwarp
+            \color at endgroup
 %
           }
       }
@@ -78906,19 +79540,23 @@
 % \changes{v0.48}{2018/02/14}{\pkg{siunitx}: Improved \SVG\ math.}
 % \changes{v0.50}{2018/02/24}{\pkg{siunitx}: Improved \SVG\ math \attribute{alt} tags.}
 % \changes{v0.79}{2020/01/21}{\pkg{siunitx}: Improved \MathJax.}
+% \changes{v0.903}{2021/12/18}{\pkg{siunitx}: Improved alt tag sanitization.}
 %    \begin{macrocode}
         \__siunitx_unit_output_pre_print:
-        \begingroup%    lwarp
-            \boolfalse{mathjax}%    lwarp
+        \begingroup%                            lwarp
+            \boolfalse{mathjax}%                lwarp
 %       \__siunitx_print:nn { number } { \ensuremath {#1} }
-            \LWR at subsingledollar{% lwarp
-                \textbackslash( \LWR at HTMLsanitize{#1} \textbackslash)% lwarp
+            \LWR at subsingledollar{%              lwarp
+                    \textbackslash( % space
+                    \LWR at HTMLsanitizedetokenized{%
+                        \detokenize{#1}%
+                    } \textbackslash)%          lwarp
             }{siunitx}{%
                 \__siunitx_print:nn { number } {%
                     \LWR at origensuredmath{#1}%
                 }%
-            }% lwarp
-        \endgroup%    lwarp
+            }%                                  lwarp
+        \endgroup%                              lwarp
         \__siunitx_unit_output_print:
     }
    \group_end:% lwarp
@@ -78929,6 +79567,7 @@
 %
 % For |parse-numbers=false|:
 % \changes{v0.79}{2020/01/21}{\pkg{siunitx}: Improved \MathJax.}
+% \changes{v0.903}{2021/12/18}{\pkg{siunitx}: Improved alt tag sanitization.}
 %    \begin{macrocode}
 \cs_set_protected:Npn \__siunitx_range_numbers_aux:n #1
   {
@@ -78944,16 +79583,19 @@
       {
         \__siunitx_unit_output_pre_print:
         \begingroup%    lwarp
-            \boolfalse{mathjax}%    lwarp
+            \boolfalse{mathjax}%                    lwarp
 %           \__siunitx_print:nn { number } {#1}
-                \LWR at subsingledollar{% lwarp
-                    \textbackslash( \LWR at HTMLsanitize{#1} \textbackslash)% lwarp
+                \LWR at subsingledollar{%              lwarp
+                    \textbackslash( % space
+                    \LWR at HTMLsanitizedetokenized{%
+                        \detokenize{#1}%
+                    } \textbackslash)%              lwarp
                 }{siunitx}{%
                     \__siunitx_print:nn { number } {%
                         \LWR at origensuredmath{#1}%
-                    } % lwarp
-                }% lwarp
-        \endgroup%    lwarp
+                    } %                             lwarp
+                }%                                  lwarp
+        \endgroup%                                  lwarp
         \__siunitx_unit_output_print:
       }
   }
@@ -78961,22 +79603,26 @@
 %
 % For |parse-numbers=false|:
 % \changes{v0.79}{2020/01/21}{\pkg{siunitx}: Improved \MathJax.}
+% \changes{v0.903}{2021/12/18}{\pkg{siunitx}: Improved alt tag sanitization.}
 %    \begin{macrocode}
 \cs_set_protected:Npn \__siunitx_angle_print_direct_aux:nn #1#2 {
   \tl_if_empty:nF {#1}
     {
       \tl_set:Nn \l__siunitx_unit_tl {#2}
-        \begingroup%    lwarp
-            \boolfalse{mathjax}%    lwarp
+        \begingroup%                                    lwarp
+            \boolfalse{mathjax}%                        lwarp
 %           \__siunitx_print:nn { number } {#1}
-                \LWR at subsingledollar{% lwarp
-                    \textbackslash( \LWR at HTMLsanitize{#1} \textbackslash)% lwarp
+                \LWR at subsingledollar{%                  lwarp
+                    \textbackslash( % space
+                    \LWR at HTMLsanitizedetokenized{%
+                        \detokenize{#1}%
+                    } \textbackslash)%                  lwarp
                 }{siunitx}{%
                     \__siunitx_print:nn { number } {
                         \LWR at origensuredmath{#1}%
-                    }% lwarp
-                }% lwarp
-        \endgroup%    lwarp
+                    }%                                  lwarp
+                }%                                      lwarp
+        \endgroup%                                      lwarp
       \__siunitx_unit_output_print:
     }
 }
@@ -79153,8 +79799,10 @@
 
 
 % For \MathJax.
-% (The following runs much faster as separate \cs{CusomizeMathJax} calls instead
-% of one single call.)
+% \margintag{\MathJax}
+%
+% The following runs much faster as separate \cs{CusomizeMathJax} calls instead
+% of one single call.
 %    \begin{macrocode}
 \begin{warpMathJax}
 \LWR at infoprocessingmathjax{siunitx}
@@ -79183,68 +79831,91 @@
 %    \end{macrocode}
 % \end{noindmacro}
 %
-% Processes scientific notation.
-% Special handling for a mantissa which is either empty or only a minus sign.
-% \changes{v0.895}{2021/01/14}{\pkg{siunitx}, \MathJax: Scientific notation.}
-%    \begin{macrocode}
-\CustomizeMathJax{\newcommand{\LWRsiunitxnumscientific}[2]{%
-    \ifblank{#1}%
-        {}%
-        {%
-            \ifstrequal{#1}{-}%
-                {-}%
-                {\LWRsiunitxprintdecimal{#1}\times}%
-        }%
-    10^{\LWRsiunitxprintdecimal{#2}}
-}}
-%    \end{macrocode}
+% \begin{noindmacro}{\num} \oarg{options} \marg{value}
 %
 % \cs{num} handles optional powers (|e|, |E|, |d|, |D|),
 % multiples (|x|), plus and minus, and period or comma decimal output.
 %
 % To split the string, \cs{def} is used with parameter delimiters.
-% When each of the following macro is used, extra delimiters are padded to the end
+% When each of the following macros is used, extra delimiters are padded to the end
 % of the arguments of each macro when used, and
 % the final argument of each collects any extra unused delimiters.
 %
+% The number is split by powers (|E|, |e|, |D|, |d|), then by dimensions (|x|),
+% then by plus and minus (|+|, |-|, |+-|), then into pieces before and after the decimal
+% point.
+%
 % \changes{v0.895}{2021/01/14}{\pkg{siunitx}, \MathJax:
 %       \cs{num} sci notation, multiples, +-, decimals, comma.}
+%
+% Determine if the number is output with a decimal period or a decimal comma.
+% The enclosing braces tell \MathJax\ to not add extra space after the punctuation.
+% \changes{v0.903}{2021/12/10}{\pkg{siunitx}, \MathJax: Improved decimal commas.}
 %    \begin{macrocode}
 \ExplSyntaxOn
 \AtBeginDocument{
 \ifdefstring{\l__siunitx_output_decimal_tl}{{,}}
-    {% Use decimal comma
-        \CustomizeMathJax{\def\LWRsiunitxprintdecimalsub#1.#2.#3\LWRsiunitxEND{%
-            \mathrm{#1}%
-            \ifblank{#2}
-                {}%
-                {,\mathrm{#2}}
-        }}
-
-        \CustomizeMathJax{\newcommand{\LWRsiunitxprintdecimal}[1]{%
-            \LWRsiunitxprintdecimalsub#1...\LWRsiunitxEND%
-        }}
-    }
-    {% Use decimal point
-        \CustomizeMathJax{\def\LWRsiunitxprintdecimalsub#1,#2,#3\LWRsiunitxEND{%
-            \mathrm{#1}%
-            \ifblank{#2}
-                {}%
-                {.\mathrm{#2}}
-        }}
-
-        \CustomizeMathJax{\newcommand{\LWRsiunitxprintdecimal}[1]{%
-            \LWRsiunitxprintdecimalsub#1,,,\LWRsiunitxEND%
-        }}
-    }
+    {\CustomizeMathJax{\def\LWRsiunitxdecimal{,}}}
+    {\CustomizeMathJax{\def\LWRsiunitxdecimal{.}}}
 }
 \ExplSyntaxOff
 %    \end{macrocode}
 %
-% \begin{noindmacro}{\num} \oarg{options} \marg{value}
+% \pkg{siunitx} accepts either commas or periods as decimal points.
+% \cs{LWRsiunitxprintdecimal} splits its input by periods then commas,
+% parsing out before and after sections to print on either side of the decimal point.
+%
+% \cs{LWRsiunitxENDTWO} is used only by \cs{LWRsiunitxprintdecimalsubtwo},
+% to avoid a parsing conflict with the more widely-used \cs{LWRsiunitxEND}.
+%
+% The following splits by decimal commas:
+% \changes{v0.903}{2021/12/10}{\pkg{siunitx}, \MathJax: Improved decimal commas.}
 %    \begin{macrocode}
+\CustomizeMathJax{\newcommand{\LWRsiunitxENDTWO}{}}
+
+\CustomizeMathJax{\def\LWRsiunitxprintdecimalsubtwo#1,#2,#3\LWRsiunitxENDTWO{%
+%    \end{macrocode}
+%
+% If nothing is ahead of the decimal comma, add a leading zero:
+% \changes{v0.903}{2021/12/10}{\pkg{siunitx}, \MathJax: Leading zero.}
+%    \begin{macrocode}
+    \ifblank{#1}{0}{\mathrm{#1}}%
+%    \end{macrocode}
+%
+% If something is after the decimal comma, print the decimal comma and the fraction:
+%    \begin{macrocode}
+    \ifblank{#2}%
+        {}%
+        {%
+            {\LWRsiunitxdecimal}%
+            \mathrm{#2}%
+        }%
+}}
+%    \end{macrocode}
+%
+% The following splits by decimal periods:
+% \changes{v0.903}{2021/12/10}{\pkg{siunitx}, \MathJax: Improved decimal commas.}
+%    \begin{macrocode}
+\CustomizeMathJax{\def\LWRsiunitxprintdecimalsub#1.#2.#3\LWRsiunitxEND{%
+    \LWRsiunitxprintdecimalsubtwo#1,,\LWRsiunitxENDTWO%
+    \ifblank{#2}%
+        {}%
+        {%
+%             {.}%
+            {\LWRsiunitxdecimal}%
+            \LWRsiunitxprintdecimalsubtwo#2,,\LWRsiunitxENDTWO%
+        }%
+}}
+
+\CustomizeMathJax{\newcommand{\LWRsiunitxprintdecimal}[1]{%
+    \LWRsiunitxprintdecimalsub#1...\LWRsiunitxEND%
+}}
+%    \end{macrocode}
+%
+% The following splits by |+|
+%    \begin{macrocode}
 \CustomizeMathJax{\def\LWRsiunitxnumplus#1+#2+#3\LWRsiunitxEND{%
-    \ifblank{#2}
+    \ifblank{#2}%
         {\LWRsiunitxprintdecimal{#1}}% no plus
         {%
             \ifblank{#1}%
@@ -79256,17 +79927,23 @@
                 }%
         }%
 }}
-
+%    \end{macrocode}
+%
+% The following splits by |-|
+%    \begin{macrocode}
 \CustomizeMathJax{\def\LWRsiunitxnumminus#1-#2-#3\LWRsiunitxEND{%
-    \ifblank{#2}
+    \ifblank{#2}%
         {\LWRsiunitxnumplus#1+++\LWRsiunitxEND}%
         {%
-            \LWRsiunitxprintdecimal{#1}%
+            \ifblank{#1}{}{\LWRsiunitxprintdecimal{#1}}%
             \unicode{x02212}% mathematical minus sign
             \LWRsiunitxprintdecimal{#2}%
         }%
 }}
-
+%    \end{macrocode}
+%
+% The following splits by |+-|
+%    \begin{macrocode}
 \CustomizeMathJax{\def\LWRsiunitxnumpm#1+-#2+-#3\LWRsiunitxEND{%
     \ifblank{#2}%
         {\LWRsiunitxnumminus#1---\LWRsiunitxEND}%
@@ -79276,7 +79953,10 @@
             \LWRsiunitxprintdecimal{#2}%
         }%
 }}
-
+%    \end{macrocode}
+%
+% The following splits by |x|
+%    \begin{macrocode}
 \CustomizeMathJax{\def\LWRsiunitxnumx#1x#2x#3x#4\LWRsiunitxEND{%
     \ifblank{#2}%
         {\LWRsiunitxnumpm#1+-+-\LWRsiunitxEND}%
@@ -79296,41 +79976,69 @@
                 }%
         }%
 }}
-
+%    \end{macrocode}
+%
+%
+% Processes scientific notation.
+% Special handling for a mantissa which is either empty or only a minus sign.
+% \changes{v0.895}{2021/01/14}{\pkg{siunitx}, \MathJax: Scientific notation.}
+%    \begin{macrocode}
+\CustomizeMathJax{\newcommand{\LWRsiunitxnumscientific}[2]{%
+    \ifblank{#1}%
+        {}%
+        {%
+            \ifstrequal{#1}{-}%
+                {-}%
+                {\LWRsiunitxprintdecimal{#1}\times}%
+        }%
+    10^{\LWRsiunitxprintdecimal{#2}}
+}}
+%    \end{macrocode}
+%
+%
+% The following splits by |D|
+%    \begin{macrocode}
 \CustomizeMathJax{\def\LWRsiunitxnumD#1D#2D#3\LWRsiunitxEND{%
     \ifblank{#2}%
         {\LWRsiunitxnumx#1xxxxx\LWRsiunitxEND}%
         {\mathrm{\LWRsiunitxnumscientific{#1}{#2}}}%
 }}
-
+%    \end{macrocode}
+%
+% The following splits by |d|
+%    \begin{macrocode}
 \CustomizeMathJax{\def\LWRsiunitxnumd#1d#2d#3\LWRsiunitxEND{%
     \ifblank{#2}%
         {\LWRsiunitxnumD#1DDD\LWRsiunitxEND}%
         {\mathrm{\LWRsiunitxnumscientific{#1}{#2}}}%
 }}
-
+%    \end{macrocode}
+%
+% The following splits by |E|
+%    \begin{macrocode}
 \CustomizeMathJax{\def\LWRsiunitxnumE#1E#2E#3\LWRsiunitxEND{%
     \ifblank{#2}%
         {\LWRsiunitxnumd#1ddd\LWRsiunitxEND}%
         {\mathrm{\LWRsiunitxnumscientific{#1}{#2}}}%
 }}
-
+%    \end{macrocode}
+%
+% The following splits by |e|
+%    \begin{macrocode}
 \CustomizeMathJax{\def\LWRsiunitxnume#1e#2e#3\LWRsiunitxEND{%
     \ifblank{#2}%
         {\LWRsiunitxnumE#1EEE\LWRsiunitxEND}%
         {\mathrm{\LWRsiunitxnumscientific{#1}{#2}}}%
 }}
-
-\CustomizeMathJax{\def\LWRsiunitxnumcomma#1,#2,#3\LWRsiunitxEND{%
-    \ifblank{#2}
-        {\LWRsiunitxnume#1eee\LWRsiunitxEND}
-        {\LWRsiunitxnume#1.#2eee\LWRsiunitxEND}
-}}
-
-\CustomizeMathJax{\newcommand{\num}[2][]{\LWRsiunitxnumcomma#2,,,\LWRsiunitxEND}}
 %    \end{macrocode}
+%
+% \changes{v0.903}{2021/12/10}{\pkg{siunitx}, \MathJax: Improved decimal commas.}
+%    \begin{macrocode}
+\CustomizeMathJax{\newcommand{\num}[2][]{\LWRsiunitxnume#2eee\LWRsiunitxEND}}
+%    \end{macrocode}
 % \end{noindmacro}
 %
+%
 % \begin{noindmacro}{\si} \oarg{options} \marg{unit}
 %    \begin{macrocode}
 \CustomizeMathJax{\newcommand{\si}[2][]{\mathrm{#2}}}
@@ -79363,9 +80071,10 @@
 % \begin{noindmacro}{\numlist} \oarg{options} \marg{list}
 %
 % \cs{numlist} should only be used in text mode.
-% If used in \MathJax, it is merely printed as input.
+% If used in \MathJax, it is merely printed as text, so add space around the semicolons.
+% \changes{v0.903}{2021/12/10}{\pkg{siunitx}: \MathJax: Improved \cs{numlist}.}
 %    \begin{macrocode}
-\CustomizeMathJax{\newcommand{\numlist}[2][]{\mathrm{#2}}}
+\CustomizeMathJax{\newcommand{\numlist}[2][]{\text{#2}}}
 %    \end{macrocode}
 % \end{noindmacro}
 %
@@ -79372,7 +80081,7 @@
 % \begin{noindmacro}{\numrange} \oarg{options} \marg{value1} \marg{value2}
 %
 % \cs{numrange} should only be used in text mode.
-% If used in \MathJax\ math, an en-dash is used instead of the \optn{range-phase}.
+% If used in \MathJax\ math, an en-dash is used instead of the \optn{range-phrase}.
 % \changes{v0.89}{2020/08/02}{\pkg{siunitx}: Unicode for endash.}
 %    \begin{macrocode}
 \CustomizeMathJax{\newcommand{\numrange}[3][]{\num{#2}\,\unicode{x2013}\,\num{#3}}}
@@ -79383,8 +80092,9 @@
 %
 % \cs{SIlist} and \cs{SIrange} should only be used in text mode.
 % If used in \MathJax, a simple emulation is provided.
+% \changes{v0.903}{2021/12/10}{\pkg{siunitx}: \MathJax: Improved \cs{SIlist}.}
 %    \begin{macrocode}
-\CustomizeMathJax{\newcommand{\SIlist}[3][]{\mathrm{#2\,#3}}}
+\CustomizeMathJax{\newcommand{\SIlist}[3][]{\text{#2}\,#3}}
 %    \end{macrocode}
 % \end{noindmacro}
 %
@@ -79495,7 +80205,12 @@
 \CustomizeMathJax{\newcommand{\square}[1]{\mathrm{#1}^2}}
 \CustomizeMathJax{\newcommand{\cubed}{^3}}
 \CustomizeMathJax{\newcommand{\cubic}[1]{\mathrm{#1}^3}}
-\CustomizeMathJax{\newcommand{\per}{/}}
+%    \end{macrocode}
+% \changes{v0.903}{2021/12/09}{\pkg{siunitx}: Improved \cs{per}.}
+%    \begin{macrocode}
+\CustomizeMathJax{\newcommand{\per}{\,\mathrm{/}}}
+%    \end{macrocode}
+%    \begin{macrocode}
 \CustomizeMathJax{\newcommand{\celsius}{\unicode{x2103}}}
 %
 \CustomizeMathJax{\newcommand{\fg}{\femto\gram}}
@@ -84087,7 +84802,7 @@
 %
 % Other \pkg{thm-*} package may be loaded by \pkg{thm-listof}.
 %    \begin{macrocode}
-\@ifpackagelater{thm-listof}{2020/08/01}{% v0.72
+\IfPackageAtLeastTF{thm-listof}{2020/08/01}{% v0.72
   \def\thmtlo at newentry{%
     \csdef{l@\thmt at envname}##1##2{\hypertocfloat{1}{figure}{lof}{##1}{##2}}%
   }
@@ -84556,7 +85271,7 @@
 %    \begin{macrocode}
 \newbool{LWR at tikzbabel}
 
-\@ifpackagelater{tikz}{2013/12/20}% Test for Tikz version v3.0.0
+\IfPackageAtLeastTF{tikz}{2013/12/20}% Test for Tikz version v3.0.0
 {\usetikzlibrary{babel}\booltrue{LWR at tikzbabel}}
 {\boolfalse{LWR at tikzbabel}}
 %    \end{macrocode}
@@ -85553,7 +86268,7 @@
 %
 % Set default titlepage thanks footnote marks.  See \cref{sec:titlehtml}.
 %    \begin{macrocode}
-\@ifclassloaded{memoir}{
+\IfClassLoadedTF{memoir}{
    \thanksmarkseries{arabic}
 }{% not memoir
 \if at titlepage
@@ -86323,7 +87038,11 @@
     ] \@nameuse{@done\the\c at todo}:
         {\todoformat\ifx#1\todomark\else\textbf{#1} \fi}#2%
 }
-
+%    \end{macrocode}
+%
+% The following are not errors because the code will still compile and
+% be usable if the patch is not possible.
+%    \begin{macrocode}
 \xpatchcmd{\@displaytodo}
     {\todoformat #1}{\todoformat \textbf{#1}}{}
     {\PackageWarning{lwarp-todo}{Unable to patch @displaytodo.}}
@@ -86337,10 +87056,16 @@
 
 \patchcmd{\astodos}{\todoformat #1}{\todoformat \textbf{#1}}{}
     {\PackageWarning{lwarp-todo}{Unable to patch astodos.}}
-
+%    \end{macrocode}
+%
+% If \pkg{cleveref} is in use, name the new todo notes:
+% \changes{v0.903}{2021/12/23}{\pkg{todo}: Fix if no \pkg{cleveref}.}
+%    \begin{macrocode}
 \AtBeginDocument{
+\ifdef{\crefname}{
     \crefname{todo}{todo}{todos}
     \Crefname{todo}{Todo}{Todos}
+}{}
 }
 %    \end{macrocode}
 
@@ -88293,8 +89018,8 @@
 % When the environment ends:
 %    \begin{macrocode}
 {
-\endBlockClass
-\LWR at startpars
+    \endBlockClass
+    \LWR at startpars
 }
 %    \end{macrocode}
 % \end{noindenvironment}
@@ -88578,13 +89303,14 @@
 % \changes{v0.75}{2019/09/22}{\pkg{wrapfig}: Fix for width.}
 % \changes{v0.896}{2021/03/05}{\pkg{wrapfig}: Added \ARIA\ role.}
 % \changes{v0.898}{2021/05/26}{\pkg{wrapfig}: Improved integration with \pkg{keyfloat}.}
+% \changes{v0.903}{2022/01/01}{\pkg{wrapfig}: Fix: \optn{width} style.}
 %    \begin{macrocode}
 \newcommand*{\LWR at wrapposition}{}
 
-\newcommand{\LWR at wrapfig@printHTMLwidth}{width:\LWR at printlength{\LWR at templengthone}}
+\newcommand{\LWR at wrapfig@printHTMLwidth}{\LWR at printlength{\LWR at templengthone}}
 
 \AtBeginDocument{
-    \@ifpackageloaded{keyfloat}{
+    \IfPackageLoadedTF{keyfloat}{
         \renewcommand{\LWR at wrapfig@printHTMLwidth}{%
             \ifboolexpr{
                 test {\ifnumgreater{\value{KFLT at keyfloatdepth}}{0}} or
@@ -88666,7 +89392,73 @@
 %
 %
 %
+%
 % \iffalse
+%<*wrapfig2>
+% \fi
+
+% \part{lwarp-wrapfig2.sty}
+
+% \section{wrapfig2}
+% \label{sec:wrapfig2}
+%
+% \credits{Donald Arseneau, Claudio Beccari}
+%
+% \changes{v0.903}{2022/01/01}{\pkg{wrapfig2}: Added.}
+%
+% \DescribePackage{wrapfig2}
+% \pkg{wrapfig2} is emulated via a modified version
+% of the \pkg{wrapfig} emulation.
+
+% \codehtml
+%    \begin{macrocode}
+\LWR at ProvidesPackageDrop{wrapfig2}[2021-12-21]
+
+\LWR at origRequirePackage{lwarp-wrapfig}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\RenewDocumentEnvironment{wrapfigure}{o m o G{0pt} s}% original
+  {\wrapfloat{figure}[#1]{#2}[#3]{#4}}%
+  {\endwrapfloat}
+
+\RenewDocumentEnvironment{wraptable}{o m o G{0pt} s}% original
+  {\wrapfloat{table}[#1]{#2}[#3]{#4}}%
+  {\endwrapfloat}
+
+\RenewDocumentEnvironment{wrapfloat}{m o m o G{0pt}}% lwarp
+{%
+    \begin{LWR at setvirtualpage}*%
+    \LWR at subwrapfigure{#3}{#5}%
+    \renewcommand*{\@captype}{#1}%
+}
+{%
+    \endLWR at BlockClassWP%
+    \end{LWR at setvirtualpage}%
+}
+
+\NewDocumentEnvironment{wraptext}%
+      {O{l}    D||{0.5\columnwidth} D<>{0}   D(){figure}}%
+{%
+    \wrapfloat{#4}[]{#1}[]{#2}%
+    \tcolorbox%
+}
+{%
+    \endtcolorbox%
+    \endwrapfloat%
+    \ignorespaces%
+}
+%    \end{macrocode}
+
+% \iffalse
+%</wrapfig2>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
 %<*xbmks>
 % \fi
 %
@@ -88852,6 +89644,14 @@
 \LWR at ProvidesPackagePass{xcolor}[2016/05/11]
 %    \end{macrocode}
 
+
+% \cs{color at endgroup}'s \cs{endgraf} was conflicting with \pkg{lwarp}'s
+% paragraph handling.
+% \changes{v0.903}{2021/12/13}{\pkg{xcolor}: Par handling.}
+%    \begin{macrocode}
+\let\color at endgroup\endgroup
+%    \end{macrocode}
+
 %
 %
 % \subsection{Remembering and restoring original definitions}
@@ -88867,8 +89667,8 @@
 % \margintag{\small\cs{LWR at restoreorigformatting}}
 %    \begin{macrocode}
 \appto\LWR at restoreorigformatting{%
-\LetLtxMacro\pagecolor\LWR at print@pagecolor%
-\LetLtxMacro\nopagecolor\LWR at print@nopagecolor%
+    \LetLtxMacro\pagecolor\LWR at print@pagecolor%
+    \LetLtxMacro\nopagecolor\LWR at print@nopagecolor%
 }
 %    \end{macrocode}
 %
@@ -88892,11 +89692,11 @@
 % Sets \cs{LWR at tempcolor} to the current color.
 %    \begin{macrocode}
 \renewcommand*{\LWR at findcurrenttextcolor}{%
-\LWR at traceinfo{LWR at findcurrenttextcolor}%
-\protect\colorlet{LWR at current@color}{.}%
-\LWR at traceinfo{LWR at findcurrenttextcolor B}%
-\protect\convertcolorspec{named}{LWR at current@color}{HTML}\LWR at tempcolor%
-\LWR at traceinfo{LWR at findcurrenttextcolor: done}%
+    \LWR at traceinfo{LWR at findcurrenttextcolor}%
+    \protect\colorlet{LWR at current@color}{.}%
+    \LWR at traceinfo{LWR at findcurrenttextcolor B}%
+    \protect\convertcolorspec{named}{LWR at current@color}{HTML}\LWR at tempcolor%
+    \LWR at traceinfo{LWR at findcurrenttextcolor: done}%
 }
 %    \end{macrocode}
 % \end{noindmacro}
@@ -88906,10 +89706,10 @@
 % \changes{v0.44}{2017/11/10}{\pkg{xcolor}: Added \cs{LWR at currenttextcolorstyle}.}
 %    \begin{macrocode}
 \newcommand*{\LWR at currenttextcolorstyle}{%
-\LWR at findcurrenttextcolor%
-\ifdefstring{\LWR at tempcolor}{000000}%
-{}%
-{color: \LWR at origpound\LWR at tempcolor ; }%
+    \LWR at findcurrenttextcolor%
+    \ifdefstring{\LWR at tempcolor}{000000}%
+    {}%
+    {color: \LWR at origpound\LWR at tempcolor ; }%
 }
 %    \end{macrocode}
 % \end{noindmacro}
@@ -88920,14 +89720,14 @@
 % \changes{v0.44}{2017/11/10}{\pkg{xcolor}: Added \cs{LWR at textcurrentcolor}.}
 %    \begin{macrocode}
 \DeclareDocumentCommand{\LWR at textcurrentcolor}{m}{%
-\begingroup%
-\LWR at hook@processingtags%
-\LWR at findcurrenttextcolor%
-\InlineClass[color:\LWR at origpound\LWR at tempcolor]{textcolor}{%
-    \renewcommand*{\LWR at currenttextcolor}{\LWR at origpound\LWR at tempcolor}%
-    #1%
-}%
-\endgroup%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \LWR at findcurrenttextcolor%
+    \InlineClass[color:\LWR at origpound\LWR at tempcolor]{textcolor}{%
+        \renewcommand*{\LWR at currenttextcolor}{\LWR at origpound\LWR at tempcolor}%
+        #1%
+    }%
+    \endgroup%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -88942,17 +89742,17 @@
 %
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at colorstyle}{m m}{%
-\begingroup%
-\LWR at hook@processingtags%
+    \begingroup%
+    \LWR at hook@processingtags%
 %    \end{macrocode}
 % Use the \pkg{xcolor} package to convert to an \HTML\ color space:
 %    \begin{macrocode}
-\convertcolorspec{#1}{#2}{HTML}\LWR at tempcolor%
+    \convertcolorspec{#1}{#2}{HTML}\LWR at tempcolor%
 %    \end{macrocode}
 % Print the converted color:
 %    \begin{macrocode}
-\LWR at origpound\LWR at tempcolor%
-\endgroup%
+    \LWR at origpound\LWR at tempcolor%
+    \endgroup%
 }
 %    \end{macrocode}
 % \end{noindmacro}
@@ -88967,12 +89767,12 @@
 % \changes{v0.44}{2017/11/10}{\pkg{xcolor}: Added \cs{LWR at backgroundcolor}.}
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at backgroundcolor}{O{named} m m}{%
-\begingroup%
-\LWR at hook@processingtags%
-\InlineClass[background:\LWR at colorstyle{#1}{#2}]{backgroundcolor}{%
-#3%
-}%
-\endgroup%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \InlineClass[background:\LWR at colorstyle{#1}{#2}]{backgroundcolor}{%
+        #3%
+    }%
+    \endgroup%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -88987,8 +89787,8 @@
 %
 %    \begin{macrocode}
 \newcommand*{\LWR at borderpadding}[2]{%
-border:\LWR at printlength{\LWR at atleastonept} solid \LWR at colorstyle{#1}{#2} ; %
-padding:\LWR at printlength{\fboxsep}%
+    border:\LWR at printlength{\LWR at atleastonept} solid \LWR at colorstyle{#1}{#2} ; %
+    padding:\LWR at printlength{\fboxsep}%
 }
 %    \end{macrocode}
 % \end{noindmacro}
@@ -89008,14 +89808,14 @@
 % \changes{v0.73}{2019/06/14}{\pkg{xcolor}: Added \HTML\ support.}
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at HTML@color}{o m}{%
-\IfValueTF{#1}{%
-    \LWR at print@color[#1]{#2}%
-    \convertcolorspec{#1}{#2}{HTML}\LWR at tempcolor%
-}{%
-    \LWR at print@color{#2}%
-    \convertcolorspec{named}{#2}{HTML}\LWR at tempcolor%
-}%
-\edef\LWR at currenttextcolor{\LWR at origpound\LWR at tempcolor}%
+    \IfValueTF{#1}{%
+        \LWR at print@color[#1]{#2}%
+        \convertcolorspec{#1}{#2}{HTML}\LWR at tempcolor%
+    }{%
+        \LWR at print@color{#2}%
+        \convertcolorspec{named}{#2}{HTML}\LWR at tempcolor%
+    }%
+    \edef\LWR at currenttextcolor{\LWR at origpound\LWR at tempcolor}%
 }
 
 \LWR at formatted{color}
@@ -89034,16 +89834,16 @@
 % \changes{v0.86}{2020/05/12}{\pkg{xcolor}: \cs{textcolor}: Fixed for \pkg{babel-french}.}
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at HTML@textcolor}{o m m}{%
-\begingroup%
-\LWR at hook@processingtags%
-\IfValueTF{#1}{%
-    \color[#1]{#2}%
-}{%
-    \color{#2}%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \IfValueTF{#1}{%
+        \color[#1]{#2}%
+    }{%
+        \color{#2}%
+    }%
+    \InlineClass[color:\LWR at currenttextcolor]{textcolor}{#3}%
+    \endgroup%
 }%
-\InlineClass[color:\LWR at currenttextcolor]{textcolor}{#3}%
-\endgroup%
-}%
 
 \LWR at formatted{textcolor}
 %    \end{macrocode}
@@ -89078,13 +89878,13 @@
 % \changes{v0.57}{2018/06/02}{\pkg{xcolor}: New system for switching print and \HTML\ outputs.}
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at HTML@colorbox}{O{named} m +m}{%
-\begingroup%
-\LWR at hook@processingtags%
-\InlineClass[%
-background:\LWR at colorstyle{#1}{#2} ; %
-padding:\LWR at printlength{\fboxsep}%
-]{colorbox}{#3}%
-\endgroup%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \InlineClass[%
+    background:\LWR at colorstyle{#1}{#2} ; %
+    padding:\LWR at printlength{\fboxsep}%
+    ]{colorbox}{#3}%
+    \endgroup%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -89097,27 +89897,27 @@
 % \changes{v0.57}{2018/06/02}{\pkg{xcolor}: New system for switching print and \HTML\ outputs.}
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at HTML@colorboxBlock}{O{named} m +m}{%
-\begingroup%
-\LWR at hook@processingtags%
+    \begingroup%
+    \LWR at hook@processingtags%
 %    \end{macrocode}
 % \changes{v0.62}{2018/11/11}{\pkg{xcolor}: Fix: Horiz white space.}
 %    \begin{macrocode}
-\LWR at stoppars%
+    \LWR at stoppars%
 %    \end{macrocode}
 %    \begin{macrocode}
-\begin{BlockClass}[%
-background:\LWR at colorstyle{#1}{#2} ; %
-padding:\LWR at printlength{\fboxsep}%
-]{colorboxBlock}
-#3
-\end{BlockClass}%
-\endgroup%
+    \begin{BlockClass}[%
+        background:\LWR at colorstyle{#1}{#2} ; %
+        padding:\LWR at printlength{\fboxsep}%
+    ]{colorboxBlock}
+    #3
+    \end{BlockClass}%
+    \endgroup%
 %    \end{macrocode}
 % Prevent paragraph tags around horizontal white space
 % until the start of the next paragraph:
 % \changes{v0.62}{2018/11/11}{\pkg{xcolor}: Fix: Horiz white space.}
 %    \begin{macrocode}
-\global\booltrue{LWR at minipagethispar}%
+    \global\booltrue{LWR at minipagethispar}%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -89134,23 +89934,23 @@
 % \changes{v0.892}{2020/10/05}{\pkg{xcolor}: Fixed second optional arg.}
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at HTML@fcolorbox}{O{named} m O{#1} m +m}{%
-\LWR at traceinfo{HTML fcolorbox #2 #4}%
-\begingroup%
-\LWR at hook@processingtags%
-\LWR at forceminwidth{\fboxrule}%
-\ifthenelse{\equal{#4}{none}}%
-    {% no background color
-        \InlineClass[%
-        \LWR at borderpadding{#1}{#2}%
-        ]{fcolorbox}{#5}%
-    }%
-    {% yes background color
-        \InlineClass[%
-        \LWR at borderpadding{#1}{#2} ; %
-        background:\LWR at colorstyle{#3}{#4}%
-        ]{fcolorbox}{#5}%
-    }%
-\endgroup%
+    \LWR at traceinfo{HTML fcolorbox #2 #4}%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \LWR at forceminwidth{\fboxrule}%
+    \ifthenelse{\equal{#4}{none}}%
+        {% no background color
+            \InlineClass[%
+            \LWR at borderpadding{#1}{#2}%
+            ]{fcolorbox}{#5}%
+        }%
+        {% yes background color
+            \InlineClass[%
+            \LWR at borderpadding{#1}{#2} ; %
+            background:\LWR at colorstyle{#3}{#4}%
+            ]{fcolorbox}{#5}%
+        }%
+    \endgroup%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -89166,41 +89966,41 @@
 % \changes{v0.892}{2020/10/05}{\pkg{xcolor}: Fixed second optional arg.}
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at HTML@fcolorboxBlock}{O{named} m O{#1} m +m}{%
-\LWR at traceinfo{HTML fcolorboxBlock #2 #4}%
-\begingroup%
-\LWR at hook@processingtags%
-\LWR at forceminwidth{\fboxrule}%
+    \LWR at traceinfo{HTML fcolorboxBlock #2 #4}%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \LWR at forceminwidth{\fboxrule}%
 %    \end{macrocode}
 % \changes{v0.62}{2018/11/11}{\pkg{xcolor}: Fix: Horiz white space.}
 %    \begin{macrocode}
-\LWR at stoppars%
+    \LWR at stoppars%
 %    \end{macrocode}
 %    \begin{macrocode}
-\ifthenelse{\equal{#4}{none}}%
-    {% no background color
-        \begin{BlockClass}[%
-            \LWR at borderpadding{#1}{#2}%
-        ]{fcolorboxBlock}
-        #5
-        \end{BlockClass}%
-    }%
-    {% yes background color
-        \convertcolorspec{#3}{#4}{HTML}\LWR at tempcolortwo%
-        \begin{BlockClass}[%
-            background:\LWR at origpound\LWR at tempcolortwo\ ; %
-            \LWR at borderpadding{#1}{#2}%
-        ]{fcolorboxBlock}
-        #5
-        \end{BlockClass}%
-    }%
-\endgroup%
+    \ifthenelse{\equal{#4}{none}}%
+        {% no background color
+            \begin{BlockClass}[%
+                \LWR at borderpadding{#1}{#2}%
+            ]{fcolorboxBlock}
+            #5
+            \end{BlockClass}%
+        }%
+        {% yes background color
+            \convertcolorspec{#3}{#4}{HTML}\LWR at tempcolortwo%
+            \begin{BlockClass}[%
+                background:\LWR at origpound\LWR at tempcolortwo\ ; %
+                \LWR at borderpadding{#1}{#2}%
+            ]{fcolorboxBlock}
+            #5
+            \end{BlockClass}%
+        }%
+    \endgroup%
 %    \end{macrocode}
 % Prevent paragraph tags around horizontal white space
 % until the start of the next paragraph:
 % \changes{v0.62}{2018/11/11}{\pkg{xcolor}: Fix: Horiz white space.}
 %    \begin{macrocode}
-\global\booltrue{LWR at minipagethispar}%
-\LWR at traceinfo{HTML fcolorboxBlock done}%
+    \global\booltrue{LWR at minipagethispar}%
+    \LWR at traceinfo{HTML fcolorboxBlock done}%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -89220,15 +90020,15 @@
 %    \end{macrocode}
 % \changes{v0.62}{2018/11/11}{\pkg{xcolor}: Fix: Horiz white space.}
 %    \begin{macrocode}
-\LWR at stoppars%
+    \LWR at stoppars%
 %    \end{macrocode}
 %    \begin{macrocode}
-\begin{BlockClass}[%
-#3%
-\LWR at borderpadding{#1}{#2} ; %
-\IfValueT{#4}{height:\LWR at printlength{\LWR at tempheight} ; }%
-width:\LWR at printlength{\LWR at tempwidth}%
-]{fcolorminipage}%
+    \begin{BlockClass}[%
+        #3%
+        \LWR at borderpadding{#1}{#2} ; %
+        \IfValueT{#4}{height:\LWR at printlength{\LWR at tempheight} ; }%
+        width:\LWR at printlength{\LWR at tempwidth}%
+    ]{fcolorminipage}%
 }
 %    \end{macrocode}
 % \end{noindmacro}
@@ -89242,19 +90042,19 @@
 %    \begin{macrocode}
 \NewDocumentEnvironment{LWR at HTML@fcolorminipage}{O{named} m O{#1} m O{c} o o m}
 {%
-\LWR at hook@processingtags%
-\setlength{\LWR at tempwidth}{#8}%
-\IfValueT{#6}{\setlength{\LWR at tempheight}{#6}}%
-\LWR at forceminwidth{\fboxrule}%
-\convertcolorspec{#1}{#2}{HTML}\LWR at tempcolor%
-\ifthenelse{\equal{#4}{none}}%
-    {\LWR at subfcolorminipage{#1}{#2}{}{#6}}%
-    {%
-        \convertcolorspec{#3}{#4}{HTML}\LWR at tempcolortwo%
-        \LWR at subfcolorminipage{#1}{#2}%
-            {background:\LWR at origpound\LWR at tempcolortwo\ ; }%
-            {#6}%
-    }%
+    \LWR at hook@processingtags%
+    \setlength{\LWR at tempwidth}{#8}%
+    \IfValueT{#6}{\setlength{\LWR at tempheight}{#6}}%
+    \LWR at forceminwidth{\fboxrule}%
+    \convertcolorspec{#1}{#2}{HTML}\LWR at tempcolor%
+    \ifthenelse{\equal{#4}{none}}%
+        {\LWR at subfcolorminipage{#1}{#2}{}{#6}}%
+        {%
+            \convertcolorspec{#3}{#4}{HTML}\LWR at tempcolortwo%
+            \LWR at subfcolorminipage{#1}{#2}%
+                {background:\LWR at origpound\LWR at tempcolortwo\ ; }%
+                {#6}%
+        }%
 }%
 {%
     \end{BlockClass}%
@@ -89279,19 +90079,22 @@
 % \changes{v0.57}{2018/06/02}{\pkg{xcolor}: Fix: Colored \cs{boxframe}.}
 %    \begin{macrocode}
 \newcommand*{\LWR at HTML@boxframe}[3]{%
-{%
-\setlength{\LWR at tempwidth}{#1}%
-\setlength{\LWR at tempheight}{#2}%
-\addtolength{\LWR at tempheight}{#3}%
-\LWR at forceminwidth{\fboxrule}%
-\LWR at findcurrenttextcolor%
-\InlineClass[%
-display:inline-block ; %
-border:\LWR at printlength{\LWR at atleastonept} solid \LWR at currenttextcolor{} ; %
-width:\LWR at printlength{\LWR at tempwidth} ; %
-height:\LWR at printlength{\LWR at tempheight}%
-]{boxframe}{}%
-}%
+    {%
+        \setlength{\LWR at tempwidth}{#1}%
+        \setlength{\LWR at tempheight}{#2}%
+        \addtolength{\LWR at tempheight}{#3}%
+        \LWR at forceminwidth{\fboxrule}%
+        \LWR at findcurrenttextcolor%
+        \InlineClass[%
+            display:inline-block ; %
+            border:%
+                \LWR at printlength{\LWR at atleastonept} % space
+                solid % space
+                \LWR at currenttextcolor{} ; % space
+            width:\LWR at printlength{\LWR at tempwidth} ; %
+            height:\LWR at printlength{\LWR at tempheight}%
+        ]{boxframe}{}%
+    }%
 }
 
 \LWR at formatted{boxframe}
@@ -89308,8 +90111,8 @@
 \newcommand*{\LWR at xcolortempcolor}{}
 
 \def\rowc at l@rs[#1]#2#3#4%
-{
-\rownum=1%
+{%
+   \rownum=1%
    \@rowcolorstrue%
    \@ifxempty{#3}%
      {\def\@oddrowcolor{\@norowcolor}}%
@@ -89363,7 +90166,7 @@
 % \begin{noindmacro}{\@norowcolor} Turns off color for this row.
 %    \begin{macrocode}
 \def\@norowcolor{%
-\renewcommand{\LWR at xcolorrowHTMLcolor}{}%
+    \renewcommand{\LWR at xcolorrowHTMLcolor}{}%
 }
 %    \end{macrocode}
 % \end{noindmacro}
@@ -93322,7 +94125,9 @@
 \CustomizeMathJax{\let\overgroupra\overrightarrow}
 \CustomizeMathJax{\let\undergroup\underparen}
 \CustomizeMathJax{\let\undergroupla\underleftarrow}
-\CustomizeMathJax{\newcommand{\widering}[1]{\stackrel{\unicode{x2218}}{\overgroup{#1}}}}
+\CustomizeMathJax{\newcommand{\widering}[1]{%
+    \stackrel{\unicode{x2218}}{\overgroup{#1}}%
+}}
 \CustomizeMathJax{\let\widearc\overparen}
 \CustomizeMathJax{\let\wideOarc\overrightarrow}
 \CustomizeMathJax{\newcommand{\LWRvvstar}[2]{{\overrightarrow{#1}_{#2}}}}
@@ -93335,8 +94140,12 @@
 \CustomizeMathJax{\newcommand{\smallointsl}{\mathop{\unicode{x222E}}\limits}}
 \CustomizeMathJax{\newcommand{\smalloiintsl}{\mathop{\unicode{x222F}}\limits}}
 \CustomizeMathJax{\newcommand{\smalloiiintsl}{\mathop{\unicode{x2230}}\limits}}
-\CustomizeMathJax{\newcommand{\smallvarointclockwisesl}{\mathop{\unicode{x2232}}\limits}}
-\CustomizeMathJax{\newcommand{\smallointctrclockwisesl}{\mathop{\unicode{x2233}}\limits}}
+\CustomizeMathJax{\newcommand{\smallvarointclockwisesl}{%
+    \mathop{\unicode{x2232}}\limits%
+}}
+\CustomizeMathJax{\newcommand{\smallointctrclockwisesl}{%
+    \mathop{\unicode{x2233}}\limits%
+}}
 \CustomizeMathJax{\newcommand{\smallsumintsl}{\mathop{\unicode{x2A0B}}\limits}}
 \CustomizeMathJax{\newcommand{\smallfintsl}{\mathop{\unicode{x2A0F}}\limits}}
 \CustomizeMathJax{\newcommand{\smallsqintsl}{\mathop{\unicode{x2A16}}\limits}}
@@ -93348,8 +94157,12 @@
 \CustomizeMathJax{\newcommand{\smallointup}{\mathop{\unicode{x222E}}\limits}}
 \CustomizeMathJax{\newcommand{\smalloiintup}{\mathop{\unicode{x222F}}\limits}}
 \CustomizeMathJax{\newcommand{\smalloiiintup}{\mathop{\unicode{x2230}}\limits}}
-\CustomizeMathJax{\newcommand{\smallvarointclockwiseup}{\mathop{\unicode{x2232}}\limits}}
-\CustomizeMathJax{\newcommand{\smallointctrclockwiseup}{\mathop{\unicode{x2233}}\limits}}
+\CustomizeMathJax{\newcommand{\smallvarointclockwiseup}{%
+    \mathop{\unicode{x2232}}\limits%
+}}
+\CustomizeMathJax{\newcommand{\smallointctrclockwiseup}{%
+    \mathop{\unicode{x2233}}\limits%
+}}
 \CustomizeMathJax{\newcommand{\smallsumintup}{\mathop{\unicode{x2A0B}}\limits}}
 \CustomizeMathJax{\newcommand{\smallfintup}{\mathop{\unicode{x2A0F}}\limits}}
 \CustomizeMathJax{\newcommand{\smallsqintup}{\mathop{\unicode{x2A16}}\limits}}
@@ -93385,8 +94198,12 @@
 \CustomizeMathJax{\let\ointup\oint}
 \CustomizeMathJax{\newcommand{\oiintup}{\mathop{\unicode{x222F}}\limits}}
 \CustomizeMathJax{\newcommand{\oiiintup}{\mathop{\unicode{x2230}}\limits}}
-\CustomizeMathJax{\newcommand{\varointclockwiseup}{\mathop{\unicode{x2232}}\limits}}
-\CustomizeMathJax{\newcommand{\ointctrclockwiseup}{\mathop{\unicode{x2233}}\limits}}
+\CustomizeMathJax{\newcommand{\varointclockwiseup}{%
+    \mathop{\unicode{x2232}}\limits%
+}}
+\CustomizeMathJax{\newcommand{\ointctrclockwiseup}{%
+    \mathop{\unicode{x2233}}\limits%
+}}
 \CustomizeMathJax{\newcommand{\sumintup}{\mathop{\unicode{x2A0B}}\limits}}
 \CustomizeMathJax{\newcommand{\fintup}{\mathop{\unicode{x2A0F}}\limits}}
 \CustomizeMathJax{\newcommand{\sqintup}{\mathop{\unicode{x2A16}}\limits}}
@@ -93425,8 +94242,12 @@
 \CustomizeMathJax{\newcommand{\medbullet}{\mathbin{\unicode{x025CF}}}}
 \CustomizeMathJax{\newcommand{\varparallel}{\mathrel{\unicode{x02AFD}}}}
 \CustomizeMathJax{\newcommand{\varparallelinv}{\mathrel{\unicode{x244A}}}}
-\CustomizeMathJax{\newcommand{\nvarparallel}{\mathrel{\LWRoverlaysymbols{-}{\unicode{x02AFD}}}}}
-\CustomizeMathJax{\newcommand{\nvarparallelinv}{\mathrel{\LWRoverlaysymbols{-}{\unicode{x244A}}}}}
+\CustomizeMathJax{\newcommand{\nvarparallel}{%
+    \mathrel{\LWRoverlaysymbols{-}{\unicode{x02AFD}}}%
+}}
+\CustomizeMathJax{\newcommand{\nvarparallelinv}{%
+    \mathrel{\LWRoverlaysymbols{-}{\unicode{x244A}}}%
+}}
 %
 %    \end{macrocode}
 % \changes{v0.891}{2020/09/19}{\pkg{lwarp-common-mathjax-newpxtxmath}: Expanded for \pkg{kpfonts}.}
@@ -93443,8 +94264,12 @@
 \CustomizeMathJax{\newcommand{\succeqq}{\mathrel{\unicode{x02AB4}}}}
 %
 
-\CustomizeMathJax{\newcommand{\nprecsim}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0227E}}}}}
-\CustomizeMathJax{\newcommand{\nsuccsim}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0227F}}}}}
+\CustomizeMathJax{\newcommand{\nprecsim}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0227E}}}%
+}}
+\CustomizeMathJax{\newcommand{\nsuccsim}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0227F}}}%
+}}
 \CustomizeMathJax{\newcommand{\nlesssim}{\mathrel{\unicode{x02274}}}}
 \CustomizeMathJax{\newcommand{\ngtrsim}{\mathrel{\unicode{x02275}}}}
 %
@@ -93456,36 +94281,70 @@
 \CustomizeMathJax{\newcommand{\notni}{\mathrel{\unicode{x220C}}}}
 \CustomizeMathJax{\let\notowns\notni}
 %
-\CustomizeMathJax{\newcommand{\nlessapprox}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x02A85}}}}}
-\CustomizeMathJax{\newcommand{\ngtrapprox}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x02A86}}}}}
+\CustomizeMathJax{\newcommand{\nlessapprox}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x02A85}}}%
+}}
+\CustomizeMathJax{\newcommand{\ngtrapprox}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x02A86}}}%
+}}
 %
-\CustomizeMathJax{\newcommand{\npreccurlyeq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0227C}}}}}
-\CustomizeMathJax{\newcommand{\nsucccurlyeq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0227D}}}}}
+\CustomizeMathJax{\newcommand{\npreccurlyeq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0227C}}}%
+}}
+\CustomizeMathJax{\newcommand{\nsucccurlyeq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0227D}}}%
+}}
 \CustomizeMathJax{\newcommand{\ngtrless}{\mathrel{\unicode{x02279}}}}
 \CustomizeMathJax{\newcommand{\nlessgtr}{\mathrel{\unicode{x2278}}}}
-\CustomizeMathJax{\newcommand{\nbumpeq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0224F}}}}}
-\CustomizeMathJax{\newcommand{\nBumpeq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0224E}}}}}
+\CustomizeMathJax{\newcommand{\nbumpeq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0224F}}}%
+}}
+\CustomizeMathJax{\newcommand{\nBumpeq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0224E}}}%
+}}
 %
-\CustomizeMathJax{\newcommand{\nbacksim}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0223D}}}}}
-\CustomizeMathJax{\newcommand{\nbacksimeq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x022CD}}}}}
+\CustomizeMathJax{\newcommand{\nbacksim}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0223D}}}%
+}}
+\CustomizeMathJax{\newcommand{\nbacksimeq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x022CD}}}%
+}}
 \CustomizeMathJax{\newcommand{\nasymp}{\mathrel{\unicode{x226D}}}}
 \CustomizeMathJax{\newcommand{\nequiv}{\mathrel{\unicode{x2262}}}}
 \CustomizeMathJax{\newcommand{\napprox}{\mathrel{\unicode{x2249}}}}
 %
-\CustomizeMathJax{\newcommand{\nll}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0226A}}}}}
-\CustomizeMathJax{\newcommand{\ngg}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0226B}}}}}
+\CustomizeMathJax{\newcommand{\nll}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0226A}}}%
+}}
+\CustomizeMathJax{\newcommand{\ngg}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0226B}}}%
+}}
 \CustomizeMathJax{\newcommand{\nthickapprox}{%
     \mathrel{\LWRoverlaysymbols{/}{{\mathbf{\unicode{x02248}}}}}%
 }}
-\CustomizeMathJax{\newcommand{\napproxeq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0224A}}}}}
-\CustomizeMathJax{\newcommand{\nprecapprox}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB7}}}}}
-\CustomizeMathJax{\newcommand{\nsuccapprox}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB8}}}}}
-\CustomizeMathJax{\newcommand{\npreceqq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB3}}}}}
-\CustomizeMathJax{\newcommand{\nsucceqq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB4}}}}}
+\CustomizeMathJax{\newcommand{\napproxeq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0224A}}}%
+}}
+\CustomizeMathJax{\newcommand{\nprecapprox}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB7}}}%
+}}
+\CustomizeMathJax{\newcommand{\nsuccapprox}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB8}}}%
+}}
+\CustomizeMathJax{\newcommand{\npreceqq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB3}}}%
+}}
+\CustomizeMathJax{\newcommand{\nsucceqq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB4}}}%
+}}
 \CustomizeMathJax{\newcommand{\nsimeq}{\mathrel{\unicode{x02244}}}}
 %
-\CustomizeMathJax{\newcommand{\nSubset}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x022D0}}}}}
-\CustomizeMathJax{\newcommand{\nSupset}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x022D1}}}}}
+\CustomizeMathJax{\newcommand{\nSubset}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x022D0}}}%
+}}
+\CustomizeMathJax{\newcommand{\nSupset}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x022D1}}}%
+}}
 \CustomizeMathJax{\newcommand{\nsqsubseteq}{\mathrel{\unicode{x022E2}}}}
 \CustomizeMathJax{\newcommand{\nsqsupseteq}{\mathrel{\unicode{x022E3}}}}
 %
@@ -93495,11 +94354,21 @@
 \CustomizeMathJax{\newcommand{\Coloneq}{\mathrel{\unicode{x2237}-}}}
 \CustomizeMathJax{\newcommand{\Eqcolon}{\mathrel{-\unicode{x2237}}}}
 %
-\CustomizeMathJax{\newcommand{\lvec}[1]{\mathord{\overset{\unicode{x02190}}{#1}}}}
-\CustomizeMathJax{\newcommand{\lrvec}[1]{\mathord{\overset{\unicode{x2194}}{#1}}}}
-\CustomizeMathJax{\newcommand{\harpoonacc}[1]{\mathord{\overset{\unicode{x021C0}}{#1}}}}
-\CustomizeMathJax{\newcommand{\lharpoonacc}[1]{\mathord{\overset{\unicode{x021BC}}{#1}}}}
-\CustomizeMathJax{\newcommand{\lrharpoonacc}[1]{\mathord{\overset{\unicode{x0294E}}{#1}}}}
+\CustomizeMathJax{\newcommand{\lvec}[1]{%
+    \mathord{\overset{\unicode{x02190}}{#1}}%
+}}
+\CustomizeMathJax{\newcommand{\lrvec}[1]{%
+    \mathord{\overset{\unicode{x2194}}{#1}}%
+}}
+\CustomizeMathJax{\newcommand{\harpoonacc}[1]{%
+    \mathord{\overset{\unicode{x021C0}}{#1}}%
+}}
+\CustomizeMathJax{\newcommand{\lharpoonacc}[1]{%
+    \mathord{\overset{\unicode{x021BC}}{#1}}%
+}}
+\CustomizeMathJax{\newcommand{\lrharpoonacc}[1]{%
+    \mathord{\overset{\unicode{x0294E}}{#1}}%
+}}
 \CustomizeMathJax{\newcommand{\barbar}[1]{\mathord{\overset{=}{#1}}}}
 \CustomizeMathJax{\newcommand{\bartilde}[1]{\mathord{\overset{\simeq}{#1}}}}
 \CustomizeMathJax{\newcommand{\barhat}[1]{\mathord{\hat{\bar{#1}}}}}
@@ -93539,9 +94408,15 @@
 
 \CustomizeMathJax{\newcommand{\lrtimes}{\mathrel{\unicode{x2A1D}}}}
 \CustomizeMathJax{\newcommand{\Diamondblack}{\mathord{\unicode{x025C6}}}}
-\CustomizeMathJax{\newcommand{\nplus}{\mathrel{\LWRoverlaysymbols{+}{\unicode{x02229}}}}}
-\CustomizeMathJax{\newcommand{\nsqsubset}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0228F}}}}}
-\CustomizeMathJax{\newcommand{\nsqsupset}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x02290}}}}}
+\CustomizeMathJax{\newcommand{\nplus}{%
+    \mathrel{\LWRoverlaysymbols{+}{\unicode{x02229}}}%
+}}
+\CustomizeMathJax{\newcommand{\nsqsubset}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0228F}}}%
+}}
+\CustomizeMathJax{\newcommand{\nsqsupset}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x02290}}}%
+}}
 \CustomizeMathJax{\newcommand{\dasharrow}{\mathrel{\unicode{x021E2}}}}
 \CustomizeMathJax{\newcommand{\leftsquigarrow}{\mathrel{\unicode{x021DC}}}}
 \CustomizeMathJax{\newcommand{\ntwoheadrightarrow}{\mathrel{\unicode{x02900}}}}
@@ -93565,8 +94440,12 @@
 
 \CustomizeMathJax{\newcommand{\leadstoext}{\mathrel{\unicode{xFF5E}}}}
 
-\CustomizeMathJax{\newcommand{\sqcupplus}{\mathbin{\LWRoverlaysymbols{+}{\unicode{x02294}}}}}
-\CustomizeMathJax{\newcommand{\sqcapplus}{\mathbin{\LWRoverlaysymbols{+}{\unicode{x02293}}}}}
+\CustomizeMathJax{\newcommand{\sqcupplus}{%
+    \mathbin{\LWRoverlaysymbols{+}{\unicode{x02294}}}%
+}}
+\CustomizeMathJax{\newcommand{\sqcapplus}{%
+    \mathbin{\LWRoverlaysymbols{+}{\unicode{x02293}}}%
+}}
 
 \CustomizeMathJax{\newcommand{\dlb}{\mathopen{\unicode{x027E6}}}}
 \CustomizeMathJax{\newcommand{\drb}{\mathopen{\unicode{x027E7}}}}
@@ -93581,7 +94460,9 @@
 \CustomizeMathJax{\newcommand{\forallAlt}{\mathord{\unicode{x02200}}}}
 \CustomizeMathJax{\newcommand{\emptysetAlt}{\mathord{\unicode{x02205}}}}
 
-\CustomizeMathJax{\newcommand{\uppartial}{\mathord{\unicode{x02202}}}}% not upright
+\CustomizeMathJax{\newcommand{\uppartial}{%
+    \mathord{\unicode{x02202}}%
+}}% not upright
 
 \CustomizeMathJax{\let\varmathbb\mathbb}
 \CustomizeMathJax{\let\vmathbb\mathbb}
@@ -93664,31 +94545,71 @@
 \CustomizeMathJax{\let\Mmapsfrom\Mmappedfrom}% from kpfonts-otf
 \CustomizeMathJax{\let\Longmmapsfrom\Longmmappedfrom}% from kpfonts-otf
 %
-\CustomizeMathJax{\newcommand{\boxright}{\mathrel{\unicode{x025A1}\!\unicode{x02192}}}}
-\CustomizeMathJax{\newcommand{\boxleft}{\mathrel{\unicode{x02190}\!\unicode{x025A1}}}}
-\CustomizeMathJax{\newcommand{\boxdotright}{\mathrel{\unicode{x022A1}\!\unicode{x02192}}}}
-\CustomizeMathJax{\newcommand{\boxdotleft}{\mathrel{\unicode{x02190}\!\unicode{x022A1}}}}
+\CustomizeMathJax{\newcommand{\boxright}{%
+    \mathrel{\unicode{x025A1}\!\unicode{x02192}}%
+}}
+\CustomizeMathJax{\newcommand{\boxleft}{%
+    \mathrel{\unicode{x02190}\!\unicode{x025A1}}%
+}}
+\CustomizeMathJax{\newcommand{\boxdotright}{%
+    \mathrel{\unicode{x022A1}\!\unicode{x02192}}%
+}}
+\CustomizeMathJax{\newcommand{\boxdotleft}{%
+    \mathrel{\unicode{x02190}\!\unicode{x022A1}}%
+}}
 
-\CustomizeMathJax{\newcommand{\Diamondright}{\mathrel{\unicode{x025C7}\!\unicode{x02192}}}}
-\CustomizeMathJax{\newcommand{\Diamondleft}{\mathrel{\unicode{x02190}\!\unicode{x025C7}}}}
-\CustomizeMathJax{\newcommand{\Diamonddotright}{\mathrel{\unicode{x027D0}\!\unicode{x02192}}}}
-\CustomizeMathJax{\newcommand{\Diamonddotleft}{\mathrel{\unicode{x02190}\!\unicode{x027D0}}}}
+\CustomizeMathJax{\newcommand{\Diamondright}{%
+    \mathrel{\unicode{x025C7}\!\unicode{x02192}}%
+}}
+\CustomizeMathJax{\newcommand{\Diamondleft}{%
+    \mathrel{\unicode{x02190}\!\unicode{x025C7}}%
+}}
+\CustomizeMathJax{\newcommand{\Diamonddotright}{%
+    \mathrel{\unicode{x027D0}\!\unicode{x02192}}%
+}}
+\CustomizeMathJax{\newcommand{\Diamonddotleft}{%
+    \mathrel{\unicode{x02190}\!\unicode{x027D0}}%
+}}
 
-\CustomizeMathJax{\newcommand{\boxRight}{\mathrel{\unicode{x025A1}\!\unicode{x021D2}}}}
-\CustomizeMathJax{\newcommand{\boxLeft}{\mathrel{\unicode{x021D0}\!\unicode{x025A1}}}}
-\CustomizeMathJax{\newcommand{\boxdotRight}{\mathrel{\unicode{x022A1}\!\unicode{x021D2}}}}
-\CustomizeMathJax{\newcommand{\boxdotLeft}{\mathrel{\unicode{x021D0}\!\unicode{x022A1}}}}
+\CustomizeMathJax{\newcommand{\boxRight}{%
+    \mathrel{\unicode{x025A1}\!\unicode{x021D2}}%
+}}
+\CustomizeMathJax{\newcommand{\boxLeft}{%
+    \mathrel{\unicode{x021D0}\!\unicode{x025A1}}%
+}}
+\CustomizeMathJax{\newcommand{\boxdotRight}{%
+    \mathrel{\unicode{x022A1}\!\unicode{x021D2}}%
+}}
+\CustomizeMathJax{\newcommand{\boxdotLeft}{%
+    \mathrel{\unicode{x021D0}\!\unicode{x022A1}}%
+}}
 
-\CustomizeMathJax{\newcommand{\DiamondRight}{\mathrel{\unicode{x025C7}\!\unicode{x021D2}}}}
-\CustomizeMathJax{\newcommand{\DiamondLeft}{\mathrel{\unicode{x021D0}\!\unicode{x025C7}}}}
-\CustomizeMathJax{\newcommand{\DiamonddotRight}{\mathrel{\unicode{x027D0}\!\unicode{x021D2}}}}
-\CustomizeMathJax{\newcommand{\DiamonddotLeft}{\mathrel{\unicode{x021D0}\!\unicode{x027D0}}}}
+\CustomizeMathJax{\newcommand{\DiamondRight}{%
+    \mathrel{\unicode{x025C7}\!\unicode{x021D2}}%
+}}
+\CustomizeMathJax{\newcommand{\DiamondLeft}{%
+    \mathrel{\unicode{x021D0}\!\unicode{x025C7}}%
+}}
+\CustomizeMathJax{\newcommand{\DiamonddotRight}{%
+    \mathrel{\unicode{x027D0}\!\unicode{x021D2}}%
+}}
+\CustomizeMathJax{\newcommand{\DiamonddotLeft}{%
+    \mathrel{\unicode{x021D0}\!\unicode{x027D0}}%
+}}
 \CustomizeMathJax{\newcommand{\Diamonddot}{\mathrel{\unicode{x027D0}}}}
 
-\CustomizeMathJax{\newcommand{\circleright}{\mathrel{\unicode{x025CB}\!\unicode{x02192}}}}
-\CustomizeMathJax{\newcommand{\circleleft}{\mathrel{\unicode{x02190}\!\unicode{x025CB}}}}
-\CustomizeMathJax{\newcommand{\circledotright}{\mathrel{\unicode{x02299}\!\unicode{x02192}}}}
-\CustomizeMathJax{\newcommand{\circledotleft}{\mathrel{\unicode{x02190}\!\unicode{x02299}}}}
+\CustomizeMathJax{\newcommand{\circleright}{%
+    \mathrel{\unicode{x025CB}\!\unicode{x02192}}%
+}}
+\CustomizeMathJax{\newcommand{\circleleft}{%
+    \mathrel{\unicode{x02190}\!\unicode{x025CB}}%
+}}
+\CustomizeMathJax{\newcommand{\circledotright}{%
+    \mathrel{\unicode{x02299}\!\unicode{x02192}}%
+}}
+\CustomizeMathJax{\newcommand{\circledotleft}{%
+    \mathrel{\unicode{x02190}\!\unicode{x02299}}%
+}}
 \CustomizeMathJax{\let\circleddotright\circledotright}
 \CustomizeMathJax{\let\circleddotleft\circledotleft}
 
@@ -93696,7 +94617,9 @@
 \CustomizeMathJax{\newcommand{\multimapboth}{\mathrel{\unicode{x029DF}}}}
 \CustomizeMathJax{\newcommand{\multimapdot}{{\mathrel{-\!\bullet}}}}
 \CustomizeMathJax{\newcommand{\multimapdotinv}{\mathrel{\bullet\!-}}}
-\CustomizeMathJax{\newcommand{\multimapdotboth}{\mathrel{{\bullet\!\!-\!\!\bullet}}}}
+\CustomizeMathJax{\newcommand{\multimapdotboth}{%
+    \mathrel{{\bullet\!\!-\!\!\bullet}}%
+}}
 \CustomizeMathJax{\newcommand{\multimapdotbothA}{\mathrel{\unicode{x022B6}}}}
 \CustomizeMathJax{\newcommand{\multimapdotbothB}{\mathrel{\unicode{x22B7}}}}
 
@@ -93741,11 +94664,17 @@
 
 \CustomizeMathJax{\newcommand{\colonapprox}{\mathrel{:\approx}}}
 \CustomizeMathJax{\newcommand{\colonsim}{\mathrel{:\sim}}}
-\CustomizeMathJax{\newcommand{\Colonapprox}{\mathrel{\unicode{x2237}\!\approx}}}
+\CustomizeMathJax{\newcommand{\Colonapprox}{%
+    \mathrel{\unicode{x2237}\!\approx}%
+}}
 \CustomizeMathJax{\newcommand{\Colonsim}{\mathrel{\unicode{x2237}\!\sim}}}
 
-\CustomizeMathJax{\newcommand{\strictif}{\mathrel{\unicode{x0297D}}}}% right fish tail
-\CustomizeMathJax{\newcommand{\strictfi}{\mathrel{\unicode{x0297C}}}}% left fish tail
+\CustomizeMathJax{\newcommand{\strictif}{%
+    \mathrel{\unicode{x0297D}}%
+}}% right fish tail
+\CustomizeMathJax{\newcommand{\strictfi}{%
+    \mathrel{\unicode{x0297C}}%
+}}% left fish tail
 \CustomizeMathJax{\newcommand{\strictiff}{%
     \mathrel{\unicode{x0297C}\!\!\unicode{x0297D}}%
 }}% left/right fish tails
@@ -93758,8 +94687,12 @@
 }}
 \CustomizeMathJax{\newcommand{\circledbar}{\mathbin{\unicode{x029B6}}}}
 
-\CustomizeMathJax{\newcommand{\openJoin}{\mathrel{\unicode{x2AA4}}}}% overlapping ><
-\CustomizeMathJax{\newcommand{\opentimes}{\mathrel{\unicode{x2AA4}}}}% overlapping ><
+\CustomizeMathJax{\newcommand{\openJoin}{%
+    \mathrel{\unicode{x2AA4}}%
+}}% overlapping ><
+\CustomizeMathJax{\newcommand{\opentimes}{%
+    \mathrel{\unicode{x2AA4}}%
+}}% overlapping ><
 
 \CustomizeMathJax{\newcommand{\VvDash}{\mathrel{\unicode{x22AA}}}}
 
@@ -93769,7 +94702,9 @@
 
 \CustomizeMathJax{\newcommand{\lambdaslash}{\mathord{\unicode{x019B}}}}
 
-\CustomizeMathJax{\newcommand{\Wr}{\mathbin{\unicode{x02240}\!\unicode{x02240}}}}
+\CustomizeMathJax{\newcommand{\Wr}{%
+    \mathbin{\unicode{x02240}\!\unicode{x02240}}%
+}}
 
 \CustomizeMathJax{\newcommand{\dashleftrightarrow}{%
     \mathrel{\unicode{x021E0}\!\unicode{x021E2}}%

Modified: trunk/Master/texmf-dist/source/latex/lwarp/lwarp.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/lwarp/lwarp.ins	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/source/latex/lwarp/lwarp.ins	2022-02-01 22:09:57 UTC (rev 61842)
@@ -474,6 +474,7 @@
 \file{lwarp-shapepar.sty}{\from{lwarp.dtx}{shapepar}}
 \file{lwarp-showidx.sty}{\from{lwarp.dtx}{idx}}
 \file{lwarp-showkeys.sty}{\from{lwarp.dtx}{showkeys}}
+\file{lwarp-showlabels.sty}{\from{lwarp.dtx}{showlabels}}
 \file{lwarp-showtags.sty}{\from{lwarp.dtx}{showtags}}
 \file{lwarp-shuffle.sty}{\from{lwarp.dtx}{shuffle}}
 \file{lwarp-sidecap.sty}{\from{lwarp.dtx}{sidecap}}
@@ -587,6 +588,7 @@
 \file{lwarp-widows-and-orphans.sty}{\from{lwarp.dtx}{widows-and-orphans}}
 \file{lwarp-witharrows.sty}{\from{lwarp.dtx}{witharrows}}
 \file{lwarp-wrapfig.sty}{\from{lwarp.dtx}{wrapfig}}
+\file{lwarp-wrapfig2.sty}{\from{lwarp.dtx}{wrapfig2}}
 \file{lwarp-xbmks.sty}{\from{lwarp.dtx}{xbmks}}
 \file{lwarp-xcolor.sty}{\from{lwarp.dtx}{xcolor}}
 \file{lwarp-xechangebar.sty}{\from{lwarp.dtx}{xechangebar}}

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-CJK.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-CJK.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-CJK.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -15,7 +15,7 @@
 %%   http://www.latex-project.org/lppl.txt
 %% and version 1.3 or later is part of all distributions of LaTeX
 %% version 2005/12/01 or later.
-\@ifpackageloaded{xeCJK}{}{
+\IfPackageLoadedTF{xeCJK}{}{
     \LWR at loadnever{CJK}{ctex, xeCJK}
 }
 

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-CJKutf8.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-CJKutf8.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-CJKutf8.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -15,7 +15,7 @@
 %%   http://www.latex-project.org/lppl.txt
 %% and version 1.3 or later is part of all distributions of LaTeX
 %% version 2005/12/01 or later.
-\@ifpackageloaded{xeCJK}{}{
+\IfPackageLoadedTF{xeCJK}{}{
     \LWR at loadnever{CJKutf8}{ctex, xeCJK}
 }
 

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-SIunits.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-SIunits.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-SIunits.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -20,8 +20,9 @@
     \DeclareRobustCommand{\LWR at HTML@unit}[2]{%
         \LWR at subsingledollar*%  lwarp
         {% alt tag
-            \textbackslash{}unit\{\LWR at HTMLsanitize{#1}\}%
-                \{ \LWR at HTMLsanitize{#2}\}% extra space
+            \textbackslash{}unit%
+            \{\LWR at HTMLsanitizedetokenized{\detokenize{#1}}\}%
+                \{ \LWR at HTMLsanitizedetokenized{\detokenize{#2}}\}% extra space
         }%
         {SIunits}% add'l hashing
         {%
@@ -33,8 +34,8 @@
         \@inunitcommandtrue%    original
         \LWR at subsingledollar*%  lwarp
         {% alt tag
-            \textbackslash{}unit\{\LWR at HTMLsanitize{#1}\}%
-                \{ \LWR at HTMLsanitize{#2}\}% extra space
+            \textbackslash{}unit\{\LWR at HTMLsanitizedetokenized{\detokenize{#1}}\}%
+                \{ \LWR at HTMLsanitizedetokenized{\detokenize{#2}}\}% extra space
         }%
         {SIunits}% add'l hashing
         {%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-abstract.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-abstract.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-abstract.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -32,7 +32,7 @@
 \InlineClass{abstractrunintitle}{\abstractname}%
 \@bslabeldelim}%
 }
-\@ifclassloaded{memoir}
+\IfClassLoadedTF{memoir}
 {
   \renewenvironment{abstract}{%
   \setup at bstract

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-acro.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-acro.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-acro.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -35,10 +35,10 @@
 \LWR at formatted{acro_dot_fill:}
 \ExplSyntaxOff
 \ExplSyntaxOn
-\@ifpackagelater{acro}{2020/04/29}%
+\IfPackageAtLeastTF{acro}{2020/04/29}%
 {}% v3 or later
 {% before v3
-\@ifpackagelater{acro}{2019/09/23}%
+\IfPackageAtLeastTF{acro}{2019/09/23}%
 {% v2.10 or later
 \cs_gset_protected:Npn \__acro_typeset:nn #1#2
   {

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-acronym.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-acronym.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-acronym.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -24,11 +24,11 @@
 \renewcommand*\AC at acs[1]{%
  \expandafter\AC at get\csname fn@#1\endcsname\@firstoftwo{#1}}
 
-\renewcommand{\@starttoc}[1]{
-\LWR at htmlelementclass{nav}{#1}
-\LetLtxMacro\@verridelabel\@gobble
-\LWR at orig@starttoc{#1}
-\LWR at htmlelementclassend{nav}{#1}
+\renewcommand{\@starttoc}[1]{%
+    \LWR at htmlelementclass{nav}{#1}
+    \LetLtxMacro\@verridelabel\@gobble
+    \LWR at orig@starttoc{#1}
+    \LWR at htmlelementclassend{nav}{#1}
 }
 
 \renewcommand*\AC at und@newl at bel[3]{%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-algorithm2e.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-algorithm2e.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-algorithm2e.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -33,21 +33,21 @@
 \renewcommand*{\LWR at floatstyle@algocf}{plain}
 }{}
 \renewcommand{\algocf at everypar}{%
-\ifbool{LWR at algocf@dopars}{%
-    \ifbool{LWR at doingstartpars}{%
-        \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
-            {}%
-            {%
-                \LWR at htmltagc{\LWR at tagregularparagraph}\LWR at orignewline%
-                \algocf at everyparnl\algocf at everyparhanging%
-            }%
+    \ifbool{LWR at algocf@dopars}{%
+        \ifbool{LWR at doingstartpars}{%
+            \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
+                {}%
+                {%
+                    \LWR at htmltagc{\LWR at tagregularparagraph}\LWR at orignewline%
+                    \algocf at everyparnl\algocf at everyparhanging%
+                }%
+        }{}%
     }{}%
-}{}%
 }
 \renewcommand{\algocf at makecaption}[2]{%
-\LWR at HTML@caption at begin{algocf}%
-\LWR at isolate{\algocf at captiontext{#1}{#2}}%
-\LWR at HTML@caption at end%
+    \LWR at HTML@caption at begin{algocf}%
+    \LWR at isolate{\algocf at captiontext{#1}{#2}}%
+    \LWR at HTML@caption at end%
 }
 \renewcommand{\algocf at makecaption@plain}[2]{%
     \LWR at HTML@caption at begin{algocf}%
@@ -67,7 +67,7 @@
     \LWR at HTML@caption at end%
 }
 \long\def\algocf at latexcaption#1[#2]#3{% original definition of caption
-\boolfalse{LWR at algocf@dopars}%  lwarp
+\boolfalse{LWR at algocf@dopars}%      lwarp
   \par%
   \addcontentsline{\csname ext@#1\endcsname}{#1}%
   {\protect\numberline{\csname the#1\endcsname}{\ignorespaces \LWR at isolate{#2}}}%
@@ -79,7 +79,7 @@
   \normalsize%
   \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par%
   \endgroup%
-\booltrue{LWR at algocf@dopars}%   lwarp
+\booltrue{LWR at algocf@dopars}%       lwarp
 }
 \renewcommand{\algocf at printnl}[1]{%
     \InlineClass{alg2elinenumber}{\NlSty{#1}}~%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-amsthm.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-amsthm.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-amsthm.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -17,7 +17,7 @@
 %% version 2005/12/01 or later.
 
 
-\@ifpackageloaded{mdframed}{
+\IfPackageLoadedTF{mdframed}{
     \PackageError{lwarp}
     {%
         Package mdframed must be loaded after package amsthm.\MessageBreak
@@ -91,7 +91,7 @@
     \GetTitleString{#3}%                                lwarp
     \let\@currentlabelname\GetTitleStringResult%        lwarp
     \item[%
-    \LWR at newautopagelabel{page}%
+    \LWR at newautopagelabel{page}\LWR at orignewline%
     \@ifempty{#1}{\let\thmname\@gobble}{\LWR at haveamsthmname}%       lwarp
     \@ifempty{#2}{\let\thmnumber\@gobble}{\LWR at haveamsthmnumber}%   lwarp
     \@ifempty{#3}{\let\thmnote\@gobble}{\LWR at haveamsthmnote}%       lwarp

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-array.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-array.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-array.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -15,7 +15,7 @@
 %%   http://www.latex-project.org/lppl.txt
 %% and version 1.3 or later is part of all distributions of LaTeX
 %% version 2005/12/01 or later.
-\@ifpackageloaded{array}{}{%
+\IfPackageLoadedTF{array}{}{%
     \let\firsthline\relax
     \let\lasthline\relax
 }

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-authblk.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-authblk.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-authblk.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -15,7 +15,7 @@
 %%   http://www.latex-project.org/lppl.txt
 %% and version 1.3 or later is part of all distributions of LaTeX
 %% version 2005/12/01 or later.
-\@ifpackageloaded{titling}{
+\IfPackageLoadedTF{titling}{
     \PackageError{lwarp-authblk}
         {Package authblk must be loaded before titling}
         {%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-backnaur.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-backnaur.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-backnaur.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -22,16 +22,16 @@
 \CustomizeMathJax{\newcommand{\bnfpn}[1]{\langle \text{\textrm{#1}} \rangle}}
 \CustomizeMathJax{\newcommand{\bnfor}{\; \mid \;}}
 \CustomizeMathJax{\newcommand{\bnfsp}{\;}}
-\@ifpackagewith{backnaur}{perp}{
+\IfPackageLoadedWithOptionsTF{backnaur}{perp}{
     \CustomizeMathJax{\newcommand{\bnfes}{\perp}}
 }{
-    \@ifpackagewith{backnaur}{epsilon}{
+    \IfPackageLoadedWithOptionsTF{backnaur}{epsilon}{
         \CustomizeMathJax{\newcommand{\bnfes}{\epsilon}}
     }{
         \CustomizeMathJax{\newcommand{\bnfes}{\lambda}}
     }
 }
-\@ifpackagewith{backnaur}{tsrm}{
+\IfPackageLoadedWithOptionsTF{backnaur}{tsrm}{
     \CustomizeMathJax{\newcommand{\bnfts}[1]{\text{#1}}}
 }{
     \CustomizeMathJax{\newcommand{\bnfts}[1]{\text{\texttt{#1}}}}
@@ -38,7 +38,7 @@
 }
 \CustomizeMathJax{\newcommand{\bnftd}[1]{\text{\textit{#1}}}}
 \CustomizeMathJax{\newcommand{\bnfsk}{\dots}}
-\@ifpackagewith{backnaur}{altpo}{
+\IfPackageLoadedWithOptionsTF{backnaur}{altpo}{
     \CustomizeMathJax{\newcommand{\bnfpo}{::=}}
 }{
     \CustomizeMathJax{\newcommand{\bnfpo}{\models}}

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-biblatex.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-biblatex.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-biblatex.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -66,7 +66,7 @@
 
 \xpatchcmd{\blx at addbackref@i}
     {\c at page}
-    {\c at LWR@previousautopagelabel}% refto the most recent object
+    {\c at LWR@previousautopagelabel}% ref to the most recent object
     {}
     {\LWR at patcherror{biblatex}{blx at addbackref@i B}}
 \DeclareListFormat{pageref}{%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-booktabs.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-booktabs.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-booktabs.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -15,7 +15,7 @@
 %%   http://www.latex-project.org/lppl.txt
 %% and version 1.3 or later is part of all distributions of LaTeX
 %% version 2005/12/01 or later.
-\@ifpackageloaded{booktabs}{}{
+\IfPackageLoadedTF{booktabs}{}{
     \LetLtxMacro\toprule\relax
     \LetLtxMacro\midrule\relax
     \LetLtxMacro\cmidrule\cline

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cancel.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cancel.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cancel.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -46,7 +46,7 @@
 \LetLtxMacro\bcancel\cancel
 \LetLtxMacro\xcancel\cancel
 \begin{warpMathJax}
-\PackageWarningNoLine{lwarp, cancel}{The MathJax v3 extension will be used}
+\PackageNoteNoLine{lwarp, cancel}{The MathJax v3 extension will be used}
 \CustomizeMathJax{\require{cancel}}
 \end{warpMathJax}
 

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-caption.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-caption.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-caption.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -76,7 +76,7 @@
 }
 
 \caption at AtBeginDocument{
-\@ifpackageloaded{lwarp-scrextend}{
+\IfPackageLoadedTF{lwarp-scrextend}{
     \LetLtxMacro\captionbelow\caption
     \LetLtxMacro\captionabove\caption
     \LetLtxMacro\captionofbelow\captionof

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-caption3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-caption3.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-caption3.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -17,7 +17,7 @@
 %% version 2005/12/01 or later.
 
 \LWR at ProvidesPackagePass{caption3}[2020/10/21]
-\@ifpackagelater{caption3}{2020/08/23}{
+\IfPackageAtLeastTF{caption3}{2020/08/23}{
 \renewcommand\caption@@@make[2]{%
 \LWR at traceinfo{caption@@@make}%
     \LWR at stoppars%                              lwarp

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cases.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cases.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cases.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -15,7 +15,7 @@
 %%   http://www.latex-project.org/lppl.txt
 %% and version 1.3 or later is part of all distributions of LaTeX
 %% version 2005/12/01 or later.
-\LWR at ProvidesPackagePass{cases}[2002/05/02]
+\LWR at ProvidesPackagePass{cases}[2020/03/29]
 \BeforeBeginEnvironment{numcases}{
     \begin{BlockClass}{displaymathnumbered}
     \LWR at newautoidanchor%
@@ -37,6 +37,31 @@
 \AfterEndEnvironment{subnumcases}{
     \end{lateximage}\end{BlockClass}
 }
+
+\makeatletter
+\begin{warpHTML}
+\AtBeginDocument{
+    \@ifpackageloaded{amsmath}
+    {
+        \xpatchcmd{\tagform@}{\leftprotrusion{(}}{(}
+            {}
+            {\LWR at patcherror{cases}{tagform@ A}}%
+        \xpatchcmd{\tagform@}{\rightprotrusion{)}}{)}
+            {}
+            {\LWR at patcherror{cases}{tagform@ B}}%
+    }
+    {
+        \xpatchcmd{\@eqnnum}{\leftprotrusion{(}}{(}
+            {}
+            {\LWR at patcherror{cases}{@eqnnum A}}%
+        \xpatchcmd{\@eqnnum}{\rightprotrusion{)}}{)}
+            {}
+            {\LWR at patcherror{cases}{@eqnnum A}}%
+    }%
+}
+\end{warpHTML}
+\makeatother
+
 \endinput
 %%
 %% End of file `lwarp-cases.sty'.

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-chemfig.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-chemfig.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-chemfig.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -20,7 +20,7 @@
 
 \catcode`\_=11
 
-\@ifpackagelater{chemfig}{2020/03/05}
+\IfPackageAtLeastTF{chemfig}{2020/03/05}
 {
     \xpretocmd\charge{\begin{lateximage}[-chemfig-~\PackageDiagramAltText]}
         {}{\LWR at patcherror{chemfig}{charge}}
@@ -30,7 +30,7 @@
         {}{\LWR at patcherror{chemfig}{charge_c}}
 }{}
 
-\@ifpackagelater{chemfig}{2019/04/18}%
+\IfPackageAtLeastTF{chemfig}{2019/04/18}%
 {% 2019/04/18 or newer
     \xpretocmd{\CF_chemfiga}
         {\begin{lateximage}[-chemfig-~\PackageDiagramAltText]}

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-chemformula.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-chemformula.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-chemformula.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -29,9 +29,15 @@
         \begingroup%
         \boolfalse{mathjax}%
         \LWR at subsingledollar*{% lwarp
-            \textbackslash{}ch\{\LWR at HTMLsanitize{#2}\}% alt text
+            \textbackslash{}%
+            ch%
+            \{%
+                \LWR at HTMLsanitizedetokenized{\detokenize{#2}}%
+            \}% alt text
         }{%
-           \protect\LWR at HTMLsanitize{\detokenize\expandafter{#1}}% add'l hashing
+           \protect\LWR at HTMLsanitizedetokenized{%
+                \detokenize\expandafter{#1}%
+            }% add'l hashing
         }%
         {%
             \chemformula_ch:nn {#1} {#2}%   original
@@ -39,15 +45,19 @@
         \endgroup%
     }
   }
-\@ifpackagelater{chemformula}{2019/10/13}{
+\IfPackageAtLeastTF{chemformula}{2019/10/13}{
 \cs_gset_protected:Npn \chemformula_chcpd:nn #1#2
   {
     \begingroup%
     \boolfalse{mathjax}%
     \LWR at subsingledollar*{% lwarp
-        \textbackslash{}chcpd\{\LWR at HTMLsanitize{#2}\}%
+        \textbackslash{}%
+        chcpd%
+        \{%
+            \LWR at HTMLsanitizedetokenized{\detokenize{#2}}%
+        \}%
     }{%
-        \protect\LWR at HTMLsanitize{\detokenize\expandafter{#1}}%
+        \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#1}}%
     }{% original
     \group_begin:
       \tl_if_blank:nF {#2}
@@ -76,9 +86,13 @@
     \begingroup%
     \boolfalse{mathjax}%
     \LWR at subsingledollar*{% lwarp
-        \textbackslash{}chcpd\{\LWR at HTMLsanitize{#2}\}%
+        \textbackslash{}%
+        chcpd%
+        \{%
+            \LWR at HTMLsanitizedetokenized{\detokenize{#2}}%
+        \}%
     }{%
-        \protect\LWR at HTMLsanitize{\detokenize\expandafter{#1}}%
+        \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#1}}%
     }{% original
     \group_begin:
       \tl_if_blank:nF {#2}
@@ -110,7 +124,10 @@
 \RenewDocumentCommand \chname { R(){}R(){} }
   {
     \begin{lateximage}*[%
-        \textbackslash{}chname(\LWR at HTMLsanitize{#1})(\LWR at HTMLsanitize{#2})
+        \textbackslash{}%
+        chname%
+        (\LWR at HTMLsanitizedetokenized{\detokenize{#1}})%
+        (\LWR at HTMLsanitizedetokenized{\detokenize{#2}})%
     ]*%
         \chemformula_chwritebelow:nn {#1} {#2}
     \end{lateximage}
@@ -121,7 +138,7 @@
     \boolfalse{mathjax}%
     \LWR at subsingledollar*{\textbackslash{}chlewis\{#2\}\{#3\}}%
     {
-        \protect\LWR at HTMLsanitize{\detokenize\expandafter{#1}}%
+        \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#1}}%
     }{
         \chemformula_lewis:nnn {#1} {#2} {#3}
     }

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-chemmacros.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-chemmacros.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-chemmacros.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -41,9 +41,14 @@
     \begingroup
     \boolfalse{mathjax}
     \LWR at subsingledollar*{
-        \textbackslash{}p\{\LWR at HTMLsanitize{#1}\}
+        \textbackslash{}%
+        p%
+        \{%
+            \LWR at HTMLsanitizedetokenized{\detokenize{#1}}%
+        \}
     }{
-        chemmacrosp\protect\LWR at HTMLsanitize{\detokenize\expandafter{#1}}%
+        chemmacrosp%
+        \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#1}}%
     }{
     \group_begin:
       \mbox
@@ -463,7 +468,10 @@
     \IfValueTF{#1}
     {
         \begin{lateximage}[%
-            \textbackslash{}orbital{[}\LWR at HTMLsanitize{#1}{]}\{#2\}%
+            \textbackslash{}%
+            orbital{[}%
+            \LWR at HTMLsanitizedetokenized{\detokenize{#1}}%
+            {]}\{#2\}%
         ]*[][margin-left: 1em ; margin-right: 1em]
     }
     {
@@ -530,9 +538,13 @@
     \IfBooleanTF {#1}
       {
         \LWR at subsingledollar*{% yes hash
-            \textbackslash{}ox*\{\LWR at HTMLsanitize{#3}\}% alt
+            \textbackslash{}%
+            ox*%
+            \{%
+                \LWR at HTMLsanitizedetokenized{\detokenize{#3}}%
+            \}% alt
         }{%
-            star \protect\LWR at HTMLsanitize{\detokenize\expandafter{#2}}%
+            star \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#2}}%
         }{%
             \LWR at chemmacros@ox* {#2} {#3}% contents
         }%
@@ -539,9 +551,13 @@
       }
       {
         \LWR at subsingledollar*{% yes hash
-            \textbackslash{}ox*\{\LWR at HTMLsanitize{#3}\}% alt
+            \textbackslash{}%
+            ox*%
+            \{%
+                \LWR at HTMLsanitizedetokenized{\detokenize{#3}}%
+            \}% alt
         }{%
-            \protect\LWR at HTMLsanitize{\detokenize\expandafter{#2}}%
+            \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#2}}%
         }{%
             \LWR at chemmacros@ox {#2} {#3}% contents
         }%
@@ -785,7 +801,8 @@
       \boolfalse{mathjax}
       \chemmacros_set_keys:nn {thermodynamics} {#1}
         \LWR at subsingledollar*{% yes hashing
-            \textbackslash{}state\{\LWR at HTMLsanitize{#2}\}% alt
+            \textbackslash{}state%
+            \{\LWR at HTMLsanitizedetokenized{\detokenize{#2}}\}% alt
         }{%
             chemmacros_state% add'l hashing
             #1% options

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cleveref.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cleveref.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cleveref.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -119,7 +119,7 @@
 \LWR at absorbstar{Cpagerefrange}
 \LWR at absorbstar{labelcref}
 \LWR at absorbstar{labelcpageref}
-\@ifpackageloaded{varioref}{
+\IfPackageLoadedTF{varioref}{
     \LWR at absorbstar{vref}
     \LWR at absorbstar{Vref}
     \LWR at absorbstar{vrefrange}
@@ -127,7 +127,7 @@
     \LWR at absorbstar{fullref}
     \LWR at absorbstar{Fullref}
 }{}% varioref
-\@ifclassloaded{memoir}{
+\IfClassLoadedTF{memoir}{
 \AtBeginDocument{
 \def\sf at memsub@label(#1)#2{%
   \protected at edef\mem at currentlabelname{#1}%
@@ -134,7 +134,7 @@
   \sf@@memsub at label{#2}}
 }
 }{}
-\@ifpackageloaded{subfig}{
+\IfPackageLoadedTF{subfig}{
 \def\sf at sub@label(#1)#2{%
   \ifhyperrefloaded
     \protected at edef\@currentlabelname{%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cmbright.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cmbright.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cmbright.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -22,7 +22,7 @@
 
 \begin{warpMathJax}
 
-\@ifpackagewith{cmbright}{slantedGreek}
+\IfPackageLoadedWithOptionsTF{cmbright}{slantedGreek}
 {
     \LWR at mathjax@addgreek at u@it*{}{}
 }

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-color.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-color.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-color.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -17,6 +17,7 @@
 %% version 2005/12/01 or later.
 \LWR at ProvidesPackageDrop{color}[2016/07/10]
 \RequirePackage{xcolor}
+\let\color at endgroup\endgroup
 \endinput
 %%
 %% End of file `lwarp-color.sty'.

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-common-mathjax-newpxtxmath.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-common-mathjax-newpxtxmath.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-common-mathjax-newpxtxmath.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -47,7 +47,9 @@
 \CustomizeMathJax{\let\overgroupra\overrightarrow}
 \CustomizeMathJax{\let\undergroup\underparen}
 \CustomizeMathJax{\let\undergroupla\underleftarrow}
-\CustomizeMathJax{\newcommand{\widering}[1]{\stackrel{\unicode{x2218}}{\overgroup{#1}}}}
+\CustomizeMathJax{\newcommand{\widering}[1]{%
+    \stackrel{\unicode{x2218}}{\overgroup{#1}}%
+}}
 \CustomizeMathJax{\let\widearc\overparen}
 \CustomizeMathJax{\let\wideOarc\overrightarrow}
 \CustomizeMathJax{\newcommand{\LWRvvstar}[2]{{\overrightarrow{#1}_{#2}}}}
@@ -59,8 +61,12 @@
 \CustomizeMathJax{\newcommand{\smallointsl}{\mathop{\unicode{x222E}}\limits}}
 \CustomizeMathJax{\newcommand{\smalloiintsl}{\mathop{\unicode{x222F}}\limits}}
 \CustomizeMathJax{\newcommand{\smalloiiintsl}{\mathop{\unicode{x2230}}\limits}}
-\CustomizeMathJax{\newcommand{\smallvarointclockwisesl}{\mathop{\unicode{x2232}}\limits}}
-\CustomizeMathJax{\newcommand{\smallointctrclockwisesl}{\mathop{\unicode{x2233}}\limits}}
+\CustomizeMathJax{\newcommand{\smallvarointclockwisesl}{%
+    \mathop{\unicode{x2232}}\limits%
+}}
+\CustomizeMathJax{\newcommand{\smallointctrclockwisesl}{%
+    \mathop{\unicode{x2233}}\limits%
+}}
 \CustomizeMathJax{\newcommand{\smallsumintsl}{\mathop{\unicode{x2A0B}}\limits}}
 \CustomizeMathJax{\newcommand{\smallfintsl}{\mathop{\unicode{x2A0F}}\limits}}
 \CustomizeMathJax{\newcommand{\smallsqintsl}{\mathop{\unicode{x2A16}}\limits}}
@@ -71,8 +77,12 @@
 \CustomizeMathJax{\newcommand{\smallointup}{\mathop{\unicode{x222E}}\limits}}
 \CustomizeMathJax{\newcommand{\smalloiintup}{\mathop{\unicode{x222F}}\limits}}
 \CustomizeMathJax{\newcommand{\smalloiiintup}{\mathop{\unicode{x2230}}\limits}}
-\CustomizeMathJax{\newcommand{\smallvarointclockwiseup}{\mathop{\unicode{x2232}}\limits}}
-\CustomizeMathJax{\newcommand{\smallointctrclockwiseup}{\mathop{\unicode{x2233}}\limits}}
+\CustomizeMathJax{\newcommand{\smallvarointclockwiseup}{%
+    \mathop{\unicode{x2232}}\limits%
+}}
+\CustomizeMathJax{\newcommand{\smallointctrclockwiseup}{%
+    \mathop{\unicode{x2233}}\limits%
+}}
 \CustomizeMathJax{\newcommand{\smallsumintup}{\mathop{\unicode{x2A0B}}\limits}}
 \CustomizeMathJax{\newcommand{\smallfintup}{\mathop{\unicode{x2A0F}}\limits}}
 \CustomizeMathJax{\newcommand{\smallsqintup}{\mathop{\unicode{x2A16}}\limits}}
@@ -105,8 +115,12 @@
 \CustomizeMathJax{\let\ointup\oint}
 \CustomizeMathJax{\newcommand{\oiintup}{\mathop{\unicode{x222F}}\limits}}
 \CustomizeMathJax{\newcommand{\oiiintup}{\mathop{\unicode{x2230}}\limits}}
-\CustomizeMathJax{\newcommand{\varointclockwiseup}{\mathop{\unicode{x2232}}\limits}}
-\CustomizeMathJax{\newcommand{\ointctrclockwiseup}{\mathop{\unicode{x2233}}\limits}}
+\CustomizeMathJax{\newcommand{\varointclockwiseup}{%
+    \mathop{\unicode{x2232}}\limits%
+}}
+\CustomizeMathJax{\newcommand{\ointctrclockwiseup}{%
+    \mathop{\unicode{x2233}}\limits%
+}}
 \CustomizeMathJax{\newcommand{\sumintup}{\mathop{\unicode{x2A0B}}\limits}}
 \CustomizeMathJax{\newcommand{\fintup}{\mathop{\unicode{x2A0F}}\limits}}
 \CustomizeMathJax{\newcommand{\sqintup}{\mathop{\unicode{x2A16}}\limits}}
@@ -130,8 +144,12 @@
 \CustomizeMathJax{\newcommand{\medbullet}{\mathbin{\unicode{x025CF}}}}
 \CustomizeMathJax{\newcommand{\varparallel}{\mathrel{\unicode{x02AFD}}}}
 \CustomizeMathJax{\newcommand{\varparallelinv}{\mathrel{\unicode{x244A}}}}
-\CustomizeMathJax{\newcommand{\nvarparallel}{\mathrel{\LWRoverlaysymbols{-}{\unicode{x02AFD}}}}}
-\CustomizeMathJax{\newcommand{\nvarparallelinv}{\mathrel{\LWRoverlaysymbols{-}{\unicode{x244A}}}}}
+\CustomizeMathJax{\newcommand{\nvarparallel}{%
+    \mathrel{\LWRoverlaysymbols{-}{\unicode{x02AFD}}}%
+}}
+\CustomizeMathJax{\newcommand{\nvarparallelinv}{%
+    \mathrel{\LWRoverlaysymbols{-}{\unicode{x244A}}}%
+}}
 \CustomizeMathJax{\newcommand{\coloneq}{\mathrel{\unicode{x02254}}}}
 \CustomizeMathJax{\newcommand{\eqcolon}{\mathrel{\unicode{x02255}}}}
 \CustomizeMathJax{\newcommand{\VDash}{\mathrel{\unicode{x22AB}}}}
@@ -138,8 +156,12 @@
 \CustomizeMathJax{\newcommand{\preceqq}{\mathrel{\unicode{x02AB3}}}}
 \CustomizeMathJax{\newcommand{\succeqq}{\mathrel{\unicode{x02AB4}}}}
 
-\CustomizeMathJax{\newcommand{\nprecsim}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0227E}}}}}
-\CustomizeMathJax{\newcommand{\nsuccsim}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0227F}}}}}
+\CustomizeMathJax{\newcommand{\nprecsim}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0227E}}}%
+}}
+\CustomizeMathJax{\newcommand{\nsuccsim}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0227F}}}%
+}}
 \CustomizeMathJax{\newcommand{\nlesssim}{\mathrel{\unicode{x02274}}}}
 \CustomizeMathJax{\newcommand{\ngtrsim}{\mathrel{\unicode{x02275}}}}
 \CustomizeMathJax{\newcommand{\nsubset}{\mathrel{\unicode{x02284}}}}
@@ -146,32 +168,66 @@
 \CustomizeMathJax{\newcommand{\nsupset}{\mathrel{\unicode{x02285}}}}
 \CustomizeMathJax{\newcommand{\notni}{\mathrel{\unicode{x220C}}}}
 \CustomizeMathJax{\let\notowns\notni}
-\CustomizeMathJax{\newcommand{\nlessapprox}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x02A85}}}}}
-\CustomizeMathJax{\newcommand{\ngtrapprox}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x02A86}}}}}
-\CustomizeMathJax{\newcommand{\npreccurlyeq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0227C}}}}}
-\CustomizeMathJax{\newcommand{\nsucccurlyeq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0227D}}}}}
+\CustomizeMathJax{\newcommand{\nlessapprox}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x02A85}}}%
+}}
+\CustomizeMathJax{\newcommand{\ngtrapprox}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x02A86}}}%
+}}
+\CustomizeMathJax{\newcommand{\npreccurlyeq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0227C}}}%
+}}
+\CustomizeMathJax{\newcommand{\nsucccurlyeq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0227D}}}%
+}}
 \CustomizeMathJax{\newcommand{\ngtrless}{\mathrel{\unicode{x02279}}}}
 \CustomizeMathJax{\newcommand{\nlessgtr}{\mathrel{\unicode{x2278}}}}
-\CustomizeMathJax{\newcommand{\nbumpeq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0224F}}}}}
-\CustomizeMathJax{\newcommand{\nBumpeq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0224E}}}}}
-\CustomizeMathJax{\newcommand{\nbacksim}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0223D}}}}}
-\CustomizeMathJax{\newcommand{\nbacksimeq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x022CD}}}}}
+\CustomizeMathJax{\newcommand{\nbumpeq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0224F}}}%
+}}
+\CustomizeMathJax{\newcommand{\nBumpeq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0224E}}}%
+}}
+\CustomizeMathJax{\newcommand{\nbacksim}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0223D}}}%
+}}
+\CustomizeMathJax{\newcommand{\nbacksimeq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x022CD}}}%
+}}
 \CustomizeMathJax{\newcommand{\nasymp}{\mathrel{\unicode{x226D}}}}
 \CustomizeMathJax{\newcommand{\nequiv}{\mathrel{\unicode{x2262}}}}
 \CustomizeMathJax{\newcommand{\napprox}{\mathrel{\unicode{x2249}}}}
-\CustomizeMathJax{\newcommand{\nll}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0226A}}}}}
-\CustomizeMathJax{\newcommand{\ngg}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0226B}}}}}
+\CustomizeMathJax{\newcommand{\nll}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0226A}}}%
+}}
+\CustomizeMathJax{\newcommand{\ngg}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0226B}}}%
+}}
 \CustomizeMathJax{\newcommand{\nthickapprox}{%
     \mathrel{\LWRoverlaysymbols{/}{{\mathbf{\unicode{x02248}}}}}%
 }}
-\CustomizeMathJax{\newcommand{\napproxeq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0224A}}}}}
-\CustomizeMathJax{\newcommand{\nprecapprox}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB7}}}}}
-\CustomizeMathJax{\newcommand{\nsuccapprox}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB8}}}}}
-\CustomizeMathJax{\newcommand{\npreceqq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB3}}}}}
-\CustomizeMathJax{\newcommand{\nsucceqq}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB4}}}}}
+\CustomizeMathJax{\newcommand{\napproxeq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0224A}}}%
+}}
+\CustomizeMathJax{\newcommand{\nprecapprox}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB7}}}%
+}}
+\CustomizeMathJax{\newcommand{\nsuccapprox}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB8}}}%
+}}
+\CustomizeMathJax{\newcommand{\npreceqq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB3}}}%
+}}
+\CustomizeMathJax{\newcommand{\nsucceqq}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x02AB4}}}%
+}}
 \CustomizeMathJax{\newcommand{\nsimeq}{\mathrel{\unicode{x02244}}}}
-\CustomizeMathJax{\newcommand{\nSubset}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x022D0}}}}}
-\CustomizeMathJax{\newcommand{\nSupset}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x022D1}}}}}
+\CustomizeMathJax{\newcommand{\nSubset}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x022D0}}}%
+}}
+\CustomizeMathJax{\newcommand{\nSupset}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x022D1}}}%
+}}
 \CustomizeMathJax{\newcommand{\nsqsubseteq}{\mathrel{\unicode{x022E2}}}}
 \CustomizeMathJax{\newcommand{\nsqsupseteq}{\mathrel{\unicode{x022E3}}}}
 \CustomizeMathJax{\newcommand{\coloneqq}{\mathrel{\unicode{x02254}}}}
@@ -179,11 +235,21 @@
 \CustomizeMathJax{\newcommand{\Coloneqq}{\mathrel{\unicode{x02A74}}}}
 \CustomizeMathJax{\newcommand{\Coloneq}{\mathrel{\unicode{x2237}-}}}
 \CustomizeMathJax{\newcommand{\Eqcolon}{\mathrel{-\unicode{x2237}}}}
-\CustomizeMathJax{\newcommand{\lvec}[1]{\mathord{\overset{\unicode{x02190}}{#1}}}}
-\CustomizeMathJax{\newcommand{\lrvec}[1]{\mathord{\overset{\unicode{x2194}}{#1}}}}
-\CustomizeMathJax{\newcommand{\harpoonacc}[1]{\mathord{\overset{\unicode{x021C0}}{#1}}}}
-\CustomizeMathJax{\newcommand{\lharpoonacc}[1]{\mathord{\overset{\unicode{x021BC}}{#1}}}}
-\CustomizeMathJax{\newcommand{\lrharpoonacc}[1]{\mathord{\overset{\unicode{x0294E}}{#1}}}}
+\CustomizeMathJax{\newcommand{\lvec}[1]{%
+    \mathord{\overset{\unicode{x02190}}{#1}}%
+}}
+\CustomizeMathJax{\newcommand{\lrvec}[1]{%
+    \mathord{\overset{\unicode{x2194}}{#1}}%
+}}
+\CustomizeMathJax{\newcommand{\harpoonacc}[1]{%
+    \mathord{\overset{\unicode{x021C0}}{#1}}%
+}}
+\CustomizeMathJax{\newcommand{\lharpoonacc}[1]{%
+    \mathord{\overset{\unicode{x021BC}}{#1}}%
+}}
+\CustomizeMathJax{\newcommand{\lrharpoonacc}[1]{%
+    \mathord{\overset{\unicode{x0294E}}{#1}}%
+}}
 \CustomizeMathJax{\newcommand{\barbar}[1]{\mathord{\overset{=}{#1}}}}
 \CustomizeMathJax{\newcommand{\bartilde}[1]{\mathord{\overset{\simeq}{#1}}}}
 \CustomizeMathJax{\newcommand{\barhat}[1]{\mathord{\hat{\bar{#1}}}}}
@@ -214,9 +280,15 @@
 
 \CustomizeMathJax{\newcommand{\lrtimes}{\mathrel{\unicode{x2A1D}}}}
 \CustomizeMathJax{\newcommand{\Diamondblack}{\mathord{\unicode{x025C6}}}}
-\CustomizeMathJax{\newcommand{\nplus}{\mathrel{\LWRoverlaysymbols{+}{\unicode{x02229}}}}}
-\CustomizeMathJax{\newcommand{\nsqsubset}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x0228F}}}}}
-\CustomizeMathJax{\newcommand{\nsqsupset}{\mathrel{\LWRoverlaysymbols{/}{\unicode{x02290}}}}}
+\CustomizeMathJax{\newcommand{\nplus}{%
+    \mathrel{\LWRoverlaysymbols{+}{\unicode{x02229}}}%
+}}
+\CustomizeMathJax{\newcommand{\nsqsubset}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x0228F}}}%
+}}
+\CustomizeMathJax{\newcommand{\nsqsupset}{%
+    \mathrel{\LWRoverlaysymbols{/}{\unicode{x02290}}}%
+}}
 \CustomizeMathJax{\newcommand{\dasharrow}{\mathrel{\unicode{x021E2}}}}
 \CustomizeMathJax{\newcommand{\leftsquigarrow}{\mathrel{\unicode{x021DC}}}}
 \CustomizeMathJax{\newcommand{\ntwoheadrightarrow}{\mathrel{\unicode{x02900}}}}
@@ -240,8 +312,12 @@
 
 \CustomizeMathJax{\newcommand{\leadstoext}{\mathrel{\unicode{xFF5E}}}}
 
-\CustomizeMathJax{\newcommand{\sqcupplus}{\mathbin{\LWRoverlaysymbols{+}{\unicode{x02294}}}}}
-\CustomizeMathJax{\newcommand{\sqcapplus}{\mathbin{\LWRoverlaysymbols{+}{\unicode{x02293}}}}}
+\CustomizeMathJax{\newcommand{\sqcupplus}{%
+    \mathbin{\LWRoverlaysymbols{+}{\unicode{x02294}}}%
+}}
+\CustomizeMathJax{\newcommand{\sqcapplus}{%
+    \mathbin{\LWRoverlaysymbols{+}{\unicode{x02293}}}%
+}}
 
 \CustomizeMathJax{\newcommand{\dlb}{\mathopen{\unicode{x027E6}}}}
 \CustomizeMathJax{\newcommand{\drb}{\mathopen{\unicode{x027E7}}}}
@@ -256,7 +332,9 @@
 \CustomizeMathJax{\newcommand{\forallAlt}{\mathord{\unicode{x02200}}}}
 \CustomizeMathJax{\newcommand{\emptysetAlt}{\mathord{\unicode{x02205}}}}
 
-\CustomizeMathJax{\newcommand{\uppartial}{\mathord{\unicode{x02202}}}}% not upright
+\CustomizeMathJax{\newcommand{\uppartial}{%
+    \mathord{\unicode{x02202}}%
+}}% not upright
 
 \CustomizeMathJax{\let\varmathbb\mathbb}
 \CustomizeMathJax{\let\vmathbb\mathbb}

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-common-mathjax-nonunicode.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-common-mathjax-nonunicode.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-common-mathjax-nonunicode.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -36,31 +36,71 @@
 \CustomizeMathJax{\newcommand{\Longmmappedfrom}{\mathrel{\unicode{x027FD}}}}
 \CustomizeMathJax{\let\Mmapsfrom\Mmappedfrom}% from kpfonts-otf
 \CustomizeMathJax{\let\Longmmapsfrom\Longmmappedfrom}% from kpfonts-otf
-\CustomizeMathJax{\newcommand{\boxright}{\mathrel{\unicode{x025A1}\!\unicode{x02192}}}}
-\CustomizeMathJax{\newcommand{\boxleft}{\mathrel{\unicode{x02190}\!\unicode{x025A1}}}}
-\CustomizeMathJax{\newcommand{\boxdotright}{\mathrel{\unicode{x022A1}\!\unicode{x02192}}}}
-\CustomizeMathJax{\newcommand{\boxdotleft}{\mathrel{\unicode{x02190}\!\unicode{x022A1}}}}
+\CustomizeMathJax{\newcommand{\boxright}{%
+    \mathrel{\unicode{x025A1}\!\unicode{x02192}}%
+}}
+\CustomizeMathJax{\newcommand{\boxleft}{%
+    \mathrel{\unicode{x02190}\!\unicode{x025A1}}%
+}}
+\CustomizeMathJax{\newcommand{\boxdotright}{%
+    \mathrel{\unicode{x022A1}\!\unicode{x02192}}%
+}}
+\CustomizeMathJax{\newcommand{\boxdotleft}{%
+    \mathrel{\unicode{x02190}\!\unicode{x022A1}}%
+}}
 
-\CustomizeMathJax{\newcommand{\Diamondright}{\mathrel{\unicode{x025C7}\!\unicode{x02192}}}}
-\CustomizeMathJax{\newcommand{\Diamondleft}{\mathrel{\unicode{x02190}\!\unicode{x025C7}}}}
-\CustomizeMathJax{\newcommand{\Diamonddotright}{\mathrel{\unicode{x027D0}\!\unicode{x02192}}}}
-\CustomizeMathJax{\newcommand{\Diamonddotleft}{\mathrel{\unicode{x02190}\!\unicode{x027D0}}}}
+\CustomizeMathJax{\newcommand{\Diamondright}{%
+    \mathrel{\unicode{x025C7}\!\unicode{x02192}}%
+}}
+\CustomizeMathJax{\newcommand{\Diamondleft}{%
+    \mathrel{\unicode{x02190}\!\unicode{x025C7}}%
+}}
+\CustomizeMathJax{\newcommand{\Diamonddotright}{%
+    \mathrel{\unicode{x027D0}\!\unicode{x02192}}%
+}}
+\CustomizeMathJax{\newcommand{\Diamonddotleft}{%
+    \mathrel{\unicode{x02190}\!\unicode{x027D0}}%
+}}
 
-\CustomizeMathJax{\newcommand{\boxRight}{\mathrel{\unicode{x025A1}\!\unicode{x021D2}}}}
-\CustomizeMathJax{\newcommand{\boxLeft}{\mathrel{\unicode{x021D0}\!\unicode{x025A1}}}}
-\CustomizeMathJax{\newcommand{\boxdotRight}{\mathrel{\unicode{x022A1}\!\unicode{x021D2}}}}
-\CustomizeMathJax{\newcommand{\boxdotLeft}{\mathrel{\unicode{x021D0}\!\unicode{x022A1}}}}
+\CustomizeMathJax{\newcommand{\boxRight}{%
+    \mathrel{\unicode{x025A1}\!\unicode{x021D2}}%
+}}
+\CustomizeMathJax{\newcommand{\boxLeft}{%
+    \mathrel{\unicode{x021D0}\!\unicode{x025A1}}%
+}}
+\CustomizeMathJax{\newcommand{\boxdotRight}{%
+    \mathrel{\unicode{x022A1}\!\unicode{x021D2}}%
+}}
+\CustomizeMathJax{\newcommand{\boxdotLeft}{%
+    \mathrel{\unicode{x021D0}\!\unicode{x022A1}}%
+}}
 
-\CustomizeMathJax{\newcommand{\DiamondRight}{\mathrel{\unicode{x025C7}\!\unicode{x021D2}}}}
-\CustomizeMathJax{\newcommand{\DiamondLeft}{\mathrel{\unicode{x021D0}\!\unicode{x025C7}}}}
-\CustomizeMathJax{\newcommand{\DiamonddotRight}{\mathrel{\unicode{x027D0}\!\unicode{x021D2}}}}
-\CustomizeMathJax{\newcommand{\DiamonddotLeft}{\mathrel{\unicode{x021D0}\!\unicode{x027D0}}}}
+\CustomizeMathJax{\newcommand{\DiamondRight}{%
+    \mathrel{\unicode{x025C7}\!\unicode{x021D2}}%
+}}
+\CustomizeMathJax{\newcommand{\DiamondLeft}{%
+    \mathrel{\unicode{x021D0}\!\unicode{x025C7}}%
+}}
+\CustomizeMathJax{\newcommand{\DiamonddotRight}{%
+    \mathrel{\unicode{x027D0}\!\unicode{x021D2}}%
+}}
+\CustomizeMathJax{\newcommand{\DiamonddotLeft}{%
+    \mathrel{\unicode{x021D0}\!\unicode{x027D0}}%
+}}
 \CustomizeMathJax{\newcommand{\Diamonddot}{\mathrel{\unicode{x027D0}}}}
 
-\CustomizeMathJax{\newcommand{\circleright}{\mathrel{\unicode{x025CB}\!\unicode{x02192}}}}
-\CustomizeMathJax{\newcommand{\circleleft}{\mathrel{\unicode{x02190}\!\unicode{x025CB}}}}
-\CustomizeMathJax{\newcommand{\circledotright}{\mathrel{\unicode{x02299}\!\unicode{x02192}}}}
-\CustomizeMathJax{\newcommand{\circledotleft}{\mathrel{\unicode{x02190}\!\unicode{x02299}}}}
+\CustomizeMathJax{\newcommand{\circleright}{%
+    \mathrel{\unicode{x025CB}\!\unicode{x02192}}%
+}}
+\CustomizeMathJax{\newcommand{\circleleft}{%
+    \mathrel{\unicode{x02190}\!\unicode{x025CB}}%
+}}
+\CustomizeMathJax{\newcommand{\circledotright}{%
+    \mathrel{\unicode{x02299}\!\unicode{x02192}}%
+}}
+\CustomizeMathJax{\newcommand{\circledotleft}{%
+    \mathrel{\unicode{x02190}\!\unicode{x02299}}%
+}}
 \CustomizeMathJax{\let\circleddotright\circledotright}
 \CustomizeMathJax{\let\circleddotleft\circledotleft}
 
@@ -68,7 +108,9 @@
 \CustomizeMathJax{\newcommand{\multimapboth}{\mathrel{\unicode{x029DF}}}}
 \CustomizeMathJax{\newcommand{\multimapdot}{{\mathrel{-\!\bullet}}}}
 \CustomizeMathJax{\newcommand{\multimapdotinv}{\mathrel{\bullet\!-}}}
-\CustomizeMathJax{\newcommand{\multimapdotboth}{\mathrel{{\bullet\!\!-\!\!\bullet}}}}
+\CustomizeMathJax{\newcommand{\multimapdotboth}{%
+    \mathrel{{\bullet\!\!-\!\!\bullet}}%
+}}
 \CustomizeMathJax{\newcommand{\multimapdotbothA}{\mathrel{\unicode{x022B6}}}}
 \CustomizeMathJax{\newcommand{\multimapdotbothB}{\mathrel{\unicode{x22B7}}}}
 
@@ -113,11 +155,17 @@
 
 \CustomizeMathJax{\newcommand{\colonapprox}{\mathrel{:\approx}}}
 \CustomizeMathJax{\newcommand{\colonsim}{\mathrel{:\sim}}}
-\CustomizeMathJax{\newcommand{\Colonapprox}{\mathrel{\unicode{x2237}\!\approx}}}
+\CustomizeMathJax{\newcommand{\Colonapprox}{%
+    \mathrel{\unicode{x2237}\!\approx}%
+}}
 \CustomizeMathJax{\newcommand{\Colonsim}{\mathrel{\unicode{x2237}\!\sim}}}
 
-\CustomizeMathJax{\newcommand{\strictif}{\mathrel{\unicode{x0297D}}}}% right fish tail
-\CustomizeMathJax{\newcommand{\strictfi}{\mathrel{\unicode{x0297C}}}}% left fish tail
+\CustomizeMathJax{\newcommand{\strictif}{%
+    \mathrel{\unicode{x0297D}}%
+}}% right fish tail
+\CustomizeMathJax{\newcommand{\strictfi}{%
+    \mathrel{\unicode{x0297C}}%
+}}% left fish tail
 \CustomizeMathJax{\newcommand{\strictiff}{%
     \mathrel{\unicode{x0297C}\!\!\unicode{x0297D}}%
 }}% left/right fish tails
@@ -130,8 +178,12 @@
 }}
 \CustomizeMathJax{\newcommand{\circledbar}{\mathbin{\unicode{x029B6}}}}
 
-\CustomizeMathJax{\newcommand{\openJoin}{\mathrel{\unicode{x2AA4}}}}% overlapping ><
-\CustomizeMathJax{\newcommand{\opentimes}{\mathrel{\unicode{x2AA4}}}}% overlapping ><
+\CustomizeMathJax{\newcommand{\openJoin}{%
+    \mathrel{\unicode{x2AA4}}%
+}}% overlapping ><
+\CustomizeMathJax{\newcommand{\opentimes}{%
+    \mathrel{\unicode{x2AA4}}%
+}}% overlapping ><
 
 \CustomizeMathJax{\newcommand{\VvDash}{\mathrel{\unicode{x22AA}}}}
 
@@ -141,7 +193,9 @@
 
 \CustomizeMathJax{\newcommand{\lambdaslash}{\mathord{\unicode{x019B}}}}
 
-\CustomizeMathJax{\newcommand{\Wr}{\mathbin{\unicode{x02240}\!\unicode{x02240}}}}
+\CustomizeMathJax{\newcommand{\Wr}{%
+    \mathbin{\unicode{x02240}\!\unicode{x02240}}%
+}}
 
 \CustomizeMathJax{\newcommand{\dashleftrightarrow}{%
     \mathrel{\unicode{x021E0}\!\unicode{x021E2}}%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cuted.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cuted.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-cuted.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -15,9 +15,11 @@
 %%   http://www.latex-project.org/lppl.txt
 %% and version 1.3 or later is part of all distributions of LaTeX
 %% version 2005/12/01 or later.
-\LWR at ProvidesPackageDrop{cuted}[2012/10/04]
+\LWR at ProvidesPackageDrop{cuted}[2021/10/04]
 \newenvironment{strip}{}{}
 \newskip\stripsep
+\newtoks\preCutedStrip \preCutedStrip{}
+\newtoks\postCutedStrip \postCutedStrip{}
 \def\oldcolsbreak#1{}
 \endinput
 %%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-endnotes.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-endnotes.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-endnotes.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -25,6 +25,10 @@
 \LWR at formatted{@makeenmark}
 
 \def\makeenmark{\@makeenmark}
+\apptocmd{\LWR at nullifyfootnotes}{%
+    \renewcommand{\endnote}[2][]{}%
+    \renewcommand{\endnotemark}[1]{}%
+}{}{}
 \begin{warpMathJax}
 \def\endnotename{endnote}
 \appto\LWR at syncnotenumbers{\LWR at synconenotenumber{LWRendnote}{\theendnote}}

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fancybox.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fancybox.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fancybox.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -77,9 +77,9 @@
 
 \csgpreto{Beqnarray*}{\boolfalse{LWR at numbereqnarray}}
 \renewcommand{\GenericCaption}[1]{%
-\LWR at figcaption%
-\LWR at isolate{#1}%
-\endLWR at figcaption%
+    \LWR at figcaption%
+    \LWR at isolate{#1}%
+    \endLWR at figcaption%
 }
 \RenewDocumentEnvironment{Btrivlist}{m o}
 {%
@@ -93,7 +93,7 @@
     \LWR at startpars%
 }
 \AtBeginEnvironment{LWR at nestspan}{%
-\RenewDocumentEnvironment{Btrivlist}{m o}{}{}%
+    \RenewDocumentEnvironment{Btrivlist}{m o}{}{}%
 }
 \let\LWRFB at origitemizeitem\LWR at itemizeitem
 \let\LWRFB at origdescitem\LWR at descitem
@@ -114,14 +114,40 @@
     }%
 }
 \RenewDocumentCommand{\LWR at nestspanitem}{d()}{%
-\if at newlist\else{\LWR at htmltagc{br /}}\fi%
-\LWR at origitem%
+    \if at newlist\else{
+        \LWR at htmltagc{br /}%
+        \LWR at orignewline%
+    }\fi%
+    \LWR at origitem%
 }
-\renewenvironment{Bitemize}[1][]{\begin{itemize}}{\end{itemize}}
-\renewenvironment{Benumerate}[1][]{\begin{enumerate}}{\end{enumerate}}
-\renewenvironment{Bdescription}[1][]{\begin{description}}{\end{description}}
+\renewenvironment{Bitemize}[1][]
+    {%
+        \LWR at spanwarnformat{Bitemize}%
+        \booltrue{LWR at starting@fancybox}%
+        \begin{itemize}%
+        \boolfalse{LWR at starting@fancybox}%
+    }
+    {\end{itemize}}
+
+\renewenvironment{Benumerate}[1][]
+    {%
+        \LWR at spanwarnformat{Benumerate}%
+        \booltrue{LWR at starting@fancybox}%
+        \begin{enumerate}%
+        \boolfalse{LWR at starting@fancybox}%
+    }
+    {\end{enumerate}}
+
+\renewenvironment{Bdescription}[1][]
+    {%
+        \LWR at spanwarnformat{Bdescription}%
+        \booltrue{LWR at starting@fancybox}%
+        \begin{description}%
+        \boolfalse{LWR at starting@fancybox}%
+    }
+    {\end{description}}
 \RenewDocumentCommand{\boxput}{s d() m m}{%
-\IfBooleanTF{#1}{#3\quad#4}{#4\quad#3}%
+    \IfBooleanTF{#1}{#3\quad#4}{#4\quad#3}%
 }
 \RenewDocumentCommand{\fancyput}{s d() m}{}
 \RenewDocumentCommand{\thisfancyput}{s d() m}{}
@@ -135,24 +161,24 @@
 \def\endLandscape{}
 \let\LWRFB at UseVerbatim\UseVerbatim
 \renewcommand*{\UseVerbatim}[1]{%
-\LWR at atbeginverbatim{Verbatim}%
-\LWRFB at UseVerbatim{#1}%
-\LWR at afterendverbatim%
+    \LWR at atbeginverbatim{Verbatim}%
+    \LWRFB at UseVerbatim{#1}%
+    \LWR at afterendverbatim%
 }
 
 \let\LWRFB at LUseVerbatim\LUseVerbatim
 
 \renewcommand*{\LUseVerbatim}[1]{%
-\LWR at atbeginverbatim{LVerbatim}%
-\noindent%
-\LWRFB at LUseVerbatim{#1}%
-\LWR at afterendverbatim%
+    \LWR at atbeginverbatim{LVerbatim}%
+    \noindent%
+    \LWRFB at LUseVerbatim{#1}%
+    \LWR at afterendverbatim%
 }
 
 \def\@BUseVerbatim[#1]#2{%
-\LWR at atbeginverbatim{BVerbatim}%
-\LWRFB at UseVerbatim{#2}%
-\LWR at afterendverbatim%
+    \LWR at atbeginverbatim{BVerbatim}%
+    \LWRFB at UseVerbatim{#2}%
+    \LWR at afterendverbatim%
 }
 \endinput
 %%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-floatrow.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-floatrow.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-floatrow.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -25,7 +25,7 @@
 \newbool{LWR at subcaptionloaded}
 
 \AtBeginDocument{
-\@ifpackageloaded{subcaption}
+\IfPackageLoadedTF{subcaption}
     {\booltrue{LWR at subcaptionloaded}}
     {\boolfalse{LWR at subcaptionloaded}}
 }

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-flushend.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-flushend.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-flushend.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -15,13 +15,13 @@
 %%   http://www.latex-project.org/lppl.txt
 %% and version 1.3 or later is part of all distributions of LaTeX
 %% version 2005/12/01 or later.
-\LWR at ProvidesPackageDrop{flushend}[2017/03/27]
+\LWR at ProvidesPackageDrop{flushend}[2021/10/04]
 \newcommand*{\flushend}{}
 \newcommand*{\raggedend}{}
 \newcommand*{\flushcolsend}{}
 \newcommand*{\raggedcolsend}{}
-\newcommand*{\atColsBreak}[1]{}
-\newcommand*{\atColsEnd}[1]{}
+\newtoks\atColsBreak \atColsBreak={}
+\newtoks\atColsEnd   \atColsEnd={}
 \newcommand*{\showcolsendrule}{}
 \endinput
 %%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-footnote.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-footnote.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-footnote.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -81,7 +81,7 @@
   \begingroup%
     \let\@makefntext\@empty%
     \let\@finalstrut\@gobble%
-    \LetLtxMacro\rule\@gobbletwo% *8* also the optional argument?
+    \LetLtxMacro\rule\@gobbletwo%
     \booltrue{LWR at spewingnotes}%    lwarp
     \@footnotetext{\unvbox\z@}%
   \endgroup%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fourier.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fourier.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fourier.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -24,13 +24,13 @@
 
 \begin{warpMathJax}
 
-\@ifpackagewith{fourier}{sloped}
+\IfPackageLoadedWithOptionsTF{fourier}{sloped}
     {
         \LWR at mathjax@addgreek at l@up{other}{}
         \LWR at mathjax@addgreek at u@it*{other}{}
     }% sloped
     {% not sloped
-        \@ifpackagewith{fourier}{upright}
+        \IfPackageLoadedWithOptionsTF{fourier}{upright}
             {% upright option
                 \LWR at mathjax@addgreek at l@up{}{}
                 \LWR at mathjax@addgreek at u@up*{}{}

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-framed.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-framed.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-framed.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -17,54 +17,60 @@
 %% version 2005/12/01 or later.
 
 \LWR at ProvidesPackagePass{framed}[2011/10/22]
+
 \AtBeginDocument{\RequirePackage{xcolor}}% for \convertcolorspec
 
-
-\renewenvironment{framed}{%
-\LWR at forcenewpage
-\BlockClass{framed}%
+\renewenvironment{framed}
+{%
+    \LWR at forcenewpage
+    \BlockClass{framed}%
 }
 {\endBlockClass}
 
-\renewenvironment{oframed}{%
-\LWR at forcenewpage
-\BlockClass{framed}%
+\renewenvironment{oframed}
+{%
+    \LWR at forcenewpage
+    \BlockClass{framed}%
 }
 {\endBlockClass}
 
-\renewenvironment{shaded}{%
-\convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
-\LWR at forcenewpage
-\BlockClass[background: \LWR at origpound\LWR at tempcolor]{shaded}%
+\renewenvironment{shaded}
+{%
+    \convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
+    \LWR at forcenewpage
+    \BlockClass[background: \LWR at origpound\LWR at tempcolor]{shaded}%
 }
 {\endBlockClass}
 
-\renewenvironment{shaded*}{%
-\convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
-\LWR at forcenewpage
-\BlockClass[background: \LWR at origpound\LWR at tempcolor]{shaded}%
+\renewenvironment{shaded*}
+{%
+    \convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
+    \LWR at forcenewpage
+    \BlockClass[background: \LWR at origpound\LWR at tempcolor]{shaded}%
 }
 {\endBlockClass}
 
 \renewenvironment{leftbar}{%
-\LWR at forcenewpage
+    \LWR at forcenewpage
     \BlockClass{framedleftbar}
-  \def\FrameCommand{}%
-  \MakeFramed {}
+    \def\FrameCommand{}%
+    \MakeFramed {}
 }%
- {\endMakeFramed\endBlockClass}
+{\endMakeFramed\endBlockClass}
 
-\renewenvironment{snugshade}{%
-\convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
-\LWR at forcenewpage
-\BlockClass[background: \LWR at origpound\LWR at tempcolor]{snugframed}%
+\renewenvironment{snugshade}
+{%
+    \convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
+    \LWR at forcenewpage
+    \BlockClass[background: \LWR at origpound\LWR at tempcolor]{snugframed}%
 }
 {\endBlockClass}
 
-\renewenvironment{snugshade*}{%
-\convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
-\LWR at forcenewpage
-\BlockClass[background: \LWR at origpound\LWR at tempcolor]{snugframed}%
+\renewenvironment{snugshade*}
+{%
+    \convertcolorspec{named}{shadecolor}{HTML}\LWR at tempcolor%
+    \LWR at forcenewpage
+    \BlockClass[background: \LWR at origpound\LWR at tempcolor]{snugframed}%
 }
 {\endBlockClass}
 
@@ -72,35 +78,35 @@
 \let\endoframed\endframed
 
 \RenewEnviron{titled-frame}[1]{%
-\CustomFBox{#1}{}{0pt}{0pt}{0pt}{0pt}{\BODY}
+    \CustomFBox{#1}{}{0pt}{0pt}{0pt}{0pt}{\BODY}
 }
 
 \renewcommand{\CustomFBox}[7]{%
-\convertcolorspec{named}{TFFrameColor}{HTML}\LWR at tempcolor%
-\LWR at forcenewpage
-\begin{BlockClass}[border: 3px solid \LWR at origpound\LWR at tempcolor]{framed}%
-\ifthenelse{\isempty{#1}}{}{% not empty
-    \begin{BlockClass}[background: \LWR at origpound\LWR at tempcolor]{framedtitle}%
-    \textcolor{TFTitleColor}{\textbf{#1}}%
-    \end{BlockClass}
-}% not empty
+    \convertcolorspec{named}{TFFrameColor}{HTML}\LWR at tempcolor%
+    \LWR at forcenewpage
+    \begin{BlockClass}[border: 3px solid \LWR at origpound\LWR at tempcolor]{framed}%
+    \ifthenelse{\isempty{#1}}{}{% not empty
+        \begin{BlockClass}[background: \LWR at origpound\LWR at tempcolor]{framedtitle}%
+        \textcolor{TFTitleColor}{\textbf{#1}}%
+        \end{BlockClass}%
+    }% not empty
 
-#7
+    #7
 
-\ifthenelse{\isempty{#2}}{}{% not empty
-    \convertcolorspec{named}{TFFrameColor}{HTML}\LWR at tempcolor%
-    \begin{BlockClass}[background: \LWR at origpound\LWR at tempcolor]{framedtitle}%
-    \textcolor{TFTitleColor}{\textbf{#2}}%
-    \end{BlockClass}
-}% not empty
-\end{BlockClass}
+    \ifthenelse{\isempty{#2}}{}{% not empty
+        \convertcolorspec{named}{TFFrameColor}{HTML}\LWR at tempcolor%
+        \begin{BlockClass}[background: \LWR at origpound\LWR at tempcolor]{framedtitle}%
+        \textcolor{TFTitleColor}{\textbf{#2}}%
+        \end{BlockClass}%
+    }% not empty
+    \end{BlockClass}%
 }
 
-\renewcommand\TitleBarFrame[3][]{
-\CustomFBox
-    {#2}{}%
-    \fboxrule\fboxrule\fboxrule\fboxrule
-    {#3}%
+\renewcommand\TitleBarFrame[3][]{%
+    \CustomFBox%
+        {#2}{}%
+        \fboxrule\fboxrule\fboxrule\fboxrule%
+        {#3}%
 }
 
 \renewcommand{\TF at Title}[1]{#1}
@@ -109,12 +115,12 @@
 \let\endMakeFramed\relax
 
 \NewEnviron{MakeFramed}[1]{%
-\FrameCommand{\begin{minipage}{\linewidth}\BODY\end{minipage}}%
+    \FrameCommand{\begin{minipage}{\linewidth}\BODY\end{minipage}}%
 }
 
 \renewcommand*{\fb at put@frame}[2]{%
-\relax%
-\@tempboxa%
+    \relax%
+    \@tempboxa%
 }
 
 \endinput

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-graphics.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-graphics.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-graphics.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -108,7 +108,7 @@
 \define at key{igraph}{alt}{\renewcommand*{\LWR at igalt}{#1}}
 \define at key{igraph}{scale}{%
     \ifthenelse{\equal{#1}{1}}{}{%  must expand #1
-        \PackageWarning{lwarp}{%
+        \PackageNote{lwarp}{%
             It is recommended to use ``[width=xx\protect\linewidth]''\MessageBreak
             instead of ``[scale=yy]'',%
         }%
@@ -161,11 +161,10 @@
 
 \AtBeginDocument{
 \define at key{Gin}{class}{}
-\define at key{Gin}{alt}{}
 }
 
 \AtBeginDocument{
-\@ifpackageloaded{epstopdf}
+\IfPackageLoadedTF{epstopdf}
 {
     \newcommand*{\LWR at replaceEPSSVG}{}
 }{%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-hanging.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-hanging.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-hanging.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -16,7 +16,7 @@
 %% and version 1.3 or later is part of all distributions of LaTeX
 %% version 2005/12/01 or later.
 \LWR at ProvidesPackageDrop{hanging}[2009/09/02]
-\@ifclassloaded{memoir}{
+\IfClassLoadedTF{memoir}{
 \let\hangpara\relax
 \let\hangparas\relax
 \let\endhangparas\relax

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-keyfloat.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-keyfloat.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-keyfloat.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -19,7 +19,7 @@
 
 \LWR at ProvidesPackagePass{keyfloat}[2019/09/23]
 
-\@ifpackagelater{keyfloat}{2019/09/23}{\relax}{
+\IfPackageAtLeastTF{keyfloat}{2019/09/23}{\relax}{
     \PackageError{lwarp-keyfloat}
     {%
         The keyfloat package is out of date.\MessageBreak
@@ -31,7 +31,9 @@
 }
 
 \AtBeginDocument{
+
 \providecommand*{\KFLT at LWR@hook at boxouter}{}
+
 \renewcommand*{\KFLT at LWR@hook at boxouter}{%
     \ifbool{KFLT at keywrap}{%
     }{%
@@ -44,7 +46,6 @@
     \normalcolor%
 }
 \LetLtxMacro\KFLT at LWR@hook at keysubfloats\KFLT at LWR@hook at boxouter
-
 \let\KFLT at LWR@hook at keyfloatsminipage\relax
 \let\endKFLT at LWR@hook at keyfloatsminipage\relax
 \newenvironment*{KFLT at LWR@hook at keyfloatsminipage}[1]{}{}
@@ -177,7 +178,7 @@
     }% text to add
 }
 
-\@ifpackageloaded{tocdata}
+\IfPackageLoadedTF{tocdata}
 {}
 {% tocdata not loaded
 

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-kpfonts-otf.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-kpfonts-otf.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-kpfonts-otf.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -54,18 +54,50 @@
 \CustomizeMathJax{\let\variiiint\iiiint}
 \CustomizeMathJax{\let\varidotsint\idotsint}
 
-\CustomizeMathJax{\newcommand{\varointctrclockwise}{\mathop{\unicode{x2939}\!\!\unicode{x0222E}}}}
-\CustomizeMathJax{\newcommand{\oiintclockwise}{\mathop{\unicode{x0222F}\!\!\unicode{x2938}}}}
-\CustomizeMathJax{\newcommand{\oiintctrclockwise}{\mathop{\unicode{x2939}\!\!\unicode{x0222F}}}}
-\CustomizeMathJax{\newcommand{\varoiintclockwise}{\mathop{\unicode{x0222F}\!\!\unicode{x2938}}}}
-\CustomizeMathJax{\newcommand{\varoiintctrclockwise}{\mathop{\unicode{x2939}\!\!\unicode{x0222F}}}}
-\CustomizeMathJax{\newcommand{\oiiintclockwise}{\mathop{\unicode{x02230}\!\!\unicode{x2938}}}}
-\CustomizeMathJax{\newcommand{\oiiintctrclockwise}{\mathop{\unicode{x2939}\!\!\unicode{x02230}}}}
-\CustomizeMathJax{\newcommand{\varoiiintclockwise}{\mathop{\unicode{x02230}\!\!\unicode{x2938}}}}
-\CustomizeMathJax{\newcommand{\varoiiintctrclockwise}{\mathop{\unicode{x2939}\!\!\unicode{x02230}}}}
-\CustomizeMathJax{\newcommand{\sqiint}{\mathop{\unicode{x2A16}\!\!\unicode{x2A16}}}}
-\CustomizeMathJax{\newcommand{\sqiiint}{\mathop{\unicode{x2A16}\!\!\unicode{x2A16}\!\!\unicode{x2A16}}}}
+\CustomizeMathJax{\newcommand{\varointctrclockwise}{%
+    \mathop{\unicode{x2939}\!\!\unicode{x0222E}}%
+}}
 
+\CustomizeMathJax{\newcommand{\oiintclockwise}{%
+    \mathop{\unicode{x0222F}\!\!\unicode{x2938}}%
+}}
+
+\CustomizeMathJax{\newcommand{\oiintctrclockwise}{%
+    \mathop{\unicode{x2939}\!\!\unicode{x0222F}}%
+}}
+
+\CustomizeMathJax{\newcommand{\varoiintclockwise}{%
+    \mathop{\unicode{x0222F}\!\!\unicode{x2938}}%
+}}
+
+\CustomizeMathJax{\newcommand{\varoiintctrclockwise}{%
+    \mathop{\unicode{x2939}\!\!\unicode{x0222F}}%
+}}
+
+\CustomizeMathJax{\newcommand{\oiiintclockwise}{%
+    \mathop{\unicode{x02230}\!\!\unicode{x2938}}%
+}}
+
+\CustomizeMathJax{\newcommand{\oiiintctrclockwise}{%
+    \mathop{\unicode{x2939}\!\!\unicode{x02230}}%
+}}
+
+\CustomizeMathJax{\newcommand{\varoiiintclockwise}{%
+    \mathop{\unicode{x02230}\!\!\unicode{x2938}}%
+}}
+
+\CustomizeMathJax{\newcommand{\varoiiintctrclockwise}{%
+    \mathop{\unicode{x2939}\!\!\unicode{x02230}}%
+}}
+
+\CustomizeMathJax{\newcommand{\sqiint}{%
+    \mathop{\unicode{x2A16}\!\!\unicode{x2A16}}%
+}}
+
+\CustomizeMathJax{\newcommand{\sqiiint}{%
+    \mathop{\unicode{x2A16}\!\!\unicode{x2A16}\!\!\unicode{x2A16}}%
+}}
+
 \CustomizeMathJax{\let\widearc\overparen}
 \CustomizeMathJax{\let\widearcarrow\overrightarrow}
 \CustomizeMathJax{\let\overrightarc\overrightarrow}

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-lipsum.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-lipsum.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-lipsum.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -16,7 +16,10 @@
 %% and version 1.3 or later is part of all distributions of LaTeX
 %% version 2005/12/01 or later.
 \LWR at ProvidesPackagePass{lipsum}[2021-03-03]
-\SetLipsumParListItemEnd{\LWR at closeparagraph}
+\SetLipsumParListItemEnd{%
+    \LWR at closeparagraph%
+    \leavevmode\LWR at orignewline%
+}
 \endinput
 %%
 %% End of file `lwarp-lipsum.sty'.

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mathalpha.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mathalpha.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mathalpha.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -15,13 +15,21 @@
 %%   http://www.latex-project.org/lppl.txt
 %% and version 1.3 or later is part of all distributions of LaTeX
 %% version 2005/12/01 or later.
-\LWR at ProvidesPackagePass{mathalpha}[2019/10/05]
+\LWR at ProvidesPackagePass{mathalpha}[2021/11/18]
 
 \begin{warpMathJax}
+\CustomizeMathJax{\newcommand{\mathbfbb}[1]{\boldsymbol{\mathbb{#1}}}}% not bold
+\CustomizeMathJax{\newcommand{\mathbfcal}[1]{\boldsymbol{\mathcal{#1}}}}
+\CustomizeMathJax{\newcommand{\mathbffrak}[1]{\boldsymbol{\mathfrak{#1}}}}
+\CustomizeMathJax{\newcommand{\mathbfscr}[1]{\boldsymbol{\mathscr{#1}}}}% not bold
+
+\IfPackageLoadedWithOptionsTF{mathalpha}{oldbold}
+{
 \CustomizeMathJax{\newcommand{\mathbbb}[1]{\boldsymbol{\mathbb{#1}}}}% not bold
 \CustomizeMathJax{\newcommand{\mathbcal}[1]{\boldsymbol{\mathcal{#1}}}}
 \CustomizeMathJax{\newcommand{\mathbfrak}[1]{\boldsymbol{\mathfrak{#1}}}}
 \CustomizeMathJax{\newcommand{\mathbscr}[1]{\boldsymbol{\mathscr{#1}}}}% not bold
+}{}
 \end{warpMathJax}
 \endinput
 %%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mathptmx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mathptmx.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mathptmx.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -21,7 +21,7 @@
 \begin{warpMathJax}
 \LWR at infoprocessingmathjax{mathptmx}
 
-\@ifpackagewith{mathptmx}{slantedGreek}
+\IfPackageLoadedWithOptionsTF{mathptmx}{slantedGreek}
     {\LWR at mathjax@addgreek at u@it*{}{}}
     {}
 

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mhchem.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mhchem.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-mhchem.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -21,24 +21,31 @@
 \LetLtxMacro\LWR at mhchem@origce\ce
 
 \newcommand{\LWR at mhchem@HTML at ce}[1]{%
-\LWR at findcurrenttextcolor% sets \LWR at tempcolor
-\ifbool{LWR at xfakebold}%
-    {\def\LWR at tempone{Y}}%
-    {\def\LWR at tempone{N}}%
-\begin{lateximage}*[\textbackslash{}ce\{\LWR at HTMLsanitize{#1}\}]*%
-    [%
-        FM\LWR at f@family%
-        SR\LWR at f@series%
-        SH\LWR at f@shape%
-        SHC\LWR at f@shapecaps%
-        CL\LWR at tempcolor%
-        FB\LWR at tempone% xfakebold
-    ]%
-\LWR at setcurrentfont%
-\LWR at mhchem@origce{#1}%
-\end{lateximage}%
-\endgroup%
-\addtocounter{LWR at mhchem@cedepth}{-1}%
+    \LWR at findcurrenttextcolor% sets \LWR at tempcolor
+    \ifbool{LWR at xfakebold}%
+        {\def\LWR at tempone{Y}}%
+        {\def\LWR at tempone{N}}%
+    \begin{lateximage}%
+        *%
+        [%
+            \textbackslash{}%
+            ce%
+            \{\LWR at HTMLsanitizedetokenized{\detokenize{#1}}\}%
+        ]%
+        *%
+        [%
+            FM\LWR at f@family%
+            SR\LWR at f@series%
+            SH\LWR at f@shape%
+            SHC\LWR at f@shapecaps%
+            CL\LWR at tempcolor%
+            FB\LWR at tempone% xfakebold
+        ]%
+    \LWR at setcurrentfont%
+    \LWR at mhchem@origce{#1}%
+    \end{lateximage}%
+    \endgroup%
+    \addtocounter{LWR at mhchem@cedepth}{-1}%
 }
 
 \newcounter{LWR at mhchem@cedepth}
@@ -45,12 +52,12 @@
 \setcounter{LWR at mhchem@cedepth}{0}
 
 \renewcommand{\ce}{%
-\begingroup%
-\ifnumequal{\value{LWR at mhchem@cedepth}}{0}{%
-    \catcode`\$=3% math shift
-}{}%
-\addtocounter{LWR at mhchem@cedepth}{1}%
-\LWR at mhchem@HTML at ce%
+    \begingroup%
+    \ifnumequal{\value{LWR at mhchem@cedepth}}{0}{%
+        \catcode`\$=3% math shift
+    }{}%
+    \addtocounter{LWR at mhchem@cedepth}{1}%
+    \LWR at mhchem@HTML at ce%
 }
 
 \LetLtxMacro\LWR at mhchem@origcesplit\cesplit
@@ -57,23 +64,30 @@
 
 \newcommand*{\LWR at mhchem@HTML at cesplit}[2]
 {%
-\LWR at findcurrenttextcolor% sets \LWR at tempcolor
-\ifbool{LWR at xfakebold}%
-    {\def\LWR at tempone{Y}}%
-    {\def\LWR at tempone{N}}%
-\begin{lateximage}*[\textbackslash{}cesplit\{\LWR at HTMLsanitize{#2}\}]*%
-    [%
-        FM\LWR at f@family%
-        SR\LWR at f@series%
-        SH\LWR at f@shape%
-        SHC\LWR at f@shapecaps%
-        CL\LWR at tempcolor%
-        FB\LWR at tempone% xfakebold
-    ]%
-\LWR at setcurrentfont%
-\LWR at mhchem@origcesplit{#1}{#2}%
-\end{lateximage}%
-\endgroup%
+    \LWR at findcurrenttextcolor% sets \LWR at tempcolor
+    \ifbool{LWR at xfakebold}%
+        {\def\LWR at tempone{Y}}%
+        {\def\LWR at tempone{N}}%
+    \begin{lateximage}%
+        *%
+        [%
+            \textbackslash{}%
+            cesplit%
+            \{\LWR at HTMLsanitizedetokenized{\detokenize{#2}}\}%
+        ]%
+        *%
+        [%
+            FM\LWR at f@family%
+            SR\LWR at f@series%
+            SH\LWR at f@shape%
+            SHC\LWR at f@shapecaps%
+            CL\LWR at tempcolor%
+            FB\LWR at tempone% xfakebold
+        ]%
+    \LWR at setcurrentfont%
+    \LWR at mhchem@origcesplit{#1}{#2}%
+    \end{lateximage}%
+    \endgroup%
 }
 
 \newcounter{LWR at mhchem@cesplitdepth}
@@ -80,12 +94,12 @@
 \setcounter{LWR at mhchem@cesplitdepth}{0}
 
 \renewcommand{\cesplit}{%
-\begingroup%
-\ifnumequal{\value{LWR at mhchem@cesplitdepth}}{0}{%
-    \catcode`\$=3% math shift
-}{}%
-\addtocounter{LWR at mhchem@cesplitdepth}{1}%
-\LWR at mhchem@HTML at cesplit%
+    \begingroup%
+    \ifnumequal{\value{LWR at mhchem@cesplitdepth}}{0}{%
+        \catcode`\$=3% math shift
+    }{}%
+    \addtocounter{LWR at mhchem@cesplitdepth}{1}%
+    \LWR at mhchem@HTML at cesplit%
 }
 
 \appto\LWR at restoreorigformatting{%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-microtype.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-microtype.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-microtype.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -37,7 +37,7 @@
 \DeclareDocumentCommand{\microtypesetup}{m}{}
 \DeclareDocumentCommand{\microtypecontext}{m}{}
 \DeclareDocumentCommand{\textmicrotypecontext}{m m}{#2}
-\@ifpackageloaded{letterspace}{\let\MT at textls\relax}{%
+\IfPackageLoadedTF{letterspace}{\let\MT at textls\relax}{%
 \DeclareDocumentCommand{\lsstyle}{}{}
 \DeclareDocumentCommand{\textls}{o +m}{}
 \DeclareDocumentCommand{\lslig}{m}{#1}

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-minted.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-minted.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-minted.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -15,7 +15,7 @@
 %%   http://www.latex-project.org/lppl.txt
 %% and version 1.3 or later is part of all distributions of LaTeX
 %% version 2005/12/01 or later.
-\LWR at ProvidesPackagePass{minted}[2017/07/19]
+\LWR at ProvidesPackagePass{minted}[2021/12/24]
 \xpatchcmd{\minted}
     {\setkeys{minted at opt@cmd}{#1}}
     {%
@@ -57,6 +57,15 @@
     }
     {}
     {\LWR at patcherror{minted}{inputminted}}
+
+\renewenvironment{minted at snugshade*}[1]%
+{%
+    \colorlet{shadecolor}{#1}%
+    \begin{snugshade*}%
+}
+{%
+    \end{snugshade*}%
+}
 \endinput
 %%
 %% End of file `lwarp-minted.sty'.

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-multirow.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-multirow.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-multirow.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -18,47 +18,50 @@
 
 
 \LetLtxMacro\multirow\relax
-\LWR at ProvidesPackagePass{multirow}[2021/01/29]
+\LWR at ProvidesPackagePass{multirow}[2021/03/15]
 \newcommand{\LWR at multirowborder}{}
-\newcommand*{\LWR at multirow@par}{\LWR at htmltag{br /}\LWR at origpar}%
+\newcommand*{\LWR at multirow@par}{%
+    \LWR at htmltag{br /}%
+}%
 \NewDocumentCommand{\LWR at HTML@multirow}{O{c} m o m o +m}%
 {%
-\LWR at traceinfo{*** LWR at HTML@multirow #1 #2 #4}%
-\booltrue{LWR at usedmultirow}%
-\LWR at maybenewtablerow%
-\LWR at tabularleftedge%
-\LWR at htmltag{td rowspan=\textquotedbl#2\textquotedbl\ %
-class=\textquotedbl{}td%
-\LWR at getexparray{LWR at tablecolspec}{\arabic{LWR at tableLaTeXcolindex}}%
-\LWR at addcmidruletrim%
-\LWR at addleftmostbartag%
-\LWR at printbartag{\arabic{LWR at tableLaTeXcolindex}}%
-\textquotedbl%
-\LWR at tdstartstyles%
-\ifstrequal{#1}{c}{\LWR at tdaddstyle\LWR at print@mbox{vertical-align:middle}}{}%
-\ifstrequal{#1}{b}{\LWR at tdaddstyle\LWR at print@mbox{vertical-align:bottom}}{}%
-\ifstrequal{#1}{t}{\LWR at tdaddstyle\LWR at print@mbox{vertical-align:top}}{}%
-\ifdefvoid{\LWR at multirowborder}{}{%
-    \LWR at tdaddstyle%
-    \LWR at print@mbox{border-\LWR at multirowborder:} 2px dotted black ; %
-    \LWR at print@mbox{padding-\LWR at multirowborder:} 2px%
+    \LWR at traceinfo{LWR at HTML@multirow #1 #2 #4}%
+    \booltrue{LWR at usedmultirow}%
+    \LWR at maybenewtablerow%
+    \LWR at tabularleftedge%
+    \LWR at htmltag{%
+        td rowspan=\textquotedbl#2\textquotedbl\ %
+        class=\textquotedbl{}td%
+        \LWR at getexparray{LWR at tablecolspec}{\arabic{LWR at tableLaTeXcolindex}}%
+        \LWR at addcmidruletrim%
+        \LWR at addleftmostbartag%
+        \LWR at printbartag{\arabic{LWR at tableLaTeXcolindex}}%
+        \textquotedbl%
+        \LWR at tdstartstyles%
+        \ifstrequal{#1}{c}{\LWR at tdaddstyle\LWR at print@mbox{vertical-align:middle}}{}%
+        \ifstrequal{#1}{b}{\LWR at tdaddstyle\LWR at print@mbox{vertical-align:bottom}}{}%
+        \ifstrequal{#1}{t}{\LWR at tdaddstyle\LWR at print@mbox{vertical-align:top}}{}%
+        \ifdefvoid{\LWR at multirowborder}{}{%
+            \LWR at tdaddstyle%
+            \LWR at print@mbox{border-\LWR at multirowborder:} 2px dotted black ; %
+            \LWR at print@mbox{padding-\LWR at multirowborder:} 2px%
+        }%
+        \LWR at addcmidrulewidth%
+        \LWR at addcdashline%
+        \LWR at addtabularrulecolors%
+        \LWR at tdendstyles%
+    }%
+    \LWR at getexparray{LWR at colbeforespec}{\arabic{LWR at tableLaTeXcolindex}}%
+    \begingroup%
+        \LetLtxMacro{\\}{\LWR at endofline}%
+        \booltrue{LWR at in@multirow at par}%
+        #6%
+    \endgroup%
+    \LWR at stoppars%
+    \boolfalse{LWR at intabularmetadata}%
+    \renewcommand{\LWR at multirowborder}{}%
+    \LWR at traceinfo{LWR at HTML@multirow done}%
 }%
-\LWR at addcmidrulewidth%
-\LWR at addcdashline%
-\LWR at addtabularrulecolors%
-\LWR at tdendstyles%
-}%
-\LWR at getexparray{LWR at colbeforespec}{\arabic{LWR at tableLaTeXcolindex}}%
-\begingroup%
-    \LetLtxMacro{\\}{\LWR at endofline}%
-    \let\par\LWR at multirow@par%
-    #6%
-\endgroup%
-\LWR at stoppars%
-\boolfalse{LWR at intabularmetadata}%
-\renewcommand{\LWR at multirowborder}{}%
-\LWR at traceinfo{*** LWR at HTML@multirow done}%
-}%
 
 \LWR at formatted{multirow}
 \AtBeginDocument{

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-nccfoots.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-nccfoots.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-nccfoots.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -16,6 +16,10 @@
 %% and version 1.3 or later is part of all distributions of LaTeX
 %% version 2005/12/01 or later.
 \LWR at ProvidesPackagePass{nccfoots}[2005/02/03]
+\apptocmd{\LWR at nullifyfootnotes}{%
+    \renewcommand*{\Footnote}[1]{}%
+    \renewcommand*{\Footnotemark}[1]{}%
+}{}{}
 \begin{warpMathJax}
 \CustomizeMathJax{\newcommand{\Footnotemark}[1]{{}^{\mathrm{#1}}}}
 \CustomizeMathJax{\newcommand{\Footnote}[2]{\Footnotemark{#1}}}

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-ntheorem.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-ntheorem.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-ntheorem.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -50,7 +50,7 @@
 \LWR at ProvidesPackagePass{ntheorem}[2011/08/15]
 \newcommand{\LWR at newtheoremstyle}{plain}
 \AtBeginDocument{
-\@ifpackageloaded{cleveref}{
+\IfPackageLoadedTF{cleveref}{
 \gdef\@thm#1#2#3{%
    \if at thmmarks
      \stepcounter{end\InTheoType ctr}%
@@ -198,7 +198,7 @@
 \LWR at htmltag{%
     a id=\textquotedbl\LWR at print@mbox{autoid-\arabic{LWR at thisautoid}}\textquotedbl%
 }%
-\LWR at htmltag{/a}%
+\LWR at htmltag{/a}\LWR at orignewline%
 \LWR at startpars%
 }
 \gdef\newtheoremstyle#1#2#3{%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-parnotes.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-parnotes.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-parnotes.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -35,17 +35,22 @@
 }
 
 \def\PN at parnotes@real{%
+\ifPN at inparnotes
+\else
+    \LWR at stoppars%
+    \addtocounter{LWR at spandepth}{1}%
     % We call \par later, so this avoids recursion with \PN at parnotes@auto
     \PN at inparnotestrue
-    \unless\ifvmode\par\fi
     % Avoid page breaks between a paragraph and its parnotes
-    \nopagebreak\addvspace{\parnotevskip}%
-    \LWR at forcenewpage%                      lwarp
     \begin{BlockClass}(note){footnotes}%    lwarp
-    {\parnotefmt{\PN at text}\par}%
+    \leavevmode\LWR at orignewline%
+    {%
+        \parnotefmt{\PN at text}%
+    }%
+    \leavevmode\LWR at orignewline%
     \end{BlockClass}%                       lwarp
+    \leavevmode\LWR at orignewline%
     \global\def\PN at text{}%
-    \addvspace{\parnotevskip}%
     %
     % These can be enabled or disabled by package options
     %
@@ -52,12 +57,37 @@
     \PN at disable@indent
     \PN at reset@optional
     \PN at inparnotesfalse
+    \addtocounter{LWR at spandepth}{-1}%
+\fi
 }
 
+\newbool{LWR at parnotes@doingauto}
+\boolfalse{LWR at parnotes@doingauto}
+
+\def\PN at parnotes@auto{%
+    \ifbool{LWR at parnotes@doingauto}{
+        \ifx\@currenvir\@PN at autopn
+            \unless\ifPN at inparnotes
+                \unless\ifx\PN at text\@empty
+                    \expandafter\PN at parnotes@real
+                \fi
+            \fi
+        \fi
+    }{}%
+}
+\renewenvironment{autopn}%
+    {\booltrue{LWR at parnotes@doingauto}}
+    {\PN at parnotes@auto}%
 \AtBeginDocument{
-    \crefname{parnotemark}{paragraph note}{paragraph notes}
-    \Crefname{parnotemark}{Paragraph note}{Paragraph notes}
+    \ifdef{\crefname}{
+        \crefname{parnotemark}{paragraph note}{paragraph notes}
+        \Crefname{parnotemark}{Paragraph note}{Paragraph notes}
+    }{}
 }
+\apptocmd{\LWR at nullifyfootnotes}{%
+    \renewcommand{\parnote}[2][]{}%
+    \renewcommand\parnotemark[1]{}%
+}{}{}
 \begin{warpMathJax}
 \providecommand{\parnotename}{parnote}
 \appto\LWR at syncnotenumbers{%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-pdftricks.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-pdftricks.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-pdftricks.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -17,7 +17,7 @@
 %% version 2005/12/01 or later.
 \LWR at ProvidesPackagePass{pdftricks}[2003/08/10]
 \def\PDFTfigname{\BaseJobname-fig\thepsfig}
-\PackageWarning{lwarp-pdftricks}{
+\PackageWarning{lwarp-pdftricks}{%
 When the pdftricks images change,
 remember to convert PDF images to SVG using 'lwarpmk pdftosvg *-fig.pdf',
 }

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-physics.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-physics.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-physics.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -17,7 +17,7 @@
 %% version 2005/12/01 or later.
 \LWR at ProvidesPackagePass{physics}% No date is provided by the package.
 \begin{warpMathJax}
-\PackageWarningNoLine{lwarp, physics}{The MathJax v3 extension will be used}
+\PackageNoteNoLine{lwarp, physics}{The MathJax v3 extension will be used}
 \CustomizeMathJax{\require{physics}}
 \end{warpMathJax}
 \endinput

Added: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-showlabels.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-showlabels.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-showlabels.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -0,0 +1,26 @@
+%%
+%% This is file `lwarp-showlabels.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% lwarp.dtx  (with options: `showlabels')
+%% This is a generated file.
+%% Copyright 2016-2020 Brian Dunn
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%   http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+\LWR at ProvidesPackageDrop{showlabels}[2021/10/27]
+\providecommand{\showlabelfont}{}
+\providecommand{\showlabelsetlabel}[1]{}
+\newcommand*{\showlabels}[2][]{}
+\newcommand*{\showlabelrefline}{}
+\newcommand*{\showlabelsinline}{}
+\endinput
+%%
+%% End of file `lwarp-showlabels.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-showlabels.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-siunitx-v2.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-siunitx-v2.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-siunitx-v2.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -42,7 +42,7 @@
       {
         \__siunitx_ensure_ltr:n
           {
-            \begingroup% lwarp
+            \color at begingroup
             \__siunitx_print_color:
             \__siunitx_font_shape:
             \__siunitx_font_weight:
@@ -61,7 +61,7 @@
                             }% lwarp
                         }% lwarp
                }
-            \endgroup% lwarp
+            \color at endgroup
           }
       }
   }
@@ -95,16 +95,19 @@
     }
     {
         \__siunitx_unit_output_pre_print:
-        \begingroup%    lwarp
-            \boolfalse{mathjax}%    lwarp
-            \LWR at subsingledollar{% lwarp
-                \textbackslash( \LWR at HTMLsanitize{#1} \textbackslash)% lwarp
+        \begingroup%                            lwarp
+            \boolfalse{mathjax}%                lwarp
+            \LWR at subsingledollar{%              lwarp
+                    \textbackslash( % space
+                    \LWR at HTMLsanitizedetokenized{%
+                        \detokenize{#1}%
+                    } \textbackslash)%          lwarp
             }{siunitx}{%
                 \__siunitx_print:nn { number } {%
                     \LWR at origensuredmath{#1}%
                 }%
-            }% lwarp
-        \endgroup%    lwarp
+            }%                                  lwarp
+        \endgroup%                              lwarp
         \__siunitx_unit_output_print:
     }
    \group_end:% lwarp
@@ -123,15 +126,18 @@
       {
         \__siunitx_unit_output_pre_print:
         \begingroup%    lwarp
-            \boolfalse{mathjax}%    lwarp
-                \LWR at subsingledollar{% lwarp
-                    \textbackslash( \LWR at HTMLsanitize{#1} \textbackslash)% lwarp
+            \boolfalse{mathjax}%                    lwarp
+                \LWR at subsingledollar{%              lwarp
+                    \textbackslash( % space
+                    \LWR at HTMLsanitizedetokenized{%
+                        \detokenize{#1}%
+                    } \textbackslash)%              lwarp
                 }{siunitx}{%
                     \__siunitx_print:nn { number } {%
                         \LWR at origensuredmath{#1}%
-                    } % lwarp
-                }% lwarp
-        \endgroup%    lwarp
+                    } %                             lwarp
+                }%                                  lwarp
+        \endgroup%                                  lwarp
         \__siunitx_unit_output_print:
       }
   }
@@ -139,16 +145,19 @@
   \tl_if_empty:nF {#1}
     {
       \tl_set:Nn \l__siunitx_unit_tl {#2}
-        \begingroup%    lwarp
-            \boolfalse{mathjax}%    lwarp
-                \LWR at subsingledollar{% lwarp
-                    \textbackslash( \LWR at HTMLsanitize{#1} \textbackslash)% lwarp
+        \begingroup%                                    lwarp
+            \boolfalse{mathjax}%                        lwarp
+                \LWR at subsingledollar{%                  lwarp
+                    \textbackslash( % space
+                    \LWR at HTMLsanitizedetokenized{%
+                        \detokenize{#1}%
+                    } \textbackslash)%                  lwarp
                 }{siunitx}{%
                     \__siunitx_print:nn { number } {
                         \LWR at origensuredmath{#1}%
-                    }% lwarp
-                }% lwarp
-        \endgroup%    lwarp
+                    }%                                  lwarp
+                }%                                      lwarp
+        \endgroup%                                      lwarp
       \__siunitx_unit_output_print:
     }
 }
@@ -285,47 +294,39 @@
     \ifblank{#3}{}{\num{#3}^{\unicode{x2033}}}% \dblprime
 }}
 \CustomizeMathJax{\newcommand{\ang}[2][]{\LWRsiunitxang#2;;;\LWRsiunitxEND}}
-\CustomizeMathJax{\newcommand{\LWRsiunitxnumscientific}[2]{%
-    \ifblank{#1}%
+\ExplSyntaxOn
+\AtBeginDocument{
+\ifdefstring{\l__siunitx_output_decimal_tl}{{,}}
+    {\CustomizeMathJax{\def\LWRsiunitxdecimal{,}}}
+    {\CustomizeMathJax{\def\LWRsiunitxdecimal{.}}}
+}
+\ExplSyntaxOff
+\CustomizeMathJax{\newcommand{\LWRsiunitxENDTWO}{}}
+
+\CustomizeMathJax{\def\LWRsiunitxprintdecimalsubtwo#1,#2,#3\LWRsiunitxENDTWO{%
+    \ifblank{#1}{0}{\mathrm{#1}}%
+    \ifblank{#2}%
         {}%
         {%
-            \ifstrequal{#1}{-}%
-                {-}%
-                {\LWRsiunitxprintdecimal{#1}\times}%
+            {\LWRsiunitxdecimal}%
+            \mathrm{#2}%
         }%
-    10^{\LWRsiunitxprintdecimal{#2}}
 }}
-\ExplSyntaxOn
-\AtBeginDocument{
-\ifdefstring{\l__siunitx_output_decimal_tl}{{,}}
-    {% Use decimal comma
-        \CustomizeMathJax{\def\LWRsiunitxprintdecimalsub#1.#2.#3\LWRsiunitxEND{%
-            \mathrm{#1}%
-            \ifblank{#2}
-                {}%
-                {,\mathrm{#2}}
-        }}
+\CustomizeMathJax{\def\LWRsiunitxprintdecimalsub#1.#2.#3\LWRsiunitxEND{%
+    \LWRsiunitxprintdecimalsubtwo#1,,\LWRsiunitxENDTWO%
+    \ifblank{#2}%
+        {}%
+        {%
+            {\LWRsiunitxdecimal}%
+            \LWRsiunitxprintdecimalsubtwo#2,,\LWRsiunitxENDTWO%
+        }%
+}}
 
-        \CustomizeMathJax{\newcommand{\LWRsiunitxprintdecimal}[1]{%
-            \LWRsiunitxprintdecimalsub#1...\LWRsiunitxEND%
-        }}
-    }
-    {% Use decimal point
-        \CustomizeMathJax{\def\LWRsiunitxprintdecimalsub#1,#2,#3\LWRsiunitxEND{%
-            \mathrm{#1}%
-            \ifblank{#2}
-                {}%
-                {.\mathrm{#2}}
-        }}
-
-        \CustomizeMathJax{\newcommand{\LWRsiunitxprintdecimal}[1]{%
-            \LWRsiunitxprintdecimalsub#1,,,\LWRsiunitxEND%
-        }}
-    }
-}
-\ExplSyntaxOff
+\CustomizeMathJax{\newcommand{\LWRsiunitxprintdecimal}[1]{%
+    \LWRsiunitxprintdecimalsub#1...\LWRsiunitxEND%
+}}
 \CustomizeMathJax{\def\LWRsiunitxnumplus#1+#2+#3\LWRsiunitxEND{%
-    \ifblank{#2}
+    \ifblank{#2}%
         {\LWRsiunitxprintdecimal{#1}}% no plus
         {%
             \ifblank{#1}%
@@ -337,17 +338,15 @@
                 }%
         }%
 }}
-
 \CustomizeMathJax{\def\LWRsiunitxnumminus#1-#2-#3\LWRsiunitxEND{%
-    \ifblank{#2}
+    \ifblank{#2}%
         {\LWRsiunitxnumplus#1+++\LWRsiunitxEND}%
         {%
-            \LWRsiunitxprintdecimal{#1}%
+            \ifblank{#1}{}{\LWRsiunitxprintdecimal{#1}}%
             \unicode{x02212}% mathematical minus sign
             \LWRsiunitxprintdecimal{#2}%
         }%
 }}
-
 \CustomizeMathJax{\def\LWRsiunitxnumpm#1+-#2+-#3\LWRsiunitxEND{%
     \ifblank{#2}%
         {\LWRsiunitxnumminus#1---\LWRsiunitxEND}%
@@ -357,7 +356,6 @@
             \LWRsiunitxprintdecimal{#2}%
         }%
 }}
-
 \CustomizeMathJax{\def\LWRsiunitxnumx#1x#2x#3x#4\LWRsiunitxEND{%
     \ifblank{#2}%
         {\LWRsiunitxnumpm#1+-+-\LWRsiunitxEND}%
@@ -377,38 +375,37 @@
                 }%
         }%
 }}
-
+\CustomizeMathJax{\newcommand{\LWRsiunitxnumscientific}[2]{%
+    \ifblank{#1}%
+        {}%
+        {%
+            \ifstrequal{#1}{-}%
+                {-}%
+                {\LWRsiunitxprintdecimal{#1}\times}%
+        }%
+    10^{\LWRsiunitxprintdecimal{#2}}
+}}
 \CustomizeMathJax{\def\LWRsiunitxnumD#1D#2D#3\LWRsiunitxEND{%
     \ifblank{#2}%
         {\LWRsiunitxnumx#1xxxxx\LWRsiunitxEND}%
         {\mathrm{\LWRsiunitxnumscientific{#1}{#2}}}%
 }}
-
 \CustomizeMathJax{\def\LWRsiunitxnumd#1d#2d#3\LWRsiunitxEND{%
     \ifblank{#2}%
         {\LWRsiunitxnumD#1DDD\LWRsiunitxEND}%
         {\mathrm{\LWRsiunitxnumscientific{#1}{#2}}}%
 }}
-
 \CustomizeMathJax{\def\LWRsiunitxnumE#1E#2E#3\LWRsiunitxEND{%
     \ifblank{#2}%
         {\LWRsiunitxnumd#1ddd\LWRsiunitxEND}%
         {\mathrm{\LWRsiunitxnumscientific{#1}{#2}}}%
 }}
-
 \CustomizeMathJax{\def\LWRsiunitxnume#1e#2e#3\LWRsiunitxEND{%
     \ifblank{#2}%
         {\LWRsiunitxnumE#1EEE\LWRsiunitxEND}%
         {\mathrm{\LWRsiunitxnumscientific{#1}{#2}}}%
 }}
-
-\CustomizeMathJax{\def\LWRsiunitxnumcomma#1,#2,#3\LWRsiunitxEND{%
-    \ifblank{#2}
-        {\LWRsiunitxnume#1eee\LWRsiunitxEND}
-        {\LWRsiunitxnume#1.#2eee\LWRsiunitxEND}
-}}
-
-\CustomizeMathJax{\newcommand{\num}[2][]{\LWRsiunitxnumcomma#2,,,\LWRsiunitxEND}}
+\CustomizeMathJax{\newcommand{\num}[2][]{\LWRsiunitxnume#2eee\LWRsiunitxEND}}
 \CustomizeMathJax{\newcommand{\si}[2][]{\mathrm{#2}}}
 \CustomizeMathJax{\def\LWRsiunitxSIopt#1[#2]#3{%
     {#2}\num{#1}{#3}%
@@ -422,9 +419,9 @@
         {\LWRsiunitxSIopt{#2}}%
         {\LWRsiunitxSI{#2}}%
 }}
-\CustomizeMathJax{\newcommand{\numlist}[2][]{\mathrm{#2}}}
+\CustomizeMathJax{\newcommand{\numlist}[2][]{\text{#2}}}
 \CustomizeMathJax{\newcommand{\numrange}[3][]{\num{#2}\,\unicode{x2013}\,\num{#3}}}
-\CustomizeMathJax{\newcommand{\SIlist}[3][]{\mathrm{#2\,#3}}}
+\CustomizeMathJax{\newcommand{\SIlist}[3][]{\text{#2}\,#3}}
 \CustomizeMathJax{\newcommand{\SIrange}[4][]{\num{#2}\,#4\,\unicode{x2013}\,\num{#3}\,#4}}
 \CustomizeMathJax{\newcommand{\tablenum}[2][]{\mathrm{#2}}}
 \CustomizeMathJax{\newcommand{\ampere}{\mathrm{A}}}
@@ -516,7 +513,7 @@
 \CustomizeMathJax{\newcommand{\square}[1]{\mathrm{#1}^2}}
 \CustomizeMathJax{\newcommand{\cubed}{^3}}
 \CustomizeMathJax{\newcommand{\cubic}[1]{\mathrm{#1}^3}}
-\CustomizeMathJax{\newcommand{\per}{/}}
+\CustomizeMathJax{\newcommand{\per}{\,\mathrm{/}}}
 \CustomizeMathJax{\newcommand{\celsius}{\unicode{x2103}}}
 \CustomizeMathJax{\newcommand{\fg}{\femto\gram}}
 \CustomizeMathJax{\newcommand{\pg}{\pico\gram}}

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-thm-listof.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-thm-listof.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-thm-listof.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -16,7 +16,7 @@
 %% and version 1.3 or later is part of all distributions of LaTeX
 %% version 2005/12/01 or later.
 \LWR at ProvidesPackagePass{thm-listof}[2019/12/22]
-\@ifpackagelater{thm-listof}{2020/08/01}{% v0.72
+\IfPackageAtLeastTF{thm-listof}{2020/08/01}{% v0.72
   \def\thmtlo at newentry{%
     \csdef{l@\thmt at envname}##1##2{\hypertocfloat{1}{figure}{lof}{##1}{##2}}%
   }

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-tikz.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-tikz.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-tikz.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -21,7 +21,7 @@
 
 \newbool{LWR at tikzbabel}
 
-\@ifpackagelater{tikz}{2013/12/20}% Test for Tikz version v3.0.0
+\IfPackageAtLeastTF{tikz}{2013/12/20}% Test for Tikz version v3.0.0
 {\usetikzlibrary{babel}\booltrue{LWR at tikzbabel}}
 {\boolfalse{LWR at tikzbabel}}
 

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-titling.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-titling.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-titling.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -111,7 +111,7 @@
 \renewcommand{\thanksmarkseries}[1]{%
 \def\@bsmarkseries{\renewcommand{\thefootnote}{\@nameuse{#1}{footnote}}}%
 }
-\@ifclassloaded{memoir}{
+\IfClassLoadedTF{memoir}{
    \thanksmarkseries{arabic}
 }{% not memoir
 \if at titlepage

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-todo.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-todo.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-todo.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -35,7 +35,6 @@
     ] \@nameuse{@done\the\c at todo}:
         {\todoformat\ifx#1\todomark\else\textbf{#1} \fi}#2%
 }
-
 \xpatchcmd{\@displaytodo}
     {\todoformat #1}{\todoformat \textbf{#1}}{}
     {\PackageWarning{lwarp-todo}{Unable to patch @displaytodo.}}
@@ -49,10 +48,11 @@
 
 \patchcmd{\astodos}{\todoformat #1}{\todoformat \textbf{#1}}{}
     {\PackageWarning{lwarp-todo}{Unable to patch astodos.}}
-
 \AtBeginDocument{
+\ifdef{\crefname}{
     \crefname{todo}{todo}{todos}
     \Crefname{todo}{Todo}{Todos}
+}{}
 }
 
 \endinput

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-vwcol.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-vwcol.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-vwcol.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -80,8 +80,8 @@
 \BlockClass[\LWR at vwcolstyle]{multicols}
 }
 {
-\endBlockClass
-\LWR at startpars
+    \endBlockClass
+    \LWR at startpars
 }
 \endinput
 %%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-wrapfig.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-wrapfig.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-wrapfig.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -21,10 +21,10 @@
 \LWR at ProvidesPackageDrop{wrapfig}[2003/01/31]
 \newcommand*{\LWR at wrapposition}{}
 
-\newcommand{\LWR at wrapfig@printHTMLwidth}{width:\LWR at printlength{\LWR at templengthone}}
+\newcommand{\LWR at wrapfig@printHTMLwidth}{\LWR at printlength{\LWR at templengthone}}
 
 \AtBeginDocument{
-    \@ifpackageloaded{keyfloat}{
+    \IfPackageLoadedTF{keyfloat}{
         \renewcommand{\LWR at wrapfig@printHTMLwidth}{%
             \ifboolexpr{
                 test {\ifnumgreater{\value{KFLT at keyfloatdepth}}{0}} or

Added: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-wrapfig2.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-wrapfig2.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-wrapfig2.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -0,0 +1,57 @@
+%%
+%% This is file `lwarp-wrapfig2.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% lwarp.dtx  (with options: `wrapfig2')
+%% This is a generated file.
+%% Copyright 2016-2020 Brian Dunn
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%   http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+
+
+
+\LWR at ProvidesPackageDrop{wrapfig2}[2021-12-21]
+
+\LWR at origRequirePackage{lwarp-wrapfig}
+\RenewDocumentEnvironment{wrapfigure}{o m o G{0pt} s}% original
+  {\wrapfloat{figure}[#1]{#2}[#3]{#4}}%
+  {\endwrapfloat}
+
+\RenewDocumentEnvironment{wraptable}{o m o G{0pt} s}% original
+  {\wrapfloat{table}[#1]{#2}[#3]{#4}}%
+  {\endwrapfloat}
+
+\RenewDocumentEnvironment{wrapfloat}{m o m o G{0pt}}% lwarp
+{%
+    \begin{LWR at setvirtualpage}*%
+    \LWR at subwrapfigure{#3}{#5}%
+    \renewcommand*{\@captype}{#1}%
+}
+{%
+    \endLWR at BlockClassWP%
+    \end{LWR at setvirtualpage}%
+}
+
+\NewDocumentEnvironment{wraptext}%
+      {O{l}    D||{0.5\columnwidth} D<>{0}   D(){figure}}%
+{%
+    \wrapfloat{#4}[]{#1}[]{#2}%
+    \tcolorbox%
+}
+{%
+    \endtcolorbox%
+    \endwrapfloat%
+    \ignorespaces%
+}
+
+\endinput
+%%
+%% End of file `lwarp-wrapfig2.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-wrapfig2.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-xcolor.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-xcolor.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-xcolor.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -19,81 +19,83 @@
 
 \LWR at ProvidesPackagePass{xcolor}[2016/05/11]
 
+\let\color at endgroup\endgroup
+
 \LetLtxMacro\LWR at print@pagecolor\pagecolor
 \LetLtxMacro\LWR at print@nopagecolor\nopagecolor
 \appto\LWR at restoreorigformatting{%
-\LetLtxMacro\pagecolor\LWR at print@pagecolor%
-\LetLtxMacro\nopagecolor\LWR at print@nopagecolor%
+    \LetLtxMacro\pagecolor\LWR at print@pagecolor%
+    \LetLtxMacro\nopagecolor\LWR at print@nopagecolor%
 }
 \DeclareRobustCommand{\LWR at HTML@normalcolor}{\color{black}}%
 
 \LWR at formatted{normalcolor}
 \renewcommand*{\LWR at findcurrenttextcolor}{%
-\LWR at traceinfo{LWR at findcurrenttextcolor}%
-\protect\colorlet{LWR at current@color}{.}%
-\LWR at traceinfo{LWR at findcurrenttextcolor B}%
-\protect\convertcolorspec{named}{LWR at current@color}{HTML}\LWR at tempcolor%
-\LWR at traceinfo{LWR at findcurrenttextcolor: done}%
+    \LWR at traceinfo{LWR at findcurrenttextcolor}%
+    \protect\colorlet{LWR at current@color}{.}%
+    \LWR at traceinfo{LWR at findcurrenttextcolor B}%
+    \protect\convertcolorspec{named}{LWR at current@color}{HTML}\LWR at tempcolor%
+    \LWR at traceinfo{LWR at findcurrenttextcolor: done}%
 }
 
 \newcommand*{\LWR at currenttextcolorstyle}{%
-\LWR at findcurrenttextcolor%
-\ifdefstring{\LWR at tempcolor}{000000}%
-{}%
-{color: \LWR at origpound\LWR at tempcolor ; }%
+    \LWR at findcurrenttextcolor%
+    \ifdefstring{\LWR at tempcolor}{000000}%
+    {}%
+    {color: \LWR at origpound\LWR at tempcolor ; }%
 }
 \DeclareDocumentCommand{\LWR at textcurrentcolor}{m}{%
-\begingroup%
-\LWR at hook@processingtags%
-\LWR at findcurrenttextcolor%
-\InlineClass[color:\LWR at origpound\LWR at tempcolor]{textcolor}{%
-    \renewcommand*{\LWR at currenttextcolor}{\LWR at origpound\LWR at tempcolor}%
-    #1%
-}%
-\endgroup%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \LWR at findcurrenttextcolor%
+    \InlineClass[color:\LWR at origpound\LWR at tempcolor]{textcolor}{%
+        \renewcommand*{\LWR at currenttextcolor}{\LWR at origpound\LWR at tempcolor}%
+        #1%
+    }%
+    \endgroup%
 }
 \NewDocumentCommand{\LWR at colorstyle}{m m}{%
-\begingroup%
-\LWR at hook@processingtags%
-\convertcolorspec{#1}{#2}{HTML}\LWR at tempcolor%
-\LWR at origpound\LWR at tempcolor%
-\endgroup%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \convertcolorspec{#1}{#2}{HTML}\LWR at tempcolor%
+    \LWR at origpound\LWR at tempcolor%
+    \endgroup%
 }
 \NewDocumentCommand{\LWR at backgroundcolor}{O{named} m m}{%
-\begingroup%
-\LWR at hook@processingtags%
-\InlineClass[background:\LWR at colorstyle{#1}{#2}]{backgroundcolor}{%
-#3%
-}%
-\endgroup%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \InlineClass[background:\LWR at colorstyle{#1}{#2}]{backgroundcolor}{%
+        #3%
+    }%
+    \endgroup%
 }
 \newcommand*{\LWR at borderpadding}[2]{%
-border:\LWR at printlength{\LWR at atleastonept} solid \LWR at colorstyle{#1}{#2} ; %
-padding:\LWR at printlength{\fboxsep}%
+    border:\LWR at printlength{\LWR at atleastonept} solid \LWR at colorstyle{#1}{#2} ; %
+    padding:\LWR at printlength{\fboxsep}%
 }
 \NewDocumentCommand{\LWR at HTML@color}{o m}{%
-\IfValueTF{#1}{%
-    \LWR at print@color[#1]{#2}%
-    \convertcolorspec{#1}{#2}{HTML}\LWR at tempcolor%
-}{%
-    \LWR at print@color{#2}%
-    \convertcolorspec{named}{#2}{HTML}\LWR at tempcolor%
-}%
-\edef\LWR at currenttextcolor{\LWR at origpound\LWR at tempcolor}%
+    \IfValueTF{#1}{%
+        \LWR at print@color[#1]{#2}%
+        \convertcolorspec{#1}{#2}{HTML}\LWR at tempcolor%
+    }{%
+        \LWR at print@color{#2}%
+        \convertcolorspec{named}{#2}{HTML}\LWR at tempcolor%
+    }%
+    \edef\LWR at currenttextcolor{\LWR at origpound\LWR at tempcolor}%
 }
 
 \LWR at formatted{color}
 \NewDocumentCommand{\LWR at HTML@textcolor}{o m m}{%
-\begingroup%
-\LWR at hook@processingtags%
-\IfValueTF{#1}{%
-    \color[#1]{#2}%
-}{%
-    \color{#2}%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \IfValueTF{#1}{%
+        \color[#1]{#2}%
+    }{%
+        \color{#2}%
+    }%
+    \InlineClass[color:\LWR at currenttextcolor]{textcolor}{#3}%
+    \endgroup%
 }%
-\InlineClass[color:\LWR at currenttextcolor]{textcolor}{#3}%
-\endgroup%
-}%
 
 \LWR at formatted{textcolor}
 
@@ -102,101 +104,101 @@
 \renewcommand*{\nopagecolor}{}
 
 \NewDocumentCommand{\LWR at HTML@colorbox}{O{named} m +m}{%
-\begingroup%
-\LWR at hook@processingtags%
-\InlineClass[%
-background:\LWR at colorstyle{#1}{#2} ; %
-padding:\LWR at printlength{\fboxsep}%
-]{colorbox}{#3}%
-\endgroup%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \InlineClass[%
+    background:\LWR at colorstyle{#1}{#2} ; %
+    padding:\LWR at printlength{\fboxsep}%
+    ]{colorbox}{#3}%
+    \endgroup%
 }
 
 \NewDocumentCommand{\LWR at HTML@colorboxBlock}{O{named} m +m}{%
-\begingroup%
-\LWR at hook@processingtags%
-\LWR at stoppars%
-\begin{BlockClass}[%
-background:\LWR at colorstyle{#1}{#2} ; %
-padding:\LWR at printlength{\fboxsep}%
-]{colorboxBlock}
-#3
-\end{BlockClass}%
-\endgroup%
-\global\booltrue{LWR at minipagethispar}%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \LWR at stoppars%
+    \begin{BlockClass}[%
+        background:\LWR at colorstyle{#1}{#2} ; %
+        padding:\LWR at printlength{\fboxsep}%
+    ]{colorboxBlock}
+    #3
+    \end{BlockClass}%
+    \endgroup%
+    \global\booltrue{LWR at minipagethispar}%
 }
 
 \NewDocumentCommand{\LWR at HTML@fcolorbox}{O{named} m O{#1} m +m}{%
-\LWR at traceinfo{HTML fcolorbox #2 #4}%
-\begingroup%
-\LWR at hook@processingtags%
-\LWR at forceminwidth{\fboxrule}%
-\ifthenelse{\equal{#4}{none}}%
-    {% no background color
-        \InlineClass[%
-        \LWR at borderpadding{#1}{#2}%
-        ]{fcolorbox}{#5}%
-    }%
-    {% yes background color
-        \InlineClass[%
-        \LWR at borderpadding{#1}{#2} ; %
-        background:\LWR at colorstyle{#3}{#4}%
-        ]{fcolorbox}{#5}%
-    }%
-\endgroup%
+    \LWR at traceinfo{HTML fcolorbox #2 #4}%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \LWR at forceminwidth{\fboxrule}%
+    \ifthenelse{\equal{#4}{none}}%
+        {% no background color
+            \InlineClass[%
+            \LWR at borderpadding{#1}{#2}%
+            ]{fcolorbox}{#5}%
+        }%
+        {% yes background color
+            \InlineClass[%
+            \LWR at borderpadding{#1}{#2} ; %
+            background:\LWR at colorstyle{#3}{#4}%
+            ]{fcolorbox}{#5}%
+        }%
+    \endgroup%
 }
 
 \NewDocumentCommand{\LWR at HTML@fcolorboxBlock}{O{named} m O{#1} m +m}{%
-\LWR at traceinfo{HTML fcolorboxBlock #2 #4}%
-\begingroup%
-\LWR at hook@processingtags%
-\LWR at forceminwidth{\fboxrule}%
-\LWR at stoppars%
-\ifthenelse{\equal{#4}{none}}%
-    {% no background color
-        \begin{BlockClass}[%
-            \LWR at borderpadding{#1}{#2}%
-        ]{fcolorboxBlock}
-        #5
-        \end{BlockClass}%
-    }%
-    {% yes background color
-        \convertcolorspec{#3}{#4}{HTML}\LWR at tempcolortwo%
-        \begin{BlockClass}[%
-            background:\LWR at origpound\LWR at tempcolortwo\ ; %
-            \LWR at borderpadding{#1}{#2}%
-        ]{fcolorboxBlock}
-        #5
-        \end{BlockClass}%
-    }%
-\endgroup%
-\global\booltrue{LWR at minipagethispar}%
-\LWR at traceinfo{HTML fcolorboxBlock done}%
+    \LWR at traceinfo{HTML fcolorboxBlock #2 #4}%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \LWR at forceminwidth{\fboxrule}%
+    \LWR at stoppars%
+    \ifthenelse{\equal{#4}{none}}%
+        {% no background color
+            \begin{BlockClass}[%
+                \LWR at borderpadding{#1}{#2}%
+            ]{fcolorboxBlock}
+            #5
+            \end{BlockClass}%
+        }%
+        {% yes background color
+            \convertcolorspec{#3}{#4}{HTML}\LWR at tempcolortwo%
+            \begin{BlockClass}[%
+                background:\LWR at origpound\LWR at tempcolortwo\ ; %
+                \LWR at borderpadding{#1}{#2}%
+            ]{fcolorboxBlock}
+            #5
+            \end{BlockClass}%
+        }%
+    \endgroup%
+    \global\booltrue{LWR at minipagethispar}%
+    \LWR at traceinfo{HTML fcolorboxBlock done}%
 }
 
 \NewDocumentCommand{\LWR at subfcolorminipage}{m m m m}{%
-\LWR at stoppars%
-\begin{BlockClass}[%
-#3%
-\LWR at borderpadding{#1}{#2} ; %
-\IfValueT{#4}{height:\LWR at printlength{\LWR at tempheight} ; }%
-width:\LWR at printlength{\LWR at tempwidth}%
-]{fcolorminipage}%
+    \LWR at stoppars%
+    \begin{BlockClass}[%
+        #3%
+        \LWR at borderpadding{#1}{#2} ; %
+        \IfValueT{#4}{height:\LWR at printlength{\LWR at tempheight} ; }%
+        width:\LWR at printlength{\LWR at tempwidth}%
+    ]{fcolorminipage}%
 }
 \NewDocumentEnvironment{LWR at HTML@fcolorminipage}{O{named} m O{#1} m O{c} o o m}
 {%
-\LWR at hook@processingtags%
-\setlength{\LWR at tempwidth}{#8}%
-\IfValueT{#6}{\setlength{\LWR at tempheight}{#6}}%
-\LWR at forceminwidth{\fboxrule}%
-\convertcolorspec{#1}{#2}{HTML}\LWR at tempcolor%
-\ifthenelse{\equal{#4}{none}}%
-    {\LWR at subfcolorminipage{#1}{#2}{}{#6}}%
-    {%
-        \convertcolorspec{#3}{#4}{HTML}\LWR at tempcolortwo%
-        \LWR at subfcolorminipage{#1}{#2}%
-            {background:\LWR at origpound\LWR at tempcolortwo\ ; }%
-            {#6}%
-    }%
+    \LWR at hook@processingtags%
+    \setlength{\LWR at tempwidth}{#8}%
+    \IfValueT{#6}{\setlength{\LWR at tempheight}{#6}}%
+    \LWR at forceminwidth{\fboxrule}%
+    \convertcolorspec{#1}{#2}{HTML}\LWR at tempcolor%
+    \ifthenelse{\equal{#4}{none}}%
+        {\LWR at subfcolorminipage{#1}{#2}{}{#6}}%
+        {%
+            \convertcolorspec{#3}{#4}{HTML}\LWR at tempcolortwo%
+            \LWR at subfcolorminipage{#1}{#2}%
+                {background:\LWR at origpound\LWR at tempcolortwo\ ; }%
+                {#6}%
+        }%
 }%
 {%
     \end{BlockClass}%
@@ -203,19 +205,22 @@
     \global\booltrue{LWR at minipagethispar}%
 }
 \newcommand*{\LWR at HTML@boxframe}[3]{%
-{%
-\setlength{\LWR at tempwidth}{#1}%
-\setlength{\LWR at tempheight}{#2}%
-\addtolength{\LWR at tempheight}{#3}%
-\LWR at forceminwidth{\fboxrule}%
-\LWR at findcurrenttextcolor%
-\InlineClass[%
-display:inline-block ; %
-border:\LWR at printlength{\LWR at atleastonept} solid \LWR at currenttextcolor{} ; %
-width:\LWR at printlength{\LWR at tempwidth} ; %
-height:\LWR at printlength{\LWR at tempheight}%
-]{boxframe}{}%
-}%
+    {%
+        \setlength{\LWR at tempwidth}{#1}%
+        \setlength{\LWR at tempheight}{#2}%
+        \addtolength{\LWR at tempheight}{#3}%
+        \LWR at forceminwidth{\fboxrule}%
+        \LWR at findcurrenttextcolor%
+        \InlineClass[%
+            display:inline-block ; %
+            border:%
+                \LWR at printlength{\LWR at atleastonept} % space
+                solid % space
+                \LWR at currenttextcolor{} ; % space
+            width:\LWR at printlength{\LWR at tempwidth} ; %
+            height:\LWR at printlength{\LWR at tempheight}%
+        ]{boxframe}{}%
+    }%
 }
 
 \LWR at formatted{boxframe}
@@ -222,8 +227,8 @@
 \newcommand*{\LWR at xcolortempcolor}{}
 
 \def\rowc at l@rs[#1]#2#3#4%
-{
-\rownum=1%
+{%
+   \rownum=1%
    \@rowcolorstrue%
    \@ifxempty{#3}%
      {\def\@oddrowcolor{\@norowcolor}}%
@@ -264,7 +269,7 @@
    \ignorespaces%
 }
 \def\@norowcolor{%
-\renewcommand{\LWR at xcolorrowHTMLcolor}{}%
+    \renewcommand{\LWR at xcolorrowHTMLcolor}{}%
 }
 
 \def\@rowc at lors{%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp.sty	2022-02-01 22:08:25 UTC (rev 61841)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp.sty	2022-02-01 22:09:57 UTC (rev 61842)
@@ -17,7 +17,7 @@
 %% version 2005/12/01 or later.
 \NeedsTeXFormat{LaTeX2e}[1999/12/01]
 \ProvidesPackage{lwarp}
-    [2021/10/01 v0.902  Allows LaTeX to directly produce HTML5 output.]
+    [2022/02/01 v0.903  Allows LaTeX to directly produce HTML5 output.]
 
 
 
@@ -43,12 +43,13 @@
     \fi
 \fi
 \RequirePackage{etoolbox}[2011/01/03]% v2.6 for \BeforeBeginEnvironment, etc.
+\long\def\etb at carsquare#1#2#3\@nil{#1#2}
 \RequirePackage{xpatch}
 
 \RequirePackage{ifplatform}% sense op-system platform
 \RequirePackage{letltxmacro}
 \newcommand*{\LWR at loadafter}[1]{%
-\@ifpackageloaded{#1}
+\IfPackageLoadedTF{#1}
 {
     \PackageError{lwarp}
         {%
@@ -67,26 +68,26 @@
 {\relax}
 }
 
-\@ifclassloaded{memoir}
+\IfClassLoadedTF{memoir}
 {\newcommand*{\LWR at notmemoirloadafter}[1]{}}
 {\LetLtxMacro\LWR at notmemoirloadafter\LWR at loadafter}
 
 \LetLtxMacro\LWR at notltjloadafter\LWR at loadafter
 
-\@ifclassloaded{ltjarticle}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjbook}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjreport}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjsarticle}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjsbook}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjsreport}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjspf}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjskiyou}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjtarticle}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjtbook}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
-\@ifclassloaded{ltjtreport}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjarticle}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjbook}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjreport}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjsarticle}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjsbook}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjsreport}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjspf}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjskiyou}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjtarticle}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjtbook}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
+\IfClassLoadedTF{ltjtreport}{\renewcommand*{\LWR at notltjloadafter}[1]{}}{}
 
 \newcommand*{\LWR at loadbefore}[1]{%
-\@ifpackageloaded{#1}
+\IfPackageLoadedTF{#1}
 {\relax}
 {
     \PackageError{lwarp}
@@ -131,12 +132,12 @@
     }{}%
 }
 \newcommand*{\LWR at earlyloadnever}[2]{%
-    \@ifpackageloaded{#1}{%
+    \IfPackageLoadedTF{#1}{%
         \LWR at loadnever{#1}{#2}%
     }{}%
 }
 \newcommand*{\LWR at earlyclassloadnever}[2]{%
-\@ifclassloaded{#1}{%
+\IfClassLoadedTF{#1}{%
 \PackageError{lwarp}
 {%
     Class #1 is not supported\MessageBreak
@@ -177,7 +178,7 @@
 \LWR at checkloadnever{libgreek}{libertinust1math, newtx}
 \LWR at checkloadnever{newthm}{ntheorem}
 \LWR at checkloadnever{pdfcprot}{microtype}
-\LWR at checkloadnever{picins}{floatflt, wrapfig}
+\LWR at checkloadnever{picins}{floatflt, wrapfig, wrapfig2}
 \LWR at checkloadnever{rplain}{fancyhdr}
 \LWR at checkloadnever{si}{siunitx}
 \LWR at checkloadnever{sistyle}{siunitx}
@@ -193,7 +194,7 @@
 \LWR at checkloadnever{arraycols}{}
 \LWR at checkloadnever{bidi}{}
 \LWR at checkloadnever{cals}{}
-\LWR at checkloadnever{cellspace}{}
+\LWR at checkloadnever{cellspace}{tabls}
 \LWR at checkloadnever{cgloss4e}{}
 \LWR at checkloadnever{collcell}{}
 \LWR at checkloadnever{colophon}{}
@@ -264,7 +265,7 @@
 }
 \LetLtxMacro\LWR at checkloadnever\LWR at earlyloadnever
 \LWR at checkloadnevers
-\@ifpackageloaded{xeCJK}{}{
+\IfPackageLoadedTF{xeCJK}{}{
     \LWR at checkloadnever{CJK}{ctex, xeCJK}
     \LWR at checkloadnever{CJKutf8}{ctex, xeCJK}
 }
@@ -685,6 +686,7 @@
 \LWR at loadafter{shadow}
 \LWR at loadafter{shapepar}
 \LWR at notmemoirloadafter{showidx}
+\LWR at loadafter{showlabels}
 \LWR at loadafter{showkeys}
 \LWR at loadafter{showtags}
 \LWR at loadafter{shuffle}
@@ -792,6 +794,7 @@
 \LWR at loadafter{widows-and-orphans}
 \LWR at loadafter{witharrows}
 \LWR at loadafter{wrapfig}
+\LWR at loadafter{wrapfig2}
 \LWR at loadafter{xbmks}
 \LWR at loadafter{xcolor}
 \LWR at loadafter{xechangebar}
@@ -832,8 +835,8 @@
 \newcommand*{\LWR at pdfencoding}{%
     \RequirePackage[T1]{fontenc}
 
-    \@ifpackageloaded{inputenc}{}{
-        \@ifpackageloaded{inputenx}{}{
+    \IfPackageLoadedTF{inputenc}{}{
+        \IfPackageLoadedTF{inputenx}{}{
             \RequirePackage[utf8]{inputenc}
         }
     }
@@ -898,7 +901,7 @@
 \fi
 \ifxetexorluatex
     \AtBeginDocument{
-        \@ifpackageloaded{kpfonts}{
+        \IfPackageLoadedTF{kpfonts}{
             \PackageError{lwarp}
                 {%
                     When using XeLaTeX or LuaLaTeX,\MessageBreak
@@ -940,13 +943,21 @@
         }%
         {Please contact the maintainer of the Lwarp package.}%
 }
+\providecommand*{\csNewCommandCopycs}[2]{%
+    \expandafter\NewCommandCopy\csname#1\expandafter\endcsname%
+        \csname#2\endcsname%
+}
+\providecommand*{\NewEnvironmentCopy}[2]{%
+    \csNewCommandCopycs{#1}{#2}%
+    \csNewCommandCopycs{end#1}{end#2}%
+}
 \newcommand{\LWR at isolate}[1]{#1}%
 
-\@ifpackageloaded{ctexpatch}{
+\IfPackageLoadedTF{ctexpatch}{
     \renewcommand{\LWR at isolate}[1]{\null#1\null}%
 }{}
 
-\@ifpackageloaded{xeCJK}{
+\IfPackageLoadedTF{xeCJK}{
     \renewcommand{\LWR at isolate}[1]{\null#1\null}%
 }{}
 \newcommand*{\LWR at disablepinyin}{}
@@ -1353,7 +1364,7 @@
 
 \begin{warpHTML}
 \ifxetexorluatex
-\@ifpackageloaded{fontspec}{}{
+\IfPackageLoadedTF{fontspec}{}{
     \usepackage[no-math]{fontspec}
 }
 \defaultfontfeatures[\rmfamily]{Ligatures={NoCommon,TeX}}
@@ -1362,7 +1373,7 @@
 \else
 
 
-\RequirePackage {microtype}
+\RequirePackage{microtype}
 
 \microtypesetup{
     protrusion=false,
@@ -1375,7 +1386,7 @@
 \end{warpHTML}
 
 \begin{warpHTML}
-\@ifpackageloaded{geometry}
+\IfPackageLoadedTF{geometry}
 {}{
     \RequirePackage[
         reset,
@@ -1451,9 +1462,6 @@
 
 \RequirePackage{gettitlestring}
 
-\@ifundefined{bxjs at everypar}{}{\let\everypar\bxjs at everypar}
-
-\RequirePackage{everyhook}
 \end{warpHTML}
 
 \begin{warpall}
@@ -1464,7 +1472,7 @@
 
     \LetLtxMacro\LWR at orig@filec at ntents\filec at ntents
 
-    \@ifpackagelater{filecontents}{2011/10/08}
+    \IfPackageAtLeastTF{filecontents}{2011/10/08}
     {
         \renewcommand*{\filec at ntents}[1][]{\LWR at orig@filec at ntents}
     }
@@ -1672,7 +1680,7 @@
         \PassOptionsToPackage{\CurrentOption}{#1}%
     }%
     \ProcessOptions\relax%
-    \@ifpackageloaded{#1}{%
+    \IfPackageLoadedTF{#1}{%
         \edef\LWR at tempone{\csuse{opt@#1.sty}}%
         \IfValueTF{#2}%
             {%
@@ -1868,8 +1876,7 @@
 \newcommand*{\LWR at formatted}[1]{%
     \LWR at formatted@checkname{#1}%
     \ifcsundef{LWR at print@#1}{%
-        \expandafter\LetLtxMacro\csname LWR at print@#1\expandafter\endcsname%
-            \csname#1\endcsname%
+        \csNewCommandCopycs{LWR at print@#1}{#1}%
     }{}%
     \ifcsundef{#1}{%
         \expandafter\newrobustcmd\csname #1\endcsname{%
@@ -1884,8 +1891,7 @@
 \newcommand*{\LWR at expandableformatted}[1]{%
     \LWR at formatted@checkname{#1}%
     \ifcsundef{LWR at print@#1}{%
-        \expandafter\LetLtxMacro\csname LWR at print@#1\expandafter\endcsname%
-            \csname#1\endcsname%
+        \csNewCommandCopycs{LWR at print@#1}{#1}%
     }{}%
     \ifcsundef{#1}{%
         \expandafter\newcommand\csname #1\endcsname{%
@@ -1901,9 +1907,7 @@
     \LWR at formatted@checkname{#1}%
     \LWR at formatted@checkendname{#1}%
     \ifcsundef{LWR at print@#1}{%
-        \expandafter\LetLtxMacro\csname LWR at print@#1\expandafter\endcsname%
-            \csname#1\endcsname%
-        \csletcs{endLWR at print@#1}{end#1}%
+        \NewEnvironmentCopy{LWR at print@#1}{#1}%
     }{}%
     \DeclareDocumentEnvironment{#1}{}%
     {%
@@ -1917,9 +1921,7 @@
     \LWR at formatted@checkname{#1}%
     \LWR at formatted@checkendname{#1}%
     \ifcsundef{LWR at print@#1}{%
-        \expandafter\LetLtxMacro\csname LWR at print@#1\expandafter\endcsname%
-            \csname#1\endcsname%
-        \csletcs{endLWR at print@#1}{end#1}%
+        \NewEnvironmentCopy{LWR at print@#1}{#1}%
     }{}%
     \DeclareExpandableDocumentEnvironment{#1}{}%
     {%
@@ -2057,7 +2059,7 @@
 \LetLtxMacro\LWR at orig@textquotedbl\LWR at orig@@textquotedbl
 
 \AtEndPreamble{
-\@ifpackageloaded{libertinus-otf}{
+\IfPackageLoadedTF{libertinus-otf}{
     \renewcommand{\LWR at orig@textquotedbl}{\LWR at orig@@textquotedbl\kern-.15em}
     \LetLtxMacro\textquotedbl\LWR at orig@textquotedbl
 }{}
@@ -2333,12 +2335,12 @@
                     \def\LWR at tempprintlatexcmd{%
                         \LWR at compilecmd{latex}{}
                         \LWR at addcompilecmd{dvips}{}
-                        \LWR at addcompilecmd{ps2pdf}{}.ps
+                        \LWR at addcompilecmd{ps2pdf -dALLOWPSTRANSPARENCY}{}.ps
                     }
                     \def\LWR at tempHTMLlatexcmd{%
                         \LWR at compilecmd{latex}{_html}
                         \LWR at addcompilecmd{dvips}{_html}
-                        \LWR at addcompilecmd{ps2pdf}{_html}.ps
+                        \LWR at addcompilecmd{ps2pdf -dALLOWPSTRANSPARENCY}{_html}.ps
                     }
                 }
             }
@@ -2345,12 +2347,12 @@
         \fi% \ifXeTeX
     \fi% \ifpdf
 }% latexmk
-\@ifclassloaded{ujarticle}{\LWR at compileuplatex}{}
-\@ifclassloaded{ujbook}{\LWR at compileuplatex}{}
-\@ifclassloaded{ujreport}{\LWR at compileuplatex}{}
-\@ifclassloaded{utarticle}{\LWR at compileuplatex}{}
-\@ifclassloaded{utbook}{\LWR at compileuplatex}{}
-\@ifclassloaded{utreport}{\LWR at compileuplatex}{}
+\IfClassLoadedTF{ujarticle}{\LWR at compileuplatex}{}
+\IfClassLoadedTF{ujbook}{\LWR at compileuplatex}{}
+\IfClassLoadedTF{ujreport}{\LWR at compileuplatex}{}
+\IfClassLoadedTF{utarticle}{\LWR at compileuplatex}{}
+\IfClassLoadedTF{utbook}{\LWR at compileuplatex}{}
+\IfClassLoadedTF{utreport}{\LWR at compileuplatex}{}
 \ifdefempty{\LWR at PrintLatexCmd}{
     \def\LWR at PrintLatexCmd{\LWR at tempprintlatexcmd}
 }{}
@@ -2402,7 +2404,7 @@
 \begin{filecontents*}[overwrite]{lwarp.css}
 /*
   CSS stylesheet for the LaTeX Lwarp package
-  Copyright 2016-2021 Brian Dunn — BD Tech Concepts LLC
+  Copyright 2016-2022 Brian Dunn — BD Tech Concepts LLC
 */
 
 /* a fix for older browsers: */
@@ -2899,7 +2901,7 @@
 }
 
 section.textbody div.footnotes{
-    margin: 3ex 2em .5ex 2em ;
+    margin: 1ex 2em 2ex 2em ;
     border-bottom: 2px solid silver ;
 }
 
@@ -2934,6 +2936,8 @@
 
 li { margin: 0ex 0em 1ex 0em; }
 
+li.p { display: inline ; }
+
 html {
   margin: 0;
   padding: 0;
@@ -4837,9 +4841,9 @@
 \begin{filecontents*}[overwrite]{lwarpmk.lua}
 #!/usr/bin/env texlua
 
--- Copyright 2016-2021 Brian Dunn
+-- Copyright 2016-2022 Brian Dunn
 
-printversion = "v0.902"
+printversion = "v0.903"
 requiredconfversion = "2" -- also at *lwarpmk.conf
 
 function printhelp ()
@@ -5220,8 +5224,15 @@
 -- Convert to text:
 print ("lwarpmk: Converting " .. sourcename
     .."_html.pdf to " .. sourcename .. "_html.html")
-os.execute("pdftotext  -enc " .. pdftotextenc .. "  -nopgbrk  -layout "
+err = os.execute("pdftotext  -enc " .. pdftotextenc .. "  -nopgbrk  -layout "
     .. sourcename .. "_html.pdf " .. sourcename .. "_html.html")
+if ( err ~= 0 ) then
+    print ("lwarpmk: ===")
+    print ("lwarpmk: Ensure that the Poppler utilities are installed." )
+    print ("lwarpmk: See the Lwarp manual: `Installing additional utilities'." )
+    print ("lwarpmk: ===")
+    os.exit(1)
+end
 -- Split the result into individual HTML files:
 splitfile (homehtmlfilename .. ".html" , sourcename .. "_html.html")
 end
@@ -5921,14 +5932,19 @@
 \end{warpHTML}
 
 \begin{warpHTML}
+\newbool{LWR at setexparray@doingparhooks}
+
 \NewDocumentCommand{\LWR at setexparray}{m m m}{%
-    \let\LWR at temp@par\par%
+    \let\ifLWR at setexparray@doingparhooks\ifLWR at doingparhooks%
+    \setbool{LWR at doingparhooks}{false}%
+    \let\LWR at setexparray@par\par%
     \let\par\relax%
-    \edef\LWR at thisexparrayname{#1#2}%
+    \xdef\LWR at thisexparrayname{#1#2}%
     \ifstrempty{#3}%
         {\csdef{\LWR at thisexparrayname}{}}%
         {\csedef{\LWR at thisexparrayname}{#3}}%
-    \let\par\LWR at temp@par%
+    \let\ifLWR at doingparhooks\ifLWR at setexparray@doingparhooks%
+    \let\par\LWR at setexparray@par%
 }
 \newcommand*{\LWR at getexparray}[2]{%
     \@nameuse{#1#2}%
@@ -6378,60 +6394,59 @@
 }
 
 \newcommand*{\LWR at nestspanitem}{%
-    \if at newlist\else{\LWR at htmltagc{br /}}\fi%
+    \if at newlist\else{
+        \LWR at htmltagc{br /}%
+        \LWR at orignewline%
+    }\fi%
     \LWR at origitem%
 }
 
 \newenvironment*{LWR at nestspan}
 {%
-\LWR at traceinfo{LWR at nestspan starting}%
-\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
-{%
-    \LWR at traceinfo{LWR at nestspan: inside a lateximage}%
-}%
-{% not in a lateximage
-    \LWR at traceinfo{LWR at nestspan: NOT inside a lateximage}%
-    \addtocounter{LWR at spandepth}{1}%
-    \RenewDocumentEnvironment{minipage}{O{t} o O{t} m}%
-        {\LWR at spanwarnformat{minipage or \protect\parbox}}%
-        {}%
-    \RenewDocumentEnvironment{BlockClass}{o m}%
-        {\LWR at spanwarnformat{multi-paragraph object}}%
-        {}%
-    \RenewDocumentEnvironment{LWR at BlockClassWP}{m m D(){} m}%
-        {\LWR at spanwarnformat{multi-paragraph object}}%
-        {}%
-    \renewcommand{\BlockClassSingle}[2]{%
-        {\LWR at spanwarnformat{multi-paragraph object}}%
-        ##2%
+    \LWR at traceinfo{LWR at nestspan starting}%
+    \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
+    {%
+        \LWR at traceinfo{LWR at nestspan: inside a lateximage}%
     }%
-    \renewcommand{\LWR at forcenewpage}{}%
-    \renewcommand{\LWR at liststart}{%
-        \LetLtxMacro\item\LWR at nestspanitem%
-    }%
-    \renewcommand{\LWR at listend}{\LWR at htmltagc{br /}\LWR at htmltagc{br /}}%
-    \renewenvironment{quote}{\LWR at htmltagc{br /}}{\LWR at htmltagc{br /}}%
-    \renewenvironment{quotation}{\LWR at htmltagc{br /}}{\LWR at htmltagc{br /}}%
-}% not in a lateximage
-\LWR at traceinfo{LWR at nestspan starting: done}%
+    {% not in a lateximage
+        \LWR at traceinfo{LWR at nestspan: NOT inside a lateximage}%
+        \addtocounter{LWR at spandepth}{1}%
+        \RenewDocumentEnvironment{minipage}{O{t} o O{t} m}%
+            {\LWR at spanwarnformat{minipage or \protect\parbox}}%
+            {}%
+        \RenewDocumentEnvironment{BlockClass}{o m}%
+            {\LWR at spanwarnformat{multi-paragraph object}}%
+            {}%
+        \RenewDocumentEnvironment{LWR at BlockClassWP}{m m D(){} m}%
+            {\LWR at spanwarnformat{multi-paragraph object}}%
+            {}%
+        \renewcommand{\BlockClassSingle}[2]{%
+            {\LWR at spanwarnformat{multi-paragraph object}}%
+            ##2%
+        }%
+        \renewcommand{\LWR at forcenewpage}{}%
+        \renewcommand{\LWR at liststart}{\LetLtxMacro\item\LWR at nestspanitem}%
+        \renewcommand{\LWR at listend}{\leavevmode}%
+        \renewenvironment{quote}{\LWR at htmltagc{br /}}{\LWR at htmltagc{br /}}%
+        \renewenvironment{quotation}{\LWR at htmltagc{br /}}{\LWR at htmltagc{br /}}%
+    }% not in a lateximage
+    \LWR at traceinfo{LWR at nestspan starting: done}%
 }% starting env
 {% ending env
-\LWR at traceinfo{LWR at nestspan ending}%
-\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
-{}%
-{\addtocounter{LWR at spandepth}{-1}}%
-\LWR at traceinfo{LWR at nestspan ending: done}%
+    \LWR at traceinfo{LWR at nestspan ending}%
+    \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
+    {}%
+    {\addtocounter{LWR at spandepth}{-1}}%
+    \LWR at traceinfo{LWR at nestspan ending: done}%
 }
 
-\AfterEndEnvironment{LWR at nestspan}{\global\let\par\LWR at closeparagraph}
-
 \NewDocumentCommand{\LWR at htmlspan}{m +m}{%
-\LWR at ensuredoingapar%
-\LWR at htmltagc{#1}%
-\begin{LWR at nestspan}%
-#2%
-\LWR at htmltagc{/#1}%
-\end{LWR at nestspan}%
+    \LWR at ensuredoingapar%
+    \LWR at htmltagc{#1}%
+    \begin{LWR at nestspan}%
+    #2%
+    \LWR at htmltagc{/#1}%
+    \end{LWR at nestspan}%
 }
 
 \NewDocumentCommand{\LWR at htmlspanclass}{o D(){} m +m}{%
@@ -6449,71 +6464,67 @@
 
 
 \newcommand*{\LWR at htmltag}[1]{%
-\LWR at htmltagc{#1}%
+    \LWR at htmltagc{#1}%
 }
 
 
 \newcommand*{\LWR at htmlopencomment}{%
-{%
-\begingroup%
-\LWR at hook@processingtags%
-\ifmmode\else\protect\LWR at print@normalfont\protect\LWR at origttfamily\fi%
-\LWR at print@mbox{\LWR at origtextless{}!-\/-}%
-\endgroup%
-}%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \ifmmode\else\protect\LWR at print@normalfont\protect\LWR at origttfamily\fi%
+    \LWR at print@mbox{\LWR at origtextless{}!-\/-}%
+    \endgroup%
 }
 
 \newcommand*{\LWR at htmlclosecomment}{%
-{%
-\begingroup%
-\LWR at hook@processingtags%
-\ifmmode\else\protect\LWR at print@normalfont\protect\LWR at origttfamily\fi%
-\LWR at print@mbox{-\/-\LWR at origtextgreater}%
-\endgroup%
-}%
+    \begingroup%
+    \LWR at hook@processingtags%
+    \ifmmode\else\protect\LWR at print@normalfont\protect\LWR at origttfamily\fi%
+    \LWR at print@mbox{-\/-\LWR at origtextgreater}%
+    \endgroup%
 }
 
 \newcommand{\LWR at htmlcomment}[1]{%
-\ifmmode%
-\else%
-    \LWR at htmlopencomment{}%
-    {%
-        \LWR at print@normalfont%
-        \LWR at origttfamily% break ligatures
-        #1%
-    }%
-    \LWR at htmlclosecomment{}%
-\fi%
+    \ifmmode%
+    \else%
+        \LWR at htmlopencomment{}%
+        {%
+            \LWR at print@normalfont%
+            \LWR at origttfamily% break ligatures
+            #1%
+        }%
+        \LWR at htmlclosecomment{}%
+    \fi%
 }
 \newcommand{\LWR at htmlblockcomment}[1]
-{\LWR at stoppars\LWR at htmlcomment{#1}\LWR at startpars}
+    {\LWR at stoppars\LWR at htmlcomment{#1}\LWR at startpars}
 
 \newcommand*{\LWR at htmlblocktag}[1]{%
-\LWR at stoppars%
-\LWR at htmltag{#1}%
-\LWR at startpars%
+    \LWR at stoppars%
+    \LWR at htmltag{#1}%
+    \LWR at startpars%
 }
 
 
 \NewDocumentCommand{\LWR at subhtmlelementclass}{m O{} D(){} m}{%
-\LWR at traceinfo{LWR at subhtmlelementclass !#1!#2!#3!#4!}%
-\ifblank{#2}%
-{% empty style
-    \LWR at htmltag{%
-        #1%
-        \ifblank{#3}{}{ role=\textquotedbl#3\textquotedbl}% spaces
-        \ifblank{#4}{}{ class=\textquotedbl#4\textquotedbl}% spaces
+    \LWR at traceinfo{LWR at subhtmlelementclass !#1!#2!#3!#4!}%
+    \ifblank{#2}%
+    {% empty style
+        \LWR at htmltag{%
+            #1%
+            \ifblank{#3}{}{ role=\textquotedbl#3\textquotedbl}% spaces
+            \ifblank{#4}{}{ class=\textquotedbl#4\textquotedbl}% spaces
+        }%
     }%
-}%
-{% non-empty style
-    \LWR at htmltag{%
-        #1\LWR at indentHTML%
-        \ifblank{#3}{}{role=\textquotedbl#3\textquotedbl\LWR at indentHTML}%
-        \ifblank{#4}{}{class=\textquotedbl#4\textquotedbl\LWR at indentHTML}%
-        style=\textquotedbl#2\textquotedbl\LWR at orignewline%
+    {% non-empty style
+        \LWR at htmltag{%
+            #1\LWR at indentHTML%
+            \ifblank{#3}{}{role=\textquotedbl#3\textquotedbl\LWR at indentHTML}%
+            \ifblank{#4}{}{class=\textquotedbl#4\textquotedbl\LWR at indentHTML}%
+            style=\textquotedbl#2\textquotedbl\LWR at orignewline%
+        }%
     }%
-}%
-\LWR at traceinfo{LWR at subhtmlelementclass done}%
+    \LWR at traceinfo{LWR at subhtmlelementclass done}%
 }
 
 \NewDocumentCommand{\LWR at htmlelementclass}{m o D(){} m}{%
@@ -6547,35 +6558,33 @@
 
 
 \NewDocumentCommand{\LWR at htmlelementclassline}{m o m +m}{%
-\LWR at stoppars
-\LWR at forceemptyline%
-\LWR at subhtmlelementclass{#1}[#2]{#3}%
-#4%
-\LWR at htmltag{/#1}
-\LWR at startpars
+    \LWR at stoppars
+    \LWR at forceemptyline%
+    \LWR at subhtmlelementclass{#1}[#2]{#3}%
+    #4%
+    \LWR at htmltag{/#1}
+    \LWR at startpars
 }
 
 
 \newcommand*{\LWR at htmlelement}[1]{%
-\LWR at htmlblocktag{#1}
+    \LWR at htmlblocktag{#1}
 }
 
 \newcommand*{\LWR at htmlelementend}[1]{%
-\LWR at stoppars
-\LWR at htmltag{/#1}
-\LWR at startpars
+    \LWR at stoppars
+    \LWR at htmltag{/#1}
+    \LWR at startpars
 }
 
 \end{warpHTML}
 
 
-\begin{warpprint}
+\begin{warpall}
 \NewDocumentEnvironment{BlockClass}{o D(){} m}{}{}
-\end{warpprint}
+\end{warpall}
 \begin{warpHTML}
 
-\NewDocumentEnvironment{LWR at print@BlockClass}{o D(){} m}{}{}%
-
 \NewDocumentEnvironment{LWR at HTML@BlockClass}{o D(){} m}%
     {\LWR at htmldivclass[#1](#2){#3}}%
     {\LWR at htmldivclassend{#3}}
@@ -6593,58 +6602,54 @@
 \LWR at formatted{BlockClassSingle}
 \end{warpHTML}
 
-\begin{warpprint}
+\begin{warpall}
 \NewDocumentCommand{\InlineClass}{D{(}{)}{} o m +m}{#4}%
-\end{warpprint}
+\end{warpall}
 \begin{warpHTML}
-\NewDocumentCommand{\LWR at print@InlineClass}{D{(}{)}{} o m +m}{#4}%
-
 \NewDocumentCommand{\LWR at HTML@InlineClass}{D{(}{)}{} o m +m}{%
-\LWR at traceinfo{LWR at HTML@InlineClass #3}%
-\ifbool{FormatWP}{%
-    \LWR at traceinfo{LWR at HTML@InlineClass: FormatWP}%
-    \LWR at htmlspanclass[#1]{#3}{#4}%
-}{%
-    \LWR at traceinfo{LWR at HTML@InlineClass: not FormatWP}%
-    \LWR at htmlspanclass[#2]{#3}{#4}%
-}%
-\LWR at traceinfo{LWR at HTML@InlineClass: done}%
+    \LWR at traceinfo{LWR at HTML@InlineClass #3}%
+    \ifbool{FormatWP}{%
+        \LWR at traceinfo{LWR at HTML@InlineClass: FormatWP}%
+        \LWR at htmlspanclass[#1]{#3}{#4}%
+    }{%
+        \LWR at traceinfo{LWR at HTML@InlineClass: not FormatWP}%
+        \LWR at htmlspanclass[#2]{#3}{#4}%
+    }%
+    \LWR at traceinfo{LWR at HTML@InlineClass: done}%
 }
 
 \LWR at formatted{InlineClass}
 \end{warpHTML}
 
-\begin{warpprint}
+\begin{warpall}
 \NewDocumentEnvironment{LWR at BlockClassWP}{m m D(){} m}{}{}
-\end{warpprint}
+\end{warpall}
 \begin{warpHTML}
-\NewDocumentEnvironment{LWR at print@LWR at BlockClassWP}{m m D(){} m}{}{}%
-
 \NewDocumentEnvironment{LWR at HTML@LWR at BlockClassWP}{m m D(){} m}%
-{%
-\LWR at stoppars%
-\ifbool{FormatWP}%
-{%
-    \addtocounter{LWR at thisautoidWP}{1}%
-    \LWR at htmltag{%
-        div class=\textquotedbl#4\textquotedbl\ % space
-        id=\textquotedbl%
-            \LWR at print@mbox{autoidWP-\arabic{LWR at thisautoidWP}}%
-        \textquotedbl%
-        \ifblank{#3}{}{ role=\textquotedbl#3\textquotedbl}%
-        \ifblank{#1}{}{ style=\textquotedbl#1\textquotedbl}%
-    }%
-}% FormatWP
-{% not FormatWP
-    \LWR at htmltag{%
-        div class=\textquotedbl#4\textquotedbl%
-        \ifblank{#3}{}{ role=\textquotedbl#3\textquotedbl}%
-        \ifblank{#2}{}{ style=\textquotedbl#2\textquotedbl}%
-    }%
-}% not FormatWP
-\LWR at startpars%
-}
-{\LWR at htmldivclassend{#4}}
+    {%
+        \LWR at stoppars%
+        \ifbool{FormatWP}%
+        {%
+            \addtocounter{LWR at thisautoidWP}{1}%
+            \LWR at htmltag{%
+                div class=\textquotedbl#4\textquotedbl\ % space
+                id=\textquotedbl%
+                    \LWR at print@mbox{autoidWP-\arabic{LWR at thisautoidWP}}%
+                \textquotedbl%
+                \ifblank{#3}{}{ role=\textquotedbl#3\textquotedbl}%
+                \ifblank{#1}{}{ style=\textquotedbl#1\textquotedbl}%
+            }%
+        }% FormatWP
+        {% not FormatWP
+            \LWR at htmltag{%
+                div class=\textquotedbl#4\textquotedbl%
+                \ifblank{#3}{}{ role=\textquotedbl#3\textquotedbl}%
+                \ifblank{#2}{}{ style=\textquotedbl#2\textquotedbl}%
+            }%
+        }% not FormatWP
+        \LWR at startpars%
+    }
+    {\LWR at htmldivclassend{#4}}
 
 \LWR at formattedenv{LWR at BlockClassWP}
 \end{warpHTML}
@@ -6682,12 +6687,20 @@
 
 \end{warpHTML}
 
-
 \begin{warpHTML}
 
 \newcounter{LWR at spandepth}
 \setcounter{LWR at spandepth}{0}
 
+\newbool{LWR at doingparhooks}
+\boolfalse{LWR at doingparhooks}
+
+\newbool{LWR at in@multirow at par}
+\boolfalse{LWR at in@multirow at par}
+
+\newbool{LWR at starting@fancybox}
+\boolfalse{LWR at starting@fancybox}
+
 \newbool{LWR at doingstartpars}
 \boolfalse{LWR at doingstartpars}
 
@@ -6701,25 +6714,29 @@
 
 \newcommand*{\LWR at openparagraph}
 {%
-\ifbool{LWR at doingstartpars}%
-{% handling pars
     \ifboolexpr{
-        test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
-        test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}}
-    }% nested par tags?
-    {}% no nested par tags
-    {% yes nest par tags
-        \ifbool{LWR at doingapar}{}{%
-            \PN at parnotes@auto%
-            \global\booltrue{LWR at doingapar}%
-            \ifbool{LWR at algocf@dopars}{}{%
-                \LWR at htmltagc{\LWR at tagregularparagraph}\LWR at orignewline%
+        bool{LWR at doingparhooks} and
+        bool{LWR at doingstartpars}
+    }%
+    {% handling pars
+        \ifboolexpr{
+            test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
+            test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}}
+        }% nested par tags?
+        {}% no nested par tags
+        {% yes nest par tags
+            \ifbool{LWR at doingapar}{}{%
+                \PN at parnotes@auto%
+                \global\booltrue{LWR at doingapar}%
+                \ifbool{LWR at algocf@dopars}{}{%
+                    \ifbool{LWR at in@multirow at par}%
+                        {}%
+                        {\LWR at htmltagc{\LWR at tagregularparagraph}\LWR at orignewline}%
+                }%
             }%
-        }%
-        \let\par\LWR at closeparagraph%
-    }% end of yes nest par tags
-}% end of handling pars
-{}% not handling pars
+        }% end of yes nest par tags
+    }% end of handling pars
+    {}% not handling pars
 }
 
 \let\LWR at ensuredoingapar\LWR at openparagraph
@@ -6729,55 +6746,58 @@
     \ifboolexpr{
         test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}} and
         test {\ifnumcomp{\value{LWR at lateximagedepth}}{=}{0}} and
-        not bool {LWR at intabularmetadata}
+        not bool {LWR at starting@fancybox} and
+        not bool {LWR at intabularmetadata} or
+        bool {LWR at in@multirow at par}
     }%
-        {%
-            \unskip\LWR at htmltagc{br /}%
-        }%
+        {\unskip\LWR at htmltagc{br /}}%
         {}%
 }
 
 \newcommand*{\LWR at closeparagraph}
 {%
-\ifbool{LWR at doingapar}%
-{% handling pars
-    \ifboolexpr{
-        test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
-        test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}}
-    }%
-    {% no nested par tags
-        \LWR at closeparagraph@br%
-    }% no nested par tags
-    {% yes nest par tags
-        \@hspacer{\fill}% \hspace*{\fill}
-        \leavevmode\LWR at orignewline%
-        \LWR at htmltagc{/\LWR at tagregularparagraph}%
-        \global\boolfalse{LWR at doingapar}% keep
-        \global\boolfalse{LWR at minipagethispar}%
-        \PN at parnotes@auto%
-        \global\boolfalse{LWR at doingapar}%
-    }% end of yes nest par tags
-}% end of handling pars
-{% not handling pars
-    \LWR at closeparagraph@br%
-}% not handling pars
-\ifboolexpr{%
-    not bool {LWR at doingapar} and
-    test {\ifnumcomp{\value{LWR at tabulardepth}}{>}{0}} and
-    test {
-        \ifnumcomp{\value{LWR at tabulardepth}}{=}{\value{LWR at tabularpardepth}}
-    } and
-    bool {LWR at intabularmetadata} and
-    not bool {LWR at tableparcell} and
-    test {\ifnumcomp{\value{LWR at lateximagedepth}}{=}{0}}
-}%
-{%
-    \LWR at getmynexttoken%
-}{%
-    \LWR at origpar%
-}%
+    \ifbool{LWR at doingparhooks}{%
+        \ifbool{LWR at doingapar}%
+        {% handling pars
+            \ifboolexpr{
+                test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
+                test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}} or
+                bool{LWR at in@multirow at par}
+            }%
+            {% no nested par tags
+                \LWR at closeparagraph@br%
+            }% no nested par tags
+            {% yes nest par tags
+                \@hspacer{\fill}% \hspace*{\fill}
+                \leavevmode\LWR at orignewline%
+                \LWR at htmltagc{/\LWR at tagregularparagraph}%
+                \global\boolfalse{LWR at doingapar}%
+                \global\boolfalse{LWR at minipagethispar}%
+                \PN at parnotes@auto%
+            }% end of yes nest par tags
+        }% LWR at doingapar: end of handling pars
+        {% not LWR at doingapar: not handling pars
+            \LWR at closeparagraph@br%
+        }% not handling pars
+        \ifboolexpr{%
+            not bool {LWR at doingapar} and
+            test {\ifnumcomp{\value{LWR at tabulardepth}}{>}{0}} and
+            test {
+                \ifnumcomp{\value{LWR at tabulardepth}}{=}{\value{LWR at tabularpardepth}}
+            } and
+            bool {LWR at intabularmetadata} and
+            not bool {LWR at tableparcell} and
+            test {\ifnumcomp{\value{LWR at lateximagedepth}}{=}{0}}
+        }%
+            {\LWR at getmynexttoken}%
+            {}%
+    }% LWR at doingparhooks
+    {}% not LWR at doingparhooks
 }
 
+\AddToHook{para/begin}[lwarp]{\LWR at openparagraph}
+\AddToHook{para/end}[lwarp]{\LWR at closeparagraph}
+
 \end{warpHTML}
 
 
@@ -6785,48 +6805,40 @@
 
 \newcommand*{\LWR at startpars}%
 {%
-\ifboolexpr{
-    test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
-    test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}}
-}%
-{}%
-{%
-    \ifbool{LWR at doingstartpars}%
-    {}%
-    {%
-        \ClearPreHook{par}%
-        \PushPreHook{par}{\LWR at openparagraph}%
-        \let\par\LWR at closeparagraph
-
-    }% an intentionally blank line
-    \global\setbool{LWR at doingstartpars}{true}%
-    \global\boolfalse{LWR at doingapar}%
-}% nestspan
+    \ifboolexpr{
+        test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
+        test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}}
+    }%
+        {}% nesting
+        {% not nesting
+            \ifboolexpr {bool{LWR at doingparhooks} and bool{LWR at doingstartpars}}%
+                {}%
+                {\par}%
+            \global\booltrue{LWR at doingstartpars}%
+            \global\boolfalse{LWR at doingapar}%
+        }% not nesting
 }
 
 \newcommand*{\LWR at stoppars}%
 {%
-\ifboolexpr{
-    test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
-    test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}}
-}%
-{}%
-{%
-    \ifbool{LWR at doingapar}%
-    {%
-        \leavevmode\LWR at orignewline%
-        \LWR at htmltagc{/\LWR at tagregularparagraph}%
-        \LWR at orignewline%
-        \global\boolfalse{LWR at doingapar}%
-        \global\boolfalse{LWR at minipagethispar}
+    \ifboolexpr{
+        test {\ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}} or
+        test {\ifnumcomp{\value{LWR at spandepth}}{>}{0}}
     }%
-    {}%
-    \ifbool{LWR at doingstartpars}%
-        {\ClearPreHook{par}}%
-        {}%
-    \global\setbool{LWR at doingstartpars}{false}%
-    \global\boolfalse{LWR at doingapar}%
-}% nestspan
+        {}% nesting
+        {% not nesting
+            \ifboolexpr{bool{LWR at doingparhooks} and bool{LWR at doingapar}}%
+            {%
+                \leavevmode\LWR at orignewline%
+                \LWR at htmltagc{/\LWR at tagregularparagraph}%
+                \LWR at orignewline%
+                \global\boolfalse{LWR at doingapar}%
+                \global\boolfalse{LWR at minipagethispar}%
+            }%
+            {}%
+            \global\setbool{LWR at doingstartpars}{false}%
+            \global\boolfalse{LWR at doingapar}%
+        }% not nesting
 }
 
 \end{warpHTML}
@@ -6870,8 +6882,8 @@
 \newcommand*{\LWR at currentcss}{lwarp.css}
 
 \newcommand*{\CSSFilename}[1]{%
-\renewcommand*{\LWR at currentcss}{#1}%
-\@onelevel at sanitize\LWR at currentcss%
+    \renewcommand*{\LWR at currentcss}{#1}%
+    \@onelevel at sanitize\LWR at currentcss%
 }
 
 \end{warpHTML}
@@ -7044,6 +7056,11 @@
 \fi
 }
 
+\newcommand*{\LWR at nullifyfootnotes}{%
+    \renewcommand{\footnote}[2][]{}%
+    \renewcommand{\footnotemark}[1][]{}%
+}
+
 \end{warpHTML}
 
 \begin{warpHTML}
@@ -7051,9 +7068,10 @@
 \renewcommand{\marginpar}[2][]{%
 \ifbool{FormatWP}%
 {%
-\begin{LWR at BlockClassWP}{width:2in; float:right; margin:10pt}{}(note){marginblock}%
-#2
-\end{LWR at BlockClassWP}%
+    \begin{LWR at BlockClassWP}%
+        {width:2in; float:right; margin:10pt}{}(note){marginblock}%
+    #2
+    \end{LWR at BlockClassWP}%
 }%
 {%
     \LWR at htmlspanclass(note){marginpar}{#2}%
@@ -7060,18 +7078,22 @@
 }%
 }
 \newcommand{\marginparBlock}[2][]{%
-\LWR at stoppars%
-\ifbool{FormatWP}%
-{%
-    \begin{LWR at BlockClassWP}{width:2in; float:right; margin:10pt}{}(note){marginblock}%
-    #2
-    \end{LWR at BlockClassWP}
-}{%
-    \begin{BlockClass}[width:2in; float:right; margin:10pt](note){marginparblock}%
-    #2
-    \end{BlockClass}
-}%
-\LWR at startpars%
+    \LWR at stoppars%
+    \ifbool{FormatWP}%
+    {%
+        \begin{LWR at BlockClassWP}%
+            {width:2in; float:right; margin:10pt}{}%
+            (note){marginblock}%
+        #2
+        \end{LWR at BlockClassWP}
+    }%
+    {%
+        \begin{BlockClass}[width:2in; float:right; margin:10pt]%
+            (note){marginparblock}%
+        #2
+        \end{BlockClass}
+    }%
+    \LWR at startpars%
 }
 \renewcommand*{\reversemarginpar}{}
 \renewcommand*{\normalmarginpar}{}
@@ -7323,13 +7345,15 @@
 \catcode`\#=6
 \catcode`\&=4
 
-\newrobustcmd{\LWR at HTMLsanitize}[1]{%
+\newrobustcmd{\LWR at HTMLsanitizedetokenized}[1]{%
+    \LWR at traceinfo{LWR at HTMLsanitizedetokenized !#1!}%
     \begingroup%
     \LWR at hook@processingtags%
-    \edef\LWR at strresult{\detokenize{#1}}%
+    \edef\LWR at strresult{#1}%
     \LWR at subHTMLsanitize%
     \LWR at strresult%
     \endgroup%
+    \LWR at traceinfo{LWR at HTMLsanitize done}%
 }
 
 \edef\LWR at beginspaceleftbrace{begin \LWRleftbrace}
@@ -7342,10 +7366,10 @@
 \edef\LWR at endrightbrace{end\LWRrightbrace}
 \edef\LWR at endrightbrace{\detokenize\expandafter{\LWR at endrightbrace}}
 
-\newrobustcmd{\LWR at HTMLsanitizeexpand}[1]{%
+\newrobustcmd{\LWR at HTMLsanitizeexpanded}[1]{%
     \begingroup%
     \LWR at hook@processingtags%
-    \edef\LWR at strresult{\detokenize\expandafter{#1}}%
+    \edef\LWR at strresult{#1}%
     \protect\StrSubstitute{\LWR at strresult}%
         {\LWR at beginspaceleftbrace}{\LWR at beginleftbrace}[\LWR at strresult]%
     \protect\StrSubstitute{\LWR at strresult}%
@@ -7379,7 +7403,7 @@
         \StrLen{\detokenize{#1}}[\LWR at tempone]%
         \ifnumgreater{\LWR at tempone}{350}{%
             \AtEndDocument{%
-                \PackageWarningNoLine{lwarp}{%
+                \PackageNoteNoLine{lwarp}{%
                     To ensure faster MathJax compilation, place each\MessageBreak
                     custom macro in its own \protect\CustomizeMathJax.\MessageBreak
                     See the Lwarp documentation regarding customizing\MessageBreak
@@ -7732,18 +7756,28 @@
     \LWR at traceinfo{LWR at section: about to LWR at setlatestname}%
     \IfValueTF{#2}{\LWR at setlatestname{#2}}{\LWR at setlatestname{#3}}%
 }%
-\ifbool{HTMLDebugComments}{%
-    \begingroup%
-    \LWR at nullfonts%
-    \IfBooleanTF{#1}% starred
-    {\LWR at htmlcomment{Opening #4*}}%
+\begingroup%
+\LWR at nullfonts%
+\LWR at nullifyfootnotes%
+\LWR at htmlcomment{................................}%
+\LWR at orignewline%
+\ifbool{HTMLDebugComments}%
     {%
-        \IfNoValueTF{#2}% short TOC
-            {\LWR at htmlcomment{Opening #4 ``#3''}}%
-            {\LWR at htmlcomment{Opening #4 ``#2''}}%
-    }\LWR at orignewline%
-    \endgroup%
-}{}
+        \IfBooleanTF{#1}% starred
+            {%
+                \IfNoValueTF{#2}% short TOC
+                    {\LWR at htmlcomment{Opening #4* ``#3''}}%
+                    {\LWR at htmlcomment{Opening #4* ``#2''}}%
+            }%
+            {%
+                \IfNoValueTF{#2}% short TOC
+                    {\LWR at htmlcomment{Opening #4 ``#3''}}%
+                    {\LWR at htmlcomment{Opening #4 ``#2''}}%
+            }%
+        \LWR at orignewline%
+    }%
+    {}%
+\endgroup%
 \ifthenelse{%
     \cnttest{\@nameuse{LWR at depth#4}}{>=}{\LWR at depthparagraph}%
 }%
@@ -7986,10 +8020,14 @@
 \LWR at nullfonts%
 \edef\theHTMLSection{#1}%
 \StrSubstitute{\theHTMLSection}{\protect}{\detokenize{-}}[\theHTMLSection]%
-\StrSubstitute{\theHTMLSection}{\detokenize{-----}}{\detokenize{-}}[\theHTMLSection]%
-\StrSubstitute{\theHTMLSection}{\detokenize{----}}{\detokenize{-}}[\theHTMLSection]%
-\StrSubstitute{\theHTMLSection}{\detokenize{---}}{\detokenize{-}}[\theHTMLSection]%
-\StrSubstitute{\theHTMLSection}{\detokenize{--}}{\detokenize{-}}[\theHTMLSection]%
+\StrSubstitute{\theHTMLSection}%
+    {\detokenize{-----}}{\detokenize{-}}[\theHTMLSection]%
+\StrSubstitute{\theHTMLSection}%
+    {\detokenize{----}}{\detokenize{-}}[\theHTMLSection]%
+\StrSubstitute{\theHTMLSection}%
+    {\detokenize{---}}{\detokenize{-}}[\theHTMLSection]%
+\StrSubstitute{\theHTMLSection}%
+    {\detokenize{--}}{\detokenize{-}}[\theHTMLSection]%
 \IfBeginWith{\theHTMLSection}{\detokenize{-}}{%
     \StrGobbleLeft{\theHTMLSection}{1}[\theHTMLSection]%
 }{}%
@@ -8108,8 +8146,10 @@
 \setlength{\abovecaptionskip}{0ex}
 \renewcommand{\ps at plain}{}
 \let\LWR at origcaption\caption
+\global\booltrue{LWR at doingparhooks}
 \global\boolfalse{LWR at doingapar}
 \global\boolfalse{LWR at doingstartpars}
+\let\color at endgroup\endgroup
 \mainmatter
 \LWR at origpagenumbering{arabic}
 \LWR at traceinfo{LWR at lwarpStart: Starting new file.}
@@ -8196,6 +8236,7 @@
 \LWR at maybe@orignewpage
 }
 
+
 \ifdef{\AddToHook}{% newer kernel
     \AddToHook{enddocument/info}{%
        \if at filesw
@@ -8272,7 +8313,7 @@
 }
 
 \AtBeginDocument{
-\@ifpackageloaded{titling}{
+\IfPackageLoadedTF{titling}{
 \AtBeginEnvironment{titlingpage}{
 \renewrobustcmd{\affiliation}[1]{\\ \textsc{\small#1}}
 }
@@ -8349,7 +8390,7 @@
 \newcommand*{\printdate}{{\small\textit{\@date}}}
 \end{warpprint}
 \begin{warpHTML}
-\@ifclassloaded{memoir}
+\IfClassLoadedTF{memoir}
 {
 \newcommand{\LWR at setfootnoteseries}{%
     \renewcommand\thefootnote{\@arabic\c at footnote}%
@@ -8444,7 +8485,7 @@
 \begin{warpall}
 
 \newcommand*{\AddSubtitlePublished}{%
-\@ifpackageloaded{titling}{% yes titling package
+\IfPackageLoadedTF{titling}{% yes titling package
     \newcommand{\@published}{}%
     \newcommand{\published}[1]{\gdef\@published{##1}}%
     \renewcommand*{\maketitlehooka}{\printpublished}%
@@ -8645,9 +8686,25 @@
             \LWR at afterendverbatim%
         }%
 }
+\AtBeginEnvironment{verbatim*}{%
+    \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
+        {}%
+        {%
+            \LWR at forcenewpage%
+            \LWR at atbeginverbatim{verbatim}%
+        }%
 }
+\AfterEndEnvironment{verbatim*}{%
+    \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
+        {}%
+        {%
+            \LWR at afterendverbatim%
+        }%
+}
+}
 
-\newcommand*{\LWR at HTML@tabbing}{%
+\newenvironment*{LWR at HTML@tabbing}
+{%
     \LWR at forcenewpage%
     \LWR at atbeginverbatim{tabbing}%
     \let\enskip\LWR at origenskip%
@@ -8659,14 +8716,12 @@
     \let\negthinspace\LWR at orignegthinspace%
     \LWR at print@tabbing%
 }
-
-\newcommand*{\LWR at HTML@endtabbing}{%
-    \LWR at print@endtabbing%
+{%
+    \endLWR at print@tabbing%
     \LWR at afterendverbatim%
 }
 
-\LWR at formatted{tabbing}
-\LWR at formatted{endtabbing}
+\LWR at formattedenv{tabbing}
 
 \end{warpHTML}
 
@@ -8717,9 +8772,7 @@
   \if at noparitem
     \@donoparitem
   \else
-        \par
     \ifhmode
-        \par
     \fi
     \if at newlist
       \if at nobreak
@@ -8749,7 +8802,9 @@
     \LWR at stoppars%
     \LWR at startnewdepth{listitem}%
     \LWR at htmltag{li}%
+    \LWR at orignewline%
     \LWR at startpars%
+    \LWR at ensuredoingapar%
     \LWR at origitem%
 }
 
@@ -8791,7 +8846,9 @@
     \LWR at stoppars%
     \LWR at startnewdepth{listitem}%
     \LWR at htmltag{li}%
+    \LWR at orignewline%
     \LWR at startpars%
+    \LWR at ensuredoingapar%
     \LWR at origitem%
 }
 
@@ -8902,9 +8959,6 @@
 
 \newcommand\LWR at mynexttoken\relax
 
-
-
-
 \def\LWR at futurenonspacelet#1{\def\LWR at cs{#1}%
 \afterassignment\LWR at fnslone\let\nexttoken= }
 
@@ -8911,8 +8965,15 @@
 \def\LWR at fnslone{\expandafter\futurelet\LWR at cs\LWR at fnsltwo}
 
 \def\LWR at fnsltwo{%
-\expandafter\ifx\LWR at cs\@sptoken\let\next=\LWR at fnslthree%
-\else\let\next=\nexttoken\fi\next}
+    \expandafter\ifx\LWR at cs\@sptoken%
+        \let\next=\LWR at fnslthree%
+    \else%
+        \expandafter\ifx\LWR at cs\par%
+            \let\next=\LWR at fnslthree%
+        \else%
+            \let\next=\nexttoken%
+        \fi%
+    \fi\next}
 
 \def\LWR at fnslthree{\afterassignment\LWR at fnslone\let\next= }
 
@@ -9735,11 +9796,10 @@
     \booltrue{LWR at doingcmidrule}%
 }
 
-\NewDocumentCommand{\LWR at docdashline}
-    {>{\SplitArgument{1}{-}}m}%
-    {%
-        \LWR at subcdashline#1%
-    }
+\NewDocumentCommand{\LWR at docdashline}{>{\SplitArgument{1}{-}}m}%
+{%
+    \LWR at subcdashline#1%
+}
 
 \newcommand*{\LWR at tdstartstyles}{\boolfalse{LWR at tdhavecellstyle}}
 
@@ -9760,7 +9820,7 @@
 
 \newcommand*{\LWR at subaddcmidruletrim}[2]{%
     \setlength{\LWR at templengthone}{%
-            \LWR at getexparray{LWR at midrules}{\arabic{LWR at tableLaTeXcolindex}}%
+        \LWR at getexparray{LWR at midrules}{\arabic{LWR at tableLaTeXcolindex}}%
     }%
     \ifdimcomp{\LWR at templengthone}{>}{0pt}%
         {%
@@ -10302,8 +10362,8 @@
     {}%
 }% no version of multirow was loaded
 {% \@xmultirow defined, so some version of multirow was loaded
-\@ifpackageloaded{multirow}{% v2.0 or newer
-\@ifpackagelater{multirow}{2016/09/01}% 2016/09/27 for v2.0
+\IfPackageLoadedTF{multirow}{% v2.0 or newer
+\IfPackageAtLeastTF{multirow}{2016/09/01}% 2016/09/27 for v2.0
 {% v2.0+:
 \DeclareExpandableDocumentCommand{\LWR at print@multicolumnrow}%
     {+m +m +O{c} +m +O{0} +m +O{0pt} +m}%
@@ -10430,10 +10490,11 @@
     \ifdefequal{\LWR at mynexttoken}{\lasthdashline}%
         {\global\let\LWR at mynextaction\LWR at donothing}{}%
     \ifdefequal{\LWR at mynexttoken}{\par}%
-        {\global\let\LWR at mynextaction\LWR at donothing}{}%
-    \LWR at traceinfo{LWR at tabledatacolumntag: about to do mynext}%
+        {%
+            \global\let\LWR at mynextaction\LWR at donothing%
+        }{}%
+    \LWR at traceinfo{LWR at tabledatacolumntag: done, about to do LWR at mynextaction}%
     \LWR at mynextaction%
-    \LWR at traceinfo{LWR at tabledatacolumntag: done}%
 }
 
 \end{warpHTML}
@@ -10474,7 +10535,7 @@
 }
 \AtBeginDocument{
 
-\@ifpackageloaded{lwarp-tabls}
+\IfPackageLoadedTF{lwarp-tabls}
 {
     \newcommand*{\LWR at HTMLhline}[1][]{%
         \ifbool{FormatWP}%
@@ -10533,8 +10594,10 @@
     \boolfalse{LWR at foundmrowcell}%
     \renewcommand*{\LWR at multicoltext}{}%
     \booltrue{LWR at intabularmetadata}%
-    \LWR at traceinfo{LWR@@tabular: About to LWR at forecenewpage.}%
-    \LWR at forcenewpage
+    \ifbool{LWR at in@multirow at par}%
+        {\leavevmode\LWR at orignewline}%
+        {\LWR at forcenewpage}%
+    \boolfalse{LWR at in@multirow at par}%
     \LWR at htmlblocktag{table}%
     \LWR at parsetablecols{#3}%
     \LWR at stoppars%
@@ -10694,8 +10757,7 @@
   \fi}
 \newcommand*{\LWR at nameref}[1]{%
     \begingroup%
-    \renewcommand{\footnote}[2][]{}%
-    \renewcommand{\footnotemark}[1][]{}%
+    \LWR at nullifyfootnotes%
     \expandafter\LWR at setref\csname r@#1 at lwarp\endcsname\LWR at firstoffive{#1}%
     \endgroup%
 }
@@ -10864,7 +10926,24 @@
         {\LWR at print@ref{\BaseJobname-autopage-\LWR at currentautosecpageref{#2}}}%
         {%
             \LWR at startref{#2}%
-            \LWR at print@ref{\BaseJobname-autopage-\LWR at currentautosecpageref{#2}}%
+            \edef\@tempa{\LWR at currentautosecpageref{#2}}%
+            \ifdefstring{\@tempa}{??}%
+                {??}%
+                {%
+                    \edef\@tempa{%
+                        \csname
+                            r@\BaseJobname-autopage-\LWR at currentautosecpageref{#2}%
+                        \endcsname%
+                    }%
+                    \edef\@tempa{\expandafter\@firstoftwo\@tempa}%
+                    \expandafter\ifblank\expandafter{\@tempa}%
+                        {*}
+                        {%
+                            \LWR at print@ref{%
+                                \BaseJobname-autopage-\LWR at currentautosecpageref{#2}%
+                            }%
+                        }%
+                }%
             \LWR at htmltag{/a}%
         }%
 }
@@ -10984,8 +11063,8 @@
 
 \newcommand*{\LWR at subinlineimage}[6]{%
     \ifblank{#6}%
-        {\renewcommand*{\LWR at tempone}{}}
-        {\renewcommand*{\LWR at tempone}{role="#6"\LWR at indentHTML}}
+        {\renewcommand*{\LWR at tempone}{}}%
+        {\renewcommand*{\LWR at tempone}{role="#6"\LWR at indentHTML}}%
     \ifblank{#1}%
     {%
         \LWR at htmltag{img \LWR at indentHTML
@@ -11044,7 +11123,7 @@
 }
 \AtBeginDocument{
 
-\@ifpackageloaded{tocbasic}{
+\IfPackageLoadedTF{tocbasic}{
 
 \appto\figure at atbegin{%
     \LWR at futurenonspacelet\LWR at mynexttoken\LWR at floatalignment%
@@ -11145,7 +11224,7 @@
 \AtBeginDocument{\providecommand*{\CaptionSeparator}{:~}}
 
 \AtBeginDocument{
-    \@ifpackageloaded{caption}{}{
+    \IfPackageLoadedTF{caption}{}{
         \let\LWR at orig@caption\@caption%
         \long\def\@caption#1[#2]{%
             \LWR at spanwarnformat{caption}%
@@ -11215,7 +11294,7 @@
 }
 
 \AtBeginDocument{%
-\@ifpackageloaded{caption}{
+\IfPackageLoadedTF{caption}{
     \let\LWR at origcaptionlistentry\captionlistentry
 
     \renewcommand*{\captionlistentry}{%
@@ -11440,12 +11519,12 @@
     \LWR at traceinfo{hypertoc done}%
 }
 
-\@ifclassloaded{memoir}{}{
+\IfClassLoadedTF{memoir}{}{
     \newcounter{lofdepth}
     \setcounter{lofdepth}{1}
 }
 
-\@ifclassloaded{memoir}{}{
+\IfClassLoadedTF{memoir}{}{
     \newcounter{lotdepth}
     \setcounter{lotdepth}{1}
 }
@@ -11826,8 +11905,9 @@
     \LWR at traceinfo{LWR at restoreorigformatting}%
     \renewcommand*{\LWR at formatting}{print}%
     \linespread{1}%
-    \let\par\LWR at origpar%
+    \setbool{LWR at doingparhooks}{false}%
     \LWR at select@print at hspace%
+    \def\color at endgroup{\endgraf\endgroup}%
     \LetLtxMacro\hfil\LWR at orighfil%
     \let\hss\LWR at orighss%
     \let\llap\LWR at origllap%
@@ -12074,12 +12154,12 @@
 
 \IfFileExists{\LWR at baselinename}%
 {
-    \@ifpackageloaded{graphicx}{
+    \IfPackageLoadedTF{graphicx}{
         \newcommand*{\LWR at addbaselinemarker}{%
             \LWR at origincludegraphics{\LWR at baselinename}%
         }
     }{
-        \@ifpackageloaded{graphics}{
+        \IfPackageLoadedTF{graphics}{
             \newcommand*{\LWR at addbaselinemarker}{%
                 \LWR at origincludegraphics{\LWR at baselinename}%
             }
@@ -12089,7 +12169,7 @@
             }
             \AtEndDocument{
                 \ifbool{LWR at warnbaselinemarker}{
-                    \PackageWarningNoLine{lwarp}{%
+                    \PackageNoteNoLine{lwarp}{%
                         Load graphicx or graphics for improved\MessageBreak
                         SVG math sizing and baselines%
                     }
@@ -12166,6 +12246,7 @@
 }
 
 \newcommand*{\LWR at subsingledollarsvg}[4]{%
+    \LWR at traceinfo{LWR at subsingledollartsvg}%
     \LWR at singledollarmeasure{#4}%
     \ifdimgreater{\LWR at singledollarwidth}{.7\LWR at singledollarheight}{%
         \def\LWR at singledollarstyle{%
@@ -12205,7 +12286,7 @@
         \def\LWR at singledollardepthstyle{}%
     }{}%
     \ifbool{LWR at dynamicmath}{%
-        \LWR at traceinfo{subsingledollar: dynamic}%
+        \LWR at traceinfo{subsingledollarsvg: dynamic}%
         \begin{lateximage}% no hashing
             [\MathImageAltText]% alt tag
             []% no add'l hashing
@@ -12212,12 +12293,13 @@
             [\LWR at singledollarstyle \LWR at singledollardepthstyle]% CSS
             (math)% ARIA
     }{% not dynamic math
-        \LWR at traceinfo{subsingledollar: static}%
+        \LWR at traceinfo{subsingledollarsvg: static}%
         \IfValueTF{#1}{% #1 True
             \LWR at findcurrenttextcolor% sets \LWR at tempcolor
             \ifbool{LWR at xfakebold}%
                 {\def\LWR at tempone{Y}}%
                 {\def\LWR at tempone{N}}%
+            \LWR at traceinfo{subsingledollarsvg about to lateximage}%
             \begin{lateximage}*% use hashing
                 [#2]% alt
                 *% do not add open/closing braces
@@ -12232,6 +12314,7 @@
                 ]%
                 [\LWR at singledollarstyle \LWR at singledollardepthstyle]% CSS
                 (math)% ARIA
+                \LWR at traceinfo{subsingledollar did lateximage}%
         }{% #1 False
             \begin{lateximage}% no hashing
                 [#2]% alt
@@ -12254,7 +12337,7 @@
 \newsavebox{\LWR at singledollarbox}
 
 \NewDocumentCommand{\LWR at subsingledollar}{s m m m}{%
-    \LWR at traceinfo{LWR at subsingledollar}%
+    \LWR at traceinfo{LWR at subsingledollar !#2!}%
     \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
     {%
         \LWR at traceinfo{LWR at subsingledollar: already in a lateximage}%
@@ -12281,7 +12364,7 @@
                 \textbackslash(%
                 {%
                     \ifmmode\else\LWR at print@ttfamily\fi%
-                    \LWR at HTMLsanitize{#4}%
+                    \LWR at HTMLsanitizedetokenized{\detokenize{#4}}%
                 }%
                 \textbackslash)%
             }%
@@ -12312,63 +12395,70 @@
 \protected\gdef\LWR at newsingledollar{\@ifnextchar$\LWR at doubledollar\LWR at singledollar}%
 
 \protected\gdef\LWR at doubledollar$#1$${%
-\ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
-{
+    \ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
+    {% intentional blank line:
 
-    \IfSubStr{\detokenize\expandafter{#1}}{\detokenize{note}}{%
-        \LWR at hidelatexequation{math}{#1}%
-        \InlineClass{hidden}{\LWR at syncnotenumbers}%
-        \textbackslash[%
-        {\LWR at print@ttfamily\LWR at HTMLsanitize{#1}}%
-        \textbackslash]
-        \InlineClass{hidden}{\LWR at syncnotenames}%
-    }{%
-        \textbackslash[%
-        {\LWR at print@ttfamily\LWR at HTMLsanitize{#1}}%
-        \textbackslash]
-    }%
+        \IfSubStr{\detokenize\expandafter{#1}}{\detokenize{note}}{%
+            \LWR at hidelatexequation{math}{#1}%
+            \InlineClass{hidden}{\LWR at syncnotenumbers}%
+            \textbackslash[%
+            {%
+                \LWR at print@ttfamily%
+                \LWR at HTMLsanitizedetokenized{\detokenize{#1}}%
+            }%
+            \textbackslash]
+            \InlineClass{hidden}{\LWR at syncnotenames}%
+        }{%
+            \textbackslash[%
+            {%
+                \LWR at print@ttfamily%
+                \LWR at HTMLsanitizedetokenized{\detokenize{#1}}%
+            }%
+            \textbackslash]
+        }%
 
-}% mathjax
-{% not mathjax
-    \begin{BlockClass}{displaymath}%
-    \LWR at newautoidanchor%
-    \booltrue{LWR at indisplaymathimage}%
-    \begin{lateximage}%
-    [%
-        \textbackslash{[} % extra space
-        \LWR at HTMLsanitize{#1} % extra space
-        \textbackslash{]}%
-    ]%
-    *% do not add open/closing braces
-    (math)% ARIA
-    \LWR at applyxfakebold%
-    \LWR at origdollar\LWR at origdollar#1\LWR at origdollar\LWR at origdollar%
-    \end{lateximage}%
-    \end{BlockClass}%
-}% not mathjax
-\gdef\LWR at ThisAltText{}%
+    }% mathjax
+    {% not mathjax
+        \begin{BlockClass}{displaymath}%
+        \LWR at newautoidanchor%
+        \booltrue{LWR at indisplaymathimage}%
+        \begin{lateximage}%
+        [%
+            \textbackslash{[} % extra space
+            \LWR at HTMLsanitizedetokenized{\detokenize{#1}} % extra space
+            \textbackslash{]}%
+        ]%
+        *% do not add open/closing braces
+        (math)% ARIA
+        \LWR at applyxfakebold%
+        \LWR at origdollar\LWR at origdollar#1\LWR at origdollar\LWR at origdollar%
+        \end{lateximage}%
+        \end{BlockClass}%
+    }% not mathjax
+    \gdef\LWR at ThisAltText{}%
 }%
 \protected\gdef\LWR at singledollar#1${%
-\ifbool{mathjax}{%
-    \LWR at subsingledollar*%
-    {% alt tag
-        \textbackslash( %
-        \LWR at HTMLsanitize{#1} % extra space
-        \textbackslash)%
-    }%
-    {singledollar}% add'l hashing
-    {#1}% contents
-}{% not mathjax
-    \LWR at subsingledollar*%
-    {% alt tag
-        \textbackslash( %
-        \LWR at HTMLsanitize{#1} % extra space
-        \textbackslash)%
-    }%
-    {singledollar}% add'l hashing
-    {\LWR at origensuredmath{#1}}% contents
-}% not mathjax
-\gdef\LWR at ThisAltText{}%
+    \LWR at traceinfo{LWR at singledollar}%
+    \ifbool{mathjax}{%
+        \LWR at subsingledollar*%
+        {% alt tag
+            \textbackslash( %
+            \LWR at HTMLsanitizedetokenized{\detokenize{#1}} % extra space
+            \textbackslash)%
+        }%
+        {singledollar}% add'l hashing
+        {#1}% contents
+    }{% not mathjax
+        \LWR at subsingledollar*%
+        {% alt tag
+            \textbackslash( %
+            \LWR at HTMLsanitizedetokenized{\detokenize{#1}} % extra space
+            \textbackslash)%
+        }%
+        {singledollar}% add'l hashing
+        {\LWR at origensuredmath{#1}}% contents
+    }% not mathjax
+    \gdef\LWR at ThisAltText{}%
 }
 
 \AtBeginDocument{
@@ -12388,7 +12478,7 @@
     \ifbool{mathjax}{%
         \LWR at subsingledollar*{\AltTextOpen\MathImageAltText\AltTextClose}%
         {%
-            \protect\LWR at HTMLsanitize{\detokenize\expandafter{#1}}%
+            \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#1}}%
         }%
         {%
             \relax%
@@ -12403,7 +12493,11 @@
                 {%
                     \LWR at subsingledollar*%
                         {\AltTextOpen\MathImageAltText\AltTextClose}%
-                        {\protect\LWR at HTMLsanitize{\detokenize\expandafter{#1}}}%
+                        {%
+                            \protect\LWR at HTMLsanitizedetokenized{%
+                                \detokenize\expandafter{#1}%
+                            }%
+                        }%
                         {\LWR at origensuredmath{#1}}%
                 }%
         \fi%
@@ -12535,7 +12629,7 @@
             {\{\arabic{LWR at maxfields@}\}}%
             {}%
         \LWR at orignewline%
-        \LWR at HTMLsanitizeexpand{\detokenize\expandafter{#2}}%
+        \LWR at HTMLsanitizeexpanded{\detokenize\expandafter{#2}}%
         \LWR at orignewline%
         \textbackslash{}end\{#1\}
     }%
@@ -12574,7 +12668,7 @@
                 (\LWR at equationtag) % automatic numbering
             }%
             \textbackslash{begin\{#2\}} % extra space
-            \LWR at HTMLsanitizeexpand{\detokenize\expandafter{#1}} % extra space
+            \LWR at HTMLsanitizeexpanded{\detokenize\expandafter{#1}} % extra space
             \textbackslash{end\{#2\}}%
         ]*(math)% alt tag, ARIA
         \LWR at applyxfakebold%
@@ -12834,7 +12928,7 @@
 \newcommand*{\LWR at amsmathbody}[1]
 {%
     \textbackslash\{begin\}\{#1\} % extra space
-    \LWR at HTMLsanitizeexpand{\detokenize\expandafter{\the\@envbody}}%
+    \LWR at HTMLsanitizeexpanded{\detokenize\expandafter{\the\@envbody}}%
     \textbackslash\{end\}\{#1\}%
 }
 
@@ -12858,6 +12952,7 @@
 }
 
 \newcommand{\LWR at lateximage@oneimage}[5]{%
+    \LWR at traceinfo{LWR at lateximage@oneimage !#1!#2!#3!#4!#5!}%
     \ifdefvoid{\LWR at ThisAltText}{%
         \IfBooleanTF{#4}{%
             \LWR at lateximage@oneimageb{#1}{#2}{#3}{#5}%
@@ -12877,6 +12972,7 @@
 
 \NewDocumentEnvironment{lateximage}{s O{\ImageAltText} s O{} O{} D(){}}%
 {%
+\LWR at traceinfo{lateximage !#1!#2!#3!#4!#5!#6!}%
 \LWR at traceinfo{lateximage: starting on \jobname.pdf page \arabic{page}}%
 \LWR at traceinfo{lateximage: entering depth is \arabic{LWR at lateximagedepth}}%
 \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%
@@ -12999,6 +13095,7 @@
     \LWR at print@vspace*{.5\baselineskip}%
     \LWR at htmlclosecomment%
     \LWR at traceinfo{lateximage: The page after the image is \arabic{page}}%
+    \LWR at traceinfo{about to LWR at lateximage@oneimage !#2!}%
     \IfBooleanTF{#1}% starred
     {% hash
         \LWR at lateximage@oneimage{#2}{\LWR at hashedname}{#5}{#3}{#6}%
@@ -13095,7 +13192,7 @@
 
 \begin{warpHTML}
 \newcommand*{\LWR at PreloadedPackage}[1]{%
-    \@ifpackageloaded{#1}%
+    \IfPackageLoadedTF{#1}%
         {%
             \AtBeginDocument{
                 \LWR at origRequirePackage{lwarp-#1}%
@@ -13181,9 +13278,8 @@
 
 \begin{warpprint}
 \define at key{Gin}{class}{}
-\define at key{Gin}{alt}{}
 \AtBeginDocument{
-\@ifpackageloaded{overpic}{
+\IfPackageLoadedTF{overpic}{
 \newcommand*{\overpicfontsize}{12}
 \newcommand*{\overpicfontskip}{14}
 }{}
@@ -13192,7 +13288,7 @@
 
 \begin{warpall}
 \AtBeginDocument{
-\@ifpackageloaded{xcolor}{
+\IfPackageLoadedTF{xcolor}{
 \LWR at traceinfo{patching xcolor}
 \LetLtxMacro\colorboxBlock\colorbox
 \LetLtxMacro\LWR at orig@print at fcolorbox\fcolorbox
@@ -13200,37 +13296,37 @@
 \newsavebox{\LWR at colorminipagebox}
 
 \NewDocumentCommand{\LWR at print@fcolorbox}{o m o m +m}{%
-\LWR at traceinfo{LWR at print@fcolorbox #2 #4}%
-\begin{lrbox}{\LWR at colorminipagebox}%
-#5%
-\end{lrbox}%
-\ifstrequal{#4}{none}%
-{% #4 none
-    \LWR at traceinfo{background is none}%
-    {% scope the \colorlet
-        \colorlet{LWR at currentcolor}{.}%
-        \color{#2}%
-        \fbox{%
-            \color{LWR at currentcolor}%
-            \usebox{\LWR at colorminipagebox}%
-        }% fbox
-    }% colorlet
-}% #4 none
-{% #4 not none
-\LWR at traceinfo{background not none}%
-\IfValueTF{#1}%
-{%
-    \IfValueTF{#3}%
-    {\LWR at orig@print at fcolorbox[#1]{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
-    {\LWR at orig@print at fcolorbox[#1]{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
-}%
-{% no value #1
-    \IfValueTF{#3}%
-    {\LWR at orig@print at fcolorbox{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
-    {\LWR at orig@print at fcolorbox{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
-}% no value #1
-}% #4 not none
-\LWR at traceinfo{LWR at print@fcolorbox done}%
+    \LWR at traceinfo{LWR at print@fcolorbox #2 #4}%
+    \begin{lrbox}{\LWR at colorminipagebox}%
+    #5%
+    \end{lrbox}%
+    \ifstrequal{#4}{none}%
+    {% #4 none
+        \LWR at traceinfo{background is none}%
+        {% scope the \colorlet
+            \colorlet{LWR at currentcolor}{.}%
+            \color{#2}%
+            \fbox{%
+                \color{LWR at currentcolor}%
+                \usebox{\LWR at colorminipagebox}%
+            }% fbox
+        }% colorlet
+    }% #4 none
+    {% #4 not none
+    \LWR at traceinfo{background not none}%
+    \IfValueTF{#1}%
+    {%
+        \IfValueTF{#3}%
+        {\LWR at orig@print at fcolorbox[#1]{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
+        {\LWR at orig@print at fcolorbox[#1]{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
+    }%
+    {% no value #1
+        \IfValueTF{#3}%
+        {\LWR at orig@print at fcolorbox{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
+        {\LWR at orig@print at fcolorbox{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
+    }% no value #1
+    }% #4 not none
+    \LWR at traceinfo{LWR at print@fcolorbox done}%
 }
 \renewrobustcmd*{\fcolorbox}{\LWR at print@fcolorbox}%
 \newcommand*{\LWR at print@fcolorboxBlock}{\LWR at print@fcolorbox}
@@ -13237,49 +13333,45 @@
 
 \newrobustcmd*{\fcolorboxBlock}{\LWR at print@fcolorboxBlock}
 
-\NewDocumentEnvironment{LWR at print@fcolorminipage}{o m o m O{c} O{} o m}
+\NewDocumentEnvironment{fcolorminipage}{o m o m O{c} O{} o m}
 {%
-\LWR at traceinfo{*** fcolorminipage: #2 #4 #8}%
-\begin{lrbox}{\LWR at colorminipagebox}%
-\IfValueTF{#7}%
-{\begin{minipage}[#5][#6][#7]{#8}}%
-{\begin{minipage}[#5][#6][#5]{#8}}%
+    \LWR at traceinfo{*** fcolorminipage: #2 #4 #8}%
+    \begin{lrbox}{\LWR at colorminipagebox}%
+    \IfValueTF{#7}%
+    {\begin{minipage}[#5][#6][#7]{#8}}%
+    {\begin{minipage}[#5][#6][#5]{#8}}%
 }%
 {%
-\end{minipage}%
-\end{lrbox}%
-\LWR at traceinfo{*** starting end fcolorminipage #1 #2 #3 #4 #8}%
-\ifstrequal{#4}{none}%
-{% #4 none
-    {% scope the \colorlet
-        \colorlet{LWR at currentcolor}{.}%
-        \color{#2}%
-        \fbox{%
-            \color{LWR at currentcolor}%
-            \usebox{\LWR at colorminipagebox}%
-        }% fbox
-    }% colorlet
-}% #4 none
-{% #4 not none
-    \IfValueTF{#1}%
-    {%
-    \IfValueTF{#3}%
-    {\LWR at orig@print at fcolorbox[#1]{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
-    {\LWR at orig@print at fcolorbox[#1]{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
-    }%
-    {% no value #1
-    \IfValueTF{#3}%
-    {\LWR at orig@print at fcolorbox{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
-    {\LWR at orig@print at fcolorbox{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
-    }% no value #1
-}% #4 not none
-\LWR at traceinfo{*** finished end fcolorminipage}%
+    \end{minipage}%
+    \end{lrbox}%
+    \LWR at traceinfo{*** starting end fcolorminipage #1 #2 #3 #4 #8}%
+    \ifstrequal{#4}{none}%
+    {% #4 none
+        {% scope the \colorlet
+            \colorlet{LWR at currentcolor}{.}%
+            \color{#2}%
+            \fbox{%
+                \color{LWR at currentcolor}%
+                \usebox{\LWR at colorminipagebox}%
+            }% fbox
+        }% colorlet
+    }% #4 none
+    {% #4 not none
+        \IfValueTF{#1}%
+        {%
+        \IfValueTF{#3}%
+        {\LWR at orig@print at fcolorbox[#1]{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
+        {\LWR at orig@print at fcolorbox[#1]{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
+        }%
+        {% no value #1
+        \IfValueTF{#3}%
+        {\LWR at orig@print at fcolorbox{#2}[#3]{#4}{\usebox{\LWR at colorminipagebox}}}%
+        {\LWR at orig@print at fcolorbox{#2}{#4}{\usebox{\LWR at colorminipagebox}}}%
+        }% no value #1
+    }% #4 not none
+    \LWR at traceinfo{*** finished end fcolorminipage}%
 }
 
-\NewDocumentEnvironment{fcolorminipage}{}
-    {\LWR at print@fcolorminipage}
-    {\endLWR at print@fcolorminipage}
-
 \LWR at formatted{colorbox}
 \LWR at formatted{colorboxBlock}
 \LWR at formatted{fcolorbox}
@@ -13294,7 +13386,7 @@
 \begin{warpprint}
 
 \AtBeginDocument{
-\@ifpackageloaded{chemmacros}{
+\IfPackageLoadedTF{chemmacros}{
 \DeclareDocumentEnvironment{polymerdelims}{}
     {}{}
 
@@ -13562,17 +13654,18 @@
 color:\LWR at origpound\LWR at tempcolor%
 }
 \newcommand{\LWR at HTML@fbox}[1]{%
-\LWR at traceinfo{HTML fbox}%
-\LWR at forceminwidth{\fboxrule}%
-\LWR at traceinfo{HTML fbox B}%
-\InlineClass[%
-    \LWR at print@mbox{display:inline-block} ; %
-    \LWR at fboxstyle%
-]{fbox}{#1}%
-\LWR at traceinfo{HTML fbox: done}%
+    \LWR at traceinfo{HTML fbox}%
+    \LWR at forceminwidth{\fboxrule}%
+    \LWR at traceinfo{HTML fbox B}%
+    \InlineClass[%
+        \LWR at print@mbox{display:inline-block} ; %
+        \LWR at fboxstyle%
+    ]{fbox}{#1}%
+    \LWR at traceinfo{HTML fbox: done}%
 }
 \AtBeginDocument{\LWR at formatted{fbox}}
 \end{warpHTML}
+
 \begin{warpall}
 \let\fboxBlock\fbox
 \end{warpall}
@@ -13581,9 +13674,7 @@
 \newcommand{\LWR at HTML@fboxBlock}[1]{%
 \LWR at forceminwidth{\fboxrule}%
 \LWR at stoppars%
-\begin{BlockClass}[%
-\LWR at fboxstyle%
-]{fboxBlock}
+\begin{BlockClass}[\LWR at fboxstyle]{fboxBlock}
 #1
 \end{BlockClass}
 \LWR at startpars%
@@ -13596,7 +13687,7 @@
 
 \newsavebox{\LWR at fminipagebox}
 
-\NewDocumentEnvironment{LWR at print@fminipage}{O{t} o O{t} m}
+\NewDocumentEnvironment{fminipage}{O{t} o O{t} m}
 {%
 \IfValueTF{#3}%
 {\def\LWR at thisalign{#3}}
@@ -13615,10 +13706,6 @@
 \fbox{\usebox{\LWR at fminipagebox}}%
 \endminipage%
 }
-
-\LetLtxMacro\fminipage\LWR at print@fminipage
-\LetLtxMacro\endfminipage\endLWR at print@fminipage
-
 \end{warpall}
 \begin{warpHTML}
 
@@ -13700,7 +13787,7 @@
 
 \LWR at formatted{textbf}
 
-\@ifpackageloaded{nfssext-cfr}{
+\IfPackageLoadedTF{nfssext-cfr}{
 \DeclareRobustCommand{\LWR at HTML@texteb}[1]{%
     {%
         \LWR at HTML@ebweight%
@@ -13713,7 +13800,7 @@
     \providerobustcmd{\texteb}[1]{}
 }
 
-\@ifpackageloaded{nfssext-cfr}{
+\IfPackageLoadedTF{nfssext-cfr}{
 \DeclareRobustCommand{\LWR at HTML@textlg}[1]{%
     {%
         \LWR at HTML@lgweight%
@@ -13894,7 +13981,7 @@
 }
 \LWR at formatted{bfseries}
 
-\@ifpackageloaded{nfssext-cfr}{
+\IfPackageLoadedTF{nfssext-cfr}{
 \newrobustcmd*{\LWR at HTML@ebweight}{%
     \LWR at print@ebweight%
     \renewcommand*{\LWR at f@series}{eb}%
@@ -13902,7 +13989,7 @@
 \LWR at formatted{ebweight}
 }{}
 
-\@ifpackageloaded{nfssext-cfr}{
+\IfPackageLoadedTF{nfssext-cfr}{
 \newrobustcmd*{\LWR at HTML@lgweight}{%
     \LWR at print@lgweight%
     \renewcommand*{\LWR at f@series}{lg}%
@@ -14310,8 +14397,8 @@
     }
 
 \AtBeginDocument{
-    \@ifpackageloaded{graphics}{
-        \@ifpackageloaded{metalogo}{}{
+    \IfPackageLoadedTF{graphics}{
+        \IfPackageLoadedTF{metalogo}{}{
             \renewrobustcmd*{\Xe}
                 {X\hspace{-.1667em}\raisebox{-.5ex}{\reflectbox{E}}}
         }
@@ -14320,7 +14407,7 @@
 
 \AtEndDocument{
     \ifbool{LWR at warnXe}{
-        \PackageWarningNoLine{lwarp}{Load graphicx or graphics
+        \PackageNoteNoLine{lwarp}{Load graphicx or graphics
             for improved XeTeX logo}
     }{}
 }
@@ -14449,7 +14536,7 @@
 
 \begin{warpHTML}
 \AtBeginDocument{
-    \@ifpackageloaded{everyshi}{
+    \IfPackageLoadedTF{everyshi}{
         \RequirePackage{lwarp-everyshi}
     }{}
 }
@@ -14460,29 +14547,29 @@
 \end{warpHTML}
 
 \begin{warpHTML}
-\@ifpackageloaded{amsthm}{
+\IfPackageLoadedTF{amsthm}{
     \RequirePackage{lwarp-amsthm}
 }{}
-\@ifpackageloaded{amsmath}{
+\IfPackageLoadedTF{amsmath}{
     \RequirePackage{lwarp-amsmath}
 }{}
-\@ifpackageloaded{centernot}{
+\IfPackageLoadedTF{centernot}{
     \RequirePackage{lwarp-centernot}
 }{}
 \end{warpHTML}
 
 \begin{warpHTML}
-\@ifclassloaded{scrbook}{\RequirePackage{lwarp-patch-komascript}}{}
-\@ifclassloaded{scrartcl}{\RequirePackage{lwarp-patch-komascript}}{}
-\@ifclassloaded{scrreprt}{\RequirePackage{lwarp-patch-komascript}}{}
+\IfClassLoadedTF{scrbook}{\RequirePackage{lwarp-patch-komascript}}{}
+\IfClassLoadedTF{scrartcl}{\RequirePackage{lwarp-patch-komascript}}{}
+\IfClassLoadedTF{scrreprt}{\RequirePackage{lwarp-patch-komascript}}{}
 \end{warpHTML}
 
 \begin{warpprint}
-\@ifclassloaded{memoir}{\LWR at origRequirePackage{xcolor}}{}
+\IfClassLoadedTF{memoir}{\LWR at origRequirePackage{xcolor}}{}
 \end{warpprint}
 
 \begin{warpHTML}
-\@ifclassloaded{memoir}{\RequirePackage{lwarp-patch-memoir}}{}
+\IfClassLoadedTF{memoir}{\RequirePackage{lwarp-patch-memoir}}{}
 \end{warpHTML}
 
 \begin{warpHTML}
@@ -14528,28 +14615,28 @@
     }
 }
 
-\@ifclassloaded{ujarticle}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ujbook}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ujreport}{\LWR at patchujtclasses}{}
-\@ifclassloaded{utarticle}{\LWR at patchujtclasses}{}
-\@ifclassloaded{utbook}{\LWR at patchujtclasses}{}
-\@ifclassloaded{utreport}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjarticle}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjbook}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjreport}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjsarticle}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjsbook}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjsreport}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjskiyou}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjspf}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjtarticle}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjtbook}{\LWR at patchujtclasses}{}
-\@ifclassloaded{ltjtreport}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ujarticle}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ujbook}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ujreport}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{utarticle}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{utbook}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{utreport}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjarticle}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjbook}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjreport}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjsarticle}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjsbook}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjsreport}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjskiyou}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjspf}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjtarticle}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjtbook}{\LWR at patchujtclasses}{}
+\IfClassLoadedTF{ltjtreport}{\LWR at patchujtclasses}{}
 \end{warpHTML}
 
 \begin{warpHTML}
 \AtBeginDocument{
-    \@ifpackageloaded{ctexpatch}{%
+    \IfPackageLoadedTF{ctexpatch}{%
         \def\@partcntformat#1{%
             \LWR at isolate{\CTEX at partname}~%
             \CTEX at part@aftername%
@@ -14568,7 +14655,7 @@
 \end{warpHTML}
 \begin{warpHTML}
 \AtBeginDocument{
-\@ifpackageloaded{kotexutf}{%
+\IfPackageLoadedTF{kotexutf}{%
     \def\LWR at kotexutf@setref#1#2#3{%
         \@setref at dhucs@orig{#1}{#2}{#3}%
       \ifx#1\relax\else
@@ -14589,24 +14676,22 @@
 \begin{warpHTML}
 \AtBeginDocument{
 
-\@ifpackageloaded{polyglossia}{
-    \PackageWarningNoLine{lwarp}
+\IfPackageLoadedTF{polyglossia}{
+    \PackageNoteNoLine{lwarp}
     {%
         Polyglossia has been loaded.  Lwarp also uses cleveref.\MessageBreak
         See the cleveref documentation regarding\MessageBreak
-        polyglossia support.  Some languages are not supported%
+        polyglossia support.  Some languages are not supported.\MessageBreak
+        --- \MessageBreak
+        If the error\MessageBreak
+        \space\space Undefined control sequence ...
+        \protect\__hook begindocument\MessageBreak
+        occurs here, use the polyglossia macro:\MessageBreak
+        \space\space\protect\setmainlanguage\protect{...\protect}
     }
-    \typeout{---}
-    \typeout{Package lwarp:}
-    \typeout{If the error}
-    \typeout{\space\space``! Undefined control sequence.
-        \space ... \space \protect\__hook begindocument''}
-    \typeout{occurs here, use the polyglossia macro:}
-    \typeout{\space\space\protect\setmainlanguage\protect{...\protect}}
-    \typeout{---}
 }{
-    \@ifpackageloaded{babel}{
-        \PackageWarningNoLine{lwarp}
+    \IfPackageLoadedTF{babel}{
+        \PackageNoteNoLine{lwarp}
         {%
             Babel has been loaded.  Lwarp also uses cleveref.\MessageBreak
             See the cleveref documentation regarding\MessageBreak
@@ -14618,7 +14703,7 @@
 }
 \end{warpHTML}
 \newcommand*{\LWR at mathjaxwarn}[2]{%
-    \@ifpackageloaded{lwarp-#1}{%
+    \IfPackageLoadedTF{lwarp-#1}{%
         \ifblank{#2}{%
             \PackageWarningNoLine{lwarp}
                 {%
@@ -14637,7 +14722,7 @@
 }
 
 \newcommand*{\LWR at nomathjaxwarn}[2]{%
-    \@ifpackageloaded{lwarp-#1}{%
+    \IfPackageLoadedTF{lwarp-#1}{%
         \ifblank{#2}{%
             \PackageWarningNoLine{lwarp}
                 {%
@@ -14669,8 +14754,7 @@
 \AtBeginDocument{
     \ifbool{mathjax}{
         \LWR at nomathjaxwarn{aligned-overset}{}
-        \LWR at nomathjaxwarn{amscdx}
-            {\LWR at forceSVGmessage{amscdx}}
+        \LWR at nomathjaxwarn{amscdx}{\LWR at forceSVGmessage{amscdx}}
         \LWR at mathjaxwarn{arydshln}
             {In a math array, do not use the optional argument\MessageBreak
             for \protect\cdashline.\space\space
@@ -14693,10 +14777,8 @@
             {Colors are ignored in MathJax.\MessageBreak
             (Text mode tabular does support colortbl.)\MessageBreak
             \LWR at forceSVGmessage{colortbl}}
-        \LWR at mathjaxwarn{delarray}
-            {\LWR at forceSVGmessage{delarray}}
-        \LWR at nomathjaxwarn{gauss}
-            {\LWR at forceSVGmessage{gauss}}
+        \LWR at mathjaxwarn{delarray}{\LWR at forceSVGmessage{delarray}}
+        \LWR at nomathjaxwarn{gauss}{\LWR at forceSVGmessage{gauss}}
         \LWR at mathjaxwarn{hhline}
             {A simple \protect\hline\space is used}
         \LWR at mathjaxwarn{isomath}
@@ -14704,8 +14786,7 @@
                 do not use a sans font because MathJax does not yet\MessageBreak
                 have sans Greek.  Tensors may look like vectors%
             }
-        \LWR at nomathjaxwarn{jkmath}
-            {\LWR at forceSVGmessage{jkmath}}
+        \LWR at nomathjaxwarn{jkmath}{\LWR at forceSVGmessage{jkmath}}
         \LWR at mathjaxwarn{libertinust1math}
             {Some of the symbol font macros such as \protect\mathsfbfit\MessageBreak
                 do not use a sans font because MathJax does not yet\MessageBreak
@@ -14730,8 +14811,10 @@
             \protect\CodeBefore\space cannot be done with MathJax.\MessageBreak
             \LWR at forceSVGmessage{nicematrix}%
             }
-        \LWR at nomathjaxwarn{pb-diagram}
-            {\LWR at forceSVGmessage{pb-diagram}}
+        \LWR at nomathjaxwarn{pb-diagram}{\LWR at forceSVGmessage{pb-diagram}}
+        \LWR at mathjaxwarn{siunitx}
+            {Place \protect\sisetup\space before \protect\begin{document}.\MessageBreak
+            Many optional arguments are ignored}
         \LWR at nomathjaxwarn{tensind}{}
         \LWR at mathjaxwarn{unicode-math}
             {Do not use embedded Unicode characters.\MessageBreak



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