texlive[69305] trunk: lwarp (5jan24)

commits+karl at tug.org commits+karl at tug.org
Fri Jan 5 22:42:36 CET 2024


Revision: 69305
          https://tug.org/svn/texlive?view=revision&revision=69305
Author:   karl
Date:     2024-01-05 22:42:36 +0100 (Fri, 05 Jan 2024)
Log Message:
-----------
lwarp (5jan24)

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-SIunits.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-amsmath.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-attachfile.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-attachfile2.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-breakurl.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-bussproofs.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-colortbl.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fancybox.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fancyvrb.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-footnote.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fvextra.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-graphics.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-hyperref.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-minted.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-musicography.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-patch-memoir.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-simplebnf.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-siunitx.sty
    trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-tcolorbox.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-apxproof.sty

Modified: trunk/Build/source/texk/texlive/linked_scripts/lwarp/lwarpmk.lua
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/lwarp/lwarpmk.lua	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Build/source/texk/texlive/linked_scripts/lwarp/lwarpmk.lua	2024-01-05 21:42:36 UTC (rev 69305)
@@ -1,8 +1,8 @@
 #!/usr/bin/env texlua
 
--- Copyright 2016-2023 Brian Dunn
+-- Copyright 2016-2024 Brian Dunn
 
-printversion = "v0.912"
+printversion = "v0.913"
 requiredconfversion = "2" -- also at *lwarpmk.conf
 
 function printhelp ()

Modified: trunk/Master/texmf-dist/doc/latex/lwarp/README.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/lwarp/README.txt	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/doc/latex/lwarp/README.txt	2024-01-05 21:42:36 UTC (rev 69305)
@@ -1,5 +1,5 @@
 
-LaTeX lwarp package v0.912  README.txt
+LaTeX lwarp package v0.913  README.txt
 
 Files included are:
 
@@ -41,7 +41,6 @@
 version 2005/12/01 or later.
 
 
-Copyright 2016-2023 Brian Dunn
+Copyright 2016-2024 Brian Dunn
 
-Homepage: http://BDTechConcepts.com
-Email: bd at BDTechConcepts.com
+GitHub: https://github.com/bdtc/lwarp

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	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/scripts/lwarp/lwarpmk.lua	2024-01-05 21:42:36 UTC (rev 69305)
@@ -1,8 +1,8 @@
 #!/usr/bin/env texlua
 
--- Copyright 2016-2023 Brian Dunn
+-- Copyright 2016-2024 Brian Dunn
 
-printversion = "v0.912"
+printversion = "v0.913"
 requiredconfversion = "2" -- also at *lwarpmk.conf
 
 function printhelp ()

Modified: trunk/Master/texmf-dist/source/latex/lwarp/lwarp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/lwarp/lwarp.dtx	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/source/latex/lwarp/lwarp.dtx	2024-01-05 21:42:36 UTC (rev 69305)
@@ -1,7 +1,7 @@
 %
 % \iffalse meta-comment
 %
-% Copyright 2016-2023 Brian Dunn
+% Copyright 2016-2024 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>    [2023/08/28 v0.912  Allows LaTeX to directly produce HTML5 output.]
+%<package>    [2024/01/05 v0.913  Allows LaTeX to directly produce HTML5 output.]
 %
 %<*driver>
 \documentclass{ltxdoc}
@@ -88,7 +88,7 @@
 % \usepackage[log-declarations=false]{xparse}
 \usepackage{xparse}
 
-\usepackage{ifptex}% *8* remove later
+\usepackage{ifptex}% in case TL2019 or earlier
 
 
 \usepackage[lwarpmk, warpdisable]{lwarp}
@@ -534,23 +534,6 @@
 a plain-text file with \HTML\ tags.
 }
 
-\newcommand{\limitsbibtex}{%
-When enough authors are cited for a source,
-\watchout[Modify *.bib]
-\trouble{Improper \cs{prevdepth}>bibtex=\pkg{bibtex}}
-\trouble{bibtex=\pkg{bibtex}>Improper \cs{prevdepth}}
-\trouble{bibtex=\pkg{bibtex}>\cs{etalchar}}
-\trouble{etalchar=\cs{etalchar}}
-\BibTeX\ may use the \cs{etalchar} command
-to display a math superscript with a $+$ character to indicate ``and others''.
-Without modification, this will result in an ``Improper \cs{prevdepth}'' error.
-At present, \pkg{lwarp} requires that \cs{etalchar} be replaced by a text superscript.
-To do so, add to the start of the \filenm{.bib} file the following:
-\begin{sourcedisplay}
-\hspace*{-6em}@PREAMBLE\{"\cs{let}\cs{etalchar}\cs{relax}
-\cs{newcommand}\{\cs{etalchar}\}[1]\{\cs{textsuperscript}\{\#1\}\}"\}
-\end{sourcedisplay}
-}
 
 \newcommand{\limitsgloss}{%
 To process the \HTML\ glossary:
@@ -798,6 +781,7 @@
 \trouble[HTML special chars]{HTML>entities}
 \trouble{HTML>\&, \textless, \textgreater}
 \trouble{text>\&, \textless, \textgreater}
+\trouble{HTML>sanitization}
 have special meanings in \HTML.
 If \cs{\&}, \cs{textless}, and \cs{textgreater} are used, proper
 \HTML\ entities will be used, but there may be \HTML\ parsing problems
@@ -804,17 +788,32 @@
 if these special characters occur unescaped in program listings
 or other verbatim text.
 
+\trouble{listings>HTML sanitization}
+\trouble{program listings>HTML sanitization}
+\trouble{HTML>sanitization}
+\trouble{verbatim=\pkg{verbatim}}
+\gindex{listings>HTML sanitization}
+\gindex{program listings>HTML sanitization}
+\gindex{HTML>sanitization}
 For program listings, the \pkg{listings} package is supported,
 \margintag{program listings}
-and its \optn{literate} option is used to convert
+and its \optn{literate} option is used to automatically convert
 \texttt{\&}, \texttt{\textless}, and \texttt{\textgreater}
 to proper \HTML\ entities.
 
-The various \env{verbatim}-related environments do not convert
-\texttt{\&}, \texttt{\textless}, and \texttt{\textgreater},
-\margintag{verbatim}
+\pkg{minted} sanitizes \HTML\ automatically by its colorizing,
+which splits the special characters from the rest of the tag.
+
+The \pkg{fancyvrb} and \pkg{fvextra} packages automatically sanitize \HTML\ entities,
+\trouble[verbatim]{verbatim>HTML sanitization}
+but the core \LaTeX\ \env{verbatim}-related environments do not,
+nor does the \pkg{verbatim} package,
 so care must be taken to avoid accidentally including valid \HTML\ code inside
-these environments.  Adding a space on either side may be sufficient.
+these environments.  It may be sufficient to add a space on either side of
+\texttt{\&}, \texttt{\textless}, and \texttt{\textgreater}.
+
+\pkg{fancyvrb} does not sanitize \HTML\ when using the \optn{gobble} option.
+\watchout[\optn{gobble}]
 }
 
 \newcommand{\limitstextcomp}{%
@@ -985,9 +984,6 @@
 \textred{\cs{footnotetext}}\{A footnote with \cs{verb}+verbtim+.\} \\
 \end{sourcedisplay}
 and likewise for equations or display math.
-
-At present there is a bug such that paragraph closing tags are not present in
-footnotes when \cs{VerbatimFootnotes} are selected.  The browser usually compensates.
 }
 
 \newcommand{\limitsmanyfootbigfoot}{%
@@ -1369,8 +1365,8 @@
 \item Math appearing inside a lateximage,
     \margintag{lateximage}
     and therefore also inside a \TikZ\ or \env{picture}
-    environment, is rendered as \SVG\ math even if \MathJax
-    is used in the rest of the document.
+    environment, is rendered as \SVG\ math even if \MathJax\ is
+    used in the rest of the document.
 
 \item For \pkg{siunitx},
     \margintag{\pkg{siunitx}}
@@ -1461,9 +1457,8 @@
 in \MathJax.
 The macro \cs{inlinemathother} may be used before a sequence of dynamic or complicated
 math expressions, and \cs{inlinemathnormal} after.  Doing so tells \pkg{lwarp} to
-use unhashed \SVG\ math images for those particular expressins, even if \MathJax
-is otherwise in use.
-See \cref{sec:localizingdynamicmath}.
+use unhashed \SVG\ math images for those particular expressins, even if \MathJax\ is
+otherwise in use. See \cref{sec:localizingdynamicmath}.
 }
 
 \newcommand*{\limitsmathdisplay}{
@@ -2037,9 +2032,6 @@
 \margintag{color support}
 without any changes required.
 
-\cs{rowcolors} is supported, except that the optional argument is ignored so far.
-\margintag{colored tables}
-
 \cs{textcolor}, \cs{colorbox}, and \cs{fcolorbox} are supported.
 \margintag{colored text and boxes}
 
@@ -2576,6 +2568,9 @@
 \trouble[row/cell color]{colortbl=\pkg{colortbl}}
 
 \pkg{colortbl} ignores the overhang arguments.
+
+\cs{rowcolors} is supported, except that the optional argument is ignored so far.
+\margintag{colored tables}
 }
 
 \newcommand{\limitsctable}{%
@@ -2768,6 +2763,9 @@
 \margintag{indented alignment}
 space which may not line up exactly with what \prog{pdftotext} detects.
 Some lines may be off slightly in their left edge.
+
+\pkg{lwarp} sanitizes \HTML\ for \pkg{fancybox} verbatims, except for
+the contents of \cs{VerbBox} and any \cs{verb} inside.
 }
 
 \newcommand{\limitsmdframed}{%
@@ -3211,7 +3209,13 @@
 and then \cmds{lwarpmk limages} to generate the new images.
 }
 
+\newcommand*{\newlabelsystem}{
+Due to changes in cross referencing, \watchout[New labels]
+\textred{execute \cmds{lwarpmk clean} before recompiling.}
+}
 
+
+
 \newcommand*{\describehashing}{%
 If starred, a hashed filename is used.\margintag{image filename hashing}
 \gindex{hash>SVG image filename}
@@ -3424,6 +3428,7 @@
 % \changes{v0.910}{2023/01/03}{\ 2023/01/03}
 % \changes{v0.911}{2023/02/28}{\ 2023/02/28}
 % \changes{v0.912}{2023/08/28}{\ 2023/08/28}
+% \changes{v0.913}{2024/01/05}{\ 2024/01/05}
 
 
 
@@ -3456,8 +3461,10 @@
 %
 % \fileversion{} \Dash \filedate
 %
-% {\small\textcopyright{} 2016--2023} Brian Dunn\\ \small \texttt{bd at BDTechConcepts.com}
+% {\small\textcopyright{} 2016--2024} Brian Dunn
 %
+% GitHub: \url{https://github.com/bdtc/lwarp}
+%
 % \end{center}
 %
 % \begin{abstract}
@@ -3542,6 +3549,8 @@
 %
 % To update existing projects, see \cref{sec:updates}: \nameref{sec:updates}.
 %
+% Need help?  See the \nameref{sec:indexgen} or the \nameref{sec:indextrb}.
+%
 % \color{red!30!black}\bfseries
 % \pkg{Lwarp} is still in development.  Changes are likely.
 %
@@ -3657,8 +3666,22 @@
 % see the end of the Change History on page \pageref{sec:changesend}.
 %
 % \begin{description}
+% \item[v0.913:] \HTML\ sanitization for verbatims.
+%   \begin{itemize}
+%       \item Now at GitHub: \url{https://github.com/bdtc/lwarp}
+%       \item Added bibliography usage info to docs and tutorial.
+%       \item \cs{verb} now uses a \CSS\ class of \attribute{verb}
+%                   instead of \attribute{texttt}.
+%       \item Improved \HTML\ sanitization for hyperlinks,
+%               \pkg{fancybox}, \pkg{fancyvrb}, \pkg{fvextra}, \pkg{minted}.
+%       \item Updated \pkg{fancyvrb}, \pkg{fvextra}, \pkg{simplebnf}.
+%       \item \pkg{siunitx}: Updated, and improved complex i,j.
+%       \item Added \pkg{doipubmed}.
+%   \end{itemize}
+% \needspace{2\baselineskip}
 % \item[v0.912:] Updated for new \LaTeX\ label system.
 %   \begin{itemize}
+%       \item \newlabelsystem
 %       \item Fixed for updated kernel label system, name and back references.
 %       \item Updated \pkg{memoir}, \pkg{tcolorbox}.
 %       \item \pkg{nameref}: Now allowed to load before \pkg{lwarp}, such as by \pkg{memoir}.
@@ -3815,8 +3838,7 @@
 % \needspace{2\baselineskip}
 % \item[v0.896:] Back references, accessibility.
 %   \begin{itemize}
-%       \item \textred{Due to changes in cross referencing, \watchout
-%           execute \cmds{lwarpmk clean} before recompiling.}
+%       \item \newlabelsystem
 %       \item Increased sectioning nesting stack depth.  Error if overflow stack.
 %       \item Fixed footnotes at the end of the document,
 %               or inside a \env{description} label.
@@ -6080,7 +6102,7 @@
 % 	due to native \LaTeX\ processing.\\
 %
 % Theorems: & Native \LaTeX\ theorems,
-%	\mpkg{amsthm}, \spkg{apxproof}, \mpkg{ntheorem}, \mpkg{shadethm},
+%	\mpkg{amsthm}, \mpkg{apxproof}, \mpkg{ntheorem}, \mpkg{shadethm},
 %   \mpkg{theorem}, \mpkg{thmbox}, \mpkg{thmtools}. \\
 %
 % Additional math: & Math fonts via \SVG\ images,
@@ -6294,8 +6316,8 @@
 %   \mpkg{axodraw2}, \mpkg{bitpattern}, \spkg{blochsphere}, \spkg{bodegraph},
 %   \spkg{bohr}, \mpkg{bytefield},
 %   \mpkg{chemfig}, \mpkg{chemformula}, \mpkg{chemgreek},
-%   \mpkg{chemmacros}, \mpkg{chemnum},
-%   \spkg{circuitikz}, \spkg{econometrics}\ejax, \spkg{elements},
+%   \mpkg{chemmacros}, \mpkg{chemnum}, \spkg{circuitikz},
+%   \mpkg{doipubmed}, \spkg{econometrics}\ejax, \spkg{elements},
 %   \mpkg{engtlc}\ejax, \spkg{fast-diagram}, \mpkg{ghsystem},
 %   \spkg{hepnicenames}, \spkg{heppennames}, \spkg{hepunits}\ejax,
 %   \mpkg{isotope}\ejax,
@@ -6971,6 +6993,7 @@
 %
 % \section{Tutorial}
 % \label{sec:tutorial}
+% ^^A *tutorial
 %
 % This section shows an example of how to create an \pkg{lwarp} document.
 %
@@ -7447,6 +7470,20 @@
 %
 % \clearpage
 %
+% \subsection{Using a bibliography}
+%
+% \changes{v0.913}{2023/10/01}{Docs: Update a bibliography.}
+%
+% To process the bibliography for the \HTML\ version:
+% \userentry{bibtex <filename>\_html}
+% or
+% \userentry{biber <filename>\_html}
+%
+% To see the bibliography in the \HTML\ version:
+% \userentry{lwarpmk html1}
+% as many times as neccesary.
+%
+%
 % \subsection{Using a glossary}
 %
 % \changes{v0.29}{2017/04/15}{Docs: Using a glossary}
@@ -7889,7 +7926,7 @@
 % \DescribePackage{lmodern}
 % To use Latin Modern instead, add
 %	\begin{sourcedisplay}
-%	|usepackage{lmodern}|
+%	|\usepackage{lmodern}|
 %	\end{sourcedisplay}
 % to the preamble.
 %
@@ -7908,7 +7945,7 @@
 % \margintag{\prog{latex}, \prog{pdflatex}, T1, UTF8}
 % \pkg{lwarp} automatically loads \pkg{fontenc} with T1 encoding.
 % \pkg{fontenc} may be loaded with an additional encoding after \pkg{lwarp}.
-% \pkg{inputenc} is automatically loaded with UTF8 encoding if if has not yet been loaded,
+% \pkg{inputenc} is automatically loaded with UTF8 encoding if it has not yet been loaded,
 % but may also be specified with another encoding such as |latin1|.
 % See the next section regarding index encoding.
 %
@@ -8273,7 +8310,7 @@
 % \margintag{automatic setting}
 % to sensible values for each of those programs while compiling a single index.
 % \pkg{lwarp}'s \optn{makeindexStyle}, \optn{xindyStyle},
-% \optn{xindyLanuage}, and \optn{xindyCodepage} options will be used if specified.
+% \optn{xindyLanguage}, and \optn{xindyCodepage} options will be used if specified.
 %
 % If specifying \optn{PrintIndexCmd} manually,
 % \trouble{PrintIndexCmd}
@@ -8313,7 +8350,7 @@
 % \margintag{automatic setting}
 % to sensible values for each of those programs while compiling a single index.
 % \pkg{lwarp}'s \optn{makeindexStyle}, \optn{xindyStyle},
-% \optn{xindyLanuage}, and \optn{xindyCodepage} options will be used if specified.
+% \optn{xindyLanguage}, and \optn{xindyCodepage} options will be used if specified.
 %
 % If specifying \optn{HTMLIndexCmd} manually,
 % \trouble[xindy]{xindy=\prog{xindy}>options>HTMLIndexCmd=\optn{HTMLIndexCmd}}
@@ -8344,7 +8381,7 @@
 % \margintag{automatic setting}
 % to either of the two settings show above.
 % \pkg{lwarp}'s \optn{makeindexStyle}, \optn{xindyStyle},
-% \optn{xindyLanuage}, and \optn{xindyCodepage} options will be used if specified.
+% \optn{xindyLanguage}, and \optn{xindyCodepage} options will be used if specified.
 % Unlike \optn{PrintIndexCmd} and \optn{HTMLIndexCmd},
 % \prog{latexmk} uses either of the single-line settings of \optn{LatexmkIndexCmd}
 % shown above to compile each of multiple indexes if necessary.
@@ -8677,7 +8714,7 @@
 %   of the section names.  If false, web pages are numbered.
 %   Either way, the \optn{HTMLFilename} option is used as a prefix.
 %   See \cref{sec:filenameexamples} for examples of naming and numbering \HTML\ files.
-%   The user must ensure that filenames are unique after begin sanitized.
+%   The user must ensure that filenames are unique after being sanitized.
 %   \trouble[Unique filename!]{HTML>missing pages>filename not unique}
 %   For example, math in the section name is removed before creating the filename,
 %   so the rest of the filename must be sufficiently unique to avoid name collisions.
@@ -8728,7 +8765,7 @@
 % \begin{description}
 % \ItemDescribeMacro{\CSSFilename}  \marg{filename.css}  \DescribeDefault{lwarp.css} \quad
 %   Sets the \CSS\ file to use for the following
-%   files.  May be changed before each each sectioning command which would
+%   files.  May be changed before each sectioning command which would
 %   cause a file split.
 %
 %   The \CSS\ styles of the web pages are set by the \cs{CSSFilename} command.
@@ -8737,12 +8774,12 @@
 %   in this tutorial.  Change it to |lwarp_formal.css| for a more formal look,
 %   or comment out the \cs{CSSFilename} command to see the default.
 %   \cs{CSSFilename} may be used before each file break to set the \CSS\ for
-%   individual pagess of the website.
+%   individual pages of the website.
 %
 % \ItemDescribeMacro{\MathJaxFilename}  \marg{filename}
 %   \DescribeDefault{\filenm{lwarp_mathjax.txt}} \quad
 %   Sets the \MathJax\ script file to use for the following
-%   files.  May be changed before each each sectioning command which would
+%   files.  May be changed before each sectioning command which would
 %   cause a file split.
 %
 %   The \MathJax\ script file is copied into the head of each \HTML\ file.
@@ -8792,7 +8829,7 @@
 %
 % \ItemDescribeMacro{\HTMLDescription} \marg{description}  \DescribeDefault{<empty>} \quad
 %   Sets the \HTML\ \attribute{description} tag for
-%   the following files.  May be changed before each each sectioning command which would
+%   the following files.  May be changed before each sectioning command which would
 %   cause a file split.
 %
 % \ItemDescribeMacro{\HTMLPageTop}  \marg{contents}  \DescribeDefault{<empty>} \quad
@@ -9144,8 +9181,8 @@
 % Performs the given actions only when \HTML\ output is being generated.
 %
 % \DescribeEnv{warpMathJax}
-% Anything which is to be done only while using \HTML\ output with \MathJax
-% is surrounded by a \env{warpMathJax} environment.
+% Anything which is to be done only while using \HTML\ output with \MathJax\ is
+% surrounded by a \env{warpMathJax} environment.
 % Usually, this is \cs{CustomizeMathJax}, used to add emulation macros.
 % |\end{warpMathJax}| must appear on its own line.
 % \trouble[\texttt{\cs{end}\{warpMathJax\}}]{warpMathJax}
@@ -9943,12 +9980,46 @@
 %
 % \subsubsection{\prog{BibTeX}}
 % \label{sec:limitsbibtex}
+%
+% \trouble{bibtex=\pkg{bibtex}>Update bibliography}
+% \trouble{bibliography>update}
+% \gindex{bibtex=\pkg{bibtex}>Update bibliography}
+% \gindex{bibliography>update}
+% To update the \HTML\ version of the bibliography:
+% \userentry{bibtex <filename>\_html}
+% \changes{v0.913}{2023/10/01}{Docs: Update a bibliography.}
+%
 % \DescribeMacro{\etalchar} Displays a superscript ``+'' to indicate ``and others''.
 % \changes{v0.54}{2018/03/09}{Docs: BibTeX.}
 %
-% \limitsbibtex
+% When enough authors are cited for a source,
+% \watchout[Modify *.bib]
+% \trouble{Improper \cs{prevdepth}>bibtex=\pkg{bibtex}}
+% \trouble{bibtex=\pkg{bibtex}>Improper \cs{prevdepth}}
+% \trouble{bibtex=\pkg{bibtex}>\cs{etalchar}}
+% \trouble{etalchar=\cs{etalchar}}
+% \BibTeX\ may use the \cs{etalchar} command
+% to display a math superscript with a $+$ character to indicate ``and others''.
+% Without modification, this will result in an ``Improper \cs{prevdepth}'' error.
+% At present, \pkg{lwarp} requires that \cs{etalchar} be replaced by a text superscript.
+% To do so, add to the start of the \filenm{.bib} file the following:
+% \begin{sourcedisplay}
+% \hspace*{-6em}@PREAMBLE\{"\cs{let}\cs{etalchar}\cs{relax}
+% \cs{newcommand}\{\cs{etalchar}\}[1]\{\cs{textsuperscript}\{\#1\}\}"\}
+% \end{sourcedisplay}
 %
 %
+% \subsubsection{\prog{biber}}
+%
+%\trouble{biber=\pkg{biber}>Update bibliography}
+%\trouble{bibliography>update}
+%\gindex{biber=\pkg{biber}>Update bibliography}
+%\gindex{bibliography>update}
+% To update the \HTML\ version of the bibliography:
+% \userentry{biber <filename>\_html}
+% \changes{v0.913}{2023/10/01}{Docs: Update a bibliography.}
+%
+%
 % \subsubsection{\pkg{xcite} package}
 %
 % See \cref{sec:multipleprojects}.
@@ -12258,7 +12329,6 @@
 % \begin{enumerate}
 % \item Change the source in \filenm{lwarp.dtx}.
 % \item |pdflatex lwarp.ins| -or- |pdflatex core.ins|
-% \item |pdflatex lwarp.dtx|
 % \item If modifying \prog{lwarpmk} the new version should now be active.
 % \item If modifying \CSS\ files or other files generated by \pkg{lwarp}:
 %   \begin{enumerate}
@@ -12266,6 +12336,7 @@
 %       in the project.
 %   \item Reload the \HTML\ document to see the effect of the new \CSS\ files.
 %   \end{enumerate}
+% \item If done testing, |pdflatex lwarp.dtx| to update the \pkg{lwarp} documentation.
 % \end{enumerate}
 %
 % Sometimes it is worth checking the |<project>_html.pdf| file, which is the
@@ -13073,7 +13144,7 @@
 %    \begin{macrocode}
 \RequirePackage{iftex}[2019/11/07]
 \RequirePackage{ifpdf}
-\RequirePackage{ifptex}
+\RequirePackage{ifptex}% in case TL2019 or earlier
 
 \newif\ifxetexorluatex
 
@@ -13615,6 +13686,7 @@
 \LWR at loadafter{anonchap}
 \LWR at loadafter{anysize}
 \LWR at notmemoirloadafter{appendix}
+\LWR at loadafter{apxproof}
 \LWR at loadafter{ar}
 \LWR at loadafter{arabicfront}
 \LWR at notmemoirloadafter{array}
@@ -13702,6 +13774,7 @@
 \LWR at loadafter{decorule}
 \LWR at loadafter{diagbox}
 \LWR at loadafter{dingbat}
+\LWR at loadafter{doipubmed}
 \LWR at loadafter{DotArrow}
 \LWR at loadafter{dotlessi}
 \LWR at loadafter{dprogress}
@@ -14194,8 +14267,11 @@
 %
 % The default for \pdfLaTeX, \dviLaTeX, up\LaTeX, etc:
 % \changes{v0.63}{2018/11/30}{Fix: Default \cs{LWR at mdfive}.}
+% \changes{v0.913}{2023/12/09}{Fix: Default \cs{LWR at mdfive}.}
 %    \begin{macrocode}
-\let\LWR at mdfive\pdfmdfivesum
+\ifdef{\pdfmdfivesum}
+    {\let\LWR at mdfive\pdfmdfivesum}
+    {}
 %    \end{macrocode}
 %
 % For \LuaLaTeX:
@@ -14601,11 +14677,12 @@
 %
 % \begin{macro}{\LWR at maybe@orignewpage}
 % Only do \cs{LWR at orignewpage} if not inside a \TeX\ box.
+% Avoids nested paragraph tags.
 % \changes{v0.88}{2020/06/06}{Added.}
 %    \begin{macrocode}
 \newcommand*{\LWR at maybe@orignewpage}{%
     \LWR at traceinfo{LWR at maybe@orignewpage}%
-    \ifnumgreater{\value{LWR at texboxdepth}}{0}
+    \ifnumgreater{\value{LWR at texboxdepth}}{0}%
         {}%
         {\LWR at orignewpage}%
     \LWR at traceinfo{LWR at maybe@orignewpage done}%
@@ -17128,6 +17205,8 @@
 %
 %
 % \begin{macro}{\LWR at formatted@checkname} \marg{name}
+%
+% Verify that a print and \HTML\ version exist.
 % \changes{v0.893}{2020/11/15}{Added.}
 % \changes{v0.901}{2021/08/18}{Improved error handling.}
 %    \begin{macrocode}
@@ -17506,12 +17585,14 @@
 % be remembered here.
 % \changes{v0.51}{2018/03/12}{Fix: Remember original \cs{\#} in case is redefined.}
 % \changes{v0.72}{2019/05/24}{Use \cs{LWR at formatted} for \cs{bfseries}, etc.}
+% \changes{v0.913}{2023/12/09}{Added \cs{nobreakspace}.}
 %    \begin{macrocode}
 \chardef\LWR at origpound=`\#
 %    \end{macrocode}
 %    \begin{macrocode}
 \let\LWR at origcomma\,
-\let\LWR at origtilde~
+\LetLtxMacro\LWR at origtilde~
+\LetLtxMacro\LWR at orignobreakspace\nobreakspace
 \let\LWR at orighfil\hfil
 \let\LWR at orighss\hss
 \let\LWR at origllap\llap
@@ -18268,6 +18349,8 @@
 % \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.}
+% \changes{v0.913}{2023/09/27}{\filenm{lwarp.css}: Improved \pkg{fancyvrb}.}
+% \changes{v0.913}{2023/09/27}{\filenm{lwarp.css}: Added complex number i,j format.}
 %
 % ^^A *lwarp.css
 %
@@ -18371,6 +18454,12 @@
     font-variant-numeric: normal ;
 }
 
+
+/* For complex number i,j symbols */
+span.ijit {font-style: italic; font-variant: normal}
+span.ijup {font-style: normal; font-variant: normal}
+
+
 span.textsc, div.textsc {
     font-variant: small-caps;
     font-variant-numeric: oldstyle-nums ;
@@ -18944,8 +19033,10 @@
 }
 
 .fancyvrb {
-    font-size:.85em ;
-    margin: 3ex 0pt 3ex 0pt
+    margin: 3ex 0pt 3ex 0pt ;
+    font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
+        "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
+        "Courier New", monospace;
 }
 
 .fancyvrblabel {
@@ -19511,7 +19602,7 @@
     font-size: .85em ;
 }
 
-span.verbatim {
+span.verbatim, span.verb {
     font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
         "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
         "Courier New", monospace;
@@ -21137,10 +21228,10 @@
 \begin{filecontents*}[overwrite]{lwarpmk.lua}
 #!/usr/bin/env texlua
 
--- Copyright 2016-2023 Brian Dunn
+-- Copyright 2016-2024 Brian Dunn
 
 
-printversion = "v0.912"
+printversion = "v0.913"
 requiredconfversion = "2" -- also at *lwarpmk.conf
 
 function printhelp ()
@@ -25188,7 +25279,7 @@
 % \changes{v0.902}{2021/09/20}{Improved \pkg{footnote} par tags.}
 %    \begin{macrocode}
     \ifbool{LWR at spewingnotes}{}{%
-        \LWR at origtilde\LWR at orignewline%
+        \LWR at orignobreakspace\LWR at orignewline%
         \LWR at htmltagc{/\LWR at tagregularparagraph}%
         \LWR at orignewline%
     }%
@@ -25999,6 +26090,33 @@
 %    \end{macrocode}
 % \end{macro}
 
+
+% \DescribeBoolean{LWR at HTMLsanitize@tmpb at enable}
+% Allow to disable sanitization while inside a \env{lateximage},
+% or while using \pkg{minted}.
+% \watchout
+% \HTML\ sanitizaiton was occurring too early,
+% and \pkg{minted} would then colorize the sanitized results,
+% breaking the \HTML\ entities in \pkg{lwarp}'s \HTML\ output.
+% \changes{v0.913}{2023/11/17}{\bool{LWR at HTMLsanitize@tmpb at enable} added.}
+%    \begin{macrocode}
+\newbool{LWR at HTMLsanitize@tmpb at enable}
+\booltrue{LWR at HTMLsanitize@tmpb at enable}
+%    \end{macrocode}
+
+% \DescribeBoolean{LWR at HTMLsanitize@tmpb at removebackslash}
+%
+% Allow to enable \Slash disable sanitization of the
+% macros \cs{\%}, \cs{\#}, \cs{\%}.
+% This is usually enabled to allow the user to enter these macros in
+% \URL{}s, for example, but is disabled for ALT tags and
+% \MathJax\ output where the literal \LaTeX\ source must be preserved.
+% \changes{v0.913}{2023/11/25}{\bool{LWR at HTMLsanitize@tmpb at removebackslash} added.}
+%    \begin{macrocode}
+\newbool{LWR at HTMLsanitize@tmpb at removebackslash}
+\booltrue{LWR at HTMLsanitize@tmpb at removebackslash}
+%    \end{macrocode}
+
 % \DescribeBoolean{LWR at MathJax@silentquotes}
 %   If true, double quotes (\cs{"} and |"|) are removed (used for \pkg{mathspec}).
 %   This unfortunately includes double quotes used inside \cs{text} with \MathJax.
@@ -26009,11 +26127,94 @@
 %    \end{macrocode}
 
 
+% \begin{macro}{\LWR at HTMLsanitize@tmpb} Sanitizes \HTML\ for \cs{tmpb}.
+% These characters may be interpreted by the browser.
+% \changes{v0.913}{2023/10/01}{Added.}
+%    \begin{macrocode}
+\catcode`\&=12
+\newcommand*{\LWR at HTMLsanitize@tmpb}{%
+    \ifbool{LWR at HTMLsanitize@tmpb at enable}%
+    {%
+%    \end{macrocode}
+%
+% \HTML\ entities:
+%    \begin{macrocode}
+        \LWR at replacestrings{&}{&}% must be first because & is used for lt, gt, etc.
+        \LWR at replacestrings{<}{<}%
+        \LWR at replacestrings{>}{>}%
+        \LWR at replacestrings{'}{'}%
+        \LWR at replacestrings{`}{`}%
+        \LWR at replacestrings{_}{\detokenize{_}}%
+%    \end{macrocode}
+% ^^A   \StrSubstitute[100]{\tmpb}{\LWRpercent}{%}[\tmpb]%
+%
+% Neutralize \cs{\%}, \cs{\#}, \cs{\&} in case used by the author.
+%
+% \cs{@tempa} is built to be
+% \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines]
+% \LWR at replacestrings{\#}{#}
+% \end{Verbatim}
+% and similar for |%| and |&|.
+% \changes{v0.913}{2023/11/25}{Neutralize \cs{\%}, \cs{\#}, \cs{\&} in \URL.}
+%    \begin{macrocode}
+        \ifbool{LWR at HTMLsanitize@tmpb at removebackslash}%
+        {%
+            \def\@tempa{\LWR at replacestrings}%
+            \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\detokenize{\#}}}%
+            \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\LWRhash}}%
+            \@tempa%
+            \def\@tempa{\LWR at replacestrings}%
+            \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\detokenize{\%}}}%
+            \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\LWRpercent}}%
+            \@tempa%
+            \def\@tempa{\LWR at replacestrings}%
+            \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\detokenize{\&}}}%
+            \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\LWRamp}}%
+            \@tempa%
+        }%
+        {}%
+%    \end{macrocode}
+%
+% The quotes occasionally causes problems.
+% For \pkg{MathJax}, also allow neutralization of \cs{"} and the |"| character.
+% \changes{v0.891}{2020/09/09}{Neutralized quotes.}
+% \changes{v0.893}{2020/11/22}{Optionally neutralized quotes.}
+%    \begin{macrocode}
+        \ifbool{LWR at MathJax@silentquotes}
+            {%
+                \expandafter\LWR at replacestrings\expandafter{\LWRbackslash"}{}%
+                \LWR at replacestrings{"}{}%
+            }%
+            {\LWR at replacestrings{"}{"}}%
+    }% enabled
+    {}% not enabled
+}
+\catcode`\&=4
+%    \end{macrocode}
+% \end{macro}
 
+
+% \begin{macro}{\LWR at HTMLsanitize@use at tmpb} \marg{text}
+%
+% Sanitizes via \cs{LWR at HTMLsanitize@tmpb} and then immediately uses the result.
+%    \begin{macrocode}
+\newcommand{\LWR at HTMLsanitize@use at tmpb}[1]{%
+    \ifbool{LWR at HTMLsanitize@tmpb at enable}%
+        {%
+            \def\tmpb{#1}%
+            \LWR at HTMLsanitize@tmpb%
+            \tmpb%
+        }%
+        {#1}%
+}
+%    \end{macrocode}
+% \end{macro}
+
+
 % \begin{macro}{\LWR at subHTMLsanitize}
 %
-% \cs{LWR at strresult} must first be set by \cs{LWR at HTMLsanitize},
-% \cs{LWR at HTMLsanitizeexpand}, or \cs{CustomizeMathJax}.
+% \cs{LWR at strresult} must first be set by \cs{LWR at HTMLsanitizedetokenized},
+% \cs{LWR at HTMLsanitizeexpanded}, or \cs{CustomizeMathJax}.
 %
 % \changes{v0.36}{2017/08/16}{Fix for \pkg{babel-french}.}
 % \changes{v0.51}{2018/03/07}{Fix: Escapes double quotes.}
@@ -26021,31 +26222,10 @@
 % \changes{v0.81}{2020/02/24}{Faster.}
 %    \begin{macrocode}
 \catcode`\#=12
-\catcode`\&=12
 \newcommand{\LWR at subHTMLsanitize}{%
-%    \end{macrocode}
-% The |&|, |<|, and |>| may be interpreted by the browser:
-%
-%    \begin{macrocode}
     \edef\tmpb{\detokenize\expandafter{\LWR at strresult}}%
-    \LWR at replacestrings{&}{&}%
-    \LWR at replacestrings{<}{<}%
-    \LWR at replacestrings{>}{>}%
+    \LWR at HTMLsanitize@tmpb%
 %    \end{macrocode}
-% The quotes occasionally causes problems.
-% For \pkg{mathspec}, also allow neutralization of \cs{"} and the |"| character.
-% \changes{v0.891}{2020/09/09}{Neutralized single quotes.}
-% \changes{v0.893}{2020/11/22}{Optionally neutralized single quotes.}
-%    \begin{macrocode}
-    \ifbool{LWR at MathJax@silentquotes}
-        {%
-            \expandafter\LWR at replacestrings\expandafter{\LWRbackslash"}{}%
-            \LWR at replacestrings{"}{}%
-        }%
-        {\LWR at replacestrings{"}{"}}%
-    \LWR at replacestrings{'}{'}%
-    \LWR at replacestrings{`}{`}%
-%    \end{macrocode}
 % \MathJax\ allows expressions to be defined with \cs{newcommand}.
 % These expressions would appear with |##| for each argument,
 % and each must be changed to a single |#|.
@@ -26056,7 +26236,6 @@
     \edef\LWR at strresult{\detokenize\expandafter{\tmpb}}%
 }
 \catcode`\#=6
-\catcode`\&=4
 %    \end{macrocode}
 % \end{macro}
 
@@ -26163,6 +26342,7 @@
 \newcommand*{\LWR at subcustomizedmathjax}[1]{%
     \begingroup%
     \LWR at hook@processingtags%
+    \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
     \edef\LWR at strresult{\detokenize{#1}}%
     \LWR at subHTMLsanitize%
     \xdef\LWR at customizedMathJax{%
@@ -27892,6 +28072,7 @@
     \begingroup%
     \LWR at restoreoriglists%
     \boolfalse{LWR at verbtags}%
+    \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
 %    \end{macrocode}
 % ^^A     \ifbool{mathKaTeX}{%
 % ^^A         \verbatiminput{lwarp_KaTeX.txt}%
@@ -27912,7 +28093,6 @@
 %    \end{macrocode}
 % ^^A     }%
 %    \begin{macrocode}
-    \booltrue{LWR at verbtags}%
     \endgroup%
     \LWR at stoppars%
 }% end of mathjax
@@ -28234,11 +28414,11 @@
 % \changes{v0.65}{2018/12/18}{Improved \CSS\ for page layout.}
 % \changes{v0.84}{2020/04/24}{Added prev/next links.}
 %
-% (The \cs{LWR at origtilde} is in case no autopage is required for the label,
+% (The \cs{LWR at orignobreakspace} is in case no autopage is required for the label,
 % which would not print anything, and something must be printed before the newline.)
 %
 %    \begin{macrocode}
-\label{\BaseJobname-autofile-last}\LWR at origtilde\LWR at orignewline
+\label{\BaseJobname-autofile-last}\LWR at orignobreakspace\LWR at orignewline
 %    \end{macrocode}
 %
 % \changes{v0.896}{2021/03/04}{Added \element{main}.}
@@ -29321,8 +29501,26 @@
 \begin{warpHTML}
 %    \end{macrocode}
 
+
+% \begin{macro}{\@setupverbvisiblespace}
+% For \XeTeX\ or \LuaTeX, the default visible space was drawn in \PDF,
+% but not a text character which could be copied to \HTML.
+% \changes{v0.913}{2023/11/27}{Fixed \XeTeX, \LuaTeX\ visible space.}
+%    \begin{macrocode}
+\ifxetexorluatex
+
+\newcommand*{\LWR at HTML@@setupverbvisiblespace}{\let\@xobeysp\textvisiblespace}
+
+\LWR at formatted{@setupverbvisiblespace}
+
+\fi
+%    \end{macrocode}
+% \end{macro}
+
+
 % \DescribeBoolean{LWR at verbtags} Used to temporarily turn off verbatim tags
-%	while doing \cs{verbatiminput} in the \HTML\ head.
+%	while doing \cs{verbatiminput} in the \HTML\ head, or during \MathJax.
+%   Verbatim tags are also disabled separately inside an \HTML\ span.
 %    \begin{macrocode}
 \newbool{LWR at verbtags}
 \booltrue{LWR at verbtags}
@@ -29332,25 +29530,31 @@
 % \begin{macro}{\verb}
 %
 % Patched to encapsulate the verbatim text inside span
-% with a class of \attribute{texttt}.
+% with a class of \attribute{verb}.
 %
-% \changes{v0.891}{2020/09/12}{\cs{verb} as \cs{texttt}.}
 %    \begin{macrocode}
 \LetLtxMacro\LWR at orig@verb at egroup\verb at egroup
 
 \def\LWR at verb@egroup at endspan{%
     \LWR at orig@verb at egroup%
-    \LWR at htmltag{/span}%
+    \ifbool{LWR at verbtags}%
+        {\LWR at htmltag{/span}}%
+        {}%
     \endgroup%
 }
 %    \end{macrocode}
 %
+% \changes{v0.891}{2020/09/12}{\cs{verb} as class \attribute{texttt}.}
 % \changes{v0.895}{2021/01/14}{Improved \HTML\ quotes.}
+% \changes{v0.913}{2023/12/07}{\cs{verb} as class \attribute{verb}.}
+% \changes{v0.913}{2023/12/09}{\cs{verb} in a \env{lateximage}.}
 %    \begin{macrocode}
 \xpretocmd{\verb}
     {%
         \begingroup%
-        \LWR at htmltag{span class=\textquotedbl{}texttt\textquotedbl}%
+        \ifbool{LWR at verbtags}%
+            {\LWR at htmltag{span class=\textquotedbl{}verb\textquotedbl}}%
+            {}%
         \let\verb at egroup\LWR at verb@egroup at endspan%
     }
     {}
@@ -29393,13 +29597,20 @@
 %
 % Create a new |pre| of the given class.
 % The tags may temporarily be turned off for internal use, such
-% as loading the \MathJax\ script.
+% as loading the \MathJax\ script, or inside a \element{span}.
+% \changes{v0.913}{2023/11/07}{Fix: No \element{pre} tags if inside a \element{span}.}
 %    \begin{macrocode}
-\ifbool{LWR at verbtags}{%
-    \LWR at htmltag{pre class=\textquotedbl#2\textquotedbl%
-        \ifthenelse{\equal{#1}{}}{}{ style=\textquotedbl#1\textquotedbl}%
+\ifbool{LWR at verbtags}%
+{%
+    \ifnumcomp{\value{LWR at spandepth}}{=}{0}{%
+        \LWR at htmltag{pre class=\textquotedbl#2\textquotedbl%
+            \ifthenelse{\equal{#1}{}}{}{ style=\textquotedbl#1\textquotedbl}%
+        }%
+        \par%
     }%
-    \par%
+    {% in a span
+        \LWR at spanwarnformat{verbatim}%
+    }%
 }{}%
 %    \end{macrocode}
 %
@@ -29416,20 +29627,36 @@
 %    \begin{macrocode}
 \LWR at print@normalfont%
 \LWR at origttfamily%
-\LWR at print@scriptsize%
 %    \end{macrocode}
+%
+% If not inside a \env{lateximage},
+% use a small font to avoid line overflow.
+% \changes{v0.913}{2023/12/11}{Fix: Verbatim font size in a \env{lateximage}.}
+%    \begin{macrocode}
+\ifnumcomp{\value{LWR at lateximagedepth}}{=}{0}%
+    {\LWR at print@scriptsize}%
+    {}%
+%    \end{macrocode}
+%
 % Since inside a \element{pre}, restore the original list processing:
 %    \begin{macrocode}
 \LWR at restoreoriglists%
 %    \end{macrocode}
+%
 % Turn off \pkg{babel-french} extra space before punctuation:
 %    \begin{macrocode}
 \LWR at hook@processingtags%
 %    \end{macrocode}
+%
 % Do not produce \HTML\ tags for \cs{hspace} inside a verse |par|.
 % Restore plain \LaTeX{} \cs{hspace} functionality:
 %    \begin{macrocode}
 \let\hspace\LWR at print@hspace%
+%    \end{macrocode}
+%
+% Do not produce \HTML\ tags for \cs{nbsp}.
+%    \begin{macrocode}
+\boolfalse{LWR at HTMLsanitize@nobreakspace}%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -29446,7 +29673,11 @@
 %    \end{macrocode}
 % At the end of the environment, close the |pre|:
 %    \begin{macrocode}
-\ifbool{LWR at verbtags}{%
+\ifboolexpr{
+    bool{LWR at verbtags} and
+    test {\ifnumcomp{\value{LWR at spandepth}}{=}{0}}
+}%
+{%
     \noindent\LWR at htmltag{/pre}\par% pre
 }{}%
 %    \end{macrocode}
@@ -29533,6 +29764,7 @@
 % \changes{v0.84}{2020/04/17}{Restore spacing.}
 % \changes{v0.903}{2021/12/20}{Converted to env.}
 % \changes{v0.906}{2022/06/10}{Used \cs{LWR at formatted} for more items.}
+% \changes{v0.913}{2023/12/09}{Added \cs{nobreakspace}.}
 %    \begin{macrocode}
 \newenvironment*{LWR at HTML@tabbing}
 {%
@@ -29541,7 +29773,8 @@
     \let\enskip\LWR at print@enskip%
     \let\quad\LWR at print@quad%
     \let\qquad\LWR at print@qquad%
-    \let~\LWR at origtilde%
+    \LetLtxMacro~\LWR at origtilde%
+    \LetLtxMacro\nobreakspace\LWR at orignobreakspace%
     \let\,\LWR at origcomma%
     \let\thinspace\LWR at print@thinspace%
     \let\negthinspace\LWR at print@negthinspace%
@@ -32444,7 +32677,7 @@
 %    \end{macrocode}
 % Print the class with left and right trim letters appended:
 %    \begin{macrocode}
-            \LWR at origtilde tdrule#1#2%
+            \space tdrule#1#2%
 %    \end{macrocode}
 %   Remember the width of the rule:
 %    \begin{macrocode}
@@ -35241,7 +35474,18 @@
 % \end{macro}
 
 
+% \begin{macro}{\NR at gettitle} \marg{text}
+% From \pkg{nameref}, used by \pkg{caption}.
+% \changes{v0.913}{2023/11/22}{Fix for recent changes in \pkg{caption} with \cs{nameref}.}
+%    \begin{macrocode}
+\def\NR at gettitle#1{%
+  \GetTitleString{#1}%
+  \let\@currentlabelname\GetTitleStringResult
+}
+%    \end{macrocode}
+% \end{macro}
 
+
 % \subsection{Hyper-references}
 %
 % Note that the code currently only sanitizes the underscore character.
@@ -35329,12 +35573,14 @@
 % \changes{v0.45}{2017/12/29}{Improved URLs with underscores.}
 % \changes{v0.57}{2018/06/05}{Fix: Text catcodes.}
 % \changes{v0.895}{2021/01/14}{Improved \HTML\ quotes.}
+% \changes{v0.913}{2023/10/01}{Improved \HTML\ sanitization.}
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at subhyperref}{m}{%
     \LWR at traceinfo{LWR at subhyperref !#1!}%
-    \LWR at sanitize{#1}%
+    \edef\tmpb{\detokenize\expandafter{#1}}%
+    \LWR at HTMLsanitize@tmpb%
     \LWR at htmltag{%
-        a href=\textquotedbl\LWR at sanitized\textquotedbl\ % space
+        a href=\textquotedbl\tmpb\textquotedbl\ % space
         \LWR at addlinktitle % space
         target=\textquotedbl\_{}blank\textquotedbl\ % space
     }%
@@ -35342,14 +35588,33 @@
 %    \end{macrocode}
 % \end{macro}
 
-% \begin{macro}{\LWR at subhyperreftext} \marg{text}
+% \begin{macro}{\LWR at subhyperreftext@sanizited} \marg{text}
 %
 % Finishes the hyperref for \cs{LWR at hrefb}.  Catcodes must have been restored already.
 % To be used after \cs{LWR at subhyperref}, and after its group has been closed.
 %
 % \changes{v0.57}{2018/06/05}{Fix: Text catcodes.}
+% \changes{v0.913}{2023/10/01}{Improved \HTML\ sanitization.}
 %    \begin{macrocode}
-\newcommand{\LWR at subhyperreftext}[1]{%
+\newcommand{\LWR at subhyperreftext@sanitized}[1]{%
+    \edef\tmpb{#1}%
+    \LWR at HTMLsanitize@tmpb%
+    \tmpb%
+    \LWR at htmltag{/a}%
+    \LWR at ensuredoingapar%
+}
+%    \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\LWR at subhyperreftext@unsanitized} \marg{text}
+%
+% Finishes the hyperref for \cs{LWR at hrefb}.  Catcodes must have been restored already.
+% To be used after \cs{LWR at subhyperref}, and after its group has been closed.
+%
+% \changes{v0.57}{2018/06/05}{Fix: Text catcodes.}
+%    \begin{macrocode}
+\newcommand{\LWR at subhyperreftext@unsanitized}[1]{%
     #1%
     \LWR at htmltag{/a}%
     \LWR at ensuredoingapar%
@@ -35358,6 +35623,8 @@
 % \end{macro}
 
 
+
+
 % \begin{macro}{\LWR at subhyperrefclass} \marg{URL} \marg{text} \marg{htmlclass}
 % \changes{v0.18}{2016/04/14}{Improved \HTML\ output linebreaks.}
 % \changes{v0.45}{2017/12/29}{Improved URLs with underscores.}
@@ -35383,7 +35650,8 @@
 
 % \begin{macro}{\LWR at href} \oarg{options} \marg{URL} \marg{text}
 %
-% Create a link with accompanying text:
+% Create a link with accompanying text.
+% The accompanyting text is sanitized for \HTML.
 %
 % \changes{v0.43}{2017/10/31}{Made robust.}
 % \changes{v0.49}{2018/02/18}{Fix: Adapt to classes.}
@@ -35395,7 +35663,12 @@
     \LWR at ensuredoingapar%
     \LWR at subhyperref{#2}%
     \endgroup% restore catcodes
-    \LWR at subhyperreftext%
+%    \end{macrocode}
+% If use \cs{LWR at subhyperreftext@sanitized} here,
+% some forms of text may not expand correctly, and thus break.
+% ^^A   \LWR at subhyperreftext@sanitized% takes the following text as an argument
+%    \begin{macrocode}
+    \LWR at subhyperreftext@unsanitized% takes the following text as an argument
 }
 
 \newrobustcmd*{\LWR at href}{%
@@ -35404,8 +35677,56 @@
     \LWR at hrefb%
 }
 %    \end{macrocode}
+
+% A version which sanitizes both the \acro{URL} and the text.
+% Used by \cs{LWR at url}.
+% \changes{v0.913}{2023/10/04}{Improved \HTML\ sanitization.}
+%    \begin{macrocode}
+\DeclareDocumentCommand{\LWR at hrefb@sanitized}{O{} m}{%
+    \LWR at ensuredoingapar%
+    \LWR at subhyperref{#2}%
+    \endgroup% restore catcodes
+%    \end{macrocode}
+% Used by \cs{LWR at url} to sanitize the text argument before printing.
+%    \begin{macrocode}
+    \LWR at subhyperreftext@sanitized% takes the following text as an argument
+}
+
+\newrobustcmd*{\LWR at href@sanitized}{%
+    \begingroup%
+    \LWR at linkcatcodes%
+    \LWR at hrefb@sanitized%
+}
+%    \end{macrocode}
 % \end{macro}
 
+% \begin{macro}{\LWR at href@partsanitized} \oarg{options} \marg{URL} \marg{text}
+%
+% Create a link with accompanying text.
+% The accompanyting text is not sanitized,
+% for use internally with algorithmically derived tags.
+%
+% \changes{v0.43}{2017/10/31}{Made robust.}
+% \changes{v0.49}{2018/02/18}{Fix: Adapt to classes.}
+% \changes{v0.52}{2018/03/26}{Fix: \progcode{\#}, \progcode{\%}, \progcode{\&}, \progcode{\~}, \progcode{\_} in \URL.}
+% \changes{v0.57}{2018/06/05}{Fix: Text catcodes.}
+% \changes{v0.86}{2020/05/07}{\pkg{hyperref}: Adjusted emulation.}
+%    \begin{macrocode}
+\DeclareDocumentCommand{\LWR at hrefb@partsanitized}{O{} m}{%
+    \LWR at ensuredoingapar%
+    \LWR at subhyperref{#2}%
+    \endgroup% restore catcodes
+    \LWR at subhyperreftext@unsanitized% takes the following text as an argument
+}
+
+\newrobustcmd*{\LWR at href@partsanitized}{%
+    \begingroup%
+    \LWR at linkcatcodes%
+    \LWR at hrefb@partsanitized%
+}
+%    \end{macrocode}
+% \end{macro}
+
 % \begin{macro}{\LWR at nolinkurl} \marg{URL}
 %
 % Print the name of the link without creating the link:
@@ -35413,12 +35734,13 @@
 % \changes{v0.45}{2017/12/29}{Fix: Underscore in \URL.}
 % \changes{v0.52}{2018/03/26}{Fix: \progcode{\#}, \progcode{\%}, \progcode{\&}, \progcode{\~}, \progcode{\_} in \URL.}
 % \changes{v0.86}{2020/05/07}{\pkg{hyperref}: Adjusted emulation.}
+% \changes{v0.913}{2023/10/01}{Improved \HTML\ sanitization.}
 %    \begin{macrocode}
 \newcommand*{\LWR at nolinkurlb}[1]{%
     \LWR at ensuredoingapar%
-    \def\LWR at templink{#1}%
-    \@onelevel at sanitize\LWR at templink%
-    \LWR at templink%
+    \edef\tmpb{#1}%
+    \LWR at HTMLsanitize@tmpb%
+    \tmpb%
     \endgroup%
 }
 
@@ -35446,9 +35768,7 @@
 %    \begin{macrocode}
 \DeclareDocumentCommand{\LWR at urlb}{m}{%
     \LWR at ensuredoingapar%
-    \def\LWR at templink{#1}%
-    \@onelevel at sanitize\LWR at templink%
-    \LWR at href{\LWR at templink}{\LWR at templink}%
+    \LWR at href@sanitized{#1}{#1}%
     \endgroup%
 }
 
@@ -35471,8 +35791,11 @@
 % \changes{v0.74}{2019/08/20}{Add \cs{ThisAltText}.}
 % \changes{v0.895}{2021/01/14}{Improved \HTML\ quotes.}
 % \changes{v0.896}{2021/03/05}{Added \ARIA\ role.}
+% \changes{v0.913}{2023/11/25}{\bool{LWR at HTMLsanitize@tmpb at removebackslash} added.}
 %    \begin{macrocode}
 \newcommand*{\LWR at subinlineimage}[6]{%
+    \begingroup%
+    \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
     \ifblank{#6}%
         {\renewcommand*{\LWR at tempone}{}}%
         {\renewcommand*{\LWR at tempone}{role="#6"\LWR at indentHTML}}%
@@ -35495,6 +35818,7 @@
             class=\textquotedbl#2\textquotedbl \LWR at orignewline
         }%
     }%
+    \endgroup%
 }
 %    \end{macrocode}
 % \end{macro}
@@ -37511,6 +37835,7 @@
     \let\&\LWR at origampersand%
 %    \end{macrocode}
 % \changes{v0.72}{2019/05/24}{Use \cs{LWR at formatted} for \cs{bfseries}, etc.}
+% \changes{v0.013}{2023/12/09}{Added \cs{nobreakspace}.}
 %    \begin{macrocode}
     \LetLtxMacro\em\LWR at origem%
     \LetLtxMacro\normalfont\LWR at orignormalfont%
@@ -37517,7 +37842,8 @@
     \let\sp\LWR at origsp%
     \let\sb\LWR at origsb%
     \LetLtxMacro\underline\LWR at origunderline%
-    \let~\LWR at origtilde%
+    \LetLtxMacro~\LWR at origtilde%
+    \LetLtxMacro\nobreakspace\LWR at orignobreakspace%
 %    \end{macrocode}
 %
 % \cs{endtabular} must be restored to its original,
@@ -38491,6 +38817,7 @@
         {%
             \LWR at traceinfo{LWR at subsingledollar: Mathjax}%
             {%
+                \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
                 \textbackslash(%
                 {%
 %    \end{macrocode}
@@ -38583,6 +38910,7 @@
 %    \begin{macrocode}
     {% intentional blank line:
 
+        \begingroup%
         \IfSubStr{\detokenize\expandafter{#1}}{\detokenize{note}}{%
 %    \end{macrocode}
 %
@@ -38597,6 +38925,7 @@
 % \changes{v0.903}{2021/12/18}{Improved math sanitization.}
 %    \begin{macrocode}
             \InlineClass{hidden}{\LWR at syncnotenumbers}%
+            \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
             \textbackslash[%
             {%
                 \LWR at print@ttfamily%
@@ -38604,7 +38933,9 @@
             }%
             \textbackslash]
             \InlineClass{hidden}{\LWR at syncnotenames}%
-        }{%
+        }% yes note
+        {% no note
+            \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
             \textbackslash[%
             {%
                 \LWR at print@ttfamily%
@@ -38611,7 +38942,8 @@
                 \LWR at HTMLsanitizedetokenized{\detokenize{#1}}%
             }%
             \textbackslash]
-        }%
+        }% no note
+        \endgroup%
 
     }% mathjax
 %    \end{macrocode}
@@ -38666,6 +38998,8 @@
 \protected\gdef\LWR at singledollar#1${%
     \LWR at traceinfo{LWR at singledollar}%
     \ifbool{mathjax}{%
+        \begingroup%
+        \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
         \LWR at subsingledollar*%
         {% alt tag
             \textbackslash( %
@@ -38674,6 +39008,7 @@
         }%
         {singledollar}% add'l hashing
         {#1}% contents
+        \endgroup%
     }{% not mathjax
         \LWR at subsingledollar*%
         {% alt tag
@@ -38735,6 +39070,8 @@
 
 \renewcommand{\@ensuredmath}[1]{%
     \ifbool{mathjax}{%
+        \begingroup%
+        \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
         \LWR at subsingledollar*{\AltTextOpen\MathImageAltText\AltTextClose}%
         {%
             \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#1}}%
@@ -38743,6 +39080,7 @@
             \relax%
             \LWR at origensuredmath{#1}%
         }%
+        \endgroup%
     }{% SVG math
 %    \end{macrocode}
 % If already inside a \env{lateximage} in math mode, continue as-is.
@@ -39034,7 +39372,7 @@
 \NewDocumentCommand{\LWR at addmathjax}{m +m}{%
 %    \end{macrocode}
 %    \begin{macrocode}
-    \LWR at origtilde\LWR at orignewline
+    \LWR at orignobreakspace\LWR at orignewline
 %    \end{macrocode}
 % Enclose the \MathJax\ environment inside printed ``\cs{(}'' and ``\cs{)}'' characters.
 % Print the environment name and contents, sanitizing for \HTML\ special characters.
@@ -39060,6 +39398,7 @@
 % The environment contents and \cs{end}:
 %    \begin{macrocode}
         \LWR at orignewline%
+        \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
         \LWR at HTMLsanitizeexpanded{\detokenize\expandafter{#2}}%
         \LWR at orignewline%
         \textbackslash{}end\{#1\}
@@ -39299,8 +39638,8 @@
 % \end{environment}
 
 
-% Remember the ``less'' version of \env{equation}, which uses \MathJax
-% and \attribute{alt} tags, but does not support complicated contents such as
+% Remember the ``less'' version of \env{equation}, which uses \MathJax\ and
+% \attribute{alt} tags, but does not support complicated contents such as
 % some \TikZ\ expressions.
 %    \begin{macrocode}
 \AtBeginDocument{
@@ -39410,7 +39749,7 @@
 %    \begin{macrocode}
 \newcommand*{\LWR at beginhideamsmath}{
     \LWR at stoppars
-    \LWR at origtilde\LWR at orignewline
+    \LWR at orignobreakspace\LWR at orignewline
     \LWR at htmlopencomment
 
     \begingroup
@@ -39503,6 +39842,7 @@
 %    \begin{macrocode}
         \LWR at syncmathjax%
         \boolfalse{LWR at amsmultline}%
+        \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
         \ifbool{LWR at numbereqnarray}%
         {%
 %    \end{macrocode}
@@ -40028,6 +40368,14 @@
 %    \begin{macrocode}
     \boolfalse{mathjax}%
 %    \end{macrocode}
+%
+% While inside a lateximage, do not use \HTML\ tags for verbatim content,
+% and do not sanitize \HTML\ tags for |<|, |>|, |&|, etc.
+%    \begin{macrocode}
+    \boolfalse{LWR at verbtags}%
+    \boolfalse{LWR at HTMLsanitize@tmpb at enable}%
+%    \end{macrocode}
+%
 % Be sure that are doing a paragraph:
 %    \begin{macrocode}
     \LWR at ensuredoingapar%
@@ -42233,9 +42581,9 @@
                 {\InlineClass{textnormal}{#1}}%
                 {%
                     \InlineClass{%
-                            text\LWR at f@family\LWR at origtilde{}%
-                            text\LWR at f@series\LWR at origtilde{}%
-                            text\LWR at f@shape\LWR at origtilde{}%
+                            text\LWR at f@family\LWR at orignobreakspace{}%
+                            text\LWR at f@series\LWR at orignobreakspace{}%
+                            text\LWR at f@shape\LWR at orignobreakspace{}%
                             text\LWR at f@shapecaps%
                         }%
                         {#1}%
@@ -42256,9 +42604,9 @@
 \newenvironment*{LWR at blocktextcurrentfont}{%
 \LWR at stoppars%
 \BlockClass{%
-        text\LWR at f@family\LWR at origtilde{}%
-        text\LWR at f@series\LWR at origtilde{}%
-        text\LWR at f@shape\LWR at origtilde{}%
+        text\LWR at f@family\LWR at orignobreakspace{}%
+        text\LWR at f@series\LWR at orignobreakspace{}%
+        text\LWR at f@shape\LWR at orignobreakspace{}%
         text\LWR at f@shapecaps%
     }%
 }{\endBlockClass\LWR at startpars}
@@ -42675,6 +43023,19 @@
 \begin{warpHTML}
 %    \end{macrocode}
 %
+%
+% \DescribeBoolean{LWR at HTMLsanitize@nobreakspace}
+% Used to disable the |nbsp| entity inside verbatims \element{pre} sections,
+% but not inside inline verbatims where spacing must be preserved by \element{nbsp}.
+%
+% (\pkg{fvextra} used |~| which showed as \element{nbsp}.)
+% \changes{v0.913}{2023/12/16}{Disable \element{nbsp} inside verbatims.}
+%    \begin{macrocode}
+\newbool{LWR at HTMLsanitize@nobreakspace}
+\booltrue{LWR at HTMLsanitize@nobreakspace}
+%    \end{macrocode}
+%
+%
 % \cs{,} and \cs{thinspace} may be redefined by other packages, so
 % are redefined \cs{AtBeginDocument} here.
 %
@@ -42685,19 +43046,44 @@
 % \changes{v0.61}{2018/09/23}{Spaces redefined \cs{AtBeginDocument}.}
 % \changes{v0.88}{2020/07/03}{Added \cs{vdots}.}
 % \changes{v0.906}{2022/06/10}{Used \cs{LWR at formatted} for more items.}
+% \changes{v0.913}{2023/12/09}{Added \cs{nobreakspace}.}
 %    \begin{macrocode}
 \AtBeginDocument{%
+%
 \renewrobustcmd*{\,}{\HTMLunicode{202f}}% HTML thin non-breakable space, not using LWR at formatted
+%
 \newrobustcmd*{\LWR at HTML@thinspace}{\HTMLunicode{202f}}% HTML thin non-breakable space
 \LWR at formatted{thinspace}
+%
 \newrobustcmd*{\LWR at HTML@negthinspace}{\HTMLunicode{202f}}    % HTML thin non-breakable space
 \LWR at formatted{negthinspace}
-\renewrobustcmd*{~}{\HTMLentity{nbsp}}% cannot use \LWR at formatted
+%    \end{macrocode}
+%
+% Cannot use \cs{LWR at formatted} for |~| or \cs{nobreakspace}.
+%    \begin{macrocode}
+\renewrobustcmd*{~}{%
+    \ifbool{LWR at HTMLsanitize@nobreakspace}%
+        {\leavevmode\nobreak\HTMLentity{nbsp}}%
+        {\LWR at orignobreakspace}%
+}
+
+\LetLtxMacro\nobreakspace~
+%    \end{macrocode}
+%
+% \cs{?-\string\nobreakspace} seems to be necessary for packages such as \pkg{ctexbook},
+% where this is used at the end of the document.
+%    \begin{macrocode}
+\expandafter\LetLtxMacro\csname ?-\string\nobreakspace\endcsname~
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 \newrobustcmd*{\LWR at HTML@textellipsis}{\HTMLunicode{2026}}
 \LWR at formatted{textellipsis}
+%
 \newrobustcmd*{\LWR at HTML@vdots}{\HTMLunicode{22EE}}
 \LWR at formatted{vdots}
-}
+%
+}% AtBeginDocument
 %    \end{macrocode}
 %
 % Direct-formatting font sizes are remembered for future use:
@@ -45787,7 +46173,7 @@
         {
             \LWR at endhideamsmath
             \boolfalse{LWR at amsmultline}
-            \LWR at addmathjax{#2}{\the\@envbody}
+            \LWR at addmathjax{#2}{\the\@envbody}%
         }
         {\LWR at amsmathenv@@after}
 %    \end{macrocode}
@@ -46384,8 +46770,44 @@
 %
 %
 %
+% \iffalse
+%<*apxproof>
+% \fi
 %
+% \part{lwarp-apxproof.sty}
+%
+% \section{apxproof}
+%
+% \credits{Pierre Senellart}
+%
+% \DescribePackage{apxproof}
+% \pkg{apxproof} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.913}{2024/01/02}{\pkg{apxproof}: Added for \pkg{fancyvrb} changes.}
+%
+% \codehtml
+%
+%    \begin{macrocode}
+\LWR at ProvidesPackagePass{apxproof}[2022/10/14]
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\xpatchcmd{\FVB at axp@VerbatimOut}
+    {\FV at Scan}
+    {\boolfalse{LWR at HTMLsanitize@tmpb at enable}\FV at Scan}
+    {}
+    {\LWR at patcherror{apxproof}{FVB at axp@VerbatimOut}}
+%    \end{macrocode}
+%
 % \iffalse
+%</apxproof>
+% \fi
+%
+%
+%
+%
+%
+% \iffalse
 %<*ar>
 % \fi
 %
@@ -46917,7 +47339,7 @@
 % A file annotation becomes a reference:
 %    \begin{macrocode}
 \DeclareRobustCommand{\atfi at insert@file at annot}[1]{%
-    \LWR at href{#1}{\LWR at attachfile@appearance}%
+    \LWR at href@partsanitized{#1}{\LWR at attachfile@appearance}%
 }
 %    \end{macrocode}
 
@@ -47015,7 +47437,7 @@
 % A file annotation becomes a reference:
 %    \begin{macrocode}
 \DeclareRobustCommand{\atfi at insert@file at annot}[1]{%
-    \LWR at href{#1}{\LWR at attachfile@appearance}%
+    \LWR at href@partsanitized{#1}{\LWR at attachfile@appearance}%
 }
 %    \end{macrocode}
 %
@@ -49082,7 +49504,12 @@
 \NewDocumentCommand{\LWR at burlaltb}{O{} +m m}{%
     \LWR at ensuredoingapar%
     \LWR at subhyperref{#2}%
-    \LWR at subhyperreftext{#3}%
+%    \end{macrocode}
+% If use \cs{LWR at subhyperreftext@sanitized} here,
+% some forms of text may not expand correctly, and thus break.
+% ^^A   \LWR at subhyperreftext@sanitized% takes the following text as an argument
+%    \begin{macrocode}
+    \LWR at subhyperreftext@unsanitized{#3}%
     \endgroup% restore catcodes
 }
 
@@ -49268,7 +49695,10 @@
     \CustomizeMathJax{\require{bussproofs}}
 
     \NewEnviron{LWR at HTML@prooftree}%
-        {\LWR at doequation{\BODY}{prooftree}}%
+        {%
+            \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
+            \LWR at doequation{\BODY}{prooftree}%
+        }%
         [\LWR at doendequation{prooftree}]
     \LWR at formattedenv{prooftree}
 }{% SVG HTML
@@ -49478,6 +49908,7 @@
 % \changes{v0.84}{2020/04/20}{\pkg{caption}: Non-width \cs{parbox}es.}
 % \changes{v0.89}{2020/08/25}{\pkg{caption}: Adapt to v3.5.}
 % \changes{v0.893}{2020/11/26}{\pkg{caption}: Updated date to v3.5g.}
+% \changes{v0.913}{2023/11/24}{\pkg{caption}: Updated to v3.6o.}
 %
 % \codehtml
 %
@@ -49490,7 +49921,7 @@
 \typeout{instead of: \protect\usepackage[options]\protect{caption\protect}.}
 \typeout{---}
 
-\LWR at ProvidesPackagePass{caption}[2020/10/26]
+\LWR at ProvidesPackagePass{caption}[2023/08/05]
 %    \end{macrocode}
 %
 % ^^A This could be given a permanent standardized name, then redefined by lwarp.
@@ -49500,7 +49931,7 @@
   \caption at iiibox{#1}{#2}{#3}%
 %         [\wd\@tempboxa]%
         []%                             lwarp
-        [\captionbox at hj@default]%
+        [\captionbox at innerpos@default]%
 %         {\unhbox\@tempboxa}%
         {{#4}}%                         lwarp
 }
@@ -49524,7 +49955,7 @@
 %       #2%
             {\caption#4{#5}}%
 %       \captionbox at hrule
-%       \csname caption at hj@#7\endcsname
+%       \csname caption at justification@#7\endcsname
       #8%
     }%
   }{%
@@ -49539,7 +49970,7 @@
     \parbox[b]{\linewidth}{%            lwarp
       #1\relax
       \caption at setposition b%
-%       \csname caption at hj@#7\endcsname
+%       \csname caption at justification@#7\endcsname
       #8%
 %       \captionbox at hrule
 %       #3
@@ -49633,11 +50064,12 @@
 %
 % \changes{v0.89}{2020/08/25}{\pkg{caption3}: Split from \pkg{lwarp-caption}.}
 % \changes{v0.893}{2020/11/26}{\pkg{caption3}: Updated date to v2.2e.}
+% \changes{v0.913}{2023/11/24}{\pkg{caption3}: Updated to v2.4d.}
 %
 % \codehtml
 %
 %    \begin{macrocode}
-\LWR at ProvidesPackagePass{caption3}[2020/10/21]
+\LWR at ProvidesPackagePass{caption3}[2023/07/31]
 %    \end{macrocode}
 %
 %
@@ -49659,10 +50091,25 @@
 % ^^A This could be factored out into a macro with a standard name
 % ^^A which lwarp could nullify:
 %    \begin{macrocode}
-%   \sbox\@tempboxa{#1}%
-%   \ifdim\wd\@tempboxa=\z@
-%     \caption at set{labelseparator}{none}%
-%   \fi
+%  \ifx\caption at fmt\@undefined\caption at format\fi
+%  \let\caption at lfmt\caption at labelformat
+%  \global\def\caption at tempa{gobbletwo}%
+%  \global\def\caption at tempb{}%
+%  \sbox\@tempboxa{%
+%    \let\caption at ignorespaces\ignorespaces
+%    \def\ignorespaces{%
+%      \global\def\caption at tempb{two}% "gobble" -> "gobbletwo"
+%                       % if \ignorespaces is used addtionally
+%      \caption at ignorespaces}%
+%    #1%
+%      {\global\let\caption at tempa\@undefined\aftergroup\@gobble}%
+%      {\global\def\caption at tempa{gobble\caption at tempb}}}%
+%  \ifdim\wd\@tempboxa=\z@
+%    \gdef\caption at tempa{none}%
+%  \fi
+%  \ifx\caption at tempa\@undefined \else
+%    \@expandtwoargs\caption at set{labelseparator}{\caption at tempa}%
+%  \fi
   \caption at ifempty{#2}{%
     \caption at set{labelseparator}{none}%
     \caption at set{textformat}{simple}%
@@ -53286,6 +53733,89 @@
 %    \end{macrocode}
 % \end{noindmacro}
 
+
+
+% \begin{noindmacro}{\rowc at l@rs} \oarg{cmds} \marg{startrow} \marg{odd color} \marg{even color}
+% \changes{v0.913}{2024/01/03}{\pkg{colortbl}: Moved row colors code from \pkg{xcolor}.}
+%    \begin{macrocode}
+\newcommand*{\LWR at xcolortempcolor}{}
+
+\def\rowc at l@rs[#1]#2#3#4%
+{%
+   \rownum=1%
+   \@rowcolorstrue%
+   \@ifxempty{#3}%
+     {\def\@oddrowcolor{\@norowcolor}}%
+     {%
+        \convertcolorspec{named}{#3}{HTML}\LWR at xcolortempcolor%
+        \edef\@oddrowcolor{%
+            \csdef{LWR at xcolorrowHTMLcolor}{\LWR at xcolortempcolor}%
+        }%
+     }%
+   \@ifxempty{#4}%
+     {\def\@evenrowcolor{\@norowcolor}}%
+     {%
+        \convertcolorspec{named}{#4}{HTML}\LWR at xcolortempcolor%
+        \edef\@evenrowcolor{%
+            \csdef{LWR at xcolorrowHTMLcolor}{\LWR at xcolortempcolor}%
+        }%
+     }%
+   \if at rowcmd
+     \def\@rowcolors
+     {%
+%         #1%
+        \if at rowcolors
+%         \noalign{%
+            \relax\ifnum\rownum<#2\@norowcolor\else
+            \ifodd\rownum\@oddrowcolor\else\@evenrowcolor\fi\fi%
+%          }%
+        \fi%
+     }%
+   \else
+     \def\@rowcolors
+     {%
+        \if at rowcolors
+            \ifnum\rownum<#2%
+%            \noalign{%
+                \@norowcolor
+%             }
+            \else
+%            #1%
+%            \noalign{%
+                \ifodd\rownum\@oddrowcolor\else\@evenrowcolor\fi%
+%             }%
+            \fi
+        \fi%
+     }%
+   \fi
+   \ignorespaces%
+}
+%    \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\@norowcolor} Turns off color for this row.
+%    \begin{macrocode}
+\def\@norowcolor{%
+    \renewcommand{\LWR at xcolorrowHTMLcolor}{}%
+}
+%    \end{macrocode}
+% \end{noindmacro}
+% 
+
+% \begin{noindmacro}{\@rowc at lors} Executed at the end of each row.
+% \changes{v0.79}{2020/01/18}{\pkg{xcolor}: Fix: Nested \env{tabular}s.}
+%    \begin{macrocode}
+\def\@rowc at lors{%
+%   \noalign{%
+        \advance\rownum\@ne%
+%   }%
+    \@rowcolors%
+}
+%    \end{macrocode}
+% \end{noindmacro}
+
+
+
 % For \MathJax, use the \MathJax\ package.
 % The unused macro options are ignored.
 % \changes{v0.894}{2020/12/22}{\pkg{colortbl}: Added \MathJax\ emulation.}
@@ -54082,7 +54612,63 @@
 %
 %
 %
+%
 % \iffalse
+%<*doipubmed>
+% \fi
+%
+% \part{lwarp-doipubmed.sty}
+%
+% \section{doipubmed}
+%
+% \credits{Nicola Talbot}
+%
+% \DescribePackage{doipubmed}
+% \pkg{doipubmed} is patched for use by \pkg{lwarp}.
+%
+% \changes{v0.913}{2023/11/23}{\pkg{doipubmed}: Added.}
+%
+% \codehtml
+%
+%    \begin{macrocode}
+\LWR at ProvidesPackagePass{doipubmed}[2007/08/20]
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\renewcommand*{\doi}[1]{%
+\def\@doi at code{}%
+\@doi at linksubs#1\#\@@\@doi at code
+\@onelevel at sanitize{\@doi at code}%
+\def\@doi at text{}%
+\@doi at textsubs#1\@nil\@@\@doi at text
+\xpretocmd{\@doi at code}{http://dx.doi.org/}%
+\href\expandafter{\@doi at code}{\doitext{\@doi at text}}}
+%    \end{macrocode}
+%
+% Must not modify catcodes before using \cs{url}:
+%    \begin{macrocode}
+\DeclareDocumentCommand{\LWR at citeurlb}{m}{%
+    \LWR at ensuredoingapar%
+    \textless%
+    \LWR at href@sanitized{#1}{#1}%
+    \textgreater%
+    \endgroup%
+}
+
+\renewrobustcmd*{\citeurl}{%
+    \begingroup%
+    \LWR at linkcatcodes%
+    \LWR at citeurlb%
+}
+%    \end{macrocode}
+%
+% \iffalse
+%</doipubmed>
+% \fi
+%
+%
+%
+% \iffalse
 %<*DotArrow>
 % \fi
 %
@@ -56525,7 +57111,7 @@
 % \changes{v0.902}{2021/09/29}{\pkg{fancybox}: Improved footnote par tags.}
 %    \begin{macrocode}
 \def\V@@@footnotetext{%
-    \LWR at origtilde\LWR at orignewline%
+    \LWR at orignobreakspace\LWR at orignewline%
     \LWR at htmltagc{/\LWR at tagregularparagraph}\LWR at orignewline%
     \strut\egroup%
 }
@@ -56598,7 +57184,7 @@
 % This is a tabular, and does not use \cs{item}.
 %
 % \begin{noindmacro}{Btrivlist} \marg{l/c/r} \oarg{t/c/b}
-% \changes{v0.73}{2019/06/24}{\pkg{fancyvrb}: \env{Btrivlist}: Fixed paragraph tags.}
+% \changes{v0.73}{2019/06/24}{\pkg{fancybox}: \env{Btrivlist}: Fixed paragraph tags.}
 %    \begin{macrocode}
 \RenewDocumentEnvironment{Btrivlist}{m o}
 {%
@@ -56716,7 +57302,44 @@
 %
 % Low-level patches for \env{UseVerbatim} and friends:
 %
+% \changes{v0.903}{2024/01/03}{\pkg{fancybox}: Sanitize verbatim.}
 %    \begin{macrocode}
+\def\Verbatim at List#1{%
+  \if at minipage\else\vskip\parskip\fi
+  \leftskip\@totalleftmargin
+  \@rightskip\@flushglue \rightskip\@rightskip
+  \parindent\z@
+  \parskip\z@
+  \parfillskip\@flushglue
+  \hfuzz\VerbatimFuzz\relax
+  \@@par
+  \global\@inlabelfalse  %Prevents vspace from being inserted when
+  \Verbatim at Prep         %first line exceeds \hsize.
+%  #1%
+    \expandafter\def\expandafter\tmpb\expandafter{#1}%  lwarp
+    \LWR at HTMLsanitize@tmpb%                             lwarp
+    \tmpb%                                              lwarp
+  \Verbatim at Par}%
+
+\def\Verbatim@@Input{%
+  \let\protect\noexpand
+  \LetLtxMacro\tmpb\The at Verbatim%   lwarp
+  \LWR at HTMLsanitize@tmpb%           lwarp
+  \edef\The at Verbatim{%
+    \noexpand\Every at VerbatimLine
+%    \The at Verbatim
+    \tmpb%                          lwarp
+    \ifeof\Verbatim at Infile\else\noexpand\Verbatim at Par\fi}%
+  \let\protect\relax
+  \The at Verbatim
+  \ifeof\Verbatim at Infile\else
+    \let\The at Verbatim\The at GVerbatim
+    \def\The at GVerbatim{}\Verbatim at NextLine
+    \expandafter\Verbatim@@Input
+  \fi}%
+
+
+
 \let\LWRFB at UseVerbatim\UseVerbatim
 \renewcommand*{\UseVerbatim}[1]{%
     \LWR at atbeginverbatim{Verbatim}%
@@ -57020,17 +57643,21 @@
 % The label is placed inside a \element{div} of class \attribute{fancyvrblabel}.
 % The verbatim text itself is placed inside a \element{div} of class \attribute{verbatim}.
 %
+% For an inline \cs{Verb}, the verbatim is placee inside a \element{span}
+% of class \attribute{fancyvrb}.
+%
 % \limitsverbatimfootnotes
 %
 % \changes{v0.34}{2017/07/27}{\pkg{fancyvrb}: Added, no longer required.}
 % \changes{v0.45}{2018/01/07}{\pkg{fancyvrb}: Improvements.}
 % \changes{v0.52}{2018/03/29}{\pkg{fancyvrb}: Initial support for \cs{VerbatimFootnotes}.}
+% \changes{v0.913}{2023/12/04}{\pkg{fancyvrb}: Updated to v4.5b.}
 %
 %
 %    \begin{macrocode}
 \AtBeginDocument{\RequirePackage{xcolor}}% for \convertcolorspec
 
-\LWR at ProvidesPackagePass{fancyvrb}[2008/02/07]
+\LWR at ProvidesPackagePass{fancyvrb}[2023/11/06]
 %    \end{macrocode}
 %
 % Initial default patch for fancyvrb:
@@ -57038,13 +57665,303 @@
 \fvset{frame=none}%
 %    \end{macrocode}
 %
-% After the preamble is loaded, after any patches to \env{Verbatim}:
+
+% Gobble does not work with \HTML\ sanitization,
+% so if gobbling is non-zero then turn off \HTML\ sanitization.
 %    \begin{macrocode}
+\define at key{FV}{gobble}{%
+  \@tempcnta=#1\relax
+  \ifnum\@tempcnta<\@ne
+    \let\FV at Gobble\relax
+  \else
+    \ifnum\@tempcnta>9
+      \FV at Error{gobble parameter must be less than 10}\FV at eha
+    \else
+      \renewcommand{\FV@@@@Gobble}[\@tempcnta]{}%
+      \let\FV at Gobble\FV@@Gobble%
+      \boolfalse{LWR at HTMLsanitize@tmpb at enable}%     lwarp
+    \fi
+  \fi}
+%    \end{macrocode}
+
+
+
+% \begin{noindmacro}{\FancyVerbSpace}
+% Force the use of a vibible space instead of an empty box.
+% \changes{v0.913}{2023/12/04}{\pkg{fancyvrb}: Fixed visible space from kernel change.}
+%    \begin{macrocode}
+\ifxetexorluatex
+\def\LWR at HTML@FancyVerbSpace{\textvisiblespace}
+\else
+\@ifundefined{verbvisiblespace}%
+  {%
+    \@ifundefined{textvisiblespace}%
+    {\begingroup\catcode`\ =12 \gdef\LWR at HTML@FancyVerbSpace{\tt }\endgroup}
+    {\def\LWR at HTML@FancyVerbSpace{\textvisiblespace}}
+  }%
+  {\def\LWR at HTML@FancyVerbSpace{\verbvisiblespace}} 
+\fi
+\LWR at formatted{FancyVerbSpace}
+%    \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\FancyVerbTab}
+% Set the visible tab.
+% Unicode |240B| (SYMBOL FOR HORIZONTAL TABULATION)
+% and |21E5| (RIGHTWARDS ARROW TO BAR)
+% both gave unindended new lines at each tab,
+% so a simple pipe character is used instead.
+%
+% For the print mode, the \pkg{fancyvrb} definition does not copy,
+% so a simplified version is used.
+% \changes{v0.913}{2023/12/04}{\pkg{fancyvrb}: Set visible tab character.}
+%    \begin{macrocode}
+\def\LWR at print@FancyVerbTab{|}
+\def\LWR at HTML@FancyVerbTab{|}%
+\LWR at formatted{FancyVerbTab}
+%    \end{macrocode}
+% \end{noindmacro}
+
+
+%    \begin{macrocode}
+\fvset{tabsize=8,showtabs=false}
+%    \end{macrocode}
+
+
+%
+% \begin{noindmacro}{\FV at CatCodes}
+%    \begin{macrocode}
+\def\FV at CatCodes{%
+  \let\do\@makeother\dospecials  % The usual stuff.
+  \FV at ActiveWhiteSpace           % See below.
+  \FV at FontScanPrep               % See below.
+  \FV at CatCodesHook               % A style hook.
+  \FancyVerbCodes                % A user-defined hook.
+  \catcode`\>=12%                % lwarp
+  \catcode`\<=12%                % lwarp
+}
+%    \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\FV at GetLine}
+% Added the catcode changes for |<| and|>| to avoid
+% the effect of \cs{@noligs} for these characters.
+% They were being made active and thus would not be sensed by the
+% search/replace to sanitize.
+%
+% This code is sensitive to the use of |%|, and for some reason does not work
+% \watchout
+% if \cs{expandafter} immediately follows the |<| catcode change.
+% \changes{v0.913}{2023/10/04}{\pkg{fancyvrb}: Sanitize \HTML.}
+%    \begin{macrocode}
+\def\FV at GetLine{%
+    \@noligs%
+    \catcode`\>=12%     lwarp, and the next line as well
+% for some reason, there must not be a % after the following 12:
+    \catcode`\<=12
+%
+    \expandafter\FV at CheckScan\FancyVerbGetLine%
+}
+%    \end{macrocode}
+
+% Modified to sanitize \HTML.
+% \cs{LWR at HTMLsanitize@tmpb} is included in \cs{FV at Line},
+% so it will adjust if used inside an \env{lateximage}.
+% \changes{v0.913}{2023/10/11}{\pkg{fancyvrb}: Sanitize \HTML.}
+%    \begin{macrocode}
+\begingroup
+\catcode`\^^M=\active%
+\gdef\FancyVerbGetLine#1^^M{%
+  \@nil%
+  \FV at CheckEnd{#1}%
+  \ifx\@tempa\FV at EnvironName%            % True if end is found
+    \ifx\@tempb\FV@@@CheckEnd\else\FV at BadEndError\fi%
+    \let\next\FV at EndScanning%
+  \else%
+    \ifbool{LWR at HTMLsanitize@tmpb at enable}%                 lwarp
+        {\def\FV at Line{\LWR at HTMLsanitize@use at tmpb{#1}}}%     lwarp
+        {\def\FV at Line{#1}}%                                 lwarp
+    \def\next{\FV at PreProcessLine\FV at GetLine}%
+  \fi%
+  \next}%
+\endgroup
+%    \end{macrocode}
+% \end{noindmacro}
+%
+%
+%
+% \begin{noindmacro}{\FV at List} \marg{R/L margin 0/1}
+%
+% Modified to always allow line wrapping because added \HTML\ tags may
+% make run off the end of the line in the \PDF\ output file before conversion to \HTML.
+%    \begin{macrocode}
+\def\FV at List#1{%
+  \begingroup
+  \FV at UseKeyValues
+  \FV at LeaveVMode
+  \if at inlabel\else\setbox\@labels=\box\voidb at x\fi
+  \FV at ListNesting{#1}%
+  \FV at ListParameterHook
+  \FV at ListVSpace
+  \FV at SetLineWidth
+  \FV at InterLinePenalty
+%  \let\FV at ProcessLine\FV at ListProcessLine@i
+  \let\FV at ProcessLine\FV at ListProcessLine%           lwarp
+  \FV at CatCodes
+  \FV at FormattingPrep
+  \FV at ObeyTabsInit
+  \FV at BeginListFrame}
+%    \end{macrocode}
+% \end{noindmacro}
+%
+% \begin{noindmacro}{\FV at ListProcessLine} \marg{text}
+%
+% Processes each line, adding optional line numbers.
+% Modified to always allow line wrapping because added \HTML\ tags may
+% make run off the end of the line in the \PDF\ output file before conversion to \HTML.
+%    \begin{macrocode}
+\def\FV at ListProcessLine#1{%
+   \hbox to \hsize{%
+%      \kern\leftmargin
+      \hbox to \VerbatimHTMLWidth {%
+       \ifcsvoid{FV at LeftListNumber}{}{\kern 2.5em}%
+        \FV at LeftListNumber%
+%       \FV at LeftListFrame
+      \FancyVerbFormatLine{#1}%
+      \hss%
+%       \FV at RightListFrame
+      \FV at RightListNumber%
+    }%
+      \hss% required to avoid underfull hboxes
+}
+}
+%    \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\FVC at SaveVerb} \marg{name} \marg{character}
+%
+% Modified to sanitize \HTML\ when stored.
+% Sanitizing on use would be too late to adjust catcodes.
+% \cs{LWR at HTMLsanitize@tmpb} is included in the saved macro, so
+% if inside a \env{lateximage}, \cs{LWR at HTMLsanitize@tmp} does nothing.
+% \changes{v0.913}{2023/10/11}{\pkg{fancyvrb}: Sanitize \HTML.}
+%    \begin{macrocode}
+\begingroup
+\catcode`\^^M=\active%
+\gdef\FVC at SaveVerb#1#2{%
+  \@namedef{FV at SV@#1}{}%
+  \begingroup%
+    \FV at UseKeyValues%
+    \FV at CatCodes%
+    \outer\def^^M{\FV at EOL}%
+    \global\let\@tempg\FancyVerbAfterSave%
+    \catcode`#2=12%
+    \def\@tempa{\def\FancyVerbGetVerb####1####2}%
+%    \expandafter\@tempa\string#2{\endgroup\@namedef{FV at SV@#1}{##2}\@tempg}%
+    \expandafter\@tempa\string#2{%
+        \endgroup%
+        \@namedef{FV at SV@#1}{%
+%            ##2%
+            \LWR at HTMLsanitize@use at tmpb{##2}%    lwarp
+        }\@tempg%
+    }%
+    \FancyVerbGetVerb\FV at EOL}%
+\endgroup
+%    \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\FV at UseVerb} \marg{macro}
+%
+% Adds a \element{span}.
+%    \begin{macrocode}
+\def\FV at UseVerb#1{%
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{span class=\textquotedbl{}fancyvrb\textquotedbl}}% lwarp
+        {}%                             lwarp
+    \mbox{\FV at UseKeyValues\FV at FormattingPrep#1}%
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{/span}}%          lwarp
+        {}%                             lwarp
+}
+%    \end{macrocode}
+% \end{noindmacro}
+
+
+
+%
+%
+% \begin{noindmacro}{\FVC at Verb} \marg{character}
+%
+% Modified to sanitize \HTML.
+% \changes{v0.913}{2023/10/04}{\pkg{fancyvrb}: Sanitize \HTML.}
+%    \begin{macrocode}
+\begingroup
+\catcode`\^^M=\active%
+\gdef\FVC at Verb#1{%
+  \begingroup%
+    \FV at UseKeyValues%
+    \FV at FormattingPrep%
+    \FV at CatCodes%
+    \outer\def^^M{}%
+    \catcode`#1=12%
+    \def\@tempa{\def\FancyVerbGetVerb####1####2}%
+    \expandafter\@tempa\string#1{%
+        \ifbool{LWR at verbtags}%                  lwarp                                
+            {%                                  lwarp
+                \LWR at htmltag{span class=\textquotedbl{}fancyvrb\textquotedbl}%  lwarp
+                \def\tmpb{##2}%                 lwarp
+                \LWR at HTMLsanitize@tmpb%         lwarp
+                \mbox{\tmpb}%                   lwarp
+                \LWR at htmltag{/span}%            lwarp
+            }% lwarp
+            {\mbox{##2}}%
+        \endgroup%
+    }%
+    \FancyVerbGetVerb\FV at EOL%
+}%
+\endgroup
+%    \end{macrocode}
+% \end{noindmacro}
+%
+%
+%
+% \begin{noindmacro}{\FV at ReadLine}
+% Modified to sanitize \HTML.
+% \changes{v0.913}{2023/10/08}{\pkg{fancyvrb}: Sanitize \HTML.}
+%    \begin{macrocode}
+\begingroup
+\catcode`\^^M=\active
+\gdef\FV at ReadLine{%
+  \ifeof\FV at InFile\else
+%    \immediate\read\FV at InFile to\@tempa%
+%    \expandafter\FV@@ReadLine\@tempa^^M\relax^^M\@nil%
+    \immediate\read\FV at InFile to\tmpb%
+    \LWR at HTMLsanitize@tmpb%
+    \expandafter\FV@@ReadLine\tmpb^^M\relax^^M\@nil%
+  \fi}
+\endgroup
+%    \end{macrocode}
+% \end{noindmacro}
+%
+%
+% \begin{noindmacro}{\LWR at FVstyle} Holds the style of the verbatim.
+%    \begin{macrocode}
+\newcommand*{\LWR at FVstyle}{}
+%    \end{macrocode}
+% \end{noindmacro}
+%
+%
+% After the preamble is loaded, after any patches to \env{Verbatim},
+% such as by \pkg{fvextra}:
+%    \begin{macrocode}
 \AfterEndPreamble{
+
 \LWR at traceinfo{Patching fancyvrb.}
 %    \end{macrocode}
-%
-%
+
 % \begin{noindmacro}{\VerbatimFootnotes}
 % Patched to use the new version.
 %    \begin{macrocode}
@@ -57090,8 +58007,19 @@
 %    \begin{macrocode}
     \renewrobustcmd{\textsuperscript}[1]{\LWR at htmlspan{sup}{##1}}%
 %    \end{macrocode}
+%
+% Verbatim tags and \HTML\ sanitization will have been turned off
+% inside a \env{lateximage}, such as in \SVG\ math,
+% so turn them on here so they will be active in the \HTML\ footnotes.
+% \changes{v0.913}{2023/12/09}{\pkg{fancyvrb}: Improved \HTML\ sanitization.}
+%    \begin{macrocode}
+    \booltrue{LWR at verbtags}%
+    \booltrue{LWR at HTMLsanitize@tmpb at enable}%
+%    \end{macrocode}
+
+
 % Use paragraph tags if in a tabular data cell or a \env{lateximage}:
-% \changes{v0.66}{2019/02/02}{Improved \HTML\ formatting.}
+% \changes{v0.66}{2019/02/02}{\pkg{fancyvrb}: Improved \HTML\ formatting.}
 % \changes{v0.902}{2021/09/29}{\pkg{fancyvrb}: Improved footnote par tags.}
 %    \begin{macrocode}
     \LWR at htmltagc{\LWR at tagregularparagraph}\LWR at orignewline%
@@ -57118,10 +58046,11 @@
 % \end{noindmacro}
 %
 % \begin{noindmacro}{\V@@@footnotetext}
+% Improves \element{par}.
 % \changes{v0.902}{2021/09/29}{\pkg{fancyvrb}: Improved footnote par tags.}
 %    \begin{macrocode}
 \def\V@@@footnotetext{%
-    \LWR at origtilde\LWR at orignewline%
+    \LWR at orignobreakspace\LWR at orignewline%
     \LWR at htmltagc{/\LWR at tagregularparagraph}\LWR at orignewline%
     \strut\egroup%
 }
@@ -57129,6 +58058,9 @@
 % \end{noindmacro}
 %
 %
+% \begin{noindmacro}{\FVB at Verbatim}
+% \begin{noindmacro}{\FVB at LVerbatim}
+% Prevents unexpected page break in the \PDF\ output before \HTML\ conversion.
 % \changes{v0.45}{2018/01/07}{\pkg{fancyvrb}: Improvements.}
 %    \begin{macrocode}
 \preto\FVB at Verbatim{\LWR at forcenewpage}
@@ -57135,70 +58067,107 @@
 \preto\FVB at LVerbatim{\LWR at forcenewpage}
 % \preto\FVB at BVerbatim{\LWR at forcenewpage}% Fails, so done below.
 %    \end{macrocode}
+% \end{noindmacro}
+% \end{noindmacro}
 %
+%
 % Simplified to remove \PDF\ formatting:
 % \changes{v0.45}{2018/01/07}{\pkg{fancyvrb}: Improvements.}
 %    \begin{macrocode}
-\def\FV at BeginListFrame@Single{%
+\def\LWR at HTML@FV at BeginListFrame@Single{%
   \FV at SingleFrameLine{\z@}%
 }
+\LWR at formatted{FV at BeginListFrame@Single}
 
-\def\FV at EndListFrame@Single{%
+\def\LWR at HTML@FV at EndListFrame@Single{%
   \FV at SingleFrameLine{\@ne}%
 }
+\LWR at formatted{FV at EndListFrame@Single}
 
-\def\FV at BeginListFrame@Lines{%
+\def\LWR at HTML@FV at BeginListFrame@Lines{%
   \FV at SingleFrameLine{\z@}%
 }
+\LWR at formatted{FV at BeginListFrame@Lines}
 
-\def\FV at EndListFrame@Lines{%
+\def\LWR at HTML@FV at EndListFrame@Lines{%
     \FV at SingleFrameLine{\@ne}%
 }
+\LWR at formatted{FV at EndListFrame@Lines}
 
-\renewcommand*{\FV at SingleFrameSep}{}
+\newcommand*{\LWR at HTML@FV at SingleFrameSep}{}%
+\LWR at formatted{FV at SingleFrameSep}
 %    \end{macrocode}
 %
-% Adds \HTML\ formatting:
-% \changes{v0.891}{2020/09/12}{\pkg{fancyvrb}: Fix: \env{BVerbatim} with labels.}
-%    \begin{macrocode}
-\def\FV at BUseVerbatim#1{%
-    \FV at BVerbatimBegin#1\FV at BVerbatimEnd%
-}
-%    \end{macrocode}
 
 
-% \begin{macro}{\LWR at FVstyle} Holds the style of the verbatim.
-%    \begin{macrocode}
-\newcommand*{\LWR at FVstyle}{}
-%    \end{macrocode}
-% \end{macro}
 %
 % The following patches to \env{Verbatim} are executed at the
 % start and end of the environment, depending on the choice of |frame|.
-% Original code is from the \pkg{fancyvrb} package.
+%
+% \begin{noindmacro}{\LWR at fvstartnone}
+% Wraps label in a \element{div} of class \attribute{fancyvrblabel}.
 % \changes{v0.73}{2019/06/26}{\pkg{fancyvrb}: Fix: Nested \element{div}/\element{pre}.}
-% \changes{v0.895}{2021/01/14}{Improved \HTML\ quotes.}
+% \changes{v0.895}{2021/01/14}{\pkg{fancyvrb}: Improved \HTML\ quotes.}
 %    \begin{macrocode}
 \newcommand*{\LWR at fvstartnone}{%
 \LWR at traceinfo{fvstartnone}%
 % \hbox to\z@{
-\BlockClass[\LWR at FVstyle]{fancyvrb}
+%    \end{macrocode}
+%
+% If the current text sytle is empty, do not print an \HTML\ style.
+% \changes{v0.913}{2023/12/04}{\pkg{fancyvrb}: No style if empty.}
+%    \begin{macrocode}
+    \ifdefstring{\LWR at FVstyle}{\LWR at currenttextcolorstyle}%
+        {%
+            \LWR at findcurrenttextcolor%
+            \ifdefstring{\LWR at tempcolor}{000000}%
+                {\BlockClass{fancyvrb}}%
+                {\BlockClass[\LWR at FVstyle]{fancyvrb}}%
+        }%
+        {%
+            \BlockClass[\LWR at FVstyle]{fancyvrb}%
+        }%
+%    \BlockClass[\LWR at FVstyle]{fancyvrb}%
+%    \end{macrocode}
+%
+% \changes{v0.913}{2023/12/04}{\pkg{fancyvrb}: Color style.}
+%    \begin{macrocode}
 \LWR at stoppars
 \ifx\FV at LabelPositionTopLine\relax\else
     \ifx\FV at LabelBegin\relax\else
         \FancyVerbRuleColor{\LWR at FVfindbordercolor}
-        \LWR at htmltagc{%
-            div class=\textquotedbl{}fancyvrblabel\textquotedbl\ % space
-                style=\textquotedbl{}color: \LWR at origpound\LWR at tempcolor\textquotedbl%
-        }
+        \ifbool{LWR at verbtags}%      lwarp
+            {%                      lwarp
+                \LWR at findcurrenttextcolor%
+                \LWR at htmltagc{%     lwarp
+                    div class=\textquotedbl{}fancyvrblabel\textquotedbl\ % space
+                        style=\textquotedbl{}%
+                            color: \LWR at origpound\LWR at tempcolor%
+                        \textquotedbl%
+                }%
+                \LWR at orignewline%   lwarp
+            }%                      lwarp
+            {}%                     lwarp
         \LWR at print@textrm{\FV at LabelBegin}% \textrm preserves emdash
-        \LWR at htmltagc{/div}\LWR at orignewline%
+        \LWR at orignewline%               lwarp
+        \ifbool{LWR at verbtags}%          lwarp
+            {%                          lwarp
+                \LWR at htmltagc{/div}%    lwarp
+                \LWR at orignewline%       lwarp
+            }%                          lwarp
+            {}%                         lwarp
     \fi
 \fi
 \LWR at atbeginverbatim{verbatim}%
-% }%
+% }% hbox
 }
+%    \end{macrocode}
+% \end{noindmacro}
 
+% \begin{noindmacro}{\LWR at fvendnone}
+% Wraps label in a \element{div} of class \attribute{fancyvrblabel}.
+% \changes{v0.913}{2023/12/04}{\pkg{fancyvrb}: Color style.}
+%    \begin{macrocode}
 \newcommand*{\LWR at fvendnone}{%
 \LWR at traceinfo{fvendnone}%
 % \hbox to\z@{
@@ -57206,18 +58175,36 @@
 \LWR at stoppars%
 \ifx\FV at LabelPositionBottomLine\relax\else
     \ifx\FV at LabelEnd\relax\else
-        \FancyVerbRuleColor{\LWR at FVfindbordercolor}
-        \LWR at htmltagc{%
-            div class=\textquotedbl{}fancyvrblabel\textquotedbl\ % space
-                style=\textquotedbl{}color: \LWR at origpound\LWR at tempcolor\textquotedbl%
-        }
-        \LWR at print@textrm{\FV at LabelEnd}
-        \LWR at htmltagc{/div}\LWR at orignewline%
+        \FancyVerbRuleColor{\LWR at FVfindbordercolor}%    lwarp
+        \ifbool{LWR at verbtags}%                          lwarp
+            {%                                          lwarp
+                \LWR at findcurrenttextcolor%
+                \LWR at htmltagc{%                 lwarp
+                    div class=\textquotedbl{}fancyvrblabel\textquotedbl\ % space
+                        style=\textquotedbl{}%
+                            color: \LWR at origpound\LWR at tempcolor%
+                        \textquotedbl%
+                }%
+                \LWR at orignewline%               lwarp
+            }%                                  lwarp
+            {}%                                 lwarp
+        \LWR at print@textrm{\FV at LabelEnd}%        lwarp
+        \LWR at orignewline%                       lwarp
+        \ifbool{LWR at verbtags}%                  lwarp
+            {%                                  lwarp
+                \LWR at htmltagc{/div}%            lwarp
+                \LWR at orignewline%               lwarp
+            }%                                  lwarp
+            {}%                                 lwarp
     \fi
 \fi
-\endBlockClass
+\endBlockClass%     lwarp
+% }% hbox
 }
+%    \end{macrocode}
+% \end{noindmacro}
 
+%    \begin{macrocode}
 \newcommand*{\LWR at fvstartsingle}{%
 \LWR at traceinfo{fvstartsingle}%
 \LWR at fvstartnone%
@@ -57248,7 +58235,6 @@
 %
 % The following patches select the start/left/right/end
 % behaviors depending on |frame|.
-% Original code is from the \pkg{fancyvrb} package.
 %    \begin{macrocode}
 \newcommand*{\LWR at FVfindbordercolor}{%
 \FancyVerbRuleColor%
@@ -57264,16 +58250,17 @@
 solid {\FancyVerbRuleColor{\LWR at origpound\LWR at tempcolor}} ; % space
 }
 
-\def\FV at Frame@none{%
+\def\LWR at HTML@FV at Frame@none{%
 \renewcommand*{\LWR at FVstyle}{\LWR at currenttextcolorstyle}%
 \let\FV at BeginListFrame\LWR at fvstartnone%
 \let\FV at LeftListFrame\relax%
 \let\FV at RightListFrame\relax%
 \let\FV at EndListFrame\LWR at fvendnone}
+\LWR at formatted{FV at Frame@none}
 
 \FV at Frame@none% default values
 
-\def\FV at Frame@single{%
+\def\LWR at HTML@FV at Frame@single{%
 \renewcommand*{\LWR at FVstyle}{%
     \LWR at currenttextcolorstyle\LWR at indentHTMLtwo%
     \LWR at FVborderstyle{}%
@@ -57282,8 +58269,9 @@
 \let\FV at LeftListFrame\FV at LeftListFrame@Single%
 \let\FV at RightListFrame\FV at RightListFrame@Single%
 \let\FV at EndListFrame\LWR at fvendsingle}
+\LWR at formatted{FV at Frame@single}
 
-\def\FV at Frame@lines{%
+\def\LWR at HTML@FV at Frame@lines{%
 \renewcommand*{\LWR at FVstyle}{%
     \LWR at currenttextcolorstyle\LWR at indentHTMLtwo%
     \LWR at FVborderstyle{-top}%
@@ -57294,8 +58282,9 @@
 \let\FV at LeftListFrame\relax%
 \let\FV at RightListFrame\relax%
 \let\FV at EndListFrame\LWR at fvendline}
+\LWR at formatted{FV at Frame@lines}
 
-\def\FV at Frame@topline{%
+\def\LWR at HTML@FV at Frame@topline{%
 \renewcommand*{\LWR at FVstyle}{%
     \LWR at currenttextcolorstyle\LWR at indentHTMLtwo%
     \LWR at FVborderstyle{-top}%
@@ -57304,8 +58293,9 @@
 \let\FV at LeftListFrame\relax%
 \let\FV at RightListFrame\relax%
 \let\FV at EndListFrame\LWR at fvendnone}
+\LWR at formatted{FV at Frame@topline}
 
-\def\FV at Frame@bottomline{%
+\def\LWR at HTML@FV at Frame@bottomline{%
 \renewcommand*{\LWR at FVstyle}{%
     \LWR at currenttextcolorstyle\LWR at indentHTMLtwo%
     \LWR at FVborderstyle{-bottom}%
@@ -57314,20 +58304,26 @@
 \let\FV at LeftListFrame\relax%
 \let\FV at RightListFrame\relax%
 \let\FV at EndListFrame\LWR at fvendline}
+\LWR at formatted{FV at Frame@bottomline}
 %    \end{macrocode}
 %
-% Seems to be required in some situations:
+% Seems to be required in some situations.
+% Is not \cs{LWR at formatted} because it is defined as needed.
 % \changes{v0.892}{2020/10/06}{\pkg{fancyvrb}: Provided \cs{FV at FrameFillLine}.}
 %    \begin{macrocode}
-\def\FV at FrameFillLine{}%
+\def\FV at FrameFillLine{}
 %    \end{macrocode}
+%
 %    \begin{macrocode}
-\def\FV at Frame@leftline{%
+\def\LWR at HTML@FV at Frame@leftline{%
 \renewcommand*{\LWR at FVstyle}{%
     \LWR at currenttextcolorstyle\LWR at indentHTMLtwo%
     \LWR at FVborderstyle{-left}%
 }%
-% To define the \FV at FrameFillLine macro (from \FV at BeginListFrame)
+%    \end{macrocode}
+%
+% To define the \cs{FV at FrameFillLine} macro (from \cs{FV at BeginListFrame})
+%    \begin{macrocode}
 \ifx\FancyVerbFillColor\relax%
 \let\FV at FrameFillLine\relax%
 \else%
@@ -57341,13 +58337,14 @@
 \let\FV at LeftListFrame\FV at LeftListFrame@Single%
 \let\FV at RightListFrame\relax%
 \let\FV at EndListFrame\LWR at fvendnone}
+\LWR at formatted{FV at Frame@leftline}
 %    \end{macrocode}
 %
+% \begin{noindmacro}{\FV at SingleFrameLine}
 % Adds the optional label to the top and bottom edges.
-% Original code is from the \pkg{fancyvrb} package.
 % \changes{v0.73}{2019/06/26}{\pkg{fancyvrb}: Fix: Nested \element{div}/\element{pre}.}
 %    \begin{macrocode}
-\def\FV at SingleFrameLine#1{%
+\def\LWR at HTML@FV at SingleFrameLine#1{%
 %   \hbox to\z@{%
 %     \kern\leftmargin
     \ifnum#1=\z@\relax
@@ -57373,54 +58370,19 @@
 %     \hss
 %     }
 }
+\LWR at formatted{FV at SingleFrameLine}
 %    \end{macrocode}
+% \end{noindmacro}
 %
-% Processes each line, adding optional line numbers.
-% Original code is from the \pkg{fancyvrb} package.
-%    \begin{macrocode}
-\def\FV at ListProcessLine#1{%
-   \hbox to \hsize{%
-%      \kern\leftmargin
-      \hbox to \VerbatimHTMLWidth {%
-       \ifcsvoid{FV at LeftListNumber}{}{\kern 2.5em}%
-        \FV at LeftListNumber%
-%       \FV at LeftListFrame
-      \FancyVerbFormatLine{#1}%
-      \hss%
-%       \FV at RightListFrame
-      \FV at RightListNumber%
-    }%
-      \hss% required to avoid underfull hboxes
-}
-}
-%    \end{macrocode}
 
-% \changes{v0.892}{2020/10/05}{\pkg{fancyvrb}: Adapted to \pkg{fvextra}.}
-%    \begin{macrocode}
-\def\FV at ListProcessLine@i#1{%
-%   \hbox{%
-    \ifvoid\@labels\else
-      \hbox to \z@{\kern\@totalleftmargin\box\@labels\hss}%
-    \fi
-    \FV at ListProcessLine{#1}%
-%   }%
-%   \let\FV at ProcessLine\FV at ListProcessLine@ii%
-}
-%    \end{macrocode}
 
-% \changes{v0.892}{2020/10/05}{\pkg{fancyvrb}: Adapted to \pkg{fvextra}.}
-%    \begin{macrocode}
-\def\FV at ListProcessLastLine{}
-%    \end{macrocode}
-
-
-% \begin{environment}{BVerbatim}
+% \begin{noindenvironment}{BVerbatim}
+% Adds \pkg{lwarp} verbatim patches.
 % \changes{v0.891}{2020/09/12}{\pkg{fancyvrb}: Fix: \env{BVerbatim} with labels.}
 %    \begin{macrocode}
-
 \xpretocmd{\FV at BeginVBox}
     {%
-        \LWR at forcenewpage% instead of \preto
+        \LWR at forcenewpage%
         \LWR at atbeginverbatim{bverbatim}%
     }
     {}
@@ -57433,7 +58395,7 @@
     {}
     {\LWR at patcherror{fancyvrb}{FV at EndVBox}}
 %    \end{macrocode}
-% \end{environment}
+% \end{noindenvironment}
 
 % End of the modifications to make at the end of the preamble:
 %    \begin{macrocode}
@@ -57440,6 +58402,27 @@
 } % \AfterEndPreamble
 %    \end{macrocode}
 
+
+
+%    \begin{macrocode}
+\def\FVB at VerbatimOut#1{%
+  \@bsphack
+  \begingroup
+    \FV at UseKeyValues
+    \FV at DefineWhiteSpace
+    \def\FV at Space{\space}%
+    \FV at DefineTabOut
+    \def\FV at ProcessLine{\immediate\write\FV at OutFile}%
+    \immediate\openout\FV at OutFile #1\relax
+    \let\FV at FontScanPrep\relax
+%% DG/SR modification begin - May. 18, 1998 (to avoid problems with ligatures)
+    \let\@noligs\relax
+%% DG/SR modification end
+  \boolfalse{LWR at HTMLsanitize@tmpb at enable}%        lwarp
+    \FV at Scan}
+%    \end{macrocode}
+
+
 % \iffalse
 %</fancyvrb>
 % \fi
@@ -59292,9 +60275,9 @@
 
 % \let\fn at endnote\color at endgroup% *** conflicts with lwarp
 \def\fn at endnote{%
-    \LWR at origtilde\LWR at orignewline%
+    \LWR at orignobreakspace\LWR at orignewline%
     \LWR at htmltagc{/\LWR at tagregularparagraph}\LWR at orignewline%
-    \LWR at origtilde\LWR at orignewline%
+    \LWR at orignobreakspace\LWR at orignewline%
 }
 %    \end{macrocode}
 %
@@ -59319,7 +60302,7 @@
 %    \begin{macrocode}
 \def\fn at endfntext{%
     \fn at postfntext%
-    \LWR at origtilde\LWR at orignewline%
+    \LWR at orignobreakspace\LWR at orignewline%
     \LWR at htmltagc{/\LWR at tagregularparagraph}%
     \LWR at orignewline%
   \egroup%
@@ -60106,47 +61089,45 @@
 %
 % \changes{v0.892}{2020/10/05}{\pkg{fvextra}: Added.}
 % \changes{v0.910}{2022/12/15}{\pkg{fvextra}: Updated to v1.5.}
+% \changes{v0.913}{2023/12/05}{\pkg{fvextra}: Updated to v1.6.1.}
 %
 % \codehtml
 %
 %    \begin{macrocode}
-\LWR at ProvidesPackagePass{fvextra}[2022/11/30]
+\LWR at ProvidesPackagePass{fvextra}[2023/11/28]
 %    \end{macrocode}
 %
-% Ignored are \optn{highlight},
-%   \optn{showtabs}, \optn{obeytabs}, \optn{tab}, \optn{tabcolor}.
-%   Also ignored are all options regarding line breaking
-%   except \optn{breaklines}, which is emulated as true.
-%
-% \optn{tabsize} is honored.
-%
 % If line numbers on the right side are used along with \optn{breaklines},
 % the line numbers will not be aligned.
 %    \begin{macrocode}
 \define at booleankey{FV}{obeytabs}%
 %   {\let\FV at ObeyTabsInit\FV@@ObeyTabsInit}%
+  {\let\FV at ObeyTabsInit\relax}%     lwarp
   {\let\FV at ObeyTabsInit\relax}
-  {\let\FV at ObeyTabsInit\relax}
+%    \end{macrocode}
 
-\define at key{FV}{tabcolor}%
- {}
+% \optn{tabcolor} causes extra \HTML\ tags, destroying the verbatim text alignment,
+% so \optn{tabcolor} is ignored.
+%    \begin{macrocode}
+\define at key{FV}{tabcolor}{}%
+%    \end{macrocode}
 
-\define at key{FV}{tab}{}
-
+% \changes{v0.910}{2023/12/04}{\pkg{fvextra}: Improved tabs.}
+%    \begin{macrocode}
 \define at booleankey{FV}{showtabs}%
-%  {\def\FV at TabChar{\FV at TabColor{\FancyVerbTab}}}%
+ {\def\FV at TabChar{\FV at TabColor{\FancyVerbTab}}}%
  {\let\FV at TabChar\relax}
- {\let\FV at TabChar\relax}
 
 \newbool{LWR at FV@breaklines}
 
 \define at booleankey{FV}{breaklines}%
-  {\boolfalse{FV at breaklines}
-    \booltrue{LWR at FV@breaklines}
+  {\boolfalse{FV at breaklines}%
+    \booltrue{LWR at FV@breaklines}%                           lwarp
+%  \let\FV at ListProcessLine\FV at ListProcessLine@Break}%
+    \let\FV at ListProcessLine\FV at ListProcessLine@NoBreak}%   lwarp
+  {\boolfalse{FV at breaklines}%
+    \boolfalse{LWR at FV@breaklines}%                          lwarp
     \let\FV at ListProcessLine\FV at ListProcessLine@NoBreak}
-  {\boolfalse{FV at breaklines}
-    \boolfalse{LWR at FV@breaklines}
-    \let\FV at ListProcessLine\FV at ListProcessLine@NoBreak}
 % \fvset{breaklines}
 
 \define at key{FV}{breakanywheresymbolpre}{\def\FancyVerbBreakAnywhereSymbolPre{}}
@@ -60175,7 +61156,52 @@
 
 \define at key{FV}{breaksymbolright}{\def\FancyVerbBreakSymbolRight{}}
 \fvset{breaksymbolright={}}
+%    \end{macrocode}
 
+
+% Modified to insert a fixed-width space (\cs{nobreakspace}) to indent the
+% left margin on indented code, but also allow a line break if needed (\cs{allowbreaK}),
+% to allow for break lines.
+% \changes{v0.913}{2023/11/26}{\pkg{fvextra}: Improved indentation.}
+%    \begin{macrocode}
+\def\FV at DefFVSpace{%
+  \ifbool{FV at showspaces}%
+     {%
+        \def\FV at Space{%
+            \FV at SpaceColor{\FancyVerbSpace}%
+            \allowbreak%
+        }%
+     }%
+    {\def\FV at Space{\nobreakspace\allowbreak}}%
+}
+%    \end{macrocode}
+
+
+% \begin{noindmacro}{\FancyVerbSpace}
+% Force the use of a vibible space instead of an empty box.
+% From \pkg{fancyvrb}.
+% \changes{v0.913}{2023/11/25}{\pkg{fvextra}: Fixed visible space from kernel change.}
+%    \begin{macrocode}
+\ifxetexorluatex
+\def\FancyVerbSpace{\textvisiblespace}
+\else
+\@ifundefined{verbvisiblespace}%
+  {%
+    \@ifundefined{textvisiblespace}%
+    {\begingroup\catcode`\ =12 \gdef\FancyVerbSpace{\tt }\endgroup}
+    {\def\FancyVerbSpace{\textvisiblespace}}
+  }%
+  {\def\FancyVerbSpace{\verbvisiblespace}} 
+\fi
+%    \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\FV at ListProcessLine@NoBreak} \marg{text}
+%
+% Modified to always allow line wrapping because added \HTML\ tags may
+% make run off the end of the line in the \PDF\ output file before conversion to \HTML.
+%    \begin{macrocode}
 \def\FV at ListProcessLine@NoBreak#1{%
 %   \hbox to \hsize{%
 %     \kern\leftmargin
@@ -60191,8 +61217,10 @@
 %     \hss}%
 \null\par%                   lwarp
 }
-
-
+%    \end{macrocode}
+% \end{noindmacro}
+%
+%    \begin{macrocode}
 \newcommand*{\LWR at FV@linethensep}{%
     \ifbool{LWR at FV@breaklines}%
         {\theFancyVerbLine\kern\FV at NumberSep}%
@@ -60205,79 +61233,249 @@
         {\hbox to\z@{\kern\FV at NumberSep\theFancyVerbLine\hss}}%
 }
 
-\xpatchcmd{\FV at Numbers@left}
+\xpatchcmd{\FV at Numbers@left}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@left A}}
 
-\xpatchcmd{\FV at Numbers@left}
+\xpatchcmd{\FV at Numbers@left}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@left B}}
 
-\xpatchcmd{\FV at Numbers@left}
+\xpatchcmd{\FV at Numbers@left}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@left C}}
 
-\xpatchcmd{\FV at Numbers@right}
+\xpatchcmd{\FV at Numbers@right}%
     {\hbox to\z@{\kern\FV at NumberSep\theFancyVerbLine\hss}}
     {\LWR at FV@septhenline}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@right A}}
 
-\xpatchcmd{\FV at Numbers@right}
+\xpatchcmd{\FV at Numbers@right}%
     {\hbox to\z@{\kern\FV at NumberSep\theFancyVerbLine\hss}}
     {\LWR at FV@septhenline}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@right B}}
 
-\xpatchcmd{\FV at Numbers@right}
+\xpatchcmd{\FV at Numbers@right}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@right C}}
 
-\xpatchcmd{\FV at Numbers@both}
+\xpatchcmd{\FV at Numbers@both}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@both A}}
 
-\xpatchcmd{\FV at Numbers@both}
+\xpatchcmd{\FV at Numbers@both}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@both B}}
 
-\xpatchcmd{\FV at Numbers@both}
+\xpatchcmd{\FV at Numbers@both}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@both C}}
 
-\xpatchcmd{\FV at Numbers@both}
+\xpatchcmd{\FV at Numbers@both}%
     {\hbox to\z@{\kern\FV at NumberSep\theFancyVerbLine\hss}}
     {\LWR at FV@septhenline}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@both D}}
 
-\xpatchcmd{\FV at Numbers@both}
+\xpatchcmd{\FV at Numbers@both}%
     {\hbox to\z@{\kern\FV at NumberSep\theFancyVerbLine\hss}}
     {\LWR at FV@septhenline}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@both E}}
 
-\xpatchcmd{\FV at Numbers@both}
+\xpatchcmd{\FV at Numbers@both}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@both F}}
 %    \end{macrocode}
+
+% \begin{noindmacro}{\FVC at SaveVerb@Extra at ii} \marg{name} \marg{raw text} \marg{text}
 %
+% Modified to add \cs{LWR at HTMLsanitize@use at tmb} to the stored macro.
+% This is used on recall to sanitize for \HTML\ unless in a \env{lateximage}.
+% \changes{v0.913}{2023/10/01}{\pkg{fvextra}: Improved \HTML\ sanitization.}
+%    \begin{macrocode}
+\def\FVC at SaveVerb@Extra at ii#1#2#3{%
+  \global\let\FV at AfterSave\FancyVerbAfterSave
+  \endgroup
+%  \@namedef{FV at SV@#1}{#3}%
+   \@namedef{FV at SV@#1}{\LWR at HTMLsanitize@use at tmpb{#3}}%     lwarp
+%  \@namedef{FV at SVRaw@#1}{#2}%
+  \@namedef{FV at SVRaw@#1}{\LWR at HTMLsanitize@use at tmpb{#2}}%   lwarp
+  \FV at AfterSave}%
+%    \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\FV at UseVerb@Extra} \marg{text}
+%
+% Adds the opening and closing tags.
+%    \begin{macrocode}
+\def\FV at UseVerb@Extra#1{%
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{span class=\textquotedbl{}fancyvrb\textquotedbl}}%  lwarp
+        {}%                             lwarp
+  \ifFV at breaklines
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi
+  {\FV at InsertBreaks{\FancyVerbFormatInline}{#1}}%
+  {\mbox{#1}}%
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{/span}}%          lwarp
+        {}%                             lwarp
+  \endgroup}
+%    \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\FVC at Verb@Extra at ii} \marg{text}
+%
+% Sanitize \HTML.
+%    \begin{macrocode}
+\def\FVC at Verb@Extra at ii#1{%
+    \def\tmpb{#1}%                                                  lwarp
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{span class=\textquotedbl{}fancyvrb\textquotedbl}}%  lwarp
+        {}%                                             lwarp
+    \LWR at HTMLsanitize@tmpb%                             lwarp
+  \ifFV at breaklines
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi
+  {\FV at InsertBreaks{\FancyVerbFormatInline}{\tmpb}}%    lwarp
+  {\mbox{\tmpb}}%                                       lwarp
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{/span}}%          lwarp
+        {}%                             lwarp
+  \endgroup}
+%    \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\FVC at EscVerb@ii} \marg{text}
+%
+% Santize \HTML.
+% \changes{v0.913}{2023/12/07}{\pkg{fvextra}: Updated to v1.6.1.}
+%    \begin{macrocode}
+\def\FVC at EscVerb@ii#1{%
+  \def\tmpb{#1}%                        lwarp
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{span class=\textquotedbl{}fancyvrb\textquotedbl}}%  lwarp
+        {}%                             lwarp        
+  \LWR at HTMLsanitize@tmpb%               lwarp
+  \ifFV at breaklines
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi
+%  {\FV at InsertBreaks{\FancyVerbFormatInline}{#1}}%
+%  {\mbox{#1}}%
+  {\FV at InsertBreaks{\FancyVerbFormatInline}{\tmpb}}%    lwarp
+  {\mbox{\tmpb}}%                                       lwarp
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{/span}}%          lwarp
+        {}%                             lwarp
+  \endgroup}
+%    \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\FVB at VerbatimWrite}
+% Disable santizing \HTML\ while writing the file.
+% \HTML\ will be sanitized on \cs{VerbatimInput}.
+% \changes{v0.913}{2023/12/07}{\pkg{fvextra}: Updated to v1.6.1.}
+%    \begin{macrocode}
+\xpatchcmd{\FVB at VerbatimWrite}
+    {\FV at Scan}
+    {\boolfalse{LWR at HTMLsanitize@tmpb at enable}\FV at Scan}
+    {}
+    {\LWR at patcherror{fvextra}{FVB at VerbatimWrite}}
+%    \end{macrocode}
+% \end{noindmacro}
+
+% \begin{noindmacro}{\FVB at VerbatimBuffer}
+% Disable santizing \HTML\ while writing the buffer.
+% \HTML\ will be sanitized on \cs{VerbatimInsertBuffer}.
+% \changes{v0.913}{2023/12/07}{\pkg{fvextra}: Updated to v1.6.1.}
+%    \begin{macrocode}
+\xpatchcmd{\FVB at VerbatimBuffer}
+    {\FV at Scan}
+    {\boolfalse{LWR at HTMLsanitize@tmpb at enable}\FV at Scan}
+    {}
+    {\LWR at patcherror{fvextra}{FVB at VerbatimBuffer}}
+%    \end{macrocode}
+% \end{noindmacro}
+
+
+% \begin{noindmacro}{\VerbatimInsertBuffer}
+% \changes{v0.913}{2023/12/28}{\pkg{fvextra}: Updated to v1.6.1.}
+%    \begin{macrocode}
+\renewcommand{\VerbatimInsertBuffer}[1][]{%
+  \begingroup
+  \def\FV at KeyValues{#1}%
+  \def\FV at Scan{%
+    \FV at CatCodes
+    \xdef\FV at EnvironName{Verbatim}%
+    \ifnum\expandafter\value\expandafter{\FV at bufferlengthname}=\z@\relax
+      \PackageError{fvextra}%
+       {Buffer length counter \FV at bufferlengthname\space is invalid or zero}%
+       {}%
+      \let\FV at GetLine\relax
+    \fi
+    \FV at GetLine}%
+  \let\FV at CheckScan\relax
+  \setcounter{FancyVerbBufferIndex}{1}%
+  \def\VerbatimInsertBuffer at def@FV at Line##1{%
+    \FVExtraRetokenizeVArg{\def\FV at Line}{}{##1}%
+    \LetLtxMacro\tmpb\FV at Line%      lwarp
+    \LWR at HTMLsanitize@tmpb%         lwarp
+    \LetLtxMacro\FV at Line\tmpb%      lwarp
+  }%
+  \def\FancyVerbGetLine{%
+    \ifnum\value{FancyVerbBufferIndex}>%
+        \expandafter\value\expandafter{\FV at bufferlengthname}\relax
+      \global\let\FV at EnvironName\relax
+      \let\next\relax
+    \else
+      \ifcsname \FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}\endcsname
+        \expandafter\let\expandafter\FV at Line@Buffer
+          \csname\FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}\endcsname
+        \expandafter\VerbatimInsertBuffer at def@FV at Line\expandafter{\FV at Line@Buffer}%
+        \def\next{\FV at PreProcessLine\FV at GetLine}%
+        \stepcounter{FancyVerbBufferIndex}%
+      \else
+        \def\next{%
+          \PackageError{fvextra}%
+           {Buffer with line macro named
+            "\FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}" does not exist}%
+           {Check bufferlinename, bufferlengthname, and globalbuffer settings}%
+        }%
+      \fi
+    \fi
+    \next}%
+  \FVB at Verbatim
+  \FVE at Verbatim
+  \setcounter{FancyVerbBufferIndex}{0}%
+  \endgroup}
+%    \end{macrocode}
+% \end{noindmacro}
+
 % \iffalse
 %</fvextra>
 % \fi
@@ -61292,7 +62490,7 @@
 %    \end{macrocode}
 % Start the image tag on a new line, allow \PDF\ output word wrap:
 %    \begin{macrocode}
-    \LWR at origtilde \LWR at orignewline%
+    \LWR at orignobreakspace \LWR at orignewline%
 %    \end{macrocode}
 % Temporarily compute \cs{linewidth}, \cs{textwidth}, \cs{textheight} arguments with a 6x9 inch size
 % until the next \cs{endgroup}.
@@ -61397,9 +62595,11 @@
 %
 % Create the \HTML\ reference with the graphicspath, filename, extension,
 % alt tag, style, and class:
+% \changes{v0.913}{2023/11/25}{\pkg{graphics}: \bool{LWR at HTMLsanitize@tmpb at removebackslash} added.}
 %    \begin{macrocode}
     \LWR at traceinfo{LWR at includegraphicsb: about to create href}%
-    \LWR at href{\LWR at parsedfilename}%
+    \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
+    \LWR at href@partsanitized{\LWR at parsedfilename}%
     {% start of href
         \LWR at traceinfo{LWR at includegraphicsb: about to LWR at htmltag}%
         \LWR at htmltag{\LWR at ig@htmltag}%
@@ -62641,13 +63841,14 @@
 % \changes{v0.45}{2017/12/29}{\pkg{hyperref}: Fix: Underscore in \URL.}
 % \changes{v0.52}{2018/03/26}{\pkg{hyperref}: Fix: \progcode{\#}, \progcode{\%}, \progcode{\&}, \progcode{\~}, \progcode{\_} in \URL.}
 % \changes{v0.895}{2021/01/14}{Improved \HTML\ quotes.}
+% \changes{v0.913}{2023/10/01}{Improved \HTML\ sanitization.}
 %    \begin{macrocode}
 \NewDocumentCommand{\LWR at hyperimageb}{m +m}{%
     \LWR at ensuredoingapar%
-    \def\LWR at templink{#1}%
-    \@onelevel at sanitize\LWR at templink%
+    \edef\tmpb{#1}%
+    \LWR at HTMLsanitize@tmpb%
     \LWR at htmltag{%
-        img src=\textquotedbl\LWR at templink\textquotedbl\ %
+        img src=\textquotedbl\tmpb\textquotedbl\ %
         alt=\textquotedbl#2\textquotedbl\ %
         class=\textquotedbl{}hyperimage\textquotedbl%
     }%
@@ -70440,13 +71641,16 @@
 % \changes{v0.892}{2020/10/07}{\pkg{minted}: Added.}
 % \changes{v0.903}{2022/01/02}{\pkg{minted}: Updated to v2.6.}
 % \changes{v0.910}{2022/12/15}{\pkg{minted}: Updated to v2.7.}
+% \changes{v0.913}{2023/11/17}{\pkg{minted}: Updated to v2.8.}
+% \changes{v0.913}{2023/11/17}{\pkg{minted}: Added \HTML\ sanitization.}
 %
 % \codehtml
 %
 %    \begin{macrocode}
-\LWR at ProvidesPackagePass{minted}[2022/12/12]
+\LWR at ProvidesPackagePass{minted}[2023/09/12]
 %    \end{macrocode}
 %
+% Several options are forced, since they are unsupported by \pkg{lwarp}.
 %    \begin{macrocode}
 \renewcommand{\setminted}[2][]{%
   \ifthenelse{\equal{#1}{}}%
@@ -70471,7 +71675,14 @@
         #2,
         mathescape=false,breaklines,texcomments=false,highlightlines={}% lwarp
     }}}
-
+%    \end{macrocode}
+%
+% \bool{LWR at HTMLsanitize@tmpb at enable} is used to turn off
+% \HTML\ sanitization early in the verbatim conversion,
+% otherwise \pkg{minted} would then colorize the sanitized results,
+% breaking the \HTML\ entities in \pkg{lwarp}'s \HTML\ output.
+%
+%    \begin{macrocode}
 \xpatchcmd{\RobustMintInlineProcess}
     {\setkeys{minted at opt@cmd}{#1}}
     {%
@@ -70479,6 +71690,9 @@
             #1,%
             mathescape=false,breaklines,texcomments=false,highlightlines={}%
         }%
+        \ifbool{minted at draft}%
+            {\booltrue{LWR at HTMLsanitize@tmpb at enable}}%
+            {\boolfalse{LWR at HTMLsanitize@tmpb at enable}}%
     }
     {}
     {\LWR at patcherror{minted}{minted}}
@@ -70490,6 +71704,9 @@
             #1,%
             mathescape=false,breaklines,texcomments=false,highlightlines={}%
         }%
+        \ifbool{minted at draft}%
+            {\booltrue{LWR at HTMLsanitize@tmpb at enable}}%
+            {\boolfalse{LWR at HTMLsanitize@tmpb at enable}}%
     }
     {}
     {\LWR at patcherror{minted}{minted}}
@@ -70501,6 +71718,9 @@
             #1,%
             mathescape=false,breaklines,texcomments=false,highlightlines={}%
         }%
+        \ifbool{minted at draft}%
+            {\booltrue{LWR at HTMLsanitize@tmpb at enable}}%
+            {\boolfalse{LWR at HTMLsanitize@tmpb at enable}}%
     }
     {}
     {\LWR at patcherror{minted}{minted}}
@@ -70511,33 +71731,16 @@
             #1,%
             mathescape=false,breaklines,texcomments=false,highlightlines={}%
         }%
+        \ifbool{minted at draft}%
+            {\booltrue{LWR at HTMLsanitize@tmpb at enable}}%
+            {\boolfalse{LWR at HTMLsanitize@tmpb at enable}}%
     }
     {}
     {\LWR at patcherror{minted}{inputminted}}
+%    \end{macrocode}
 
 
-
-%\xpatchcmd{\mintinline}
-%    {\setkeys{minted at opt@cmd}{#1}}
-%    {\setkeys{minted at opt@cmd}{%
-%            #1,%
-%            mathescape=false,breaklines,texcomments=false,highlightlines={}%
-%        }%
-%    }
-%    {}
-%    {\LWR at patcherror{minted}{mintinline}}
-
-%\xpatchcmd{\mint}
-%    {\setkeys{minted at opt@cmd}{#1}}
-%    {%
-%        \setkeys{minted at opt@cmd}{%
-%            #1,%
-%            mathescape=false,breaklines,texcomments=false,highlightlines={}%
-%        }%
-%    }
-%    {}
-%    {\LWR at patcherror{minted}{mint}}
-
+%    \begin{macrocode}
 \renewenvironment{minted at snugshade*}[1]%
 {%
     \colorlet{shadecolor}{#1}%
@@ -70547,6 +71750,34 @@
     \end{snugshade*}%
 }
 %    \end{macrocode}
+
+
+% To add sanitization during the final output,
+% adjust several characters to use \HTML\ entities
+% when loading the pygmentized results,
+%    \begin{macrocode}
+\xpatchcmd{\minted at input}
+    {\input{#1}}
+    {%
+        \LWR at minted@overrides%
+        \input{#1}%
+    }
+    {}
+    {\LWR at patcherror{minted}{minted at input}}
+%    \end{macrocode}
+
+% These macros are used inside the \filenm{*.pygtex} files
+% to format several individual characters.
+% These are revised to use \HTML\ entities.
+% The backquote |grave| is not supported by \pkg{pygments}.
+%    \begin{macrocode}
+\newcommand*{\LWR at minted@overrides}{
+\def\PYGZam{\char`\&}
+\def\PYGZlt{\char`\<}
+\def\PYGZgt{\char`\>}
+\def\PYGZsq{\char`\'}
+}
+%    \end{macrocode}
 %
 % \iffalse
 %</minted>
@@ -71664,6 +72895,7 @@
 % \changes{v0.62}{2017/11/12}{\pkg{musicography}: Added.}
 % \changes{v0.73}{2019/06/09}{\pkg{musicography}: Updated to 2019/05/28.
 %                                   Now supports \env{lateximage}s.}
+% \changes{v0.913}{2023/11/24}{\pkg{musicography}: Fix for \cs{musMeter}.}
 %
 % \codehtml
 %
@@ -71706,7 +72938,7 @@
 \LWR at formatted{musDottedNote}
 
 \NewDocumentCommand{\LWR at HTML@musMeter}{ m m }{%
-\begin{lateximage}*[#1/#2][#1#2]*%
+\begin{lateximage}*[#1/#2]*[#1#2]%
 \musStack{#1 #2}\kern0.05em%
 \end{lateximage}%
 }
@@ -79766,11 +80998,12 @@
 % \pkg{simplebnf} is patched for use by \pkg{lwarp}.
 %
 % \changes{v0.893}{2020/10/29}{\pkg{simplebnf}: Added.}
+% \changes{v0.913}{2023/12/08}{\pkg{simplebnf}: Updated to v1.0.0.}
 %
 % \codehtml
 %
 %    \begin{macrocode}
-\LWR at ProvidesPackagePass{simplebnf}[2022/05/08]
+\LWR at ProvidesPackagePass{simplebnf}[2023-11-25]
 %    \end{macrocode}
 %
 % The entire object is placed inside a \env{lateximage} whose
@@ -79778,78 +81011,32 @@
 %    \begin{macrocode}
 \ExplSyntaxOn
 
-\RenewDocumentEnvironment { bnfgrammar } { O{llcll} O{[^\|]\|[^\|]} O{\|\|} +b }
+\RenewDocumentEnvironment { bnf } { d() O{llcll} +b }
   {
-    \regex_gset:Nn \g_simplebnf_rhs_newline_r { #2 }
-    \regex_gset:Nn \g_simplebnf_rhs_nb_r { #3 }
+    \begin{lateximage}[bnf:\space\detokenize{#3}]%         lwarp
 
-    %% \l__input_seq is a list of term definitions.
-    \regex_split:nnN { ;; } { #4 } \l__input_seq
-    \begin{center}
-    \begin{lateximage}[#4]%     lwarp
-      \tl_set:Nn \l__table_tl
-        {
-          \begin{tabular}{#1}
-        }
+    \IfNoValueF { #1 }
+      { \keys_set:nn { simplebnf } { #1 } }
 
-    \bool_set_true:N \l_tmp_first_term % Is this the first term in this grammar?
-    \seq_map_inline:Nn \l__input_seq
-      {
-        %% If not-first, add newline
-        \bool_if:NTF \l_tmp_first_term
-          {
-            \bool_set_false:N \l_tmp_first_term
-          }
-          {
-            \tl_put_right:Nn \l__table_tl { \\ }
-          }
+    \__simplebnf_build_grammar:n { #3 }
 
-        \regex_split:nnNTF { ::= } { ##1 } \l__term_seq
-          % Parse a ::= definition
-          {
-            %% \l__term_seq    - (lhs, rhses)...
-            %% \l__term_tl     - lhs
-            %% \l__keypairs_tl - rhses
-            \seq_pop_left:NN \l__term_seq \l__term_tl
-            \seq_pop_left:NN \l__term_seq \l__keypairs_tl
+    \begin{@simplebnf_tblr_env}[expand=\l__simplebnf_table_tl]{#2}
+      \tl_use:N \l__simplebnf_table_tl
+    \end{@simplebnf_tblr_env}
+    \end{lateximage}%               lwarp
+  }
+  { }
 
-            \simplebnf_typeset_lhs:n{\l__term_tl}
-            \tl_put_right:Nn \l__table_tl
-              {
-                & \SimpleBNFDefEq &
-              }
-            %% \l__keypairs_seq - (rhs:annot | rhs)...
-            \regex_split:NVN \g_simplebnf_rhs_newline_r \l__keypairs_tl \l__keypairs_seq
-
-            \bool_set_true:N \l__first_rhs
-            \seq_map_function:NN \l__keypairs_seq \simplebnf_typeset_rhs:n
-          }
-          {
-            % Else, parse a \in declaration
-            \regex_split:nnNTF { \c{in} } { ##1 } \l__term_seq
-              {
-                %% \l__term_seq - (lhs, rhs)
-                \seq_pop_left:NN \l__term_seq \l_tmpa_tl
-
-                \simplebnf_typeset_lhs:n{\l_tmpa_tl}
-                \tl_put_right:Nn \l__table_tl
-                  {
-                    & $\in$ & $
-                  }
-                \seq_pop_left:NN \l__term_seq \l_tmpa_tl
-                \tl_put_right:NV \l__table_tl \l_tmpa_tl
-                \tl_put_right:Nn \l__table_tl
-                  {
-                    $ &
-                  }
-              }
-              { \msg_error:nn {simplebnf} { Could not parser ##1 } }
-          }
-      }
-
-    \tl_put_right:Nn \l__table_tl { \end{tabular} }
-    \tl_use:N \l__table_tl
-    \end{lateximage}%       lwarp
+\RenewDocumentEnvironment { bnfgrammar } { O{llcll} O{[^\|]\|[^\|]} O{\|\|} +b }
+  {
+    \msg_warning:nn { simplebnf } { dep }
+    \begin{center}
+      \begin{lateximage}[bnf:\space\detokenize{#4}]%       lwarp
+      \begin{tabular}{#1}
+        \@dep__simplebnf_typeset_grammar:nnn { #2 } { #3 } { #4 }
+        \tl_use:N \l__simplebnf_table_tl
+      \end{tabular}
+      \end{lateximage}%             lwarp
     \end{center}
   }
   { }
@@ -79888,8 +81075,8 @@
 % since \cs{ensuremath} is used in the original defintions,
 % and \cs{ensuremath} often has expressions which do not work well in \MathJax,
 % so it is always forced to an \SVG\ image.
-% If, however, \cs{unit} is used, the result is expressed with \MathJax
-% instead of an \SVG\ image.
+% If, however, \cs{unit} is used, the result is expressed with \MathJax\ instead
+% of an \SVG\ image.
 %
 % \changes{v0.59}{2018/07/11}{\pkg{SIunits}: Added.}
 % \changes{v0.81}{2020/02/23}{\pkg{SIunits}: Improved \cs{unit}. Fixed in math mode.
@@ -79906,6 +81093,8 @@
 %    \begin{macrocode}
 \ifbool{mathjax}{
     \DeclareRobustCommand{\LWR at HTML@unit}[2]{%
+        \begingroup%
+        \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
         \LWR at subsingledollar*%  lwarp
         {% alt tag
             \textbackslash{}unit%
@@ -79916,6 +81105,7 @@
         {%
             #1\,{#2}%
         }% contents
+        \endgroup%
     }
 }{% not MathJax
     \DeclareRobustCommand{\LWR at HTML@unit}[2]{%
@@ -80378,6 +81568,7 @@
 %
 % \changes{v0.897}{2021/05/23}{\pkg{siunitx}: Rollback for v2.}
 % \changes{v0.904}{2022/02/19}{\pkg{siunitx}: Added v3.}
+% \changes{v0.913}{2023/11/24}{\pkg{siunitx}: Updated to v3.3.9.}
 %
 % \codehtml
 %
@@ -80391,7 +81582,7 @@
 
 \RequirePackage{xcolor}% for \convertcolorspec
 
-\LWR at ProvidesPackagePass{siunitx}[2022-02-15]
+\LWR at ProvidesPackagePass{siunitx}[2023-11-14]
 
 \ExplSyntaxOn
 %    \end{macrocode}
@@ -80441,13 +81632,14 @@
         {
             \tl_set:Nn \l__siunitx_number_outputted_tl
             {
+                \boolfalse{mathjax}%                    lwarp
                 \LWR at subsingledollar{%                  lwarp
-                    \textbackslash( % space
+                    \textbackslash( % space             lwarp ALT text
                     \LWR at HTMLsanitizedetokenized{%
                         \detokenize{#1}%
                     } \textbackslash)%                  lwarp
                 }%
-                {siunitx unparsed}%
+                {siunitx unparsed}%                     lwarp add'l hashing
                 {\ensuremath{#1}}%                      lwarp
             }
         }
@@ -80463,13 +81655,14 @@
     \tl_if_blank:nF {#1}
       { \seq_put_right:Nn \l__siunitx_compound_tmp_seq
         {
+            \boolfalse{mathjax}%                    lwarp
             \LWR at subsingledollar{%                  lwarp
-                \textbackslash( % space
+                \textbackslash( % space             lwarp ALT tag
                 \LWR at HTMLsanitizedetokenized{%
                     \detokenize{#1}%
                 } \textbackslash)%                  lwarp
             }%
-            {siunitx unparsed}%
+            {siunitx unparsed}%                     lwarp add'l hashing
             {\ensuremath{#1}}%                      lwarp
         }
       }
@@ -80477,60 +81670,79 @@
 %    \end{macrocode}
 %
 %
+% \begin{noindmacro}{\LWR at siunitx@mathrm} \marg{text}
+%
+% If in text mode, use \cs{textrm} instead.
+% Avoids crashing while using \cs{mathrm} in text mode.
+%    \begin{macrocode}
+\LetLtxMacro\LWR at siunitx@orig at mathrm\mathrm
+
+\newcommand*{\LWR at siunitx@mathrm}[1]{%
+    \ifmmode{\LWR at siunitx@orig at mathrm{#1}}\else{#1}\fi%
+}
+%    \end{macrocode}
+% \end{noindmacro}
+%
 % If not in a \env{lateximage}, always use text mode.
 % Ignore current text font if resetting text family, series, and shape.
 %    \begin{macrocode}
 \cs_set_protected:Npn \__siunitx_print_aux:nn #1#2
   {
-    \tl_if_empty:cTF { l__siunitx_print_ #1 _color_tl }
-      { \use:n }
-      { \exp_args:Nv \textcolor { l__siunitx_print_ #1 _color_tl } }
-        {
-            \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%      lwarp
+    \LetLtxMacro\mathrm\LWR at siunitx@mathrm%                 lwarp
+    \tl_if_empty:oF {#2}
+      {
+        \tl_if_empty:cTF { l__siunitx_print_ #1 _color_tl }
+          { \use:n }
+          { \exp_args:Nv \textcolor { l__siunitx_print_ #1 _color_tl } }
             {
-                \use:c
-                    {
-                    siunitx_print_
-                    \tl_use:c { l__siunitx_print_ #1 _mode_tl } :n
-                    }
-                    {#2}
-            }
-            {
-                \bool_lazy_all:nTF%     lwarp
-                    {
-                        {\l__siunitx_print_text_family_bool}
-                        {\l__siunitx_print_text_series_bool}
-                        {\l__siunitx_print_text_shape_bool}
-                    }
-                    {% No font control if reset-text-family/series/shape
-                        \use:c
-                            {
-                            siunitx_print_%                         lwarp
-                                text%                               lwarp
-                                :n%                                 lwarp
-                            }%                                      lwarp
-                            {#2}%                                   lwarp
-                    }
-                    {
-                        \LWR at textcurrentfont{%                      lwarp
+                \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%      lwarp
+                {
+                    \use:c
+                        {
+                        siunitx_print_
+                        \tl_use:c { l__siunitx_print_ #1 _mode_tl } :n
+                        }
+                        {#2}
+                }
+                {
+                    \bool_lazy_all:nTF%     lwarp
+                        {
+                            {\l__siunitx_print_text_family_bool}
+                            {\l__siunitx_print_text_series_bool}
+                            {\l__siunitx_print_text_shape_bool}
+                        }
+                        {% No font control if reset-text-family/series/shape
                             \use:c
                                 {
-                                siunitx_print_%                     lwarp
-                                    text%                           lwarp
-                                    :n%                             lwarp
-                                }%                                  lwarp
-                                {#2}%                               lwarp
+                                siunitx_print_%                         lwarp
+                                    text%                               lwarp
+                                    :n%                                 lwarp
+                                }%                                      lwarp
+                                {#2}%                                   lwarp
                         }
-                    }
+                        {
+                            \LWR at textcurrentfont{%                      lwarp
+                                \use:c
+                                    {
+                                    siunitx_print_%                     lwarp
+                                        text%                           lwarp
+                                        :n%                             lwarp
+                                    }%                                  lwarp
+                                    {#2}%                               lwarp
+                            }
+                        }
+                }
             }
-        }
-  }
+    }
+}
 %    \end{macrocode}
 %
 %
 % To determine whether to make a complex root be italic or upright,
 % \cs{l\_\_siunitx\_complex\_output\_root\_tl} is compared to
-% \cs{LWR at siunitx@complexrm<i/j>}, and the \CSS\ style is set appropriately.
+% \cs{LWR at siunitx@complexrm<i/j>}, and the \CSS\ style for i,j is set
+% to |ijit| or |ijup|.
+% \changes{v0.913}{2023/11/24}{\pkg{siunitx}: \CSS\ for complex number i,j.}
 %    \begin{macrocode}
 \newcommand*{\LWR at siunitx@complexrootstyle}{textrm}
 
@@ -80538,21 +81750,21 @@
 \newcommand*{\LWR at siunitx@complexrmj}{\mathrm{j}}
 
 \newcommand*{\LWR at siunitx@setcomplexroot}{%
-    \renewcommand*{\LWR at siunitx@complexrootstyle}{textit}%
+    \renewcommand*{\LWR at siunitx@complexrootstyle}{ijit}%
     \ifdefequal{\l__siunitx_complex_output_root_tl}{\LWR at siunitx@complexrmi}%
-        {\renewcommand*{\LWR at siunitx@complexrootstyle}{textrm}}%
+        {\renewcommand*{\LWR at siunitx@complexrootstyle}{ijup}}%
         {}%
     \ifdefequal{\l__siunitx_complex_output_root_tl}{\LWR at siunitx@complexrmj}%
-        {\renewcommand*{\LWR at siunitx@complexrootstyle}{textrm}}%
+        {\renewcommand*{\LWR at siunitx@complexrootstyle}{ijup}}%
         {}%
 }
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\cs_set_protected:Npn \__siunitx_complex_format_auxii:n #1
+\cs_set_protected:Npn \__siunitx_complex_format_cartesian_auxii:n #1
   {
     \LWR at siunitx@setcomplexroot%                        lwarp
-    \__siunitx_complex_format_units:n {#1}
+    \__siunitx_complex_format_cartesian_units:n {#1}
     \tl_if_empty:NF \l__siunitx_complex_real_tl
       { \exp_after:wN \__siunitx_complex_drop_exponent:nnnnnnn \l__siunitx_complex_real_tl }
     \exp_after:wN \__siunitx_complex_format_sign:nnnnnnn \l__siunitx_complex_img_tl
@@ -80763,13 +81975,14 @@
             { \__siunitx_quantity_parsed:nn {#1} {#2} }
             {
               \tl_set:Nn \l__siunitx_quantity_number_tl {
+                \boolfalse{mathjax}%                    lwarp
                 \LWR at subsingledollar{%                  lwarp
-                    \textbackslash( % space
+                    \textbackslash( % space             lwaro ALT tag
                     \LWR at HTMLsanitizedetokenized{%
                         \detokenize{#1}%
                     } \textbackslash)%                  lwarp
                 }%
-                {siunitx unparsed}%
+                {siunitx unparsed}%                     lwarp add'l hashing
                 {\ensuremath{#1}}%                      lwarp
               }
               \siunitx_unit_format:nN {#2} \l__siunitx_quantity_unit_tl
@@ -85536,7 +86749,7 @@
 % \codehtml
 %
 %    \begin{macrocode}
-\LWR at ProvidesPackagePass{tcolorbox}[2023/02/12]
+\LWR at ProvidesPackagePass{tcolorbox}[2023/06/19]
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -91741,8 +92954,8 @@
 \newcommand*{\LWR at currenttextcolorstyle}{%
     \LWR at findcurrenttextcolor%
     \ifdefstring{\LWR at tempcolor}{000000}%
-    {}%
-    {color: \LWR at origpound\LWR at tempcolor ; }%
+        {}%
+        {color: \LWR at origpound\LWR at tempcolor ; }%
 }
 %    \end{macrocode}
 % \end{noindmacro}
@@ -92138,90 +93351,6 @@
 %    \end{macrocode}
 % \end{macro}
 %
-%
-% \subsection{Row colors}
-% \changes{v0.49}{2018/02/17}{\pkg{xcolor}: Added tabular row colors.}
-% \changes{v0.79}{2020/01/18}{\pkg{xcolor}: Fix: Nested \env{tabular}s.}
-%
-% \begin{noindmacro}{\rowc at l@rs} \oarg{cmds} \marg{startrow} \marg{odd color} \marg{even color}
-%    \begin{macrocode}
-\newcommand*{\LWR at xcolortempcolor}{}
-
-\def\rowc at l@rs[#1]#2#3#4%
-{%
-   \rownum=1%
-   \@rowcolorstrue%
-   \@ifxempty{#3}%
-     {\def\@oddrowcolor{\@norowcolor}}%
-     {%
-        \convertcolorspec{named}{#3}{HTML}\LWR at xcolortempcolor%
-        \edef\@oddrowcolor{%
-            \csdef{LWR at xcolorrowHTMLcolor}{\LWR at xcolortempcolor}%
-        }%
-     }%
-   \@ifxempty{#4}%
-     {\def\@evenrowcolor{\@norowcolor}}%
-     {%
-        \convertcolorspec{named}{#4}{HTML}\LWR at xcolortempcolor%
-        \edef\@evenrowcolor{%
-            \csdef{LWR at xcolorrowHTMLcolor}{\LWR at xcolortempcolor}%
-        }%
-     }%
-   \if at rowcmd
-     \def\@rowcolors
-     {%
-%         #1%
-        \if at rowcolors
-%         \noalign{%
-            \relax\ifnum\rownum<#2\@norowcolor\else
-            \ifodd\rownum\@oddrowcolor\else\@evenrowcolor\fi\fi%
-%          }%
-        \fi%
-     }%
-   \else
-     \def\@rowcolors
-     {%
-        \if at rowcolors
-            \ifnum\rownum<#2%
-%            \noalign{%
-                \@norowcolor
-%             }
-            \else
-%            #1%
-%            \noalign{%
-                \ifodd\rownum\@oddrowcolor\else\@evenrowcolor\fi%
-%             }%
-            \fi
-        \fi%
-     }%
-   \fi
-   \ignorespaces%
-}
-%    \end{macrocode}
-% \end{noindmacro}
-%
-% \begin{noindmacro}{\@norowcolor} Turns off color for this row.
-%    \begin{macrocode}
-\def\@norowcolor{%
-    \renewcommand{\LWR at xcolorrowHTMLcolor}{}%
-}
-%    \end{macrocode}
-% \end{noindmacro}
-% 
-
-% \begin{noindmacro}{\@rowc at lors} Executed at the end of each row.
-% \changes{v0.79}{2020/01/18}{\pkg{xcolor}: Fix: Nested \env{tabular}s.}
-%    \begin{macrocode}
-\def\@rowc at lors{%
-%   \noalign{%
-        \advance\rownum\@ne%
-%   }%
-    \@rowcolors%
-}
-%    \end{macrocode}
-% \end{noindmacro}
-%
-%
 % \iffalse
 %</xcolor>
 % \fi
@@ -94628,7 +95757,12 @@
 \renewcommand*{\hangsubcaption}{}
 \renewcommand*{\shortsubcaption}{}
 \renewcommand*{\normalsubcaption}{}
+%    \end{macrocode}
 
+% \cs{AfterEndPreamble} now required for \env{sidecaption}.
+% \changes{v0.913}{2023/11/23}{\pkg{lwarp-patch-memoir}: Fixed change in \env{sidecaption}.}
+%    \begin{macrocode}
+\AfterEndPreamble{%
 \RenewDocumentEnvironment{sidecaption}{o m o}
 {}
 {%
@@ -94635,6 +95769,7 @@
     \IfValueTF{#1}{\caption[#1]{#2}}{\caption{#2}}%
     \IfValueT{#3}{\label{#3}}%
 }
+}
 
 % \newlength{\sidecapwidth}
 % \newlength{\sidecapsep}

Modified: trunk/Master/texmf-dist/source/latex/lwarp/lwarp.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/lwarp/lwarp.ins	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/source/latex/lwarp/lwarp.ins	2024-01-05 21:42:36 UTC (rev 69305)
@@ -57,6 +57,7 @@
 \file{lwarp-anonchap.sty}{\from{lwarp.dtx}{anonchap}}
 \file{lwarp-anysize.sty}{\from{lwarp.dtx}{anysize}}
 \file{lwarp-appendix.sty}{\from{lwarp.dtx}{appendix}}
+\file{lwarp-apxproof.sty}{\from{lwarp.dtx}{apxproof}}
 \file{lwarp-ar.sty}{\from{lwarp.dtx}{ar}}
 \file{lwarp-arabicfront.sty}{\from{lwarp.dtx}{arabicfront}}
 \file{lwarp-array.sty}{\from{lwarp.dtx}{array}}

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-SIunits.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-SIunits.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-SIunits.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -18,6 +18,8 @@
 \LWR at ProvidesPackagePass{SIunits}[2007/12/02]
 \ifbool{mathjax}{
     \DeclareRobustCommand{\LWR at HTML@unit}[2]{%
+        \begingroup%
+        \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
         \LWR at subsingledollar*%  lwarp
         {% alt tag
             \textbackslash{}unit%
@@ -28,6 +30,7 @@
         {%
             #1\,{#2}%
         }% contents
+        \endgroup%
     }
 }{% not MathJax
     \DeclareRobustCommand{\LWR at HTML@unit}[2]{%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-amsmath.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-amsmath.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-amsmath.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -90,7 +90,7 @@
         {
             \LWR at endhideamsmath
             \boolfalse{LWR at amsmultline}
-            \LWR at addmathjax{#2}{\the\@envbody}
+            \LWR at addmathjax{#2}{\the\@envbody}%
         }
         {\LWR at amsmathenv@@after}
         \gdef\LWR at ThisAltText{}%

Added: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-apxproof.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-apxproof.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-apxproof.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -0,0 +1,27 @@
+%%
+%% This is file `lwarp-apxproof.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% lwarp.dtx  (with options: `apxproof')
+%% This is a generated file.
+%% 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
+%% 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 ProvidesPackagePass{apxproof}[2022/10/14]
+\xpatchcmd{\FVB at axp@VerbatimOut}
+    {\FV at Scan}
+    {\boolfalse{LWR at HTMLsanitize@tmpb at enable}\FV at Scan}
+    {}
+    {\LWR at patcherror{apxproof}{FVB at axp@VerbatimOut}}
+
+\endinput
+%%
+%% End of file `lwarp-apxproof.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-apxproof.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-attachfile.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-attachfile.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-attachfile.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -47,7 +47,7 @@
     \def\LWR at attachfile@appearance{#1}%
 }
 \DeclareRobustCommand{\atfi at insert@file at annot}[1]{%
-    \LWR at href{#1}{\LWR at attachfile@appearance}%
+    \LWR at href@partsanitized{#1}{\LWR at attachfile@appearance}%
 }
 
 

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-attachfile2.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-attachfile2.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-attachfile2.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -59,7 +59,7 @@
     \def\LWR at attachfile@appearance{#1}%
 }
 \DeclareRobustCommand{\atfi at insert@file at annot}[1]{%
-    \LWR at href{#1}{\LWR at attachfile@appearance}%
+    \LWR at href@partsanitized{#1}{\LWR at attachfile@appearance}%
 }
 \DeclareRobustCommand{\notextattachfile}[2][]{%
   \begingroup

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-breakurl.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-breakurl.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-breakurl.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -21,7 +21,7 @@
 \NewDocumentCommand{\LWR at burlaltb}{O{} +m m}{%
     \LWR at ensuredoingapar%
     \LWR at subhyperref{#2}%
-    \LWR at subhyperreftext{#3}%
+    \LWR at subhyperreftext@unsanitized{#3}%
     \endgroup% restore catcodes
 }
 

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-bussproofs.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-bussproofs.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-bussproofs.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -20,7 +20,10 @@
     \CustomizeMathJax{\require{bussproofs}}
 
     \NewEnviron{LWR at HTML@prooftree}%
-        {\LWR at doequation{\BODY}{prooftree}}%
+        {%
+            \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
+            \LWR at doequation{\BODY}{prooftree}%
+        }%
         [\LWR at doendequation{prooftree}]
     \LWR at formattedenv{prooftree}
 }{% SVG HTML

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-caption.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-caption.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-caption.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -24,11 +24,11 @@
 \typeout{instead of: \protect\usepackage[options]\protect{caption\protect}.}
 \typeout{---}
 
-\LWR at ProvidesPackagePass{caption}[2020/10/26]
+\LWR at ProvidesPackagePass{caption}[2023/08/05]
 \long\def\caption at iibox@#1#2#3#4{%
   \caption at iiibox{#1}{#2}{#3}%
         []%                             lwarp
-        [\captionbox at hj@default]%
+        [\captionbox at innerpos@default]%
         {{#4}}%                         lwarp
 }
 \long\def\caption at iiiibox#1#2#3#4#5[#6][#7]#8{%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-caption3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-caption3.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-caption3.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -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{caption3}[2020/10/21]
+\LWR at ProvidesPackagePass{caption3}[2023/07/31]
 \IfPackageAtLeastTF{caption3}{2020/08/23}{
 \renewcommand\caption@@@make[2]{%
 \LWR at traceinfo{caption@@@make}%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-colortbl.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-colortbl.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-colortbl.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -60,6 +60,59 @@
 
 \AtBeginDocument{\LWR at expandableformatted{doublerulesepcolornexttoken}}
 
+\newcommand*{\LWR at xcolortempcolor}{}
+
+\def\rowc at l@rs[#1]#2#3#4%
+{%
+   \rownum=1%
+   \@rowcolorstrue%
+   \@ifxempty{#3}%
+     {\def\@oddrowcolor{\@norowcolor}}%
+     {%
+        \convertcolorspec{named}{#3}{HTML}\LWR at xcolortempcolor%
+        \edef\@oddrowcolor{%
+            \csdef{LWR at xcolorrowHTMLcolor}{\LWR at xcolortempcolor}%
+        }%
+     }%
+   \@ifxempty{#4}%
+     {\def\@evenrowcolor{\@norowcolor}}%
+     {%
+        \convertcolorspec{named}{#4}{HTML}\LWR at xcolortempcolor%
+        \edef\@evenrowcolor{%
+            \csdef{LWR at xcolorrowHTMLcolor}{\LWR at xcolortempcolor}%
+        }%
+     }%
+   \if at rowcmd
+     \def\@rowcolors
+     {%
+        \if at rowcolors
+            \relax\ifnum\rownum<#2\@norowcolor\else
+            \ifodd\rownum\@oddrowcolor\else\@evenrowcolor\fi\fi%
+        \fi%
+     }%
+   \else
+     \def\@rowcolors
+     {%
+        \if at rowcolors
+            \ifnum\rownum<#2%
+                \@norowcolor
+            \else
+                \ifodd\rownum\@oddrowcolor\else\@evenrowcolor\fi%
+            \fi
+        \fi%
+     }%
+   \fi
+   \ignorespaces%
+}
+\def\@norowcolor{%
+    \renewcommand{\LWR at xcolorrowHTMLcolor}{}%
+}
+
+\def\@rowc at lors{%
+        \advance\rownum\@ne%
+    \@rowcolors%
+}
+
 \begin{warpMathJax}
 
 \CustomizeMathJax{\require{colortbl}}

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fancybox.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fancybox.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fancybox.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -39,7 +39,7 @@
   \ignorespaces%
 }%
 \def\V@@@footnotetext{%
-    \LWR at origtilde\LWR at orignewline%
+    \LWR at orignobreakspace\LWR at orignewline%
     \LWR at htmltagc{/\LWR at tagregularparagraph}\LWR at orignewline%
     \strut\egroup%
 }
@@ -159,6 +159,38 @@
 \def\endLandScape{}
 \def\@Landscape#1#2#3{}
 \def\endLandscape{}
+\def\Verbatim at List#1{%
+  \if at minipage\else\vskip\parskip\fi
+  \leftskip\@totalleftmargin
+  \@rightskip\@flushglue \rightskip\@rightskip
+  \parindent\z@
+  \parskip\z@
+  \parfillskip\@flushglue
+  \hfuzz\VerbatimFuzz\relax
+  \@@par
+  \global\@inlabelfalse  %Prevents vspace from being inserted when
+  \Verbatim at Prep         %first line exceeds \hsize.
+    \expandafter\def\expandafter\tmpb\expandafter{#1}%  lwarp
+    \LWR at HTMLsanitize@tmpb%                             lwarp
+    \tmpb%                                              lwarp
+  \Verbatim at Par}%
+
+\def\Verbatim@@Input{%
+  \let\protect\noexpand
+  \LetLtxMacro\tmpb\The at Verbatim%   lwarp
+  \LWR at HTMLsanitize@tmpb%           lwarp
+  \edef\The at Verbatim{%
+    \noexpand\Every at VerbatimLine
+    \tmpb%                          lwarp
+    \ifeof\Verbatim at Infile\else\noexpand\Verbatim at Par\fi}%
+  \let\protect\relax
+  \The at Verbatim
+  \ifeof\Verbatim at Infile\else
+    \let\The at Verbatim\The at GVerbatim
+    \def\The at GVerbatim{}\Verbatim at NextLine
+    \expandafter\Verbatim@@Input
+  \fi}%
+
 \let\LWRFB at UseVerbatim\UseVerbatim
 \renewcommand*{\UseVerbatim}[1]{%
     \LWR at atbeginverbatim{Verbatim}%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fancyvrb.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fancyvrb.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fancyvrb.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -17,10 +17,171 @@
 %% version 2005/12/01 or later.
 \AtBeginDocument{\RequirePackage{xcolor}}% for \convertcolorspec
 
-\LWR at ProvidesPackagePass{fancyvrb}[2008/02/07]
+\LWR at ProvidesPackagePass{fancyvrb}[2023/11/06]
 \fvset{frame=none}%
+
+\define at key{FV}{gobble}{%
+  \@tempcnta=#1\relax
+  \ifnum\@tempcnta<\@ne
+    \let\FV at Gobble\relax
+  \else
+    \ifnum\@tempcnta>9
+      \FV at Error{gobble parameter must be less than 10}\FV at eha
+    \else
+      \renewcommand{\FV@@@@Gobble}[\@tempcnta]{}%
+      \let\FV at Gobble\FV@@Gobble%
+      \boolfalse{LWR at HTMLsanitize@tmpb at enable}%     lwarp
+    \fi
+  \fi}
+
+\ifxetexorluatex
+\def\LWR at HTML@FancyVerbSpace{\textvisiblespace}
+\else
+\@ifundefined{verbvisiblespace}%
+  {%
+    \@ifundefined{textvisiblespace}%
+    {\begingroup\catcode`\ =12 \gdef\LWR at HTML@FancyVerbSpace{\tt }\endgroup}
+    {\def\LWR at HTML@FancyVerbSpace{\textvisiblespace}}
+  }%
+  {\def\LWR at HTML@FancyVerbSpace{\verbvisiblespace}}
+\fi
+\LWR at formatted{FancyVerbSpace}
+
+\def\LWR at print@FancyVerbTab{|}
+\def\LWR at HTML@FancyVerbTab{|}%
+\LWR at formatted{FancyVerbTab}
+
+\fvset{tabsize=8,showtabs=false}
+
+\def\FV at CatCodes{%
+  \let\do\@makeother\dospecials  % The usual stuff.
+  \FV at ActiveWhiteSpace           % See below.
+  \FV at FontScanPrep               % See below.
+  \FV at CatCodesHook               % A style hook.
+  \FancyVerbCodes                % A user-defined hook.
+  \catcode`\>=12%                % lwarp
+  \catcode`\<=12%                % lwarp
+}
+\def\FV at GetLine{%
+    \@noligs%
+    \catcode`\>=12%     lwarp, and the next line as well
+    \catcode`\<=12
+    \expandafter\FV at CheckScan\FancyVerbGetLine%
+}
+
+\begingroup
+\catcode`\^^M=\active%
+\gdef\FancyVerbGetLine#1^^M{%
+  \@nil%
+  \FV at CheckEnd{#1}%
+  \ifx\@tempa\FV at EnvironName%            % True if end is found
+    \ifx\@tempb\FV@@@CheckEnd\else\FV at BadEndError\fi%
+    \let\next\FV at EndScanning%
+  \else%
+    \ifbool{LWR at HTMLsanitize@tmpb at enable}%                 lwarp
+        {\def\FV at Line{\LWR at HTMLsanitize@use at tmpb{#1}}}%     lwarp
+        {\def\FV at Line{#1}}%                                 lwarp
+    \def\next{\FV at PreProcessLine\FV at GetLine}%
+  \fi%
+  \next}%
+\endgroup
+\def\FV at List#1{%
+  \begingroup
+  \FV at UseKeyValues
+  \FV at LeaveVMode
+  \if at inlabel\else\setbox\@labels=\box\voidb at x\fi
+  \FV at ListNesting{#1}%
+  \FV at ListParameterHook
+  \FV at ListVSpace
+  \FV at SetLineWidth
+  \FV at InterLinePenalty
+  \let\FV at ProcessLine\FV at ListProcessLine%           lwarp
+  \FV at CatCodes
+  \FV at FormattingPrep
+  \FV at ObeyTabsInit
+  \FV at BeginListFrame}
+\def\FV at ListProcessLine#1{%
+   \hbox to \hsize{%
+      \hbox to \VerbatimHTMLWidth {%
+       \ifcsvoid{FV at LeftListNumber}{}{\kern 2.5em}%
+        \FV at LeftListNumber%
+      \FancyVerbFormatLine{#1}%
+      \hss%
+      \FV at RightListNumber%
+    }%
+      \hss% required to avoid underfull hboxes
+}
+}
+
+\begingroup
+\catcode`\^^M=\active%
+\gdef\FVC at SaveVerb#1#2{%
+  \@namedef{FV at SV@#1}{}%
+  \begingroup%
+    \FV at UseKeyValues%
+    \FV at CatCodes%
+    \outer\def^^M{\FV at EOL}%
+    \global\let\@tempg\FancyVerbAfterSave%
+    \catcode`#2=12%
+    \def\@tempa{\def\FancyVerbGetVerb####1####2}%
+    \expandafter\@tempa\string#2{%
+        \endgroup%
+        \@namedef{FV at SV@#1}{%
+            \LWR at HTMLsanitize@use at tmpb{##2}%    lwarp
+        }\@tempg%
+    }%
+    \FancyVerbGetVerb\FV at EOL}%
+\endgroup
+
+\def\FV at UseVerb#1{%
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{span class=\textquotedbl{}fancyvrb\textquotedbl}}% lwarp
+        {}%                             lwarp
+    \mbox{\FV at UseKeyValues\FV at FormattingPrep#1}%
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{/span}}%          lwarp
+        {}%                             lwarp
+}
+
+\begingroup
+\catcode`\^^M=\active%
+\gdef\FVC at Verb#1{%
+  \begingroup%
+    \FV at UseKeyValues%
+    \FV at FormattingPrep%
+    \FV at CatCodes%
+    \outer\def^^M{}%
+    \catcode`#1=12%
+    \def\@tempa{\def\FancyVerbGetVerb####1####2}%
+    \expandafter\@tempa\string#1{%
+        \ifbool{LWR at verbtags}%                  lwarp
+            {%                                  lwarp
+                \LWR at htmltag{span class=\textquotedbl{}fancyvrb\textquotedbl}%  lwarp
+                \def\tmpb{##2}%                 lwarp
+                \LWR at HTMLsanitize@tmpb%         lwarp
+                \mbox{\tmpb}%                   lwarp
+                \LWR at htmltag{/span}%            lwarp
+            }% lwarp
+            {\mbox{##2}}%
+        \endgroup%
+    }%
+    \FancyVerbGetVerb\FV at EOL%
+}%
+\endgroup
+\begingroup
+\catcode`\^^M=\active
+\gdef\FV at ReadLine{%
+  \ifeof\FV at InFile\else
+    \immediate\read\FV at InFile to\tmpb%
+    \LWR at HTMLsanitize@tmpb%
+    \expandafter\FV@@ReadLine\tmpb^^M\relax^^M\@nil%
+  \fi}
+\endgroup
+\newcommand*{\LWR at FVstyle}{}
 \AfterEndPreamble{
+
 \LWR at traceinfo{Patching fancyvrb.}
+
 \def\VerbatimFootnotes{%
     \let\@footnotetext\V at footnotetext%
     \let\footnote\V at footnote%
@@ -35,6 +196,9 @@
         \csname p at footnote\endcsname\@thefnmark%
     }% @currentlabel
     \renewrobustcmd{\textsuperscript}[1]{\LWR at htmlspan{sup}{##1}}%
+    \booltrue{LWR at verbtags}%
+    \booltrue{LWR at HTMLsanitize@tmpb at enable}%
+
     \LWR at htmltagc{\LWR at tagregularparagraph}\LWR at orignewline%
     \@makefntext{}%
     \bgroup%
@@ -43,47 +207,71 @@
     \ignorespaces%
 }%
 \def\V@@@footnotetext{%
-    \LWR at origtilde\LWR at orignewline%
+    \LWR at orignobreakspace\LWR at orignewline%
     \LWR at htmltagc{/\LWR at tagregularparagraph}\LWR at orignewline%
     \strut\egroup%
 }
 \preto\FVB at Verbatim{\LWR at forcenewpage}
 \preto\FVB at LVerbatim{\LWR at forcenewpage}
-\def\FV at BeginListFrame@Single{%
+\def\LWR at HTML@FV at BeginListFrame@Single{%
   \FV at SingleFrameLine{\z@}%
 }
+\LWR at formatted{FV at BeginListFrame@Single}
 
-\def\FV at EndListFrame@Single{%
+\def\LWR at HTML@FV at EndListFrame@Single{%
   \FV at SingleFrameLine{\@ne}%
 }
+\LWR at formatted{FV at EndListFrame@Single}
 
-\def\FV at BeginListFrame@Lines{%
+\def\LWR at HTML@FV at BeginListFrame@Lines{%
   \FV at SingleFrameLine{\z@}%
 }
+\LWR at formatted{FV at BeginListFrame@Lines}
 
-\def\FV at EndListFrame@Lines{%
+\def\LWR at HTML@FV at EndListFrame@Lines{%
     \FV at SingleFrameLine{\@ne}%
 }
+\LWR at formatted{FV at EndListFrame@Lines}
 
-\renewcommand*{\FV at SingleFrameSep}{}
-\def\FV at BUseVerbatim#1{%
-    \FV at BVerbatimBegin#1\FV at BVerbatimEnd%
-}
+\newcommand*{\LWR at HTML@FV at SingleFrameSep}{}%
+\LWR at formatted{FV at SingleFrameSep}
 
-\newcommand*{\LWR at FVstyle}{}
 \newcommand*{\LWR at fvstartnone}{%
 \LWR at traceinfo{fvstartnone}%
-\BlockClass[\LWR at FVstyle]{fancyvrb}
+    \ifdefstring{\LWR at FVstyle}{\LWR at currenttextcolorstyle}%
+        {%
+            \LWR at findcurrenttextcolor%
+            \ifdefstring{\LWR at tempcolor}{000000}%
+                {\BlockClass{fancyvrb}}%
+                {\BlockClass[\LWR at FVstyle]{fancyvrb}}%
+        }%
+        {%
+            \BlockClass[\LWR at FVstyle]{fancyvrb}%
+        }%
 \LWR at stoppars
 \ifx\FV at LabelPositionTopLine\relax\else
     \ifx\FV at LabelBegin\relax\else
         \FancyVerbRuleColor{\LWR at FVfindbordercolor}
-        \LWR at htmltagc{%
-            div class=\textquotedbl{}fancyvrblabel\textquotedbl\ % space
-                style=\textquotedbl{}color: \LWR at origpound\LWR at tempcolor\textquotedbl%
-        }
+        \ifbool{LWR at verbtags}%      lwarp
+            {%                      lwarp
+                \LWR at findcurrenttextcolor%
+                \LWR at htmltagc{%     lwarp
+                    div class=\textquotedbl{}fancyvrblabel\textquotedbl\ % space
+                        style=\textquotedbl{}%
+                            color: \LWR at origpound\LWR at tempcolor%
+                        \textquotedbl%
+                }%
+                \LWR at orignewline%   lwarp
+            }%                      lwarp
+            {}%                     lwarp
         \LWR at print@textrm{\FV at LabelBegin}% \textrm preserves emdash
-        \LWR at htmltagc{/div}\LWR at orignewline%
+        \LWR at orignewline%               lwarp
+        \ifbool{LWR at verbtags}%          lwarp
+            {%                          lwarp
+                \LWR at htmltagc{/div}%    lwarp
+                \LWR at orignewline%       lwarp
+            }%                          lwarp
+            {}%                         lwarp
     \fi
 \fi
 \LWR at atbeginverbatim{verbatim}%
@@ -95,16 +283,30 @@
 \LWR at stoppars%
 \ifx\FV at LabelPositionBottomLine\relax\else
     \ifx\FV at LabelEnd\relax\else
-        \FancyVerbRuleColor{\LWR at FVfindbordercolor}
-        \LWR at htmltagc{%
-            div class=\textquotedbl{}fancyvrblabel\textquotedbl\ % space
-                style=\textquotedbl{}color: \LWR at origpound\LWR at tempcolor\textquotedbl%
-        }
-        \LWR at print@textrm{\FV at LabelEnd}
-        \LWR at htmltagc{/div}\LWR at orignewline%
+        \FancyVerbRuleColor{\LWR at FVfindbordercolor}%    lwarp
+        \ifbool{LWR at verbtags}%                          lwarp
+            {%                                          lwarp
+                \LWR at findcurrenttextcolor%
+                \LWR at htmltagc{%                 lwarp
+                    div class=\textquotedbl{}fancyvrblabel\textquotedbl\ % space
+                        style=\textquotedbl{}%
+                            color: \LWR at origpound\LWR at tempcolor%
+                        \textquotedbl%
+                }%
+                \LWR at orignewline%               lwarp
+            }%                                  lwarp
+            {}%                                 lwarp
+        \LWR at print@textrm{\FV at LabelEnd}%        lwarp
+        \LWR at orignewline%                       lwarp
+        \ifbool{LWR at verbtags}%                  lwarp
+            {%                                  lwarp
+                \LWR at htmltagc{/div}%            lwarp
+                \LWR at orignewline%               lwarp
+            }%                                  lwarp
+            {}%                                 lwarp
     \fi
 \fi
-\endBlockClass
+\endBlockClass%     lwarp
 }
 
 \newcommand*{\LWR at fvstartsingle}{%
@@ -143,16 +345,17 @@
 solid {\FancyVerbRuleColor{\LWR at origpound\LWR at tempcolor}} ; % space
 }
 
-\def\FV at Frame@none{%
+\def\LWR at HTML@FV at Frame@none{%
 \renewcommand*{\LWR at FVstyle}{\LWR at currenttextcolorstyle}%
 \let\FV at BeginListFrame\LWR at fvstartnone%
 \let\FV at LeftListFrame\relax%
 \let\FV at RightListFrame\relax%
 \let\FV at EndListFrame\LWR at fvendnone}
+\LWR at formatted{FV at Frame@none}
 
 \FV at Frame@none% default values
 
-\def\FV at Frame@single{%
+\def\LWR at HTML@FV at Frame@single{%
 \renewcommand*{\LWR at FVstyle}{%
     \LWR at currenttextcolorstyle\LWR at indentHTMLtwo%
     \LWR at FVborderstyle{}%
@@ -161,8 +364,9 @@
 \let\FV at LeftListFrame\FV at LeftListFrame@Single%
 \let\FV at RightListFrame\FV at RightListFrame@Single%
 \let\FV at EndListFrame\LWR at fvendsingle}
+\LWR at formatted{FV at Frame@single}
 
-\def\FV at Frame@lines{%
+\def\LWR at HTML@FV at Frame@lines{%
 \renewcommand*{\LWR at FVstyle}{%
     \LWR at currenttextcolorstyle\LWR at indentHTMLtwo%
     \LWR at FVborderstyle{-top}%
@@ -173,8 +377,9 @@
 \let\FV at LeftListFrame\relax%
 \let\FV at RightListFrame\relax%
 \let\FV at EndListFrame\LWR at fvendline}
+\LWR at formatted{FV at Frame@lines}
 
-\def\FV at Frame@topline{%
+\def\LWR at HTML@FV at Frame@topline{%
 \renewcommand*{\LWR at FVstyle}{%
     \LWR at currenttextcolorstyle\LWR at indentHTMLtwo%
     \LWR at FVborderstyle{-top}%
@@ -183,8 +388,9 @@
 \let\FV at LeftListFrame\relax%
 \let\FV at RightListFrame\relax%
 \let\FV at EndListFrame\LWR at fvendnone}
+\LWR at formatted{FV at Frame@topline}
 
-\def\FV at Frame@bottomline{%
+\def\LWR at HTML@FV at Frame@bottomline{%
 \renewcommand*{\LWR at FVstyle}{%
     \LWR at currenttextcolorstyle\LWR at indentHTMLtwo%
     \LWR at FVborderstyle{-bottom}%
@@ -193,8 +399,9 @@
 \let\FV at LeftListFrame\relax%
 \let\FV at RightListFrame\relax%
 \let\FV at EndListFrame\LWR at fvendline}
-\def\FV at FrameFillLine{}%
-\def\FV at Frame@leftline{%
+\LWR at formatted{FV at Frame@bottomline}
+\def\FV at FrameFillLine{}
+\def\LWR at HTML@FV at Frame@leftline{%
 \renewcommand*{\LWR at FVstyle}{%
     \LWR at currenttextcolorstyle\LWR at indentHTMLtwo%
     \LWR at FVborderstyle{-left}%
@@ -212,7 +419,8 @@
 \let\FV at LeftListFrame\FV at LeftListFrame@Single%
 \let\FV at RightListFrame\relax%
 \let\FV at EndListFrame\LWR at fvendnone}
-\def\FV at SingleFrameLine#1{%
+\LWR at formatted{FV at Frame@leftline}
+\def\LWR at HTML@FV at SingleFrameLine#1{%
     \ifnum#1=\z@\relax
       \let\FV at Label\FV at LabelBegin
     \else
@@ -231,32 +439,11 @@
       \fi
     \fi
 }
-\def\FV at ListProcessLine#1{%
-   \hbox to \hsize{%
-      \hbox to \VerbatimHTMLWidth {%
-       \ifcsvoid{FV at LeftListNumber}{}{\kern 2.5em}%
-        \FV at LeftListNumber%
-      \FancyVerbFormatLine{#1}%
-      \hss%
-      \FV at RightListNumber%
-    }%
-      \hss% required to avoid underfull hboxes
-}
-}
+\LWR at formatted{FV at SingleFrameLine}
 
-\def\FV at ListProcessLine@i#1{%
-    \ifvoid\@labels\else
-      \hbox to \z@{\kern\@totalleftmargin\box\@labels\hss}%
-    \fi
-    \FV at ListProcessLine{#1}%
-}
-
-\def\FV at ListProcessLastLine{}
-
-
 \xpretocmd{\FV at BeginVBox}
     {%
-        \LWR at forcenewpage% instead of \preto
+        \LWR at forcenewpage%
         \LWR at atbeginverbatim{bverbatim}%
     }
     {}
@@ -271,7 +458,23 @@
 
 } % \AfterEndPreamble
 
+\def\FVB at VerbatimOut#1{%
+  \@bsphack
+  \begingroup
+    \FV at UseKeyValues
+    \FV at DefineWhiteSpace
+    \def\FV at Space{\space}%
+    \FV at DefineTabOut
+    \def\FV at ProcessLine{\immediate\write\FV at OutFile}%
+    \immediate\openout\FV at OutFile #1\relax
+    \let\FV at FontScanPrep\relax
+%% DG/SR modification begin - May. 18, 1998 (to avoid problems with ligatures)
+    \let\@noligs\relax
+%% DG/SR modification end
+  \boolfalse{LWR at HTMLsanitize@tmpb at enable}%        lwarp
+    \FV at Scan}
 
+
 \endinput
 %%
 %% End of file `lwarp-fancyvrb.sty'.

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-footnote.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-footnote.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-footnote.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -59,9 +59,9 @@
 }
 
 \def\fn at endnote{%
-    \LWR at origtilde\LWR at orignewline%
+    \LWR at orignobreakspace\LWR at orignewline%
     \LWR at htmltagc{/\LWR at tagregularparagraph}\LWR at orignewline%
-    \LWR at origtilde\LWR at orignewline%
+    \LWR at orignobreakspace\LWR at orignewline%
 }
 \def\fn at startfntext{%
   \setbox\z@\vbox\bgroup%
@@ -74,7 +74,7 @@
 
 \def\fn at endfntext{%
     \fn at postfntext%
-    \LWR at origtilde\LWR at orignewline%
+    \LWR at orignobreakspace\LWR at orignewline%
     \LWR at htmltagc{/\LWR at tagregularparagraph}%
     \LWR at orignewline%
   \egroup%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fvextra.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fvextra.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-fvextra.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -15,29 +15,26 @@
 %%   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{fvextra}[2022/11/30]
+\LWR at ProvidesPackagePass{fvextra}[2023/11/28]
 \define at booleankey{FV}{obeytabs}%
+  {\let\FV at ObeyTabsInit\relax}%     lwarp
   {\let\FV at ObeyTabsInit\relax}
-  {\let\FV at ObeyTabsInit\relax}
 
-\define at key{FV}{tabcolor}%
- {}
+\define at key{FV}{tabcolor}{}%
 
-\define at key{FV}{tab}{}
-
 \define at booleankey{FV}{showtabs}%
+ {\def\FV at TabChar{\FV at TabColor{\FancyVerbTab}}}%
  {\let\FV at TabChar\relax}
- {\let\FV at TabChar\relax}
 
 \newbool{LWR at FV@breaklines}
 
 \define at booleankey{FV}{breaklines}%
-  {\boolfalse{FV at breaklines}
-    \booltrue{LWR at FV@breaklines}
+  {\boolfalse{FV at breaklines}%
+    \booltrue{LWR at FV@breaklines}%                           lwarp
+    \let\FV at ListProcessLine\FV at ListProcessLine@NoBreak}%   lwarp
+  {\boolfalse{FV at breaklines}%
+    \boolfalse{LWR at FV@breaklines}%                          lwarp
     \let\FV at ListProcessLine\FV at ListProcessLine@NoBreak}
-  {\boolfalse{FV at breaklines}
-    \boolfalse{LWR at FV@breaklines}
-    \let\FV at ListProcessLine\FV at ListProcessLine@NoBreak}
 
 \define at key{FV}{breakanywheresymbolpre}{\def\FancyVerbBreakAnywhereSymbolPre{}}
 \fvset{breakanywheresymbolpre={}}
@@ -66,6 +63,29 @@
 \define at key{FV}{breaksymbolright}{\def\FancyVerbBreakSymbolRight{}}
 \fvset{breaksymbolright={}}
 
+\def\FV at DefFVSpace{%
+  \ifbool{FV at showspaces}%
+     {%
+        \def\FV at Space{%
+            \FV at SpaceColor{\FancyVerbSpace}%
+            \allowbreak%
+        }%
+     }%
+    {\def\FV at Space{\nobreakspace\allowbreak}}%
+}
+
+\ifxetexorluatex
+\def\FancyVerbSpace{\textvisiblespace}
+\else
+\@ifundefined{verbvisiblespace}%
+  {%
+    \@ifundefined{textvisiblespace}%
+    {\begingroup\catcode`\ =12 \gdef\FancyVerbSpace{\tt }\endgroup}
+    {\def\FancyVerbSpace{\textvisiblespace}}
+  }%
+  {\def\FancyVerbSpace{\verbvisiblespace}}
+\fi
+
 \def\FV at ListProcessLine@NoBreak#1{%
       \FV at LeftListNumber%
       \FV at LeftListFrame%
@@ -76,7 +96,6 @@
       \FV at RightListNumber%
 \null\par%                   lwarp
 }
-
 \newcommand*{\LWR at FV@linethensep}{%
     \ifbool{LWR at FV@breaklines}%
         {\theFancyVerbLine\kern\FV at NumberSep}%
@@ -89,78 +108,198 @@
         {\hbox to\z@{\kern\FV at NumberSep\theFancyVerbLine\hss}}%
 }
 
-\xpatchcmd{\FV at Numbers@left}
+\xpatchcmd{\FV at Numbers@left}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@left A}}
 
-\xpatchcmd{\FV at Numbers@left}
+\xpatchcmd{\FV at Numbers@left}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@left B}}
 
-\xpatchcmd{\FV at Numbers@left}
+\xpatchcmd{\FV at Numbers@left}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@left C}}
 
-\xpatchcmd{\FV at Numbers@right}
+\xpatchcmd{\FV at Numbers@right}%
     {\hbox to\z@{\kern\FV at NumberSep\theFancyVerbLine\hss}}
     {\LWR at FV@septhenline}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@right A}}
 
-\xpatchcmd{\FV at Numbers@right}
+\xpatchcmd{\FV at Numbers@right}%
     {\hbox to\z@{\kern\FV at NumberSep\theFancyVerbLine\hss}}
     {\LWR at FV@septhenline}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@right B}}
 
-\xpatchcmd{\FV at Numbers@right}
+\xpatchcmd{\FV at Numbers@right}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@right C}}
 
-\xpatchcmd{\FV at Numbers@both}
+\xpatchcmd{\FV at Numbers@both}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@both A}}
 
-\xpatchcmd{\FV at Numbers@both}
+\xpatchcmd{\FV at Numbers@both}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@both B}}
 
-\xpatchcmd{\FV at Numbers@both}
+\xpatchcmd{\FV at Numbers@both}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@both C}}
 
-\xpatchcmd{\FV at Numbers@both}
+\xpatchcmd{\FV at Numbers@both}%
     {\hbox to\z@{\kern\FV at NumberSep\theFancyVerbLine\hss}}
     {\LWR at FV@septhenline}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@both D}}
 
-\xpatchcmd{\FV at Numbers@both}
+\xpatchcmd{\FV at Numbers@both}%
     {\hbox to\z@{\kern\FV at NumberSep\theFancyVerbLine\hss}}
     {\LWR at FV@septhenline}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@both E}}
 
-\xpatchcmd{\FV at Numbers@both}
+\xpatchcmd{\FV at Numbers@both}%
     {\hbox to\z@{\hss\theFancyVerbLine\kern\FV at NumberSep}}
     {\LWR at FV@linethensep}
     {}
     {\LWR at patcherror{fvextra}{FV at Numbers@both F}}
 
+\def\FVC at SaveVerb@Extra at ii#1#2#3{%
+  \global\let\FV at AfterSave\FancyVerbAfterSave
+  \endgroup
+   \@namedef{FV at SV@#1}{\LWR at HTMLsanitize@use at tmpb{#3}}%     lwarp
+  \@namedef{FV at SVRaw@#1}{\LWR at HTMLsanitize@use at tmpb{#2}}%   lwarp
+  \FV at AfterSave}%
+
+\def\FV at UseVerb@Extra#1{%
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{span class=\textquotedbl{}fancyvrb\textquotedbl}}%  lwarp
+        {}%                             lwarp
+  \ifFV at breaklines
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi
+  {\FV at InsertBreaks{\FancyVerbFormatInline}{#1}}%
+  {\mbox{#1}}%
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{/span}}%          lwarp
+        {}%                             lwarp
+  \endgroup}
+
+\def\FVC at Verb@Extra at ii#1{%
+    \def\tmpb{#1}%                                                  lwarp
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{span class=\textquotedbl{}fancyvrb\textquotedbl}}%  lwarp
+        {}%                                             lwarp
+    \LWR at HTMLsanitize@tmpb%                             lwarp
+  \ifFV at breaklines
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi
+  {\FV at InsertBreaks{\FancyVerbFormatInline}{\tmpb}}%    lwarp
+  {\mbox{\tmpb}}%                                       lwarp
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{/span}}%          lwarp
+        {}%                             lwarp
+  \endgroup}
+
+\def\FVC at EscVerb@ii#1{%
+  \def\tmpb{#1}%                        lwarp
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{span class=\textquotedbl{}fancyvrb\textquotedbl}}%  lwarp
+        {}%                             lwarp
+  \LWR at HTMLsanitize@tmpb%               lwarp
+  \ifFV at breaklines
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi
+  {\FV at InsertBreaks{\FancyVerbFormatInline}{\tmpb}}%    lwarp
+  {\mbox{\tmpb}}%                                       lwarp
+    \ifbool{LWR at verbtags}%              lwarp
+        {\LWR at htmltag{/span}}%          lwarp
+        {}%                             lwarp
+  \endgroup}
+
+\xpatchcmd{\FVB at VerbatimWrite}
+    {\FV at Scan}
+    {\boolfalse{LWR at HTMLsanitize@tmpb at enable}\FV at Scan}
+    {}
+    {\LWR at patcherror{fvextra}{FVB at VerbatimWrite}}
+
+\xpatchcmd{\FVB at VerbatimBuffer}
+    {\FV at Scan}
+    {\boolfalse{LWR at HTMLsanitize@tmpb at enable}\FV at Scan}
+    {}
+    {\LWR at patcherror{fvextra}{FVB at VerbatimBuffer}}
+
+\renewcommand{\VerbatimInsertBuffer}[1][]{%
+  \begingroup
+  \def\FV at KeyValues{#1}%
+  \def\FV at Scan{%
+    \FV at CatCodes
+    \xdef\FV at EnvironName{Verbatim}%
+    \ifnum\expandafter\value\expandafter{\FV at bufferlengthname}=\z@\relax
+      \PackageError{fvextra}%
+       {Buffer length counter \FV at bufferlengthname\space is invalid or zero}%
+       {}%
+      \let\FV at GetLine\relax
+    \fi
+    \FV at GetLine}%
+  \let\FV at CheckScan\relax
+  \setcounter{FancyVerbBufferIndex}{1}%
+  \def\VerbatimInsertBuffer at def@FV at Line##1{%
+    \FVExtraRetokenizeVArg{\def\FV at Line}{}{##1}%
+    \LetLtxMacro\tmpb\FV at Line%      lwarp
+    \LWR at HTMLsanitize@tmpb%         lwarp
+    \LetLtxMacro\FV at Line\tmpb%      lwarp
+  }%
+  \def\FancyVerbGetLine{%
+    \ifnum\value{FancyVerbBufferIndex}>%
+        \expandafter\value\expandafter{\FV at bufferlengthname}\relax
+      \global\let\FV at EnvironName\relax
+      \let\next\relax
+    \else
+      \ifcsname \FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}\endcsname
+        \expandafter\let\expandafter\FV at Line@Buffer
+          \csname\FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}\endcsname
+        \expandafter\VerbatimInsertBuffer at def@FV at Line\expandafter{\FV at Line@Buffer}%
+        \def\next{\FV at PreProcessLine\FV at GetLine}%
+        \stepcounter{FancyVerbBufferIndex}%
+      \else
+        \def\next{%
+          \PackageError{fvextra}%
+           {Buffer with line macro named
+            "\FancyVerbBufferLineName\arabic{FancyVerbBufferIndex}" does not exist}%
+           {Check bufferlinename, bufferlengthname, and globalbuffer settings}%
+        }%
+      \fi
+    \fi
+    \next}%
+  \FVB at Verbatim
+  \FVE at Verbatim
+  \setcounter{FancyVerbBufferIndex}{0}%
+  \endgroup}
+
+
 \endinput
 %%
 %% End of file `lwarp-fvextra.sty'.

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-graphics.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-graphics.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-graphics.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -306,7 +306,7 @@
 
 \NewDocumentCommand{\LWR at includegraphicsb}{s o o m}
 {%
-    \LWR at origtilde \LWR at orignewline%
+    \LWR at orignobreakspace \LWR at orignewline%
     \begin{LWR at setvirtualpage}%
     \large%
     \hbadness=10000\relax%
@@ -347,7 +347,8 @@
         bool {LWR at igkeepaspectratio}
     }{\LWR at ig@useactualimagesize{#1}{#2}{#3}{#4}}{}%
     \LWR at traceinfo{LWR at includegraphicsb: about to create href}%
-    \LWR at href{\LWR at parsedfilename}%
+    \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
+    \LWR at href@partsanitized{\LWR at parsedfilename}%
     {% start of href
         \LWR at traceinfo{LWR at includegraphicsb: about to LWR at htmltag}%
         \LWR at htmltag{\LWR at ig@htmltag}%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-hyperref.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-hyperref.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-hyperref.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -284,10 +284,10 @@
 
 \NewDocumentCommand{\LWR at hyperimageb}{m +m}{%
     \LWR at ensuredoingapar%
-    \def\LWR at templink{#1}%
-    \@onelevel at sanitize\LWR at templink%
+    \edef\tmpb{#1}%
+    \LWR at HTMLsanitize@tmpb%
     \LWR at htmltag{%
-        img src=\textquotedbl\LWR at templink\textquotedbl\ %
+        img src=\textquotedbl\tmpb\textquotedbl\ %
         alt=\textquotedbl#2\textquotedbl\ %
         class=\textquotedbl{}hyperimage\textquotedbl%
     }%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-minted.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-minted.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-minted.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -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}[2022/12/12]
+\LWR at ProvidesPackagePass{minted}[2023/09/12]
 \renewcommand{\setminted}[2][]{%
   \ifthenelse{\equal{#1}{}}%
     {\setkeys{minted at opt@g}{%
@@ -39,7 +39,6 @@
         #2,
         mathescape=false,breaklines,texcomments=false,highlightlines={}% lwarp
     }}}
-
 \xpatchcmd{\RobustMintInlineProcess}
     {\setkeys{minted at opt@cmd}{#1}}
     {%
@@ -47,6 +46,9 @@
             #1,%
             mathescape=false,breaklines,texcomments=false,highlightlines={}%
         }%
+        \ifbool{minted at draft}%
+            {\booltrue{LWR at HTMLsanitize@tmpb at enable}}%
+            {\boolfalse{LWR at HTMLsanitize@tmpb at enable}}%
     }
     {}
     {\LWR at patcherror{minted}{minted}}
@@ -58,6 +60,9 @@
             #1,%
             mathescape=false,breaklines,texcomments=false,highlightlines={}%
         }%
+        \ifbool{minted at draft}%
+            {\booltrue{LWR at HTMLsanitize@tmpb at enable}}%
+            {\boolfalse{LWR at HTMLsanitize@tmpb at enable}}%
     }
     {}
     {\LWR at patcherror{minted}{minted}}
@@ -69,6 +74,9 @@
             #1,%
             mathescape=false,breaklines,texcomments=false,highlightlines={}%
         }%
+        \ifbool{minted at draft}%
+            {\booltrue{LWR at HTMLsanitize@tmpb at enable}}%
+            {\boolfalse{LWR at HTMLsanitize@tmpb at enable}}%
     }
     {}
     {\LWR at patcherror{minted}{minted}}
@@ -79,12 +87,13 @@
             #1,%
             mathescape=false,breaklines,texcomments=false,highlightlines={}%
         }%
+        \ifbool{minted at draft}%
+            {\booltrue{LWR at HTMLsanitize@tmpb at enable}}%
+            {\boolfalse{LWR at HTMLsanitize@tmpb at enable}}%
     }
     {}
     {\LWR at patcherror{minted}{inputminted}}
 
-
-
 \renewenvironment{minted at snugshade*}[1]%
 {%
     \colorlet{shadecolor}{#1}%
@@ -94,6 +103,22 @@
     \end{snugshade*}%
 }
 
+\xpatchcmd{\minted at input}
+    {\input{#1}}
+    {%
+        \LWR at minted@overrides%
+        \input{#1}%
+    }
+    {}
+    {\LWR at patcherror{minted}{minted at input}}
+
+\newcommand*{\LWR at minted@overrides}{
+\def\PYGZam{\char`\&}
+\def\PYGZlt{\char`\<}
+\def\PYGZgt{\char`\>}
+\def\PYGZsq{\char`\'}
+}
+
 \endinput
 %%
 %% End of file `lwarp-minted.sty'.

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-musicography.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-musicography.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-musicography.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -50,7 +50,7 @@
 \LWR at formatted{musDottedNote}
 
 \NewDocumentCommand{\LWR at HTML@musMeter}{ m m }{%
-\begin{lateximage}*[#1/#2][#1#2]*%
+\begin{lateximage}*[#1/#2]*[#1#2]%
 \musStack{#1 #2}\kern0.05em%
 \end{lateximage}%
 }

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-patch-memoir.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-patch-memoir.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-patch-memoir.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -752,6 +752,7 @@
 \renewcommand*{\shortsubcaption}{}
 \renewcommand*{\normalsubcaption}{}
 
+\AfterEndPreamble{%
 \RenewDocumentEnvironment{sidecaption}{o m o}
 {}
 {%
@@ -758,6 +759,7 @@
     \IfValueTF{#1}{\caption[#1]{#2}}{\caption{#2}}%
     \IfValueT{#3}{\label{#3}}%
 }
+}
 
 \renewcommand*{\setsidecaps}[2]{}
 \renewcommand*{\sidecapmargin}[1]{}

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-simplebnf.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-simplebnf.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-simplebnf.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -15,81 +15,35 @@
 %%   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{simplebnf}[2022/05/08]
+\LWR at ProvidesPackagePass{simplebnf}[2023-11-25]
 \ExplSyntaxOn
 
-\RenewDocumentEnvironment { bnfgrammar } { O{llcll} O{[^\|]\|[^\|]} O{\|\|} +b }
+\RenewDocumentEnvironment { bnf } { d() O{llcll} +b }
   {
-    \regex_gset:Nn \g_simplebnf_rhs_newline_r { #2 }
-    \regex_gset:Nn \g_simplebnf_rhs_nb_r { #3 }
+    \begin{lateximage}[bnf:\space\detokenize{#3}]%         lwarp
 
-    %% \l__input_seq is a list of term definitions.
-    \regex_split:nnN { ;; } { #4 } \l__input_seq
-    \begin{center}
-    \begin{lateximage}[#4]%     lwarp
-      \tl_set:Nn \l__table_tl
-        {
-          \begin{tabular}{#1}
-        }
+    \IfNoValueF { #1 }
+      { \keys_set:nn { simplebnf } { #1 } }
 
-    \bool_set_true:N \l_tmp_first_term % Is this the first term in this grammar?
-    \seq_map_inline:Nn \l__input_seq
-      {
-        %% If not-first, add newline
-        \bool_if:NTF \l_tmp_first_term
-          {
-            \bool_set_false:N \l_tmp_first_term
-          }
-          {
-            \tl_put_right:Nn \l__table_tl { \\ }
-          }
+    \__simplebnf_build_grammar:n { #3 }
 
-        \regex_split:nnNTF { ::= } { ##1 } \l__term_seq
-          % Parse a ::= definition
-          {
-            %% \l__term_seq    - (lhs, rhses)...
-            %% \l__term_tl     - lhs
-            %% \l__keypairs_tl - rhses
-            \seq_pop_left:NN \l__term_seq \l__term_tl
-            \seq_pop_left:NN \l__term_seq \l__keypairs_tl
+    \begin{@simplebnf_tblr_env}[expand=\l__simplebnf_table_tl]{#2}
+      \tl_use:N \l__simplebnf_table_tl
+    \end{@simplebnf_tblr_env}
+    \end{lateximage}%               lwarp
+  }
+  { }
 
-            \simplebnf_typeset_lhs:n{\l__term_tl}
-            \tl_put_right:Nn \l__table_tl
-              {
-                & \SimpleBNFDefEq &
-              }
-            %% \l__keypairs_seq - (rhs:annot | rhs)...
-            \regex_split:NVN \g_simplebnf_rhs_newline_r \l__keypairs_tl \l__keypairs_seq
-
-            \bool_set_true:N \l__first_rhs
-            \seq_map_function:NN \l__keypairs_seq \simplebnf_typeset_rhs:n
-          }
-          {
-            % Else, parse a \in declaration
-            \regex_split:nnNTF { \c{in} } { ##1 } \l__term_seq
-              {
-                %% \l__term_seq - (lhs, rhs)
-                \seq_pop_left:NN \l__term_seq \l_tmpa_tl
-
-                \simplebnf_typeset_lhs:n{\l_tmpa_tl}
-                \tl_put_right:Nn \l__table_tl
-                  {
-                    & $\in$ & $
-                  }
-                \seq_pop_left:NN \l__term_seq \l_tmpa_tl
-                \tl_put_right:NV \l__table_tl \l_tmpa_tl
-                \tl_put_right:Nn \l__table_tl
-                  {
-                    $ &
-                  }
-              }
-              { \msg_error:nn {simplebnf} { Could not parser ##1 } }
-          }
-      }
-
-    \tl_put_right:Nn \l__table_tl { \end{tabular} }
-    \tl_use:N \l__table_tl
-    \end{lateximage}%       lwarp
+\RenewDocumentEnvironment { bnfgrammar } { O{llcll} O{[^\|]\|[^\|]} O{\|\|} +b }
+  {
+    \msg_warning:nn { simplebnf } { dep }
+    \begin{center}
+      \begin{lateximage}[bnf:\space\detokenize{#4}]%       lwarp
+      \begin{tabular}{#1}
+        \@dep__simplebnf_typeset_grammar:nnn { #2 } { #3 } { #4 }
+        \tl_use:N \l__simplebnf_table_tl
+      \end{tabular}
+      \end{lateximage}%             lwarp
     \end{center}
   }
   { }

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-siunitx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-siunitx.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-siunitx.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -25,7 +25,7 @@
 
 \RequirePackage{xcolor}% for \convertcolorspec
 
-\LWR at ProvidesPackagePass{siunitx}[2022-02-15]
+\LWR at ProvidesPackagePass{siunitx}[2023-11-14]
 
 \ExplSyntaxOn
 
@@ -43,13 +43,14 @@
         {
             \tl_set:Nn \l__siunitx_number_outputted_tl
             {
+                \boolfalse{mathjax}%                    lwarp
                 \LWR at subsingledollar{%                  lwarp
-                    \textbackslash( % space
+                    \textbackslash( % space             lwarp ALT text
                     \LWR at HTMLsanitizedetokenized{%
                         \detokenize{#1}%
                     } \textbackslash)%                  lwarp
                 }%
-                {siunitx unparsed}%
+                {siunitx unparsed}%                     lwarp add'l hashing
                 {\ensuremath{#1}}%                      lwarp
             }
         }
@@ -61,62 +62,72 @@
     \tl_if_blank:nF {#1}
       { \seq_put_right:Nn \l__siunitx_compound_tmp_seq
         {
+            \boolfalse{mathjax}%                    lwarp
             \LWR at subsingledollar{%                  lwarp
-                \textbackslash( % space
+                \textbackslash( % space             lwarp ALT tag
                 \LWR at HTMLsanitizedetokenized{%
                     \detokenize{#1}%
                 } \textbackslash)%                  lwarp
             }%
-            {siunitx unparsed}%
+            {siunitx unparsed}%                     lwarp add'l hashing
             {\ensuremath{#1}}%                      lwarp
         }
       }
   }
+\LetLtxMacro\LWR at siunitx@orig at mathrm\mathrm
+
+\newcommand*{\LWR at siunitx@mathrm}[1]{%
+    \ifmmode{\LWR at siunitx@orig at mathrm{#1}}\else{#1}\fi%
+}
 \cs_set_protected:Npn \__siunitx_print_aux:nn #1#2
   {
-    \tl_if_empty:cTF { l__siunitx_print_ #1 _color_tl }
-      { \use:n }
-      { \exp_args:Nv \textcolor { l__siunitx_print_ #1 _color_tl } }
-        {
-            \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%      lwarp
+    \LetLtxMacro\mathrm\LWR at siunitx@mathrm%                 lwarp
+    \tl_if_empty:oF {#2}
+      {
+        \tl_if_empty:cTF { l__siunitx_print_ #1 _color_tl }
+          { \use:n }
+          { \exp_args:Nv \textcolor { l__siunitx_print_ #1 _color_tl } }
             {
-                \use:c
-                    {
-                    siunitx_print_
-                    \tl_use:c { l__siunitx_print_ #1 _mode_tl } :n
-                    }
-                    {#2}
-            }
-            {
-                \bool_lazy_all:nTF%     lwarp
-                    {
-                        {\l__siunitx_print_text_family_bool}
-                        {\l__siunitx_print_text_series_bool}
-                        {\l__siunitx_print_text_shape_bool}
-                    }
-                    {% No font control if reset-text-family/series/shape
-                        \use:c
-                            {
-                            siunitx_print_%                         lwarp
-                                text%                               lwarp
-                                :n%                                 lwarp
-                            }%                                      lwarp
-                            {#2}%                                   lwarp
-                    }
-                    {
-                        \LWR at textcurrentfont{%                      lwarp
+                \ifnumcomp{\value{LWR at lateximagedepth}}{>}{0}%      lwarp
+                {
+                    \use:c
+                        {
+                        siunitx_print_
+                        \tl_use:c { l__siunitx_print_ #1 _mode_tl } :n
+                        }
+                        {#2}
+                }
+                {
+                    \bool_lazy_all:nTF%     lwarp
+                        {
+                            {\l__siunitx_print_text_family_bool}
+                            {\l__siunitx_print_text_series_bool}
+                            {\l__siunitx_print_text_shape_bool}
+                        }
+                        {% No font control if reset-text-family/series/shape
                             \use:c
                                 {
-                                siunitx_print_%                     lwarp
-                                    text%                           lwarp
-                                    :n%                             lwarp
-                                }%                                  lwarp
-                                {#2}%                               lwarp
+                                siunitx_print_%                         lwarp
+                                    text%                               lwarp
+                                    :n%                                 lwarp
+                                }%                                      lwarp
+                                {#2}%                                   lwarp
                         }
-                    }
+                        {
+                            \LWR at textcurrentfont{%                      lwarp
+                                \use:c
+                                    {
+                                    siunitx_print_%                     lwarp
+                                        text%                           lwarp
+                                        :n%                             lwarp
+                                    }%                                  lwarp
+                                    {#2}%                               lwarp
+                            }
+                        }
+                }
             }
-        }
-  }
+    }
+}
 \newcommand*{\LWR at siunitx@complexrootstyle}{textrm}
 
 \newcommand*{\LWR at siunitx@complexrmi}{\mathrm{i}}
@@ -123,18 +134,18 @@
 \newcommand*{\LWR at siunitx@complexrmj}{\mathrm{j}}
 
 \newcommand*{\LWR at siunitx@setcomplexroot}{%
-    \renewcommand*{\LWR at siunitx@complexrootstyle}{textit}%
+    \renewcommand*{\LWR at siunitx@complexrootstyle}{ijit}%
     \ifdefequal{\l__siunitx_complex_output_root_tl}{\LWR at siunitx@complexrmi}%
-        {\renewcommand*{\LWR at siunitx@complexrootstyle}{textrm}}%
+        {\renewcommand*{\LWR at siunitx@complexrootstyle}{ijup}}%
         {}%
     \ifdefequal{\l__siunitx_complex_output_root_tl}{\LWR at siunitx@complexrmj}%
-        {\renewcommand*{\LWR at siunitx@complexrootstyle}{textrm}}%
+        {\renewcommand*{\LWR at siunitx@complexrootstyle}{ijup}}%
         {}%
 }
-\cs_set_protected:Npn \__siunitx_complex_format_auxii:n #1
+\cs_set_protected:Npn \__siunitx_complex_format_cartesian_auxii:n #1
   {
     \LWR at siunitx@setcomplexroot%                        lwarp
-    \__siunitx_complex_format_units:n {#1}
+    \__siunitx_complex_format_cartesian_units:n {#1}
     \tl_if_empty:NF \l__siunitx_complex_real_tl
       { \exp_after:wN \__siunitx_complex_drop_exponent:nnnnnnn \l__siunitx_complex_real_tl }
     \exp_after:wN \__siunitx_complex_format_sign:nnnnnnn \l__siunitx_complex_img_tl
@@ -307,13 +318,14 @@
             { \__siunitx_quantity_parsed:nn {#1} {#2} }
             {
               \tl_set:Nn \l__siunitx_quantity_number_tl {
+                \boolfalse{mathjax}%                    lwarp
                 \LWR at subsingledollar{%                  lwarp
-                    \textbackslash( % space
+                    \textbackslash( % space             lwaro ALT tag
                     \LWR at HTMLsanitizedetokenized{%
                         \detokenize{#1}%
                     } \textbackslash)%                  lwarp
                 }%
-                {siunitx unparsed}%
+                {siunitx unparsed}%                     lwarp add'l hashing
                 {\ensuremath{#1}}%                      lwarp
               }
               \siunitx_unit_format:nN {#2} \l__siunitx_quantity_unit_tl

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-tcolorbox.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-tcolorbox.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-tcolorbox.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -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{tcolorbox}[2023/02/12]
+\LWR at ProvidesPackagePass{tcolorbox}[2023/06/19]
 \newbool{LWR at havetcblower}
 \boolfalse{LWR at havetcblower}
 \newcommand{\LWR at tcolorbox@findcolors}{%

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-xcolor.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-xcolor.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp-xcolor.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -42,8 +42,8 @@
 \newcommand*{\LWR at currenttextcolorstyle}{%
     \LWR at findcurrenttextcolor%
     \ifdefstring{\LWR at tempcolor}{000000}%
-    {}%
-    {color: \LWR at origpound\LWR at tempcolor ; }%
+        {}%
+        {color: \LWR at origpound\LWR at tempcolor ; }%
 }
 \DeclareDocumentCommand{\LWR at textcurrentcolor}{m}{%
     \begingroup%
@@ -227,58 +227,6 @@
 }
 
 \LWR at formatted{boxframe}
-\newcommand*{\LWR at xcolortempcolor}{}
-
-\def\rowc at l@rs[#1]#2#3#4%
-{%
-   \rownum=1%
-   \@rowcolorstrue%
-   \@ifxempty{#3}%
-     {\def\@oddrowcolor{\@norowcolor}}%
-     {%
-        \convertcolorspec{named}{#3}{HTML}\LWR at xcolortempcolor%
-        \edef\@oddrowcolor{%
-            \csdef{LWR at xcolorrowHTMLcolor}{\LWR at xcolortempcolor}%
-        }%
-     }%
-   \@ifxempty{#4}%
-     {\def\@evenrowcolor{\@norowcolor}}%
-     {%
-        \convertcolorspec{named}{#4}{HTML}\LWR at xcolortempcolor%
-        \edef\@evenrowcolor{%
-            \csdef{LWR at xcolorrowHTMLcolor}{\LWR at xcolortempcolor}%
-        }%
-     }%
-   \if at rowcmd
-     \def\@rowcolors
-     {%
-        \if at rowcolors
-            \relax\ifnum\rownum<#2\@norowcolor\else
-            \ifodd\rownum\@oddrowcolor\else\@evenrowcolor\fi\fi%
-        \fi%
-     }%
-   \else
-     \def\@rowcolors
-     {%
-        \if at rowcolors
-            \ifnum\rownum<#2%
-                \@norowcolor
-            \else
-                \ifodd\rownum\@oddrowcolor\else\@evenrowcolor\fi%
-            \fi
-        \fi%
-     }%
-   \fi
-   \ignorespaces%
-}
-\def\@norowcolor{%
-    \renewcommand{\LWR at xcolorrowHTMLcolor}{}%
-}
-
-\def\@rowc at lors{%
-        \advance\rownum\@ne%
-    \@rowcolors%
-}
 \endinput
 %%
 %% End of file `lwarp-xcolor.sty'.

Modified: trunk/Master/texmf-dist/tex/latex/lwarp/lwarp.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/lwarp/lwarp.sty	2024-01-05 21:42:07 UTC (rev 69304)
+++ trunk/Master/texmf-dist/tex/latex/lwarp/lwarp.sty	2024-01-05 21:42:36 UTC (rev 69305)
@@ -17,7 +17,7 @@
 %% version 2005/12/01 or later.
 \NeedsTeXFormat{LaTeX2e}[1999/12/01]
 \ProvidesPackage{lwarp}
-    [2023/08/28 v0.912  Allows LaTeX to directly produce HTML5 output.]
+    [2024/01/05 v0.913  Allows LaTeX to directly produce HTML5 output.]
 
 
 
@@ -28,7 +28,7 @@
 
 \RequirePackage{iftex}[2019/11/07]
 \RequirePackage{ifpdf}
-\RequirePackage{ifptex}
+\RequirePackage{ifptex}% in case TL2019 or earlier
 
 \newif\ifxetexorluatex
 
@@ -299,6 +299,7 @@
 \LWR at loadafter{anonchap}
 \LWR at loadafter{anysize}
 \LWR at notmemoirloadafter{appendix}
+\LWR at loadafter{apxproof}
 \LWR at loadafter{ar}
 \LWR at loadafter{arabicfront}
 \LWR at notmemoirloadafter{array}
@@ -380,6 +381,7 @@
 \LWR at loadafter{decorule}
 \LWR at loadafter{diagbox}
 \LWR at loadafter{dingbat}
+\LWR at loadafter{doipubmed}
 \LWR at loadafter{DotArrow}
 \LWR at loadafter{dotlessi}
 \LWR at loadafter{dprogress}
@@ -821,7 +823,9 @@
             or \protect\mdfivesum.%
         }
 }
-\let\LWR at mdfive\pdfmdfivesum
+\ifdef{\pdfmdfivesum}
+    {\let\LWR at mdfive\pdfmdfivesum}
+    {}
 \ifLuaTeX
 \RequirePackage{pdftexcmds}
 \let\LWR at mdfive\pdf at mdfivesum
@@ -981,7 +985,7 @@
 \setcounter{LWR at texboxdepth}{0}
 \newcommand*{\LWR at maybe@orignewpage}{%
     \LWR at traceinfo{LWR at maybe@orignewpage}%
-    \ifnumgreater{\value{LWR at texboxdepth}}{0}
+    \ifnumgreater{\value{LWR at texboxdepth}}{0}%
         {}%
         {\LWR at orignewpage}%
     \LWR at traceinfo{LWR at maybe@orignewpage done}%
@@ -2059,7 +2063,8 @@
 
 \chardef\LWR at origpound=`\#
 \let\LWR at origcomma\,
-\let\LWR at origtilde~
+\LetLtxMacro\LWR at origtilde~
+\LetLtxMacro\LWR at orignobreakspace\nobreakspace
 \let\LWR at orighfil\hfil
 \let\LWR at orighss\hss
 \let\LWR at origllap\llap
@@ -2512,6 +2517,10 @@
     font-variant-numeric: normal ;
 }
 
+/* For complex number i,j symbols */
+span.ijit {font-style: italic; font-variant: normal}
+span.ijup {font-style: normal; font-variant: normal}
+
 span.textsc, div.textsc {
     font-variant: small-caps;
     font-variant-numeric: oldstyle-nums ;
@@ -3066,8 +3075,10 @@
 }
 
 .fancyvrb {
-    font-size:.85em ;
-    margin: 3ex 0pt 3ex 0pt
+    margin: 3ex 0pt 3ex 0pt ;
+    font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
+        "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
+        "Courier New", monospace;
 }
 
 .fancyvrblabel {
@@ -3605,7 +3616,7 @@
     font-size: .85em ;
 }
 
-span.verbatim {
+span.verbatim, span.verb {
     font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
         "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
         "Courier New", monospace;
@@ -4868,9 +4879,9 @@
 \begin{filecontents*}[overwrite]{lwarpmk.lua}
 #!/usr/bin/env texlua
 
--- Copyright 2016-2023 Brian Dunn
+-- Copyright 2016-2024 Brian Dunn
 
-printversion = "v0.912"
+printversion = "v0.913"
 requiredconfversion = "2" -- also at *lwarpmk.conf
 
 function printhelp ()
@@ -7046,7 +7057,7 @@
     }%
     \@makefntext{#1}%
     \ifbool{LWR at spewingnotes}{}{%
-        \LWR at origtilde\LWR at orignewline%
+        \LWR at orignobreakspace\LWR at orignewline%
         \LWR at htmltagc{/\LWR at tagregularparagraph}%
         \LWR at orignewline%
     }%
@@ -7389,29 +7400,70 @@
 }
 \egroup
 
+\newbool{LWR at HTMLsanitize@tmpb at enable}
+\booltrue{LWR at HTMLsanitize@tmpb at enable}
+
+\newbool{LWR at HTMLsanitize@tmpb at removebackslash}
+\booltrue{LWR at HTMLsanitize@tmpb at removebackslash}
+
 \newbool{LWR at MathJax@silentquotes}
 \boolfalse{LWR at MathJax@silentquotes}
 
+\catcode`\&=12
+\newcommand*{\LWR at HTMLsanitize@tmpb}{%
+    \ifbool{LWR at HTMLsanitize@tmpb at enable}%
+    {%
+        \LWR at replacestrings{&}{&}% must be first because & is used for lt, gt, etc.
+        \LWR at replacestrings{<}{<}%
+        \LWR at replacestrings{>}{>}%
+        \LWR at replacestrings{'}{'}%
+        \LWR at replacestrings{`}{`}%
+        \LWR at replacestrings{_}{\detokenize{_}}%
+        \ifbool{LWR at HTMLsanitize@tmpb at removebackslash}%
+        {%
+            \def\@tempa{\LWR at replacestrings}%
+            \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\detokenize{\#}}}%
+            \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\LWRhash}}%
+            \@tempa%
+            \def\@tempa{\LWR at replacestrings}%
+            \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\detokenize{\%}}}%
+            \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\LWRpercent}}%
+            \@tempa%
+            \def\@tempa{\LWR at replacestrings}%
+            \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\detokenize{\&}}}%
+            \expandafter\appto\expandafter\@tempa\expandafter{\expandafter{\LWRamp}}%
+            \@tempa%
+        }%
+        {}%
+        \ifbool{LWR at MathJax@silentquotes}
+            {%
+                \expandafter\LWR at replacestrings\expandafter{\LWRbackslash"}{}%
+                \LWR at replacestrings{"}{}%
+            }%
+            {\LWR at replacestrings{"}{"}}%
+    }% enabled
+    {}% not enabled
+}
+\catcode`\&=4
+
+\newcommand{\LWR at HTMLsanitize@use at tmpb}[1]{%
+    \ifbool{LWR at HTMLsanitize@tmpb at enable}%
+        {%
+            \def\tmpb{#1}%
+            \LWR at HTMLsanitize@tmpb%
+            \tmpb%
+        }%
+        {#1}%
+}
+
 \catcode`\#=12
-\catcode`\&=12
 \newcommand{\LWR at subHTMLsanitize}{%
     \edef\tmpb{\detokenize\expandafter{\LWR at strresult}}%
-    \LWR at replacestrings{&}{&}%
-    \LWR at replacestrings{<}{<}%
-    \LWR at replacestrings{>}{>}%
-    \ifbool{LWR at MathJax@silentquotes}
-        {%
-            \expandafter\LWR at replacestrings\expandafter{\LWRbackslash"}{}%
-            \LWR at replacestrings{"}{}%
-        }%
-        {\LWR at replacestrings{"}{"}}%
-    \LWR at replacestrings{'}{'}%
-    \LWR at replacestrings{`}{`}%
+    \LWR at HTMLsanitize@tmpb%
     \LWR at replacestrings{##}{#}%
     \edef\LWR at strresult{\detokenize\expandafter{\tmpb}}%
 }
 \catcode`\#=6
-\catcode`\&=4
 
 \newrobustcmd{\LWR at HTMLsanitizedetokenized}[1]{%
     \LWR at traceinfo{LWR at HTMLsanitizedetokenized !#1!}%
@@ -7456,6 +7508,7 @@
 \newcommand*{\LWR at subcustomizedmathjax}[1]{%
     \begingroup%
     \LWR at hook@processingtags%
+    \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
     \edef\LWR at strresult{\detokenize{#1}}%
     \LWR at subHTMLsanitize%
     \xdef\LWR at customizedMathJax{%
@@ -8158,6 +8211,7 @@
     \begingroup%
     \LWR at restoreoriglists%
     \boolfalse{LWR at verbtags}%
+    \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
         \IfFileExists{\LWR at mathjaxfilename}%
             {\verbatiminput{\LWR at mathjaxfilename}}%
             {%
@@ -8169,7 +8223,6 @@
                     }%
                     {Specify an existing file, or remove \protect\MathJaxFilename.}%
             }%
-    \booltrue{LWR at verbtags}%
     \endgroup%
     \LWR at stoppars%
 }% end of mathjax
@@ -8284,7 +8337,7 @@
 \LWR at stoppars
 \LWR at closeprevious{finished}
 \LWR at printpendingfootnotes
-\label{\BaseJobname-autofile-last}\LWR at origtilde\LWR at orignewline
+\label{\BaseJobname-autofile-last}\LWR at orignobreakspace\LWR at orignewline
 \LWR at htmlelementclassend{section}{textbody}
 \LWR at htmlelementclassend{main}{bodycontainer}
 \LWR at htmlelementclassend{div}{bodyandsidetoc}
@@ -8675,6 +8728,14 @@
 
 \begin{warpHTML}
 
+\ifxetexorluatex
+
+\newcommand*{\LWR at HTML@@setupverbvisiblespace}{\let\@xobeysp\textvisiblespace}
+
+\LWR at formatted{@setupverbvisiblespace}
+
+\fi
+
 \newbool{LWR at verbtags}
 \booltrue{LWR at verbtags}
 
@@ -8682,13 +8743,17 @@
 
 \def\LWR at verb@egroup at endspan{%
     \LWR at orig@verb at egroup%
-    \LWR at htmltag{/span}%
+    \ifbool{LWR at verbtags}%
+        {\LWR at htmltag{/span}}%
+        {}%
     \endgroup%
 }
 \xpretocmd{\verb}
     {%
         \begingroup%
-        \LWR at htmltag{span class=\textquotedbl{}texttt\textquotedbl}%
+        \ifbool{LWR at verbtags}%
+            {\LWR at htmltag{span class=\textquotedbl{}verb\textquotedbl}}%
+            {}%
         \let\verb at egroup\LWR at verb@egroup at endspan%
     }
     {}
@@ -8701,25 +8766,38 @@
 \setlength{\topsep}{0pt}%
 \setlength{\partopsep}{0pt}%
             \hbadness=10000\relax%
-\ifbool{LWR at verbtags}{%
-    \LWR at htmltag{pre class=\textquotedbl#2\textquotedbl%
-        \ifthenelse{\equal{#1}{}}{}{ style=\textquotedbl#1\textquotedbl}%
+\ifbool{LWR at verbtags}%
+{%
+    \ifnumcomp{\value{LWR at spandepth}}{=}{0}{%
+        \LWR at htmltag{pre class=\textquotedbl#2\textquotedbl%
+            \ifthenelse{\equal{#1}{}}{}{ style=\textquotedbl#1\textquotedbl}%
+        }%
+        \par%
     }%
-    \par%
+    {% in a span
+        \LWR at spanwarnformat{verbatim}%
+    }%
 }{}%
 \begingroup%
 \LWR at print@normalfont%
 \LWR at origttfamily%
-\LWR at print@scriptsize%
+\ifnumcomp{\value{LWR at lateximagedepth}}{=}{0}%
+    {\LWR at print@scriptsize}%
+    {}%
 \LWR at restoreoriglists%
 \LWR at hook@processingtags%
 \let\hspace\LWR at print@hspace%
+\boolfalse{LWR at HTMLsanitize@nobreakspace}%
 }
 
 \newcommand*{\LWR at afterendverbatim}{%
 \endgroup%
 \par%
-\ifbool{LWR at verbtags}{%
+\ifboolexpr{
+    bool{LWR at verbtags} and
+    test {\ifnumcomp{\value{LWR at spandepth}}{=}{0}}
+}%
+{%
     \noindent\LWR at htmltag{/pre}\par% pre
 }{}%
 \LWR at startpars%
@@ -8775,7 +8853,8 @@
     \let\enskip\LWR at print@enskip%
     \let\quad\LWR at print@quad%
     \let\qquad\LWR at print@qquad%
-    \let~\LWR at origtilde%
+    \LetLtxMacro~\LWR at origtilde%
+    \LetLtxMacro\nobreakspace\LWR at orignobreakspace%
     \let\,\LWR at origcomma%
     \let\thinspace\LWR at print@thinspace%
     \let\negthinspace\LWR at print@negthinspace%
@@ -9919,7 +9998,7 @@
     }%
     \ifdimcomp{\LWR at templengthone}{>}{0pt}%
         {%
-            \LWR at origtilde tdrule#1#2%
+            \space tdrule#1#2%
             \setlength{\LWR at thiscmidrulewidth}{\LWR at templengthone}%
         }%
         {%
@@ -11099,9 +11178,14 @@
 
 \LetLtxMacro\Nameref\nameref
 
+\def\NR at gettitle#1{%
+  \GetTitleString{#1}%
+  \let\@currentlabelname\GetTitleStringResult
+}
 
 
 
+
 \AtBeginDocument{
     \def\@currentHref{\BaseJobname-autopage-\theLWR at previousautopagelabel}%
 }
@@ -11125,15 +11209,24 @@
 
 \NewDocumentCommand{\LWR at subhyperref}{m}{%
     \LWR at traceinfo{LWR at subhyperref !#1!}%
-    \LWR at sanitize{#1}%
+    \edef\tmpb{\detokenize\expandafter{#1}}%
+    \LWR at HTMLsanitize@tmpb%
     \LWR at htmltag{%
-        a href=\textquotedbl\LWR at sanitized\textquotedbl\ % space
+        a href=\textquotedbl\tmpb\textquotedbl\ % space
         \LWR at addlinktitle % space
         target=\textquotedbl\_{}blank\textquotedbl\ % space
     }%
 }
 
-\newcommand{\LWR at subhyperreftext}[1]{%
+\newcommand{\LWR at subhyperreftext@sanitized}[1]{%
+    \edef\tmpb{#1}%
+    \LWR at HTMLsanitize@tmpb%
+    \tmpb%
+    \LWR at htmltag{/a}%
+    \LWR at ensuredoingapar%
+}
+
+\newcommand{\LWR at subhyperreftext@unsanitized}[1]{%
     #1%
     \LWR at htmltag{/a}%
     \LWR at ensuredoingapar%
@@ -11155,7 +11248,7 @@
     \LWR at ensuredoingapar%
     \LWR at subhyperref{#2}%
     \endgroup% restore catcodes
-    \LWR at subhyperreftext%
+    \LWR at subhyperreftext@unsanitized% takes the following text as an argument
 }
 
 \newrobustcmd*{\LWR at href}{%
@@ -11164,11 +11257,37 @@
     \LWR at hrefb%
 }
 
+\DeclareDocumentCommand{\LWR at hrefb@sanitized}{O{} m}{%
+    \LWR at ensuredoingapar%
+    \LWR at subhyperref{#2}%
+    \endgroup% restore catcodes
+    \LWR at subhyperreftext@sanitized% takes the following text as an argument
+}
+
+\newrobustcmd*{\LWR at href@sanitized}{%
+    \begingroup%
+    \LWR at linkcatcodes%
+    \LWR at hrefb@sanitized%
+}
+
+\DeclareDocumentCommand{\LWR at hrefb@partsanitized}{O{} m}{%
+    \LWR at ensuredoingapar%
+    \LWR at subhyperref{#2}%
+    \endgroup% restore catcodes
+    \LWR at subhyperreftext@unsanitized% takes the following text as an argument
+}
+
+\newrobustcmd*{\LWR at href@partsanitized}{%
+    \begingroup%
+    \LWR at linkcatcodes%
+    \LWR at hrefb@partsanitized%
+}
+
 \newcommand*{\LWR at nolinkurlb}[1]{%
     \LWR at ensuredoingapar%
-    \def\LWR at templink{#1}%
-    \@onelevel at sanitize\LWR at templink%
-    \LWR at templink%
+    \edef\tmpb{#1}%
+    \LWR at HTMLsanitize@tmpb%
+    \tmpb%
     \endgroup%
 }
 
@@ -11180,9 +11299,7 @@
 
 \DeclareDocumentCommand{\LWR at urlb}{m}{%
     \LWR at ensuredoingapar%
-    \def\LWR at templink{#1}%
-    \@onelevel at sanitize\LWR at templink%
-    \LWR at href{\LWR at templink}{\LWR at templink}%
+    \LWR at href@sanitized{#1}{#1}%
     \endgroup%
 }
 
@@ -11193,6 +11310,8 @@
 }
 
 \newcommand*{\LWR at subinlineimage}[6]{%
+    \begingroup%
+    \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
     \ifblank{#6}%
         {\renewcommand*{\LWR at tempone}{}}%
         {\renewcommand*{\LWR at tempone}{role="#6"\LWR at indentHTML}}%
@@ -11215,6 +11334,7 @@
             class=\textquotedbl#2\textquotedbl \LWR at orignewline
         }%
     }%
+    \endgroup%
 }
 
 \end{warpHTML}
@@ -12065,7 +12185,8 @@
     \let\sp\LWR at origsp%
     \let\sb\LWR at origsb%
     \LetLtxMacro\underline\LWR at origunderline%
-    \let~\LWR at origtilde%
+    \LetLtxMacro~\LWR at origtilde%
+    \LetLtxMacro\nobreakspace\LWR at orignobreakspace%
     \LetLtxMacro\endtabular\LWR at origendtabular%
     \csletcs{endtabular*}{LWR at origendtabular*}%
     \LetLtxMacro\noalign\LWR at orignoalign%
@@ -12497,6 +12618,7 @@
         {%
             \LWR at traceinfo{LWR at subsingledollar: Mathjax}%
             {%
+                \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
                 \textbackslash(%
                 {%
                     \ifmmode\else\LWR at print@ttfamily\fi%
@@ -12534,9 +12656,11 @@
     \ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
     {% intentional blank line:
 
+        \begingroup%
         \IfSubStr{\detokenize\expandafter{#1}}{\detokenize{note}}{%
             \LWR at hidelatexequation{math}{#1}%
             \InlineClass{hidden}{\LWR at syncnotenumbers}%
+            \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
             \textbackslash[%
             {%
                 \LWR at print@ttfamily%
@@ -12544,7 +12668,9 @@
             }%
             \textbackslash]
             \InlineClass{hidden}{\LWR at syncnotenames}%
-        }{%
+        }% yes note
+        {% no note
+            \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
             \textbackslash[%
             {%
                 \LWR at print@ttfamily%
@@ -12551,7 +12677,8 @@
                 \LWR at HTMLsanitizedetokenized{\detokenize{#1}}%
             }%
             \textbackslash]
-        }%
+        }% no note
+        \endgroup%
 
     }% mathjax
     {% not mathjax
@@ -12576,6 +12703,8 @@
 \protected\gdef\LWR at singledollar#1${%
     \LWR at traceinfo{LWR at singledollar}%
     \ifbool{mathjax}{%
+        \begingroup%
+        \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
         \LWR at subsingledollar*%
         {% alt tag
             \textbackslash( %
@@ -12584,6 +12713,7 @@
         }%
         {singledollar}% add'l hashing
         {#1}% contents
+        \endgroup%
     }{% not mathjax
         \LWR at subsingledollar*%
         {% alt tag
@@ -12612,6 +12742,8 @@
 
 \renewcommand{\@ensuredmath}[1]{%
     \ifbool{mathjax}{%
+        \begingroup%
+        \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
         \LWR at subsingledollar*{\AltTextOpen\MathImageAltText\AltTextClose}%
         {%
             \protect\LWR at HTMLsanitizedetokenized{\detokenize\expandafter{#1}}%
@@ -12620,6 +12752,7 @@
             \relax%
             \LWR at origensuredmath{#1}%
         }%
+        \endgroup%
     }{% SVG math
         \ifmmode%
             \LWR at origensuredmath{#1}%
@@ -12753,7 +12886,7 @@
 }
 
 \NewDocumentCommand{\LWR at addmathjax}{m +m}{%
-    \LWR at origtilde\LWR at orignewline
+    \LWR at orignobreakspace\LWR at orignewline
     {%
         \LWR at print@ttfamily%
         \textbackslash{}begin\{#1\}
@@ -12765,6 +12898,7 @@
             {\{\arabic{LWR at maxfields@}\}}%
             {}%
         \LWR at orignewline%
+        \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
         \LWR at HTMLsanitizeexpanded{\detokenize\expandafter{#2}}%
         \LWR at orignewline%
         \textbackslash{}end\{#1\}
@@ -12922,7 +13056,7 @@
 
 \newcommand*{\LWR at beginhideamsmath}{
     \LWR at stoppars
-    \LWR at origtilde\LWR at orignewline
+    \LWR at orignobreakspace\LWR at orignewline
     \LWR at htmlopencomment
 
     \begingroup
@@ -12950,6 +13084,7 @@
     {%
         \LWR at syncmathjax%
         \boolfalse{LWR at amsmultline}%
+        \boolfalse{LWR at HTMLsanitize@tmpb at removebackslash}%
         \ifbool{LWR at numbereqnarray}%
         {%
             \LWR at beginhideamsmath%
@@ -13128,6 +13263,8 @@
     \addtocounter{LWR at lateximagenumber}{1}%
     \LWR at traceinfo{lateximage: LWR at lateximagenumber is \arabic{LWR at lateximagenumber}}%
     \boolfalse{mathjax}%
+    \boolfalse{LWR at verbtags}%
+    \boolfalse{LWR at HTMLsanitize@tmpb at enable}%
     \LWR at ensuredoingapar%
     \hbadness=10000\relax%
     \addtocounter{LWR at externalfilecnt}{1}%
@@ -14121,9 +14258,9 @@
                 {\InlineClass{textnormal}{#1}}%
                 {%
                     \InlineClass{%
-                            text\LWR at f@family\LWR at origtilde{}%
-                            text\LWR at f@series\LWR at origtilde{}%
-                            text\LWR at f@shape\LWR at origtilde{}%
+                            text\LWR at f@family\LWR at orignobreakspace{}%
+                            text\LWR at f@series\LWR at orignobreakspace{}%
+                            text\LWR at f@shape\LWR at orignobreakspace{}%
                             text\LWR at f@shapecaps%
                         }%
                         {#1}%
@@ -14135,9 +14272,9 @@
 \newenvironment*{LWR at blocktextcurrentfont}{%
 \LWR at stoppars%
 \BlockClass{%
-        text\LWR at f@family\LWR at origtilde{}%
-        text\LWR at f@series\LWR at origtilde{}%
-        text\LWR at f@shape\LWR at origtilde{}%
+        text\LWR at f@family\LWR at orignobreakspace{}%
+        text\LWR at f@series\LWR at orignobreakspace{}%
+        text\LWR at f@shape\LWR at orignobreakspace{}%
         text\LWR at f@shapecaps%
     }%
 }{\endBlockClass\LWR at startpars}
@@ -14318,6 +14455,8 @@
 
 
 \begin{warpHTML}
+\newbool{LWR at HTMLsanitize@nobreakspace}
+\booltrue{LWR at HTMLsanitize@nobreakspace}
 \AtBeginDocument{%
 \renewrobustcmd*{\,}{\HTMLunicode{202f}}% HTML thin non-breakable space, not using LWR at formatted
 \newrobustcmd*{\LWR at HTML@thinspace}{\HTMLunicode{202f}}% HTML thin non-breakable space
@@ -14324,12 +14463,19 @@
 \LWR at formatted{thinspace}
 \newrobustcmd*{\LWR at HTML@negthinspace}{\HTMLunicode{202f}}    % HTML thin non-breakable space
 \LWR at formatted{negthinspace}
-\renewrobustcmd*{~}{\HTMLentity{nbsp}}% cannot use \LWR at formatted
+\renewrobustcmd*{~}{%
+    \ifbool{LWR at HTMLsanitize@nobreakspace}%
+        {\leavevmode\nobreak\HTMLentity{nbsp}}%
+        {\LWR at orignobreakspace}%
+}
+
+\LetLtxMacro\nobreakspace~
+\expandafter\LetLtxMacro\csname ?-\string\nobreakspace\endcsname~
 \newrobustcmd*{\LWR at HTML@textellipsis}{\HTMLunicode{2026}}
 \LWR at formatted{textellipsis}
 \newrobustcmd*{\LWR at HTML@vdots}{\HTMLunicode{22EE}}
 \LWR at formatted{vdots}
-}
+}% AtBeginDocument
 \newcommand*{\LWR at font@size}{normalsize}
 
 \newrobustcmd*{\LWR at HTML@normalsize}{\renewcommand*{\LWR at font@size}{normalsize}}



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